Merging r6468 through r6476 from trunk to ogl-es branch

Note: Not yet using latest changes to IMaterialRendererServices in ES2 driver


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6477 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2023-04-27 19:51:22 +00:00
parent dd16d578d8
commit 23ebdbe978
22 changed files with 195 additions and 124 deletions

View File

@ -426,7 +426,7 @@ Changes in 1.8.5 (1st November 2021, svn [r6263])
Additional check also added in createAndOpenFile to early out on empty names. Additional check also added in createAndOpenFile to early out on empty names.
- Fix bug in cursor positions when compiled with newer Windows SDK's (v110 in VS2012) and running on Systems >= Windows Vista in windowed mode. - Fix bug in cursor positions when compiled with newer Windows SDK's (v110 in VS2012) and running on Systems >= Windows Vista in windowed mode.
Thanks @Mustapha Tachouct for the bugreport and patch proposal. Also thanks @BakeMyCake for an earlier report. Thanks @Mustapha Tachouct for the bugreport and patch proposal. Also thanks @BakeMyCake for an earlier report.
- IOSOperator::getSysteMemory() no longer returns incorrect values with >2GB. Thanks @Eduline - human development for report and patch. - IOSOperator::getSystemMemory() no longer returns incorrect values with >2GB. Thanks @Eduline - human development for report and patch.
- Increase KEY_KEY_CODES_COUNT to fix problem with laptop keyboards which return the keycode 0xff for the function key. Thx @Klokancz for bugreport and patch. - Increase KEY_KEY_CODES_COUNT to fix problem with laptop keyboards which return the keycode 0xff for the function key. Thx @Klokancz for bugreport and patch.
- Fix bug when calling activateJoysticks on windows several times. It had appened joystick information instead of replacing it, thereby increasing joystick number on each call. - Fix bug when calling activateJoysticks on windows several times. It had appened joystick information instead of replacing it, thereby increasing joystick number on each call.
Only happened compiling with _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ (which is the default). Linux and SDL implementation not affected. Only happened compiling with _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ (which is the default). Linux and SDL implementation not affected.
@ -452,7 +452,7 @@ Changes in 1.8.4 (9th July 2016, svn r5321)
- Get rid of some misleading-indentation warnings in gcc6 - Get rid of some misleading-indentation warnings in gcc6
- Fix serialization of the InputReceiverEnabled flag in CCameraSceneNode - Fix serialization of the InputReceiverEnabled flag in CCameraSceneNode
- Fix pasting text from X11 applications to Irrlicht. Thanks @est31 for the patch. - Fix pasting text from X11 applications to Irrlicht. Thanks @est31 for the patch.
- Tests give now a warning when stabilizing screenshots failed. Aslo trying more often now (a hack as taking screenshots otherwise fails often in windowed mode on some systems). - Tests give now a warning when stabilizing screenshots failed. Also trying more often now (a hack as taking screenshots otherwise fails often in windowed mode on some systems).
-------------------------- --------------------------
Changes in 1.8.3 (13.9.2015) Changes in 1.8.3 (13.9.2015)
@ -522,7 +522,7 @@ Changes in 1.8 (7.11.2012)
- user clipplanes fixed - user clipplanes fixed
- Skip rendering of lines, points, and polygons, as these lead to crahses due to wrong access to the vertex lists. A fix would need major rewrite of the vertex cache, or at least some other render methods. - Skip rendering of lines, points, and polygons, as these lead to crashes due to wrong access to the vertex lists. A fix would need major rewrite of the vertex cache, or at least some other render methods.
- Add mipmap generation for makeColorKeyTexture - Add mipmap generation for makeColorKeyTexture
@ -539,7 +539,7 @@ Changes in 1.8 (7.11.2012)
- Colladawriter now writing matrices for node transformations as old solution did not work with CDummyTransformationSceneNode's. - Colladawriter now writing matrices for node transformations as old solution did not work with CDummyTransformationSceneNode's.
- Colladawriter no longer create an extra node for the scenemanger as <visual_scene> has that job in Collada. - Colladawriter no longer create an extra node for the scenemanager as <visual_scene> has that job in Collada.
- Colladwriter no longer makes all Scenenodes children of ambient-light as that can be parallel on the same layer instead. - Colladwriter no longer makes all Scenenodes children of ambient-light as that can be parallel on the same layer instead.
@ -553,7 +553,7 @@ Changes in 1.8 (7.11.2012)
- Properly destroy OpenGL resources on linux (thx @curaga for the patch) - Properly destroy OpenGL resources on linux (thx @curaga for the patch)
- Fix diplay bux in the attribute-panel of the GUIEditor. Fixes bug 3517314 (thx @Darkcoder for reporting). - Fix display bugs in the attribute-panel of the GUIEditor. Fixes bug 3517314 (thx @Darkcoder for reporting).
- Allow caching cursor position on X11 to work around slow XQueryPointer calls (thx @Hendu for reporting+patch proposal) - Allow caching cursor position on X11 to work around slow XQueryPointer calls (thx @Hendu for reporting+patch proposal)
@ -748,7 +748,7 @@ Changes in 1.8 (7.11.2012)
- Improved 2d render settings and caching - Improved 2d render settings and caching
- Initial suppport for sRGB render functions - Initial support for sRGB render functions
- Improved terrain scene node rendering - Improved terrain scene node rendering
@ -800,7 +800,7 @@ Changes in 1.8 (7.11.2012)
- Particle sphere emitter rand values fixed - Particle sphere emitter rand values fixed
- Support Unicode SHY dynamic hypen in word wrap - Support Unicode SHY dynamic hyphen in word wrap
- Fix OBJ reader sometimes running over EOF - Fix OBJ reader sometimes running over EOF
@ -812,7 +812,7 @@ Changes in 1.8 (7.11.2012)
- Added the ability to open an archive from an IReadFile*, added a FileToHeader tool with instructions of how to make a portable app that consists of a single executable file. - Added the ability to open an archive from an IReadFile*, added a FileToHeader tool with instructions of how to make a portable app that consists of a single executable file.
- Added suppport for right-to-left (RTL) text, supplied by Auria from STK - Added support for right-to-left (RTL) text, supplied by Auria from STK
- Added ISceneManager::createSceneNodeAnimator to create animators by name - Added ISceneManager::createSceneNodeAnimator to create animators by name
@ -1393,7 +1393,7 @@ Changes in 1.7.1 (17.02.2010)
- mem leak in OBJ loader fixed - mem leak in OBJ loader fixed
- Removed some default parameters to reduce ambigious situations - Removed some default parameters to reduce ambiguous situations
--------------------------- ---------------------------
Changes in 1.7 (03.02.2010) Changes in 1.7 (03.02.2010)
@ -1632,7 +1632,7 @@ Changes in 1.6.1 (13.01.2010)
- Fix material handling in createMeshWith1TCoords - Fix material handling in createMeshWith1TCoords
- Fix another (OldValue == NewValue) before drop()/grap(), this time in CTextureAttribute::setTexture. - Fix another (OldValue == NewValue) before drop()/grab(), this time in CTextureAttribute::setTexture.
- Fix LIGHTMAP_LIGHTING for D3D drivers. - Fix LIGHTMAP_LIGHTING for D3D drivers.
@ -1812,7 +1812,7 @@ Changes in 1.6 (23.09.2009)
One Note: in OpenGL there is know difference between sphere_map and reflection layer One Note: in OpenGL there is know difference between sphere_map and reflection layer
both using GL_TEXTURE_GEN_MODE GL_SPHERE_MAP, whereas in d3d one time using camera_normal both using GL_TEXTURE_GEN_MODE GL_SPHERE_MAP, whereas in d3d one time using camera_normal
on sphere and reflection on refletcion_layer. on sphere and reflection on reflection_layer.
The visual difference is that on sphere map the "image is not moving" when you rotate the The visual difference is that on sphere map the "image is not moving" when you rotate the
viewer. For Burning i took the opengl visual. always moving viewer. For Burning i took the opengl visual. always moving
@ -2035,7 +2035,7 @@ Changes in 1.6 (23.09.2009)
- CSceneNodeAnimatorCollisionResponse has the same problem as CSceneNodeAnimatorFPS - CSceneNodeAnimatorCollisionResponse has the same problem as CSceneNodeAnimatorFPS
on first update: on first update:
Problem. you start setting the map. (setWorld). First update cames 4000 ms later. Problem. you start setting the map. (setWorld). First update comes 4000 ms later.
The Animator applies the missing force... big problem... The Animator applies the missing force... big problem...
changed to react on first update like camera. changed to react on first update like camera.
@ -2044,7 +2044,7 @@ Changes in 1.6 (23.09.2009)
-added #define OCTTREE_USE_HARDWARE in Octree.h -added #define OCTTREE_USE_HARDWARE in Octree.h
if defined octtree uses internally a derived scene::MeshBuffer which has if defined octree uses internally a derived scene::MeshBuffer which has
the possibility to use the Hardware Vertex Buffer for static vertices and the possibility to use the Hardware Vertex Buffer for static vertices and
dirty indices;-) dirty indices;-)
@ -2375,7 +2375,7 @@ Changes in version 1.5.1 (05.08.2009)
- Some virtuals are now overridden as expected. - Some virtuals are now overridden as expected.
- Incomplete FBOs are properly signalled now - Incomplete FBOs are properly signaled now
- Update to libpng 1.2.35, fixed issues on 64bit machines with system's libpng. - Update to libpng 1.2.35, fixed issues on 64bit machines with system's libpng.
@ -2407,7 +2407,7 @@ Changes in version 1.5.1 (05.08.2009)
- Fixed animator removal. - Fixed animator removal.
- Checnged collision checks for children of invisible elements to also be ignored (as they're actually invisible due to inheritance). - Changed collision checks for children of invisible elements to also be ignored (as they're actually invisible due to inheritance).
- Fix terrain to use 32bit only when necessary, make terrain use hw buffers. Heightmap loading and height calculation fixed. Visibility and LOD calculations updated. - Fix terrain to use 32bit only when necessary, make terrain use hw buffers. Heightmap loading and height calculation fixed. Visibility and LOD calculations updated.
@ -2526,7 +2526,7 @@ Changes in version 1.5 (15.12.2008)
- Enable use of other meshes for shadow mesh generation, can be used to speed up shadow generation and rendering for complex meshes. Patch based on a version by tonic. - Enable use of other meshes for shadow mesh generation, can be used to speed up shadow generation and rendering for complex meshes. Patch based on a version by tonic.
- Fixed usage of SIrrCreationParameters struct, which dind't have copy constructor and assignment operator anymore, since the Irrlicht version string was made const. - Fixed usage of SIrrCreationParameters struct, which didn't have copy constructor and assignment operator anymore, since the Irrlicht version string was made const.
- New glext.h (version 41) and glxext.h (version 20) supporting OpenGL 3.0 - New glext.h (version 41) and glxext.h (version 20) supporting OpenGL 3.0
@ -2615,7 +2615,7 @@ Changes in version 1.5 (15.12.2008)
- Scene node sorting uses squared distances now. - Scene node sorting uses squared distances now.
- Enhanced API for hte math functions. Many of them will now return a reference to *this for chained method invocations. - Enhanced API for the math functions. Many of them will now return a reference to *this for chained method invocations.
- prevent .x loader to load .xml files. - prevent .x loader to load .xml files.
@ -2700,12 +2700,12 @@ Changes in version 1.5 (15.12.2008)
- New method driver->getVendorInfo() to query information about the actual hardware driver. - New method driver->getVendorInfo() to query information about the actual hardware driver.
- Fixed somed CQuake3ShaderSceneNode problems. - Fixed some CQuake3ShaderSceneNode problems.
- Changed BurningsVideo internal Vertex Format. version changed to 0.39 - Changed BurningsVideo internal Vertex Format. version changed to 0.39
- SceneManager: - SceneManager:
Removed the seperate rendering states for quake3 Shader Scene Nodes. Removed the separate rendering states for quake3 Shader Scene Nodes.
Nodes are now solid or transparent. ( but still more states are needed ) Nodes are now solid or transparent. ( but still more states are needed )
- GUI: - GUI:
@ -2850,7 +2850,7 @@ Changes in version 1.4.1 (04 Jun 2008)
------------------------------------------- -------------------------------------------
Changes in version 1.4 (30 Nov 2007) Changes in version 1.4 (30 Nov 2007)
- Major API change: All material properties which are available per texture layer (curently texture, texture matrix, texture filters, and texture wrap mode) are separated into a new struct SMaterialLayer. You can access them via the array TextureLayer[] in SMaterial. The texture matrix methods in SMaterial are still alive, and also textures can be accessed via methods in SMaterial now. But still, many places in user code need some update (usually changing material.Textures[i] to material.TextureLayer[i].Texture etc.) - Major API change: All material properties which are available per texture layer (currently texture, texture matrix, texture filters, and texture wrap mode) are separated into a new struct SMaterialLayer. You can access them via the array TextureLayer[] in SMaterial. The texture matrix methods in SMaterial are still alive, and also textures can be accessed via methods in SMaterial now. But still, many places in user code need some update (usually changing material.Textures[i] to material.TextureLayer[i].Texture etc.)
- Major API rewriting for proper const usage. Now, most getter methods are const and so are the larger parameters and return values. Moreover, many methods taking only unsigned numbers now use u32 instead of s32 in order to recognize this limitation from the method's signature. - Major API rewriting for proper const usage. Now, most getter methods are const and so are the larger parameters and return values. Moreover, many methods taking only unsigned numbers now use u32 instead of s32 in order to recognize this limitation from the method's signature.
@ -3011,7 +3011,7 @@ GUI:
Added navigation through the GUI using tab and the shift and control keys. Added navigation through the GUI using tab and the shift and control keys.
Use these new methods to control tab navigation: Use these new methods to control tab navigation:
setTabStop - set this to true if the focus will vist the element. setTabStop - set this to true if the focus will visit the element.
isTabStop - returns true if the focus will visit the element. isTabStop - returns true if the focus will visit the element.
setTabOrder - Sets the order of focus within this tab group, setTabOrder - Sets the order of focus within this tab group,
Only one element in each group should have the same TabOrder number. Only one element in each group should have the same TabOrder number.
@ -3259,7 +3259,7 @@ Changes in version 1.3 (15 Mar 2007)
The pointer to M is acquired by mat.pointer(), some methods take a matrix4 reference The pointer to M is acquired by mat.pointer(), some methods take a matrix4 reference
instead of a f32*. instead of a f32*.
- Some more suppport for tangent meshes - Some more support for tangent meshes
- Several alpha blend fixes in several drivers and methods - Several alpha blend fixes in several drivers and methods
@ -3373,14 +3373,14 @@ Font improvements:
a very short time. This allows other processes to execute without a major a very short time. This allows other processes to execute without a major
penalty for the Irrlicht application. penalty for the Irrlicht application.
- Added sleep() methd to IrrlichtDevice, for pausing the Irrlicht process for a longer - Added sleep() method to IrrlichtDevice, for pausing the Irrlicht process for a longer
amount of time. amount of time.
- Auto-split mesh to 16bit buffers in 3ds loader - Auto-split mesh to 16bit buffers in 3ds loader
- 8bit RGB332 image format support - 8bit RGB332 image format support
- isActive() under Linux now behaves like the Windows variant: True iff window has focus - isActive() under Linux now behaves like the Windows variant: True if window has focus
- Fixed(?) the glXGetProcAddress problems with different drivers - Fixed(?) the glXGetProcAddress problems with different drivers
@ -3414,7 +3414,7 @@ Font improvements:
- CFileList: Changed FileListEntry sorting to - CFileList: Changed FileListEntry sorting to
a) Directory comes first a) Directory comes first
b) sorting ignores case b) sorting ignores case
so it feel's more like common browers so it feel's more like common browsers
- added a Texture transform to IVideoDriver::setTransform - added a Texture transform to IVideoDriver::setTransform
@ -3475,7 +3475,7 @@ Font improvements:
and to correct the border back on drawing, specify the parameter in IGUIFont. and to correct the border back on drawing, specify the parameter in IGUIFont.
this is quite useful if you want to use more artistic fonts. this is quite useful if you want to use more artistic fonts.
default = 0 default = 0
better kerning would need a seperate coordinate set for each symbol. better kerning would need a separate coordinate set for each symbol.
- changed MD2_FRAME_SHIFT to lower framerate - changed MD2_FRAME_SHIFT to lower framerate
-> lower IPol -> lower IPol
@ -3526,7 +3526,7 @@ Changes in version 1.2 (29 Nov 2006)
- Default texture format is now A8R8G8B8 if not explicitly specified. This fixes some color artifacts with lightmaps. Bugfix submitted by hey_i_am_real. - Default texture format is now A8R8G8B8 if not explicitly specified. This fixes some color artifacts with lightmaps. Bugfix submitted by hey_i_am_real.
- In OnPostRender all transformations were taken as relative and multiplied with the root transformation matrix every time due to a wrong check for the real root node. This shoudl increase render performance for scenes with lots of (invisible) nodes. - In OnPostRender all transformations were taken as relative and multiplied with the root transformation matrix every time due to a wrong check for the real root node. This should increase render performance for scenes with lots of (invisible) nodes.
- Added correct list copy constructor. - Added correct list copy constructor.
@ -3557,13 +3557,13 @@ Changes in version 1.2 (29 Nov 2006)
- New video driver feature to check for multitexture feature. - New video driver feature to check for multitexture feature.
- Direct3D drivers update the devicelost variable if reseeting failed with this return code. - Direct3D drivers update the devicelost variable if resetting failed with this return code.
- VideoModeList under Linux is correctly filled now. No glX calls are made if GLX extension is not found - only software drivers are available then. RandR extension can be enabled with a new compile flag in IrrCompileConfig.h, either instead of XF86VidMode or in addition. - VideoModeList under Linux is correctly filled now. No glX calls are made if GLX extension is not found - only software drivers are available then. RandR extension can be enabled with a new compile flag in IrrCompileConfig.h, either instead of XF86VidMode or in addition.
- Big Endian support for MS3D loader. - Big Endian support for MS3D loader.
- Apfelbaum software renderer: basic mipmap support (per triangle), switch for using w-buffer instad z-buffer ( default on ) - Apfelbaum software renderer: basic mipmap support (per triangle), switch for using w-buffer instead z-buffer ( default on )
- Better FPU support: Changed various fpu-call's in whole project (main reason to use faster float to int conversion on x86. ( fistp )) - Better FPU support: Changed various fpu-call's in whole project (main reason to use faster float to int conversion on x86. ( fistp ))
@ -3575,7 +3575,7 @@ Changes in version 1.2 (29 Nov 2006)
- Colorconverter: X8R8G8B8toA1R5G5B5, set Alpha High, minor: A1R5G5B5toA8R8G8B8 changed if (a) to conditional set - Colorconverter: X8R8G8B8toA1R5G5B5, set Alpha High, minor: A1R5G5B5toA8R8G8B8 changed if (a) to conditional set
- CImage: added boxfilter (weigthed average), (generic, slow) - CImage: added boxfilter (weighted average), (generic, slow)
- The scene manager now sets an ambient light color when calling ISceneManager::drawAll(). - The scene manager now sets an ambient light color when calling ISceneManager::drawAll().
You can influence this by calling ISceneManager::setAmbientLight(). That light color You can influence this by calling ISceneManager::setAmbientLight(). That light color
@ -3658,7 +3658,7 @@ Changes in version 1.1 (06 Aug 2006)
- Added scene node animator factories. This is the same as scene node - Added scene node animator factories. This is the same as scene node
factories, but for scene node animators. factories, but for scene node animators.
- Added scene node factories. This is an interface making it possible to dynamicly - Added scene node factories. This is an interface making it possible to dynamically
create scene nodes. To be able to add custom scene nodes to Irrlicht and create scene nodes. To be able to add custom scene nodes to Irrlicht and
to make it possible for the scene manager to save and load those external scene nodes, simply to make it possible for the scene manager to save and load those external scene nodes, simply
implement this interface and register it in you scene manager via ISceneManager:: implement this interface and register it in you scene manager via ISceneManager::
@ -3771,8 +3771,8 @@ Changes in version 0.14.0 (30 November 2005)
drivers: D3D8, D3D9 and OpenGL. drivers: D3D8, D3D9 and OpenGL.
- Irrlicht now supports the recently released new microsoft compiler. Irrlicht versions compiled - Irrlicht now supports the recently released new microsoft compiler. Irrlicht versions compiled
with older verions of this compiler can now also be used with the new one, which wasn't possible with older versions of this compiler can now also be used with the new one, which wasn't possible
previously because of a name mangeling issue. previously because of a name mangling issue.
- All 2D drawing functions can now be used to draw into textures (render targets). This also - All 2D drawing functions can now be used to draw into textures (render targets). This also
means for example that the whole GUI environment can be rendered into textures. means for example that the whole GUI environment can be rendered into textures.
@ -3807,7 +3807,7 @@ Changes in version 0.14.0 (30 November 2005)
- The scene manager has a new method getSceneNodeFromName() which finds a scene node by its name. - The scene manager has a new method getSceneNodeFromName() which finds a scene node by its name.
- It is now also possible to attach scene nodes to joints/bones of sceletal animated .x files. - It is now also possible to attach scene nodes to joints/bones of skeletal animated .x files.
(Using IAnimatedMesh->getXJointNode() ). This was previously only possible with milkshape models. (Using IAnimatedMesh->getXJointNode() ). This was previously only possible with milkshape models.
- Billboards now draw their bounding box when debugdata is set to visible for them. - Billboards now draw their bounding box when debugdata is set to visible for them.
@ -3835,7 +3835,7 @@ Changes in version 0.14.0 (30 November 2005)
- Fixed a heavy bug in Irrlicht.NET causing lots of memory leaks when drawing text. - Fixed a heavy bug in Irrlicht.NET causing lots of memory leaks when drawing text.
- Fixed a bug in the attachement of scene nodes to animated X files. - Fixed a bug in the attachment of scene nodes to animated X files.
- Fixed a bug in the .NET Vector3D addition operator. - Fixed a bug in the .NET Vector3D addition operator.
@ -3847,7 +3847,7 @@ Changes in version 0.14.0 (30 November 2005)
SceneManager->getParameters()->setParameter(scene::DMF_FLIP_ALPHA_TEXTURES, true); SceneManager->getParameters()->setParameter(scene::DMF_FLIP_ALPHA_TEXTURES, true);
you can also set material transparent reference value by setting: you can also set material transparent reference value by setting:
SceneManager->getParameters()->setParameter(scene::DMF_ALPHA_CHANNEL_REF, 0.01); SceneManager->getParameters()->setParameter(scene::DMF_ALPHA_CHANNEL_REF, 0.01);
you can use every value beetween 0 and 1, but to respect DeleD rapresentation you can use every value between 0 and 1, but to respect DeleD representation
0.01 is OK, just a note, if you set 0, it's just like you set 0.5, this means 0.01 is OK, just a note, if you set 0, it's just like you set 0.5, this means
that each pixel found corresponding to a position in alpha map that has a value<127 that each pixel found corresponding to a position in alpha map that has a value<127
won't be drawn. won't be drawn.
@ -4213,7 +4213,7 @@ Changes in version 0.10.0 (26 May 2005)
- Fixed the wrongly drawn alpha channel material in OpenGL driver and a problem with the - Fixed the wrongly drawn alpha channel material in OpenGL driver and a problem with the
VertexAlpha material in the same driver. VertexAlpha material in the same driver.
- Implemented multipass rendering in the OCTTree scene node now too. This means that octtrees can - Implemented multipass rendering in the OCTTree scene node now too. This means that octrees can
now contain transparent materials as well. now contain transparent materials as well.
- Improved string comparison speed, especially when comparing with pointer to char or w_char, - Improved string comparison speed, especially when comparing with pointer to char or w_char,
@ -4224,10 +4224,10 @@ Changes in version 0.10.0 (26 May 2005)
- Added string::trim() method. - Added string::trim() method.
- Addes string::erase() method. - Added string::erase() method.
- Fixed a bug in array which caused data corruption if an element which already inside the - Fixed a bug in array which caused data corruption if an element which already inside the
the array was pushed_back. Thanks to vox for reporting this and to provide a solutin the array was pushed_back. Thanks to vox for reporting this and to provide a solution
- Added ISceneManager::addMesh() method. - Added ISceneManager::addMesh() method.
@ -4241,7 +4241,7 @@ Changes in version 0.10.0 (26 May 2005)
- After lots releases ignoring the 'make the fps camera smoother request', it is now - After lots releases ignoring the 'make the fps camera smoother request', it is now
finally integrated. finally integrated.
- Removed audiere dependency and the mp3 file, reeducing SDK download size. - Removed audiere dependency and the mp3 file, reducing SDK download size.
- A bug was fixed causing the binding of the wrong fragment program sometimes in OpenGL. - A bug was fixed causing the binding of the wrong fragment program sometimes in OpenGL.
@ -4249,7 +4249,7 @@ Changes in version 0.10.0 (26 May 2005)
fit the other name conventions, CD3D9Driver.h into CD3D9Driver.h for example. fit the other name conventions, CD3D9Driver.h into CD3D9Driver.h for example.
- The IMaterialRenderer interface now has the new method getRenderCapability() which - The IMaterialRenderer interface now has the new method getRenderCapability() which
returns if the material is able to be rendererd with all settings on current hardware. returns if the material is able to be rendered with all settings on current hardware.
- Added IMeshManipulator::setVertexColors(); - Added IMeshManipulator::setVertexColors();
@ -4333,7 +4333,7 @@ Changes in version 0.9 (28 Mar 2005)
- To be able to replace built-in meshloaders with newer external versions without the - To be able to replace built-in meshloaders with newer external versions without the
need of recompiling the engine, now mesh loaders which are added to the engine using need of recompiling the engine, now mesh loaders which are added to the engine using
ISceneManager::addExternalMeshLoader() are prefered over built-in mesh loaders. ISceneManager::addExternalMeshLoader() are preferred over built-in mesh loaders.
Thanks to for his suggestion of this. Thanks to for his suggestion of this.
- D3D8 and D3D9 support for dev-cpp has been improved. If you are using Dev-Cpp and - D3D8 and D3D9 support for dev-cpp has been improved. If you are using Dev-Cpp and
@ -4349,7 +4349,7 @@ Changes in version 0.9 (28 Mar 2005)
set a value 'CSM_TexturePath', 'LMTS_TexturePath' or 'MY3D_TexturePath' to let them know set a value 'CSM_TexturePath', 'LMTS_TexturePath' or 'MY3D_TexturePath' to let them know
the path of the textures. the path of the textures.
- IAnimatedMeshSceneNode now has two new methods for being able to have more influcence - IAnimatedMeshSceneNode now has two new methods for being able to have more influence
on the animation playback: It is now possible to set the playback mode to looped or on the animation playback: It is now possible to set the playback mode to looped or
non looped with IAnimatedMeshSceneNode::setLoopMode() and it is possible to set non looped with IAnimatedMeshSceneNode::setLoopMode() and it is possible to set
a callback interface which will be called when animation playback has finished a callback interface which will be called when animation playback has finished
@ -4405,7 +4405,7 @@ Changes in version 0.9 (28 Mar 2005)
- Removed a memory leak when creating hlsl pixel shaders. - Removed a memory leak when creating hlsl pixel shaders.
- I've made varoius updates to the documentation and moved to doxygen 1.4 - I've made various updates to the documentation and moved to doxygen 1.4
- Fixed a bug in the xml reader which caused it to crash when reading empty xml files. - Fixed a bug in the xml reader which caused it to crash when reading empty xml files.
@ -4522,7 +4522,7 @@ Changes in version 0.8 (19 Feb 2005)
This is useful for example after locking and modifying the texture. This is useful for example after locking and modifying the texture.
- Gravity acceleration speed in CollisionResponseAnimator was changed thanks to a suggestion - Gravity acceleration speed in CollisionResponseAnimator was changed thanks to a suggestion
by Morrog. The accelerationPerSecond value has been removed beacause of this, you by Morrog. The accelerationPerSecond value has been removed because of this, you
can now control everything just with the gravity vector. Note that the gravity value can now control everything just with the gravity vector. Note that the gravity value
must now be a little bit smaller to achieve the same effect as before. must now be a little bit smaller to achieve the same effect as before.
@ -4549,7 +4549,7 @@ Changes in version 0.8 (19 Feb 2005)
- A small bug in rect<T>::isValid() has been fixed, thanks to jox. - A small bug in rect<T>::isValid() has been fixed, thanks to jox.
- Fixed a bug in D3D8, D3D9 and OpenGL, which caused Materials be set and unset with an unequal - Fixed a bug in D3D8, D3D9 and OpenGL, which caused Materials be set and unset with an unequal
amount when mixing 3d with 2d grafics or stencil buffer shadows. amount when mixing 3d with 2d graphics or stencil buffer shadows.
- If you are recompiling the whole engine with Visual Studio 6 (which means - If you are recompiling the whole engine with Visual Studio 6 (which means
Irrlicht.dll, NOT the application which is using Irrlicht), DirectX9 support is disabled Irrlicht.dll, NOT the application which is using Irrlicht), DirectX9 support is disabled
@ -4790,7 +4790,7 @@ Changes in version 0.6: (09 Mar 2004)
- Fixed a bug which prevented the possibility to compile directx8 without - Fixed a bug which prevented the possibility to compile directx8 without
having installed directx9. having installed directx9.
- Fixed a bug in 3d line dawing in D3D 8 and 9. - Fixed a bug in 3d line drawing in D3D 8 and 9.
- All video drivers now print out the gfx adapter type, vendor and driver version - All video drivers now print out the gfx adapter type, vendor and driver version
into the log strings. into the log strings.
@ -4870,7 +4870,7 @@ Changes in version 0.5: (17 Feb 2004)
- The GUI Environment now supports edit boxes. They should support unicode input - The GUI Environment now supports edit boxes. They should support unicode input
from every keyboard around the world, scrolling, copying and pasting (exchanging from every keyboard around the world, scrolling, copying and pasting (exchanging
data with the clipboard directly), maximum character amount, marking and all data with the clipboard directly), maximum character amount, marking and all
shortcuts like ctrl+X, ctrl+V, ctrg+C, shift+Left, shift+Right, Home, End, shortcuts like ctrl+X, ctrl+V, ctrl+C, shift+Left, shift+Right, Home, End,
and so on. Wow, I never programmed an edit box, its much more work than it and so on. Wow, I never programmed an edit box, its much more work than it
seems to be. seems to be.
@ -4899,7 +4899,7 @@ Changes in version 0.5: (17 Feb 2004)
- It is now possible to draw 3d objects with fog. Simply switch on the fog flag - It is now possible to draw 3d objects with fog. Simply switch on the fog flag
in the objects material. To change to way fog is drawn (per pixel/vertex, color, in the objects material. To change to way fog is drawn (per pixel/vertex, color,
linear/expontential) use IVideoDriver::setFog(); linear/exponential) use IVideoDriver::setFog();
- With IrrlichtDevice::getOSOperator() a pointer to an interface is returned, with - With IrrlichtDevice::getOSOperator() a pointer to an interface is returned, with
which it is possible to do some operation system specific operations. Currently which it is possible to do some operation system specific operations. Currently
@ -4933,7 +4933,7 @@ Changes in version 0.5: (17 Feb 2004)
- IGUIEnvironment::getBuildInFont() was renamed to getBuiltInFont(). - IGUIEnvironment::getBuildInFont() was renamed to getBuiltInFont().
- IGUIElement::bringToFront() is able to brint a child to the front. - IGUIElement::bringToFront() is able to bring a child to the front.
Windows for example are now using this new feature. Windows for example are now using this new feature.
- Changed the texture mapping of the test scene node a little bit based on - Changed the texture mapping of the test scene node a little bit based on
@ -4990,7 +4990,7 @@ Changes in version 0.5: (17 Feb 2004)
------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------
Changes in version 0.4.2: (13 Dec 2003) Changes in version 0.4.2: (13 Dec 2003)
- The engine does no more use only 16 bit textures internaly. Now all - The engine does no more use only 16 bit textures internally. Now all
other texture formats are supported too. This means higher precision other texture formats are supported too. This means higher precision
and better quality images. In this context, the ISurface interface has and better quality images. In this context, the ISurface interface has
been replaced by IImage, and the ISurfaceLoader by IImageLoader. been replaced by IImage, and the ISurfaceLoader by IImageLoader.
@ -5128,7 +5128,7 @@ Changes in version 0.4.1: (18 Sep 2003)
a setMD2Animation() with a character string as parameter instead of a constant. a setMD2Animation() with a character string as parameter instead of a constant.
- You do not need an event receiver anymore for sending user events to the active - You do not need an event receiver anymore for sending user events to the active
camera, this is now done autmaticly. In addition, it is now possible to camera, this is now done automatically. In addition, it is now possible to
set a new event receiver during runtime of the engine using IrrlichtDevice:: set a new event receiver during runtime of the engine using IrrlichtDevice::
setEventReceiver(). setEventReceiver().
@ -5163,7 +5163,7 @@ Changes in version 0.4.1: (18 Sep 2003)
which where created inside the .dll but are removed from outside. which where created inside the .dll but are removed from outside.
- A bug was fixed causing the engine to crash when drawing debug data of - A bug was fixed causing the engine to crash when drawing debug data of
octtree scene nodes with geometry data with vertices with one texture octree scene nodes with geometry data with vertices with one texture
coordiante. coordiante.
- Multitexturing now works with linux, too. Thanx to Jon Pry again, for showing - Multitexturing now works with linux, too. Thanx to Jon Pry again, for showing
@ -5175,7 +5175,7 @@ Changes in version 0.4.1: (18 Sep 2003)
- The "Climb-Walls" bug (reported first by Matthias Gall) is fixed. Gravity - The "Climb-Walls" bug (reported first by Matthias Gall) is fixed. Gravity
acceleration is now quadratic instead of linear. acceleration is now quadratic instead of linear.
- A warning is now printed out, if more vertices are rendererd with one call - A warning is now printed out, if more vertices are rendered with one call
than the hardware supports. than the hardware supports.
- Other, Minor New/Changed methods in public interfaces: - Other, Minor New/Changed methods in public interfaces:
@ -5190,7 +5190,7 @@ Changes in version 0.4.1: (18 Sep 2003)
------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------
Changes in version 0.4: (04 Sep 2003) Changes in version 0.4: (04 Sep 2003)
- Collision detection and reponse based on ellipsoids in now implemented. - Collision detection and response based on ellipsoids in now implemented.
There is a new method available in the ISceneCollisionMananger, which returns There is a new method available in the ISceneCollisionMananger, which returns
a collision response point. In addition, a new SceneNodeAnimator is available, a collision response point. In addition, a new SceneNodeAnimator is available,
which causes a scene node, to which it is attached to, not to move through which causes a scene node, to which it is attached to, not to move through
@ -5235,7 +5235,7 @@ Changes in version 0.4: (04 Sep 2003)
ISceneNode::setDebugDataVisible(true). Looks really interesting for ISceneNode::setDebugDataVisible(true). Looks really interesting for
animated scene nodes like particle systems or animated meshes. animated scene nodes like particle systems or animated meshes.
- There is now a IGUIInOutFader avaiable, which is able to fade in or - There is now a IGUIInOutFader available, which is able to fade in or
out the whole screen or parts of it. out the whole screen or parts of it.
- The new IVideoModeList is a list with all available video modes. It can - The new IVideoModeList is a list with all available video modes. It can
@ -5280,7 +5280,7 @@ Changes in version 0.4: (04 Sep 2003)
- All features of the FileOpenDialog are now working. - All features of the FileOpenDialog are now working.
- Debug informations are now printed out to the console window - Debug information are now printed out to the console window
also on the win32 platform. also on the win32 platform.
- FPSCamera now supports setTarget(). Its not precise but working. - FPSCamera now supports setTarget(). Its not precise but working.
@ -5362,11 +5362,11 @@ Changes in version 0.3: (18 Jul 2003)
somebody could tell me a fast way to blit a A1R5G5B5 surface to the screen somebody could tell me a fast way to blit a A1R5G5B5 surface to the screen
using X. using X.
All examples do compile and run, but there are some things missing: All examples do compile and run, but there are some things missing:
* It is not yet possible to make the mouse cursor invisibe. * It is not yet possible to make the mouse cursor invisible.
* The timer seems not to return the currect time. * The timer seems not to return the correct time.
* Multitexturing does not work correctly on all gfx adapters. * Multitexturing does not work correctly on all gfx adapters.
- Ms3D Animations: The engine is now able to play skeletal animations directy - Ms3D Animations: The engine is now able to play skeletal animations directly
from Milkshape 3D (.ms3d) files. It is also possible to attach objects to from Milkshape 3D (.ms3d) files. It is also possible to attach objects to
parts of the animated mesh. For example a weapon to the left hand of parts of the animated mesh. For example a weapon to the left hand of
the animated model. the animated model.
@ -5431,7 +5431,7 @@ Changes in version 0.2.5: (22 Jun 2003)
picking, but more is coming soon. picking, but more is coming soon.
- Automatic Culling based on Bounding Boxes is implemented now. It can be switched on - Automatic Culling based on Bounding Boxes is implemented now. It can be switched on
or off for every SceneNode seperately using ISceneNode::setAutomaticCulling(). or off for every SceneNode separately using ISceneNode::setAutomaticCulling().
It is on by default. It is on by default.
- It is now possible to remove loaded textures for freeing memory or reloading them. - It is now possible to remove loaded textures for freeing memory or reloading them.
@ -5489,7 +5489,7 @@ Changes in version 0.2: (19 May 2003)
- The default aspect ratio in all camera scene nodes was changed. - The default aspect ratio in all camera scene nodes was changed.
- Some changes and extenstions to the core::matrix4, SViewFrustum, plane3d and - Some changes and extensions to the core::matrix4, SViewFrustum, plane3d and
aabbox were made. The plane3dex was removed, there is now only one plane implementation aabbox were made. The plane3dex was removed, there is now only one plane implementation
available. Implemented some ideas and suggestions by Mark Jeacocke. Thanx a lot! available. Implemented some ideas and suggestions by Mark Jeacocke. Thanx a lot!
@ -5507,7 +5507,7 @@ Changes in version 0.2: (19 May 2003)
setRelativePosition() and the sceneNodeAnimators. In addition, it now supports setRelativePosition() and the sceneNodeAnimators. In addition, it now supports
multiple FPS cameras. multiple FPS cameras.
- Mesh format loading extenstions are now possible. To extend the engine with a - Mesh format loading extensions are now possible. To extend the engine with a
mesh format it currently does not support (e.g. .cob), just implement a mesh format it currently does not support (e.g. .cob), just implement a
IMeshLoader interface and add it to the engine calling IMeshLoader interface and add it to the engine calling
ISceneManager::addExternalMeshLoader(). ISceneManager::addExternalMeshLoader().
@ -5561,7 +5561,7 @@ Release notes of version 0.1: (14 Mar 2003)
- Software Device - Software Device
Dynamic lighting, multitexturing, 3d clipping and bilinear filtering are Dynamic lighting, multitexturing, 3d clipping and bilinear filtering are
not implemented because the Software Device was intented to to only 2d not implemented because the Software Device was intended to to only 2d
functions, the primitive 3d functions are only an addition. Until the functions, the primitive 3d functions are only an addition. Until the
first non beta release (1.0) of the Engine, some more 3d functionality first non beta release (1.0) of the Engine, some more 3d functionality
will be added. will be added.

