Files
bullet3/Extras/FCollada/FCDocument/FCDEffectParameterFactory.cpp
2006-05-25 19:18:29 +00:00

71 lines
4.1 KiB
C++

/*
Copyright (C) 2005-2006 Feeling Software Inc.
MIT License: http://www.opensource.org/licenses/mit-license.php
*/
#include "StdAfx.h"
#include "FCDocument/FCDEffectParameter.h"
#include "FCDocument/FCDEffectParameterFactory.h"
#include "FCDocument/FCDEffectParameterSurface.h"
#include "FUtils/FUDaeParser.h"
// Creates a new effect parameter, given a type.
FCDEffectParameter* FCDEffectParameterFactory::Create(FCDocument* document, uint32 type)
{
FCDEffectParameter* parameter = NULL;
switch (type)
{
case FCDEffectParameter::SAMPLER: parameter = new FCDEffectParameterSampler(document); break;
case FCDEffectParameter::INTEGER: parameter = new FCDEffectParameterInt(document); break;
case FCDEffectParameter::BOOLEAN: parameter = new FCDEffectParameterBool(document); break;
case FCDEffectParameter::FLOAT: parameter = new FCDEffectParameterFloat(document); break;
case FCDEffectParameter::FLOAT2: parameter = new FCDEffectParameterFloat2(document); break;
case FCDEffectParameter::FLOAT3: parameter = new FCDEffectParameterFloat3(document); break;
case FCDEffectParameter::VECTOR: parameter = new FCDEffectParameterVector(document); break;
case FCDEffectParameter::MATRIX: parameter = new FCDEffectParameterMatrix(document); break;
case FCDEffectParameter::STRING: parameter = new FCDEffectParameterString(document); break;
case FCDEffectParameter::SURFACE: parameter = new FCDEffectParameterSurface(document); break;
default: break;
}
return parameter;
}
// Generates the effect parameter object for the given XML node tree
FCDEffectParameter* FCDEffectParameterFactory::LoadFromXML(FCDocument* document, xmlNode* parameterNode, FUStatus* status)
{
// Look for the type of the parameter.
FCDEffectParameter* parameter = NULL;
for (xmlNode* child = parameterNode->children; child != NULL && parameter == NULL; child = child->next)
{
if (child->type != XML_ELEMENT_NODE) continue;
if (IsEquivalent(child->name, DAE_FXCMN_BOOL_ELEMENT)) parameter = new FCDEffectParameterBool(document);
else if (IsEquivalent(child->name, DAE_FXCMN_FLOAT_ELEMENT)) parameter = new FCDEffectParameterFloat(document);
else if (IsEquivalent(child->name, DAE_FXCMN_FLOAT2_ELEMENT)) parameter = new FCDEffectParameterFloat2(document);
else if (IsEquivalent(child->name, DAE_FXCMN_FLOAT3_ELEMENT)) parameter = new FCDEffectParameterFloat3(document);
else if (IsEquivalent(child->name, DAE_FXCMN_FLOAT4_ELEMENT)) parameter = new FCDEffectParameterVector(document);
else if (IsEquivalent(child->name, DAE_FXCMN_FLOAT4X4_ELEMENT)) parameter = new FCDEffectParameterMatrix(document);
else if (IsEquivalent(child->name, DAE_FXCMN_HALF_ELEMENT)) parameter = new FCDEffectParameterFloat(document);
else if (IsEquivalent(child->name, DAE_FXCMN_HALF2_ELEMENT)) parameter = new FCDEffectParameterFloat2(document);
else if (IsEquivalent(child->name, DAE_FXCMN_HALF3_ELEMENT)) parameter = new FCDEffectParameterFloat3(document);
else if (IsEquivalent(child->name, DAE_FXCMN_HALF4_ELEMENT)) parameter = new FCDEffectParameterVector(document);
else if (IsEquivalent(child->name, DAE_FXCMN_HALF4X4_ELEMENT)) parameter = new FCDEffectParameterMatrix(document);
else if (IsEquivalent(child->name, DAE_FXCMN_INT_ELEMENT)) parameter = new FCDEffectParameterInt(document);
else if (IsEquivalent(child->name, DAE_FXCMN_SAMPLER1D_ELEMENT)) parameter = new FCDEffectParameterSampler(document);
else if (IsEquivalent(child->name, DAE_FXCMN_SAMPLER2D_ELEMENT)) parameter = new FCDEffectParameterSampler(document);
else if (IsEquivalent(child->name, DAE_FXCMN_SAMPLER3D_ELEMENT)) parameter = new FCDEffectParameterSampler(document);
else if (IsEquivalent(child->name, DAE_FXCMN_SAMPLERCUBE_ELEMENT)) parameter = new FCDEffectParameterSampler(document);
else if (IsEquivalent(child->name, DAE_FXCMN_SURFACE_ELEMENT)) parameter = new FCDEffectParameterSurface(document);
else if (IsEquivalent(child->name, DAE_FXCMN_STRING_ELEMENT)) parameter = new FCDEffectParameterString(document);
}
if (parameter != NULL)
{
FUStatus s = parameter->LoadFromXML(parameterNode);
if (status != NULL) status->AppendStatus(s);
}
return parameter;
}