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 class VTK_RENDERING_EXPORT vtkShaderProgram2 : public vtkObject
00052 {
00053 public:
00054 static vtkShaderProgram2* New();
00055 vtkTypeMacro(vtkShaderProgram2, vtkObject);
00056 void PrintSelf(ostream& os, vtkIndent indent);
00057
00059
00060 static bool IsSupported(vtkOpenGLRenderWindow *context);
00061 static bool LoadExtensions(vtkOpenGLRenderWindow *context);
00063
00065
00070 vtkGetMacro(PrintErrors,bool);
00071 vtkSetMacro(PrintErrors,bool);
00073
00075
00079 void SetContext(vtkOpenGLRenderWindow *context);
00080 vtkGetObjectMacro(Context,vtkOpenGLRenderWindow);
00082
00084
00086 vtkGetObjectMacro(Shaders,vtkShader2Collection);
00088
00092 bool HasVertexShaders();
00093
00096 bool HasTessellationControlShaders();
00097
00100 bool HasTessellationEvaluationShaders();
00101
00103 bool HasGeometryShaders();
00104
00108 bool HasFragmentShaders();
00109
00111 bool IsValid();
00112
00116 void Build();
00117
00119 void SendUniforms();
00120
00122
00124 void PrintActiveUniformVariables(ostream &os,
00125 vtkIndent indent);
00127
00130 void PrintActiveUniformVariablesOnCout();
00131
00133 bool IsUsed();
00134
00139 void Use();
00140
00142 void Restore();
00143
00146 void RestoreFixedPipeline();
00147
00154 int GetLastBuildStatus();
00155
00158 const char *GetLastLinkLog();
00159
00162 const char *GetLastValidateLog();
00163
00165 virtual void ReleaseGraphicsResources();
00166
00170 int GetAttributeLocation(const char *name);
00171
00173
00175 vtkGetObjectMacro(UniformVariables,vtkUniformVariables);
00176 virtual void SetUniformVariables(vtkUniformVariables *variables);
00178
00183 bool DisplayListUnderCreationInCompileMode();
00184
00185 protected:
00186 vtkShaderProgram2();
00187 virtual ~vtkShaderProgram2();
00188
00189 unsigned int Id;
00190 unsigned int SavedId;
00191
00192 vtkTimeStamp LastLinkTime;
00193 vtkTimeStamp LastSendUniformsTime;
00194
00195 vtkShaderProgram2Uniforms *Uniforms;
00196 vtkShader2Collection *Shaders;
00197
00198 int LastBuildStatus;
00199
00200 char *LastLinkLog;
00201 size_t LastLinkLogCapacity;
00202
00203 char *LastValidateLog;
00204 size_t LastValidateLogCapacity;
00205
00206 vtkUniformVariables *UniformVariables;
00207
00208 bool PrintErrors;
00209
00210 vtkOpenGLRenderWindow *Context;
00211 bool ExtensionsLoaded;
00212
00213 private:
00214 vtkShaderProgram2(const vtkShaderProgram2&);
00215 void operator=(const vtkShaderProgram2&);
00216 };
00217
00218 #endif