From 43b1542dc9449cf55cccb50d1fbc82a5f3a42894 Mon Sep 17 00:00:00 2001
From: Vincent Lejeune <vljn@ovi.com>
Date: Sat, 10 Jan 2015 18:30:04 +0100
Subject: [PATCH] Remove OCT support

---
 lib/irrlicht/CMakeLists.txt                   |   2 -
 lib/irrlicht/include/IrrCompileConfig.h       |   5 -
 lib/irrlicht/source/Irrlicht/COCTLoader.cpp   | 336 ------------------
 lib/irrlicht/source/Irrlicht/COCTLoader.h     | 141 --------
 .../source/Irrlicht/CSceneManager.cpp         |   7 -
 5 files changed, 491 deletions(-)
 delete mode 100644 lib/irrlicht/source/Irrlicht/COCTLoader.cpp
 delete mode 100644 lib/irrlicht/source/Irrlicht/COCTLoader.h

diff --git a/lib/irrlicht/CMakeLists.txt b/lib/irrlicht/CMakeLists.txt
index d46de4a55..35d87d836 100644
--- a/lib/irrlicht/CMakeLists.txt
+++ b/lib/irrlicht/CMakeLists.txt
@@ -154,7 +154,6 @@ source/Irrlicht/CMD3MeshFileLoader.cpp
 source/Irrlicht/COpenGLExtensionHandler.cpp
 source/Irrlicht/CImageLoaderWAL.cpp
 source/Irrlicht/CXMLWriter.cpp
-source/Irrlicht/COCTLoader.cpp
 source/Irrlicht/COBJMeshFileLoader.cpp
 source/Irrlicht/CSceneNodeAnimatorCameraFPS.cpp
 source/Irrlicht/CImageLoaderPPM.cpp
@@ -293,7 +292,6 @@ source/Irrlicht/CIrrDeviceWin32.h
 source/Irrlicht/CGUIEditBox.h
 source/Irrlicht/CGUISpriteBank.h
 source/Irrlicht/CSceneNodeAnimatorFlyStraight.h
-source/Irrlicht/COCTLoader.h
 source/Irrlicht/COpenGLExtensionHandler.h
 source/Irrlicht/CImageWriterPSD.h
 source/Irrlicht/CGUIScrollBar.h
diff --git a/lib/irrlicht/include/IrrCompileConfig.h b/lib/irrlicht/include/IrrCompileConfig.h
index d5b5a61ab..59d592798 100644
--- a/lib/irrlicht/include/IrrCompileConfig.h
+++ b/lib/irrlicht/include/IrrCompileConfig.h
@@ -342,11 +342,6 @@ B3D, MS3D or X meshes */
 #ifdef NO_IRR_COMPILE_WITH_OBJ_LOADER_
 #undef _IRR_COMPILE_WITH_OBJ_LOADER_
 #endif
-//! Define _IRR_COMPILE_WITH_OCT_LOADER_ if you want to load FSRad OCT files
-#define _IRR_COMPILE_WITH_OCT_LOADER_
-#ifdef NO_IRR_COMPILE_WITH_OCT_LOADER_
-#undef _IRR_COMPILE_WITH_OCT_LOADER_
-#endif
 //! Define _IRR_COMPILE_WITH_LWO_LOADER_ if you want to load Lightwave3D files
 #define _IRR_COMPILE_WITH_LWO_LOADER_
 #ifdef NO_IRR_COMPILE_WITH_LWO_LOADER_
