mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-06-12 16:34:01 +00:00
update assimp to 6.0.5
This commit is contained in:
parent
2d2eb57e2e
commit
f5cf21cfeb
941 changed files with 22718 additions and 12240 deletions
|
|
@ -3,8 +3,7 @@
|
|||
Open Asset Import Library (assimp)
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2006-2024, assimp team
|
||||
|
||||
Copyright (c) 2006-2026, assimp team
|
||||
|
||||
All rights reserved.
|
||||
|
||||
|
|
@ -53,53 +52,53 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
namespace Assimp {
|
||||
|
||||
std::string to_string(EElementSemantic e) {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
static std::string to_string(EElementSemantic e) {
|
||||
switch (e) {
|
||||
case EEST_Vertex:
|
||||
return std::string{ "vertex" };
|
||||
case EEST_TriStrip:
|
||||
return std::string{ "tristrips" };
|
||||
case EEST_Edge:
|
||||
return std::string{ "edge" };
|
||||
case EEST_Material:
|
||||
return std::string{ "material" };
|
||||
case EEST_TextureFile:
|
||||
return std::string{ "TextureFile" };
|
||||
default:
|
||||
return std::string{ "invalid" };
|
||||
case EEST_Vertex:
|
||||
return std::string{ "vertex" };
|
||||
case EEST_TriStrip:
|
||||
return std::string{ "tristrips" };
|
||||
case EEST_Edge:
|
||||
return std::string{ "edge" };
|
||||
case EEST_Material:
|
||||
return std::string{ "material" };
|
||||
case EEST_TextureFile:
|
||||
return std::string{ "TextureFile" };
|
||||
default:
|
||||
return std::string{ "invalid" };
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
PLY::EDataType PLY::Property::ParseDataType(std::vector<char> &buffer) {
|
||||
EDataType Property::ParseDataType(std::vector<char> &buffer) {
|
||||
ai_assert(!buffer.empty());
|
||||
|
||||
PLY::EDataType eOut = PLY::EDT_INVALID;
|
||||
EDataType eOut = EDT_INVALID;
|
||||
|
||||
if (PLY::DOM::TokenMatch(buffer, "char", 4) ||
|
||||
PLY::DOM::TokenMatch(buffer, "int8", 4)) {
|
||||
eOut = PLY::EDT_Char;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "uchar", 5) ||
|
||||
PLY::DOM::TokenMatch(buffer, "uint8", 5)) {
|
||||
eOut = PLY::EDT_UChar;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "short", 5) ||
|
||||
PLY::DOM::TokenMatch(buffer, "int16", 5)) {
|
||||
eOut = PLY::EDT_Short;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ushort", 6) ||
|
||||
PLY::DOM::TokenMatch(buffer, "uint16", 6)) {
|
||||
eOut = PLY::EDT_UShort;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "int32", 5) || PLY::DOM::TokenMatch(buffer, "int", 3)) {
|
||||
eOut = PLY::EDT_Int;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "uint32", 6) || PLY::DOM::TokenMatch(buffer, "uint", 4)) {
|
||||
eOut = PLY::EDT_UInt;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "float", 5) || PLY::DOM::TokenMatch(buffer, "float32", 7)) {
|
||||
eOut = PLY::EDT_Float;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "double64", 8) || PLY::DOM::TokenMatch(buffer, "double", 6) ||
|
||||
PLY::DOM::TokenMatch(buffer, "float64", 7)) {
|
||||
eOut = PLY::EDT_Double;
|
||||
if (DOM::TokenMatch(buffer, "char", 4) ||
|
||||
DOM::TokenMatch(buffer, "int8", 4)) {
|
||||
eOut = EDT_Char;
|
||||
} else if (DOM::TokenMatch(buffer, "uchar", 5) ||
|
||||
DOM::TokenMatch(buffer, "uint8", 5)) {
|
||||
eOut = EDT_UChar;
|
||||
} else if (DOM::TokenMatch(buffer, "short", 5) ||
|
||||
DOM::TokenMatch(buffer, "int16", 5)) {
|
||||
eOut = EDT_Short;
|
||||
} else if (DOM::TokenMatch(buffer, "ushort", 6) ||
|
||||
DOM::TokenMatch(buffer, "uint16", 6)) {
|
||||
eOut = EDT_UShort;
|
||||
} else if (DOM::TokenMatch(buffer, "int32", 5) || DOM::TokenMatch(buffer, "int", 3)) {
|
||||
eOut = EDT_Int;
|
||||
} else if (DOM::TokenMatch(buffer, "uint32", 6) || DOM::TokenMatch(buffer, "uint", 4)) {
|
||||
eOut = EDT_UInt;
|
||||
} else if (DOM::TokenMatch(buffer, "float", 5) || DOM::TokenMatch(buffer, "float32", 7)) {
|
||||
eOut = EDT_Float;
|
||||
} else if (DOM::TokenMatch(buffer, "double64", 8) || DOM::TokenMatch(buffer, "double", 6) ||
|
||||
DOM::TokenMatch(buffer, "float64", 7)) {
|
||||
eOut = EDT_Double;
|
||||
}
|
||||
if (PLY::EDT_INVALID == eOut) {
|
||||
if (EDT_INVALID == eOut) {
|
||||
ASSIMP_LOG_INFO("Found unknown data type in PLY file. This is OK");
|
||||
}
|
||||
|
||||
|
|
@ -107,81 +106,81 @@ PLY::EDataType PLY::Property::ParseDataType(std::vector<char> &buffer) {
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
PLY::ESemantic PLY::Property::ParseSemantic(std::vector<char> &buffer) {
|
||||
ESemantic Property::ParseSemantic(std::vector<char> &buffer) {
|
||||
ai_assert(!buffer.empty());
|
||||
|
||||
PLY::ESemantic eOut = PLY::EST_INVALID;
|
||||
if (PLY::DOM::TokenMatch(buffer, "red", 3)) {
|
||||
eOut = PLY::EST_Red;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "green", 5)) {
|
||||
eOut = PLY::EST_Green;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "blue", 4)) {
|
||||
eOut = PLY::EST_Blue;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "alpha", 5)) {
|
||||
eOut = PLY::EST_Alpha;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "vertex_index", 12) || PLY::DOM::TokenMatch(buffer, "vertex_indices", 14)) {
|
||||
eOut = PLY::EST_VertexIndex;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "texcoord", 8)) // Manage uv coords on faces
|
||||
ESemantic eOut = PLY::EST_INVALID;
|
||||
if (DOM::TokenMatch(buffer, "red", 3)) {
|
||||
eOut = EST_Red;
|
||||
} else if (DOM::TokenMatch(buffer, "green", 5)) {
|
||||
eOut = EST_Green;
|
||||
} else if (DOM::TokenMatch(buffer, "blue", 4)) {
|
||||
eOut = EST_Blue;
|
||||
} else if (DOM::TokenMatch(buffer, "alpha", 5)) {
|
||||
eOut = EST_Alpha;
|
||||
} else if (DOM::TokenMatch(buffer, "vertex_index", 12) || PLY::DOM::TokenMatch(buffer, "vertex_indices", 14)) {
|
||||
eOut = EST_VertexIndex;
|
||||
} else if (DOM::TokenMatch(buffer, "texcoord", 8)) // Manage uv coords on faces
|
||||
{
|
||||
eOut = PLY::EST_TextureCoordinates;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "material_index", 14)) {
|
||||
eOut = PLY::EST_MaterialIndex;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ambient_red", 11)) {
|
||||
eOut = PLY::EST_AmbientRed;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ambient_green", 13)) {
|
||||
eOut = PLY::EST_AmbientGreen;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ambient_blue", 12)) {
|
||||
eOut = PLY::EST_AmbientBlue;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ambient_alpha", 13)) {
|
||||
eOut = PLY::EST_AmbientAlpha;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "diffuse_red", 11)) {
|
||||
eOut = PLY::EST_DiffuseRed;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "diffuse_green", 13)) {
|
||||
eOut = PLY::EST_DiffuseGreen;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "diffuse_blue", 12)) {
|
||||
eOut = PLY::EST_DiffuseBlue;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "diffuse_alpha", 13)) {
|
||||
eOut = PLY::EST_DiffuseAlpha;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "specular_red", 12)) {
|
||||
eOut = PLY::EST_SpecularRed;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "specular_green", 14)) {
|
||||
eOut = PLY::EST_SpecularGreen;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "specular_blue", 13)) {
|
||||
eOut = PLY::EST_SpecularBlue;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "specular_alpha", 14)) {
|
||||
eOut = PLY::EST_SpecularAlpha;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "opacity", 7)) {
|
||||
eOut = PLY::EST_Opacity;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "specular_power", 14)) {
|
||||
eOut = PLY::EST_PhongPower;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "r", 1)) {
|
||||
eOut = PLY::EST_Red;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "g", 1)) {
|
||||
eOut = PLY::EST_Green;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "b", 1)) {
|
||||
eOut = PLY::EST_Blue;
|
||||
eOut = EST_TextureCoordinates;
|
||||
} else if (DOM::TokenMatch(buffer, "material_index", 14)) {
|
||||
eOut = EST_MaterialIndex;
|
||||
} else if (DOM::TokenMatch(buffer, "ambient_red", 11)) {
|
||||
eOut = EST_AmbientRed;
|
||||
} else if (DOM::TokenMatch(buffer, "ambient_green", 13)) {
|
||||
eOut = EST_AmbientGreen;
|
||||
} else if (DOM::TokenMatch(buffer, "ambient_blue", 12)) {
|
||||
eOut = EST_AmbientBlue;
|
||||
} else if (DOM::TokenMatch(buffer, "ambient_alpha", 13)) {
|
||||
eOut = EST_AmbientAlpha;
|
||||
} else if (DOM::TokenMatch(buffer, "diffuse_red", 11)) {
|
||||
eOut = EST_DiffuseRed;
|
||||
} else if (DOM::TokenMatch(buffer, "diffuse_green", 13)) {
|
||||
eOut = EST_DiffuseGreen;
|
||||
} else if (DOM::TokenMatch(buffer, "diffuse_blue", 12)) {
|
||||
eOut = EST_DiffuseBlue;
|
||||
} else if (DOM::TokenMatch(buffer, "diffuse_alpha", 13)) {
|
||||
eOut = EST_DiffuseAlpha;
|
||||
} else if (DOM::TokenMatch(buffer, "specular_red", 12)) {
|
||||
eOut = EST_SpecularRed;
|
||||
} else if (DOM::TokenMatch(buffer, "specular_green", 14)) {
|
||||
eOut = EST_SpecularGreen;
|
||||
} else if (DOM::TokenMatch(buffer, "specular_blue", 13)) {
|
||||
eOut = EST_SpecularBlue;
|
||||
} else if (DOM::TokenMatch(buffer, "specular_alpha", 14)) {
|
||||
eOut = EST_SpecularAlpha;
|
||||
} else if (DOM::TokenMatch(buffer, "opacity", 7)) {
|
||||
eOut = EST_Opacity;
|
||||
} else if (DOM::TokenMatch(buffer, "specular_power", 14)) {
|
||||
eOut = EST_PhongPower;
|
||||
} else if (DOM::TokenMatch(buffer, "r", 1)) {
|
||||
eOut = EST_Red;
|
||||
} else if (DOM::TokenMatch(buffer, "g", 1)) {
|
||||
eOut = EST_Green;
|
||||
} else if (DOM::TokenMatch(buffer, "b", 1)) {
|
||||
eOut = EST_Blue;
|
||||
}
|
||||
|
||||
// NOTE: Blender3D exports texture coordinates as s,t tuples
|
||||
else if (PLY::DOM::TokenMatch(buffer, "u", 1) || PLY::DOM::TokenMatch(buffer, "s", 1) || PLY::DOM::TokenMatch(buffer, "tx", 2) || PLY::DOM::TokenMatch(buffer, "texture_u", 9)) {
|
||||
eOut = PLY::EST_UTextureCoord;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "v", 1) || PLY::DOM::TokenMatch(buffer, "t", 1) || PLY::DOM::TokenMatch(buffer, "ty", 2) || PLY::DOM::TokenMatch(buffer, "texture_v", 9)) {
|
||||
eOut = PLY::EST_VTextureCoord;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "x", 1)) {
|
||||
eOut = PLY::EST_XCoord;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "y", 1)) {
|
||||
eOut = PLY::EST_YCoord;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "z", 1)) {
|
||||
eOut = PLY::EST_ZCoord;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "nx", 2)) {
|
||||
eOut = PLY::EST_XNormal;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "ny", 2)) {
|
||||
eOut = PLY::EST_YNormal;
|
||||
} else if (PLY::DOM::TokenMatch(buffer, "nz", 2)) {
|
||||
eOut = PLY::EST_ZNormal;
|
||||
else if (DOM::TokenMatch(buffer, "u", 1) || PLY::DOM::TokenMatch(buffer, "s", 1) || PLY::DOM::TokenMatch(buffer, "tx", 2) || PLY::DOM::TokenMatch(buffer, "texture_u", 9)) {
|
||||
eOut = EST_UTextureCoord;
|
||||
} else if (DOM::TokenMatch(buffer, "v", 1) || PLY::DOM::TokenMatch(buffer, "t", 1) || PLY::DOM::TokenMatch(buffer, "ty", 2) || PLY::DOM::TokenMatch(buffer, "texture_v", 9)) {
|
||||
eOut = EST_VTextureCoord;
|
||||
} else if (DOM::TokenMatch(buffer, "x", 1)) {
|
||||
eOut = EST_XCoord;
|
||||
} else if (DOM::TokenMatch(buffer, "y", 1)) {
|
||||
eOut = EST_YCoord;
|
||||
} else if (DOM::TokenMatch(buffer, "z", 1)) {
|
||||
eOut = EST_ZCoord;
|
||||
} else if (DOM::TokenMatch(buffer, "nx", 2)) {
|
||||
eOut = EST_XNormal;
|
||||
} else if (DOM::TokenMatch(buffer, "ny", 2)) {
|
||||
eOut = EST_YNormal;
|
||||
} else if (DOM::TokenMatch(buffer, "nz", 2)) {
|
||||
eOut = EST_ZNormal;
|
||||
} else {
|
||||
ASSIMP_LOG_INFO("Found unknown property semantic in file. This is ok");
|
||||
PLY::DOM::SkipLine(buffer);
|
||||
DOM::SkipLine(buffer);
|
||||
}
|
||||
return eOut;
|
||||
}
|
||||
|
|
@ -195,12 +194,12 @@ bool PLY::Property::ParseProperty(std::vector<char> &buffer, PLY::Property *pOut
|
|||
// "property list uchar int vertex_index"
|
||||
|
||||
// skip leading spaces
|
||||
if (!PLY::DOM::SkipSpaces(buffer)) {
|
||||
if (!DOM::SkipSpaces(buffer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// skip the "property" string at the beginning
|
||||
if (!PLY::DOM::TokenMatch(buffer, "property", 8)) {
|
||||
if (!DOM::TokenMatch(buffer, "property", 8)) {
|
||||
// seems not to be a valid property entry
|
||||
return false;
|
||||
}
|
||||
|
|
@ -301,7 +300,9 @@ bool PLY::Element::ParseElement(IOStreamBuffer<char> &streamBuffer, std::vector<
|
|||
// the original string identifier
|
||||
pOut->szName = std::string(&buffer[0], &buffer[0] + strlen(&buffer[0]));
|
||||
auto pos = pOut->szName.find_last_of(' ');
|
||||
pOut->szName.erase(pos, pOut->szName.size());
|
||||
if (pos != std::string::npos) {
|
||||
pOut->szName.erase(pos, pOut->szName.size());
|
||||
}
|
||||
}
|
||||
|
||||
if (!PLY::DOM::SkipSpaces(buffer))
|
||||
|
|
@ -342,6 +343,7 @@ bool PLY::Element::ParseElement(IOStreamBuffer<char> &streamBuffer, std::vector<
|
|||
return true;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::DOM::SkipSpaces(std::vector<char> &buffer) {
|
||||
const char *pCur = buffer.empty() ? nullptr : (char *)&buffer[0];
|
||||
const char *end = pCur + buffer.size();
|
||||
|
|
@ -358,6 +360,7 @@ bool PLY::DOM::SkipSpaces(std::vector<char> &buffer) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::DOM::SkipLine(std::vector<char> &buffer) {
|
||||
const char *pCur = buffer.empty() ? nullptr : (char *)&buffer[0];
|
||||
const char *end = pCur + buffer.size();
|
||||
|
|
@ -374,6 +377,7 @@ bool PLY::DOM::SkipLine(std::vector<char> &buffer) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::DOM::TokenMatch(std::vector<char> &buffer, const char *token, unsigned int len) {
|
||||
const char *pCur = buffer.empty() ? nullptr : (char *)&buffer[0];
|
||||
bool ret = false;
|
||||
|
|
@ -389,6 +393,7 @@ bool PLY::DOM::TokenMatch(std::vector<char> &buffer, const char *token, unsigned
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::DOM::SkipSpacesAndLineEnd(std::vector<char> &buffer) {
|
||||
const char *pCur = buffer.empty() ? nullptr : (char *)&buffer[0];
|
||||
const char *end = pCur + buffer.size();
|
||||
|
|
@ -405,6 +410,7 @@ bool PLY::DOM::SkipSpacesAndLineEnd(std::vector<char> &buffer) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::DOM::SkipComments(std::vector<char> buffer) {
|
||||
ai_assert(!buffer.empty());
|
||||
|
||||
|
|
@ -827,14 +833,14 @@ bool PLY::PropertyInstance::ParseValue(const char *&pCur,
|
|||
// technically this should cast to float, but people tend to use float descriptors for double data
|
||||
// this is the best way to not risk losing precision on import and it doesn't hurt to do this
|
||||
ai_real f;
|
||||
pCur = fast_atoreal_move<ai_real>(pCur, f);
|
||||
pCur = fast_atoreal_move(pCur, f);
|
||||
out->fFloat = (ai_real)f;
|
||||
break;
|
||||
|
||||
case EDT_Double:
|
||||
double d;
|
||||
pCur = fast_atoreal_move<double>(pCur, d);
|
||||
out->fDouble = (double)d;
|
||||
pCur = fast_atoreal_move(pCur, d);
|
||||
out->fDouble = d;
|
||||
break;
|
||||
|
||||
case EDT_INVALID:
|
||||
|
|
@ -847,12 +853,12 @@ bool PLY::PropertyInstance::ParseValue(const char *&pCur,
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool PLY::PropertyInstance::ParseValueBinary(IOStreamBuffer<char> &streamBuffer,
|
||||
bool PropertyInstance::ParseValueBinary(IOStreamBuffer<char> &streamBuffer,
|
||||
std::vector<char> &buffer,
|
||||
const char *&pCur,
|
||||
unsigned int &bufferSize,
|
||||
PLY::EDataType eType,
|
||||
PLY::PropertyInstance::ValueUnion *out,
|
||||
EDataType eType,
|
||||
PropertyInstance::ValueUnion *out,
|
||||
bool p_bBE) {
|
||||
ai_assert(nullptr != out);
|
||||
|
||||
|
|
@ -990,6 +996,8 @@ bool PLY::PropertyInstance::ParseValueBinary(IOStreamBuffer<char> &streamBuffer,
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
||||
} // namespace Assimp
|
||||
|
||||
#endif // !! ASSIMP_BUILD_NO_PLY_IMPORTER
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue