Commit d42f5b8c by Geoff Lang

Sync the remaining miscellaneous state before drawing in RendererGL.

BUG=angleproject:883 Change-Id: Id530f855ab14b6ec575101c9e74c02842c27d3d6 Reviewed-on: https://chromium-review.googlesource.com/266036Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 4b3f4169
...@@ -287,10 +287,14 @@ void State::setDepthRange(float zNear, float zFar) ...@@ -287,10 +287,14 @@ void State::setDepthRange(float zNear, float zFar)
mFarZ = zFar; mFarZ = zFar;
} }
void State::getDepthRange(float *zNear, float *zFar) const float State::getNearPlane() const
{ {
*zNear = mNearZ; return mNearZ;
*zFar = mFarZ; }
float State::getFarPlane() const
{
return mFarZ;
} }
bool State::isBlendEnabled() const bool State::isBlendEnabled() const
......
...@@ -75,7 +75,8 @@ class State : angle::NonCopyable ...@@ -75,7 +75,8 @@ class State : angle::NonCopyable
void setDepthTest(bool enabled); void setDepthTest(bool enabled);
void setDepthFunc(GLenum depthFunc); void setDepthFunc(GLenum depthFunc);
void setDepthRange(float zNear, float zFar); void setDepthRange(float zNear, float zFar);
void getDepthRange(float *zNear, float *zFar) const; float getNearPlane() const;
float getFarPlane() const;
// Blend state manipulation // Blend state manipulation
bool isBlendEnabled() const; bool isBlendEnabled() const;
......
...@@ -277,8 +277,8 @@ gl::Error RendererD3D::applyRenderTarget(const gl::Data &data, GLenum drawMode, ...@@ -277,8 +277,8 @@ gl::Error RendererD3D::applyRenderTarget(const gl::Data &data, GLenum drawMode,
return error; return error;
} }
float nearZ, farZ; float nearZ = data.state->getNearPlane();
data.state->getDepthRange(&nearZ, &farZ); float farZ = data.state->getFarPlane();
setViewport(data.state->getViewport(), nearZ, farZ, drawMode, setViewport(data.state->getViewport(), nearZ, farZ, drawMode,
data.state->getRasterizerState().frontFace, ignoreViewport); data.state->getRasterizerState().frontFace, ignoreViewport);
......
...@@ -43,8 +43,8 @@ gl::Error Framebuffer9::clear(const gl::State &state, const ClearParameters &cle ...@@ -43,8 +43,8 @@ gl::Error Framebuffer9::clear(const gl::State &state, const ClearParameters &cle
return error; return error;
} }
float nearZ, farZ; float nearZ = state.getNearPlane();
state.getDepthRange(&nearZ, &farZ); float farZ = state.getFarPlane();
mRenderer->setViewport(state.getViewport(), nearZ, farZ, GL_TRIANGLES, state.getRasterizerState().frontFace, true); mRenderer->setViewport(state.getViewport(), nearZ, farZ, GL_TRIANGLES, state.getRasterizerState().frontFace, true);
mRenderer->setScissorRectangle(state.getScissor(), state.isScissorTestEnabled()); mRenderer->setScissorRectangle(state.getScissor(), state.isScissorTestEnabled());
......
...@@ -31,9 +31,11 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren ...@@ -31,9 +31,11 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mUnpackRowLength(0), mUnpackRowLength(0),
mFramebuffers(), mFramebuffers(),
mRenderbuffer(0), mRenderbuffer(0),
mScissorTestEnabled(false),
mScissor(0, 0, 0, 0), mScissor(0, 0, 0, 0),
mViewport(0, 0, 0, 0), mViewport(0, 0, 0, 0),
mClearColor(0.0f, 0.0f, 0.0f, 0.0f), mNear(0.0f),
mFar(1.0f),
mBlendEnabled(false), mBlendEnabled(false),
mBlendColor(0, 0, 0, 0), mBlendColor(0, 0, 0, 0),
mSourceBlendRGB(GL_ONE), mSourceBlendRGB(GL_ONE),
...@@ -75,6 +77,8 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren ...@@ -75,6 +77,8 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mMultisampleEnabled(true), mMultisampleEnabled(true),
mRasterizerDiscardEnabled(false), mRasterizerDiscardEnabled(false),
mLineWidth(1.0f), mLineWidth(1.0f),
mPrimitiveRestartEnabled(false),
mClearColor(0.0f, 0.0f, 0.0f, 0.0f),
mClearDepth(1.0f), mClearDepth(1.0f),
mClearStencil(0) mClearStencil(0)
{ {
...@@ -290,8 +294,14 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data) ...@@ -290,8 +294,14 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data)
const FramebufferGL *framebufferGL = GetImplAs<FramebufferGL>(framebuffer); const FramebufferGL *framebufferGL = GetImplAs<FramebufferGL>(framebuffer);
bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferGL->getFramebufferID()); bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferGL->getFramebufferID());
setScissor(state.getScissor()); setScissorTestEnabled(state.isScissorTestEnabled());
if (state.isScissorTestEnabled())
{
setScissor(state.getScissor());
}
setViewport(state.getViewport()); setViewport(state.getViewport());
setDepthRange(state.getNearPlane(), state.getFarPlane());
const gl::BlendState &blendState = state.getBlendState(); const gl::BlendState &blendState = state.getBlendState();
setBlendEnabled(blendState.blend); setBlendEnabled(blendState.blend);
...@@ -343,9 +353,27 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data) ...@@ -343,9 +353,27 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data)
setRasterizerDiscardEnabled(rasterizerState.rasterizerDiscard); setRasterizerDiscardEnabled(rasterizerState.rasterizerDiscard);
setLineWidth(state.getLineWidth()); setLineWidth(state.getLineWidth());
setPrimitiveRestartEnabled(state.isPrimitiveRestartEnabled());
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
void StateManagerGL::setScissorTestEnabled(bool enabled)
{
if (mScissorTestEnabled != enabled)
{
mScissorTestEnabled = enabled;
if (mScissorTestEnabled)
{
mFunctions->enable(GL_SCISSOR_TEST);
}
else
{
mFunctions->disable(GL_SCISSOR_TEST);
}
}
}
void StateManagerGL::setScissor(const gl::Rectangle &scissor) void StateManagerGL::setScissor(const gl::Rectangle &scissor)
{ {
if (scissor != mScissor) if (scissor != mScissor)
...@@ -364,12 +392,13 @@ void StateManagerGL::setViewport(const gl::Rectangle &viewport) ...@@ -364,12 +392,13 @@ void StateManagerGL::setViewport(const gl::Rectangle &viewport)
} }
} }
void StateManagerGL::setClearColor(const gl::ColorF &clearColor) void StateManagerGL::setDepthRange(float near, float far)
{ {
if (mClearColor != clearColor) if (mNear != near || mFar != far)
{ {
mClearColor = clearColor; mNear = near;
mFunctions->clearColor(mClearColor.red, mClearColor.green, mClearColor.blue, mClearColor.alpha); mFar = far;
mFunctions->depthRange(mNear, mFar);
} }
} }
...@@ -691,6 +720,23 @@ void StateManagerGL::setLineWidth(float width) ...@@ -691,6 +720,23 @@ void StateManagerGL::setLineWidth(float width)
} }
} }
void StateManagerGL::setPrimitiveRestartEnabled(bool enabled)
{
if (mPrimitiveRestartEnabled != enabled)
{
mPrimitiveRestartEnabled = enabled;
if (mPrimitiveRestartEnabled)
{
mFunctions->enable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
}
else
{
mFunctions->disable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
}
}
}
void StateManagerGL::setClearDepth(float clearDepth) void StateManagerGL::setClearDepth(float clearDepth)
{ {
if (mClearDepth != clearDepth) if (mClearDepth != clearDepth)
...@@ -700,6 +746,15 @@ void StateManagerGL::setClearDepth(float clearDepth) ...@@ -700,6 +746,15 @@ void StateManagerGL::setClearDepth(float clearDepth)
} }
} }
void StateManagerGL::setClearColor(const gl::ColorF &clearColor)
{
if (mClearColor != clearColor)
{
mClearColor = clearColor;
mFunctions->clearColor(mClearColor.red, mClearColor.green, mClearColor.blue, mClearColor.alpha);
}
}
void StateManagerGL::setClearStencil(GLint clearStencil) void StateManagerGL::setClearStencil(GLint clearStencil)
{ {
if (mClearStencil != clearStencil) if (mClearStencil != clearStencil)
......
...@@ -51,9 +51,11 @@ class StateManagerGL : angle::NonCopyable ...@@ -51,9 +51,11 @@ class StateManagerGL : angle::NonCopyable
private: private:
gl::Error setGenericDrawState(const gl::Data &data); gl::Error setGenericDrawState(const gl::Data &data);
void setScissorTestEnabled(bool enabled);
void setScissor(const gl::Rectangle &scissor); void setScissor(const gl::Rectangle &scissor);
void setViewport(const gl::Rectangle &viewport); void setViewport(const gl::Rectangle &viewport);
void setClearColor(const gl::ColorF &clearColor); void setDepthRange(float near, float far);
void setBlendEnabled(bool enabled); void setBlendEnabled(bool enabled);
void setBlendColor(const gl::ColorF &blendColor); void setBlendColor(const gl::ColorF &blendColor);
...@@ -84,6 +86,9 @@ class StateManagerGL : angle::NonCopyable ...@@ -84,6 +86,9 @@ class StateManagerGL : angle::NonCopyable
void setRasterizerDiscardEnabled(bool enabled); void setRasterizerDiscardEnabled(bool enabled);
void setLineWidth(float width); void setLineWidth(float width);
void setPrimitiveRestartEnabled(bool enabled);
void setClearColor(const gl::ColorF &clearColor);
void setClearDepth(float clearDepth); void setClearDepth(float clearDepth);
void setClearStencil(GLint clearStencil); void setClearStencil(GLint clearStencil);
...@@ -102,10 +107,12 @@ class StateManagerGL : angle::NonCopyable ...@@ -102,10 +107,12 @@ class StateManagerGL : angle::NonCopyable
std::map<GLenum, GLuint> mFramebuffers; std::map<GLenum, GLuint> mFramebuffers;
GLuint mRenderbuffer; GLuint mRenderbuffer;
bool mScissorTestEnabled;
gl::Rectangle mScissor; gl::Rectangle mScissor;
gl::Rectangle mViewport;
gl::ColorF mClearColor; gl::Rectangle mViewport;
float mNear;
float mFar;
bool mBlendEnabled; bool mBlendEnabled;
gl::ColorF mBlendColor; gl::ColorF mBlendColor;
...@@ -153,6 +160,9 @@ class StateManagerGL : angle::NonCopyable ...@@ -153,6 +160,9 @@ class StateManagerGL : angle::NonCopyable
bool mRasterizerDiscardEnabled; bool mRasterizerDiscardEnabled;
float mLineWidth; float mLineWidth;
bool mPrimitiveRestartEnabled;
gl::ColorF mClearColor;
float mClearDepth; float mClearDepth;
GLint mClearStencil; GLint mClearStencil;
}; };
......
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