Edit

kc3-lang/angle/src/libGLESv2/FramebufferAttachment.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2014-06-16 10:34:02
    Hash : 9c074a39
    Message : Add queries for level and layer to FBO attachments. BUG=angle:660 Change-Id: I03e76dd7743267dc0b57cf53a4d27cd75a5d5adf Reviewed-on: https://chromium-review.googlesource.com/201837 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/FramebufferAttachment.h
  • //
    // 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 <GLES3/gl3.h>
    #include <GLES2/gl2.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 FramebufferAttachmentImpl;
    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: Renderbuffers are specialized storage for depth and stencil buffes. Our old
    // naming scheme used the term "Renderbuffer" for both GL renderbuffers and for
    // framebuffer attachments, which confused their usage.
    
    class FramebufferAttachment : public RefCountObject
    {
      public:
        FramebufferAttachment(GLuint id, FramebufferAttachmentImpl *storage);
    
        virtual ~FramebufferAttachment();
    
        // These functions from RefCountObject are overloaded here because
        // Textures need to maintain their own count of references to them via
        // Renderbuffers/RenderbufferTextures. These functions invoke those
        // reference counting functions on the FramebufferAttachmentImpl.
        void addRef() const;
        void release() const;
    
        rx::RenderTarget *getRenderTarget();
        rx::RenderTarget *getDepthStencil();
        rx::TextureStorage *getTextureStorage();
    
        GLsizei getWidth() const;
        GLsizei getHeight() const;
        GLenum getInternalFormat() const;
        GLenum getActualFormat() const;
        GLuint getRedSize(int clientVersion) const;
        GLuint getGreenSize(int clientVersion) const;
        GLuint getBlueSize(int clientVersion) const;
        GLuint getAlphaSize(int clientVersion) const;
        GLuint getDepthSize(int clientVersion) const;
        GLuint getStencilSize(int clientVersion) const;
        GLenum getComponentType(int clientVersion) const;
        GLenum getColorEncoding(int clientVersion) const;
        GLsizei getSamples() const;
        bool isTexture() const;
    
        unsigned int getSerial() const;
    
        GLuint id() const;
        GLenum type() const;
        GLint mipLevel() const;
        GLint layer() const;
        unsigned int getTextureSerial() const;
    
        void setImplementation(FramebufferAttachmentImpl *newImpl);
    
      private:
        DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment);
    
        FramebufferAttachmentImpl *mImpl;
    };
    
    class FramebufferAttachmentImpl
    {
      public:
        FramebufferAttachmentImpl();
    
        virtual ~FramebufferAttachmentImpl() {};
    
        virtual void addProxyRef(const FramebufferAttachment *proxy);
        virtual void releaseProxy(const FramebufferAttachment *proxy);
    
        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(FramebufferAttachmentImpl);
    };
    
    class Texture2DAttachment : public FramebufferAttachmentImpl
    {
      public:
        Texture2DAttachment(Texture2D *texture, GLint level);
    
        virtual ~Texture2DAttachment();
    
        void addProxyRef(const FramebufferAttachment *proxy);
        void releaseProxy(const FramebufferAttachment *proxy);
    
        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 FramebufferAttachmentImpl
    {
      public:
        TextureCubeMapAttachment(TextureCubeMap *texture, GLenum faceTarget, GLint level);
    
        virtual ~TextureCubeMapAttachment();
    
        void addProxyRef(const FramebufferAttachment *proxy);
        void releaseProxy(const FramebufferAttachment *proxy);
    
        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 FramebufferAttachmentImpl
    {
      public:
        Texture3DAttachment(Texture3D *texture, GLint level, GLint layer);
    
        virtual ~Texture3DAttachment();
    
        void addProxyRef(const FramebufferAttachment *proxy);
        void releaseProxy(const FramebufferAttachment *proxy);
    
        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 FramebufferAttachmentImpl
    {
      public:
        Texture2DArrayAttachment(Texture2DArray *texture, GLint level, GLint layer);
    
        virtual ~Texture2DArrayAttachment();
    
        void addProxyRef(const FramebufferAttachment *proxy);
        void releaseProxy(const FramebufferAttachment *proxy);
    
        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 FramebufferAttachmentImpl
    {
      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_