C++11-combat: replace more std::to_string by assimp-specific to_string

pull/1034/head^2
Kim Kulling 2016-10-15 21:25:16 +02:00
parent b90669c45e
commit e0dde73018
7 changed files with 99 additions and 78 deletions

View File

@ -56,11 +56,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <memory> #include <memory>
#include <string> #include <string>
namespace Assimp namespace Assimp {
{
/// \var aiImporterDesc X3DImporter::Description /// \var aiImporterDesc X3DImporter::Description
/// Conastant which hold importer description /// Constant which holds the importer description
const aiImporterDesc X3DImporter::Description = { const aiImporterDesc X3DImporter::Description = {
"Extensible 3D(X3D) Importer", "Extensible 3D(X3D) Importer",
"smalcom", "smalcom",
@ -88,7 +87,7 @@ void X3DImporter::Clear()
X3DImporter::~X3DImporter() X3DImporter::~X3DImporter()
{ {
if(mReader != nullptr) delete mReader; delete mReader;
// Clear() is accounting if data already is deleted. So, just check again if all data is deleted. // Clear() is accounting if data already is deleted. So, just check again if all data is deleted.
Clear(); Clear();
} }
@ -115,13 +114,16 @@ bool X3DImporter::FindNodeElement_FromRoot(const std::string& pID, const CX3DImp
bool X3DImporter::FindNodeElement_FromNode(CX3DImporter_NodeElement* pStartNode, const std::string& pID, bool X3DImporter::FindNodeElement_FromNode(CX3DImporter_NodeElement* pStartNode, const std::string& pID,
const CX3DImporter_NodeElement::EType pType, CX3DImporter_NodeElement** pElement) const CX3DImporter_NodeElement::EType pType, CX3DImporter_NodeElement** pElement)
{ {
bool found = false;// flag: true - if requested element is found. bool found = false;// flag: true - if requested element is found.
// Check if pStartNode - this is the element, we are looking for. // Check if pStartNode - this is the element, we are looking for.
if((pStartNode->Type == pType) && (pStartNode->ID == pID)) if((pStartNode->Type == pType) && (pStartNode->ID == pID))
{ {
found = true; found = true;
if(pElement != nullptr) *pElement = pStartNode; if ( pElement != nullptr )
{
*pElement = pStartNode;
}
goto fne_fn_end; goto fne_fn_end;
}// if((pStartNode->Type() == pType) && (pStartNode->ID() == pID)) }// if((pStartNode->Type() == pType) && (pStartNode->ID() == pID))
@ -130,7 +132,10 @@ bool found = false;// flag: true - if requested element is found.
for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = pStartNode->Child.begin(); ch_it != pStartNode->Child.end(); ch_it++) for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = pStartNode->Child.begin(); ch_it != pStartNode->Child.end(); ch_it++)
{ {
found = FindNodeElement_FromNode(*ch_it, pID, pType, pElement); found = FindNodeElement_FromNode(*ch_it, pID, pType, pElement);
if(found) break; if ( found )
{
break;
}
}// for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = it->Child.begin(); ch_it != it->Child.end(); ch_it++) }// for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = it->Child.begin(); ch_it != it->Child.end(); ch_it++)
fne_fn_end: fne_fn_end:
@ -151,7 +156,6 @@ bool X3DImporter::FindNodeElement(const std::string& pID, const CX3DImporter_Nod
if(((CX3DImporter_NodeElement_Group*)tnd)->Static) if(((CX3DImporter_NodeElement_Group*)tnd)->Static)
{ {
static_search = true;// Flag found, stop walking up. Node with static flag will holded in tnd variable. static_search = true;// Flag found, stop walking up. Node with static flag will holded in tnd variable.
break; break;
} }
} }
@ -160,10 +164,14 @@ bool X3DImporter::FindNodeElement(const std::string& pID, const CX3DImporter_Nod
}// while(tnd != nullptr) }// while(tnd != nullptr)
// at now call appropriate search function. // at now call appropriate search function.
if(static_search) if ( static_search )
return FindNodeElement_FromNode(tnd, pID, pType, pElement); {
else return FindNodeElement_FromNode( tnd, pID, pType, pElement );
return FindNodeElement_FromRoot(pID, pType, pElement); }
else
{
return FindNodeElement_FromRoot( pID, pType, pElement );
}
} }
/*********************************************************************************************************************************************/ /*********************************************************************************************************************************************/
@ -969,8 +977,8 @@ void X3DImporter::MeshGeometry_AddColor(aiMesh& pMesh, const std::list<aiColor4D
{ {
if(pColors.size() < pMesh.mNumVertices) if(pColors.size() < pMesh.mNumVertices)
{ {
throw DeadlyImportError("MeshGeometry_AddColor1. Colors count(" + std::to_string(pColors.size()) + ") can not be less than Vertices count(" + throw DeadlyImportError("MeshGeometry_AddColor1. Colors count(" + to_string(pColors.size()) + ") can not be less than Vertices count(" +
std::to_string(pMesh.mNumVertices) + ")."); to_string(pMesh.mNumVertices) + ").");
} }
// copy colors to mesh // copy colors to mesh
@ -981,8 +989,8 @@ void X3DImporter::MeshGeometry_AddColor(aiMesh& pMesh, const std::list<aiColor4D
{ {
if(pColors.size() < pMesh.mNumFaces) if(pColors.size() < pMesh.mNumFaces)
{ {
throw DeadlyImportError("MeshGeometry_AddColor1. Colors count(" + std::to_string(pColors.size()) + ") can not be less than Faces count(" + throw DeadlyImportError("MeshGeometry_AddColor1. Colors count(" + to_string(pColors.size()) + ") can not be less than Faces count(" +
std::to_string(pMesh.mNumFaces) + ")."); to_string(pMesh.mNumFaces) + ").");
} }
// copy colors to mesh // copy colors to mesh
@ -990,7 +998,10 @@ void X3DImporter::MeshGeometry_AddColor(aiMesh& pMesh, const std::list<aiColor4D
for(size_t fi = 0; fi < pMesh.mNumFaces; fi++) for(size_t fi = 0; fi < pMesh.mNumFaces; fi++)
{ {
// apply color to all vertices of face // apply color to all vertices of face
for(size_t vi = 0, vi_e = pMesh.mFaces[fi].mNumIndices; vi < vi_e; vi++) pMesh.mColors[0][pMesh.mFaces[fi].mIndices[vi]] = *col_it; for ( size_t vi = 0, vi_e = pMesh.mFaces[ fi ].mNumIndices; vi < vi_e; vi++ )
{
pMesh.mColors[ 0 ][ pMesh.mFaces[ fi ].mIndices[ vi ] ] = *col_it;
}
col_it++; col_it++;
} }
@ -1038,16 +1049,25 @@ void X3DImporter::MeshGeometry_AddColor(aiMesh& pMesh, const std::list<int32_t>&
// check indices array count. // check indices array count.
if(pColorIdx.size() < pCoordIdx.size()) if(pColorIdx.size() < pCoordIdx.size())
{ {
throw DeadlyImportError("MeshGeometry_AddColor2. Colors indices count(" + std::to_string(pColorIdx.size()) + throw DeadlyImportError("MeshGeometry_AddColor2. Colors indices count(" + to_string(pColorIdx.size()) +
") can not be less than Coords inidces count(" + std::to_string(pCoordIdx.size()) + ")."); ") can not be less than Coords inidces count(" + to_string(pCoordIdx.size()) + ").");
} }
// create list with colors for every vertex. // create list with colors for every vertex.
col_tgt_arr.resize(pMesh.mNumVertices); col_tgt_arr.resize(pMesh.mNumVertices);
for(std::list<int32_t>::const_iterator colidx_it = pColorIdx.begin(), coordidx_it = pCoordIdx.begin(); colidx_it != pColorIdx.end(); colidx_it++, coordidx_it++) for(std::list<int32_t>::const_iterator colidx_it = pColorIdx.begin(), coordidx_it = pCoordIdx.begin(); colidx_it != pColorIdx.end(); colidx_it++, coordidx_it++)
{ {
if(*colidx_it == (-1)) continue;// skip faces delimiter if ( *colidx_it == ( -1 ) )
if((unsigned int)(*coordidx_it) > pMesh.mNumVertices) throw DeadlyImportError("MeshGeometry_AddColor2. Coordinate idx is out of range."); {
if((unsigned int)*colidx_it > pMesh.mNumVertices) throw DeadlyImportError("MeshGeometry_AddColor2. Color idx is out of range."); continue;// skip faces delimiter
}
if ( ( unsigned int ) ( *coordidx_it ) > pMesh.mNumVertices )
{
throw DeadlyImportError( "MeshGeometry_AddColor2. Coordinate idx is out of range." );
}
if ( ( unsigned int ) *colidx_it > pMesh.mNumVertices )
{
throw DeadlyImportError( "MeshGeometry_AddColor2. Color idx is out of range." );
}
col_tgt_arr[*coordidx_it] = col_arr_copy[*colidx_it]; col_tgt_arr[*coordidx_it] = col_arr_copy[*colidx_it];
} }
@ -1063,7 +1083,10 @@ void X3DImporter::MeshGeometry_AddColor(aiMesh& pMesh, const std::list<int32_t>&
} }
// create list with colors for every vertex. // create list with colors for every vertex.
col_tgt_arr.resize(pMesh.mNumVertices); col_tgt_arr.resize(pMesh.mNumVertices);
for(size_t i = 0; i < pMesh.mNumVertices; i++) col_tgt_arr[i] = col_arr_copy[i]; for ( size_t i = 0; i < pMesh.mNumVertices; i++ )
{
col_tgt_arr[ i ] = col_arr_copy[ i ];
}
}// if(pColorIdx.size() > 0) else }// if(pColorIdx.size() > 0) else
}// if(pColorPerVertex) }// if(pColorPerVertex)
else else
@ -1149,8 +1172,8 @@ void X3DImporter::MeshGeometry_AddNormal(aiMesh& pMesh, const std::list<int32_t>
for(size_t i = 0; (i < pMesh.mNumVertices) && (i < tind.size()); i++) for(size_t i = 0; (i < pMesh.mNumVertices) && (i < tind.size()); i++)
{ {
if(tind[i] >= norm_arr_copy.size()) if(tind[i] >= norm_arr_copy.size())
throw DeadlyImportError("MeshGeometry_AddNormal. Normal index(" + std::to_string(tind[i]) + throw DeadlyImportError("MeshGeometry_AddNormal. Normal index(" + to_string(tind[i]) +
") is out of range. Normals count: " + std::to_string(norm_arr_copy.size()) + "."); ") is out of range. Normals count: " + to_string(norm_arr_copy.size()) + ".");
pMesh.mNormals[i] = norm_arr_copy[tind[i]]; pMesh.mNormals[i] = norm_arr_copy[tind[i]];
} }
@ -1289,10 +1312,8 @@ void X3DImporter::MeshGeometry_AddTexCoord(aiMesh& pMesh, const std::list<aiVect
aiMesh* X3DImporter::GeometryHelper_MakeMesh(const std::list<int32_t>& pCoordIdx, const std::list<aiVector3D>& pVertices) const aiMesh* X3DImporter::GeometryHelper_MakeMesh(const std::list<int32_t>& pCoordIdx, const std::list<aiVector3D>& pVertices) const
{ {
aiMesh* tmesh( nullptr );
std::vector<aiFace> faces; std::vector<aiFace> faces;
unsigned int prim_type = 0; unsigned int prim_type = 0;
size_t ts;
// create faces array from input string with vertices indices. // create faces array from input string with vertices indices.
GeometryHelper_CoordIdxStr2FacesArr(pCoordIdx, faces, prim_type); GeometryHelper_CoordIdxStr2FacesArr(pCoordIdx, faces, prim_type);
@ -1304,8 +1325,8 @@ aiMesh* X3DImporter::GeometryHelper_MakeMesh(const std::list<int32_t>& pCoordIdx
// //
// Create new mesh and copy geometry data. // Create new mesh and copy geometry data.
// //
tmesh = new aiMesh; aiMesh *tmesh = new aiMesh;
ts = faces.size(); size_t ts = faces.size();
// faces // faces
tmesh->mFaces = new aiFace[ts]; tmesh->mFaces = new aiFace[ts];
tmesh->mNumFaces = ts; tmesh->mNumFaces = ts;
@ -1458,7 +1479,7 @@ void X3DImporter::ParseNode_Head()
{ {
XML_CheckNode_MustBeEmpty(); XML_CheckNode_MustBeEmpty();
// adding metada from <head> as MetaString from <Scene> // adding metadata from <head> as MetaString from <Scene>
CX3DImporter_NodeElement_MetaString* ms = new CX3DImporter_NodeElement_MetaString(NodeElement_Cur); CX3DImporter_NodeElement_MetaString* ms = new CX3DImporter_NodeElement_MetaString(NodeElement_Cur);
ms->Name = mReader->getAttributeValueSafe("name"); ms->Name = mReader->getAttributeValueSafe("name");
@ -1467,8 +1488,10 @@ void X3DImporter::ParseNode_Head()
{ {
ms->Value.push_back(mReader->getAttributeValueSafe("content")); ms->Value.push_back(mReader->getAttributeValueSafe("content"));
NodeElement_List.push_back(ms); NodeElement_List.push_back(ms);
if(NodeElement_Cur != nullptr) NodeElement_Cur->Child.push_back(ms); if ( NodeElement_Cur != nullptr )
{
NodeElement_Cur->Child.push_back( ms );
}
} }
}// if(XML_CheckNode_NameEqual("meta")) }// if(XML_CheckNode_NameEqual("meta"))
}// if(mReader->getNodeType() == irr::io::EXN_ELEMENT) }// if(mReader->getNodeType() == irr::io::EXN_ELEMENT)
@ -1477,14 +1500,15 @@ void X3DImporter::ParseNode_Head()
if(XML_CheckNode_NameEqual("head")) if(XML_CheckNode_NameEqual("head"))
{ {
close_found = true; close_found = true;
break; break;
} }
}// if(mReader->getNodeType() == irr::io::EXN_ELEMENT) else }// if(mReader->getNodeType() == irr::io::EXN_ELEMENT) else
}// while(mReader->read()) }// while(mReader->read())
if(!close_found) Throw_CloseNotFound("head"); if ( !close_found )
{
Throw_CloseNotFound( "head" );
}
} }
void X3DImporter::ParseNode_Scene() void X3DImporter::ParseNode_Scene()
@ -1502,10 +1526,10 @@ auto GroupCounter_Decrease = [&](size_t& pCounter, const char* pGroupName) -> vo
pCounter--; pCounter--;
}; };
const char* GroupName_Group = "Group"; static const char* GroupName_Group = "Group";
const char* GroupName_StaticGroup = "StaticGroup"; static const char* GroupName_StaticGroup = "StaticGroup";
const char* GroupName_Transform = "Transform"; static const char* GroupName_Transform = "Transform";
const char* GroupName_Switch = "Switch"; static const char* GroupName_Switch = "Switch";
bool close_found = false; bool close_found = false;
size_t counter_group = 0; size_t counter_group = 0;
@ -1551,7 +1575,7 @@ size_t counter_switch = 0;
if(mReader->isEmptyElement()) GroupCounter_Decrease(counter_switch, GroupName_Switch); if(mReader->isEmptyElement()) GroupCounter_Decrease(counter_switch, GroupName_Switch);
} }
else if(XML_CheckNode_NameEqual("DirectionalLight")) else if(XML_CheckNode_NameEqual("DirectionalLight"))
{ {
ParseNode_Lighting_DirectionalLight(); ParseNode_Lighting_DirectionalLight();
} }
else if(XML_CheckNode_NameEqual("PointLight")) else if(XML_CheckNode_NameEqual("PointLight"))

View File

@ -46,9 +46,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "X3DImporter.hpp" #include "X3DImporter.hpp"
#include "X3DImporter_Macro.hpp" #include "X3DImporter_Macro.hpp"
#include "StringUtils.h"
namespace Assimp namespace Assimp {
{
// <DirectionalLight // <DirectionalLight
// DEF="" ID // DEF="" ID
@ -95,7 +95,7 @@ void X3DImporter::ParseNode_Lighting_DirectionalLight()
if(!def.empty()) if(!def.empty())
ne->ID = def; ne->ID = def;
else else
ne->ID = "DirectionalLight_" + std::to_string((size_t)ne);// make random name ne->ID = "DirectionalLight_" + to_string((size_t)ne);// make random name
((CX3DImporter_NodeElement_Light*)ne)->AmbientIntensity = ambientIntensity; ((CX3DImporter_NodeElement_Light*)ne)->AmbientIntensity = ambientIntensity;
((CX3DImporter_NodeElement_Light*)ne)->Color = color; ((CX3DImporter_NodeElement_Light*)ne)->Color = color;
@ -178,7 +178,7 @@ void X3DImporter::ParseNode_Lighting_PointLight()
// Assimp want a node with name similar to a light. "Why? I don't no." ) // Assimp want a node with name similar to a light. "Why? I don't no." )
ParseHelper_Group_Begin(false); ParseHelper_Group_Begin(false);
// make random name // make random name
if(ne->ID.empty()) ne->ID = "PointLight_" + std::to_string((size_t)ne); if(ne->ID.empty()) ne->ID = "PointLight_" + to_string((size_t)ne);
NodeElement_Cur->ID = ne->ID;// assign name to node and return to light element. NodeElement_Cur->ID = ne->ID;// assign name to node and return to light element.
ParseHelper_Node_Exit(); ParseHelper_Node_Exit();
@ -268,7 +268,7 @@ void X3DImporter::ParseNode_Lighting_SpotLight()
// Assimp want a node with name similar to a light. "Why? I don't no." ) // Assimp want a node with name similar to a light. "Why? I don't no." )
ParseHelper_Group_Begin(false); ParseHelper_Group_Begin(false);
// make random name // make random name
if(ne->ID.empty()) ne->ID = "SpotLight_" + std::to_string((size_t)ne); if(ne->ID.empty()) ne->ID = "SpotLight_" + to_string((size_t)ne);
NodeElement_Cur->ID = ne->ID;// assign name to node and return to light element. NodeElement_Cur->ID = ne->ID;// assign name to node and return to light element.
ParseHelper_Node_Exit(); ParseHelper_Node_Exit();

View File

@ -175,7 +175,7 @@ void X3DImporter::Postprocess_BuildLight(const CX3DImporter_NodeElement& pNodeEl
break; break;
default: default:
throw DeadlyImportError("Postprocess_BuildLight. Unknown type of light: " + std::to_string(pNodeElement.Type) + "."); throw DeadlyImportError("Postprocess_BuildLight. Unknown type of light: " + to_string(pNodeElement.Type) + ".");
} }
pSceneLightList.push_back(new_light); pSceneLightList.push_back(new_light);
@ -364,7 +364,7 @@ void X3DImporter::Postprocess_BuildMesh(const CX3DImporter_NodeElement& pNodeEle
else if((*ch_it)->Type == CX3DImporter_NodeElement::ENET_Coordinate) else if((*ch_it)->Type == CX3DImporter_NodeElement::ENET_Coordinate)
{} // skip because already read when mesh created. {} // skip because already read when mesh created.
else else
throw DeadlyImportError("Postprocess_BuildMesh. Unknown child of IndexedLineSet: " + std::to_string((*ch_it)->Type) + "."); throw DeadlyImportError("Postprocess_BuildMesh. Unknown child of IndexedLineSet: " + to_string((*ch_it)->Type) + ".");
}// for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = tnemesh.Child.begin(); ch_it != tnemesh.Child.end(); ch_it++) }// for(std::list<CX3DImporter_NodeElement*>::iterator ch_it = tnemesh.Child.begin(); ch_it != tnemesh.Child.end(); ch_it++)
return;// mesh is build, nothing to do anymore. return;// mesh is build, nothing to do anymore.

View File

@ -731,7 +731,7 @@ void XFileParser::ParseDataObjectMaterial( Material* pMaterial)
std::string matName; std::string matName;
readHeadOfDataObject( &matName); readHeadOfDataObject( &matName);
if( matName.empty()) if( matName.empty())
matName = std::string( "material") + std::to_string( mLineNumber ); matName = std::string( "material") + to_string( mLineNumber );
pMaterial->mName = matName; pMaterial->mName = matName;
pMaterial->mIsReference = false; pMaterial->mIsReference = false;

View File

@ -292,14 +292,14 @@ inline void Buffer::Read(Value& obj, Asset& r)
this->mData.reset(data); this->mData.reset(data);
if (statedLength > 0 && this->byteLength != statedLength) { if (statedLength > 0 && this->byteLength != statedLength) {
throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + std::to_string(statedLength) + throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + to_string(statedLength) +
" bytes, but found " + std::to_string(dataURI.dataLength)); " bytes, but found " + to_string(dataURI.dataLength));
} }
} }
else { // assume raw data else { // assume raw data
if (statedLength != dataURI.dataLength) { if (statedLength != dataURI.dataLength) {
throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + std::to_string(statedLength) + throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + to_string(statedLength) +
" bytes, but found " + std::to_string(dataURI.dataLength)); " bytes, but found " + to_string(dataURI.dataLength));
} }
this->mData.reset(new uint8_t[dataURI.dataLength]); this->mData.reset(new uint8_t[dataURI.dataLength]);
@ -991,7 +991,7 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
break; break;
default: default:
throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of float attribute: " + std::to_string(ifs.GetFloatAttributeType(idx))); throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of float attribute: " + to_string(ifs.GetFloatAttributeType(idx)));
} }
tval *= ifs.GetFloatAttributeDim(idx) * sizeof(o3dgc::Real);// After checking count of objects we can get size of array. tval *= ifs.GetFloatAttributeDim(idx) * sizeof(o3dgc::Real);// After checking count of objects we can get size of array.
@ -1006,7 +1006,7 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
switch( ifs.GetIntAttributeType( idx ) ) switch( ifs.GetIntAttributeType( idx ) )
{ {
default: default:
throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of int attribute: " + std::to_string(ifs.GetIntAttributeType(idx))); throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of int attribute: " + to_string(ifs.GetIntAttributeType(idx)));
} }
tval *= ifs.GetIntAttributeDim(idx) * sizeof(long);// See float attributes note. tval *= ifs.GetIntAttributeDim(idx) * sizeof(long);// See float attributes note.
@ -1045,7 +1045,7 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
break; break;
default: default:
throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of float attribute: " + std::to_string(ifs.GetFloatAttributeType(idx))); throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of float attribute: " + to_string(ifs.GetFloatAttributeType(idx)));
} }
} }
@ -1055,7 +1055,7 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
{ {
// ifs.SetIntAttribute(idx, (long* const)(decoded_data + get_buf_offset(primitives[0].attributes.joint))); // ifs.SetIntAttribute(idx, (long* const)(decoded_data + get_buf_offset(primitives[0].attributes.joint)));
default: default:
throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of int attribute: " + std::to_string(ifs.GetIntAttributeType(idx))); throw DeadlyImportError("GLTF: Open3DGC. Unsupported type of int attribute: " + to_string(ifs.GetIntAttributeType(idx)));
} }
} }
@ -1620,6 +1620,4 @@ namespace Util {
} }
} } // ns glTF

