• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB.  If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18  */
19 
20 #ifndef TextureMapperGL_h
21 #define TextureMapperGL_h
22 
23 #if USE(ACCELERATED_COMPOSITING)
24 
25 #include "FloatQuad.h"
26 #include "IntSize.h"
27 #include "TextureMapper.h"
28 #include "TransformationMatrix.h"
29 
30 namespace WebCore {
31 
32 class TextureMapperGLData;
33 
34 // An OpenGL-ES2 implementation of TextureMapper.
35 class TextureMapperGL : public TextureMapper {
36 public:
37     TextureMapperGL();
38     virtual ~TextureMapperGL();
39 
40     // reimps from TextureMapper
41     virtual void drawTexture(const BitmapTexture& texture, const IntRect&, const TransformationMatrix& transform, float opacity, const BitmapTexture* maskTexture);
42     virtual void bindSurface(BitmapTexture* surface);
43     virtual void setClip(const IntRect&);
44     virtual void paintToTarget(const BitmapTexture&, const IntSize&, const TransformationMatrix&, float opacity, const IntRect& visibleRect);
allowSurfaceForRoot()45     virtual bool allowSurfaceForRoot() const { return true; }
46     virtual PassRefPtr<BitmapTexture> createTexture();
47     virtual const char* type() const;
48     void obtainCurrentContext();
49     bool makeContextCurrent();
create()50     static PassOwnPtr<TextureMapperGL> create()
51     {
52         return new TextureMapperGL;
53     }
54 
55 private:
data()56     inline TextureMapperGLData& data() { return *m_data; }
57     TextureMapperGLData* m_data;
58     friend class BitmapTextureGL;
59 };
60 
61 // An offscreen buffer to be rendered by software.
62 class RGBA32PremultimpliedBuffer : public RefCounted<RGBA32PremultimpliedBuffer> {
63 public:
~RGBA32PremultimpliedBuffer()64     virtual ~RGBA32PremultimpliedBuffer() {}
65     virtual PlatformGraphicsContext* beginPaint(const IntRect& dirtyRect, bool opaque) = 0;
66     virtual void endPaint() = 0;
67     virtual const void* data() const = 0;
68     static PassRefPtr<RGBA32PremultimpliedBuffer> create();
69 };
70 
nextPowerOfTwo(int num)71 static inline int nextPowerOfTwo(int num)
72 {
73     for (int i = 0x10000000; i > 0; i >>= 1) {
74         if (num == i)
75             return num;
76         if (num & i)
77             return (i << 1);
78     }
79     return 1;
80 }
81 
nextPowerOfTwo(const IntSize & size)82 static inline IntSize nextPowerOfTwo(const IntSize& size)
83 {
84     return IntSize(nextPowerOfTwo(size.width()), nextPowerOfTwo(size.height()));
85 }
86 
87 };
88 
89 #endif
90 
91 #endif
92