VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkShader.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 =========================================================================*/ 00015 /* 00016 * Copyright 2003 Sandia Corporation. 00017 * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00018 * license for use of this work by or on behalf of the 00019 * U.S. Government. Redistribution and use in source and binary forms, with 00020 * or without modification, are permitted provided that this Notice and any 00021 * statement of authorship are reproduced on all copies. 00022 */ 00023 00042 #ifndef __vtkShader_h 00043 #define __vtkShader_h 00044 00045 #include "vtkRenderingCoreModule.h" // For export macro 00046 #include "vtkObject.h" 00047 00048 class vtkActor; 00049 class vtkCamera; 00050 class vtkLight; 00051 class vtkProperty; 00052 class vtkRenderer; 00053 class vtkShaderInternals; 00054 class vtkTexture; 00055 class vtkWindow; 00056 class vtkXMLDataElement; 00057 class vtkXMLShader; 00058 00059 class VTKRENDERINGCORE_EXPORT vtkShader : public vtkObject 00060 { 00061 public: 00062 vtkTypeMacro(vtkShader, vtkObject); 00063 virtual void PrintSelf(ostream &os, vtkIndent indent); 00064 00069 virtual int Compile() =0; 00070 00074 virtual void PassShaderVariables(vtkActor* actor, vtkRenderer* ren); 00075 00079 virtual void Bind() { } 00080 00083 virtual void Unbind() { } 00084 00088 virtual void ReleaseGraphicsResources(vtkWindow *) { } 00089 00091 00093 void SetXMLShader(vtkXMLShader*); 00094 vtkGetObjectMacro(XMLShader, vtkXMLShader); 00096 00098 int HasShaderVariable(const char* name); 00099 00101 00104 void AddShaderVariable(const char* name, int num_of_elements, 00105 const int *values); 00106 void AddShaderVariable(const char* name, int num_of_elements, 00107 const float *values); 00108 void AddShaderVariable(const char* name, int num_of_elements, 00109 const double *values); 00111 00114 int GetShaderVariableSize(const char* name); 00115 00118 int GetShaderVariableType(const char* name); 00119 00121 00124 int GetShaderVariable(const char* name, int* values); 00125 int GetShaderVariable(const char* name, float* values); 00126 int GetShaderVariable(const char* name, double* values); 00128 00130 00132 int GetScope(); 00133 protected: 00134 vtkShader(); 00135 ~vtkShader(); 00137 00138 vtkXMLShader* XMLShader; 00139 vtkShaderInternals* Internals; 00140 00141 //BTX 00142 enum MatrixOrders 00143 { 00144 RowMajor, 00145 ColumnMajor 00146 }; 00147 //ETX 00148 00150 00152 virtual void SetShaderParameters(vtkActor*, vtkRenderer*, 00153 vtkXMLDataElement*); 00155 00156 00158 void SetUniformParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00159 00161 void SetCameraParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00162 00164 void SetPropertyParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00165 00167 void SetLightParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00168 00170 void SetMatrixParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00171 00173 void SetSamplerParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*); 00174 00176 void SetApplicationParameter(vtkXMLDataElement*); 00177 00179 00181 virtual void SetUniformParameter(const char* name, int numValues, 00182 const int* value) =0; 00183 virtual void SetUniformParameter(const char* name, int numValues, 00184 const float* value)=0; 00185 virtual void SetUniformParameter(const char* name, int numValues, 00186 const double* value)=0; 00188 00190 00192 virtual void SetMatrixParameter(const char* name, int numValues, 00193 int order, const float* value)=0; 00194 virtual void SetMatrixParameter(const char* name, int numValues, 00195 int order, const double* value)=0; 00196 virtual void SetMatrixParameter(const char* name, const char* state_matix_type, 00197 const char* transform_type)=0; 00199 00200 00202 00207 virtual void SetSamplerParameter(const char* name, vtkTexture* texture, 00208 int textureIndex)=0; 00210 00211 vtkTimeStamp PassShaderVariablesTime; 00212 private: 00213 vtkShader(const vtkShader&); // Not Implemented 00214 void operator=(const vtkShader&); // Not Implemented 00215 }; 00216 #endif //__vtkShader_h