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

Side by Side Diff: cc/gl_renderer.cc

Issue 11111005: Remove GraphicsContext3D:: stubs from cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase again Created 8 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 | Annotate | Revision Log
« no previous file with comments | « cc/gl_renderer.h ('k') | cc/gl_renderer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "CCRendererGL.h" 7 #include "CCRendererGL.h"
8 8
9 #include "third_party/khronos/GLES2/gl2.h"
10 #include "third_party/khronos/GLES2/gl2ext.h"
9 #include "CCDamageTracker.h" 11 #include "CCDamageTracker.h"
10 #include "CCLayerQuad.h" 12 #include "CCLayerQuad.h"
11 #include "CCMathUtil.h" 13 #include "CCMathUtil.h"
12 #include "CCProxy.h" 14 #include "CCProxy.h"
13 #include "CCRenderPass.h" 15 #include "CCRenderPass.h"
14 #include "CCRenderSurfaceFilters.h" 16 #include "CCRenderSurfaceFilters.h"
15 #include "CCScopedTexture.h" 17 #include "CCScopedTexture.h"
16 #include "CCSettings.h" 18 #include "CCSettings.h"
17 #include "CCSingleThreadProxy.h" 19 #include "CCSingleThreadProxy.h"
18 #include "CCVideoLayerImpl.h" 20 #include "CCVideoLayerImpl.h"
19 #include "Extensions3D.h"
20 #include "FloatQuad.h" 21 #include "FloatQuad.h"
21 #include "GrTexture.h" 22 #include "GrTexture.h"
22 #include "NotImplemented.h" 23 #include "NotImplemented.h"
23 #include "base/debug/trace_event.h" 24 #include "base/debug/trace_event.h"
24 #include "base/string_split.h" 25 #include "base/string_split.h"
25 #include "base/string_util.h" 26 #include "base/string_util.h"
26 #include "base/logging.h" 27 #include "base/logging.h"
27 #include "cc/geometry_binding.h" 28 #include "cc/geometry_binding.h"
28 #include "cc/platform_color.h" 29 #include "cc/platform_color.h"
29 #include "third_party/skia/include/core/SkBitmap.h" 30 #include "third_party/skia/include/core/SkBitmap.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 83 }
83 84
84 bool CCRendererGL::initialize() 85 bool CCRendererGL::initialize()
85 { 86 {
86 if (!m_context->makeContextCurrent()) 87 if (!m_context->makeContextCurrent())
87 return false; 88 return false;
88 89
89 m_context->setContextLostCallback(this); 90 m_context->setContextLostCallback(this);
90 m_context->pushGroupMarkerEXT("CompositorContext"); 91 m_context->pushGroupMarkerEXT("CompositorContext");
91 92
92 std::string extensionsString = UTF16ToASCII(m_context->getString(GraphicsCon text3D::EXTENSIONS)); 93 std::string extensionsString = UTF16ToASCII(m_context->getString(GL_EXTENSIO NS));
93 std::vector<std::string> extensionsList; 94 std::vector<std::string> extensionsList;
94 base::SplitString(extensionsString, ' ', &extensionsList); 95 base::SplitString(extensionsString, ' ', &extensionsList);
95 std::set<string> extensions(extensionsList.begin(), extensionsList.end()); 96 std::set<string> extensions(extensionsList.begin(), extensionsList.end());
96 97
97 if (settings().acceleratePainting && extensions.count("GL_EXT_texture_format _BGRA8888") 98 if (settings().acceleratePainting && extensions.count("GL_EXT_texture_format _BGRA8888")
98 && extensions.count("GL_EXT_read_format_bg ra")) 99 && extensions.count("GL_EXT_read_format_bg ra"))
99 m_capabilities.usingAcceleratedPainting = true; 100 m_capabilities.usingAcceleratedPainting = true;
100 else 101 else
101 m_capabilities.usingAcceleratedPainting = false; 102 m_capabilities.usingAcceleratedPainting = false;
102 103
(...skipping 14 matching lines...) Expand all
117 DCHECK(extensions.count("GL_ARB_texture_rectangle")); 118 DCHECK(extensions.count("GL_ARB_texture_rectangle"));
118 119
119 m_capabilities.usingGpuMemoryManager = extensions.count("GL_CHROMIUM_gpu_mem ory_manager"); 120 m_capabilities.usingGpuMemoryManager = extensions.count("GL_CHROMIUM_gpu_mem ory_manager");
120 if (m_capabilities.usingGpuMemoryManager) 121 if (m_capabilities.usingGpuMemoryManager)
121 m_context->setMemoryAllocationChangedCallbackCHROMIUM(this); 122 m_context->setMemoryAllocationChangedCallbackCHROMIUM(this);
122 123
123 m_capabilities.usingDiscardFramebuffer = extensions.count("GL_CHROMIUM_disca rd_framebuffer"); 124 m_capabilities.usingDiscardFramebuffer = extensions.count("GL_CHROMIUM_disca rd_framebuffer");
124 125
125 m_capabilities.usingEglImage = extensions.count("GL_OES_EGL_image_external") ; 126 m_capabilities.usingEglImage = extensions.count("GL_OES_EGL_image_external") ;
126 127
127 GLC(m_context, m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, & m_capabilities.maxTextureSize)); 128 GLC(m_context, m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_capabilities.m axTextureSize));
128 m_capabilities.bestTextureFormat = PlatformColor::bestTextureFormat(m_contex t, extensions.count("GL_EXT_texture_format_BGRA8888")); 129 m_capabilities.bestTextureFormat = PlatformColor::bestTextureFormat(m_contex t, extensions.count("GL_EXT_texture_format_BGRA8888"));
129 130
130 m_isUsingBindUniform = extensions.count("GL_CHROMIUM_bind_uniform_location") ; 131 m_isUsingBindUniform = extensions.count("GL_CHROMIUM_bind_uniform_location") ;
131 132
132 if (!initializeSharedObjects()) 133 if (!initializeSharedObjects())
133 return false; 134 return false;
134 135
135 // Make sure the viewport and context gets initialized, even if it is to zer o. 136 // Make sure the viewport and context gets initialized, even if it is to zer o.
136 viewportChanged(); 137 viewportChanged();
137 return true; 138 return true;
(...skipping 14 matching lines...) Expand all
152 } 153 }
153 154
154 WebGraphicsContext3D* CCRendererGL::context() 155 WebGraphicsContext3D* CCRendererGL::context()
155 { 156 {
156 return m_context; 157 return m_context;
157 } 158 }
158 159
159 void CCRendererGL::debugGLCall(WebGraphicsContext3D* context, const char* comman d, const char* file, int line) 160 void CCRendererGL::debugGLCall(WebGraphicsContext3D* context, const char* comman d, const char* file, int line)
160 { 161 {
161 unsigned long error = context->getError(); 162 unsigned long error = context->getError();
162 if (error != GraphicsContext3D::NO_ERROR) 163 if (error != GL_NO_ERROR)
163 LOG(ERROR) << "GL command failed: File: " << file << "\n\tLine " << line << "\n\tcommand: " << command << ", error " << static_cast<int>(error) << "\n"; 164 LOG(ERROR) << "GL command failed: File: " << file << "\n\tLine " << line << "\n\tcommand: " << command << ", error " << static_cast<int>(error) << "\n";
164 } 165 }
165 166
166 void CCRendererGL::setVisible(bool visible) 167 void CCRendererGL::setVisible(bool visible)
167 { 168 {
168 if (m_visible == visible) 169 if (m_visible == visible)
169 return; 170 return;
170 m_visible = visible; 171 m_visible = visible;
171 172
172 // TODO: Replace setVisibilityCHROMIUM with an extension to explicitly manag e front/backbuffers 173 // TODO: Replace setVisibilityCHROMIUM with an extension to explicitly manag e front/backbuffers
(...skipping 18 matching lines...) Expand all
191 { 192 {
192 // On DEBUG builds, opaque render passes are cleared to blue to easily see r egions that were not drawn on the screen. 193 // On DEBUG builds, opaque render passes are cleared to blue to easily see r egions that were not drawn on the screen.
193 if (frame.currentRenderPass->hasTransparentBackground()) 194 if (frame.currentRenderPass->hasTransparentBackground())
194 GLC(m_context, m_context->clearColor(0, 0, 0, 0)); 195 GLC(m_context, m_context->clearColor(0, 0, 0, 0));
195 else 196 else
196 GLC(m_context, m_context->clearColor(0, 0, 1, 1)); 197 GLC(m_context, m_context->clearColor(0, 0, 1, 1));
197 198
198 #ifdef NDEBUG 199 #ifdef NDEBUG
199 if (frame.currentRenderPass->hasTransparentBackground()) 200 if (frame.currentRenderPass->hasTransparentBackground())
200 #endif 201 #endif
201 m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT); 202 m_context->clear(GL_COLOR_BUFFER_BIT);
202 } 203 }
203 204
204 void CCRendererGL::beginDrawingFrame(DrawingFrame& frame) 205 void CCRendererGL::beginDrawingFrame(DrawingFrame& frame)
205 { 206 {
206 // FIXME: Remove this once framebuffer is automatically recreated on first u se 207 // FIXME: Remove this once framebuffer is automatically recreated on first u se
207 ensureFramebuffer(); 208 ensureFramebuffer();
208 209
209 if (viewportSize().isEmpty()) 210 if (viewportSize().isEmpty())
210 return; 211 return;
211 212
212 TRACE_EVENT0("cc", "CCRendererGL::drawLayers"); 213 TRACE_EVENT0("cc", "CCRendererGL::drawLayers");
213 if (m_isViewportChanged) { 214 if (m_isViewportChanged) {
214 // Only reshape when we know we are going to draw. Otherwise, the reshap e 215 // Only reshape when we know we are going to draw. Otherwise, the reshap e
215 // can leave the window at the wrong size if we never draw and the prope r 216 // can leave the window at the wrong size if we never draw and the prope r
216 // viewport size is never set. 217 // viewport size is never set.
217 m_isViewportChanged = false; 218 m_isViewportChanged = false;
218 m_context->reshape(viewportWidth(), viewportHeight()); 219 m_context->reshape(viewportWidth(), viewportHeight());
219 } 220 }
220 221
221 makeContextCurrent(); 222 makeContextCurrent();
222 // Bind the common vertex attributes used for drawing all the layers. 223 // Bind the common vertex attributes used for drawing all the layers.
223 m_sharedGeometry->prepareForDraw(); 224 m_sharedGeometry->prepareForDraw();
224 225
225 GLC(m_context, m_context->disable(GraphicsContext3D::DEPTH_TEST)); 226 GLC(m_context, m_context->disable(GL_DEPTH_TEST));
226 GLC(m_context, m_context->disable(GraphicsContext3D::CULL_FACE)); 227 GLC(m_context, m_context->disable(GL_CULL_FACE));
227 GLC(m_context, m_context->colorMask(true, true, true, true)); 228 GLC(m_context, m_context->colorMask(true, true, true, true));
228 GLC(m_context, m_context->enable(GraphicsContext3D::BLEND)); 229 GLC(m_context, m_context->enable(GL_BLEND));
229 GLC(m_context, m_context->blendFunc(GraphicsContext3D::ONE, GraphicsContext3 D::ONE_MINUS_SRC_ALPHA)); 230 GLC(m_context, m_context->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
230 } 231 }
231 232
232 void CCRendererGL::doNoOp() 233 void CCRendererGL::doNoOp()
233 { 234 {
234 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0) ); 235 GLC(m_context, m_context->bindFramebuffer(GL_FRAMEBUFFER, 0));
235 GLC(m_context, m_context->flush()); 236 GLC(m_context, m_context->flush());
236 } 237 }
237 238
238 void CCRendererGL::drawQuad(DrawingFrame& frame, const CCDrawQuad* quad) 239 void CCRendererGL::drawQuad(DrawingFrame& frame, const CCDrawQuad* quad)
239 { 240 {
240 if (quad->needsBlending()) 241 if (quad->needsBlending())
241 GLC(m_context, m_context->enable(GraphicsContext3D::BLEND)); 242 GLC(m_context, m_context->enable(GL_BLEND));
242 else 243 else
243 GLC(m_context, m_context->disable(GraphicsContext3D::BLEND)); 244 GLC(m_context, m_context->disable(GL_BLEND));
244 245
245 switch (quad->material()) { 246 switch (quad->material()) {
246 case CCDrawQuad::Invalid: 247 case CCDrawQuad::Invalid:
247 NOTREACHED(); 248 NOTREACHED();
248 break; 249 break;
249 case CCDrawQuad::Checkerboard: 250 case CCDrawQuad::Checkerboard:
250 drawCheckerboardQuad(frame, CCCheckerboardDrawQuad::materialCast(quad)); 251 drawCheckerboardQuad(frame, CCCheckerboardDrawQuad::materialCast(quad));
251 break; 252 break;
252 case CCDrawQuad::DebugBorder: 253 case CCDrawQuad::DebugBorder:
253 drawDebugBorderQuad(frame, CCDebugBorderDrawQuad::materialCast(quad)); 254 drawDebugBorderQuad(frame, CCDebugBorderDrawQuad::materialCast(quad));
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 GLC(context(), context()->uniformMatrix4fv(program->vertexShader().matrixLoc ation(), 1, false, &glMatrix[0])); 318 GLC(context(), context()->uniformMatrix4fv(program->vertexShader().matrixLoc ation(), 1, false, &glMatrix[0]));
318 319
319 SkColor color = quad->color(); 320 SkColor color = quad->color();
320 float alpha = SkColorGetA(color) / 255.0; 321 float alpha = SkColorGetA(color) / 255.0;
321 322
322 GLC(context(), context()->uniform4f(program->fragmentShader().colorLocation( ), (SkColorGetR(color) / 255.0) * alpha, (SkColorGetG(color) / 255.0) * alpha, ( SkColorGetB(color) / 255.0) * alpha, alpha)); 323 GLC(context(), context()->uniform4f(program->fragmentShader().colorLocation( ), (SkColorGetR(color) / 255.0) * alpha, (SkColorGetG(color) / 255.0) * alpha, ( SkColorGetB(color) / 255.0) * alpha, alpha));
323 324
324 GLC(context(), context()->lineWidth(quad->width())); 325 GLC(context(), context()->lineWidth(quad->width()));
325 326
326 // The indices for the line are stored in the same array as the triangle ind ices. 327 // The indices for the line are stored in the same array as the triangle ind ices.
327 GLC(context(), context()->drawElements(GraphicsContext3D::LINE_LOOP, 4, Grap hicsContext3D::UNSIGNED_SHORT, 6 * sizeof(unsigned short))); 328 GLC(context(), context()->drawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 6 * sizeof(unsigned short)));
328 } 329 }
329 330
330 static inline SkBitmap applyFilters(CCRendererGL* renderer, const WebKit::WebFil terOperations& filters, CCScopedTexture* sourceTexture) 331 static inline SkBitmap applyFilters(CCRendererGL* renderer, const WebKit::WebFil terOperations& filters, CCScopedTexture* sourceTexture)
331 { 332 {
332 if (filters.isEmpty()) 333 if (filters.isEmpty())
333 return SkBitmap(); 334 return SkBitmap();
334 335
335 WebGraphicsContext3D* filterContext = CCProxy::hasImplThread() ? WebSharedGr aphicsContext3D::compositorThreadContext() : WebSharedGraphicsContext3D::mainThr eadContext(); 336 WebGraphicsContext3D* filterContext = CCProxy::hasImplThread() ? WebSharedGr aphicsContext3D::compositorThreadContext() : WebSharedGraphicsContext3D::mainThr eadContext();
336 GrContext* filterGrContext = CCProxy::hasImplThread() ? WebSharedGraphicsCon text3D::compositorThreadGrContext() : WebSharedGraphicsContext3D::mainThreadGrCo ntext(); 337 GrContext* filterGrContext = CCProxy::hasImplThread() ? WebSharedGraphicsCon text3D::compositorThreadGrContext() : WebSharedGraphicsContext3D::mainThreadGrCo ntext();
337 338
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 return scoped_ptr<CCScopedTexture>(); 388 return scoped_ptr<CCScopedTexture>();
388 389
389 SkBitmap filteredDeviceBackground = applyFilters(this, filters, deviceBackgr oundTexture.get()); 390 SkBitmap filteredDeviceBackground = applyFilters(this, filters, deviceBackgr oundTexture.get());
390 if (!filteredDeviceBackground.getTexture()) 391 if (!filteredDeviceBackground.getTexture())
391 return scoped_ptr<CCScopedTexture>(); 392 return scoped_ptr<CCScopedTexture>();
392 393
393 GrTexture* texture = reinterpret_cast<GrTexture*>(filteredDeviceBackground.g etTexture()); 394 GrTexture* texture = reinterpret_cast<GrTexture*>(filteredDeviceBackground.g etTexture());
394 int filteredDeviceBackgroundTextureId = texture->getTextureHandle(); 395 int filteredDeviceBackgroundTextureId = texture->getTextureHandle();
395 396
396 scoped_ptr<CCScopedTexture> backgroundTexture = CCScopedTexture::create(m_re sourceProvider); 397 scoped_ptr<CCScopedTexture> backgroundTexture = CCScopedTexture::create(m_re sourceProvider);
397 if (!backgroundTexture->allocate(CCRenderer::ImplPool, quad->quadRect().size (), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageFramebuffer)) 398 if (!backgroundTexture->allocate(CCRenderer::ImplPool, quad->quadRect().size (), GL_RGBA, CCResourceProvider::TextureUsageFramebuffer))
398 return scoped_ptr<CCScopedTexture>(); 399 return scoped_ptr<CCScopedTexture>();
399 400
400 const CCRenderPass* targetRenderPass = frame.currentRenderPass; 401 const CCRenderPass* targetRenderPass = frame.currentRenderPass;
401 bool usingBackgroundTexture = useScopedTexture(frame, backgroundTexture.get( ), quad->quadRect()); 402 bool usingBackgroundTexture = useScopedTexture(frame, backgroundTexture.get( ), quad->quadRect());
402 403
403 if (usingBackgroundTexture) { 404 if (usingBackgroundTexture) {
404 // Copy the readback pixels from device to the background texture for th e surface. 405 // Copy the readback pixels from device to the background texture for th e surface.
405 WebTransformationMatrix deviceToFramebufferTransform; 406 WebTransformationMatrix deviceToFramebufferTransform;
406 deviceToFramebufferTransform.translate(quad->quadRect().width() / 2.0, q uad->quadRect().height() / 2.0); 407 deviceToFramebufferTransform.translate(quad->quadRect().width() / 2.0, q uad->quadRect().height() / 2.0);
407 deviceToFramebufferTransform.scale3d(quad->quadRect().width(), quad->qua dRect().height(), 1); 408 deviceToFramebufferTransform.scale3d(quad->quadRect().width(), quad->qua dRect().height(), 1);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 473
473 scoped_ptr<CCResourceProvider::ScopedReadLockGL> maskResourceLock; 474 scoped_ptr<CCResourceProvider::ScopedReadLockGL> maskResourceLock;
474 unsigned maskTextureId = 0; 475 unsigned maskTextureId = 0;
475 if (quad->maskResourceId()) { 476 if (quad->maskResourceId()) {
476 maskResourceLock.reset(new CCResourceProvider::ScopedReadLockGL(m_resour ceProvider, quad->maskResourceId())); 477 maskResourceLock.reset(new CCResourceProvider::ScopedReadLockGL(m_resour ceProvider, quad->maskResourceId()));
477 maskTextureId = maskResourceLock->textureId(); 478 maskTextureId = maskResourceLock->textureId();
478 } 479 }
479 480
480 // FIXME: use the backgroundTexture and blend the background in with this dr aw instead of having a separate copy of the background texture. 481 // FIXME: use the backgroundTexture and blend the background in with this dr aw instead of having a separate copy of the background texture.
481 482
482 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 483 GLC(context(), context()->activeTexture(GL_TEXTURE0));
483 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, contentsTextureId); 484 context()->bindTexture(GL_TEXTURE_2D, contentsTextureId);
484 485
485 int shaderQuadLocation = -1; 486 int shaderQuadLocation = -1;
486 int shaderEdgeLocation = -1; 487 int shaderEdgeLocation = -1;
487 int shaderMaskSamplerLocation = -1; 488 int shaderMaskSamplerLocation = -1;
488 int shaderMaskTexCoordScaleLocation = -1; 489 int shaderMaskTexCoordScaleLocation = -1;
489 int shaderMaskTexCoordOffsetLocation = -1; 490 int shaderMaskTexCoordOffsetLocation = -1;
490 int shaderMatrixLocation = -1; 491 int shaderMatrixLocation = -1;
491 int shaderAlphaLocation = -1; 492 int shaderAlphaLocation = -1;
492 if (useAA && maskTextureId) { 493 if (useAA && maskTextureId) {
493 const RenderPassMaskProgramAA* program = renderPassMaskProgramAA(); 494 const RenderPassMaskProgramAA* program = renderPassMaskProgramAA();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 GLC(context(), context()->useProgram(program->program())); 526 GLC(context(), context()->useProgram(program->program()));
526 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLoc ation(), 0)); 527 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLoc ation(), 0));
527 528
528 shaderMatrixLocation = program->vertexShader().matrixLocation(); 529 shaderMatrixLocation = program->vertexShader().matrixLocation();
529 shaderAlphaLocation = program->fragmentShader().alphaLocation(); 530 shaderAlphaLocation = program->fragmentShader().alphaLocation();
530 } 531 }
531 532
532 if (shaderMaskSamplerLocation != -1) { 533 if (shaderMaskSamplerLocation != -1) {
533 DCHECK(shaderMaskTexCoordScaleLocation != 1); 534 DCHECK(shaderMaskTexCoordScaleLocation != 1);
534 DCHECK(shaderMaskTexCoordOffsetLocation != 1); 535 DCHECK(shaderMaskTexCoordOffsetLocation != 1);
535 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE1)); 536 GLC(context(), context()->activeTexture(GL_TEXTURE1));
536 GLC(context(), context()->uniform1i(shaderMaskSamplerLocation, 1)); 537 GLC(context(), context()->uniform1i(shaderMaskSamplerLocation, 1));
537 GLC(context(), context()->uniform2f(shaderMaskTexCoordScaleLocation, qua d->maskTexCoordScaleX(), quad->maskTexCoordScaleY())); 538 GLC(context(), context()->uniform2f(shaderMaskTexCoordScaleLocation, qua d->maskTexCoordScaleX(), quad->maskTexCoordScaleY()));
538 GLC(context(), context()->uniform2f(shaderMaskTexCoordOffsetLocation, qu ad->maskTexCoordOffsetX(), quad->maskTexCoordOffsetY())); 539 GLC(context(), context()->uniform2f(shaderMaskTexCoordOffsetLocation, qu ad->maskTexCoordOffsetX(), quad->maskTexCoordOffsetY()));
539 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, maskTextureId); 540 context()->bindTexture(GL_TEXTURE_2D, maskTextureId);
540 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 541 GLC(context(), context()->activeTexture(GL_TEXTURE0));
541 } 542 }
542 543
543 if (shaderEdgeLocation != -1) { 544 if (shaderEdgeLocation != -1) {
544 float edge[24]; 545 float edge[24];
545 deviceLayerEdges.toFloatArray(edge); 546 deviceLayerEdges.toFloatArray(edge);
546 deviceLayerBounds.toFloatArray(&edge[12]); 547 deviceLayerBounds.toFloatArray(&edge[12]);
547 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge)); 548 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge));
548 } 549 }
549 550
550 // Map device space quad to surface space. contentsDeviceTransform has no 3d component since it was generated with to2dTransform() so we don't need to proje ct. 551 // Map device space quad to surface space. contentsDeviceTransform has no 3d component since it was generated with to2dTransform() so we don't need to proje ct.
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 } else { 657 } else {
657 if (quad->swizzleContents()) 658 if (quad->swizzleContents())
658 tileUniformLocation(tileProgramSwizzleOpaque(), uniforms); 659 tileUniformLocation(tileProgramSwizzleOpaque(), uniforms);
659 else 660 else
660 tileUniformLocation(tileProgramOpaque(), uniforms); 661 tileUniformLocation(tileProgramOpaque(), uniforms);
661 } 662 }
662 } 663 }
663 664
664 GLC(context(), context()->useProgram(uniforms.program)); 665 GLC(context(), context()->useProgram(uniforms.program));
665 GLC(context(), context()->uniform1i(uniforms.samplerLocation, 0)); 666 GLC(context(), context()->uniform1i(uniforms.samplerLocation, 0));
666 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 667 GLC(context(), context()->activeTexture(GL_TEXTURE0));
667 CCResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, qu ad->resourceId()); 668 CCResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, qu ad->resourceId());
668 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, quadRes ourceLock.textureId())); 669 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, quadResourceLock.textur eId()));
669 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MIN_FILTER, quad->textureFilter())); 670 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , quad->textureFilter()));
670 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MAG_FILTER, quad->textureFilter())); 671 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER , quad->textureFilter()));
671 672
672 bool useAA = !clipped && quad->isAntialiased(); 673 bool useAA = !clipped && quad->isAntialiased();
673 if (useAA) { 674 if (useAA) {
674 CCLayerQuad deviceLayerBounds = CCLayerQuad(FloatQuad(deviceLayerQuad.bo undingBox())); 675 CCLayerQuad deviceLayerBounds = CCLayerQuad(FloatQuad(deviceLayerQuad.bo undingBox()));
675 deviceLayerBounds.inflateAntiAliasingDistance(); 676 deviceLayerBounds.inflateAntiAliasingDistance();
676 677
677 CCLayerQuad deviceLayerEdges = CCLayerQuad(deviceLayerQuad); 678 CCLayerQuad deviceLayerEdges = CCLayerQuad(deviceLayerQuad);
678 deviceLayerEdges.inflateAntiAliasingDistance(); 679 deviceLayerEdges.inflateAntiAliasingDistance();
679 680
680 float edge[24]; 681 float edge[24];
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 const VideoYUVProgram* program = videoYUVProgram(); 768 const VideoYUVProgram* program = videoYUVProgram();
768 DCHECK(program && program->initialized()); 769 DCHECK(program && program->initialized());
769 770
770 const CCVideoLayerImpl::FramePlane& yPlane = quad->yPlane(); 771 const CCVideoLayerImpl::FramePlane& yPlane = quad->yPlane();
771 const CCVideoLayerImpl::FramePlane& uPlane = quad->uPlane(); 772 const CCVideoLayerImpl::FramePlane& uPlane = quad->uPlane();
772 const CCVideoLayerImpl::FramePlane& vPlane = quad->vPlane(); 773 const CCVideoLayerImpl::FramePlane& vPlane = quad->vPlane();
773 774
774 CCResourceProvider::ScopedReadLockGL yPlaneLock(m_resourceProvider, yPlane.r esourceId); 775 CCResourceProvider::ScopedReadLockGL yPlaneLock(m_resourceProvider, yPlane.r esourceId);
775 CCResourceProvider::ScopedReadLockGL uPlaneLock(m_resourceProvider, uPlane.r esourceId); 776 CCResourceProvider::ScopedReadLockGL uPlaneLock(m_resourceProvider, uPlane.r esourceId);
776 CCResourceProvider::ScopedReadLockGL vPlaneLock(m_resourceProvider, vPlane.r esourceId); 777 CCResourceProvider::ScopedReadLockGL vPlaneLock(m_resourceProvider, vPlane.r esourceId);
777 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE1)); 778 GLC(context(), context()->activeTexture(GL_TEXTURE1));
778 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, yPlaneL ock.textureId())); 779 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, yPlaneLock.textureId()) );
779 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE2)); 780 GLC(context(), context()->activeTexture(GL_TEXTURE2));
780 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, uPlaneL ock.textureId())); 781 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, uPlaneLock.textureId()) );
781 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE3)); 782 GLC(context(), context()->activeTexture(GL_TEXTURE3));
782 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, vPlaneL ock.textureId())); 783 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, vPlaneLock.textureId()) );
783 784
784 GLC(context(), context()->useProgram(program->program())); 785 GLC(context(), context()->useProgram(program->program()));
785 786
786 float yWidthScaleFactor = static_cast<float>(yPlane.visibleSize.width()) / y Plane.size.width(); 787 float yWidthScaleFactor = static_cast<float>(yPlane.visibleSize.width()) / y Plane.size.width();
787 // Arbitrarily take the u sizes because u and v dimensions are identical. 788 // Arbitrarily take the u sizes because u and v dimensions are identical.
788 float uvWidthScaleFactor = static_cast<float>(uPlane.visibleSize.width()) / uPlane.size.width(); 789 float uvWidthScaleFactor = static_cast<float>(uPlane.visibleSize.width()) / uPlane.size.width();
789 GLC(context(), context()->uniform1f(program->vertexShader().yWidthScaleFacto rLocation(), yWidthScaleFactor)); 790 GLC(context(), context()->uniform1f(program->vertexShader().yWidthScaleFacto rLocation(), yWidthScaleFactor));
790 GLC(context(), context()->uniform1f(program->vertexShader().uvWidthScaleFact orLocation(), uvWidthScaleFactor)); 791 GLC(context(), context()->uniform1f(program->vertexShader().uvWidthScaleFact orLocation(), uvWidthScaleFactor));
791 792
792 GLC(context(), context()->uniform1i(program->fragmentShader().yTextureLocati on(), 1)); 793 GLC(context(), context()->uniform1i(program->fragmentShader().yTextureLocati on(), 1));
(...skipping 19 matching lines...) Expand all
812 -0.0625f, 813 -0.0625f,
813 -0.5f, 814 -0.5f,
814 -0.5f, 815 -0.5f,
815 }; 816 };
816 GLC(context(), context()->uniform3fv(program->fragmentShader().yuvAdjLocatio n(), 1, yuvAdjust)); 817 GLC(context(), context()->uniform3fv(program->fragmentShader().yuvAdjLocatio n(), 1, yuvAdjust));
817 818
818 setShaderOpacity(quad->opacity(), program->fragmentShader().alphaLocation()) ; 819 setShaderOpacity(quad->opacity(), program->fragmentShader().alphaLocation()) ;
819 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), program->ve rtexShader().matrixLocation()); 820 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), program->ve rtexShader().matrixLocation());
820 821
821 // Reset active texture back to texture 0. 822 // Reset active texture back to texture 0.
822 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 823 GLC(context(), context()->activeTexture(GL_TEXTURE0));
823 } 824 }
824 825
825 void CCRendererGL::drawStreamVideoQuad(const DrawingFrame& frame, const CCStream VideoDrawQuad* quad) 826 void CCRendererGL::drawStreamVideoQuad(const DrawingFrame& frame, const CCStream VideoDrawQuad* quad)
826 { 827 {
827 static float glMatrix[16]; 828 static float glMatrix[16];
828 829
829 DCHECK(m_capabilities.usingEglImage); 830 DCHECK(m_capabilities.usingEglImage);
830 831
831 const VideoStreamTextureProgram* program = videoStreamTextureProgram(); 832 const VideoStreamTextureProgram* program = videoStreamTextureProgram();
832 GLC(context(), context()->useProgram(program->program())); 833 GLC(context(), context()->useProgram(program->program()));
833 834
834 toGLMatrix(&glMatrix[0], quad->matrix()); 835 toGLMatrix(&glMatrix[0], quad->matrix());
835 GLC(context(), context()->uniformMatrix4fv(program->vertexShader().texMatrix Location(), 1, false, glMatrix)); 836 GLC(context(), context()->uniformMatrix4fv(program->vertexShader().texMatrix Location(), 1, false, glMatrix));
836 837
837 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 838 GLC(context(), context()->activeTexture(GL_TEXTURE0));
838 GLC(context(), context()->bindTexture(Extensions3DChromium::GL_TEXTURE_EXTER NAL_OES, quad->textureId())); 839 GLC(context(), context()->bindTexture(GL_TEXTURE_EXTERNAL_OES, quad->texture Id()));
839 840
840 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocatio n(), 0)); 841 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocatio n(), 0));
841 842
842 setShaderOpacity(quad->opacity(), program->fragmentShader().alphaLocation()) ; 843 setShaderOpacity(quad->opacity(), program->fragmentShader().alphaLocation()) ;
843 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), program->ve rtexShader().matrixLocation()); 844 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), program->ve rtexShader().matrixLocation());
844 } 845 }
845 846
846 struct TextureProgramBinding { 847 struct TextureProgramBinding {
847 template<class Program> void set(Program* program) 848 template<class Program> void set(Program* program)
848 { 849 {
(...skipping 25 matching lines...) Expand all
874 TexTransformTextureProgramBinding binding; 875 TexTransformTextureProgramBinding binding;
875 if (quad->flipped()) 876 if (quad->flipped())
876 binding.set(textureProgramFlip()); 877 binding.set(textureProgramFlip());
877 else 878 else
878 binding.set(textureProgram()); 879 binding.set(textureProgram());
879 GLC(context(), context()->useProgram(binding.programId)); 880 GLC(context(), context()->useProgram(binding.programId));
880 GLC(context(), context()->uniform1i(binding.samplerLocation, 0)); 881 GLC(context(), context()->uniform1i(binding.samplerLocation, 0));
881 const FloatRect& uvRect = quad->uvRect(); 882 const FloatRect& uvRect = quad->uvRect();
882 GLC(context(), context()->uniform4f(binding.texTransformLocation, uvRect.x() , uvRect.y(), uvRect.width(), uvRect.height())); 883 GLC(context(), context()->uniform4f(binding.texTransformLocation, uvRect.x() , uvRect.y(), uvRect.width(), uvRect.height()));
883 884
884 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 885 GLC(context(), context()->activeTexture(GL_TEXTURE0));
885 CCResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, qu ad->resourceId()); 886 CCResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, qu ad->resourceId());
886 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, quadRes ourceLock.textureId())); 887 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, quadResourceLock.textur eId()));
887 888
888 // FIXME: setting the texture parameters every time is redundant. Move this code somewhere 889 // FIXME: setting the texture parameters every time is redundant. Move this code somewhere
889 // where it will only happen once per texture. 890 // where it will only happen once per texture.
890 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR)); 891 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , GL_LINEAR));
891 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR)); 892 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER , GL_LINEAR));
892 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE)); 893 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL _CLAMP_TO_EDGE));
893 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE)); 894 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL _CLAMP_TO_EDGE));
894 895
895 if (!quad->premultipliedAlpha()) { 896 if (!quad->premultipliedAlpha()) {
896 // As it turns out, the premultiplied alpha blending function (ONE, ONE_ MINUS_SRC_ALPHA) 897 // As it turns out, the premultiplied alpha blending function (ONE, ONE_ MINUS_SRC_ALPHA)
897 // will never cause the alpha channel to be set to anything less than 1. 0 if it is 898 // will never cause the alpha channel to be set to anything less than 1. 0 if it is
898 // initialized to that value! Therefore, premultipliedAlpha being false is the first 899 // initialized to that value! Therefore, premultipliedAlpha being false is the first
899 // situation we can generally see an alpha channel less than 1.0 coming out of the 900 // situation we can generally see an alpha channel less than 1.0 coming out of the
900 // compositor. This is causing platform differences in some layout tests (see 901 // compositor. This is causing platform differences in some layout tests (see
901 // https://bugs.webkit.org/show_bug.cgi?id=82412), so in this situation, use a separate 902 // https://bugs.webkit.org/show_bug.cgi?id=82412), so in this situation, use a separate
902 // blend function for the alpha channel to avoid modifying it. Don't use colorMask for this 903 // blend function for the alpha channel to avoid modifying it. Don't use colorMask for this
903 // as it has performance implications on some platforms. 904 // as it has performance implications on some platforms.
904 GLC(context(), context()->blendFuncSeparate(GraphicsContext3D::SRC_ALPHA , GraphicsContext3D::ONE_MINUS_SRC_ALPHA, GraphicsContext3D::ZERO, GraphicsConte xt3D::ONE)); 905 GLC(context(), context()->blendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_S RC_ALPHA, GL_ZERO, GL_ONE));
905 } 906 }
906 907
907 setShaderOpacity(quad->opacity(), binding.alphaLocation); 908 setShaderOpacity(quad->opacity(), binding.alphaLocation);
908 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), binding.mat rixLocation); 909 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), binding.mat rixLocation);
909 910
910 if (!quad->premultipliedAlpha()) 911 if (!quad->premultipliedAlpha())
911 GLC(m_context, m_context->blendFunc(GraphicsContext3D::ONE, GraphicsCont ext3D::ONE_MINUS_SRC_ALPHA)); 912 GLC(m_context, m_context->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
912 } 913 }
913 914
914 void CCRendererGL::drawIOSurfaceQuad(const DrawingFrame& frame, const CCIOSurfac eDrawQuad* quad) 915 void CCRendererGL::drawIOSurfaceQuad(const DrawingFrame& frame, const CCIOSurfac eDrawQuad* quad)
915 { 916 {
916 DCHECK(CCProxy::isImplThread()); 917 DCHECK(CCProxy::isImplThread());
917 TexTransformTextureProgramBinding binding; 918 TexTransformTextureProgramBinding binding;
918 binding.set(textureIOSurfaceProgram()); 919 binding.set(textureIOSurfaceProgram());
919 920
920 GLC(context(), context()->useProgram(binding.programId)); 921 GLC(context(), context()->useProgram(binding.programId));
921 GLC(context(), context()->uniform1i(binding.samplerLocation, 0)); 922 GLC(context(), context()->uniform1i(binding.samplerLocation, 0));
922 if (quad->orientation() == CCIOSurfaceDrawQuad::Flipped) 923 if (quad->orientation() == CCIOSurfaceDrawQuad::Flipped)
923 GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, qua d->ioSurfaceSize().height(), quad->ioSurfaceSize().width(), quad->ioSurfaceSize( ).height() * -1.0)); 924 GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, qua d->ioSurfaceSize().height(), quad->ioSurfaceSize().width(), quad->ioSurfaceSize( ).height() * -1.0));
924 else 925 else
925 GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, 0, quad->ioSurfaceSize().width(), quad->ioSurfaceSize().height())); 926 GLC(context(), context()->uniform4f(binding.texTransformLocation, 0, 0, quad->ioSurfaceSize().width(), quad->ioSurfaceSize().height()));
926 927
927 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 928 GLC(context(), context()->activeTexture(GL_TEXTURE0));
928 GLC(context(), context()->bindTexture(Extensions3D::TEXTURE_RECTANGLE_ARB, q uad->ioSurfaceTextureId())); 929 GLC(context(), context()->bindTexture(GL_TEXTURE_RECTANGLE_ARB, quad->ioSurf aceTextureId()));
929 930
930 setShaderOpacity(quad->opacity(), binding.alphaLocation); 931 setShaderOpacity(quad->opacity(), binding.alphaLocation);
931 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), binding.mat rixLocation); 932 drawQuadGeometry(frame, quad->quadTransform(), quad->quadRect(), binding.mat rixLocation);
932 933
933 GLC(context(), context()->bindTexture(Extensions3D::TEXTURE_RECTANGLE_ARB, 0 )); 934 GLC(context(), context()->bindTexture(GL_TEXTURE_RECTANGLE_ARB, 0));
934 } 935 }
935 936
936 void CCRendererGL::finishDrawingFrame(DrawingFrame& frame) 937 void CCRendererGL::finishDrawingFrame(DrawingFrame& frame)
937 { 938 {
938 m_currentFramebufferLock.reset(); 939 m_currentFramebufferLock.reset();
939 m_swapBufferRect.unite(enclosingIntRect(frame.rootDamageRect)); 940 m_swapBufferRect.unite(enclosingIntRect(frame.rootDamageRect));
940 941
941 GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST)); 942 GLC(m_context, m_context->disable(GL_SCISSOR_TEST));
942 GLC(m_context, m_context->disable(GraphicsContext3D::BLEND)); 943 GLC(m_context, m_context->disable(GL_BLEND));
943 } 944 }
944 945
945 bool CCRendererGL::flippedFramebuffer() const 946 bool CCRendererGL::flippedFramebuffer() const
946 { 947 {
947 return true; 948 return true;
948 } 949 }
949 950
950 void CCRendererGL::toGLMatrix(float* flattened, const WebTransformationMatrix& m ) 951 void CCRendererGL::toGLMatrix(float* flattened, const WebTransformationMatrix& m )
951 { 952 {
952 flattened[0] = m.m11(); 953 flattened[0] = m.m11();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 } 992 }
992 993
993 void CCRendererGL::drawQuadGeometry(const DrawingFrame& frame, const WebKit::Web TransformationMatrix& drawTransform, const FloatRect& quadRect, int matrixLocati on) 994 void CCRendererGL::drawQuadGeometry(const DrawingFrame& frame, const WebKit::Web TransformationMatrix& drawTransform, const FloatRect& quadRect, int matrixLocati on)
994 { 995 {
995 WebTransformationMatrix quadRectMatrix; 996 WebTransformationMatrix quadRectMatrix;
996 quadRectTransform(&quadRectMatrix, drawTransform, quadRect); 997 quadRectTransform(&quadRectMatrix, drawTransform, quadRect);
997 static float glMatrix[16]; 998 static float glMatrix[16];
998 toGLMatrix(&glMatrix[0], frame.projectionMatrix * quadRectMatrix); 999 toGLMatrix(&glMatrix[0], frame.projectionMatrix * quadRectMatrix);
999 GLC(m_context, m_context->uniformMatrix4fv(matrixLocation, 1, false, &glMatr ix[0])); 1000 GLC(m_context, m_context->uniformMatrix4fv(matrixLocation, 1, false, &glMatr ix[0]));
1000 1001
1001 GLC(m_context, m_context->drawElements(GraphicsContext3D::TRIANGLES, 6, Grap hicsContext3D::UNSIGNED_SHORT, 0)); 1002 GLC(m_context, m_context->drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0 ));
1002 } 1003 }
1003 1004
1004 void CCRendererGL::copyTextureToFramebuffer(const DrawingFrame& frame, int textu reId, const IntRect& rect, const WebTransformationMatrix& drawMatrix) 1005 void CCRendererGL::copyTextureToFramebuffer(const DrawingFrame& frame, int textu reId, const IntRect& rect, const WebTransformationMatrix& drawMatrix)
1005 { 1006 {
1006 const RenderPassProgram* program = renderPassProgram(); 1007 const RenderPassProgram* program = renderPassProgram();
1007 1008
1008 GLC(context(), context()->activeTexture(GraphicsContext3D::TEXTURE0)); 1009 GLC(context(), context()->activeTexture(GL_TEXTURE0));
1009 GLC(context(), context()->bindTexture(GraphicsContext3D::TEXTURE_2D, texture Id)); 1010 GLC(context(), context()->bindTexture(GL_TEXTURE_2D, textureId));
1010 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR)); 1011 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , GL_LINEAR));
1011 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR)); 1012 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER , GL_LINEAR));
1012 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE)); 1013 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL _CLAMP_TO_EDGE));
1013 GLC(context(), context()->texParameteri(GraphicsContext3D::TEXTURE_2D, Graph icsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE)); 1014 GLC(context(), context()->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL _CLAMP_TO_EDGE));
1014 1015
1015 GLC(context(), context()->useProgram(program->program())); 1016 GLC(context(), context()->useProgram(program->program()));
1016 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocatio n(), 0)); 1017 GLC(context(), context()->uniform1i(program->fragmentShader().samplerLocatio n(), 0));
1017 setShaderOpacity(1, program->fragmentShader().alphaLocation()); 1018 setShaderOpacity(1, program->fragmentShader().alphaLocation());
1018 drawQuadGeometry(frame, drawMatrix, rect, program->vertexShader().matrixLoca tion()); 1019 drawQuadGeometry(frame, drawMatrix, rect, program->vertexShader().matrixLoca tion());
1019 } 1020 }
1020 1021
1021 void CCRendererGL::finish() 1022 void CCRendererGL::finish()
1022 { 1023 {
1023 TRACE_EVENT0("cc", "CCRendererGL::finish"); 1024 TRACE_EVENT0("cc", "CCRendererGL::finish");
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 1091
1091 void CCRendererGL::discardFramebuffer() 1092 void CCRendererGL::discardFramebuffer()
1092 { 1093 {
1093 if (m_isFramebufferDiscarded) 1094 if (m_isFramebufferDiscarded)
1094 return; 1095 return;
1095 1096
1096 if (!m_capabilities.usingDiscardFramebuffer) 1097 if (!m_capabilities.usingDiscardFramebuffer)
1097 return; 1098 return;
1098 1099
1099 // FIXME: Update attachments argument to appropriate values once they are no longer ignored. 1100 // FIXME: Update attachments argument to appropriate values once they are no longer ignored.
1100 m_context->discardFramebufferEXT(GraphicsContext3D::TEXTURE_2D, 0, 0); 1101 m_context->discardFramebufferEXT(GL_TEXTURE_2D, 0, 0);
1101 m_isFramebufferDiscarded = true; 1102 m_isFramebufferDiscarded = true;
1102 1103
1103 // Damage tracker needs a full reset every time framebuffer is discarded. 1104 // Damage tracker needs a full reset every time framebuffer is discarded.
1104 m_client->setFullRootLayerDamage(); 1105 m_client->setFullRootLayerDamage();
1105 } 1106 }
1106 1107
1107 void CCRendererGL::ensureFramebuffer() 1108 void CCRendererGL::ensureFramebuffer()
1108 { 1109 {
1109 if (!m_isFramebufferDiscarded) 1110 if (!m_isFramebufferDiscarded)
1110 return; 1111 return;
(...skipping 16 matching lines...) Expand all
1127 DCHECK(rect.maxX() <= viewportWidth()); 1128 DCHECK(rect.maxX() <= viewportWidth());
1128 DCHECK(rect.maxY() <= viewportHeight()); 1129 DCHECK(rect.maxY() <= viewportHeight());
1129 1130
1130 if (!pixels) 1131 if (!pixels)
1131 return; 1132 return;
1132 1133
1133 makeContextCurrent(); 1134 makeContextCurrent();
1134 1135
1135 bool doWorkaround = needsIOSurfaceReadbackWorkaround(); 1136 bool doWorkaround = needsIOSurfaceReadbackWorkaround();
1136 1137
1137 Platform3DObject temporaryTexture = 0; 1138 GLuint temporaryTexture = 0;
1138 Platform3DObject temporaryFBO = 0; 1139 GLuint temporaryFBO = 0;
1139 1140
1140 if (doWorkaround) { 1141 if (doWorkaround) {
1141 // On Mac OS X, calling glReadPixels against an FBO whose color attachme nt is an 1142 // On Mac OS X, calling glReadPixels against an FBO whose color attachme nt is an
1142 // IOSurface-backed texture causes corruption of future glReadPixels cal ls, even those on 1143 // IOSurface-backed texture causes corruption of future glReadPixels cal ls, even those on
1143 // different OpenGL contexts. It is believed that this is the root cause of top crasher 1144 // different OpenGL contexts. It is believed that this is the root cause of top crasher
1144 // http://crbug.com/99393. <rdar://problem/10949687> 1145 // http://crbug.com/99393. <rdar://problem/10949687>
1145 1146
1146 temporaryTexture = m_context->createTexture(); 1147 temporaryTexture = m_context->createTexture();
1147 GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, tem poraryTexture)); 1148 GLC(m_context, m_context->bindTexture(GL_TEXTURE_2D, temporaryTexture));
1148 GLC(m_context, m_context->texParameteri(GraphicsContext3D::TEXTURE_2D, G raphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR)); 1149 GLC(m_context, m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FI LTER, GL_LINEAR));
1149 GLC(m_context, m_context->texParameteri(GraphicsContext3D::TEXTURE_2D, G raphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR)); 1150 GLC(m_context, m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FI LTER, GL_LINEAR));
1150 GLC(m_context, m_context->texParameteri(GraphicsContext3D::TEXTURE_2D, G raphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE)); 1151 GLC(m_context, m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_CLAMP_TO_EDGE));
1151 GLC(m_context, m_context->texParameteri(GraphicsContext3D::TEXTURE_2D, G raphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE)); 1152 GLC(m_context, m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE));
1152 // Copy the contents of the current (IOSurface-backed) framebuffer into a temporary texture. 1153 // Copy the contents of the current (IOSurface-backed) framebuffer into a temporary texture.
1153 GLC(m_context, m_context->copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, 0, 0, viewportSize().width(), viewportSize().height( ), 0)); 1154 GLC(m_context, m_context->copyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0 , viewportSize().width(), viewportSize().height(), 0));
1154 temporaryFBO = m_context->createFramebuffer(); 1155 temporaryFBO = m_context->createFramebuffer();
1155 // Attach this texture to an FBO, and perform the readback from that FBO . 1156 // Attach this texture to an FBO, and perform the readback from that FBO .
1156 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER , temporaryFBO)); 1157 GLC(m_context, m_context->bindFramebuffer(GL_FRAMEBUFFER, temporaryFBO)) ;
1157 GLC(m_context, m_context->framebufferTexture2D(GraphicsContext3D::FRAMEB UFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, temp oraryTexture, 0)); 1158 GLC(m_context, m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ ATTACHMENT0, GL_TEXTURE_2D, temporaryTexture, 0));
1158 1159
1159 DCHECK(m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) == GraphicsContext3D::FRAMEBUFFER_COMPLETE); 1160 DCHECK(m_context->checkFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFF ER_COMPLETE);
1160 } 1161 }
1161 1162
1162 scoped_array<uint8_t> srcPixels(new uint8_t[rect.width() * rect.height() * 4 ]); 1163 scoped_array<uint8_t> srcPixels(new uint8_t[rect.width() * rect.height() * 4 ]);
1163 GLC(m_context, m_context->readPixels(rect.x(), viewportSize().height() - rec t.maxY(), rect.width(), rect.height(), 1164 GLC(m_context, m_context->readPixels(rect.x(), viewportSize().height() - rec t.maxY(), rect.width(), rect.height(),
1164 GraphicsContext3D::RGBA, GraphicsContext3D: :UNSIGNED_BYTE, srcPixels.get())); 1165 GL_RGBA, GL_UNSIGNED_BYTE, srcPixels.get()) );
1165 1166
1166 uint8_t* destPixels = static_cast<uint8_t*>(pixels); 1167 uint8_t* destPixels = static_cast<uint8_t*>(pixels);
1167 size_t rowBytes = rect.width() * 4; 1168 size_t rowBytes = rect.width() * 4;
1168 int numRows = rect.height(); 1169 int numRows = rect.height();
1169 size_t totalBytes = numRows * rowBytes; 1170 size_t totalBytes = numRows * rowBytes;
1170 for (size_t destY = 0; destY < totalBytes; destY += rowBytes) { 1171 for (size_t destY = 0; destY < totalBytes; destY += rowBytes) {
1171 // Flip Y axis. 1172 // Flip Y axis.
1172 size_t srcY = totalBytes - destY - rowBytes; 1173 size_t srcY = totalBytes - destY - rowBytes;
1173 // Swizzle BGRA -> RGBA. 1174 // Swizzle BGRA -> RGBA.
1174 for (size_t x = 0; x < rowBytes; x += 4) { 1175 for (size_t x = 0; x < rowBytes; x += 4) {
1175 destPixels[destY + (x+0)] = srcPixels.get()[srcY + (x+2)]; 1176 destPixels[destY + (x+0)] = srcPixels.get()[srcY + (x+2)];
1176 destPixels[destY + (x+1)] = srcPixels.get()[srcY + (x+1)]; 1177 destPixels[destY + (x+1)] = srcPixels.get()[srcY + (x+1)];
1177 destPixels[destY + (x+2)] = srcPixels.get()[srcY + (x+0)]; 1178 destPixels[destY + (x+2)] = srcPixels.get()[srcY + (x+0)];
1178 destPixels[destY + (x+3)] = srcPixels.get()[srcY + (x+3)]; 1179 destPixels[destY + (x+3)] = srcPixels.get()[srcY + (x+3)];
1179 } 1180 }
1180 } 1181 }
1181 1182
1182 if (doWorkaround) { 1183 if (doWorkaround) {
1183 // Clean up. 1184 // Clean up.
1184 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER , 0)); 1185 GLC(m_context, m_context->bindFramebuffer(GL_FRAMEBUFFER, 0));
1185 GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0)) ; 1186 GLC(m_context, m_context->bindTexture(GL_TEXTURE_2D, 0));
1186 GLC(m_context, m_context->deleteFramebuffer(temporaryFBO)); 1187 GLC(m_context, m_context->deleteFramebuffer(temporaryFBO));
1187 GLC(m_context, m_context->deleteTexture(temporaryTexture)); 1188 GLC(m_context, m_context->deleteTexture(temporaryTexture));
1188 } 1189 }
1189 1190
1190 enforceMemoryPolicy(); 1191 enforceMemoryPolicy();
1191 } 1192 }
1192 1193
1193 bool CCRendererGL::getFramebufferTexture(CCScopedTexture* texture, const IntRect & deviceRect) 1194 bool CCRendererGL::getFramebufferTexture(CCScopedTexture* texture, const IntRect & deviceRect)
1194 { 1195 {
1195 DCHECK(!texture->id() || (texture->size() == deviceRect.size() && texture->f ormat() == GraphicsContext3D::RGB)); 1196 DCHECK(!texture->id() || (texture->size() == deviceRect.size() && texture->f ormat() == GL_RGB));
1196 1197
1197 if (!texture->id() && !texture->allocate(CCRenderer::ImplPool, deviceRect.si ze(), GraphicsContext3D::RGB, CCResourceProvider::TextureUsageAny)) 1198 if (!texture->id() && !texture->allocate(CCRenderer::ImplPool, deviceRect.si ze(), GL_RGB, CCResourceProvider::TextureUsageAny))
1198 return false; 1199 return false;
1199 1200
1200 CCResourceProvider::ScopedWriteLockGL lock(m_resourceProvider, texture->id() ); 1201 CCResourceProvider::ScopedWriteLockGL lock(m_resourceProvider, texture->id() );
1201 GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.te xtureId())); 1202 GLC(m_context, m_context->bindTexture(GL_TEXTURE_2D, lock.textureId()));
1202 GLC(m_context, m_context->copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, t exture->format(), 1203 GLC(m_context, m_context->copyTexImage2D(GL_TEXTURE_2D, 0, texture->format() ,
1203 deviceRect.x(), deviceRect.y(), dev iceRect.width(), deviceRect.height(), 0)); 1204 deviceRect.x(), deviceRect.y(), dev iceRect.width(), deviceRect.height(), 0));
1204 return true; 1205 return true;
1205 } 1206 }
1206 1207
1207 bool CCRendererGL::useScopedTexture(DrawingFrame& frame, const CCScopedTexture* texture, const IntRect& viewportRect) 1208 bool CCRendererGL::useScopedTexture(DrawingFrame& frame, const CCScopedTexture* texture, const IntRect& viewportRect)
1208 { 1209 {
1209 DCHECK(texture->id()); 1210 DCHECK(texture->id());
1210 frame.currentRenderPass = 0; 1211 frame.currentRenderPass = 0;
1211 frame.currentTexture = texture; 1212 frame.currentTexture = texture;
1212 1213
1213 return bindFramebufferToTexture(frame, texture, viewportRect); 1214 return bindFramebufferToTexture(frame, texture, viewportRect);
1214 } 1215 }
1215 1216
1216 void CCRendererGL::bindFramebufferToOutputSurface(DrawingFrame& frame) 1217 void CCRendererGL::bindFramebufferToOutputSurface(DrawingFrame& frame)
1217 { 1218 {
1218 m_currentFramebufferLock.reset(); 1219 m_currentFramebufferLock.reset();
1219 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0) ); 1220 GLC(m_context, m_context->bindFramebuffer(GL_FRAMEBUFFER, 0));
1220 } 1221 }
1221 1222
1222 bool CCRendererGL::bindFramebufferToTexture(DrawingFrame& frame, const CCScopedT exture* texture, const IntRect& framebufferRect) 1223 bool CCRendererGL::bindFramebufferToTexture(DrawingFrame& frame, const CCScopedT exture* texture, const IntRect& framebufferRect)
1223 { 1224 {
1224 DCHECK(texture->id()); 1225 DCHECK(texture->id());
1225 1226
1226 GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_ offscreenFramebufferId)); 1227 GLC(m_context, m_context->bindFramebuffer(GL_FRAMEBUFFER, m_offscreenFramebu fferId));
1227 m_currentFramebufferLock = make_scoped_ptr(new CCResourceProvider::ScopedWri teLockGL(m_resourceProvider, texture->id())); 1228 m_currentFramebufferLock = make_scoped_ptr(new CCResourceProvider::ScopedWri teLockGL(m_resourceProvider, texture->id()));
1228 unsigned textureId = m_currentFramebufferLock->textureId(); 1229 unsigned textureId = m_currentFramebufferLock->textureId();
1229 GLC(m_context, m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFE R, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, textureI d, 0)); 1230 GLC(m_context, m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTA CHMENT0, GL_TEXTURE_2D, textureId, 0));
1230 1231
1231 DCHECK(m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) == GraphicsContext3D::FRAMEBUFFER_COMPLETE); 1232 DCHECK(m_context->checkFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_C OMPLETE);
1232 1233
1233 initializeMatrices(frame, framebufferRect, false); 1234 initializeMatrices(frame, framebufferRect, false);
1234 setDrawViewportSize(framebufferRect.size()); 1235 setDrawViewportSize(framebufferRect.size());
1235 1236
1236 return true; 1237 return true;
1237 } 1238 }
1238 1239
1239 void CCRendererGL::enableScissorTestRect(const IntRect& scissorRect) 1240 void CCRendererGL::enableScissorTestRect(const IntRect& scissorRect)
1240 { 1241 {
1241 GLC(m_context, m_context->enable(GraphicsContext3D::SCISSOR_TEST)); 1242 GLC(m_context, m_context->enable(GL_SCISSOR_TEST));
1242 GLC(m_context, m_context->scissor(scissorRect.x(), scissorRect.y(), scissorR ect.width(), scissorRect.height())); 1243 GLC(m_context, m_context->scissor(scissorRect.x(), scissorRect.y(), scissorR ect.width(), scissorRect.height()));
1243 } 1244 }
1244 1245
1245 void CCRendererGL::disableScissorTest() 1246 void CCRendererGL::disableScissorTest()
1246 { 1247 {
1247 GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST)); 1248 GLC(m_context, m_context->disable(GL_SCISSOR_TEST));
1248 } 1249 }
1249 1250
1250 void CCRendererGL::setDrawViewportSize(const IntSize& viewportSize) 1251 void CCRendererGL::setDrawViewportSize(const IntSize& viewportSize)
1251 { 1252 {
1252 GLC(m_context, m_context->viewport(0, 0, viewportSize.width(), viewportSize. height())); 1253 GLC(m_context, m_context->viewport(0, 0, viewportSize.width(), viewportSize. height()));
1253 } 1254 }
1254 1255
1255 bool CCRendererGL::makeContextCurrent() 1256 bool CCRendererGL::makeContextCurrent()
1256 { 1257 {
1257 return m_context->makeContextCurrent(); 1258 return m_context->makeContextCurrent();
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 m_solidColorProgram->cleanup(m_context); 1508 m_solidColorProgram->cleanup(m_context);
1508 1509
1509 if (m_offscreenFramebufferId) 1510 if (m_offscreenFramebufferId)
1510 GLC(m_context, m_context->deleteFramebuffer(m_offscreenFramebufferId)); 1511 GLC(m_context, m_context->deleteFramebuffer(m_offscreenFramebufferId));
1511 1512
1512 releaseRenderPassTextures(); 1513 releaseRenderPassTextures();
1513 } 1514 }
1514 1515
1515 bool CCRendererGL::isContextLost() 1516 bool CCRendererGL::isContextLost()
1516 { 1517 {
1517 return (m_context->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERRO R); 1518 return (m_context->getGraphicsResetStatusARB() != GL_NO_ERROR);
1518 } 1519 }
1519 1520
1520 } // namespace cc 1521 } // namespace cc
OLDNEW
« no previous file with comments | « cc/gl_renderer.h ('k') | cc/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698