| OLD | NEW |
| 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 class WebLayer; | 70 class WebLayer; |
| 71 | 71 |
| 72 // Manages a rendering target (framebuffer + attachment) for a canvas. Can | 72 // Manages a rendering target (framebuffer + attachment) for a canvas. Can |
| 73 // publish its rendering results to a WebLayer for compositing. | 73 // publish its rendering results to a WebLayer for compositing. |
| 74 class PLATFORM_EXPORT DrawingBuffer | 74 class PLATFORM_EXPORT DrawingBuffer |
| 75 : public NON_EXPORTED_BASE(cc::TextureLayerClient), | 75 : public NON_EXPORTED_BASE(cc::TextureLayerClient), |
| 76 public RefCounted<DrawingBuffer> { | 76 public RefCounted<DrawingBuffer> { |
| 77 WTF_MAKE_NONCOPYABLE(DrawingBuffer); | 77 WTF_MAKE_NONCOPYABLE(DrawingBuffer); |
| 78 | 78 |
| 79 public: | 79 public: |
| 80 class Client { |
| 81 public: |
| 82 // Returns true if the DrawingBuffer is currently bound for draw. |
| 83 virtual bool DrawingBufferClientIsBoundForDraw() = 0; |
| 84 virtual void DrawingBufferClientRestoreScissorTest() = 0; |
| 85 // Restores the mask and clear value for color, depth, and stencil buffers. |
| 86 virtual void DrawingBufferClientRestoreMaskAndClearValues() = 0; |
| 87 virtual void DrawingBufferClientRestorePixelPackAlignment() = 0; |
| 88 // Restores the GL_TEXTURE_2D binding for the active texture unit only. |
| 89 virtual void DrawingBufferClientRestoreTexture2DBinding() = 0; |
| 90 virtual void DrawingBufferClientRestoreRenderbufferBinding() = 0; |
| 91 virtual void DrawingBufferClientRestoreFramebufferBinding() = 0; |
| 92 virtual void DrawingBufferClientRestorePixelUnpackBufferBinding() = 0; |
| 93 }; |
| 94 |
| 80 enum PreserveDrawingBuffer { | 95 enum PreserveDrawingBuffer { |
| 81 Preserve, | 96 Preserve, |
| 82 Discard, | 97 Discard, |
| 83 }; | 98 }; |
| 84 enum WebGLVersion { | 99 enum WebGLVersion { |
| 85 WebGL1, | 100 WebGL1, |
| 86 WebGL2, | 101 WebGL2, |
| 87 }; | 102 }; |
| 88 | 103 |
| 89 enum ChromiumImageUsage { | 104 enum ChromiumImageUsage { |
| 90 AllowChromiumImage, | 105 AllowChromiumImage, |
| 91 DisallowChromiumImage, | 106 DisallowChromiumImage, |
| 92 }; | 107 }; |
| 93 | 108 |
| 94 static PassRefPtr<DrawingBuffer> create( | 109 static PassRefPtr<DrawingBuffer> create( |
| 95 std::unique_ptr<WebGraphicsContext3DProvider>, | 110 std::unique_ptr<WebGraphicsContext3DProvider>, |
| 111 Client*, |
| 96 const IntSize&, | 112 const IntSize&, |
| 97 bool premultipliedAlpha, | 113 bool premultipliedAlpha, |
| 98 bool wantAlphaChannel, | 114 bool wantAlphaChannel, |
| 99 bool wantDepthBuffer, | 115 bool wantDepthBuffer, |
| 100 bool wantStencilBuffer, | 116 bool wantStencilBuffer, |
| 101 bool wantAntialiasing, | 117 bool wantAntialiasing, |
| 102 PreserveDrawingBuffer, | 118 PreserveDrawingBuffer, |
| 103 WebGLVersion, | 119 WebGLVersion, |
| 104 ChromiumImageUsage); | 120 ChromiumImageUsage); |
| 105 static void forceNextDrawingBufferCreationToFail(); | 121 static void forceNextDrawingBufferCreationToFail(); |
| 106 | 122 |
| 107 ~DrawingBuffer() override; | 123 ~DrawingBuffer() override; |
| 108 | 124 |
| 109 // Destruction will be completed after all mailboxes are released. | 125 // Destruction will be completed after all mailboxes are released. |
| 110 void beginDestruction(); | 126 void beginDestruction(); |
| 111 | 127 |
| 112 // Issues a glClear() on all framebuffers associated with this DrawingBuffer. | 128 // Issues a glClear() on all framebuffers associated with this DrawingBuffer. |
| 113 // The caller is responsible for making the context current and setting the | |
| 114 // clear values and masks. Modifies the framebuffer binding. | |
| 115 void clearFramebuffers(GLbitfield clearMask); | 129 void clearFramebuffers(GLbitfield clearMask); |
| 116 | 130 |
| 117 // Indicates whether the DrawingBuffer internally allocated a packed | 131 // Indicates whether the DrawingBuffer internally allocated a packed |
| 118 // depth-stencil renderbuffer in the situation where the end user only asked | 132 // depth-stencil renderbuffer in the situation where the end user only asked |
| 119 // for a depth buffer. In this case, we need to upgrade clears of the depth | 133 // for a depth buffer. In this case, we need to upgrade clears of the depth |
| 120 // buffer to clears of the depth and stencil buffers in order to avoid | 134 // buffer to clears of the depth and stencil buffers in order to avoid |
| 121 // performance problems on some GPUs. | 135 // performance problems on some GPUs. |
| 122 bool hasImplicitStencilBuffer() const { return m_hasImplicitStencilBuffer; } | 136 bool hasImplicitStencilBuffer() const { return m_hasImplicitStencilBuffer; } |
| 123 bool hasDepthBuffer() const { return !!m_depthStencilBuffer; } | 137 bool hasDepthBuffer() const { return !!m_depthStencilBuffer; } |
| 124 bool hasStencilBuffer() const { return !!m_depthStencilBuffer; } | 138 bool hasStencilBuffer() const { return !!m_depthStencilBuffer; } |
| 125 | 139 |
| 126 // Given the desired buffer size, provides the largest dimensions that will | 140 // Given the desired buffer size, provides the largest dimensions that will |
| 127 // fit in the pixel budget. | 141 // fit in the pixel budget. |
| 128 static IntSize adjustSize(const IntSize& desiredSize, | 142 static IntSize adjustSize(const IntSize& desiredSize, |
| 129 const IntSize& curSize, | 143 const IntSize& curSize, |
| 130 int maxTextureSize); | 144 int maxTextureSize); |
| 131 | 145 |
| 132 // Resizes (or allocates if necessary) all buffers attached to the default | 146 // Resizes (or allocates if necessary) all buffers attached to the default |
| 133 // framebuffer. Returns whether the operation was successful. Leaves GL | 147 // framebuffer. Returns whether the operation was successful. |
| 134 // bindings dirtied. | 148 bool resize(const IntSize&); |
| 135 bool reset(const IntSize&); | |
| 136 | 149 |
| 137 // Bind the default framebuffer to |target|. |target| must be | 150 // Bind the default framebuffer to |target|. |target| must be |
| 138 // GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_DRAW_FRAMEBUFFER. | 151 // GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_DRAW_FRAMEBUFFER. |
| 139 void bind(GLenum target); | 152 void bind(GLenum target); |
| 140 IntSize size() const { return m_size; } | 153 IntSize size() const { return m_size; } |
| 141 | 154 |
| 142 // Copies the multisample color buffer to the normal color buffer and leaves | 155 // Resolves the multisample color buffer to the normal color buffer and leaves |
| 143 // m_fbo bound. | 156 // the resolved color buffer bound to GL_READ_FRAMEBUFFER and |
| 144 void commit(); | 157 // GL_DRAW_FRAMEBUFFER. |
| 145 | 158 void resolveAndBindForReadAndDraw(); |
| 146 // commit should copy the full multisample buffer, and not respect the | |
| 147 // current scissor bounds. Track the state of the scissor test so that it | |
| 148 // can be disabled during calls to commit. | |
| 149 void setScissorEnabled(bool scissorEnabled) { | |
| 150 m_scissorEnabled = scissorEnabled; | |
| 151 } | |
| 152 | |
| 153 // The DrawingBuffer needs to track the texture bound to texture unit 0. | |
| 154 // The bound texture is tracked to avoid costly queries during rendering. | |
| 155 void setTexture2DBinding(GLuint texture) { m_texture2DBinding = texture; } | |
| 156 | |
| 157 void setPixelUnpackBufferBinding(GLuint buffer) { | |
| 158 DCHECK(m_webGLVersion > WebGL1); | |
| 159 m_pixelUnpackBufferBinding = buffer; | |
| 160 } | |
| 161 | |
| 162 void notifyBufferDeleted(GLuint buffer) { | |
| 163 if (m_webGLVersion > WebGL1 && buffer == m_pixelUnpackBufferBinding) { | |
| 164 setPixelUnpackBufferBinding(0); | |
| 165 } | |
| 166 } | |
| 167 | |
| 168 // The DrawingBuffer needs to track the currently bound framebuffer so it | |
| 169 // restore the binding when needed. | |
| 170 void setFramebufferBinding(GLenum target, GLuint fbo) { | |
| 171 switch (target) { | |
| 172 case GL_FRAMEBUFFER: | |
| 173 m_drawFramebufferBinding = fbo; | |
| 174 m_readFramebufferBinding = fbo; | |
| 175 break; | |
| 176 case GL_DRAW_FRAMEBUFFER: | |
| 177 m_drawFramebufferBinding = fbo; | |
| 178 break; | |
| 179 case GL_READ_FRAMEBUFFER: | |
| 180 m_readFramebufferBinding = fbo; | |
| 181 break; | |
| 182 default: | |
| 183 ASSERT(0); | |
| 184 } | |
| 185 } | |
| 186 | |
| 187 // The DrawingBuffer needs to track the color mask and clear color so that | |
| 188 // it can restore it when needed. | |
| 189 void setClearColor(GLfloat* clearColor) { | |
| 190 memcpy(m_clearColor, clearColor, 4 * sizeof(GLfloat)); | |
| 191 } | |
| 192 | |
| 193 void setColorMask(GLboolean* colorMask) { | |
| 194 memcpy(m_colorMask, colorMask, 4 * sizeof(GLboolean)); | |
| 195 } | |
| 196 | |
| 197 // The DrawingBuffer needs to track the currently bound renderbuffer so it | |
| 198 // restore the binding when needed. | |
| 199 void setRenderbufferBinding(GLuint renderbuffer) { | |
| 200 m_renderbufferBinding = renderbuffer; | |
| 201 } | |
| 202 | |
| 203 // Track the currently active texture unit. Texture unit 0 is used as host for | |
| 204 // a scratch texture. | |
| 205 void setActiveTextureUnit(GLint textureUnit) { | |
| 206 m_activeTextureUnit = textureUnit; | |
| 207 } | |
| 208 | 159 |
| 209 bool multisample() const; | 160 bool multisample() const; |
| 210 | 161 |
| 211 GLuint framebuffer() const; | |
| 212 | |
| 213 bool discardFramebufferSupported() const { | 162 bool discardFramebufferSupported() const { |
| 214 return m_discardFramebufferSupported; | 163 return m_discardFramebufferSupported; |
| 215 } | 164 } |
| 216 | 165 |
| 217 void markContentsChanged(); | 166 void markContentsChanged(); |
| 218 void setBufferClearNeeded(bool); | 167 void setBufferClearNeeded(bool); |
| 219 bool bufferClearNeeded() const; | 168 bool bufferClearNeeded() const; |
| 220 void setIsHidden(bool); | 169 void setIsHidden(bool); |
| 221 void setFilterQuality(SkFilterQuality); | 170 void setFilterQuality(SkFilterQuality); |
| 222 | 171 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 239 bool PrepareTextureMailbox( | 188 bool PrepareTextureMailbox( |
| 240 cc::TextureMailbox* outMailbox, | 189 cc::TextureMailbox* outMailbox, |
| 241 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback) override; | 190 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback) override; |
| 242 | 191 |
| 243 // Returns a StaticBitmapImage backed by a texture containing the current | 192 // Returns a StaticBitmapImage backed by a texture containing the current |
| 244 // contents of the front buffer. This is done without any pixel copies. The | 193 // contents of the front buffer. This is done without any pixel copies. The |
| 245 // texture in the ImageBitmap is from the active ContextProvider on the | 194 // texture in the ImageBitmap is from the active ContextProvider on the |
| 246 // DrawingBuffer. | 195 // DrawingBuffer. |
| 247 PassRefPtr<StaticBitmapImage> transferToStaticBitmapImage(); | 196 PassRefPtr<StaticBitmapImage> transferToStaticBitmapImage(); |
| 248 | 197 |
| 249 // Destroys the TEXTURE_2D binding for the owned context | |
| 250 bool copyToPlatformTexture(gpu::gles2::GLES2Interface*, | 198 bool copyToPlatformTexture(gpu::gles2::GLES2Interface*, |
| 251 GLuint texture, | 199 GLuint texture, |
| 252 GLenum internalFormat, | 200 GLenum internalFormat, |
| 253 GLenum destType, | 201 GLenum destType, |
| 254 GLint level, | 202 GLint level, |
| 255 bool premultiplyAlpha, | 203 bool premultiplyAlpha, |
| 256 bool flipY, | 204 bool flipY, |
| 257 SourceDrawingBuffer); | 205 SourceDrawingBuffer); |
| 258 | 206 |
| 259 void setPackAlignment(GLint param); | |
| 260 | |
| 261 bool paintRenderingResultsToImageData(int&, | 207 bool paintRenderingResultsToImageData(int&, |
| 262 int&, | 208 int&, |
| 263 SourceDrawingBuffer, | 209 SourceDrawingBuffer, |
| 264 WTF::ArrayBufferContents&); | 210 WTF::ArrayBufferContents&); |
| 265 | 211 |
| 266 int sampleCount() const { return m_sampleCount; } | 212 int sampleCount() const { return m_sampleCount; } |
| 267 bool explicitResolveOfMultisampleData() const { | 213 bool explicitResolveOfMultisampleData() const { |
| 268 return m_antiAliasingMode == MSAAExplicitResolve; | 214 return m_antiAliasingMode == MSAAExplicitResolve; |
| 269 } | 215 } |
| 270 | 216 |
| 271 void restorePixelUnpackBufferBindings(); | 217 // Rebind the read and draw framebuffers that WebGL is expecting. |
| 272 | |
| 273 // Bind to m_drawFramebufferBinding or m_readFramebufferBinding if it's not 0. | |
| 274 // Otherwise, bind to the default FBO. | |
| 275 void restoreFramebufferBindings(); | 218 void restoreFramebufferBindings(); |
| 276 | 219 |
| 277 void restoreTextureBindings(); | 220 // Restore all state that may have been dirtied by any call. |
| 221 void restoreAllState(); |
| 278 | 222 |
| 279 void addNewMailboxCallback(std::unique_ptr<WTF::Closure> closure) { | 223 void addNewMailboxCallback(std::unique_ptr<WTF::Closure> closure) { |
| 280 m_newMailboxCallback = std::move(closure); | 224 m_newMailboxCallback = std::move(closure); |
| 281 } | 225 } |
| 282 | 226 |
| 283 protected: // For unittests | 227 protected: // For unittests |
| 284 DrawingBuffer(std::unique_ptr<WebGraphicsContext3DProvider>, | 228 DrawingBuffer(std::unique_ptr<WebGraphicsContext3DProvider>, |
| 285 std::unique_ptr<Extensions3DUtil>, | 229 std::unique_ptr<Extensions3DUtil>, |
| 230 Client*, |
| 286 bool discardFramebufferSupported, | 231 bool discardFramebufferSupported, |
| 287 bool wantAlphaChannel, | 232 bool wantAlphaChannel, |
| 288 bool premultipliedAlpha, | 233 bool premultipliedAlpha, |
| 289 PreserveDrawingBuffer, | 234 PreserveDrawingBuffer, |
| 290 WebGLVersion, | 235 WebGLVersion, |
| 291 bool wantsDepth, | 236 bool wantsDepth, |
| 292 bool wantsStencil, | 237 bool wantsStencil, |
| 293 ChromiumImageUsage); | 238 ChromiumImageUsage); |
| 294 | 239 |
| 295 bool initialize(const IntSize&, bool useMultisampling); | 240 bool initialize(const IntSize&, bool useMultisampling); |
| 296 | 241 |
| 297 // Shared memory bitmaps that were released by the compositor and can be used | 242 // Shared memory bitmaps that were released by the compositor and can be used |
| 298 // again by this DrawingBuffer. | 243 // again by this DrawingBuffer. |
| 299 struct RecycledBitmap { | 244 struct RecycledBitmap { |
| 300 std::unique_ptr<cc::SharedBitmap> bitmap; | 245 std::unique_ptr<cc::SharedBitmap> bitmap; |
| 301 IntSize size; | 246 IntSize size; |
| 302 }; | 247 }; |
| 303 Vector<RecycledBitmap> m_recycledBitmaps; | 248 Vector<RecycledBitmap> m_recycledBitmaps; |
| 304 | 249 |
| 305 private: | 250 private: |
| 251 friend class ScopedStateRestorer; |
| 252 friend class ColorBuffer; |
| 253 |
| 254 // This structure should wrap all public entrypoints that may modify GL state. |
| 255 // It will restore all state when it drops out of scope. |
| 256 class ScopedStateRestorer { |
| 257 public: |
| 258 ScopedStateRestorer(DrawingBuffer*); |
| 259 ~ScopedStateRestorer(); |
| 260 |
| 261 // Mark parts of the state that are dirty and need to be restored. |
| 262 void setClearStateDirty() { m_clearStateDirty = true; } |
| 263 void setPixelPackAlignmentDirty() { m_pixelPackAlignmentDirty = true; } |
| 264 void setTextureBindingDirty() { m_textureBindingDirty = true; } |
| 265 void setRenderbufferBindingDirty() { m_renderbufferBindingDirty = true; } |
| 266 void setFramebufferBindingDirty() { m_framebufferBindingDirty = true; } |
| 267 void setPixelUnpackBufferBindingDirty() { |
| 268 m_pixelUnpackBufferBindingDirty = true; |
| 269 } |
| 270 |
| 271 private: |
| 272 RefPtr<DrawingBuffer> m_drawingBuffer; |
| 273 bool m_clearStateDirty = false; |
| 274 bool m_pixelPackAlignmentDirty = false; |
| 275 bool m_textureBindingDirty = false; |
| 276 bool m_renderbufferBindingDirty = false; |
| 277 bool m_framebufferBindingDirty = false; |
| 278 bool m_pixelUnpackBufferBindingDirty = false; |
| 279 }; |
| 280 |
| 306 // All parameters necessary to generate the texture for the ColorBuffer. | 281 // All parameters necessary to generate the texture for the ColorBuffer. |
| 307 struct ColorBufferParameters { | 282 struct ColorBufferParameters { |
| 308 DISALLOW_NEW(); | 283 DISALLOW_NEW(); |
| 309 GLenum target = 0; | 284 GLenum target = 0; |
| 310 GLenum internalColorFormat = 0; | 285 GLenum internalColorFormat = 0; |
| 311 | 286 |
| 312 // The internal color format used when allocating storage for the | 287 // The internal color format used when allocating storage for the |
| 313 // texture. This may be different from internalColorFormat if RGB | 288 // texture. This may be different from internalColorFormat if RGB |
| 314 // emulation is required. | 289 // emulation is required. |
| 315 GLenum creationInternalColorFormat = 0; | 290 GLenum creationInternalColorFormat = 0; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 342 gpu::SyncToken produceSyncToken; | 317 gpu::SyncToken produceSyncToken; |
| 343 | 318 |
| 344 // The sync token for when this buffer was received back from the | 319 // The sync token for when this buffer was received back from the |
| 345 // compositor. | 320 // compositor. |
| 346 gpu::SyncToken receiveSyncToken; | 321 gpu::SyncToken receiveSyncToken; |
| 347 | 322 |
| 348 private: | 323 private: |
| 349 WTF_MAKE_NONCOPYABLE(ColorBuffer); | 324 WTF_MAKE_NONCOPYABLE(ColorBuffer); |
| 350 }; | 325 }; |
| 351 | 326 |
| 327 // The same as clearFramebuffers(), but leaves GL state dirty. |
| 328 void clearFramebuffersInternal(GLbitfield clearMask); |
| 329 |
| 330 // The same as reset(), but leaves GL state dirty. |
| 331 bool resizeFramebufferInternal(const IntSize&); |
| 332 |
| 333 // The same as commit(), but leaves GL state dirty. |
| 334 void resolveMultisampleFramebufferInternal(); |
| 335 |
| 352 bool prepareTextureMailboxInternal( | 336 bool prepareTextureMailboxInternal( |
| 353 cc::TextureMailbox* outMailbox, | 337 cc::TextureMailbox* outMailbox, |
| 354 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback, | 338 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback, |
| 355 bool forceGpuResult); | 339 bool forceGpuResult); |
| 356 | 340 |
| 357 // Helper functions to be called only by prepareTextureMailboxInternal. | 341 // Helper functions to be called only by prepareTextureMailboxInternal. |
| 358 bool finishPrepareTextureMailboxGpu( | 342 bool finishPrepareTextureMailboxGpu( |
| 359 cc::TextureMailbox* outMailbox, | 343 cc::TextureMailbox* outMailbox, |
| 360 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback); | 344 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback); |
| 361 bool finishPrepareTextureMailboxSoftware( | 345 bool finishPrepareTextureMailboxSoftware( |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 // implemented by forwarding all draw operations to a multisample | 411 // implemented by forwarding all draw operations to a multisample |
| 428 // renderbuffer, which is resolved before any read operations or swaps. | 412 // renderbuffer, which is resolved before any read operations or swaps. |
| 429 bool wantExplicitResolve(); | 413 bool wantExplicitResolve(); |
| 430 | 414 |
| 431 // Whether the WebGL client wants a depth or stencil buffer. | 415 // Whether the WebGL client wants a depth or stencil buffer. |
| 432 bool wantDepthOrStencil(); | 416 bool wantDepthOrStencil(); |
| 433 | 417 |
| 434 // The format to use when creating a multisampled renderbuffer. | 418 // The format to use when creating a multisampled renderbuffer. |
| 435 GLenum getMultisampledRenderbufferFormat(); | 419 GLenum getMultisampledRenderbufferFormat(); |
| 436 | 420 |
| 421 // Weak, reset by beginDestruction. |
| 422 Client* m_client = nullptr; |
| 423 |
| 437 const PreserveDrawingBuffer m_preserveDrawingBuffer; | 424 const PreserveDrawingBuffer m_preserveDrawingBuffer; |
| 438 const WebGLVersion m_webGLVersion; | 425 const WebGLVersion m_webGLVersion; |
| 439 bool m_scissorEnabled = false; | |
| 440 GLuint m_texture2DBinding = 0; | |
| 441 GLuint m_pixelUnpackBufferBinding = 0; | |
| 442 GLuint m_drawFramebufferBinding = 0; | |
| 443 GLuint m_readFramebufferBinding = 0; | |
| 444 GLuint m_renderbufferBinding = 0; | |
| 445 GLenum m_activeTextureUnit = GL_TEXTURE0; | |
| 446 GLfloat m_clearColor[4]; | |
| 447 GLboolean m_colorMask[4]; | |
| 448 | 426 |
| 449 std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider; | 427 std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider; |
| 450 // Lifetime is tied to the m_contextProvider. | 428 // Lifetime is tied to the m_contextProvider. |
| 451 gpu::gles2::GLES2Interface* m_gl; | 429 gpu::gles2::GLES2Interface* m_gl; |
| 452 std::unique_ptr<Extensions3DUtil> m_extensionsUtil; | 430 std::unique_ptr<Extensions3DUtil> m_extensionsUtil; |
| 453 IntSize m_size = {-1, -1}; | 431 IntSize m_size = {-1, -1}; |
| 454 const bool m_discardFramebufferSupported; | 432 const bool m_discardFramebufferSupported; |
| 455 const bool m_wantAlphaChannel; | 433 const bool m_wantAlphaChannel; |
| 456 const bool m_premultipliedAlpha; | 434 const bool m_premultipliedAlpha; |
| 457 const bool m_softwareRendering; | 435 const bool m_softwareRendering; |
| 458 bool m_hasImplicitStencilBuffer = false; | 436 bool m_hasImplicitStencilBuffer = false; |
| 459 bool m_storageTextureSupported = false; | 437 bool m_storageTextureSupported = false; |
| 460 | 438 |
| 461 std::unique_ptr<WTF::Closure> m_newMailboxCallback; | 439 std::unique_ptr<WTF::Closure> m_newMailboxCallback; |
| 462 | 440 |
| 441 // The current state restorer, which is used to track state dirtying. It is in |
| 442 // error to dirty state shared with WebGL while there is no existing state |
| 443 // restorer. It is also in error to instantiate two state restorers at once. |
| 444 ScopedStateRestorer* m_stateRestorer = nullptr; |
| 445 |
| 463 // This is used when the user requests either a depth or stencil buffer. | 446 // This is used when the user requests either a depth or stencil buffer. |
| 464 GLuint m_depthStencilBuffer = 0; | 447 GLuint m_depthStencilBuffer = 0; |
| 465 | 448 |
| 466 // When wantExplicitResolve() returns true, the target of all draw | 449 // When wantExplicitResolve() returns true, the target of all draw |
| 467 // operations. | 450 // operations. |
| 468 GLuint m_multisampleFBO = 0; | 451 GLuint m_multisampleFBO = 0; |
| 469 | 452 |
| 470 // The id of the renderbuffer storage for |m_multisampleFBO|. | 453 // The id of the renderbuffer storage for |m_multisampleFBO|. |
| 471 GLuint m_multisampleRenderbuffer = 0; | 454 GLuint m_multisampleRenderbuffer = 0; |
| 472 | 455 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 499 None, | 482 None, |
| 500 MSAAImplicitResolve, | 483 MSAAImplicitResolve, |
| 501 MSAAExplicitResolve, | 484 MSAAExplicitResolve, |
| 502 ScreenSpaceAntialiasing, | 485 ScreenSpaceAntialiasing, |
| 503 }; | 486 }; |
| 504 | 487 |
| 505 AntialiasingMode m_antiAliasingMode = None; | 488 AntialiasingMode m_antiAliasingMode = None; |
| 506 | 489 |
| 507 int m_maxTextureSize = 0; | 490 int m_maxTextureSize = 0; |
| 508 int m_sampleCount = 0; | 491 int m_sampleCount = 0; |
| 509 int m_packAlignment = 4; | |
| 510 bool m_destructionInProgress = false; | 492 bool m_destructionInProgress = false; |
| 511 bool m_isHidden = false; | 493 bool m_isHidden = false; |
| 512 SkFilterQuality m_filterQuality = kLow_SkFilterQuality; | 494 SkFilterQuality m_filterQuality = kLow_SkFilterQuality; |
| 513 | 495 |
| 514 std::unique_ptr<WebExternalTextureLayer> m_layer; | 496 std::unique_ptr<WebExternalTextureLayer> m_layer; |
| 515 | 497 |
| 516 // Mailboxes that were released by the compositor can be used again by this | 498 // Mailboxes that were released by the compositor can be used again by this |
| 517 // DrawingBuffer. | 499 // DrawingBuffer. |
| 518 Deque<RefPtr<ColorBuffer>> m_recycledColorBufferQueue; | 500 Deque<RefPtr<ColorBuffer>> m_recycledColorBufferQueue; |
| 519 | 501 |
| 520 // If the width and height of the Canvas's backing store don't | 502 // If the width and height of the Canvas's backing store don't |
| 521 // match those that we were given in the most recent call to | 503 // match those that we were given in the most recent call to |
| 522 // reshape(), then we need an intermediate bitmap to read back the | 504 // reshape(), then we need an intermediate bitmap to read back the |
| 523 // frame buffer into. This seems to happen when CSS styles are | 505 // frame buffer into. This seems to happen when CSS styles are |
| 524 // used to resize the Canvas. | 506 // used to resize the Canvas. |
| 525 SkBitmap m_resizingBitmap; | 507 SkBitmap m_resizingBitmap; |
| 526 | 508 |
| 527 // In the case of OffscreenCanvas, we do not want to enable the | 509 // In the case of OffscreenCanvas, we do not want to enable the |
| 528 // WebGLImageChromium flag, so we replace all the | 510 // WebGLImageChromium flag, so we replace all the |
| 529 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() call with | 511 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() call with |
| 530 // shouldUseChromiumImage() calls, and set m_chromiumImageUsage to | 512 // shouldUseChromiumImage() calls, and set m_chromiumImageUsage to |
| 531 // DisallowChromiumImage in the case of OffscreenCanvas. | 513 // DisallowChromiumImage in the case of OffscreenCanvas. |
| 532 ChromiumImageUsage m_chromiumImageUsage; | 514 ChromiumImageUsage m_chromiumImageUsage; |
| 533 bool shouldUseChromiumImage(); | 515 bool shouldUseChromiumImage(); |
| 534 }; | 516 }; |
| 535 | 517 |
| 536 } // namespace blink | 518 } // namespace blink |
| 537 | 519 |
| 538 #endif // DrawingBuffer_h | 520 #endif // DrawingBuffer_h |
| OLD | NEW |