gfx/angle/src/libGLESv2/Program.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:4a54cb52eb09
1 //
2 // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // Program.h: Defines the gl::Program class. Implements GL program objects
8 // and related functionality. [OpenGL ES 2.0.24] section 2.10.3 page 28.
9
10 #ifndef LIBGLESV2_PROGRAM_H_
11 #define LIBGLESV2_PROGRAM_H_
12
13 #include <string>
14 #include <set>
15
16 #include "common/angleutils.h"
17 #include "common/RefCountObject.h"
18 #include "libGLESv2/Constants.h"
19
20 namespace rx
21 {
22 class Renderer;
23 }
24
25 namespace gl
26 {
27 class ResourceManager;
28 class FragmentShader;
29 class VertexShader;
30 class ProgramBinary;
31 class Shader;
32
33 extern const char * const g_fakepath;
34
35 class AttributeBindings
36 {
37 public:
38 AttributeBindings();
39 ~AttributeBindings();
40
41 void bindAttributeLocation(GLuint index, const char *name);
42 int getAttributeBinding(const std::string &name) const;
43
44 private:
45 std::set<std::string> mAttributeBinding[MAX_VERTEX_ATTRIBS];
46 };
47
48 class InfoLog
49 {
50 public:
51 InfoLog();
52 ~InfoLog();
53
54 int getLength() const;
55 void getLog(GLsizei bufSize, GLsizei *length, char *infoLog);
56
57 void appendSanitized(const char *message);
58 void append(const char *info, ...);
59 void reset();
60 private:
61 DISALLOW_COPY_AND_ASSIGN(InfoLog);
62 char *mInfoLog;
63 };
64
65 class Program
66 {
67 public:
68 Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle);
69
70 ~Program();
71
72 bool attachShader(Shader *shader);
73 bool detachShader(Shader *shader);
74 int getAttachedShadersCount() const;
75
76 void bindAttributeLocation(GLuint index, const char *name);
77
78 bool link();
79 bool isLinked();
80 bool setProgramBinary(const void *binary, GLsizei length);
81 ProgramBinary *getProgramBinary();
82
83 int getInfoLogLength() const;
84 void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog);
85 void getAttachedShaders(GLsizei maxCount, GLsizei *count, GLuint *shaders);
86
87 void getActiveAttribute(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
88 GLint getActiveAttributeCount();
89 GLint getActiveAttributeMaxLength();
90
91 void getActiveUniform(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
92 GLint getActiveUniformCount();
93 GLint getActiveUniformMaxLength();
94
95 void addRef();
96 void release();
97 unsigned int getRefCount() const;
98 void flagForDeletion();
99 bool isFlaggedForDeletion() const;
100
101 void validate();
102 bool isValidated() const;
103
104 GLint getProgramBinaryLength() const;
105
106 private:
107 DISALLOW_COPY_AND_ASSIGN(Program);
108
109 void unlink(bool destroy = false);
110
111 FragmentShader *mFragmentShader;
112 VertexShader *mVertexShader;
113
114 AttributeBindings mAttributeBindings;
115
116 BindingPointer<ProgramBinary> mProgramBinary;
117 bool mLinked;
118 bool mDeleteStatus; // Flag to indicate that the program can be deleted when no longer in use
119
120 unsigned int mRefCount;
121
122 ResourceManager *mResourceManager;
123 rx::Renderer *mRenderer;
124 const GLuint mHandle;
125
126 InfoLog mInfoLog;
127 };
128 }
129
130 #endif // LIBGLESV2_PROGRAM_H_

mercurial