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

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

Issue 1120953002: WebGL 2: add read/write framebuffer binding points to related APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: in DrawingBuffer::commit, we should bind to the single-sampled FB at the end, instead of the multis… Created 5 years, 6 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 // Destruction will be completed after all mailboxes are released. 100 // Destruction will be completed after all mailboxes are released.
101 void beginDestruction(); 101 void beginDestruction();
102 102
103 // Issues a glClear() on all framebuffers associated with this DrawingBuffer . The caller is responsible for 103 // Issues a glClear() on all framebuffers associated with this DrawingBuffer . The caller is responsible for
104 // making the context current and setting the clear values and masks. Modifi es the framebuffer binding. 104 // making the context current and setting the clear values and masks. Modifi es the framebuffer binding.
105 void clearFramebuffers(GLbitfield clearMask); 105 void clearFramebuffers(GLbitfield clearMask);
106 106
107 // Given the desired buffer size, provides the largest dimensions that will fit in the pixel budget. 107 // Given the desired buffer size, provides the largest dimensions that will fit in the pixel budget.
108 static IntSize adjustSize(const IntSize& desiredSize, const IntSize& curSize , int maxTextureSize); 108 static IntSize adjustSize(const IntSize& desiredSize, const IntSize& curSize , int maxTextureSize);
109 bool reset(const IntSize&); 109 bool reset(const IntSize&);
110 void bind(GLenum target = GL_FRAMEBUFFER); 110 void bind(GLenum target);
111 IntSize size() const { return m_size; } 111 IntSize size() const { return m_size; }
112 112
113 // Copies the multisample color buffer to the normal color buffer and leaves m_fbo bound. 113 // Copies the multisample color buffer to the normal color buffer and leaves m_fbo bound.
114 void commit(); 114 void commit(GLenum target);
115 115
116 // commit should copy the full multisample buffer, and not respect the 116 // commit should copy the full multisample buffer, and not respect the
117 // current scissor bounds. Track the state of the scissor test so that it 117 // current scissor bounds. Track the state of the scissor test so that it
118 // can be disabled during calls to commit. 118 // can be disabled during calls to commit.
119 void setScissorEnabled(bool scissorEnabled) { m_scissorEnabled = scissorEnab led; } 119 void setScissorEnabled(bool scissorEnabled) { m_scissorEnabled = scissorEnab led; }
120 120
121 // The DrawingBuffer needs to track the texture bound to texture unit 0. 121 // The DrawingBuffer needs to track the texture bound to texture unit 0.
122 // The bound texture is tracked to avoid costly queries during rendering. 122 // The bound texture is tracked to avoid costly queries during rendering.
123 void setTexture2DBinding(Platform3DObject texture) { m_texture2DBinding = te xture; } 123 void setTexture2DBinding(Platform3DObject texture) { m_texture2DBinding = te xture; }
124 124
125 // The DrawingBuffer needs to track the currently bound framebuffer so it 125 // The DrawingBuffer needs to track the currently bound framebuffer so it
126 // restore the binding when needed. 126 // restore the binding when needed.
127 void setFramebufferBinding(Platform3DObject fbo) { m_framebufferBinding = fb o; } 127 void setFramebufferBinding(GLenum target, Platform3DObject fbo)
128 {
129 switch (target) {
130 case GL_FRAMEBUFFER:
131 m_drawFramebufferBinding = fbo;
132 m_readFramebufferBinding = fbo;
133 break;
134 case GL_DRAW_FRAMEBUFFER:
135 m_drawFramebufferBinding = fbo;
136 break;
137 case GL_READ_FRAMEBUFFER:
138 m_readFramebufferBinding = fbo;
139 break;
140 default:
141 ASSERT(0);
142 }
143 }
128 144
129 // Track the currently active texture unit. Texture unit 0 is used as host f or a scratch 145 // Track the currently active texture unit. Texture unit 0 is used as host f or a scratch
130 // texture. 146 // texture.
131 void setActiveTextureUnit(GLint textureUnit) { m_activeTextureUnit = texture Unit; } 147 void setActiveTextureUnit(GLint textureUnit) { m_activeTextureUnit = texture Unit; }
132 148
133 bool multisample() const; 149 bool multisample() const;
134 150
135 Platform3DObject framebuffer() const; 151 Platform3DObject framebuffer() const;
136 152
137 bool discardFramebufferSupported() const { return m_discardFramebufferSuppor ted; } 153 bool discardFramebufferSupported() const { return m_discardFramebufferSuppor ted; }
(...skipping 21 matching lines...) Expand all
159 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY, SourceD rawingBuffer); 175 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY, SourceD rawingBuffer);
160 176
161 void setPackAlignment(GLint param); 177 void setPackAlignment(GLint param);
162 178
163 void paintRenderingResultsToCanvas(ImageBuffer*); 179 void paintRenderingResultsToCanvas(ImageBuffer*);
164 bool paintRenderingResultsToImageData(int&, int&, SourceDrawingBuffer, WTF:: ArrayBufferContents&); 180 bool paintRenderingResultsToImageData(int&, int&, SourceDrawingBuffer, WTF:: ArrayBufferContents&);
165 181
166 int sampleCount() const { return m_sampleCount; } 182 int sampleCount() const { return m_sampleCount; }
167 bool explicitResolveOfMultisampleData() const { return m_multisampleMode == ExplicitResolve; }; 183 bool explicitResolveOfMultisampleData() const { return m_multisampleMode == ExplicitResolve; };
168 184
185 // Bind to m_drawFramebufferBinding or m_readFramebufferBinding if it's not 0.
186 // Otherwise, bind to the default FBO.
187 void restoreFramebufferBindings();
188
169 protected: // For unittests 189 protected: // For unittests
170 DrawingBuffer( 190 DrawingBuffer(
171 PassOwnPtr<WebGraphicsContext3D>, 191 PassOwnPtr<WebGraphicsContext3D>,
172 PassOwnPtr<Extensions3DUtil>, 192 PassOwnPtr<Extensions3DUtil>,
173 bool multisampleExtensionSupported, 193 bool multisampleExtensionSupported,
174 bool packedDepthStencilExtensionSupported, 194 bool packedDepthStencilExtensionSupported,
175 bool discardFramebufferSupported, 195 bool discardFramebufferSupported,
176 PreserveDrawingBuffer, 196 PreserveDrawingBuffer,
177 WebGraphicsContext3D::Attributes requestedAttributes); 197 WebGraphicsContext3D::Attributes requestedAttributes);
178 198
179 bool initialize(const IntSize&); 199 bool initialize(const IntSize&);
180 200
181 private: 201 private:
182 void mailboxReleasedWithoutRecycling(const WebExternalTextureMailbox&); 202 void mailboxReleasedWithoutRecycling(const WebExternalTextureMailbox&);
183 203
184 unsigned createColorTexture(); 204 unsigned createColorTexture();
185 // Create the depth/stencil and multisample buffers, if needed. 205 // Create the depth/stencil and multisample buffers, if needed.
186 void createSecondaryBuffers(); 206 void createSecondaryBuffers();
187 bool resizeFramebuffer(const IntSize&); 207 bool resizeFramebuffer(const IntSize&);
188 bool resizeMultisampleFramebuffer(const IntSize&); 208 bool resizeMultisampleFramebuffer(const IntSize&);
189 void resizeDepthStencil(const IntSize&); 209 void resizeDepthStencil(const IntSize&);
190 210
191 // Bind to the m_framebufferBinding if it's not 0. Otherwise, bind to the de fault FBO.
192 void restoreFramebufferBinding();
193
194 void clearPlatformLayer(); 211 void clearPlatformLayer();
195 212
196 PassRefPtr<MailboxInfo> recycledMailbox(); 213 PassRefPtr<MailboxInfo> recycledMailbox();
197 PassRefPtr<MailboxInfo> createNewMailbox(const TextureInfo&); 214 PassRefPtr<MailboxInfo> createNewMailbox(const TextureInfo&);
198 void deleteMailbox(const WebExternalTextureMailbox&); 215 void deleteMailbox(const WebExternalTextureMailbox&);
199 void freeRecycledMailboxes(); 216 void freeRecycledMailboxes();
200 217
201 // Updates the current size of the buffer, ensuring that s_currentResourceUs ePixels is updated. 218 // Updates the current size of the buffer, ensuring that s_currentResourceUs ePixels is updated.
202 void setSize(const IntSize& size); 219 void setSize(const IntSize& size);
203 220
(...skipping 15 matching lines...) Expand all
219 // Helper to texImage2D with pixel==0 case: pixels are initialized to 0. 236 // Helper to texImage2D with pixel==0 case: pixels are initialized to 0.
220 // By default, alignment is 4, the OpenGL default setting. 237 // By default, alignment is 4, the OpenGL default setting.
221 void texImage2DResourceSafe(GLenum target, GLint level, GLenum internalforma t, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLin t alignment = 4); 238 void texImage2DResourceSafe(GLenum target, GLint level, GLenum internalforma t, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLin t alignment = 4);
222 // Allocate buffer storage to be sent to compositor using either texImage2D or CHROMIUM_image based on available support. 239 // Allocate buffer storage to be sent to compositor using either texImage2D or CHROMIUM_image based on available support.
223 void allocateTextureMemory(TextureInfo*, const IntSize&); 240 void allocateTextureMemory(TextureInfo*, const IntSize&);
224 void deleteChromiumImageForTexture(TextureInfo*); 241 void deleteChromiumImageForTexture(TextureInfo*);
225 242
226 PreserveDrawingBuffer m_preserveDrawingBuffer; 243 PreserveDrawingBuffer m_preserveDrawingBuffer;
227 bool m_scissorEnabled; 244 bool m_scissorEnabled;
228 Platform3DObject m_texture2DBinding; 245 Platform3DObject m_texture2DBinding;
229 Platform3DObject m_framebufferBinding; 246 Platform3DObject m_drawFramebufferBinding;
247 Platform3DObject m_readFramebufferBinding;
230 GLenum m_activeTextureUnit; 248 GLenum m_activeTextureUnit;
231 249
232 OwnPtr<WebGraphicsContext3D> m_context; 250 OwnPtr<WebGraphicsContext3D> m_context;
233 OwnPtr<Extensions3DUtil> m_extensionsUtil; 251 OwnPtr<Extensions3DUtil> m_extensionsUtil;
234 IntSize m_size; 252 IntSize m_size;
235 WebGraphicsContext3D::Attributes m_requestedAttributes; 253 WebGraphicsContext3D::Attributes m_requestedAttributes;
236 bool m_multisampleExtensionSupported; 254 bool m_multisampleExtensionSupported;
237 bool m_packedDepthStencilExtensionSupported; 255 bool m_packedDepthStencilExtensionSupported;
238 bool m_discardFramebufferSupported; 256 bool m_discardFramebufferSupported;
239 Platform3DObject m_fbo; 257 Platform3DObject m_fbo;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // used to resize the Canvas. 314 // used to resize the Canvas.
297 SkBitmap m_resizingBitmap; 315 SkBitmap m_resizingBitmap;
298 316
299 // Used to flip a bitmap vertically. 317 // Used to flip a bitmap vertically.
300 Vector<uint8_t> m_scanline; 318 Vector<uint8_t> m_scanline;
301 }; 319 };
302 320
303 } // namespace blink 321 } // namespace blink
304 322
305 #endif // DrawingBuffer_h 323 #endif // DrawingBuffer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698