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 vtkShaderDeviceAdapter2;
00032 class vtkGLSLShaderDeviceAdapter2;
00033 
00034 class VTK_RENDERING_EXPORT vtkOpenGLProperty : public vtkProperty
00035 {
00036 public:
00037   static vtkOpenGLProperty *New();
00038   vtkTypeMacro(vtkOpenGLProperty,vtkProperty);
00039   virtual void PrintSelf(ostream& os, vtkIndent indent);
00040 
00042   void Render(vtkActor *a, vtkRenderer *ren);
00043 
00045   void BackfaceRender(vtkActor *a, vtkRenderer *ren);
00046   
00047   //BTX
00049 
00051   virtual void PostRender(vtkActor *a,
00052                           vtkRenderer *r);
00054   
00058   virtual void ReleaseGraphicsResources(vtkWindow *win);
00059 
00061 
00063   vtkGetObjectMacro(PropProgram,vtkShaderProgram2);
00064   void SetPropProgram(vtkShaderProgram2 *);
00066   
00068   virtual vtkShaderDeviceAdapter2* GetShaderDeviceAdapter2();
00069   
00071 
00072   vtkGetObjectMacro(CurrentShaderProgram2,vtkShaderProgram2);
00073   //ETX
00075   
00077 
00081   virtual void AddShaderVariable(const char *name,int numVars,int *x);
00082   virtual void AddShaderVariable(const char *name,int numVars,float *x);
00083   virtual void AddShaderVariable(const char *name,int numVars,double *x);
00085 
00086 protected:
00087   vtkOpenGLProperty();
00088   ~vtkOpenGLProperty();
00089 
00091   void LoadMultiTexturingExtensions(vtkRenderer* ren);
00092   
00094   virtual void ReadFrameworkMaterial();
00095   
00096   // Owned. Result of merging the shader program of the renderer and the
00097   // PropProgram.
00098   vtkShaderProgram2 *CachedShaderProgram2;
00099   
00100   vtkShaderProgram2 *LastRendererShaderProgram2; // just a ref
00101   vtkShaderProgram2 *LastPropProgram; // just a ref
00102   vtkShaderProgram2 *PropProgram; // owned
00103   
00104   // Point to CachedShaderProgram2 if Shading is on and the context supports
00105   // it.
00106   vtkShaderProgram2 *CurrentShaderProgram2;
00107   
00108   vtkShader2 *DefaultMainVS;
00109   vtkShader2 *DefaultMainFS;
00110   vtkShader2 *DefaultPropVS;
00111   vtkShader2 *DefaultPropFS;
00112   bool UseDefaultMainVS;
00113   bool UseDefaultMainFS;
00114   bool UseDefaultPropVS;
00115   bool UseDefaultPropFS;
00116   vtkGLSLShaderDeviceAdapter2 *ShaderDeviceAdapter2;
00117   
00118   
00119 private:
00120   vtkOpenGLProperty(const vtkOpenGLProperty&);  // Not implemented.
00121   void operator=(const vtkOpenGLProperty&);  // Not implemented.
00122 };
00123 
00124 #endif