diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h')
-rw-r--r-- | Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h b/Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h new file mode 100644 index 000000000..c4a80224a --- /dev/null +++ b/Source/WebCore/platform/graphics/texmap/BitmapTextureGL.h @@ -0,0 +1,114 @@ +/* + Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) + Copyright (C) 2014 Igalia S.L. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +#ifndef BitmapTextureGL_h +#define BitmapTextureGL_h + +#if USE(TEXTURE_MAPPER_GL) + +#include "BitmapTexture.h" +#include "ClipStack.h" +#include "FilterOperation.h" +#include "GraphicsContext3D.h" +#include "IntSize.h" +#include "TextureMapperGL.h" + +namespace WebCore { + +class TextureMapper; +class TextureMapperGL; +class FilterOperation; + +class BitmapTextureGL : public BitmapTexture { +public: + static Ref<BitmapTexture> create(Ref<GraphicsContext3D>&& context3D, const Flags flags = NoFlag) + { + return adoptRef(*new BitmapTextureGL(WTFMove(context3D), flags)); + } + + virtual ~BitmapTextureGL(); + + IntSize size() const override; + bool isValid() const override; + void didReset() override; + void bindAsSurface(GraphicsContext3D*); + void initializeStencil(); + void initializeDepthBuffer(); + virtual uint32_t id() const { return m_id; } + uint32_t textureTarget() const { return GraphicsContext3D::TEXTURE_2D; } + IntSize textureSize() const { return m_textureSize; } + void updateContents(Image*, const IntRect&, const IntPoint&, UpdateContentsFlag) override; + void updateContents(const void*, const IntRect& target, const IntPoint& sourceOffset, int bytesPerLine, UpdateContentsFlag) override; + void updateContentsNoSwizzle(const void*, const IntRect& target, const IntPoint& sourceOffset, int bytesPerLine, unsigned bytesPerPixel = 4, Platform3DObject glFormat = GraphicsContext3D::RGBA); + bool isBackedByOpenGL() const override { return true; } + + PassRefPtr<BitmapTexture> applyFilters(TextureMapper&, const FilterOperations&) override; + struct FilterInfo { + RefPtr<FilterOperation> filter; + unsigned pass; + RefPtr<BitmapTexture> contentTexture; + + FilterInfo(PassRefPtr<FilterOperation> f = 0, unsigned p = 0, PassRefPtr<BitmapTexture> t = 0) + : filter(f) + , pass(p) + , contentTexture(t) + { } + }; + const FilterInfo* filterInfo() const { return &m_filterInfo; } + ClipStack& clipStack() { return m_clipStack; } + + GC3Dint internalFormat() const { return m_internalFormat; } + +private: + BitmapTextureGL(RefPtr<GraphicsContext3D>&&, const Flags); + + Platform3DObject m_id { 0 }; + IntSize m_textureSize; + IntRect m_dirtyRect; + Platform3DObject m_fbo { 0 }; + Platform3DObject m_rbo { 0 }; + Platform3DObject m_depthBufferObject { 0 }; + bool m_shouldClear { true }; + ClipStack m_clipStack; + RefPtr<GraphicsContext3D> m_context3D; + + void clearIfNeeded(); + void createFboIfNeeded(); + + FilterInfo m_filterInfo; + + GC3Dint m_internalFormat; + GC3Denum m_format; + GC3Denum m_type { +#if OS(DARWIN) + GL_UNSIGNED_INT_8_8_8_8_REV +#else + GraphicsContext3D::UNSIGNED_BYTE +#endif + }; +}; + +BitmapTextureGL* toBitmapTextureGL(BitmapTexture*); + +} + +#endif // USE(TEXTURE_MAPPER_GL) + +#endif // BitmapTextureGL_h |