1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2  * This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef MOZILLA_GFX_X11TEXTURESOURCEOGL__H
7 #define MOZILLA_GFX_X11TEXTURESOURCEOGL__H
8 
9 #ifdef GL_PROVIDER_GLX
10 
11 #include "mozilla/layers/CompositorOGL.h"
12 #include "mozilla/layers/TextureHostOGL.h"
13 #include "mozilla/layers/X11TextureHost.h"
14 #include "mozilla/gfx/2D.h"
15 
16 namespace mozilla {
17 namespace layers {
18 
19 // TextureSource for Xlib-backed surfaces.
20 class X11TextureSourceOGL
21   : public TextureSourceOGL
22   , public X11TextureSource
23 {
24 public:
25   X11TextureSourceOGL(CompositorOGL* aCompositor, gfxXlibSurface* aSurface);
26   ~X11TextureSourceOGL();
27 
AsSourceOGL()28   virtual X11TextureSourceOGL* AsSourceOGL() override { return this; }
29 
IsValid()30   virtual bool IsValid() const override { return !!gl(); } ;
31 
32   virtual void BindTexture(GLenum aTextureUnit, gfx::SamplingFilter aSamplingFilter) override;
33 
34   virtual gfx::IntSize GetSize() const override;
35 
GetTextureTarget()36   virtual GLenum GetTextureTarget() const override { return LOCAL_GL_TEXTURE_2D; }
37 
38   virtual gfx::SurfaceFormat GetFormat() const override;
39 
GetWrapMode()40   virtual GLenum GetWrapMode() const override { return LOCAL_GL_CLAMP_TO_EDGE; }
41 
42   virtual void DeallocateDeviceData() override;
43 
44   virtual void SetCompositor(Compositor* aCompositor) override;
45 
Updated()46   virtual void Updated() override { mUpdated = true; }
47 
48   gl::GLContext* gl() const;
49 
50   static gfx::SurfaceFormat ContentTypeToSurfaceFormat(gfxContentType aType);
51 
52 protected:
53   RefPtr<CompositorOGL> mCompositor;
54   RefPtr<gfxXlibSurface> mSurface;
55   RefPtr<gfx::SourceSurface> mSourceSurface;
56   GLuint mTexture;
57   bool mUpdated;
58 };
59 
60 } // namespace layers
61 } // namespace mozilla
62 
63 #endif
64 
65 #endif // MOZILLA_GFX_X11TEXTURESOURCEOGL__H
66