[TexMap] Seperate BitmapTexture related classes implementations from TextureMapper
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / BitmapTextureGL.h
1 /*
2  Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3  Copyright (C) 2014 Igalia S.L.
4
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  Library General Public License for more details.
14
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB.  If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19  */
20
21 #ifndef BitmapTextureGL_h
22 #define BitmapTextureGL_h
23
24 #include "BitmapTexture.h"
25 #include "FilterOperation.h"
26 #include "GraphicsContext3D.h"
27 #include "IntSize.h"
28 #include "TextureMapperGL.h"
29
30 namespace WebCore {
31
32 class TextureMapper;
33 class TextureMapperGL;
34 class FilterOperation;
35
36 class BitmapTextureGL : public BitmapTexture {
37 public:
38     BitmapTextureGL(PassRefPtr<GraphicsContext3D>);
39
40     virtual IntSize size() const;
41     virtual bool isValid() const;
42     virtual bool canReuseWith(const IntSize& contentsSize, Flags = 0);
43     virtual void didReset();
44     void bindAsSurface(GraphicsContext3D*);
45     void initializeStencil();
46     void initializeDepthBuffer();
47     ~BitmapTextureGL();
48     virtual uint32_t id() const { return m_id; }
49     uint32_t textureTarget() const { return GraphicsContext3D::TEXTURE_2D; }
50     IntSize textureSize() const { return m_textureSize; }
51     void updateContents(Image*, const IntRect&, const IntPoint&, UpdateContentsFlag);
52     virtual void updateContents(const void*, const IntRect& target, const IntPoint& sourceOffset, int bytesPerLine, UpdateContentsFlag);
53     void updateContentsNoSwizzle(const void*, const IntRect& target, const IntPoint& sourceOffset, int bytesPerLine, unsigned bytesPerPixel = 4, Platform3DObject glFormat = GraphicsContext3D::RGBA);
54     virtual bool isBackedByOpenGL() const { return true; }
55
56     virtual PassRefPtr<BitmapTexture> applyFilters(TextureMapper*, const FilterOperations&) override;
57     struct FilterInfo {
58         RefPtr<FilterOperation> filter;
59         unsigned pass;
60         RefPtr<BitmapTexture> contentTexture;
61
62         FilterInfo(PassRefPtr<FilterOperation> f = 0, unsigned p = 0, PassRefPtr<BitmapTexture> t = 0)
63             : filter(f)
64             , pass(p)
65             , contentTexture(t)
66             { }
67     };
68     const FilterInfo* filterInfo() const { return &m_filterInfo; }
69     TextureMapperGL::ClipStack& clipStack() { return m_clipStack; }
70
71 private:
72
73     Platform3DObject m_id;
74     IntSize m_textureSize;
75     IntRect m_dirtyRect;
76     Platform3DObject m_fbo;
77     Platform3DObject m_rbo;
78     Platform3DObject m_depthBufferObject;
79     bool m_shouldClear;
80     TextureMapperGL::ClipStack m_clipStack;
81     RefPtr<GraphicsContext3D> m_context3D;
82
83     BitmapTextureGL();
84
85     void clearIfNeeded();
86     void createFboIfNeeded();
87
88     FilterInfo m_filterInfo;
89 };
90
91 BitmapTextureGL* toBitmapTextureGL(BitmapTexture*);
92
93 }
94
95 #endif // BitmapTextureGL_h