Edit

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

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-06-19 14:14:41
    Hash : e4a492be
    Message : Remove the clientVersion parameter from the format utils. clientVersion was only useful for intitial validation of formats and not required for queries. Only use the client version and caps structure to validate if a format is available and then trust that it is supported past the validation layer. Fixed some inconsistancies between tables such as missing formats or incorrect load functions in the ES3 tables. BUG=angle:659 Change-Id: I8d33c902156ee6fb41efe937d93b0586191726e5 Reviewed-on: https://chromium-review.googlesource.com/201167 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-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 "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_