VTK
dox/Rendering/vtkOpenGLProperty.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkOpenGLProperty.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 =========================================================================*/
00022 #ifndef __vtkOpenGLProperty_h
00023 #define __vtkOpenGLProperty_h
00024 
00025 #include "vtkProperty.h"
00026 
00027 class vtkOpenGLRenderer;
00028 class vtkShader2;
00029 class vtkShader2Collection;
00030 class vtkShaderProgram2;
00031 class vtkGLSLShaderDeviceAdapter2;
00032 
00033 class VTK_RENDERING_EXPORT vtkOpenGLProperty : public vtkProperty
00034 {
00035 public:
00036   static vtkOpenGLProperty *New();
00037   vtkTypeMacro(vtkOpenGLProperty,vtkProperty);
00038   virtual void PrintSelf(ostream& os, vtkIndent indent);
00039 
00041   void Render(vtkActor *a, vtkRenderer *ren);
00042 
00044   void BackfaceRender(vtkActor *a, vtkRenderer *ren);
00045   
00046   //BTX
00048 
00050   virtual void PostRender(vtkActor *a,
00051                           vtkRenderer *r);
00053   
00057   virtual void ReleaseGraphicsResources(vtkWindow *win);
00058 
00060 
00062   vtkGetObjectMacro(PropProgram,vtkShaderProgram2);
00063   void SetPropProgram(vtkShaderProgram2 *);
00065   
00067 
00068   vtkGetObjectMacro(ShaderDeviceAdapter2,vtkGLSLShaderDeviceAdapter2);
00070   
00072 
00073   vtkGetObjectMacro(CurrentShaderProgram2,vtkShaderProgram2);
00074   //ETX
00076   
00078 
00082   virtual void AddShaderVariable(const char *name,int numVars,int *x);
00083   virtual void AddShaderVariable(const char *name,int numVars,float *x);
00084   virtual void AddShaderVariable(const char *name,int numVars,double *x);
00086 
00087 protected:
00088   vtkOpenGLProperty();
00089   ~vtkOpenGLProperty();
00090 
00092   void LoadMultiTexturingExtensions(vtkRenderer* ren);
00093   
00095   virtual void ReadFrameworkMaterial();
00096   
00097   // Owned. Result of merging the shader program of the renderer and the
00098   // PropProgram.
00099   vtkShaderProgram2 *CachedShaderProgram2;
00100   
00101   vtkShaderProgram2 *LastRendererShaderProgram2; // just a ref
00102   vtkShaderProgram2 *LastPropProgram; // just a ref
00103   vtkShaderProgram2 *PropProgram; // owned
00104   
00105   // Point to CachedShaderProgram2 if Shading is on and the context supports
00106   // it.
00107   vtkShaderProgram2 *CurrentShaderProgram2;
00108   
00109   vtkShader2 *DefaultMainVS;
00110   vtkShader2 *DefaultMainFS;
00111   vtkShader2 *DefaultPropVS;
00112   vtkShader2 *DefaultPropFS;
00113   bool UseDefaultMainVS;
00114   bool UseDefaultMainFS;
00115   bool UseDefaultPropVS;
00116   bool UseDefaultPropFS;
00117   vtkGLSLShaderDeviceAdapter2 *ShaderDeviceAdapter2;
00118   
00119   
00120 private:
00121   vtkOpenGLProperty(const vtkOpenGLProperty&);  // Not implemented.
00122   void operator=(const vtkOpenGLProperty&);  // Not implemented.
00123 };
00124 
00125 #endif