Changeset 95135 in webkit
- Timestamp:
- Sep 14, 2011 4:01:23 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r95130 r95135 1 2011-09-14 James Robinson <jamesr@chromium.org> 2 3 [chromium] LayerRendererChromium shouldn't be RefCounted 4 https://bugs.webkit.org/show_bug.cgi?id=68121 5 6 Reviewed by Kenneth Russell. 7 8 LayerRendererChromium is owned exclusively by CCLayerTreeHostImpl, so there's no reason to have it be 9 refcounted. Making it an OwnPtr<> makes the lifecycle for these objects much cleaner and reduces the chance of 10 introducing accidental reference cycles. This also removes the LayerRendererChromium pointers from CCLayerImpls 11 since it only needed at draw time. 12 13 Covered by compositing/ tests. 14 15 * platform/graphics/chromium/LayerRendererChromium.cpp: 16 (WebCore::LayerRendererChromium::create): 17 (WebCore::LayerRendererChromium::drawLayers): 18 (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay): 19 (WebCore::LayerRendererChromium::useRenderSurface): 20 (WebCore::LayerRendererChromium::drawLayer): 21 * platform/graphics/chromium/LayerRendererChromium.h: 22 * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp: 23 (WebCore::CCCanvasLayerImpl::draw): 24 * platform/graphics/chromium/cc/CCCanvasLayerImpl.h: 25 * platform/graphics/chromium/cc/CCLayerImpl.cpp: 26 (WebCore::CCLayerImpl::CCLayerImpl): 27 (WebCore::CCLayerImpl::draw): 28 (WebCore::CCLayerImpl::bindContentsTexture): 29 (WebCore::CCLayerImpl::drawDebugBorder): 30 * platform/graphics/chromium/cc/CCLayerImpl.h: 31 * platform/graphics/chromium/cc/CCLayerTreeHost.h: 32 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 33 (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer): 34 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: 35 * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp: 36 (WebCore::CCPluginLayerImpl::draw): 37 * platform/graphics/chromium/cc/CCPluginLayerImpl.h: 38 * platform/graphics/chromium/cc/CCRenderSurface.cpp: 39 (WebCore::CCRenderSurface::cleanupResources): 40 (WebCore::CCRenderSurface::prepareContentsTexture): 41 (WebCore::CCRenderSurface::draw): 42 (WebCore::CCRenderSurface::drawLayer): 43 (WebCore::CCRenderSurface::drawSurface): 44 * platform/graphics/chromium/cc/CCRenderSurface.h: 45 * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp: 46 (WebCore::CCTiledLayerImpl::bindContentsTexture): 47 (WebCore::CCTiledLayerImpl::draw): 48 * platform/graphics/chromium/cc/CCTiledLayerImpl.h: 49 * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp: 50 (WebCore::CCVideoLayerImpl::draw): 51 (WebCore::CCVideoLayerImpl::drawYUV): 52 (WebCore::CCVideoLayerImpl::drawRGBA): 53 * platform/graphics/chromium/cc/CCVideoLayerImpl.h: 54 1 55 2011-09-14 Anders Carlsson <andersca@apple.com> 2 56 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r95100 r95135 130 130 } // anonymous namespace 131 131 132 Pass RefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHostImpl* owner, PassRefPtr<GraphicsContext3D> context)132 PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHostImpl* owner, PassRefPtr<GraphicsContext3D> context) 133 133 { 134 134 #if USE(SKIA) 135 135 if (owner->settings().acceleratePainting && !contextSupportsAcceleratedPainting(context.get())) 136 return 0;136 return nullptr; 137 137 #endif 138 RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, context)));138 OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(owner, context))); 139 139 if (!layerRenderer->initialize()) 140 return 0;140 return nullptr; 141 141 142 142 return layerRenderer.release(); … … 235 235 if (!rootLayer()) 236 236 return; 237 // FIXME: No need to walk the tree here. This could be passed via draw.238 rootLayer()->setLayerRendererRecursive(this);239 237 240 238 m_renderSurfaceTextureManager->setMemoryLimitBytes(TextureManager::highLimitBytes() - m_contentsTextureMemoryUseBytes); … … 434 432 m_defaultRenderSurface->setDrawTransform(drawTransform); 435 433 m_defaultRenderSurface->setDrawOpacity(1); 436 m_defaultRenderSurface->draw( m_defaultRenderSurface->contentRect());434 m_defaultRenderSurface->draw(this, m_defaultRenderSurface->contentRect()); 437 435 } 438 436 } … … 456 454 GLC(m_context.get(), m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_offscreenFramebufferId)); 457 455 458 if (!renderSurface->prepareContentsTexture( ))456 if (!renderSurface->prepareContentsTexture(this)) 459 457 return false; 460 458 … … 475 473 { 476 474 if (layer->renderSurface() && layer->renderSurface() != targetSurface) { 477 layer->renderSurface()->draw( layer->getDrawRect());475 layer->renderSurface()->draw(this, layer->getDrawRect()); 478 476 layer->renderSurface()->releaseContentsTexture(); 479 477 return; … … 513 511 } 514 512 515 layer->draw( );513 layer->draw(this); 516 514 517 515 // Draw the debug border if there is one. 518 layer->drawDebugBorder( );516 layer->drawDebugBorder(this); 519 517 } 520 518 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r95100 r95135 43 43 #include "cc/CCHeadsUpDisplay.h" 44 44 #include "cc/CCLayerSorter.h" 45 #include "cc/CCLayerTreeHost.h"46 45 #include "cc/CCLayerTreeHostImpl.h" 47 46 #include "cc/CCPluginLayerImpl.h" … … 66 65 class CCHeadsUpDisplay; 67 66 class CCLayerImpl; 68 class CCLayerTreeHost; // FIXME: remove pointers to this.69 67 class CCLayerTreeHostImpl; 70 68 class GeometryBinding; … … 73 71 74 72 // Class that handles drawing of composited render layers using GL. 75 class LayerRendererChromium : public RefCounted<LayerRendererChromium> { 73 class LayerRendererChromium { 74 WTF_MAKE_NONCOPYABLE(LayerRendererChromium); 76 75 public: 77 static Pass RefPtr<LayerRendererChromium> create(CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>);76 static PassOwnPtr<LayerRendererChromium> create(CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>); 78 77 79 78 // Must be called in order to allow the LayerRendererChromium to destruct -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp
r95014 r95135 49 49 } 50 50 51 void CCCanvasLayerImpl::draw( )51 void CCCanvasLayerImpl::draw(LayerRendererChromium* layerRenderer) 52 52 { 53 53 ASSERT(CCProxy::isImplThread()); 54 ASSERT(layerRenderer()); 55 const CCCanvasLayerImpl::Program* program = layerRenderer()->canvasLayerProgram(); 54 const CCCanvasLayerImpl::Program* program = layerRenderer->canvasLayerProgram(); 56 55 ASSERT(program && program->initialized()); 57 GraphicsContext3D* context = layerRenderer ()->context();56 GraphicsContext3D* context = layerRenderer->context(); 58 57 GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0)); 59 58 GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId)); … … 68 67 GLC(context, context->useProgram(program->program())); 69 68 GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0)); 70 LayerChromium::drawTexturedQuad(context, layerRenderer ()->projectionMatrix(), drawTransform(),71 bounds().width(), bounds().height(), drawOpacity(), layerRenderer ()->sharedGeometryQuad(),69 LayerChromium::drawTexturedQuad(context, layerRenderer->projectionMatrix(), drawTransform(), 70 bounds().width(), bounds().height(), drawOpacity(), layerRenderer->sharedGeometryQuad(), 72 71 program->vertexShader().matrixLocation(), 73 72 program->fragmentShader().alphaLocation(), -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.h
r95100 r95135 43 43 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexFlipAlpha> Program; 44 44 45 virtual void draw( );45 virtual void draw(LayerRendererChromium*); 46 46 47 47 virtual void dumpLayerProperties(TextStream&, int indent) const; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp
r95100 r95135 78 78 , m_debugBorderColor(0, 0, 0, 0) 79 79 , m_debugBorderWidth(0) 80 , m_layerRenderer(0)81 80 { 82 81 } … … 116 115 } 117 116 118 void CCLayerImpl::setLayerRenderer(LayerRendererChromium* renderer)119 {120 m_layerRenderer = renderer;121 }122 123 void CCLayerImpl::setLayerRendererRecursive(LayerRendererChromium* renderer)124 {125 for (size_t i = 0; i < children().size(); ++i)126 children()[i]->setLayerRendererRecursive(renderer);127 128 if (maskLayer())129 maskLayer()->setLayerRendererRecursive(renderer);130 if (replicaLayer())131 replicaLayer()->setLayerRendererRecursive(renderer);132 133 setLayerRenderer(renderer);134 }135 136 117 void CCLayerImpl::createRenderSurface() 137 118 { … … 149 130 } 150 131 151 void CCLayerImpl::draw( )132 void CCLayerImpl::draw(LayerRendererChromium*) 152 133 { 153 134 ASSERT_NOT_REACHED(); 154 135 } 155 136 156 void CCLayerImpl::bindContentsTexture() 157 { 137 void CCLayerImpl::bindContentsTexture(LayerRendererChromium*) 138 { 139 ASSERT_NOT_REACHED(); 158 140 } 159 141 … … 173 155 } 174 156 175 void CCLayerImpl::drawDebugBorder( )157 void CCLayerImpl::drawDebugBorder(LayerRendererChromium* layerRenderer) 176 158 { 177 159 static float glMatrix[16]; … … 179 161 return; 180 162 181 ASSERT(layerRenderer()); 182 GraphicsContext3D* context = layerRenderer()->context(); 183 const LayerChromium::BorderProgram* program = layerRenderer()->borderProgram(); 163 GraphicsContext3D* context = layerRenderer->context(); 164 const LayerChromium::BorderProgram* program = layerRenderer->borderProgram(); 184 165 ASSERT(program && program->initialized()); 185 166 GLC(context, context->useProgram(program->program())); … … 187 168 TransformationMatrix renderMatrix = drawTransform(); 188 169 renderMatrix.scale3d(bounds().width(), bounds().height(), 1); 189 toGLMatrix(&glMatrix[0], layerRenderer ()->projectionMatrix() * renderMatrix);170 toGLMatrix(&glMatrix[0], layerRenderer->projectionMatrix() * renderMatrix); 190 171 GLC(context, context->uniformMatrix4fv(program->vertexShader().matrixLocation(), false, &glMatrix[0], 1)); 191 172 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h
r95100 r95135 71 71 #endif 72 72 73 virtual void draw( );73 virtual void draw(LayerRendererChromium*); 74 74 void unreserveContentsTexture(); 75 virtual void bindContentsTexture( );75 virtual void bindContentsTexture(LayerRendererChromium*); 76 76 77 77 // Returns true if this layer has content to draw. … … 123 123 float debugBorderWidth() const { return m_debugBorderWidth; } 124 124 125 void drawDebugBorder(); 126 127 void setLayerRenderer(LayerRendererChromium*); 128 void setLayerRendererRecursive(LayerRendererChromium*); 129 LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); } 125 void drawDebugBorder(LayerRendererChromium*); 130 126 131 127 CCRenderSurface* renderSurface() const { return m_renderSurface.get(); } … … 249 245 // Hierarchical bounding rect containing the layer and its descendants. 250 246 IntRect m_drawableContentRect; 251 252 // Points to the layer renderer that updates and draws this layer.253 RefPtr<LayerRendererChromium> m_layerRenderer;254 247 }; 255 248 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h
r95100 r95135 45 45 class LayerChromium; 46 46 class LayerPainterChromium; 47 class LayerRendererChromium;48 47 class GraphicsLayer; 49 48 class NonCompositedContentHost; … … 175 174 bool initialize(); 176 175 177 PassRefPtr<LayerRendererChromium> createLayerRenderer();178 179 176 bool m_animating; 180 177 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r95100 r95135 122 122 bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context) 123 123 { 124 RefPtr<LayerRendererChromium> layerRenderer;124 OwnPtr<LayerRendererChromium> layerRenderer; 125 125 layerRenderer = LayerRendererChromium::create(this, context); 126 126 … … 140 140 } 141 141 142 m_layerRenderer = layerRenderer ;142 m_layerRenderer = layerRenderer.release(); 143 143 return m_layerRenderer; 144 144 } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h
r95100 r95135 85 85 86 86 private: 87 RefPtr<LayerRendererChromium> m_layerRenderer;87 OwnPtr<LayerRendererChromium> m_layerRenderer; 88 88 RefPtr<CCLayerImpl> m_rootLayerImpl; 89 89 CCSettings m_settings; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.cpp
r95014 r95135 47 47 } 48 48 49 void CCPluginLayerImpl::draw( )49 void CCPluginLayerImpl::draw(LayerRendererChromium* layerRenderer) 50 50 { 51 51 ASSERT(CCProxy::isImplThread()); 52 ASSERT(layerRenderer()); 53 const CCPluginLayerImpl::Program* program = layerRenderer()->pluginLayerProgram(); 52 const CCPluginLayerImpl::Program* program = layerRenderer->pluginLayerProgram(); 54 53 ASSERT(program && program->initialized()); 55 GraphicsContext3D* context = layerRenderer ()->context();54 GraphicsContext3D* context = layerRenderer->context(); 56 55 GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0)); 57 56 GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId)); … … 66 65 GLC(context, context->useProgram(program->program())); 67 66 GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0)); 68 LayerChromium::drawTexturedQuad(context, layerRenderer ()->projectionMatrix(), drawTransform(),69 bounds().width(), bounds().height(), drawOpacity(), layerRenderer ()->sharedGeometryQuad(),67 LayerChromium::drawTexturedQuad(context, layerRenderer->projectionMatrix(), drawTransform(), 68 bounds().width(), bounds().height(), drawOpacity(), layerRenderer->sharedGeometryQuad(), 70 69 program->vertexShader().matrixLocation(), 71 70 program->fragmentShader().alphaLocation(), -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.h
r95100 r95135 43 43 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexFlipAlpha> Program; 44 44 45 virtual void draw( );45 virtual void draw(LayerRendererChromium*); 46 46 47 47 virtual void dumpLayerProperties(TextStream&, int indent) const; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp
r94703 r95135 58 58 return; 59 59 60 ASSERT(layerRenderer());61 62 60 m_contentsTexture.clear(); 63 }64 65 LayerRendererChromium* CCRenderSurface::layerRenderer()66 {67 ASSERT(m_owningLayer);68 return m_owningLayer->layerRenderer();69 61 } 70 62 … … 80 72 } 81 73 82 bool CCRenderSurface::prepareContentsTexture( )74 bool CCRenderSurface::prepareContentsTexture(LayerRendererChromium* layerRenderer) 83 75 { 84 76 IntSize requiredSize(m_contentRect.size()); 85 TextureManager* textureManager = layerRenderer ()->renderSurfaceTextureManager();77 TextureManager* textureManager = layerRenderer->renderSurfaceTextureManager(); 86 78 87 79 if (!m_contentsTexture) … … 107 99 } 108 100 109 void CCRenderSurface::draw( const IntRect&)101 void CCRenderSurface::draw(LayerRendererChromium* layerRenderer, const IntRect&) 110 102 { 111 103 if (m_skipsDraw || !m_contentsTexture) … … 122 114 123 115 if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerScissor()) 124 layerRenderer ()->setScissorToRect(m_scissorRect);116 layerRenderer->setScissorToRect(m_scissorRect); 125 117 else 126 GLC(layerRenderer ()->context(), layerRenderer()->context()->disable(GraphicsContext3D::SCISSOR_TEST));118 GLC(layerRenderer->context(), layerRenderer->context()->disable(GraphicsContext3D::SCISSOR_TEST)); 127 119 128 120 // Reflection draws before the layer. 129 121 if (m_owningLayer->replicaLayer()) 130 drawLayer( replicaMaskLayer, m_replicaDrawTransform);131 132 drawLayer( m_maskLayer, m_drawTransform);133 } 134 135 void CCRenderSurface::drawLayer( CCLayerImpl* maskLayer, const TransformationMatrix& drawTransform)122 drawLayer(layerRenderer, replicaMaskLayer, m_replicaDrawTransform); 123 124 drawLayer(layerRenderer, m_maskLayer, m_drawTransform); 125 } 126 127 void CCRenderSurface::drawLayer(LayerRendererChromium* layerRenderer, CCLayerImpl* maskLayer, const TransformationMatrix& drawTransform) 136 128 { 137 129 TransformationMatrix renderMatrix = drawTransform; … … 139 131 renderMatrix.scale3d(m_contentRect.width(), m_contentRect.height(), 1); 140 132 141 TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer ()->windowMatrix() * layerRenderer()->projectionMatrix() * renderMatrix).to2dTransform();133 TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer->windowMatrix() * layerRenderer->projectionMatrix() * renderMatrix).to2dTransform(); 142 134 143 135 // Can only draw surface if device matrix is invertible. … … 145 137 return; 146 138 147 FloatQuad quad = deviceMatrix.mapQuad(layerRenderer ()->sharedGeometryQuad());139 FloatQuad quad = deviceMatrix.mapQuad(layerRenderer->sharedGeometryQuad()); 148 140 CCLayerQuad layerQuad = CCLayerQuad(quad); 149 141 … … 166 158 if (useMask) { 167 159 if (useAA) { 168 const MaskProgramAA* program = layerRenderer ()->renderSurfaceMaskProgramAA();169 drawSurface( maskLayer, drawTransform, deviceMatrix, layerQuad, program, program->fragmentShader().maskSamplerLocation(), program->vertexShader().pointLocation(), program->fragmentShader().edgeLocation());160 const MaskProgramAA* program = layerRenderer->renderSurfaceMaskProgramAA(); 161 drawSurface(layerRenderer, maskLayer, drawTransform, deviceMatrix, layerQuad, program, program->fragmentShader().maskSamplerLocation(), program->vertexShader().pointLocation(), program->fragmentShader().edgeLocation()); 170 162 } else { 171 const MaskProgram* program = layerRenderer ()->renderSurfaceMaskProgram();172 drawSurface( maskLayer, drawTransform, deviceMatrix, layerQuad, program, program->fragmentShader().maskSamplerLocation(), -1, -1);163 const MaskProgram* program = layerRenderer->renderSurfaceMaskProgram(); 164 drawSurface(layerRenderer, maskLayer, drawTransform, deviceMatrix, layerQuad, program, program->fragmentShader().maskSamplerLocation(), -1, -1); 173 165 } 174 166 } else { 175 167 if (useAA) { 176 const ProgramAA* program = layerRenderer ()->renderSurfaceProgramAA();177 drawSurface( maskLayer, drawTransform, deviceMatrix, layerQuad, program, -1, program->vertexShader().pointLocation(), program->fragmentShader().edgeLocation());168 const ProgramAA* program = layerRenderer->renderSurfaceProgramAA(); 169 drawSurface(layerRenderer, maskLayer, drawTransform, deviceMatrix, layerQuad, program, -1, program->vertexShader().pointLocation(), program->fragmentShader().edgeLocation()); 178 170 } else { 179 const Program* program = layerRenderer ()->renderSurfaceProgram();180 drawSurface( maskLayer, drawTransform, deviceMatrix, layerQuad, program, -1, -1, -1);171 const Program* program = layerRenderer->renderSurfaceProgram(); 172 drawSurface(layerRenderer, maskLayer, drawTransform, deviceMatrix, layerQuad, program, -1, -1, -1); 181 173 } 182 174 } … … 184 176 185 177 template <class T> 186 void CCRenderSurface::drawSurface( CCLayerImpl* maskLayer, const TransformationMatrix& drawTransform, const TransformationMatrix& deviceTransform, const CCLayerQuad& layerQuad, const T* program, int shaderMaskSamplerLocation, int shaderQuadLocation, int shaderEdgeLocation)187 { 188 GraphicsContext3D* context3D = layerRenderer ()->context();178 void CCRenderSurface::drawSurface(LayerRendererChromium* layerRenderer, CCLayerImpl* maskLayer, const TransformationMatrix& drawTransform, const TransformationMatrix& deviceTransform, const CCLayerQuad& layerQuad, const T* program, int shaderMaskSamplerLocation, int shaderQuadLocation, int shaderEdgeLocation) 179 { 180 GraphicsContext3D* context3D = layerRenderer->context(); 189 181 190 182 context3D->makeContextCurrent(); … … 198 190 GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE1)); 199 191 GLC(context3D, context3D->uniform1i(shaderMaskSamplerLocation, 1)); 200 maskLayer->bindContentsTexture( );192 maskLayer->bindContentsTexture(layerRenderer); 201 193 GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE0)); 202 194 } … … 211 203 FloatQuad quad = deviceTransform.inverse().mapQuad(layerQuad.floatQuad()); 212 204 213 LayerChromium::drawTexturedQuad(layerRenderer ()->context(), layerRenderer()->projectionMatrix(), drawTransform,205 LayerChromium::drawTexturedQuad(layerRenderer->context(), layerRenderer->projectionMatrix(), drawTransform, 214 206 m_contentRect.width(), m_contentRect.height(), m_drawOpacity, quad, 215 207 program->vertexShader().matrixLocation(), program->fragmentShader().alphaLocation(), shaderQuadLocation); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h
r94703 r95135 51 51 ~CCRenderSurface(); 52 52 53 bool prepareContentsTexture( );53 bool prepareContentsTexture(LayerRendererChromium*); 54 54 void releaseContentsTexture(); 55 55 void cleanupResources(); 56 void draw( const IntRect& targetSurfaceRect);56 void draw(LayerRendererChromium*, const IntRect& targetSurfaceRect); 57 57 58 58 String name() const; … … 99 99 int owningLayerId() const; 100 100 private: 101 LayerRendererChromium* layerRenderer(); 102 void drawLayer(CCLayerImpl*, const TransformationMatrix&); 101 void drawLayer(LayerRendererChromium*, CCLayerImpl*, const TransformationMatrix&); 103 102 template <class T> 104 void drawSurface( CCLayerImpl*, const TransformationMatrix& drawTransform, const TransformationMatrix& deviceTransform, const CCLayerQuad&, const T* program, int shaderMaskSamplerLocation, int shaderQuadLocation, int shaderEdgeLocation);103 void drawSurface(LayerRendererChromium*, CCLayerImpl*, const TransformationMatrix& drawTransform, const TransformationMatrix& deviceTransform, const CCLayerQuad&, const T* program, int shaderMaskSamplerLocation, int shaderQuadLocation, int shaderEdgeLocation); 105 104 106 105 CCLayerImpl* m_owningLayer; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp
r95100 r95135 61 61 } 62 62 63 void CCTiledLayerImpl::bindContentsTexture( )63 void CCTiledLayerImpl::bindContentsTexture(LayerRendererChromium* layerRenderer) 64 64 { 65 65 // This function is only valid for single texture layers, e.g. masks. … … 71 71 ASSERT(textureId); 72 72 73 layerRenderer ()->context()->bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);73 layerRenderer->context()->bindTexture(GraphicsContext3D::TEXTURE_2D, textureId); 74 74 } 75 75 … … 93 93 } 94 94 95 void CCTiledLayerImpl::draw( )95 void CCTiledLayerImpl::draw(LayerRendererChromium* layerRenderer) 96 96 { 97 97 const IntRect& layerRect = visibleLayerRect(); 98 98 99 if (m_skipsDraw || !m_tiler || m_tiler->isEmpty() || layerRect.isEmpty() || !layerRenderer ())99 if (m_skipsDraw || !m_tiler || m_tiler->isEmpty() || layerRect.isEmpty() || !layerRenderer) 100 100 return; 101 101 102 TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer ()->windowMatrix() * layerRenderer()->projectionMatrix() * m_tilingTransform).to2dTransform();102 TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer->windowMatrix() * layerRenderer->projectionMatrix() * m_tilingTransform).to2dTransform(); 103 103 104 104 // Don't draw any tiles when device matrix is not invertible. … … 120 120 layerQuad.inflateAntiAliasingDistance(); 121 121 122 GraphicsContext3D* context = layerRenderer ()->context();122 GraphicsContext3D* context = layerRenderer->context(); 123 123 if (isRootLayer()) { 124 124 context->colorMask(true, true, true, false); … … 129 129 case LayerTextureUpdater::SampledTexelFormatRGBA: 130 130 if (useAA) { 131 const ProgramAA* program = layerRenderer ()->tilerProgramAA();132 drawTiles(layerRenderer (), layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, program->fragmentShader().fragmentTexTransformLocation(), program->fragmentShader().edgeLocation());131 const ProgramAA* program = layerRenderer->tilerProgramAA(); 132 drawTiles(layerRenderer, layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, program->fragmentShader().fragmentTexTransformLocation(), program->fragmentShader().edgeLocation()); 133 133 } else { 134 const Program* program = layerRenderer ()->tilerProgram();135 drawTiles(layerRenderer (), layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, -1, -1);134 const Program* program = layerRenderer->tilerProgram(); 135 drawTiles(layerRenderer, layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, -1, -1); 136 136 } 137 137 break; 138 138 case LayerTextureUpdater::SampledTexelFormatBGRA: 139 139 if (useAA) { 140 const ProgramSwizzleAA* program = layerRenderer ()->tilerProgramSwizzleAA();141 drawTiles(layerRenderer (), layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, program->fragmentShader().fragmentTexTransformLocation(), program->fragmentShader().edgeLocation());140 const ProgramSwizzleAA* program = layerRenderer->tilerProgramSwizzleAA(); 141 drawTiles(layerRenderer, layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, program->fragmentShader().fragmentTexTransformLocation(), program->fragmentShader().edgeLocation()); 142 142 } else { 143 const ProgramSwizzle* program = layerRenderer ()->tilerProgramSwizzle();144 drawTiles(layerRenderer (), layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, -1, -1);143 const ProgramSwizzle* program = layerRenderer->tilerProgramSwizzle(); 144 drawTiles(layerRenderer, layerRect, m_tilingTransform, deviceMatrix, layerQuad, drawOpacity(), program, -1, -1); 145 145 } 146 146 break; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.h
r95100 r95135 44 44 virtual ~CCTiledLayerImpl(); 45 45 46 virtual void draw( );47 virtual void bindContentsTexture( );46 virtual void draw(LayerRendererChromium*); 47 virtual void bindContentsTexture(LayerRendererChromium*); 48 48 49 49 virtual void dumpLayerProperties(TextStream&, int indent) const; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp
r95014 r95135 78 78 } 79 79 80 void CCVideoLayerImpl::draw( )80 void CCVideoLayerImpl::draw(LayerRendererChromium* layerRenderer) 81 81 { 82 82 ASSERT(CCProxy::isImplThread()); … … 85 85 return; 86 86 87 ASSERT(layerRenderer());88 const RGBAProgram* rgbaProgram = layerRenderer()->videoLayerRGBAProgram();89 ASSERT(rgbaProgram && rgbaProgram->initialized());90 const YUVProgram* yuvProgram = layerRenderer()->videoLayerYUVProgram();91 ASSERT(yuvProgram && yuvProgram->initialized());92 93 87 switch (m_frameFormat) { 94 88 case VideoFrameChromium::YV12: 95 89 case VideoFrameChromium::YV16: 96 drawYUV( yuvProgram);90 drawYUV(layerRenderer); 97 91 break; 98 92 case VideoFrameChromium::RGBA: 99 drawRGBA( rgbaProgram);93 drawRGBA(layerRenderer); 100 94 break; 101 95 default: … … 106 100 } 107 101 108 void CCVideoLayerImpl::drawYUV( const CCVideoLayerImpl::YUVProgram* program) const102 void CCVideoLayerImpl::drawYUV(LayerRendererChromium* layerRenderer) const 109 103 { 110 GraphicsContext3D* context = layerRenderer()->context(); 104 const YUVProgram* program = layerRenderer->videoLayerYUVProgram(); 105 ASSERT(program && program->initialized()); 106 107 GraphicsContext3D* context = layerRenderer->context(); 111 108 CCVideoLayerImpl::Texture yTexture = m_textures[VideoFrameChromium::yPlane]; 112 109 CCVideoLayerImpl::Texture uTexture = m_textures[VideoFrameChromium::uPlane]; … … 135 132 GLC(context, context->uniform3fv(program->fragmentShader().yuvAdjLocation(), const_cast<float*>(yuvAdjust), 1)); 136 133 137 LayerChromium::drawTexturedQuad(context, layerRenderer ()->projectionMatrix(), drawTransform(),134 LayerChromium::drawTexturedQuad(context, layerRenderer->projectionMatrix(), drawTransform(), 138 135 bounds().width(), bounds().height(), drawOpacity(), FloatQuad(), 139 136 program->vertexShader().matrixLocation(), … … 145 142 } 146 143 147 void CCVideoLayerImpl::drawRGBA( const CCVideoLayerImpl::RGBAProgram* program) const144 void CCVideoLayerImpl::drawRGBA(LayerRendererChromium* layerRenderer) const 148 145 { 149 GraphicsContext3D* context = layerRenderer()->context(); 146 const RGBAProgram* program = layerRenderer->videoLayerRGBAProgram(); 147 ASSERT(program && program->initialized()); 148 149 GraphicsContext3D* context = layerRenderer->context(); 150 150 CCVideoLayerImpl::Texture texture = m_textures[VideoFrameChromium::rgbPlane]; 151 151 … … 159 159 GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0)); 160 160 161 LayerChromium::drawTexturedQuad(context, layerRenderer ()->projectionMatrix(), drawTransform(),162 bounds().width(), bounds().height(), drawOpacity(), layerRenderer ()->sharedGeometryQuad(),161 LayerChromium::drawTexturedQuad(context, layerRenderer->projectionMatrix(), drawTransform(), 162 bounds().width(), bounds().height(), drawOpacity(), layerRenderer->sharedGeometryQuad(), 163 163 program->vertexShader().matrixLocation(), 164 164 program->fragmentShader().alphaLocation(), -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.h
r95100 r95135 48 48 typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo> YUVProgram; 49 49 50 virtual void draw( );50 virtual void draw(LayerRendererChromium*); 51 51 52 52 virtual void dumpLayerProperties(TextStream&, int indent) const; … … 67 67 }; 68 68 69 void drawYUV( const YUVProgram*) const;70 void drawRGBA( const RGBAProgram*) const;69 void drawYUV(LayerRendererChromium*) const; 70 void drawRGBA(LayerRendererChromium*) const; 71 71 72 72 static const float yuv2RGB[9];
Note: See TracChangeset
for help on using the changeset viewer.