00001 /* 00002 Copyright (C) 2005-2006 Feeling Software Inc. 00003 MIT License: http://www.opensource.org/licenses/mit-license.php 00004 */ 00005 00011 #ifndef _FCD_EFFECT_PASS_H_ 00012 #define _FCD_EFFECT_PASS_H_ 00013 00014 #include "FCDocument/FCDObject.h" 00015 00016 class FCDEffectTechnique; 00017 class FCDEffectParameter; 00018 class FCDEffectParameterList; 00019 class FCDEffectPassShader; 00020 00021 typedef vector<FCDEffectPassShader*> FCDEffectPassShaderList; 00022 typedef vector<string> MeshDataList; 00037 class FCOLLADA_EXPORT FCDEffectPass : public FCDObject 00038 { 00039 private: 00040 DeclareObjectType; 00041 fstring name; 00042 FCDEffectTechnique* parent; 00043 FCDEffectPassShaderList shaders; 00044 MeshDataList meshdata; 00045 00046 public: 00051 FCDEffectPass(FCDocument* document, FCDEffectTechnique *_parent); 00052 00055 virtual ~FCDEffectPass(); 00056 00059 FCDEffectTechnique* GetParent() { return parent; } 00060 const FCDEffectTechnique* GetParent() const { return parent; } 00065 const string& GetDaeId() const; 00066 00070 const fstring& GetPassName() const { return name; } 00071 00075 void SetPassName(const fstring& _name) { name = _name; } 00076 00080 const MeshDataList& GetMeshData() const { return meshdata; } 00081 00084 size_t GetShaderCount() const { return shaders.size(); } 00085 00089 FCDEffectPassShader* GetShader(size_t index) { FUAssert(index < GetShaderCount(), return NULL); return shaders.at(index); } 00090 const FCDEffectPassShader* GetShader(size_t index) const { FUAssert(index < GetShaderCount(), return NULL); return shaders.at(index); } 00094 FCDEffectPassShader* AddShader(); 00095 00098 void ReleaseShader(FCDEffectPassShader* shader); 00099 00103 FCDEffectPassShader* GetVertexShader(); 00104 const FCDEffectPassShader* GetVertexShader() const; 00109 FCDEffectPassShader* GetFragmentShader(); 00110 const FCDEffectPassShader* GetFragmentShader() const; 00115 FCDEffectPassShader* AddVertexShader(); 00116 00120 FCDEffectPassShader* AddFragmentShader(); 00121 00125 FCDEffectPass* Clone(FCDEffectTechnique* newParent) const; 00126 00133 FUStatus LoadFromXML(xmlNode* passNode, xmlNode* techniqueNode, xmlNode* profileNode); 00134 00138 xmlNode* WriteToXML(xmlNode* parentNode) const; 00139 }; 00140 00141 #endif