/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 4; -*- */ /* 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 SHARED_SURFACE_ANGLE_H_ #define SHARED_SURFACE_ANGLE_H_ #include #include #include "SharedSurface.h" struct IDXGIKeyedMutex; struct ID3D11Texture2D; namespace mozilla { namespace gfx { class FileHandleWrapper; } // namespace gfx namespace gl { class GLContext; class EglDisplay; class SharedSurface_ANGLEShareHandle final : public SharedSurface { public: const std::weak_ptr mEGL; const EGLSurface mPBuffer; const RefPtr mSharedHandle; const RefPtr mKeyedMutex; static UniquePtr Create( const SharedSurfaceDesc&); private: SharedSurface_ANGLEShareHandle(const SharedSurfaceDesc&, const std::weak_ptr& egl, EGLSurface pbuffer, RefPtr&& aSharedHandle, const RefPtr& keyedMutex); public: virtual ~SharedSurface_ANGLEShareHandle(); virtual void LockProdImpl() override; virtual void UnlockProdImpl() override; virtual void ProducerAcquireImpl() override; virtual void ProducerReleaseImpl() override; virtual void ProducerReadAcquireImpl() override; virtual void ProducerReadReleaseImpl() override; Maybe ToSurfaceDescriptor() override; }; class SurfaceFactory_ANGLEShareHandle final : public SurfaceFactory { public: static UniquePtr Create(GLContext& gl); private: explicit SurfaceFactory_ANGLEShareHandle(const PartialSharedSurfaceDesc& desc) : SurfaceFactory(desc) {} virtual UniquePtr CreateSharedImpl( const SharedSurfaceDesc& desc) override { return SharedSurface_ANGLEShareHandle::Create(desc); } }; } // namespace gl } /* namespace mozilla */ #endif /* SHARED_SURFACE_ANGLE_H_ */