0
我正在处理遗留系统,所以着色器不是一个选项。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,但我从来没有完全达到它看起来一样的地步,就好像它没有渲染到纹理一样 - 半透明无论我尝试什么,区域要么变黑或变亮。