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 "vtkRenderingOpenGLModule.h" // For export macro 00031 #include "vtkObject.h" 00032 #include "vtkWeakPointer.h" // needed for vtkWeakPointer. 00033 00034 class vtkWindow; 00035 class vtkOpenGLRenderWindow; 00036 class vtkOpenGLExtensionManager; 00037 class vtkShaderProgram2Uniforms; // internal 00038 class vtkShader2Collection; 00039 class vtkUniformVariables; 00040 00041 // Values for GetLastBuildStatus() 00042 enum vtkShaderProgram2BuildStatus 00043 { 00044 // one of the shaders failed to compile 00045 VTK_SHADER_PROGRAM2_COMPILE_FAILED=0, 00046 // all the shaders compiled successfully but the link failed 00047 VTK_SHADER_PROGRAM2_LINK_FAILED=1, 00048 // all the shaders compiled successfully and the link succeeded 00049 VTK_SHADER_PROGRAM2_LINK_SUCCEEDED=2 00050 }; 00051 00052 enum vtkShaderProgram2GeometryInType 00053 { 00054 VTK_GEOMETRY_SHADER_IN_TYPE_POINTS, 00055 VTK_GEOMETRY_SHADER_IN_TYPE_LINES, 00056 VTK_GEOMETRY_SHADER_IN_TYPE_LINES_ADJACENCY, 00057 VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES, 00058 VTK_GEOMETRY_SHADER_IN_TYPE_TRIANGLES_ADJACENCY 00059 }; 00060 00061 enum vtkShaderProgram2GeometryOutType 00062 { 00063 VTK_GEOMETRY_SHADER_OUT_TYPE_POINTS, 00064 VTK_GEOMETRY_SHADER_OUT_TYPE_LINE_STRIP, 00065 VTK_GEOMETRY_SHADER_OUT_TYPE_TRIANGLE_STRIP 00066 }; 00067 00068 class VTKRENDERINGOPENGL_EXPORT vtkShaderProgram2 : public vtkObject 00069 { 00070 public: 00071 static vtkShaderProgram2* New(); 00072 vtkTypeMacro(vtkShaderProgram2, vtkObject); 00073 void PrintSelf(ostream& os, vtkIndent indent); 00074 00076 00077 static bool IsSupported(vtkOpenGLRenderWindow *context); 00078 static bool LoadExtensions(vtkOpenGLRenderWindow *context); 00080 00082 00087 vtkGetMacro(PrintErrors,bool); 00088 vtkSetMacro(PrintErrors,bool); 00090 00092 00096 void SetContext(vtkOpenGLRenderWindow *context); 00097 vtkGetObjectMacro(Context,vtkOpenGLRenderWindow); 00099 00101 00103 vtkGetObjectMacro(Shaders,vtkShader2Collection); 00105 00109 bool HasVertexShaders(); 00110 00113 bool HasTessellationControlShaders(); 00114 00117 bool HasTessellationEvaluationShaders(); 00118 00120 bool HasGeometryShaders(); 00121 00125 bool HasFragmentShaders(); 00126 00131 bool IsValid(); 00132 00137 void Build(); 00138 00143 void SendUniforms(); 00144 00146 00150 void PrintActiveUniformVariables(ostream &os, 00151 vtkIndent indent); 00153 00158 void PrintActiveUniformVariablesOnCout(); 00159 00163 bool IsUsed(); 00164 00169 void Use(); 00170 00174 void Restore(); 00175 00180 void RestoreFixedPipeline(); 00181 00188 int GetLastBuildStatus(); 00189 00192 const char *GetLastLinkLog(); 00193 00196 const char *GetLastValidateLog(); 00197 00199 virtual void ReleaseGraphicsResources(); 00200 00206 int GetAttributeLocation(const char *name); 00207 00209 00211 vtkGetObjectMacro(UniformVariables,vtkUniformVariables); 00212 virtual void SetUniformVariables(vtkUniformVariables *variables); 00214 00221 bool DisplayListUnderCreationInCompileMode(); 00222 00224 00234 vtkSetMacro(GeometryTypeIn,int); 00235 vtkGetMacro(GeometryTypeIn,int); 00237 00239 00246 vtkSetMacro(GeometryVerticesOut,int); 00247 vtkGetMacro(GeometryVerticesOut,int); 00249 00251 00259 vtkSetMacro(GeometryTypeOut,int); 00260 vtkGetMacro(GeometryTypeOut,int); 00262 00263 protected: 00264 vtkShaderProgram2(); 00265 virtual ~vtkShaderProgram2(); 00266 00267 unsigned int Id; // actually GLuint. Initial value is 0. 00268 unsigned int SavedId; 00269 00270 vtkTimeStamp LastLinkTime; 00271 vtkTimeStamp LastSendUniformsTime; 00272 00273 vtkShaderProgram2Uniforms *Uniforms; 00274 vtkShader2Collection *Shaders; 00275 00276 int LastBuildStatus; // Initial value is VTK_SHADER_PROGRAM2_COMPILE_FAILED 00277 00278 char *LastLinkLog; // Initial value is the empty string ""='\0' 00279 size_t LastLinkLogCapacity; // Initial value is 8. 00280 00281 char *LastValidateLog; // Initial value is the empty string ""='\0' 00282 size_t LastValidateLogCapacity; // Initial value is 8. 00283 00284 vtkUniformVariables *UniformVariables; // Initial values is an empty list 00285 00286 bool PrintErrors; // use vtkErrorMacro ? 00287 00288 vtkOpenGLRenderWindow *Context; 00289 bool ExtensionsLoaded; 00290 00291 int GeometryTypeIn; 00292 int GeometryTypeOut; 00293 int GeometryVerticesOut; 00294 00295 private: 00296 vtkShaderProgram2(const vtkShaderProgram2&); // Not implemented. 00297 void operator=(const vtkShaderProgram2&); // Not implemented. 00298 }; 00299 00300 #endif