/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkXMLShader.h,v $ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME vtkXMLShader - encapsulates a Shader XML description. // .SECTION Description // vtkXMLShader encapsulates the XML description for a Shader. // It provides convenient access to various attributes/properties // of a shader. // .SECTION Thanks // Shader support in VTK includes key contributions by Gary Templet at // Sandia National Labs. #ifndef __vtkXMLShader_h #define __vtkXMLShader_h #include "vtkObject.h" class vtkXMLDataElement; class VTK_IO_EXPORT vtkXMLShader : public vtkObject { public: static vtkXMLShader* New(); vtkTypeRevisionMacro(vtkXMLShader, vtkObject); void PrintSelf(ostream& os, vtkIndent indent); // Description: // Get/Set the XML root element that describes this shader. vtkGetObjectMacro(RootElement, vtkXMLDataElement); void SetRootElement(vtkXMLDataElement*); // Description: // Returns the shader's language as defined in the XML description. int GetLanguage(); // Description: // Returns the type of the shader as defined in the XML description. int GetScope(); // Description: // Returns the location of the shader as defined in the XML description. int GetLocation(); // Description: // Returns the style of the shader as optionaly defined in the XML // description. If not present, default style is 1. "style=2" means it is // a shader without a main(). In style 2, the "main" function for the vertex // shader part is void propFuncVS(void), the main function for the fragment // shader part is void propFuncFS(). This is useful when combining a shader // at the actor level and a shader defines at the renderer level, like // the depth peeling pass. // \post valid_result: result==1 || result==2 int GetStyle(); // Description: // Get the name of the Shader. const char* GetName(); // Description: // Get the entry point to the shader code as defined in the XML. const char* GetEntry(); // Description: // Get the shader code. const char* GetCode(); // Description: // Returns an null terminate array of the pointers to space sepatared Args // defined in the XML description. const char** GetArgs(); // Description: // Searches the file in the VTK_MATERIALS_DIRS. // Note that this allocates new memory for the string. // The caller must delete it. static char* LocateFile(const char* filename); //BTX enum LanguageCodes { LANGUAGE_NONE=0, LANGUAGE_MIXED, LANGUAGE_CG, LANGUAGE_GLSL }; enum ScopeCodes { SCOPE_NONE=0, SCOPE_MIXED, SCOPE_VERTEX, SCOPE_FRAGMENT }; enum LocationCodes { LOCATION_NONE=0, LOCATION_INLINE, LOCATION_FILE, LOCATION_LIBRARY }; //ETX protected: vtkXMLShader(); ~vtkXMLShader(); // Reads the file and fills it in this->Code. void ReadCodeFromFile(const char* fullpath); char* Code; // cache for the code. vtkSetStringMacro(Code); vtkXMLDataElement* RootElement; vtkXMLDataElement* SourceLibraryElement; void SetSourceLibraryElement(vtkXMLDataElement*); char** Args; void CleanupArgs(); private: vtkXMLShader(const vtkXMLShader&); // Not implemented. void operator=(const vtkXMLShader&); // Not implemented. }; #endif