View File

@ -65,7 +65,7 @@ namespace glTF {
inline Value& MakeValue(Value& val, const std::vector<float> & r, MemoryPoolAllocator<>& al) { inline Value& MakeValue(Value& val, const std::vector<float> & r, MemoryPoolAllocator<>& al) {
val.SetArray(); val.SetArray();
val.Reserve(r.size(), al); val.Reserve(r.size(), al);
for (int i = 0; i < r.size(); ++i) { for (unsigned int i = 0; i < r.size(); ++i) {
val.PushBack(r[i], al); val.PushBack(r[i], al);
} }
return val; return val;

View File

@ -204,30 +204,29 @@ inline Ref<Accessor> ExportData(Asset& a, std::string& meshName, Ref<Buffer>& bu
// calculate min and max values // calculate min and max values
{ {
// Allocate and initialize with large values. // Allocate and initialize with large values.
float float_MAX = 10000000000000; float float_MAX = 10000000000000.0f;
for (int i = 0 ; i < numCompsOut ; i++) { for (unsigned int i = 0 ; i < numCompsOut ; i++) {
acc->min.push_back( float_MAX); acc->min.push_back( float_MAX);
acc->max.push_back(-float_MAX); acc->max.push_back(-float_MAX);
} }
// Search and set extreme values. // Search and set extreme values.
float valueTmp; float valueTmp;
for (int i = 0 ; i < count ; i++) { for (unsigned int i = 0 ; i < count ; i++) {
for (int j = 0 ; j < numCompsOut ; j++) { for (unsigned int j = 0 ; j < numCompsOut ; j++) {
if (numCompsOut == 1) {
valueTmp = static_cast<unsigned short*>(data)[i];
} else {
valueTmp = static_cast<aiVector3D*>(data)[i][j];
}
if (numCompsOut == 1) { if (valueTmp < acc->min[j]) {
valueTmp = static_cast<unsigned short*>(data)[i]; acc->min[j] = valueTmp;
} else { }
valueTmp = static_cast<aiVector3D*>(data)[i][j]; if (valueTmp > acc->max[j]) {
acc->max[j] = valueTmp;
}
} }
if (valueTmp < acc->min[j]) {
acc->min[j] = valueTmp;
}
if (valueTmp > acc->max[j]) {
acc->max[j] = valueTmp;
}
}
} }
} }
@ -449,7 +448,7 @@ void ExportSkin(Asset& mAsset, const aiMesh* aim, Ref<Mesh>& meshRef, Ref<Buffer
// aib->mName =====> skinRef->jointNames // aib->mName =====> skinRef->jointNames
// Find the node with id = mName. // Find the node with id = mName.
Ref<Node> nodeRef = mAsset.nodes.Get(aib->mName.C_Str()); Ref<Node> nodeRef = mAsset.nodes.Get(aib->mName.C_Str());
nodeRef->jointName = "joint_" + std::to_string(idx_bone); nodeRef->jointName = "joint_" + to_string(idx_bone);
skinRef->jointNames.push_back(nodeRef); skinRef->jointNames.push_back(nodeRef);
// Identity Matrix =====> skinRef->bindShapeMatrix // Identity Matrix =====> skinRef->bindShapeMatrix
@ -840,7 +839,7 @@ void glTFExporter::ExportAnimations()
// It appears that assimp stores this type of animation as multiple animations. // It appears that assimp stores this type of animation as multiple animations.
// where each aiNodeAnim in mChannels animates a specific node. // where each aiNodeAnim in mChannels animates a specific node.
std::string name = nameAnim + "_" + std::to_string(channelIndex); std::string name = nameAnim + "_" + to_string(channelIndex);
name = mAsset->FindUniqueID(name, "animation"); name = mAsset->FindUniqueID(name, "animation");
Ref<Animation> animRef = mAsset->animations.Create(name); Ref<Animation> animRef = mAsset->animations.Create(name);