source: NonGTP/FCollada/FCDocument/FCDMaterialInstance.h @ 964

Revision 964, 3.6 KB checked in by igarcia, 18 years ago (diff)
Line 
1/*
2        Copyright (C) 2005-2006 Feeling Software Inc.
3        MIT License: http://www.opensource.org/licenses/mit-license.php
4*/
5/*
6        Based on the FS Import classes:
7        Copyright (C) 2005-2006 Feeling Software Inc
8        Copyright (C) 2005-2006 Autodesk Media Entertainment
9        MIT License: http://www.opensource.org/licenses/mit-license.php
10*/
11
12/**
13        @file FCDMaterialInstance.h
14        This file contains the FCDMaterialInstance and the FCDMaterialInstanceBind classes.
15*/
16
17#ifndef _FCD_MATERIAL_BIND_H_
18#define _FCD_MATERIAL_BIND_H_
19
20#include "FCDocument/FCDEntityInstance.h"
21
22class FCDocument;
23class FCDGeometryInstance;
24
25/**
26        A ColladaFX per-instance binding.
27*/
28class FCOLLADA_EXPORT FCDMaterialInstanceBind
29{
30public:
31        string semantic;
32        string target;
33};
34
35typedef vector<FCDMaterialInstanceBind> FCDMaterialInstanceBindList; /**< A dynamically-sized array of per-instance binding. */
36
37/**
38        A COLLADA material instance.
39        A material instance is used to given polygon sets with a COLLADA material entity.
40        It is also used to bind data sources with the inputs of an effect.
41
42        @ingroup FCDocument
43*/
44class FCOLLADA_EXPORT FCDMaterialInstance : public FCDEntityInstance
45{
46private:
47        DeclareObjectType;
48        FCDGeometryInstance* parent;
49        fstring semantic;
50        FCDMaterial* material;
51        FCDMaterialInstanceBindList bindings;
52
53public:
54        FCDMaterialInstance(FCDocument* document, FCDGeometryInstance* parent);
55        virtual ~FCDMaterialInstance();
56
57        // Accessors
58        virtual Type GetType() const { return MATERIAL; }
59
60        inline const fstring& GetSemantic() const { return semantic; }
61        inline void SetSemantic(const fchar* _semantic) { semantic = _semantic; }
62        inline void SetSemantic(const fstring& _semantic) { semantic = _semantic; }
63
64        inline FCDMaterial* GetMaterial() { return material; }
65        inline const FCDMaterial* GetMaterial() const { return material; }
66        inline void SetMaterial(FCDMaterial* _material) { material = _material; }
67
68        inline FCDMaterialInstanceBindList& GetBindings() { return bindings; }
69        inline const FCDMaterialInstanceBindList& GetBindings() const { return bindings; }
70        inline size_t GetBindingCount() const { return bindings.size(); }
71        inline FCDMaterialInstanceBind* GetBinding(size_t index) { FUAssert(index < bindings.size(), return NULL); return &bindings.at(index); }
72        inline const FCDMaterialInstanceBind* GetBinding(size_t index) const { FUAssert(index < bindings.size(), return NULL); return &bindings.at(index); }
73
74        FCDMaterialInstanceBind* AddBinding();
75        FCDMaterialInstanceBind* AddBinding(const char* semantic, const char* target);
76        inline FCDMaterialInstanceBind* AddBinding(const string& semantic, const char* target) { return AddBinding(semantic.c_str(), target); }
77        inline FCDMaterialInstanceBind* AddBinding(const char* semantic, const string& target) { return AddBinding(semantic, target.c_str()); }
78        inline FCDMaterialInstanceBind* AddBinding(const string& semantic, const string& target) { return AddBinding(semantic.c_str(), target.c_str()); }
79        void ReleaseBinding(size_t index);
80
81        /** Creates a flattened version of the instantiated material. This is the
82                prefered way to generate viewer materials from a COLLADA document.
83                @return The flattened version of the instantiated material. You
84                        will need to delete this pointer manually. This pointer will
85                        be NULL when there is no material attached to this instance. */
86        FCDMaterial* FlattenMaterial();
87
88        // Read in the materal instantiation from the COLLADA document
89        virtual FUStatus LoadFromXML(xmlNode* instanceNode);
90        FUStatus LoadFromId(const string& materialId); // COLLADA 1.3 backward compatibility
91
92        // Write out the instantiation information to the xml node tree
93        xmlNode* WriteToXML(xmlNode* parentNode) const;
94};
95
96#endif // _FCD_MATERIAL_BIND_H_
Note: See TracBrowser for help on using the repository browser.