00001 /* 00002 Copyright (C) 2005-2006 Feeling Software Inc. 00003 MIT License: http://www.opensource.org/licenses/mit-license.php 00004 */ 00005 /* 00006 Based on the FS Import classes: 00007 Copyright (C) 2005-2006 Feeling Software Inc 00008 Copyright (C) 2005-2006 Autodesk Media Entertainment 00009 MIT License: http://www.opensource.org/licenses/mit-license.php 00010 */ 00011 00017 #ifndef _FCD_EFFECT_PROFILE_FX_H_ 00018 #define _FCD_EFFECT_PROFILE_FX_H_ 00019 00020 #include "FUtils/FUDaeEnum.h" 00021 #include "FCDocument/FCDEffectProfile.h" 00022 00023 class FCDocument; 00024 class FCDEffect; 00025 class FCDEffectCode; 00026 class FCDEffectParameter; 00027 class FCDEffectParameterSurface; 00028 class FCDEffectTechnique; 00029 class FCDEffectParameterList; 00030 00031 typedef vector<FCDEffectTechnique*> FCDEffectTechniqueList; 00032 typedef vector<FCDEffectCode*> FCDEffectCodeList; 00052 class FCOLLADA_EXPORT FCDEffectProfileFX : public FCDEffectProfile 00053 { 00054 private: 00055 DeclareObjectType; 00056 FUDaeProfileType::Type type; 00057 string includeFilename; 00058 fstring platform; 00059 00060 FCDEffectCodeList codes; 00061 FCDEffectTechniqueList techniques; 00062 FCDEffectParameterList* parameters; 00063 00064 public: 00069 FCDEffectProfileFX(FCDocument* document, FCDEffect* parent, FUDaeProfileType::Type type); 00070 00072 virtual ~FCDEffectProfileFX(); 00073 00079 virtual FUDaeProfileType::Type GetType() const { return type; } 00080 00085 const string& GetIncludeFilename() const { return includeFilename; } 00086 00090 const fstring& GetPlatform() const { return platform; } 00091 00095 void SetPlatform(fstring& _platform) { platform = _platform; } 00096 00101 FCDEffectTechniqueList& GetTechniqueList() { return techniques; } 00102 const FCDEffectTechniqueList& GetTechniqueList() const { return techniques; } 00106 size_t GetTechniqueCount() const { return techniques.size(); } 00107 00113 FCDEffectTechnique* GetTechnique(size_t index) { FUAssert(index < GetTechniqueCount(), return NULL); return techniques.at(index); } 00114 const FCDEffectTechnique* GetTechnique(size_t index) const { FUAssert(index < GetTechniqueCount(), return NULL); return techniques.at(index); } 00118 FCDEffectTechnique* AddTechnique(); 00119 00122 void ReleaseTechnique(FCDEffectTechnique* technique); 00123 00126 FCDEffectCodeList& GetCodeList() { return codes; } 00127 const FCDEffectCodeList& GetCodeList() const { return codes; } 00131 size_t GetCodeCount() const { return codes.size(); } 00132 00136 FCDEffectCode* GetCode(size_t index) { FUAssert(index < GetCodeCount(), return NULL); return codes.at(index); } 00137 const FCDEffectCode* GetCode(size_t index) const { FUAssert(index < GetCodeCount(), return NULL); return codes.at(index); } 00143 FCDEffectCode* FindCode(const string& sid); 00144 const FCDEffectCode* FindCode(const string& sid) const; 00148 FCDEffectCode* AddCode(); 00149 00152 void ReleaseCode(FCDEffectCode* code); 00153 00157 FCDEffectParameterList* GetParameters() { return parameters; } 00158 const FCDEffectParameterList* GetParameters() const { return parameters; } 00163 void AddParameter(FCDEffectParameter* parameter); 00164 00172 const FCDEffectParameter* FindParameter(const char* reference) const; 00173 00180 virtual FCDEffectParameter* FindParameterBySemantic(const string& semantic); 00181 00187 virtual void FindParametersBySemantic(const string& semantic, FCDEffectParameterList& parameters); 00188 00195 virtual void FindParametersByReference(const string& reference, FCDEffectParameterList& parameters); 00196 00200 virtual FCDEffectProfile* Clone(FCDEffect* newParent); 00201 00206 virtual void Flatten(); 00207 00212 virtual FUStatus LoadFromXML(xmlNode* profileNode); 00213 00217 virtual xmlNode* WriteToXML(xmlNode* parentNode) const; 00218 }; 00219 00220 #endif // _FCD_EFFECT_PROFILE_H_