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,但我從來沒有完全達到它看起來一樣的地步,就好像它沒有渲染到紋理一樣 - 半透明無論我嘗試什麼,區域要麼變黑或變亮。