diff options
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.cpp | 39 |
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) |