dark-hammer / 3rdparty / assimp / src / MD3Loader.h

The branch '0.4.7' does not exist.
Diff from to

3rdparty/assimp/src/MD3Loader.h

-/*
-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.
-
-----------------------------------------------------------------------
-*/
-
-/** @file  Md3Loader.h
- *  @brief Declaration of the .MD3 importer class.
- */
-#ifndef AI_MD3LOADER_H_INCLUDED
-#define AI_MD3LOADER_H_INCLUDED
-
-#include "BaseImporter.h"
-#include "ByteSwap.h"
-
-#include "../include/assimp/types.h"
-
-#include "MD3FileData.h"
-namespace Assimp	{
-
-
-using namespace MD3;
-namespace Q3Shader {
-
-// ---------------------------------------------------------------------------
-/** @brief Tiny utility data structure to hold the data of a .skin file
- */
-struct SkinData
-{
-	//! A single entryin texture list
-	struct TextureEntry : public std::pair<std::string,std::string>
-	{
-		// did we resolve this texture entry?
-		bool resolved;
-
-		// for std::find()
-		bool operator == (const std::string& f) const {
-			return f == first;
-		}
-	};
-
-	//! List of textures
-	std::list<TextureEntry> textures;
-
-	// rest is ignored for the moment
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Specifies cull modi for Quake shader files.
- */
-enum ShaderCullMode
-{
-	CULL_NONE,
-	CULL_CW,
-	CULL_CCW
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Specifies alpha blend modi (src + dest) for Quake shader files
- */
-enum BlendFunc
-{
-	BLEND_NONE,
-	BLEND_GL_ONE, 
-	BLEND_GL_ZERO,
-	BLEND_GL_DST_COLOR,
-	BLEND_GL_ONE_MINUS_DST_COLOR,
-	BLEND_GL_SRC_ALPHA,
-	BLEND_GL_ONE_MINUS_SRC_ALPHA
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Specifies alpha test modi for Quake texture maps
- */
-enum AlphaTestFunc
-{
-	AT_NONE,
-	AT_GT0,
-	AT_LT128, 
-	AT_GE128
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Tiny utility data structure to hold a .shader map data block
- */
-struct ShaderMapBlock
-{
-	ShaderMapBlock()
-		 :	blend_src	(BLEND_NONE)
-		 ,	blend_dest	(BLEND_NONE)
-		 ,	alpha_test	(AT_NONE)
-	{}
-
-	//! Name of referenced map
-	std::string name;
-
-	//! Blend and alpha test settings for texture
-	BlendFunc blend_src,blend_dest;
-	AlphaTestFunc alpha_test;
-
-
-	//! For std::find()
-	bool operator== (const std::string& o) const {
-		return !ASSIMP_stricmp(o,name);
-	}
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Tiny utility data structure to hold a .shader data block
- */
-struct ShaderDataBlock
-{
-	ShaderDataBlock()
-		:	cull	(CULL_CW)
-	{}
-
-	//! Name of referenced data element
-	std::string name;
-
-	//! Cull mode for the element
-	ShaderCullMode cull;
-
-	//! Maps defined in the shader
-	std::list<ShaderMapBlock> maps;
-
-
-	//! For std::find()
-	bool operator== (const std::string& o) const {
-		return !ASSIMP_stricmp(o,name);
-	}
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Tiny utility data structure to hold the data of a .shader file
- */
-struct ShaderData
-{
-	//! Shader data blocks
-	std::list<ShaderDataBlock> blocks;
-};
-
-// ---------------------------------------------------------------------------
-/** @brief Load a shader file
- *
- *  Generally, parsing is error tolerant. There's no failure.
- *  @param fill Receives output data
- *  @param file File to be read.
- *  @param io IOSystem to be used for reading
- *  @return false if file is not accessible
- */
-bool LoadShader(ShaderData& fill, const std::string& file,IOSystem* io);
-
-
-// ---------------------------------------------------------------------------
-/** @brief Convert a Q3Shader to an aiMaterial
- *
- *  @param[out] out Material structure to be filled.
- *  @param[in] shader Input shader
- */
-void ConvertShaderToMaterial(aiMaterial* out, const ShaderDataBlock& shader);
-
-// ---------------------------------------------------------------------------
-/** @brief Load a skin file
- *
- *  Generally, parsing is error tolerant. There's no failure.
- *  @param fill Receives output data
- *  @param file File to be read.
- *  @param io IOSystem to be used for reading
- *  @return false if file is not accessible
- */
-bool LoadSkin(SkinData& fill, const std::string& file,IOSystem* io);
-
-} // ! namespace Q3SHader
-
-// ---------------------------------------------------------------------------
-/** @brief Importer class to load MD3 files
-*/
-class MD3Importer : public BaseImporter
-{
-public:
-	MD3Importer();
-	~MD3Importer();
-
-
-public:
-
-	// -------------------------------------------------------------------
-	/** Returns whether the class can handle the format of the given file. 
-	* See BaseImporter::CanRead() for details.	*/
-	bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
-		bool checkSig) const;
-
-
-	// -------------------------------------------------------------------
-	/** Called prior to ReadFile().
-	* The function is a request to the importer to update its configuration
-	* basing on the Importer's configuration property list.
-	*/
-	void SetupProperties(const Importer* pImp);
-
-protected:
-
-	// -------------------------------------------------------------------
-	/** Return importer meta information.
-	 * See #BaseImporter::GetInfo for the details
-	 */
-	const aiImporterDesc* GetInfo () const;
-
-	// -------------------------------------------------------------------
-	/** Imports the given file into the given scene structure. 
-	 * See BaseImporter::InternReadFile() for details
-	 */
-	void InternReadFile( const std::string& pFile, aiScene* pScene, 
-		IOSystem* pIOHandler);
-
-	// -------------------------------------------------------------------
-	/** Validate offsets in the header
-	 */
-	void ValidateHeaderOffsets();
-	void ValidateSurfaceHeaderOffsets(const MD3::Surface* pcSurfHeader);
-
-	// -------------------------------------------------------------------
-	/** Read a Q3 multipart file
-	 *  @return true if multi part has been processed
-	 */
-	bool ReadMultipartFile();
-
-	// -------------------------------------------------------------------
-	/** Try to read the skin for a MD3 file
-	 *  @param fill Receives output information
-	 */
-	void ReadSkin(Q3Shader::SkinData& fill) const;
-
-	// -------------------------------------------------------------------
-	/** Try to read the shader for a MD3 file
-	 *  @param fill Receives output information
-	 */
-	void ReadShader(Q3Shader::ShaderData& fill) const;
-
-	// -------------------------------------------------------------------
-	/** Convert a texture path in a MD3 file to a proper value
-	 *  @param[in] texture_name Path to be converted
-	 *  @param[in] header_path Base path specified in MD3 header
-	 *  @param[out] out Receives the converted output string
-	 */
-	void ConvertPath(const char* texture_name, const char* header_path, 
-		std::string& out) const;
-
-protected:
-
-	/** Configuration option: frame to be loaded */
-	unsigned int configFrameID;
-
-	/** Configuration option: process multi-part files */
-	bool configHandleMP;
-
-	/** Configuration option: name of skin file to be read */
-	std::string configSkinFile;
-
-	/** Configuration option: name or path of shader */
-	std::string configShaderFile;
-
-	/** Configuration option: speed flag was set? */
-	bool configSpeedFlag;
-
-	/** Header of the MD3 file */
-	BE_NCONST MD3::Header* pcHeader;
-
-	/** File buffer  */
-	BE_NCONST unsigned char* mBuffer;
-
-	/** Size of the file, in bytes */
-	unsigned int fileSize;
-
-	/** Current file name */
-	std::string mFile;
-
-	/** Current base directory  */
-	std::string path;
-
-	/** Pure file we're currently reading */
-	std::string filename;
-
-	/** Output scene to be filled */
-	aiScene* mScene;
-
-	/** IO system to be used to access the data*/
-	IOSystem* mIOHandler;
-	};
-
-} // end of namespace Assimp
-
-#endif // AI_3DSIMPORTER_H_INC
+/*
+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.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  Md3Loader.h
+ *  @brief Declaration of the .MD3 importer class.
+ */
+#ifndef AI_MD3LOADER_H_INCLUDED
+#define AI_MD3LOADER_H_INCLUDED
+
+#include "BaseImporter.h"
+#include "ByteSwap.h"
+
+#include "../include/assimp/types.h"
+
+#include "MD3FileData.h"
+namespace Assimp	{
+
+
+using namespace MD3;
+namespace Q3Shader {
+
+// ---------------------------------------------------------------------------
+/** @brief Tiny utility data structure to hold the data of a .skin file
+ */
+struct SkinData
+{
+	//! A single entryin texture list
+	struct TextureEntry : public std::pair<std::string,std::string>
+	{
+		// did we resolve this texture entry?
+		bool resolved;
+
+		// for std::find()
+		bool operator == (const std::string& f) const {
+			return f == first;
+		}
+	};
+
+	//! List of textures
+	std::list<TextureEntry> textures;
+
+	// rest is ignored for the moment
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Specifies cull modi for Quake shader files.
+ */
+enum ShaderCullMode
+{
+	CULL_NONE,
+	CULL_CW,
+	CULL_CCW
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Specifies alpha blend modi (src + dest) for Quake shader files
+ */
+enum BlendFunc
+{
+	BLEND_NONE,
+	BLEND_GL_ONE, 
+	BLEND_GL_ZERO,
+	BLEND_GL_DST_COLOR,
+	BLEND_GL_ONE_MINUS_DST_COLOR,
+	BLEND_GL_SRC_ALPHA,
+	BLEND_GL_ONE_MINUS_SRC_ALPHA
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Specifies alpha test modi for Quake texture maps
+ */
+enum AlphaTestFunc
+{
+	AT_NONE,
+	AT_GT0,
+	AT_LT128, 
+	AT_GE128
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Tiny utility data structure to hold a .shader map data block
+ */
+struct ShaderMapBlock
+{
+	ShaderMapBlock()
+		 :	blend_src	(BLEND_NONE)
+		 ,	blend_dest	(BLEND_NONE)
+		 ,	alpha_test	(AT_NONE)
+	{}
+
+	//! Name of referenced map
+	std::string name;
+
+	//! Blend and alpha test settings for texture
+	BlendFunc blend_src,blend_dest;
+	AlphaTestFunc alpha_test;
+
+
+	//! For std::find()
+	bool operator== (const std::string& o) const {
+		return !ASSIMP_stricmp(o,name);
+	}
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Tiny utility data structure to hold a .shader data block
+ */
+struct ShaderDataBlock
+{
+	ShaderDataBlock()
+		:	cull	(CULL_CW)
+	{}
+
+	//! Name of referenced data element
+	std::string name;
+
+	//! Cull mode for the element
+	ShaderCullMode cull;
+
+	//! Maps defined in the shader
+	std::list<ShaderMapBlock> maps;
+
+
+	//! For std::find()
+	bool operator== (const std::string& o) const {
+		return !ASSIMP_stricmp(o,name);
+	}
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Tiny utility data structure to hold the data of a .shader file
+ */
+struct ShaderData
+{
+	//! Shader data blocks
+	std::list<ShaderDataBlock> blocks;
+};
+
+// ---------------------------------------------------------------------------
+/** @brief Load a shader file
+ *
+ *  Generally, parsing is error tolerant. There's no failure.
+ *  @param fill Receives output data
+ *  @param file File to be read.
+ *  @param io IOSystem to be used for reading
+ *  @return false if file is not accessible
+ */
+bool LoadShader(ShaderData& fill, const std::string& file,IOSystem* io);
+
+
+// ---------------------------------------------------------------------------
+/** @brief Convert a Q3Shader to an aiMaterial
+ *
+ *  @param[out] out Material structure to be filled.
+ *  @param[in] shader Input shader
+ */
+void ConvertShaderToMaterial(aiMaterial* out, const ShaderDataBlock& shader);
+
+// ---------------------------------------------------------------------------
+/** @brief Load a skin file
+ *
+ *  Generally, parsing is error tolerant. There's no failure.
+ *  @param fill Receives output data
+ *  @param file File to be read.
+ *  @param io IOSystem to be used for reading
+ *  @return false if file is not accessible
+ */
+bool LoadSkin(SkinData& fill, const std::string& file,IOSystem* io);
+
+} // ! namespace Q3SHader
+
+// ---------------------------------------------------------------------------
+/** @brief Importer class to load MD3 files
+*/
+class MD3Importer : public BaseImporter
+{
+public:
+	MD3Importer();
+	~MD3Importer();
+
+
+public:
+
+	// -------------------------------------------------------------------
+	/** Returns whether the class can handle the format of the given file. 
+	* See BaseImporter::CanRead() for details.	*/
+	bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
+		bool checkSig) const;
+
+
+	// -------------------------------------------------------------------
+	/** Called prior to ReadFile().
+	* The function is a request to the importer to update its configuration
+	* basing on the Importer's configuration property list.
+	*/
+	void SetupProperties(const Importer* pImp);
+
+protected:
+
+	// -------------------------------------------------------------------
+	/** Return importer meta information.
+	 * See #BaseImporter::GetInfo for the details
+	 */
+	const aiImporterDesc* GetInfo () const;
+
+	// -------------------------------------------------------------------
+	/** Imports the given file into the given scene structure. 
+	 * See BaseImporter::InternReadFile() for details
+	 */
+	void InternReadFile( const std::string& pFile, aiScene* pScene, 
+		IOSystem* pIOHandler);
+
+	// -------------------------------------------------------------------
+	/** Validate offsets in the header
+	 */
+	void ValidateHeaderOffsets();
+	void ValidateSurfaceHeaderOffsets(const MD3::Surface* pcSurfHeader);
+
+	// -------------------------------------------------------------------
+	/** Read a Q3 multipart file
+	 *  @return true if multi part has been processed
+	 */
+	bool ReadMultipartFile();
+
+	// -------------------------------------------------------------------
+	/** Try to read the skin for a MD3 file
+	 *  @param fill Receives output information
+	 */
+	void ReadSkin(Q3Shader::SkinData& fill) const;
+
+	// -------------------------------------------------------------------
+	/** Try to read the shader for a MD3 file
+	 *  @param fill Receives output information
+	 */
+	void ReadShader(Q3Shader::ShaderData& fill) const;
+
+	// -------------------------------------------------------------------
+	/** Convert a texture path in a MD3 file to a proper value
+	 *  @param[in] texture_name Path to be converted
+	 *  @param[in] header_path Base path specified in MD3 header
+	 *  @param[out] out Receives the converted output string
+	 */
+	void ConvertPath(const char* texture_name, const char* header_path, 
+		std::string& out) const;
+
+protected:
+
+	/** Configuration option: frame to be loaded */
+	unsigned int configFrameID;
+
+	/** Configuration option: process multi-part files */
+	bool configHandleMP;
+
+	/** Configuration option: name of skin file to be read */
+	std::string configSkinFile;
+
+	/** Configuration option: name or path of shader */
+	std::string configShaderFile;
+
+	/** Configuration option: speed flag was set? */
+	bool configSpeedFlag;
+
+	/** Header of the MD3 file */
+	BE_NCONST MD3::Header* pcHeader;
+
+	/** File buffer  */
+	BE_NCONST unsigned char* mBuffer;
+
+	/** Size of the file, in bytes */
+	unsigned int fileSize;
+
+	/** Current file name */
+	std::string mFile;
+
+	/** Current base directory  */
+	std::string path;
+
+	/** Pure file we're currently reading */
+	std::string filename;
+
+	/** Output scene to be filled */
+	aiScene* mScene;
+
+	/** IO system to be used to access the data*/
+	IOSystem* mIOHandler;
+	};
+
+} // end of namespace Assimp
+
+#endif // AI_3DSIMPORTER_H_INC
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.