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 vtkTypeRevisionMacro(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
00130 int GetScope();
00131 protected:
00132 vtkShader();
00133 ~vtkShader();
00134
00135 vtkXMLShader* XMLShader;
00136 vtkShaderInternals* Internals;
00137
00138
00139 enum MatrixOrders
00140 {
00141 RowMajor,
00142 ColumnMajor
00143 };
00144
00145
00147
00149 virtual void SetShaderParameters(vtkActor*, vtkRenderer*,
00150 vtkXMLDataElement*);
00152
00153
00155 void SetUniformParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00156
00158 void SetCameraParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00159
00161 void SetPropertyParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00162
00164 void SetLightParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00165
00167 void SetMatrixParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00168
00170 void SetSamplerParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
00171
00173 void SetApplicationParameter(vtkXMLDataElement*);
00174
00176
00178 virtual void SetUniformParameter(const char* name, int numValues,
00179 const int* value) =0;
00180 virtual void SetUniformParameter(const char* name, int numValues,
00181 const float* value)=0;
00182 virtual void SetUniformParameter(const char* name, int numValues,
00183 const double* value)=0;
00185
00187
00189 virtual void SetMatrixParameter(const char* name, int numValues,
00190 int order, const float* value)=0;
00191 virtual void SetMatrixParameter(const char* name, int numValues,
00192 int order, const double* value)=0;
00193 virtual void SetMatrixParameter(const char* name, const char* state_matix_type,
00194 const char* transform_type)=0;
00196
00197
00199
00204 virtual void SetSamplerParameter(const char* name, vtkTexture* texture,
00205 int textureIndex)=0;
00207
00208 vtkTimeStamp PassShaderVariablesTime;
00209 private:
00210 vtkShader(const vtkShader&);
00211 void operator=(const vtkShader&);
00212 };
00213 #endif //__vtkShader_h