Added Renderer11 methods to set a one-time render target, and unapply render target state.
TRAC #22679
Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Author: Jamie Madill
git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2092 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 6acac86..6cc5145 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2687,8 +2687,8 @@
static ID3D11ShaderResourceView *const nullSRV = NULL;
mDeviceContext->PSSetShaderResources(0, 1, &nullSRV);
- // Apply render targets
- mDeviceContext->OMSetRenderTargets(1, &dest, NULL);
+ // Apply render target
+ setOneTimeRenderTarget(dest);
// Set the viewport
D3D11_VIEWPORT viewport;
@@ -2710,11 +2710,10 @@
// Unbind textures and render targets and vertex buffer
mDeviceContext->PSSetShaderResources(0, 1, &nullSRV);
- static ID3D11RenderTargetView *const nullRTV = NULL;
- mDeviceContext->OMSetRenderTargets(1, &nullRTV, NULL);
+ unapplyRenderTargets();
- static UINT zero = 0;
- static ID3D11Buffer *const nullBuffer = NULL;
+ UINT zero = 0;
+ ID3D11Buffer *const nullBuffer = NULL;
mDeviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero);
markAllStateDirty();
@@ -2722,6 +2721,26 @@
return true;
}
+void Renderer11::unapplyRenderTargets()
+{
+ setOneTimeRenderTarget(NULL);
+}
+
+void Renderer11::setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView)
+{
+ ID3D11RenderTargetView *rtvArray[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS] = {NULL};
+
+ rtvArray[0] = renderTargetView;
+
+ mDeviceContext->OMSetRenderTargets(getMaxRenderTargets(), rtvArray, NULL);
+
+ // Do not preserve the serial for this one-time-use render target
+ for (unsigned int rtIndex = 0; rtIndex < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; rtIndex++)
+ {
+ mAppliedRenderTargetSerials[rtIndex] = 0;
+ }
+}
+
RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
{
SwapChain11 *swapChain11 = SwapChain11::makeSwapChain11(swapChain);