VTK
dox/Rendering/OpenGL/vtkShaderProgram2.h
Go to the documentation of this file.
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