VTK
dox/Rendering/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 "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