summaryrefslogtreecommitdiff
path: root/chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp')
-rw-r--r--chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp b/chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
index 2be962d4b49..8ea230c4f2d 100644
--- a/chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
+++ b/chromium/third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
@@ -93,12 +93,14 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mDepthMask(true),
mStencilTestEnabled(false),
mStencilFrontFunc(GL_ALWAYS),
+ mStencilFrontRef(0),
mStencilFrontValueMask(static_cast<GLuint>(-1)),
mStencilFrontStencilFailOp(GL_KEEP),
mStencilFrontStencilPassDepthFailOp(GL_KEEP),
mStencilFrontStencilPassDepthPassOp(GL_KEEP),
mStencilFrontWritemask(static_cast<GLuint>(-1)),
mStencilBackFunc(GL_ALWAYS),
+ mStencilBackRef(0),
mStencilBackValueMask(static_cast<GLuint>(-1)),
mStencilBackStencilFailOp(GL_KEEP),
mStencilBackStencilPassDepthFailOp(GL_KEEP),
@@ -117,6 +119,7 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mClearDepth(1.0f),
mClearStencil(0),
mFramebufferSRGBEnabled(false),
+ mDitherEnabled(true),
mTextureCubemapSeamlessEnabled(false),
mMultisamplingEnabled(true),
mSampleAlphaToOneEnabled(false),
@@ -658,18 +661,26 @@ gl::Error StateManagerGL::setDrawElementsState(const gl::ContextState &data,
return setGenericDrawState(data);
}
-gl::Error StateManagerGL::onMakeCurrent(const gl::ContextState &data)
+gl::Error StateManagerGL::pauseTransformFeedback(const gl::ContextState &data)
{
- const gl::State &state = data.getState();
-
- // If the context has changed, pause the previous context's transform feedback and queries
+ // If the context is going to be changed, pause the previous context's transform feedback
if (data.getContext() != mPrevDrawContext)
{
if (mPrevDrawTransformFeedback != nullptr)
{
mPrevDrawTransformFeedback->syncPausedState(true);
}
+ }
+ return gl::Error(GL_NO_ERROR);
+}
+gl::Error StateManagerGL::onMakeCurrent(const gl::ContextState &data)
+{
+ const gl::State &state = data.getState();
+
+ // If the context has changed, pause the previous context's queries
+ if (data.getContext() != mPrevDrawContext)
+ {
for (QueryGL *prevQuery : mCurrentQueries)
{
prevQuery->pause();
@@ -774,7 +785,7 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
framebufferGL->syncDrawState();
// Seamless cubemaps are required for ES3 and higher contexts.
- setTextureCubemapSeamlessEnabled(data.getClientVersion() >= 3);
+ setTextureCubemapSeamlessEnabled(data.getClientMajorVersion() >= 3);
// Set the current transform feedback state
gl::TransformFeedback *transformFeedback = state.getCurrentTransformFeedback();
@@ -1503,7 +1514,7 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit
setPixelPackState(state.getPackState());
break;
case gl::State::DIRTY_BIT_DITHER_ENABLED:
- // TODO(jmadill): implement this
+ setDitherEnabled(state.isDitherEnabled());
break;
case gl::State::DIRTY_BIT_GENERATE_MIPMAP_HINT:
// TODO(jmadill): implement this
@@ -1578,6 +1589,22 @@ void StateManagerGL::setFramebufferSRGBEnabled(bool enabled)
}
}
+void StateManagerGL::setDitherEnabled(bool enabled)
+{
+ if (mDitherEnabled != enabled)
+ {
+ mDitherEnabled = enabled;
+ if (mDitherEnabled)
+ {
+ mFunctions->enable(GL_DITHER);
+ }
+ else
+ {
+ mFunctions->disable(GL_DITHER);
+ }
+ }
+}
+
void StateManagerGL::setMultisamplingStateEnabled(bool enabled)
{
if (mMultisamplingEnabled != enabled)