Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1000)

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h

Issue 2407753002: Fix crash from state management cleanup (Closed)
Patch Set: Fix state restore missed Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
index 73bbe090b2905cdcdd281d491ed3868cd1b65a02..ce173d6047db2043831716021f2c0bc1048be620 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
@@ -132,7 +132,8 @@ class ScopedRGBEmulationColorMask {
const bool m_requiresEmulation;
};
-class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
+class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext,
+ public DrawingBuffer::Client {
WTF_MAKE_NONCOPYABLE(WebGLRenderingContextBase);
public:
@@ -545,11 +546,7 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
void restoreScissorEnabled();
void restoreScissorBox();
void restoreClearColor();
- void restoreClearDepthf();
- void restoreClearStencil();
- void restoreStencilMaskSeparate();
void restoreColorMask();
- void restoreDepthMask();
gpu::gles2::GLES2Interface* contextGL() const {
DrawingBuffer* d = drawingBuffer();
@@ -619,6 +616,7 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
friend class WebGLCompressedTextureS3TCsRGB;
friend class WebGLRenderingContextErrorMessageCallback;
friend class WebGLVertexArrayObjectBase;
+ friend class ScopedDrawingBufferBinder;
friend class ScopedTexture2DRestorer;
friend class ScopedFramebufferRestorer;
// To allow V8WebGL[2]RenderingContext to call visitChildDOMWrappers.
@@ -645,6 +643,16 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
WebLayer* platformLayer() const override;
void stop() override;
+ // DrawingBuffer::Client implementation.
+ bool DrawingBufferClientIsBoundForDraw() override;
+ void DrawingBufferClientRestoreScissorTest() override;
+ void DrawingBufferClientRestoreMaskAndClearValues() override;
+ void DrawingBufferClientRestorePixelPackAlignment() override;
+ void DrawingBufferClientRestoreTexture2DBinding() override;
+ void DrawingBufferClientRestoreRenderbufferBinding() override;
+ void DrawingBufferClientRestoreFramebufferBinding() override;
+ void DrawingBufferClientRestorePixelUnpackBufferBinding() override;
+
void addSharedObject(WebGLSharedObject*);
void addContextObject(WebGLContextObject*);
void detachAndRemoveAllObjects();
@@ -915,7 +923,7 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
m_readFramebufferBinding(framebufferBinding) {
// Commit DrawingBuffer if needed (e.g., for multisampling)
if (!m_readFramebufferBinding && m_drawingBuffer)
- m_drawingBuffer->commit();
+ m_drawingBuffer->resolveAndBindForReadAndDraw();
}
~ScopedDrawingBufferBinder() {
@@ -975,9 +983,6 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext {
};
HowToClear clearIfComposited(GLbitfield clearMask = 0);
- // Helper to restore state that clearing the framebuffer may destroy.
- void restoreStateAfterClear();
-
// Convert texture internal format.
GLenum convertTexInternalFormat(GLenum internalformat, GLenum type);

Powered by Google App Engine
This is Rietveld 408576698