00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027 #ifndef __vtkShaderProgram2_h
00028 #define __vtkShaderProgram2_h
00029
00030 #include "vtkObject.h"
00031 #include "vtkWeakPointer.h"
00032
00033 class vtkWindow;
00034 class vtkOpenGLRenderWindow;
00035 class vtkOpenGLExtensionManager;
00036 class vtkShaderProgram2Uniforms;
00037 class vtkShader2Collection;
00038 class vtkUniformVariables;
00039
00040
00041 enum vtkShaderProgram2BuildStatus
00042 {
00043
00044 VTK_SHADER_PROGRAM2_COMPILE_FAILED=0,
00045
00046 VTK_SHADER_PROGRAM2_LINK_FAILED=1,
00047
00048 VTK_SHADER_PROGRAM2_LINK_SUCCEEDED=2
00049 };
00050
00051 enum vtkShaderProgram2GeometryInType
00052 {
00053 VTK_GEOMETRY_SHADER_IN_TYPE_POINTS,
00054 VTK_GEOMETRY_SHADER_IN_TYPE_LINES,
00055 VTK_GEOMETRY_SHADER_IN_TYPE_LINES_ADJACENCY,
00056 VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES,
00057 VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES_ADJACENCY
00058 };
00059
00060 enum vtkShaderProgram2GeometryOutType
00061 {
00062 VTK_GEOMETRY_SHADER_OUT_TYPE_POINTS,
00063 VTK_GEOMETRY_SHADER_OUT_TYPE_LINE_STRIP,
00064 VTK_GEOMETRY_SHADER_OUT_TYPE_TRIANGLE_STRIP
00065 };
00066
00067 class VTK_RENDERING_EXPORT vtkShaderProgram2 : public vtkObject
00068 {
00069 public:
00070 static vtkShaderProgram2* New();
00071 vtkTypeMacro(vtkShaderProgram2, vtkObject);
00072 void PrintSelf(ostream& os, vtkIndent indent);
00073
00075
00076 static bool IsSupported(vtkOpenGLRenderWindow *context);
00077 static bool LoadExtensions(vtkOpenGLRenderWindow *context);
00079
00081
00086 vtkGetMacro(PrintErrors,bool);
00087 vtkSetMacro(PrintErrors,bool);
00089
00091
00095 void SetContext(vtkOpenGLRenderWindow *context);
00096 vtkGetObjectMacro(Context,vtkOpenGLRenderWindow);
00098
00100
00102 vtkGetObjectMacro(Shaders,vtkShader2Collection);
00104
00108 bool HasVertexShaders();
00109
00112 bool HasTessellationControlShaders();
00113
00116 bool HasTessellationEvaluationShaders();
00117
00119 bool HasGeometryShaders();
00120
00124 bool HasFragmentShaders();
00125
00130 bool IsValid();
00131
00136 void Build();
00137
00142 void SendUniforms();
00143
00145
00149 void PrintActiveUniformVariables(ostream &os,
00150 vtkIndent indent);
00152
00157 void PrintActiveUniformVariablesOnCout();
00158
00162 bool IsUsed();
00163
00168 void Use();
00169
00173 void Restore();
00174
00179 void RestoreFixedPipeline();
00180
00187 int GetLastBuildStatus();
00188
00191 const char *GetLastLinkLog();
00192
00195 const char *GetLastValidateLog();
00196
00198 virtual void ReleaseGraphicsResources();
00199
00205 int GetAttributeLocation(const char *name);
00206
00208
00210 vtkGetObjectMacro(UniformVariables,vtkUniformVariables);
00211 virtual void SetUniformVariables(vtkUniformVariables *variables);
00213
00220 bool DisplayListUnderCreationInCompileMode();
00221
00223
00233 vtkSetMacro(GeometryTypeIn,int);
00234 vtkGetMacro(GeometryTypeIn,int);
00236
00238
00245 vtkSetMacro(GeometryVerticesOut,int);
00246 vtkGetMacro(GeometryVerticesOut,int);
00248
00250
00258 vtkSetMacro(GeometryTypeOut,int);
00259 vtkGetMacro(GeometryTypeOut,int);
00261
00262 protected:
00263 vtkShaderProgram2();
00264 virtual ~vtkShaderProgram2();
00265
00266 unsigned int Id;
00267 unsigned int SavedId;
00268
00269 vtkTimeStamp LastLinkTime;
00270 vtkTimeStamp LastSendUniformsTime;
00271
00272 vtkShaderProgram2Uniforms *Uniforms;
00273 vtkShader2Collection *Shaders;
00274
00275 int LastBuildStatus;
00276
00277 char *LastLinkLog;
00278 size_t LastLinkLogCapacity;
00279
00280 char *LastValidateLog;
00281 size_t LastValidateLogCapacity;
00282
00283 vtkUniformVariables *UniformVariables;
00284
00285 bool PrintErrors;
00286
00287 vtkOpenGLRenderWindow *Context;
00288 bool ExtensionsLoaded;
00289
00290 int GeometryTypeIn;
00291 int GeometryTypeOut;
00292 int GeometryVerticesOut;
00293
00294 private:
00295 vtkShaderProgram2(const vtkShaderProgram2&);
00296 void operator=(const vtkShaderProgram2&);
00297 };
00298
00299 #endif