VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkShaderProgram2.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00027 #ifndef __vtkShaderProgram2_h 00028 #define __vtkShaderProgram2_h 00029 00030 #include "vtkObject.h" 00031 #include "vtkWeakPointer.h" // needed for vtkWeakPointer. 00032 00033 class vtkWindow; 00034 class vtkOpenGLRenderWindow; 00035 class vtkOpenGLExtensionManager; 00036 class vtkShaderProgram2Uniforms; // internal 00037 class vtkShader2Collection; 00038 class vtkUniformVariables; 00039 00040 // Values for GetLastBuildStatus() 00041 enum vtkShaderProgram2BuildStatus 00042 { 00043 // one of the shaders failed to compile 00044 VTK_SHADER_PROGRAM2_COMPILE_FAILED=0, 00045 // all the shaders compiled successfully but the link failed 00046 VTK_SHADER_PROGRAM2_LINK_FAILED=1, 00047 // all the shaders compiled successfully and the link succeeded 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; // actually GLuint. Initial value is 0. 00267 unsigned int SavedId; 00268 00269 vtkTimeStamp LastLinkTime; 00270 vtkTimeStamp LastSendUniformsTime; 00271 00272 vtkShaderProgram2Uniforms *Uniforms; 00273 vtkShader2Collection *Shaders; 00274 00275 int LastBuildStatus; // Initial value is VTK_SHADER_PROGRAM2_COMPILE_FAILED 00276 00277 char *LastLinkLog; // Initial value is the empty string ""='\0' 00278 size_t LastLinkLogCapacity; // Initial value is 8. 00279 00280 char *LastValidateLog; // Initial value is the empty string ""='\0' 00281 size_t LastValidateLogCapacity; // Initial value is 8. 00282 00283 vtkUniformVariables *UniformVariables; // Initial values is an empty list 00284 00285 bool PrintErrors; // use vtkErrorMacro ? 00286 00287 vtkOpenGLRenderWindow *Context; 00288 bool ExtensionsLoaded; 00289 00290 int GeometryTypeIn; 00291 int GeometryTypeOut; 00292 int GeometryVerticesOut; 00293 00294 private: 00295 vtkShaderProgram2(const vtkShaderProgram2&); // Not implemented. 00296 void operator=(const vtkShaderProgram2&); // Not implemented. 00297 }; 00298 00299 #endif