#ifndef TextureMapper_h
#define TextureMapper_h
#if USE(ACCELERATED_COMPOSITING)
#if (defined(QT_OPENGL_LIB))
#if defined(QT_OPENGL_ES_2) && !defined(TEXMAP_OPENGL_ES_2)
#define TEXMAP_OPENGL_ES_2
#endif
#endif
#include "GraphicsContext.h"
#include "IntRect.h"
#include "IntSize.h"
#include "TextureMapperPlatformLayer.h"
#include "TransformationMatrix.h"
#include <wtf/UnusedParam.h>
namespace WebCore {
class TextureMapper;
class BitmapTexture : public RefCounted<BitmapTexture> {
public:
BitmapTexture() : m_lockCount(0) {}
virtual ~BitmapTexture() { }
virtual void destroy() { }
virtual bool allowOfflineTextureUpload() const { return false; }
virtual IntSize size() const = 0;
virtual int bpp() const { return 32; }
virtual bool isValid() const = 0;
virtual void reset(const IntSize& size, bool opaque = false)
{
m_isOpaque = opaque;
m_contentSize = size;
}
virtual void pack() { }
virtual void unpack() { }
virtual bool isPacked() const { return false; }
virtual PlatformGraphicsContext* beginPaint(const IntRect& dirtyRect) = 0;
virtual void endPaint() = 0;
virtual PlatformGraphicsContext* beginPaintMedia()
{
return beginPaint(IntRect(0, 0, size().width(), size().height()));
}
virtual void setContentsToImage(Image*) = 0;
virtual bool save(const String&) { return false; }
inline void lock() { ++m_lockCount; }
inline void unlock() { --m_lockCount; }
inline bool isLocked() { return m_lockCount; }
inline IntSize contentSize() const { return m_contentSize; }
inline int numberOfBytes() const { return size().width() * size().height() * bpp() >> 3; }
protected:
int m_lockCount;
IntSize m_contentSize;
bool m_isOpaque;
};
class TextureMapper {
friend class BitmapTexture;
public:
static PassOwnPtr<TextureMapper> create(GraphicsContext* graphicsContext = 0);
virtual ~TextureMapper() { }
virtual void drawTexture(const BitmapTexture&, const FloatRect& target, const TransformationMatrix& modelViewMatrix = TransformationMatrix(), float opacity = 1.0f, const BitmapTexture* maskTexture = 0) = 0;
virtual void bindSurface(BitmapTexture* surface) = 0;
virtual void setGraphicsContext(GraphicsContext*) = 0;
virtual GraphicsContext* graphicsContext() = 0;
virtual void beginClip(const TransformationMatrix&, const FloatRect&) = 0;
virtual void endClip() = 0;
virtual bool allowSurfaceForRoot() const = 0;
virtual PassRefPtr<BitmapTexture> createTexture() = 0;
IntSize viewportSize() const { return m_viewportSize; }
void setViewportSize(const IntSize& s) { m_viewportSize = s; }
void setImageInterpolationQuality(InterpolationQuality quality) { m_interpolationQuality = quality; }
void setTextDrawingMode(TextDrawingModeFlags mode) { m_textDrawingMode = mode; }
InterpolationQuality imageInterpolationQuality() const { return m_interpolationQuality; }
TextDrawingModeFlags textDrawingMode() const { return m_textDrawingMode; }
virtual bool allowPartialUpdates() const { return false; }
virtual bool isOpenGLBacked() const { return false; }
void setTransform(const TransformationMatrix& matrix) { m_transform = matrix; }
TransformationMatrix transform() const { return m_transform; }
virtual void beginPainting() { }
virtual void endPainting() { }
protected:
TextureMapper()
: m_interpolationQuality(InterpolationDefault)
, m_textDrawingMode(TextModeFill)
{}
private:
InterpolationQuality m_interpolationQuality;
TextDrawingModeFlags m_textDrawingMode;
TransformationMatrix m_transform;
IntSize m_viewportSize;
};
};
#endif
#endif