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_TECHNIQUE_H_ 00012 #define _FCD_EFFECT_TECHNIQUE_H_ 00013 00014 #include "FCDocument/FCDObject.h" 00015 00016 class FCDEffectCode; 00017 class FCDEffectPass; 00018 class FCDEffectParameter; 00019 class FCDEffectParameterList; 00020 class FCDEffectProfileFX; 00021 00022 typedef vector<FCDEffectPass*> FCDEffectPassList; 00023 typedef vector<FCDEffectCode*> FCDEffectCodeList; 00039 class FCOLLADA_EXPORT FCDEffectTechnique : public FCDObject 00040 { 00041 private: 00042 DeclareObjectType; 00043 FCDEffectProfileFX* parent; 00044 00045 fstring name; 00046 FCDEffectCodeList codes; 00047 FCDEffectPassList passes; 00048 FCDEffectParameterList* parameters; 00049 00050 public: 00055 FCDEffectTechnique(FCDocument* document, FCDEffectProfileFX *_parent); 00056 00059 virtual ~FCDEffectTechnique(); 00060 00063 FCDEffectProfileFX* GetParent() { return parent; } 00064 const FCDEffectProfileFX* GetParent() const { return parent; } 00069 const string& GetDaeId() const; 00070 00073 const fstring& GetName() const { return name; } 00074 00079 void SetName(const fstring& _name) { name = _name; } 00080 00083 FCDEffectPassList& GetPassList() { return passes; } 00084 const FCDEffectPassList& GetPassList() const { return passes; } 00088 size_t GetPassCount() const { return passes.size(); } 00089 00093 FCDEffectPass* GetPass(size_t index) { FUAssert(index < GetPassCount(), return NULL); return passes.at(index); } 00094 const FCDEffectPass* GetPass(size_t index) const { FUAssert(index < GetPassCount(), return NULL); return passes.at(index); } 00098 FCDEffectPass* AddPass(); 00099 00102 void ReleasePass(FCDEffectPass* pass); 00103 00106 FCDEffectCodeList& GetCodeList() { return codes; } 00107 const FCDEffectCodeList& GetCodeList() const { return codes; } 00111 size_t GetCodeCount() const { return codes.size(); } 00112 00116 FCDEffectCode* GetCode(size_t index) { FUAssert(index < GetCodeCount(), return NULL); return codes.at(index); } 00117 const FCDEffectCode* GetCode(size_t index) const { FUAssert(index < GetCodeCount(), return NULL); return codes.at(index); } 00123 FCDEffectCode* FindCode(const string& sid); 00124 const FCDEffectCode* FindCode(const string& sid) const; 00128 FCDEffectCode* AddCode(); 00129 00132 void ReleaseCode(FCDEffectCode* code); 00133 00138 FCDEffectParameterList* GetParameterList() { return parameters; } 00139 const FCDEffectParameterList* GetParameterList() const { return parameters; } 00144 void AddParameter(FCDEffectParameter* parameter); 00145 00152 const FCDEffectParameter* FindParameter(const char* reference) const; 00153 00159 virtual FCDEffectParameter* FindParameterBySemantic(const string& semantic); 00160 00165 virtual void FindParametersBySemantic(const string& semantic, FCDEffectParameterList& parameters); 00166 00172 virtual void FindParametersByReference(const string& reference, FCDEffectParameterList& parameters); 00173 00177 FCDEffectTechnique* Clone(FCDEffectProfileFX* newParent); 00178 00181 void Flatten(); 00182 00188 FUStatus LoadFromXML(xmlNode* techniqueNode, xmlNode* profileNode); 00189 00193 xmlNode* WriteToXML(xmlNode* parentNode) const; 00194 }; 00195 00196 #endif