VTK
dox/Rendering/Core/vtkShader.h
Go to the documentation of this file.
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