From 849336343d3958abf920cfe75b3c35fc3381eaee Mon Sep 17 00:00:00 2001 From: cutealien Date: Mon, 16 Oct 2023 21:17:56 +0000 Subject: [PATCH] Merging r6519 through r6561 from trunk to ogl-es branch git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6562 dfc29bdd-3216-0410-991c-e03cc46cb475 --- changes.txt | 25 +++ examples/21.Quake3Explorer/main.cpp | 4 +- include/IAnimatedMesh.h | 1 - include/ICameraSceneNode.h | 4 +- include/IColladaMeshWriter.h | 1 - include/IGUIImageList.h | 3 +- include/IGUIWindow.h | 1 - include/IImage.h | 1 - include/IImageWriter.h | 1 - include/IIndexBuffer.h | 1 - include/IMeshLoader.h | 1 - include/ISceneManager.h | 1 - include/ISceneNodeAnimator.h | 2 - include/ISceneNodeAnimatorCameraFPS.h | 1 - include/ISceneUserDataSerializer.h | 2 - include/ISkinnedMesh.h | 3 +- include/ITexture.h | 16 +- include/SMaterial.h | 1 - include/irrString.h | 2 - include/matrix4.h | 189 +++++------------ include/vector3d.h | 5 +- source/Irrlicht/C3DSMeshFileLoader.cpp | 2 +- source/Irrlicht/CAnimatedMeshHalfLife.cpp | 2 +- source/Irrlicht/CAnimatedMeshMD2.cpp | 1 - source/Irrlicht/CAnimatedMeshMD2.h | 2 - source/Irrlicht/CAnimatedMeshMD3.h | 5 +- source/Irrlicht/CAnimatedMeshSceneNode.cpp | 4 +- source/Irrlicht/CAttributeImpl.h | 1 - source/Irrlicht/CB3DMeshFileLoader.cpp | 34 ++- source/Irrlicht/CB3DMeshWriter.cpp | 3 +- source/Irrlicht/CB3DMeshWriter.h | 3 - source/Irrlicht/CBSPMeshFileLoader.h | 1 - source/Irrlicht/CBillboardSceneNode.cpp | 1 - source/Irrlicht/CBillboardSceneNode.h | 2 +- source/Irrlicht/CCSMLoader.cpp | 2 +- source/Irrlicht/CCSMLoader.h | 2 - source/Irrlicht/CColladaFileLoader.cpp | 2 + source/Irrlicht/CColladaFileLoader.h | 3 +- source/Irrlicht/CColladaMeshWriter.cpp | 1 - source/Irrlicht/CColorConverter.cpp | 3 +- source/Irrlicht/CColorConverter.h | 2 +- source/Irrlicht/CCubeSceneNode.cpp | 3 - source/Irrlicht/CCubeSceneNode.h | 2 +- source/Irrlicht/CDMFLoader.cpp | 3 +- source/Irrlicht/CDMFLoader.h | 3 - source/Irrlicht/CFileList.cpp | 3 +- source/Irrlicht/CGUIColorSelectDialog.cpp | 4 - source/Irrlicht/CGUIComboBox.cpp | 2 - source/Irrlicht/CGUIContextMenu.cpp | 1 - source/Irrlicht/CGUIEditBox.cpp | 1 - source/Irrlicht/CGUIFileOpenDialog.cpp | 4 - source/Irrlicht/CGUIListBox.cpp | 1 - source/Irrlicht/CGUIMenu.cpp | 3 - source/Irrlicht/CGUIMessageBox.cpp | 1 - source/Irrlicht/CGUIMessageBox.h | 1 - source/Irrlicht/CGUIModalScreen.cpp | 1 - source/Irrlicht/CGUIProfiler.cpp | 2 +- source/Irrlicht/CGUIScrollBar.cpp | 4 - source/Irrlicht/CGUISpinBox.cpp | 7 +- source/Irrlicht/CGUITabControl.cpp | 3 +- source/Irrlicht/CGUITabControl.h | 1 - source/Irrlicht/CGUITable.cpp | 3 +- source/Irrlicht/CGUIToolBar.cpp | 1 - source/Irrlicht/CGUITreeView.cpp | 1 - source/Irrlicht/CGUIWindow.cpp | 2 - source/Irrlicht/CGeometryCreator.cpp | 2 - source/Irrlicht/CGeometryCreator.h | 2 +- source/Irrlicht/CImage.cpp | 1 - source/Irrlicht/CImageLoaderBMP.cpp | 200 +++++++++++++----- source/Irrlicht/CImageLoaderDDS.cpp | 5 +- source/Irrlicht/CImageLoaderPCX.cpp | 1 - source/Irrlicht/CImageLoaderPNG.cpp | 2 +- source/Irrlicht/CImageLoaderPSD.cpp | 1 - source/Irrlicht/CImageLoaderPVR.cpp | 1 - source/Irrlicht/CImageLoaderRGB.cpp | 1 - source/Irrlicht/CImageLoaderTGA.cpp | 93 +++++--- source/Irrlicht/CImageLoaderWAL.cpp | 2 - source/Irrlicht/CImageWriterBMP.cpp | 1 - source/Irrlicht/CImageWriterJPG.cpp | 3 +- source/Irrlicht/CImageWriterPCX.cpp | 3 +- source/Irrlicht/CImageWriterPNG.cpp | 3 +- source/Irrlicht/CImageWriterPPM.cpp | 1 - source/Irrlicht/CImageWriterPSD.cpp | 1 - source/Irrlicht/CImageWriterTGA.cpp | 1 - source/Irrlicht/CIrrDeviceOSX.h | 2 +- source/Irrlicht/CIrrDeviceOSX.mm | 10 +- source/Irrlicht/CIrrDeviceWin32.h | 4 +- source/Irrlicht/CIrrMeshFileLoader.cpp | 4 +- source/Irrlicht/CIrrMeshFileLoader.h | 4 - source/Irrlicht/CLMTSMeshFileLoader.cpp | 5 +- source/Irrlicht/CLWOMeshFileLoader.h | 2 +- source/Irrlicht/CLimitReadFile.cpp | 1 - source/Irrlicht/CLimitReadFile.h | 1 - source/Irrlicht/CLogger.cpp | 2 + source/Irrlicht/CLogger.h | 2 - source/Irrlicht/CMD2MeshFileLoader.cpp | 2 + source/Irrlicht/CMD3MeshFileLoader.cpp | 2 +- source/Irrlicht/CMD3MeshFileLoader.h | 3 - source/Irrlicht/CMY3DMeshFileLoader.cpp | 2 +- source/Irrlicht/CMY3DMeshFileLoader.h | 3 +- source/Irrlicht/CMemoryFile.cpp | 1 - source/Irrlicht/CMemoryFile.h | 1 - source/Irrlicht/CMeshSceneNode.cpp | 3 - source/Irrlicht/CMountPointReader.cpp | 1 - source/Irrlicht/CNPKReader.h | 2 - source/Irrlicht/CNullDriver.cpp | 1 + source/Irrlicht/CNullDriver.h | 1 - source/Irrlicht/COBJMeshFileLoader.cpp | 68 +++--- source/Irrlicht/COBJMeshWriter.cpp | 2 - source/Irrlicht/COCTLoader.cpp | 3 +- source/Irrlicht/COCTLoader.h | 2 - source/Irrlicht/COgreMeshFileLoader.cpp | 3 +- source/Irrlicht/COgreMeshFileLoader.h | 6 +- source/Irrlicht/COpenGLCacheHandler.h | 2 - source/Irrlicht/COpenGLCoreCacheHandler.h | 2 + source/Irrlicht/COpenGLNormalMapRenderer.cpp | 2 - .../Irrlicht/COpenGLParallaxMapRenderer.cpp | 2 - source/Irrlicht/COpenGLSLMaterialRenderer.cpp | 2 - .../COpenGLShaderMaterialRenderer.cpp | 2 - .../Irrlicht/COpenGLShaderMaterialRenderer.h | 1 + source/Irrlicht/CPakReader.h | 3 - source/Irrlicht/CParticleGravityAffector.cpp | 1 - source/Irrlicht/CParticleGravityAffector.h | 1 - source/Irrlicht/CParticleMeshEmitter.cpp | 1 + source/Irrlicht/CParticleMeshEmitter.h | 3 +- source/Irrlicht/CParticlePointEmitter.h | 1 - source/Irrlicht/CParticleSphereEmitter.h | 1 - source/Irrlicht/CParticleSystemSceneNode.h | 2 +- source/Irrlicht/CProfiler.cpp | 1 + source/Irrlicht/CProfiler.h | 1 - source/Irrlicht/CQ3LevelMesh.cpp | 2 - source/Irrlicht/CQ3LevelMesh.h | 3 +- source/Irrlicht/CQuake3ShaderSceneNode.cpp | 1 - source/Irrlicht/CQuake3ShaderSceneNode.h | 3 +- source/Irrlicht/CReadFile.h | 1 - source/Irrlicht/CSMFMeshFileLoader.cpp | 2 +- source/Irrlicht/CSTLMeshWriter.h | 2 +- source/Irrlicht/CSceneCollisionManager.cpp | 1 - source/Irrlicht/CSceneLoaderIrr.cpp | 3 +- source/Irrlicht/CSceneManager.cpp | 1 - source/Irrlicht/CSceneNodeAnimatorCameraFPS.h | 1 - .../Irrlicht/CSceneNodeAnimatorCameraMaya.h | 2 +- source/Irrlicht/CSkinnedMesh.h | 5 +- source/Irrlicht/CSkyBoxSceneNode.cpp | 1 - source/Irrlicht/CSkyDomeSceneNode.cpp | 2 - source/Irrlicht/CSkyDomeSceneNode.h | 2 +- source/Irrlicht/CSoftwareDriver.cpp | 1 + source/Irrlicht/CSoftwareDriver.h | 2 +- source/Irrlicht/CSoftwareDriver2.h | 1 + source/Irrlicht/CSphereSceneNode.cpp | 2 - source/Irrlicht/CTarReader.cpp | 2 +- source/Irrlicht/CTarReader.h | 3 - source/Irrlicht/CTerrainSceneNode.cpp | 3 - source/Irrlicht/CTextSceneNode.cpp | 2 +- source/Irrlicht/CTimer.h | 4 +- source/Irrlicht/CVolumeLightSceneNode.cpp | 2 - source/Irrlicht/CWADReader.h | 2 - source/Irrlicht/CWriteFile.cpp | 1 - source/Irrlicht/CWriteFile.h | 1 - source/Irrlicht/CXMLWriter.cpp | 1 - source/Irrlicht/CXMeshFileLoader.cpp | 3 +- source/Irrlicht/CZipReader.h | 1 - source/Irrlicht/EProfileIDs.h | 6 +- source/Irrlicht/Irrlicht17.0.vcxproj | 5 + source/Irrlicht/SB3DStructs.h | 2 + source/Irrlicht/irrXML.cpp | 3 - source/Irrlicht/os.h | 1 - source/Irrlicht/utf8.cpp | 1 - tests/tests-last-passed-at.txt | 2 +- 169 files changed, 465 insertions(+), 511 deletions(-) diff --git a/changes.txt b/changes.txt index 96e07797..56ecbf89 100644 --- a/changes.txt +++ b/changes.txt @@ -11,6 +11,8 @@ Changes in ogl-es (not yet released - will be merged with trunk at some point) -------------------------- Changes in 1.9 (not yet released) +- TGA loader no longer reduces 24&32 bit TGA's with palettes to 16 bit. Thanks @erlehmann for report: https://irrlicht.sourceforge.io/forum/viewtopic.php?t=52925 +- Fix compile error with OS X 10.10 SDK, bug #463. Thanks @Ryan Schmidt for report and patch. - Optimize quaternion::rotationFromTo. Thanks @Robert Eisele for patch and proof (https://raw.org/proof/quaternion-from-two-vectors) - Shader material example shows now how to pass material values. In 1.8 we could still use gl_FrontMaterial, but that is no longer supported in shaders @@ -408,6 +410,29 @@ Changes in 1.9 (not yet released) -------------------------- Changes in 1.8.6 +- CXMeshFileLoader: fix buffer overreads with text format. Thanks @sfan5 for report and patch. + Patch (commit 6f4f7c4 to Minetest): https://github.com/minetest/irrlicht/commit/6f4f7c4d75c9d563e98d3936ed8bc6e248dc14a8 +- Fix CB3DMeshFileLoader::readString. Prevent adding a character beyond file-end. Thanks @sfan5 for report and patch. + Original patch (commit 103ab16 to Minetest): https://github.com/minetest/irrlicht/commit/103ab16679a42cb1bfa4cc4e6316195ec2d139b6 +- CB3DMeshFileLoader: add some bounds checks. Thanks @sfan5 for report and patch. + Original patch (commit 64688f4 to Minetest): https://github.com/minetest/irrlicht/commit/64688f449099246ec27eb013f58d72a0abb1c6e6 +- TGA loader: Fix number overflow causing crashes. Thanks @sfan5 for fuzzing test. +- TGA loader: Fix several buffer overflows. Thanks @erlehmann for report and @sfan5 for fuzzing test: https://github.com/minetest/irrlicht/issues/236 +- COBJMeshFilerLoder: prevent buffer overruns from loading files passing negative indices. Thanks @sfan5 fore report and patch. + Patch (commit 827710f to Minetest): https://github.com/minetest/irrlicht/commit/827710f74a615f53b2a1b0c539c58c2b6124f883 +- COBJMeshFilerLoder: fix buffer overruns when loading empty face lines. Thanks @sfan5 fore report and patch. + Patch (commit 80e1609 to Minetest): https://github.com/minetest/irrlicht/commit/80e160935d3c2677344b0968c2690f63083a98dd (partially applied) +- CObjMeshFileLoader: Backport fixes from trunk to avoid unnecessary memory allocations (speedup) +- CObjMeshFileLoader: Backport fixes from trunk to avoid some buffer overruns +- CImageLoaderBMP: Fix handling 4 bit RLE encoding. Thanks @sfan5 finding first bug and reporting (had some more) +- CImageLoaderBMP: add bound checks to RLE decompression. Thanks @sfan5 for report and patch + Patch (commit 4506d23 to Minetest): https://github.com/minetest/irrlicht/commit/4506d23dc3fa48332b5ca6c05633aebdbac673be +- CImageLoaderBMP: check bitmap data against required size. Thanks @sfan5 for report and patch + Report: https://irrlicht.sourceforge.io/forum/viewtopic.php?p=307195 + Patch (commit 028cb8d to Minetest): https://github.com/minetest/irrlicht/commit/028cb8dbed8266264a5804108191f56e238db1bc +- Fix OSX 10.9X build problem related to NSApplication setDelegate calls getting casted to wrong class (Bug #462 and also fixing older Bug #297) + Thanks @Ryan Schmidt for bug report and patch. +- Backport: Fix compiling for Apple silicon (Bugs #452 and #461). Thanks @Ryan Schmidt for bug report and updated patch. - Fix compiling on OSX with case-sensitive filesystems: IrrFramework-Info.plist now always starting with upper-case. Thanks @Ryan Schmidt for bug report and patch. - Fix: The build-in libpng now uses same zlib headers as rest of Irrlicht. diff --git a/examples/21.Quake3Explorer/main.cpp b/examples/21.Quake3Explorer/main.cpp index ecb98b56..f6a1adf0 100644 --- a/examples/21.Quake3Explorer/main.cpp +++ b/examples/21.Quake3Explorer/main.cpp @@ -734,7 +734,7 @@ void CQuake3EventHandler::CreateGUI() gui.Tesselation->setMax ( 12 ); gui.Tesselation->setSmallStep ( 1 ); gui.Tesselation->setLargeStep ( 1 ); - gui.Tesselation->setPos ( Game->loadParam.patchTesselation ); + gui.Tesselation->setPos ( Game->loadParam.patchTessellation ); gui.Tesselation->setToolTipText ( L"How smooth should curved surfaces be rendered" ); gui.Collision = env->addCheckBox ( true, rect( dim.Width - 400, 150, dim.Width - 300, 166 ), gui.Window,-1, L"Collision" ); @@ -1381,7 +1381,7 @@ bool CQuake3EventHandler::OnEvent(const SEvent& eve) else if ( eve.GUIEvent.Caller == gui.Tesselation && eve.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED ) { - Game->loadParam.patchTesselation = gui.Tesselation->getPos (); + Game->loadParam.patchTessellation = gui.Tesselation->getPos (); } else if ( eve.GUIEvent.Caller == gui.Gamma && eve.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED ) diff --git a/include/IAnimatedMesh.h b/include/IAnimatedMesh.h index ab9be06d..95797615 100644 --- a/include/IAnimatedMesh.h +++ b/include/IAnimatedMesh.h @@ -5,7 +5,6 @@ #ifndef IRR_I_ANIMATED_MESH_H_INCLUDED #define IRR_I_ANIMATED_MESH_H_INCLUDED -#include "aabbox3d.h" #include "IMesh.h" namespace irr diff --git a/include/ICameraSceneNode.h b/include/ICameraSceneNode.h index 101c756f..245cf7dd 100644 --- a/include/ICameraSceneNode.h +++ b/include/ICameraSceneNode.h @@ -116,7 +116,7 @@ namespace scene /** \return The aspect ratio of the camera. */ virtual f32 getAspectRatio() const =0; - //! Gets the field of view of the camera. + //! Gets the vertical field of view of the camera. /** \return The field of view of the camera in radians. */ virtual f32 getFOV() const =0; @@ -135,7 +135,7 @@ namespace scene \param aspect: New aspect ratio. */ virtual void setAspectRatio(f32 aspect) =0; - //! Sets the field of view (Default: PI / 2.5f) + //! Sets the vertical field of view (Default: PI / 2.5f) /** Also changes projection matrix and resets IsOrthogonal flag. \param fovy: New field of view in radians. */ virtual void setFOV(f32 fovy) =0; diff --git a/include/IColladaMeshWriter.h b/include/IColladaMeshWriter.h index 0c700810..260ba8e7 100644 --- a/include/IColladaMeshWriter.h +++ b/include/IColladaMeshWriter.h @@ -7,7 +7,6 @@ #include "IMeshWriter.h" #include "ISceneNode.h" -#include "IAnimatedMesh.h" #include "SMaterial.h" namespace irr diff --git a/include/IGUIImageList.h b/include/IGUIImageList.h index 2280f05c..89d14a1b 100644 --- a/include/IGUIImageList.h +++ b/include/IGUIImageList.h @@ -4,9 +4,8 @@ #ifndef IRR_I_GUI_IMAGE_LIST_H_INCLUDED #define IRR_I_GUI_IMAGE_LIST_H_INCLUDED -#include "IGUIElement.h" #include "rect.h" -#include "irrTypes.h" +#include "IReferenceCounted.h" namespace irr { diff --git a/include/IGUIWindow.h b/include/IGUIWindow.h index 88723b00..2b36494e 100644 --- a/include/IGUIWindow.h +++ b/include/IGUIWindow.h @@ -6,7 +6,6 @@ #define IRR_I_GUI_WINDOW_H_INCLUDED #include "IGUIElement.h" -#include "EMessageBoxFlags.h" namespace irr { diff --git a/include/IImage.h b/include/IImage.h index d275f9dc..918ced4d 100644 --- a/include/IImage.h +++ b/include/IImage.h @@ -10,7 +10,6 @@ #include "rect.h" #include "SColor.h" #include "irrAllocator.h" -#include namespace irr { diff --git a/include/IImageWriter.h b/include/IImageWriter.h index 7ac8ada1..7e4cc987 100644 --- a/include/IImageWriter.h +++ b/include/IImageWriter.h @@ -6,7 +6,6 @@ #define IRR_I_IMAGE_WRITER_H_INCLUDED #include "IReferenceCounted.h" -#include "irrString.h" #include "coreutil.h" namespace irr diff --git a/include/IIndexBuffer.h b/include/IIndexBuffer.h index a39e306d..5582d8f0 100644 --- a/include/IIndexBuffer.h +++ b/include/IIndexBuffer.h @@ -6,7 +6,6 @@ #define IRR_I_INDEX_BUFFER_H_INCLUDED #include "IReferenceCounted.h" -#include "irrArray.h" #include "EHardwareBufferFlags.h" #include "SVertexIndex.h" diff --git a/include/IMeshLoader.h b/include/IMeshLoader.h index cd81adb7..74e7336f 100644 --- a/include/IMeshLoader.h +++ b/include/IMeshLoader.h @@ -8,7 +8,6 @@ #include "IReferenceCounted.h" #include "path.h" #include "IMeshTextureLoader.h" -#include "SVertexIndex.h" namespace irr { diff --git a/include/ISceneManager.h b/include/ISceneManager.h index 64ab0e8c..fab9a7ed 100644 --- a/include/ISceneManager.h +++ b/include/ISceneManager.h @@ -7,7 +7,6 @@ #include "IReferenceCounted.h" #include "irrArray.h" -#include "irrString.h" #include "path.h" #include "vector3d.h" #include "dimension2d.h" diff --git a/include/ISceneNodeAnimator.h b/include/ISceneNodeAnimator.h index b2848652..3f184a6c 100644 --- a/include/ISceneNodeAnimator.h +++ b/include/ISceneNodeAnimator.h @@ -5,8 +5,6 @@ #ifndef IRR_I_SCENE_NODE_ANIMATOR_H_INCLUDED #define IRR_I_SCENE_NODE_ANIMATOR_H_INCLUDED -#include "IReferenceCounted.h" -#include "vector3d.h" #include "ESceneNodeAnimatorTypes.h" #include "IAttributeExchangingObject.h" #include "IAttributes.h" diff --git a/include/ISceneNodeAnimatorCameraFPS.h b/include/ISceneNodeAnimatorCameraFPS.h index 8caaef9d..ce69cedd 100644 --- a/include/ISceneNodeAnimatorCameraFPS.h +++ b/include/ISceneNodeAnimatorCameraFPS.h @@ -6,7 +6,6 @@ #define IRR_I_SCENE_NODE_ANIMATOR_CAMERA_FPS_H_INCLUDED #include "ISceneNodeAnimator.h" -#include "IEventReceiver.h" #include "irrArray.h" namespace irr diff --git a/include/ISceneUserDataSerializer.h b/include/ISceneUserDataSerializer.h index 8978ce91..b4032d05 100644 --- a/include/ISceneUserDataSerializer.h +++ b/include/ISceneUserDataSerializer.h @@ -5,8 +5,6 @@ #ifndef IRR_I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED #define IRR_I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED -#include "IReferenceCounted.h" - namespace irr { namespace io diff --git a/include/ISkinnedMesh.h b/include/ISkinnedMesh.h index baa487a7..b6c94caa 100644 --- a/include/ISkinnedMesh.h +++ b/include/ISkinnedMesh.h @@ -6,9 +6,10 @@ #define IRR_I_SKINNED_MESH_H_INCLUDED #include "irrArray.h" -#include "IBoneSceneNode.h" #include "IAnimatedMesh.h" #include "SSkinMeshBuffer.h" +#include "quaternion.h" +#include "irrString.h" namespace irr { diff --git a/include/ITexture.h b/include/ITexture.h index 9be26775..9fe7a7c6 100644 --- a/include/ITexture.h +++ b/include/ITexture.h @@ -195,13 +195,17 @@ public: //! Lock function. /** Locks the Texture and returns a pointer to access the pixels. After lock() has been called and all operations on the pixels - are done, you must call unlock(). - Locks are not accumulating, hence one unlock will do for an arbitrary - number of previous locks. You should avoid locking different levels without - unlocking in between, though, because only the last level locked will be - unlocked. + are done, you must call unlock(). Locks are not accumulating, hence one + unlock will do for an arbitrary number of previous locks. You should avoid + locking different levels without unlocking in between, because only the + last level locked will be unlocked. + The size of the i-th mipmap level is defined as max(getSize().Width>>i,1) - and max(getSize().Height>>i,1) + and max(getSize().Height>>i,1). + Except for textures of EDT_SOFTWARE driver which returns data for + getOriginalSize(). Reason: Both original sized and modified sized textures are used + in that driver depending on whether the texture is used in 2d or 3d. + \param mode Specifies what kind of changes to the locked texture are allowed. Unspecified behavior will arise if texture is written in read only mode or read from in write only mode. diff --git a/include/SMaterial.h b/include/SMaterial.h index 1d71ce89..15a00482 100644 --- a/include/SMaterial.h +++ b/include/SMaterial.h @@ -7,7 +7,6 @@ #include "SColor.h" #include "matrix4.h" -#include "irrArray.h" #include "irrMath.h" #include "EMaterialTypes.h" #include "EMaterialFlags.h" diff --git a/include/irrString.h b/include/irrString.h index bc7a6a23..7c630a0a 100644 --- a/include/irrString.h +++ b/include/irrString.h @@ -8,9 +8,7 @@ #include "irrTypes.h" #include "irrAllocator.h" #include "irrMath.h" -#include #include -#include namespace irr { diff --git a/include/matrix4.h b/include/matrix4.h index 3c51eac6..0c0d2ba7 100644 --- a/include/matrix4.h +++ b/include/matrix4.h @@ -303,20 +303,33 @@ namespace core \return Returns false if there is no inverse matrix. */ bool getInverse(CMatrix4& out) const; + //! Tool function to build a perspective projection matrix + /** Mainly for use of the other perspective projection build functions. + But can also be used by users (can be useful if you don't work with matrices with T=f32). + \param sx: x scale factor (depth/half_width from clipped frustum planes parallel to the camera) + \param sy: y scale factor (depth/half_height from clipped frustum planes parallel to the camera) + \param zNear: Distance to near plane + \param zFar: Distance to far plane + param zClipFromZero: Clipping of z can be projected from 0 to w when true (D3D style) and from -w to w when false (OGL style) + \param zSign: 1 for left-handed projection matrix, -1 for right-handed projection matrix */ + CMatrix4& buildProjectionMatrixPerspectiveFov(T sx, T sy, T zNear, T zFar, bool zClipFromZero, T zSign); + //! Builds a right-handed perspective projection matrix based on a field of view //\param zClipFromZero: Clipping of z can be projected from 0 to w when true (D3D style) and from -w to w when false (OGL style). - CMatrix4& buildProjectionMatrixPerspectiveFovRH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true); + CMatrix4& buildProjectionMatrixPerspectiveFovRH(f32 fieldOfViewRadiansY, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true); //! Builds a left-handed perspective projection matrix based on a field of view - CMatrix4& buildProjectionMatrixPerspectiveFovLH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true); + CMatrix4& buildProjectionMatrixPerspectiveFovLH(f32 fieldOfViewRadiansY, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true); //! Builds a left-handed perspective projection matrix based on a field of view, with far plane at infinity - CMatrix4& buildProjectionMatrixPerspectiveFovInfinityLH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 epsilon=0); + CMatrix4& buildProjectionMatrixPerspectiveFovInfinityLH(f32 fieldOfViewRadiansY, f32 aspectRatio, f32 zNear, f32 epsilon=0); //! Builds a right-handed perspective projection matrix. CMatrix4& buildProjectionMatrixPerspectiveRH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true); //! Builds a left-handed perspective projection matrix. + //\param widthOfViewVolume: width of clipped near frustum plane + //\param heightOfViewVolume: height of clipped near frustum plane CMatrix4& buildProjectionMatrixPerspectiveLH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true); //! Builds a left-handed orthogonal projection matrix. @@ -1568,102 +1581,70 @@ namespace core } - // Builds a right-handed perspective projection matrix based on a field of view + // Builds a perspective projection matrix template - inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovRH( - f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero) + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFov(T sx, T sy, T zNear, T zFar, bool zClipFromZero, T zSign) { - const f64 h = reciprocal(tan(fieldOfViewRadians*0.5)); - IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero - const T w = static_cast(h / aspectRatio); - IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero - M[0] = w; + M[0] = sx; M[1] = 0; M[2] = 0; M[3] = 0; - + M[4] = 0; - M[5] = (T)h; + M[5] = sy; M[6] = 0; M[7] = 0; M[8] = 0; M[9] = 0; - //M[10] - M[11] = -1; - + //M[10] below + M[11] = zSign; + M[12] = 0; M[13] = 0; - //M[14] + //M[14] below M[15] = 0; - + if ( zClipFromZero ) // DirectX version { - M[10] = (T)(zFar/(zNear-zFar)); + M[10] = zSign*zFar/(zFar-zNear); M[14] = (T)(zNear*zFar/(zNear-zFar)); } else // OpenGL version { - M[10] = (T)((zFar+zNear)/(zNear-zFar)); + M[10] = zSign*(zFar+zNear)/(zFar-zNear); M[14] = (T)(2.0f*zNear*zFar/(zNear-zFar)); } - -#if defined ( USE_MATRIX_TEST ) - definitelyIdentityMatrix=false; -#endif + + #if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; + #endif return *this; } + // Builds a right-handed perspective projection matrix based on a field of view + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovRH( + f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero) + { + const f64 sy = reciprocal(tan(fieldOfViewRadians*0.5)); + IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero + const T sx = static_cast(sy / aspectRatio); + return buildProjectionMatrixPerspectiveFov(sx, static_cast(sy), zNear, zFar, zClipFromZero, (T)-1); + } // Builds a left-handed perspective projection matrix based on a field of view template inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovLH( f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero) { - const f64 h = reciprocal(tan(fieldOfViewRadians*0.5)); + const f64 sy = reciprocal(tan(fieldOfViewRadians*0.5)); IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero - const T w = static_cast(h / aspectRatio); - - IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero - M[0] = w; - M[1] = 0; - M[2] = 0; - M[3] = 0; - - M[4] = 0; - M[5] = (T)h; - M[6] = 0; - M[7] = 0; - - M[8] = 0; - M[9] = 0; - //M[10] - M[11] = 1; - - M[12] = 0; - M[13] = 0; - //M[14] - M[15] = 0; - - if ( zClipFromZero ) // DirectX version - { - M[10] = (T)(zFar/(zFar-zNear)); - M[14] = (T)(-zNear*zFar/(zFar-zNear)); - } - else // OpenGL version - { - M[10] = (T)((zFar+zNear)/(zFar-zNear)); - M[14] = (T)(2.0f*zNear*zFar/(zNear-zFar)); - } - -#if defined ( USE_MATRIX_TEST ) - definitelyIdentityMatrix=false; -#endif - return *this; + const T sx = static_cast(sy / aspectRatio); + return buildProjectionMatrixPerspectiveFov(sx, static_cast(sy), zNear, zFar, zClipFromZero, (T)1); } - // Builds a left-handed perspective projection matrix based on a field of view, with far plane culling at infinity template inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovInfinityLH( @@ -1791,7 +1772,6 @@ namespace core return *this; } - // Builds a right-handed perspective projection matrix. template inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveRH( @@ -1799,45 +1779,11 @@ namespace core { IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero - IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero - M[0] = (T)(2*zNear/widthOfViewVolume); - M[1] = 0; - M[2] = 0; - M[3] = 0; - - M[4] = 0; - M[5] = (T)(2*zNear/heightOfViewVolume); - M[6] = 0; - M[7] = 0; - - M[8] = 0; - M[9] = 0; - //M[10] - M[11] = -1; - - M[12] = 0; - M[13] = 0; - //M[14] - M[15] = 0; - - if ( zClipFromZero ) // DirectX version - { - M[10] = (T)(zFar/(zNear-zFar)); - M[14] = (T)(zNear*zFar/(zNear-zFar)); - } - else // OpenGL version - { - M[10] = (T)((zFar+zNear)/(zNear-zFar)); - M[14] = (T)(2.0f*zNear*zFar/(zNear-zFar)); - } - -#if defined ( USE_MATRIX_TEST ) - definitelyIdentityMatrix=false; -#endif - return *this; + const T sx = (T)(2*zNear/widthOfViewVolume); + const T sy = (T)(2*zNear/heightOfViewVolume); + return buildProjectionMatrixPerspectiveFov(sx, sy, zNear, zFar, zClipFromZero, (T)-1); } - // Builds a left-handed perspective projection matrix. template inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveLH( @@ -1845,42 +1791,10 @@ namespace core { IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero - IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero - M[0] = (T)(2*zNear/widthOfViewVolume); - M[1] = 0; - M[2] = 0; - M[3] = 0; + const T sx = (T)(2*zNear/widthOfViewVolume); + const T sy = (T)(2*zNear/heightOfViewVolume); - M[4] = 0; - M[5] = (T)(2*zNear/heightOfViewVolume); - M[6] = 0; - M[7] = 0; - - M[8] = 0; - M[9] = 0; - //M[10] - M[11] = 1; - - M[12] = 0; - M[13] = 0; - //M[14] = (T)(zNear*zFar/(zNear-zFar)); - M[15] = 0; - - if ( zClipFromZero ) // DirectX version - { - M[10] = (T)(zFar/(zFar-zNear)); - M[14] = (T)(zNear*zFar/(zNear-zFar)); - } - else // OpenGL version - { - M[10] = (T)((zFar+zNear)/(zFar-zNear)); - M[14] = (T)(2.0f*zNear*zFar/(zNear-zFar)); - } - -#if defined ( USE_MATRIX_TEST ) - definitelyIdentityMatrix=false; -#endif - return *this; + return buildProjectionMatrixPerspectiveFov(sx, sy, zNear, zFar, zClipFromZero, (T)1); } @@ -2399,4 +2313,3 @@ namespace core } // end namespace irr #endif - diff --git a/include/vector3d.h b/include/vector3d.h index 3633fb7d..90406962 100644 --- a/include/vector3d.h +++ b/include/vector3d.h @@ -235,7 +235,10 @@ namespace core } //! Rotates the vector by a specified number of degrees around the Y axis and the specified center. - /** \param degrees Number of degrees to rotate around the Y axis. + /** CAREFUL: For historical reasons rotateXZBy uses a right-handed rotation + (maybe to make it more similar to the 2D vector rotations which are counterclockwise). + To have this work the same way as rest of Irrlicht (nodes, matrices, other rotateBy functions) pass -1*degrees in here. + \param degrees Number of degrees to rotate around the Y axis. \param center The center of the rotation. */ void rotateXZBy(f64 degrees, const vector3d& center=vector3d()) { diff --git a/source/Irrlicht/C3DSMeshFileLoader.cpp b/source/Irrlicht/C3DSMeshFileLoader.cpp index f73bbf1c..046c7de1 100644 --- a/source/Irrlicht/C3DSMeshFileLoader.cpp +++ b/source/Irrlicht/C3DSMeshFileLoader.cpp @@ -8,7 +8,7 @@ #include "C3DSMeshFileLoader.h" #include "CMeshTextureLoader.h" #include "os.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" #include "SAnimatedMesh.h" #include "IReadFile.h" #include "IVideoDriver.h" diff --git a/source/Irrlicht/CAnimatedMeshHalfLife.cpp b/source/Irrlicht/CAnimatedMeshHalfLife.cpp index 4d03677c..f9d9a925 100644 --- a/source/Irrlicht/CAnimatedMeshHalfLife.cpp +++ b/source/Irrlicht/CAnimatedMeshHalfLife.cpp @@ -10,7 +10,7 @@ #include "CColorConverter.h" #include "CImage.h" #include "coreutil.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" #include "IVideoDriver.h" #include "IFileSystem.h" diff --git a/source/Irrlicht/CAnimatedMeshMD2.cpp b/source/Irrlicht/CAnimatedMeshMD2.cpp index b97417ae..3764d372 100644 --- a/source/Irrlicht/CAnimatedMeshMD2.cpp +++ b/source/Irrlicht/CAnimatedMeshMD2.cpp @@ -6,7 +6,6 @@ #ifdef _IRR_COMPILE_WITH_MD2_LOADER_ #include "CAnimatedMeshMD2.h" -#include "SColor.h" #include "irrMath.h" namespace irr diff --git a/source/Irrlicht/CAnimatedMeshMD2.h b/source/Irrlicht/CAnimatedMeshMD2.h index 04e0fa5d..6bcf9fa1 100644 --- a/source/Irrlicht/CAnimatedMeshMD2.h +++ b/source/Irrlicht/CAnimatedMeshMD2.h @@ -8,8 +8,6 @@ #include "IAnimatedMeshMD2.h" #include "IMesh.h" #include "CMeshBuffer.h" -#include "IReadFile.h" -#include "S3DVertex.h" #include "irrArray.h" #include "irrString.h" diff --git a/source/Irrlicht/CAnimatedMeshMD3.h b/source/Irrlicht/CAnimatedMeshMD3.h index bea2ea98..bf59b448 100644 --- a/source/Irrlicht/CAnimatedMeshMD3.h +++ b/source/Irrlicht/CAnimatedMeshMD3.h @@ -8,11 +8,8 @@ #include "IAnimatedMeshMD3.h" #include "IReadFile.h" #include "IFileSystem.h" -#include "irrArray.h" -#include "irrString.h" #include "SMesh.h" -#include "SMeshBuffer.h" -#include "IQ3Shader.h" +#include "CMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CAnimatedMeshSceneNode.cpp b/source/Irrlicht/CAnimatedMeshSceneNode.cpp index e5c7f80e..b6731b4d 100644 --- a/source/Irrlicht/CAnimatedMeshSceneNode.cpp +++ b/source/Irrlicht/CAnimatedMeshSceneNode.cpp @@ -5,8 +5,8 @@ #include "CAnimatedMeshSceneNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" -#include "S3DVertex.h" #include "os.h" +#include "IFileSystem.h" #ifdef _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "CShadowVolumeSceneNode.h" #else @@ -14,9 +14,7 @@ #endif // _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "IAnimatedMeshMD3.h" #include "CSkinnedMesh.h" -#include "IDummyTransformationSceneNode.h" #include "IBoneSceneNode.h" -#include "IMaterialRenderer.h" #include "IMesh.h" #include "IMeshCache.h" #include "IAnimatedMesh.h" diff --git a/source/Irrlicht/CAttributeImpl.h b/source/Irrlicht/CAttributeImpl.h index 6317a634..5c4ec1d8 100644 --- a/source/Irrlicht/CAttributeImpl.h +++ b/source/Irrlicht/CAttributeImpl.h @@ -2,7 +2,6 @@ // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h -#include "CAttributes.h" #include "fast_atof.h" #include "ITexture.h" #include "IVideoDriver.h" diff --git a/source/Irrlicht/CB3DMeshFileLoader.cpp b/source/Irrlicht/CB3DMeshFileLoader.cpp index 05f8bf5d..97c0133e 100644 --- a/source/Irrlicht/CB3DMeshFileLoader.cpp +++ b/source/Irrlicht/CB3DMeshFileLoader.cpp @@ -13,7 +13,7 @@ #include "CMeshTextureLoader.h" #include "IVideoDriver.h" -#include "IFileSystem.h" +#include "IAttributes.h" #include "os.h" #ifdef _DEBUG @@ -255,7 +255,7 @@ bool CB3DMeshFileLoader::readChunkMESH(CSkinnedMesh::SJoint *inJoint) os::Printer::log(logStr.c_str(), ELL_DEBUG); #endif - s32 brushID; + s32 brushID=-1; B3DFile->read(&brushID, sizeof(brushID)); #ifdef __BIG_ENDIAN__ brushID = os::Byteswap::byteswap(brushID); @@ -283,11 +283,15 @@ bool CB3DMeshFileLoader::readChunkMESH(CSkinnedMesh::SJoint *inJoint) { scene::SSkinMeshBuffer *meshBuffer = AnimatedMesh->addMeshBuffer(); - if (brushID!=-1) + if ( brushID >= 0 && (u32)brushID < Materials.size() ) { loadTextures(Materials[brushID]); meshBuffer->Material=Materials[brushID].Material; } + else if (brushID != -1) // -1 is OK + { + os::Printer::log("Illegal brush ID found", B3DFile->getFileName(), ELL_WARNING); + } if(readChunkTRIS(meshBuffer,AnimatedMesh->getMeshBuffers().size()-1, VerticesStart)==false) return false; @@ -364,7 +368,8 @@ bool CB3DMeshFileLoader::readChunkVRTS(CSkinnedMesh::SJoint *inJoint) tex_coord_set_size = os::Byteswap::byteswap(tex_coord_set_size); #endif - if (tex_coord_sets >= max_tex_coords || tex_coord_set_size >= 4) // Something is wrong + if (tex_coord_sets < 0 || tex_coord_set_size < 0 || + tex_coord_sets >= max_tex_coords || tex_coord_set_size >= 4) // Something is wrong { os::Printer::log("tex_coord_sets or tex_coord_set_size too big", B3DFile->getFileName(), ELL_ERROR); return false; @@ -460,7 +465,7 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m bool showVertexWarning=false; - s32 triangle_brush_id; // Note: Irrlicht can't have different brushes for each triangle (using a workaround) + s32 triangle_brush_id=-1; // Note: Irrlicht can't have different brushes for each triangle (using a workaround) B3DFile->read(&triangle_brush_id, sizeof(triangle_brush_id)); #ifdef __BIG_ENDIAN__ triangle_brush_id = os::Byteswap::byteswap(triangle_brush_id); @@ -468,14 +473,20 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m SB3dMaterial *B3dMaterial; - if (triangle_brush_id != -1) + if (triangle_brush_id >= 0 && (u32)triangle_brush_id < Materials.size()) { loadTextures(Materials[triangle_brush_id]); B3dMaterial = &Materials[triangle_brush_id]; meshBuffer->Material = B3dMaterial->Material; } else + { B3dMaterial = 0; + if (triangle_brush_id < -1) // -1 is OK + { + os::Printer::log("Illegal material index for triangle brush found", B3DFile->getFileName(), ELL_WARNING); + } + } const s32 memoryNeeded = B3dStack.getLast().length / sizeof(s32); meshBuffer->Indices.reallocate(memoryNeeded + meshBuffer->Indices.size() + 1); @@ -594,7 +605,11 @@ bool CB3DMeshFileLoader::readChunkBONE(CSkinnedMesh::SJoint *inJoint) #endif globalVertexID += VerticesStart; - if (AnimatedVertices_VertexID[globalVertexID]==-1) + if (globalVertexID >= AnimatedVertices_VertexID.size()) + { + os::Printer::log("Illegal vertex index found", B3DFile->getFileName(), ELL_WARNING); + } + else if (AnimatedVertices_VertexID[globalVertexID]==-1) { os::Printer::log("B3dMeshLoader: Weight has bad vertex id (no link to meshbuffer index found)"); } @@ -1081,10 +1096,9 @@ void CB3DMeshFileLoader::loadTextures(SB3dMaterial& material) const void CB3DMeshFileLoader::readString(core::stringc& newstring) { newstring=""; - while (B3DFile->getPos() <= B3DFile->getSize()) + c8 character=0; + while (B3DFile->read(&character, sizeof(character)) > 0) // until eof { - c8 character; - B3DFile->read(&character, sizeof(character)); if (character==0) return; newstring.append(character); diff --git a/source/Irrlicht/CB3DMeshWriter.cpp b/source/Irrlicht/CB3DMeshWriter.cpp index 92c297aa..68c0b9f8 100644 --- a/source/Irrlicht/CB3DMeshWriter.cpp +++ b/source/Irrlicht/CB3DMeshWriter.cpp @@ -2,13 +2,12 @@ // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h -// TODO: replace printf's by logging messages - #include "IrrCompileConfig.h" #ifdef _IRR_COMPILE_WITH_B3D_WRITER_ #include "CB3DMeshWriter.h" +#include "SB3DStructs.h" #include "os.h" #include "ISkinnedMesh.h" #include "IMeshBuffer.h" diff --git a/source/Irrlicht/CB3DMeshWriter.h b/source/Irrlicht/CB3DMeshWriter.h index 48fe5395..e856d06b 100644 --- a/source/Irrlicht/CB3DMeshWriter.h +++ b/source/Irrlicht/CB3DMeshWriter.h @@ -9,11 +9,8 @@ #include "IMeshWriter.h" #include "IWriteFile.h" -#include "SB3DStructs.h" #include "ISkinnedMesh.h" - - namespace irr { namespace scene diff --git a/source/Irrlicht/CBSPMeshFileLoader.h b/source/Irrlicht/CBSPMeshFileLoader.h index f9adab72..aa8febff 100644 --- a/source/Irrlicht/CBSPMeshFileLoader.h +++ b/source/Irrlicht/CBSPMeshFileLoader.h @@ -7,7 +7,6 @@ #include "IMeshLoader.h" #include "IFileSystem.h" -#include "IVideoDriver.h" #include "ISceneManager.h" #include "IQ3Shader.h" diff --git a/source/Irrlicht/CBillboardSceneNode.cpp b/source/Irrlicht/CBillboardSceneNode.cpp index ed5cf97a..1edb3e80 100644 --- a/source/Irrlicht/CBillboardSceneNode.cpp +++ b/source/Irrlicht/CBillboardSceneNode.cpp @@ -8,7 +8,6 @@ #include "IVideoDriver.h" #include "ISceneManager.h" #include "ICameraSceneNode.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CBillboardSceneNode.h b/source/Irrlicht/CBillboardSceneNode.h index 2e7379ee..48c39f69 100644 --- a/source/Irrlicht/CBillboardSceneNode.h +++ b/source/Irrlicht/CBillboardSceneNode.h @@ -6,7 +6,7 @@ #define IRR_C_BILLBOARD_SCENE_NODE_H_INCLUDED #include "IBillboardSceneNode.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CCSMLoader.cpp b/source/Irrlicht/CCSMLoader.cpp index d560311c..036be4de 100644 --- a/source/Irrlicht/CCSMLoader.cpp +++ b/source/Irrlicht/CCSMLoader.cpp @@ -18,7 +18,7 @@ #include "SMesh.h" #include "IVideoDriver.h" #include "SAnimatedMesh.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #ifdef _DEBUG #define _IRR_DEBUG_CSM_LOADER_ diff --git a/source/Irrlicht/CCSMLoader.h b/source/Irrlicht/CCSMLoader.h index 50ee9748..f113e18f 100644 --- a/source/Irrlicht/CCSMLoader.h +++ b/source/Irrlicht/CCSMLoader.h @@ -38,9 +38,7 @@ #ifndef __CSM_LOADER_H_INCLUDED__ #define __CSM_LOADER_H_INCLUDED__ -#include "irrArray.h" #include "IMesh.h" -#include "irrString.h" #include "IFileSystem.h" #include "IMeshLoader.h" diff --git a/source/Irrlicht/CColladaFileLoader.cpp b/source/Irrlicht/CColladaFileLoader.cpp index cec931f8..3b92ab18 100644 --- a/source/Irrlicht/CColladaFileLoader.cpp +++ b/source/Irrlicht/CColladaFileLoader.cpp @@ -7,6 +7,7 @@ #include "CColladaFileLoader.h" #include "CMeshTextureLoader.h" +#include "CAttributes.h" #include "os.h" #include "IXMLReader.h" #include "IDummyTransformationSceneNode.h" @@ -21,6 +22,7 @@ #include "IMeshCache.h" #include "IMeshSceneNode.h" #include "CDynamicMeshBuffer.h" +#include "IVideoDriver.h" #include "irrMap.h" #ifdef _DEBUG diff --git a/source/Irrlicht/CColladaFileLoader.h b/source/Irrlicht/CColladaFileLoader.h index e3cd69e4..6bf909b1 100644 --- a/source/Irrlicht/CColladaFileLoader.h +++ b/source/Irrlicht/CColladaFileLoader.h @@ -7,12 +7,11 @@ #include "IMeshLoader.h" #include "IFileSystem.h" -#include "IVideoDriver.h" #include "irrString.h" #include "SMesh.h" #include "ISceneManager.h" #include "irrMap.h" -#include "CAttributes.h" +#include "IAttributes.h" namespace irr { diff --git a/source/Irrlicht/CColladaMeshWriter.cpp b/source/Irrlicht/CColladaMeshWriter.cpp index 91a0a235..a7db080d 100644 --- a/source/Irrlicht/CColladaMeshWriter.cpp +++ b/source/Irrlicht/CColladaMeshWriter.cpp @@ -14,7 +14,6 @@ #include "IWriteFile.h" #include "IXMLWriter.h" #include "IMesh.h" -#include "IAttributes.h" #include "IAnimatedMeshSceneNode.h" #include "IMeshSceneNode.h" #include "ITerrainSceneNode.h" diff --git a/source/Irrlicht/CColorConverter.cpp b/source/Irrlicht/CColorConverter.cpp index 243a8c6b..f2212ecf 100644 --- a/source/Irrlicht/CColorConverter.cpp +++ b/source/Irrlicht/CColorConverter.cpp @@ -3,9 +3,8 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CColorConverter.h" -#include "SColor.h" +#include "IImage.h" #include "os.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CColorConverter.h b/source/Irrlicht/CColorConverter.h index d9293c8e..cdcb46ef 100644 --- a/source/Irrlicht/CColorConverter.h +++ b/source/Irrlicht/CColorConverter.h @@ -6,7 +6,7 @@ #define IRR_C_COLOR_CONVERTER_H_INCLUDED #include "irrTypes.h" -#include "IImage.h" +#include "SColor.h" namespace irr { diff --git a/source/Irrlicht/CCubeSceneNode.cpp b/source/Irrlicht/CCubeSceneNode.cpp index a72d3be5..5bf33c96 100644 --- a/source/Irrlicht/CCubeSceneNode.cpp +++ b/source/Irrlicht/CCubeSceneNode.cpp @@ -7,9 +7,6 @@ #include "CCubeSceneNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" -#include "S3DVertex.h" -#include "SMeshBuffer.h" -#include "os.h" #ifdef _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "CShadowVolumeSceneNode.h" #else diff --git a/source/Irrlicht/CCubeSceneNode.h b/source/Irrlicht/CCubeSceneNode.h index fc276c2e..adaa888e 100644 --- a/source/Irrlicht/CCubeSceneNode.h +++ b/source/Irrlicht/CCubeSceneNode.h @@ -6,7 +6,7 @@ #define IRR_C_CUBE_SCENE_NODE_H_INCLUDED #include "IMeshSceneNode.h" -#include "SMesh.h" +#include "IMesh.h" #include "IGeometryCreator.h" namespace irr diff --git a/source/Irrlicht/CDMFLoader.cpp b/source/Irrlicht/CDMFLoader.cpp index 0e42363a..1113cdc7 100644 --- a/source/Irrlicht/CDMFLoader.cpp +++ b/source/Irrlicht/CDMFLoader.cpp @@ -25,10 +25,11 @@ #include "CMeshTextureLoader.h" #include "ISceneManager.h" #include "IAttributes.h" +#include "IVideoDriver.h" #include "SAnimatedMesh.h" #include "SSkinMeshBuffer.h" +#include "SMesh.h" #include "irrString.h" -#include "irrMath.h" #include "dmfsupport.h" namespace irr diff --git a/source/Irrlicht/CDMFLoader.h b/source/Irrlicht/CDMFLoader.h index bf82b392..101f4244 100644 --- a/source/Irrlicht/CDMFLoader.h +++ b/source/Irrlicht/CDMFLoader.h @@ -33,10 +33,7 @@ #include "IMeshLoader.h" #include "IReadFile.h" #include "IFileSystem.h" -#include "SMesh.h" -#include "IVideoDriver.h" #include "ISceneManager.h" -#include "SAnimatedMesh.h" namespace irr { diff --git a/source/Irrlicht/CFileList.cpp b/source/Irrlicht/CFileList.cpp index 15d5410e..d178e0c2 100644 --- a/source/Irrlicht/CFileList.cpp +++ b/source/Irrlicht/CFileList.cpp @@ -3,11 +3,10 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CFileList.h" -#include "IrrCompileConfig.h" #include "irrArray.h" #include "coreutil.h" -#include "os.h" +#include "os.h" // debug logging namespace irr { diff --git a/source/Irrlicht/CGUIColorSelectDialog.cpp b/source/Irrlicht/CGUIColorSelectDialog.cpp index 29c5482d..450bc7e9 100644 --- a/source/Irrlicht/CGUIColorSelectDialog.cpp +++ b/source/Irrlicht/CGUIColorSelectDialog.cpp @@ -12,10 +12,6 @@ #include "IGUIButton.h" #include "IGUIStaticText.h" #include "IGUIFont.h" -#include "IGUISpriteBank.h" -#include "IFileList.h" -#include "os.h" -#include "fast_atof.h" namespace irr { diff --git a/source/Irrlicht/CGUIComboBox.cpp b/source/Irrlicht/CGUIComboBox.cpp index 1efd345b..ef04284e 100644 --- a/source/Irrlicht/CGUIComboBox.cpp +++ b/source/Irrlicht/CGUIComboBox.cpp @@ -6,13 +6,11 @@ #ifdef _IRR_COMPILE_WITH_GUI_ #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUISkin.h" #include "IGUIEnvironment.h" #include "IGUIFont.h" #include "IGUIButton.h" #include "CGUIListBox.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CGUIContextMenu.cpp b/source/Irrlicht/CGUIContextMenu.cpp index 474d5933..53a13fb7 100644 --- a/source/Irrlicht/CGUIContextMenu.cpp +++ b/source/Irrlicht/CGUIContextMenu.cpp @@ -8,7 +8,6 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIFont.h" #include "IGUISpriteBank.h" #include "os.h" diff --git a/source/Irrlicht/CGUIEditBox.cpp b/source/Irrlicht/CGUIEditBox.cpp index a55664e1..2ff67d07 100644 --- a/source/Irrlicht/CGUIEditBox.cpp +++ b/source/Irrlicht/CGUIEditBox.cpp @@ -8,7 +8,6 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" #include "IGUIFont.h" -#include "IVideoDriver.h" #include "rect.h" #include "os.h" #include "Keycodes.h" diff --git a/source/Irrlicht/CGUIFileOpenDialog.cpp b/source/Irrlicht/CGUIFileOpenDialog.cpp index 25da8976..dcb6fc9a 100644 --- a/source/Irrlicht/CGUIFileOpenDialog.cpp +++ b/source/Irrlicht/CGUIFileOpenDialog.cpp @@ -9,13 +9,9 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIButton.h" -#include "IGUIStaticText.h" #include "IGUIFont.h" -#include "IGUIFontBitmap.h" #include "IFileList.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CGUIListBox.cpp b/source/Irrlicht/CGUIListBox.cpp index 0670a21a..37320473 100644 --- a/source/Irrlicht/CGUIListBox.cpp +++ b/source/Irrlicht/CGUIListBox.cpp @@ -8,7 +8,6 @@ #include "CGUIListBox.h" #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIFont.h" #include "IGUISpriteBank.h" #include "CGUIScrollBar.h" diff --git a/source/Irrlicht/CGUIMenu.cpp b/source/Irrlicht/CGUIMenu.cpp index ce235c71..2e6cd360 100644 --- a/source/Irrlicht/CGUIMenu.cpp +++ b/source/Irrlicht/CGUIMenu.cpp @@ -7,12 +7,9 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIFont.h" #include "IGUIWindow.h" -#include "os.h" - namespace irr { namespace gui diff --git a/source/Irrlicht/CGUIMessageBox.cpp b/source/Irrlicht/CGUIMessageBox.cpp index 57b383db..8957687d 100644 --- a/source/Irrlicht/CGUIMessageBox.cpp +++ b/source/Irrlicht/CGUIMessageBox.cpp @@ -8,7 +8,6 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" #include "IGUIButton.h" -#include "IGUIFont.h" #include "ITexture.h" namespace irr diff --git a/source/Irrlicht/CGUIMessageBox.h b/source/Irrlicht/CGUIMessageBox.h index 0d17d50a..91a5aaf8 100644 --- a/source/Irrlicht/CGUIMessageBox.h +++ b/source/Irrlicht/CGUIMessageBox.h @@ -11,7 +11,6 @@ #include "CGUIWindow.h" #include "IGUIStaticText.h" #include "IGUIImage.h" -#include "irrArray.h" namespace irr { diff --git a/source/Irrlicht/CGUIModalScreen.cpp b/source/Irrlicht/CGUIModalScreen.cpp index 66f769ec..54147d21 100644 --- a/source/Irrlicht/CGUIModalScreen.cpp +++ b/source/Irrlicht/CGUIModalScreen.cpp @@ -7,7 +7,6 @@ #include "IGUIEnvironment.h" #include "os.h" -#include "IVideoDriver.h" #include "IGUISkin.h" namespace irr diff --git a/source/Irrlicht/CGUIProfiler.cpp b/source/Irrlicht/CGUIProfiler.cpp index 693fc88c..b47895b6 100644 --- a/source/Irrlicht/CGUIProfiler.cpp +++ b/source/Irrlicht/CGUIProfiler.cpp @@ -8,7 +8,7 @@ #include "IGUITable.h" #include "IGUIScrollBar.h" #include "IGUIEnvironment.h" -#include "CProfiler.h" +#include "IProfiler.h" namespace irr { diff --git a/source/Irrlicht/CGUIScrollBar.cpp b/source/Irrlicht/CGUIScrollBar.cpp index a1779bde..43c26e91 100644 --- a/source/Irrlicht/CGUIScrollBar.cpp +++ b/source/Irrlicht/CGUIScrollBar.cpp @@ -7,11 +7,7 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "CGUIButton.h" -#include "IGUIFont.h" -#include "IGUIFontBitmap.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CGUISpinBox.cpp b/source/Irrlicht/CGUISpinBox.cpp index 453722e2..28378bf8 100644 --- a/source/Irrlicht/CGUISpinBox.cpp +++ b/source/Irrlicht/CGUISpinBox.cpp @@ -4,12 +4,11 @@ #include "CGUISpinBox.h" #ifdef _IRR_COMPILE_WITH_GUI_ -#include "CGUIEditBox.h" -#include "CGUIButton.h" +#include "IGUIEditBox.h" +#include "IGUIButton.h" #include "IGUIEnvironment.h" #include "IEventReceiver.h" #include "fast_atof.h" -#include namespace irr @@ -131,7 +130,7 @@ void CGUISpinBox::setRange(f32 min, f32 max) RangeMin = min; RangeMax = max; - // we have to round the range - otherwise we can get into an infinte setValue/verifyValueRange cycle. + // we have to round the range - otherwise we can get into an infinite setValue/verifyValueRange cycle. wchar_t str[100]; swprintf_irr(str, 99, FormatString.c_str(), RangeMin); RangeMin = core::fast_atof(core::stringc(str).c_str()); diff --git a/source/Irrlicht/CGUITabControl.cpp b/source/Irrlicht/CGUITabControl.cpp index 998856b1..847d846f 100644 --- a/source/Irrlicht/CGUITabControl.cpp +++ b/source/Irrlicht/CGUITabControl.cpp @@ -5,13 +5,12 @@ #include "CGUITabControl.h" #ifdef _IRR_COMPILE_WITH_GUI_ -#include "CGUIButton.h" +#include "IGUIButton.h" #include "IGUISkin.h" #include "IGUIEnvironment.h" #include "IGUIFont.h" #include "IVideoDriver.h" #include "rect.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CGUITabControl.h b/source/Irrlicht/CGUITabControl.h index 3c34a156..c9b5e45b 100644 --- a/source/Irrlicht/CGUITabControl.h +++ b/source/Irrlicht/CGUITabControl.h @@ -10,7 +10,6 @@ #include "IGUITabControl.h" #include "irrArray.h" -#include "IGUISkin.h" namespace irr { diff --git a/source/Irrlicht/CGUITable.cpp b/source/Irrlicht/CGUITable.cpp index 9c89cf19..ca70521f 100644 --- a/source/Irrlicht/CGUITable.cpp +++ b/source/Irrlicht/CGUITable.cpp @@ -12,8 +12,7 @@ #include "IGUIEnvironment.h" #include "IVideoDriver.h" #include "IGUIFont.h" -#include "CGUIScrollBar.h" -#include "os.h" +#include "IGUIScrollBar.h" #define ARROW_PAD 15 diff --git a/source/Irrlicht/CGUIToolBar.cpp b/source/Irrlicht/CGUIToolBar.cpp index 2f4bf4ec..7ba01476 100644 --- a/source/Irrlicht/CGUIToolBar.cpp +++ b/source/Irrlicht/CGUIToolBar.cpp @@ -7,7 +7,6 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIButton.h" #include "IGUIFont.h" #include "CGUIButton.h" diff --git a/source/Irrlicht/CGUITreeView.cpp b/source/Irrlicht/CGUITreeView.cpp index b348a791..816e229a 100644 --- a/source/Irrlicht/CGUITreeView.cpp +++ b/source/Irrlicht/CGUITreeView.cpp @@ -13,7 +13,6 @@ #include "IVideoDriver.h" #include "IGUIFont.h" #include "CGUIScrollBar.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CGUIWindow.cpp b/source/Irrlicht/CGUIWindow.cpp index 97697506..c353a12c 100644 --- a/source/Irrlicht/CGUIWindow.cpp +++ b/source/Irrlicht/CGUIWindow.cpp @@ -7,10 +7,8 @@ #include "IGUISkin.h" #include "IGUIEnvironment.h" -#include "IVideoDriver.h" #include "IGUIButton.h" #include "IGUIFont.h" -#include "IGUIFontBitmap.h" namespace irr { diff --git a/source/Irrlicht/CGeometryCreator.cpp b/source/Irrlicht/CGeometryCreator.cpp index 4d8da4f0..4c793b60 100644 --- a/source/Irrlicht/CGeometryCreator.cpp +++ b/source/Irrlicht/CGeometryCreator.cpp @@ -3,8 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CGeometryCreator.h" -#include "SAnimatedMesh.h" -#include "SMeshBuffer.h" #include "SMesh.h" #include "IMesh.h" #include "IVideoDriver.h" diff --git a/source/Irrlicht/CGeometryCreator.h b/source/Irrlicht/CGeometryCreator.h index 79ba6ee2..25d4f041 100644 --- a/source/Irrlicht/CGeometryCreator.h +++ b/source/Irrlicht/CGeometryCreator.h @@ -6,7 +6,7 @@ #define IRR_C_GEOMETRY_CREATOR_H_INCLUDED #include "IGeometryCreator.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CImage.cpp b/source/Irrlicht/CImage.cpp index a076a585..c69448a4 100644 --- a/source/Irrlicht/CImage.cpp +++ b/source/Irrlicht/CImage.cpp @@ -3,7 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CImage.h" -#include "irrString.h" #include "CColorConverter.h" #include "CBlit.h" #include "os.h" diff --git a/source/Irrlicht/CImageLoaderBMP.cpp b/source/Irrlicht/CImageLoaderBMP.cpp index 4bb27af5..8fdb309e 100644 --- a/source/Irrlicht/CImageLoaderBMP.cpp +++ b/source/Irrlicht/CImageLoaderBMP.cpp @@ -11,7 +11,6 @@ #include "CColorConverter.h" #include "CImage.h" #include "os.h" -#include "irrString.h" namespace irr { @@ -48,19 +47,35 @@ bool CImageLoaderBMP::isALoadableFileFormat(io::IReadFile* file) const } +// UB-safe overflow check +static inline bool doesOverflow(const void *base, size_t numElements, const void *end) +{ + // TODO: uintptr_t (as in original patch from sfan5) would be nicer than size_t, use once we allow c++11 + size_t baseI = reinterpret_cast(base); + size_t endI = reinterpret_cast(end); + return baseI > endI || numElements >= (endI - baseI); +} + +// check whether &p[0] to &p[_off - 1] can be accessed +#define EXIT_P_OVERFLOW(_off) if (doesOverflow(p, _off, pEnd)) goto exit +// same for d +#define EXIT_D_OVERFLOW(_off) if (doesOverflow(d, _off, destEnd)) goto exit + void CImageLoaderBMP::decompress8BitRLE(u8*& bmpData, s32 size, s32 width, s32 height, s32 pitch) const { u8* p = bmpData; + const u8* pEnd = bmpData + size; u8* newBmp = new u8[(width+pitch)*height]; u8* d = newBmp; - u8* destEnd = newBmp + (width+pitch)*height; + const u8* destEnd = newBmp + (width+pitch)*height; s32 line = 0; - while (bmpData - p < size && d < destEnd) + while (p < pEnd && d < destEnd) { if (*p == 0) { ++p; + EXIT_P_OVERFLOW(1); switch(*p) { @@ -70,37 +85,43 @@ void CImageLoaderBMP::decompress8BitRLE(u8*& bmpData, s32 size, s32 width, s32 h d = newBmp + (line*(width+pitch)); break; case 1: // end of bmp - delete [] bmpData; - bmpData = newBmp; - return; + goto exit; case 2: - ++p; d +=(u8)*p; // delta - ++p; d += ((u8)*p)*(width+pitch); + ++p; + EXIT_P_OVERFLOW(2); + d += (u8)*p; // delta + ++p; + d += ((u8)*p)*(width+pitch); ++p; break; default: { // absolute mode - s32 count = (u8)*p; ++p; - s32 readAdditional = ((2-(count%2))%2); - s32 i; + const s32 count = (u8)*p; + ++p; - for (i=0; i= width ) \ + { \ + line += row/width; \ + row %= width; \ + } \ + if ( line >= height ) \ + { \ + line = 0; /* bug anyway, this way more visible maybe */ \ + } + + void CImageLoaderBMP::decompress4BitRLE(u8*& bmpData, s32 size, s32 width, s32 height, s32 pitch) const { - s32 lineWidth = (width+1)/2+pitch; + const s32 lineWidth = (width+1)/2+pitch; u8* p = bmpData; + const u8* pEnd = bmpData + size; u8* newBmp = new u8[lineWidth*height]; - u8* d = newBmp; - u8* destEnd = newBmp + lineWidth*height; + memset(newBmp, 0, lineWidth*height); // Extra cost, but otherwise we have to code pixel skipping stuff + const u8* destEnd = newBmp + lineWidth*height; s32 line = 0; - s32 shift = 4; + s32 row = 0; - while (bmpData - p < size && d < destEnd) + while (p < pEnd) { if (*p == 0) { ++p; + EXIT_P_OVERFLOW(1); switch(*p) { case 0: // end of line ++p; ++line; - d = newBmp + (line*lineWidth); - shift = 4; + row = 0; break; case 1: // end of bmp - delete [] bmpData; - bmpData = newBmp; - return; - case 2: + goto exit; + case 2: // delta { ++p; + EXIT_P_OVERFLOW(2); s32 x = (u8)*p; ++p; s32 y = (u8)*p; ++p; - d += x/2 + y*lineWidth; - shift = x%2==0 ? 4 : 0; + row += x; + line += y; } break; default: { // absolute mode - s32 count = (u8)*p; ++p; - s32 readAdditional = ((2-((count)%2))%2); + const u32 count = (u8)*p; ++p; s32 readShift = 4; - s32 i; - for (i=0; i> readShift) & 0x0f; readShift -= 4; if (readShift < 0) { - ++*p; + ++p; readShift = 4; } @@ -178,26 +233,37 @@ void CImageLoaderBMP::decompress4BitRLE(u8*& bmpData, s32 size, s32 width, s32 h shift = 4; ++d; } - } + row += count; - for (i=0; i> 4) & 0x0f; + const s32 count = (u8)*p; // pixels to draw + ++p; + EXIT_P_OVERFLOW(1); + s32 color1 = (u8)*p; color1 = color1 & 0x0f; // lo bit (2nd,4th,... pixel) + s32 color2 = (u8)*p; color2 = (color2 >> 4) & 0x0f; // hi bits (1st,3rd,... pixel) ++p; + KEEP_ROW_LINE_INSIDE; + s32 shift = row%2 == 0 ? 4 : 0; + u8* d = newBmp + (lineWidth*line + row/2); + + EXIT_D_OVERFLOW(shiftedCount(count, shift)); for (s32 i=0; i 2) // we'll only handle RLE-Compression { @@ -282,14 +365,9 @@ IImage* CImageLoaderBMP::loadImage(io::IReadFile* file) const file->seek(header.BitmapDataOffset); - f32 t = (header.Width) * (header.BPP / 8.0f); - s32 widthInBytes = (s32)t; - t -= widthInBytes; - if (t!=0.0f) - ++widthInBytes; - - s32 lineData = widthInBytes + ((4-(widthInBytes%4)))%4; - pitch = lineData - widthInBytes; + const s32 widthInBytes = core::ceil32(header.Width * (header.BPP / 8.0f)); + const s32 lineSize = widthInBytes + ((4-(widthInBytes%4)))%4; + const s32 pitch = lineSize - widthInBytes; u8* bmpData = new u8[header.BitmapDataSize]; file->read(bmpData, header.BitmapDataSize); @@ -297,14 +375,25 @@ IImage* CImageLoaderBMP::loadImage(io::IReadFile* file) const // decompress data if needed switch(header.Compression) { - case 1: // 8 bit rle + case 1: // 8 bit RLE decompress8BitRLE(bmpData, header.BitmapDataSize, header.Width, header.Height, pitch); + header.BitmapDataSize = (header.Width + pitch) * header.Height; break; - case 2: // 4 bit rle + case 2: // 4 bit RLE decompress4BitRLE(bmpData, header.BitmapDataSize, header.Width, header.Height, pitch); + header.BitmapDataSize = ((header.Width+1)/2 + pitch) * header.Height; break; } + if (header.BitmapDataSize < lineSize * header.Height) + { + os::Printer::log("Bitmap data is cut off.", ELL_ERROR); + + delete [] paletteData; + delete [] bmpData; + return 0; + } + // create surface // no default constructor from packed area! ARM problem! @@ -359,6 +448,9 @@ cleanup: delete [] paletteData; delete [] bmpData; + if ( image && topDown ) + image->flip(true, false); + return image; } diff --git a/source/Irrlicht/CImageLoaderDDS.cpp b/source/Irrlicht/CImageLoaderDDS.cpp index 68e1164e..e48d7086 100644 --- a/source/Irrlicht/CImageLoaderDDS.cpp +++ b/source/Irrlicht/CImageLoaderDDS.cpp @@ -18,9 +18,7 @@ #include "IReadFile.h" #include "os.h" -#include "CColorConverter.h" #include "CImage.h" -#include "irrString.h" // Header flag values #define DDSD_CAPS 0x00000001 @@ -721,9 +719,8 @@ IImage* CImageLoaderDDS::loadImage(io::IReadFile* file) const image = new CImage(ECF_A8R8G8B8, core::dimension2d(width, height)); - if (DDSDecompress(&header, memFile, (u8*)image->lock()) == -1) + if (DDSDecompress(&header, memFile, (u8*)image->getData()) == -1) { - image->unlock(); image->drop(); image = 0; } diff --git a/source/Irrlicht/CImageLoaderPCX.cpp b/source/Irrlicht/CImageLoaderPCX.cpp index 1c594472..4f5c8f61 100644 --- a/source/Irrlicht/CImageLoaderPCX.cpp +++ b/source/Irrlicht/CImageLoaderPCX.cpp @@ -11,7 +11,6 @@ #include "CColorConverter.h" #include "CImage.h" #include "os.h" -#include "irrString.h" namespace irr diff --git a/source/Irrlicht/CImageLoaderPNG.cpp b/source/Irrlicht/CImageLoaderPNG.cpp index 076871f3..6aacbb3f 100644 --- a/source/Irrlicht/CImageLoaderPNG.cpp +++ b/source/Irrlicht/CImageLoaderPNG.cpp @@ -15,7 +15,7 @@ #endif // _IRR_COMPILE_WITH_LIBPNG_ #include "CImage.h" -#include "CReadFile.h" +#include "IReadFile.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CImageLoaderPSD.cpp b/source/Irrlicht/CImageLoaderPSD.cpp index 00aadd69..b380b989 100644 --- a/source/Irrlicht/CImageLoaderPSD.cpp +++ b/source/Irrlicht/CImageLoaderPSD.cpp @@ -9,7 +9,6 @@ #include "IReadFile.h" #include "os.h" #include "CImage.h" -#include "irrString.h" namespace irr diff --git a/source/Irrlicht/CImageLoaderPVR.cpp b/source/Irrlicht/CImageLoaderPVR.cpp index ceae56fe..d565aea0 100644 --- a/source/Irrlicht/CImageLoaderPVR.cpp +++ b/source/Irrlicht/CImageLoaderPVR.cpp @@ -9,7 +9,6 @@ #include "IReadFile.h" #include "os.h" #include "CImage.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CImageLoaderRGB.cpp b/source/Irrlicht/CImageLoaderRGB.cpp index dfb4b8b0..c516fd3c 100644 --- a/source/Irrlicht/CImageLoaderRGB.cpp +++ b/source/Irrlicht/CImageLoaderRGB.cpp @@ -130,7 +130,6 @@ DUMMY - This 404 bytes of data should be set to 0. This makes the Header exactl #include "CColorConverter.h" #include "CImage.h" #include "os.h" -#include "irrString.h" namespace irr diff --git a/source/Irrlicht/CImageLoaderTGA.cpp b/source/Irrlicht/CImageLoaderTGA.cpp index 8d91bd08..c6c3ae4d 100644 --- a/source/Irrlicht/CImageLoaderTGA.cpp +++ b/source/Irrlicht/CImageLoaderTGA.cpp @@ -10,7 +10,6 @@ #include "os.h" #include "CColorConverter.h" #include "CImage.h" -#include "irrString.h" namespace irr @@ -33,10 +32,10 @@ u8 *CImageLoaderTGA::loadCompressedImage(io::IReadFile *file, const STGAHeader& // This was written and sent in by Jon Pry, thank you very much! // I only changed the formatting a little bit. - s32 bytesPerPixel = header.PixelDepth/8; - s32 imageSize = header.ImageHeight * header.ImageWidth * bytesPerPixel; + const u32 bytesPerPixel = header.PixelDepth/8; + const u32 imageSize = header.ImageHeight * header.ImageWidth * bytesPerPixel; u8* data = new u8[imageSize]; - s32 currentByte = 0; + u32 currentByte = 0; while(currentByte < imageSize) { @@ -47,8 +46,17 @@ u8 *CImageLoaderTGA::loadCompressedImage(io::IReadFile *file, const STGAHeader& { chunkheader++; // Add 1 To The Value To Get Total Number Of Raw Pixels - file->read(&data[currentByte], bytesPerPixel * chunkheader); - currentByte += bytesPerPixel * chunkheader; + const u32 bytesToRead = bytesPerPixel * chunkheader; + if ( currentByte+bytesToRead < imageSize ) + { + file->read(&data[currentByte], bytesToRead); + currentByte += bytesToRead; + } + else + { + os::Printer::log("Compressed TGA file RAW chunk tries writing beyond buffer", file->getFileName(), ELL_WARNING); + break; + } } else { @@ -57,15 +65,27 @@ u8 *CImageLoaderTGA::loadCompressedImage(io::IReadFile *file, const STGAHeader& // If It's An RLE Header chunkheader -= 127; // Subtract 127 To Get Rid Of The ID Bit - s32 dataOffset = currentByte; - file->read(&data[dataOffset], bytesPerPixel); - - currentByte += bytesPerPixel; - - for(s32 counter = 1; counter < chunkheader; counter++) + u32 dataOffset = currentByte; + if ( dataOffset+bytesPerPixel < imageSize ) { - for(s32 elementCounter=0; elementCounter < bytesPerPixel; elementCounter++) - data[currentByte + elementCounter] = data[dataOffset + elementCounter]; + file->read(&data[dataOffset], bytesPerPixel); + currentByte += bytesPerPixel; + } + else + { + os::Printer::log("Compressed TGA file RLE headertries writing beyond buffer", file->getFileName(), ELL_WARNING); + break; + } + + for(u32 counter = 1; counter < chunkheader; counter++) + { + if ( currentByte + bytesPerPixel <= imageSize ) + { + for(u32 elementCounter=0; elementCounter < bytesPerPixel; elementCounter++) + { + data[currentByte + elementCounter] = data[dataOffset + elementCounter]; + } + } currentByte += bytesPerPixel; } @@ -118,8 +138,17 @@ IImage* CImageLoaderTGA::loadImage(io::IReadFile* file) const if (header.ColorMapType) { - // create 32 bit palette - palette = new u32[ header.ColorMapLength]; + // Create 32 bit palette + const irr::u16 paletteSize = core::max_((u16)256, header.ColorMapLength); // ColorMapLength can lie, but so far we only use palette for 8-bit, so ensure it has 256 entries + palette = new u32[paletteSize]; + + if( paletteSize > header.ColorMapLength ) + { + // To catch images using palette colors with invalid indices + const irr::u32 errorCol = irr::video::SColor(255,255, 0, 205).color; // bright magenta + for ( irr::u16 i = header.ColorMapLength; i< paletteSize; ++i ) + palette[i] = errorCol; + } // read color map u8 * colorMap = new u8[header.ColorMapEntrySize/8 * header.ColorMapLength]; @@ -150,7 +179,7 @@ IImage* CImageLoaderTGA::loadImage(io::IReadFile* file) const header.ImageType == 3 // Uncompressed, black and white images ) { - const s32 imageSize = header.ImageHeight * header.ImageWidth * header.PixelDepth/8; + const s32 imageSize = header.ImageHeight * header.ImageWidth * (header.PixelDepth/8); data = new u8[imageSize]; file->read(data, imageSize); } @@ -185,14 +214,28 @@ IImage* CImageLoaderTGA::loadImage(io::IReadFile* file) const } else { - image = new CImage(ECF_A1R5G5B5, - core::dimension2d(header.ImageWidth, header.ImageHeight)); - if (image) - CColorConverter::convert8BitTo16Bit((u8*)data, - (s16*)image->getData(), - header.ImageWidth,header.ImageHeight, - (s32*) palette, 0, - (header.ImageDescriptor&0x20)==0); + switch ( header.ColorMapEntrySize ) + { + case 16: + image = new CImage(ECF_A1R5G5B5, core::dimension2d(header.ImageWidth, header.ImageHeight)); + if ( image ) + CColorConverter::convert8BitTo16Bit((u8*)data, + (s16*)image->getData(), + header.ImageWidth,header.ImageHeight, + (s32*) palette, 0, + (header.ImageDescriptor&0x20)==0); + break; + // Note: 24 bit with palette would need a 24 bit palette, too lazy doing that now (textures will prefer 32-bit later anyway) + default: + image = new CImage(ECF_A8R8G8B8, core::dimension2d(header.ImageWidth, header.ImageHeight)); + if ( image ) + CColorConverter::convert8BitTo32Bit((u8*)data, + (u8*)image->getData(), + header.ImageWidth,header.ImageHeight, + (u8*) palette, 0, + (header.ImageDescriptor&0x20)==0); + break; + } } } break; diff --git a/source/Irrlicht/CImageLoaderWAL.cpp b/source/Irrlicht/CImageLoaderWAL.cpp index cd210ded..219f9520 100644 --- a/source/Irrlicht/CImageLoaderWAL.cpp +++ b/source/Irrlicht/CImageLoaderWAL.cpp @@ -9,8 +9,6 @@ #include "CImage.h" #include "os.h" #include "dimension2d.h" -#include "IVideoDriver.h" -#include "IFileSystem.h" #include "IReadFile.h" #include "irrString.h" diff --git a/source/Irrlicht/CImageWriterBMP.cpp b/source/Irrlicht/CImageWriterBMP.cpp index 04d39731..73838054 100644 --- a/source/Irrlicht/CImageWriterBMP.cpp +++ b/source/Irrlicht/CImageWriterBMP.cpp @@ -9,7 +9,6 @@ #include "CImageLoaderBMP.h" #include "IWriteFile.h" #include "CColorConverter.h" -#include "irrString.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CImageWriterJPG.cpp b/source/Irrlicht/CImageWriterJPG.cpp index 793aed22..4c937b83 100644 --- a/source/Irrlicht/CImageWriterJPG.cpp +++ b/source/Irrlicht/CImageWriterJPG.cpp @@ -8,8 +8,7 @@ #include "CColorConverter.h" #include "IWriteFile.h" -#include "CImage.h" -#include "irrString.h" +#include "IImage.h" #include "os.h" #ifdef _IRR_COMPILE_WITH_LIBJPEG_ diff --git a/source/Irrlicht/CImageWriterPCX.cpp b/source/Irrlicht/CImageWriterPCX.cpp index 5ace3426..0edec0ec 100644 --- a/source/Irrlicht/CImageWriterPCX.cpp +++ b/source/Irrlicht/CImageWriterPCX.cpp @@ -6,10 +6,9 @@ #ifdef _IRR_COMPILE_WITH_PCX_WRITER_ -#include "CImageLoaderPCX.h" #include "IWriteFile.h" +#include "IImage.h" #include "os.h" // for logging -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CImageWriterPNG.cpp b/source/Irrlicht/CImageWriterPNG.cpp index c08100f2..6dc1e6ff 100644 --- a/source/Irrlicht/CImageWriterPNG.cpp +++ b/source/Irrlicht/CImageWriterPNG.cpp @@ -6,10 +6,9 @@ #ifdef _IRR_COMPILE_WITH_PNG_WRITER_ -#include "CImageLoaderPNG.h" +#include "IImage.h" #include "CColorConverter.h" #include "IWriteFile.h" -#include "irrString.h" #include "os.h" // for logging #ifdef _IRR_COMPILE_WITH_LIBPNG_ diff --git a/source/Irrlicht/CImageWriterPPM.cpp b/source/Irrlicht/CImageWriterPPM.cpp index fd0db971..ed765925 100644 --- a/source/Irrlicht/CImageWriterPPM.cpp +++ b/source/Irrlicht/CImageWriterPPM.cpp @@ -9,7 +9,6 @@ #include "IWriteFile.h" #include "IImage.h" #include "dimension2d.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CImageWriterPSD.cpp b/source/Irrlicht/CImageWriterPSD.cpp index 952eb0b3..cf0ce086 100644 --- a/source/Irrlicht/CImageWriterPSD.cpp +++ b/source/Irrlicht/CImageWriterPSD.cpp @@ -9,7 +9,6 @@ #include "CImageLoaderPSD.h" #include "IWriteFile.h" #include "os.h" // for logging -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CImageWriterTGA.cpp b/source/Irrlicht/CImageWriterTGA.cpp index 35f7afef..12a9662b 100644 --- a/source/Irrlicht/CImageWriterTGA.cpp +++ b/source/Irrlicht/CImageWriterTGA.cpp @@ -9,7 +9,6 @@ #include "CImageLoaderTGA.h" #include "IWriteFile.h" #include "CColorConverter.h" -#include "irrString.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CIrrDeviceOSX.h b/source/Irrlicht/CIrrDeviceOSX.h index 7034febf..61838f28 100644 --- a/source/Irrlicht/CIrrDeviceOSX.h +++ b/source/Irrlicht/CIrrDeviceOSX.h @@ -26,7 +26,7 @@ namespace irr class CIrrDeviceMacOSX; } -@interface CIrrDelegateOSX : NSObject +@interface CIrrDelegateOSX : NSObject - (id)initWithDevice:(irr::CIrrDeviceMacOSX*)device; - (void)terminate:(id)sender; diff --git a/source/Irrlicht/CIrrDeviceOSX.mm b/source/Irrlicht/CIrrDeviceOSX.mm index fbe2a5b2..6f9647db 100644 --- a/source/Irrlicht/CIrrDeviceOSX.mm +++ b/source/Irrlicht/CIrrDeviceOSX.mm @@ -579,7 +579,7 @@ CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param) { [[NSAutoreleasePool alloc] init]; [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; - [NSApp setDelegate:(id)[[[CIrrDelegateOSX alloc] initWithDevice:this] autorelease]]; + [[NSApplication sharedApplication] setDelegate:[[[CIrrDelegateOSX alloc] initWithDevice:this] autorelease]]; // Create menu @@ -794,7 +794,7 @@ bool CIrrDeviceMacOSX::createWindow() { if (Window) { - [Window setDelegate:(id)[NSApp delegate]]; + [Window setDelegate:(CIrrDelegateOSX *)[NSApp delegate]]; [Window setAcceptsMouseMovedEvents:TRUE]; [Window setIsVisible:TRUE]; [Window makeKeyAndOrderFront:nil]; @@ -867,7 +867,7 @@ void CIrrDeviceMacOSX::createDriver() SoftwareRendererType = 2; if (Window) { - Window.contentView.wantsLayer = YES; + [[Window contentView] setWantsLayer:YES]; } #else os::Printer::log("No Software driver support compiled in.", ELL_ERROR); @@ -880,7 +880,7 @@ void CIrrDeviceMacOSX::createDriver() SoftwareRendererType = 1; if (Window) { - Window.contentView.wantsLayer = YES; + [[Window contentView] setWantsLayer:YES]; [ Window setOpaque:YES]; } @@ -1602,7 +1602,7 @@ bool CIrrDeviceMacOSX::present(video::IImage* surface, void* windowId, core::rec NSImage *image = [[[NSImage alloc] initWithSize: imageSize] autorelease]; [image addRepresentation: rep]; - Window.contentView.layer.contents = image; + [[[Window contentView] layer] setContents:image]; } return true; } diff --git a/source/Irrlicht/CIrrDeviceWin32.h b/source/Irrlicht/CIrrDeviceWin32.h index f2641e47..caa169ae 100644 --- a/source/Irrlicht/CIrrDeviceWin32.h +++ b/source/Irrlicht/CIrrDeviceWin32.h @@ -9,8 +9,6 @@ #ifdef _IRR_COMPILE_WITH_WINDOWS_DEVICE_ #include "CIrrDeviceStub.h" -#include "IrrlichtDevice.h" -#include "IImagePresenter.h" #define WIN32_LEAN_AND_MEAN #if !defined(_IRR_XBOX_PLATFORM_) @@ -71,7 +69,7 @@ namespace irr virtual video::IVideoModeList* getVideoModeList() IRR_OVERRIDE; //! Notifies the device, that it has been resized - /** Must be publis as it is called from free function (event handler) */ + /** Must be public as it is called from free function (event handler) */ void OnResized(); //! Sets if the window should be resizable in windowed mode. diff --git a/source/Irrlicht/CIrrMeshFileLoader.cpp b/source/Irrlicht/CIrrMeshFileLoader.cpp index 84754eae..10fad47a 100644 --- a/source/Irrlicht/CIrrMeshFileLoader.cpp +++ b/source/Irrlicht/CIrrMeshFileLoader.cpp @@ -9,12 +9,12 @@ #include "os.h" #include "IXMLReader.h" #include "SAnimatedMesh.h" +#include "SMesh.h" #include "fast_atof.h" #include "IReadFile.h" #include "IAttributes.h" -#include "IMeshSceneNode.h" +#include "IVideoDriver.h" #include "CDynamicMeshBuffer.h" -#include "SMeshBufferLightMap.h" namespace irr { diff --git a/source/Irrlicht/CIrrMeshFileLoader.h b/source/Irrlicht/CIrrMeshFileLoader.h index 90ace996..921266c7 100644 --- a/source/Irrlicht/CIrrMeshFileLoader.h +++ b/source/Irrlicht/CIrrMeshFileLoader.h @@ -7,10 +7,6 @@ #include "IMeshLoader.h" #include "IFileSystem.h" -#include "IVideoDriver.h" -#include "irrString.h" -#include "SMesh.h" -#include "SMeshBuffer.h" #include "CDynamicMeshBuffer.h" #include "ISceneManager.h" diff --git a/source/Irrlicht/CLMTSMeshFileLoader.cpp b/source/Irrlicht/CLMTSMeshFileLoader.cpp index b972ec51..dd33450b 100644 --- a/source/Irrlicht/CLMTSMeshFileLoader.cpp +++ b/source/Irrlicht/CLMTSMeshFileLoader.cpp @@ -70,13 +70,12 @@ Version 1.0 - 29 July 2004 #include "CLMTSMeshFileLoader.h" #include "CMeshTextureLoader.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #include "SAnimatedMesh.h" -#include "SMeshBuffer.h" +#include "SceneParameters.h" #include "irrString.h" #include "IReadFile.h" #include "IAttributes.h" -#include "ISceneManager.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CLWOMeshFileLoader.h b/source/Irrlicht/CLWOMeshFileLoader.h index edcd7e88..a3fca8a5 100644 --- a/source/Irrlicht/CLWOMeshFileLoader.h +++ b/source/Irrlicht/CLWOMeshFileLoader.h @@ -6,7 +6,7 @@ #define IRR_C_LWO_MESH_FILE_LOADER_H_INCLUDED #include "IMeshLoader.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" #include "irrString.h" namespace irr diff --git a/source/Irrlicht/CLimitReadFile.cpp b/source/Irrlicht/CLimitReadFile.cpp index f65b7004..1a802254 100644 --- a/source/Irrlicht/CLimitReadFile.cpp +++ b/source/Irrlicht/CLimitReadFile.cpp @@ -3,7 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CLimitReadFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CLimitReadFile.h b/source/Irrlicht/CLimitReadFile.h index 817ab2de..7ff52af7 100644 --- a/source/Irrlicht/CLimitReadFile.h +++ b/source/Irrlicht/CLimitReadFile.h @@ -6,7 +6,6 @@ #define IRR_C_LIMIT_READ_FILE_H_INCLUDED #include "IReadFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CLogger.cpp b/source/Irrlicht/CLogger.cpp index 5b3feeca..f01c3cad 100644 --- a/source/Irrlicht/CLogger.cpp +++ b/source/Irrlicht/CLogger.cpp @@ -3,6 +3,8 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CLogger.h" +#include "os.h" +#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CLogger.h b/source/Irrlicht/CLogger.h index c6357874..e484b30a 100644 --- a/source/Irrlicht/CLogger.h +++ b/source/Irrlicht/CLogger.h @@ -6,8 +6,6 @@ #define IRR_C_LOGGER_H_INCLUDED #include "ILogger.h" -#include "os.h" -#include "irrString.h" #include "IEventReceiver.h" namespace irr diff --git a/source/Irrlicht/CMD2MeshFileLoader.cpp b/source/Irrlicht/CMD2MeshFileLoader.cpp index 78136e75..326a60c8 100644 --- a/source/Irrlicht/CMD2MeshFileLoader.cpp +++ b/source/Irrlicht/CMD2MeshFileLoader.cpp @@ -7,6 +7,8 @@ #include "CMD2MeshFileLoader.h" #include "CAnimatedMeshMD2.h" +#include "coreutil.h" +#include "IReadFile.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CMD3MeshFileLoader.cpp b/source/Irrlicht/CMD3MeshFileLoader.cpp index 68f8d80d..5fe4abda 100644 --- a/source/Irrlicht/CMD3MeshFileLoader.cpp +++ b/source/Irrlicht/CMD3MeshFileLoader.cpp @@ -7,7 +7,7 @@ #include "CMD3MeshFileLoader.h" #include "CAnimatedMeshMD3.h" -#include "irrString.h" +#include "IVideoDriver.h" namespace irr { diff --git a/source/Irrlicht/CMD3MeshFileLoader.h b/source/Irrlicht/CMD3MeshFileLoader.h index d6778577..05cf0951 100644 --- a/source/Irrlicht/CMD3MeshFileLoader.h +++ b/source/Irrlicht/CMD3MeshFileLoader.h @@ -6,10 +6,7 @@ #define IRR_C_MD3_MESH_FILE_LOADER_H_INCLUDED #include "IMeshLoader.h" -#include "IFileSystem.h" -#include "IVideoDriver.h" #include "ISceneManager.h" -#include "IQ3Shader.h" namespace irr { diff --git a/source/Irrlicht/CMY3DMeshFileLoader.cpp b/source/Irrlicht/CMY3DMeshFileLoader.cpp index 91a01248..b4d55f72 100644 --- a/source/Irrlicht/CMY3DMeshFileLoader.cpp +++ b/source/Irrlicht/CMY3DMeshFileLoader.cpp @@ -15,7 +15,7 @@ #include "CMeshTextureLoader.h" #include "SAnimatedMesh.h" -#include "SMeshBuffer.h" +#include "SMesh.h" #include "IReadFile.h" #include "IAttributes.h" diff --git a/source/Irrlicht/CMY3DMeshFileLoader.h b/source/Irrlicht/CMY3DMeshFileLoader.h index b2160e83..ae119e3c 100644 --- a/source/Irrlicht/CMY3DMeshFileLoader.h +++ b/source/Irrlicht/CMY3DMeshFileLoader.h @@ -29,8 +29,7 @@ #include "IMeshLoader.h" -#include "SMesh.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #include "IFileSystem.h" #include "IVideoDriver.h" #include "irrString.h" diff --git a/source/Irrlicht/CMemoryFile.cpp b/source/Irrlicht/CMemoryFile.cpp index a2143615..48c477d7 100644 --- a/source/Irrlicht/CMemoryFile.cpp +++ b/source/Irrlicht/CMemoryFile.cpp @@ -3,7 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CMemoryFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CMemoryFile.h b/source/Irrlicht/CMemoryFile.h index fb59170c..e30d637b 100644 --- a/source/Irrlicht/CMemoryFile.h +++ b/source/Irrlicht/CMemoryFile.h @@ -7,7 +7,6 @@ #include "IMemoryReadFile.h" #include "IWriteFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CMeshSceneNode.cpp b/source/Irrlicht/CMeshSceneNode.cpp index c3176048..cd7bbe82 100644 --- a/source/Irrlicht/CMeshSceneNode.cpp +++ b/source/Irrlicht/CMeshSceneNode.cpp @@ -6,11 +6,8 @@ #include "CBufferRenderNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" -#include "S3DVertex.h" -#include "ICameraSceneNode.h" #include "IMeshCache.h" #include "IAnimatedMesh.h" -#include "IMaterialRenderer.h" #include "IFileSystem.h" #ifdef _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "CShadowVolumeSceneNode.h" diff --git a/source/Irrlicht/CMountPointReader.cpp b/source/Irrlicht/CMountPointReader.cpp index 1f5049db..fb6986a6 100644 --- a/source/Irrlicht/CMountPointReader.cpp +++ b/source/Irrlicht/CMountPointReader.cpp @@ -7,7 +7,6 @@ #ifdef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ #include "CReadFile.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CNPKReader.h b/source/Irrlicht/CNPKReader.h index ca6c2e20..2477a3c3 100644 --- a/source/Irrlicht/CNPKReader.h +++ b/source/Irrlicht/CNPKReader.h @@ -10,9 +10,7 @@ #ifdef __IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ -#include "IReferenceCounted.h" #include "IReadFile.h" -#include "irrArray.h" #include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" diff --git a/source/Irrlicht/CNullDriver.cpp b/source/Irrlicht/CNullDriver.cpp index 1f89e373..1a039218 100644 --- a/source/Irrlicht/CNullDriver.cpp +++ b/source/Irrlicht/CNullDriver.cpp @@ -11,6 +11,7 @@ #include "IImageLoader.h" #include "IImageWriter.h" #include "IMaterialRenderer.h" +#include "IMeshSceneNode.h" #include "IAnimatedMeshSceneNode.h" #include "CMeshManipulator.h" #include "CColorConverter.h" diff --git a/source/Irrlicht/CNullDriver.h b/source/Irrlicht/CNullDriver.h index 98515ed8..f5e85c74 100644 --- a/source/Irrlicht/CNullDriver.h +++ b/source/Irrlicht/CNullDriver.h @@ -7,7 +7,6 @@ #include "IVideoDriver.h" #include "IFileSystem.h" -#include "IImagePresenter.h" #include "IGPUProgrammingServices.h" #include "irrArray.h" #include "irrString.h" diff --git a/source/Irrlicht/COBJMeshFileLoader.cpp b/source/Irrlicht/COBJMeshFileLoader.cpp index 369f6f2d..b7de81bd 100644 --- a/source/Irrlicht/COBJMeshFileLoader.cpp +++ b/source/Irrlicht/COBJMeshFileLoader.cpp @@ -10,7 +10,6 @@ #include "IMeshManipulator.h" #include "IVideoDriver.h" #include "SMesh.h" -#include "SMeshBuffer.h" #include "SAnimatedMesh.h" #include "IReadFile.h" #include "IAttributes.h" @@ -68,13 +67,26 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) { if (!file) return 0; + size_t filesize = file->getSize(); + if (filesize == 0 || filesize == (size_t)-1L) + return 0; + + const io::path fullName = file->getFileName(); + const io::path relPath = FileSystem->getFileDir(fullName)+"/"; + + c8* buf = new c8[filesize+1]; // plus null-terminator (some string functions used in parsing) + filesize = file->read((void*)buf, filesize); + if ( filesize == 0 ) + { + delete[] buf; + return 0; + } + buf[filesize] = 0; if ( getMeshTextureLoader() ) getMeshTextureLoader()->setMeshFile(file); - const long filesize = file->getSize(); - if (!filesize) - return 0; + const c8* const bufEnd = buf+filesize; const u32 WORD_BUFFER_LENGTH = 512; @@ -86,14 +98,6 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) Materials.push_back(currMtl); u32 smoothingGroup=0; - const io::path fullName = file->getFileName(); - const io::path relPath = FileSystem->getFileDir(fullName)+"/"; - - c8* buf = new c8[filesize]; - memset(buf, 0, filesize); - file->read((void*)buf, filesize); - const c8* const bufEnd = buf+filesize; - // Process obj information const c8* bufPtr = buf; core::stringc grpName, mtlName; @@ -246,19 +250,20 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) u32 wlength = copyWord(vertexWord, linePtr, WORD_BUFFER_LENGTH, endPtr); // this function will also convert obj's 1-based index to c++'s 0-based index retrieveVertexIndices(vertexWord, Idx, vertexWord+wlength+1, vertexBuffer.size(), textureCoordBuffer.size(), normalsBuffer.size()); - if ( -1 != Idx[0] && Idx[0] < (irr::s32)vertexBuffer.size() ) + if ( Idx[0] >= 0 && Idx[0] < (irr::s32)vertexBuffer.size() ) v.Pos = vertexBuffer[Idx[0]]; else { os::Printer::log("Invalid vertex index in this line", wordBuffer.c_str(), ELL_ERROR); delete [] buf; + cleanUp(); return 0; } - if ( -1 != Idx[1] && Idx[1] < (irr::s32)textureCoordBuffer.size() ) + if ( Idx[1] >= 0 && Idx[1] < (irr::s32)textureCoordBuffer.size() ) v.TCoords = textureCoordBuffer[Idx[1]]; else v.TCoords.set(0.0f,0.0f); - if ( -1 != Idx[2] && Idx[2] < (irr::s32)normalsBuffer.size() ) + if ( Idx[2] >= 0 && Idx[2] < (irr::s32)normalsBuffer.size() ) v.Normal = normalsBuffer[Idx[2]]; else { @@ -286,23 +291,30 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) } // triangulate the face - const int c = faceCorners[0]; - for ( u32 i = 1; i < faceCorners.size() - 1; ++i ) + if ( faceCorners.size() >= 3) { - // Add a triangle - const int a = faceCorners[i + 1]; - const int b = faceCorners[i]; - if (a != b && a != c && b != c) // ignore degenerated faces. We can get them when we merge vertices above in the VertMap. + const int c = faceCorners[0]; + for ( u32 i = 1; i < faceCorners.size() - 1; ++i ) { - mbIndexBuffer.push_back(a); - mbIndexBuffer.push_back(b); - mbIndexBuffer.push_back(c); - } - else - { - ++degeneratedFaces; + // Add a triangle + const int a = faceCorners[i + 1]; + const int b = faceCorners[i]; + if (a != b && a != c && b != c) // ignore degenerated faces. We can get them when we merge vertices above in the VertMap. + { + mbIndexBuffer.push_back(a); + mbIndexBuffer.push_back(b); + mbIndexBuffer.push_back(c); + } + else + { + ++degeneratedFaces; + } } } + else + { + os::Printer::log("Too few vertices in this line", wordBuffer.c_str()); + } } break; diff --git a/source/Irrlicht/COBJMeshWriter.cpp b/source/Irrlicht/COBJMeshWriter.cpp index 7c1232ec..b9a60e46 100644 --- a/source/Irrlicht/COBJMeshWriter.cpp +++ b/source/Irrlicht/COBJMeshWriter.cpp @@ -10,9 +10,7 @@ #include "os.h" #include "IMesh.h" #include "IMeshBuffer.h" -#include "IAttributes.h" #include "ISceneManager.h" -#include "IMeshCache.h" #include "IWriteFile.h" #include "IFileSystem.h" #include "ITexture.h" diff --git a/source/Irrlicht/COCTLoader.cpp b/source/Irrlicht/COCTLoader.cpp index c09120e4..34102297 100644 --- a/source/Irrlicht/COCTLoader.cpp +++ b/source/Irrlicht/COCTLoader.cpp @@ -17,8 +17,9 @@ #include "IVideoDriver.h" #include "IFileSystem.h" #include "os.h" +#include "SMesh.h" #include "SAnimatedMesh.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #include "irrString.h" #include "ISceneManager.h" diff --git a/source/Irrlicht/COCTLoader.h b/source/Irrlicht/COCTLoader.h index 98acdcbf..2e4e9721 100644 --- a/source/Irrlicht/COCTLoader.h +++ b/source/Irrlicht/COCTLoader.h @@ -45,8 +45,6 @@ #include "IMeshLoader.h" #include "IReadFile.h" -#include "SMesh.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/COgreMeshFileLoader.cpp b/source/Irrlicht/COgreMeshFileLoader.cpp index 9df20871..8246062d 100644 --- a/source/Irrlicht/COgreMeshFileLoader.cpp +++ b/source/Irrlicht/COgreMeshFileLoader.cpp @@ -9,7 +9,8 @@ #include "COgreMeshFileLoader.h" #include "CMeshTextureLoader.h" #include "os.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" +#include "SMesh.h" #include "SAnimatedMesh.h" #include "IReadFile.h" #include "fast_atof.h" diff --git a/source/Irrlicht/COgreMeshFileLoader.h b/source/Irrlicht/COgreMeshFileLoader.h index facab78d..7f8275eb 100644 --- a/source/Irrlicht/COgreMeshFileLoader.h +++ b/source/Irrlicht/COgreMeshFileLoader.h @@ -10,12 +10,8 @@ #include "IFileSystem.h" #include "IVideoDriver.h" #include "irrString.h" -#include "SMesh.h" -#include "SMeshBuffer.h" -#include "SMeshBufferLightMap.h" -#include "IMeshManipulator.h" -#include "matrix4.h" #include "quaternion.h" +#include "CMeshBuffer.h" #include "CSkinnedMesh.h" namespace irr diff --git a/source/Irrlicht/COpenGLCacheHandler.h b/source/Irrlicht/COpenGLCacheHandler.h index 54365ba4..9472e8b4 100644 --- a/source/Irrlicht/COpenGLCacheHandler.h +++ b/source/Irrlicht/COpenGLCacheHandler.h @@ -11,8 +11,6 @@ #include "COpenGLCommon.h" -#include "COpenGLCoreFeature.h" -#include "COpenGLCoreTexture.h" #include "COpenGLCoreCacheHandler.h" namespace irr diff --git a/source/Irrlicht/COpenGLCoreCacheHandler.h b/source/Irrlicht/COpenGLCoreCacheHandler.h index 7f544526..2404b79b 100644 --- a/source/Irrlicht/COpenGLCoreCacheHandler.h +++ b/source/Irrlicht/COpenGLCoreCacheHandler.h @@ -9,6 +9,8 @@ #if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES1_) || defined(_IRR_COMPILE_WITH_OGLES2_) +#include "COpenGLCoreFeature.h" +#include "COpenGLCoreTexture.h" #include "SMaterial.h" #include "ITexture.h" diff --git a/source/Irrlicht/COpenGLNormalMapRenderer.cpp b/source/Irrlicht/COpenGLNormalMapRenderer.cpp index 5bbad4f0..d6591fc7 100644 --- a/source/Irrlicht/COpenGLNormalMapRenderer.cpp +++ b/source/Irrlicht/COpenGLNormalMapRenderer.cpp @@ -6,8 +6,6 @@ #ifdef _IRR_COMPILE_WITH_OPENGL_ -#include "IGPUProgrammingServices.h" -#include "IShaderConstantSetCallBack.h" #include "IVideoDriver.h" #include "os.h" diff --git a/source/Irrlicht/COpenGLParallaxMapRenderer.cpp b/source/Irrlicht/COpenGLParallaxMapRenderer.cpp index d0edb742..cc33bf15 100644 --- a/source/Irrlicht/COpenGLParallaxMapRenderer.cpp +++ b/source/Irrlicht/COpenGLParallaxMapRenderer.cpp @@ -6,8 +6,6 @@ #ifdef _IRR_COMPILE_WITH_OPENGL_ -#include "IGPUProgrammingServices.h" -#include "IShaderConstantSetCallBack.h" #include "IVideoDriver.h" #include "os.h" diff --git a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp index 09a1925f..f6c6716e 100644 --- a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp +++ b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp @@ -14,7 +14,6 @@ #ifdef _IRR_COMPILE_WITH_OPENGL_ -#include "IGPUProgrammingServices.h" #include "IShaderConstantSetCallBack.h" #include "IMaterialRendererServices.h" #include "IVideoDriver.h" @@ -22,7 +21,6 @@ #include "COpenGLDriver.h" #include "COpenGLCacheHandler.h" -#include "COpenGLMaterialRenderer.h" #include "COpenGLCoreFeature.h" diff --git a/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp b/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp index 1dabd311..ef5d10cd 100644 --- a/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp +++ b/source/Irrlicht/COpenGLShaderMaterialRenderer.cpp @@ -6,14 +6,12 @@ #ifdef _IRR_COMPILE_WITH_OPENGL_ -#include "IGPUProgrammingServices.h" #include "IShaderConstantSetCallBack.h" #include "IVideoDriver.h" #include "os.h" #include "COpenGLDriver.h" #include "COpenGLCacheHandler.h" -#include "COpenGLMaterialRenderer.h" namespace irr { diff --git a/source/Irrlicht/COpenGLShaderMaterialRenderer.h b/source/Irrlicht/COpenGLShaderMaterialRenderer.h index 06ebf309..82a51ebd 100644 --- a/source/Irrlicht/COpenGLShaderMaterialRenderer.h +++ b/source/Irrlicht/COpenGLShaderMaterialRenderer.h @@ -10,6 +10,7 @@ #ifdef _IRR_COMPILE_WITH_OPENGL_ #include "IMaterialRenderer.h" +#include "irrArray.h" #include "COpenGLCommon.h" diff --git a/source/Irrlicht/CPakReader.h b/source/Irrlicht/CPakReader.h index bb7cc185..c13108eb 100644 --- a/source/Irrlicht/CPakReader.h +++ b/source/Irrlicht/CPakReader.h @@ -9,10 +9,7 @@ #ifdef __IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ -#include "IReferenceCounted.h" #include "IReadFile.h" -#include "irrArray.h" -#include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" diff --git a/source/Irrlicht/CParticleGravityAffector.cpp b/source/Irrlicht/CParticleGravityAffector.cpp index 1938a542..d4a6918f 100644 --- a/source/Irrlicht/CParticleGravityAffector.cpp +++ b/source/Irrlicht/CParticleGravityAffector.cpp @@ -6,7 +6,6 @@ #ifdef _IRR_COMPILE_WITH_PARTICLES_ -#include "os.h" #include "IAttributes.h" namespace irr diff --git a/source/Irrlicht/CParticleGravityAffector.h b/source/Irrlicht/CParticleGravityAffector.h index d3bd6196..0d31cddf 100644 --- a/source/Irrlicht/CParticleGravityAffector.h +++ b/source/Irrlicht/CParticleGravityAffector.h @@ -9,7 +9,6 @@ #ifdef _IRR_COMPILE_WITH_PARTICLES_ #include "IParticleGravityAffector.h" -#include "SColor.h" namespace irr { diff --git a/source/Irrlicht/CParticleMeshEmitter.cpp b/source/Irrlicht/CParticleMeshEmitter.cpp index ef667c52..5fa0463d 100644 --- a/source/Irrlicht/CParticleMeshEmitter.cpp +++ b/source/Irrlicht/CParticleMeshEmitter.cpp @@ -8,6 +8,7 @@ #ifdef _IRR_COMPILE_WITH_PARTICLES_ #include "os.h" +#include "IMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CParticleMeshEmitter.h b/source/Irrlicht/CParticleMeshEmitter.h index 2863c939..90ddb52f 100644 --- a/source/Irrlicht/CParticleMeshEmitter.h +++ b/source/Irrlicht/CParticleMeshEmitter.h @@ -9,9 +9,8 @@ #ifdef _IRR_COMPILE_WITH_PARTICLES_ #include "IParticleMeshEmitter.h" +#include "IMesh.h" #include "irrArray.h" -#include "aabbox3d.h" -#include "IMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CParticlePointEmitter.h b/source/Irrlicht/CParticlePointEmitter.h index c88645d2..c4bddb66 100644 --- a/source/Irrlicht/CParticlePointEmitter.h +++ b/source/Irrlicht/CParticlePointEmitter.h @@ -9,7 +9,6 @@ #ifdef _IRR_COMPILE_WITH_PARTICLES_ #include "IParticleEmitter.h" -#include "irrArray.h" namespace irr { diff --git a/source/Irrlicht/CParticleSphereEmitter.h b/source/Irrlicht/CParticleSphereEmitter.h index 96060fcd..25a25569 100644 --- a/source/Irrlicht/CParticleSphereEmitter.h +++ b/source/Irrlicht/CParticleSphereEmitter.h @@ -10,7 +10,6 @@ #include "IParticleSphereEmitter.h" #include "irrArray.h" -#include "aabbox3d.h" namespace irr { diff --git a/source/Irrlicht/CParticleSystemSceneNode.h b/source/Irrlicht/CParticleSystemSceneNode.h index 1510549d..d3d84884 100644 --- a/source/Irrlicht/CParticleSystemSceneNode.h +++ b/source/Irrlicht/CParticleSystemSceneNode.h @@ -11,7 +11,7 @@ #include "IParticleSystemSceneNode.h" #include "irrArray.h" #include "irrList.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CProfiler.cpp b/source/Irrlicht/CProfiler.cpp index 537bea44..a313169b 100644 --- a/source/Irrlicht/CProfiler.cpp +++ b/source/Irrlicht/CProfiler.cpp @@ -3,6 +3,7 @@ // Written by Michael Zeilfelder #include "CProfiler.h" +#include "IrrCompileConfig.h" #include "CTimer.h" namespace irr diff --git a/source/Irrlicht/CProfiler.h b/source/Irrlicht/CProfiler.h index ac4c1f2f..3fbb8203 100644 --- a/source/Irrlicht/CProfiler.h +++ b/source/Irrlicht/CProfiler.h @@ -5,7 +5,6 @@ #ifndef IRR_C_PROFILER_H_INCLUDED #define IRR_C_PROFILER_H_INCLUDED -#include "IrrCompileConfig.h" #include "IProfiler.h" namespace irr diff --git a/source/Irrlicht/CQ3LevelMesh.cpp b/source/Irrlicht/CQ3LevelMesh.cpp index ca7d96ec..1e720c4c 100644 --- a/source/Irrlicht/CQ3LevelMesh.cpp +++ b/source/Irrlicht/CQ3LevelMesh.cpp @@ -8,9 +8,7 @@ #include "CQ3LevelMesh.h" #include "ISceneManager.h" #include "os.h" -#include "SMeshBufferLightMap.h" #include "irrString.h" -#include "ILightSceneNode.h" #include "IQ3Shader.h" #include "IFileList.h" diff --git a/source/Irrlicht/CQ3LevelMesh.h b/source/Irrlicht/CQ3LevelMesh.h index a6045d9a..a9feaeb8 100644 --- a/source/Irrlicht/CQ3LevelMesh.h +++ b/source/Irrlicht/CQ3LevelMesh.h @@ -9,11 +9,10 @@ #include "IReadFile.h" #include "IFileSystem.h" #include "SMesh.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #include "IVideoDriver.h" #include "irrString.h" #include "ISceneManager.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CQuake3ShaderSceneNode.cpp b/source/Irrlicht/CQuake3ShaderSceneNode.cpp index 972f131d..7efeab9f 100644 --- a/source/Irrlicht/CQuake3ShaderSceneNode.cpp +++ b/source/Irrlicht/CQuake3ShaderSceneNode.cpp @@ -13,7 +13,6 @@ #include "SViewFrustum.h" #include "IMeshManipulator.h" #include "SMesh.h" -#include "IMaterialRenderer.h" #ifdef _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "CShadowVolumeSceneNode.h" #else diff --git a/source/Irrlicht/CQuake3ShaderSceneNode.h b/source/Irrlicht/CQuake3ShaderSceneNode.h index 6b9948e7..9afba59f 100644 --- a/source/Irrlicht/CQuake3ShaderSceneNode.h +++ b/source/Irrlicht/CQuake3ShaderSceneNode.h @@ -8,8 +8,7 @@ #include "IMeshSceneNode.h" #include "IQ3Shader.h" #include "IFileSystem.h" -#include "SMeshBuffer.h" -#include "SMeshBufferLightMap.h" +#include "CMeshBuffer.h" #include "SMesh.h" #include "ISceneManager.h" diff --git a/source/Irrlicht/CReadFile.h b/source/Irrlicht/CReadFile.h index 4f7e1351..29e5388a 100644 --- a/source/Irrlicht/CReadFile.h +++ b/source/Irrlicht/CReadFile.h @@ -7,7 +7,6 @@ #include #include "IReadFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CSMFMeshFileLoader.cpp b/source/Irrlicht/CSMFMeshFileLoader.cpp index d6ddb133..b0830319 100644 --- a/source/Irrlicht/CSMFMeshFileLoader.cpp +++ b/source/Irrlicht/CSMFMeshFileLoader.cpp @@ -9,7 +9,7 @@ #include "CSMFMeshFileLoader.h" #include "CMeshTextureLoader.h" #include "SAnimatedMesh.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" #include "IReadFile.h" #include "coreutil.h" #include "os.h" diff --git a/source/Irrlicht/CSTLMeshWriter.h b/source/Irrlicht/CSTLMeshWriter.h index 58974f30..463cfbd3 100644 --- a/source/Irrlicht/CSTLMeshWriter.h +++ b/source/Irrlicht/CSTLMeshWriter.h @@ -6,7 +6,7 @@ #define IRR_STL_MESH_WRITER_H_INCLUDED #include "IMeshWriter.h" -#include "S3DVertex.h" +#include "vector3d.h" #include "irrString.h" namespace irr diff --git a/source/Irrlicht/CSceneCollisionManager.cpp b/source/Irrlicht/CSceneCollisionManager.cpp index 78ba1318..cdbd7ebc 100644 --- a/source/Irrlicht/CSceneCollisionManager.cpp +++ b/source/Irrlicht/CSceneCollisionManager.cpp @@ -8,7 +8,6 @@ #include "ITriangleSelector.h" #include "SViewFrustum.h" -#include "os.h" #include "irrMath.h" namespace irr diff --git a/source/Irrlicht/CSceneLoaderIrr.cpp b/source/Irrlicht/CSceneLoaderIrr.cpp index 77054368..4d1f111e 100644 --- a/source/Irrlicht/CSceneLoaderIrr.cpp +++ b/source/Irrlicht/CSceneLoaderIrr.cpp @@ -3,11 +3,12 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CSceneLoaderIrr.h" -#include "ISceneNodeAnimatorFactory.h" #include "ISceneUserDataSerializer.h" #include "ISceneManager.h" +#include "ISceneNode.h" #include "IVideoDriver.h" #include "IFileSystem.h" +#include "IAttributes.h" #include "os.h" namespace irr diff --git a/source/Irrlicht/CSceneManager.cpp b/source/Irrlicht/CSceneManager.cpp index 6255cfe1..93dd9199 100644 --- a/source/Irrlicht/CSceneManager.cpp +++ b/source/Irrlicht/CSceneManager.cpp @@ -12,7 +12,6 @@ #include "IXMLWriter.h" #include "ISceneUserDataSerializer.h" #include "IGUIEnvironment.h" -#include "IMaterialRenderer.h" #include "IReadFile.h" #include "IWriteFile.h" #include "ISceneLoader.h" diff --git a/source/Irrlicht/CSceneNodeAnimatorCameraFPS.h b/source/Irrlicht/CSceneNodeAnimatorCameraFPS.h index 65acdf41..b1dc6ecd 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCameraFPS.h +++ b/source/Irrlicht/CSceneNodeAnimatorCameraFPS.h @@ -6,7 +6,6 @@ #define IRR_C_SCENE_NODE_ANIMATOR_CAMERA_FPS_H_INCLUDED #include "ISceneNodeAnimatorCameraFPS.h" -#include "vector2d.h" #include "position2d.h" #include "SKeyMap.h" #include "irrArray.h" diff --git a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h index 9b3993d3..07a6d5f0 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h +++ b/source/Irrlicht/CSceneNodeAnimatorCameraMaya.h @@ -7,7 +7,7 @@ #include "ISceneNodeAnimatorCameraMaya.h" #include "ICameraSceneNode.h" -#include "vector2d.h" +#include "position2d.h" namespace irr { diff --git a/source/Irrlicht/CSkinnedMesh.h b/source/Irrlicht/CSkinnedMesh.h index b51c0384..7e246b1c 100644 --- a/source/Irrlicht/CSkinnedMesh.h +++ b/source/Irrlicht/CSkinnedMesh.h @@ -8,10 +8,6 @@ #define IRR_C_SKINNED_MESH_H_INCLUDED #include "ISkinnedMesh.h" -#include "SMeshBuffer.h" -#include "S3DVertex.h" -#include "irrString.h" -#include "matrix4.h" #include "quaternion.h" namespace irr @@ -21,6 +17,7 @@ namespace scene class IAnimatedMeshSceneNode; class IBoneSceneNode; + class ISceneManager; class CSkinnedMesh: public ISkinnedMesh { diff --git a/source/Irrlicht/CSkyBoxSceneNode.cpp b/source/Irrlicht/CSkyBoxSceneNode.cpp index 2ad3fe6e..c28bc37a 100644 --- a/source/Irrlicht/CSkyBoxSceneNode.cpp +++ b/source/Irrlicht/CSkyBoxSceneNode.cpp @@ -7,7 +7,6 @@ #include "ISceneManager.h" #include "ICameraSceneNode.h" #include "S3DVertex.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CSkyDomeSceneNode.cpp b/source/Irrlicht/CSkyDomeSceneNode.cpp index 7cf81f39..f4ca022a 100644 --- a/source/Irrlicht/CSkyDomeSceneNode.cpp +++ b/source/Irrlicht/CSkyDomeSceneNode.cpp @@ -9,8 +9,6 @@ #include "IVideoDriver.h" #include "ISceneManager.h" #include "ICameraSceneNode.h" -#include "IAnimatedMesh.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CSkyDomeSceneNode.h b/source/Irrlicht/CSkyDomeSceneNode.h index 68d8c081..d17925d9 100644 --- a/source/Irrlicht/CSkyDomeSceneNode.h +++ b/source/Irrlicht/CSkyDomeSceneNode.h @@ -7,7 +7,7 @@ #define IRR_C_SKY_DOME_SCENE_NODE_H_INCLUDED #include "ISceneNode.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" namespace irr { diff --git a/source/Irrlicht/CSoftwareDriver.cpp b/source/Irrlicht/CSoftwareDriver.cpp index 426aac29..eb2d5b7e 100644 --- a/source/Irrlicht/CSoftwareDriver.cpp +++ b/source/Irrlicht/CSoftwareDriver.cpp @@ -11,6 +11,7 @@ #include "CBlit.h" #include "os.h" #include "S3DVertex.h" +#include "SViewFrustum.h" namespace irr { diff --git a/source/Irrlicht/CSoftwareDriver.h b/source/Irrlicht/CSoftwareDriver.h index c51eb29b..d121b072 100644 --- a/source/Irrlicht/CSoftwareDriver.h +++ b/source/Irrlicht/CSoftwareDriver.h @@ -6,8 +6,8 @@ #define IRR_C_SOFTWARE_DRIVER_H_INCLUDED #include "ITriangleRenderer.h" +#include "IImagePresenter.h" #include "CNullDriver.h" -#include "SViewFrustum.h" #include "CImage.h" namespace irr diff --git a/source/Irrlicht/CSoftwareDriver2.h b/source/Irrlicht/CSoftwareDriver2.h index 01ae8127..1716200a 100644 --- a/source/Irrlicht/CSoftwareDriver2.h +++ b/source/Irrlicht/CSoftwareDriver2.h @@ -7,6 +7,7 @@ #include "SoftwareDriver2_compile_config.h" #include "IBurningShader.h" +#include "IImagePresenter.h" #include "CNullDriver.h" #include "CImage.h" #include "os.h" diff --git a/source/Irrlicht/CSphereSceneNode.cpp b/source/Irrlicht/CSphereSceneNode.cpp index 1693f5e2..0592588f 100644 --- a/source/Irrlicht/CSphereSceneNode.cpp +++ b/source/Irrlicht/CSphereSceneNode.cpp @@ -7,8 +7,6 @@ #include "CSphereSceneNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" -#include "S3DVertex.h" -#include "os.h" #ifdef _IRR_COMPILE_WITH_SHADOW_VOLUME_SCENENODE_ #include "CShadowVolumeSceneNode.h" #else diff --git a/source/Irrlicht/CTarReader.cpp b/source/Irrlicht/CTarReader.cpp index 6fd5ea7f..5df4c400 100644 --- a/source/Irrlicht/CTarReader.cpp +++ b/source/Irrlicht/CTarReader.cpp @@ -7,7 +7,7 @@ #ifdef __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ #include "CFileList.h" -#include "CLimitReadFile.h" +#include "IReadFile.h" #include "os.h" #include "coreutil.h" #include "errno.h" diff --git a/source/Irrlicht/CTarReader.h b/source/Irrlicht/CTarReader.h index a446fcc5..0a17a8be 100644 --- a/source/Irrlicht/CTarReader.h +++ b/source/Irrlicht/CTarReader.h @@ -9,10 +9,7 @@ #ifdef __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ -#include "IReferenceCounted.h" #include "IReadFile.h" -#include "irrArray.h" -#include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" diff --git a/source/Irrlicht/CTerrainSceneNode.cpp b/source/Irrlicht/CTerrainSceneNode.cpp index 0dbb96a9..08cd0779 100644 --- a/source/Irrlicht/CTerrainSceneNode.cpp +++ b/source/Irrlicht/CTerrainSceneNode.cpp @@ -19,11 +19,8 @@ #include "SViewFrustum.h" #include "irrMath.h" #include "os.h" -#include "IGUIFont.h" #include "IFileSystem.h" #include "IReadFile.h" -#include "ITextSceneNode.h" -#include "IAnimatedMesh.h" #include "SMesh.h" #include "CDynamicMeshBuffer.h" diff --git a/source/Irrlicht/CTextSceneNode.cpp b/source/Irrlicht/CTextSceneNode.cpp index e97dc913..a4f83fb8 100644 --- a/source/Irrlicht/CTextSceneNode.cpp +++ b/source/Irrlicht/CTextSceneNode.cpp @@ -7,7 +7,7 @@ #include "IVideoDriver.h" #include "ICameraSceneNode.h" #include "IGUISpriteBank.h" -#include "SMeshBuffer.h" +#include "CMeshBuffer.h" #include "os.h" diff --git a/source/Irrlicht/CTimer.h b/source/Irrlicht/CTimer.h index 6cfc64ed..3a942edf 100644 --- a/source/Irrlicht/CTimer.h +++ b/source/Irrlicht/CTimer.h @@ -53,7 +53,7 @@ namespace irr //! Stops the game timer. /** The timer is reference counted, which means everything which calls stopTimer() will also have to call startTimer(), otherwise the timer may not start/stop - corretly again. */ + correctly again. */ virtual void stop() IRR_OVERRIDE { os::Timer::stopTimer(); @@ -62,7 +62,7 @@ namespace irr //! Starts the game timer. /** The timer is reference counted, which means everything which calls stopTimer() will also have to call startTimer(), otherwise the timer may not start/stop - corretly again. */ + correctly again. */ virtual void start() IRR_OVERRIDE { os::Timer::startTimer(); diff --git a/source/Irrlicht/CVolumeLightSceneNode.cpp b/source/Irrlicht/CVolumeLightSceneNode.cpp index 720c3607..47df2931 100644 --- a/source/Irrlicht/CVolumeLightSceneNode.cpp +++ b/source/Irrlicht/CVolumeLightSceneNode.cpp @@ -5,8 +5,6 @@ #include "CVolumeLightSceneNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" -#include "S3DVertex.h" -#include "os.h" namespace irr { diff --git a/source/Irrlicht/CWADReader.h b/source/Irrlicht/CWADReader.h index 8d9a01af..66d18ee5 100644 --- a/source/Irrlicht/CWADReader.h +++ b/source/Irrlicht/CWADReader.h @@ -8,9 +8,7 @@ #include "IrrCompileConfig.h" #ifdef __IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ -#include "IReferenceCounted.h" #include "IReadFile.h" -#include "irrArray.h" #include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" diff --git a/source/Irrlicht/CWriteFile.cpp b/source/Irrlicht/CWriteFile.cpp index ef816b6b..ba551ae4 100644 --- a/source/Irrlicht/CWriteFile.cpp +++ b/source/Irrlicht/CWriteFile.cpp @@ -3,7 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CWriteFile.h" -#include namespace irr { diff --git a/source/Irrlicht/CWriteFile.h b/source/Irrlicht/CWriteFile.h index 9f6f4505..646f197c 100644 --- a/source/Irrlicht/CWriteFile.h +++ b/source/Irrlicht/CWriteFile.h @@ -7,7 +7,6 @@ #include #include "IWriteFile.h" -#include "irrString.h" namespace irr { diff --git a/source/Irrlicht/CXMLWriter.cpp b/source/Irrlicht/CXMLWriter.cpp index 4e9d6900..ed42f39e 100644 --- a/source/Irrlicht/CXMLWriter.cpp +++ b/source/Irrlicht/CXMLWriter.cpp @@ -6,7 +6,6 @@ #ifdef _IRR_COMPILE_WITH_XML_ -#include #include "irrString.h" #include "IrrCompileConfig.h" diff --git a/source/Irrlicht/CXMeshFileLoader.cpp b/source/Irrlicht/CXMeshFileLoader.cpp index db72b218..840773ef 100644 --- a/source/Irrlicht/CXMeshFileLoader.cpp +++ b/source/Irrlicht/CXMeshFileLoader.cpp @@ -408,7 +408,8 @@ bool CXMeshFileLoader::readFileIntoMemory(io::IReadFile* file) return false; } - Buffer = new c8[size]; + Buffer = new c8[size+1]; + Buffer[size] = 0x0; // null-terminate (thx @ sfan5) //! read all into memory if (file->read(Buffer, size) != static_cast(size)) diff --git a/source/Irrlicht/CZipReader.h b/source/Irrlicht/CZipReader.h index 80ba6440..af6be719 100644 --- a/source/Irrlicht/CZipReader.h +++ b/source/Irrlicht/CZipReader.h @@ -11,7 +11,6 @@ #include "IReadFile.h" #include "irrArray.h" -#include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" diff --git a/source/Irrlicht/EProfileIDs.h b/source/Irrlicht/EProfileIDs.h index ea62193c..eb48848a 100644 --- a/source/Irrlicht/EProfileIDs.h +++ b/source/Irrlicht/EProfileIDs.h @@ -5,11 +5,12 @@ #define E_PROFILE_IDS_H_INCLUDED__ #include "IrrCompileConfig.h" + +#ifdef _IRR_COMPILE_WITH_PROFILING_ #include "limits.h" namespace irr { -#ifdef _IRR_COMPILE_WITH_PROFILING_ enum EPROFILE_ID { // We use negative ID's to avoid clashing with user application id's. @@ -49,7 +50,8 @@ namespace irr EPID_ES2_SET_RENDERSTATE_TEXTURE, EPID_ES2_DRAW_SHADOW }; -#endif } // end namespace irr +#endif + #endif // E_PROFILE_IDS_H_INCLUDED__ diff --git a/source/Irrlicht/Irrlicht17.0.vcxproj b/source/Irrlicht/Irrlicht17.0.vcxproj index 465cdd31..5da6b92a 100644 --- a/source/Irrlicht/Irrlicht17.0.vcxproj +++ b/source/Irrlicht/Irrlicht17.0.vcxproj @@ -277,6 +277,7 @@ MultiThreadedDebugDLL + true _DEBUG;%(PreprocessorDefinitions) @@ -359,6 +360,7 @@ true + true NDEBUG;%(PreprocessorDefinitions) @@ -420,6 +422,7 @@ false Level3 4577 + true _DEBUG;%(PreprocessorDefinitions) @@ -490,6 +493,7 @@ false 4577 + true NDEBUG;%(PreprocessorDefinitions) @@ -559,6 +563,7 @@ false Level3 4577 + true _DEBUG;%(PreprocessorDefinitions) diff --git a/source/Irrlicht/SB3DStructs.h b/source/Irrlicht/SB3DStructs.h index 8f88a850..dfec8f8b 100644 --- a/source/Irrlicht/SB3DStructs.h +++ b/source/Irrlicht/SB3DStructs.h @@ -12,6 +12,7 @@ #define SB3DSTRUCTS_H #include "SMaterial.h" +#include "irrMath.h" namespace irr { namespace scene { @@ -27,6 +28,7 @@ struct SB3dChunk SB3dChunk(const SB3dChunkHeader& header, long sp) : length(header.size+8), startposition(sp) { + length = core::max_(length, 8); name[0]=header.name[0]; name[1]=header.name[1]; name[2]=header.name[2]; diff --git a/source/Irrlicht/irrXML.cpp b/source/Irrlicht/irrXML.cpp index 003b3b26..cc2a96b2 100644 --- a/source/Irrlicht/irrXML.cpp +++ b/source/Irrlicht/irrXML.cpp @@ -6,9 +6,6 @@ #ifdef _IRR_COMPILE_WITH_XML_ -#include "irrString.h" -#include "irrArray.h" -#include "fast_atof.h" #include "CXMLReaderImpl.h" namespace irr diff --git a/source/Irrlicht/os.h b/source/Irrlicht/os.h index ae524c8b..50873668 100644 --- a/source/Irrlicht/os.h +++ b/source/Irrlicht/os.h @@ -7,7 +7,6 @@ #include "IrrCompileConfig.h" // for endian check #include "irrTypes.h" -#include "irrString.h" #include "path.h" #include "ILogger.h" #include "ITimer.h" diff --git a/source/Irrlicht/utf8.cpp b/source/Irrlicht/utf8.cpp index 806296b5..d745fe85 100644 --- a/source/Irrlicht/utf8.cpp +++ b/source/Irrlicht/utf8.cpp @@ -3,7 +3,6 @@ // under the zlib license, reproduced below. #include "irrTypes.h" -#include "irrString.h" namespace irr { diff --git a/tests/tests-last-passed-at.txt b/tests/tests-last-passed-at.txt index 2fc244f3..683dc845 100644 --- a/tests/tests-last-passed-at.txt +++ b/tests/tests-last-passed-at.txt @@ -1,4 +1,4 @@ Tests finished. 72 tests of 72 passed. Compiled as DEBUG -Test suite pass at GMT Tue May 09 10:09:52 2023 +Test suite pass at GMT Fri Sep 22 15:57:32 2023