Edit

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

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-02-05 16:28:24
    Hash : 48dcae7b
    Message : Added transform feedback shader generation. BUG=angle:495 Change-Id: I41a0177fd3eb43c9f4ab9e54faeadac3eb483c2c Reviewed-on: https://chromium-review.googlesource.com/185035 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/Program.h
  • //
    // Copyright (c) 2002-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.
    //
    
    // Program.h: Defines the gl::Program class. Implements GL program objects
    // and related functionality. [OpenGL ES 2.0.24] section 2.10.3 page 28.
    
    #ifndef LIBGLESV2_PROGRAM_H_
    #define LIBGLESV2_PROGRAM_H_
    
    #include <string>
    #include <set>
    
    #include "common/angleutils.h"
    #include "common/RefCountObject.h"
    #include "libGLESv2/Constants.h"
    
    namespace rx
    {
    class Renderer;
    }
    
    namespace gl
    {
    class ResourceManager;
    class FragmentShader;
    class VertexShader;
    class ProgramBinary;
    class Shader;
    
    extern const char * const g_fakepath;
    
    class AttributeBindings
    {
      public:
        AttributeBindings();
        ~AttributeBindings();
    
        void bindAttributeLocation(GLuint index, const char *name);
        int getAttributeBinding(const std::string &name) const;
    
      private:
        std::set<std::string> mAttributeBinding[MAX_VERTEX_ATTRIBS];
    };
    
    class InfoLog
    {
      public:
        InfoLog();
        ~InfoLog();
    
        int getLength() const;
        void getLog(GLsizei bufSize, GLsizei *length, char *infoLog);
    
        void appendSanitized(const char *message);
        void append(const char *info, ...);
        void reset();
      private:
        DISALLOW_COPY_AND_ASSIGN(InfoLog);
        char *mInfoLog;
    };
    
    class Program
    {
      public:
        Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle);
    
        ~Program();
    
        bool attachShader(Shader *shader);
        bool detachShader(Shader *shader);
        int getAttachedShadersCount() const;
    
        void bindAttributeLocation(GLuint index, const char *name);
    
        bool link();
        bool isLinked();
        bool setProgramBinary(const void *binary, GLsizei length);
        ProgramBinary *getProgramBinary() const;
    
        int getInfoLogLength() const;
        void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog);
        void getAttachedShaders(GLsizei maxCount, GLsizei *count, GLuint *shaders);
    
        void getActiveAttribute(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
        GLint getActiveAttributeCount();
        GLint getActiveAttributeMaxLength();
    
        void getActiveUniform(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
        GLint getActiveUniformCount();
        GLint getActiveUniformMaxLength();
    
        GLint getActiveUniformBlockCount();
        GLint getActiveUniformBlockMaxLength();
    
        void bindUniformBlock(GLuint uniformBlockIndex, GLuint uniformBlockBinding);
        GLuint getUniformBlockBinding(GLuint uniformBlockIndex) const;
    
        void setTransformFeedbackVaryings(GLsizei count, const GLchar *const *varyings, GLenum bufferMode);
        void getTransformFeedbackVarying(GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) const;
        GLsizei getTransformFeedbackVaryingCount() const;
        GLsizei getTransformFeedbackVaryingMaxLength() const;
        GLenum getTransformFeedbackBufferMode() const;
    
        void addRef();
        void release();
        unsigned int getRefCount() const;
        void flagForDeletion();
        bool isFlaggedForDeletion() const;
    
        void validate();
        bool isValidated() const;
    
        GLint getProgramBinaryLength() const;
    
      private:
        DISALLOW_COPY_AND_ASSIGN(Program);
    
        void unlink(bool destroy = false);
        void resetUniformBlockBindings();
    
        FragmentShader *mFragmentShader;
        VertexShader *mVertexShader;
    
        AttributeBindings mAttributeBindings;
    
        GLuint mUniformBlockBindings[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
    
        std::vector<std::string> mTransformFeedbackVaryings;
        GLuint mTransformFeedbackBufferMode;
    
        BindingPointer<ProgramBinary> mProgramBinary;
        bool mLinked;
        bool mDeleteStatus;   // Flag to indicate that the program can be deleted when no longer in use
    
        unsigned int mRefCount;
    
        ResourceManager *mResourceManager;
        rx::Renderer *mRenderer;
        const GLuint mHandle;
    
        InfoLog mInfoLog;
    };
    }
    
    #endif   // LIBGLESV2_PROGRAM_H_