Merge branch 'master' into migenius-fix-pbrsg
commit
18555abed0
|
@ -253,7 +253,7 @@ ELSEIF(MSVC)
|
||||||
IF(MSVC12)
|
IF(MSVC12)
|
||||||
ADD_COMPILE_OPTIONS(/wd4351)
|
ADD_COMPILE_OPTIONS(/wd4351)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MDd /Ob2 /DEBUG:FULL /Zi")
|
SET(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MDd /Ob2 /Zi")
|
||||||
ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
||||||
IF(NOT HUNTER_ENABLED)
|
IF(NOT HUNTER_ENABLED)
|
||||||
SET(CMAKE_CXX_FLAGS "-fPIC -std=c++11 ${CMAKE_CXX_FLAGS}")
|
SET(CMAKE_CXX_FLAGS "-fPIC -std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||||
|
@ -391,6 +391,11 @@ IF(HUNTER_ENABLED)
|
||||||
)
|
)
|
||||||
ELSE(HUNTER_ENABLED)
|
ELSE(HUNTER_ENABLED)
|
||||||
# cmake configuration files
|
# cmake configuration files
|
||||||
|
if(${BUILD_SHARED_LIBS})
|
||||||
|
set(BUILD_LIB_TYPE SHARED)
|
||||||
|
else()
|
||||||
|
set(BUILD_LIB_TYPE STATIC)
|
||||||
|
endif()
|
||||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
|
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
|
||||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
|
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
|
||||||
IF (is_multi_config)
|
IF (is_multi_config)
|
||||||
|
|
|
@ -14,6 +14,7 @@ matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
|
||||||
image:
|
image:
|
||||||
|
- Visual Studio 2013
|
||||||
- Visual Studio 2015
|
- Visual Studio 2015
|
||||||
- Visual Studio 2017
|
- Visual Studio 2017
|
||||||
- Visual Studio 2019
|
- Visual Studio 2019
|
||||||
|
@ -29,11 +30,13 @@ install:
|
||||||
- set PATH=C:\Ruby24-x64\bin;%PATH%
|
- set PATH=C:\Ruby24-x64\bin;%PATH%
|
||||||
- set CMAKE_DEFINES -DASSIMP_WERROR=ON
|
- set CMAKE_DEFINES -DASSIMP_WERROR=ON
|
||||||
- if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH%
|
- if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH%
|
||||||
|
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2013" set CMAKE_GENERATOR_NAME=Visual Studio 12 2013
|
||||||
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
|
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
|
||||||
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set CMAKE_GENERATOR_NAME=Visual Studio 15 2017
|
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set CMAKE_GENERATOR_NAME=Visual Studio 15 2017
|
||||||
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" set CMAKE_GENERATOR_NAME=Visual Studio 16 2019
|
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" set CMAKE_GENERATOR_NAME=Visual Studio 16 2019
|
||||||
- cmake %CMAKE_DEFINES% -G "%CMAKE_GENERATOR_NAME%" -A %platform% .
|
- cmake %CMAKE_DEFINES% -G "%CMAKE_GENERATOR_NAME%" -A %platform% .
|
||||||
# Rename sh.exe as sh.exe in PATH interferes with MinGW
|
# Rename sh.exe as sh.exe in PATH interferes with MinGW - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
|
||||||
|
|
||||||
- rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe"
|
- rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe"
|
||||||
- set PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5"
|
- set PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5"
|
||||||
- ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/5/7/b/57b2947c-7221-4f33-b35e-2fc78cb10df4/vc_redist.x64.exe -OutFile .\packaging\windows-innosetup\vc_redist.x64.exe
|
- ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/5/7/b/57b2947c-7221-4f33-b35e-2fc78cb10df4/vc_redist.x64.exe -OutFile .\packaging\windows-innosetup\vc_redist.x64.exe
|
||||||
|
|
|
@ -63,10 +63,13 @@ if(MSVC)
|
||||||
else()
|
else()
|
||||||
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
|
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
|
||||||
if(ASSIMP_BUILD_SHARED_LIBS)
|
if(ASSIMP_BUILD_SHARED_LIBS)
|
||||||
if(APPLE)
|
if(WIN32)
|
||||||
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
# Handle MinGW compiler.
|
||||||
else(APPLE)
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
|
||||||
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
|
elseif(APPLE)
|
||||||
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
||||||
|
else()
|
||||||
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(assimp::assimp PROPERTIES
|
set_target_properties(assimp::assimp PROPERTIES
|
||||||
IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
|
IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
|
||||||
|
|
|
@ -63,10 +63,13 @@ if(MSVC)
|
||||||
else()
|
else()
|
||||||
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
|
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
|
||||||
if(ASSIMP_BUILD_SHARED_LIBS)
|
if(ASSIMP_BUILD_SHARED_LIBS)
|
||||||
if(APPLE)
|
if(WIN32)
|
||||||
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
# Handle MinGW compiler.
|
||||||
else(APPLE)
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
|
||||||
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
|
elseif(APPLE)
|
||||||
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
||||||
|
else()
|
||||||
|
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(assimp::assimp PROPERTIES
|
set_target_properties(assimp::assimp PROPERTIES
|
||||||
IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
|
IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
|
||||||
|
|
|
@ -54,11 +54,7 @@ if(_IMPORT_PREFIX STREQUAL "/")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Create imported target assimp::assimp
|
# Create imported target assimp::assimp
|
||||||
if(@BUILD_SHARED_LIBS@)
|
add_library(assimp::assimp @BUILD_LIB_TYPE@ IMPORTED)
|
||||||
add_library(assimp::assimp SHARED IMPORTED)
|
|
||||||
else()
|
|
||||||
add_library(assimp::assimp STATIC IMPORTED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(assimp::assimp PROPERTIES
|
set_target_properties(assimp::assimp PROPERTIES
|
||||||
COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
|
COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
|
||||||
|
|
|
@ -583,7 +583,7 @@ struct Image
|
||||||
/** Embedded image data */
|
/** Embedded image data */
|
||||||
std::vector<uint8_t> mImageData;
|
std::vector<uint8_t> mImageData;
|
||||||
|
|
||||||
/** File format hint ofembedded image data */
|
/** File format hint of embedded image data */
|
||||||
std::string mEmbeddedFormat;
|
std::string mEmbeddedFormat;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1735,6 +1735,7 @@ void ColladaLoader::BuildMaterials(ColladaParser& pParser, aiScene* /*pScene*/)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Resolves the texture name for the given effect texture entry
|
// Resolves the texture name for the given effect texture entry
|
||||||
|
// and loads the texture data
|
||||||
aiString ColladaLoader::FindFilenameForEffectTexture(const ColladaParser& pParser,
|
aiString ColladaLoader::FindFilenameForEffectTexture(const ColladaParser& pParser,
|
||||||
const Collada::Effect& pEffect, const std::string& pName)
|
const Collada::Effect& pEffect, const std::string& pName)
|
||||||
{
|
{
|
||||||
|
@ -1762,7 +1763,7 @@ aiString ColladaLoader::FindFilenameForEffectTexture(const ColladaParser& pParse
|
||||||
|
|
||||||
//set default texture file name
|
//set default texture file name
|
||||||
result.Set(name + ".jpg");
|
result.Set(name + ".jpg");
|
||||||
ConvertPath(result);
|
ColladaParser::UriDecodePath(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1781,7 +1782,7 @@ aiString ColladaLoader::FindFilenameForEffectTexture(const ColladaParser& pParse
|
||||||
|
|
||||||
|
|
||||||
// setup format hint
|
// setup format hint
|
||||||
if (imIt->second.mEmbeddedFormat.length() > 3) {
|
if (imIt->second.mEmbeddedFormat.length() >= HINTMAXTEXTURELEN) {
|
||||||
ASSIMP_LOG_WARN("Collada: texture format hint is too long, truncating to 3 characters");
|
ASSIMP_LOG_WARN("Collada: texture format hint is too long, truncating to 3 characters");
|
||||||
}
|
}
|
||||||
strncpy(tex->achFormatHint, imIt->second.mEmbeddedFormat.c_str(), 3);
|
strncpy(tex->achFormatHint, imIt->second.mEmbeddedFormat.c_str(), 3);
|
||||||
|
@ -1802,61 +1803,10 @@ aiString ColladaLoader::FindFilenameForEffectTexture(const ColladaParser& pParse
|
||||||
}
|
}
|
||||||
|
|
||||||
result.Set(imIt->second.mFileName);
|
result.Set(imIt->second.mFileName);
|
||||||
ConvertPath(result);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
// Convert a path read from a collada file to the usual representation
|
|
||||||
void ColladaLoader::ConvertPath(aiString& ss)
|
|
||||||
{
|
|
||||||
// TODO: collada spec, p 22. Handle URI correctly.
|
|
||||||
// For the moment we're just stripping the file:// away to make it work.
|
|
||||||
// Windows doesn't seem to be able to find stuff like
|
|
||||||
// 'file://..\LWO\LWO2\MappingModes\earthSpherical.jpg'
|
|
||||||
if (0 == strncmp(ss.data, "file://", 7))
|
|
||||||
{
|
|
||||||
ss.length -= 7;
|
|
||||||
memmove(ss.data, ss.data + 7, ss.length);
|
|
||||||
ss.data[ss.length] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Maxon Cinema Collada Export writes "file:///C:\andsoon" with three slashes...
|
|
||||||
// I need to filter it without destroying linux paths starting with "/somewhere"
|
|
||||||
#if defined( _MSC_VER )
|
|
||||||
if (ss.data[0] == '/' && isalpha((unsigned char)ss.data[1]) && ss.data[2] == ':') {
|
|
||||||
#else
|
|
||||||
if (ss.data[0] == '/' && isalpha(ss.data[1]) && ss.data[2] == ':') {
|
|
||||||
#endif
|
|
||||||
--ss.length;
|
|
||||||
::memmove(ss.data, ss.data + 1, ss.length);
|
|
||||||
ss.data[ss.length] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find and convert all %xy special chars
|
|
||||||
char* out = ss.data;
|
|
||||||
for (const char* it = ss.data; it != ss.data + ss.length; /**/)
|
|
||||||
{
|
|
||||||
if (*it == '%' && (it + 3) < ss.data + ss.length)
|
|
||||||
{
|
|
||||||
// separate the number to avoid dragging in chars from behind into the parsing
|
|
||||||
char mychar[3] = { it[1], it[2], 0 };
|
|
||||||
size_t nbr = strtoul16(mychar);
|
|
||||||
it += 3;
|
|
||||||
*out++ = (char)(nbr & 0xFF);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*out++ = *it++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// adjust length and terminator of the shortened string
|
|
||||||
*out = 0;
|
|
||||||
ss.length = (ptrdiff_t)(out - ss.data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Reads a float value from an accessor and its data array.
|
// Reads a float value from an accessor and its data array.
|
||||||
ai_real ColladaLoader::ReadFloat(const Collada::Accessor& pAccessor, const Collada::Data& pData, size_t pIndex, size_t pOffset) const
|
ai_real ColladaLoader::ReadFloat(const Collada::Accessor& pAccessor, const Collada::Data& pData, size_t pIndex, size_t pOffset) const
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
public:
|
public:
|
||||||
/** Returns whether the class can handle the format of the given file.
|
/** Returns whether the class can handle the format of the given file.
|
||||||
* See BaseImporter::CanRead() for details. */
|
* See BaseImporter::CanRead() for details. */
|
||||||
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
|
bool CanRead(const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Return importer meta information.
|
/** Return importer meta information.
|
||||||
|
@ -184,9 +184,6 @@ protected:
|
||||||
aiString FindFilenameForEffectTexture( const ColladaParser& pParser,
|
aiString FindFilenameForEffectTexture( const ColladaParser& pParser,
|
||||||
const Collada::Effect& pEffect, const std::string& pName);
|
const Collada::Effect& pEffect, const std::string& pName);
|
||||||
|
|
||||||
/** Converts a path read from a collada file to the usual representation */
|
|
||||||
void ConvertPath( aiString& ss);
|
|
||||||
|
|
||||||
/** Reads a float value from an accessor and its data array.
|
/** Reads a float value from an accessor and its data array.
|
||||||
* @param pAccessor The accessor to use for reading
|
* @param pAccessor The accessor to use for reading
|
||||||
* @param pData The data array to read from
|
* @param pData The data array to read from
|
||||||
|
|
|
@ -183,13 +183,67 @@ std::string ColladaParser::ReadZaeManifest(ZipArchiveIOSystem &zip_archive) {
|
||||||
if (filepath == nullptr)
|
if (filepath == nullptr)
|
||||||
return std::string();
|
return std::string();
|
||||||
|
|
||||||
return std::string(filepath);
|
aiString ai_str(filepath);
|
||||||
|
UriDecodePath(ai_str);
|
||||||
|
|
||||||
|
return std::string(ai_str.C_Str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Convert a path read from a collada file to the usual representation
|
||||||
|
void ColladaParser::UriDecodePath(aiString& ss)
|
||||||
|
{
|
||||||
|
// TODO: collada spec, p 22. Handle URI correctly.
|
||||||
|
// For the moment we're just stripping the file:// away to make it work.
|
||||||
|
// Windows doesn't seem to be able to find stuff like
|
||||||
|
// 'file://..\LWO\LWO2\MappingModes\earthSpherical.jpg'
|
||||||
|
if (0 == strncmp(ss.data, "file://", 7))
|
||||||
|
{
|
||||||
|
ss.length -= 7;
|
||||||
|
memmove(ss.data, ss.data + 7, ss.length);
|
||||||
|
ss.data[ss.length] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Maxon Cinema Collada Export writes "file:///C:\andsoon" with three slashes...
|
||||||
|
// I need to filter it without destroying linux paths starting with "/somewhere"
|
||||||
|
#if defined( _MSC_VER )
|
||||||
|
if (ss.data[0] == '/' && isalpha((unsigned char)ss.data[1]) && ss.data[2] == ':') {
|
||||||
|
#else
|
||||||
|
if (ss.data[0] == '/' && isalpha(ss.data[1]) && ss.data[2] == ':') {
|
||||||
|
#endif
|
||||||
|
--ss.length;
|
||||||
|
::memmove(ss.data, ss.data + 1, ss.length);
|
||||||
|
ss.data[ss.length] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find and convert all %xy special chars
|
||||||
|
char* out = ss.data;
|
||||||
|
for (const char* it = ss.data; it != ss.data + ss.length; /**/)
|
||||||
|
{
|
||||||
|
if (*it == '%' && (it + 3) < ss.data + ss.length)
|
||||||
|
{
|
||||||
|
// separate the number to avoid dragging in chars from behind into the parsing
|
||||||
|
char mychar[3] = { it[1], it[2], 0 };
|
||||||
|
size_t nbr = strtoul16(mychar);
|
||||||
|
it += 3;
|
||||||
|
*out++ = (char)(nbr & 0xFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*out++ = *it++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// adjust length and terminator of the shortened string
|
||||||
|
*out = 0;
|
||||||
|
ai_assert(out > ss.data);
|
||||||
|
ss.length = static_cast<ai_uint32>(out - ss.data);
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Read bool from text contents of current element
|
// Read bool from text contents of current element
|
||||||
bool ColladaParser::ReadBoolFromTextContent()
|
bool ColladaParser::ReadBoolFromTextContent()
|
||||||
|
@ -1120,7 +1174,12 @@ void ColladaParser::ReadImage(Collada::Image& pImage)
|
||||||
if (!mReader->isEmptyElement()) {
|
if (!mReader->isEmptyElement()) {
|
||||||
// element content is filename - hopefully
|
// element content is filename - hopefully
|
||||||
const char* sz = TestTextContent();
|
const char* sz = TestTextContent();
|
||||||
if (sz)pImage.mFileName = sz;
|
if (sz)
|
||||||
|
{
|
||||||
|
aiString filepath(sz);
|
||||||
|
UriDecodePath(filepath);
|
||||||
|
pImage.mFileName = filepath.C_Str();
|
||||||
|
}
|
||||||
TestClosing("init_from");
|
TestClosing("init_from");
|
||||||
}
|
}
|
||||||
if (!pImage.mFileName.length()) {
|
if (!pImage.mFileName.length()) {
|
||||||
|
@ -1153,7 +1212,12 @@ void ColladaParser::ReadImage(Collada::Image& pImage)
|
||||||
{
|
{
|
||||||
// element content is filename - hopefully
|
// element content is filename - hopefully
|
||||||
const char* sz = TestTextContent();
|
const char* sz = TestTextContent();
|
||||||
if (sz)pImage.mFileName = sz;
|
if (sz)
|
||||||
|
{
|
||||||
|
aiString filepath(sz);
|
||||||
|
UriDecodePath(filepath);
|
||||||
|
pImage.mFileName = filepath.C_Str();
|
||||||
|
}
|
||||||
TestClosing("ref");
|
TestClosing("ref");
|
||||||
}
|
}
|
||||||
else if (IsElement("hex") && !pImage.mFileName.length())
|
else if (IsElement("hex") && !pImage.mFileName.length())
|
||||||
|
@ -3056,7 +3120,7 @@ void ColladaParser::ReadMaterialVertexInputBinding(Collada::SemanticMappingTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assimp::ColladaParser::ReadEmbeddedTextures(ZipArchiveIOSystem& zip_archive)
|
void ColladaParser::ReadEmbeddedTextures(ZipArchiveIOSystem& zip_archive)
|
||||||
{
|
{
|
||||||
// Attempt to load any undefined Collada::Image in ImageLibrary
|
// Attempt to load any undefined Collada::Image in ImageLibrary
|
||||||
for (ImageLibrary::iterator it = mImageLibrary.begin(); it != mImageLibrary.end(); ++it) {
|
for (ImageLibrary::iterator it = mImageLibrary.begin(); it != mImageLibrary.end(); ++it) {
|
||||||
|
|
|
@ -66,12 +66,15 @@ namespace Assimp
|
||||||
{
|
{
|
||||||
friend class ColladaLoader;
|
friend class ColladaLoader;
|
||||||
|
|
||||||
|
/** Converts a path read from a collada file to the usual representation */
|
||||||
|
static void UriDecodePath(aiString& ss);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Map for generic metadata as aiString */
|
/** Map for generic metadata as aiString */
|
||||||
typedef std::map<std::string, aiString> StringMetaData;
|
typedef std::map<std::string, aiString> StringMetaData;
|
||||||
|
|
||||||
/** Constructor from XML file */
|
/** Constructor from XML file */
|
||||||
ColladaParser( IOSystem* pIOHandler, const std::string& pFile);
|
ColladaParser(IOSystem* pIOHandler, const std::string& pFile);
|
||||||
|
|
||||||
/** Destructor */
|
/** Destructor */
|
||||||
~ColladaParser();
|
~ColladaParser();
|
||||||
|
|
|
@ -46,8 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/scene.h>
|
#include <assimp/scene.h>
|
||||||
#include "ScenePrivate.h"
|
#include "ScenePrivate.h"
|
||||||
|
|
||||||
static const unsigned int MajorVersion = 5;
|
#include "revision.h"
|
||||||
static const unsigned int MinorVersion = 0;
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
// Legal information string - don't remove this.
|
// Legal information string - don't remove this.
|
||||||
|
@ -56,9 +55,9 @@ static const char* LEGAL_INFORMATION =
|
||||||
"Open Asset Import Library (Assimp).\n"
|
"Open Asset Import Library (Assimp).\n"
|
||||||
"A free C/C++ library to import various 3D file formats into applications\n\n"
|
"A free C/C++ library to import various 3D file formats into applications\n\n"
|
||||||
|
|
||||||
"(c) 2008-2017, assimp team\n"
|
"(c) 2006-2019, assimp team\n"
|
||||||
"License under the terms and conditions of the 3-clause BSD license\n"
|
"License under the terms and conditions of the 3-clause BSD license\n"
|
||||||
"http://assimp.sourceforge.net\n"
|
"http://assimp.org\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -70,13 +69,13 @@ ASSIMP_API const char* aiGetLegalString () {
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get Assimp minor version
|
// Get Assimp minor version
|
||||||
ASSIMP_API unsigned int aiGetVersionMinor () {
|
ASSIMP_API unsigned int aiGetVersionMinor () {
|
||||||
return MinorVersion;
|
return VER_MINOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get Assimp major version
|
// Get Assimp major version
|
||||||
ASSIMP_API unsigned int aiGetVersionMajor () {
|
ASSIMP_API unsigned int aiGetVersionMajor () {
|
||||||
return MajorVersion;
|
return VER_MAJOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -104,9 +103,6 @@ ASSIMP_API unsigned int aiGetCompileFlags () {
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
// include current build revision, which is even updated from time to time -- :-)
|
|
||||||
#include "revision.h"
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
ASSIMP_API unsigned int aiGetVersionRevision() {
|
ASSIMP_API unsigned int aiGetVersionRevision() {
|
||||||
return GitVersion;
|
return GitVersion;
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace Assimp {
|
||||||
|
|
||||||
#define MAGIC_NODE_TAG "_$AssimpFbx$"
|
#define MAGIC_NODE_TAG "_$AssimpFbx$"
|
||||||
|
|
||||||
#define CONVERT_FBX_TIME(time) static_cast<double>(time) / 46186158000L
|
#define CONVERT_FBX_TIME(time) static_cast<double>(time) / 46186158000LL
|
||||||
|
|
||||||
FBXConverter::FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones )
|
FBXConverter::FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones )
|
||||||
: defaultMaterialIndex()
|
: defaultMaterialIndex()
|
||||||
|
|
|
@ -320,7 +320,9 @@ void glTF2Exporter::GetMatTex(const aiMaterial* mat, Ref<Texture>& texture, aiTe
|
||||||
if (path[0] == '*') { // embedded
|
if (path[0] == '*') { // embedded
|
||||||
aiTexture* tex = mScene->mTextures[atoi(&path[1])];
|
aiTexture* tex = mScene->mTextures[atoi(&path[1])];
|
||||||
|
|
||||||
uint8_t* data = reinterpret_cast<uint8_t*>(tex->pcData);
|
// copy data since lifetime control is handed over to the asset
|
||||||
|
uint8_t* data = new uint8_t[tex->mWidth];
|
||||||
|
memcpy(data, tex->pcData, tex->mWidth);
|
||||||
texture->source->SetData(data, tex->mWidth, *mAsset);
|
texture->source->SetData(data, tex->mWidth, *mAsset);
|
||||||
|
|
||||||
if (tex->achFormatHint[0]) {
|
if (tex->achFormatHint[0]) {
|
||||||
|
|
|
@ -128,16 +128,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
* GENBOUNDINGBOXES */
|
* GENBOUNDINGBOXES */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _WIN32
|
||||||
# undef ASSIMP_API
|
# undef ASSIMP_API
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */
|
/* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
# ifdef ASSIMP_BUILD_DLL_EXPORT
|
# ifdef ASSIMP_BUILD_DLL_EXPORT
|
||||||
# define ASSIMP_API __declspec(dllexport)
|
# define ASSIMP_API __declspec(dllexport)
|
||||||
# define ASSIMP_API_WINONLY __declspec(dllexport)
|
# define ASSIMP_API_WINONLY __declspec(dllexport)
|
||||||
# pragma warning (disable : 4251)
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in
|
/* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in
|
||||||
|
@ -150,7 +148,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
# define ASSIMP_API
|
# define ASSIMP_API
|
||||||
# define ASSIMP_API_WINONLY
|
# define ASSIMP_API_WINONLY
|
||||||
# endif
|
# endif
|
||||||
|
#elif defined(SWIG)
|
||||||
|
|
||||||
|
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define ASSIMP_API __attribute__ ((visibility("default")))
|
||||||
|
# define ASSIMP_API_WINONLY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# ifdef ASSIMP_BUILD_DLL_EXPORT
|
||||||
|
# pragma warning (disable : 4251)
|
||||||
|
# endif
|
||||||
/* Force the compiler to inline a function, if possible
|
/* Force the compiler to inline a function, if possible
|
||||||
*/
|
*/
|
||||||
# define AI_FORCE_INLINE __forceinline
|
# define AI_FORCE_INLINE __forceinline
|
||||||
|
@ -158,17 +168,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
/* Tells the compiler that a function never returns. Used in code analysis
|
/* Tells the compiler that a function never returns. Used in code analysis
|
||||||
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
||||||
# define AI_WONT_RETURN __declspec(noreturn)
|
# define AI_WONT_RETURN __declspec(noreturn)
|
||||||
|
|
||||||
#elif defined(SWIG)
|
#elif defined(SWIG)
|
||||||
|
|
||||||
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# define AI_WONT_RETURN
|
# define AI_WONT_RETURN
|
||||||
|
|
||||||
# define ASSIMP_API __attribute__ ((visibility("default")))
|
|
||||||
# define ASSIMP_API_WINONLY
|
|
||||||
# define AI_FORCE_INLINE inline
|
# define AI_FORCE_INLINE inline
|
||||||
#endif // (defined _MSC_VER)
|
#endif // (defined _MSC_VER)
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "AbstractImportExportBase.h"
|
#include "AbstractImportExportBase.h"
|
||||||
|
|
||||||
#include <assimp/Importer.hpp>
|
#include <assimp/Importer.hpp>
|
||||||
|
#include <assimp/scene.h>
|
||||||
#include <assimp/postprocess.h>
|
#include <assimp/postprocess.h>
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
@ -52,8 +53,19 @@ class utColladaImportExport : public AbstractImportExportBase {
|
||||||
public:
|
public:
|
||||||
virtual bool importerTest() {
|
virtual bool importerTest() {
|
||||||
Assimp::Importer importer;
|
Assimp::Importer importer;
|
||||||
const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/Collada/duck.dae", aiProcess_ValidateDataStructure );
|
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/duck.dae", aiProcess_ValidateDataStructure);
|
||||||
return nullptr != scene;
|
if (scene == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Expected number of items
|
||||||
|
EXPECT_EQ(scene->mNumMeshes, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumMaterials, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumAnimations, 0u);
|
||||||
|
EXPECT_EQ(scene->mNumTextures, 0u);
|
||||||
|
EXPECT_EQ(scene->mNumLights, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumCameras, 1u);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -64,9 +76,37 @@ TEST_F(utColladaImportExport, importBlenFromFileTest) {
|
||||||
class utColladaZaeImportExport : public AbstractImportExportBase {
|
class utColladaZaeImportExport : public AbstractImportExportBase {
|
||||||
public:
|
public:
|
||||||
virtual bool importerTest() {
|
virtual bool importerTest() {
|
||||||
Assimp::Importer importer;
|
{
|
||||||
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/duck.zae", aiProcess_ValidateDataStructure);
|
Assimp::Importer importer;
|
||||||
return nullptr != scene;
|
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/duck.zae", aiProcess_ValidateDataStructure);
|
||||||
|
if (scene == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Expected number of items
|
||||||
|
EXPECT_EQ(scene->mNumMeshes, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumMaterials, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumAnimations, 0u);
|
||||||
|
EXPECT_EQ(scene->mNumTextures, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumLights, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumCameras, 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Assimp::Importer importer;
|
||||||
|
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/duck_nomanifest.zae", aiProcess_ValidateDataStructure);
|
||||||
|
if (scene == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Expected number of items
|
||||||
|
EXPECT_EQ(scene->mNumMeshes, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumMaterials, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumAnimations, 0u);
|
||||||
|
EXPECT_EQ(scene->mNumTextures, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumLights, 1u);
|
||||||
|
EXPECT_EQ(scene->mNumCameras, 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ TEST_F( utVersion, aiGetLegalStringTest ) {
|
||||||
EXPECT_NE( lv, nullptr );
|
EXPECT_NE( lv, nullptr );
|
||||||
std::string text( lv );
|
std::string text( lv );
|
||||||
|
|
||||||
size_t pos( text.find( std::string( "2017" ) ) );
|
size_t pos( text.find( std::string( "2019" ) ) );
|
||||||
EXPECT_NE( pos, std::string::npos );
|
EXPECT_NE( pos, std::string::npos );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue