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 "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 //BTX 00141 enum MatrixOrders 00142 { 00143 RowMajor, 00144 ColumnMajor 00145 }; 00146 //ETX 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&); // Not Implemented 00213 void operator=(const vtkShader&); // Not Implemented 00214 }; 00215 #endif //__vtkShader_h