| // | |
| // 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 LIBGLESV2_FRAMEBUFFERATTACHMENT_H_ | |
| #define LIBGLESV2_FRAMEBUFFERATTACHMENT_H_ | |
| #include "angle_gl.h" | |
| #include "common/angleutils.h" | |
| #include "common/RefCountObject.h" | |
| namespace rx | |
| { | |
| class Renderer; | |
| class RenderTarget; | |
| class TextureStorage; | |
| } | |
| namespace gl | |
| { | |
| class Texture2D; | |
| class TextureCubeMap; | |
| class Texture3D; | |
| class Texture2DArray; | |
| class Renderbuffer; | |
| // 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 | |
| { | |
| public: | |
| FramebufferAttachment(); | |
| virtual ~FramebufferAttachment(); | |
| // 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 isTexture() const; | |
| bool isTextureWithId(GLuint textureId) const { return isTexture() && id() == textureId; } | |
| bool isRenderbufferWithId(GLuint renderbufferId) const { return !isTexture() && id() == renderbufferId; } | |
| // Child class interface | |
| virtual rx::RenderTarget *getRenderTarget() = 0; | |
| virtual rx::RenderTarget *getDepthStencil() = 0; | |
| virtual rx::TextureStorage *getTextureStorage() = 0; | |
| virtual GLsizei getWidth() const = 0; | |
| virtual GLsizei getHeight() const = 0; | |
| virtual GLenum getInternalFormat() const = 0; | |
| virtual GLenum getActualFormat() const = 0; | |
| virtual GLsizei getSamples() const = 0; | |
| virtual unsigned int getSerial() const = 0; | |
| virtual GLuint id() const = 0; | |
| virtual GLenum type() const = 0; | |
| virtual GLint mipLevel() const = 0; | |
| virtual GLint layer() const = 0; | |
| virtual unsigned int getTextureSerial() const = 0; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment); | |
| }; | |
| class Texture2DAttachment : public FramebufferAttachment | |
| { | |
| public: | |
| Texture2DAttachment(Texture2D *texture, GLint level); | |
| virtual ~Texture2DAttachment(); | |
| rx::RenderTarget *getRenderTarget(); | |
| rx::RenderTarget *getDepthStencil(); | |
| rx::TextureStorage *getTextureStorage(); | |
| virtual GLsizei getWidth() const; | |
| virtual GLsizei getHeight() const; | |
| virtual GLenum getInternalFormat() const; | |
| virtual GLenum getActualFormat() const; | |
| virtual GLsizei getSamples() const; | |
| virtual unsigned int getSerial() const; | |
| virtual GLuint id() const; | |
| virtual GLenum type() const; | |
| virtual GLint mipLevel() const; | |
| virtual GLint layer() const; | |
| virtual unsigned int getTextureSerial() const; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(Texture2DAttachment); | |
| BindingPointer<Texture2D> mTexture2D; | |
| const GLint mLevel; | |
| }; | |
| class TextureCubeMapAttachment : public FramebufferAttachment | |
| { | |
| public: | |
| TextureCubeMapAttachment(TextureCubeMap *texture, GLenum faceTarget, GLint level); | |
| virtual ~TextureCubeMapAttachment(); | |
| rx::RenderTarget *getRenderTarget(); | |
| rx::RenderTarget *getDepthStencil(); | |
| rx::TextureStorage *getTextureStorage(); | |
| virtual GLsizei getWidth() const; | |
| virtual GLsizei getHeight() const; | |
| virtual GLenum getInternalFormat() const; | |
| virtual GLenum getActualFormat() const; | |
| virtual GLsizei getSamples() const; | |
| virtual unsigned int getSerial() const; | |
| virtual GLuint id() const; | |
| virtual GLenum type() const; | |
| virtual GLint mipLevel() const; | |
| virtual GLint layer() const; | |
| virtual unsigned int getTextureSerial() const; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(TextureCubeMapAttachment); | |
| BindingPointer<TextureCubeMap> mTextureCubeMap; | |
| const GLint mLevel; | |
| const GLenum mFaceTarget; | |
| }; | |
| class Texture3DAttachment : public FramebufferAttachment | |
| { | |
| public: | |
| Texture3DAttachment(Texture3D *texture, GLint level, GLint layer); | |
| virtual ~Texture3DAttachment(); | |
| rx::RenderTarget *getRenderTarget(); | |
| rx::RenderTarget *getDepthStencil(); | |
| rx::TextureStorage *getTextureStorage(); | |
| virtual GLsizei getWidth() const; | |
| virtual GLsizei getHeight() const; | |
| virtual GLenum getInternalFormat() const; | |
| virtual GLenum getActualFormat() const; | |
| virtual GLsizei getSamples() const; | |
| virtual unsigned int getSerial() const; | |
| virtual GLuint id() const; | |
| virtual GLenum type() const; | |
| virtual GLint mipLevel() const; | |
| virtual GLint layer() const; | |
| virtual unsigned int getTextureSerial() const; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(Texture3DAttachment); | |
| BindingPointer<Texture3D> mTexture3D; | |
| const GLint mLevel; | |
| const GLint mLayer; | |
| }; | |
| class Texture2DArrayAttachment : public FramebufferAttachment | |
| { | |
| public: | |
| Texture2DArrayAttachment(Texture2DArray *texture, GLint level, GLint layer); | |
| virtual ~Texture2DArrayAttachment(); | |
| rx::RenderTarget *getRenderTarget(); | |
| rx::RenderTarget *getDepthStencil(); | |
| rx::TextureStorage *getTextureStorage(); | |
| virtual GLsizei getWidth() const; | |
| virtual GLsizei getHeight() const; | |
| virtual GLenum getInternalFormat() const; | |
| virtual GLenum getActualFormat() const; | |
| virtual GLsizei getSamples() const; | |
| virtual unsigned int getSerial() const; | |
| virtual GLuint id() const; | |
| virtual GLenum type() const; | |
| virtual GLint mipLevel() const; | |
| virtual GLint layer() const; | |
| virtual unsigned int getTextureSerial() const; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(Texture2DArrayAttachment); | |
| BindingPointer<Texture2DArray> mTexture2DArray; | |
| const GLint mLevel; | |
| const GLint mLayer; | |
| }; | |
| class RenderbufferAttachment : public FramebufferAttachment | |
| { | |
| public: | |
| RenderbufferAttachment(Renderbuffer *renderbuffer); | |
| virtual ~RenderbufferAttachment(); | |
| rx::RenderTarget *getRenderTarget(); | |
| rx::RenderTarget *getDepthStencil(); | |
| rx::TextureStorage *getTextureStorage(); | |
| virtual GLsizei getWidth() const; | |
| virtual GLsizei getHeight() const; | |
| virtual GLenum getInternalFormat() const; | |
| virtual GLenum getActualFormat() const; | |
| virtual GLsizei getSamples() const; | |
| virtual unsigned int getSerial() const; | |
| virtual GLuint id() const; | |
| virtual GLenum type() const; | |
| virtual GLint mipLevel() const; | |
| virtual GLint layer() const; | |
| virtual unsigned int getTextureSerial() const; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(RenderbufferAttachment); | |
| BindingPointer<Renderbuffer> mRenderbuffer; | |
| }; | |
| } | |
| #endif // LIBGLESV2_FRAMEBUFFERATTACHMENT_H_ |