24 #ifndef vtkShaderProgram_h
25 #define vtkShaderProgram_h
27 #include "vtkRenderingOpenGL2Module.h"
37 class VertexArrayObject;
58 vtkGetObjectMacro(VertexShader,
vtkShader);
66 vtkGetObjectMacro(FragmentShader,
vtkShader);
74 vtkGetObjectMacro(GeometryShader,
vtkShader);
90 vtkGetMacro(Compiled,
bool);
91 vtkSetMacro(Compiled,
bool);
92 vtkBooleanMacro(Compiled,
bool);
127 void ReleaseGraphicsResources(
vtkWindow *win);
139 bool EnableAttributeArray(
const char *
name);
145 bool DisableAttributeArray(
const char *
name);
162 bool UseAttributeArray(
const char *
name,
int offset,
size_t stride,
163 int elementType,
int elementTupleSize,
164 NormalizeOption normalize);
184 bool SetAttributeArray(
const char *
name,
const T &array,
185 int tupleSize, NormalizeOption normalize);
188 bool SetUniformi(
const char *
name,
int v);
189 bool SetUniformf(
const char *
name,
float v);
190 bool SetUniform2i(
const char *
name,
const int v[2]);
191 bool SetUniform2f(
const char *
name,
const float v[2]);
192 bool SetUniform3f(
const char *
name,
const float v[3]);
193 bool SetUniform3f(
const char *
name,
const double v[3]);
194 bool SetUniform4f(
const char *
name,
const float v[4]);
195 bool SetUniform3uc(
const char *
name,
const unsigned char v[3]);
196 bool SetUniform4uc(
const char *
name,
const unsigned char v[4]);
199 bool SetUniformMatrix3x3(
const char *
name,
float *v);
200 bool SetUniformMatrix4x4(
const char *
name,
float *v);
203 bool SetUniform1iv(
const char *
name,
const int count,
const int *f);
204 bool SetUniform1fv(
const char *
name,
const int count,
const float *f);
205 bool SetUniform2fv(
const char *
name,
const int count,
const float (*f)[2]);
206 bool SetUniform3fv(
const char *
name,
const int count,
const float (*f)[3]);
207 bool SetUniform4fv(
const char *
name,
const int count,
const float (*f)[4]);
208 bool SetUniformMatrix4x4v(
const char *
name,
const int count,
float *v);
212 vtkSetMacro(NumberOfOutputs,
unsigned int);
225 static bool Substitute(
242 static bool Substitute(
253 bool IsUniformUsed(
const char *);
259 bool IsAttributeUsed(
const char *
name);
271 return strcmp(a, b) < 0;
293 vtkSetStringMacro(FileNamePrefixForDebugging);
294 vtkGetStringMacro(FileNamePrefixForDebugging);
314 int FindUniform(
const char *
name);
315 int FindAttributeArray(
const char *
name);
335 bool AttachShader(
const vtkShader *shader);
342 bool DetachShader(
const vtkShader *shader);
347 virtual int CompileShader();
375 bool SetAttributeArrayInternal(
const char *
name,
void *buffer,
376 int type,
int tupleSize,
379 int VertexShaderHandle;
380 int FragmentShaderHandle;
381 int GeometryShaderHandle;
391 unsigned int NumberOfOutputs;
398 std::map<const char *, int, cmp_str> AttributeLocs;
399 std::map<const char *, int, cmp_str> UniformLocs;
401 std::map<int, vtkMTimeType> UniformGroupMTimes;
403 friend class VertexArrayObject;
409 char* FileNamePrefixForDebugging;