Commit 54f4ed0a authored by hybrid's avatar hybrid

Add some Caps checks and implement color mask for MRTs.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2812 dfc29bdd-3216-0410-991c-e03cc46cb475
parent e5271f7f
...@@ -628,7 +628,11 @@ bool CD3D9Driver::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const ...@@ -628,7 +628,11 @@ bool CD3D9Driver::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const
case EVDF_COLOR_MASK: case EVDF_COLOR_MASK:
return (Caps.PrimitiveMiscCaps & D3DPMISCCAPS_COLORWRITEENABLE) != 0; return (Caps.PrimitiveMiscCaps & D3DPMISCCAPS_COLORWRITEENABLE) != 0;
case EVDF_MULTIPLE_RENDER_TARGETS: case EVDF_MULTIPLE_RENDER_TARGETS:
return true; return Caps.NumSimultaneousRTs > 1;
case EVDF_MRT_COLOR_MASK:
return (Caps.PrimitiveMiscCaps & D3DPMISCCAPS_INDEPENDENTWRITEMASKS) != 0;
case EVDF_MRT_BLEND:
return (Caps.PrimitiveMiscCaps & D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING) != 0;
default: default:
return false; return false;
}; };
...@@ -896,6 +900,7 @@ bool CD3D9Driver::setRenderTarget(const core::array<video::IRenderTarget>& targe ...@@ -896,6 +900,7 @@ bool CD3D9Driver::setRenderTarget(const core::array<video::IRenderTarget>& targe
// set new render target // set new render target
D3DRENDERSTATETYPE colorWrite[4]={D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2, D3DRS_COLORWRITEENABLE3};
for (u32 i = 0; i < maxMultipleRTTs; ++i) for (u32 i = 0; i < maxMultipleRTTs; ++i)
{ {
if (FAILED(pID3DDevice->SetRenderTarget(i, static_cast<CD3D9Texture*>(targets[i].RenderTexture)->getRenderTargetSurface()))) if (FAILED(pID3DDevice->SetRenderTarget(i, static_cast<CD3D9Texture*>(targets[i].RenderTexture)->getRenderTargetSurface())))
...@@ -903,6 +908,15 @@ bool CD3D9Driver::setRenderTarget(const core::array<video::IRenderTarget>& targe ...@@ -903,6 +908,15 @@ bool CD3D9Driver::setRenderTarget(const core::array<video::IRenderTarget>& targe
os::Printer::log("Error: Could not set render target.", ELL_ERROR); os::Printer::log("Error: Could not set render target.", ELL_ERROR);
return false; return false;
} }
if (i<4 && (i==0 || queryFeature(EVDF_MRT_COLOR_MASK)))
{
const DWORD flag =
((targets[i].ColorMask & ECP_RED)?D3DCOLORWRITEENABLE_RED:0) |
((targets[i].ColorMask & ECP_GREEN)?D3DCOLORWRITEENABLE_GREEN:0) |
((targets[i].ColorMask & ECP_BLUE)?D3DCOLORWRITEENABLE_BLUE:0) |
((targets[i].ColorMask & ECP_ALPHA)?D3DCOLORWRITEENABLE_ALPHA:0);
pID3DDevice->SetRenderState(colorWrite[i], flag);
}
} }
CurrentRendertargetSize = tex->getSize(); CurrentRendertargetSize = tex->getSize();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment