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

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

Issue 2391943002: Rewrap comments to 80 columns in platform/graphics/{compositing,cpu,gpu,skia}/. (Closed)
Patch Set: One space 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 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 namespace blink { 63 namespace blink {
64 class Extensions3DUtil; 64 class Extensions3DUtil;
65 class ImageBuffer; 65 class ImageBuffer;
66 class StaticBitmapImage; 66 class StaticBitmapImage;
67 class WebExternalBitmap; 67 class WebExternalBitmap;
68 class WebExternalTextureLayer; 68 class WebExternalTextureLayer;
69 class WebGraphicsContext3DProvider; 69 class WebGraphicsContext3DProvider;
70 class WebLayer; 70 class WebLayer;
71 71
72 // Manages a rendering target (framebuffer + attachment) for a canvas. Can publ ish its rendering 72 // Manages a rendering target (framebuffer + attachment) for a canvas. Can
73 // 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 enum PreserveDrawingBuffer { 80 enum PreserveDrawingBuffer {
81 Preserve, 81 Preserve,
82 Discard, 82 Discard,
83 }; 83 };
(...skipping 18 matching lines...) Expand all
102 PreserveDrawingBuffer, 102 PreserveDrawingBuffer,
103 WebGLVersion, 103 WebGLVersion,
104 ChromiumImageUsage); 104 ChromiumImageUsage);
105 static void forceNextDrawingBufferCreationToFail(); 105 static void forceNextDrawingBufferCreationToFail();
106 106
107 ~DrawingBuffer() override; 107 ~DrawingBuffer() override;
108 108
109 // Destruction will be completed after all mailboxes are released. 109 // Destruction will be completed after all mailboxes are released.
110 void beginDestruction(); 110 void beginDestruction();
111 111
112 // Issues a glClear() on all framebuffers associated with this DrawingBuffer. The caller is responsible for 112 // Issues a glClear() on all framebuffers associated with this DrawingBuffer.
113 // making the context current and setting the clear values and masks. Modifies the framebuffer binding. 113 // The caller is responsible for making the context current and setting the
114 // clear values and masks. Modifies the framebuffer binding.
114 void clearFramebuffers(GLbitfield clearMask); 115 void clearFramebuffers(GLbitfield clearMask);
115 116
116 // Indicates whether the DrawingBuffer internally allocated a packed depth-ste ncil renderbuffer 117 // Indicates whether the DrawingBuffer internally allocated a packed
117 // in the situation where the end user only asked for a depth buffer. In this case, we need to 118 // depth-stencil renderbuffer in the situation where the end user only asked
118 // upgrade clears of the depth buffer to clears of the depth and stencil buffe rs in order to 119 // for a depth buffer. In this case, we need to upgrade clears of the depth
119 // avoid performance problems on some GPUs. 120 // buffer to clears of the depth and stencil buffers in order to avoid
121 // performance problems on some GPUs.
120 bool hasImplicitStencilBuffer() const { return m_hasImplicitStencilBuffer; } 122 bool hasImplicitStencilBuffer() const { return m_hasImplicitStencilBuffer; }
121 bool hasDepthBuffer() const { return !!m_depthStencilBuffer; } 123 bool hasDepthBuffer() const { return !!m_depthStencilBuffer; }
122 bool hasStencilBuffer() const { return !!m_depthStencilBuffer; } 124 bool hasStencilBuffer() const { return !!m_depthStencilBuffer; }
123 125
124 // Given the desired buffer size, provides the largest dimensions that will fi t in the pixel budget. 126 // Given the desired buffer size, provides the largest dimensions that will
127 // fit in the pixel budget.
125 static IntSize adjustSize(const IntSize& desiredSize, 128 static IntSize adjustSize(const IntSize& desiredSize,
126 const IntSize& curSize, 129 const IntSize& curSize,
127 int maxTextureSize); 130 int maxTextureSize);
128 131
129 // Resizes (or allocates if necessary) all buffers attached to the default 132 // Resizes (or allocates if necessary) all buffers attached to the default
130 // framebuffer. Returns whether the operation was successful. Leaves GL 133 // framebuffer. Returns whether the operation was successful. Leaves GL
131 // bindings dirtied. 134 // bindings dirtied.
132 bool reset(const IntSize&); 135 bool reset(const IntSize&);
133 136
134 // Bind the default framebuffer to |target|. |target| must be 137 // Bind the default framebuffer to |target|. |target| must be
135 // GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_DRAW_FRAMEBUFFER. 138 // GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_DRAW_FRAMEBUFFER.
136 void bind(GLenum target); 139 void bind(GLenum target);
137 IntSize size() const { return m_size; } 140 IntSize size() const { return m_size; }
138 141
139 // Copies the multisample color buffer to the normal color buffer and leaves m _fbo bound. 142 // Copies the multisample color buffer to the normal color buffer and leaves
143 // m_fbo bound.
140 void commit(); 144 void commit();
141 145
142 // commit should copy the full multisample buffer, and not respect the 146 // commit should copy the full multisample buffer, and not respect the
143 // current scissor bounds. Track the state of the scissor test so that it 147 // current scissor bounds. Track the state of the scissor test so that it
144 // can be disabled during calls to commit. 148 // can be disabled during calls to commit.
145 void setScissorEnabled(bool scissorEnabled) { 149 void setScissorEnabled(bool scissorEnabled) {
146 m_scissorEnabled = scissorEnabled; 150 m_scissorEnabled = scissorEnabled;
147 } 151 }
148 152
149 // The DrawingBuffer needs to track the texture bound to texture unit 0. 153 // The DrawingBuffer needs to track the texture bound to texture unit 0.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 void setColorMask(GLboolean* colorMask) { 193 void setColorMask(GLboolean* colorMask) {
190 memcpy(m_colorMask, colorMask, 4 * sizeof(GLboolean)); 194 memcpy(m_colorMask, colorMask, 4 * sizeof(GLboolean));
191 } 195 }
192 196
193 // The DrawingBuffer needs to track the currently bound renderbuffer so it 197 // The DrawingBuffer needs to track the currently bound renderbuffer so it
194 // restore the binding when needed. 198 // restore the binding when needed.
195 void setRenderbufferBinding(GLuint renderbuffer) { 199 void setRenderbufferBinding(GLuint renderbuffer) {
196 m_renderbufferBinding = renderbuffer; 200 m_renderbufferBinding = renderbuffer;
197 } 201 }
198 202
199 // Track the currently active texture unit. Texture unit 0 is used as host for a scratch 203 // Track the currently active texture unit. Texture unit 0 is used as host for
200 // texture. 204 // a scratch texture.
201 void setActiveTextureUnit(GLint textureUnit) { 205 void setActiveTextureUnit(GLint textureUnit) {
202 m_activeTextureUnit = textureUnit; 206 m_activeTextureUnit = textureUnit;
203 } 207 }
204 208
205 bool multisample() const; 209 bool multisample() const;
206 210
207 GLuint framebuffer() const; 211 GLuint framebuffer() const;
208 212
209 bool discardFramebufferSupported() const { 213 bool discardFramebufferSupported() const {
210 return m_discardFramebufferSupported; 214 return m_discardFramebufferSupported;
(...skipping 18 matching lines...) Expand all
229 WebLayer* platformLayer(); 233 WebLayer* platformLayer();
230 234
231 gpu::gles2::GLES2Interface* contextGL(); 235 gpu::gles2::GLES2Interface* contextGL();
232 WebGraphicsContext3DProvider* contextProvider(); 236 WebGraphicsContext3DProvider* contextProvider();
233 237
234 // cc::TextureLayerClient implementation. 238 // cc::TextureLayerClient implementation.
235 bool PrepareTextureMailbox( 239 bool PrepareTextureMailbox(
236 cc::TextureMailbox* outMailbox, 240 cc::TextureMailbox* outMailbox,
237 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback) override; 241 std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback) override;
238 242
239 // Returns a StaticBitmapImage backed by a texture containing the/ current con tents of 243 // Returns a StaticBitmapImage backed by a texture containing the current
240 // the front buffer. This is done without any pixel copies. The texture in the ImageBitmap 244 // contents of the front buffer. This is done without any pixel copies. The
241 // is from the active ContextProvider on the DrawingBuffer. 245 // texture in the ImageBitmap is from the active ContextProvider on the
246 // DrawingBuffer.
242 PassRefPtr<StaticBitmapImage> transferToStaticBitmapImage(); 247 PassRefPtr<StaticBitmapImage> transferToStaticBitmapImage();
243 248
244 // Destroys the TEXTURE_2D binding for the owned context 249 // Destroys the TEXTURE_2D binding for the owned context
245 bool copyToPlatformTexture(gpu::gles2::GLES2Interface*, 250 bool copyToPlatformTexture(gpu::gles2::GLES2Interface*,
246 GLuint texture, 251 GLuint texture,
247 GLenum internalFormat, 252 GLenum internalFormat,
248 GLenum destType, 253 GLenum destType,
249 GLint level, 254 GLint level,
250 bool premultiplyAlpha, 255 bool premultiplyAlpha,
251 bool flipY, 256 bool flipY,
(...skipping 30 matching lines...) Expand all
282 bool wantAlphaChannel, 287 bool wantAlphaChannel,
283 bool premultipliedAlpha, 288 bool premultipliedAlpha,
284 PreserveDrawingBuffer, 289 PreserveDrawingBuffer,
285 WebGLVersion, 290 WebGLVersion,
286 bool wantsDepth, 291 bool wantsDepth,
287 bool wantsStencil, 292 bool wantsStencil,
288 ChromiumImageUsage); 293 ChromiumImageUsage);
289 294
290 bool initialize(const IntSize&, bool useMultisampling); 295 bool initialize(const IntSize&, bool useMultisampling);
291 296
292 // Shared memory bitmaps that were released by the compositor and can be used again by this DrawingBuffer. 297 // Shared memory bitmaps that were released by the compositor and can be used
298 // again by this DrawingBuffer.
293 struct RecycledBitmap { 299 struct RecycledBitmap {
294 std::unique_ptr<cc::SharedBitmap> bitmap; 300 std::unique_ptr<cc::SharedBitmap> bitmap;
295 IntSize size; 301 IntSize size;
296 }; 302 };
297 Vector<RecycledBitmap> m_recycledBitmaps; 303 Vector<RecycledBitmap> m_recycledBitmaps;
298 304
299 private: 305 private:
300 // All parameters necessary to generate the texture that will be passed to 306 // All parameters necessary to generate the texture that will be passed to
301 // prepareMailbox. 307 // prepareMailbox.
302 struct TextureParameters { 308 struct TextureParameters {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 373
368 void clearPlatformLayer(); 374 void clearPlatformLayer();
369 375
370 PassRefPtr<MailboxInfo> takeRecycledMailbox(); 376 PassRefPtr<MailboxInfo> takeRecycledMailbox();
371 PassRefPtr<MailboxInfo> createNewMailbox(const TextureInfo&); 377 PassRefPtr<MailboxInfo> createNewMailbox(const TextureInfo&);
372 void deleteMailbox(const gpu::Mailbox&, const gpu::SyncToken&); 378 void deleteMailbox(const gpu::Mailbox&, const gpu::SyncToken&);
373 void freeRecycledMailboxes(); 379 void freeRecycledMailboxes();
374 380
375 std::unique_ptr<cc::SharedBitmap> createOrRecycleBitmap(); 381 std::unique_ptr<cc::SharedBitmap> createOrRecycleBitmap();
376 382
377 // Updates the current size of the buffer, ensuring that s_currentResourceUseP ixels is updated. 383 // Updates the current size of the buffer, ensuring that
384 // s_currentResourceUsePixels is updated.
378 void setSize(const IntSize& size); 385 void setSize(const IntSize& size);
379 386
380 // This is the order of bytes to use when doing a readback. 387 // This is the order of bytes to use when doing a readback.
381 enum ReadbackOrder { ReadbackRGBA, ReadbackSkia }; 388 enum ReadbackOrder { ReadbackRGBA, ReadbackSkia };
382 389
383 // Helper function which does a readback from the currently-bound 390 // Helper function which does a readback from the currently-bound
384 // framebuffer into a buffer of a certain size with 4-byte pixels. 391 // framebuffer into a buffer of a certain size with 4-byte pixels.
385 void readBackFramebuffer(unsigned char* pixels, 392 void readBackFramebuffer(unsigned char* pixels,
386 int width, 393 int width,
387 int height, 394 int height,
388 ReadbackOrder, 395 ReadbackOrder,
389 WebGLImageConversion::AlphaOp); 396 WebGLImageConversion::AlphaOp);
390 397
391 // Helper function to flip a bitmap vertically. 398 // Helper function to flip a bitmap vertically.
392 void flipVertically(uint8_t* data, int width, int height); 399 void flipVertically(uint8_t* data, int width, int height);
393 400
394 // Allocate a storage texture if possible. Otherwise, allocate a regular textu re. 401 // Allocate a storage texture if possible. Otherwise, allocate a regular
402 // texture.
395 void allocateConditionallyImmutableTexture(GLenum target, 403 void allocateConditionallyImmutableTexture(GLenum target,
396 GLenum internalformat, 404 GLenum internalformat,
397 GLsizei width, 405 GLsizei width,
398 GLsizei height, 406 GLsizei height,
399 GLint border, 407 GLint border,
400 GLenum format, 408 GLenum format,
401 GLenum type); 409 GLenum type);
402 // Allocate buffer storage to be sent to compositor using either texImage2D or CHROMIUM_image based on available support. 410 // Allocate buffer storage to be sent to compositor using either texImage2D or
411 // CHROMIUM_image based on available support.
403 void deleteChromiumImageForTexture(TextureInfo*); 412 void deleteChromiumImageForTexture(TextureInfo*);
404 413
405 // If RGB emulation is required, then the CHROMIUM image's alpha channel 414 // If RGB emulation is required, then the CHROMIUM image's alpha channel
406 // must be immediately cleared after it is bound to a texture. Nothing 415 // must be immediately cleared after it is bound to a texture. Nothing
407 // should be allowed to change the alpha channel after this. 416 // should be allowed to change the alpha channel after this.
408 void clearChromiumImageAlpha(const TextureInfo&); 417 void clearChromiumImageAlpha(const TextureInfo&);
409 418
410 // Tries to create a CHROMIUM_image backed texture if 419 // Tries to create a CHROMIUM_image backed texture if
411 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() is true. On failure, 420 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() is true. On failure,
412 // or if the flag is false, creates a default texture. 421 // or if the flag is false, creates a default texture.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 485
477 // When wantExplicitResolve() returns false, the target of all draw and 486 // When wantExplicitResolve() returns false, the target of all draw and
478 // read operations. When wantExplicitResolve() returns true, the target of 487 // read operations. When wantExplicitResolve() returns true, the target of
479 // all read operations. A swap is performed by exchanging |m_colorBuffer| 488 // all read operations. A swap is performed by exchanging |m_colorBuffer|
480 // with |m_frontColorBuffer|. 489 // with |m_frontColorBuffer|.
481 GLuint m_fbo = 0; 490 GLuint m_fbo = 0;
482 491
483 // All information about the texture storage for |m_fbo|. 492 // All information about the texture storage for |m_fbo|.
484 TextureInfo m_colorBuffer; 493 TextureInfo m_colorBuffer;
485 494
486 // True if our contents have been modified since the last presentation of this buffer. 495 // True if our contents have been modified since the last presentation of this
496 // buffer.
487 bool m_contentsChanged = true; 497 bool m_contentsChanged = true;
488 498
489 // True if commit() has been called since the last time markContentsChanged() had been called. 499 // True if commit() has been called since the last time markContentsChanged()
500 // had been called.
490 bool m_contentsChangeCommitted = false; 501 bool m_contentsChangeCommitted = false;
491 bool m_bufferClearNeeded = false; 502 bool m_bufferClearNeeded = false;
492 503
493 // Whether the client wants a depth or stencil buffer. 504 // Whether the client wants a depth or stencil buffer.
494 const bool m_wantDepth; 505 const bool m_wantDepth;
495 const bool m_wantStencil; 506 const bool m_wantStencil;
496 507
497 enum AntialiasingMode { 508 enum AntialiasingMode {
498 None, 509 None,
499 MSAAImplicitResolve, 510 MSAAImplicitResolve,
(...skipping 18 matching lines...) Expand all
518 RecycledMailbox(const gpu::Mailbox& mailbox, 529 RecycledMailbox(const gpu::Mailbox& mailbox,
519 const gpu::SyncToken& syncToken) 530 const gpu::SyncToken& syncToken)
520 : mailbox(mailbox), syncToken(syncToken) {} 531 : mailbox(mailbox), syncToken(syncToken) {}
521 532
522 gpu::Mailbox mailbox; 533 gpu::Mailbox mailbox;
523 gpu::SyncToken syncToken; 534 gpu::SyncToken syncToken;
524 535
525 private: 536 private:
526 WTF_MAKE_NONCOPYABLE(RecycledMailbox); 537 WTF_MAKE_NONCOPYABLE(RecycledMailbox);
527 }; 538 };
528 // Mailboxes that were released by the compositor can be used again by this Dr awingBuffer. 539 // Mailboxes that were released by the compositor can be used again by this
540 // DrawingBuffer.
529 Deque<RefPtr<RecycledMailbox>> m_recycledMailboxQueue; 541 Deque<RefPtr<RecycledMailbox>> m_recycledMailboxQueue;
530 542
531 // If the width and height of the Canvas's backing store don't 543 // If the width and height of the Canvas's backing store don't
532 // match those that we were given in the most recent call to 544 // match those that we were given in the most recent call to
533 // reshape(), then we need an intermediate bitmap to read back the 545 // reshape(), then we need an intermediate bitmap to read back the
534 // frame buffer into. This seems to happen when CSS styles are 546 // frame buffer into. This seems to happen when CSS styles are
535 // used to resize the Canvas. 547 // used to resize the Canvas.
536 SkBitmap m_resizingBitmap; 548 SkBitmap m_resizingBitmap;
537 549
538 // Used to flip a bitmap vertically. 550 // Used to flip a bitmap vertically.
539 Vector<uint8_t> m_scanline; 551 Vector<uint8_t> m_scanline;
540 552
541 // In the case of OffscreenCanvas, we do not want to enable the WebGLImageChro mium flag, 553 // In the case of OffscreenCanvas, we do not want to enable the
542 // so we replace all the RuntimeEnabledFeatures::webGLImageChromiumEnabled() c all with 554 // WebGLImageChromium flag, so we replace all the
543 // shouldUseChromiumImage() call, and set m_chromiumImageUsage to DisallowChro miumImage 555 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() call with
544 // in the case of OffscreenCanvas. 556 // shouldUseChromiumImage() calls, and set m_chromiumImageUsage to
557 // DisallowChromiumImage in the case of OffscreenCanvas.
545 ChromiumImageUsage m_chromiumImageUsage; 558 ChromiumImageUsage m_chromiumImageUsage;
546 bool shouldUseChromiumImage(); 559 bool shouldUseChromiumImage();
547 }; 560 };
548 561
549 } // namespace blink 562 } // namespace blink
550 563
551 #endif // DrawingBuffer_h 564 #endif // DrawingBuffer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698