浏览代码

d3d11 clear RTV fix

Tim Barnes 6 年之前
父节点
当前提交
5ef8cc912d
共有 1 个文件被更改,包括 13 次插入4 次删除
  1. 13 4
      Engine/source/gfx/D3D11/gfxD3D11Device.cpp

+ 13 - 4
Engine/source/gfx/D3D11/gfxD3D11Device.cpp

@@ -940,15 +940,22 @@ void GFXD3D11Device::clear(U32 flags, const LinearColorF& color, F32 z, U32 sten
 
    UINT depthstencilFlag = 0;
 
-   ID3D11RenderTargetView* rtView = NULL;
+   //TODO: current support is 5 render targets, clean this up
+   ID3D11RenderTargetView* rtView[5] = { NULL };
    ID3D11DepthStencilView* dsView = NULL;
 
-   mD3DDeviceContext->OMGetRenderTargets(1, &rtView, &dsView);
+   mD3DDeviceContext->OMGetRenderTargets(5, rtView, &dsView);
 
    const FLOAT clearColor[4] = { color.red, color.green, color.blue, color.alpha };
 
    if (flags & GFXClearTarget && rtView)
-      mD3DDeviceContext->ClearRenderTargetView(rtView, clearColor);
+   {
+      for (U32 i = 0; i < 5; i++)
+      {
+         if(rtView[i])
+            mD3DDeviceContext->ClearRenderTargetView(rtView[i], clearColor);
+      }
+   }
 
    if (flags & GFXClearZBuffer)
       depthstencilFlag |= D3D11_CLEAR_DEPTH;
@@ -959,7 +966,9 @@ void GFXD3D11Device::clear(U32 flags, const LinearColorF& color, F32 z, U32 sten
    if (depthstencilFlag && dsView)
       mD3DDeviceContext->ClearDepthStencilView(dsView, depthstencilFlag, z, stencil);
 
-   SAFE_RELEASE(rtView);
+   for (U32 i = 0; i < 5; i++)
+      SAFE_RELEASE(rtView[i]);
+
    SAFE_RELEASE(dsView);
 }