diff --git a/changes.txt b/changes.txt index 11e48479..7c7fb98b 100644 --- a/changes.txt +++ b/changes.txt @@ -1,27 +1,95 @@ -Changes in version 1.5 (... 2008) +Changes in version 1.5 (...12.2008) + + - Terrain heightmap and texture were flipped in order to draw them as expected (looking onto the terrain from high above will just look like the actual texture/heightmap). - Significant internal change to the way that FPS camera jump speed and collision response animator gravity interact. The behaviour is now much more realistic, but it will require you to adjust your jump speed and gravity. + - Skybox won't be culled anymore by nearplane or farplane. + + - BBoxes of animated meshes (skinned meshes) are updated again. + + - Lost devices (as found with D3D) are properly handled now. So the screen can be resized or minimized without crashing the app. + - Renamed IGUIElement::setRelativePosition(const core::rect& r) to IGUIElement::setRelativePositionProportional(), as it has radically different functionality from setRelativePosition(const core::rect& r) - Added IGUIElement::setRelativePosition(const core::position2di & position) to set a new position while retaining the existing height and width. + - Many Collada fixes. z_up coords are supported now, texture coords are properly loaded. Transparency is supported. + - Camera scene node rotation and target can now be bound together so that changing one automatically changes the other (as the FPS camera has always done). See ICameraSceneNode::bindTargetAndRotation() + - Removed the extra libpng files for OSX. OSX now also uses the default libpng. + + - Enhanced PCX support with some more color formats and write support. + + - Fixed LMTS problems with extra data in files. + - Removed VS6 .dsw / .dsp project files - VS6 is no longer supported. + - Particles can be scaled during animations. Particle scaling needs to happen in the emitter now, instead of in the Particle system scene node. Deprecation methods will guide the user. + - ISceneNode::setParent and addChild now updates node SceneManager pointers if the node was from another SceneManager. - Basic support for joystick input events on Windows, Linux, SDL and OSX. Tested with wired Logitech and Thrustmaster wired controllers and XBox 360 wireless controller ( http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver ) + - Fixed scaled octree nodes being incorrectly frustum culled. + + - FSAA under OpenGL and Win32 added. Now all hw drivers and platforms should support it. + + - Unlimited RTT fix for D3D systems. Depth buffers are now shared if possible, otherwise a new depth buffer is generated. In order to save VidMem one should create RTTs starting with the largest one. + + - Avoid RTTs with nonFBO-support under OpenGL which are larger than the screen. Since we rely on rendering into textures in this case we need to clamp the size by the screensize. + + - Fixes for getAbsoluteFilename under Linux in order to return a filename instead of en empty string in case the file doesn't exist. + + - Use absolute path names when creating / finding textures. + + - Font tool implementation for Linux with xft, by Neil Burlock. + + - Support for normals and UV coords from DeclData in .x files. + + - Modified line2d::intersectWith() to cover more cases. + + - Added IVideoDriver::drawPixel(). + + - Moved the window pointer from endScene to beginScene, as this is required for OpenGL support of external window pointers. + + - Fix for terrain culling. + + - Added minimize button to win32 window (if resizable) + - Major API change: RTTs are now created via addRenderTargetTexture instead of createRenderTargetTexture, which allows to retrieve them from the texture cache, but also changes the way of removing the RTTs, and especially one must not drop the pointer anymore. - WindowsCE-Bugfix + - disableFeature can be used to override feature support of the video driver. + + - draw2DImage can now also handle RTTs under OpenGL (which were flipped before). + + - Ogre mesh format fixes for proper texture support. + + - Added .obj mesh writer. + + - Some core::string constructors made explicit to avoid unintended conversions. Just add core::stringc() or core::stringw() around the old code to avoid warnings. + + - IdentityMatrix is now a properly defined global, with external visibility on all platforms. + + - Bugfix for context releases with glx 1.3 on error. + + - Removed constraints for sizes of the terrain scene node. + + - Support for 32bit indices in a special MeshBuffer class. + - isBetweenPoints return true now even for the begin and end points, i.e. line segments are now including their start and end. - Fix XML reader creation for non-existing files and invalid callbacks. + - Changed interpretation of MaterialTypeParam==0 in transparent materials. Now it's consistent with all other values, but one has to set the value to 0.5 to get the old behavior (slightly faster rendering, but no smooth borders) + + - Replaced transformBox by transformBoxEx in some internal methods to avoid major malfunction of the transformations. + + - Fix use of zip file inside zip files. + - Avoid loading textures which are not used by the mesh in b3d loader. - Added scaleTCoords methods to MeshManipulator diff --git a/include/IrrCompileConfig.h b/include/IrrCompileConfig.h index e7663636..395dcaf7 100644 --- a/include/IrrCompileConfig.h +++ b/include/IrrCompileConfig.h @@ -6,7 +6,7 @@ #define __IRR_COMPILE_CONFIG_H_INCLUDED__ //! Irrlicht SDK Version -#define IRRLICHT_SDK_VERSION "1.4.2" +#define IRRLICHT_SDK_VERSION "1.5.beta" #include // TODO: Although included elsewhere this is required at least for mingw @@ -301,7 +301,7 @@ precision will be lower but speed higher. currently X86 only #endif // Some cleanup and standard stuff - + #ifdef _IRR_WINDOWS_API_ // To build Irrlicht as a static library, you must define _IRR_STATIC_LIB_ in both the diff --git a/include/irrlicht.h b/include/irrlicht.h index f6e54369..5608b6ad 100644 --- a/include/irrlicht.h +++ b/include/irrlicht.h @@ -142,7 +142,7 @@ #include "SMeshBufferTangents.h" #include "SViewFrustum.h" -/*! \mainpage Irrlicht Engine 1.4.2 API documentation +/*! \mainpage Irrlicht Engine 1.5.beta API documentation * *
* diff --git a/source/Irrlicht/CAttributeImpl.h b/source/Irrlicht/CAttributeImpl.h index 76325344..9654e83e 100644 --- a/source/Irrlicht/CAttributeImpl.h +++ b/source/Irrlicht/CAttributeImpl.h @@ -613,7 +613,7 @@ public: ret.pointB.Y = Count > 4 ? ValueF[4] : 0.0f; ret.pointB.Z = Count > 5 ? ValueF[5] : 0.0f; ret.pointC.X = Count > 6 ? ValueF[6] : 0.0f; - ret.pointC.X = Count > 7 ? ValueF[7] : 0.0f; + ret.pointC.Y = Count > 7 ? ValueF[7] : 0.0f; ret.pointC.Z = Count > 8 ? ValueF[8] : 0.0f; } else @@ -625,7 +625,7 @@ public: ret.pointB.Y = Count > 4 ? (f32)ValueI[4] : 0.0f; ret.pointB.Z = Count > 5 ? (f32)ValueI[5] : 0.0f; ret.pointC.X = Count > 6 ? (f32)ValueI[6] : 0.0f; - ret.pointC.X = Count > 7 ? (f32)ValueI[7] : 0.0f; + ret.pointC.Y = Count > 7 ? (f32)ValueI[7] : 0.0f; ret.pointC.Z = Count > 8 ? (f32)ValueI[8] : 0.0f; } diff --git a/source/Irrlicht/CD3D9Driver.cpp b/source/Irrlicht/CD3D9Driver.cpp index 875a23ae..db81c0d3 100644 --- a/source/Irrlicht/CD3D9Driver.cpp +++ b/source/Irrlicht/CD3D9Driver.cpp @@ -2750,10 +2750,8 @@ void CD3D9Driver::checkDepthBuffer(ITexture* tex) !queryFeature(EVDF_TEXTURE_NPOT), !queryFeature(EVDF_TEXTURE_NSQUARE), true); SDepthSurface* depth=0; - core::dimension2di destSize=DepthBuffers[0]->Size; - if ((destSize.Width>=optSize.Width) && (destSize.Height>=optSize.Height)) - depth=DepthBuffers[0]; - for (u32 i=1; iSize.Width>=optSize.Width) && (DepthBuffers[i]->Size.Height>=optSize.Height)) diff --git a/source/Irrlicht/CFileSystem.cpp b/source/Irrlicht/CFileSystem.cpp index 290757f7..52899db6 100644 --- a/source/Irrlicht/CFileSystem.cpp +++ b/source/Irrlicht/CFileSystem.cpp @@ -188,9 +188,6 @@ const c8* CFileSystem::getWorkingDirectory() //! Changes the current Working Directory to the given string. -//! The string is operating system dependent. Under Windows it will look -//! like this: "drive:\directory\sudirectory\" -//! \return Returns true if successful, otherwise false. bool CFileSystem::changeWorkingDirectoryTo(const c8* newDirectory) { bool success=false; @@ -211,15 +208,29 @@ core::stringc CFileSystem::getAbsolutePath(const core::stringc& filename) const #ifdef _IRR_WINDOWS_API_ #if !defined ( _WIN32_WCE ) - c8 fpath[_MAX_PATH]; - p = _fullpath( fpath, filename.c_str(), _MAX_PATH); + c8 fpath[_MAX_PATH]; + p = _fullpath( fpath, filename.c_str(), _MAX_PATH); #endif #elif (defined(_IRR_POSIX_API_) || defined(_IRR_OSX_PLATFORM_)) c8 fpath[4096]; + fpath[0]=0; p = realpath(filename.c_str(), fpath); if (!p) - return filename; + { + // content in fpath is undefined at this point + if ('0'==fpath[0]) // seems like fpath wasn't altered + { + // at least remove a ./ prefix + if ('.'==filename[0] && '/'==filename[1]) + return filename.subString(2, filename.size()-2); + else + return filename; + } + else + return core::stringc(fpath); + } + #endif return core::stringc(p); diff --git a/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.cpp b/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.cpp index 8dba9425..8677e02f 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.cpp +++ b/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.cpp @@ -22,10 +22,10 @@ CSceneNodeAnimatorCollisionResponse::CSceneNodeAnimatorCollisionResponse( const core::vector3df& ellipsoidTranslation, f32 slidingSpeed) : Radius(ellipsoidRadius), Gravity(gravityPerSecond), Translation(ellipsoidTranslation), - World(world), Object(object), SceneManager(scenemanager), FallingVelocity(0.f), - SlidingSpeed(slidingSpeed), Falling(false), IsCamera(false), AnimateCameraTarget(true) + World(world), Object(object), SceneManager(scenemanager), LastTime(0), + SlidingSpeed(slidingSpeed), Falling(false), IsCamera(false), + AnimateCameraTarget(true) { - #ifdef _DEBUG setDebugName("CSceneNodeAnimatorCollisionResponse"); #endif @@ -37,7 +37,6 @@ CSceneNodeAnimatorCollisionResponse::CSceneNodeAnimatorCollisionResponse( } - //! destructor CSceneNodeAnimatorCollisionResponse::~CSceneNodeAnimatorCollisionResponse() { @@ -64,6 +63,7 @@ void CSceneNodeAnimatorCollisionResponse::setEllipsoidRadius( Radius = radius; } + //! Returns the radius of the ellipsoid with wich the collision detection and //! response is done. core::vector3df CSceneNodeAnimatorCollisionResponse::getEllipsoidRadius() const @@ -85,6 +85,7 @@ core::vector3df CSceneNodeAnimatorCollisionResponse::getGravity() const return Gravity; } + //! 'Jump' the animator, by adding a jump speed opposite to its gravity void CSceneNodeAnimatorCollisionResponse::jump(f32 jumpSpeed) { @@ -100,7 +101,6 @@ void CSceneNodeAnimatorCollisionResponse::setEllipsoidTranslation(const core::ve } - //! Returns the translation of the ellipsoid for collision detection. core::vector3df CSceneNodeAnimatorCollisionResponse::getEllipsoidTranslation() const { @@ -126,7 +126,6 @@ void CSceneNodeAnimatorCollisionResponse::setWorld(ITriangleSelector* newWorld) } - //! Returns the current triangle selector containing all triangles for //! collision detection. ITriangleSelector* CSceneNodeAnimatorCollisionResponse::getWorld() const @@ -135,7 +134,6 @@ ITriangleSelector* CSceneNodeAnimatorCollisionResponse::getWorld() const } - void CSceneNodeAnimatorCollisionResponse::animateNode(ISceneNode* node, u32 timeMs) { if (node != Object) @@ -196,6 +194,7 @@ void CSceneNodeAnimatorCollisionResponse::animateNode(ISceneNode* node, u32 time LastPosition = Object->getPosition(); } + void CSceneNodeAnimatorCollisionResponse::setNode(ISceneNode* node) { Object = node; @@ -209,6 +208,7 @@ void CSceneNodeAnimatorCollisionResponse::setNode(ISceneNode* node) LastTime = os::Timer::getTime(); } + //! Writes attributes of the scene node animator. void CSceneNodeAnimatorCollisionResponse::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const { @@ -218,6 +218,7 @@ void CSceneNodeAnimatorCollisionResponse::serializeAttributes(io::IAttributes* o out->addBool("AnimateCameraTarget", AnimateCameraTarget); } + //! Reads attributes of the scene node animator. void CSceneNodeAnimatorCollisionResponse::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) { @@ -227,6 +228,7 @@ void CSceneNodeAnimatorCollisionResponse::deserializeAttributes(io::IAttributes* AnimateCameraTarget = in->getAttributeAsBool("AnimateCameraTarget"); } + ISceneNodeAnimator* CSceneNodeAnimatorCollisionResponse::createClone(ISceneNode* node, ISceneManager* newManager) { if (!newManager) newManager = SceneManager; @@ -238,6 +240,7 @@ ISceneNodeAnimator* CSceneNodeAnimatorCollisionResponse::createClone(ISceneNode* return newAnimator; } + } // end namespace scene } // end namespace irr diff --git a/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.h b/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.h index 348eae20..6058be1c 100644 --- a/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.h +++ b/source/Irrlicht/CSceneNodeAnimatorCollisionResponse.h @@ -93,11 +93,13 @@ namespace scene void setNode(ISceneNode* node); - core::vector3df LastPosition; core::vector3df Radius; core::vector3df Gravity; - core::vector3df FallingVelocity; // In the direction of Gravity. core::vector3df Translation; + core::vector3df FallingVelocity; // In the direction of Gravity. + + core::vector3df LastPosition; + core::triangle3df RefTriangle; ITriangleSelector* World; ISceneNode* Object; @@ -107,8 +109,6 @@ namespace scene bool Falling; bool IsCamera; bool AnimateCameraTarget; - - core::triangle3df RefTriangle; }; } // end namespace scene diff --git a/source/Irrlicht/Makefile b/source/Irrlicht/Makefile index b5423345..557838fa 100644 --- a/source/Irrlicht/Makefile +++ b/source/Irrlicht/Makefile @@ -1,5 +1,5 @@ -VERSION = 1.4.2 -# Irrlicht Engine 1.4.2 +VERSION = 1.5.beta +# Irrlicht Engine 1.5.beta # Makefile for Linux # # To use, just run: