diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/FramebufferAttachment.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/FramebufferAttachment.h | 250 |
1 files changed, 0 insertions, 250 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/FramebufferAttachment.h b/src/3rdparty/angle/src/libANGLE/FramebufferAttachment.h deleted file mode 100644 index 5c0553a1d4..0000000000 --- a/src/3rdparty/angle/src/libANGLE/FramebufferAttachment.h +++ /dev/null @@ -1,250 +0,0 @@ -// -// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -// FramebufferAttachment.h: Defines the wrapper class gl::FramebufferAttachment, as well as the -// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108. - -#ifndef LIBANGLE_FRAMEBUFFERATTACHMENT_H_ -#define LIBANGLE_FRAMEBUFFERATTACHMENT_H_ - -#include "angle_gl.h" -#include "common/angleutils.h" -#include "libANGLE/angletypes.h" -#include "libANGLE/Error.h" -#include "libANGLE/ImageIndex.h" -#include "libANGLE/signal_utils.h" - -namespace egl -{ -class Surface; -} - -namespace rx -{ -// An implementation-specific object associated with an attachment. - -class FramebufferAttachmentRenderTarget : angle::NonCopyable -{ - public: - FramebufferAttachmentRenderTarget() {} - virtual ~FramebufferAttachmentRenderTarget() {} -}; - -class FramebufferAttachmentObjectImpl; -} - -namespace gl -{ -class FramebufferAttachmentObject; -struct Format; -class Renderbuffer; -class Texture; - -enum class InitState -{ - MayNeedInit, - Initialized, -}; - -using OnAttachmentDirtyBinding = angle::ChannelBinding<size_t, InitState>; -using OnAttachmentDirtyChannel = angle::BroadcastChannel<size_t, InitState>; -using OnAttachmentDirtyReceiver = angle::SignalReceiver<size_t, InitState>; - -// FramebufferAttachment implements a GL framebuffer attachment. -// Attachments are "light" containers, which store pointers to ref-counted GL objects. -// We support GL texture (2D/3D/Cube/2D array) and renderbuffer object attachments. -// Note: Our old naming scheme used the term "Renderbuffer" for both GL renderbuffers and for -// framebuffer attachments, which confused their usage. - -class FramebufferAttachment final -{ - public: - FramebufferAttachment(); - - FramebufferAttachment(const Context *context, - GLenum type, - GLenum binding, - const ImageIndex &textureIndex, - FramebufferAttachmentObject *resource); - - FramebufferAttachment(FramebufferAttachment &&other); - FramebufferAttachment &operator=(FramebufferAttachment &&other); - - ~FramebufferAttachment(); - - void detach(const Context *context); - void attach(const Context *context, - GLenum type, - GLenum binding, - const ImageIndex &textureIndex, - FramebufferAttachmentObject *resource, - GLsizei numViews, - GLuint baseViewIndex, - GLenum multiviewLayout, - const GLint *viewportOffsets); - - // Helper methods - GLuint getRedSize() const; - GLuint getGreenSize() const; - GLuint getBlueSize() const; - GLuint getAlphaSize() const; - GLuint getDepthSize() const; - GLuint getStencilSize() const; - GLenum getComponentType() const; - GLenum getColorEncoding() const; - - bool isTextureWithId(GLuint textureId) const { return mType == GL_TEXTURE && id() == textureId; } - bool isRenderbufferWithId(GLuint renderbufferId) const { return mType == GL_RENDERBUFFER && id() == renderbufferId; } - - GLenum getBinding() const { return mTarget.binding(); } - GLuint id() const; - - // These methods are only legal to call on Texture attachments - const ImageIndex &getTextureImageIndex() const; - GLenum cubeMapFace() const; - GLint mipLevel() const; - GLint layer() const; - GLsizei getNumViews() const; - GLenum getMultiviewLayout() const; - GLint getBaseViewIndex() const; - const std::vector<Offset> &getMultiviewViewportOffsets() const; - - // The size of the underlying resource the attachment points to. The 'depth' value will - // correspond to a 3D texture depth or the layer count of a 2D array texture. For Surfaces and - // Renderbuffers, it will always be 1. - Extents getSize() const; - const Format &getFormat() const; - GLsizei getSamples() const; - GLenum type() const { return mType; } - bool isAttached() const { return mType != GL_NONE; } - - Renderbuffer *getRenderbuffer() const; - Texture *getTexture() const; - const egl::Surface *getSurface() const; - FramebufferAttachmentObject *getResource() const; - InitState initState() const; - Error initializeContents(const Context *context); - void setInitState(InitState initState) const; - - // "T" must be static_castable from FramebufferAttachmentRenderTarget - template <typename T> - gl::Error getRenderTarget(const Context *context, T **rtOut) const - { - static_assert(std::is_base_of<rx::FramebufferAttachmentRenderTarget, T>(), - "Invalid RenderTarget class."); - return getRenderTargetImpl( - context, reinterpret_cast<rx::FramebufferAttachmentRenderTarget **>(rtOut)); - } - - bool operator==(const FramebufferAttachment &other) const; - bool operator!=(const FramebufferAttachment &other) const; - - static std::vector<Offset> GetDefaultViewportOffsetVector(); - static const GLsizei kDefaultNumViews; - static const GLenum kDefaultMultiviewLayout; - static const GLint kDefaultBaseViewIndex; - static const GLint kDefaultViewportOffsets[2]; - - private: - gl::Error getRenderTargetImpl(const Context *context, - rx::FramebufferAttachmentRenderTarget **rtOut) const; - - // A framebuffer attachment points to one of three types of resources: Renderbuffers, - // Textures and egl::Surface. The "Target" struct indicates which part of the - // object an attachment references. For the three types: - // - a Renderbuffer has a unique renderable target, and needs no target index - // - a Texture has targets for every image and uses an ImageIndex - // - a Surface has targets for Color and Depth/Stencil, and uses the attachment binding - class Target - { - public: - Target(); - Target(GLenum binding, const ImageIndex &imageIndex); - Target(const Target &other); - Target &operator=(const Target &other); - - GLenum binding() const { return mBinding; } - const ImageIndex &textureIndex() const { return mTextureIndex; } - - private: - GLenum mBinding; - ImageIndex mTextureIndex; - }; - - GLenum mType; - Target mTarget; - FramebufferAttachmentObject *mResource; - GLsizei mNumViews; - GLenum mMultiviewLayout; - GLint mBaseViewIndex; - std::vector<Offset> mViewportOffsets; -}; - -// A base class for objects that FBO Attachments may point to. -class FramebufferAttachmentObject -{ - public: - FramebufferAttachmentObject(); - virtual ~FramebufferAttachmentObject(); - - virtual Extents getAttachmentSize(const ImageIndex &imageIndex) const = 0; - virtual const Format &getAttachmentFormat(GLenum binding, - const ImageIndex &imageIndex) const = 0; - virtual GLsizei getAttachmentSamples(const ImageIndex &imageIndex) const = 0; - - virtual void onAttach(const Context *context) = 0; - virtual void onDetach(const Context *context) = 0; - virtual GLuint getId() const = 0; - - // These are used for robust resource initialization. - virtual InitState initState(const ImageIndex &imageIndex) const = 0; - virtual void setInitState(const ImageIndex &imageIndex, InitState initState) = 0; - - Error getAttachmentRenderTarget(const Context *context, - GLenum binding, - const ImageIndex &imageIndex, - rx::FramebufferAttachmentRenderTarget **rtOut) const; - - Error initializeContents(const Context *context, const ImageIndex &imageIndex); - - OnAttachmentDirtyChannel *getDirtyChannel(); - - protected: - virtual rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const = 0; - - OnAttachmentDirtyChannel mDirtyChannel; -}; - -inline Extents FramebufferAttachment::getSize() const -{ - ASSERT(mResource); - return mResource->getAttachmentSize(mTarget.textureIndex()); -} - -inline const Format &FramebufferAttachment::getFormat() const -{ - ASSERT(mResource); - return mResource->getAttachmentFormat(mTarget.binding(), mTarget.textureIndex()); -} - -inline GLsizei FramebufferAttachment::getSamples() const -{ - ASSERT(mResource); - return mResource->getAttachmentSamples(mTarget.textureIndex()); -} - -inline gl::Error FramebufferAttachment::getRenderTargetImpl( - const Context *context, - rx::FramebufferAttachmentRenderTarget **rtOut) const -{ - ASSERT(mResource); - return mResource->getAttachmentRenderTarget(context, mTarget.binding(), mTarget.textureIndex(), - rtOut); -} - -} // namespace gl - -#endif // LIBANGLE_FRAMEBUFFERATTACHMENT_H_ |