Exemplo n.º 1
0
	xmlNode* AddSourceFloat(xmlNode* parent, const char* id, const FloatList& values, const char* parameter, float lengthFactor)
	{ return AddSourceFloat(parent, id, values, 1, &parameter, lengthFactor); }
Exemplo n.º 2
0
xmlNode* FArchiveXML::WriteGeometrySource(FCDObject* object, xmlNode* parentNode)
{
    FCDGeometrySource* geometrySource = (FCDGeometrySource*)object;

    xmlNode* sourceNode = NULL;

    // Export the source directly, using the correct parameters and the length factor
    FloatList& sourceData = geometrySource->GetSourceData().GetDataList();
    uint32 stride = geometrySource->GetStride();
    switch (geometrySource->GetType())
    {
    case FUDaeGeometryInput::POSITION:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::NORMAL:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::GEOTANGENT:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::GEOBINORMAL:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::TEXCOORD:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::STPQ);
        break;
    case FUDaeGeometryInput::TEXTANGENT:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::TEXBINORMAL:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::UV:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::XYZW);
        break;
    case FUDaeGeometryInput::COLOR:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, FUDaeAccessor::RGBA);
        break;
    case FUDaeGeometryInput::EXTRA:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, NULL);
        break;
    case FUDaeGeometryInput::UNKNOWN:
        sourceNode = AddSourceFloat(parentNode, geometrySource->GetDaeId(), sourceData, stride, NULL);
        break;

    case FUDaeGeometryInput::VERTEX: // Refuse to export these sources
    default:
        break;
    }

    if (!geometrySource->GetName().empty())
    {
        AddAttribute(sourceNode, DAE_NAME_ATTRIBUTE, geometrySource->GetName());
    }

    if (geometrySource->GetExtra() != NULL)
    {
        FArchiveXML::WriteTechniquesFCDExtra(geometrySource->GetExtra(), sourceNode);
    }

    for (size_t i = 0; i < geometrySource->GetAnimatedValues().size(); ++i)
    {
        FArchiveXML::WriteAnimatedValue(geometrySource->GetAnimatedValues()[i], sourceNode, "");
    }

    return sourceNode;
}