Merge trunk revisions 4630 to 4685:

- Makefile for the new IrrFontTool links now correctly to libfontconfig
- Bugfix: getFont for xml-fonts now also works for fonts inside archives (thx @Neirdan for bugreport)
- Add function mergeFilename + tests
- Add ISceneNodeAnimator::setStartTime/getStartTime to allow resetting movement animators. 
- Get Irrlicht to compile with IRRLICHT_FAST_MATH on Linux (out-define code which was written for VS and remove #warn which is not a preprocessor command recognized by GCC).
- Make key-release events also show the correct Char value on Windows (thx @zerochen for report+fix here: http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=49499)
- Fix input with numlock-keys on Linux. Thx @zerochen for report and help with bugfixing.
- Linux version of makedocumentation.sh now works like the DOS version and creates html docs.
- Add some error checking in test.
- Indentation


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4686 dfc29bdd-3216-0410-991c-e03cc46cb475
master
cutealien 2014-02-13 13:01:14 +00:00
parent 5b63d4ef81
commit 37b154102b
21 changed files with 249 additions and 55 deletions

View File

@ -1,8 +1,14 @@
--------------------------
Changes in 1.9 (not yet released)
- Removed VS6 .dsw / .dsp project files - VS6 is no longer supported.
Changes in ogl-es (not yet released - will be merged with trunk at some point)
- Added support for PVR textures. Loader offer support for compressed DXT1-5, PVRTC/PVRTC-II, ETC1/ETC2 texture formats.
--------------------------
Changes in 1.9 (not yet released)
- Bugfix: getFont for xml-fonts now also works for fonts inside archives (thx @Neirdan for bugreport)
- Added function irr::core::mergeFilename
- Add ISceneNodeAnimator::setStartTime/getStartTime to allow resetting movement animators.
- Improve speed for finalizing skinned meshes (removal of unnecessary frames after loading) (thx @ichtyander for the testmodel)
- Collada loader now instantiates camera nodes which had been ignore so far (thx @NemoStein for the test .dae)
- line2d::intersectWith has a new parameter to allow ignoring intersections with coincident lines
@ -31,6 +37,11 @@ Changes in 1.9 (not yet released)
- Add IColladaMeshWriter::findGeometryNameForNode
- Add getters IGUIButton::isDrawBorderEnabled and IGUIButton::isDrawBackgroundEnabled
--------------------------
Changes in 1.8.2
- Makefile for the new IrrFontTool links now correctly to libfontconfig
--------------------------
Changes in 1.8.1 (17.11.2013)

60
doc/release_checklist.txt Normal file
View File

@ -0,0 +1,60 @@
Checklist for Irrlicht developers for doing releases.
- PRE-BUILD TESTS:
- - Run tests in the tests folder
- - Compile and run all examples for testing (preferably on all platforms,
compilers, settings ... until you are certain enough stuff works sufficiently).
Ask for help for platforms which you don't own.
- - Compile the tools on all platforms you have. Note that some tools are in the buildall-examples VS project files on Windows, but on Linux
command line you have to compile them individually.
- VERSION UPDATES:
- - check IRRLICHT_SDK_VERSION (in IrrCompileConfig.h)
- - check version number in the Makefile
- - update readme.txt (version number, supported compilers)
- - Add new release information (date+version-number) in changes.txt
- - go through folders if other .txt files still make sense (things change and updating those files tends to be forgotten)
- BUILDING THE RELEASE
- - run a clean build for buildAllExamples in the examples folder with the
target compiler for 32-bit and for release (preferably oldest supported VS
compiler, otherwise oldest you have still installed)
- - when possible compile the dll for MinGW on Windows (in release and with -s for smaller size)
- - when possible compile the dll for 64 bit (again with Visual Studio and release)
- - run makedocumentation in scripts\doc\irrlicht
- - create a target directory, like irrlicht-1.8.1 for example
- - svn export to the target directory
- - copy the subfolders of doctemp into the doc folder of the target directory
- - copy all .exe files (except test.exe) from bin\Win32-VisualStudio (.pdb's are not necessary)
- - copy Irrlicht.dll from bin\Win32-visualstudio
- - copy the files in lib\Win32-visualstudio
- - copy Irrlicht.dll from bin\Win64-VisualStudio
- - copy the files in lib\Win64-visualstudio
- - copy Irrlicht.dll from bin\Win32-gcc
- - copy the files in lib\Win32-gcc
- - remove the tests folder
- - remove scripts folder (if the release comes with docs, if you do a release
without docs for smaller filesizes then the script folder has to stay in).
- - create a zip file
- - figure out how to fix unix access right for shell-scripts in the zip file (my
trick so far is: unzip in Linux, set +x for all .sh files, zip again)
RELEASING:
- - upload the zip-file somewhere, then download it again on all platforms and do
another quick test with that file (do examples still run, can you compile)
- - give the link to the zip out on the mailinglist for others to look at
- - Upload new documentation (the content of doc/html) to: web.sourceforge.net
(sftp protocol, user and passwd are your sourceforge account, the folder
might not be shown - but you can still cd into it!):
/home/project-web/i/ir/irrlicht/htdocs
Best create first a folder with a new name, copy stuff in there, test (just
check the website), rename old folder and give new folder the "docu" name.
Then you can delete the old folder if you want.
- - update changes.txt (also in /home/project-web/i/ir/irrlicht/htdocs)
- - upload the zip by logging in to sourceforge and using the "Files" menu (needs
admin privileges and it's the 'Files' menu between 'Summary' and 'Reviews').
The target is in one of the Irrlicht SDK subfolders. Then click the "i" beside
the file and "select all" to make it the active download.
- - write a forum post, tell everyone in facebook, reddit, your friends...
- - login to wordpress at http://irrlicht.sourceforge.net/wp-login.php, update the
downloads section and write a release post.

View File

@ -68,6 +68,24 @@ namespace scene
{
return false;
}
//! Reset a time-based movement by changing the starttime.
/** By default most animators start on object creation.
Commonly you will use irr::ITimer::getTime().
This value is ignored by animators which don't work with a starttime.
CSceneNodeAnimatorRotation currently overwrites this value constantly (might be changed in the future).
*/
virtual void setStartTime(u32 time)
{
}
//! Get the starttime.
/** This will return 0 for by animators which don't work with a starttime. */
virtual irr::u32 getStartTime() const
{
return 0;
}
};

View File

@ -137,7 +137,7 @@ inline s32 isInSameDirectory ( const io::path& path, const io::path& file )
return subB - subA;
}
// splits a path into components
//! splits a path into components
static inline void splitFilename(const io::path &name, io::path* path=0,
io::path* filename=0, io::path* extension=0, bool make_lower=false)
{
@ -171,6 +171,29 @@ static inline void splitFilename(const io::path &name, io::path* path=0,
*filename = name.subString ( 0, extpos, make_lower );
}
//! create a filename from components
static inline io::path mergeFilename(const io::path& path, const io::path& filename, const io::path& extension = "")
{
io::path result(path);
if ( !result.empty() )
{
fschar_t last = result.lastChar();
if ( last != _IRR_TEXT('/') && last != _IRR_TEXT('\\') )
result += _IRR_TEXT('/');
}
if ( !filename.empty() )
result += filename;
if ( !extension.empty() )
{
if ( !result.empty() && extension[0] != _IRR_TEXT('.') )
result += _IRR_TEXT('.');
result += extension;
}
return result;
}
//! some standard function ( to remove dependencies )
#undef isdigit

View File

@ -455,15 +455,13 @@ namespace core
{
#ifdef IRRLICHT_FAST_MATH
return;
#ifdef feclearexcept
#ifdef feclearexcept
feclearexcept(FE_ALL_EXCEPT);
#elif defined(_MSC_VER)
#elif defined(_MSC_VER)
__asm fnclex;
#elif defined(__GNUC__) && defined(__x86__)
#elif defined(__GNUC__) && defined(__x86__)
__asm__ __volatile__ ("fclex \n\t");
#else
# warn clearFPUException not supported.
#endif
#endif
#endif
}
@ -540,6 +538,7 @@ namespace core
// bi ts of the mantissa
// One Newtown-Raphson Iteration:
// f(i+1) = 2 * rcpss(f) - f * rcpss(f) * rcpss(f)
#if defined(_MSC_VER)
f32 rec;
__asm rcpss xmm0, f // xmm0 = rcpss(f)
__asm movss xmm1, f // xmm1 = f
@ -550,8 +549,9 @@ namespace core
// - f * rcpss(f) * rcpss(f)
__asm movss rec, xmm0 // return xmm0
return rec;
#else // no support yet for other compilers
return 1.f / f;
#endif
//! i do not divide through 0.. (fpu expection)
// instead set f to a high value to get a return value near zero..
// -1000000000000.f.. is use minus to stay negative..
@ -580,6 +580,7 @@ namespace core
// bi ts of the mantissa
// One Newtown-Raphson Iteration:
// f(i+1) = 2 * rcpss(f) - f * rcpss(f) * rcpss(f)
#if defined(_MSC_VER)
f32 rec;
__asm rcpss xmm0, f // xmm0 = rcpss(f)
__asm movss xmm1, f // xmm1 = f
@ -590,7 +591,9 @@ namespace core
// - f * rcpss(f) * rcpss(f)
__asm movss rec, xmm0 // return xmm0
return rec;
#else // no support yet for other compilers
return 1.f / f;
#endif
/*
// SSE reciprocal estimate, accurate to 12 significant bits of
@ -633,7 +636,6 @@ namespace core
: "st"
);
#else
# warn IRRLICHT_FAST_MATH not supported.
return (s32) floorf ( x );
#endif
return t;
@ -666,7 +668,6 @@ namespace core
: "st"
);
#else
# warn IRRLICHT_FAST_MATH not supported.
return (s32) ceilf ( x );
#endif
return t;
@ -696,7 +697,6 @@ namespace core
: "st"
);
#else
# warn IRRLICHT_FAST_MATH not supported.
return (s32) round_(x);
#endif
return t;

View File

@ -1,10 +1,11 @@
rm tut.txt || true;
mkdir ../../../doctemp
mkdir ../../../doctemp/html
cp doxygen.css irrlicht.png logobig.png ../../../doctemp/html
for i in ../../../examples/[012]*/main.cpp; do
sed -f tutorials.sed $i >>tut.txt;
done
doxygen doxygen-pdf.cfg
cp doxygen.css irrlicht.png logobig.png ../../../doctemp/html
doxygen doxygen.cfg

View File

@ -1448,19 +1448,16 @@ IGUIFont* CGUIEnvironment::getFont(const io::path& filename)
{
CGUIFont* font = new CGUIFont(this, filename);
ifont = (IGUIFont*)font;
// change working directory, for loading textures
io::path workingDir = FileSystem->getWorkingDirectory();
FileSystem->changeWorkingDirectoryTo(FileSystem->getFileDir(f.NamedPath.getPath()));
// load the font
if (!font->load(xml))
io::path directory;
core::splitFilename(filename, &directory);
if (!font->load(xml, directory))
{
font->drop();
font = 0;
ifont = 0;
}
// change working dir back again
FileSystem->changeWorkingDirectoryTo( workingDir );
}
else if (t==EGFT_VECTOR)
{

View File

@ -6,6 +6,7 @@
#ifdef _IRR_COMPILE_WITH_GUI_
#include "os.h"
#include "coreutil.h"
#include "IGUIEnvironment.h"
#include "IXMLReader.h"
#include "IReadFile.h"
@ -63,7 +64,7 @@ CGUIFont::~CGUIFont()
//! loads a font file from xml
bool CGUIFont::load(io::IXMLReader* xml)
bool CGUIFont::load(io::IXMLReader* xml, const io::path& directory)
{
if (!SpriteBank)
return false;
@ -89,7 +90,8 @@ bool CGUIFont::load(io::IXMLReader* xml)
Driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
// load texture
SpriteBank->setTexture(i, Driver->getTexture(fn));
io::path textureFullName = core::mergeFilename(directory, fn);
SpriteBank->setTexture(i, Driver->getTexture(textureFullName));
// set previous mip-map+filter state
Driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, mipmap);

View File

@ -46,7 +46,8 @@ public:
bool load(io::IReadFile* file);
//! loads a font from an XML file
bool load(io::IXMLReader* xml);
//\param directory Directory in which the bitmaps can be found
bool load(io::IXMLReader* xml, const io::path& directory);
//! draws an text and clips it to the specified rectangle if wanted
virtual void draw(const core::stringw& text, const core::rect<s32>& position,

View File

@ -836,7 +836,7 @@ bool CIrrDeviceLinux::run()
irrevent.KeyInput.Control = (event.xkey.state & ControlMask) != 0;
irrevent.KeyInput.Shift = (event.xkey.state & ShiftMask) != 0;
event.xkey.state = 0; // ignore shift-ctrl states for figuring out the key
event.xkey.state &= ~(ControlMask|ShiftMask); // ignore shift-ctrl states for figuring out the key
XLookupString(&event.xkey, buf, sizeof(buf), &mp.X11Key, NULL);
const s32 idx = KeyMap.binary_search(mp);
if (idx != -1)

View File

@ -824,7 +824,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
// Handle unicode and deadkeys in a way that works since Windows 95 and nt4.0
// Using ToUnicode instead would be shorter, but would to my knowledge not run on 95 and 98.
WORD keyChars[2];
UINT scanCode = HIWORD(lParam);
UINT scanCode = HIWORD(lParam) & 0x7FFF;
int conversionResult = ToAsciiEx(wParam,scanCode,allKeys,keyChars,0,KEYBOARD_INPUT_HKL);
if (conversionResult == 1)
{

View File

@ -74,7 +74,6 @@ void CSceneNodeAnimatorFlyCircle::deserializeAttributes(io::IAttributes* in, io:
Radius = in->getAttributeAsFloat("Radius");
Speed = in->getAttributeAsFloat("Speed");
Direction = in->getAttributeAsVector3d("Direction");
StartTime = 0;
if (Direction.equals(core::vector3df(0,0,0)))
Direction.set(0,1,0); // irrlicht 1.1 backwards compatibility

View File

@ -38,6 +38,18 @@ namespace scene
(IReferenceCounted::drop()) the returned pointer after calling
this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Reset a time-based movement by changing the starttime.
virtual void setStartTime(u32 time) _IRR_OVERRIDE_
{
StartTime = time;
}
//! Get the starttime.
virtual irr::u32 getStartTime() const _IRR_OVERRIDE_
{
return StartTime;
}
private:
// do some initial calculations

View File

@ -37,6 +37,19 @@ namespace scene
/** Please note that you will have to drop
(IReferenceCounted::drop()) the returned pointer after calling this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Reset a time-based movement by changing the starttime.
virtual void setStartTime(u32 time) _IRR_OVERRIDE_
{
StartTime = time;
}
//! Get the starttime.
virtual irr::u32 getStartTime() const _IRR_OVERRIDE_
{
return StartTime;
}
private:
@ -57,4 +70,3 @@ namespace scene
} // end namespace irr
#endif

View File

@ -41,6 +41,18 @@ namespace scene
(IReferenceCounted::drop()) the returned pointer after calling
this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Reset a time-based movement by changing the starttime.
virtual void setStartTime(u32 time) _IRR_OVERRIDE_
{
StartTime = time;
}
//! Get the starttime.
virtual irr::u32 getStartTime() const _IRR_OVERRIDE_
{
return StartTime;
}
protected:

View File

@ -34,6 +34,18 @@ namespace scene
/** Please note that you will have to drop
(IReferenceCounted::drop()) the returned pointer after calling this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Reset a time-based movement by changing the starttime.
virtual void setStartTime(u32 time) _IRR_OVERRIDE_
{
StartTime = time;
}
//! Get the starttime.
virtual irr::u32 getStartTime() const _IRR_OVERRIDE_
{
return StartTime;
}
private:

View File

@ -41,6 +41,18 @@ namespace scene
this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Reset a time-based movement by changing the starttime.
virtual void setStartTime(u32 time) _IRR_OVERRIDE_
{
StartTime = time;
}
//! Get the starttime.
virtual irr::u32 getStartTime() const _IRR_OVERRIDE_
{
return StartTime;
}
private:
void clearTextures();

View File

@ -13,16 +13,34 @@ bool testImageCreation()
if (device == 0)
return true; // could not create selected driver.
bool result = true;
video::IVideoDriver* driver = device->getVideoDriver();
video::ITexture* tex=driver->getTexture("../media/water.jpg");
video::IImage* img1=driver->createImage(tex, core::vector2di(0,0), core::dimension2du(32,32));
video::ITexture* tex1=driver->addTexture("new1", img1);
img1->drop();
img1=0;
video::IImage* img2=driver->createImage(tex, core::vector2di(0,0), tex->getSize());
video::ITexture* tex2=driver->addTexture("new2", img2);
img2->drop();
img2 = 0;
video::ITexture* tex1=0;
video::ITexture* tex2=0;
if (!tex)
result=false;
else
{
video::IImage* img1=driver->createImage(tex, core::vector2di(0,0), core::dimension2du(32,32));
if (!img1)
result=false;
else
{
tex1=driver->addTexture("new1", img1);
img1->drop();
img1=0;
}
video::IImage* img2=driver->createImage(tex, core::vector2di(0,0), tex->getSize());
if (!img2)
result=false;
else
{
tex2=driver->addTexture("new2", img2);
img2->drop();
img2 = 0;
}
}
driver->beginScene(true, true, video::SColor(255,255,0,255));//Backbuffer background is pink
@ -32,7 +50,7 @@ bool testImageCreation()
driver->endScene();
bool result = takeScreenshotAndCompareAgainstReference(driver, "-createImage.png");
result = takeScreenshotAndCompareAgainstReference(driver, "-createImage.png");
device->closeDevice();
device->run();
@ -73,3 +91,4 @@ bool createImage()
result &= testImageFormats();
return result;
}

View File

@ -49,7 +49,7 @@ int main(int argumentCount, char * arguments[])
// Note that to interactively debug a test, you will generally want to move it
// (temporarily) to the beginning of the list, since each test runs in its own
// process.
TEST(disambiguateTextures); // Normally you should run this first, since it validates the working directory.
// Now the simple tests without device
TEST(testIrrArray);
@ -84,6 +84,7 @@ int main(int argumentCount, char * arguments[])
TEST(sceneNodeAnimator);
TEST(meshLoaders);
TEST(testTimer);
TEST(testCoreutil);
// software drivers only
TEST(softwareDevice);
TEST(b3dAnimation);

View File

@ -11,13 +11,13 @@ using namespace video;
/** Tests that the geometry creator does what it says it does. */
bool testGeometryCreator(void)
{
IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO,
core::dimension2du(160,120), 32);
if (!device)
return false;
IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO,
core::dimension2du(160,120), 32);
if (!device)
return false;
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
(void)smgr->addCameraSceneNode(0, vector3df(0, 0, -50));
const IGeometryCreator * geom = smgr->getGeometryCreator();
@ -94,9 +94,10 @@ bool testGeometryCreator(void)
video::IImage* colorMapImage = driver->createImageFromFile("../media/terrain-texture.jpg");
video::IImage* heightMapImage = driver->createImageFromFile("../media/terrain-heightmap.bmp");
scene::IAnimatedMesh* terrain = smgr->addTerrainMesh("TerrainMeshName", colorMapImage, heightMapImage,
core::dimension2d<f32>(40, 40), // size of a pixel
8*40); // maximum height
scene::IAnimatedMesh* terrain = smgr->addTerrainMesh("TerrainMeshName",
colorMapImage, heightMapImage,
core::dimension2d<f32>(40, 40), // size of a pixel
8*40); // maximum height
colorMapImage->drop();
colorMapImage = 0;
heightMapImage->drop();
@ -119,7 +120,8 @@ bool testGeometryCreator(void)
device->closeDevice();
device->run();
device->drop();
device->drop();
return result;
return result;
}

View File

@ -17,7 +17,7 @@ LIBSELECT=64
endif
# target specific settings
all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -lXft
all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -lXft -lfontconfig
all_linux clean_linux: SYSTEM=Linux
all_win32: LDFLAGS = -L../../../lib/Win32-gcc -lIrrlicht -lgdi32 -lopengl32 -lglu32 -lm
all_win32 clean_win32: SYSTEM=Win32-gcc