Commit Graph

387 Commits

Author SHA1 Message Date
cutealien
298623541b Fix number overflows in TGA loader causing crashes
Image size calculation could overflow s32 in one place (but not others where it was done correct), which first lead to wrong amount of memory getting allocated for image data and later crash in the CColorConverter.
Thanks @sfan5 for his fuzzing tests @https://github.com/minetest/irrlicht/issues/236
and @erlehmann for passing them on: https://irrlicht.sourceforge.io/forum/viewtopic.php?t=52925
Also updating changes.txt with TGA loader changes from this and previous commits.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6535 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-23 19:01:01 +00:00
cutealien
9f48103263 Fix crash caused by memory overwriting in TGA loader caused by bad RLE data
From sfan5's fuzzing test reported in Minetest here: https://github.com/minetest/irrlicht/issues/236
Was missing test if it writes beyond allocated memory which can be triggered by TGA's which lie in their RLE data.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6534 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-23 18:33:46 +00:00
cutealien
74d3a9967f TGA images with palettes in 24 or 32 bit now create 32 bit images
Was creating 16-bit images for those before.
Could also support 24-bit images, but either we need another convert function or another palette for that (the 16 and 32 bit both work with 32 bit palettes, the 24 bit conversion function only with 24 bit palettes)

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6533 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-23 17:08:43 +00:00
cutealien
811a9f3463 Fix TGA's with bad palette colors reading from behind palette memory
TGA's can claim to use less palette colors than they later do.
We only support 8-bit palettes, so to make this safer lets just always allocate at least 256 bytes.
Thanks @erlehmann for report and testcase: https://irrlicht.sourceforge.io/forum/viewtopic.php?p=307191
Based on Minetest bug report: https://github.com/minetest/irrlicht/issues/236


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6532 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-23 16:34:42 +00:00
cutealien
e81038237b Add some comment that camera FOV is vertical
Parameter already called fovy, but shouldn't hurt to mention it twice

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6531 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-23 14:24:36 +00:00
cutealien
7ff82528f3 Unify matrix4::buildProjectionMatrixPerspectiveFov functions
We had 4 near identical functions, those now all call buildProjectionMatrixPerspectiveFov
They were a bit hard to check for errors otherwise.
Especially with the tiny confusing non-differences like one using (a-b) and other -(b-a)
Also new one uses matrix template parameter in case someone needs for example a high-precision matrix.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6530 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-09-22 16:06:40 +00:00
cutealien
c602a39598 Enable MultiProcessorCompilation in VC17 project file
No reason to not have several times faster build-times

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6529 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-17 10:12:28 +00:00
cutealien
bd4ce386a2 Clean-up include dependencies (video namespace)
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6528 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-15 18:42:05 +00:00
cutealien
ce1cdd2543 Clean-up include dependencies (scene namespace)
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6527 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-14 22:01:22 +00:00
cutealien
f83697d0bb Clean-up include dependencies
Files in irr namespace
Also some spelling fixes

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6526 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-14 20:38:23 +00:00
cutealien
80ce85ecc2 Clean-up include dependencies in gui and io modules
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6525 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-13 20:19:25 +00:00
cutealien
1d58677e18 Clean up include dependencies in public headers
Removing includes which were not needed by headers
Note that if you include those headers directly (instead of including irrlicht.h) you may have to add some new includes now.
Thought I generally tried to avoid removing headers where it leads to too much changes in user-code
Reason was mainly that IntelliSense in VisualStudio 17.7 added a new feature which shows those unused headers :)
Has to be used a bit careful as it doesn't know about defines and other platforms
And I only did clean up public headers so far (will probably do some more later or another time)

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6524 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-13 15:31:42 +00:00
cutealien
dc6d89a170 Fix compiling example 21
Somehow was broken since fixing the spelling of tessellation and never noticed

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6523 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-13 15:25:54 +00:00
cutealien
e2a742e2fc Fix compile error with OS X 10.10 SDK, bug #463
Thanks @Ryan Schmidt for report and patch: https://sourceforge.net/p/irrlicht/bugs/463


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6522 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-04 15:46:17 +00:00
cutealien
2149bfb317 Merging r6511 through r6520 from branch releases/1.8 to trunk
Note: Due to OSX always failing merge OSX it's rather applying a second patch
from Ryan Schmidt from bugreport #462 to trunk
(Not sure why svn merging always fails for OSX. Probably related to MacOSX files getting moved in the past. Was that done without svn move commands? I guess that can't be fixed anymore now)


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6521 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-04 10:22:58 +00:00
cutealien
03fc9c73b5 Add missing word in changes.txt
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6517 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-03 19:09:22 +00:00
cutealien
6f60edbded Merging r6511 through r6515 from branch releases/1.8 to trunk
Note that 6514 couldn't be merged as the xcode project seems to have been rewritten and the irrFramework-Info.plist no longer exists in trunk.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6516 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-03 01:11:01 +00:00
cutealien
7ecaa18949 Merging r6506 through r6510 from branch releases/1.8 to trunk
Note those were mostly backport, so trunk already had most changes.
Also we've not merged all from 1.8 branch, will need another merge (backports tend to cause lots of ugly conflicts, so have to split this a bit)


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6515 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-08-03 00:59:44 +00:00
cutealien
2bfe7506c2 Optimization in quaternion::rotationFromTo from Robert Eisele
Turns out we can avoid a square root and a division.
Patch comes even with proof: https://raw.org/proof/quaternion-from-two-vectors
(I also tested it a while and indeed got same results)


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6511 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-07-30 16:34:24 +00:00
cutealien
f7de9091a1 Remove comment that addRenderTargetTextureCubemap only works in d3d9
It works since quite a while also in OpenGL


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6510 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-07-28 13:48:12 +00:00
cutealien
27a73a81c6 Merging r6423 through r6505 from branch releases/1.8 to trunk
Those were backports from trunk to 1.8 so only changes.txt changed


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6506 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-07-26 15:31:41 +00:00
cutealien
35a0c4df8f Enhance shader material to show how to pass material values
Also document that gl_FrontMaterial is no longer supported in Irrlicht 1.9 (this has been the case for a few years, I just never noticed this was changed as I never even knew that was possible in the past...). Will keep it that way is it's definitely going in the right direction (getting rid of legacy support and going towards OpenGL core instead),

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6498 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-06-24 15:42:31 +00:00
cutealien
cdcb8274ee Improve documentation
What Irrlicht calls ShaderConstants is called uniforms by everyone else. So let's mention this at least.
Also reworked setVertexShaderConstant interface had an example for the old interface in the header.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6497 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-06-12 19:26:43 +00:00
cutealien
a44e5e3d17 Add updateBoundingBox parameter to IMeshBuffer::append and some fixes and optimizations
Fix: When appending to an empty mesh boundingbox has to be initialized with first position
Adding updateBoundingBox parameter as there is a bit costs involved in updating that and it might not be necessary at that point
Default is still to do it - and with the default parameter it's at least compile compatible to old interface (unless users created their own meshbuffers).
Optimizing the copying of vertices in CDynamicMeshBuffer::append by using memset when possible instead of pushing each vertex (which goes through quite a few virtual functions)

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6496 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-17 14:31:50 +00:00
cutealien
7c92944860 Don't let MeshBuffer append functions shrink memory as this prevents optimizations
Couldn't allocate enough memory before appending several buffers for all of them as first append shrunk the memory again.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6495 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-16 16:33:30 +00:00
cutealien
428fcca7fb CDynamicMeshBuffer::append can now handle appending meshbuffers with different vertex/index types
Doesn't change it's own type - so can still drop data. Or overflow 16-bit buffers (which creates broken models, but no crashes).
But it no longer has a problem adding 16-bit index-buffers to a 32-bit index-buffer for example.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6494 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-16 16:05:24 +00:00
cutealien
01588b58eb Get (more) append functions working for CMeshBuffer and CDynamicMeshBuffer
Some in CMeshBuffer got disabled in svn r1515 (before Irrlicht 1.7) without comment.
I suspect reason might have been that they are a bit unsafe and it was meant to be reworked. 
Maybe was planned to put that into MeshManipulator?
And CDynamicMeshBuffer never had them.
Anyway, it's useful stuff and having functions do nothing doesn't help. So now they do at least basic work.
Meaning - as long as index and vertex types are identical it's possible to attach meshbuffers again.
While totally ignoring things like 16-bit index overflow for now (so could be improved).
It would probably be better if attach functions had info about vertex/index types, but just keeping interface as it is/was for now.
This also fixes Bug #310 reported by Gaz.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6493 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-15 17:28:42 +00:00
cutealien
31931b0455 Fix problems in rendering nodes outside SceneManager caused by new render-per-buffer code
Did no longer render nodes which were rendered in SceneManager + outside SceneManager if they didn't have the per-buffer-rendering enabled.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6491 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-09 10:11:49 +00:00
cutealien
79e435d02a Reduce header dependencies in IVideoDriver.h
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6490 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-08 16:19:31 +00:00
cutealien
2a04d747d1 Fix: r6469 broke fixed function materials when shader materials where created but not used
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6489 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-08 14:15:49 +00:00
cutealien
9ce63bc7d3 Fix SMaterialLayer operator!= and optimize operator=
SMaterialLayers are now identical when both have identity matrices.
Before it didn't consider them identical when one layer had set the identity matrix explicitly and the other didn't.
Generally didn't matter, just caused very rarely some extra state switches in the drivers. And just as rarely had a cheaper comparison. Just seems more correct this way.

operator= no longer releases texture memory which was allocated at one point. 
Unless explicitly requested such memory is now always released later in the destructor.
This can avoid quite a few memory allocations/released in the driver. Usually not a noticeable performance difference on most platforms. But it can help avoid memory fragmentation.
We instead use an extra bool now to tell if the texture memory is used. So slight increase in SMaterialLayer and SMaterial size. But I did a quick performance test and this had no negative influence here, while it did improve speed in the case where it switched between material layers using/not using texture matrices a bit.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6488 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-07 14:51:09 +00:00
cutealien
c57da57edc Remove IMaterialRendererServices::setBasicRenderStates
Wasn't ever used by anything and not that well defined anyway.
So they all just passed it on to the drivers. And then sometimes the driver version was called and sometimes the IMaterialRendererServices version. So now everything just calls the driver - all places which need it have access to the driver anyway. Also made the driver version non-virtual for now. If someone actually really needs this for some reason I can add it back as virtual function directly in IVideoDriver. But I doubt it - the interface was hardly accessible until recently and originally only meant for internal stuff.
GLES version still to do, but checked them earlier and they also just do nothing with it.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6486 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-05 18:47:22 +00:00
cutealien
3683a2f8ee Reset last debug menu entry after reloaded the model in example 09
Reset 'em all! Was one short ;-)


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6485 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-05 17:45:35 +00:00
cutealien
c928d1e1a6 Unify newlines
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6484 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-05 12:30:28 +00:00
cutealien
c4504c1d48 Add IMeshSceneNode::setNodeRegistration to allow registering MeshSceneNodes to the SceneManager per buffer instead of per node
So far SceneManager always sorted Nodes per render stage.
Now we allow sorting per mesh-buffer per render stage by creating a new node for each mesh-buffer.
It's only supported for CMeshSceneNode so far.

This allows to enable better transparency sorting for meshes which have transparent buffers.
Previously those always got rendered in the order in which they got added and ignored mesh-buffer bounding-boxes, but just used the bbox of the full mesh. Now they can use the bbox for each meshbuffer which can sometimes avoid render errors.

Also depending on the scene this can be quite a bit faster because it can help reduce texture changes. We sort solid nodes per texture, but only per node. So nodes with several textures had a texture switch between rendering each meshbuffer. And those are rather expensive in Irrlicht right now (and we support no bindless textures yet...)

Lastly it's now also used to buffer the render-stage. Checking this twice (once in registering the node and once in render) constantly showed up in the profiler. Which was a bit surprising really, but anyway - now it's gone.

I tried to keep it working for all cases we had before (all kind of situations, like when people may want to call render() outside the SceneManager). But not (yet) supporting the case of changing the meshbuffers (adding or removing some) without calling setMesh() again. Reason is that this wasn't well supported before either (node materials never updated). So for now I just assume people will call setMesh() again when they change the mesh.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6483 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-04 16:07:18 +00:00
cutealien
9679fa7006 Use ConstIterator instead of Iterator in a few places
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6482 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-02 18:43:45 +00:00
cutealien
04d814ee31 Allow nodes ignoring parent transformations with ESNUA_RELATIVE
New AbsPosUpdateBehavior which makes updateAbsolutePosition calls behave as if a node had no parent.
Allows for micro optimizations in cases where we have non-moving root node (all scenenodes are always added to the SceneManager which is generally not moved but it's transformation is still multiplied each frame for each node)
As a side-effect this also allows abusing the SceneManager to group objects without affecting transformations.
No real extra cost since I added ESNUA_TRANSFORM_POSITION already.
Thought turns out those matrix transformations are so fast that I also didn't noticed any difference in tests with > 20.000 nodes.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6481 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-05-02 16:05:22 +00:00
cutealien
1b4912fcc4 Collada loader can now handle 32-bit meshbuffers
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6480 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-29 15:12:49 +00:00
cutealien
55e29d3347 Add SMaterialLayer::hasSetTextureMatrix and SMaterialLayer::resetTextureMatrix
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6479 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-28 17:46:30 +00:00
cutealien
13619d8fdf Remove unused variable in CGUIContextMenu
y was set in 2 places, but never used for anything.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6476 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-27 19:46:05 +00:00
cutealien
36fc0bc8d2 Spelling fixes
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6475 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-27 18:44:33 +00:00
cutealien
80788a4198 More fixes for CCubeSceneNode with multi-material cube
CCubeSceneNode::getMaterialCount now returning correct count
CCubeSceneNode::clone now cloning all materials

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6474 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-27 12:58:55 +00:00
cutealien
8b0534d4b7 Fix CCubeSceneNode using correct material per side for multi-material cubes
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6473 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-27 12:50:20 +00:00
cutealien
28856e78b6 CCubeSceneNode can now handle new multi-material cube type
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6472 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-26 18:52:08 +00:00
cutealien
e55af78b31 No longer move context sub-menu to left if there's even less space there
Probably still moving too often to the left - should find some better solution.
But at least some improvement.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6471 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-25 13:14:52 +00:00
cutealien
37d821dcc3 Add MaterialType in COpenGLSLMaterialRenderer::OnSetMaterial back in
Shouldn't have been removed with last commit.
But adding some comments as it's slightly confusing.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6470 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-24 16:01:13 +00:00
cutealien
c4bbbe1aaf Add IMaterialRendererServices::startUseProgram/stopUseProgram
This makes it possible to set high-level shader constants (which are attached to shader programs) to be set outside
of OnSetConstants.
IShaderConstantSetCallBack::OnCreate has it set automatically now so it works the same as OnSetConstants.
D3D9 and burnings both work different, so there hadn't been a problem with those.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6469 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-24 14:46:09 +00:00
cutealien
16c960c5ed Add IShaderConstantSetCallBack::OnCreate to allow earlier access to IMaterialRendererServices
Accessing IMaterialRendererServices outside of OnSetConstants can be useful and Irrlicht made this a bit too hard to access.
Also OnCreate allows actually for nicer code where initialization and update of shader constants are strictly separated (see changed example).

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6465 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-21 14:41:01 +00:00
cutealien
02165eccc8 CD3D9HLSLMaterialRenderer now implementing IMaterialRendererServices itself
Basically now the same as GLSL material renderer already worked.
Before it was using IMaterialRendererServices from CD3D9Driver, but there had been several problems with that:
- The d3d9 driver called functions through the CD3D9MaterialRenderer interface, but CD3D9HLSLMaterialRenderer is not (or maybe no longer?) derived from that class. Reason it still worked was accidental luck - the same functions had been in the same order and due to casts the compiler wasn't noticing it was calling the functions of an unrelated class.
- It was making calls to set shader constants depend on the currently set material in the driver. Which was not necessary and just prevents we can use the IMaterialRendererServices interface without setting the material first (how I found the bug).
Still some problems left for now:
- There's 2 ways to call shader constants. One seems to be only used by hi-level shaders which links constants to the shader. The the other only by low-level shaders which uses global (shader independent) registers.
So maybe this should be 2 interfaces? But not certain, glsl material renderer seems to prevent setting the global registers, but maybe those could be used additionally? I've still allowed it for now in HLSL, just in case it had it's uses.
- setBasicRenderStates probably should not be in IMaterialRendererServices. I'm not seeing any case where this isn't just passed on to the driver. And all classes using it have access to the driver unless I missed one. So probably can just avoid that additional indirection and kick that out of the IMaterialRendererServices interface.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6464 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-21 14:04:57 +00:00
cutealien
ce3dcfde56 Fix recently broken scroll behaviour of listbox with moveOverSelect
This also fixes the combobox which users the listbox like that.
This got broken in [r6454] which had fixed the events send out by the listbox
Note: Still a bit strange behaviour when leaving the combobox at the bottom, but that was already that way in Irrlicht 1.8, so I've got to investigate that on it's own.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6463 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-04-19 15:17:39 +00:00