00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00024 #ifndef __vtkShaderProgram2_h
00025 #define __vtkShaderProgram2_h
00026
00027 #include "vtkObject.h"
00028 #include "vtkWeakPointer.h"
00029
00030 class vtkWindow;
00031 class vtkOpenGLRenderWindow;
00032 class vtkOpenGLExtensionManager;
00033 class vtkShaderProgram2Uniforms;
00034 class vtkShader2Collection;
00035 class vtkUniformVariables;
00036
00037
00038 enum vtkShaderProgram2BuildStatus
00039 {
00040
00041 VTK_SHADER_PROGRAM2_COMPILE_FAILED=0,
00042
00043 VTK_SHADER_PROGRAM2_LINK_FAILED=1,
00044
00045 VTK_SHADER_PROGRAM2_LINK_SUCCEEDED=2
00046 };
00047
00048 class VTK_RENDERING_EXPORT vtkShaderProgram2 : public vtkObject
00049 {
00050 public:
00051 static vtkShaderProgram2* New();
00052 vtkTypeRevisionMacro(vtkShaderProgram2, vtkObject);
00053 void PrintSelf(ostream& os, vtkIndent indent);
00054
00056
00057 static bool IsSupported(vtkOpenGLRenderWindow *context);
00058 static bool LoadExtensions(vtkOpenGLRenderWindow *context);
00060
00062
00067 vtkGetMacro(PrintErrors,bool);
00068 vtkSetMacro(PrintErrors,bool);
00070
00072
00076 void SetContext(vtkOpenGLRenderWindow *context);
00077 vtkGetObjectMacro(Context,vtkOpenGLRenderWindow);
00079
00081
00083 vtkGetObjectMacro(Shaders,vtkShader2Collection);
00085
00089 bool HasVertexShaders();
00090
00093 bool HasTessellationControlShaders();
00094
00097 bool HasTessellationEvaluationShaders();
00098
00100 bool HasGeometryShaders();
00101
00105 bool HasFragmentShaders();
00106
00108 bool IsValid();
00109
00113 void Build();
00114
00116 void SendUniforms();
00117
00119
00121 void PrintActiveUniformVariables(ostream &os,
00122 vtkIndent indent);
00124
00127 void PrintActiveUniformVariablesOnCout();
00128
00130 bool IsUsed();
00131
00136 void Use();
00137
00139 void Restore();
00140
00143 void RestoreFixedPipeline();
00144
00151 int GetLastBuildStatus();
00152
00155 const char *GetLastLinkLog();
00156
00159 const char *GetLastValidateLog();
00160
00162 virtual void ReleaseGraphicsResources();
00163
00167 int GetAttributeLocation(const char *name);
00168
00170
00172 vtkGetObjectMacro(UniformVariables,vtkUniformVariables);
00173 virtual void SetUniformVariables(vtkUniformVariables *variables);
00175
00180 bool DisplayListUnderCreationInCompileMode();
00181
00182 protected:
00183 vtkShaderProgram2();
00184 virtual ~vtkShaderProgram2();
00185
00186 unsigned int Id;
00187 unsigned int SavedId;
00188
00189 vtkTimeStamp LastLinkTime;
00190 vtkTimeStamp LastSendUniformsTime;
00191
00192 vtkShaderProgram2Uniforms *Uniforms;
00193 vtkShader2Collection *Shaders;
00194
00195 int LastBuildStatus;
00196
00197 char *LastLinkLog;
00198 size_t LastLinkLogCapacity;
00199
00200 char *LastValidateLog;
00201 size_t LastValidateLogCapacity;
00202
00203 vtkUniformVariables *UniformVariables;
00204
00205 bool PrintErrors;
00206
00207 vtkOpenGLRenderWindow *Context;
00208 bool ExtensionsLoaded;
00209
00210 private:
00211 vtkShaderProgram2(const vtkShaderProgram2&);
00212 void operator=(const vtkShaderProgram2&);
00213 };
00214
00215 #endif