VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkShader.h,v $ 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 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 //BTX 00139 enum MatrixOrders 00140 { 00141 RowMajor, 00142 ColumnMajor 00143 }; 00144 //ETX 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&); // Not Implemented 00211 void operator=(const vtkShader&); // Not Implemented 00212 }; 00213 #endif //__vtkShader_h