- Update : Apply simple patch for debian-specific build-fixes: adapt architecture-macro.

- Bugfix : Fix a type in FixNormalStep.
- Bugfix : Fix a missing exception in Obj-Importer, texture coordinate import.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1079 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/2/head
kimmi 2011-09-23 16:45:17 +00:00
parent 487071be77
commit d5bd7009a6
4 changed files with 57 additions and 65 deletions

View File

@ -51,7 +51,7 @@ namespace Assimp
{ {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** The FixInfacingNormalsProcess tries to deteermine whether the normal /** The FixInfacingNormalsProcess tries to determine whether the normal
* vectors of an object are facing inwards. In this case they will be * vectors of an object are facing inwards. In this case they will be
* flipped. * flipped.
*/ */

View File

@ -528,26 +528,34 @@ void WriteLogOpening(const std::string& file)
<< "." << "."
<< aiGetVersionRevision() << aiGetVersionRevision()
#if defined(ASSIMP_BUILD_X86_32BIT_ARCHITECTURE) << " "
<< " x86" #if defined(ASSIMP_BUILD_ARCHITECTURE)
#elif defined(ASSIMP_BUILD_X86_64BIT_ARCHITECTURE) << ASSIMP_BUILD_ARCHITECTURE
<< " amd64" #elif defined(_M_IX86) || defined(__x86_32__) || defined(__i386__)
#elif defined(ASSIMP_BUILD_IA_64BIT_ARCHITECTURE) << "x86"
<< " itanium" #elif defined(_M_X64) || defined(__x86_64__)
#elif defined(ASSIMP_BUILD_PPC_32BIT_ARCHITECTURE) << "amd64"
<< " ppc32" #elif defined(_M_IA64) || defined(__ia64__)
#elif defined(ASSIMP_BUILD_ARM_32BIT_ARCHITECTURE) << "itanium"
<< " arm" #elif defined(__ppc__) || defined(__powerpc__)
<< "ppc32"
#elif defined(__powerpc64__)
<< "ppc64"
#elif defined(__arm__)
<< "arm"
#else #else
# error unknown architecture << "<unknown architecture>"
#endif #endif
#if defined(_MSC_VER) << " "
<< " msvc" #if defined(ASSIMP_BUILD_COMPILER)
<< ASSIMP_BUILD_COMPILER
#elif defined(_MSC_VER)
<< "msvc"
#elif defined(__GNUC__) #elif defined(__GNUC__)
<< " gcc" << "gcc"
#else #else
# error unknown compiler << "<unknown compiler>"
#endif #endif
#ifndef NDEBUG #ifndef NDEBUG

View File

@ -96,12 +96,12 @@ void ObjFileImporter::InternReadFile( const std::string& pFile, aiScene* pScene,
DefaultIOSystem io; DefaultIOSystem io;
// Read file into memory // Read file into memory
const std::string mode = "rb"; const std::string mode = "rb";
boost::scoped_ptr<IOStream> file( pIOHandler->Open( pFile, mode)); boost::scoped_ptr<IOStream> file( pIOHandler->Open( pFile, mode));
if (NULL == file.get()) if (NULL == file.get())
throw DeadlyImportError( "Failed to open file " + pFile + "."); throw DeadlyImportError( "Failed to open file " + pFile + ".");
// Get the filesize and vaslidate it, throwing an exception when failes // Get the file-size and validate it, throwing an exception when fails
size_t fileSize = file->FileSize(); size_t fileSize = file->FileSize();
if( fileSize < 16) if( fileSize < 16)
throw DeadlyImportError( "OBJ-file is too small."); throw DeadlyImportError( "OBJ-file is too small.");
@ -189,10 +189,10 @@ aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile
pNode->mName = pObject->m_strObjName; pNode->mName = pObject->m_strObjName;
// If we have a parent node, store it
if (pParent != NULL) if (pParent != NULL)
appendChildToParentNode(pParent, pNode); appendChildToParentNode(pParent, pNode);
for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ ) for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ )
{ {
unsigned int meshId = pObject->m_Meshes[ i ]; unsigned int meshId = pObject->m_Meshes[ i ];
@ -358,9 +358,8 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel,
for ( size_t vertexIndex = 0, outVertexIndex = 0; vertexIndex < pSourceFace->m_pVertices->size(); vertexIndex++ ) for ( size_t vertexIndex = 0, outVertexIndex = 0; vertexIndex < pSourceFace->m_pVertices->size(); vertexIndex++ )
{ {
const unsigned int vertex = pSourceFace->m_pVertices->at( vertexIndex ); const unsigned int vertex = pSourceFace->m_pVertices->at( vertexIndex );
if (vertex >= pModel->m_Vertices.size()) { if ( vertex >= pModel->m_Vertices.size() )
throw DeadlyImportError("OBJ: vertex index out of range"); throw DeadlyImportError( "OBJ: vertex index out of range" );
}
pMesh->mVertices[ newIndex ] = pModel->m_Vertices[ vertex ]; pMesh->mVertices[ newIndex ] = pModel->m_Vertices[ vertex ];
@ -368,9 +367,8 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel,
if ( !pSourceFace->m_pNormals->empty() && !pModel->m_Normals.empty()) if ( !pSourceFace->m_pNormals->empty() && !pModel->m_Normals.empty())
{ {
const unsigned int normal = pSourceFace->m_pNormals->at( vertexIndex ); const unsigned int normal = pSourceFace->m_pNormals->at( vertexIndex );
if (normal >= pModel->m_Normals.size()) { if ( normal >= pModel->m_Normals.size() )
throw DeadlyImportError("OBJ: vertex normal index out of range"); throw DeadlyImportError("OBJ: vertex normal index out of range");
}
pMesh->mNormals[ newIndex ] = pModel->m_Normals[ normal ]; pMesh->mNormals[ newIndex ] = pModel->m_Normals[ normal ];
} }
@ -384,6 +382,9 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel,
ai_assert( tex < pModel->m_TextureCoord.size() ); ai_assert( tex < pModel->m_TextureCoord.size() );
for ( size_t i=0; i < pMesh->GetNumUVChannels(); i++ ) for ( size_t i=0; i < pMesh->GetNumUVChannels(); i++ )
{ {
if ( tex >= pModel->m_TextureCoord.size() )
throw DeadlyImportError("OBJ: texture coord index out of range");
aiVector2D coord2d = pModel->m_TextureCoord[ tex ]; aiVector2D coord2d = pModel->m_TextureCoord[ tex ];
pMesh->mTextureCoords[ i ][ newIndex ] = aiVector3D( coord2d.x, coord2d.y, 0.0 ); pMesh->mTextureCoords[ i ][ newIndex ] = aiVector3D( coord2d.x, coord2d.y, 0.0 );
} }
@ -395,21 +396,24 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel,
// Get destination face // Get destination face
aiFace *pDestFace = &pMesh->mFaces[ outIndex ]; aiFace *pDestFace = &pMesh->mFaces[ outIndex ];
const bool last = vertexIndex == pSourceFace->m_pVertices->size() - 1; const bool last = ( vertexIndex == pSourceFace->m_pVertices->size() - 1 );
if (pSourceFace->m_PrimitiveType != aiPrimitiveType_LINE || !last) { if (pSourceFace->m_PrimitiveType != aiPrimitiveType_LINE || !last)
pDestFace->mIndices[ outVertexIndex++ ] = newIndex; {
pDestFace->mIndices[ outVertexIndex ] = newIndex;
outVertexIndex++;
} }
if (pSourceFace->m_PrimitiveType == aiPrimitiveType_POINT) { if (pSourceFace->m_PrimitiveType == aiPrimitiveType_POINT)
{
outIndex++; outIndex++;
outVertexIndex = 0; outVertexIndex = 0;
} }
else if (pSourceFace->m_PrimitiveType == aiPrimitiveType_LINE) { else if (pSourceFace->m_PrimitiveType == aiPrimitiveType_LINE)
{
outVertexIndex = 0; outVertexIndex = 0;
if(!last) { if(!last)
outIndex++; outIndex++;
}
if (vertexIndex) { if (vertexIndex) {
if(!last) { if(!last) {

View File

@ -220,37 +220,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifdef _DEBUG #ifdef _DEBUG
# define ASSIMP_BUILD_DEBUG # define ASSIMP_BUILD_DEBUG
#endif
//////////////////////////////////////////////////////////////////////////
/* ASSIMP_BUILD_XXXX_NNBIT_ARCHITECTURE */
//////////////////////////////////////////////////////////////////////////
#if defined(_MSC_VER)
// See http://msdn.microsoft.com/en-us/library/b0084kay.
# if defined(_M_IX86)
# define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
# elif defined(_M_X64)
# define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
# elif defined(_M_IA64)
# define ASSIMP_BUILD_IA_64BIT_ARCHITECTURE
# else
# error unknown architecture
# endif
#elif defined(__GNUC__)
// See http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html.
# if defined(__x86_32__) || defined(__i386__)
# define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
# elif defined(__x86_64__)
# define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
# elif defined(__ppc__)
# define ASSIMP_BUILD_PPC_32BIT_ARCHITECTURE
# elif defined(__arm__)
# define ASSIMP_BUILD_ARM_32BIT_ARCHITECTURE
# else
# error "unknown architecture"
# endif
#else
# error unknown compiler
#endif #endif
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -271,9 +240,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define AI_DEG_TO_RAD(x) (x*0.0174532925f) #define AI_DEG_TO_RAD(x) (x*0.0174532925f)
#define AI_RAD_TO_DEG(x) (x*57.2957795f) #define AI_RAD_TO_DEG(x) (x*57.2957795f)
/* Support for big-endian builds on Mac OS X. */ /* Support for big-endian builds */
#if defined(__APPLE__) && defined(__BIG_ENDIAN__) #if defined(__BYTE_ORDER__)
#define AI_BUILD_BIG_ENDIAN # if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
# if !defined(__BIG_ENDIAN__)
# define __BIG_ENDIAN__
# endif
# else /* little endian */
# if defined (__BIG_ENDIAN__)
# undef __BIG_ENDIAN__
# endif
# endif
#endif
#if defined(__BIG_ENDIAN__)
# define AI_BUILD_BIG_ENDIAN
#endif #endif
#endif // !! INCLUDED_AI_DEFINES_H #endif // !! INCLUDED_AI_DEFINES_H