diff --git a/lib/irrlicht/source/Irrlicht/COCTLoader.cpp b/lib/irrlicht/source/Irrlicht/COCTLoader.cpp
deleted file mode 100644
index fd03a9b97..000000000
--- a/lib/irrlicht/source/Irrlicht/COCTLoader.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright (C) 2002-2012 Nikolaus Gebhardt
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-//
-// originally written by Murphy McCauley, see COCTLoader.h for details.
-//
-// COCTLoader by Murphy McCauley (February 2005)
-// An Irrlicht loader for OCT files
-//
-// See the header file for additional information including use and distribution rights.
-
-#include "IrrCompileConfig.h"
-#ifdef _IRR_COMPILE_WITH_OCT_LOADER_
-
-#include "COCTLoader.h"
-#include "IVideoDriver.h"
-#include "IFileSystem.h"
-#include "os.h"
-#include "SAnimatedMesh.h"
-#include "SMeshBufferLightMap.h"
-#include "irrString.h"
-#include "ISceneManager.h"
-
-namespace irr
-{
-namespace scene
-{
-
-//! constructor
-COCTLoader::COCTLoader(ISceneManager* smgr, io::IFileSystem* fs)
-	: SceneManager(smgr), FileSystem(fs)
-{
-	#ifdef _DEBUG
-	setDebugName("COCTLoader");
-	#endif
-	if (FileSystem)
-		FileSystem->grab();
-}
-
-
-//! destructor
-COCTLoader::~COCTLoader()
-{
-	if (FileSystem)
-		FileSystem->drop();
-}
-
-
-// Doesn't really belong here, but it's jammed in for now.
-void COCTLoader::OCTLoadLights(io::IReadFile* file, scene::ISceneNode * parent, f32 radius, f32 intensityScale, bool rewind)
-{
-	if (rewind)
-		file->seek(0);
-
-	octHeader header;
-	file->read(&header, sizeof(octHeader));
-
-	file->seek(sizeof(octVert)*header.numVerts, true);
-	file->seek(sizeof(octFace)*header.numFaces, true);
-	file->seek(sizeof(octTexture)*header.numTextures, true);
-	file->seek(sizeof(octLightmap)*header.numLightmaps, true);
-
-	octLight * lights = new octLight[header.numLights];
-	file->read(lights, header.numLights * sizeof(octLight));
-
-	//TODO: Skip past my extended data just for good form
-
-	for (u32 i = 0; i < header.numLights; i++)
-	{
-		const f32 intensity = lights[i].intensity * intensityScale;
-
-		SceneManager->addLightSceneNode(parent, core::vector3df(lights[i].pos[0], lights[i].pos[2], lights[i].pos[1]),
-			video::SColorf(lights[i].color[0] * intensity, lights[i].color[1] * intensity, lights[i].color[2] * intensity, 1.0f),
-			radius);
-	}
-}
-
-
-//! creates/loads an animated mesh from the file.
-//! \return Pointer to the created mesh. Returns 0 if loading failed.
-//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
-//! See IReferenceCounted::drop() for more information.
-IAnimatedMesh* COCTLoader::createMesh(io::IReadFile* file)
-{
-	if (!file)
-		return 0;
-
-	octHeader header;
-	file->read(&header, sizeof(octHeader));
-
-	octVert * verts = new octVert[header.numVerts];
-	octFace * faces = new octFace[header.numFaces];
-	octTexture * textures = new octTexture[header.numTextures];
-	octLightmap * lightmaps = new octLightmap[header.numLightmaps];
-	octLight * lights = new octLight[header.numLights];
-
-	file->read(verts, sizeof(octVert) * header.numVerts);
-	file->read(faces, sizeof(octFace) * header.numFaces);
-	//TODO: Make sure id is in the legal range for Textures and Lightmaps
-
-	u32 i;
-	for (i = 0; i < header.numTextures; i++) {
-		octTexture t;
-		file->read(&t, sizeof(octTexture));
-		textures[t.id] = t;
-	}
-	for (i = 0; i < header.numLightmaps; i++) {
-		octLightmap t;
-		file->read(&t, sizeof(octLightmap));
-		lightmaps[t.id] = t;
-	}
-	file->read(lights, sizeof(octLight) * header.numLights);
-
-	//TODO: Now read in my extended OCT header (flexible lightmaps and vertex normals)
-
-
-	// This is the method Nikolaus Gebhardt used in the Q3 loader -- create a
-	// meshbuffer for every possible combination of lightmap and texture including
-	// a "null" texture and "null" lightmap.  Ones that end up with nothing in them
-	// will be removed later.
-
-	SMesh * Mesh = new SMesh();
-	for (i=0; i<(header.numTextures+1) * (header.numLightmaps+1); ++i)
-	{
-		scene::SMeshBufferLightMap* buffer = new scene::SMeshBufferLightMap();
-
-		buffer->Material.MaterialType = video::EMT_LIGHTMAP;
-		buffer->Material.Lighting = false;
-		Mesh->addMeshBuffer(buffer);
-		buffer->drop();
-	}
-
-
-	// Build the mesh buffers
-	for (i = 0; i < header.numFaces; i++)
-	{
-		if (faces[i].numVerts < 3)
-			continue;
-
-		const f32* const a = verts[faces[i].firstVert].pos;
-		const f32* const b = verts[faces[i].firstVert+1].pos;
-		const f32* const c = verts[faces[i].firstVert+2].pos;
-		const core::vector3df normal =
-			core::plane3df(core::vector3df(a[0],a[1],a[2]), core::vector3df(b[0],c[1],c[2]), core::vector3df(c[0],c[1],c[2])).Normal;
-
-		const u32 textureID = core::min_(s32(faces[i].textureID), s32(header.numTextures - 1)) + 1;
-		const u32 lightmapID = core::min_(s32(faces[i].lightmapID),s32(header.numLightmaps - 1)) + 1;
-		SMeshBufferLightMap * meshBuffer = (SMeshBufferLightMap*)Mesh->getMeshBuffer(lightmapID * (header.numTextures + 1) + textureID);
-		const u32 base = meshBuffer->Vertices.size();
-
-		// Add this face's verts
-		u32 v;
-		for (v = 0; v < faces[i].numVerts; ++v)
-		{
-			octVert * vv = &verts[faces[i].firstVert + v];
-			video::S3DVertex2TCoords vert;
-			vert.Pos.set(vv->pos[0], vv->pos[1], vv->pos[2]);
-			vert.Color = video::SColor(0,255,255,255);
-			vert.Normal.set(normal);
-
-			if (textureID == 0)
-			{
-				// No texture -- just a lightmap.  Thus, use lightmap coords for texture 1.
-				// (the actual texture will be swapped later)
-				vert.TCoords.set(vv->lc[0], vv->lc[1]);
-			}
-			else
-			{
-				vert.TCoords.set(vv->tc[0], vv->tc[1]);
-				vert.TCoords2.set(vv->lc[0], vv->lc[1]);
-			}
-
-			meshBuffer->Vertices.push_back(vert);
-		}
-
-		// Now add the indices
-		// This weird loop turns convex polygons into triangle strips.
-		// I do it this way instead of a simple fan because it usually looks a lot better in wireframe, for example.
-		// High, Low
-		u32 h = faces[i].numVerts - 1;
-		u32 l = 0;
-		for (v = 0; v < faces[i].numVerts - 2; ++v)
-		{
-			const u32 center = (v & 1)? h - 1: l + 1;
-
-			meshBuffer->Indices.push_back(base + h);
-			meshBuffer->Indices.push_back(base + l);
-			meshBuffer->Indices.push_back(base + center);
-
-			if (v & 1)
-				--h;
-			else
-				++l;
-		}
-	}
-
-	// load textures
-	core::array<video::ITexture*> tex;
-	tex.reallocate(header.numTextures + 1);
-	tex.push_back(0);
-
-	const core::stringc relpath = FileSystem->getFileDir(file->getFileName())+"/";
-	for (i = 1; i < (header.numTextures + 1); i++)
-	{
-		core::stringc path(textures[i-1].fileName);
-		path.replace('\\','/');
-		if (FileSystem->existFile(path))
-			tex.push_back(SceneManager->getVideoDriver()->getTexture(path));
-		else
-			// try to read in the relative path of the OCT file
-			tex.push_back(SceneManager->getVideoDriver()->getTexture( (relpath + path) ));
-	}
-
-	// prepare lightmaps
-	core::array<video::ITexture*> lig;
-	lig.set_used(header.numLightmaps + 1);
-	lig[0] = 0;
-
-	const u32 lightmapWidth = 128;
-	const u32 lightmapHeight = 128;
-	const core::dimension2d<u32> lmapsize(lightmapWidth, lightmapHeight);
-
-	bool oldMipMapState = SceneManager->getVideoDriver()->getTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS);
-	SceneManager->getVideoDriver()->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
-
-	video::IImage* tmpImage = SceneManager->getVideoDriver()->createImage(video::ECF_R8G8B8, lmapsize);
-	for (i = 1; i < (header.numLightmaps + 1); ++i)
-	{
-		core::stringc lightmapname = file->getFileName();
-		lightmapname += ".lightmap.";
-		lightmapname += (int)i;
-
-		const octLightmap* lm = &lightmaps[i-1];
-
-		for (u32 x=0; x<lightmapWidth; ++x)
-		{
-			for (u32 y=0; y<lightmapHeight; ++y)
-			{
-				tmpImage->setPixel(x, y,
-						video::SColor(255,
-						lm->data[x][y][2],
-						lm->data[x][y][1],
-						lm->data[x][y][0]));
-			}
-		}
-
-		lig[i] = SceneManager->getVideoDriver()->addTexture(lightmapname.c_str(), tmpImage);
-	}
-	tmpImage->drop();
-	SceneManager->getVideoDriver()->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, oldMipMapState);
-
-	// Free stuff
-	delete [] verts;
-	delete [] faces;
-	delete [] textures;
-	delete [] lightmaps;
-	delete [] lights;
-
-	// attach materials
-	for (i = 0; i < header.numLightmaps + 1; i++)
-	{
-		for (u32 j = 0; j < header.numTextures + 1; j++)
-		{
-			u32 mb = i * (header.numTextures + 1) + j;
-			SMeshBufferLightMap * meshBuffer = (SMeshBufferLightMap*)Mesh->getMeshBuffer(mb);
-			meshBuffer->Material.setTexture(0, tex[j]);
-			meshBuffer->Material.setTexture(1, lig[i]);
-
-			if (meshBuffer->Material.getTexture(0) == 0)
-			{
-				// This material has no texture, so we'll just show the lightmap if there is one.
-				// We swapped the texture coordinates earlier.
-				meshBuffer->Material.setTexture(0, meshBuffer->Material.getTexture(1));
-				meshBuffer->Material.setTexture(1, 0);
-			}
-			if (meshBuffer->Material.getTexture(1) == 0)
-			{
-				// If there is only one texture, it should be solid and lit.
-				// Among other things, this way you can preview OCT lights.
-				meshBuffer->Material.MaterialType = video::EMT_SOLID;
-				meshBuffer->Material.Lighting = true;
-			}
-		}
-	}
-
-	// delete all buffers without geometry in it.
-	i = 0;
-	while(i < Mesh->MeshBuffers.size())
-	{
-		if (Mesh->MeshBuffers[i]->getVertexCount() == 0 ||
-			Mesh->MeshBuffers[i]->getIndexCount() == 0 ||
-			Mesh->MeshBuffers[i]->getMaterial().getTexture(0) == 0)
-		{
-			// Meshbuffer is empty -- drop it
-			Mesh->MeshBuffers[i]->drop();
-			Mesh->MeshBuffers.erase(i);
-		}
-		else
-		{
-			++i;
-		}
-	}
-
-
-	// create bounding box
-	for (i = 0; i < Mesh->MeshBuffers.size(); ++i)
-	{
-		Mesh->MeshBuffers[i]->recalculateBoundingBox();
-	}
-	Mesh->recalculateBoundingBox();
-
-
-	// Set up an animated mesh to hold the mesh
-	SAnimatedMesh* AMesh = new SAnimatedMesh();
-	AMesh->Type = EAMT_OCT;
-	AMesh->addMesh(Mesh);
-	AMesh->recalculateBoundingBox();
-	Mesh->drop();
-
-	return AMesh;
-}
-
-
-//! returns true if the file maybe is able to be loaded by this class
-//! based on the file extension (e.g. ".bsp")
-bool COCTLoader::isALoadableFileExtension(const io::path& filename) const
-{
-	return core::hasFileExtension ( filename, "oct" );
-}
-
-
-} // end namespace scene
-} // end namespace irr
-
-#endif // _IRR_COMPILE_WITH_OCT_LOADER_
-
diff --git a/lib/irrlicht/source/Irrlicht/COCTLoader.h b/lib/irrlicht/source/Irrlicht/COCTLoader.h
deleted file mode 100644
index 57eef6115..000000000
--- a/lib/irrlicht/source/Irrlicht/COCTLoader.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (C) 2002-2012 Nikolaus Gebhardt 
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-//
-// Because I (Nikolaus Gebhardt) did some changes to Murphy McCauley's loader,
-// I'm writing this down here:
-// - Replaced all dependencies to STL and stdio with irr:: methods/constructs
-// - Disabled logging define
-// - Changed some minor things (Don't remember what exactly.)
-// Thanks a lot to Murphy McCauley for writing this loader.
-
-//
-//  COCTLoader by Murphy McCauley (February 2005)
-//  An Irrlicht loader for OCT files
-//
-//  OCT file format information comes from the sourcecode of the Fluid Studios
-//  Radiosity Processor by Paul Nettle.  You can get that sourcecode from
-//  http://www.fluidstudios.com .
-//
-//  Parts of this code are from Irrlicht's CQ3LevelMesh and C3DSMeshFileLoader,
-//  and are Copyright (C) 2002-2004 Nikolaus Gebhardt.
-//
-//  Use of this code is subject to the following:
-//
-//  This software is provided 'as-is', without any express or implied
-//  warranty.  In no event will the authors be held liable for any damages
-//  arising from the use of this software.
-//
-//  Permission is granted to anyone to use this software for any purpose,
-//  including commercial applications, and to alter it and redistribute it
-//  freely, subject to the following restrictions:
-//
-//  1. The origin of this software must not be misrepresented; you must not
-//     claim that you wrote the original software. If you use this software
-//     in a product, an acknowledgment in the product documentation would be
-//     appreciated but is not required.
-//  2. Altered source versions must be plainly marked as such, and must not be
-//     misrepresented as being the original software.
-//  3. This notice may not be removed or altered from any source distribution.
-//  4. You may not use this software to directly or indirectly cause harm to others.
-
-
-#ifndef __C_OCT_LOADER_H_INCLUDED__
-#define __C_OCT_LOADER_H_INCLUDED__
-
-#include "IMeshLoader.h"
-#include "IReadFile.h"
-#include "SMesh.h"
-#include "irrString.h"
-
-namespace irr
-{
-namespace io
-{
-	class IFileSystem;
-} // end namespace io
-namespace scene
-{
-	class ISceneManager;
-	class ISceneNode;
-
-	class COCTLoader : public IMeshLoader
-	{
-	public:
-		//! constructor
-		COCTLoader(ISceneManager* smgr, io::IFileSystem* fs);
-
-		//! destructor
-		virtual ~COCTLoader();
-
-		//! returns true if the file maybe is able to be loaded by this class
-		//! based on the file extension (e.g. ".cob")
-		virtual bool isALoadableFileExtension(const io::path& filename) const;
-
-		//! creates/loads an animated mesh from the file.
-		//! \return Pointer to the created mesh. Returns 0 if loading failed.
-		//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
-		//! See IReferenceCounted::drop() for more information.
-		virtual IAnimatedMesh* createMesh(io::IReadFile* file);
-
-		void OCTLoadLights(io::IReadFile* file,
-				ISceneNode * parent = 0, f32 radius = 500.0f,
-				f32 intensityScale = 0.0000001f*2.5,
-				bool rewind = true);
-
-	private:
-		struct octHeader {
-			u32 numVerts;
-			u32 numFaces;
-			u32 numTextures;
-			u32 numLightmaps;
-			u32 numLights;
-		};
-
-		struct octHeaderEx {
-			u32 magic; // 'OCTX' - 0x4F435458L
-			u32 numLightmaps;
-			u32 lightmapWidth;
-			u32 lightmapHeight;
-			u32 containsVertexNormals;
-		};
-
-		struct octFace {
-			u32 firstVert;
-			u32 numVerts;
-			u32 textureID;
-			u32 lightmapID;
-			f32 plane[4];
-		};
-
-		struct octVert {
-			f32 tc[2];
-			f32 lc[2];
-			f32 pos[3];
-		};
-
-		struct octTexture {
-			u32 id;
-			char fileName[64];
-		};
-
-		struct octLightmap {
-			u32 id;
-			u8 data[128][128][3];
-		};
-
-		struct octLight {
-			f32 pos[3];
-			f32 color[3];
-			u32 intensity;
-		};
-
-		ISceneManager* SceneManager;
-		io::IFileSystem* FileSystem;
-	};
-
-} // end namespace scene
-} // end namespace irr
-
-#endif
-
diff --git a/lib/irrlicht/source/Irrlicht/CSceneManager.cpp b/lib/irrlicht/source/Irrlicht/CSceneManager.cpp
index db1748757..58ac61f37 100644
--- a/lib/irrlicht/source/Irrlicht/CSceneManager.cpp
+++ b/lib/irrlicht/source/Irrlicht/CSceneManager.cpp
@@ -52,10 +52,6 @@
 #include "CXMeshFileLoader.h"
 #endif
 
-#ifdef _IRR_COMPILE_WITH_OCT_LOADER_
-#include "COCTLoader.h"
-#endif
-
 #ifdef _IRR_COMPILE_WITH_CSM_LOADER_
 #include "CCSMLoader.h"
 #endif
@@ -220,9 +216,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
 	#ifdef _IRR_COMPILE_WITH_STL_LOADER_
 	MeshLoaderList.push_back(new CSTLMeshFileLoader());
 	#endif
-	#ifdef _IRR_COMPILE_WITH_OCT_LOADER_
-	MeshLoaderList.push_back(new COCTLoader(this, FileSystem));
-	#endif
 	#ifdef _IRR_COMPILE_WITH_CSM_LOADER_
 	MeshLoaderList.push_back(new CCSMLoader(this, FileSystem));
 	#endif