845 lines
34 KiB
C++
845 lines
34 KiB
C++
/*
|
|
Copyright (C) 2005-2006 Feeling Software Inc.
|
|
MIT License: http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
/**
|
|
@file FCDEffectParameter.h
|
|
This file contains the FCDEffectParameter interface and most of its derivate classes:
|
|
FCDEffectParameterSampler, FCDEffectParameterFloat, FCDEffectParameterVector...
|
|
*/
|
|
|
|
#ifndef _FCD_EFFECT_PARAMETER_H_
|
|
#define _FCD_EFFECT_PARAMETER_H_
|
|
|
|
#include "FCDocument/FCDObject.h"
|
|
|
|
class FCDEffectPass;
|
|
class FCDocument;
|
|
class FCDEffectParameterSurface;
|
|
|
|
/**
|
|
A COLLADA effect parameter.
|
|
|
|
This interface class is used to define all the valid
|
|
ColladaFX parameter types. There are many types of
|
|
parameters: integers, booleans, floating-point
|
|
values, 2D, 3D and 4D vectors of floating-point values,
|
|
matrices, strings, surfaces and their samplers.
|
|
|
|
A COLLADA effect parameter may generate a new
|
|
effect parameter, in which case it will declare a semantic
|
|
and a reference: to represent it within the COLLADA document.
|
|
|
|
@ingroup FCDEffect
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameter : public FCDObject
|
|
{
|
|
public:
|
|
/** The type of the effect parameter class. */
|
|
enum Type
|
|
{
|
|
SAMPLER, /**< A sampler effect parameter. Points towards a surface parameter and adds extra texturing parameters. */
|
|
INTEGER, /**< A single integer effect parameter. */
|
|
BOOLEAN, /**< A single boolean effect parameter. */
|
|
FLOAT, /**< A single floating-pointer value effect parameter. */
|
|
FLOAT2, /**< A 2D vector of floating-pointer values. */
|
|
FLOAT3, /**< A 3D vector of floating-pointer values. */
|
|
VECTOR, /**< A 4D vector of floating-pointer values. */
|
|
MATRIX, /**< A 4x4 matrix. */
|
|
STRING, /**< A string effect parameter. */
|
|
SURFACE /**< A surface effect parameter. Contains a COLLADA image pointer. */
|
|
};
|
|
|
|
private:
|
|
bool isGenerator; // whether this effect parameter structure generates a new value or modifies an existing value (is <newparam>?)
|
|
string reference;
|
|
string semantic; // this is a Collada Semantic, not a Cg semantic
|
|
|
|
// [glaforte] These two members should be somewhere else
|
|
string bindSymbol; // this can be used in Cg to bind to the correct variable
|
|
bool isFragment; // parameter bound to the fragment program or the vertex one
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameter(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameter();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The type of the effect parameter class.*/
|
|
virtual Type GetType() const = 0;
|
|
|
|
/** Retrieves the reference for this effect parameter.
|
|
In the case of generators, the reference string contains the sub-id.
|
|
@return The reference. */
|
|
const string& GetReference() const { return reference; }
|
|
|
|
/** Retrieves the semantic for this effect parameter.
|
|
@return The semantic. */
|
|
const string& GetSemantic() const { return semantic; }
|
|
|
|
/** Sets the semantic for this effect parameter.
|
|
@param _semantic The semantic. */
|
|
void SetSemantic(const string& _semantic) { semantic = _semantic; }
|
|
|
|
/** Retrieves whether this effect parameter is a parameter generator.
|
|
A ColladaFX parameter must be generated to be modified or bound at
|
|
higher abstraction levels.
|
|
@return Whether this is a generator. */
|
|
bool IsGenerator() const { return isGenerator; }
|
|
|
|
/** Retrieves whether this effect parameter is a parameter modifier.
|
|
A ColladaFX parameter must be generated to be modified or bound at
|
|
higher abstraction levels.
|
|
@return Whether this is a modifier. */
|
|
bool IsModifier() const { return !isGenerator; }
|
|
|
|
/** @deprecated Retrieves the program bind symbol for
|
|
this parameter. This information should be available
|
|
per-shader, in the FCDEffectPassShader class.
|
|
@return The program bind symbol. */
|
|
const string& GetBindSymbol() const { return bindSymbol; }
|
|
|
|
/** @deprecated Sets the program bind symbol for this parameter.
|
|
This information is available per-shader, in the FCDEffectPassShader class.
|
|
@param _bindSymbol The program bind symbol. */
|
|
void SetBindSymbol(const string& _bindSymbol) { bindSymbol = _bindSymbol; }
|
|
|
|
/** @deprecated Retrieves whether the program bind symbol attached
|
|
to this parameter belongs to a fragment/pixel shader.
|
|
This information is available per-shader, in the FCDEffectPassShader class.
|
|
@return Whether it belongs to a fragment/pixel shader. */
|
|
bool IsFragment() const { return isFragment; }
|
|
|
|
/** @deprecated Sets whether the program bind symbol attached to this
|
|
parameter belongs to a fragment/pixel shader.
|
|
This information is available per-shader, in the FCDEffectPassShader class.
|
|
@param _isFragment Whether it belongs to a fragment/pixel shader. */
|
|
void SetFragment(bool _isFragment) { isFragment = _isFragment;}
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone() = 0;
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
|
|
protected:
|
|
/** [INTERNAL] Copies into the given effect parameters, the variables
|
|
held by the FCDEffectParameter interface. This function is used by the classes
|
|
based on this interface during the cloning process.
|
|
@param clone The parameter to clone. */
|
|
void Clone(FCDEffectParameter* clone);
|
|
};
|
|
|
|
/**
|
|
A COLLADA sampler effect parameter.
|
|
A sampler parameter provides the extra texturing information necessary
|
|
to correctly sample a surface parameter.
|
|
There are four types of samplers supported: 1D, 2D, 3D and cube.
|
|
|
|
@ingroup FCDEffect
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterSampler : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The type of sampling to execute. */
|
|
enum SamplerType
|
|
{
|
|
SAMPLER1D, /** 1D sampling. */
|
|
SAMPLER2D, /** 2D sampling. */
|
|
SAMPLER3D, /** 3D sampling. */
|
|
SAMPLERCUBE /** Cube-map sampling. */
|
|
};
|
|
|
|
private:
|
|
SamplerType samplerType;
|
|
string surfaceSid;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterSampler(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterSampler();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: SAMPLER. */
|
|
virtual Type GetType() const { return SAMPLER; }
|
|
|
|
/** Retrieves the sub-id of the surface parameter.
|
|
You will want to search for that sub-id within the parameters to find the
|
|
FCDEffectParameterSurface object.
|
|
@return The sub-id. */
|
|
const char* GetSurfaceSid() const { return surfaceSid.c_str(); }
|
|
|
|
/** Sets the sub-id of the surface parameter to sample.
|
|
@param sid The surface parameter sub-id. */
|
|
void SetSurfaceSid(const char* sid) { surfaceSid = sid; }
|
|
|
|
/** Retrieves the type of sampling to do.
|
|
@return The sampling type. */
|
|
SamplerType GetSamplerType() const { return samplerType; }
|
|
|
|
/** Sets the type of sampling to do.
|
|
@param type The sampling type. */
|
|
void SetSamplerType(SamplerType type) { samplerType = type; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA integer effect parameter.
|
|
Contains a single, unanimated integer.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterInt : public FCDEffectParameter
|
|
{
|
|
private:
|
|
int value;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterInt(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterInt();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: INTEGER. */
|
|
virtual Type GetType() const { return INTEGER; }
|
|
|
|
/** Retrieves the value of the effect parameter.
|
|
@return The integer value. */
|
|
int GetValue() const { return value; }
|
|
|
|
/** Sets the integer value of the effect parameter.
|
|
@param _value The integer value. */
|
|
void SetValue(int _value) { value = _value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA boolean effect parameter.
|
|
Contains a single, unanimated boolean.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterBool : public FCDEffectParameter
|
|
{
|
|
private:
|
|
bool value;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterBool(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterBool();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: BOOLEAN. */
|
|
virtual Type GetType() const { return BOOLEAN; }
|
|
|
|
/** Retrieves the boolean value of the effect parameter.
|
|
@return The boolean value. */
|
|
bool GetValue() const { return value; }
|
|
|
|
/** Sets the boolean value of the effect parameter.
|
|
@param _value The boolean value. */
|
|
void SetValue(bool _value) { value = _value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA string effect parameter.
|
|
Contains a single, unanimated string.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterString : public FCDEffectParameter
|
|
{
|
|
private:
|
|
string value;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterString(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterString();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: STRING. */
|
|
virtual Type GetType() const { return STRING; }
|
|
|
|
/** Retrieves the string contained in the effect parameter.
|
|
@return The string. */
|
|
const string& GetValue() const { return value; }
|
|
|
|
/** Sets the string contained in the effect parameter.
|
|
@param _value The string. */
|
|
void SetValue(const string& _value) { value = _value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA float effect parameter.
|
|
Contains a single, possibly animated, floating-point value.
|
|
The type of the floating-point value may be HALF or FLOAT.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterFloat : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The supported types of float-point values. */
|
|
enum FloatType
|
|
{
|
|
FLOAT, /** A full-fledged floating-point value. This is the default. */
|
|
HALF /** Probably implies a 16-bit floating-point value. */
|
|
};
|
|
|
|
private:
|
|
FloatType floatType;
|
|
float value;
|
|
float min;
|
|
float max;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterFloat(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterFloat();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: FLOAT. */
|
|
virtual FCDEffectParameter::Type GetType() const { return FCDEffectParameter::FLOAT; }
|
|
|
|
/** Retrieves the type of floating-point value held by this effect parameter.
|
|
@return The type of floating-point value. */
|
|
FloatType GetFloatType() const { return floatType; }
|
|
|
|
/** Sets the type of floating-point value held by this effect parameter.
|
|
@param type The type of floating-point value. */
|
|
void SetFloatType(FloatType type) { floatType = type; }
|
|
|
|
/** Retrieves the floating-point value of the effect parameter.
|
|
@return The floating-point value. */
|
|
float& GetValue() { return value; }
|
|
const float& GetValue() const { return value; } /**< See above. */
|
|
|
|
/** Sets the floating-point value of the effect parameter.
|
|
@param _value The floating-point value. */
|
|
void SetValue(float _value) { value = _value; }
|
|
|
|
/** Retrieves the minimum value for the UI widget created for this effect parameter.
|
|
This value is for UI purposes only and has no real impact on the value.
|
|
@return The minimum value. */
|
|
float GetMin() const { return min; }
|
|
|
|
/** Sets the minimum value for the UI widget created for this effect parameter.
|
|
This value is for UI purposes only and has no real impact on the value.
|
|
@param _min The minimum value. */
|
|
void SetMin(float _min) { min = _min; }
|
|
|
|
/** Retrieves the maximum value for the UI widget created for this effect parameter.
|
|
This value is for UI purposes only and has no real impact on the value.
|
|
@return The maximum value. */
|
|
float GetMax() const { return max; }
|
|
|
|
/** Sets the maximum value for the UI widget created for this effect parameter.
|
|
This value is for UI purposes only and has no real impact on the value.
|
|
@param _max The maximum value. */
|
|
void SetMax(float _max) { max = _max; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA 2D vector of floats.
|
|
Contains two, possibly animated, floating-point values.
|
|
The type of the floating-point values may be HALF or FLOAT.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterFloat2 : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The supported types of float-point values. */
|
|
enum FloatType
|
|
{
|
|
FLOAT, /** A full-fledged floating-point value. This is the default. */
|
|
HALF /** Probably implies a 16-bit floating-point value. */
|
|
};
|
|
|
|
private:
|
|
FloatType floatType;
|
|
float value_x;
|
|
float value_y;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterFloat2(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterFloat2();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: FLOAT2. */
|
|
virtual Type GetType() const { return FLOAT2; }
|
|
|
|
/** Retrieves the type of floating-point value held by this effect parameter.
|
|
@return The type of floating-point value. */
|
|
FloatType GetFloatType() const { return floatType; }
|
|
|
|
/** Sets the type of floating-point value held by this effect parameter.
|
|
@param type The type of floating-point value. */
|
|
void SetFloatType(FloatType type) { floatType = type; }
|
|
|
|
/** Retrieves the first floating-point value of the effect parameter.
|
|
@return The first floating-point value. */
|
|
float& GetValueX() { return value_x; }
|
|
const float& GetValueX() const { return value_x; } /**< See above. */
|
|
|
|
/** Sets the first floating-point value of the effect parameter.
|
|
@param value The first floating-point value. */
|
|
void SetValueX(float value) { value_x = value; }
|
|
|
|
/** Retrieves the second floating-point value of the effect parameter.
|
|
@return The second floating-point value. */
|
|
float& GetValueY() { return value_y; }
|
|
const float& GetValueY() const { return value_y; } /**< See above. */
|
|
|
|
/** Sets the second floating-point value of the effect parameter.
|
|
@param value The second floating-point value. */
|
|
void SetValueY(float value) { value_y = value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA 3D vector of floats.
|
|
Contains three, possibly animated, floating-point values.
|
|
The type of the floating-point values may be HALF or FLOAT.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterFloat3 : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The supported types of float-point values. */
|
|
enum FloatType
|
|
{
|
|
FLOAT, /** A full-fledged floating-point value. This is the default. */
|
|
HALF /** Probably implies a 16-bit floating-point value. */
|
|
};
|
|
|
|
private:
|
|
FloatType floatType;
|
|
FMVector3 value;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterFloat3(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterFloat3();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: FLOAT3. */
|
|
virtual Type GetType() const { return FLOAT3; }
|
|
|
|
/** Retrieves the type of floating-point value held by this effect parameter.
|
|
@return The type of floating-point value. */
|
|
FloatType GetFloatType() const { return floatType; }
|
|
|
|
/** Sets the type of floating-point value held by this effect parameter.
|
|
@param type The type of floating-point value. */
|
|
void SetFloatType(FloatType type) { floatType = type; }
|
|
|
|
/** Retrieves the first floating-point value of the effect parameter.
|
|
@return The first floating-point value. */
|
|
float& GetValueX() { return value.x; }
|
|
const float& GetValueX() const { return value.x; } /**< See above. */
|
|
|
|
/** Sets the first floating-point value of the effect parameter.
|
|
@param _value The first floating-point value. */
|
|
void SetValueX(float _value) { value.x = _value; }
|
|
|
|
/** Retrieves the second floating-point value of the effect parameter.
|
|
@return The second floating-point value. */
|
|
float& GetValueY() { return value.y; }
|
|
const float& GetValueY() const { return value.y; } /**< See above. */
|
|
|
|
/** Sets the second floating-point value of the effect parameter.
|
|
@param _value The second floating-point value. */
|
|
void SetValueY(float _value) { value.y = _value; }
|
|
|
|
/** Retrieves the third floating-point value of the effect parameter.
|
|
@return The third floating-point value. */
|
|
float& GetValueZ() { return value.z; }
|
|
const float& GetValueZ() const { return value.z; } /**< See above. */
|
|
|
|
/** Sets the third floating-point value of the effect parameter.
|
|
@param _value The third floating-point value. */
|
|
void SetValueZ(float _value) { value.z = _value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA 4D vector of floats.
|
|
Contains four, possibly animated, floating-point values.
|
|
The type of the floating-point values may be HALF or FLOAT.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterVector : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The supported types of float-point values. */
|
|
enum FloatType
|
|
{
|
|
FLOAT, /** A full-fledged floating-point value. This is the default. */
|
|
HALF /** Probably implies a 16-bit floating-point value. */
|
|
};
|
|
|
|
private:
|
|
FloatType floatType;
|
|
float vector[4];
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterVector(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterVector();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: VECTOR. */
|
|
virtual Type GetType() const { return VECTOR; }
|
|
|
|
/** Retrieves the type of floating-point value held by this effect parameter.
|
|
@return The type of floating-point value. */
|
|
FloatType GetFloatType() const { return floatType; }
|
|
|
|
/** Sets the type of floating-point value held by this effect parameter.
|
|
@param type The type of floating-point value. */
|
|
void SetFloatType(FloatType type) { floatType = type; }
|
|
|
|
/** Sets the vector value of the effect parameter.
|
|
@return The vector value. */
|
|
float* GetVector() { return vector; }
|
|
const float* GetVector() const { return vector; } /**< See above. */
|
|
|
|
/** Retrieves the first floating-point value of the effect parameter.
|
|
@return The first floating-point value. */
|
|
float& GetValueX() { return vector[0]; }
|
|
const float& GetValueX() const { return vector[0]; } /**< See above. */
|
|
|
|
/** Sets the first floating-point value of the effect parameter.
|
|
@param _value The first floating-point value. */
|
|
void SetValueX(float _value) { vector[0] = _value; }
|
|
|
|
/** Retrieves the second floating-point value of the effect parameter.
|
|
@return The second floating-point value. */
|
|
float& GetValueY() { return vector[1]; }
|
|
const float& GetValueY() const { return vector[1]; } /**< See above. */
|
|
|
|
/** Sets the second floating-point value of the effect parameter.
|
|
@param _value The second floating-point value. */
|
|
void SetValueY(float _value) { vector[1] = _value; }
|
|
|
|
/** Retrieves the third floating-point value of the effect parameter.
|
|
@return The third floating-point value. */
|
|
float& GetValueZ() { return vector[2]; }
|
|
const float& GetValueZ() const { return vector[2]; } /**< See above. */
|
|
|
|
/** Sets the third floating-point value of the effect parameter.
|
|
@param _value The third floating-point value. */
|
|
void SetValueZ(float _value) { vector[2] = _value; }
|
|
|
|
/** Retrieves the fourth floating-point value of the effect parameter.
|
|
@return The fourth floating-point value. */
|
|
float& GetValueW() { return vector[3]; }
|
|
const float& GetValueW() const { return vector[3]; } /**< See above. */
|
|
|
|
/** Sets the fourth floating-point value of the effect parameter.
|
|
@param _value The fourth floating-point value. */
|
|
void SetValueW(float _value) { vector[3] = _value; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
/**
|
|
A COLLADA 4x4 matrix.
|
|
Contains 16 floating-point values that represent a COLLADA column-major 4x4 matrix.
|
|
The type of the floating-point values may be HALF or FLOAT.
|
|
*/
|
|
class FCOLLADA_EXPORT FCDEffectParameterMatrix : public FCDEffectParameter
|
|
{
|
|
public:
|
|
/** The supported types of float-point values. */
|
|
enum FloatType
|
|
{
|
|
FLOAT, /** A full-fledged floating-point value. This is the default. */
|
|
HALF /** Probably implies a 16-bit floating-point value. */
|
|
};
|
|
|
|
private:
|
|
FloatType floatType;
|
|
FMMatrix44 matrix;
|
|
|
|
public:
|
|
/** Constructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::AddParameter function.
|
|
@param document The COLLADA document that owns the effect parameter. */
|
|
FCDEffectParameterMatrix(FCDocument* document);
|
|
|
|
/** Destructor: do not use directly.
|
|
Instead, use the FCDEffectParameterList::ReleaseParameter function.
|
|
When released, the effect parameter list will also release all
|
|
its parameters, if it owns them. */
|
|
virtual ~FCDEffectParameterMatrix();
|
|
|
|
/** Retrieves the type of effect parameter class.
|
|
@return The parameter class type: MATRIX. */
|
|
virtual Type GetType() const { return MATRIX; }
|
|
|
|
/** Retrieves the type of floating-point value held by this effect parameter.
|
|
@return The type of floating-point value. */
|
|
FloatType GetFloatType() const { return floatType; }
|
|
|
|
/** Sets the type of floating-point value held by this effect parameter.
|
|
@param type The type of floating-point value. */
|
|
void SetFloatType(FloatType type) { floatType = type; }
|
|
|
|
/** Retrieves the matrix contained within this effect parameter.
|
|
@return The matrix. */
|
|
FMMatrix44& GetMatrix() { return matrix; }
|
|
const FMMatrix44& GetMatrix() const { return matrix; } /**< See above. */
|
|
|
|
/** Sets the matrix contained within this effect parameter.
|
|
@param mx The matrix. */
|
|
void SetMatrix(const FMMatrix44& mx) { matrix = mx; }
|
|
|
|
/** Creates a full copy of the effect parameter.
|
|
@return The cloned effect parameter. You will need to delete this pointer. */
|
|
virtual FCDEffectParameter* Clone();
|
|
|
|
/** [INTERNAL] Overwrites the target parameter with this parameter.
|
|
This function is used during the flattening of materials.
|
|
@param target The target parameter to overwrite. */
|
|
virtual void Overwrite(FCDEffectParameter* target);
|
|
|
|
/** [INTERNAL] Reads in the effect parameter from a given COLLADA XML tree node.
|
|
@param parameterNode The COLLADA XML tree node.
|
|
@return The status of the import. If the status is not successful,
|
|
it may be dangerous to extract information from the parameter.*/
|
|
virtual FUStatus LoadFromXML(xmlNode* parameterNode);
|
|
|
|
/** [INTERNAL] Writes out the effect parameter to the given COLLADA XML tree node.
|
|
@param parentNode The COLLADA XML parent node in which to insert the parameter.
|
|
@return The created element XML tree node. */
|
|
virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
|
};
|
|
|
|
#endif // _FCD_EFFECT_PARAMETER_H_
|
|
|