1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef MOZILLA_GFX_MACIOSURFACETEXTUREHOST_BASIC_H 8 #define MOZILLA_GFX_MACIOSURFACETEXTUREHOST_BASIC_H 9 10 #include "mozilla/layers/BasicCompositor.h" 11 #include "mozilla/layers/TextureHostBasic.h" 12 13 class MacIOSurface; 14 15 namespace mozilla { 16 namespace layers { 17 18 class BasicCompositor; 19 20 /** 21 * A texture source meant for use with BasicCompositor. 22 * 23 * It does not own any GL texture, and attaches its shared handle to one of 24 * the compositor's temporary textures when binding. 25 */ 26 class MacIOSurfaceTextureSourceBasic : public TextureSourceBasic, 27 public TextureSource { 28 public: 29 explicit MacIOSurfaceTextureSourceBasic(MacIOSurface* aSurface); 30 virtual ~MacIOSurfaceTextureSourceBasic(); 31 Name()32 virtual const char* Name() const override { 33 return "MacIOSurfaceTextureSourceBasic"; 34 } 35 AsSourceBasic()36 virtual TextureSourceBasic* AsSourceBasic() override { return this; } 37 38 virtual gfx::IntSize GetSize() const override; 39 virtual gfx::SurfaceFormat GetFormat() const override; 40 virtual gfx::SourceSurface* GetSurface(gfx::DrawTarget* aTarget) override; 41 DeallocateDeviceData()42 virtual void DeallocateDeviceData() override {} 43 44 protected: 45 RefPtr<MacIOSurface> mSurface; 46 RefPtr<gfx::SourceSurface> mSourceSurface; 47 }; 48 49 /** 50 * A TextureHost for shared MacIOSurface 51 * 52 * Most of the logic actually happens in MacIOSurfaceTextureSourceBasic. 53 */ 54 class MacIOSurfaceTextureHostBasic : public TextureHost { 55 public: 56 MacIOSurfaceTextureHostBasic( 57 TextureFlags aFlags, const SurfaceDescriptorMacIOSurface& aDescriptor); 58 59 virtual void SetTextureSourceProvider( 60 TextureSourceProvider* aProvider) override; 61 62 virtual bool Lock() override; 63 64 virtual gfx::SurfaceFormat GetFormat() const override; 65 BindTextureSource(CompositableTextureSourceRef & aTexture)66 virtual bool BindTextureSource( 67 CompositableTextureSourceRef& aTexture) override { 68 aTexture = mTextureSource; 69 return !!aTexture; 70 } 71 GetAsSurface()72 virtual already_AddRefed<gfx::DataSourceSurface> GetAsSurface() override { 73 return nullptr; // XXX - implement this (for MOZ_DUMP_PAINTING) 74 } 75 76 virtual gfx::IntSize GetSize() const override; GetMacIOSurface()77 virtual MacIOSurface* GetMacIOSurface() override { return mSurface; } 78 79 #ifdef MOZ_LAYERS_HAVE_LOG Name()80 virtual const char* Name() override { return "MacIOSurfaceTextureHostBasic"; } 81 #endif 82 83 protected: 84 RefPtr<MacIOSurfaceTextureSourceBasic> mTextureSource; 85 RefPtr<MacIOSurface> mSurface; 86 }; 87 88 } // namespace layers 89 } // namespace mozilla 90 91 #endif // MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_BASIC_H 92