00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00042 #ifndef __vtkShader_h
00043 #define __vtkShader_h
00044
00045 #include "vtkObject.h"
00046
00047 class vtkActor;
00048 class vtkCamera;
00049 class vtkLight;
00050 class vtkProperty;
00051 class vtkRenderer;
00052 class vtkShaderInternals;
00053 class vtkTexture;
00054 class vtkWindow;
00055 class vtkXMLDataElement;
00056 class vtkXMLShader;
00057
00058 class VTK_RENDERING_EXPORT vtkShader : public vtkObject
00059 {
00060 public:
00061 vtkTypeMacro(vtkShader, vtkObject);
00062 virtual void PrintSelf(ostream &os, vtkIndent indent);
00063
00068 virtual int Compile() =0;
00069
00073 virtual void PassShaderVariables(vtkActor* actor, vtkRenderer* ren);
00074
00078 virtual void Bind() { }
00079
00082 virtual void Unbind() { }
00083
00087 virtual void ReleaseGraphicsResources(vtkWindow *) { }
00088
00090
00092 void SetXMLShader(vtkXMLShader*);
00093 vtkGetObjectMacro(XMLShader, vtkXMLShader);
00095
00097 int HasShaderVariable(const char* name);
00098
00100
00103 void AddShaderVariable(const char* name, int num_of_elements,
00104 const int *values);
00105 void AddShaderVariable(const char* name, int num_of_elements,
00106 const float *values);
00107 void AddShaderVariable(const char* name, int num_of_elements,
00108 const double *values);
00110
00113 int GetShaderVariableSize(const char* name);
00114
00117 int GetShaderVariableType(const char* name);
00118
00120
00123 int GetShaderVariable(const char* name, int* values);
00124 int GetShaderVariable(const char* name, float* values);
00125 int GetShaderVariable(const char* name, double* values);
00127
00129
00131 int GetScope();
00132 protected:
00133 vtkShader();
00134 ~vtkShader();
00136
00137 vtkXMLShader* XMLShader;
00138 vtkShaderInternals* Internals;
00139
00140
00141 enum MatrixOrders
00142 {
00143 RowMajor,
00144 ColumnMajor
00145 };
00146
00147
00149
00151 virtual void SetShaderParameters(vtkActor*, vtkRenderer*,
00152 vtkXMLDataElement*);
00154
00155
00157 void SetUniformParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00158
00160 void SetCameraParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00161
00163 void SetPropertyParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00164
00166 void SetLightParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00167
00169 void SetMatrixParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00170
00172 void SetSamplerParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00173
00175 void SetApplicationParameter(vtkXMLDataElement*);
00176
00178
00180 virtual void SetUniformParameter(const char* name, int numValues,
00181 const int* value) =0;
00182 virtual void SetUniformParameter(const char* name, int numValues,
00183 const float* value)=0;
00184 virtual void SetUniformParameter(const char* name, int numValues,
00185 const double* value)=0;
00187
00189
00191 virtual void SetMatrixParameter(const char* name, int numValues,
00192 int order, const float* value)=0;
00193 virtual void SetMatrixParameter(const char* name, int numValues,
00194 int order, const double* value)=0;
00195 virtual void SetMatrixParameter(const char* name, const char* state_matix_type,
00196 const char* transform_type)=0;
00198
00199
00201
00206 virtual void SetSamplerParameter(const char* name, vtkTexture* texture,
00207 int textureIndex)=0;
00209
00210 vtkTimeStamp PassShaderVariablesTime;
00211 private:
00212 vtkShader(const vtkShader&);
00213 void operator=(const vtkShader&);
00214 };
00215 #endif //__vtkShader_h