私はここでレガシーシステムを扱っているので、シェーダはオプションではありません。OpenGL相当のDirectXレンダリング
私が修正する必要があるコードには、ディスプレイの大部分がテクスチャにレンダリングされ、そのテクスチャがスクリーンに描画されるレンダリングパイプラインがあります。最初の場所で決してテクスチャにレンダリングされなかったかのように正確に見えることが期待されます。
それは、この関数を呼び出すことにより、DirectXの中でこれを実現:
void RenderTargetChanged(bool isRenderToTexture)
{
if (!isRenderToTexture)
{
gDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE,FALSE);
}
else
{
gDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SRCBLENDALPHA, D3DBLEND_ONE);
gDevice->SetRenderState(D3DRS_DESTBLENDALPHA, D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, TRUE);
}
}
(、二つのブランチ間の唯一の違いはD3DRS_SRCBLENDALPHAとD3DRS_SEPERATEALPHABLENDENABLEの値注意事項です)
のOpenGL同等とは何ですか?
私はさまざまな組み合わせを試してみると夢中になってきました。私はCLOSEを得ることができましたが、最初はテクスチャがレンダリングされていないかのように見えます私が何をしようと、暗くなったり明るくなったりする。