| // | |
| // Copyright (c) 2002-2012 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(); | |
| 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(); | |
| 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); | |
| FragmentShader *mFragmentShader; | |
| VertexShader *mVertexShader; | |
| AttributeBindings mAttributeBindings; | |
| 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_ |