Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Clark Lin
hw3d
Commits
f118aff1
Commit
f118aff1
authored
May 12, 2019
by
chili
Browse files
add assimp / nix x86 config / minimal ass test
parent
1c7067f5
Changes
52
Expand all
Hide whitespace changes
Inline
Side-by-side
hw3d.sln
View file @
f118aff1
...
...
@@ -8,19 +8,13 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Debug|x64.ActiveCfg = Debug|x64
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Debug|x64.Build.0 = Debug|x64
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Debug|x86.ActiveCfg = Debug|Win32
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Debug|x86.Build.0 = Debug|Win32
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Release|x64.ActiveCfg = Release|x64
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Release|x64.Build.0 = Release|x64
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Release|x86.ActiveCfg = Release|Win32
{63E56790-0977-47CC-B52B-B1BF8746AFD4}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
...
...
hw3d/App.cpp
View file @
f118aff1
...
...
@@ -9,6 +9,9 @@
#include "Surface.h"
#include "GDIPlusManager.h"
#include "imgui/imgui.h"
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
namespace
dx
=
DirectX
;
...
...
@@ -19,6 +22,12 @@ App::App()
wnd
(
800
,
600
,
"The Donkey Fart Box"
),
light
(
wnd
.
Gfx
()
)
{
Assimp
::
Importer
imp
;
auto
model
=
imp
.
ReadFile
(
"models
\\
suzanne.obj"
,
aiProcess_Triangulate
|
aiProcess_JoinIdenticalVertices
);
class
Factory
{
public:
...
...
hw3d/assimp-vc140-mt.dll
0 → 100644
View file @
f118aff1
File added
hw3d/assimp/include/assimp/Compiler/poppack1.h
0 → 100644
View file @
f118aff1
// ===============================================================================
// May be included multiple times - resets structure packing to the defaults
// for all supported compilers. Reverts the changes made by #include <pushpack1.h>
//
// Currently this works on the following compilers:
// MSVC 7,8,9
// GCC
// BORLAND (complains about 'pack state changed but not reverted', but works)
// ===============================================================================
#ifndef AI_PUSHPACK_IS_DEFINED
# error pushpack1.h must be included after poppack1.h
#endif
// reset packing to the original value
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
# pragma pack( pop )
#endif
#undef PACK_STRUCT
#undef AI_PUSHPACK_IS_DEFINED
hw3d/assimp/include/assimp/Compiler/pstdint.h
0 → 100644
View file @
f118aff1
This diff is collapsed.
Click to expand it.
hw3d/assimp/include/assimp/Compiler/pushpack1.h
0 → 100644
View file @
f118aff1
// ===============================================================================
// May be included multiple times - sets structure packing to 1
// for all supported compilers. #include <poppack1.h> reverts the changes.
//
// Currently this works on the following compilers:
// MSVC 7,8,9
// GCC
// BORLAND (complains about 'pack state changed but not reverted', but works)
// Clang
//
//
// USAGE:
//
// struct StructToBePacked {
// } PACK_STRUCT;
//
// ===============================================================================
#ifdef AI_PUSHPACK_IS_DEFINED
# error poppack1.h must be included after pushpack1.h
#endif
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
# pragma pack(push,1)
# define PACK_STRUCT
#elif defined( __GNUC__ )
# if !defined(HOST_MINGW)
# define PACK_STRUCT __attribute__((__packed__))
# else
# define PACK_STRUCT __attribute__((gcc_struct, __packed__))
# endif
#else
# error Compiler not supported
#endif
#if defined(_MSC_VER)
// C4103: Packing was changed after the inclusion of the header, probably missing #pragma pop
# pragma warning (disable : 4103)
#endif
#define AI_PUSHPACK_IS_DEFINED
hw3d/assimp/include/assimp/DefaultIOStream.h
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file Default file I/O using fXXX()-family of functions */
#ifndef AI_DEFAULTIOSTREAM_H_INC
#define AI_DEFAULTIOSTREAM_H_INC
#include <stdio.h>
#include <assimp/IOStream.hpp>
#include <assimp/importerdesc.h>
#include <assimp/Defines.h>
namespace
Assimp
{
// ----------------------------------------------------------------------------------
//! @class DefaultIOStream
//! @brief Default IO implementation, use standard IO operations
//! @note An instance of this class can exist without a valid file handle
//! attached to it. All calls fail, but the instance can nevertheless be
//! used with no restrictions.
class
ASSIMP_API
DefaultIOStream
:
public
IOStream
{
friend
class
DefaultIOSystem
;
#if __ANDROID__
# if __ANDROID_API__ > 9
# if defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
friend
class
AndroidJNIIOSystem
;
# endif // defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
# endif // __ANDROID_API__ > 9
#endif // __ANDROID__
protected:
DefaultIOStream
();
DefaultIOStream
(
FILE
*
pFile
,
const
std
::
string
&
strFilename
);
public:
/** Destructor public to allow simple deletion to close the file. */
~
DefaultIOStream
();
// -------------------------------------------------------------------
/// Read from stream
size_t
Read
(
void
*
pvBuffer
,
size_t
pSize
,
size_t
pCount
);
// -------------------------------------------------------------------
/// Write to stream
size_t
Write
(
const
void
*
pvBuffer
,
size_t
pSize
,
size_t
pCount
);
// -------------------------------------------------------------------
/// Seek specific position
aiReturn
Seek
(
size_t
pOffset
,
aiOrigin
pOrigin
);
// -------------------------------------------------------------------
/// Get current seek position
size_t
Tell
()
const
;
// -------------------------------------------------------------------
/// Get size of file
size_t
FileSize
()
const
;
// -------------------------------------------------------------------
/// Flush file contents
void
Flush
();
private:
// File data-structure, using clib
FILE
*
mFile
;
// Filename
std
::
string
mFilename
;
// Cached file size
mutable
size_t
mCachedSize
;
};
// ----------------------------------------------------------------------------------
inline
DefaultIOStream
::
DefaultIOStream
()
:
mFile
(
NULL
),
mFilename
(
""
),
mCachedSize
(
SIZE_MAX
)
{
// empty
}
// ----------------------------------------------------------------------------------
inline
DefaultIOStream
::
DefaultIOStream
(
FILE
*
pFile
,
const
std
::
string
&
strFilename
)
:
mFile
(
pFile
),
mFilename
(
strFilename
),
mCachedSize
(
SIZE_MAX
)
{
// empty
}
// ----------------------------------------------------------------------------------
}
// ns assimp
#endif //!!AI_DEFAULTIOSTREAM_H_INC
hw3d/assimp/include/assimp/DefaultIOSystem.h
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file Default implementation of IOSystem using the standard C file functions */
#ifndef AI_DEFAULTIOSYSTEM_H_INC
#define AI_DEFAULTIOSYSTEM_H_INC
#include <assimp/IOSystem.hpp>
namespace
Assimp
{
// ---------------------------------------------------------------------------
/** Default implementation of IOSystem using the standard C file functions */
class
ASSIMP_API
DefaultIOSystem
:
public
IOSystem
{
public:
/** Constructor. */
DefaultIOSystem
();
/** Destructor. */
~
DefaultIOSystem
();
// -------------------------------------------------------------------
/** Tests for the existence of a file at the given path. */
bool
Exists
(
const
char
*
pFile
)
const
;
// -------------------------------------------------------------------
/** Returns the directory separator. */
char
getOsSeparator
()
const
;
// -------------------------------------------------------------------
/** Open a new file with a given path. */
IOStream
*
Open
(
const
char
*
pFile
,
const
char
*
pMode
=
"rb"
);
// -------------------------------------------------------------------
/** Closes the given file and releases all resources associated with it. */
void
Close
(
IOStream
*
pFile
);
// -------------------------------------------------------------------
/** Compare two paths */
bool
ComparePaths
(
const
char
*
one
,
const
char
*
second
)
const
;
/** @brief get the file name of a full filepath
* example: /tmp/archive.tar.gz -> archive.tar.gz
*/
static
std
::
string
fileName
(
const
std
::
string
&
path
);
/** @brief get the complete base name of a full filepath
* example: /tmp/archive.tar.gz -> archive.tar
*/
static
std
::
string
completeBaseName
(
const
std
::
string
&
path
);
/** @brief get the path of a full filepath
* example: /tmp/archive.tar.gz -> /tmp/
*/
static
std
::
string
absolutePath
(
const
std
::
string
&
path
);
};
}
//!ns Assimp
#endif //AI_DEFAULTIOSYSTEM_H_INC
hw3d/assimp/include/assimp/DefaultLogger.hpp
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file DefaultLogger.hpp
*/
#ifndef INCLUDED_AI_DEFAULTLOGGER
#define INCLUDED_AI_DEFAULTLOGGER
#include "Logger.hpp"
#include "LogStream.hpp"
#include "NullLogger.hpp"
#include <vector>
namespace
Assimp
{
// ------------------------------------------------------------------------------------
class
IOStream
;
struct
LogStreamInfo
;
/** default name of logfile */
#define ASSIMP_DEFAULT_LOG_NAME "AssimpLog.txt"
// ------------------------------------------------------------------------------------
/** @brief CPP-API: Primary logging facility of Assimp.
*
* The library stores its primary #Logger as a static member of this class.
* #get() returns this primary logger. By default the underlying implementation is
* just a #NullLogger which rejects all log messages. By calling #create(), logging
* is turned on. To capture the log output multiple log streams (#LogStream) can be
* attach to the logger. Some default streams for common streaming locations (such as
* a file, std::cout, OutputDebugString()) are also provided.
*
* If you wish to customize the logging at an even deeper level supply your own
* implementation of #Logger to #set().
* @note The whole logging stuff causes a small extra overhead for all imports. */
class
ASSIMP_API
DefaultLogger
:
public
Logger
{
public:
// ----------------------------------------------------------------------
/** @brief Creates a logging instance.
* @param name Name for log file. Only valid in combination
* with the aiDefaultLogStream_FILE flag.
* @param severity Log severity, VERBOSE turns on debug messages
* @param defStreams Default log streams to be attached. Any bitwise
* combination of the aiDefaultLogStream enumerated values.
* If #aiDefaultLogStream_FILE is specified but an empty string is
* passed for 'name', no log file is created at all.
* @param io IOSystem to be used to open external files (such as the
* log file). Pass NULL to rely on the default implementation.
* This replaces the default #NullLogger with a #DefaultLogger instance. */
static
Logger
*
create
(
const
char
*
name
=
ASSIMP_DEFAULT_LOG_NAME
,
LogSeverity
severity
=
NORMAL
,
unsigned
int
defStreams
=
aiDefaultLogStream_DEBUGGER
|
aiDefaultLogStream_FILE
,
IOSystem
*
io
=
NULL
);
// ----------------------------------------------------------------------
/** @brief Setup a custom #Logger implementation.
*
* Use this if the provided #DefaultLogger class doesn't fit into
* your needs. If the provided message formatting is OK for you,
* it's much easier to use #create() and to attach your own custom
* output streams to it.
* @param logger Pass NULL to setup a default NullLogger*/
static
void
set
(
Logger
*
logger
);
// ----------------------------------------------------------------------
/** @brief Getter for singleton instance
* @return Only instance. This is never null, but it could be a
* NullLogger. Use isNullLogger to check this.*/
static
Logger
*
get
();
// ----------------------------------------------------------------------
/** @brief Return whether a #NullLogger is currently active
* @return true if the current logger is a #NullLogger.
* Use create() or set() to setup a logger that does actually do
* something else than just rejecting all log messages. */
static
bool
isNullLogger
();
// ----------------------------------------------------------------------
/** @brief Kills the current singleton logger and replaces it with a
* #NullLogger instance. */
static
void
kill
();
// ----------------------------------------------------------------------
/** @copydoc Logger::attachStream */
bool
attachStream
(
LogStream
*
pStream
,
unsigned
int
severity
);
// ----------------------------------------------------------------------
/** @copydoc Logger::detatchStream */
bool
detatchStream
(
LogStream
*
pStream
,
unsigned
int
severity
);
private:
// ----------------------------------------------------------------------
/** @briefPrivate construction for internal use by create().
* @param severity Logging granularity */
explicit
DefaultLogger
(
LogSeverity
severity
);
// ----------------------------------------------------------------------
/** @briefDestructor */
~
DefaultLogger
();
private:
/** @brief Logs debug infos, only been written when severity level VERBOSE is set */
void
OnDebug
(
const
char
*
message
);
/** @brief Logs an info message */
void
OnInfo
(
const
char
*
message
);
/** @brief Logs a warning message */
void
OnWarn
(
const
char
*
message
);
/** @brief Logs an error message */
void
OnError
(
const
char
*
message
);
// ----------------------------------------------------------------------
/** @brief Writes a message to all streams */
void
WriteToStreams
(
const
char
*
message
,
ErrorSeverity
ErrorSev
);
// ----------------------------------------------------------------------
/** @brief Returns the thread id.
* @note This is an OS specific feature, if not supported, a
* zero will be returned.
*/
unsigned
int
GetThreadID
();
private:
// Aliases for stream container
typedef
std
::
vector
<
LogStreamInfo
*>
StreamArray
;
typedef
std
::
vector
<
LogStreamInfo
*>::
iterator
StreamIt
;
typedef
std
::
vector
<
LogStreamInfo
*>::
const_iterator
ConstStreamIt
;
//! only logging instance
static
Logger
*
m_pLogger
;
static
NullLogger
s_pNullLogger
;
//! Attached streams
StreamArray
m_StreamArray
;
bool
noRepeatMsg
;
char
lastMsg
[
MAX_LOG_MESSAGE_LENGTH
*
2
];
size_t
lastLen
;
};
// ------------------------------------------------------------------------------------
}
// Namespace Assimp
#endif // !! INCLUDED_AI_DEFAULTLOGGER
hw3d/assimp/include/assimp/Defines.h
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2012, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
// We need those constants, workaround for any platforms where nobody defined them yet
#if (!defined SIZE_MAX)
# define SIZE_MAX (~((size_t)0))
#endif
#if (!defined UINT_MAX)
# define UINT_MAX (~((unsigned int)0))
#endif
hw3d/assimp/include/assimp/Exporter.hpp
0 → 100644
View file @
f118aff1
This diff is collapsed.
Click to expand it.
hw3d/assimp/include/assimp/IOStream.hpp
0 → 100644
View file @
f118aff1
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/
/** @file IOStream.hpp
* @brief File I/O wrappers for C++.
*/
#pragma once
#ifndef AI_IOSTREAM_H_INC
#define AI_IOSTREAM_H_INC
#include "types.h"
#ifndef __cplusplus
# error This header requires C++ to be used. aiFileIO.h is the \
corresponding C interface.
#endif
namespace
Assimp
{
// ----------------------------------------------------------------------------------
/** @brief CPP-API: Class to handle file I/O for C++
*
* Derive an own implementation from this interface to provide custom IO handling
* to the Importer. If you implement this interface, be sure to also provide an
* implementation for IOSystem that creates instances of your custom IO class.
*/
class
ASSIMP_API
IOStream
#ifndef SWIG
:
public
Intern
::
AllocateFromAssimpHeap
#endif
{
protected:
/** Constructor protected, use IOSystem::Open() to create an instance. */
IOStream
(
void
);
public:
// -------------------------------------------------------------------
/** @brief Destructor. Deleting the object closes the underlying file,
* alternatively you may use IOSystem::Close() to release the file.
*/
virtual
~
IOStream
();
// -------------------------------------------------------------------
/** @brief Read from the file
*
* See fread() for more details
* This fails for write-only files */
virtual
size_t
Read
(
void
*
pvBuffer
,
size_t
pSize
,
size_t
pCount
)
=
0
;
// -------------------------------------------------------------------
/** @brief Write to the file
*
* See fwrite() for more details
* This fails for read-only files */
virtual
size_t
Write
(
const
void
*
pvBuffer
,
size_t
pSize
,
size_t
pCount
)
=
0
;
// -------------------------------------------------------------------
/** @brief Set the read/write cursor of the file
*
* Note that the offset is _negative_ for aiOrigin_END.
* See fseek() for more details */
virtual
aiReturn
Seek
(
size_t
pOffset
,
aiOrigin
pOrigin
)
=
0
;
// -------------------------------------------------------------------
/** @brief Get the current position of the read/write cursor
*
* See ftell() for more details */
virtual
size_t
Tell
()
const
=
0
;
// -------------------------------------------------------------------
/** @brief Returns filesize
* Returns the filesize. */
virtual
size_t
FileSize
()
const
=
0
;
// -------------------------------------------------------------------
/** @brief Flush the contents of the file buffer (for writers)
* See fflush() for more details.
*/
virtual
void
Flush
()
=
0
;
};
//! class IOStream
// ----------------------------------------------------------------------------------
inline
IOStream
::
IOStream
()
{
// empty
}
// ----------------------------------------------------------------------------------
inline
IOStream
::~
IOStream
()
{
// empty
}
// ----------------------------------------------------------------------------------
}
//!namespace Assimp
#endif //!!AI_IOSTREAM_H_INC
hw3d/assimp/include/assimp/IOSystem.hpp
0 → 100644
View file @
f118aff1
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/
/** @file IOSystem.hpp
* @brief File system wrapper for C++. Inherit this class to supply
* custom file handling logic to the Import library.
*/
#pragma once
#ifndef AI_IOSYSTEM_H_INC
#define AI_IOSYSTEM_H_INC
#ifndef __cplusplus
# error This header requires C++ to be used. aiFileIO.h is the \
corresponding C interface.
#endif
#include "types.h"
#ifdef _WIN32
# include <direct.h>
# include <stdlib.h>
# include <stdio.h>
#else
# include <sys/stat.h>
# include <sys/types.h>
# include <unistd.h>
#endif // _WIN32
#include <vector>
namespace
Assimp
{
class
IOStream
;
// ---------------------------------------------------------------------------
/** @brief CPP-API: Interface to the file system.
*
* Derive an own implementation from this interface to supply custom file handling
* to the importer library. If you implement this interface, you also want to
* supply a custom implementation for IOStream.
*
* @see Importer::SetIOHandler()
*/
class
ASSIMP_API
IOSystem
#ifndef SWIG
:
public
Intern
::
AllocateFromAssimpHeap
#endif
{
public:
// -------------------------------------------------------------------
/** @brief Default constructor.
*
* Create an instance of your derived class and assign it to an
* #Assimp::Importer instance by calling Importer::SetIOHandler().
*/
IOSystem
();
// -------------------------------------------------------------------
/** @brief Virtual destructor.
*
* It is safe to be called from within DLL Assimp, we're constructed
* on Assimp's heap.
*/
virtual
~
IOSystem
();
public:
// -------------------------------------------------------------------
/** @brief For backward compatibility
* @see Exists(const char*)
*/
AI_FORCE_INLINE
bool
Exists
(
const
std
::
string
&
pFile
)
const
;
// -------------------------------------------------------------------
/** @brief Tests for the existence of a file at the given path.
*
* @param pFile Path to the file
* @return true if there is a file with this path, else false.
*/
virtual
bool
Exists
(
const
char
*
pFile
)
const
=
0
;
// -------------------------------------------------------------------
/** @brief Returns the system specific directory separator
* @return System specific directory separator
*/
virtual
char
getOsSeparator
()
const
=
0
;
// -------------------------------------------------------------------
/** @brief Open a new file with a given path.
*
* When the access to the file is finished, call Close() to release
* all associated resources (or the virtual dtor of the IOStream).
*
* @param pFile Path to the file
* @param pMode Desired file I/O mode. Required are: "wb", "w", "wt",
* "rb", "r", "rt".
*
* @return New IOStream interface allowing the lib to access
* the underlying file.
* @note When implementing this class to provide custom IO handling,
* you probably have to supply an own implementation of IOStream as well.
*/
virtual
IOStream
*
Open
(
const
char
*
pFile
,
const
char
*
pMode
=
"rb"
)
=
0
;
// -------------------------------------------------------------------
/** @brief For backward compatibility
* @see Open(const char*, const char*)
*/
inline
IOStream
*
Open
(
const
std
::
string
&
pFile
,
const
std
::
string
&
pMode
=
std
::
string
(
"rb"
));
// -------------------------------------------------------------------
/** @brief Closes the given file and releases all resources
* associated with it.
* @param pFile The file instance previously created by Open().
*/
virtual
void
Close
(
IOStream
*
pFile
)
=
0
;
// -------------------------------------------------------------------
/** @brief Compares two paths and check whether the point to
* identical files.
*
* The dummy implementation of this virtual member performs a
* case-insensitive comparison of the given strings. The default IO
* system implementation uses OS mechanisms to convert relative into
* absolute paths, so the result can be trusted.
* @param one First file
* @param second Second file
* @return true if the paths point to the same file. The file needn't
* be existing, however.
*/
virtual
bool
ComparePaths
(
const
char
*
one
,
const
char
*
second
)
const
;
// -------------------------------------------------------------------
/** @brief For backward compatibility
* @see ComparePaths(const char*, const char*)
*/
inline
bool
ComparePaths
(
const
std
::
string
&
one
,
const
std
::
string
&
second
)
const
;
// -------------------------------------------------------------------
/** @brief Pushes a new directory onto the directory stack.
* @param path Path to push onto the stack.
* @return True, when push was successful, false if path is empty.
*/
virtual
bool
PushDirectory
(
const
std
::
string
&
path
);
// -------------------------------------------------------------------
/** @brief Returns the top directory from the stack.
* @return The directory on the top of the stack.
* Returns empty when no directory was pushed to the stack.
*/
virtual
const
std
::
string
&
CurrentDirectory
()
const
;
// -------------------------------------------------------------------
/** @brief Returns the number of directories stored on the stack.
* @return The number of directories of the stack.
*/
virtual
size_t
StackSize
()
const
;
// -------------------------------------------------------------------
/** @brief Pops the top directory from the stack.
* @return True, when a directory was on the stack. False if no
* directory was on the stack.
*/
virtual
bool
PopDirectory
();
// -------------------------------------------------------------------
/** @brief CReates an new directory at the given path.
* @param path [in] The path to create.
* @return True, when a directory was created. False if the directory
* cannot be created.
*/
virtual
bool
CreateDirectory
(
const
std
::
string
&
path
);
// -------------------------------------------------------------------
/** @brief Will change the current directory to the given path.
* @param path [in] The path to change to.
* @return True, when the directory has changed successfully.
*/
virtual
bool
ChangeDirectory
(
const
std
::
string
&
path
);
virtual
bool
DeleteFile
(
const
std
::
string
&
file
);
private:
std
::
vector
<
std
::
string
>
m_pathStack
;
};
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
IOSystem
::
IOSystem
()
:
m_pathStack
()
{
// empty
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
IOSystem
::~
IOSystem
()
{
// empty
}
// ----------------------------------------------------------------------------
// For compatibility, the interface of some functions taking a std::string was
// changed to const char* to avoid crashes between binary incompatible STL
// versions. This code her is inlined, so it shouldn't cause any problems.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
IOStream
*
IOSystem
::
Open
(
const
std
::
string
&
pFile
,
const
std
::
string
&
pMode
)
{
// NOTE:
// For compatibility, interface was changed to const char* to
// avoid crashes between binary incompatible STL versions
return
Open
(
pFile
.
c_str
(),
pMode
.
c_str
());
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
Exists
(
const
std
::
string
&
pFile
)
const
{
// NOTE:
// For compatibility, interface was changed to const char* to
// avoid crashes between binary incompatible STL versions
return
Exists
(
pFile
.
c_str
());
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
ComparePaths
(
const
std
::
string
&
one
,
const
std
::
string
&
second
)
const
{
// NOTE:
// For compatibility, interface was changed to const char* to
// avoid crashes between binary incompatible STL versions
return
ComparePaths
(
one
.
c_str
(),
second
.
c_str
());
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
PushDirectory
(
const
std
::
string
&
path
)
{
if
(
path
.
empty
()
)
{
return
false
;
}
m_pathStack
.
push_back
(
path
);
return
true
;
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
const
std
::
string
&
IOSystem
::
CurrentDirectory
()
const
{
if
(
m_pathStack
.
empty
()
)
{
static
const
std
::
string
Dummy
(
""
);
return
Dummy
;
}
return
m_pathStack
[
m_pathStack
.
size
()
-
1
];
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
size_t
IOSystem
::
StackSize
()
const
{
return
m_pathStack
.
size
();
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
PopDirectory
()
{
if
(
m_pathStack
.
empty
()
)
{
return
false
;
}
m_pathStack
.
pop_back
();
return
true
;
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
CreateDirectory
(
const
std
::
string
&
path
)
{
if
(
path
.
empty
()
)
{
return
false
;
}
#ifdef _WIN32
return
0
!=
::
_mkdir
(
path
.
c_str
()
);
#else
return
0
!=
::
mkdir
(
path
.
c_str
(),
0777
);
#endif // _WIN32
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
ChangeDirectory
(
const
std
::
string
&
path
)
{
if
(
path
.
empty
()
)
{
return
false
;
}
#ifdef _WIN32
return
0
!=
::
_chdir
(
path
.
c_str
()
);
#else
return
0
!=
::
chdir
(
path
.
c_str
()
);
#endif // _WIN32
}
// ----------------------------------------------------------------------------
AI_FORCE_INLINE
bool
IOSystem
::
DeleteFile
(
const
std
::
string
&
file
)
{
if
(
file
.
empty
()
)
{
return
false
;
}
const
int
retCode
(
::
remove
(
file
.
c_str
()
)
);
return
(
0
==
retCode
);
}
}
//!ns Assimp
#endif //AI_IOSYSTEM_H_INC
hw3d/assimp/include/assimp/Importer.hpp
0 → 100644
View file @
f118aff1
This diff is collapsed.
Click to expand it.
hw3d/assimp/include/assimp/LogStream.hpp
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file LogStream.hpp
* @brief Abstract base class 'LogStream', representing an output log stream.
*/
#ifndef INCLUDED_AI_LOGSTREAM_H
#define INCLUDED_AI_LOGSTREAM_H
#include "types.h"
namespace
Assimp
{
class
IOSystem
;
// ------------------------------------------------------------------------------------
/** @brief CPP-API: Abstract interface for log stream implementations.
*
* Several default implementations are provided, see #aiDefaultLogStream for more
* details. Writing your own implementation of LogStream is just necessary if these
* are not enough for your purpose. */
class
ASSIMP_API
LogStream
#ifndef SWIG
:
public
Intern
::
AllocateFromAssimpHeap
#endif
{
protected:
/** @brief Default constructor */
LogStream
();
public:
/** @brief Virtual destructor */
virtual
~
LogStream
();
// -------------------------------------------------------------------
/** @brief Overwrite this for your own output methods
*
* Log messages *may* consist of multiple lines and you shouldn't
* expect a consistent formatting. If you want custom formatting
* (e.g. generate HTML), supply a custom instance of Logger to
* #DefaultLogger:set(). Usually you can *expect* that a log message
* is exactly one line and terminated with a single \n character.
* @param message Message to be written */
virtual
void
write
(
const
char
*
message
)
=
0
;
// -------------------------------------------------------------------
/** @brief Creates a default log stream
* @param streams Type of the default stream
* @param name For aiDefaultLogStream_FILE: name of the output file
* @param io For aiDefaultLogStream_FILE: IOSystem to be used to open the output
* file. Pass NULL for the default implementation.
* @return New LogStream instance. */
static
LogStream
*
createDefaultStream
(
aiDefaultLogStream
stream
,
const
char
*
name
=
"AssimpLog.txt"
,
IOSystem
*
io
=
NULL
);
};
// !class LogStream
inline
LogStream
::
LogStream
()
{
// empty
}
inline
LogStream
::~
LogStream
()
{
// empty
}
// ------------------------------------------------------------------------------------
}
// Namespace Assimp
#endif
hw3d/assimp/include/assimp/Logger.hpp
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file Logger.hpp
* @brief Abstract base class 'Logger', base of the logging system.
*/
#ifndef INCLUDED_AI_LOGGER_H
#define INCLUDED_AI_LOGGER_H
#include "types.h"
namespace
Assimp
{
class
LogStream
;
// Maximum length of a log message. Longer messages are rejected.
#define MAX_LOG_MESSAGE_LENGTH 1024u
// ----------------------------------------------------------------------------------
/** @brief CPP-API: Abstract interface for logger implementations.
* Assimp provides a default implementation and uses it for almost all
* logging stuff ('DefaultLogger'). This class defines just basic logging
* behaviour and is not of interest for you. Instead, take a look at #DefaultLogger. */
class
ASSIMP_API
Logger
#ifndef SWIG
:
public
Intern
::
AllocateFromAssimpHeap
#endif
{
public:
// ----------------------------------------------------------------------
/** @enum LogSeverity
* @brief Log severity to describe the granularity of logging.
*/
enum
LogSeverity
{
NORMAL
,
//!< Normal granularity of logging
VERBOSE
//!< Debug infos will be logged, too
};
// ----------------------------------------------------------------------
/** @enum ErrorSeverity
* @brief Description for severity of a log message.
*
* Every LogStream has a bitwise combination of these flags.
* A LogStream doesn't receive any messages of a specific type
* if it doesn't specify the corresponding ErrorSeverity flag.
*/
enum
ErrorSeverity
{
Debugging
=
1
,
//!< Debug log message
Info
=
2
,
//!< Info log message
Warn
=
4
,
//!< Warn log message
Err
=
8
//!< Error log message
};
public:
/** @brief Virtual destructor */
virtual
~
Logger
();
// ----------------------------------------------------------------------
/** @brief Writes a debug message
* @param message Debug message*/
void
debug
(
const
char
*
message
);
inline
void
debug
(
const
std
::
string
&
message
);
// ----------------------------------------------------------------------
/** @brief Writes a info message
* @param message Info message*/
void
info
(
const
char
*
message
);
inline
void
info
(
const
std
::
string
&
message
);
// ----------------------------------------------------------------------
/** @brief Writes a warning message
* @param message Warn message*/
void
warn
(
const
char
*
message
);
inline
void
warn
(
const
std
::
string
&
message
);
// ----------------------------------------------------------------------
/** @brief Writes an error message
* @param message Error message*/
void
error
(
const
char
*
message
);
inline
void
error
(
const
std
::
string
&
message
);
// ----------------------------------------------------------------------
/** @brief Set a new log severity.
* @param log_severity New severity for logging*/
void
setLogSeverity
(
LogSeverity
log_severity
);
// ----------------------------------------------------------------------
/** @brief Get the current log severity*/
LogSeverity
getLogSeverity
()
const
;
// ----------------------------------------------------------------------
/** @brief Attach a new log-stream
*
* The logger takes ownership of the stream and is responsible
* for its destruction (which is done using ::delete when the logger
* itself is destroyed). Call detachStream to detach a stream and to
* gain ownership of it again.
* @param pStream Log-stream to attach
* @param severity Message filter, specified which types of log
* messages are dispatched to the stream. Provide a bitwise
* combination of the ErrorSeverity flags.
* @return true if the stream has been attached, false otherwise.*/
virtual
bool
attachStream
(
LogStream
*
pStream
,
unsigned
int
severity
=
Debugging
|
Err
|
Warn
|
Info
)
=
0
;
// ----------------------------------------------------------------------
/** @brief Detach a still attached stream from the logger (or
* modify the filter flags bits)
* @param pStream Log-stream instance for detaching
* @param severity Provide a bitwise combination of the ErrorSeverity
* flags. This value is &~ed with the current flags of the stream,
* if the result is 0 the stream is detached from the Logger and
* the caller retakes the possession of the stream.
* @return true if the stream has been detached, false otherwise.*/
virtual
bool
detatchStream
(
LogStream
*
pStream
,
unsigned
int
severity
=
Debugging
|
Err
|
Warn
|
Info
)
=
0
;
protected:
/** Default constructor */
Logger
();
/** Construction with a given log severity */
explicit
Logger
(
LogSeverity
severity
);
// ----------------------------------------------------------------------
/** @brief Called as a request to write a specific debug message
* @param message Debug message. Never longer than
* MAX_LOG_MESSAGE_LENGTH characters (excluding the '0').
* @note The message string is only valid until the scope of
* the function is left.
*/
virtual
void
OnDebug
(
const
char
*
message
)
=
0
;
// ----------------------------------------------------------------------
/** @brief Called as a request to write a specific info message
* @param message Info message. Never longer than
* MAX_LOG_MESSAGE_LENGTH characters (ecxluding the '0').
* @note The message string is only valid until the scope of
* the function is left.
*/
virtual
void
OnInfo
(
const
char
*
message
)
=
0
;
// ----------------------------------------------------------------------
/** @brief Called as a request to write a specific warn message
* @param message Warn message. Never longer than
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
* @note The message string is only valid until the scope of
* the function is left.
*/
virtual
void
OnWarn
(
const
char
*
essage
)
=
0
;
// ----------------------------------------------------------------------
/** @brief Called as a request to write a specific error message
* @param message Error message. Never longer than
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
* @note The message string is only valid until the scope of
* the function is left.
*/
virtual
void
OnError
(
const
char
*
message
)
=
0
;
protected:
//! Logger severity
LogSeverity
m_Severity
;
};
// ----------------------------------------------------------------------------------
// Default constructor
inline
Logger
::
Logger
()
{
setLogSeverity
(
NORMAL
);
}
// ----------------------------------------------------------------------------------
// Virtual destructor
inline
Logger
::~
Logger
()
{
}
// ----------------------------------------------------------------------------------
// Construction with given logging severity
inline
Logger
::
Logger
(
LogSeverity
severity
)
{
setLogSeverity
(
severity
);
}
// ----------------------------------------------------------------------------------
// Log severity setter
inline
void
Logger
::
setLogSeverity
(
LogSeverity
log_severity
){
m_Severity
=
log_severity
;
}
// ----------------------------------------------------------------------------------
// Log severity getter
inline
Logger
::
LogSeverity
Logger
::
getLogSeverity
()
const
{
return
m_Severity
;
}
// ----------------------------------------------------------------------------------
inline
void
Logger
::
debug
(
const
std
::
string
&
message
)
{
return
debug
(
message
.
c_str
());
}
// ----------------------------------------------------------------------------------
inline
void
Logger
::
error
(
const
std
::
string
&
message
)
{
return
error
(
message
.
c_str
());
}
// ----------------------------------------------------------------------------------
inline
void
Logger
::
warn
(
const
std
::
string
&
message
)
{
return
warn
(
message
.
c_str
());
}
// ----------------------------------------------------------------------------------
inline
void
Logger
::
info
(
const
std
::
string
&
message
)
{
return
info
(
message
.
c_str
());
}
// ----------------------------------------------------------------------------------
}
// Namespace Assimp
#endif // !! INCLUDED_AI_LOGGER_H
hw3d/assimp/include/assimp/NullLogger.hpp
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file NullLogger.hpp
* @brief Dummy logger
*/
#ifndef INCLUDED_AI_NULLLOGGER_H
#define INCLUDED_AI_NULLLOGGER_H
#include "Logger.hpp"
namespace
Assimp
{
// ---------------------------------------------------------------------------
/** @brief CPP-API: Empty logging implementation.
*
* Does nothing! Used by default if the application hasn't requested a
* custom logger via #DefaultLogger::set() or #DefaultLogger::create(); */
class
ASSIMP_API
NullLogger
:
public
Logger
{
public:
/** @brief Logs a debug message */
void
OnDebug
(
const
char
*
message
)
{
(
void
)
message
;
//this avoids compiler warnings
}
/** @brief Logs an info message */
void
OnInfo
(
const
char
*
message
)
{
(
void
)
message
;
//this avoids compiler warnings
}
/** @brief Logs a warning message */
void
OnWarn
(
const
char
*
message
)
{
(
void
)
message
;
//this avoids compiler warnings
}
/** @brief Logs an error message */
void
OnError
(
const
char
*
message
)
{
(
void
)
message
;
//this avoids compiler warnings
}
/** @brief Detach a still attached stream from logger */
bool
attachStream
(
LogStream
*
pStream
,
unsigned
int
severity
)
{
(
void
)
pStream
;
(
void
)
severity
;
//this avoids compiler warnings
return
false
;
}
/** @brief Detach a still attached stream from logger */
bool
detatchStream
(
LogStream
*
pStream
,
unsigned
int
severity
)
{
(
void
)
pStream
;
(
void
)
severity
;
//this avoids compiler warnings
return
false
;
}
private:
};
}
#endif // !! AI_NULLLOGGER_H_INCLUDED
hw3d/assimp/include/assimp/ProgressHandler.hpp
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file ProgressHandler.hpp
* @brief Abstract base class 'ProgressHandler'.
*/
#pragma once
#ifndef AI_PROGRESSHANDLER_H_INC
#define AI_PROGRESSHANDLER_H_INC
#include "types.h"
namespace
Assimp
{
// ------------------------------------------------------------------------------------
/** @brief CPP-API: Abstract interface for custom progress report receivers.
*
* Each #Importer instance maintains its own #ProgressHandler. The default
* implementation provided by Assimp doesn't do anything at all. */
class
ASSIMP_API
ProgressHandler
#ifndef SWIG
:
public
Intern
::
AllocateFromAssimpHeap
#endif
{
protected:
/** @brief Default constructor */
ProgressHandler
()
{
}
public:
/** @brief Virtual destructor */
virtual
~
ProgressHandler
()
{
}
// -------------------------------------------------------------------
/** @brief Progress callback.
* @param percentage An estimate of the current loading progress,
* in percent. Or -1.f if such an estimate is not available.
*
* There are restriction on what you may do from within your
* implementation of this method: no exceptions may be thrown and no
* non-const #Importer methods may be called. It is
* not generally possible to predict the number of callbacks
* fired during a single import.
*
* @return Return false to abort loading at the next possible
* occasion (loaders and Assimp are generally allowed to perform
* all needed cleanup tasks prior to returning control to the
* caller). If the loading is aborted, #Importer::ReadFile()
* returns always NULL.
* */
virtual
bool
Update
(
float
percentage
=
-
1.
f
)
=
0
;
// -------------------------------------------------------------------
/** @brief Progress callback for file loading steps
* @param numberOfSteps The number of total post-processing
* steps
* @param currentStep The index of the current post-processing
* step that will run, or equal to numberOfSteps if all of
* them has finished. This number is always strictly monotone
* increasing, although not necessarily linearly.
*
* @note This is currently only used at the start and the end
* of the file parsing.
* */
virtual
void
UpdateFileRead
(
int
currentStep
/*= 0*/
,
int
numberOfSteps
/*= 0*/
)
{
float
f
=
numberOfSteps
?
currentStep
/
(
float
)
numberOfSteps
:
1.0
f
;
Update
(
f
*
0.5
f
);
}
// -------------------------------------------------------------------
/** @brief Progress callback for post-processing steps
* @param numberOfSteps The number of total post-processing
* steps
* @param currentStep The index of the current post-processing
* step that will run, or equal to numberOfSteps if all of
* them has finished. This number is always strictly monotone
* increasing, although not necessarily linearly.
* */
virtual
void
UpdatePostProcess
(
int
currentStep
/*= 0*/
,
int
numberOfSteps
/*= 0*/
)
{
float
f
=
numberOfSteps
?
currentStep
/
(
float
)
numberOfSteps
:
1.0
f
;
Update
(
f
*
0.5
f
+
0.5
f
);
}
};
// !class ProgressHandler
// ------------------------------------------------------------------------------------
}
// Namespace Assimp
#endif // AI_PROGRESSHANDLER_H_INC
hw3d/assimp/include/assimp/SceneCombiner.h
0 → 100644
View file @
f118aff1
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
*/
/** @file Declares a helper class, "SceneCombiner" providing various
* utilities to merge scenes.
*/
#ifndef AI_SCENE_COMBINER_H_INC
#define AI_SCENE_COMBINER_H_INC
#include <assimp/ai_assert.h>
#include <assimp/types.h>
#include <assimp/Defines.h>
#include <stddef.h>
#include <set>
#include <list>
#include <stdint.h>
#include <vector>
struct
aiScene
;
struct
aiNode
;
struct
aiMaterial
;
struct
aiTexture
;
struct
aiCamera
;
struct
aiLight
;
struct
aiMetadata
;
struct
aiBone
;
struct
aiMesh
;
struct
aiAnimation
;
struct
aiNodeAnim
;
namespace
Assimp
{
// ---------------------------------------------------------------------------
/** \brief Helper data structure for SceneCombiner.
*
* Describes to which node a scene must be attached to.
*/
struct
AttachmentInfo
{
AttachmentInfo
()
:
scene
(
NULL
)
,
attachToNode
(
NULL
)
{}
AttachmentInfo
(
aiScene
*
_scene
,
aiNode
*
_attachToNode
)
:
scene
(
_scene
)
,
attachToNode
(
_attachToNode
)
{}
aiScene
*
scene
;
aiNode
*
attachToNode
;
};
// ---------------------------------------------------------------------------
struct
NodeAttachmentInfo
{
NodeAttachmentInfo
()
:
node
(
NULL
)
,
attachToNode
(
NULL
)
,
resolved
(
false
)
,
src_idx
(
SIZE_MAX
)
{}
NodeAttachmentInfo
(
aiNode
*
_scene
,
aiNode
*
_attachToNode
,
size_t
idx
)
:
node
(
_scene
)
,
attachToNode
(
_attachToNode
)
,
resolved
(
false
)
,
src_idx
(
idx
)
{}
aiNode
*
node
;
aiNode
*
attachToNode
;
bool
resolved
;
size_t
src_idx
;
};
// ---------------------------------------------------------------------------
/** @def AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES
* Generate unique names for all named scene items
*/
#define AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES 0x1
/** @def AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES
* Generate unique names for materials, too.
* This is not absolutely required to pass the validation.
*/
#define AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES 0x2
/** @def AI_INT_MERGE_SCENE_DUPLICATES_DEEP_CPY
* Use deep copies of duplicate scenes
*/
#define AI_INT_MERGE_SCENE_DUPLICATES_DEEP_CPY 0x4
/** @def AI_INT_MERGE_SCENE_RESOLVE_CROSS_ATTACHMENTS
* If attachment nodes are not found in the given master scene,
* search the other imported scenes for them in an any order.
*/
#define AI_INT_MERGE_SCENE_RESOLVE_CROSS_ATTACHMENTS 0x8
/** @def AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY
* Can be combined with AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES.
* Unique names are generated, but only if this is absolutely
* required to avoid name conflicts.
*/
#define AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY 0x10
typedef
std
::
pair
<
aiBone
*
,
unsigned
int
>
BoneSrcIndex
;
// ---------------------------------------------------------------------------
/** @brief Helper data structure for SceneCombiner::MergeBones.
*/
struct
BoneWithHash
:
public
std
::
pair
<
uint32_t
,
aiString
*>
{
std
::
vector
<
BoneSrcIndex
>
pSrcBones
;
};
// ---------------------------------------------------------------------------
/** @brief Utility for SceneCombiner
*/
struct
SceneHelper
{
SceneHelper
()
:
scene
(
NULL
)
,
idlen
(
0
)
{
id
[
0
]
=
0
;
}
explicit
SceneHelper
(
aiScene
*
_scene
)
:
scene
(
_scene
)
,
idlen
(
0
)
{
id
[
0
]
=
0
;
}
AI_FORCE_INLINE
aiScene
*
operator
->
()
const
{
return
scene
;
}
// scene we're working on
aiScene
*
scene
;
// prefix to be added to all identifiers in the scene ...
char
id
[
32
];
// and its strlen()
unsigned
int
idlen
;
// hash table to quickly check whether a name is contained in the scene
std
::
set
<
unsigned
int
>
hashes
;
};
// ---------------------------------------------------------------------------
/** \brief Static helper class providing various utilities to merge two
* scenes. It is intended as internal utility and NOT for use by
* applications.
*
* The class is currently being used by various postprocessing steps
* and loaders (ie. LWS).
*/
class
ASSIMP_API
SceneCombiner
{
// class cannot be instanced
SceneCombiner
()
{
// empty
}
~
SceneCombiner
()
{
// empty
}
public:
// -------------------------------------------------------------------
/** Merges two or more scenes.
*
* @param dest Receives a pointer to the destination scene. If the
* pointer doesn't point to NULL when the function is called, the
* existing scene is cleared and refilled.
* @param src Non-empty list of scenes to be merged. The function
* deletes the input scenes afterwards. There may be duplicate scenes.
* @param flags Combination of the AI_INT_MERGE_SCENE flags defined above
*/
static
void
MergeScenes
(
aiScene
**
dest
,
std
::
vector
<
aiScene
*>&
src
,
unsigned
int
flags
=
0
);
// -------------------------------------------------------------------
/** Merges two or more scenes and attaches all scenes to a specific
* position in the node graph of the master scene.
*
* @param dest Receives a pointer to the destination scene. If the
* pointer doesn't point to NULL when the function is called, the
* existing scene is cleared and refilled.
* @param master Master scene. It will be deleted afterwards. All
* other scenes will be inserted in its node graph.
* @param src Non-empty list of scenes to be merged along with their
* corresponding attachment points in the master scene. The function
* deletes the input scenes afterwards. There may be duplicate scenes.
* @param flags Combination of the AI_INT_MERGE_SCENE flags defined above
*/
static
void
MergeScenes
(
aiScene
**
dest
,
aiScene
*
master
,
std
::
vector
<
AttachmentInfo
>&
src
,
unsigned
int
flags
=
0
);
// -------------------------------------------------------------------
/** Merges two or more meshes
*
* The meshes should have equal vertex formats. Only components
* that are provided by ALL meshes will be present in the output mesh.
* An exception is made for VColors - they are set to black. The
* meshes should have the same material indices, too. The output
* material index is always the material index of the first mesh.
*
* @param dest Destination mesh. Must be empty.
* @param flags Currently no parameters
* @param begin First mesh to be processed
* @param end Points to the mesh after the last mesh to be processed
*/
static
void
MergeMeshes
(
aiMesh
**
dest
,
unsigned
int
flags
,
std
::
vector
<
aiMesh
*>::
const_iterator
begin
,
std
::
vector
<
aiMesh
*>::
const_iterator
end
);
// -------------------------------------------------------------------
/** Merges two or more bones
*
* @param out Mesh to receive the output bone list
* @param flags Currently no parameters
* @param begin First mesh to be processed
* @param end Points to the mesh after the last mesh to be processed
*/
static
void
MergeBones
(
aiMesh
*
out
,
std
::
vector
<
aiMesh
*>::
const_iterator
it
,
std
::
vector
<
aiMesh
*>::
const_iterator
end
);
// -------------------------------------------------------------------
/** Merges two or more materials
*
* The materials should be complementary as much as possible. In case
* of a property present in different materials, the first occurrence
* is used.
*
* @param dest Destination material. Must be empty.
* @param begin First material to be processed
* @param end Points to the material after the last material to be processed
*/
static
void
MergeMaterials
(
aiMaterial
**
dest
,
std
::
vector
<
aiMaterial
*>::
const_iterator
begin
,
std
::
vector
<
aiMaterial
*>::
const_iterator
end
);
// -------------------------------------------------------------------
/** Builds a list of uniquely named bones in a mesh list
*
* @param asBones Receives the output list
* @param it First mesh to be processed
* @param end Last mesh to be processed
*/
static
void
BuildUniqueBoneList
(
std
::
list
<
BoneWithHash
>&
asBones
,
std
::
vector
<
aiMesh
*>::
const_iterator
it
,
std
::
vector
<
aiMesh
*>::
const_iterator
end
);
// -------------------------------------------------------------------
/** Add a name prefix to all nodes in a scene.
*
* @param Current node. This function is called recursively.
* @param prefix Prefix to be added to all nodes
* @param len STring length
*/
static
void
AddNodePrefixes
(
aiNode
*
node
,
const
char
*
prefix
,
unsigned
int
len
);
// -------------------------------------------------------------------
/** Add an offset to all mesh indices in a node graph
*
* @param Current node. This function is called recursively.
* @param offset Offset to be added to all mesh indices
*/
static
void
OffsetNodeMeshIndices
(
aiNode
*
node
,
unsigned
int
offset
);
// -------------------------------------------------------------------
/** Attach a list of node graphs to well-defined nodes in a master
* graph. This is a helper for MergeScenes()
*
* @param master Master scene
* @param srcList List of source scenes along with their attachment
* points. If an attachment point is NULL (or does not exist in
* the master graph), a scene is attached to the root of the master
* graph (as an additional child node)
* @duplicates List of duplicates. If elem[n] == n the scene is not
* a duplicate. Otherwise elem[n] links scene n to its first occurrence.
*/
static
void
AttachToGraph
(
aiScene
*
master
,
std
::
vector
<
NodeAttachmentInfo
>&
srcList
);
static
void
AttachToGraph
(
aiNode
*
attach
,
std
::
vector
<
NodeAttachmentInfo
>&
srcList
);
// -------------------------------------------------------------------
/** Get a deep copy of a scene
*
* @param dest Receives a pointer to the destination scene
* @param src Source scene - remains unmodified.
*/
static
void
CopyScene
(
aiScene
**
dest
,
const
aiScene
*
source
,
bool
allocate
=
true
);
// -------------------------------------------------------------------
/** Get a flat copy of a scene
*
* Only the first hierarchy layer is copied. All pointer members of
* aiScene are shared by source and destination scene. If the
* pointer doesn't point to NULL when the function is called, the
* existing scene is cleared and refilled.
* @param dest Receives a pointer to the destination scene
* @param src Source scene - remains unmodified.
*/
static
void
CopySceneFlat
(
aiScene
**
dest
,
const
aiScene
*
source
);
// -------------------------------------------------------------------
/** Get a deep copy of a mesh
*
* @param dest Receives a pointer to the destination mesh
* @param src Source mesh - remains unmodified.
*/
static
void
Copy
(
aiMesh
**
dest
,
const
aiMesh
*
src
);
// similar to Copy():
static
void
Copy
(
aiMaterial
**
dest
,
const
aiMaterial
*
src
);
static
void
Copy
(
aiTexture
**
dest
,
const
aiTexture
*
src
);
static
void
Copy
(
aiAnimation
**
dest
,
const
aiAnimation
*
src
);
static
void
Copy
(
aiCamera
**
dest
,
const
aiCamera
*
src
);
static
void
Copy
(
aiBone
**
dest
,
const
aiBone
*
src
);
static
void
Copy
(
aiLight
**
dest
,
const
aiLight
*
src
);
static
void
Copy
(
aiNodeAnim
**
dest
,
const
aiNodeAnim
*
src
);
static
void
Copy
(
aiMetadata
**
dest
,
const
aiMetadata
*
src
);
// recursive, of course
static
void
Copy
(
aiNode
**
dest
,
const
aiNode
*
src
);
private:
// -------------------------------------------------------------------
// Same as AddNodePrefixes, but with an additional check
static
void
AddNodePrefixesChecked
(
aiNode
*
node
,
const
char
*
prefix
,
unsigned
int
len
,
std
::
vector
<
SceneHelper
>&
input
,
unsigned
int
cur
);
// -------------------------------------------------------------------
// Add node identifiers to a hashing set
static
void
AddNodeHashes
(
aiNode
*
node
,
std
::
set
<
unsigned
int
>&
hashes
);
// -------------------------------------------------------------------
// Search for duplicate names
static
bool
FindNameMatch
(
const
aiString
&
name
,
std
::
vector
<
SceneHelper
>&
input
,
unsigned
int
cur
);
};
}
#endif // !! AI_SCENE_COMBINER_H_INC
hw3d/assimp/include/assimp/ai_assert.h
0 → 100644
View file @
f118aff1
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2017, assimp team
All rights reserved.
Redistribution and use of this software in source and binary forms,
with or without modification, are permitted provided that the following
conditions are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------
*/
#pragma once
#ifndef AI_ASSERT_H_INC
#define AI_ASSERT_H_INC
#ifdef ASSIMP_BUILD_DEBUG
# include <assert.h>
# define ai_assert(expression) assert(expression)
#else
# define ai_assert(expression)
#endif //
#endif // AI_ASSERT_H_INC
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment