1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 |
|
---|
6 | /**
|
---|
7 | @file FCDEffectProfile.h
|
---|
8 | This file contains the FCDEffectProfile abstract class.
|
---|
9 | */
|
---|
10 |
|
---|
11 | #ifndef _FCD_EFFECT_PROFILE_H_
|
---|
12 | #define _FCD_EFFECT_PROFILE_H_
|
---|
13 |
|
---|
14 | #include "FUtils/FUDaeEnum.h"
|
---|
15 | #include "FCDocument/FCDObject.h"
|
---|
16 |
|
---|
17 | class FCDocument;
|
---|
18 | class FCDEffect;
|
---|
19 |
|
---|
20 | /**
|
---|
21 | The base for a COLLADA effect profile.
|
---|
22 |
|
---|
23 | COLLADA has multiple effect profiles: CG, HLSL, GLSL, GLES and the COMMON profile.
|
---|
24 | For each profile, there is a class which implements this abstract class.
|
---|
25 | This abstract class solely holds the parent effect and allows access to the
|
---|
26 | profile type.
|
---|
27 |
|
---|
28 | @see FCDEffectProfileFX FCDEffectStandard
|
---|
29 |
|
---|
30 | @ingroup FCDEffect
|
---|
31 | */
|
---|
32 | class FCOLLADA_EXPORT FCDEffectProfile : public FCDObject
|
---|
33 | {
|
---|
34 | private:
|
---|
35 | DeclareObjectType;
|
---|
36 | FCDEffect* parent;
|
---|
37 |
|
---|
38 | public:
|
---|
39 | /** Constructor: do not use directly.
|
---|
40 | Instead, use the FCDEffect::AddProfile function.
|
---|
41 | @param document The COLLADA document that owns this effect profile.
|
---|
42 | @param parent The effect which contains this profile. */
|
---|
43 | FCDEffectProfile(FCDocument* document, FCDEffect* parent);
|
---|
44 |
|
---|
45 | /** Destructor: do not use directly.
|
---|
46 | Instead, use the FCDEffect::ReleaseProfile function. */
|
---|
47 | virtual ~FCDEffectProfile();
|
---|
48 |
|
---|
49 | /** Retrieves the profile type for this effect.
|
---|
50 | This function allows you to up-cast the pointer safely to a more specific
|
---|
51 | effect profile class.
|
---|
52 | @return The profile type. */
|
---|
53 | virtual FUDaeProfileType::Type GetType() const = 0;
|
---|
54 |
|
---|
55 | /** Retrieves the parent effect.
|
---|
56 | This is the effect which contains this profile.
|
---|
57 | @return The parent effect. This pointer will never be NULL. */
|
---|
58 | FCDEffect* GetParent() { return parent; }
|
---|
59 | const FCDEffect* GetParent() const { return parent; } /**< See above. */
|
---|
60 |
|
---|
61 | /** [INTERNAL] Retrieves the COLLADA id of the parent effect.
|
---|
62 | This function is useful when reporting errors and warnings.
|
---|
63 | @return The COLLADA id of the parent effect. */
|
---|
64 | const string& GetDaeId() const;
|
---|
65 |
|
---|
66 | /** Retrieves an effect parameter. Looks for the effect parameter with the correct
|
---|
67 | semantic, in order to bind or override its value.
|
---|
68 | This function searches through the effect profile and the level of abstractions below.
|
---|
69 | @param semantic The effect parameter semantic to match.
|
---|
70 | @return The effect parameter that matches the semantic. This pointer will be NULL
|
---|
71 | if no effect parameter matches the given semantic. */
|
---|
72 | virtual FCDEffectParameter* FindParameterBySemantic(const string& semantic) = 0;
|
---|
73 |
|
---|
74 | /** Retrieves a subset of the effect parameter list.
|
---|
75 | Look for effect parameters with the correct semantic.
|
---|
76 | This function searches through the effect profile and the level of abstractions below.
|
---|
77 | @param semantic The effect parameter semantic to match.
|
---|
78 | @param parameters The list of parameters to fill in. This list is not cleared. */
|
---|
79 | virtual void FindParametersBySemantic(const string& semantic, FCDEffectParameterList& parameters) = 0;
|
---|
80 |
|
---|
81 | /** Retrieves a subset of the effect parameter list.
|
---|
82 | Look for effect parameters with the correct reference.
|
---|
83 | This function searches through the effect profile and the level of abstractions below.
|
---|
84 | @param reference The effect parameter reference to match. In the case of effect
|
---|
85 | parameter generators, the reference is replaced by the sub-id.
|
---|
86 | @param parameters The list of parameters to fill in. This list is not cleared. */
|
---|
87 | virtual void FindParametersByReference(const string& reference, FCDEffectParameterList& parameters) = 0;
|
---|
88 |
|
---|
89 | /** [INTERNAL] Clones the profile effect and its parameters.
|
---|
90 | @param newParent The effect that will contain the cloned profile.
|
---|
91 | @return The cloned profile. This pointer will never be NULL. */
|
---|
92 | virtual FCDEffectProfile* Clone(FCDEffect* newParent) = 0;
|
---|
93 |
|
---|
94 | /** [INTERNAL] Flattens this effect profile, pushing all the effect parameter overrides
|
---|
95 | into the effect parameter generators and moving all the parameters to the
|
---|
96 | effect technique level of abstraction. To flatten the material, use the
|
---|
97 | FCDMaterialInstance::FlattenMaterial function. */
|
---|
98 | virtual void Flatten() = 0;
|
---|
99 |
|
---|
100 | /** [INTERNAL] Reads in the effect profile from a given COLLADA XML tree node.
|
---|
101 | @param profileNode The COLLADA XML tree node.
|
---|
102 | @return The status of the import. If the status is not successful,
|
---|
103 | it may be dangerous to extract information from the effect profile.*/
|
---|
104 | virtual FUStatus LoadFromXML(xmlNode* profileNode) = 0;
|
---|
105 |
|
---|
106 | /** [INTERNAL] Writes out the effect profile to the given COLLADA XML tree node.
|
---|
107 | @param parentNode The COLLADA XML parent node in which to insert the effect profile.
|
---|
108 | @return The created element XML tree node. */
|
---|
109 | virtual xmlNode* WriteToXML(xmlNode* parentNode) const = 0;
|
---|
110 | };
|
---|
111 |
|
---|
112 | #endif // _FCD_EFFECT_PROFILE_H_
|
---|