Merge branch 'master' into update_draco
commit
fc4ebefaa4
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Create a report to help us improve
|
||||||
title: ''
|
title: 'Bug:'
|
||||||
labels: ''
|
labels: 'Bug'
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -23,16 +23,10 @@ A clear and concise description of what you expected to happen.
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
**Platform (please complete the following information):**
|
||||||
- OS: [e.g. iOS]
|
- OS: [e.g. iOS]
|
||||||
- Browser [e.g. chrome, safari]
|
- Browser [e.g. chrome, safari]
|
||||||
- Version [e.g. 22]
|
- Version [e.g. 22]
|
||||||
|
|
||||||
**Smartphone (please complete the following information):**
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
- Browser [e.g. stock browser, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for this project
|
about: Suggest an idea for this project
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: 'Feature-Request'
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
name: Technical debt
|
||||||
|
about: Create a report to help us to fix and detect tech debts
|
||||||
|
title: ''
|
||||||
|
labels: 'Techdebt'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the technical debt**
|
||||||
|
A clear and concise description of what the tech debt is about.
|
||||||
|
|
||||||
|
**Better solution**
|
||||||
|
A clear and concise description of what you would expect.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Desktop (please complete the following information):**
|
||||||
|
- OS: [e.g. iOS]
|
||||||
|
- Browser [e.g. chrome, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
|
@ -268,6 +268,8 @@ ELSEIF(MSVC)
|
||||||
ADD_COMPILE_OPTIONS(/wd4351)
|
ADD_COMPILE_OPTIONS(/wd4351)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
|
||||||
|
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
||||||
|
SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")
|
||||||
ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||||
IF(NOT ASSIMP_HUNTER_ENABLED)
|
IF(NOT ASSIMP_HUNTER_ENABLED)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
@ -334,9 +336,9 @@ INCLUDE (FindPkgMacros)
|
||||||
INCLUDE (PrecompiledHeader)
|
INCLUDE (PrecompiledHeader)
|
||||||
|
|
||||||
# Set Assimp project output directory variables.
|
# Set Assimp project output directory variables.
|
||||||
SET(ASSIMP_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
|
SET(ASSIMP_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" CACHE STRING "Path for runtime output files")
|
||||||
SET(ASSIMP_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
|
SET(ASSIMP_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" CACHE STRING "Path for library output files")
|
||||||
SET(ASSIMP_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
|
SET(ASSIMP_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib" CACHE STRING "Path for archive output files")
|
||||||
|
|
||||||
# Macro used to set the output directories of a target to the
|
# Macro used to set the output directories of a target to the
|
||||||
# respective Assimp output directories.
|
# respective Assimp output directories.
|
||||||
|
|
|
@ -42,7 +42,7 @@ Take a look into the https://github.com/assimp/assimp/blob/master/Build.md file.
|
||||||
* [.NET](https://bitbucket.org/Starnick/assimpnet/src/master/)
|
* [.NET](https://bitbucket.org/Starnick/assimpnet/src/master/)
|
||||||
* [Pascal](port/AssimpPascal/Readme.md)
|
* [Pascal](port/AssimpPascal/Readme.md)
|
||||||
* [Javascript (Alpha)](https://github.com/makc/assimp2json)
|
* [Javascript (Alpha)](https://github.com/makc/assimp2json)
|
||||||
* [Unity 3d Plugin](https://www.assetstore.unity3d.com/en/#!/content/91777)
|
* [Unity 3d Plugin](https://ricardoreis.net/trilib-2/)
|
||||||
* [JVM](https://github.com/kotlin-graphics/assimp) Full jvm port (current [status](https://github.com/kotlin-graphics/assimp/wiki/Status))
|
* [JVM](https://github.com/kotlin-graphics/assimp) Full jvm port (current [status](https://github.com/kotlin-graphics/assimp/wiki/Status))
|
||||||
* [HAXE-Port](https://github.com/longde123/assimp-haxe) The Assimp-HAXE-port.
|
* [HAXE-Port](https://github.com/longde123/assimp-haxe) The Assimp-HAXE-port.
|
||||||
* [Rust](https://github.com/jkvargas/russimp)
|
* [Rust](https://github.com/jkvargas/russimp)
|
||||||
|
|
|
@ -598,8 +598,11 @@ static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene,
|
||||||
if (!mesh->mTextureCoords[a])
|
if (!mesh->mTextureCoords[a])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ioprintf(io, "\t\t<TextureCoords num=\"%u\" set=\"%u\" num_components=\"%u\"> \n", mesh->mNumVertices,
|
ioprintf(io, "\t\t<TextureCoords num=\"%u\" set=\"%u\" name=\"%s\" num_components=\"%u\"> \n",
|
||||||
a, mesh->mNumUVComponents[a]);
|
mesh->mNumVertices,
|
||||||
|
a,
|
||||||
|
mesh->mTextureCoordsNames[a].C_Str(),
|
||||||
|
mesh->mNumUVComponents[a]);
|
||||||
|
|
||||||
if (!shortened) {
|
if (!shortened) {
|
||||||
if (mesh->mNumUVComponents[a] == 3) {
|
if (mesh->mNumUVComponents[a] == 3) {
|
||||||
|
|
|
@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
|
||||||
|
|
||||||
Copyright (c) 2006-2021, assimp team
|
Copyright (c) 2006-2021, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
@ -63,11 +61,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
|
||||||
// AutoCAD Binary DXF<CR><LF><SUB><NULL>
|
// AutoCAD Binary DXF<CR><LF><SUB><NULL>
|
||||||
const std::string AI_DXF_BINARY_IDENT = std::string("AutoCAD Binary DXF\r\n\x1a\0");
|
static constexpr char AI_DXF_BINARY_IDENT[] = "AutoCAD Binary DXF\r\n\x1a";
|
||||||
const size_t AI_DXF_BINARY_IDENT_LEN = 24u;
|
static constexpr size_t AI_DXF_BINARY_IDENT_LEN = sizeof AI_DXF_BINARY_IDENT;
|
||||||
|
|
||||||
// default vertex color that all uncolored vertices will receive
|
// default vertex color that all uncolored vertices will receive
|
||||||
const aiColor4D AI_DXF_DEFAULT_COLOR(aiColor4D(0.6f, 0.6f, 0.6f, 0.6f));
|
static const aiColor4D AI_DXF_DEFAULT_COLOR(aiColor4D(0.6f, 0.6f, 0.6f, 0.6f));
|
||||||
|
|
||||||
// color indices for DXF - 16 are supported, the table is
|
// color indices for DXF - 16 are supported, the table is
|
||||||
// taken directly from the DXF spec.
|
// taken directly from the DXF spec.
|
||||||
|
@ -156,10 +154,10 @@ void DXFImporter::InternReadFile( const std::string& filename, aiScene* pScene,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether this is a binary DXF file - we can't read binary DXF files :-(
|
// Check whether this is a binary DXF file - we can't read binary DXF files :-(
|
||||||
char buff[AI_DXF_BINARY_IDENT_LEN+1] = {0};
|
char buff[AI_DXF_BINARY_IDENT_LEN] = {0};
|
||||||
file->Read(buff,AI_DXF_BINARY_IDENT_LEN,1);
|
file->Read(buff,AI_DXF_BINARY_IDENT_LEN,1);
|
||||||
|
|
||||||
if (0 == strncmp(AI_DXF_BINARY_IDENT.c_str(),buff,AI_DXF_BINARY_IDENT_LEN)) {
|
if (0 == memcmp(AI_DXF_BINARY_IDENT,buff,AI_DXF_BINARY_IDENT_LEN)) {
|
||||||
throw DeadlyImportError("DXF: Binary files are not supported at the moment");
|
throw DeadlyImportError("DXF: Binary files are not supported at the moment");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1126,6 +1126,8 @@ unsigned int FBXConverter::ConvertMeshSingleMaterial(const MeshGeometry &mesh, c
|
||||||
*out_uv++ = aiVector3D(v.x, v.y, 0.0f);
|
*out_uv++ = aiVector3D(v.x, v.y, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out_mesh->mTextureCoordsNames[i] = mesh.GetTextureCoordChannelName(i);
|
||||||
|
|
||||||
out_mesh->mNumUVComponents[i] = 2;
|
out_mesh->mNumUVComponents[i] = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2126,6 +2128,11 @@ void FBXConverter::SetShadingPropertiesCommon(aiMaterial *out_mat, const Propert
|
||||||
const aiColor3D &Emissive = GetColorPropertyFromMaterial(props, "Emissive", ok);
|
const aiColor3D &Emissive = GetColorPropertyFromMaterial(props, "Emissive", ok);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
out_mat->AddProperty(&Emissive, 1, AI_MATKEY_COLOR_EMISSIVE);
|
out_mat->AddProperty(&Emissive, 1, AI_MATKEY_COLOR_EMISSIVE);
|
||||||
|
} else {
|
||||||
|
const aiColor3D &emissiveColor = GetColorPropertyFromMaterial(props, "Maya|emissive", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&emissiveColor, 1, AI_MATKEY_COLOR_EMISSIVE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const aiColor3D &Ambient = GetColorPropertyFromMaterial(props, "Ambient", ok);
|
const aiColor3D &Ambient = GetColorPropertyFromMaterial(props, "Ambient", ok);
|
||||||
|
@ -2207,6 +2214,52 @@ void FBXConverter::SetShadingPropertiesCommon(aiMaterial *out_mat, const Propert
|
||||||
if (ok) {
|
if (ok) {
|
||||||
out_mat->AddProperty(&DispFactor, 1, "$mat.displacementscaling", 0, 0);
|
out_mat->AddProperty(&DispFactor, 1, "$mat.displacementscaling", 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PBR material information
|
||||||
|
const aiColor3D &baseColor = GetColorPropertyFromMaterial(props, "Maya|base_color", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&baseColor, 1, AI_MATKEY_BASE_COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float useColorMap = PropertyGet<float>(props, "Maya|use_color_map", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&useColorMap, 1, AI_MATKEY_USE_COLOR_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float useMetallicMap = PropertyGet<float>(props, "Maya|use_metallic_map", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&useMetallicMap, 1, AI_MATKEY_USE_METALLIC_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float metallicFactor = PropertyGet<float>(props, "Maya|metallic", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&metallicFactor, 1, AI_MATKEY_METALLIC_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float useRoughnessMap = PropertyGet<float>(props, "Maya|use_roughness_map", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&useRoughnessMap, 1, AI_MATKEY_USE_ROUGHNESS_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float roughnessFactor = PropertyGet<float>(props, "Maya|roughness", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&roughnessFactor, 1, AI_MATKEY_ROUGHNESS_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float useEmissiveMap = PropertyGet<float>(props, "Maya|use_emissive_map", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&useEmissiveMap, 1, AI_MATKEY_USE_EMISSIVE_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float emissiveIntensity = PropertyGet<float>(props, "Maya|emissive_intensity", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&emissiveIntensity, 1, AI_MATKEY_EMISSIVE_INTENSITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
const float useAOMap = PropertyGet<float>(props, "Maya|use_ao_map", ok);
|
||||||
|
if (ok) {
|
||||||
|
out_mat->AddProperty(&useAOMap, 1, AI_MATKEY_USE_AO_MAP);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FBXConverter::SetShadingPropertiesRaw(aiMaterial *out_mat, const PropertyTable &props, const TextureMap &_textures, const MeshGeometry *const mesh) {
|
void FBXConverter::SetShadingPropertiesRaw(aiMaterial *out_mat, const PropertyTable &props, const TextureMap &_textures, const MeshGeometry *const mesh) {
|
||||||
|
|
|
@ -541,10 +541,17 @@ void FBXExporter::WriteReferences ()
|
||||||
// (before any actual data is written)
|
// (before any actual data is written)
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
size_t count_nodes(const aiNode* n) {
|
size_t count_nodes(const aiNode* n, const aiNode* root) {
|
||||||
size_t count = 1;
|
size_t count;
|
||||||
|
if (n == root) {
|
||||||
|
count = n->mNumMeshes; // (not counting root node)
|
||||||
|
} else if (n->mNumMeshes > 1) {
|
||||||
|
count = n->mNumMeshes + 1;
|
||||||
|
} else {
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
for (size_t i = 0; i < n->mNumChildren; ++i) {
|
for (size_t i = 0; i < n->mNumChildren; ++i) {
|
||||||
count += count_nodes(n->mChildren[i]);
|
count += count_nodes(n->mChildren[i], root);
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -714,7 +721,7 @@ void FBXExporter::WriteDefinitions ()
|
||||||
|
|
||||||
// Model / FbxNode
|
// Model / FbxNode
|
||||||
// <~~ node hierarchy
|
// <~~ node hierarchy
|
||||||
count = int32_t(count_nodes(mScene->mRootNode)) - 1; // (not counting root node)
|
count = int32_t(count_nodes(mScene->mRootNode, mScene->mRootNode));
|
||||||
if (count) {
|
if (count) {
|
||||||
n = FBX::Node("ObjectType", "Model");
|
n = FBX::Node("ObjectType", "Model");
|
||||||
n.AddChild("Count", count);
|
n.AddChild("Count", count);
|
||||||
|
@ -2625,17 +2632,14 @@ void FBXExporter::WriteModelNodes(
|
||||||
],
|
],
|
||||||
new_node_uid
|
new_node_uid
|
||||||
);
|
);
|
||||||
// write model node
|
|
||||||
FBX::Node m("Model");
|
aiNode new_node;
|
||||||
// take name from mesh name, if it exists
|
// take name from mesh name, if it exists
|
||||||
std::string name = mScene->mMeshes[node->mMeshes[i]]->mName.C_Str();
|
new_node.mName = mScene->mMeshes[node->mMeshes[i]]->mName;
|
||||||
name += FBX::SEPARATOR + "Model";
|
// write model node
|
||||||
m.AddProperties(new_node_uid, name, "Mesh");
|
WriteModelNode(
|
||||||
m.AddChild("Version", int32_t(232));
|
outstream, binary, &new_node, new_node_uid, "Mesh", std::vector<std::pair<std::string,aiVector3D>>()
|
||||||
FBX::Node p("Properties70");
|
);
|
||||||
p.AddP70enum("InheritType", 1);
|
|
||||||
m.AddChild(p);
|
|
||||||
m.Dump(outstream, binary, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -604,15 +604,15 @@ void MeshGeometry::ReadVertexDataTangents(std::vector<aiVector3D>& tangents_out,
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
static const std::string BinormalIndexToken = "BinormalIndex";
|
static const char * BinormalIndexToken = "BinormalIndex";
|
||||||
static const std::string BinormalsIndexToken = "BinormalsIndex";
|
static const char * BinormalsIndexToken = "BinormalsIndex";
|
||||||
|
|
||||||
void MeshGeometry::ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
|
void MeshGeometry::ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
|
||||||
const std::string& MappingInformationType,
|
const std::string& MappingInformationType,
|
||||||
const std::string& ReferenceInformationType)
|
const std::string& ReferenceInformationType)
|
||||||
{
|
{
|
||||||
const char * str = source.Elements().count( "Binormals" ) > 0 ? "Binormals" : "Binormal";
|
const char * str = source.Elements().count( "Binormals" ) > 0 ? "Binormals" : "Binormal";
|
||||||
const char * strIdx = source.Elements().count( "Binormals" ) > 0 ? BinormalsIndexToken.c_str() : BinormalIndexToken.c_str();
|
const char * strIdx = source.Elements().count( "Binormals" ) > 0 ? BinormalsIndexToken : BinormalIndexToken;
|
||||||
ResolveVertexDataArray(binormals_out,source,MappingInformationType,ReferenceInformationType,
|
ResolveVertexDataArray(binormals_out,source,MappingInformationType,ReferenceInformationType,
|
||||||
str,
|
str,
|
||||||
strIdx,
|
strIdx,
|
||||||
|
|
|
@ -131,7 +131,7 @@ Property* ReadTypedProperty(const Element& element)
|
||||||
ParseTokenAsFloat(*tok[6]))
|
ParseTokenAsFloat(*tok[6]))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"Float") || !strcmp(cs,"FieldOfView") || !strcmp( cs, "UnitScaleFactor" ) ) {
|
else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"float") || !strcmp(cs,"Float") || !strcmp(cs,"FieldOfView") || !strcmp( cs, "UnitScaleFactor" ) ) {
|
||||||
checkTokenCount(tok, 5);
|
checkTokenCount(tok, 5);
|
||||||
return new TypedProperty<float>(ParseTokenAsFloat(*tok[4]));
|
return new TypedProperty<float>(ParseTokenAsFloat(*tok[4]));
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,9 +55,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace Ogre {
|
namespace Ogre {
|
||||||
|
|
||||||
const std::string MESH_VERSION_1_8 = "[MeshSerializer_v1.8]";
|
static constexpr auto MESH_VERSION_1_8 = "[MeshSerializer_v1.8]";
|
||||||
const std::string SKELETON_VERSION_1_8 = "[Serializer_v1.80]";
|
static constexpr auto SKELETON_VERSION_1_8 = "[Serializer_v1.80]";
|
||||||
const std::string SKELETON_VERSION_1_1 = "[Serializer_v1.10]";
|
static constexpr auto SKELETON_VERSION_1_1 = "[Serializer_v1.10]";
|
||||||
|
|
||||||
const unsigned short HEADER_CHUNK_ID = 0x1000;
|
const unsigned short HEADER_CHUNK_ID = 0x1000;
|
||||||
|
|
||||||
|
|
|
@ -749,22 +749,22 @@ enum MeshAttribute {
|
||||||
TexCoord
|
TexCoord
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::string PosToken = "position";
|
constexpr auto PosToken = "position";
|
||||||
static const std::string ColToken = "color";
|
constexpr auto ColToken = "color";
|
||||||
static const std::string NormalToken = "normal";
|
constexpr auto NormalToken = "normal";
|
||||||
static const std::string TexCoordToken = "texcoord";
|
constexpr auto TexCoordToken = "texcoord";
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
static MeshAttribute getAttributeByName(const char *attribName) {
|
static MeshAttribute getAttributeByName(const char *attribName) {
|
||||||
ai_assert(nullptr != attribName);
|
ai_assert(nullptr != attribName);
|
||||||
|
|
||||||
if (0 == strncmp(PosToken.c_str(), attribName, PosToken.size())) {
|
if (0 == strcmp(PosToken, attribName)) {
|
||||||
return Position;
|
return Position;
|
||||||
} else if (0 == strncmp(ColToken.c_str(), attribName, ColToken.size())) {
|
} else if (0 == strcmp(ColToken, attribName)) {
|
||||||
return Color;
|
return Color;
|
||||||
} else if (0 == strncmp(NormalToken.c_str(), attribName, NormalToken.size())) {
|
} else if (0 == strcmp(NormalToken, attribName)) {
|
||||||
return Normal;
|
return Normal;
|
||||||
} else if (0 == strncmp(TexCoordToken.c_str(), attribName, TexCoordToken.size())) {
|
} else if (0 == strcmp(TexCoordToken, attribName)) {
|
||||||
return TexCoord;
|
return TexCoord;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -419,7 +419,8 @@ bool PLY::DOM::ParseHeader(IOStreamBuffer<char> &streamBuffer, std::vector<char>
|
||||||
if (PLY::Element::ParseElement(streamBuffer, buffer, &out)) {
|
if (PLY::Element::ParseElement(streamBuffer, buffer, &out)) {
|
||||||
// add the element to the list of elements
|
// add the element to the list of elements
|
||||||
alElements.push_back(out);
|
alElements.push_back(out);
|
||||||
} else if (TokenMatch(buffer, "end_header", 10)) {
|
} else if ( TokenMatch(buffer, "end_header\r", 11) || //checks for header end with /r/n ending
|
||||||
|
TokenMatch(buffer, "end_header", 10)) { //checks for /n ending, if it doesn't end with /r/n
|
||||||
// we have reached the end of the header
|
// we have reached the end of the header
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1118,11 +1118,13 @@ public:
|
||||||
bool KHR_materials_transmission;
|
bool KHR_materials_transmission;
|
||||||
bool KHR_draco_mesh_compression;
|
bool KHR_draco_mesh_compression;
|
||||||
bool FB_ngon_encoding;
|
bool FB_ngon_encoding;
|
||||||
|
bool KHR_texture_basisu;
|
||||||
} extensionsUsed;
|
} extensionsUsed;
|
||||||
|
|
||||||
//! Keeps info about the required extensions
|
//! Keeps info about the required extensions
|
||||||
struct RequiredExtensions {
|
struct RequiredExtensions {
|
||||||
bool KHR_draco_mesh_compression;
|
bool KHR_draco_mesh_compression;
|
||||||
|
bool KHR_texture_basisu;
|
||||||
} extensionsRequired;
|
} extensionsRequired;
|
||||||
|
|
||||||
AssetMetadata asset;
|
AssetMetadata asset;
|
||||||
|
|
|
@ -58,7 +58,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#pragma clang diagnostic ignored "-Wsign-compare"
|
#pragma clang diagnostic ignored "-Wsign-compare"
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
|
#if (__GNUC__ > 4)
|
||||||
#pragma GCC diagnostic ignored "-Wbool-compare"
|
#pragma GCC diagnostic ignored "-Wbool-compare"
|
||||||
|
#endif
|
||||||
#pragma GCC diagnostic ignored "-Wsign-compare"
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1144,6 +1146,7 @@ inline Image::Image() :
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Image::Read(Value &obj, Asset &r) {
|
inline void Image::Read(Value &obj, Asset &r) {
|
||||||
|
//basisu: no need to handle .ktx2, .basis, load as is
|
||||||
if (!mDataLength) {
|
if (!mDataLength) {
|
||||||
Value *curUri = FindString(obj, "uri");
|
Value *curUri = FindString(obj, "uri");
|
||||||
if (nullptr != curUri) {
|
if (nullptr != curUri) {
|
||||||
|
@ -2124,6 +2127,7 @@ inline void Asset::ReadExtensionsUsed(Document &doc) {
|
||||||
CHECK_EXT(KHR_materials_clearcoat);
|
CHECK_EXT(KHR_materials_clearcoat);
|
||||||
CHECK_EXT(KHR_materials_transmission);
|
CHECK_EXT(KHR_materials_transmission);
|
||||||
CHECK_EXT(KHR_draco_mesh_compression);
|
CHECK_EXT(KHR_draco_mesh_compression);
|
||||||
|
CHECK_EXT(KHR_texture_basisu);
|
||||||
|
|
||||||
#undef CHECK_EXT
|
#undef CHECK_EXT
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,6 +250,7 @@ namespace glTF2 {
|
||||||
|
|
||||||
inline void Write(Value& obj, Image& img, AssetWriter& w)
|
inline void Write(Value& obj, Image& img, AssetWriter& w)
|
||||||
{
|
{
|
||||||
|
//basisu: no need to handle .ktx2, .basis, write as is
|
||||||
if (img.bufferView) {
|
if (img.bufferView) {
|
||||||
obj.AddMember("bufferView", img.bufferView->index, w.mAl);
|
obj.AddMember("bufferView", img.bufferView->index, w.mAl);
|
||||||
obj.AddMember("mimeType", Value(img.mimeType, w.mAl).Move(), w.mAl);
|
obj.AddMember("mimeType", Value(img.mimeType, w.mAl).Move(), w.mAl);
|
||||||
|
@ -892,10 +893,22 @@ namespace glTF2 {
|
||||||
if (this->mAsset.extensionsUsed.FB_ngon_encoding) {
|
if (this->mAsset.extensionsUsed.FB_ngon_encoding) {
|
||||||
exts.PushBack(StringRef("FB_ngon_encoding"), mAl);
|
exts.PushBack(StringRef("FB_ngon_encoding"), mAl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->mAsset.extensionsUsed.KHR_texture_basisu) {
|
||||||
|
exts.PushBack(StringRef("KHR_texture_basisu"), mAl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!exts.Empty())
|
if (!exts.Empty())
|
||||||
mDoc.AddMember("extensionsUsed", exts, mAl);
|
mDoc.AddMember("extensionsUsed", exts, mAl);
|
||||||
|
|
||||||
|
//basisu extensionRequired
|
||||||
|
Value extsReq;
|
||||||
|
extsReq.SetArray();
|
||||||
|
if (this->mAsset.extensionsUsed.KHR_texture_basisu) {
|
||||||
|
extsReq.PushBack(StringRef("KHR_texture_basisu"), mAl);
|
||||||
|
mDoc.AddMember("extensionsRequired", extsReq, mAl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
|
@ -494,7 +494,6 @@ void glTF2Exporter::GetMatTexProp(const aiMaterial* mat, float& prop, const char
|
||||||
|
|
||||||
void glTF2Exporter::GetMatTex(const aiMaterial* mat, Ref<Texture>& texture, aiTextureType tt, unsigned int slot = 0)
|
void glTF2Exporter::GetMatTex(const aiMaterial* mat, Ref<Texture>& texture, aiTextureType tt, unsigned int slot = 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (mat->GetTextureCount(tt) > 0) {
|
if (mat->GetTextureCount(tt) > 0) {
|
||||||
aiString tex;
|
aiString tex;
|
||||||
|
|
||||||
|
@ -507,6 +506,7 @@ void glTF2Exporter::GetMatTex(const aiMaterial* mat, Ref<Texture>& texture, aiTe
|
||||||
texture = mAsset->textures.Get(it->second);
|
texture = mAsset->textures.Get(it->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool useBasisUniversal = false;
|
||||||
if (!texture) {
|
if (!texture) {
|
||||||
std::string texId = mAsset->FindUniqueID("", "texture");
|
std::string texId = mAsset->FindUniqueID("", "texture");
|
||||||
texture = mAsset->textures.Create(texId);
|
texture = mAsset->textures.Create(texId);
|
||||||
|
@ -520,17 +520,45 @@ void glTF2Exporter::GetMatTex(const aiMaterial* mat, Ref<Texture>& texture, aiTe
|
||||||
|
|
||||||
texture->source->name = curTex->mFilename.C_Str();
|
texture->source->name = curTex->mFilename.C_Str();
|
||||||
|
|
||||||
// The asset has its own buffer, see Image::SetData
|
//basisu: embedded ktx2, bu
|
||||||
texture->source->SetData(reinterpret_cast<uint8_t *>(curTex->pcData), curTex->mWidth, *mAsset);
|
|
||||||
|
|
||||||
if (curTex->achFormatHint[0]) {
|
if (curTex->achFormatHint[0]) {
|
||||||
std::string mimeType = "image/";
|
std::string mimeType = "image/";
|
||||||
mimeType += (memcmp(curTex->achFormatHint, "jpg", 3) == 0) ? "jpeg" : curTex->achFormatHint;
|
if(memcmp(curTex->achFormatHint, "jpg", 3) == 0)
|
||||||
|
mimeType += "jpeg";
|
||||||
|
else if(memcmp(curTex->achFormatHint, "ktx", 3) == 0) {
|
||||||
|
useBasisUniversal = true;
|
||||||
|
mimeType += "ktx";
|
||||||
|
}
|
||||||
|
else if(memcmp(curTex->achFormatHint, "kx2", 3) == 0) {
|
||||||
|
useBasisUniversal = true;
|
||||||
|
mimeType += "ktx2";
|
||||||
|
}
|
||||||
|
else if(memcmp(curTex->achFormatHint, "bu", 2) == 0) {
|
||||||
|
useBasisUniversal = true;
|
||||||
|
mimeType += "basis";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mimeType += curTex->achFormatHint;
|
||||||
texture->source->mimeType = mimeType;
|
texture->source->mimeType = mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The asset has its own buffer, see Image::SetData
|
||||||
|
//basisu: "image/ktx2", "image/basis" as is
|
||||||
|
texture->source->SetData(reinterpret_cast<uint8_t *>(curTex->pcData), curTex->mWidth, *mAsset);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
texture->source->uri = path;
|
texture->source->uri = path;
|
||||||
|
if(texture->source->uri.find(".ktx")!=std::string::npos ||
|
||||||
|
texture->source->uri.find(".basis")!=std::string::npos)
|
||||||
|
{
|
||||||
|
useBasisUniversal = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//basisu
|
||||||
|
if(useBasisUniversal) {
|
||||||
|
mAsset->extensionsUsed.KHR_texture_basisu = true;
|
||||||
|
mAsset->extensionsRequired.KHR_texture_basisu = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetTexSampler(mat, texture, tt, slot);
|
GetTexSampler(mat, texture, tt, slot);
|
||||||
|
|
|
@ -1263,7 +1263,7 @@ aiMeshMorphAnim *CreateMeshMorphAnim(glTF2::Asset&, Node &node, AnimationSampler
|
||||||
|
|
||||||
static const float kMillisecondsFromSeconds = 1000.f;
|
static const float kMillisecondsFromSeconds = 1000.f;
|
||||||
|
|
||||||
if (nullptr != samplers.weight) {
|
if (samplers.weight && samplers.weight->input && samplers.weight->output) {
|
||||||
float *times = nullptr;
|
float *times = nullptr;
|
||||||
samplers.weight->input->ExtractData(times);
|
samplers.weight->input->ExtractData(times);
|
||||||
float *values = nullptr;
|
float *values = nullptr;
|
||||||
|
@ -1476,6 +1476,12 @@ void glTF2Importer::ImportEmbeddedTextures(glTF2::Asset &r) {
|
||||||
if (strcmp(ext, "jpeg") == 0) {
|
if (strcmp(ext, "jpeg") == 0) {
|
||||||
ext = "jpg";
|
ext = "jpg";
|
||||||
}
|
}
|
||||||
|
else if(strcmp(ext, "ktx2") == 0) { //basisu: ktx remains
|
||||||
|
ext = "kx2";
|
||||||
|
}
|
||||||
|
else if(strcmp(ext, "basis") == 0) { //basisu
|
||||||
|
ext = "bu";
|
||||||
|
}
|
||||||
|
|
||||||
size_t len = strlen(ext);
|
size_t len = strlen(ext);
|
||||||
if (len <= 3) {
|
if (len <= 3) {
|
||||||
|
|
|
@ -1137,6 +1137,9 @@ ELSE()
|
||||||
TARGET_COMPILE_OPTIONS(assimp PRIVATE -Werror)
|
TARGET_COMPILE_OPTIONS(assimp PRIVATE -Werror)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
# adds C_FLAGS required to compile zip.c on old GCC 4.x compiler
|
||||||
|
TARGET_COMPILE_FEATURES(assimp PUBLIC c_std_99)
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES ( assimp PUBLIC
|
TARGET_INCLUDE_DIRECTORIES ( assimp PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
|
||||||
|
|
|
@ -169,7 +169,7 @@ void Logger::debug(const char *message) {
|
||||||
// sometimes importers will include data from the input file
|
// sometimes importers will include data from the input file
|
||||||
// (i.e. node names) in their messages.
|
// (i.e. node names) in their messages.
|
||||||
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
||||||
return;
|
return OnDebug("<fixme: long message discarded>");
|
||||||
}
|
}
|
||||||
return OnDebug(message);
|
return OnDebug(message);
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ void Logger::verboseDebug(const char *message) {
|
||||||
|
|
||||||
// SECURITY FIX: see above
|
// SECURITY FIX: see above
|
||||||
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
||||||
return;
|
return OnVerboseDebug("<fixme: long message discarded>");
|
||||||
}
|
}
|
||||||
return OnVerboseDebug(message);
|
return OnVerboseDebug(message);
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,7 @@ void Logger::info(const char *message) {
|
||||||
|
|
||||||
// SECURITY FIX: see above
|
// SECURITY FIX: see above
|
||||||
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
||||||
return;
|
return OnInfo("<fixme: long message discarded>");
|
||||||
}
|
}
|
||||||
return OnInfo(message);
|
return OnInfo(message);
|
||||||
}
|
}
|
||||||
|
@ -199,7 +199,7 @@ void Logger::warn(const char *message) {
|
||||||
|
|
||||||
// SECURITY FIX: see above
|
// SECURITY FIX: see above
|
||||||
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
||||||
return;
|
return OnWarn("<fixme: long message discarded>");
|
||||||
}
|
}
|
||||||
return OnWarn(message);
|
return OnWarn(message);
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ void Logger::warn(const char *message) {
|
||||||
void Logger::error(const char *message) {
|
void Logger::error(const char *message) {
|
||||||
// SECURITY FIX: see above
|
// SECURITY FIX: see above
|
||||||
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
if (strlen(message) > MAX_LOG_MESSAGE_LENGTH) {
|
||||||
return;
|
return OnError("<fixme: long message discarded>");
|
||||||
}
|
}
|
||||||
return OnError(message);
|
return OnError(message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,8 +344,10 @@ const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const cha
|
||||||
pimpl->blob = nullptr;
|
pimpl->blob = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto baseName = pProperties ? pProperties->GetPropertyString(AI_CONFIG_EXPORT_BLOB_NAME, AI_BLOBIO_MAGIC) : AI_BLOBIO_MAGIC;
|
||||||
|
|
||||||
std::shared_ptr<IOSystem> old = pimpl->mIOSystem;
|
std::shared_ptr<IOSystem> old = pimpl->mIOSystem;
|
||||||
BlobIOSystem* blobio = new BlobIOSystem();
|
BlobIOSystem *blobio = new BlobIOSystem(baseName);
|
||||||
pimpl->mIOSystem = std::shared_ptr<IOSystem>( blobio );
|
pimpl->mIOSystem = std::shared_ptr<IOSystem>( blobio );
|
||||||
|
|
||||||
if (AI_SUCCESS != Export(pScene,pFormatId,blobio->GetMagicFileName(), pPreprocessing, pProperties)) {
|
if (AI_SUCCESS != Export(pScene,pFormatId,blobio->GetMagicFileName(), pPreprocessing, pProperties)) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
pugixml 1.9 - an XML processing library
|
pugixml 1.11 - an XML processing library
|
||||||
|
|
||||||
Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
Copyright (C) 2006-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||||
Report bugs and download new versions at http://pugixml.org/
|
Report bugs and download new versions at https://pugixml.org/
|
||||||
|
|
||||||
This is the distribution of pugixml, which is a C++ XML processing library,
|
This is the distribution of pugixml, which is a C++ XML processing library,
|
||||||
which consists of a DOM-like interface with rich traversal/modification
|
which consists of a DOM-like interface with rich traversal/modification
|
||||||
|
@ -13,8 +13,6 @@ automatically during parsing/saving).
|
||||||
|
|
||||||
The distribution contains the following folders:
|
The distribution contains the following folders:
|
||||||
|
|
||||||
contrib/ - various contributions to pugixml
|
|
||||||
|
|
||||||
docs/ - documentation
|
docs/ - documentation
|
||||||
docs/samples - pugixml usage examples
|
docs/samples - pugixml usage examples
|
||||||
docs/quickstart.html - quick start guide
|
docs/quickstart.html - quick start guide
|
||||||
|
@ -28,7 +26,7 @@ The distribution contains the following folders:
|
||||||
|
|
||||||
This library is distributed under the MIT License:
|
This library is distributed under the MIT License:
|
||||||
|
|
||||||
Copyright (c) 2006-2018 Arseny Kapoulkine
|
Copyright (c) 2006-2019 Arseny Kapoulkine
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/**
|
/**
|
||||||
* pugixml parser - version 1.9
|
* pugixml parser - version 1.11
|
||||||
* --------------------------------------------------------
|
* --------------------------------------------------------
|
||||||
* Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
* Copyright (C) 2006-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||||
* Report bugs and download new versions at http://pugixml.org/
|
* Report bugs and download new versions at https://pugixml.org/
|
||||||
*
|
*
|
||||||
* This library is distributed under the MIT License. See notice at the end
|
* This library is distributed under the MIT License. See notice at the end
|
||||||
* of this file.
|
* of this file.
|
||||||
|
@ -30,10 +30,8 @@
|
||||||
// #define PUGIXML_NO_EXCEPTIONS
|
// #define PUGIXML_NO_EXCEPTIONS
|
||||||
|
|
||||||
// Set this to control attributes for public classes/functions, i.e.:
|
// Set this to control attributes for public classes/functions, i.e.:
|
||||||
//#ifdef _WIN32
|
|
||||||
// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL
|
// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL
|
||||||
// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL
|
// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL
|
||||||
//#endif
|
|
||||||
// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall
|
// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall
|
||||||
// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead
|
// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead
|
||||||
|
|
||||||
|
@ -42,6 +40,9 @@
|
||||||
// #define PUGIXML_MEMORY_OUTPUT_STACK 10240
|
// #define PUGIXML_MEMORY_OUTPUT_STACK 10240
|
||||||
// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096
|
// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096
|
||||||
|
|
||||||
|
// Tune this constant to adjust max nesting for XPath queries
|
||||||
|
// #define PUGIXML_XPATH_DEPTH_LIMIT 1024
|
||||||
|
|
||||||
// Uncomment this to switch to header-only version
|
// Uncomment this to switch to header-only version
|
||||||
#define PUGIXML_HEADER_ONLY
|
#define PUGIXML_HEADER_ONLY
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copyright (c) 2006-2018 Arseny Kapoulkine
|
* Copyright (c) 2006-2020 Arseny Kapoulkine
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person
|
* Permission is hereby granted, free of charge, to any person
|
||||||
* obtaining a copy of this software and associated documentation
|
* obtaining a copy of this software and associated documentation
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,8 +1,8 @@
|
||||||
/**
|
/**
|
||||||
* pugixml parser - version 1.9
|
* pugixml parser - version 1.11
|
||||||
* --------------------------------------------------------
|
* --------------------------------------------------------
|
||||||
* Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
* Copyright (C) 2006-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||||
* Report bugs and download new versions at http://pugixml.org/
|
* Report bugs and download new versions at https://pugixml.org/
|
||||||
*
|
*
|
||||||
* This library is distributed under the MIT License. See notice at the end
|
* This library is distributed under the MIT License. See notice at the end
|
||||||
* of this file.
|
* of this file.
|
||||||
|
@ -12,8 +12,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PUGIXML_VERSION
|
#ifndef PUGIXML_VERSION
|
||||||
// Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons
|
// Define version macro; evaluates to major * 1000 + minor * 10 + patch so that it's safe to use in less-than comparisons
|
||||||
# define PUGIXML_VERSION 190
|
// Note: pugixml used major * 100 + minor * 10 + patch format up until 1.9 (which had version identifier 190); starting from pugixml 1.10, the minor version number is two digits
|
||||||
|
# define PUGIXML_VERSION 1110
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Include user configuration file (this can define various configuration macros)
|
// Include user configuration file (this can define various configuration macros)
|
||||||
|
@ -110,6 +111,15 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// If C++ is 2011 or higher, use 'nullptr'
|
||||||
|
#ifndef PUGIXML_NULL
|
||||||
|
# if __cplusplus >= 201103
|
||||||
|
# define PUGIXML_NULL nullptr
|
||||||
|
# else
|
||||||
|
# define PUGIXML_NULL 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Character interface macros
|
// Character interface macros
|
||||||
#ifdef PUGIXML_WCHAR_MODE
|
#ifdef PUGIXML_WCHAR_MODE
|
||||||
# define PUGIXML_TEXT(t) L ## t
|
# define PUGIXML_TEXT(t) L ## t
|
||||||
|
@ -252,10 +262,19 @@ namespace pugi
|
||||||
// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
|
// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
|
||||||
const unsigned int format_no_empty_element_tags = 0x80;
|
const unsigned int format_no_empty_element_tags = 0x80;
|
||||||
|
|
||||||
|
// Skip characters belonging to range [0; 32) instead of "&#xNN;" encoding. This flag is off by default.
|
||||||
|
const unsigned int format_skip_control_chars = 0x100;
|
||||||
|
|
||||||
|
// Use single quotes ' instead of double quotes " for enclosing attribute values. This flag is off by default.
|
||||||
|
const unsigned int format_attribute_single_quote = 0x200;
|
||||||
|
|
||||||
// The default set of formatting flags.
|
// The default set of formatting flags.
|
||||||
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
|
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
|
||||||
const unsigned int format_default = format_indent;
|
const unsigned int format_default = format_indent;
|
||||||
|
|
||||||
|
const int default_double_precision = 17;
|
||||||
|
const int default_float_precision = 9;
|
||||||
|
|
||||||
// Forward declarations
|
// Forward declarations
|
||||||
struct xml_attribute_struct;
|
struct xml_attribute_struct;
|
||||||
struct xml_node_struct;
|
struct xml_node_struct;
|
||||||
|
@ -403,7 +422,9 @@ namespace pugi
|
||||||
bool set_value(long rhs);
|
bool set_value(long rhs);
|
||||||
bool set_value(unsigned long rhs);
|
bool set_value(unsigned long rhs);
|
||||||
bool set_value(double rhs);
|
bool set_value(double rhs);
|
||||||
|
bool set_value(double rhs, int precision);
|
||||||
bool set_value(float rhs);
|
bool set_value(float rhs);
|
||||||
|
bool set_value(float rhs, int precision);
|
||||||
bool set_value(bool rhs);
|
bool set_value(bool rhs);
|
||||||
|
|
||||||
#ifdef PUGIXML_HAS_LONG_LONG
|
#ifdef PUGIXML_HAS_LONG_LONG
|
||||||
|
@ -569,10 +590,16 @@ namespace pugi
|
||||||
bool remove_attribute(const xml_attribute& a);
|
bool remove_attribute(const xml_attribute& a);
|
||||||
bool remove_attribute(const char_t* name);
|
bool remove_attribute(const char_t* name);
|
||||||
|
|
||||||
|
// Remove all attributes
|
||||||
|
bool remove_attributes();
|
||||||
|
|
||||||
// Remove specified child
|
// Remove specified child
|
||||||
bool remove_child(const xml_node& n);
|
bool remove_child(const xml_node& n);
|
||||||
bool remove_child(const char_t* name);
|
bool remove_child(const char_t* name);
|
||||||
|
|
||||||
|
// Remove all children
|
||||||
|
bool remove_children();
|
||||||
|
|
||||||
// Parses buffer as an XML document fragment and appends all nodes as children of the current node.
|
// Parses buffer as an XML document fragment and appends all nodes as children of the current node.
|
||||||
// Copies/converts the buffer, so it may be deleted or changed after the function returns.
|
// Copies/converts the buffer, so it may be deleted or changed after the function returns.
|
||||||
// Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory.
|
// Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory.
|
||||||
|
@ -643,15 +670,15 @@ namespace pugi
|
||||||
|
|
||||||
#ifndef PUGIXML_NO_XPATH
|
#ifndef PUGIXML_NO_XPATH
|
||||||
// Select single node by evaluating XPath query. Returns first node from the resulting node set.
|
// Select single node by evaluating XPath query. Returns first node from the resulting node set.
|
||||||
xpath_node select_node(const char_t* query, xpath_variable_set* variables = 0) const;
|
xpath_node select_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
||||||
xpath_node select_node(const xpath_query& query) const;
|
xpath_node select_node(const xpath_query& query) const;
|
||||||
|
|
||||||
// Select node set by evaluating XPath query
|
// Select node set by evaluating XPath query
|
||||||
xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = 0) const;
|
xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
||||||
xpath_node_set select_nodes(const xpath_query& query) const;
|
xpath_node_set select_nodes(const xpath_query& query) const;
|
||||||
|
|
||||||
// (deprecated: use select_node instead) Select single node by evaluating XPath query.
|
// (deprecated: use select_node instead) Select single node by evaluating XPath query.
|
||||||
PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = 0) const;
|
PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
||||||
PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const;
|
PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -754,7 +781,9 @@ namespace pugi
|
||||||
bool set(long rhs);
|
bool set(long rhs);
|
||||||
bool set(unsigned long rhs);
|
bool set(unsigned long rhs);
|
||||||
bool set(double rhs);
|
bool set(double rhs);
|
||||||
|
bool set(double rhs, int precision);
|
||||||
bool set(float rhs);
|
bool set(float rhs);
|
||||||
|
bool set(float rhs, int precision);
|
||||||
bool set(bool rhs);
|
bool set(bool rhs);
|
||||||
|
|
||||||
#ifdef PUGIXML_HAS_LONG_LONG
|
#ifdef PUGIXML_HAS_LONG_LONG
|
||||||
|
@ -1192,7 +1221,7 @@ namespace pugi
|
||||||
public:
|
public:
|
||||||
// Construct a compiled object from XPath expression.
|
// Construct a compiled object from XPath expression.
|
||||||
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors.
|
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors.
|
||||||
explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0);
|
explicit xpath_query(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL);
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
xpath_query();
|
xpath_query();
|
||||||
|
@ -1251,8 +1280,9 @@ namespace pugi
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef PUGIXML_NO_EXCEPTIONS
|
#ifndef PUGIXML_NO_EXCEPTIONS
|
||||||
|
#if defined(_MSC_VER)
|
||||||
#ifdef _MSC_VER
|
// C4275 can be ignored in Visual C++ if you are deriving
|
||||||
|
// from a type in the Standard C++ Library
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4275)
|
#pragma warning(disable: 4275)
|
||||||
#endif
|
#endif
|
||||||
|
@ -1272,10 +1302,11 @@ namespace pugi
|
||||||
// Get parse result
|
// Get parse result
|
||||||
const xpath_parse_result& result() const;
|
const xpath_parse_result& result() const;
|
||||||
};
|
};
|
||||||
#endif
|
#if defined(_MSC_VER)
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// XPath node class (either xml_node or xml_attribute)
|
// XPath node class (either xml_node or xml_attribute)
|
||||||
class PUGIXML_CLASS xpath_node
|
class PUGIXML_CLASS xpath_node
|
||||||
{
|
{
|
||||||
|
@ -1379,7 +1410,7 @@ namespace pugi
|
||||||
private:
|
private:
|
||||||
type_t _type;
|
type_t _type;
|
||||||
|
|
||||||
xpath_node _storage;
|
xpath_node _storage[1];
|
||||||
|
|
||||||
xpath_node* _begin;
|
xpath_node* _begin;
|
||||||
xpath_node* _end;
|
xpath_node* _end;
|
||||||
|
@ -1443,7 +1474,7 @@ namespace std
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copyright (c) 2006-2018 Arseny Kapoulkine
|
* Copyright (c) 2006-2020 Arseny Kapoulkine
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person
|
* Permission is hereby granted, free of charge, to any person
|
||||||
* obtaining a copy of this software and associated documentation
|
* obtaining a copy of this software and associated documentation
|
||||||
|
|
|
@ -194,8 +194,14 @@ class BlobIOSystem : public IOSystem {
|
||||||
friend class BlobIOStream;
|
friend class BlobIOStream;
|
||||||
typedef std::pair<std::string, aiExportDataBlob *> BlobEntry;
|
typedef std::pair<std::string, aiExportDataBlob *> BlobEntry;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BlobIOSystem() {
|
BlobIOSystem() :
|
||||||
|
baseName{AI_BLOBIO_MAGIC} {
|
||||||
|
}
|
||||||
|
|
||||||
|
BlobIOSystem(const std::string &baseName) :
|
||||||
|
baseName(baseName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~BlobIOSystem() {
|
virtual ~BlobIOSystem() {
|
||||||
|
@ -207,27 +213,32 @@ public:
|
||||||
public:
|
public:
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
const char *GetMagicFileName() const {
|
const char *GetMagicFileName() const {
|
||||||
return AI_BLOBIO_MAGIC;
|
return baseName.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
aiExportDataBlob *GetBlobChain() {
|
aiExportDataBlob *GetBlobChain() {
|
||||||
|
const auto magicName = std::string(this->GetMagicFileName());
|
||||||
|
const bool hasBaseName = baseName != AI_BLOBIO_MAGIC;
|
||||||
|
|
||||||
// one must be the master
|
// one must be the master
|
||||||
aiExportDataBlob *master = nullptr, *cur;
|
aiExportDataBlob *master = nullptr, *cur;
|
||||||
|
|
||||||
for (const BlobEntry &blobby : blobs) {
|
for (const BlobEntry &blobby : blobs) {
|
||||||
if (blobby.first == AI_BLOBIO_MAGIC) {
|
if (blobby.first == magicName) {
|
||||||
master = blobby.second;
|
master = blobby.second;
|
||||||
|
master->name.Set(hasBaseName ? blobby.first : "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!master) {
|
if (!master) {
|
||||||
ASSIMP_LOG_ERROR("BlobIOSystem: no data written or master file was not closed properly.");
|
ASSIMP_LOG_ERROR("BlobIOSystem: no data written or master file was not closed properly.");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
master->name.Set("");
|
|
||||||
|
|
||||||
cur = master;
|
cur = master;
|
||||||
|
|
||||||
for (const BlobEntry &blobby : blobs) {
|
for (const BlobEntry &blobby : blobs) {
|
||||||
if (blobby.second == master) {
|
if (blobby.second == master) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -236,10 +247,14 @@ public:
|
||||||
cur->next = blobby.second;
|
cur->next = blobby.second;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
|
|
||||||
|
if (hasBaseName) {
|
||||||
|
cur->name.Set(blobby.first);
|
||||||
|
} else {
|
||||||
// extract the file extension from the file written
|
// extract the file extension from the file written
|
||||||
const std::string::size_type s = blobby.first.find_first_of('.');
|
const std::string::size_type s = blobby.first.find_first_of('.');
|
||||||
cur->name.Set(s == std::string::npos ? blobby.first : blobby.first.substr(s + 1));
|
cur->name.Set(s == std::string::npos ? blobby.first : blobby.first.substr(s + 1));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// give up blob ownership
|
// give up blob ownership
|
||||||
blobs.clear();
|
blobs.clear();
|
||||||
|
@ -283,6 +298,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string baseName;
|
||||||
std::set<std::string> created;
|
std::set<std::string> created;
|
||||||
std::vector<BlobEntry> blobs;
|
std::vector<BlobEntry> blobs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -88,9 +88,17 @@ public:
|
||||||
underlying << sin;
|
underlying << sin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Same problem as the copy constructor below, but with root cause is that stream move
|
||||||
|
// is not permitted on older GCC versions. Small performance impact on those platforms.
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 9)
|
||||||
|
basic_formatter(basic_formatter&& other) {
|
||||||
|
underlying << (string)other;
|
||||||
|
}
|
||||||
|
#else
|
||||||
basic_formatter(basic_formatter&& other)
|
basic_formatter(basic_formatter&& other)
|
||||||
: underlying(std::move(other.underlying)) {
|
: underlying(std::move(other.underlying)) {
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// The problem described here:
|
// The problem described here:
|
||||||
// https://sourceforge.net/tracker/?func=detail&atid=1067632&aid=3358562&group_id=226462
|
// https://sourceforge.net/tracker/?func=detail&atid=1067632&aid=3358562&group_id=226462
|
||||||
|
|
|
@ -137,7 +137,7 @@ struct aiCamera
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mLookAt;
|
C_STRUCT aiVector3D mLookAt;
|
||||||
|
|
||||||
/** Half horizontal field of view angle, in radians.
|
/** Horizontal field of view angle, in radians.
|
||||||
*
|
*
|
||||||
* The field of view angle is the angle between the center
|
* The field of view angle is the angle between the center
|
||||||
* line of the screen and the left or right border.
|
* line of the screen and the left or right border.
|
||||||
|
|
|
@ -205,16 +205,22 @@ struct aiExportDataBlob {
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
/** Name of the blob. An empty string always
|
/** Name of the blob. An empty string always
|
||||||
indicates the first (and primary) blob,
|
* indicates the first (and primary) blob,
|
||||||
which contains the actual file data.
|
* which contains the actual file data.
|
||||||
Any other blobs are auxiliary files produced
|
* Any other blobs are auxiliary files produced
|
||||||
by exporters (i.e. material files). Existence
|
* by exporters (i.e. material files). Existence
|
||||||
of such files depends on the file format. Most
|
* of such files depends on the file format. Most
|
||||||
formats don't split assets across multiple files.
|
* formats don't split assets across multiple files.
|
||||||
|
*
|
||||||
If used, blob names usually contain the file
|
* If used, blob names usually contain the file
|
||||||
extension that should be used when writing
|
* extension that should be used when writing
|
||||||
the data to disc.
|
* the data to disc.
|
||||||
|
*
|
||||||
|
* The blob names generated can be influenced by
|
||||||
|
* setting the #AI_CONFIG_EXPORT_BLOB_NAME export
|
||||||
|
* property to the name that is used for the master
|
||||||
|
* blob. All other names are typically derived from
|
||||||
|
* the base name, by the file format exporter.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiString name;
|
C_STRUCT aiString name;
|
||||||
|
|
||||||
|
|
|
@ -1075,6 +1075,23 @@ enum aiComponent
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_EXPORT_POINT_CLOUDS "EXPORT_POINT_CLOUDS"
|
#define AI_CONFIG_EXPORT_POINT_CLOUDS "EXPORT_POINT_CLOUDS"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Specifies the blob name, assimp uses for exporting.
|
||||||
|
*
|
||||||
|
* Some formats require auxiliary files to be written, that need to be linked back into
|
||||||
|
* the original file. For example, OBJ files export materials to a separate MTL file and
|
||||||
|
* use the `mtllib` keyword to reference this file.
|
||||||
|
*
|
||||||
|
* When exporting blobs using #ExportToBlob, assimp does not know the name of the blob
|
||||||
|
* file and thus outputs `mtllib $blobfile.mtl`, which might not be desired, since the
|
||||||
|
* MTL file might be called differently.
|
||||||
|
*
|
||||||
|
* This property can be used to give the exporter a hint on how to use the magic
|
||||||
|
* `$blobfile` keyword. If the exporter detects the keyword and is provided with a name
|
||||||
|
* for the blob, it instead uses this name.
|
||||||
|
*/
|
||||||
|
#define AI_CONFIG_EXPORT_BLOB_NAME "EXPORT_BLOB_NAME"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Specifies a gobal key factor for scale, float value
|
* @brief Specifies a gobal key factor for scale, float value
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -920,6 +920,18 @@ extern "C" {
|
||||||
#define AI_MATKEY_SHADER_PRIMITIVE "?sh.ps", 0, 0
|
#define AI_MATKEY_SHADER_PRIMITIVE "?sh.ps", 0, 0
|
||||||
#define AI_MATKEY_SHADER_COMPUTE "?sh.cs", 0, 0
|
#define AI_MATKEY_SHADER_COMPUTE "?sh.cs", 0, 0
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// PBR material support
|
||||||
|
#define AI_MATKEY_USE_COLOR_MAP "$mat.useColorMap", 0, 0
|
||||||
|
#define AI_MATKEY_BASE_COLOR "$clr.base", 0, 0
|
||||||
|
#define AI_MATKEY_USE_METALLIC_MAP "$mat.useMetallicMap", 0, 0
|
||||||
|
#define AI_MATKEY_METALLIC_FACTOR "$mat.metallicFactor", 0, 0
|
||||||
|
#define AI_MATKEY_USE_ROUGHNESS_MAP "$mat.useRoughnessMap", 0, 0
|
||||||
|
#define AI_MATKEY_ROUGHNESS_FACTOR "$mat.roughnessFactor", 0, 0
|
||||||
|
#define AI_MATKEY_USE_EMISSIVE_MAP "$mat.useEmissiveMap", 0, 0
|
||||||
|
#define AI_MATKEY_EMISSIVE_INTENSITY "$mat.emissiveIntensity", 0, 0
|
||||||
|
#define AI_MATKEY_USE_AO_MAP "$mat.useAOMap", 0, 0
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Pure key names for all texture-related properties
|
// Pure key names for all texture-related properties
|
||||||
//! @cond MATS_DOC_FULL
|
//! @cond MATS_DOC_FULL
|
||||||
|
|
|
@ -674,6 +674,10 @@ struct aiMesh {
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D *mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS];
|
C_STRUCT aiVector3D *mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS];
|
||||||
|
|
||||||
|
/** Vertex stream names.
|
||||||
|
*/
|
||||||
|
C_STRUCT aiString mTextureCoordsNames[AI_MAX_NUMBER_OF_TEXTURECOORDS];
|
||||||
|
|
||||||
/** Specifies the number of components for a given UV channel.
|
/** Specifies the number of components for a given UV channel.
|
||||||
* Up to three channels are supported (UVW, for accessing volume
|
* Up to three channels are supported (UVW, for accessing volume
|
||||||
* or cube maps). If the value is 2 for a given channel n, the
|
* or cube maps). If the value is 2 for a given channel n, the
|
||||||
|
|
|
@ -202,17 +202,17 @@ struct aiMetadata {
|
||||||
} break;
|
} break;
|
||||||
case AI_AISTRING: {
|
case AI_AISTRING: {
|
||||||
aiString v;
|
aiString v;
|
||||||
rhs.Get<aiString>(mKeys[i], v);
|
rhs.Get<aiString>(static_cast<unsigned int>(i), v);
|
||||||
mValues[i].mData = new aiString(v);
|
mValues[i].mData = new aiString(v);
|
||||||
} break;
|
} break;
|
||||||
case AI_AIVECTOR3D: {
|
case AI_AIVECTOR3D: {
|
||||||
aiVector3D v;
|
aiVector3D v;
|
||||||
rhs.Get<aiVector3D>(mKeys[i], v);
|
rhs.Get<aiVector3D>(static_cast<unsigned int>(i), v);
|
||||||
mValues[i].mData = new aiVector3D(v);
|
mValues[i].mData = new aiVector3D(v);
|
||||||
} break;
|
} break;
|
||||||
case AI_AIMETADATA: {
|
case AI_AIMETADATA: {
|
||||||
aiMetadata v;
|
aiMetadata v;
|
||||||
rhs.Get<aiMetadata>(mKeys[i], v);
|
rhs.Get<aiMetadata>(static_cast<unsigned int>(i), v);
|
||||||
mValues[i].mData = new aiMetadata(v);
|
mValues[i].mData = new aiMetadata(v);
|
||||||
} break;
|
} break;
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
|
|
|
@ -211,7 +211,7 @@ def _init(self, target = None, parent = None):
|
||||||
|
|
||||||
|
|
||||||
else: # starts with 'm' but not iterable
|
else: # starts with 'm' but not iterable
|
||||||
setattr(target, name, obj)
|
setattr(target, m, obj)
|
||||||
logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
|
logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
|
||||||
|
|
||||||
if _is_init_type(obj):
|
if _is_init_type(obj):
|
||||||
|
|
|
@ -489,7 +489,7 @@ int CreateAssetData() {
|
||||||
nidx = 3;
|
nidx = 3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ai_assert(false);
|
CLogWindow::Instance().WriteLine("Unknown primitiv type");
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -500,8 +500,7 @@ int CreateAssetData() {
|
||||||
// check whether we can use 16 bit indices
|
// check whether we can use 16 bit indices
|
||||||
if (numIndices >= 65536) {
|
if (numIndices >= 65536) {
|
||||||
// create 32 bit index buffer
|
// create 32 bit index buffer
|
||||||
if (FAILED(g_piDevice->CreateIndexBuffer(4 *
|
if (FAILED(g_piDevice->CreateIndexBuffer(4 * numIndices,
|
||||||
numIndices,
|
|
||||||
D3DUSAGE_WRITEONLY | dwUsage,
|
D3DUSAGE_WRITEONLY | dwUsage,
|
||||||
D3DFMT_INDEX32,
|
D3DFMT_INDEX32,
|
||||||
D3DPOOL_DEFAULT,
|
D3DPOOL_DEFAULT,
|
||||||
|
|
Loading…
Reference in New Issue