Changeset 95135 in webkit


Ignore:
Timestamp:
Sep 14, 2011 4:01:23 PM (13 years ago)
Author:
jamesr@google.com
Message:

[chromium] LayerRendererChromium shouldn't be RefCounted
https://bugs.webkit.org/show_bug.cgi?id=68121

Reviewed by Kenneth Russell.

LayerRendererChromium is owned exclusively by CCLayerTreeHostImpl, so there's no reason to have it be
refcounted. Making it an OwnPtr<> makes the lifecycle for these objects much cleaner and reduces the chance of
introducing accidental reference cycles. This also removes the LayerRendererChromium pointers from CCLayerImpls
since it only needed at draw time.

Covered by compositing/ tests.

  • platform/graphics/chromium/LayerRendererChromium.cpp:

(WebCore::LayerRendererChromium::create):
(WebCore::LayerRendererChromium::drawLayers):
(WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
(WebCore::LayerRendererChromium::useRenderSurface):
(WebCore::LayerRendererChromium::drawLayer):

  • platform/graphics/chromium/LayerRendererChromium.h:
  • platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:

(WebCore::CCCanvasLayerImpl::draw):

  • platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
  • platform/graphics/chromium/cc/CCLayerImpl.cpp:

(WebCore::CCLayerImpl::CCLayerImpl):
(WebCore::CCLayerImpl::draw):
(WebCore::CCLayerImpl::bindContentsTexture):
(WebCore::CCLayerImpl::drawDebugBorder):

  • platform/graphics/chromium/cc/CCLayerImpl.h:
  • platform/graphics/chromium/cc/CCLayerTreeHost.h:
  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:

(WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):

  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
  • platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:

(WebCore::CCPluginLayerImpl::draw):

  • platform/graphics/chromium/cc/CCPluginLayerImpl.h:
  • platform/graphics/chromium/cc/CCRenderSurface.cpp:

(WebCore::CCRenderSurface::cleanupResources):
(WebCore::CCRenderSurface::prepareContentsTexture):
(WebCore::CCRenderSurface::draw):
(WebCore::CCRenderSurface::drawLayer):
(WebCore::CCRenderSurface::drawSurface):

  • platform/graphics/chromium/cc/CCRenderSurface.h:
  • platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:

(WebCore::CCTiledLayerImpl::bindContentsTexture):
(WebCore::CCTiledLayerImpl::draw):

  • platform/graphics/chromium/cc/CCTiledLayerImpl.h:
  • platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:

(WebCore::CCVideoLayerImpl::draw):
(WebCore::CCVideoLayerImpl::drawYUV):
(WebCore::CCVideoLayerImpl::drawRGBA):

  • platform/graphics/chromium/cc/CCVideoLayerImpl.h:
Location:
trunk/Source/WebCore
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r95130 r95135  
     12011-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
    1552011-09-14  Anders Carlsson  <andersca@apple.com>
    256
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r95100 r95135  
    130130} // anonymous namespace
    131131
    132 PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHostImpl* owner, PassRefPtr<GraphicsContext3D> context)
     132PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHostImpl* owner, PassRefPtr<GraphicsContext3D> context)
    133133{
    134134#if USE(SKIA)
    135135    if (owner->settings().acceleratePainting && !contextSupportsAcceleratedPainting(context.get()))
    136         return 0;
     136        return nullptr;
    137137#endif
    138     RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, context)));
     138    OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(owner, context)));
    139139    if (!layerRenderer->initialize())
    140         return 0;
     140        return nullptr;
    141141
    142142    return layerRenderer.release();
     
    235235    if (!rootLayer())
    236236        return;
    237     // FIXME: No need to walk the tree here. This could be passed via draw.
    238     rootLayer()->setLayerRendererRecursive(this);
    239237
    240238    m_renderSurfaceTextureManager->setMemoryLimitBytes(TextureManager::highLimitBytes() - m_contentsTextureMemoryUseBytes);
     
    434432        m_defaultRenderSurface->setDrawTransform(drawTransform);
    435433        m_defaultRenderSurface->setDrawOpacity(1);
    436         m_defaultRenderSurface->draw(m_defaultRenderSurface->contentRect());
     434        m_defaultRenderSurface->draw(this, m_defaultRenderSurface->contentRect());
    437435    }
    438436}
     
    456454    GLC(m_context.get(), m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_offscreenFramebufferId));
    457455
    458     if (!renderSurface->prepareContentsTexture())
     456    if (!renderSurface->prepareContentsTexture(this))
    459457        return false;
    460458
     
    475473{
    476474    if (layer->renderSurface() && layer->renderSurface() != targetSurface) {
    477         layer->renderSurface()->draw(layer->getDrawRect());
     475        layer->renderSurface()->draw(this, layer->getDrawRect());
    478476        layer->renderSurface()->releaseContentsTexture();
    479477        return;
     
    513511    }
    514512
    515     layer->draw();
     513    layer->draw(this);
    516514
    517515    // Draw the debug border if there is one.
    518     layer->drawDebugBorder();
     516    layer->drawDebugBorder(this);
    519517}
    520518
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r95100 r95135  
    4343#include "cc/CCHeadsUpDisplay.h"
    4444#include "cc/CCLayerSorter.h"
    45 #include "cc/CCLayerTreeHost.h"
    4645#include "cc/CCLayerTreeHostImpl.h"
    4746#include "cc/CCPluginLayerImpl.h"
     
    6665class CCHeadsUpDisplay;
    6766class CCLayerImpl;
    68 class CCLayerTreeHost; // FIXME: remove pointers to this.
    6967class CCLayerTreeHostImpl;
    7068class GeometryBinding;
     
    7371
    7472// Class that handles drawing of composited render layers using GL.
    75 class LayerRendererChromium : public RefCounted<LayerRendererChromium> {
     73class LayerRendererChromium {
     74    WTF_MAKE_NONCOPYABLE(LayerRendererChromium);
    7675public:
    77     static PassRefPtr<LayerRendererChromium> create(CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>);
     76    static PassOwnPtr<LayerRendererChromium> create(CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>);
    7877
    7978    // Must be called in order to allow the LayerRendererChromium to destruct
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp

    r95014 r95135  
    4949}
    5050
    51 void CCCanvasLayerImpl::draw()
     51void CCCanvasLayerImpl::draw(LayerRendererChromium* layerRenderer)
    5252{
    5353    ASSERT(CCProxy::isImplThread());
    54     ASSERT(layerRenderer());
    55     const CCCanvasLayerImpl::Program* program = layerRenderer()->canvasLayerProgram();
     54    const CCCanvasLayerImpl::Program* program = layerRenderer->canvasLayerProgram();
    5655    ASSERT(program && program->initialized());
    57     GraphicsContext3D* context = layerRenderer()->context();
     56    GraphicsContext3D* context = layerRenderer->context();
    5857    GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0));
    5958    GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId));
     
    6867    GLC(context, context->useProgram(program->program()));
    6968    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(),
    7271                                    program->vertexShader().matrixLocation(),
    7372                                    program->fragmentShader().alphaLocation(),
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.h

    r95100 r95135  
    4343    typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexFlipAlpha> Program;
    4444
    45     virtual void draw();
     45    virtual void draw(LayerRendererChromium*);
    4646
    4747    virtual void dumpLayerProperties(TextStream&, int indent) const;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp

    r95100 r95135  
    7878    , m_debugBorderColor(0, 0, 0, 0)
    7979    , m_debugBorderWidth(0)
    80     , m_layerRenderer(0)
    8180{
    8281}
     
    116115}
    117116
    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 
    136117void CCLayerImpl::createRenderSurface()
    137118{
     
    149130}
    150131
    151 void CCLayerImpl::draw()
     132void CCLayerImpl::draw(LayerRendererChromium*)
    152133{
    153134    ASSERT_NOT_REACHED();
    154135}
    155136
    156 void CCLayerImpl::bindContentsTexture()
    157 {
     137void CCLayerImpl::bindContentsTexture(LayerRendererChromium*)
     138{
     139    ASSERT_NOT_REACHED();
    158140}
    159141
     
    173155}
    174156
    175 void CCLayerImpl::drawDebugBorder()
     157void CCLayerImpl::drawDebugBorder(LayerRendererChromium* layerRenderer)
    176158{
    177159    static float glMatrix[16];
     
    179161        return;
    180162
    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();
    184165    ASSERT(program && program->initialized());
    185166    GLC(context, context->useProgram(program->program()));
     
    187168    TransformationMatrix renderMatrix = drawTransform();
    188169    renderMatrix.scale3d(bounds().width(), bounds().height(), 1);
    189     toGLMatrix(&glMatrix[0], layerRenderer()->projectionMatrix() * renderMatrix);
     170    toGLMatrix(&glMatrix[0], layerRenderer->projectionMatrix() * renderMatrix);
    190171    GLC(context, context->uniformMatrix4fv(program->vertexShader().matrixLocation(), false, &glMatrix[0], 1));
    191172
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h

    r95100 r95135  
    7171#endif
    7272
    73     virtual void draw();
     73    virtual void draw(LayerRendererChromium*);
    7474    void unreserveContentsTexture();
    75     virtual void bindContentsTexture();
     75    virtual void bindContentsTexture(LayerRendererChromium*);
    7676
    7777    // Returns true if this layer has content to draw.
     
    123123    float debugBorderWidth() const { return m_debugBorderWidth; }
    124124
    125     void drawDebugBorder();
    126 
    127     void setLayerRenderer(LayerRendererChromium*);
    128     void setLayerRendererRecursive(LayerRendererChromium*);
    129     LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); }
     125    void drawDebugBorder(LayerRendererChromium*);
    130126
    131127    CCRenderSurface* renderSurface() const { return m_renderSurface.get(); }
     
    249245    // Hierarchical bounding rect containing the layer and its descendants.
    250246    IntRect m_drawableContentRect;
    251 
    252     // Points to the layer renderer that updates and draws this layer.
    253     RefPtr<LayerRendererChromium> m_layerRenderer;
    254247};
    255248
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h

    r95100 r95135  
    4545class LayerChromium;
    4646class LayerPainterChromium;
    47 class LayerRendererChromium;
    4847class GraphicsLayer;
    4948class NonCompositedContentHost;
     
    175174    bool initialize();
    176175
    177     PassRefPtr<LayerRendererChromium> createLayerRenderer();
    178 
    179176    bool m_animating;
    180177
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp

    r95100 r95135  
    122122bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context)
    123123{
    124     RefPtr<LayerRendererChromium> layerRenderer;
     124    OwnPtr<LayerRendererChromium> layerRenderer;
    125125    layerRenderer = LayerRendererChromium::create(this, context);
    126126
     
    140140    }
    141141
    142     m_layerRenderer = layerRenderer;
     142    m_layerRenderer = layerRenderer.release();
    143143    return m_layerRenderer;
    144144}
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h

    r95100 r95135  
    8585
    8686private:
    87     RefPtr<LayerRendererChromium> m_layerRenderer;
     87    OwnPtr<LayerRendererChromium> m_layerRenderer;
    8888    RefPtr<CCLayerImpl> m_rootLayerImpl;
    8989    CCSettings m_settings;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.cpp

    r95014 r95135  
    4747}
    4848
    49 void CCPluginLayerImpl::draw()
     49void CCPluginLayerImpl::draw(LayerRendererChromium* layerRenderer)
    5050{
    5151    ASSERT(CCProxy::isImplThread());
    52     ASSERT(layerRenderer());
    53     const CCPluginLayerImpl::Program* program = layerRenderer()->pluginLayerProgram();
     52    const CCPluginLayerImpl::Program* program = layerRenderer->pluginLayerProgram();
    5453    ASSERT(program && program->initialized());
    55     GraphicsContext3D* context = layerRenderer()->context();
     54    GraphicsContext3D* context = layerRenderer->context();
    5655    GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0));
    5756    GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId));
     
    6665    GLC(context, context->useProgram(program->program()));
    6766    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(),
    7069                                    program->vertexShader().matrixLocation(),
    7170                                    program->fragmentShader().alphaLocation(),
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.h

    r95100 r95135  
    4343    typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexFlipAlpha> Program;
    4444
    45     virtual void draw();
     45    virtual void draw(LayerRendererChromium*);
    4646
    4747    virtual void dumpLayerProperties(TextStream&, int indent) const;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp

    r94703 r95135  
    5858        return;
    5959
    60     ASSERT(layerRenderer());
    61 
    6260    m_contentsTexture.clear();
    63 }
    64 
    65 LayerRendererChromium* CCRenderSurface::layerRenderer()
    66 {
    67     ASSERT(m_owningLayer);
    68     return m_owningLayer->layerRenderer();
    6961}
    7062
     
    8072}
    8173
    82 bool CCRenderSurface::prepareContentsTexture()
     74bool CCRenderSurface::prepareContentsTexture(LayerRendererChromium* layerRenderer)
    8375{
    8476    IntSize requiredSize(m_contentRect.size());
    85     TextureManager* textureManager = layerRenderer()->renderSurfaceTextureManager();
     77    TextureManager* textureManager = layerRenderer->renderSurfaceTextureManager();
    8678
    8779    if (!m_contentsTexture)
     
    10799}
    108100
    109 void CCRenderSurface::draw(const IntRect&)
     101void CCRenderSurface::draw(LayerRendererChromium* layerRenderer, const IntRect&)
    110102{
    111103    if (m_skipsDraw || !m_contentsTexture)
     
    122114
    123115    if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerScissor())
    124         layerRenderer()->setScissorToRect(m_scissorRect);
     116        layerRenderer->setScissorToRect(m_scissorRect);
    125117    else
    126         GLC(layerRenderer()->context(), layerRenderer()->context()->disable(GraphicsContext3D::SCISSOR_TEST));
     118        GLC(layerRenderer->context(), layerRenderer->context()->disable(GraphicsContext3D::SCISSOR_TEST));
    127119
    128120    // Reflection draws before the layer.
    129121    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
     127void CCRenderSurface::drawLayer(LayerRendererChromium* layerRenderer, CCLayerImpl* maskLayer, const TransformationMatrix& drawTransform)
    136128{
    137129    TransformationMatrix renderMatrix = drawTransform;
     
    139131    renderMatrix.scale3d(m_contentRect.width(), m_contentRect.height(), 1);
    140132
    141     TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer()->windowMatrix() * layerRenderer()->projectionMatrix() * renderMatrix).to2dTransform();
     133    TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer->windowMatrix() * layerRenderer->projectionMatrix() * renderMatrix).to2dTransform();
    142134
    143135    // Can only draw surface if device matrix is invertible.
     
    145137        return;
    146138
    147     FloatQuad quad = deviceMatrix.mapQuad(layerRenderer()->sharedGeometryQuad());
     139    FloatQuad quad = deviceMatrix.mapQuad(layerRenderer->sharedGeometryQuad());
    148140    CCLayerQuad layerQuad = CCLayerQuad(quad);
    149141
     
    166158    if (useMask) {
    167159        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());
    170162        } 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);
    173165        }
    174166    } else {
    175167        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());
    178170        } 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);
    181173        }
    182174    }
     
    184176
    185177template <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();
     178void 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();
    189181
    190182    context3D->makeContextCurrent();
     
    198190        GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE1));
    199191        GLC(context3D, context3D->uniform1i(shaderMaskSamplerLocation, 1));
    200         maskLayer->bindContentsTexture();
     192        maskLayer->bindContentsTexture(layerRenderer);
    201193        GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE0));
    202194    }
     
    211203    FloatQuad quad = deviceTransform.inverse().mapQuad(layerQuad.floatQuad());
    212204
    213     LayerChromium::drawTexturedQuad(layerRenderer()->context(), layerRenderer()->projectionMatrix(), drawTransform,
     205    LayerChromium::drawTexturedQuad(layerRenderer->context(), layerRenderer->projectionMatrix(), drawTransform,
    214206                                    m_contentRect.width(), m_contentRect.height(), m_drawOpacity, quad,
    215207                                    program->vertexShader().matrixLocation(), program->fragmentShader().alphaLocation(), shaderQuadLocation);
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h

    r94703 r95135  
    5151    ~CCRenderSurface();
    5252
    53     bool prepareContentsTexture();
     53    bool prepareContentsTexture(LayerRendererChromium*);
    5454    void releaseContentsTexture();
    5555    void cleanupResources();
    56     void draw(const IntRect& targetSurfaceRect);
     56    void draw(LayerRendererChromium*, const IntRect& targetSurfaceRect);
    5757
    5858    String name() const;
     
    9999    int owningLayerId() const;
    100100private:
    101     LayerRendererChromium* layerRenderer();
    102     void drawLayer(CCLayerImpl*, const TransformationMatrix&);
     101    void drawLayer(LayerRendererChromium*, CCLayerImpl*, const TransformationMatrix&);
    103102    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);
    105104
    106105    CCLayerImpl* m_owningLayer;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp

    r95100 r95135  
    6161}
    6262
    63 void CCTiledLayerImpl::bindContentsTexture()
     63void CCTiledLayerImpl::bindContentsTexture(LayerRendererChromium* layerRenderer)
    6464{
    6565    // This function is only valid for single texture layers, e.g. masks.
     
    7171    ASSERT(textureId);
    7272
    73     layerRenderer()->context()->bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);
     73    layerRenderer->context()->bindTexture(GraphicsContext3D::TEXTURE_2D, textureId);
    7474}
    7575
     
    9393}
    9494
    95 void CCTiledLayerImpl::draw()
     95void CCTiledLayerImpl::draw(LayerRendererChromium* layerRenderer)
    9696{
    9797    const IntRect& layerRect = visibleLayerRect();
    9898
    99     if (m_skipsDraw || !m_tiler || m_tiler->isEmpty() || layerRect.isEmpty() || !layerRenderer())
     99    if (m_skipsDraw || !m_tiler || m_tiler->isEmpty() || layerRect.isEmpty() || !layerRenderer)
    100100        return;
    101101
    102     TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer()->windowMatrix() * layerRenderer()->projectionMatrix() * m_tilingTransform).to2dTransform();
     102    TransformationMatrix deviceMatrix = TransformationMatrix(layerRenderer->windowMatrix() * layerRenderer->projectionMatrix() * m_tilingTransform).to2dTransform();
    103103
    104104    // Don't draw any tiles when device matrix is not invertible.
     
    120120        layerQuad.inflateAntiAliasingDistance();
    121121
    122     GraphicsContext3D* context = layerRenderer()->context();
     122    GraphicsContext3D* context = layerRenderer->context();
    123123    if (isRootLayer()) {
    124124        context->colorMask(true, true, true, false);
     
    129129    case LayerTextureUpdater::SampledTexelFormatRGBA:
    130130        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());
    133133        } 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);
    136136        }
    137137        break;
    138138    case LayerTextureUpdater::SampledTexelFormatBGRA:
    139139        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());
    142142        } 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);
    145145        }
    146146        break;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.h

    r95100 r95135  
    4444    virtual ~CCTiledLayerImpl();
    4545
    46     virtual void draw();
    47     virtual void bindContentsTexture();
     46    virtual void draw(LayerRendererChromium*);
     47    virtual void bindContentsTexture(LayerRendererChromium*);
    4848
    4949    virtual void dumpLayerProperties(TextStream&, int indent) const;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp

    r95014 r95135  
    7878}
    7979
    80 void CCVideoLayerImpl::draw()
     80void CCVideoLayerImpl::draw(LayerRendererChromium* layerRenderer)
    8181{
    8282    ASSERT(CCProxy::isImplThread());
     
    8585        return;
    8686
    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 
    9387    switch (m_frameFormat) {
    9488    case VideoFrameChromium::YV12:
    9589    case VideoFrameChromium::YV16:
    96         drawYUV(yuvProgram);
     90        drawYUV(layerRenderer);
    9791        break;
    9892    case VideoFrameChromium::RGBA:
    99         drawRGBA(rgbaProgram);
     93        drawRGBA(layerRenderer);
    10094        break;
    10195    default:
     
    106100}
    107101
    108 void CCVideoLayerImpl::drawYUV(const CCVideoLayerImpl::YUVProgram* program) const
     102void CCVideoLayerImpl::drawYUV(LayerRendererChromium* layerRenderer) const
    109103{
    110     GraphicsContext3D* context = layerRenderer()->context();
     104    const YUVProgram* program = layerRenderer->videoLayerYUVProgram();
     105    ASSERT(program && program->initialized());
     106
     107    GraphicsContext3D* context = layerRenderer->context();
    111108    CCVideoLayerImpl::Texture yTexture = m_textures[VideoFrameChromium::yPlane];
    112109    CCVideoLayerImpl::Texture uTexture = m_textures[VideoFrameChromium::uPlane];
     
    135132    GLC(context, context->uniform3fv(program->fragmentShader().yuvAdjLocation(), const_cast<float*>(yuvAdjust), 1));
    136133
    137     LayerChromium::drawTexturedQuad(context, layerRenderer()->projectionMatrix(), drawTransform(),
     134    LayerChromium::drawTexturedQuad(context, layerRenderer->projectionMatrix(), drawTransform(),
    138135                                    bounds().width(), bounds().height(), drawOpacity(), FloatQuad(),
    139136                                    program->vertexShader().matrixLocation(),
     
    145142}
    146143
    147 void CCVideoLayerImpl::drawRGBA(const CCVideoLayerImpl::RGBAProgram* program) const
     144void CCVideoLayerImpl::drawRGBA(LayerRendererChromium* layerRenderer) const
    148145{
    149     GraphicsContext3D* context = layerRenderer()->context();
     146    const RGBAProgram* program = layerRenderer->videoLayerRGBAProgram();
     147    ASSERT(program && program->initialized());
     148
     149    GraphicsContext3D* context = layerRenderer->context();
    150150    CCVideoLayerImpl::Texture texture = m_textures[VideoFrameChromium::rgbPlane];
    151151
     
    159159    GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0));
    160160
    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(),
    163163                                    program->vertexShader().matrixLocation(),
    164164                                    program->fragmentShader().alphaLocation(),
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.h

    r95100 r95135  
    4848    typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo> YUVProgram;
    4949
    50     virtual void draw();
     50    virtual void draw(LayerRendererChromium*);
    5151
    5252    virtual void dumpLayerProperties(TextStream&, int indent) const;
     
    6767    };
    6868
    69     void drawYUV(const YUVProgram*) const;
    70     void drawRGBA(const RGBAProgram*) const;
     69    void drawYUV(LayerRendererChromium*) const;
     70    void drawRGBA(LayerRendererChromium*) const;
    7171
    7272    static const float yuv2RGB[9];
Note: See TracChangeset for help on using the changeset viewer.