AlphaBlend

公開:2012-02-15 07:07
更新:2020-02-15 04:37
カテゴリ:directx,dxgi,gdi,レイヤードウィンドウ,windows,c++,windows api

AlphaBlendはWindows2000からあるAPIである。Window7 & WDDM 1.1ドライバであればこのAPIは高速化されることが義務付けられている。でもどの程度高速化されるのかはハードウェア次第だと思うけれど。

昔DirectDrawというのがあって、画面転送を高速に行うためのBltとかBltFastとかいうAPIがあった。これはビットマップを高速に転送するAPIでカラーキーによる透過色転送はサポートしていたけれど、アルファブレンドは結局実装されずに終わってしまったと覚えている。2DゲームでもきちんとしたアルファブレンドをしたいのであればDirect3Dを使うしか無かったのである。

しかしこのAlphaBlendというAPIを使えば簡単に半透明・透過転送が行えるしハードウェアアクセラレーションもかかるようなので、2Dゲームのスプライト処理はこのAPIでも充分使い物になるものが作れるかもしれない。まあでも今さらGDIもないか。。

昔はメモリ<-->VRAM(GPUメモリ)の転送はCPUで行なっていたけれど今はどうなのだろうね。VRAM<-->VRAM間だとおそらくアクセラレーションはかかるのだろうけれど、GDIでビデオメモリにバックアップバッファを作れるAPIってあるのだろうかと思うとなかったような気がする。そうすると結局AlphaBlend APIもアクセラレーションの恩恵を受けられないような気もするが、どうなのだろう。よくわからんな。。

DXGIサーフェースやテクスチャをGetDCしてAlphaBlendするとこれはビデオメモリ間の転送になりそうで、HWアクセラレーションがかかりそうな感じだね。