VTK
dox/Rendering/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 "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