// Copyright 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BitmapCanvasLayerTextureUpdater_h #define BitmapCanvasLayerTextureUpdater_h #include "cc/canvas_layer_texture_updater.h" class SkCanvas; namespace cc { class LayerPainterChromium; // This class rasterizes the contentRect into a skia bitmap canvas. It then updates // textures by copying from the canvas into the texture, using MapSubImage if // possible. class BitmapCanvasLayerTextureUpdater : public CanvasLayerTextureUpdater { public: class Texture : public LayerTextureUpdater::Texture { public: Texture(BitmapCanvasLayerTextureUpdater*, scoped_ptr); virtual ~Texture(); virtual void update(CCTextureUpdateQueue&, const IntRect& sourceRect, const IntSize& destOffset, bool partialUpdate, CCRenderingStats&) OVERRIDE; private: BitmapCanvasLayerTextureUpdater* textureUpdater() { return m_textureUpdater; } BitmapCanvasLayerTextureUpdater* m_textureUpdater; }; static scoped_refptr create(scoped_ptr); virtual scoped_ptr createTexture(CCPrioritizedTextureManager*) OVERRIDE; virtual SampledTexelFormat sampledTexelFormat(GLenum textureFormat) OVERRIDE; virtual void prepareToUpdate(const IntRect& contentRect, const IntSize& tileSize, float contentsWidthScale, float contentsHeightScale, IntRect& resultingOpaqueRect, CCRenderingStats&) OVERRIDE; void updateTexture(CCTextureUpdateQueue&, CCPrioritizedTexture*, const IntRect& sourceRect, const IntSize& destOffset, bool partialUpdate); virtual void setOpaque(bool) OVERRIDE; protected: explicit BitmapCanvasLayerTextureUpdater(scoped_ptr); virtual ~BitmapCanvasLayerTextureUpdater(); scoped_ptr m_canvas; IntSize m_canvasSize; bool m_opaque; }; } // namespace cc #endif // BitmapCanvasLayerTextureUpdater_h