00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00020 #ifndef _FCD_MATERIAL_BIND_H_
00021 #define _FCD_MATERIAL_BIND_H_
00022
00023 #ifndef _FCD_ENTITY_INSTANCE_H_
00024 #include "FCDocument/FCDEntityInstance.h"
00025 #endif // _FCD_ENTITY_INSTANCE_H_
00026 #ifndef _FU_DAE_ENUM_H_
00027 #include "FUtils/FUDaeEnum.h"
00028 #endif // _FU_DAE_ENUM_H_
00029
00030 class FCDocument;
00031 class FCDGeometryPolygons;
00032
00041 class FCDMaterialInstanceBind : public FUParameterizable
00042 {
00043 private:
00044 DeclareObjectType(FUParameterizable);
00045
00046 public:
00048 DeclareParameter(fm::string, FUParameterQualifiers::SIMPLE, semantic, FC("Semantic"));
00049
00051 DeclareParameter(fm::string, FUParameterQualifiers::SIMPLE, target, FC("Target"));
00052
00054 FCDMaterialInstanceBind();
00055
00057 virtual ~FCDMaterialInstanceBind();
00058 };
00059
00069 class FCDMaterialInstanceBindVertexInput : public FUParameterizable
00070 {
00071 private:
00072 DeclareObjectType(FUParameterizable);
00073
00074 public:
00076 DeclareParameter(fm::string, FUParameterQualifiers::SIMPLE, semantic, FC("Bind Semantic"));
00077
00080 DeclareParameter(uint32, FUParameterQualifiers::SIMPLE, inputSemantic, FC("Input Semantic"));
00081
00084 DeclareParameter(int32, FUParameterQualifiers::SIMPLE, inputSet, FC("Input Set"));
00085
00087 FCDMaterialInstanceBindVertexInput();
00088
00090 virtual ~FCDMaterialInstanceBindVertexInput();
00091
00094 FUDaeGeometryInput::Semantic GetInputSemantic() const { return (FUDaeGeometryInput::Semantic) *inputSemantic; }
00095 };
00096
00104 class FCOLLADA_EXPORT FCDMaterialInstance : public FCDEntityInstance
00105 {
00106 private:
00107 DeclareObjectType(FCDEntityInstance);
00108 FCDEntityInstance* parent;
00109
00110 DeclareParameter(fstring, FUParameterQualifiers::SIMPLE, semantic, FC("Material Token"));
00111 DeclareParameterContainer(FCDMaterialInstanceBind, bindings, FC("Effect Bindings"));
00112 DeclareParameterContainer(FCDMaterialInstanceBindVertexInput, vertexBindings, FC("Vertex Input Bindings"));
00113
00114 public:
00117 FCDMaterialInstance(FCDocument* document, FCDEntityInstance* parent);
00118
00120 virtual ~FCDMaterialInstance();
00121
00126 DEPRECATED(3.05A, HasType(FCDMaterialInstance::GetClassType())) virtual Type GetType() const { return MATERIAL; }
00127
00130 inline FCDEntityInstance* GetParent() { return parent; }
00131 inline const FCDEntityInstance* GetParent() const { return parent; }
00135 inline const fstring& GetSemantic() const { return semantic; }
00136
00141 inline void SetSemantic(const fchar* _semantic) { semantic = _semantic; SetDirtyFlag(); }
00142 inline void SetSemantic(const fstring& _semantic) { semantic = _semantic; SetDirtyFlag(); }
00146 inline FCDMaterial* GetMaterial() { return (FCDMaterial*) GetEntity(); }
00147 inline const FCDMaterial* GetMaterial() const { return (const FCDMaterial*) GetEntity(); }
00151 inline void SetMaterial(FCDMaterial* _material) { SetEntity((FCDEntity*) _material); }
00152
00156 DEPRECATED(3.05A, GetBindingCount and GetBinding(index)) inline void GetBindings() const {}
00157
00161 const FCDMaterialInstanceBind* FindBinding(const char* semantic);
00162
00165 inline size_t GetBindingCount() const { return bindings.size(); }
00166
00170 inline FCDMaterialInstanceBind* GetBinding(size_t index) { FUAssert(index < bindings.size(), return NULL); return bindings.at(index); }
00171 inline const FCDMaterialInstanceBind* GetBinding(size_t index) const { FUAssert(index < bindings.size(), return NULL); return bindings.at(index); }
00176 FCDObject* GetGeometryTarget();
00177
00180 FCDMaterialInstanceBind* AddBinding();
00181
00186 FCDMaterialInstanceBind* AddBinding(const char* semantic, const char* target);
00187
00190 void RemoveBinding(size_t index);
00191
00194 DEPRECATED(3.05A, GetVertexInputBindingCount and GetVertexInputBinding(index)) inline void GetVertexInputBindings() {}
00195
00198 inline size_t GetVertexInputBindingCount() const { return vertexBindings.size(); }
00199
00203 inline FCDMaterialInstanceBindVertexInput* GetVertexInputBinding(size_t index) { FUAssert(index < vertexBindings.size(), return NULL); return vertexBindings.at(index); }
00204 inline const FCDMaterialInstanceBindVertexInput* GetVertexInputBinding(size_t index) const { FUAssert(index < vertexBindings.size(), return NULL); return vertexBindings.at(index); }
00211 inline FCDMaterialInstanceBindVertexInput* FindVertexInputBinding(const char* semantic) { return const_cast<FCDMaterialInstanceBindVertexInput*>(const_cast<const FCDMaterialInstance*>(this)->FindVertexInputBinding(semantic)); }
00212 const FCDMaterialInstanceBindVertexInput* FindVertexInputBinding(const char* semantic) const;
00216 FCDMaterialInstanceBindVertexInput* AddVertexInputBinding();
00217
00224 FCDMaterialInstanceBindVertexInput* AddVertexInputBinding(const char* semantic, FUDaeGeometryInput::Semantic inputSemantic, int32 inputSet);
00225
00226
00232 DEPRECATED(3.05A, not recommended) FCDMaterial* FlattenMaterial() { return NULL; }
00233
00237 virtual FCDEntityInstance* Clone(FCDEntityInstance* clone = NULL) const;
00238 };
00239
00240 #endif // _FCD_MATERIAL_BIND_H_