VTK
vtkShader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkShader.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*
16  * Copyright 2003 Sandia Corporation.
17  * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
18  * license for use of this work by or on behalf of the
19  * U.S. Government. Redistribution and use in source and binary forms, with
20  * or without modification, are permitted provided that this Notice and any
21  * statement of authorship are reproduced on all copies.
22  */
23 
42 #ifndef __vtkShader_h
43 #define __vtkShader_h
44 
45 #include "vtkRenderingCoreModule.h" // For export macro
46 #include "vtkObject.h"
47 
48 class vtkActor;
49 class vtkCamera;
50 class vtkLight;
51 class vtkProperty;
52 class vtkRenderer;
53 class vtkShaderInternals;
54 class vtkTexture;
55 class vtkWindow;
56 class vtkXMLDataElement;
57 class vtkXMLShader;
58 
59 class VTKRENDERINGCORE_EXPORT vtkShader : public vtkObject
60 {
61 public:
62  vtkTypeMacro(vtkShader, vtkObject);
63  virtual void PrintSelf(ostream &os, vtkIndent indent);
64 
69  virtual int Compile() =0;
70 
74  virtual void PassShaderVariables(vtkActor* actor, vtkRenderer* ren);
75 
79  virtual void Bind() { }
80 
83  virtual void Unbind() { }
84 
88  virtual void ReleaseGraphicsResources(vtkWindow *) { }
89 
91 
93  void SetXMLShader(vtkXMLShader*);
94  vtkGetObjectMacro(XMLShader, vtkXMLShader);
96 
98  int HasShaderVariable(const char* name);
99 
101 
104  void AddShaderVariable(const char* name, int num_of_elements,
105  const int *values);
106  void AddShaderVariable(const char* name, int num_of_elements,
107  const float *values);
108  void AddShaderVariable(const char* name, int num_of_elements,
109  const double *values);
111 
114  int GetShaderVariableSize(const char* name);
115 
118  int GetShaderVariableType(const char* name);
119 
121 
124  int GetShaderVariable(const char* name, int* values);
125  int GetShaderVariable(const char* name, float* values);
126  int GetShaderVariable(const char* name, double* values);
128 
130 
132  int GetScope();
133 protected:
134  vtkShader();
135  ~vtkShader();
137 
139  vtkShaderInternals* Internals;
140 
141  //BTX
143  {
145  ColumnMajor
146  };
147  //ETX
148 
150 
152  virtual void SetShaderParameters(vtkActor*, vtkRenderer*,
155 
156 
158  void SetUniformParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
159 
161  void SetCameraParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
162 
164  void SetPropertyParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
165 
167  void SetLightParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
168 
170  void SetMatrixParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
171 
173  void SetSamplerParameter(vtkActor*, vtkRenderer*, vtkXMLDataElement*);
174 
176  void SetApplicationParameter(vtkXMLDataElement*);
177 
179 
181  virtual void SetUniformParameter(const char* name, int numValues,
182  const int* value) =0;
183  virtual void SetUniformParameter(const char* name, int numValues,
184  const float* value)=0;
185  virtual void SetUniformParameter(const char* name, int numValues,
186  const double* value)=0;
188 
190 
192  virtual void SetMatrixParameter(const char* name, int numValues,
193  int order, const float* value)=0;
194  virtual void SetMatrixParameter(const char* name, int numValues,
195  int order, const double* value)=0;
196  virtual void SetMatrixParameter(const char* name, const char* state_matix_type,
197  const char* transform_type)=0;
199 
200 
202 
207  virtual void SetSamplerParameter(const char* name, vtkTexture* texture,
208  int textureIndex)=0;
210 
212 private:
213  vtkShader(const vtkShader&); // Not Implemented
214  void operator=(const vtkShader&); // Not Implemented
215 };
216 #endif //__vtkShader_h