View File

@ -56,7 +56,7 @@ public:
{ {
if (UseHighLevelShaders) if (UseHighLevelShaders)
{ {
// get shader constants id. // Get shader constants id.
WorldViewProjID = services->getVertexShaderConstantID("mWorldViewProj"); WorldViewProjID = services->getVertexShaderConstantID("mWorldViewProj");
TransWorldID = services->getVertexShaderConstantID("mTransWorld"); TransWorldID = services->getVertexShaderConstantID("mTransWorld");
InvWorldID = services->getVertexShaderConstantID("mInvWorld"); InvWorldID = services->getVertexShaderConstantID("mInvWorld");
@ -68,6 +68,27 @@ public:
if(driver->getDriverType() == video::EDT_OPENGL) if(driver->getDriverType() == video::EDT_OPENGL)
TextureID = services->getVertexShaderConstantID("myTexture"); TextureID = services->getVertexShaderConstantID("myTexture");
} }
// Set light color
// That could be set as well in OnSetConstants, but there's some cost to setting shader constants
// So when we have non-changing shader constants it's more performant to set them only once.
video::SColorf col(0.0f,1.0f,1.0f,0.0f);
if (UseHighLevelShaders)
{
services->setVertexShaderConstant(ColorID, reinterpret_cast<f32*>(&col), 4);
// Note: Since Irrlicht 1.9 it's possible to call setVertexShaderConstant
// from anywhere. To do that save the services pointer here in OnCreate, it
// won't change as long as you use one IShaderConstantSetCallBack per shader
// material. But when calling it ouside of IShaderConstantSetCallBack functions
// you have to call services->startUseProgram()stopUseProgram() before/after doing so.
// At least for high-level shader constants, low level constants are not attached
// to programs, so for those it doesn't matter.
// Doing that sometimes makes sense for performance reasons, like for constants which
// do only change once per frame or even less.
}
else
services->setVertexShaderConstant(reinterpret_cast<f32*>(&col), 9, 1);
} }
virtual void OnSetConstants(video::IMaterialRendererServices* services, virtual void OnSetConstants(video::IMaterialRendererServices* services,
@ -109,16 +130,6 @@ public:
else else
services->setVertexShaderConstant(reinterpret_cast<f32*>(&pos), 8, 1); services->setVertexShaderConstant(reinterpret_cast<f32*>(&pos), 8, 1);
// set light color
video::SColorf col(0.0f,1.0f,1.0f,0.0f);
if (UseHighLevelShaders)
services->setVertexShaderConstant(ColorID,
reinterpret_cast<f32*>(&col), 4);
else
services->setVertexShaderConstant(reinterpret_cast<f32*>(&col), 9, 1);
// set transposed world matrix // set transposed world matrix
core::matrix4 world = driver->getTransform(video::ETS_WORLD); core::matrix4 world = driver->getTransform(video::ETS_WORLD);

View File

@ -41,6 +41,20 @@ public:
//! Return an index constant for the vertex shader based on a name. //! Return an index constant for the vertex shader based on a name.
virtual s32 getVertexShaderConstantID(const c8* name) = 0; virtual s32 getVertexShaderConstantID(const c8* name) = 0;
//! Call when you set shader constants outside of IShaderConstantSetCallBack
/** Only for high-level shader functions, aka those using an index instead of
an register. Shader constants are attached to shader programs, so if you want
to set them you have to make sure the correct shader program is in use.
IShaderConstantSetCallBack functions like OnSetConstants do that for you,
but if you want to set shader constants outside of those (usually for performance
reasons) call startUseProgram() before doing so and stopUseProgram() afterwards.
Note: Currently only necessary in OpenGL, but no real calling costs on other drivers.
*/
virtual void startUseProgram() {}
//! Call this when you are done setting shader constants outside of OnCreate or OnSetConstants
virtual void stopUseProgram() {}
//! Sets a constant for the vertex shader based on a name. //! Sets a constant for the vertex shader based on a name.
/** This can be used if you used a high level shader language like GLSL /** This can be used if you used a high level shader language like GLSL
or HLSL to create a shader. Example: If you created a shader which has or HLSL to create a shader. Example: If you created a shader which has

View File

@ -52,7 +52,7 @@ public:
zfail method, if not, zpass is used. zfail method, if not, zpass is used.
\param infinity: Value used by the shadow volume algorithm to \param infinity: Value used by the shadow volume algorithm to
scale the shadow volume. For zfail shadow volumes on some drivers scale the shadow volume. For zfail shadow volumes on some drivers
only suppport finite shadows, so camera zfar must be larger than only support finite shadows, so camera zfar must be larger than
shadow back cap,which is depending on the infinity parameter). shadow back cap,which is depending on the infinity parameter).
Infinity value also scales by the scaling factors of the model. Infinity value also scales by the scaling factors of the model.
If shadows don't show up with zfail then try reducing infinity. If shadows don't show up with zfail then try reducing infinity.

View File

@ -160,7 +160,7 @@ namespace scene
{ {
public: public:
//! Get pointer to an animateable mesh. Loads the file if not loaded already. //! Get pointer to an animatable mesh. Loads the file if not loaded already.
/** /**
* If you want to remove a loaded mesh from the cache again, use removeMesh(). * If you want to remove a loaded mesh from the cache again, use removeMesh().
* Currently there are the following mesh formats supported: * Currently there are the following mesh formats supported:
@ -393,7 +393,7 @@ namespace scene
**/ **/
virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName=io::path("")) = 0; virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName=io::path("")) = 0;
//! Get pointer to an animateable mesh. Loads the file if not loaded already. //! Get pointer to an animatable mesh. Loads the file if not loaded already.
/** Works just as getMesh(const char* filename). If you want to /** Works just as getMesh(const char* filename). If you want to
remove a loaded mesh from the cache again, use removeMesh(). remove a loaded mesh from the cache again, use removeMesh().
\param file File handle of the mesh to load. \param file File handle of the mesh to load.

View File

@ -102,7 +102,7 @@ The Irrlicht Engine SDK version 1.9
4. Release Notes 4. Release Notes
========================================================================== ==========================================================================
Informations about changes in this new version of the engine can be Information about changes in this new version of the engine can be
found in changes.txt. found in changes.txt.
Please note that the textures, 3D models and levels are copyright Please note that the textures, 3D models and levels are copyright
@ -123,7 +123,7 @@ The Irrlicht Engine SDK version 1.9
in your documentation that you've used the IJG code and libpng. It would in your documentation that you've used the IJG code and libpng. It would
also be nice to mention that you use the Irrlicht Engine and the zlib. also be nice to mention that you use the Irrlicht Engine and the zlib.
See the README files in the jpeglib and the zlib for See the README files in the jpeglib and the zlib for
further informations. further information.
The Irrlicht Engine License The Irrlicht Engine License
@ -167,7 +167,7 @@ The Irrlicht Engine SDK version 1.9
Please also not that parts of the engine have been written or contributed Please also not that parts of the engine have been written or contributed
by other people. Especially: (There are probably more people, sorry if I forgot one. by other people. Especially: (There are probably more people, sorry if I forgot one.
See http://irrlicht.sourceforge.net/author.html for more informations) See http://irrlicht.sourceforge.net/author.html for more information)
Michael Zeilfelder (cutealien) Developer/Maintainer Michael Zeilfelder (cutealien) Developer/Maintainer
Thomas Alten (burningwater) Wrote the burningsvideo software rasterizer Thomas Alten (burningwater) Wrote the burningsvideo software rasterizer

View File

@ -622,7 +622,7 @@ void CAnimatedMeshHalfLife::renderModel(u32 param, IVideoDriver * driver, const
} }
} }
// attachements // attachments
const SHalflifeAttachment *attach = (SHalflifeAttachment *) ((u8*) Header + Header->attachmentindex); const SHalflifeAttachment *attach = (SHalflifeAttachment *) ((u8*) Header + Header->attachmentindex);
core::vector3df v[8]; core::vector3df v[8];
for (u32 i = 0; i < Header->numattachments; i++) for (u32 i = 0; i < Header->numattachments; i++)

View File

@ -31,7 +31,7 @@ struct SMD3Frame
//! An attachment point for another MD3 model. //! An attachment point for another MD3 model.
struct SMD3Tag struct SMD3Tag
{ {
c8 Name[64]; //name of 'tag' as it's usually called in the md3 files try to see it as a sub-mesh/seperate mesh-part. c8 Name[64]; //name of 'tag' as it's usually called in the md3 files try to see it as a sub-mesh/separate mesh-part.
f32 position[3]; //relative position of tag f32 position[3]; //relative position of tag
f32 rotationMatrix[9]; //3x3 rotation direction of tag f32 rotationMatrix[9]; //3x3 rotation direction of tag
} PACK_STRUCT; } PACK_STRUCT;

View File

@ -76,14 +76,26 @@ void CCubeSceneNode::render()
if (Shadow) if (Shadow)
Shadow->updateShadowVolumes(); Shadow->updateShadowVolumes();
// for debug purposes only: for (u32 i=0; i<Mesh->getMeshBufferCount(); ++i)
video::SMaterial mat = Mesh->getMeshBuffer(0)->getMaterial(); {
const scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i);
// overwrite half transparency {
if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY) // for debug purposes only:
mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY)
driver->setMaterial(mat); {
driver->drawMeshBuffer(Mesh->getMeshBuffer(0)); // overwrite half transparency
video::SMaterial mat = mb->getMaterial();
mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
driver->setMaterial(mat);
}
else
{
const video::SMaterial& mat = mb->getMaterial();
driver->setMaterial(mat);
}
driver->drawMeshBuffer(mb);
}
}
// for debug purposes only: // for debug purposes only:
if (DebugDataVisible) if (DebugDataVisible)
@ -95,21 +107,18 @@ void CCubeSceneNode::render()
if (DebugDataVisible & scene::EDS_BBOX) if (DebugDataVisible & scene::EDS_BBOX)
{ {
driver->draw3DBox(Mesh->getMeshBuffer(0)->getBoundingBox(), video::SColor(255,255,255,255)); driver->draw3DBox(Mesh->getBoundingBox(), video::SColor(255,255,255,255));
} }
if (DebugDataVisible & scene::EDS_BBOX_BUFFERS) if (DebugDataVisible & scene::EDS_BBOX_BUFFERS)
{ {
driver->draw3DBox(Mesh->getMeshBuffer(0)->getBoundingBox(), driver->draw3DBox(Mesh->getBoundingBox(), video::SColor(255,190,128,128));
video::SColor(255,190,128,128));
} }
if (DebugDataVisible & scene::EDS_NORMALS) if (DebugDataVisible & scene::EDS_NORMALS)
{ {
// draw normals // draw normals
const f32 debugNormalLength = SceneManager->getParameters()->getAttributeAsFloat(DEBUG_NORMAL_LENGTH); const f32 debugNormalLength = SceneManager->getParameters()->getAttributeAsFloat(DEBUG_NORMAL_LENGTH);
const video::SColor debugNormalColor = SceneManager->getParameters()->getAttributeAsColor(DEBUG_NORMAL_COLOR); const video::SColor debugNormalColor = SceneManager->getParameters()->getAttributeAsColor(DEBUG_NORMAL_COLOR);
const u32 count = Mesh->getMeshBufferCount(); for (u32 i=0; i < Mesh->getMeshBufferCount(); ++i)
for (u32 i=0; i != count; ++i)
{ {
driver->drawMeshBufferNormals(Mesh->getMeshBuffer(i), debugNormalLength, debugNormalColor); driver->drawMeshBufferNormals(Mesh->getMeshBuffer(i), debugNormalLength, debugNormalColor);
} }
@ -121,7 +130,10 @@ void CCubeSceneNode::render()
m.Wireframe = true; m.Wireframe = true;
driver->setMaterial(m); driver->setMaterial(m);
driver->drawMeshBuffer(Mesh->getMeshBuffer(0)); for (u32 i=0; i < Mesh->getMeshBufferCount(); ++i)
{
driver->drawMeshBuffer(Mesh->getMeshBuffer(i));
}
} }
} }
} }
@ -130,7 +142,7 @@ void CCubeSceneNode::render()
//! returns the axis aligned bounding box of this node //! returns the axis aligned bounding box of this node
const core::aabbox3d<f32>& CCubeSceneNode::getBoundingBox() const const core::aabbox3d<f32>& CCubeSceneNode::getBoundingBox() const
{ {
return Mesh->getMeshBuffer(0)->getBoundingBox(); return Mesh->getBoundingBox();
} }
@ -183,14 +195,16 @@ void CCubeSceneNode::OnRegisterSceneNode()
//! returns the material based on the zero based index i. //! returns the material based on the zero based index i.
video::SMaterial& CCubeSceneNode::getMaterial(u32 i) video::SMaterial& CCubeSceneNode::getMaterial(u32 i)
{ {
return Mesh->getMeshBuffer(0)->getMaterial(); return Mesh->getMeshBuffer(i)->getMaterial();
} }
//! returns amount of materials used by this scene node. //! returns amount of materials used by this scene node.
u32 CCubeSceneNode::getMaterialCount() const u32 CCubeSceneNode::getMaterialCount() const
{ {
return 1; if ( Mesh )
return Mesh->getMeshBufferCount();
return 0;
} }
@ -233,7 +247,8 @@ ISceneNode* CCubeSceneNode::clone(ISceneNode* newParent, ISceneManager* newManag
newManager, ID, RelativeTranslation, RelativeRotation, RelativeScale, MeshType); newManager, ID, RelativeTranslation, RelativeRotation, RelativeScale, MeshType);
nb->cloneMembers(this, newManager); nb->cloneMembers(this, newManager);
nb->getMaterial(0) = getMaterial(0); for ( irr::u32 i=0; i < getMaterialCount(); ++i )
nb->getMaterial(i) = getMaterial(i);
nb->Shadow = Shadow; nb->Shadow = Shadow;
if ( nb->Shadow ) if ( nb->Shadow )
nb->Shadow->grab(); nb->Shadow->grab();

View File

@ -18,7 +18,7 @@ namespace scene
class ISceneNodeAnimator; class ISceneNodeAnimator;
class ISceneManager; class ISceneManager;
//! Interface making it possible to dynamicly create scene nodes animators //! Interface making it possible to dynamically create scene nodes animators
class CDefaultSceneNodeAnimatorFactory : public ISceneNodeAnimatorFactory class CDefaultSceneNodeAnimatorFactory : public ISceneNodeAnimatorFactory
{ {
public: public:

View File

@ -533,7 +533,6 @@ void CGUIContextMenu::draw()
// loop through all menu items // loop through all menu items
rect = AbsoluteRect; rect = AbsoluteRect;
s32 y = AbsoluteRect.UpperLeftCorner.Y;
for (s32 i=0; i<(s32)Items.size(); ++i) for (s32 i=0; i<(s32)Items.size(); ++i)
{ {
@ -550,8 +549,6 @@ void CGUIContextMenu::draw()
rect.LowerRightCorner.Y += 1; rect.LowerRightCorner.Y += 1;
rect.UpperLeftCorner.Y += 1; rect.UpperLeftCorner.Y += 1;
skin->draw2DRectangle(this, skin->getColor(EGDC_3D_HIGH_LIGHT), rect, clip); skin->draw2DRectangle(this, skin->getColor(EGDC_3D_HIGH_LIGHT), rect, clip);
y += 10;
} }
else else
{ {
@ -673,19 +670,22 @@ void CGUIContextMenu::recalculateSize()
if ( root ) if ( root )
{ {
core::rect<s32> rectRoot( root->getAbsolutePosition() ); core::rect<s32> rectRoot( root->getAbsolutePosition() );
core::rect<s32> absRect( getAbsolutePosition() );
// if it would be drawn beyond the right border, then add it to the left side // if it would be drawn beyond the right border, then add it to the left side - if there is more space
if ( getAbsolutePosition().UpperLeftCorner.X+subRect.LowerRightCorner.X > rectRoot.LowerRightCorner.X ) irr::s32 beyondRight = absRect.UpperLeftCorner.X+subRect.LowerRightCorner.X-rectRoot.LowerRightCorner.X;
irr::s32 beyondLeft = -(absRect.UpperLeftCorner.X - w - rectRoot.UpperLeftCorner.X);
if ( beyondRight > 0 && beyondRight > beyondLeft )
{ {
subRect.UpperLeftCorner.X = -w; subRect.UpperLeftCorner.X = -w;
subRect.LowerRightCorner.X = 0; subRect.LowerRightCorner.X = 0;
} }
// if it would be drawn below bottom border, move it up, but not further than to top. // if it would be drawn below bottom border, move it up, but not further than to top.
irr::s32 belowBottom = getAbsolutePosition().UpperLeftCorner.Y+subRect.LowerRightCorner.Y - rectRoot.LowerRightCorner.Y; irr::s32 belowBottom = absRect.UpperLeftCorner.Y+subRect.LowerRightCorner.Y - rectRoot.LowerRightCorner.Y;
if ( belowBottom > 0 ) if ( belowBottom > 0 )
{ {
irr::s32 belowTop = getAbsolutePosition().UpperLeftCorner.Y+subRect.UpperLeftCorner.Y; irr::s32 belowTop = absRect.UpperLeftCorner.Y+subRect.UpperLeftCorner.Y;
irr::s32 moveUp = belowBottom < belowTop ? belowBottom : belowTop; irr::s32 moveUp = belowBottom < belowTop ? belowBottom : belowTop;
subRect.UpperLeftCorner.Y -= moveUp; subRect.UpperLeftCorner.Y -= moveUp;
subRect.LowerRightCorner.Y -= moveUp; subRect.LowerRightCorner.Y -= moveUp;

View File

@ -3730,7 +3730,9 @@ s32 COpenGLDriver::addShaderMaterial(const c8* vertexShaderProgram,
r->drop(); r->drop();
if (callback && nr >= 0) if (callback && nr >= 0)
{
callback->OnCreate(this, userData); callback->OnCreate(this, userData);
}
return nr; return nr;
} }
@ -3767,7 +3769,11 @@ s32 COpenGLDriver::addHighLevelShaderMaterial(
r->drop(); r->drop();
if (callback && nr >= 0) if (callback && nr >= 0)
{
r->startUseProgram();
callback->OnCreate(r, userData); callback->OnCreate(r, userData);
r->stopUseProgram();
}
return nr; return nr;
} }

View File

@ -416,6 +416,12 @@ namespace video
//! Get current material. //! Get current material.
const SMaterial& getCurrentMaterial() const; const SMaterial& getCurrentMaterial() const;
//! Rest renderstates forcing stuff like OnSetMaterial to be called
void DoResetRenderStates()
{
ResetRenderStates = true;
}
COpenGLCacheHandler* getCacheHandler() const; COpenGLCacheHandler* getCacheHandler() const;
private: private:

View File

@ -237,7 +237,7 @@ void COpenGLSLMaterialRenderer::OnSetMaterial(const video::SMaterial& material,
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) // each program has it's own type
{ {
if (Program2) if (Program2)
Driver->irrGlUseProgram(Program2); Driver->irrGlUseProgram(Program2);
@ -572,6 +572,23 @@ void COpenGLSLMaterialRenderer::setBasicRenderStates(const SMaterial& material,
Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
} }
void COpenGLSLMaterialRenderer::startUseProgram()
{
if (Program2)
Driver->irrGlUseProgram(Program2);
else if (Program)
Driver->extGlUseProgramObject(Program);
}
void COpenGLSLMaterialRenderer::stopUseProgram()
{
// Not going to reset irrGlUseProgram/extGlUseProgramObject as it shouldn't really matter
// Force reset of material to ensure OnSetMaterial will be called or we can miss
// the next UseProgram call
Driver->DoResetRenderStates();
}
s32 COpenGLSLMaterialRenderer::getVertexShaderConstantID(const c8* name) s32 COpenGLSLMaterialRenderer::getVertexShaderConstantID(const c8* name)
{ {
return getPixelShaderConstantID(name); return getPixelShaderConstantID(name);

View File

@ -73,6 +73,8 @@ public:
// implementations for IMaterialRendererServices // implementations for IMaterialRendererServices
virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) IRR_OVERRIDE; virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) IRR_OVERRIDE;
virtual void startUseProgram() IRR_OVERRIDE;
virtual void stopUseProgram() IRR_OVERRIDE;
virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE; virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE;
virtual s32 getPixelShaderConstantID(const c8* name) IRR_OVERRIDE; virtual s32 getPixelShaderConstantID(const c8* name) IRR_OVERRIDE;
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) IRR_OVERRIDE; virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) IRR_OVERRIDE;

View File

@ -952,7 +952,7 @@ scene::SMesh** CQ3LevelMesh::buildMesh(s32 num)
item[g].index != E_Q3_MESH_FOG ? material : material2 ); item[g].index != E_Q3_MESH_FOG ? material : material2 );
} }
// create a seperate mesh buffer // create a separate mesh buffer
if ( 0 == buffer ) if ( 0 == buffer )
{ {
buffer = new scene::SMeshBufferLightMap(); buffer = new scene::SMeshBufferLightMap();

View File

@ -427,7 +427,7 @@ CSceneManager::~CSceneManager()
} }
//! gets an animateable mesh. loads it if needed. returned pointer must not be dropped. //! gets an animatable mesh. loads it if needed. returned pointer must not be dropped.
IAnimatedMesh* CSceneManager::getMesh(const io::path& filename, const io::path& alternativeCacheName) IAnimatedMesh* CSceneManager::getMesh(const io::path& filename, const io::path& alternativeCacheName)
{ {
io::path cacheName = alternativeCacheName.empty() ? filename : alternativeCacheName; io::path cacheName = alternativeCacheName.empty() ? filename : alternativeCacheName;
@ -450,7 +450,7 @@ IAnimatedMesh* CSceneManager::getMesh(const io::path& filename, const io::path&
} }
//! gets an animateable mesh. loads it if needed. returned pointer must not be dropped. //! gets an animatable mesh. loads it if needed. returned pointer must not be dropped.
IAnimatedMesh* CSceneManager::getMesh(io::IReadFile* file) IAnimatedMesh* CSceneManager::getMesh(io::IReadFile* file)
{ {
if (!file) if (!file)

View File

@ -40,10 +40,10 @@ namespace scene
//! destructor //! destructor
virtual ~CSceneManager(); virtual ~CSceneManager();
//! gets an animateable mesh. loads it if needed. returned pointer must not be dropped. //! gets an animatable mesh. loads it if needed. returned pointer must not be dropped.
virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName) IRR_OVERRIDE; virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName) IRR_OVERRIDE;
//! gets an animateable mesh. loads it if needed. returned pointer must not be dropped. //! gets an animatable mesh. loads it if needed. returned pointer must not be dropped.
virtual IAnimatedMesh* getMesh(io::IReadFile* file) IRR_OVERRIDE; virtual IAnimatedMesh* getMesh(io::IReadFile* file) IRR_OVERRIDE;
//! Returns an interface to the mesh cache which is shared between all existing scene managers. //! Returns an interface to the mesh cache which is shared between all existing scene managers.
@ -124,7 +124,7 @@ namespace scene
virtual IOctreeSceneNode* addOctreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0, virtual IOctreeSceneNode* addOctreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0,
s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false) IRR_OVERRIDE; s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false) IRR_OVERRIDE;
//! Adss a scene node for rendering using a octree. This a good method for rendering //! Adds a scene node for rendering using a octree. This a good method for rendering
//! scenes with lots of geometry. The Octree is built on the fly from the mesh, much //! scenes with lots of geometry. The Octree is built on the fly from the mesh, much
//! faster then a bsp tree. //! faster then a bsp tree.
virtual IOctreeSceneNode* addOctreeSceneNode(IMesh* mesh, ISceneNode* parent=0, virtual IOctreeSceneNode* addOctreeSceneNode(IMesh* mesh, ISceneNode* parent=0,
@ -141,7 +141,7 @@ namespace scene
const core::vector3df& lookat = core::vector3df(0,0,100), const core::vector3df& lookat = core::vector3df(0,0,100),
s32 id=-1, bool makeActive=true) IRR_OVERRIDE; s32 id=-1, bool makeActive=true) IRR_OVERRIDE;
//! Adds a camera scene node which is able to be controlle with the mouse similar //! Adds a camera scene node which is able to be controlled with the mouse similar
//! like in the 3D Software Maya by Alias Wavefront. //! like in the 3D Software Maya by Alias Wavefront.
//! The returned pointer must not be dropped. //! The returned pointer must not be dropped.
virtual ICameraSceneNode* addCameraSceneNodeMaya(ISceneNode* parent=0, virtual ICameraSceneNode* addCameraSceneNodeMaya(ISceneNode* parent=0,
@ -151,7 +151,7 @@ namespace scene
, f32 rotX = 0.f, f32 rotY = 0.f , f32 rotX = 0.f, f32 rotY = 0.f
) IRR_OVERRIDE; ) IRR_OVERRIDE;
//! Adds a camera scene node which is able to be controled with the mouse and keys //! Adds a camera scene node which is able to be controlled with the mouse and keys
//! like in most first person shooters (FPS): //! like in most first person shooters (FPS):
virtual ICameraSceneNode* addCameraSceneNodeFPS(ISceneNode* parent = 0, virtual ICameraSceneNode* addCameraSceneNodeFPS(ISceneNode* parent = 0,
f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, s32 id=-1, f32 rotateSpeed = 100.0f, f32 moveSpeed = .5f, s32 id=-1,
@ -641,7 +641,7 @@ namespace scene
//! file system //! file system
io::IFileSystem* FileSystem; io::IFileSystem* FileSystem;
//! GUI Enviroment ( Debug Purpose ) //! GUI Environment (debug purpose)
gui::IGUIEnvironment* GUIEnvironment; gui::IGUIEnvironment* GUIEnvironment;
//! cursor control //! cursor control

View File

@ -3337,7 +3337,7 @@ void CBurningVideoDriver::setMaterial(const SMaterial& material)
//if (maxTex < 4) texture3 = 0; //if (maxTex < 4) texture3 = 0;
//todo: seperate depth test from depth write //todo: separate depth test from depth write
Material.depth_write = getWriteZBuffer(in); Material.depth_write = getWriteZBuffer(in);
Material.depth_test = in.ZBuffer != ECFN_DISABLED && Material.depth_write; Material.depth_test = in.ZBuffer != ECFN_DISABLED && Material.depth_write;

View File

@ -332,7 +332,7 @@ struct ALIGN(16) sVec4
out.z = (z * l) + ofs; out.z = (z * l) + ofs;
} }
//shader suppport //shader support
sVec4(const sVec4& a, double _w) sVec4(const sVec4& a, double _w)
{ {
x = a.x; x = a.x;

View File

@ -14,7 +14,7 @@ namespace gui
class IGUIElement; class IGUIElement;
class IGUIEnvironment; class IGUIEnvironment;
//! Interface making it possible to dynamicly create gui elements //! Interface making it possible to dynamically create gui elements
class CGUIEditFactory : public IGUIElementFactory class CGUIEditFactory : public IGUIElementFactory
{ {
public: public:

View File

@ -38,7 +38,7 @@ namespace gui
//! update absolute position //! update absolute position
virtual void updateAbsolutePosition(); virtual void updateAbsolutePosition();
//! this shoudln't be serialized, but this is included as it's an example //! this shouldn't be serialized, but this is included as it's an example
virtual const c8* getTypeName() const { return "textureCacheBrowser"; } virtual const c8* getTypeName() const { return "textureCacheBrowser"; }
//! Returns pointer to the close button //! Returns pointer to the close button