Merge branch 'master' into fix_assimp_export_consistency
This commit is contained in:
@@ -68,7 +68,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
using namespace Assimp;
|
||||
|
||||
static const aiImporterDesc desc = {
|
||||
".assbin Importer",
|
||||
"Assimp Binary Importer",
|
||||
"Gargaj / Conspiracy",
|
||||
"",
|
||||
"",
|
||||
|
||||
@@ -145,6 +145,10 @@ SET( Core_SRCS
|
||||
Assimp.cpp
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
list(APPEND Core_SRCS "res/assimp.rc")
|
||||
ENDIF(MSVC)
|
||||
|
||||
SET( Logging_SRCS
|
||||
${HEADER_PATH}/DefaultLogger.hpp
|
||||
${HEADER_PATH}/LogStream.hpp
|
||||
@@ -800,6 +804,18 @@ ADD_ASSIMP_IMPORTER( MMD
|
||||
MMDVmdParser.h
|
||||
)
|
||||
|
||||
# Workaround for issue #2406 - force problematic large file to be optimized to prevent string table overflow error
|
||||
# Used -Os instead of -O2 as previous issues had mentioned, since -Os is roughly speaking -O2, excluding any
|
||||
# optimizations that take up extra space. Given that the issue is a string table overflowing, -Os seemed appropriate
|
||||
# Also, I'm not positive if both link & compile flags are needed, but this hopefully ensures that the issue should not
|
||||
# recur for edge cases such as static builds.
|
||||
if ((CMAKE_COMPILER_IS_MINGW) AND (CMAKE_BUILD_TYPE MATCHES Debug))
|
||||
message("-- Applying MinGW StepFileGen1.cpp Debug Workaround")
|
||||
SET_SOURCE_FILES_PROPERTIES(Importer/StepFile/StepFileGen1.cpp PROPERTIES COMPILE_FLAGS -Os )
|
||||
SET_SOURCE_FILES_PROPERTIES(Importer/StepFile/StepFileGen1.cpp PROPERTIES LINK_FLAGS -Os )
|
||||
SET_SOURCE_FILES_PROPERTIES(Importer/StepFile/StepFileGen1.cpp PROPERTIES STATIC_LIBRARY_FLAGS -Os )
|
||||
endif()
|
||||
|
||||
ADD_ASSIMP_IMPORTER( STEP
|
||||
STEPFile.h
|
||||
Importer/StepFile/StepFileImporter.h
|
||||
@@ -1033,6 +1049,10 @@ ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
|
||||
|
||||
if( MSVC )
|
||||
# in order to prevent DLL hell, each of the DLLs have to be suffixed with the major version and msvc prefix
|
||||
# CMake 3.12 added a variable for this
|
||||
if(MSVC_TOOLSET_VERSION)
|
||||
set(MSVC_PREFIX "vc${MSVC_TOOLSET_VERSION}")
|
||||
else()
|
||||
if( MSVC70 OR MSVC71 )
|
||||
set(MSVC_PREFIX "vc70")
|
||||
elseif( MSVC80 )
|
||||
@@ -1047,9 +1067,12 @@ if( MSVC )
|
||||
set(MSVC_PREFIX "vc120")
|
||||
elseif( MSVC14 )
|
||||
set(MSVC_PREFIX "vc140")
|
||||
elseif( MSVC15 )
|
||||
set(MSVC_PREFIX "vc141")
|
||||
else()
|
||||
set(MSVC_PREFIX "vc150")
|
||||
endif()
|
||||
endif()
|
||||
set(LIBRARY_SUFFIX "${ASSIMP_LIBRARY_SUFFIX}-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library")
|
||||
endif()
|
||||
|
||||
|
||||
@@ -238,7 +238,11 @@ void ColladaExporter::WriteHeader()
|
||||
mOutput << startstr << "<contributor>" << endstr;
|
||||
PushTag();
|
||||
|
||||
aiMetadata* meta = mScene->mRootNode->mMetaData;
|
||||
// If no Scene metadata, use root node metadata
|
||||
aiMetadata* meta = mScene->mMetaData;
|
||||
if (!meta)
|
||||
meta = mScene->mRootNode->mMetaData;
|
||||
|
||||
aiString value;
|
||||
if (!meta || !meta->Get("Author", value))
|
||||
mOutput << startstr << "<author>" << "Assimp" << "</author>" << endstr;
|
||||
@@ -250,13 +254,39 @@ void ColladaExporter::WriteHeader()
|
||||
else
|
||||
mOutput << startstr << "<authoring_tool>" << XMLEscape(value.C_Str()) << "</authoring_tool>" << endstr;
|
||||
|
||||
//mOutput << startstr << "<author>" << mScene->author.C_Str() << "</author>" << endstr;
|
||||
//mOutput << startstr << "<authoring_tool>" << mScene->authoringTool.C_Str() << "</authoring_tool>" << endstr;
|
||||
if (meta)
|
||||
{
|
||||
if (meta->Get("Comments", value))
|
||||
mOutput << startstr << "<comments>" << XMLEscape(value.C_Str()) << "</comments>" << endstr;
|
||||
if (meta->Get("Copyright", value))
|
||||
mOutput << startstr << "<copyright>" << XMLEscape(value.C_Str()) << "</copyright>" << endstr;
|
||||
if (meta->Get("SourceData", value))
|
||||
mOutput << startstr << "<source_data>" << XMLEscape(value.C_Str()) << "</source_data>" << endstr;
|
||||
}
|
||||
|
||||
PopTag();
|
||||
mOutput << startstr << "</contributor>" << endstr;
|
||||
mOutput << startstr << "<created>" << date_str << "</created>" << endstr;
|
||||
|
||||
if (!meta || !meta->Get("Created", value))
|
||||
mOutput << startstr << "<created>" << date_str << "</created>" << endstr;
|
||||
else
|
||||
mOutput << startstr << "<created>" << XMLEscape(value.C_Str()) << "</created>" << endstr;
|
||||
|
||||
// Modified date is always the date saved
|
||||
mOutput << startstr << "<modified>" << date_str << "</modified>" << endstr;
|
||||
|
||||
if (meta)
|
||||
{
|
||||
if (meta->Get("Keywords", value))
|
||||
mOutput << startstr << "<keywords>" << XMLEscape(value.C_Str()) << "</keywords>" << endstr;
|
||||
if (meta->Get("Revision", value))
|
||||
mOutput << startstr << "<revision>" << XMLEscape(value.C_Str()) << "</revision>" << endstr;
|
||||
if (meta->Get("Subject", value))
|
||||
mOutput << startstr << "<subject>" << XMLEscape(value.C_Str()) << "</subject>" << endstr;
|
||||
if (meta->Get("Title", value))
|
||||
mOutput << startstr << "<title>" << XMLEscape(value.C_Str()) << "</title>" << endstr;
|
||||
}
|
||||
|
||||
mOutput << startstr << "<unit name=\"meter\" meter=\"" << scale << "\" />" << endstr;
|
||||
mOutput << startstr << "<up_axis>" << up_axis << "</up_axis>" << endstr;
|
||||
PopTag();
|
||||
|
||||
@@ -207,6 +207,17 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I
|
||||
0, 0, 0, 1);
|
||||
}
|
||||
|
||||
// Store scene metadata
|
||||
if (!parser.mAssetMetaData.empty()) {
|
||||
const size_t numMeta(parser.mAssetMetaData.size());
|
||||
pScene->mMetaData = aiMetadata::Alloc(static_cast<unsigned int>(numMeta));
|
||||
size_t i = 0;
|
||||
for (auto it = parser.mAssetMetaData.cbegin(); it != parser.mAssetMetaData.cend(); ++it, ++i)
|
||||
{
|
||||
pScene->mMetaData->Set(static_cast<unsigned int>(i), (*it).first, (*it).second);
|
||||
}
|
||||
}
|
||||
|
||||
// store all meshes
|
||||
StoreSceneMeshes( pScene);
|
||||
|
||||
|
||||
@@ -264,14 +264,19 @@ void ColladaParser::ReadAssetInfo()
|
||||
|
||||
// check element end
|
||||
TestClosing( "up_axis");
|
||||
} else
|
||||
}
|
||||
else if(IsElement("contributor"))
|
||||
{
|
||||
SkipElement();
|
||||
ReadContributorInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
ReadMetaDataItem(mAssetMetaData);
|
||||
}
|
||||
}
|
||||
else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
|
||||
{
|
||||
if( strcmp( mReader->getNodeName(), "asset") != 0)
|
||||
if (strcmp( mReader->getNodeName(), "asset") != 0)
|
||||
ThrowException( "Expected end of <asset> element.");
|
||||
|
||||
break;
|
||||
@@ -279,6 +284,75 @@ void ColladaParser::ReadAssetInfo()
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Reads the contributor info
|
||||
void ColladaParser::ReadContributorInfo()
|
||||
{
|
||||
if (mReader->isEmptyElement())
|
||||
return;
|
||||
|
||||
while (mReader->read())
|
||||
{
|
||||
if (mReader->getNodeType() == irr::io::EXN_ELEMENT)
|
||||
{
|
||||
ReadMetaDataItem(mAssetMetaData);
|
||||
}
|
||||
else if (mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
|
||||
{
|
||||
if (strcmp(mReader->getNodeName(), "contributor") != 0)
|
||||
ThrowException("Expected end of <contributor> element.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Reads a single string metadata item
|
||||
void ColladaParser::ReadMetaDataItem(StringMetaData &metadata)
|
||||
{
|
||||
// Metadata such as created, keywords, subject etc
|
||||
const char* key_char = mReader->getNodeName();
|
||||
if (key_char != nullptr)
|
||||
{
|
||||
const std::string key_str(key_char);
|
||||
const char* value_char = TestTextContent();
|
||||
if (value_char != nullptr)
|
||||
{
|
||||
std::string camel_key_str = key_str;
|
||||
ToCamelCase(camel_key_str);
|
||||
aiString aistr;
|
||||
aistr.Set(value_char);
|
||||
metadata.emplace(camel_key_str, aistr);
|
||||
TestClosing(key_str.c_str());
|
||||
}
|
||||
else
|
||||
SkipElement();
|
||||
}
|
||||
else
|
||||
SkipElement();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Convert underscore_seperated to CamelCase: "authoring_tool" becomes "AuthoringTool"
|
||||
void ColladaParser::ToCamelCase(std::string &text)
|
||||
{
|
||||
if (text.empty())
|
||||
return;
|
||||
// Capitalise first character
|
||||
text[0] = ToUpper(text[0]);
|
||||
for (auto it = text.begin(); it != text.end(); /*iterated below*/)
|
||||
{
|
||||
if ((*it) == '_')
|
||||
{
|
||||
it = text.erase(it);
|
||||
if (it != text.end())
|
||||
(*it) = ToUpper(*it);
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Reads the animation clips
|
||||
void ColladaParser::ReadAnimationClipLibrary()
|
||||
|
||||
@@ -66,6 +66,9 @@ namespace Assimp
|
||||
friend class ColladaLoader;
|
||||
|
||||
protected:
|
||||
/** Map for generic metadata as aiString */
|
||||
typedef std::map<std::string, aiString> StringMetaData;
|
||||
|
||||
/** Constructor from XML file */
|
||||
ColladaParser( IOSystem* pIOHandler, const std::string& pFile);
|
||||
|
||||
@@ -81,6 +84,15 @@ namespace Assimp
|
||||
/** Reads asset information such as coordinate system information and legal blah */
|
||||
void ReadAssetInfo();
|
||||
|
||||
/** Reads contributor information such as author and legal blah */
|
||||
void ReadContributorInfo();
|
||||
|
||||
/** Reads generic metadata into provided map */
|
||||
void ReadMetaDataItem(StringMetaData &metadata);
|
||||
|
||||
/** Convert underscore_seperated to CamelCase "authoring_tool" becomes "AuthoringTool" */
|
||||
static void ToCamelCase(std::string &text);
|
||||
|
||||
/** Reads the animation library */
|
||||
void ReadAnimationLibrary();
|
||||
|
||||
@@ -343,6 +355,9 @@ namespace Assimp
|
||||
/** Which is the up vector */
|
||||
enum { UP_X, UP_Y, UP_Z } mUpDirection;
|
||||
|
||||
/** Asset metadata (global for scene) */
|
||||
StringMetaData mAssetMetaData;
|
||||
|
||||
/** Collada file format version */
|
||||
Collada::FormatVersion mFormat;
|
||||
};
|
||||
|
||||
@@ -288,7 +288,7 @@ void Exporter::SetProgressHandler(ProgressHandler* pHandler) {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const char* pFormatId,
|
||||
unsigned int, const ExportProperties* /*pProperties*/ ) {
|
||||
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
||||
if (pimpl->blob) {
|
||||
delete pimpl->blob;
|
||||
pimpl->blob = nullptr;
|
||||
@@ -298,7 +298,7 @@ const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const cha
|
||||
BlobIOSystem* blobio = new BlobIOSystem();
|
||||
pimpl->mIOSystem = std::shared_ptr<IOSystem>( blobio );
|
||||
|
||||
if (AI_SUCCESS != Export(pScene,pFormatId,blobio->GetMagicFileName())) {
|
||||
if (AI_SUCCESS != Export(pScene,pFormatId,blobio->GetMagicFileName(), pPreprocessing, pProperties)) {
|
||||
pimpl->mIOSystem = old;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ void ObjFileParser::parseFile( IOStreamBuffer<char> &streamBuffer ) {
|
||||
} else if (*m_DataIt == 't') {
|
||||
// read in texture coordinate ( 2D or 3D )
|
||||
++m_DataIt;
|
||||
size_t dim = getVector(m_pModel->m_TextureCoord);
|
||||
size_t dim = getTexCoordVector(m_pModel->m_TextureCoord);
|
||||
m_pModel->m_TextureCoordDim = std::max(m_pModel->m_TextureCoordDim, (unsigned int)dim);
|
||||
} else if (*m_DataIt == 'n') {
|
||||
// Read in normal vector definition
|
||||
@@ -272,6 +272,17 @@ static bool isDataDefinitionEnd( const char *tmp ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isNanOrInf(const char * in) {
|
||||
// Look for "nan" or "inf", case insensitive
|
||||
if ((in[0] == 'N' || in[0] == 'n') && ASSIMP_strincmp(in, "nan", 3) == 0) {
|
||||
return true;
|
||||
}
|
||||
else if ((in[0] == 'I' || in[0] == 'i') && ASSIMP_strincmp(in, "inf", 3) == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t ObjFileParser::getNumComponentsInDataDefinition() {
|
||||
size_t numComponents( 0 );
|
||||
const char* tmp( &m_DataIt[0] );
|
||||
@@ -285,7 +296,7 @@ size_t ObjFileParser::getNumComponentsInDataDefinition() {
|
||||
if ( !SkipSpaces( &tmp ) ) {
|
||||
break;
|
||||
}
|
||||
const bool isNum( IsNumeric( *tmp ) );
|
||||
const bool isNum( IsNumeric( *tmp ) || isNanOrInf(tmp));
|
||||
SkipToken( tmp );
|
||||
if ( isNum ) {
|
||||
++numComponents;
|
||||
@@ -297,7 +308,7 @@ size_t ObjFileParser::getNumComponentsInDataDefinition() {
|
||||
return numComponents;
|
||||
}
|
||||
|
||||
size_t ObjFileParser::getVector( std::vector<aiVector3D> &point3d_array ) {
|
||||
size_t ObjFileParser::getTexCoordVector( std::vector<aiVector3D> &point3d_array ) {
|
||||
size_t numComponents = getNumComponentsInDataDefinition();
|
||||
ai_real x, y, z;
|
||||
if( 2 == numComponents ) {
|
||||
@@ -319,6 +330,17 @@ size_t ObjFileParser::getVector( std::vector<aiVector3D> &point3d_array ) {
|
||||
} else {
|
||||
throw DeadlyImportError( "OBJ: Invalid number of components" );
|
||||
}
|
||||
|
||||
// Coerce nan and inf to 0 as is the OBJ default value
|
||||
if (!std::isfinite(x))
|
||||
x = 0;
|
||||
|
||||
if (!std::isfinite(y))
|
||||
y = 0;
|
||||
|
||||
if (!std::isfinite(z))
|
||||
z = 0;
|
||||
|
||||
point3d_array.push_back( aiVector3D( x, y, z ) );
|
||||
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
|
||||
return numComponents;
|
||||
|
||||
@@ -96,7 +96,7 @@ protected:
|
||||
/// Get the number of components in a line.
|
||||
size_t getNumComponentsInDataDefinition();
|
||||
/// Stores the vector
|
||||
size_t getVector( std::vector<aiVector3D> &point3d_array );
|
||||
size_t getTexCoordVector( std::vector<aiVector3D> &point3d_array );
|
||||
/// Stores the following 3d vector.
|
||||
void getVector3( std::vector<aiVector3D> &point3d_array );
|
||||
/// Stores the following homogeneous vector as a 3D vector
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
### USE OF THIS MAKEFILE IS NOT RECOMMENDED.
|
||||
### It is no longer maintained. Use CMAKE instead.
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Makefile for Open Asset Import Library (MinGW32-make)
|
||||
# aramis_acg@users.sourceforge.net
|
||||
# - just a quick'n'dirty one, could be buggy ...
|
||||
#
|
||||
# Usage: mingw32-make -f makefile.mingw <target> <macros>
|
||||
|
||||
# TARGETS:
|
||||
# all Build a shared so from the whole library
|
||||
# clean Cleanup object files, prepare for rebuild
|
||||
# static Build a static library (*.a)
|
||||
|
||||
# MACROS: (make clean before you change one)
|
||||
# NOBOOST=1 Build against boost workaround
|
||||
# SINGLETHREADED=1 Build single-threaded library
|
||||
# DEBUG=1 Build debug build of library
|
||||
#
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# C++ object files
|
||||
OBJECTS := $(patsubst %.cpp,%.o, $(wildcard *.cpp))
|
||||
OBJECTS += $(patsubst %.cpp,%.o, $(wildcard extra/*.cpp))
|
||||
OBJECTS += $(patsubst %.cpp,%.o, $(wildcard ./../contrib/irrXML/*.cpp))
|
||||
|
||||
# C object files
|
||||
OBJECTSC := $(patsubst %.c,%.oc, $(wildcard ./../contrib/zlib/*.c))
|
||||
OBJECTSC += $(patsubst %.c,%.oc, $(wildcard ./../contrib/ConvertUTF/*.c))
|
||||
OBJECTSC += $(patsubst %.c,%.oc, $(wildcard ./../contrib/unzip/*.c))
|
||||
|
||||
# Include flags for gcc
|
||||
INCLUDEFLAGS =
|
||||
|
||||
# Preprocessor defines for gcc
|
||||
DEFINEFLAGS =
|
||||
|
||||
# Suffix for the output binary, represents build type
|
||||
NAMESUFFIX =
|
||||
|
||||
# Output path for binaries
|
||||
BINPATH = ../bin/mingw/
|
||||
|
||||
# GCC compiler flags
|
||||
CPPFLAGS=-Wall
|
||||
|
||||
# Setup environment for noboost build
|
||||
ifeq ($(NOBOOST),1)
|
||||
SINGLETHREADED = 1
|
||||
INCLUDEFLAGS += -I./BoostWorkaround/
|
||||
DEFINEFLAGS += -DASSIMP_BUILD_BOOST_WORKAROUND
|
||||
# NAMESUFFIX += -noboost
|
||||
else
|
||||
# adjust this manually if your boost is stored elsewhere
|
||||
INCLUDEFLAGS += -I"C:/Program Files/boost/boost_1_38"
|
||||
#INCLUDEFLAGS += -I"$(BOOST_DIR)"
|
||||
|
||||
endif
|
||||
|
||||
# Setup environment for st build
|
||||
ifeq ($(SINGLETHREADED),1)
|
||||
DEFINEFLAGS += -DASSIMP_BUILD_SINGLETHREADED
|
||||
# NAMESUFFIX += -st
|
||||
endif
|
||||
|
||||
# Setup environment for debug build
|
||||
ifeq ($(DEBUG),1)
|
||||
DEFINEFLAGS += -D_DEBUG -DDEBUG
|
||||
CPPFLAGS += -g
|
||||
# NAMESUFFIX += -debug
|
||||
else
|
||||
CPPFLAGS += -O2 -s
|
||||
DEFINEFLAGS += -DNDEBUG -D_NDEBUG
|
||||
endif
|
||||
|
||||
# Output name of shared library
|
||||
SHARED_TARGET = $(BINPATH)/libassimp$(NAMESUFFIX).so
|
||||
|
||||
# Output name of static library
|
||||
STATIC = $(BINPATH)/libassimp$(NAMESUFFIX).a
|
||||
|
||||
# target: all
|
||||
# usage : build a shared library (*.so)
|
||||
all: $(SHARED_TARGET)
|
||||
|
||||
$(SHARED_TARGET): $(OBJECTS) $(OBJECTSC)
|
||||
gcc -o $@ $(OBJECTS) $(OBJECTSC) -shared -lstdc++
|
||||
%.o:%.cpp
|
||||
$(CXX) -c $(CPPFLAGS) $? -o $@ $(INCLUDEFLAGS) $(DEFINEFLAGS)
|
||||
%.oc:%.c
|
||||
$(CXX) -x c -c -ansi $(CPPFLAGS) $? -o $@
|
||||
|
||||
# target: clean
|
||||
# usage : cleanup all object files, prepare for a rebuild
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-del *.o .\..\contrib\irrXML\*.o .\..\contrib\zlib\*.oc .\..\contrib\unzip\*.oc .\..\contrib\ConvertUTF\*.oc
|
||||
|
||||
# target: static
|
||||
# usage : build a static library (*.a)
|
||||
static: $(STATIC)
|
||||
$(STATIC): $(OBJECTS) $(OBJECTSC)
|
||||
ar rcs $@ $(OBJECTS) $(OBJECTSC)
|
||||
|
||||
@@ -31,8 +31,8 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,1,SVNRevision, 0
|
||||
PRODUCTVERSION 1,1,SVNRevision,0
|
||||
FILEVERSION VER_FILEVERSION
|
||||
PRODUCTVERSION VER_FILEVERSION
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@@ -50,12 +50,12 @@ BEGIN
|
||||
VALUE "Comments", "Licensed under a 3-clause BSD license"
|
||||
VALUE "CompanyName", "assimp team"
|
||||
VALUE "FileDescription", "Open Asset Import Library"
|
||||
VALUE "FileVersion", 1,1,SVNRevision,0
|
||||
VALUE "FileVersion", VER_FILEVERSION
|
||||
VALUE "InternalName", "assimp "
|
||||
VALUE "LegalCopyright", "Copyright (C) 2006-2010"
|
||||
VALUE "OriginalFilename", "assimpNN.dll"
|
||||
VALUE "ProductName", "Open Asset Import Library"
|
||||
VALUE "ProductVersion", 1,1,SVNRevision,0
|
||||
VALUE "ProductVersion", VER_FILEVERSION_STR
|
||||
,0
|
||||
END
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user