VTK
vtkShaderProgram2.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkShaderProgram2.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
27 #ifndef vtkShaderProgram2_h
28 #define vtkShaderProgram2_h
29 
30 #include <cassert> // for templated functions
31 #include "vtkRenderingOpenGLModule.h" // for export macro
32 #include "vtkWeakPointer.h" // for weak ptr to rendering context
33 #include "vtkObject.h"
34 
35 class vtkRenderWindow;
39 
40 // Values for GetLastBuildStatus()
42 {
43  // one of the shaders failed to compile
45  // all the shaders compiled successfully but the link failed
47  // all the shaders compiled successfully and the link succeeded
49 };
50 
52 {
58 };
59 
61 {
65 };
66 
68 {
69 public:
72  void PrintSelf(ostream& os, vtkIndent indent);
73 
76  static bool IsSupported(vtkRenderWindow *context);
77 
79 
84  vtkGetMacro(PrintErrors,bool);
85  vtkSetMacro(PrintErrors,bool);
87 
89 
93  void SetContext(vtkRenderWindow *context);
96 
98 
102 
107 
111 
115 
118 
123 
128  bool IsValid();
129 
134  void Build();
135 
140  void SendUniforms();
141 
143 
147  void PrintActiveUniformVariables(ostream &os,
148  vtkIndent indent);
150 
156 
160  bool IsUsed();
161 
167  void Use();
168 
172  void Restore();
173 
179 
181 
183  void UseProgram();
184  void UnuseProgram();
186 
194 
197  const char *GetLastLinkLog();
198 
201  const char *GetLastValidateLog();
202 
204  virtual void ReleaseGraphicsResources();
205 
211  int GetAttributeLocation(const char *name);
212 
214 
217  virtual void SetUniformVariables(vtkUniformVariables *variables);
219 
227 
229 
239  vtkSetMacro(GeometryTypeIn,int);
240  vtkGetMacro(GeometryTypeIn,int);
242 
244 
251  vtkSetMacro(GeometryVerticesOut,int);
252  vtkGetMacro(GeometryVerticesOut,int);
254 
256 
264  vtkSetMacro(GeometryTypeOut,int);
265  vtkGetMacro(GeometryTypeOut,int);
267 
268  /*
269  Low level api --
270  this is provided as a way to avoid some of the overhead in this
271  class's implementation of SendUniforms. One should use the
272  following API if performance is a concern (eg. uniforms are
273  set per primative), or if the uniform management is not needed
274  (eg. variables are already managed in other vtkObjects)
275  */
276 
278  int GetUniformLocation(const char *name);
279 
281 
285  void SetUniformf(const char *name, float val)
286  { this->SetUniform1f(name, &val); }
287  void SetUniform1f(const char *name, float *val)
288  { this->SetUniform1f(this->GetUniformLocation(name), val); }
289  void SetUniform2f(const char *name, float *val)
290  { this->SetUniform2f(this->GetUniformLocation(name), val); }
291  void SetUniform3f(const char *name, float *val)
292  { this->SetUniform3f(this->GetUniformLocation(name), val); }
293  void SetUniform4f(const char *name, float *val)
294  { this->SetUniform4f(this->GetUniformLocation(name), val); }
296 
297  void SetUniformi(const char *name, int val)
298  { this->SetUniform1i(name, &val); }
299  void SetUniform1i(const char *name, int *val)
300  { this->SetUniform1i(this->GetUniformLocation(name), val); }
301  void SetUniform2i(const char *name, int *val)
302  { this->SetUniform2i(this->GetUniformLocation(name), val); }
303  void SetUniform3i(const char *name, int *val)
304  { this->SetUniform3i(this->GetUniformLocation(name), val); }
305  void SetUniform4i(const char *name, int *val)
306  { this->SetUniform4i(this->GetUniformLocation(name), val); }
307 
308  void SetUniformf(int loc, float val)
309  { this->SetUniform1f(loc, &val); }
310  void SetUniform1f(int loc, float *val);
311  void SetUniform2f(int loc, float *val);
312  void SetUniform3f(int loc, float *val);
313  void SetUniform4f(int loc, float *val);
314 
315  void SetUniformi(int loc, int val)
316  { this->SetUniform1i(loc, &val); }
317  void SetUniform1i(int loc, int *val);
318  void SetUniform2i(int loc, int *val);
319  void SetUniform3i(int loc, int *val);
320  void SetUniform4i(int loc, int *val);
321 
323 
326  template<typename T> void SetUniform1it(const char *name, T *value);
327  template<typename T> void SetUniform2it(const char *name, T *value);
328  template<typename T> void SetUniform3it(const char *name, T *value);
329  template<typename T> void SetUniform4it(const char *name, T *value);
331 
332  template<typename T> void SetUniform1ft(const char *name, T *value);
333  template<typename T> void SetUniform2ft(const char *name, T *value);
334  template<typename T> void SetUniform3ft(const char *name, T *value);
335  template<typename T> void SetUniform4ft(const char *name, T *value);
336 
337  template<typename T> void SetUniform1it(int loc, T *value);
338  template<typename T> void SetUniform2it(int loc, T *value);
339  template<typename T> void SetUniform3it(int loc, T *value);
340  template<typename T> void SetUniform4it(int loc, T *value);
341 
342  template<typename T> void SetUniform1ft(int loc, T *value);
343  template<typename T> void SetUniform2ft(int loc, T *value);
344  template<typename T> void SetUniform3ft(int loc, T *value);
345  template<typename T> void SetUniform4ft(int loc, T *value);
346 
347 protected:
350 
353 
360 
361  unsigned int Id; // actually GLuint. Initial value is 0.
362  unsigned int SavedId;
363 
366 
369 
370  int LastBuildStatus; // Initial value is VTK_SHADER_PROGRAM2_COMPILE_FAILED
371 
372  char *LastLinkLog; // Initial value is the empty string ""='\0'
373  size_t LastLinkLogCapacity; // Initial value is 8.
374 
375  char *LastValidateLog; // Initial value is the empty string ""='\0'
376  size_t LastValidateLogCapacity; // Initial value is 8.
377 
378 
380 
383 
387 
388 private:
389  vtkShaderProgram2(const vtkShaderProgram2&); // Not implemented.
390  void operator=(const vtkShaderProgram2&); // Not implemented.
391 };
392 
393 // ----------------------------------------------------------------------------
394 //BTX
395 #define vtkShaderProgram2SetUniformCopyCastMacro(toLetter, toType, num) \
396 template<typename fromType> \
397 void vtkShaderProgram2::SetUniform##num##toLetter##t(const char *name, fromType *fvalues) \
398 { \
399  toType tvalues[num]; \
400  for (int i=0; i<num; ++i) \
401  { \
402  tvalues[i] = static_cast<toType>(fvalues[i]); \
403  } \
404  this->SetUniform##num##toLetter(name, tvalues); \
405 } \
406 template<typename fromType> \
407 void vtkShaderProgram2::SetUniform##num##toLetter##t(int location, fromType *fvalues) \
408 { \
409  assert(location!=-1); \
410  toType tvalues[num]; \
411  for (int i=0; i<num; ++i) \
412  { \
413  tvalues[i] = static_cast<toType>(fvalues[i]); \
414  } \
415  this->SetUniform##num##toLetter(location, tvalues); \
416 }
425 //ETX
426 
427 
428 #endif
vtkShaderProgram2::GetUniformLocationInternal
int GetUniformLocationInternal(const char *name)
VTK_SHADER_PROGRAM2_LINK_SUCCEEDED
@ VTK_SHADER_PROGRAM2_LINK_SUCCEEDED
Definition: vtkShaderProgram2.h:48
vtkShaderProgram2::SetUniform3i
void SetUniform3i(int loc, int *val)
vtkShaderProgram2::SetUniform3ft
void SetUniform3ft(const char *name, T *value)
vtkShaderProgram2::LastSendUniformsTime
vtkTimeStamp LastSendUniformsTime
Definition: vtkShaderProgram2.h:365
vtkGetObjectMacro
#define vtkGetObjectMacro(name, type)
Definition: vtkSetGet.h:232
vtkShaderProgram2::SavedId
unsigned int SavedId
Definition: vtkShaderProgram2.h:362
vtkShaderProgram2::SetUniform2f
void SetUniform2f(const char *name, float *val)
Definition: vtkShaderProgram2.h:289
vtkShaderProgram2::SetUniformi
void SetUniformi(const char *name, int val)
Definition: vtkShaderProgram2.h:297
vtkShaderProgram2::SetUniform2it
void SetUniform2it(int loc, T *value)
vtkShaderProgram2::SetUniform1f
void SetUniform1f(int loc, float *val)
vtkShaderProgram2::SetUniform4it
void SetUniform4it(int loc, T *value)
VTK_GEOMETRY_SHADER_OUT_TYPE_TRIANGLE_STRIP
@ VTK_GEOMETRY_SHADER_OUT_TYPE_TRIANGLE_STRIP
Definition: vtkShaderProgram2.h:64
vtkShaderProgram2SetUniformCopyCastMacro
#define vtkShaderProgram2SetUniformCopyCastMacro(toLetter, toType, num)
Definition: vtkShaderProgram2.h:395
vtkShaderProgram2::Shaders
vtkShader2Collection * Shaders
Definition: vtkShaderProgram2.h:367
vtkShader2Collection
a list of Shader2 objects.
Definition: vtkShader2Collection.h:35
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkShaderProgram2::DisplayListUnderCreationInCompileMode
bool DisplayListUnderCreationInCompileMode()
vtkShaderProgram2::HasVertexShaders
bool HasVertexShaders()
vtkShaderProgram2::IsUsed
bool IsUsed()
vtkRenderingOpenGLModule.h
vtkShaderProgram2::ReleaseGraphicsResources
virtual void ReleaseGraphicsResources()
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkShaderProgram2GeometryOutType
vtkShaderProgram2GeometryOutType
Definition: vtkShaderProgram2.h:61
vtkShaderProgram2::GetAttributeLocation
int GetAttributeLocation(const char *name)
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkShaderProgram2::SetUniformVariables
virtual void SetUniformVariables(vtkUniformVariables *variables)
vtkShaderProgram2::LastLinkTime
vtkTimeStamp LastLinkTime
Definition: vtkShaderProgram2.h:364
vtkShaderProgram2::UniformVariables
vtkUniformVariables * UniformVariables
Definition: vtkShaderProgram2.h:368
vtkShaderProgram2::SetUniform1f
void SetUniform1f(const char *name, float *val)
Definition: vtkShaderProgram2.h:287
VTK_SHADER_PROGRAM2_LINK_FAILED
@ VTK_SHADER_PROGRAM2_LINK_FAILED
Definition: vtkShaderProgram2.h:46
VTK_GEOMETRY_SHADER_OUT_TYPE_POINTS
@ VTK_GEOMETRY_SHADER_OUT_TYPE_POINTS
Definition: vtkShaderProgram2.h:62
vtkShaderProgram2::GetContext
vtkRenderWindow * GetContext()
vtkShaderProgram2::HasGeometryShaders
bool HasGeometryShaders()
vtkShaderProgram2::Restore
void Restore()
vtkShaderProgram2::PrintActiveUniformVariablesOnCout
void PrintActiveUniformVariablesOnCout()
vtkShaderProgram2::GeometryTypeOut
int GeometryTypeOut
Definition: vtkShaderProgram2.h:385
vtkShaderProgram2::ExtensionsLoaded
bool ExtensionsLoaded
Definition: vtkShaderProgram2.h:382
vtkShaderProgram2::SetUniform1ft
void SetUniform1ft(const char *name, T *value)
vtkShaderProgram2::GeometryVerticesOut
int GeometryVerticesOut
Definition: vtkShaderProgram2.h:386
vtkShaderProgram2::HasTessellationEvaluationShaders
bool HasTessellationEvaluationShaders()
vtkShaderProgram2::SetUniform1it
void SetUniform1it(const char *name, T *value)
vtkShaderProgram2::SetUniform2ft
void SetUniform2ft(const char *name, T *value)
vtkShaderProgram2::SetUniform4it
void SetUniform4it(const char *name, T *value)
VTK_GEOMETRY_SHADER_IN_TYPE_LINES
@ VTK_GEOMETRY_SHADER_IN_TYPE_LINES
Definition: vtkShaderProgram2.h:54
vtkgl::val
GLuint GLfloat * val
Definition: vtkgl.h:13789
vtkShaderProgram2::SetUniformf
void SetUniformf(int loc, float val)
Definition: vtkShaderProgram2.h:308
vtkShaderProgram2::SetUniform1ft
void SetUniform1ft(int loc, T *value)
vtkShaderProgram2::SetUniform3i
void SetUniform3i(const char *name, int *val)
Definition: vtkShaderProgram2.h:303
vtkgl::name
GLuint const GLchar * name
Definition: vtkgl.h:11983
vtkOpenGLExtensionManager
Interface class for querying and using OpenGL extensions.
vtkgl::value
GLsizei const GLfloat * value
Definition: vtkgl.h:12021
VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES
@ VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES
Definition: vtkShaderProgram2.h:56
vtkShaderProgram2GeometryInType
vtkShaderProgram2GeometryInType
Definition: vtkShaderProgram2.h:52
vtkShaderProgram2::LastValidateLogCapacity
size_t LastValidateLogCapacity
Definition: vtkShaderProgram2.h:376
vtkShaderProgram2::SetUniform2i
void SetUniform2i(int loc, int *val)
vtkShaderProgram2::SetUniform4f
void SetUniform4f(int loc, float *val)
vtkShaderProgram2::SetUniform1i
void SetUniform1i(int loc, int *val)
vtkShaderProgram2::GetLastValidateLog
const char * GetLastValidateLog()
vtkShaderProgram2::SetUniform4f
void SetUniform4f(const char *name, float *val)
Definition: vtkShaderProgram2.h:293
vtkShaderProgram2::SetUniform4i
void SetUniform4i(int loc, int *val)
vtkShaderProgram2::SetContext
void SetContext(vtkRenderWindow *context)
vtkShaderProgram2::SendUniforms
void SendUniforms()
vtkShaderProgram2::RestoreFixedPipeline
void RestoreFixedPipeline()
vtkShaderProgram2::LastBuildStatus
int LastBuildStatus
Definition: vtkShaderProgram2.h:370
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkShaderProgram2::SetUniform4i
void SetUniform4i(const char *name, int *val)
Definition: vtkShaderProgram2.h:305
vtkgl::GetUniformLocation
VTKRENDERINGOPENGL_EXPORT PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation
vtkShaderProgram2::UnuseProgram
void UnuseProgram()
vtkShaderProgram2::UseProgram
void UseProgram()
vtkShaderProgram2::GetUniformLocation
int GetUniformLocation(const char *name)
vtkWeakPointer.h
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkShaderProgram2::IsValid
bool IsValid()
vtkUniformVariables
GLSL uniform variables.
Definition: vtkUniformVariables.h:38
VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES_ADJACENCY
@ VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES_ADJACENCY
Definition: vtkShaderProgram2.h:57
vtkShaderProgram2::PrintActiveUniformVariables
void PrintActiveUniformVariables(ostream &os, vtkIndent indent)
vtkShaderProgram2::LoadRequiredExtensions
bool LoadRequiredExtensions(vtkRenderWindow *context)
VTK_GEOMETRY_SHADER_IN_TYPE_LINES_ADJACENCY
@ VTK_GEOMETRY_SHADER_IN_TYPE_LINES_ADJACENCY
Definition: vtkShaderProgram2.h:55
vtkgl::f
GLclampf f
Definition: vtkgl.h:14181
vtkShaderProgram2::vtkShaderProgram2
vtkShaderProgram2()
vtkShaderProgram2::New
static vtkShaderProgram2 * New()
vtkObject.h
vtkShaderProgram2::SetUniform2f
void SetUniform2f(int loc, float *val)
vtkShaderProgram2::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkShaderProgram2::Use
void Use()
vtkShaderProgram2::SetUniform2it
void SetUniform2it(const char *name, T *value)
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
vtkShaderProgram2::SetUniform2i
void SetUniform2i(const char *name, int *val)
Definition: vtkShaderProgram2.h:301
vtkShaderProgram2::SetUniformf
void SetUniformf(const char *name, float val)
Definition: vtkShaderProgram2.h:285
vtkShaderProgram2::SetUniform4ft
void SetUniform4ft(int loc, T *value)
vtkShaderProgram2
GLSL Program.
Definition: vtkShaderProgram2.h:68
vtkShaderProgram2::SetUniform1it
void SetUniform1it(int loc, T *value)
vtkShaderProgram2::Id
unsigned int Id
Definition: vtkShaderProgram2.h:361
vtkShaderProgram2::SetUniform2ft
void SetUniform2ft(int loc, T *value)
VTK_GEOMETRY_SHADER_IN_TYPE_POINTS
@ VTK_GEOMETRY_SHADER_IN_TYPE_POINTS
Definition: vtkShaderProgram2.h:53
vtkShaderProgram2::IsSupported
static bool IsSupported(vtkRenderWindow *context)
vtkShaderProgram2::LastLinkLog
char * LastLinkLog
Definition: vtkShaderProgram2.h:372
vtkShaderProgram2::SetUniform3it
void SetUniform3it(int loc, T *value)
vtkShaderProgram2::SetUniformi
void SetUniformi(int loc, int val)
Definition: vtkShaderProgram2.h:315
vtkShaderProgram2::GetLastBuildStatus
int GetLastBuildStatus()
vtkShaderProgram2::SetUniform3ft
void SetUniform3ft(int loc, T *value)
vtkShaderProgram2::GeometryTypeIn
int GeometryTypeIn
Definition: vtkShaderProgram2.h:384
vtkShaderProgram2::PrintErrors
bool PrintErrors
Definition: vtkShaderProgram2.h:379
vtkRenderWindow
create a window for renderers to draw into
Definition: vtkRenderWindow.h:89
vtkShaderProgram2::~vtkShaderProgram2
virtual ~vtkShaderProgram2()
vtkShaderProgram2::SetUniform3it
void SetUniform3it(const char *name, T *value)
vtkShaderProgram2::GetLastLinkLog
const char * GetLastLinkLog()
vtkShaderProgram2::SetUniform3f
void SetUniform3f(int loc, float *val)
vtkShaderProgram2::SetUniform3f
void SetUniform3f(const char *name, float *val)
Definition: vtkShaderProgram2.h:291
VTK_GEOMETRY_SHADER_OUT_TYPE_LINE_STRIP
@ VTK_GEOMETRY_SHADER_OUT_TYPE_LINE_STRIP
Definition: vtkShaderProgram2.h:63
vtkShaderProgram2BuildStatus
vtkShaderProgram2BuildStatus
Definition: vtkShaderProgram2.h:42
vtkShaderProgram2::SetUniform1i
void SetUniform1i(const char *name, int *val)
Definition: vtkShaderProgram2.h:299
vtkShaderProgram2::LastLinkLogCapacity
size_t LastLinkLogCapacity
Definition: vtkShaderProgram2.h:373
vtkShaderProgram2::Build
void Build()
vtkShaderProgram2::SetUniform4ft
void SetUniform4ft(const char *name, T *value)
vtkShaderProgram2::Context
vtkWeakPointer< vtkRenderWindow > Context
Definition: vtkShaderProgram2.h:381
vtkWeakPointer< vtkRenderWindow >
VTK_SHADER_PROGRAM2_COMPILE_FAILED
@ VTK_SHADER_PROGRAM2_COMPILE_FAILED
Definition: vtkShaderProgram2.h:44
vtkShaderProgram2::HasFragmentShaders
bool HasFragmentShaders()
VTKRENDERINGOPENGL_EXPORT
#define VTKRENDERINGOPENGL_EXPORT
Definition: vtkRenderingOpenGLModule.h:15
vtkShaderProgram2::HasTessellationControlShaders
bool HasTessellationControlShaders()
vtkShaderProgram2::LastValidateLog
char * LastValidateLog
Definition: vtkShaderProgram2.h:375