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)
mFarZ = zFar;
}
void State::getDepthRange(float *zNear, float *zFar) const
float State::getNearPlane() const
{
*zNear = mNearZ;
*zFar = mFarZ;
return mNearZ;
}
float State::getFarPlane() const
{
return mFarZ;
}
bool State::isBlendEnabled() const
......
......@@ -75,7 +75,8 @@ class State : angle::NonCopyable
void setDepthTest(bool enabled);
void setDepthFunc(GLenum depthFunc);
void setDepthRange(float zNear, float zFar);
void getDepthRange(float *zNear, float *zFar) const;
float getNearPlane() const;
float getFarPlane() const;
// Blend state manipulation
bool isBlendEnabled() const;
......
......@@ -277,8 +277,8 @@ gl::Error RendererD3D::applyRenderTarget(const gl::Data &data, GLenum drawMode,
return error;
}
float nearZ, farZ;
data.state->getDepthRange(&nearZ, &farZ);
float nearZ = data.state->getNearPlane();
float farZ = data.state->getFarPlane();
setViewport(data.state->getViewport(), nearZ, farZ, drawMode,
data.state->getRasterizerState().frontFace, ignoreViewport);
......
......@@ -43,8 +43,8 @@ gl::Error Framebuffer9::clear(const gl::State &state, const ClearParameters &cle
return error;
}
float nearZ, farZ;
state.getDepthRange(&nearZ, &farZ);
float nearZ = state.getNearPlane();
float farZ = state.getFarPlane();
mRenderer->setViewport(state.getViewport(), nearZ, farZ, GL_TRIANGLES, state.getRasterizerState().frontFace, true);
mRenderer->setScissorRectangle(state.getScissor(), state.isScissorTestEnabled());
......
......@@ -31,9 +31,11 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mUnpackRowLength(0),
mFramebuffers(),
mRenderbuffer(0),
mScissorTestEnabled(false),
mScissor(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),
mBlendColor(0, 0, 0, 0),
mSourceBlendRGB(GL_ONE),
......@@ -75,6 +77,8 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mMultisampleEnabled(true),
mRasterizerDiscardEnabled(false),
mLineWidth(1.0f),
mPrimitiveRestartEnabled(false),
mClearColor(0.0f, 0.0f, 0.0f, 0.0f),
mClearDepth(1.0f),
mClearStencil(0)
{
......@@ -290,8 +294,14 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data)
const FramebufferGL *framebufferGL = GetImplAs<FramebufferGL>(framebuffer);
bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferGL->getFramebufferID());
setScissor(state.getScissor());
setScissorTestEnabled(state.isScissorTestEnabled());
if (state.isScissorTestEnabled())
{
setScissor(state.getScissor());
}
setViewport(state.getViewport());
setDepthRange(state.getNearPlane(), state.getFarPlane());
const gl::BlendState &blendState = state.getBlendState();
setBlendEnabled(blendState.blend);
......@@ -343,9 +353,27 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::Data &data)
setRasterizerDiscardEnabled(rasterizerState.rasterizerDiscard);
setLineWidth(state.getLineWidth());
setPrimitiveRestartEnabled(state.isPrimitiveRestartEnabled());
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)
{
if (scissor != mScissor)
......@@ -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;
mFunctions->clearColor(mClearColor.red, mClearColor.green, mClearColor.blue, mClearColor.alpha);
mNear = near;
mFar = far;
mFunctions->depthRange(mNear, mFar);
}
}
......@@ -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)
{
if (mClearDepth != 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)
{
if (mClearStencil != clearStencil)
......
......@@ -51,9 +51,11 @@ class StateManagerGL : angle::NonCopyable
private:
gl::Error setGenericDrawState(const gl::Data &data);
void setScissorTestEnabled(bool enabled);
void setScissor(const gl::Rectangle &scissor);
void setViewport(const gl::Rectangle &viewport);
void setClearColor(const gl::ColorF &clearColor);
void setDepthRange(float near, float far);
void setBlendEnabled(bool enabled);
void setBlendColor(const gl::ColorF &blendColor);
......@@ -84,6 +86,9 @@ class StateManagerGL : angle::NonCopyable
void setRasterizerDiscardEnabled(bool enabled);
void setLineWidth(float width);
void setPrimitiveRestartEnabled(bool enabled);
void setClearColor(const gl::ColorF &clearColor);
void setClearDepth(float clearDepth);
void setClearStencil(GLint clearStencil);
......@@ -102,10 +107,12 @@ class StateManagerGL : angle::NonCopyable
std::map<GLenum, GLuint> mFramebuffers;
GLuint mRenderbuffer;
bool mScissorTestEnabled;
gl::Rectangle mScissor;
gl::Rectangle mViewport;
gl::ColorF mClearColor;
gl::Rectangle mViewport;
float mNear;
float mFar;
bool mBlendEnabled;
gl::ColorF mBlendColor;
......@@ -153,6 +160,9 @@ class StateManagerGL : angle::NonCopyable
bool mRasterizerDiscardEnabled;
float mLineWidth;
bool mPrimitiveRestartEnabled;
gl::ColorF mClearColor;
float mClearDepth;
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