Refactored Renderer::setScissor to no longer require render target size.

TRAC #22145 Signed-off-by: Nicolas Capens Signed-off-by: Daniel Koch git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1514 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 7b6b83ea
...@@ -1761,8 +1761,7 @@ bool Context::applyRenderTarget(bool ignoreViewport) ...@@ -1761,8 +1761,7 @@ bool Context::applyRenderTarget(bool ignoreViewport)
} }
mDxUniformsDirty = false; mDxUniformsDirty = false;
mRenderer->setScissorRectangle(mState.scissor, static_cast<int>(mRenderTargetDesc.width), mRenderer->setScissorRectangle(mState.scissor);
static_cast<int>(mRenderTargetDesc.height));
return true; return true;
} }
......
...@@ -87,8 +87,7 @@ class Renderer ...@@ -87,8 +87,7 @@ class Renderer
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize) = 0; int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize) = 0;
virtual void setScissorRectangle(const gl::Rectangle& scissor, unsigned int renderTargetWidth, virtual void setScissorRectangle(const gl::Rectangle &scissor) = 0;
unsigned int renderTargetHeight) = 0;
virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar, virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar,
unsigned int renderTargetWidth, unsigned int renderTargetHeight, unsigned int renderTargetWidth, unsigned int renderTargetHeight,
gl::ProgramBinary *currentProgram, bool forceSetUniforms) = 0; gl::ProgramBinary *currentProgram, bool forceSetUniforms) = 0;
......
...@@ -350,25 +350,19 @@ void Renderer11::setDepthStencilState(const gl::DepthStencilState &depthStencilS ...@@ -350,25 +350,19 @@ void Renderer11::setDepthStencilState(const gl::DepthStencilState &depthStencilS
mForceSetDepthStencilState = false; mForceSetDepthStencilState = false;
} }
void Renderer11::setScissorRectangle(const gl::Rectangle& scissor, unsigned int renderTargetWidth, void Renderer11::setScissorRectangle(const gl::Rectangle &scissor)
unsigned int renderTargetHeight)
{ {
if (mForceSetScissor || if (mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0)
renderTargetWidth != mCurRenderTargetWidth ||
renderTargetHeight != mCurRenderTargetHeight ||
memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0)
{ {
D3D11_RECT rect; D3D11_RECT rect;
rect.left = gl::clamp(scissor.x, 0, static_cast<int>(renderTargetWidth)); rect.left = gl::clamp(scissor.x, 0, static_cast<int>(mRenderTargetDesc.width));
rect.top = gl::clamp(scissor.y, 0, static_cast<int>(renderTargetHeight)); rect.top = gl::clamp(scissor.y, 0, static_cast<int>(mRenderTargetDesc.height));
rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(renderTargetWidth)); rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(mRenderTargetDesc.width));
rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(renderTargetHeight)); rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(mRenderTargetDesc.height));
mDeviceContext->RSSetScissorRects(1, &rect); mDeviceContext->RSSetScissorRects(1, &rect);
mCurScissor = scissor; mCurScissor = scissor;
mCurRenderTargetWidth = renderTargetWidth;
mCurRenderTargetHeight = renderTargetHeight;
} }
mForceSetScissor = false; mForceSetScissor = false;
......
...@@ -54,8 +54,7 @@ class Renderer11 : public Renderer ...@@ -54,8 +54,7 @@ class Renderer11 : public Renderer
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize); int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize);
virtual void setScissorRectangle(const gl::Rectangle& scissor, unsigned int renderTargetWidth, virtual void setScissorRectangle(const gl::Rectangle &scissor);
unsigned int renderTargetHeight);
virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar, virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar,
unsigned int renderTargetWidth, unsigned int renderTargetHeight, unsigned int renderTargetWidth, unsigned int renderTargetHeight,
gl::ProgramBinary *currentProgram, bool forceSetUniforms); gl::ProgramBinary *currentProgram, bool forceSetUniforms);
...@@ -177,8 +176,6 @@ class Renderer11 : public Renderer ...@@ -177,8 +176,6 @@ class Renderer11 : public Renderer
// Currently applied scissor rectangle // Currently applied scissor rectangle
bool mForceSetScissor; bool mForceSetScissor;
gl::Rectangle mCurScissor; gl::Rectangle mCurScissor;
unsigned int mCurRenderTargetWidth;
unsigned int mCurRenderTargetHeight;
// Currently applied viewport // Currently applied viewport
bool mForceSetViewport; bool mForceSetViewport;
......
...@@ -900,26 +900,20 @@ void Renderer9::setDepthStencilState(const gl::DepthStencilState &depthStencilSt ...@@ -900,26 +900,20 @@ void Renderer9::setDepthStencilState(const gl::DepthStencilState &depthStencilSt
mForceSetDepthStencilState = false; mForceSetDepthStencilState = false;
} }
void Renderer9::setScissorRectangle(const gl::Rectangle& scissor, unsigned int renderTargetWidth, void Renderer9::setScissorRectangle(const gl::Rectangle &scissor)
unsigned int renderTargetHeight)
{ {
bool renderTargetSizedChanged = mForceSetScissor ||
renderTargetWidth != mCurRenderTargetWidth ||
renderTargetHeight != mCurRenderTargetHeight;
bool scissorChanged = mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0; bool scissorChanged = mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0;
if (renderTargetSizedChanged || scissorChanged) if (scissorChanged)
{ {
RECT rect; RECT rect;
rect.left = gl::clamp(scissor.x, 0, static_cast<int>(renderTargetWidth)); rect.left = gl::clamp(scissor.x, 0, static_cast<int>(mRenderTargetDesc.width));
rect.top = gl::clamp(scissor.y, 0, static_cast<int>(renderTargetHeight)); rect.top = gl::clamp(scissor.y, 0, static_cast<int>(mRenderTargetDesc.height));
rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(renderTargetWidth)); rect.right = gl::clamp(scissor.x + scissor.width, 0, static_cast<int>(mRenderTargetDesc.width));
rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(renderTargetHeight)); rect.bottom = gl::clamp(scissor.y + scissor.height, 0, static_cast<int>(mRenderTargetDesc.height));
mDevice->SetScissorRect(&rect); mDevice->SetScissorRect(&rect);
mCurScissor = scissor; mCurScissor = scissor;
mCurRenderTargetWidth = renderTargetWidth;
mCurRenderTargetHeight = renderTargetHeight;
} }
mForceSetScissor = false; mForceSetScissor = false;
......
...@@ -89,8 +89,7 @@ class Renderer9 : public Renderer ...@@ -89,8 +89,7 @@ class Renderer9 : public Renderer
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize); int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize);
virtual void setScissorRectangle(const gl::Rectangle& scissor, unsigned int renderTargetWidth, virtual void setScissorRectangle(const gl::Rectangle &scissor);
unsigned int renderTargetHeight);
virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar, virtual bool setViewport(const gl::Rectangle& viewport, float zNear, float zFar,
unsigned int renderTargetWidth, unsigned int renderTargetHeight, unsigned int renderTargetWidth, unsigned int renderTargetHeight,
gl::ProgramBinary *currentProgram, bool forceSetUniforms); gl::ProgramBinary *currentProgram, bool forceSetUniforms);
......
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