diff -r 000000000000 -r 6474c204b198 gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,94 @@ +/* -*- 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) + , mIsLocked(false) +{} + +MacIOSurfaceTextureClientOGL::~MacIOSurfaceTextureClientOGL() +{} + +void +MacIOSurfaceTextureClientOGL::InitWith(MacIOSurface* aSurface) +{ + MOZ_ASSERT(IsValid()); + MOZ_ASSERT(!IsAllocated()); + mSurface = aSurface; +} + +bool +MacIOSurfaceTextureClientOGL::Lock(OpenMode aMode) +{ + MOZ_ASSERT(!mIsLocked); + mIsLocked = true; + return IsValid() && IsAllocated(); +} + +void +MacIOSurfaceTextureClientOGL::Unlock() +{ + MOZ_ASSERT(mIsLocked); + mIsLocked = false; +} + +bool +MacIOSurfaceTextureClientOGL::IsLocked() const +{ + return mIsLocked; +} + +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()); +} + +class MacIOSurfaceTextureClientData : public TextureClientData +{ +public: + MacIOSurfaceTextureClientData(MacIOSurface* aSurface) + : mSurface(aSurface) + {} + + virtual void DeallocateSharedData(ISurfaceAllocator*) MOZ_OVERRIDE + { + mSurface = nullptr; + } + +private: + RefPtr mSurface; +}; + +TextureClientData* +MacIOSurfaceTextureClientOGL::DropTextureData() +{ + TextureClientData* data = new MacIOSurfaceTextureClientData(mSurface); + mSurface = nullptr; + MarkInvalid(); + return data; +} + +} +}