Changeset 100308 in webkit
- Timestamp:
- Nov 15, 2011 12:21:09 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r100307 r100308 1 2011-11-15 Jeff Timanus <twiz@chromium.org> 2 3 Patch removing duplicated code in the setup of the DrawingBuffer used 4 to host the back-buffer for WebGL contents. 5 https://bugs.webkit.org/show_bug.cgi?id=72327 6 7 Reviewed by Julien Chaffraix. 8 9 * html/canvas/WebGLRenderingContext.cpp: 10 (WebCore::WebGLRenderingContext::copyTexImage2D): 11 (WebCore::WebGLRenderingContext::copyTexSubImage2D): 12 (WebCore::WebGLRenderingContext::readPixels): 13 1 14 2011-11-15 Eugene Nalimov <enal@google.com> 2 15 -
trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
r100191 r100308 83 83 namespace { 84 84 85 class ScopedDrawingBufferBinder { 86 public: 87 ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, WebGLFramebuffer* framebufferBinding) 88 : m_drawingBuffer(drawingBuffer) 89 , m_framebufferBinding(framebufferBinding) 90 { 91 // Commit DrawingBuffer if needed (e.g., for multisampling) 92 if (!m_framebufferBinding && m_drawingBuffer) 93 m_drawingBuffer->commit(); 94 } 95 96 ~ScopedDrawingBufferBinder() 97 { 98 // Restore DrawingBuffer if needed 99 if (!m_framebufferBinding && m_drawingBuffer) 100 m_drawingBuffer->bind(); 101 } 102 103 private: 104 DrawingBuffer* m_drawingBuffer; 105 WebGLFramebuffer* m_framebufferBinding; 106 }; 107 85 108 Platform3DObject objectOrZero(WebGLObject* object) 86 109 { … … 1165 1188 clearIfComposited(); 1166 1189 if (isResourceSafe()) { 1167 // Commit DrawingBuffer if needed (e.g., for multisampling) 1168 if (!m_framebufferBinding && m_drawingBuffer) 1169 m_drawingBuffer->commit(); 1170 1190 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 1171 1191 m_context->copyTexImage2D(target, level, internalformat, x, y, width, height, border); 1172 1173 // Restore DrawingBuffer if needed1174 if (!m_framebufferBinding && m_drawingBuffer)1175 m_drawingBuffer->bind();1176 1192 } else { 1177 // Commit DrawingBuffer if needed (e.g., for multisampling) 1178 if (!m_framebufferBinding && m_drawingBuffer) 1179 m_drawingBuffer->commit(); 1180 1193 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 1181 1194 GC3Dint clippedX, clippedY; 1182 1195 GC3Dsizei clippedWidth, clippedHeight; … … 1190 1203 } else 1191 1204 m_context->copyTexImage2D(target, level, internalformat, x, y, width, height, border); 1192 1193 // Restore DrawingBuffer if needed1194 if (!m_framebufferBinding && m_drawingBuffer)1195 m_drawingBuffer->bind();1196 1205 } 1197 1206 // FIXME: if the framebuffer is not complete, none of the below should be executed. … … 1224 1233 } 1225 1234 clearIfComposited(); 1226 if (isResourceSafe()) 1227 // Commit DrawingBuffer if needed (e.g., for multisampling) 1228 if (!m_framebufferBinding && m_drawingBuffer) 1229 m_drawingBuffer->commit(); 1230 1235 if (isResourceSafe()) { 1236 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 1231 1237 m_context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 1232 1233 // Restore DrawingBuffer if needed 1234 if (!m_framebufferBinding && m_drawingBuffer) 1235 m_drawingBuffer->bind(); 1236 else { 1238 } else { 1237 1239 GC3Dint clippedX, clippedY; 1238 1240 GC3Dsizei clippedWidth, clippedHeight; … … 1257 1259 m_context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, zero.get()); 1258 1260 if (clippedWidth > 0 && clippedHeight > 0) { 1259 // Commit DrawingBuffer if needed (e.g., for multisampling) 1260 if (!m_framebufferBinding && m_drawingBuffer) 1261 m_drawingBuffer->commit(); 1262 1261 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 1263 1262 m_context->copyTexSubImage2D(target, level, xoffset + clippedX - x, yoffset + clippedY - y, 1264 1263 clippedX, clippedY, clippedWidth, clippedHeight); 1265 1266 // Restore DrawingBuffer if needed1267 if (!m_framebufferBinding && m_drawingBuffer)1268 m_drawingBuffer->bind();1269 1264 } 1270 1265 } else { 1271 // Commit DrawingBuffer if needed (e.g., for multisampling) 1272 if (!m_framebufferBinding && m_drawingBuffer) 1273 m_drawingBuffer->commit(); 1274 1266 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 1275 1267 m_context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 1276 1277 // Restore DrawingBuffer if needed1278 if (!m_framebufferBinding && m_drawingBuffer)1279 m_drawingBuffer->bind();1280 1268 } 1281 1269 } … … 3042 3030 void* data = pixels->baseAddress(); 3043 3031 3044 // Commit DrawingBuffer if needed (e.g., for multisampling) 3045 if (!m_framebufferBinding && m_drawingBuffer) 3046 m_drawingBuffer->commit(); 3047 3048 m_context->readPixels(x, y, width, height, format, type, data); 3049 3050 // Restore DrawingBuffer if needed 3051 if (!m_framebufferBinding && m_drawingBuffer) 3052 m_drawingBuffer->bind(); 3032 { 3033 ScopedDrawingBufferBinder(m_drawingBuffer.get(), m_framebufferBinding.get()); 3034 m_context->readPixels(x, y, width, height, format, type, data); 3035 } 3053 3036 3054 3037 #if OS(DARWIN)
Note: See TracChangeset
for help on using the changeset viewer.