00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00052 #ifndef __vtkShaderProgram_h
00053 #define __vtkShaderProgram_h
00054
00055 #include "vtkObject.h"
00056
00057 class vtkActor;
00058 class vtkCollection;
00059 class vtkCollectionIterator;
00060 class vtkRenderer;
00061 class vtkRenderWindow;
00062 class vtkShader;
00063 class vtkWindow;
00064 class vtkXMLMaterial;
00065 class vtkShaderDeviceAdapter;
00066
00067
00068
00069 class VTK_RENDERING_EXPORT vtkShaderProgram : public vtkObject
00070 {
00071 public:
00072 vtkTypeMacro(vtkShaderProgram, vtkObject);
00073 void PrintSelf(ostream &os, vtkIndent indent);
00074
00075
00076
00077 vtkGetObjectMacro( Material, vtkXMLMaterial);
00078 virtual void SetMaterial( vtkXMLMaterial* );
00079
00080
00081
00082 int AddShader(vtkShader* shader);
00083
00085 void RemoveShader(int index);
00086
00088 void RemoveShader(vtkShader* shader);
00089
00091 vtkCollectionIterator* NewShaderIterator();
00092
00094 int GetNumberOfShaders();
00095
00096
00097
00098
00099 static vtkShaderProgram* CreateShaderProgram( int type );
00100
00101
00102
00103
00104 virtual void ReadMaterial();
00105
00106
00107
00108
00109
00110 virtual void Render( vtkActor*, vtkRenderer* )=0;
00111
00113
00117 virtual void AddShaderVariable(const char* name, int numVars, int* x);
00118 virtual void AddShaderVariable(const char* name, int numVars, float* x);
00119 virtual void AddShaderVariable(const char* name, int numVars, double* x);
00121
00123 virtual void PostRender(vtkActor*, vtkRenderer*);
00124
00128 virtual void ReleaseGraphicsResources(vtkWindow *);
00129
00131
00133 vtkGetObjectMacro(ShaderDeviceAdapter, vtkShaderDeviceAdapter);
00135
00136 protected:
00137 vtkShaderProgram();
00138 ~vtkShaderProgram();
00139
00140 vtkXMLMaterial* Material;
00141 vtkCollection* ShaderCollection;
00142 vtkCollectionIterator* ShaderCollectionIterator;
00143
00144 vtkSetMacro(GLExtensionsLoaded, int);
00145 vtkGetMacro(GLExtensionsLoaded, int);
00146 int GLExtensionsLoaded;
00147 virtual void LoadExtensions(vtkRenderWindow*) {}
00148
00149
00150 void SetShaderDeviceAdapter(vtkShaderDeviceAdapter*);
00151
00154 virtual vtkShader* NewShader() =0;
00155 private:
00156 vtkShaderProgram(const vtkShaderProgram&);
00157 void operator=(const vtkShaderProgram&);
00158
00159 vtkShaderDeviceAdapter* ShaderDeviceAdapter;
00160 };
00161 #endif //__vtkShaderProgram_h