DirextX11でガンマ補正を扱う方法は沢山資料がありますが、
DirectX9でガンマ補正を扱う方法は資料がありませんでした。
普通使うことはないですが、今回使用する機会があったので実装方法を説明します。
- ガンマ補正済みのテクスチャから逆ガンマ補正をして画素を読みだす方法
(device)->SetSamplerState(0, D3DSAMP_SRGBTEXTURE, TRUE);
サンプラーステートのD3DSAMP_SRGBTEXTUREにTRUEを指定するだけです。
ただ、ハードウェアとテクスチャのフォーマットが逆ガンマ補正に対応している必要があります。
- ガンマ補正をして画面に表示する方法
IDirect3DSwapChain9* swapChain = nullptr;
(device)->GetSwapChain(0, &swapChain);
swapChain->Present(nullptr, nullptr, nullptr, nullptr, D3DPRESENT_LINEAR_CONTENT);
SAFE_RELEASE(swapChain);
swapChainをデバイスから取得して、Presentするときにフラグを指定します。
これもハードウェアが対応している必要があります。
- まとめ
DirectX9でも簡単にガンマ補正を扱えました。
方法自体は簡単ですが、DirectX9世代でガンマ補正を扱うメリットが殆どないので
資料がほとんどなかったです。