author | Benoit Jacob <bjacob@mozilla.com> |
Sun, 17 Nov 2013 21:04:38 -0500 (2013-11-18) | |
changeset 155122 | 116329598a6427e29fe1d701b46c9b3c65c40407 |
parent 155121 | af0931327e49e620b7a1ad6131afcc2c8bd03e00 |
child 155123 | c60b3513c79019349ee50104e4847ff3e765adbb |
push id | 25662 |
push user | emorley@mozilla.com |
push date | Mon, 18 Nov 2013 10:53:03 +0000 (2013-11-18) |
treeherder | mozilla-central@59f6274ce8f1 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mattwoodrow |
bugs | 938970 |
milestone | 28.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/MacIOSurfaceImage.cpp +++ b/gfx/layers/MacIOSurfaceImage.cpp @@ -1,15 +1,15 @@ /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "MacIOSurfaceImage.h" -#include "mozilla/layers/TextureClientOGL.h" +#include "mozilla/layers/MacIOSurfaceTextureClientOGL.h" using namespace mozilla::layers; TextureClient* MacIOSurfaceImage::GetTextureClient() { if (!mTextureClient) { RefPtr<MacIOSurfaceTextureClientOGL> buffer =
--- a/gfx/layers/moz.build +++ b/gfx/layers/moz.build @@ -138,16 +138,18 @@ EXPORTS.mozilla.layers += [ 'ipc/SharedPlanarYCbCrImage.h', 'ipc/SharedRGBImage.h', 'ipc/TaskThrottler.h', 'LayersTypes.h', 'opengl/CompositingRenderTargetOGL.h', 'opengl/CompositorOGL.h', 'opengl/GrallocTextureClient.h', 'opengl/GrallocTextureHost.h', + 'opengl/MacIOSurfaceTextureClientOGL.h', + 'opengl/MacIOSurfaceTextureHostOGL.h', 'opengl/TextureClientOGL.h', 'opengl/TextureHostOGL.h', 'RenderTrace.h', 'YCbCrImageDataSerializer.h', ] if CONFIG['MOZ_X11']: EXPORTS.mozilla.layers += [ @@ -262,16 +264,22 @@ SOURCES += [ 'opengl/TexturePoolOGL.cpp', 'opengl/ThebesLayerOGL.cpp', 'ReadbackProcessor.cpp', 'RenderTrace.cpp', 'ThebesLayerBuffer.cpp', 'YCbCrImageDataSerializer.cpp', ] +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': + SOURCES += [ + 'opengl/MacIOSurfaceTextureClientOGL.cpp', + 'opengl/MacIOSurfaceTextureHostOGL.cpp', + ] + IPDL_SOURCES = [ 'ipc/LayersMessages.ipdlh', 'ipc/LayersSurfaces.ipdlh', 'ipc/PCompositable.ipdl', 'ipc/PCompositor.ipdl', 'ipc/PGrallocBuffer.ipdl', 'ipc/PImageBridge.ipdl', 'ipc/PLayer.ipdl',
new file mode 100644 --- /dev/null +++ b/gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "MacIOSurfaceTextureClientOGL.h" +#include "mozilla/gfx/MacIOSurface.h" + +namespace mozilla { +namespace layers { + +MacIOSurfaceTextureClientOGL::MacIOSurfaceTextureClientOGL(TextureFlags aFlags) + : TextureClient(aFlags) +{} + +MacIOSurfaceTextureClientOGL::~MacIOSurfaceTextureClientOGL() +{} + +void +MacIOSurfaceTextureClientOGL::InitWith(MacIOSurface* aSurface) +{ + MOZ_ASSERT(IsValid()); + MOZ_ASSERT(!IsAllocated()); + mSurface = aSurface; +} + +bool +MacIOSurfaceTextureClientOGL::ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) +{ + MOZ_ASSERT(IsValid()); + if (!IsAllocated()) { + return false; + } + aOutDescriptor = SurfaceDescriptorMacIOSurface(mSurface->GetIOSurfaceID(), + mSurface->GetContentsScaleFactor(), + mSurface->HasAlpha()); + return true; +} + +gfx::IntSize +MacIOSurfaceTextureClientOGL::GetSize() const +{ + return gfx::IntSize(mSurface->GetDevicePixelWidth(), mSurface->GetDevicePixelHeight()); +} + +TextureClientData* +MacIOSurfaceTextureClientOGL::DropTextureData() +{ + // MacIOSurface has proper cross-process refcounting so we can just drop + // our reference now, and the data will stay alive (at least) until the host + // has also been torn down. + mSurface = nullptr; + MarkInvalid(); + return nullptr; +} + +} +}
new file mode 100644 --- /dev/null +++ b/gfx/layers/opengl/MacIOSurfaceTextureClientOGL.h @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef MOZILLA_GFX_MACIOSURFACETEXTURECLIENTOGL_H +#define MOZILLA_GFX_MACIOSURFACETEXTURECLIENTOGL_H + +#include "mozilla/layers/TextureClientOGL.h" + +class MacIOSurface; + +namespace mozilla { +namespace layers { + +class MacIOSurfaceTextureClientOGL : public TextureClient +{ +public: + MacIOSurfaceTextureClientOGL(TextureFlags aFlags); + + virtual ~MacIOSurfaceTextureClientOGL(); + + void InitWith(MacIOSurface* aSurface); + + virtual bool IsAllocated() const MOZ_OVERRIDE { return !!mSurface; } + + virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) MOZ_OVERRIDE; + + virtual gfx::IntSize GetSize() const; + + virtual TextureClientData* DropTextureData() MOZ_OVERRIDE; + +protected: + RefPtr<MacIOSurface> mSurface; +}; + +} +} + +#endif // MOZILLA_GFX_MACIOSURFACETEXTURECLIENTOGL_H \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "MacIOSurfaceTextureHostOGL.h" +#include "mozilla/gfx/MacIOSurface.h" +#include "mozilla/layers/CompositorOGL.h" +#include "GLContext.h" + +namespace mozilla { +namespace layers { + +MacIOSurfaceTextureSourceOGL::MacIOSurfaceTextureSourceOGL( + CompositorOGL* aCompositor, + MacIOSurface* aSurface) + : mCompositor(aCompositor) + , mSurface(aSurface) +{} + +MacIOSurfaceTextureSourceOGL::~MacIOSurfaceTextureSourceOGL() +{} + +gfx::IntSize +MacIOSurfaceTextureSourceOGL::GetSize() const +{ + return gfx::IntSize(mSurface->GetDevicePixelWidth(), + mSurface->GetDevicePixelHeight()); +} + +gfx::SurfaceFormat +MacIOSurfaceTextureSourceOGL::GetFormat() const +{ + return mSurface->HasAlpha() ? gfx::FORMAT_R8G8B8A8 : gfx::FORMAT_B8G8R8X8; +} + +MacIOSurfaceTextureHostOGL::MacIOSurfaceTextureHostOGL(uint64_t aID, + TextureFlags aFlags, + const SurfaceDescriptorMacIOSurface& aDescriptor) + : TextureHost(aID, aFlags) +{ + mSurface = MacIOSurface::LookupSurface(aDescriptor.surface(), + aDescriptor.scaleFactor(), + aDescriptor.hasAlpha()); +} + +bool +MacIOSurfaceTextureHostOGL::Lock() +{ + if (!mCompositor) { + return false; + } + + if (!mTextureSource) { + mTextureSource = new MacIOSurfaceTextureSourceOGL(mCompositor, mSurface); + } + return true; +} + +void +MacIOSurfaceTextureHostOGL::SetCompositor(Compositor* aCompositor) +{ + CompositorOGL* glCompositor = static_cast<CompositorOGL*>(aCompositor); + mCompositor = glCompositor; + if (mTextureSource) { + mTextureSource->SetCompositor(glCompositor); + } +} + +void +MacIOSurfaceTextureSourceOGL::BindTexture(GLenum aTextureUnit) +{ + if (!gl()) { + NS_WARNING("Trying to bind a texture without a GLContext"); + return; + } + GLuint tex = mCompositor->GetTemporaryTexture(aTextureUnit); + + gl()->fActiveTexture(aTextureUnit); + gl()->fBindTexture(LOCAL_GL_TEXTURE_RECTANGLE_ARB, tex); + mSurface->CGLTexImageIOSurface2D(static_cast<CGLContextObj>(gl()->GetNativeData(gl::GLContext::NativeCGLContext))); + gl()->fActiveTexture(LOCAL_GL_TEXTURE0); +} + +gl::GLContext* +MacIOSurfaceTextureSourceOGL::gl() const +{ + return mCompositor ? mCompositor->gl() : nullptr; +} + +gfx::SurfaceFormat +MacIOSurfaceTextureHostOGL::GetFormat() const { + return mSurface->HasAlpha() ? gfx::FORMAT_R8G8B8A8 : gfx::FORMAT_B8G8R8X8; +} + +gfx::IntSize +MacIOSurfaceTextureHostOGL::GetSize() const { + return gfx::IntSize(mSurface->GetDevicePixelWidth(), + mSurface->GetDevicePixelHeight()); +} + +} +}
new file mode 100644 --- /dev/null +++ b/gfx/layers/opengl/MacIOSurfaceTextureHostOGL.h @@ -0,0 +1,108 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_H +#define MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_H + +#include "mozilla/layers/TextureHostOGL.h" + +class MacIOSurface; + +namespace mozilla { +namespace layers { + +/** + * A texture source meant for use with MacIOSurfaceTextureHostOGL. + * + * It does not own any GL texture, and attaches its shared handle to one of + * the compositor's temporary textures when binding. + */ +class MacIOSurfaceTextureSourceOGL : public NewTextureSource + , public TextureSourceOGL +{ +public: + MacIOSurfaceTextureSourceOGL(CompositorOGL* aCompositor, + MacIOSurface* aSurface); + virtual ~MacIOSurfaceTextureSourceOGL(); + + virtual TextureSourceOGL* AsSourceOGL() { return this; } + + virtual void BindTexture(GLenum activetex) MOZ_OVERRIDE; + + virtual bool IsValid() const MOZ_OVERRIDE { return !!gl(); } + + virtual gfx::IntSize GetSize() const MOZ_OVERRIDE; + + virtual gfx::SurfaceFormat GetFormat() const MOZ_OVERRIDE; + + virtual GLenum GetTextureTarget() const { return LOCAL_GL_TEXTURE_RECTANGLE_ARB; } + + virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; } + + virtual void UnbindTexture() MOZ_OVERRIDE {} + + // MacIOSurfaceTextureSourceOGL doesn't own any gl texture + virtual void DeallocateDeviceData() {} + + void SetCompositor(CompositorOGL* aCompositor) { + mCompositor = aCompositor; + } + + gl::GLContext* gl() const; + +protected: + CompositorOGL* mCompositor; + RefPtr<MacIOSurface> mSurface; +}; + +/** + * A TextureHost for shared MacIOSurface + * + * Most of the logic actually happens in MacIOSurfaceTextureSourceOGL. + */ +class MacIOSurfaceTextureHostOGL : public TextureHost +{ +public: + MacIOSurfaceTextureHostOGL(uint64_t aID, + TextureFlags aFlags, + const SurfaceDescriptorMacIOSurface& aDescriptor); + + // SharedTextureHostOGL doesn't own any GL texture + virtual void DeallocateDeviceData() MOZ_OVERRIDE {} + + virtual void SetCompositor(Compositor* aCompositor) MOZ_OVERRIDE; + + virtual bool Lock() MOZ_OVERRIDE; + + virtual gfx::SurfaceFormat GetFormat() const MOZ_OVERRIDE; + + virtual NewTextureSource* GetTextureSources() MOZ_OVERRIDE + { + return mTextureSource; + } + + virtual already_AddRefed<gfxImageSurface> GetAsSurface() MOZ_OVERRIDE + { + return nullptr; // XXX - implement this (for MOZ_DUMP_PAINTING) + } + + gl::GLContext* gl() const; + + virtual gfx::IntSize GetSize() const MOZ_OVERRIDE; + +#ifdef MOZ_LAYERS_HAVE_LOG + virtual const char* Name() { return "MacIOSurfaceTextureHostOGL"; } +#endif + +protected: + CompositorOGL* mCompositor; + RefPtr<MacIOSurfaceTextureSourceOGL> mTextureSource; + RefPtr<MacIOSurface> mSurface; +}; + +} +} + +#endif // MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_H \ No newline at end of file
--- a/gfx/layers/opengl/TextureClientOGL.cpp +++ b/gfx/layers/opengl/TextureClientOGL.cpp @@ -61,31 +61,16 @@ SharedTextureClientOGL::InitWith(gl::Sha } bool SharedTextureClientOGL::IsAllocated() const { return mHandle != 0; } -#ifdef XP_MACOSX -bool -MacIOSurfaceTextureClientOGL::ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) -{ - MOZ_ASSERT(IsValid()); - if (!IsAllocated()) { - return false; - } - aOutDescriptor = SurfaceDescriptorMacIOSurface(mSurface->GetIOSurfaceID(), - mSurface->GetContentsScaleFactor(), - mSurface->HasAlpha()); - return true; -} -#endif - DeprecatedTextureClientSharedOGL::DeprecatedTextureClientSharedOGL(CompositableForwarder* aForwarder, const TextureInfo& aTextureInfo) : DeprecatedTextureClient(aForwarder, aTextureInfo) , mGL(nullptr) { } void
--- a/gfx/layers/opengl/TextureClientOGL.h +++ b/gfx/layers/opengl/TextureClientOGL.h @@ -8,19 +8,16 @@ #include "GLContextTypes.h" // for SharedTextureHandle, etc #include "gfxTypes.h" #include "mozilla/Attributes.h" // for MOZ_OVERRIDE #include "mozilla/gfx/Point.h" // for IntSize #include "mozilla/layers/CompositorTypes.h" #include "mozilla/layers/LayersSurfaces.h" // for SurfaceDescriptor #include "mozilla/layers/TextureClient.h" // for DeprecatedTextureClient, etc -#ifdef XP_MACOSX -#include "mozilla/gfx/MacIOSurface.h" -#endif namespace mozilla { namespace layers { class CompositableForwarder; /** * A TextureClient implementation to share TextureMemory that is already @@ -55,55 +52,16 @@ public: protected: gl::SharedTextureHandle mHandle; gfx::IntSize mSize; gl::SharedTextureShareType mShareType; bool mInverted; }; -#ifdef XP_MACOSX -class MacIOSurfaceTextureClientOGL : public TextureClient -{ -public: - MacIOSurfaceTextureClientOGL(TextureFlags aFlags) - : TextureClient(aFlags) - {} - - virtual bool IsAllocated() const MOZ_OVERRIDE { return !!mSurface; } - - virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) MOZ_OVERRIDE; - - void InitWith(MacIOSurface* aSurface) - { - MOZ_ASSERT(IsValid()); - MOZ_ASSERT(!IsAllocated()); - mSurface = aSurface; - } - - virtual gfx::IntSize GetSize() const - { - return gfx::IntSize(mSurface->GetDevicePixelWidth(), mSurface->GetDevicePixelHeight()); - } - - virtual TextureClientData* DropTextureData() MOZ_OVERRIDE - { - // MacIOSurface has proper cross-process refcounting so we can just drop - // our reference now, and the data will stay alive (at least) until the host - // has also been torn down. - mSurface = nullptr; - MarkInvalid(); - return nullptr; - } - -protected: - RefPtr<MacIOSurface> mSurface; -}; -#endif - class DeprecatedTextureClientSharedOGL : public DeprecatedTextureClient { public: DeprecatedTextureClientSharedOGL(CompositableForwarder* aForwarder, const TextureInfo& aTextureInfo); ~DeprecatedTextureClientSharedOGL() { ReleaseResources(); } virtual bool SupportsType(DeprecatedTextureClientType aType) MOZ_OVERRIDE { return aType == TEXTURE_SHARED_GL; } virtual bool EnsureAllocated(gfx::IntSize aSize, gfxContentType aType);
--- a/gfx/layers/opengl/TextureHostOGL.cpp +++ b/gfx/layers/opengl/TextureHostOGL.cpp @@ -25,16 +25,17 @@ #include "mozilla/layers/ISurfaceAllocator.h" #include "mozilla/layers/YCbCrImageDataSerializer.h" #include "mozilla/layers/GrallocTextureHost.h" #include "nsPoint.h" // for nsIntPoint #include "nsRegion.h" // for nsIntRegion #include "GfxTexturesReporter.h" // for GfxTexturesReporter #ifdef XP_MACOSX #include "SharedSurfaceIO.h" +#include "mozilla/layers/MacIOSurfaceTextureHostOGL.h" #endif #include "GeckoProfiler.h" using namespace mozilla::gl; using namespace mozilla::gfx; namespace mozilla { namespace layers { @@ -432,72 +433,16 @@ SharedTextureHostOGL::SetCompositor(Comp gfx::SurfaceFormat SharedTextureHostOGL::GetFormat() const { MOZ_ASSERT(mTextureSource); return mTextureSource->GetFormat(); } -#ifdef XP_MACOSX -MacIOSurfaceTextureHostOGL::MacIOSurfaceTextureHostOGL(uint64_t aID, - TextureFlags aFlags, - const SurfaceDescriptorMacIOSurface& aDescriptor) - : TextureHost(aID, aFlags) -{ - mSurface = MacIOSurface::LookupSurface(aDescriptor.surface(), - aDescriptor.scaleFactor(), - aDescriptor.hasAlpha()); -} - -bool -MacIOSurfaceTextureHostOGL::Lock() -{ - if (!mCompositor) { - return false; - } - - if (!mTextureSource) { - mTextureSource = new MacIOSurfaceTextureSourceOGL(mCompositor, mSurface); - } - return true; -} - -void -MacIOSurfaceTextureHostOGL::SetCompositor(Compositor* aCompositor) -{ - CompositorOGL* glCompositor = static_cast<CompositorOGL*>(aCompositor); - mCompositor = glCompositor; - if (mTextureSource) { - mTextureSource->SetCompositor(glCompositor); - } -} - -void -MacIOSurfaceTextureSourceOGL::BindTexture(GLenum aTextureUnit) -{ - if (!gl()) { - NS_WARNING("Trying to bind a texture without a GLContext"); - return; - } - GLuint tex = mCompositor->GetTemporaryTexture(aTextureUnit); - - gl()->fActiveTexture(aTextureUnit); - gl()->fBindTexture(LOCAL_GL_TEXTURE_RECTANGLE_ARB, tex); - mSurface->CGLTexImageIOSurface2D(static_cast<CGLContextObj>(gl()->GetNativeData(GLContext::NativeCGLContext))); - gl()->fActiveTexture(LOCAL_GL_TEXTURE0); -} - -gl::GLContext* -MacIOSurfaceTextureSourceOGL::gl() const -{ - return mCompositor ? mCompositor->gl() : nullptr; -} -#endif - TextureImageDeprecatedTextureHostOGL::~TextureImageDeprecatedTextureHostOGL() { MOZ_COUNT_DTOR(TextureImageDeprecatedTextureHostOGL); if (mTexture && mTexture->InUpdate()) { mTexture->EndUpdate(); } }
--- a/gfx/layers/opengl/TextureHostOGL.h +++ b/gfx/layers/opengl/TextureHostOGL.h @@ -28,19 +28,16 @@ #include "nsCOMPtr.h" // for already_AddRefed #include "nsDebug.h" // for NS_WARNING #include "nsISupportsImpl.h" // for TextureImage::Release, etc #include "nsTraceRefcnt.h" // for MOZ_COUNT_CTOR, etc #include "LayerManagerOGLProgram.h" // for ShaderProgramType, etc #ifdef MOZ_WIDGET_GONK #include <ui/GraphicBuffer.h> #endif -#ifdef XP_MACOSX -#include "mozilla/gfx/MacIOSurface.h" -#endif class gfxImageSurface; class gfxReusableSurfaceWrapper; class nsIntRegion; struct nsIntPoint; struct nsIntRect; struct nsIntSize; @@ -343,116 +340,16 @@ protected: gfx::IntSize mSize; CompositorOGL* mCompositor; gl::SharedTextureHandle mSharedHandle; gl::SharedTextureShareType mShareType; RefPtr<SharedTextureSourceOGL> mTextureSource; }; -#ifdef XP_MACOSX -/** - * A texture source meant for use with MacIOSurfaceTextureHostOGL. - * - * It does not own any GL texture, and attaches its shared handle to one of - * the compositor's temporary textures when binding. - */ -class MacIOSurfaceTextureSourceOGL : public NewTextureSource - , public TextureSourceOGL -{ -public: - MacIOSurfaceTextureSourceOGL(CompositorOGL* aCompositor, - MacIOSurface* aSurface) - : mCompositor(aCompositor) - , mSurface(aSurface) - {} - - virtual TextureSourceOGL* AsSourceOGL() { return this; } - - virtual void BindTexture(GLenum activetex) MOZ_OVERRIDE; - - virtual bool IsValid() const MOZ_OVERRIDE { return !!gl(); } - - virtual gfx::IntSize GetSize() const MOZ_OVERRIDE { - return gfx::IntSize(mSurface->GetDevicePixelWidth(), - mSurface->GetDevicePixelHeight()); - } - - virtual gfx::SurfaceFormat GetFormat() const MOZ_OVERRIDE { - return mSurface->HasAlpha() ? gfx::FORMAT_R8G8B8A8 : gfx::FORMAT_B8G8R8X8; } - - virtual GLenum GetTextureTarget() const { return LOCAL_GL_TEXTURE_RECTANGLE_ARB; } - - virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; } - - virtual void UnbindTexture() MOZ_OVERRIDE {} - - // MacIOSurfaceTextureSourceOGL doesn't own any gl texture - virtual void DeallocateDeviceData() {} - - void SetCompositor(CompositorOGL* aCompositor) { - mCompositor = aCompositor; - } - - gl::GLContext* gl() const; - -protected: - CompositorOGL* mCompositor; - RefPtr<MacIOSurface> mSurface; -}; - -/** - * A TextureHost for shared MacIOSurface - * - * Most of the logic actually happens in MacIOSurfaceTextureSourceOGL. - */ -class MacIOSurfaceTextureHostOGL : public TextureHost -{ -public: - MacIOSurfaceTextureHostOGL(uint64_t aID, - TextureFlags aFlags, - const SurfaceDescriptorMacIOSurface& aDescriptor); - - // SharedTextureHostOGL doesn't own any GL texture - virtual void DeallocateDeviceData() MOZ_OVERRIDE {} - - virtual void SetCompositor(Compositor* aCompositor) MOZ_OVERRIDE; - - virtual bool Lock() MOZ_OVERRIDE; - - virtual gfx::SurfaceFormat GetFormat() const MOZ_OVERRIDE { - return mSurface->HasAlpha() ? gfx::FORMAT_R8G8B8A8 : gfx::FORMAT_B8G8R8X8; - } - - virtual NewTextureSource* GetTextureSources() MOZ_OVERRIDE - { - return mTextureSource; - } - - virtual already_AddRefed<gfxImageSurface> GetAsSurface() MOZ_OVERRIDE - { - return nullptr; // XXX - implement this (for MOZ_DUMP_PAINTING) - } - - gl::GLContext* gl() const; - - virtual gfx::IntSize GetSize() const MOZ_OVERRIDE { - return gfx::IntSize(mSurface->GetDevicePixelWidth(), - mSurface->GetDevicePixelHeight()); - } - - virtual const char* Name() { return "MacIOSurfaceTextureHostOGL"; } - -protected: - CompositorOGL* mCompositor; - RefPtr<MacIOSurfaceTextureSourceOGL> mTextureSource; - RefPtr<MacIOSurface> mSurface; -}; -#endif - /** * DeprecatedTextureHost implementation using a TextureImage as the underlying texture. */ class TextureImageDeprecatedTextureHostOGL : public DeprecatedTextureHost , public TextureSourceOGL , public TileIterator { public: