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

Side by Side Diff: Source/platform/graphics/gpu/DrawingBuffer.h

Issue 254453002: Fix WebGL context restoration logic. The retry mechanism was broken when the ownership of the WebGr… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added more safety checks upon context restoration. Created 6 years, 8 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "wtf/PassOwnPtr.h" 46 #include "wtf/PassOwnPtr.h"
47 47
48 namespace blink { 48 namespace blink {
49 class WebExternalBitmap; 49 class WebExternalBitmap;
50 class WebExternalTextureLayer; 50 class WebExternalTextureLayer;
51 class WebGraphicsContext3D; 51 class WebGraphicsContext3D;
52 class WebLayer; 52 class WebLayer;
53 } 53 }
54 54
55 namespace WebCore { 55 namespace WebCore {
56 class Extensions3DUtil;
56 class ImageData; 57 class ImageData;
57 class ImageBuffer; 58 class ImageBuffer;
58 59
59 // Abstract interface to allow basic context eviction management 60 // Abstract interface to allow basic context eviction management
60 class PLATFORM_EXPORT ContextEvictionManager : public RefCounted<ContextEviction Manager> { 61 class PLATFORM_EXPORT ContextEvictionManager : public RefCounted<ContextEviction Manager> {
61 public: 62 public:
62 virtual ~ContextEvictionManager() {}; 63 virtual ~ContextEvictionManager() {};
63 64
64 virtual void forciblyLoseOldestContext(const String& reason) = 0; 65 virtual void forciblyLoseOldestContext(const String& reason) = 0;
65 virtual IntSize oldestContextSize() = 0; 66 virtual IntSize oldestContextSize() = 0;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // Destroys the TEXTURE_2D binding for the owned context 133 // Destroys the TEXTURE_2D binding for the owned context
133 bool copyToPlatformTexture(blink::WebGraphicsContext3D*, Platform3DObject te xture, GLenum internalFormat, 134 bool copyToPlatformTexture(blink::WebGraphicsContext3D*, Platform3DObject te xture, GLenum internalFormat,
134 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY); 135 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY);
135 136
136 void setPackAlignment(GLint param); 137 void setPackAlignment(GLint param);
137 138
138 void paintRenderingResultsToCanvas(ImageBuffer*); 139 void paintRenderingResultsToCanvas(ImageBuffer*);
139 PassRefPtr<Uint8ClampedArray> paintRenderingResultsToImageData(int&, int&); 140 PassRefPtr<Uint8ClampedArray> paintRenderingResultsToImageData(int&, int&);
140 141
141 private: 142 private:
142 DrawingBuffer(PassOwnPtr<blink::WebGraphicsContext3D>, bool multisampleExten sionSupported, 143 DrawingBuffer(
143 bool packedDepthStencilExtensionSupported, PreserveDrawingBuff er, PassRefPtr<ContextEvictionManager>); 144 PassOwnPtr<blink::WebGraphicsContext3D>,
145 PassOwnPtr<Extensions3DUtil>,
146 bool multisampleExtensionSupported,
147 bool packedDepthStencilExtensionSupported, PreserveDrawingBuffer, PassRe fPtr<ContextEvictionManager>);
144 148
145 bool initialize(const IntSize&); 149 bool initialize(const IntSize&);
146 void releaseResources(); 150 void releaseResources();
147 151
148 unsigned createColorTexture(const IntSize& size = IntSize()); 152 unsigned createColorTexture(const IntSize& size = IntSize());
149 // Create the depth/stencil and multisample buffers, if needed. 153 // Create the depth/stencil and multisample buffers, if needed.
150 void createSecondaryBuffers(); 154 void createSecondaryBuffers();
151 bool resizeFramebuffer(const IntSize&); 155 bool resizeFramebuffer(const IntSize&);
152 bool resizeMultisampleFramebuffer(const IntSize&); 156 bool resizeMultisampleFramebuffer(const IntSize&);
153 void resizeDepthStencil(const IntSize&); 157 void resizeDepthStencil(const IntSize&);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 // By default, alignment is 4, the OpenGL default setting. 193 // By default, alignment is 4, the OpenGL default setting.
190 void texImage2DResourceSafe(GLenum target, GLint level, GLenum internalforma t, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLin t alignment = 4); 194 void texImage2DResourceSafe(GLenum target, GLint level, GLenum internalforma t, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLin t alignment = 4);
191 195
192 PreserveDrawingBuffer m_preserveDrawingBuffer; 196 PreserveDrawingBuffer m_preserveDrawingBuffer;
193 bool m_scissorEnabled; 197 bool m_scissorEnabled;
194 Platform3DObject m_texture2DBinding; 198 Platform3DObject m_texture2DBinding;
195 Platform3DObject m_framebufferBinding; 199 Platform3DObject m_framebufferBinding;
196 GLenum m_activeTextureUnit; 200 GLenum m_activeTextureUnit;
197 201
198 OwnPtr<blink::WebGraphicsContext3D> m_context; 202 OwnPtr<blink::WebGraphicsContext3D> m_context;
203 OwnPtr<Extensions3DUtil> m_extensionsUtil;
199 IntSize m_size; 204 IntSize m_size;
200 bool m_multisampleExtensionSupported; 205 bool m_multisampleExtensionSupported;
201 bool m_packedDepthStencilExtensionSupported; 206 bool m_packedDepthStencilExtensionSupported;
202 Platform3DObject m_fbo; 207 Platform3DObject m_fbo;
203 // DrawingBuffer's output is double-buffered. m_colorBuffer is the back buff er. 208 // DrawingBuffer's output is double-buffered. m_colorBuffer is the back buff er.
204 Platform3DObject m_colorBuffer; 209 Platform3DObject m_colorBuffer;
205 Platform3DObject m_frontColorBuffer; 210 Platform3DObject m_frontColorBuffer;
206 211
207 // This is used when we have OES_packed_depth_stencil. 212 // This is used when we have OES_packed_depth_stencil.
208 Platform3DObject m_depthStencilBuffer; 213 Platform3DObject m_depthStencilBuffer;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 // used to resize the Canvas. 259 // used to resize the Canvas.
255 SkBitmap m_resizingBitmap; 260 SkBitmap m_resizingBitmap;
256 261
257 // Used to flip a bitmap vertically. 262 // Used to flip a bitmap vertically.
258 Vector<uint8_t> m_scanline; 263 Vector<uint8_t> m_scanline;
259 }; 264 };
260 265
261 } // namespace WebCore 266 } // namespace WebCore
262 267
263 #endif // DrawingBuffer_h 268 #endif // DrawingBuffer_h
OLDNEW
« no previous file with comments | « Source/core/html/canvas/WebGLRenderingContextBase.cpp ('k') | Source/platform/graphics/gpu/DrawingBuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698