diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Surface.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/Surface.h | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Surface.h b/src/3rdparty/angle/src/libANGLE/Surface.h index 430bf0195d..e110f5da7b 100644 --- a/src/3rdparty/angle/src/libANGLE/Surface.h +++ b/src/3rdparty/angle/src/libANGLE/Surface.h @@ -15,25 +15,23 @@ #include "common/angleutils.h" #include "libANGLE/Error.h" +#include "libANGLE/FramebufferAttachment.h" #include "libANGLE/RefCountObject.h" +#include "libANGLE/renderer/SurfaceImpl.h" namespace gl { +class Framebuffer; class Texture; } -namespace rx -{ -class SurfaceImpl; -} - namespace egl { class AttributeMap; class Display; struct Config; -class Surface final : public RefCountObject +class Surface final : public gl::FramebufferAttachmentObject { public: Surface(rx::SurfaceImpl *impl, EGLint surfaceType, const egl::Config *config, const AttributeMap &attributes); @@ -52,6 +50,8 @@ class Surface final : public RefCountObject EGLint isPostSubBufferSupported() const; void setSwapInterval(EGLint interval); + void setIsCurrent(bool isCurrent); + void onDestroy(); const Config *getConfig() const; @@ -64,25 +64,56 @@ class Surface final : public RefCountObject EGLenum getTextureFormat() const; EGLenum getTextureTarget() const; - gl::Texture *getBoundTexture() const { return mTexture; } + gl::Texture *getBoundTexture() const { return mTexture.get(); } + gl::Framebuffer *getDefaultFramebuffer() { return mDefaultFramebuffer; } EGLint isFixedSize() const; + // FramebufferAttachmentObject implementation + gl::Extents getAttachmentSize(const gl::FramebufferAttachment::Target &target) const override; + GLenum getAttachmentInternalFormat(const gl::FramebufferAttachment::Target &target) const override; + GLsizei getAttachmentSamples(const gl::FramebufferAttachment::Target &target) const override; + + void onAttach() override {} + void onDetach() override {} + GLuint getId() const override; + + bool flexibleSurfaceCompatibilityRequested() const + { + return mFlexibleSurfaceCompatibilityRequested; + } + EGLint getOrientation() const { return mOrientation; } + + bool directComposition() const { return mDirectComposition; } + private: virtual ~Surface(); + rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override { return mImplementation; } + + gl::Framebuffer *createDefaultFramebuffer(); + + // ANGLE-only method, used internally + friend class gl::Texture; + void releaseTexImageFromTexture(); rx::SurfaceImpl *mImplementation; + gl::Framebuffer *mDefaultFramebuffer; + int mCurrentCount; + bool mDestroyed; EGLint mType; const egl::Config *mConfig; bool mPostSubBufferRequested; + bool mFlexibleSurfaceCompatibilityRequested; bool mFixedSize; size_t mFixedWidth; size_t mFixedHeight; + bool mDirectComposition; + EGLenum mTextureFormat; EGLenum mTextureTarget; @@ -90,7 +121,9 @@ class Surface final : public RefCountObject EGLenum mRenderBuffer; // Render buffer EGLenum mSwapBehavior; // Buffer swap behavior - gl::Texture *mTexture; + EGLint mOrientation; + + BindingPointer<gl::Texture> mTexture; }; } |