xmlNode* AddSourceFloat(xmlNode* parent, const char* id, const FloatList& values, const char* parameter, float lengthFactor) { return AddSourceFloat(parent, id, values, 1, ¶meter, lengthFactor); }
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; }