207 Commits

Author SHA1 Message Date
275e152523 v2 2023-09-18 21:47:45 +02:00
4ca90e3dfd afl-fuzz 2023-09-18 15:48:40 +02:00
679dfd3343 Fix CNullDriver::removeTexture() segfault
`Textures` is not an one-to-one mapping.
Minetest still crashes with this commit but that's because
it attempts to double-free a texture.
broken by 7298b46504
2023-09-13 15:16:57 +02:00
f9d7a632f5 CI: Add MinGW builds with SDL 2023-09-13 13:26:01 +02:00
dc43583a2c CI: Merge 32- and 64-bit MinGW builds 2023-09-13 13:26:01 +02:00
03fd4ff533 Remove unused IVideoDriver::getTextureByIndex and IVideoDriver::renameTexture
* getTextureByIndex is pretty useless (apart from iterating over all texture,
  which we don't do), as you can't get an id.
* renameTexture is broken anyway: The sort call does nothing because the array
  is still flagged as sorted.
2023-09-13 13:24:08 +02:00
b7292226b4 Remove the unnecessary sort in CNullDriver::addTexture 2023-09-13 13:24:08 +02:00
7298b46504 Use binary search in CNullDriver::removeTexture() 2023-09-13 12:33:50 +02:00
af20d9ff86 Remove deprecated function transformBox 2023-09-05 17:21:35 +02:00
00dd1f8ef3 Remove deprecated functionality of SMaterial 2023-09-05 17:21:35 +02:00
364cb37698 Remove deprecated methods from IVideoDriver 2023-09-05 17:21:35 +02:00
7ce9169d8d Remove deprecated method getOperatingSystemVersion 2023-09-05 17:21:35 +02:00
ebdb2e410b Remove deprecated member functions of IMeshCache 2023-09-05 17:21:35 +02:00
a28b8f9e91 Remove deprecated member functions
Removes deprecated member functions of IMaterialRendererServices.
2023-09-05 17:21:35 +02:00
6cd27d5dca Remove deprecated IImage member functions 2023-09-05 17:21:35 +02:00
04ab99f218 Removes deprecated function getNumber
Removes deprecated function getNumber as well as makes all
line terminators the proper CR LN combo.
2023-09-05 17:21:35 +02:00
d753c8b782 Remove deprecated functions related to FileSystem 2023-09-05 17:21:35 +02:00
6a3ed6428f Remove deprecated getBoneName method 2023-09-05 17:21:35 +02:00
3492fd0d2d Remove primitive types not supported in OpenGL 3+
I removed old primitive types that do not work with modern OpenGL.
2023-09-05 17:21:35 +02:00
c6b06533f3 Deduplicate KP_5 from KP_HOME 2023-09-01 15:54:55 +02:00
e609f5f263 Remove leftovers from D3D 2023-09-01 12:45:56 +02:00
ddecc0fae2 Inline a pointless function 2023-09-01 12:26:43 +02:00
dd3a34d674 Remove unused (I)Timer methods 2023-09-01 12:22:27 +02:00
0735220f86 Suppress a -Wunused-but-set-variable warning 2023-08-29 17:33:25 +02:00
0740d055ac Fix uninitialized memory error in operator- for ustring16 iterators 2023-08-29 17:33:25 +02:00
1d4672bd92 Remove the now unused SMaterialLayer::setFiltersMinetest method 2023-08-24 17:20:54 +02:00
ef3bab610d CIrrDeviceLinux: Fix type for NET_WM_PID XChangeProperty
This uses format=32 which in X11's API means a C type of long (with
restricted range when > 32 bits). pid_t is of unknown type, though on
Linux and FreeBSD it's a 32-bit type, so does not have the same size as
long on 64-bit architectures, and thus XChangeProperty reads outside its
bounds. Fix this by casting to and passing a long.
2023-08-15 20:42:12 +02:00
d98dc90b38 cleanup: only build some files on WIN32 and compile EGL only if needed 2023-08-01 20:53:25 +02:00
c311d01c07 Bump revision 2023-07-20 20:14:50 +02:00
d7f75ae882 gitignore: add vscode cmake extension support 2023-07-20 16:29:09 +02:00
e0d4d7d8b4 cleanup: get rid of the legacy #ifndef #define craziness 2023-07-20 16:29:09 +02:00
fb7a0e4298 2D rendering: Enable bilinear filter for downscaling textures
This looks much better and doesn't have any downsides (e.g. regarding pixel art).
2023-07-16 13:02:48 +02:00
a994c31ccf Expose all OpenGL filtering modes, use OpenGL names for them
Because of a review comment by numberZero.
2023-07-16 13:02:48 +02:00
c40045a40a Rename SMaterial::TextureLayer -> SMaterial::TextureLayers
It's not the "texture layer" of the material, but an array of texture layers.
2023-07-16 13:02:48 +02:00
c0ef1092c0 Rename E_MATERIAL_FLAG -> E_MATERIAL_PROP
The enum values don't reference material flags, but material properties.
2023-07-16 13:02:47 +02:00
5ececc7d29 Split up texture filtering properties of SMaterialLayer into MinFilter and MagFilter
You can now set the filter used when scaling textures down and the filter used when scaling textures up separately.
2023-07-16 13:02:26 +02:00
9e0189019e Refactor the way you set material properties
Instead	of using SMaterial::setFlag, you now set them directly on SMaterial or SMaterialLayer.
2023-07-16 13:02:25 +02:00
b249e4523d Use precise y-direction scroll values in SDL 2023-07-03 22:46:08 +02:00
041377c24c CI: Add MSVC/SDL builds 2023-07-03 21:03:37 +02:00
83699a835d Remove content-less comments 2023-06-15 10:01:34 +02:00
98589d2fd2 Remove unused fixed function materials 2023-06-15 10:01:34 +02:00
8c856408f5 Remove use of std::iterator
(Deprecated in C++17.)
2023-06-14 09:45:16 +02:00
cbc7aeb302 Bump C++ std to 17 2023-06-14 09:45:16 +02:00
09af5ac00d Actually fix Android build 2023-06-06 16:20:06 +02:00
2c6efbdf06 Remove native_app_glue linkage
We don't provide android_main(), Minetest does. This also didn't even work correctly.
2023-06-04 19:56:30 +02:00
510976f130 Prefer GLVND at CMake>=3.11
CMake 3.10 introduced GLVND support. CMake 3.11 introduced CMP0072,
which prefers GLVND when NEW behavior is set. I set default policies to
3.11 for CMake versions >=3.11 and did not bother with requesting GLVND
for CMake 3.10.
2023-05-14 20:54:03 +02:00
b958fdc271 Fix casing for Android device name (MATCHES is case sensitive) 2023-05-11 22:34:08 +02:00
1387370260 OpenGL3: Sort out texture color format support 2023-04-29 13:07:57 +02:00
49b6ccde72 SDL: Implement getDisplayDensity() and setWindowIcon() 2023-04-29 13:06:35 +02:00
acbc90a000 Add the platform-dependent stuff from renderingengine.cpp 2023-04-29 13:06:35 +02:00
6a2a569233 Add IImage::copyToNoScaling
(Useful for const-correctness.)
2023-04-29 13:06:35 +02:00
1f15fd0805 OpenGL3: Support min/max blend modes 2023-04-24 21:43:36 +02:00
81ad195aa3 OpenGL3: New extension listing system 2023-04-23 09:48:04 +02:00
13680ef42d OpenGL3: Use DrawBuffer[s] from mt_opengl 2023-04-18 23:22:53 +02:00
44f7c22bbf OpenGL3: Version asserts 2023-04-18 23:22:53 +02:00
2e477a07d1 OpenGL3: Add version check helper 2023-04-18 23:22:53 +02:00
78d0819a2c Add missing include 2023-04-18 23:22:53 +02:00
df07b3bf99 OpenGL3: Remove stencil buffer presence test 2023-04-18 23:22:53 +02:00
523590e16c OpenGL3: Refuse 3.0 and 3.1 2023-04-18 23:22:53 +02:00
8cf02ea27f OpenGL3: ExtensionHandler::initExtensionsNew: use GetInteger 2023-04-18 23:22:53 +02:00
efb660e7ed OpenGL3: drop unused ExtensionHandler functions 2023-04-18 23:22:53 +02:00
5f88555ed3 OpenGL3: restore MRT support 2023-04-18 23:22:53 +02:00
4ee1ab261e OpenGL3: Add driver-dependent feature checks 2023-04-18 23:22:53 +02:00
ab628e641c OpenGL3: Add two missing OpenGL extensions to COGLESCoreExtensionHandler 2023-04-18 23:22:53 +02:00
1d782702e1 OpenGL3: new version format 2023-04-18 23:22:53 +02:00
c4ab49201b Fix compile warning when appending UTF-8/ASCII strings to ustring16
String constants are (const char *), but UTF-8 strings must be treated as
an array of bytes when fiddling with the bits.

The following comparison fails without this change, as uchar8_t is a
signed char, which cannot be 0xC0:

   const uchar8_t* c2 = other;
   ...
   else if (c2[l] == 0xC0 || c2[l] == 0xC1)
   ...
2023-04-15 09:43:40 +02:00
896c825b9e Fix ComboBox changing on scroll when in a scroll container (#192) 2023-04-14 19:58:13 +01:00
7a3fc62ada Haiku: build fix 2023-04-11 20:16:35 +02:00
09043e3da7 Update MinGW dependencies 2023-04-11 18:19:36 +02:00
2d81374b34 Revert "Fix: Listbox was sometimes sending EGET_LISTBOX_SELECTED_AGAIN instead of EGET_LISTBOX_CHANGED."
This broke scrolling in listboxes, as they would always reset to top position.
reverts commit 1967d71cfb
2023-04-11 14:36:44 +02:00
aa1696a7e6 Use a buffer for quads indices
also use glDrawRangeElements for quad drawing
2023-04-08 19:08:03 +02:00
e01f285c8f Extract and use singular CNullDriver::checkImage 2023-04-08 19:07:16 +02:00
5eb607f86f Drop createImagesFromFile in favor of createImageFromFile 2023-04-08 19:07:16 +02:00
fc0440ff89 Drop IImageLoader::loadImages as only IImageLoader::loadImage is usable 2023-04-08 19:07:16 +02:00
462657960d OpenGL3: Drop always-zero vSpecularColor from the shaders 2023-04-07 17:42:54 +02:00
6a152e8629 OpenGL3: Drop unused material property uniforms 2023-04-07 17:42:54 +02:00
718ba69e1b OpenGL3: Drop unused fixed-function emulation materials 2023-04-07 17:42:54 +02:00
54314691ec Fix mistake in a677f5a01a 2023-04-06 15:00:12 +02:00
36a3a7f349 Don't compile unused driver sources 2023-04-06 12:38:25 +02:00
ca5f005b74 Fix OpenGL3 driver to compile standalone
also test this configuration in CI
2023-04-06 12:38:25 +02:00
e850bd102a Minor adjustments to configuration flow 2023-04-06 12:12:46 +02:00
a677f5a01a Only try to link libraries when relevant feature is enabled
fixes #182
2023-04-06 11:56:04 +02:00
f5d3448b17 Document new CMake options 2023-04-06 11:35:30 +02:00
3a074e4124 Merge branch 'opengl3' of https://github.com/numberZero/irrlicht 2023-04-06 11:20:03 +02:00
70ee4b05aa Indicate chosen OpenGL ES 2 driver during configuration 2023-04-05 22:52:43 +03:00
58a96b7d23 Mark the repo as root in the editorconfig
Necessary due to CR/LF mess, it shouldn’t inherit the LF setting from Minetest.
2023-04-02 21:50:56 +02:00
DS
ba1cd19983 Use non-static member vars for SDL clipboard / primary selection buffers 2023-03-26 14:13:58 +02:00
a67f3003de Revert "Avoid some broken calculations for IBoneSceneNode positions."
This was reported to cause broken models in some cases.
reverts commit edb381bd50
2023-03-26 14:09:40 +02:00
4dda28450f Provide sources as private to IRRVIDEOOBJ 2023-03-25 11:26:52 +03:00
219b7fd7d2 Fix line endings in the new driver 2023-03-25 11:11:09 +03:00
28d0e0644c Add shaders for COpenGL3DriverBase
Currently, they are identical to OGLES2 shaders, except of version specification.
2023-03-25 11:10:05 +03:00
d97d1708d6 Resolve conflicts with master 2023-03-25 10:42:47 +03:00
799c8b936f SDL: Support primary selection
Requires SDL >= 2.25.0 (newest master).
2023-03-24 17:59:06 +01:00
8da1bcf58b SDL: Support clipboard 2023-03-24 17:59:06 +01:00
d86abb40c1 CGUIEditBox: Use primary selection
This is essentially the same as the commit in the minetest repo for GUIEditBox.
2023-03-24 17:59:06 +01:00
53b9eaa831 Implement X11 primary selection 2023-03-24 17:59:06 +01:00
1967d71cfb Fix: Listbox was sometimes sending EGET_LISTBOX_SELECTED_AGAIN instead of EGET_LISTBOX_CHANGED.
When pressed mouse was moved over an item before releasing the mouse button it was sending immediately EGET_LISTBOX_SELECTED_AGAIN instead of expected EGET_LISTBOX_CHANGED (mouse  move changes do not send any events).

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6454 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
c5373262ca Use qualifed id instead of virtual function calls in CVertexBuffer constructors
Another find by cppcheck tool

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6448 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
939b3f7bfb Avoid undefined arithmetic on nullptr in buffer_offset function
Not quite sure why it was done that way. Maybe to ensure we work with byte-pointers of correct size or something?
Anyway, this doesn't seem to be defined in c++, so let's try working with a cast instead.
Just something cppcheck tool complained about.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6447 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
9c2c91776e Fix spelling of enums in header comments
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6445 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
6f3435f349 Prevent potential 0 pointer access when release not acquired joystick.
Found by clang analyser. Not sure if it could really ever have happened, but won't hurt to fix

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6443 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
9f9d22ca33 Fix some problems with CMatrix4::getRotationDegrees
- Only the getRotationDegrees without parameter is allowed to try fixing scale.
  My fault when I added a new function which takes scale parameter, that one is
  not allowed to be changed.
  On the up-side - we know have for the first time an option which works in cases only
  scale and rotation had been used and the user still has the correct scale.
  Before any solution for that was broken
- getRotationDegrees fixes 2 places which caused wrong results due to floating point inaccuracies
  New test for that got added
- Document the current restrains and problems of getRotationDegrees and getScale some more.
- Improve docs for other matrix4 functions.
- Add some comments about further improvements (I'll try if I find time)

Note: Irrlicht still assumes in at least 2 places (getting bone animations and Collada loader) that matrix
decomposing works. Which it doesn't yet for matrices which switch handedness (or have further transformations like skewing axes)
The bone animation is mostly fine for now with recent workaround (but that might cause other problems as it may be used too often), haven't checked Collada yet in detail.

TL/DR: This improves things with getRotationDegrees, but does not yet fix all troubles.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6439 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
edb381bd50 Avoid some broken calculations for IBoneSceneNode positions.
This is based on bugreport #458 reported by viwrap who also made a nice test-case model.
Note: While solution seems to work and would even be faster, I'm not 100% sure yet if there are no downsides.
The other solution seems to regard last column in matrices - thought I don't think we ever set or use that.
And I also haven't found out yet _why_ the original solution goes wrong.
But animation system uses right-hand quaternions unlike rest of Irrlicht which is obviously a bit dangerous, will have to check the conversions some day.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6438 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
8ffa7eafea Fix warning
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6434 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
2bff147904 Fix: Make CBillboardSceneNode bounding-box large enough to fit the billboard inside.
It still won't work yet for scaled boundingboxes (or parents being scaled).
But at least it's now large enough for typical unscaled boundingboxes.
Before it was always too small - even for the simplest quadratic billboard case seen without rotation.
Now it's always a bit too large, but that's way less of a problem (collisions still work and culling simply happens a bit less often, but not too often which is way worse)

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6431 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
3cf75cdce4 Fix IGUIElements not getting a tab order because of invisible or disabled parents.
First problem was that IGUIElement::getNextElement wasn't passing includeInvisible and includeDisabled flags recursively, so anything deeper than one level could fail if an element was disabled/invisible in between while it was created.
Second problem was that setTabOrder(-1) did ignore disabled elements. So when any parent was disabled when elements were created they never got a tab order.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6428 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
a7f9afd289 Avoid ambigious conversions when compiling with c++20
Yay, more ugly casts needed.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6427 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
98df6eae77 Unify & improve log messages
Lots of places where coders did not realize our Printer::log with hint adds a ": " string between message and hint
Which caused uglier messages in a few places (added documentation for that, maybe helps?)
Some added info in a few places
Some whitespace unification
Some spelling unification

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6414 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
3ce4b2b5dc Prevent crash when creating CCameraSceneNode while rendertarget has height 0
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6405 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
424eb85f4d Minor const changes.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6402 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
6a9e0f109c Avoid potential number overflows.
Found by VS code analyser

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6393 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
15e3f15b48 SpriteBank: error check on non existing textureNumber
seen in broken Fonts. unified getFrameNr

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6368 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
263f243523 S3DVertex initialize color always. It's derived classes now both accept const S3DVertex& constructor.
color intitialization has some cost, but we initialized all other values already (vectors are always set to 0).
Don't think it's a good idea to have one value around which is random.
S3DVertex2TCoords(S3DVertex& o) to S3DVertex2TCoords(const S3DVertex& o) simply because it makes more sense
S3DVertexTangents(const S3DVertex& o) added because I'll need it later (and no idea why only S3DVertex2TCoords got one of those before).

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6359 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
c5ee8c8397 CVertexBuffer no longer re-allocates stuff when type doesn't change
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6339 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
b0c03b6f3b Add documentation that sourceRect of draw2dImage is based on the OriginalSize
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6324 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
679d3a8ba7 Avoid some more warnings when working with CMatrix4<f64>
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6304 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
d1f441787a Avoid warnings when working with CMatrix4<f64>
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6303 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
739a9eaf7c IVideoDriver::setMaterialRendererName now using u32 for index like other similar functions
Other functions like getMaterialRendererName got switched to u32 in the past. I can see no reason why this one was left out, so changing it to be same as the rest.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6300 dfc29bdd-3216-0410-991c-e03cc46cb475
2023-03-24 17:09:11 +01:00
0acf0de2db Delete changes.txt
Gets in the way of cherry-picking and isn't up to date anyway.
2023-03-20 14:46:27 +01:00
52a0b9d8e5 Drop dependency on FileSystem from SceneManager 2023-03-19 19:47:43 +01:00
0160cdc51d Drop unused dependency of SceneManager on GUIEnvironment 2023-03-19 19:47:43 +01:00
5a1565072a Drop unused dependency on FileSystem in mesh loaders 2023-03-19 19:47:43 +01:00
25a7074c9a Remove all mentions of iOS 2023-03-14 17:54:08 +01:00
df8881898d Remove CIrrDeviceiOS 2023-03-14 17:54:08 +01:00
ba77d01c91 Error out early on unsupported SDL2+GLES1 combo 2023-03-13 19:16:06 +03:00
f641500d01 Add xvfb (for tests) 2023-03-13 18:45:50 +03:00
02c6449f0d Add CI for the new GL ES 2 driver 2023-03-13 18:40:11 +03:00
2331083837 Add CI for the new OpenGL 3 driver 2023-03-13 18:40:06 +03:00
d84dc18e13 Add OpenGL3 support to the autotests 2023-03-13 18:38:47 +03:00
ea0ca7f917 Small Fixes 2023-03-13 18:33:58 +03:00
82d1feb933 Accommodate lack of ETS_TEXTURE_1 2023-03-13 18:17:47 +03:00
d81db9dd6d Merge branch 'drop-irr-compile-config' into opengl3 2023-03-13 18:07:25 +03:00
6c68217426 Merge branch 'master' into drop-irr-compile-config 2023-03-13 18:05:36 +03:00
21c61e9973 Bump revision early 2023-03-11 15:12:05 +01:00
5a5a7d04b7 Drop IrrCompileConfig (#163) 2023-03-11 15:04:09 +01:00
b279810437 Consolidate import/export attribute definitions 2023-03-06 17:32:03 +03:00
e484698ba2 Restrict X11 options to X11 device 2023-03-06 14:22:48 +03:00
5f76be9380 Restore isDriverSupported, but in a cpp file 2023-03-06 14:22:48 +03:00
6de0afa8b3 Drop ETS_TEXTURE_1
The transformation state itself is still available via ETS_TEXTURE_0+1
2023-03-06 14:22:48 +03:00
1d43ea17ca Bump revision 2023-03-05 21:45:09 +01:00
a6d062ebd9 Apply suggestions from code review
Co-authored-by: sfan5 <sfan5@live.de>
2023-03-04 22:27:43 +03:00
2e9ed529b1 Restore obsolete constants as they are still used in some code I don’t want to touch 2023-03-03 22:01:50 +03:00
ceb53be9e3 Merge branch 'master' into opengl3 2023-03-03 22:01:30 +03:00
df28a4cc46 Fix ifdefs around includes in CIrrDeviceSDL 2023-03-03 21:23:07 +03:00
8dd8652f5f Split new GL3/GLES2 drivers
The classes are tiny wrappers currently but should they be customized, they are there
2023-03-03 20:29:36 +03:00
2932065346 Report as OpenGL 3 2023-03-02 03:03:17 +03:00
1326dfbcb1 Error out on unsupported configurations 2023-03-02 02:44:52 +03:00
1bbe341daa Support both OpenGL3 and GLES2 on SDL2 2023-03-02 02:44:52 +03:00
d6716ec31b Support GLES2 2023-03-02 02:41:58 +03:00
620f4869a1 Drop obsolete video drivers 2023-03-02 01:22:04 +03:00
05384fdc5e Unify drawing functions 2023-02-28 00:51:29 +03:00
48270029cd Drop obsolete stuff 2023-02-27 23:36:56 +03:00
c5ce853148 Unify quad drawing 2023-02-27 23:36:47 +03:00
4fba496917 Unify plain image drawing 2023-02-27 21:27:23 +03:00
79fdab0551 Drop obsolete IVideoDriver features 2023-02-27 21:26:46 +03:00
608aa150ff Load extensions the OpenGL 3 way 2023-02-27 20:32:06 +03:00
1f750cd7b2 Add debug handler 2023-02-27 20:31:51 +03:00
8c521939b9 Enumerate extensions in the OpenGL 3 way 2023-02-27 17:41:03 +03:00
cfa8dd7845 Request OpenGL 3.2 2023-02-27 17:39:28 +03:00
01295c9ce6 Add OpenGL3 renderer 2023-02-27 17:05:11 +03:00
5a95b40a0e Reduce IrrCompileConfig usage to files that actually need it 2023-02-22 21:11:12 +03:00
8efd4527f6 Drop _IRR_MATERIAL_MAX_TEXTURES_ 2023-02-22 21:11:12 +03:00
a0e1e39ea7 Drop _IRR_SCENEMANAGER_DEBUG 2023-02-22 21:11:12 +03:00
d8e09f14bd Drop _IRR_COMPILE_WITH_GUI_ 2023-02-22 21:11:12 +03:00
67f852be57 Drop obsolete configuration macros 2023-02-22 21:11:12 +03:00
5a2b807890 Move import/export macros into CMake 2023-02-22 21:11:12 +03:00
06db7b7ab7 Move platform detection to CMake 2023-02-22 21:11:12 +03:00
09e6eeb65b Remove irr::core::hash
Its use of std::unary_function was deprecated.
And it wasn't used anywhere.
2023-02-22 11:43:42 +01:00
839bdc1a65 Fix -Wignored-qualifiers warnings in irrUString.h 2023-02-22 11:43:42 +01:00
ea297196b7 Resolve some -Wreorder warnings 2023-02-22 11:43:42 +01:00
38f18eec56 Drop unused stuff from IrrCompileConfig 2023-02-21 18:16:39 +03:00
DS
5527b9f373 SDL: Use SDL_WINDOW_FULLSCREEN_DESKTOP and allow to maximize+fullscreen at once (#156) 2023-02-20 13:22:28 +01:00
cd3e784534 Refactor SDL input code to fix menu exit (#146) 2023-02-18 16:16:17 +01:00
DS
51dffc416a Add WindowMaximized creation parameter and isWindowMaximized() (#142) 2023-02-06 15:05:44 +01:00
8f13ae81e5 Merge pull request #154 from lhofhansl/skinned
Avoid reskinning joints for animated meshes twice for each frame.
2023-01-12 11:02:52 -08:00
3de3ff524a Avoid reskinning joints for animated meshes twice for each frame. 2023-01-07 16:59:02 -08:00
7d3142b969 Remove leftover code from software rendering 2023-01-02 21:21:53 +01:00
a9230e5f49 Delete profiler 2023-01-02 21:05:07 +01:00
b5a6dc0a15 Delete leak hunter 2023-01-02 20:37:18 +01:00
ce0d29df93 Update workflow to address deprecations 2022-12-31 12:30:10 +01:00
2ae816b5a6 Use swap_control from MESA and EXT before SGI (#151)
SGI extension does not support interval == 0 (disabling VSync)
2022-12-29 23:42:52 +01:00
61af99adfa Use swap_control from MESA and EXT before SGI
SGI does not support disabling vsync (interval == 0)
2022-12-29 22:48:36 +01:00
afbe41019c CGUITabControl: Center selected tab whenever possible
This greatly improves the navigation speed by clicking through the tabs
without losing track of the current scroll position.
2022-12-23 20:07:15 +01:00
05a00a8d91 Completely remove irrAllocator 2022-12-23 19:56:21 +01:00
07fd32da50 Replace core::string implementation with std::basic_string 2022-12-23 19:17:08 +01:00
735af8eec6 Add missing string tests 2022-12-23 19:17:08 +01:00
29a448de4d Point to Irrlicht license in root 2022-11-26 19:32:03 +01:00
DS
1579ce2740 SDL: implement cursor icon API (#135) 2022-11-12 15:52:39 +01:00
b9e0641203 Add unittests for irrString 2022-11-11 16:25:49 +01:00
6f98515f34 Fix two irrString bugs
* append() missing null-termination
* eraseTrailingFloatZeros() was accidentally broken, comment it out for now
2022-11-11 16:24:27 +01:00
a549d0bfed Add setRelativeMode for SDL driver (#123) 2022-10-24 21:19:11 +02:00
a0af653c3d Bump revision early 2022-10-24 21:17:53 +02:00
cac4e62852 Fix buffer overflow in COBJMeshFileLoader 2022-10-24 11:07:51 +02:00
d6766fb8f4 Add Windows build steps to README (#129) 2022-10-20 22:02:37 +02:00
e46ab74859 Fix line drawing: Explicitly draw both first & last pixel (#110) 2022-10-16 23:47:51 +02:00
DS
57705d57cf SDL: Always set X, Y, Shift and Control in mouse input events 2022-10-16 17:42:15 +02:00
e9908ca545 Add build with SDL2 to CI 2022-10-15 11:13:20 +02:00
2709c937d9 Fix SDL device to work with null driver 2022-10-15 11:13:20 +02:00
59fc4401f1 Replace _IRR_OVERRIDE_ macro with override keyword
The commit also establishes a precedent of leaving off the `virtual`
keyword in overrides. Although not strictly necessary, I believe this is
good for readability because it makes it clear it is an override and not
a pure virtual function, and it helps keep line lengths shorter. We
should move towards eliminating the macro altogether, but the definition
has been left in with a note on deprecation so that in-progress work
will not suffer merge conflicts.
2022-10-15 01:09:09 +02:00
f3a1f9f656 Move Ubuntu builds into docker to keep them working 2022-10-14 16:09:17 +02:00
1128d9deab win32: use the unicode window instead of ansi window (#138) 2022-10-14 15:52:10 +02:00
9b541f2948 Fix buffer size for wchar-multibyte conversion 2022-10-14 15:47:49 +02:00
1cf0f3bef0 Fix typo in CXMeshFileLoader.cpp (#133)
This patch was provided from J. Puydt to Debian.
Origin: https://salsa.debian.org/games-team/minetest/-/blob/master/debian/patches/fix-typos.patch
2022-09-21 10:47:19 +02:00
3225007e8d Bump revision 2022-09-16 19:39:46 +02:00
e9f205f952 Avoid using XIWarpPointer on certain setups where it's broken
fixes minetest/minetest#12697
2022-09-12 16:20:31 +02:00
d733e03430 Fix glHint parameter, type size and add more null checks (#130) 2022-09-02 08:40:02 +02:00
f0766c845f Fix crash in COGLES1Driver (#128) 2022-08-22 19:12:40 +02:00
274 changed files with 9112 additions and 16547 deletions

View File

@ -1,3 +1,5 @@
root = true
[*] [*]
charset = utf-8 charset = utf-8

View File

@ -8,13 +8,16 @@ on:
jobs: jobs:
linux-gl: linux-gl:
runs-on: ubuntu-18.04 runs-on: ubuntu-latest
container:
image: ubuntu:bionic
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Install deps - name: Install deps
run: | run: |
sudo apt-get update apt-get update
sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
- name: Build - name: Build
run: | run: |
@ -26,25 +29,26 @@ jobs:
make DESTDIR=$PWD/_install install make DESTDIR=$PWD/_install install
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local . tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v3
with: with:
name: irrlicht-linux name: irrlicht-linux
path: ./irrlicht-linux.tar.gz path: ./irrlicht-linux.tar.gz
linux-gles: linux-gles:
runs-on: ubuntu-18.04 runs-on: ubuntu-latest
container:
image: ubuntu:bionic
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Install deps - name: Install deps
run: | run: |
sudo apt-get update apt-get update
sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build - name: Build
run: | run: |
sed '/#define _IRR_COMPILE_WITH_OGLES2_/ s|^//||g' -i include/IrrCompileConfig.h cmake . -DBUILD_EXAMPLES=1 -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
sed '/#define _IRR_COMPILE_WITH_OPENGL_/ s|^|//|g' -i include/IrrCompileConfig.h
cmake . -DBUILD_EXAMPLES=1
make -j2 make -j2
- name: Test (headless) - name: Test (headless)
@ -55,56 +59,120 @@ jobs:
- name: Test (Xvfb) - name: Test (Xvfb)
run: | run: |
cd bin/Linux cd bin/Linux
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
win32: linux-sdl:
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
container:
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Install deps
run: |
apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
- name: Build
run: |
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
make -j2
- name: Test (headless)
run: |
cd bin/Linux
./AutomatedTest null
linux-sdl-gl3:
runs-on: ubuntu-latest
container:
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps:
- uses: actions/checkout@v3
- name: Install deps
run: |
apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build
run: |
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
make -j2
- name: Test (headless)
run: |
cd bin/Linux
./AutomatedTest null
- name: Test (Xvfb)
run: |
cd bin/Linux
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
linux-sdl-gles2:
runs-on: ubuntu-latest
container:
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps:
- uses: actions/checkout@v3
- name: Install deps
run: |
apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build
run: |
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
make -j2
- name: Test (headless)
run: |
cd bin/Linux
./AutomatedTest null
- name: Test (Xvfb)
run: |
cd bin/Linux
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
mingw:
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
config:
- {variant: win32, arch: i686}
- {variant: win64, arch: x86_64}
- {variant: win32, arch: i686, extras: "-sdl"}
- {variant: win64, arch: x86_64, extras: "-sdl"}
steps:
- uses: actions/checkout@v3
- name: Install compiler - name: Install compiler
run: | run: |
sudo apt-get update && sudo apt-get install cmake -qyy sudo apt-get update && sudo apt-get install cmake -qyy
wget http://minetest.kitsunemimi.pw/mingw-w64-i686_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz wget http://minetest.kitsunemimi.pw/mingw-w64-${{matrix.config.arch}}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr sudo tar -xaf mingw.tar.xz -C /usr
- name: Build - name: Build
run: | run: |
./scripts/ci-build-mingw.sh package ./scripts/ci-build-mingw.sh package
env: env:
CC: i686-w64-mingw32-gcc CC: ${{matrix.config.arch}}-w64-mingw32-gcc
CXX: i686-w64-mingw32-g++ CXX: ${{matrix.config.arch}}-w64-mingw32-g++
extras: ${{matrix.config.extras}}
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v3
with: with:
name: irrlicht-win32 name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
path: ./irrlicht-win32.zip path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
win64:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Install compiler
run: |
sudo apt-get update && sudo apt-get install cmake -qyy
wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr
- name: Build
run: |
./scripts/ci-build-mingw.sh package
env:
CC: x86_64-w64-mingw32-gcc
CXX: x86_64-w64-mingw32-g++
- uses: actions/upload-artifact@v2
with:
name: irrlicht-win64
path: ./irrlicht-win64.zip
macos: macos:
runs-on: macos-10.15 runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Install deps - name: Install deps
run: | run: |
brew update brew update
@ -120,7 +188,7 @@ jobs:
./bin/OSX/AutomatedTest null ./bin/OSX/AutomatedTest null
msvc: msvc:
name: VS 2019 ${{ matrix.config.arch }} name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
runs-on: windows-2019 runs-on: windows-2019
env: env:
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44 VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
@ -138,6 +206,14 @@ jobs:
arch: x64 arch: x64
generator: "-G'Visual Studio 16 2019' -A x64" generator: "-G'Visual Studio 16 2019' -A x64"
vcpkg_triplet: x64-windows vcpkg_triplet: x64-windows
sdl:
-
use: FALSE
label: '(no SDL)'
-
use: TRUE
label: '(with SDL)'
vcpkg_packages: sdl2
steps: steps:
- name: Checkout - name: Checkout
@ -146,7 +222,7 @@ jobs:
- name: Restore from cache and run vcpkg - name: Restore from cache and run vcpkg
uses: lukka/run-vcpkg@v7 uses: lukka/run-vcpkg@v7
with: with:
vcpkgArguments: ${{env.vcpkg_packages}} vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
vcpkgDirectory: '${{ github.workspace }}\vcpkg' vcpkgDirectory: '${{ github.workspace }}\vcpkg'
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }} appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }} vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
@ -155,6 +231,7 @@ jobs:
- name: CMake - name: CMake
run: | run: |
cmake ${{matrix.config.generator}} ` cmake ${{matrix.config.generator}} `
-DUSE_SDL2=${{matrix.sdl.use}} `
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" ` -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
-DCMAKE_BUILD_TYPE=Release . -DCMAKE_BUILD_TYPE=Release .
@ -173,7 +250,7 @@ jobs:
run: move include artifact/ run: move include artifact/
- name: Upload Artifact - name: Upload Artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: msvc-${{ matrix.config.arch }} name: msvc-${{ matrix.config.arch }}
path: artifact/ path: artifact/

3
.gitignore vendored
View File

@ -19,3 +19,6 @@ scripts/glext.h
*.dir/ *.dir/
*.sln *.sln
*visualstudio/ *visualstudio/
# vscode cmake plugin
build/*

View File

@ -1,13 +1,13 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.5)
# Set policies up to 3.9 since we want to enable the IPO option # >=3.9 enables IPO; >=3.11 prefers GLVND
if(${CMAKE_VERSION} VERSION_LESS 3.9) if(${CMAKE_VERSION} VERSION_LESS 3.11)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else() else()
cmake_policy(VERSION 3.9) cmake_policy(VERSION 3.11)
endif() endif()
set(IRRLICHTMT_REVISION 7) set(IRRLICHTMT_REVISION 12)
project(Irrlicht project(Irrlicht
VERSION 1.9.0.${IRRLICHTMT_REVISION} VERSION 1.9.0.${IRRLICHTMT_REVISION}

1
LICENSE Symbolic link
View File

@ -0,0 +1 @@
doc/irrlicht-license.txt

View File

@ -20,6 +20,11 @@ The following libraries are required to be installed:
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available: Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library * `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
* `BUILD_EXAMPLES` (default: `OFF`) - Build example applications * `BUILD_EXAMPLES` (default: `OFF`) - Build example applications
* `ENABLE_OPENGL` - Enable OpenGL driver
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
* `USE_SDL2` (default: `OFF`) - Use SDL2 instead of native platform device
e.g. on a Linux system you might want to build for local use like this: e.g. on a Linux system you might want to build for local use like this:
@ -30,6 +35,21 @@ e.g. on a Linux system you might want to build for local use like this:
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path. This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
on Windows system:
It is highly recommended to use vcpkg as package manager.
After you successfully built vcpkg you can easily install the required libraries:
vcpkg install zlib libjpeg-turbo libpng opengl-registry --triplet x64-windows
Run the following script in PowerShell:
git clone https://github.com/minetest/irrlicht
cd irrlicht
cmake -B build -G "Visual Studio 17 2022" -A "Win64" -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake -DBUILD_SHARED_LIBS=OFF
cmake --build build --config Release
Platforms Platforms
--------- ---------

27
build.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/bash -e
args=(-DBUILD_EXAMPLES=ON -DENABLE_OPENGL=OFF -DBUILD_SHARED_LIBS=OFF)
export CC=afl-clang-fast
export CXX=afl-clang-fast++
export LD=$CXX
unset AFL_USE_ASAN
if ! grep -Fq '/afl-' build2/CMakeCache.txt; then
rm -rf build2
cmake -S . -B build2 "${args[@]}"
fi
nice make -C build2 clean
nice make -C build2 -j10
for f in build2/bin/Linux/*; do
ln -snfv "../../$f" "bin/Linux/${f##*/}_noasan"
done
export CC=afl-clang-lto
export CXX=afl-clang-lto++
export LD=$CXX
export AFL_USE_ASAN=1
if ! grep -Fq '/afl-' CMakeCache.txt; then
rm -f CMakeCache.txt
cmake . "${args[@]}"
fi
nice make clean
nice make -j10

File diff suppressed because it is too large Load Diff

View File

@ -7,17 +7,22 @@ using namespace irr;
static IrrlichtDevice *device = nullptr; static IrrlichtDevice *device = nullptr;
static int test_fail = 0; static int test_fail = 0;
extern void test_irr_array(); void test_irr_array();
void test_irr_string();
static video::E_DRIVER_TYPE chooseDriver(const char *arg_) static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
{ {
if (core::stringc(arg_) == "null") if (arg_ == "null")
return video::EDT_NULL; return video::EDT_NULL;
if (arg_ == "ogles1")
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
return video::EDT_OGLES1; return video::EDT_OGLES1;
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2)) if (arg_ == "ogles2")
return video::EDT_OGLES2; return video::EDT_OGLES2;
if (arg_ == "opengl")
return video::EDT_OPENGL;
if (arg_ == "opengl3")
return video::EDT_OPENGL3;
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
return video::EDT_OPENGL; return video::EDT_OPENGL;
} }
@ -32,7 +37,14 @@ static inline void check(bool ok, const char *msg)
void run_unit_tests() { void run_unit_tests() {
std::cout << "Running unit tests:" << std::endl; std::cout << "Running unit tests:" << std::endl;
try {
test_irr_array(); test_irr_array();
test_irr_string();
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
test_fail++;
}
std::cout << std::endl;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -75,8 +87,12 @@ int main(int argc, char *argv[])
const io::path mediaPath = getExampleMediaPath(); const io::path mediaPath = getExampleMediaPath();
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x"); auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
check(mesh_file, "mesh file loading");
scene::IAnimatedMesh* mesh = smgr->getMesh(mesh_file);
check(mesh, "mesh loading"); check(mesh, "mesh loading");
if (mesh_file)
mesh_file->drop();
if (mesh) if (mesh)
{ {
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png"); video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
@ -84,10 +100,12 @@ int main(int argc, char *argv[])
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh); scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
if (node) if (node)
{ {
node->setMaterialFlag(video::EMF_LIGHTING, false); node->forEachMaterial([tex] (video::SMaterial &mat) {
mat.Lighting = false;
mat.setTexture(0, tex);
});
node->setFrameLoop(0, 29); node->setFrameLoop(0, 29);
node->setAnimationSpeed(30); node->setAnimationSpeed(30);
node->setMaterialTexture(0, tex);
} }
} }
@ -99,7 +117,7 @@ int main(int argc, char *argv[])
while (device->run()) while (device->run())
{ {
if (device->getTimer()->getTime() >= 1300) if (device->getTimer()->getTime() >= 1000)
{ {
device->getTimer()->setTime(0); device->getTimer()->setTime(0);
++n; ++n;

View File

@ -1,4 +1,4 @@
#include "irrArray.h" #include <irrArray.h>
#include "test_helper.h" #include "test_helper.h"
using namespace irr; using namespace irr;

View File

@ -0,0 +1,195 @@
#include <irrString.h>
#include <cstring>
#include <clocale>
#include <vector>
#include "test_helper.h"
using namespace irr;
using namespace irr::core;
#define CMPSTR(a, b) (!strcmp(a, b))
#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected)
static void test_basics()
{
// ctor
stringc s;
UASSERTEQ(s.c_str()[0], '\0');
s = stringc(0.1234567);
UASSERTSTR(s, "0.123457");
s = stringc(0x1p+53);
UASSERTSTR(s, "9007199254740992.000000");
s = stringc(static_cast<int>(-102400));
UASSERTSTR(s, "-102400");
s = stringc(static_cast<unsigned int>(102400));
UASSERTSTR(s, "102400");
s = stringc(static_cast<long>(-1024000));
UASSERTSTR(s, "-1024000");
s = stringc(static_cast<unsigned long>(1024000));
UASSERTSTR(s, "1024000");
s = stringc("YESno", 3);
UASSERTSTR(s, "YES");
s = stringc(L"test", 4);
UASSERTSTR(s, "test");
s = stringc("Hello World!");
UASSERTSTR(s, "Hello World!");
// operator=
s = stringw(L"abcdef");
UASSERTSTR(s, "abcdef");
s = L"abcdef";
UASSERTSTR(s, "abcdef");
s = static_cast<const char*>(nullptr);
UASSERTSTR(s, "");
// operator+
s = s + stringc("foo");
UASSERTSTR(s, "foo");
s = s + L"bar";
UASSERTSTR(s, "foobar");
// the rest
s = "f";
UASSERTEQ(s[0], 'f');
const auto &sref = s;
UASSERTEQ(sref[0], 'f');
UASSERT(sref == "f");
UASSERT(sref == stringc("f"));
s = "a";
UASSERT(sref < stringc("aa"));
UASSERT(sref < stringc("b"));
UASSERT(stringc("Z") < sref);
UASSERT(!(sref < stringc("a")));
UASSERT(sref.lower_ignore_case("AA"));
UASSERT(sref.lower_ignore_case("B"));
UASSERT(!sref.lower_ignore_case("A"));
s = "dog";
UASSERT(sref != "cat");
UASSERT(sref != stringc("cat"));
}
static void test_methods()
{
stringc s;
const auto &sref = s;
s = "irrlicht";
UASSERTEQ(sref.size(), 8);
UASSERT(!sref.empty());
s.clear();
UASSERTEQ(sref.size(), 0);
UASSERT(sref.empty());
UASSERT(sref[0] == 0);
s = "\tAz#`";
s.make_lower();
UASSERTSTR(s, "\taz#`");
s.make_upper();
UASSERTSTR(s, "\tAZ#`");
UASSERT(sref.equals_ignore_case("\taz#`"));
UASSERT(sref.equals_substring_ignore_case("Z#`", 2));
s = "irrlicht";
UASSERT(sref.equalsn(stringc("irr"), 3));
UASSERT(sref.equalsn("irr", 3));
s = "fo";
s.append('o');
UASSERTSTR(s, "foo");
s.append("bar", 1);
UASSERTSTR(s, "foob");
s.append("ar", 999999);
UASSERTSTR(s, "foobar");
s = "nyan";
s.append(stringc("cat"));
UASSERTSTR(s, "nyancat");
s.append(stringc("sam"), 1);
UASSERTSTR(s, "nyancats");
s = "fbar";
s.insert(1, "ooXX", 2);
UASSERTSTR(s, "foobar");
UASSERTEQ(sref.findFirst('o'), 1);
UASSERTEQ(sref.findFirst('X'), -1);
UASSERTEQ(sref.findFirstChar("abff", 2), 3);
UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3);
UASSERTEQ(sref.findLast('o'), 2);
UASSERTEQ(sref.findLast('X'), -1);
UASSERTEQ(sref.findLastChar("abrr", 2), 4);
UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3);
UASSERTEQ(sref.findNext('o', 2), 2);
UASSERTEQ(sref.findLast('o', 1), 1);
s = "ob-oob";
UASSERTEQ(sref.find("ob", 1), 4);
UASSERTEQ(sref.find("ob"), 0);
UASSERTEQ(sref.find("?"), -1);
s = "HOMEOWNER";
stringc s2 = sref.subString(2, 4);
UASSERTSTR(s2, "MEOW");
s2 = sref.subString(2, 4, true);
UASSERTSTR(s2, "meow");
s = "land";
s.replace('l', 's');
UASSERTSTR(s, "sand");
s = ">dog<";
s.replace("dog", "cat");
UASSERTSTR(s, ">cat<");
s.replace("cat", "horse");
UASSERTSTR(s, ">horse<");
s.replace("horse", "gnu");
UASSERTSTR(s, ">gnu<");
s = " h e l p ";
s.remove(' ');
UASSERTSTR(s, "help");
s.remove("el");
UASSERTSTR(s, "hp");
s = "irrlicht";
s.removeChars("it");
UASSERTSTR(s, "rrlch");
s = "\r\nfoo bar ";
s.trim();
UASSERTSTR(s, "foo bar");
s = "foxo";
s.erase(2);
UASSERTSTR(s, "foo");
s = "a";
s.append('\0');
s.append('b');
UASSERTEQ(s.size(), 3);
s.validate();
UASSERTEQ(s.size(), 1);
UASSERTEQ(s.lastChar(), 'a');
std::vector<stringc> res;
s = "a,,b,c";
s.split(res, ",aa", 1, true, false);
UASSERTEQ(res.size(), 3);
UASSERTSTR(res[0], "a");
UASSERTSTR(res[2], "c");
res.clear();
s.split(res, ",", 1, false, true);
UASSERTEQ(res.size(), 7);
UASSERTSTR(res[0], "a");
UASSERTSTR(res[2], "");
for (int i = 0; i < 3; i++)
UASSERTSTR(res[2*i+1], ",");
}
static void test_conv()
{
// assumes Unicode and UTF-8 locale
setlocale(LC_CTYPE, "");
stringw out;
multibyteToWString(out, "†††");
UASSERTEQ(out.size(), 3);
for (int i = 0; i < 3; i++)
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
stringc out2;
wStringToMultibyte(out2, L"†††");
UASSERTEQ(out2.size(), 9);
for (int i = 0; i < 3; i++) {
UASSERTEQ(static_cast<u8>(out2[3*i]), 0xe2);
UASSERTEQ(static_cast<u8>(out2[3*i+1]), 0x80);
UASSERTEQ(static_cast<u8>(out2[3*i+2]), 0xa0);
}
}
void test_irr_string()
{
test_basics();
test_methods();
test_conv();
std::cout << " test_irr_string PASSED" << std::endl;
}

View File

@ -1,10 +1,11 @@
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(IRREXAMPLES set(IRREXAMPLES
# removed LoadTexture
LoadMesh
) )
if(UNIX) if(FALSE)
list(APPEND IRREXAMPLES AutomatedTest) list(APPEND IRREXAMPLES AutomatedTest)
endif() endif()

View File

@ -0,0 +1,44 @@
#include <irrlicht.h>
#include <iostream>
using namespace irr;
int main(int argc, char *argv[])
{
if (argc < 2)
return 1;
SIrrlichtCreationParameters p;
p.DriverType = video::EDT_NULL;
p.WindowSize = core::dimension2du(640, 480);
p.LoggingLevel = ELL_DEBUG;
auto *device = createDeviceEx(p);
if (!device)
return 1;
auto *smgr = device->getSceneManager();
while (__AFL_LOOP(10000)) {
auto *mfile = device->getFileSystem()->createAndOpenFile(argv[1]);
if (!mfile)
continue;
scene::IAnimatedMesh *mesh;
// Irrlicht matches on file extension so we have to do this by hand
for (u32 i = 0; i < smgr->getMeshLoaderCount(); i++) {
mfile->seek(0);
mesh = smgr->getMeshLoader(i)->createMesh(mfile);
if (mesh) {
core::stringc msg("Loaded using loader #");
msg += core::stringc(i);
device->getLogger()->log(msg.c_str(), ELL_DEBUG);
break;
}
}
if (mesh)
mesh->drop();
mfile->drop();
}
device->drop();
return 0;
}

View File

@ -0,0 +1,29 @@
#include <irrlicht.h>
#include <iostream>
using namespace irr;
int main(int argc, char *argv[])
{
if (argc < 2)
return 1;
SIrrlichtCreationParameters p;
p.DriverType = video::EDT_NULL;
p.WindowSize = core::dimension2du(640, 480);
p.LoggingLevel = ELL_DEBUG;
auto *device = createDeviceEx(p);
if (!device)
return 1;
auto *driver = device->getVideoDriver();
while (__AFL_LOOP(10000)) {
auto *tex = driver->getTexture(argv[1]);
if (tex)
driver->removeTexture(tex);
}
device->drop();
return 0;
}

View File

@ -39,46 +39,46 @@ namespace scene
public: public:
core::array<T> Indices; core::array<T> Indices;
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);} u32 stride() const override {return sizeof(T);}
virtual u32 size() const _IRR_OVERRIDE_ {return Indices.size();} u32 size() const override {return Indices.size();}
virtual void push_back(const u32 &element) _IRR_OVERRIDE_ void push_back(const u32 &element) override
{ {
// push const ref due to compiler problem with gcc 4.6, big endian // push const ref due to compiler problem with gcc 4.6, big endian
Indices.push_back((const T&)element); Indices.push_back((const T&)element);
} }
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_ u32 operator [](u32 index) const override
{ {
return (u32)(Indices[index]); return (u32)(Indices[index]);
} }
virtual u32 getLast() _IRR_OVERRIDE_ {return (u32)Indices.getLast();} u32 getLast() override {return (u32)Indices.getLast();}
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_ void setValue(u32 index, u32 value) override
{ {
Indices[index]=(T)value; Indices[index]=(T)value;
} }
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_ void set_used(u32 usedNow) override
{ {
Indices.set_used(usedNow); Indices.set_used(usedNow);
} }
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_ void reallocate(u32 new_size) override
{ {
Indices.reallocate(new_size); Indices.reallocate(new_size);
} }
virtual u32 allocated_size() const _IRR_OVERRIDE_ u32 allocated_size() const override
{ {
return Indices.allocated_size(); return Indices.allocated_size();
} }
virtual void* pointer() _IRR_OVERRIDE_ {return Indices.pointer();} void* pointer() override {return Indices.pointer();}
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_ video::E_INDEX_TYPE getType() const override
{ {
if (sizeof(T)==sizeof(u16)) if (sizeof(T)==sizeof(u16))
return video::EIT_16BIT; return video::EIT_16BIT;
@ -110,7 +110,7 @@ namespace scene
} }
//virtual void setType(video::E_INDEX_TYPE IndexType); //virtual void setType(video::E_INDEX_TYPE IndexType);
virtual void setType(video::E_INDEX_TYPE IndexType) _IRR_OVERRIDE_ void setType(video::E_INDEX_TYPE IndexType) override
{ {
IIndexList *NewIndices=0; IIndexList *NewIndices=0;
@ -141,78 +141,78 @@ namespace scene
Indices=NewIndices; Indices=NewIndices;
} }
virtual void* getData() _IRR_OVERRIDE_ {return Indices->pointer();} void* getData() override {return Indices->pointer();}
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_ {return Indices->getType();} video::E_INDEX_TYPE getType() const override {return Indices->getType();}
virtual u32 stride() const _IRR_OVERRIDE_ {return Indices->stride();} u32 stride() const override {return Indices->stride();}
virtual u32 size() const _IRR_OVERRIDE_ u32 size() const override
{ {
return Indices->size(); return Indices->size();
} }
virtual void push_back(const u32 &element) _IRR_OVERRIDE_ void push_back(const u32 &element) override
{ {
Indices->push_back(element); Indices->push_back(element);
} }
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_ u32 operator [](u32 index) const override
{ {
return (*Indices)[index]; return (*Indices)[index];
} }
virtual u32 getLast() _IRR_OVERRIDE_ u32 getLast() override
{ {
return Indices->getLast(); return Indices->getLast();
} }
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_ void setValue(u32 index, u32 value) override
{ {
Indices->setValue(index, value); Indices->setValue(index, value);
} }
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_ void set_used(u32 usedNow) override
{ {
Indices->set_used(usedNow); Indices->set_used(usedNow);
} }
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_ void reallocate(u32 new_size) override
{ {
Indices->reallocate(new_size); Indices->reallocate(new_size);
} }
virtual u32 allocated_size() const _IRR_OVERRIDE_ u32 allocated_size() const override
{ {
return Indices->allocated_size(); return Indices->allocated_size();
} }
virtual void* pointer() _IRR_OVERRIDE_ void* pointer() override
{ {
return Indices->pointer(); return Indices->pointer();
} }
//! get the current hardware mapping hint //! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint() const override
{ {
return MappingHint; return MappingHint;
} }
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
{ {
MappingHint=NewMappingHint; MappingHint=NewMappingHint;
} }
//! flags the mesh as changed, reloads hardware buffers //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty() _IRR_OVERRIDE_ void setDirty() override
{ {
++ChangedID; ++ChangedID;
} }
//! Get the currently used ID for identification of changes. //! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */ /** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;} u32 getChangedID() const override {return ChangedID;}
E_HARDWARE_MAPPING MappingHint; E_HARDWARE_MAPPING MappingHint;
u32 ChangedID; u32 ChangedID;

View File

@ -32,7 +32,7 @@ namespace scene
//! Get material of this meshbuffer //! Get material of this meshbuffer
/** \return Material of this buffer */ /** \return Material of this buffer */
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_ const video::SMaterial& getMaterial() const override
{ {
return Material; return Material;
} }
@ -40,7 +40,7 @@ namespace scene
//! Get material of this meshbuffer //! Get material of this meshbuffer
/** \return Material of this buffer */ /** \return Material of this buffer */
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_ video::SMaterial& getMaterial() override
{ {
return Material; return Material;
} }
@ -48,7 +48,7 @@ namespace scene
//! Get pointer to vertices //! Get pointer to vertices
/** \return Pointer to vertices. */ /** \return Pointer to vertices. */
virtual const void* getVertices() const _IRR_OVERRIDE_ const void* getVertices() const override
{ {
return Vertices.const_pointer(); return Vertices.const_pointer();
} }
@ -56,7 +56,7 @@ namespace scene
//! Get pointer to vertices //! Get pointer to vertices
/** \return Pointer to vertices. */ /** \return Pointer to vertices. */
virtual void* getVertices() _IRR_OVERRIDE_ void* getVertices() override
{ {
return Vertices.pointer(); return Vertices.pointer();
} }
@ -64,21 +64,21 @@ namespace scene
//! Get number of vertices //! Get number of vertices
/** \return Number of vertices. */ /** \return Number of vertices. */
virtual u32 getVertexCount() const _IRR_OVERRIDE_ u32 getVertexCount() const override
{ {
return Vertices.size(); return Vertices.size();
} }
//! Get type of index data which is stored in this meshbuffer. //! Get type of index data which is stored in this meshbuffer.
/** \return Index type of this buffer. */ /** \return Index type of this buffer. */
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_ video::E_INDEX_TYPE getIndexType() const override
{ {
return video::EIT_16BIT; return video::EIT_16BIT;
} }
//! Get pointer to indices //! Get pointer to indices
/** \return Pointer to indices. */ /** \return Pointer to indices. */
virtual const u16* getIndices() const _IRR_OVERRIDE_ const u16* getIndices() const override
{ {
return Indices.const_pointer(); return Indices.const_pointer();
} }
@ -86,7 +86,7 @@ namespace scene
//! Get pointer to indices //! Get pointer to indices
/** \return Pointer to indices. */ /** \return Pointer to indices. */
virtual u16* getIndices() _IRR_OVERRIDE_ u16* getIndices() override
{ {
return Indices.pointer(); return Indices.pointer();
} }
@ -94,7 +94,7 @@ namespace scene
//! Get number of indices //! Get number of indices
/** \return Number of indices. */ /** \return Number of indices. */
virtual u32 getIndexCount() const _IRR_OVERRIDE_ u32 getIndexCount() const override
{ {
return Indices.size(); return Indices.size();
} }
@ -102,7 +102,7 @@ namespace scene
//! Get the axis aligned bounding box //! Get the axis aligned bounding box
/** \return Axis aligned bounding box of this buffer. */ /** \return Axis aligned bounding box of this buffer. */
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ const core::aabbox3d<f32>& getBoundingBox() const override
{ {
return BoundingBox; return BoundingBox;
} }
@ -111,7 +111,7 @@ namespace scene
//! Set the axis aligned bounding box //! Set the axis aligned bounding box
/** \param box New axis aligned bounding box for this buffer. */ /** \param box New axis aligned bounding box for this buffer. */
//! set user axis aligned bounding box //! set user axis aligned bounding box
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_ void setBoundingBox(const core::aabbox3df& box) override
{ {
BoundingBox = box; BoundingBox = box;
} }
@ -119,7 +119,7 @@ namespace scene
//! Recalculate the bounding box. //! Recalculate the bounding box.
/** should be called if the mesh changed. */ /** should be called if the mesh changed. */
virtual void recalculateBoundingBox() _IRR_OVERRIDE_ void recalculateBoundingBox() override
{ {
if (!Vertices.empty()) if (!Vertices.empty())
{ {
@ -136,43 +136,43 @@ namespace scene
//! Get type of vertex data stored in this buffer. //! Get type of vertex data stored in this buffer.
/** \return Type of vertex data. */ /** \return Type of vertex data. */
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_ video::E_VERTEX_TYPE getVertexType() const override
{ {
return T::getType(); return T::getType();
} }
//! returns position of vertex i //! returns position of vertex i
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_ const core::vector3df& getPosition(u32 i) const override
{ {
return Vertices[i].Pos; return Vertices[i].Pos;
} }
//! returns position of vertex i //! returns position of vertex i
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_ core::vector3df& getPosition(u32 i) override
{ {
return Vertices[i].Pos; return Vertices[i].Pos;
} }
//! returns normal of vertex i //! returns normal of vertex i
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_ const core::vector3df& getNormal(u32 i) const override
{ {
return Vertices[i].Normal; return Vertices[i].Normal;
} }
//! returns normal of vertex i //! returns normal of vertex i
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_ core::vector3df& getNormal(u32 i) override
{ {
return Vertices[i].Normal; return Vertices[i].Normal;
} }
//! returns texture coord of vertex i //! returns texture coord of vertex i
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_ const core::vector2df& getTCoords(u32 i) const override
{ {
return Vertices[i].TCoords; return Vertices[i].TCoords;
} }
//! returns texture coord of vertex i //! returns texture coord of vertex i
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_ core::vector2df& getTCoords(u32 i) override
{ {
return Vertices[i].TCoords; return Vertices[i].TCoords;
} }
@ -183,7 +183,7 @@ namespace scene
or the main buffer is of standard type. Otherwise, behavior is or the main buffer is of standard type. Otherwise, behavior is
undefined. undefined.
*/ */
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_ void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
{ {
if (vertices == getVertices()) if (vertices == getVertices())
return; return;
@ -212,7 +212,7 @@ namespace scene
undefined. undefined.
\param other Meshbuffer to be appended to this one. \param other Meshbuffer to be appended to this one.
*/ */
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_ void append(const IMeshBuffer* const other) override
{ {
/* /*
if (this==other) if (this==other)
@ -238,19 +238,19 @@ namespace scene
//! get the current hardware mapping hint //! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
{ {
return MappingHint_Vertex; return MappingHint_Vertex;
} }
//! get the current hardware mapping hint //! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
{ {
return MappingHint_Index; return MappingHint_Index;
} }
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
{ {
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX) if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
MappingHint_Vertex=NewMappingHint; MappingHint_Vertex=NewMappingHint;
@ -259,19 +259,19 @@ namespace scene
} }
//! Describe what kind of primitive geometry is used by the meshbuffer //! Describe what kind of primitive geometry is used by the meshbuffer
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_ void setPrimitiveType(E_PRIMITIVE_TYPE type) override
{ {
PrimitiveType = type; PrimitiveType = type;
} }
//! Get the kind of primitive geometry which is used by the meshbuffer //! Get the kind of primitive geometry which is used by the meshbuffer
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_ E_PRIMITIVE_TYPE getPrimitiveType() const override
{ {
return PrimitiveType; return PrimitiveType;
} }
//! flags the mesh as changed, reloads hardware buffers //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_ void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
{ {
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX) if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
++ChangedID_Vertex; ++ChangedID_Vertex;
@ -281,17 +281,17 @@ namespace scene
//! Get the currently used ID for identification of changes. //! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */ /** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;} u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
//! Get the currently used ID for identification of changes. //! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */ /** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;} u32 getChangedID_Index() const override {return ChangedID_Index;}
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ { void setHWBuffer(void *ptr) const override {
HWBuffer = ptr; HWBuffer = ptr;
} }
virtual void *getHWBuffer() const _IRR_OVERRIDE_ { void *getHWBuffer() const override {
return HWBuffer; return HWBuffer;
} }

View File

@ -40,33 +40,33 @@ namespace scene
public: public:
core::array<T> Vertices; core::array<T> Vertices;
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);} u32 stride() const override {return sizeof(T);}
virtual u32 size() const _IRR_OVERRIDE_ {return Vertices.size();} u32 size() const override {return Vertices.size();}
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_ void push_back (const video::S3DVertex &element) override
{Vertices.push_back((T&)element);} {Vertices.push_back((T&)element);}
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_ video::S3DVertex& operator [](const u32 index) const override
{return (video::S3DVertex&)Vertices[index];} {return (video::S3DVertex&)Vertices[index];}
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_ video::S3DVertex& getLast() override
{return (video::S3DVertex&)Vertices.getLast();} {return (video::S3DVertex&)Vertices.getLast();}
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_ void set_used(u32 usedNow) override
{Vertices.set_used(usedNow);} {Vertices.set_used(usedNow);}
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_ void reallocate(u32 new_size) override
{Vertices.reallocate(new_size);} {Vertices.reallocate(new_size);}
virtual u32 allocated_size() const _IRR_OVERRIDE_ u32 allocated_size() const override
{ {
return Vertices.allocated_size(); return Vertices.allocated_size();
} }
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_ {return Vertices.pointer();} video::S3DVertex* pointer() override {return Vertices.pointer();}
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return T::getType();} video::E_VERTEX_TYPE getType() const override {return T::getType();}
}; };
public: public:
@ -75,18 +75,18 @@ namespace scene
CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0), CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0),
MappingHint(EHM_NEVER), ChangedID(1) MappingHint(EHM_NEVER), ChangedID(1)
{ {
setType(vertexType); CVertexBuffer::setType(vertexType);
} }
CVertexBuffer(const IVertexBuffer &VertexBufferCopy) : CVertexBuffer(const IVertexBuffer &VertexBufferCopy) :
Vertices(0), MappingHint(EHM_NEVER), Vertices(0), MappingHint(EHM_NEVER),
ChangedID(1) ChangedID(1)
{ {
setType(VertexBufferCopy.getType()); CVertexBuffer::setType(VertexBufferCopy.getType());
reallocate(VertexBufferCopy.size()); CVertexBuffer::reallocate(VertexBufferCopy.size());
for (u32 n=0;n<VertexBufferCopy.size();++n) for (u32 n=0;n<VertexBufferCopy.size();++n)
push_back(VertexBufferCopy[n]); CVertexBuffer::push_back(VertexBufferCopy[n]);
} }
virtual ~CVertexBuffer() virtual ~CVertexBuffer()
@ -95,8 +95,11 @@ namespace scene
} }
virtual void setType(video::E_VERTEX_TYPE vertexType) _IRR_OVERRIDE_ void setType(video::E_VERTEX_TYPE vertexType) override
{ {
if ( Vertices && Vertices->getType() == vertexType )
return;
IVertexList *NewVertices=0; IVertexList *NewVertices=0;
switch (vertexType) switch (vertexType)
@ -130,73 +133,73 @@ namespace scene
Vertices=NewVertices; Vertices=NewVertices;
} }
virtual void* getData() _IRR_OVERRIDE_ {return Vertices->pointer();} void* getData() override {return Vertices->pointer();}
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return Vertices->getType();} video::E_VERTEX_TYPE getType() const override {return Vertices->getType();}
virtual u32 stride() const _IRR_OVERRIDE_ {return Vertices->stride();} u32 stride() const override {return Vertices->stride();}
virtual u32 size() const _IRR_OVERRIDE_ u32 size() const override
{ {
return Vertices->size(); return Vertices->size();
} }
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_ void push_back (const video::S3DVertex &element) override
{ {
Vertices->push_back(element); Vertices->push_back(element);
} }
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_ video::S3DVertex& operator [](const u32 index) const override
{ {
return (*Vertices)[index]; return (*Vertices)[index];
} }
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_ video::S3DVertex& getLast() override
{ {
return Vertices->getLast(); return Vertices->getLast();
} }
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_ void set_used(u32 usedNow) override
{ {
Vertices->set_used(usedNow); Vertices->set_used(usedNow);
} }
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_ void reallocate(u32 new_size) override
{ {
Vertices->reallocate(new_size); Vertices->reallocate(new_size);
} }
virtual u32 allocated_size() const _IRR_OVERRIDE_ u32 allocated_size() const override
{ {
return Vertices->allocated_size(); return Vertices->allocated_size();
} }
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_ video::S3DVertex* pointer() override
{ {
return Vertices->pointer(); return Vertices->pointer();
} }
//! get the current hardware mapping hint //! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint() const override
{ {
return MappingHint; return MappingHint;
} }
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
{ {
MappingHint=NewMappingHint; MappingHint=NewMappingHint;
} }
//! flags the mesh as changed, reloads hardware buffers //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty() _IRR_OVERRIDE_ void setDirty() override
{ {
++ChangedID; ++ChangedID;
} }
//! Get the currently used ID for identification of changes. //! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */ /** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;} u32 getChangedID() const override {return ChangedID;}
E_HARDWARE_MAPPING MappingHint; E_HARDWARE_MAPPING MappingHint;
u32 ChangedID; u32 ChangedID;

View File

@ -28,9 +28,6 @@ namespace scene
//! Overlays Mesh Wireframe //! Overlays Mesh Wireframe
EDS_MESH_WIRE_OVERLAY = 8, EDS_MESH_WIRE_OVERLAY = 8,
//! Temporary use transparency Material Type
EDS_HALF_TRANSPARENCY = 16,
//! Show Bounding Boxes of all MeshBuffers //! Show Bounding Boxes of all MeshBuffers
EDS_BBOX_BUFFERS = 32, EDS_BBOX_BUFFERS = 32,

View File

@ -25,13 +25,9 @@ namespace irr
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */ /** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
EIDT_OSX, EIDT_OSX,
//! A device native to the iOS
/** This device should be used with the OpenGL-ES driver. */
EIDT_IOS,
//! A device which uses Simple DirectMedia Layer //! A device which uses Simple DirectMedia Layer
/** The SDL device works under all platforms supported by SDL but first must be compiled /** The SDL device works under all platforms supported by SDL but first must be compiled
in by defining the _IRR_COMPILE_WITH_SDL_DEVICE_ macro in IrrCompileConfig.h */ in by setting the USE_SDL2 CMake option to ON */
EIDT_SDL, EIDT_SDL,
//! This selection allows Irrlicht to choose the best device from the ones available. //! This selection allows Irrlicht to choose the best device from the ones available.

View File

@ -20,33 +20,6 @@ namespace video
render and display any graphics. */ render and display any graphics. */
EDT_NULL, EDT_NULL,
//! The Irrlicht Engine Software renderer.
/** Runs on all platforms, with every hardware. It should only
be used for 2d graphics, but it can also perform some primitive
3d functions. These 3d drawing functions are quite fast, but
very inaccurate, and don't even support clipping in 3D mode. */
EDT_SOFTWARE,
//! The Burning's Software Renderer, an alternative software renderer
/** Basically it can be described as the Irrlicht Software
renderer on steroids. It rasterizes 3D geometry perfectly: It
is able to perform correct 3d clipping, perspective correct
texture mapping, perspective correct color mapping, and renders
sub pixel correct, sub texel correct primitives. In addition,
it does bilinear texel filtering and supports more materials
than the EDT_SOFTWARE driver. This renderer has been written
entirely by Thomas Alten, thanks a lot for this huge
contribution. */
EDT_BURNINGSVIDEO,
//! Direct3D8 device is longer supported in Irrlicht. You have to go back to Irrlicht 1.8 if you still need that.
DEPRECATED_EDT_DIRECT3D8_NO_LONGER_EXISTS, // keep enum to avoid breaking enumeration order (might be used in ini-files, serialization, etc)
//! Direct3D 9 device, only available on Win32 platforms.
/** Performs hardware accelerated rendering of 3D and 2D
primitives. */
EDT_DIRECT3D9,
//! OpenGL device, available on most platforms. //! OpenGL device, available on most platforms.
/** Performs hardware accelerated rendering of 3D and 2D /** Performs hardware accelerated rendering of 3D and 2D
primitives. */ primitives. */
@ -62,38 +35,12 @@ namespace video
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten //! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
EDT_WEBGL1, EDT_WEBGL1,
EDT_OPENGL3,
//! No driver, just for counting the elements //! No driver, just for counting the elements
EDT_COUNT EDT_COUNT
}; };
const c8* const DRIVER_TYPE_NAMES[] =
{
"NullDriver",
"Software Renderer",
"Burning's Video",
"Direct3D 8.1",
"Direct3D 9.0c",
"OpenGL 1.x/2.x/3.x",
"OpenGL ES1",
"OpenGL ES2",
"WebGL 1",
0
};
const c8* const DRIVER_TYPE_NAMES_SHORT[] =
{
"null",
"software",
"burning",
"d3d8",
"d3d9",
"opengl",
"ogles1",
"ogles2",
"webgl1",
0
};
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr

View File

@ -91,9 +91,6 @@ enum EGUI_ELEMENT_TYPE
//! The root of the GUI //! The root of the GUI
EGUIET_ROOT, EGUIET_ROOT,
//! IGUIProfiler
EGUIET_PROFILER,
//! Not an element, amount of elements in there //! Not an element, amount of elements in there
EGUIET_COUNT, EGUIET_COUNT,

View File

@ -1,101 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_MATERIAL_FLAGS_H_INCLUDED__
#define __E_MATERIAL_FLAGS_H_INCLUDED__
namespace irr
{
namespace video
{
//! Material flags
enum E_MATERIAL_FLAG
{
//! Draw as wireframe or filled triangles? Default: false
EMF_WIREFRAME = 0x1,
//! Draw as point cloud or filled triangles? Default: false
EMF_POINTCLOUD = 0x2,
//! Flat or Gouraud shading? Default: true
EMF_GOURAUD_SHADING = 0x4,
//! Will this material be lighted? Default: true
EMF_LIGHTING = 0x8,
//! Is the ZBuffer enabled? Default: true
EMF_ZBUFFER = 0x10,
//! May be written to the zbuffer or is it readonly. Default: true
/** This flag is ignored, if the material type is a transparent type. */
EMF_ZWRITE_ENABLE = 0x20,
//! Is backface culling enabled? Default: true
EMF_BACK_FACE_CULLING = 0x40,
//! Is frontface culling enabled? Default: false
/** Overrides EMF_BACK_FACE_CULLING if both are enabled. */
EMF_FRONT_FACE_CULLING = 0x80,
//! Is bilinear filtering enabled? Default: true
EMF_BILINEAR_FILTER = 0x100,
//! Is trilinear filtering enabled? Default: false
/** If the trilinear filter flag is enabled,
the bilinear filtering flag is ignored. */
EMF_TRILINEAR_FILTER = 0x200,
//! Is anisotropic filtering? Default: false
/** In Irrlicht you can use anisotropic texture filtering in
conjunction with bilinear or trilinear texture filtering
to improve rendering results. Primitives will look less
blurry with this flag switched on. */
EMF_ANISOTROPIC_FILTER = 0x400,
//! Is fog enabled? Default: false
EMF_FOG_ENABLE = 0x800,
//! Normalizes normals. Default: false
/** You can enable this if you need to scale a dynamic lighted
model. Usually, its normals will get scaled too then and it
will get darker. If you enable the EMF_NORMALIZE_NORMALS flag,
the normals will be normalized again, and the model will look
as bright as it should. */
EMF_NORMALIZE_NORMALS = 0x1000,
//! Access to all layers texture wrap settings. Overwrites separate layer settings.
/** Note that if you want to change TextureWrapU, TextureWrapV, TextureWrapW
independently, then you can't work with this flag, but will have to set the variables
directly. */
EMF_TEXTURE_WRAP = 0x2000,
//! AntiAliasing mode
EMF_ANTI_ALIASING = 0x4000,
//! ColorMask bits, for enabling the color planes
EMF_COLOR_MASK = 0x8000,
//! ColorMaterial enum for vertex color interpretation
EMF_COLOR_MATERIAL = 0x10000,
//! Flag for enabling/disabling mipmap usage
EMF_USE_MIP_MAPS = 0x20000,
//! Flag for blend operation
EMF_BLEND_OPERATION = 0x40000,
//! Flag for polygon offset
EMF_POLYGON_OFFSET = 0x80000,
//! Flag for blend factor
EMF_BLEND_FACTOR = 0x160000
};
} // end namespace video
} // end namespace irr
#endif // __E_MATERIAL_FLAGS_H_INCLUDED__

87
include/EMaterialProps.h Normal file
View File

@ -0,0 +1,87 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_MATERIAL_PROPS_H_INCLUDED__
#define __E_MATERIAL_PROPS_H_INCLUDED__
namespace irr
{
namespace video
{
//! Material properties
enum E_MATERIAL_PROP
{
//! Corresponds to SMaterial::Wireframe.
EMP_WIREFRAME = 0x1,
//! Corresponds to SMaterial::PointCloud.
EMP_POINTCLOUD = 0x2,
//! Corresponds to SMaterial::GouraudShading.
EMP_GOURAUD_SHADING = 0x4,
//! Corresponds to SMaterial::Lighting.
EMP_LIGHTING = 0x8,
//! Corresponds to SMaterial::ZBuffer.
EMP_ZBUFFER = 0x10,
//! Corresponds to SMaterial::ZWriteEnable.
EMP_ZWRITE_ENABLE = 0x20,
//! Corresponds to SMaterial::BackfaceCulling.
EMP_BACK_FACE_CULLING = 0x40,
//! Corresponds to SMaterial::FrontfaceCulling.
EMP_FRONT_FACE_CULLING = 0x80,
//! Corresponds to SMaterialLayer::MinFilter.
EMP_MIN_FILTER = 0x100,
//! Corresponds to SMaterialLayer::MagFilter.
EMP_MAG_FILTER = 0x200,
//! Corresponds to SMaterialLayer::AnisotropicFilter.
EMP_ANISOTROPIC_FILTER = 0x400,
//! Corresponds to SMaterial::FogEnable.
EMP_FOG_ENABLE = 0x800,
//! Corresponds to SMaterial::NormalizeNormals.
EMP_NORMALIZE_NORMALS = 0x1000,
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
//! TextureWrapW.
EMP_TEXTURE_WRAP = 0x2000,
//! Corresponds to SMaterial::AntiAliasing.
EMP_ANTI_ALIASING = 0x4000,
//! Corresponds to SMaterial::ColorMask.
EMP_COLOR_MASK = 0x8000,
//! Corresponds to SMaterial::ColorMaterial.
EMP_COLOR_MATERIAL = 0x10000,
//! Corresponds to SMaterial::UseMipMaps.
EMP_USE_MIP_MAPS = 0x20000,
//! Corresponds to SMaterial::BlendOperation.
EMP_BLEND_OPERATION = 0x40000,
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
EMP_POLYGON_OFFSET = 0x80000,
//! Corresponds to SMaterial::BlendFactor.
EMP_BLEND_FACTOR = 0x100000,
};
} // end namespace video
} // end namespace irr
#endif // __E_MATERIAL_PROPS_H_INCLUDED__

View File

@ -18,75 +18,6 @@ namespace video
diffuse material. */ diffuse material. */
EMT_SOLID = 0, EMT_SOLID = 0,
//! Solid material with 2 texture layers.
/** The second is blended onto the first using the alpha value
of the vertex colors. This material is currently not implemented in OpenGL.
*/
EMT_SOLID_2_LAYER,
//! Material type with standard lightmap technique
/** There should be 2 textures: The first texture layer is a
diffuse map, the second is a light map. Dynamic light is
ignored. */
EMT_LIGHTMAP,
//! Material type with lightmap technique like EMT_LIGHTMAP.
/** But lightmap and diffuse texture are added instead of modulated. */
EMT_LIGHTMAP_ADD,
//! Material type with standard lightmap technique
/** There should be 2 textures: The first texture layer is a
diffuse map, the second is a light map. Dynamic light is
ignored. The texture colors are effectively multiplied by 2
for brightening. Like known in DirectX as D3DTOP_MODULATE2X. */
EMT_LIGHTMAP_M2,
//! Material type with standard lightmap technique
/** There should be 2 textures: The first texture layer is a
diffuse map, the second is a light map. Dynamic light is
ignored. The texture colors are effectively multiplied by 4
for brightening. Like known in DirectX as D3DTOP_MODULATE4X. */
EMT_LIGHTMAP_M4,
//! Like EMT_LIGHTMAP, but also supports dynamic lighting.
EMT_LIGHTMAP_LIGHTING,
//! Like EMT_LIGHTMAP_M2, but also supports dynamic lighting.
EMT_LIGHTMAP_LIGHTING_M2,
//! Like EMT_LIGHTMAP_M4, but also supports dynamic lighting.
EMT_LIGHTMAP_LIGHTING_M4,
//! Detail mapped material.
/** The first texture is diffuse color map, the second is added
to this and usually displayed with a bigger scale value so that
it adds more detail. The detail map is added to the diffuse map
using ADD_SIGNED, so that it is possible to add and subtract
color from the diffuse map. For example a value of
(127,127,127) will not change the appearance of the diffuse map
at all. Often used for terrain rendering. */
EMT_DETAIL_MAP,
//! Look like a reflection of the environment around it.
/** To make this possible, a texture called 'sphere map' is
used, which must be set as the first texture. */
EMT_SPHERE_MAP,
//! A reflecting material with an optional non reflecting texture layer.
/** The reflection map should be set as first texture. */
EMT_REFLECTION_2_LAYER,
//! A transparent material.
/** Only the first texture is used. The new color is calculated
by simply adding the source color and the dest color. This
means if for example a billboard using a texture with black
background and a red circle on it is drawn with this material,
the result is that only the red circle will be drawn a little
bit transparent, and everything which was black is 100%
transparent and not visible. This material type is useful for
particle effects. */
EMT_TRANSPARENT_ADD_COLOR,
//! Makes the material transparent based on the texture alpha channel. //! Makes the material transparent based on the texture alpha channel.
/** The final color is blended together from the destination /** The final color is blended together from the destination
color and the texture color, using the alpha channel value as color and the texture color, using the alpha channel value as
@ -115,12 +46,6 @@ namespace video
//! Makes the material transparent based on the vertex alpha value. //! Makes the material transparent based on the vertex alpha value.
EMT_TRANSPARENT_VERTEX_ALPHA, EMT_TRANSPARENT_VERTEX_ALPHA,
//! A transparent reflecting material with an optional additional non reflecting texture layer.
/** The reflection map should be set as first texture. The
transparency depends on the alpha value in the vertex colors. A
texture which will not reflect can be set as second texture.*/
EMT_TRANSPARENT_REFLECTION_2_LAYER,
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC ) //! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
/** Using only first texture. Generic blending method. /** Using only first texture. Generic blending method.
The blend function is set to SMaterial::MaterialTypeParam with The blend function is set to SMaterial::MaterialTypeParam with
@ -135,22 +60,9 @@ namespace video
const char* const sBuiltInMaterialTypeNames[] = const char* const sBuiltInMaterialTypeNames[] =
{ {
"solid", "solid",
"solid_2layer",
"lightmap",
"lightmap_add",
"lightmap_m2",
"lightmap_m4",
"lightmap_light",
"lightmap_light_m2",
"lightmap_light_m4",
"detail_map",
"sphere_map",
"reflection_2layer",
"trans_add",
"trans_alphach", "trans_alphach",
"trans_alphach_ref", "trans_alphach_ref",
"trans_vertex_alpha", "trans_vertex_alpha",
"trans_reflection_2layer",
"onetexture_blend", "onetexture_blend",
0 0
}; };

View File

@ -36,20 +36,6 @@ namespace scene
//! Explicitly set all vertices for each triangle. //! Explicitly set all vertices for each triangle.
EPT_TRIANGLES, EPT_TRIANGLES,
//! After the first two vertices each further two vertices create a quad with the preceding two.
//! Not supported by Direct3D
EPT_QUAD_STRIP,
//! Every four vertices create a quad.
//! Not supported by Direct3D
//! Deprecated with newer OpenGL drivers
EPT_QUADS,
//! Just as LINE_LOOP, but filled.
//! Not supported by Direct3D
//! Deprecated with newer OpenGL drivers
EPT_POLYGON,
//! The single vertices are expanded to quad billboards on the GPU. //! The single vertices are expanded to quad billboards on the GPU.
EPT_POINT_SPRITES EPT_POINT_SPRITES
}; };

View File

@ -61,7 +61,7 @@ namespace scene
if getMeshType() returns EAMT_MD2 it's safe to cast the if getMeshType() returns EAMT_MD2 it's safe to cast the
IAnimatedMesh to IAnimatedMeshMD2. IAnimatedMesh to IAnimatedMeshMD2.
\returns Type of the mesh. */ \returns Type of the mesh. */
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_ E_ANIMATED_MESH_TYPE getMeshType() const override
{ {
return EAMT_UNKNOWN; return EAMT_UNKNOWN;
} }

View File

@ -59,10 +59,6 @@ namespace scene
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) : IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { } ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { }
//! Get the name of the bone
/** \deprecated Use getName instead. This method may be removed by Irrlicht 1.9 */
_IRR_DEPRECATED_ virtual const c8* getBoneName() const { return getName(); }
//! Get the index of the bone //! Get the index of the bone
virtual u32 getBoneIndex() const = 0; virtual u32 getBoneIndex() const = 0;
@ -74,17 +70,17 @@ namespace scene
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0; virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
//! Get the axis aligned bounding box of this node //! Get the axis aligned bounding box of this node
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ = 0; const core::aabbox3d<f32>& getBoundingBox() const override = 0;
//! Returns the relative transformation of the scene node. //! Returns the relative transformation of the scene node.
//virtual core::matrix4 getRelativeTransformation() const = 0; //virtual core::matrix4 getRelativeTransformation() const = 0;
//! The animation method. //! The animation method.
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_ =0; void OnAnimate(u32 timeMs) override =0;
//! The render method. //! The render method.
/** Does nothing as bones are not visible. */ /** Does nothing as bones are not visible. */
virtual void render() _IRR_OVERRIDE_ { } void render() override { }
//! How the relative transformation of the bone is used //! How the relative transformation of the bone is used
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0; virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;

View File

@ -72,7 +72,7 @@ namespace scene
ISceneManager::addCameraSceneNodeFPS, may want to get ISceneManager::addCameraSceneNodeFPS, may want to get
this input for changing their position, look at target or this input for changing their position, look at target or
whatever. */ whatever. */
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_ =0; bool OnEvent(const SEvent& event) override =0;
//! Sets the look at target of the camera //! Sets the look at target of the camera
/** If the camera's target and rotation are bound ( @see /** If the camera's target and rotation are bound ( @see
@ -90,7 +90,7 @@ namespace scene
bindTargetAndRotation() ) then calling this will also change bindTargetAndRotation() ) then calling this will also change
the camera's target to match the rotation. the camera's target to match the rotation.
\param rotation New rotation of the node in degrees. */ \param rotation New rotation of the node in degrees. */
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_ =0; void setRotation(const core::vector3df& rotation) override =0;
//! Gets the current look at target of the camera //! Gets the current look at target of the camera
/** \return The current look at target of the camera, in world co-ordinates */ /** \return The current look at target of the camera, in world co-ordinates */

View File

@ -160,6 +160,9 @@ namespace gui
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/ \param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0; virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
/** Specific to SDL */
virtual void setRelativeMode(bool relative) {};
//! Sets the active cursor icon //! Sets the active cursor icon
/** Setting cursor icons is so far only supported on Win32 and Linux */ /** Setting cursor icons is so far only supported on Win32 and Linux */

View File

@ -452,10 +452,10 @@ struct SEvent
/** Unlike other events, joystick events represent the result of polling /** Unlike other events, joystick events represent the result of polling
* each connected joystick once per run() of the device. Joystick events will * each connected joystick once per run() of the device. Joystick events will
* not be generated by default. If joystick support is available for the * not be generated by default. If joystick support is available for the
* active device, _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ is defined, and * active device, and @ref irr::IrrlichtDevice::activateJoysticks() has been
* @ref irr::IrrlichtDevice::activateJoysticks() has been called, an event of * called, an event of this type will be generated once per joystick per
* this type will be generated once per joystick per @ref IrrlichtDevice::run() * @ref IrrlichtDevice::run() regardless of whether the state of the joystick
* regardless of whether the state of the joystick has actually changed. */ * has actually changed. */
struct SJoystickEvent struct SJoystickEvent
{ {
enum enum

View File

@ -210,58 +210,6 @@ public:
\return A pointer to the specified loader, 0 if the index is incorrect. */ \return A pointer to the specified loader, 0 if the index is incorrect. */
virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0; virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0;
//! Adds a zip archive to the file system.
/** \deprecated This function is provided for compatibility
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
you should use addFileArchive instead.
After calling this, the Irrlicht Engine will search and open files directly from this archive too.
This is useful for hiding data from the end user, speeding up file access and making it possible to
access for example Quake3 .pk3 files, which are no different than .zip files.
\param filename: Filename of the zip archive to add to the file system.
\param ignoreCase: If set to true, files in the archive can be accessed without
writing all letters in the right case.
\param ignorePaths: If set to true, files in the added archive can be accessed
without its complete path.
\return True if the archive was added successfully, false if not. */
_IRR_DEPRECATED_ virtual bool addZipFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
{
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_ZIP);
}
//! Adds an unzipped archive (or basedirectory with subdirectories..) to the file system.
/** \deprecated This function is provided for compatibility
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
you should use addFileArchive instead.
Useful for handling data which will be in a zip file
\param filename: Filename of the unzipped zip archive base directory to add to the file system.
\param ignoreCase: If set to true, files in the archive can be accessed without
writing all letters in the right case.
\param ignorePaths: If set to true, files in the added archive can be accessed
without its complete path.
\return True if the archive was added successful, false if not. */
_IRR_DEPRECATED_ virtual bool addFolderFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
{
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_FOLDER);
}
//! Adds a pak archive to the file system.
/** \deprecated This function is provided for compatibility
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
you should use addFileArchive instead.
After calling this, the Irrlicht Engine will search and open files directly from this archive too.
This is useful for hiding data from the end user, speeding up file access and making it possible to
access for example Quake2/KingPin/Hexen2 .pak files
\param filename: Filename of the pak archive to add to the file system.
\param ignoreCase: If set to true, files in the archive can be accessed without
writing all letters in the right case.
\param ignorePaths: If set to true, files in the added archive can be accessed
without its complete path.(should not use with Quake2 paks
\return True if the archive was added successful, false if not. */
_IRR_DEPRECATED_ virtual bool addPakFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
{
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_PAK);
}
//! Get the current working directory. //! Get the current working directory.
/** \return Current working directory as a string. */ /** \return Current working directory as a string. */
virtual const path& getWorkingDirectory() =0; virtual const path& getWorkingDirectory() =0;

View File

@ -54,9 +54,9 @@ namespace gui
//! Sets text justification of the text area //! Sets text justification of the text area
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default), /** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text. EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
\param vertical: EGUIA_UPPERLEFT to align with top edge, \param vertical: EGUIA_UPPERLEFT to align with top edge,
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */ EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0; virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
//! Set the maximal number of rows for the selection listbox //! Set the maximal number of rows for the selection listbox

View File

@ -433,7 +433,7 @@ public:
if (el) if (el)
{ {
// find the highest element number // find the highest element number
el->getNextElement(-1, true, IsTabGroup, first, closest, true); el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
if (first) if (first)
{ {
TabOrder = first->getTabOrder() + 1; TabOrder = first->getTabOrder() + 1;
@ -545,7 +545,7 @@ public:
//! Called if an event happened. //! Called if an event happened.
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_ bool OnEvent(const SEvent& event) override
{ {
return Parent ? Parent->OnEvent(event) : false; return Parent ? Parent->OnEvent(event) : false;
} }
@ -706,7 +706,7 @@ public:
} }
} }
// search within children // search within children
if ((*it)->getNextElement(startOrder, reverse, group, first, closest)) if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled))
{ {
return true; return true;
} }

View File

@ -19,7 +19,7 @@ class IGUIFontBitmap : public IGUIFont
public: public:
//! Returns the type of this font //! Returns the type of this font
virtual EGUI_FONT_TYPE getType() const _IRR_OVERRIDE_ { return EGFT_BITMAP; } EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
//! returns the parsed Symbol Information //! returns the parsed Symbol Information
virtual IGUISpriteBank* getSpriteBank() const = 0; virtual IGUISpriteBank* getSpriteBank() const = 0;
@ -36,7 +36,7 @@ public:
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
left side kerning value of thisLetter, then add the global value. left side kerning value of thisLetter, then add the global value.
*/ */
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const _IRR_OVERRIDE_ = 0; s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
}; };
} // end namespace gui } // end namespace gui

View File

@ -88,9 +88,9 @@ namespace gui
//! Sets text justification mode //! Sets text justification mode
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default), /** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text. EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
\param vertical: EGUIA_UPPERLEFT to align with top edge (default), \param vertical: EGUIA_UPPERLEFT to align with top edge (default),
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */ EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0; virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
//! Enables or disables word wrap for using the static text as multiline text control. //! Enables or disables word wrap for using the static text as multiline text control.

View File

@ -129,15 +129,6 @@ namespace gui
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {} : IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
//! Returns zero based index of tab if in tabcontrol.
/** \deprecated Deprecated in 1.9, use IGUITabControl::getTabIndex instead*/
_IRR_DEPRECATED_ virtual s32 getNumber() const
{
if (Parent && Parent->getType() == EGUIET_TAB_CONTROL)
return static_cast<IGUITabControl*>(Parent)->getTabIndex(this);
return -1;
}
//! sets if the tab should draw its background //! sets if the tab should draw its background
virtual void setDrawBackground(bool draw=true) = 0; virtual void setDrawBackground(bool draw=true) = 0;

View File

@ -9,7 +9,6 @@
#include "position2d.h" #include "position2d.h"
#include "rect.h" #include "rect.h"
#include "SColor.h" #include "SColor.h"
#include "irrAllocator.h"
#include <string.h> #include <string.h>
namespace irr namespace irr
@ -44,7 +43,7 @@ public:
delete[] Data; delete[] Data;
if (DeleteMipMapsMemory) if (DeleteMipMapsMemory)
Allocator.deallocate(MipMapsData); delete[] MipMapsData;
} }
//! Returns the color format //! Returns the color format
@ -184,24 +183,6 @@ public:
return Data; return Data;
} }
//! Lock function. Use this to get a pointer to the image data.
/** Use getData instead.
\return Pointer to the image data. What type of data is pointed to
depends on the color format of the image. For example if the color
format is ECF_A8R8G8B8, it is of u32. Be sure to call unlock() after
you don't need the pointer any more. */
_IRR_DEPRECATED_ void* lock()
{
return getData();
}
//! Unlock function.
/** Should be called after the pointer received by lock() is not
needed anymore. */
_IRR_DEPRECATED_ void unlock()
{
}
//! Get the mipmap size for this image for a certain mipmap level //! Get the mipmap size for this image for a certain mipmap level
/** level 0 will be full image size. Every further level is half the size. /** level 0 will be full image size. Every further level is half the size.
Doesn't care if the image actually has mipmaps, just which size would be needed. */ Doesn't care if the image actually has mipmaps, just which size would be needed. */
@ -275,13 +256,13 @@ public:
will by copied internally. will by copied internally.
\param deleteMemory Whether the memory is deallocated upon \param deleteMemory Whether the memory is deallocated upon
destruction. */ destruction. */
void setMipMapsData(void* data, bool ownForeignMemory, bool deleteMemory) void setMipMapsData(void* data, bool ownForeignMemory)
{ {
if (data != MipMapsData) if (data != MipMapsData)
{ {
if (DeleteMipMapsMemory) if (DeleteMipMapsMemory)
{ {
Allocator.deallocate(MipMapsData); delete[] MipMapsData;
DeleteMipMapsMemory = false; DeleteMipMapsMemory = false;
} }
@ -292,7 +273,7 @@ public:
{ {
MipMapsData = static_cast<u8*>(data); MipMapsData = static_cast<u8*>(data);
DeleteMipMapsMemory = deleteMemory; DeleteMipMapsMemory = false;
} }
else else
{ {
@ -311,7 +292,7 @@ public:
dataSize += getDataSizeFromFormat(Format, width, height); dataSize += getDataSizeFromFormat(Format, width, height);
} while (width != 1 || height != 1); } while (width != 1 || height != 1);
MipMapsData = Allocator.allocate(dataSize); MipMapsData = new u8[dataSize];
memcpy(MipMapsData, data, dataSize); memcpy(MipMapsData, data, dataSize);
DeleteMipMapsMemory = true; DeleteMipMapsMemory = true;
@ -330,6 +311,12 @@ public:
//! Sets a pixel //! Sets a pixel
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0; virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
//! Copies this surface into another, if it has the exact same size and format.
/** NOTE: mipmaps are ignored
\return True if it was copied, false otherwise.
*/
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) const = 0;
//! Copies the image into the target, scaling the image to fit //! Copies the image into the target, scaling the image to fit
/** NOTE: mipmaps are ignored */ /** NOTE: mipmaps are ignored */
virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0; virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
@ -362,19 +349,6 @@ public:
//! fills the surface with given color //! fills the surface with given color
virtual void fill(const SColor &color) =0; virtual void fill(const SColor &color) =0;
//! Inform whether the image is compressed
_IRR_DEPRECATED_ bool isCompressed() const
{
return IImage::isCompressedFormat(Format);
}
//! Check whether the image has MipMaps
/** \return True if image has MipMaps, else false. */
_IRR_DEPRECATED_ bool hasMipMaps() const
{
return (getMipMapsData() != 0);
}
//! get the amount of Bits per Pixel of the given color format //! get the amount of Bits per Pixel of the given color format
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format) static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
{ {
@ -578,7 +552,6 @@ protected:
bool DeleteMemory; bool DeleteMemory;
bool DeleteMipMapsMemory; bool DeleteMipMapsMemory;
core::irrAllocator<u8> Allocator;
#if defined(IRRLICHT_sRGB) #if defined(IRRLICHT_sRGB)
int Format_sRGB; int Format_sRGB;
#endif #endif

View File

@ -45,17 +45,6 @@ public:
/** \param file File handle to check. /** \param file File handle to check.
\return Pointer to newly created image, or 0 upon error. */ \return Pointer to newly created image, or 0 upon error. */
virtual IImage* loadImage(io::IReadFile* file) const = 0; virtual IImage* loadImage(io::IReadFile* file) const = 0;
//! Creates a multiple surfaces from the file eg. whole cube map.
/** \param file File handle to check.
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
\return Array of pointers to newly created images. */
virtual core::array<IImage*> loadImages(io::IReadFile* file, E_TEXTURE_TYPE* type) const
{
core::array<IImage*> image;
return image;
}
}; };

View File

@ -115,30 +115,6 @@ public:
\param constantAmount Amount of registers to be set. One register consists of 4 floats. */ \param constantAmount Amount of registers to be set. One register consists of 4 floats. */
virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0; virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
//! \deprecated. This method may be removed by Irrlicht 2.0
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const f32* floats, int count)
{
return setVertexShaderConstant(getVertexShaderConstantID(name), floats, count);
}
//! \deprecated. This method may be removed by Irrlicht 2.0
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const s32* ints, int count)
{
return setVertexShaderConstant(getVertexShaderConstantID(name), ints, count);
}
//! \deprecated. This method may be removed by Irrlicht 2.0
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const f32* floats, int count)
{
return setPixelShaderConstant(getPixelShaderConstantID(name), floats, count);
}
//! \deprecated. This method may be removed by Irrlicht 2.0
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const s32* ints, int count)
{
return setPixelShaderConstant(getPixelShaderConstantID(name), ints, count);
}
//! Get pointer to the IVideoDriver interface //! Get pointer to the IVideoDriver interface
/** \return Pointer to the IVideoDriver interface */ /** \return Pointer to the IVideoDriver interface */
virtual IVideoDriver* getVideoDriver() = 0; virtual IVideoDriver* getVideoDriver() = 0;

View File

@ -97,11 +97,6 @@ namespace scene
/** \param box New bounding box to use for the mesh. */ /** \param box New bounding box to use for the mesh. */
virtual void setBoundingBox( const core::aabbox3df& box) = 0; virtual void setBoundingBox( const core::aabbox3df& box) = 0;
//! Sets a flag of all contained materials to a new value.
/** \param flag: Flag to set in all materials.
\param newvalue: New value to set in all materials. */
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) = 0;
//! Set the hardware mapping hint //! Set the hardware mapping hint
/** This methods allows to define optimization hints for the /** This methods allows to define optimization hints for the
hardware. This enables, e.g., the use of hardware buffers on hardware. This enables, e.g., the use of hardware buffers on

View File

@ -172,9 +172,6 @@ namespace scene
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2); case scene::EPT_TRIANGLE_STRIP: return (indexCount-2);
case scene::EPT_TRIANGLE_FAN: return (indexCount-2); case scene::EPT_TRIANGLE_FAN: return (indexCount-2);
case scene::EPT_TRIANGLES: return indexCount/3; case scene::EPT_TRIANGLES: return indexCount/3;
case scene::EPT_QUAD_STRIP: return (indexCount-2)/2;
case scene::EPT_QUADS: return indexCount/4;
case scene::EPT_POLYGON: return indexCount; // (not really primitives, that would be 1, works like line_strip)
case scene::EPT_POINT_SPRITES: return indexCount; case scene::EPT_POINT_SPRITES: return indexCount;
} }
return 0; return 0;

View File

@ -78,46 +78,6 @@ namespace scene
number. */ number. */
virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0; virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
//! Returns a mesh based on its name (often a filename).
/** \deprecated Use getMeshByName() instead. This method may be removed by
Irrlicht 1.9 */
_IRR_DEPRECATED_ IAnimatedMesh* getMeshByFilename(const io::path& filename)
{
return getMeshByName(filename);
}
//! Get the name of a loaded mesh, based on its index. (Name is often identical to the filename).
/** \deprecated Use getMeshName() instead. This method may be removed by
Irrlicht 1.9 */
_IRR_DEPRECATED_ const io::path& getMeshFilename(u32 index) const
{
return getMeshName(index).getInternalName();
}
//! Get the name of a loaded mesh, if there is any. (Name is often identical to the filename).
/** \deprecated Use getMeshName() instead. This method may be removed by
Irrlicht 1.9 */
_IRR_DEPRECATED_ const io::path& getMeshFilename(const IMesh* const mesh) const
{
return getMeshName(mesh).getInternalName();
}
//! Renames a loaded mesh.
/** \deprecated Use renameMesh() instead. This method may be removed by
Irrlicht 1.9 */
_IRR_DEPRECATED_ bool setMeshFilename(u32 index, const io::path& filename)
{
return renameMesh(index, filename);
}
//! Renames a loaded mesh.
/** \deprecated Use renameMesh() instead. This method may be removed by
Irrlicht 1.9 */
_IRR_DEPRECATED_ bool setMeshFilename(const IMesh* const mesh, const io::path& filename)
{
return renameMesh(mesh, filename);
}
//! Returns a mesh based on its name. //! Returns a mesh based on its name.
/** \param name Name of the mesh. Usually a filename. /** \param name Name of the mesh. Usually a filename.
\return Pointer to the mesh or 0 if there is none with this number. */ \return Pointer to the mesh or 0 if there is none with this number. */

View File

@ -18,20 +18,24 @@ public:
//! Get the current operation system version as string. //! Get the current operation system version as string.
virtual const core::stringc& getOperatingSystemVersion() const = 0; virtual const core::stringc& getOperatingSystemVersion() const = 0;
//! Get the current operation system version as string.
/** \deprecated Use getOperatingSystemVersion instead. This method will be removed in Irrlicht 1.9. */
_IRR_DEPRECATED_ const wchar_t* getOperationSystemVersion() const
{
return core::stringw(getOperatingSystemVersion()).c_str();
}
//! Copies text to the clipboard //! Copies text to the clipboard
//! \param text: text in utf-8
virtual void copyToClipboard(const c8* text) const = 0; virtual void copyToClipboard(const c8* text) const = 0;
//! Copies text to the primary selection
//! This is a no-op on some platforms.
//! \param text: text in utf-8
virtual void copyToPrimarySelection(const c8* text) const = 0;
//! Get text from the clipboard //! Get text from the clipboard
/** \return Returns 0 if no string is in there. */ //! \return Returns 0 if no string is in there, otherwise an utf-8 string.
virtual const c8* getTextFromClipboard() const = 0; virtual const c8* getTextFromClipboard() const = 0;
//! Get text from the primary selection
//! This is a no-op on some platforms.
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
virtual const c8* getTextFromPrimarySelection() const = 0;
//! Get the total and available system RAM //! Get the total and available system RAM
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B) /** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
\param availableBytes: will contain the available memory in Kilobytes (1024 B) \param availableBytes: will contain the available memory in Kilobytes (1024 B)

View File

@ -1,480 +0,0 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
// Written by Michael Zeilfelder
#ifndef __I_PROFILER_H_INCLUDED__
#define __I_PROFILER_H_INCLUDED__
#include "IrrCompileConfig.h"
#include "irrString.h"
#include "irrArray.h"
#include "ITimer.h"
#include <limits.h> // for INT_MAX (we should have a S32_MAX...)
namespace irr
{
class ITimer;
//! Used to store the profile data (and also used for profile group data).
struct SProfileData
{
friend class IProfiler;
SProfileData()
{
GroupIndex = 0;
reset();
}
bool operator<(const SProfileData& pd) const
{
return Id < pd.Id;
}
bool operator==(const SProfileData& pd) const
{
return Id == pd.Id;
}
u32 getGroupIndex() const
{
return GroupIndex;
}
const core::stringw& getName() const
{
return Name;
}
//! Each time profiling for this data is stopped it increases the counter by 1.
u32 getCallsCounter() const
{
return CountCalls;
}
//! Longest time a profile call for this id took from start until it was stopped again.
u32 getLongestTime() const
{
return LongestTime;
}
//! Time spend between start/stop
u32 getTimeSum() const
{
return TimeSum;
}
private:
// just to be used for searching as it does no initialization besides id
SProfileData(u32 id) : Id(id) {}
void reset()
{
CountCalls = 0;
LongestTime = 0;
TimeSum = 0;
LastTimeStarted = 0;
StartStopCounter = 0;
}
s32 Id;
u32 GroupIndex;
core::stringw Name;
s32 StartStopCounter; // 0 means stopped > 0 means it runs.
u32 CountCalls;
u32 LongestTime;
u32 TimeSum;
u32 LastTimeStarted;
};
//! Code-profiler. Please check the example in the Irrlicht examples folder about how to use it.
// Implementer notes:
// The design is all about allowing to use the central start/stop mechanism with minimal time overhead.
// This is why the class works without a virtual functions interface contrary to the usual Irrlicht design.
// And also why it works with id's instead of strings in the start/stop functions even if it makes using
// the class slightly harder.
// The class comes without reference-counting because the profiler instance is never released (TBD).
class IProfiler
{
public:
//! Constructor. You could use this to create a new profiler, but usually getProfiler() is used to access the global instance.
IProfiler() : Timer(0), NextAutoId(INT_MAX)
{}
virtual ~IProfiler()
{}
//! Add an id with given name and group which can be used for profiling with start/stop
/** After calling this once you can start/stop profiling for the given id.
\param id: Should be >= 0 as negative id's are reserved for Irrlicht. Also very large numbers (near INT_MAX) might
have been added automatically by the other add function.
\param name: Name for displaying profile data.
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
inline void add(s32 id, const core::stringw &name, const core::stringw &groupName);
//! Add an automatically generated for the given name and group which can be used for profiling with start/stop.
/** After calling this once you can start/stop profiling with the returned id.
\param name: Name for displaying profile data.
\param groupName: Each id belongs into a group - this helps on displaying profile data.
\return Automatic id's start at INT_MAX and count down for each new id. If the name already has an id then that id will be returned. */
inline s32 add(const core::stringw &name, const core::stringw &groupName);
//! Return the number of profile data blocks. There is one for each id.
u32 getProfileDataCount() const
{
return ProfileDatas.size();
}
//! Search for the index of the profile data by name
/** \param result Receives the resulting data index when one was found.
\param name String with name to search for
\return true when found, false when not found */
inline bool findDataIndex(u32 & result, const core::stringw &name) const;
//! Get the profile data
/** \param index A value between 0 and getProfileDataCount()-1. Indices can change when new id's are added.*/
const SProfileData& getProfileDataByIndex(u32 index) const
{
return ProfileDatas[index];
}
//! Get the profile data
/** \param id Same value as used in ::add
\return Profile data for the given id or 0 when it does not exist. */
inline const SProfileData* getProfileDataById(u32 id);
//! Get the number of profile groups. Will be at least 1.
/** NOTE: The first groups is always L"overview" which is an overview for all existing groups */
inline u32 getGroupCount() const
{
return ProfileGroups.size();
}
//! Get profile data for a group.
/** NOTE: The first groups is always L"overview" which is an overview for all existing groups */
inline const SProfileData& getGroupData(u32 index) const
{
return ProfileGroups[index];
}
//! Find the group index by the group-name
/** \param result Receives the resulting group index when one was found.
\param name String with name to search for
\return true when found, false when not found */
inline bool findGroupIndex(u32 & result, const core::stringw &name) const;
//! Start profile-timing for the given id
/** This increases an internal run-counter for the given id. It will profile as long as that counter is > 0.
NOTE: you have to add the id first with one of the ::add functions
*/
inline void start(s32 id);
//! Stop profile-timing for the given id
/** This increases an internal run-counter for the given id. If it reaches 0 the time since start is recorded.
You should have the same amount of start and stop calls. If stop is called more often than start
then the additional stop calls will be ignored (counter never goes below 0)
*/
inline void stop(s32 id);
//! Reset profile data for the given id
inline void resetDataById(s32 id);
//! Reset profile data for the given index
inline void resetDataByIndex(u32 index);
//! Reset profile data for a whole group
inline void resetGroup(u32 index);
//! Reset all profile data
/** NOTE: This is not deleting id's or groups, just resetting all timers to 0. */
inline void resetAll();
//! Write all profile-data into a string
/** \param result Receives the result string.
\param includeOverview When true a group-overview is attached first
\param suppressUncalled When true elements which got never called are not printed */
virtual void printAll(core::stringw &result, bool includeOverview=false,bool suppressUncalled=true) const = 0;
//! Write the profile data of one group into a string
/** \param result Receives the result string.
\param groupIndex_ */
virtual void printGroup(core::stringw &result, u32 groupIndex, bool suppressUncalled) const = 0;
protected:
inline u32 addGroup(const core::stringw &name);
// I would prefer using os::Timer, but os.h is not in the public interface so far.
// Timer must be initialized by the implementation.
ITimer * Timer;
core::array<SProfileData> ProfileDatas;
core::array<SProfileData> ProfileGroups;
private:
s32 NextAutoId; // for giving out id's automatically
};
//! Access the Irrlicht profiler object.
/** Profiler is always accessible, except in destruction of global objects.
If you want to get internal profiling information about the engine itself
you will have to re-compile the engine with _IRR_COMPILE_WITH_PROFILING_ enabled.
But you can use the profiler for profiling your own projects without that. */
IRRLICHT_API IProfiler& IRRCALLCONV getProfiler();
//! Class where the objects profile their own life-time.
/** This is a comfort wrapper around the IProfiler start/stop mechanism which is easier to use
when you want to profile a scope. You only have to create an object and it will profile it's own lifetime
for the given id. */
class CProfileScope
{
public:
//! Construct with an known id.
/** This is the fastest scope constructor, but the id must have been added before.
\param id Any id which you did add to the profiler before. */
CProfileScope(s32 id)
: Id(id), Profiler(getProfiler())
{
Profiler.start(Id);
}
//! Object will create the given name, groupName combination for the id if it doesn't exist already
/** \param id: Should be >= 0 as negative id's are reserved for Irrlicht. Also very large numbers (near INT_MAX) might
have been created already by the automatic add function of ::IProfiler.
\param name: Name for displaying profile data.
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
CProfileScope(s32 id, const core::stringw &name, const core::stringw &groupName)
: Id(id), Profiler(getProfiler())
{
Profiler.add(Id, name, groupName);
Profiler.start(Id);
}
//! Object will create an id for the given name, groupName combination if they don't exist already
/** Slowest scope constructor, but usually still fine unless speed is very critical.
\param name: Name for displaying profile data.
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
CProfileScope(const core::stringw &name, const core::stringw &groupName)
: Profiler(getProfiler())
{
Id = Profiler.add(name, groupName);
Profiler.start(Id);
}
~CProfileScope()
{
Profiler.stop(Id);
}
protected:
s32 Id;
IProfiler& Profiler;
};
// IMPLEMENTATION for in-line stuff
void IProfiler::start(s32 id)
{
s32 idx = ProfileDatas.binary_search(SProfileData(id));
if ( idx >= 0 && Timer )
{
++ProfileDatas[idx].StartStopCounter;
if (ProfileDatas[idx].StartStopCounter == 1 )
ProfileDatas[idx].LastTimeStarted = Timer->getRealTime();
}
}
void IProfiler::stop(s32 id)
{
if ( Timer )
{
u32 timeNow = Timer->getRealTime();
s32 idx = ProfileDatas.binary_search(SProfileData(id));
if ( idx >= 0 )
{
SProfileData &data = ProfileDatas[idx];
--ProfileDatas[idx].StartStopCounter;
if ( data.LastTimeStarted != 0 && ProfileDatas[idx].StartStopCounter == 0)
{
// update data for this id
++data.CountCalls;
u32 diffTime = timeNow - data.LastTimeStarted;
data.TimeSum += diffTime;
if ( diffTime > data.LongestTime )
data.LongestTime = diffTime;
data.LastTimeStarted = 0;
// update data of it's group
SProfileData & group = ProfileGroups[data.GroupIndex];
++group.CountCalls;
group.TimeSum += diffTime;
if ( diffTime > group.LongestTime )
group.LongestTime = diffTime;
group.LastTimeStarted = 0;
}
else if ( ProfileDatas[idx].StartStopCounter < 0 )
{
// ignore additional stop calls
ProfileDatas[idx].StartStopCounter = 0;
}
}
}
}
s32 IProfiler::add(const core::stringw &name, const core::stringw &groupName)
{
u32 index;
if ( findDataIndex(index, name) )
{
add( ProfileDatas[index].Id, name, groupName );
return ProfileDatas[index].Id;
}
else
{
s32 id = NextAutoId;
--NextAutoId;
add( id, name, groupName );
return id;
}
}
void IProfiler::add(s32 id, const core::stringw &name, const core::stringw &groupName)
{
u32 groupIdx;
if ( !findGroupIndex(groupIdx, groupName) )
{
groupIdx = addGroup(groupName);
}
SProfileData data(id);
s32 idx = ProfileDatas.binary_search(data);
if ( idx < 0 )
{
data.reset();
data.GroupIndex = groupIdx;
data.Name = name;
ProfileDatas.push_back(data);
ProfileDatas.sort();
}
else
{
// only reset on group changes, otherwise we want to keep the data or coding CProfileScope would become tricky.
if ( groupIdx != ProfileDatas[idx].GroupIndex )
{
resetDataByIndex((u32)idx);
ProfileDatas[idx].GroupIndex = groupIdx;
}
ProfileDatas[idx].Name = name;
}
}
u32 IProfiler::addGroup(const core::stringw &name)
{
SProfileData group;
group.Id = -1; // Id for groups doesn't matter so far
group.Name = name;
ProfileGroups.push_back(group);
return ProfileGroups.size()-1;
}
bool IProfiler::findDataIndex(u32 & result, const core::stringw &name) const
{
for ( u32 i=0; i < ProfileDatas.size(); ++i )
{
if ( ProfileDatas[i].Name == name )
{
result = i;
return true;
}
}
return false;
}
const SProfileData* IProfiler::getProfileDataById(u32 id)
{
SProfileData data(id);
s32 idx = ProfileDatas.binary_search(data);
if ( idx >= 0 )
return &ProfileDatas[idx];
return NULL;
}
bool IProfiler::findGroupIndex(u32 & result, const core::stringw &name) const
{
for ( u32 i=0; i < ProfileGroups.size(); ++i )
{
if ( ProfileGroups[i].Name == name )
{
result = i;
return true;
}
}
return false;
}
void IProfiler::resetDataById(s32 id)
{
s32 idx = ProfileDatas.binary_search(SProfileData(id));
if ( idx >= 0 )
{
resetDataByIndex((u32)idx);
}
}
void IProfiler::resetDataByIndex(u32 index)
{
SProfileData &data = ProfileDatas[index];
SProfileData & group = ProfileGroups[data.GroupIndex];
group.CountCalls -= data.CountCalls;
group.TimeSum -= data.TimeSum;
data.reset();
}
//! Reset profile data for a whole group
void IProfiler::resetGroup(u32 index)
{
for ( u32 i=0; i<ProfileDatas.size(); ++i )
{
if ( ProfileDatas[i].GroupIndex == index )
ProfileDatas[i].reset();
}
if ( index < ProfileGroups.size() )
ProfileGroups[index].reset();
}
void IProfiler::resetAll()
{
for ( u32 i=0; i<ProfileDatas.size(); ++i )
{
ProfileDatas[i].reset();
}
for ( u32 i=0; i<ProfileGroups.size(); ++i )
{
ProfileGroups[i].reset();
}
}
//! For internal engine use:
//! Code inside IRR_PROFILE is only executed when _IRR_COMPILE_WITH_PROFILING_ is set
//! This allows disabling all profiler code completely by changing that define.
//! It's generally useful to wrap profiler-calls in application code with a similar macro.
#ifdef _IRR_COMPILE_WITH_PROFILING_
#define IRR_PROFILE(X) X
#else
#define IRR_PROFILE(X)
#endif // IRR_PROFILE
} // namespace irr
#endif // __I_PROFILER_H_INCLUDED__

View File

@ -7,10 +7,6 @@
#include "irrTypes.h" #include "irrTypes.h"
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
#include "leakHunter.h"
#endif
namespace irr namespace irr
{ {
@ -50,17 +46,11 @@ namespace irr
IReferenceCounted() IReferenceCounted()
: DebugName(0), ReferenceCounter(1) : DebugName(0), ReferenceCounter(1)
{ {
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
LeakHunter::addObject(this);
#endif
} }
//! Destructor. //! Destructor.
virtual ~IReferenceCounted() virtual ~IReferenceCounted()
{ {
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
LeakHunter::removeObject(this);
#endif
} }
//! Grabs the object. Increments the reference counter by one. //! Grabs the object. Increments the reference counter by one.

View File

@ -318,20 +318,10 @@ namespace scene
* \endcode * \endcode
* If you would like to implement and add your own file format loader to Irrlicht, * If you would like to implement and add your own file format loader to Irrlicht,
* see addExternalMeshLoader(). * see addExternalMeshLoader().
* \param filename: Filename of the mesh to load. * \param file File handle of the mesh to load.
* \param alternativeCacheName: In case you want to have the mesh under another name in the cache (to create real copies)
* \return Null if failed, otherwise pointer to the mesh. * \return Null if failed, otherwise pointer to the mesh.
* This pointer should not be dropped. See IReferenceCounted::drop() for more information. * This pointer should not be dropped. See IReferenceCounted::drop() for more information.
**/ **/
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.
/** Works just as getMesh(const char* filename). If you want to
remove a loaded mesh from the cache again, use removeMesh().
\param file File handle of the mesh to load.
\return NULL if failed and pointer to the mesh if successful.
This pointer should not be dropped. See
IReferenceCounted::drop() for more information. */
virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0; virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
//! Get interface to the mesh cache which is shared between all existing scene managers. //! Get interface to the mesh cache which is shared between all existing scene managers.
@ -345,16 +335,6 @@ namespace scene
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
virtual video::IVideoDriver* getVideoDriver() = 0; virtual video::IVideoDriver* getVideoDriver() = 0;
//! Get the active GUIEnvironment
/** \return Pointer to the GUIEnvironment
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
virtual gui::IGUIEnvironment* getGUIEnvironment() = 0;
//! Get the active FileSystem
/** \return Pointer to the FileSystem
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
virtual io::IFileSystem* getFileSystem() = 0;
//! Adds a scene node for rendering an animated mesh model. //! Adds a scene node for rendering an animated mesh model.
/** \param mesh: Pointer to the loaded animated mesh to be displayed. /** \param mesh: Pointer to the loaded animated mesh to be displayed.
\param parent: Parent of the scene node. Can be NULL if no parent. \param parent: Parent of the scene node. Can be NULL if no parent.

View File

@ -352,38 +352,14 @@ namespace scene
} }
//! Sets all material flags at once to a new value. //! Execute a function on all materials of this scene node.
/** Useful, for example, if you want the whole mesh to be /** Useful for setting material properties, e.g. if you want the whole
affected by light. mesh to be affected by light. */
\param flag Which flag of all materials to be set. template <typename F>
\param newvalue New value of that flag. */ void forEachMaterial(F &&fn) {
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) for (u32 i = 0; i < getMaterialCount(); i++) {
{ fn(getMaterial(i));
for (u32 i=0; i<getMaterialCount(); ++i)
getMaterial(i).setFlag(flag, newvalue);
} }
//! Sets the texture of the specified layer in all materials of this scene node to the new texture.
/** \param textureLayer Layer of texture to be set. Must be a
value smaller than MATERIAL_MAX_TEXTURES.
\param texture New texture to be used. */
void setMaterialTexture(u32 textureLayer, video::ITexture* texture)
{
if (textureLayer >= video::MATERIAL_MAX_TEXTURES)
return;
for (u32 i=0; i<getMaterialCount(); ++i)
getMaterial(i).setTexture(textureLayer, texture);
}
//! Sets the material type of all materials in this scene node to a new material type.
/** \param newType New type of material to be set. */
void setMaterialType(video::E_MATERIAL_TYPE newType)
{
for (u32 i=0; i<getMaterialCount(); ++i)
getMaterial(i).MaterialType = newType;
} }

View File

@ -97,14 +97,6 @@ enum E_TEXTURE_CREATION_FLAG
*/ */
ETCF_AUTO_GENERATE_MIP_MAPS = 0x00000100, ETCF_AUTO_GENERATE_MIP_MAPS = 0x00000100,
//! Enable support for vertex shader texture sampling on some drivers
/** Default is false.
This adds a small costs to all texture switches.
Currently only affects D3D9.
On OpenGL vertex shaders use the same texture unit as pixel shaders, so support there only depends on GL version and not on this flag
*/
ETCF_SUPPORT_VERTEXT_TEXTURE = 0x00000200,
/** This flag is never used, it only forces the compiler to compile /** This flag is never used, it only forces the compiler to compile
these enumeration values to 32 bit. */ these enumeration values to 32 bit. */
ETCF_FORCE_32_BIT_DO_NOT_USE = 0x7fffffff ETCF_FORCE_32_BIT_DO_NOT_USE = 0x7fffffff

View File

@ -21,41 +21,6 @@ public:
*/ */
virtual u32 getRealTime() const = 0; virtual u32 getRealTime() const = 0;
enum EWeekday
{
EWD_SUNDAY=0,
EWD_MONDAY,
EWD_TUESDAY,
EWD_WEDNESDAY,
EWD_THURSDAY,
EWD_FRIDAY,
EWD_SATURDAY
};
struct RealTimeDate
{
// Hour of the day, from 0 to 23
u32 Hour;
// Minute of the hour, from 0 to 59
u32 Minute;
// Second of the minute, due to extra seconds from 0 to 61
u32 Second;
// Year of the Gregorian calender
s32 Year;
// Month of the year, from 1 to 12
u32 Month;
// Day of the month, from 1 to 31
u32 Day;
// Weekday for the current day
EWeekday Weekday;
// Day of the year, from 1 to 366
u32 Yearday;
// Whether daylight saving is on
bool IsDST;
};
virtual RealTimeDate getRealTimeAndDate() const = 0;
//! Returns current virtual time in milliseconds. //! Returns current virtual time in milliseconds.
/** This value starts with 0 and can be manipulated using setTime(), /** This value starts with 0 and can be manipulated using setTime(),
stopTimer(), startTimer(), etc. This value depends on the set speed of stopTimer(), startTimer(), etc. This value depends on the set speed of

View File

@ -56,32 +56,11 @@ namespace video
ETS_WORLD, ETS_WORLD,
//! Projection transformation //! Projection transformation
ETS_PROJECTION, ETS_PROJECTION,
//! Texture transformation //! Texture 0 transformation
//! Use E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + texture_number) to access other texture transformations
ETS_TEXTURE_0, ETS_TEXTURE_0,
//! Texture transformation
ETS_TEXTURE_1,
//! Texture transformation
ETS_TEXTURE_2,
//! Texture transformation
ETS_TEXTURE_3,
#if _IRR_MATERIAL_MAX_TEXTURES_>4
//! Texture transformation
ETS_TEXTURE_4,
#if _IRR_MATERIAL_MAX_TEXTURES_>5
//! Texture transformation
ETS_TEXTURE_5,
#if _IRR_MATERIAL_MAX_TEXTURES_>6
//! Texture transformation
ETS_TEXTURE_6,
#if _IRR_MATERIAL_MAX_TEXTURES_>7
//! Texture transformation
ETS_TEXTURE_7,
#endif
#endif
#endif
#endif
//! Only used internally //! Only used internally
ETS_COUNT = ETS_TEXTURE_0 + _IRR_MATERIAL_MAX_TEXTURES_ ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES
}; };
//! Special render targets, which usually map to dedicated hardware //! Special render targets, which usually map to dedicated hardware
@ -286,24 +265,10 @@ namespace video
IReferenceCounted::drop() for more information. */ IReferenceCounted::drop() for more information. */
virtual ITexture* getTexture(io::IReadFile* file) =0; virtual ITexture* getTexture(io::IReadFile* file) =0;
//! Returns a texture by index
/** \param index: Index of the texture, must be smaller than
getTextureCount() Please note that this index might change when
adding or removing textures
\return Pointer to the texture, or 0 if the texture was not
set or index is out of bounds. This pointer should not be
dropped. See IReferenceCounted::drop() for more information. */
virtual ITexture* getTextureByIndex(u32 index) =0;
//! Returns amount of textures currently loaded //! Returns amount of textures currently loaded
/** \return Amount of textures currently loaded */ /** \return Amount of textures currently loaded */
virtual u32 getTextureCount() const = 0; virtual u32 getTextureCount() const = 0;
//! Renames a texture
/** \param texture Pointer to the texture to rename.
\param newName New name for the texture. This should be a unique name. */
virtual void renameTexture(ITexture* texture, const io::path& newName) = 0;
//! Creates an empty texture of specified size. //! Creates an empty texture of specified size.
/** \param size: Size of the texture. /** \param size: Size of the texture.
\param name A name for the texture. Later calls to \param name A name for the texture. Later calls to
@ -318,24 +283,6 @@ namespace video
virtual ITexture* addTexture(const core::dimension2d<u32>& size, virtual ITexture* addTexture(const core::dimension2d<u32>& size,
const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0; const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
//! Creates a texture from an IImage.
/** \param name A name for the texture. Later calls of
getTexture() with this name will return this texture.
The name can _not_ be empty.
\param image Image the texture is created from.
\param mipmapData Optional pointer to a mipmaps data.
If this parameter is not given, the mipmaps are derived from image.
\return Pointer to the newly created texture. This pointer
should not be dropped. See IReferenceCounted::drop() for more
information. */
_IRR_DEPRECATED_ ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData)
{
if (image)
image->setMipMapsData(mipmapData, false, true);
return addTexture(name, image);
}
//! Creates a texture from an IImage. //! Creates a texture from an IImage.
/** \param name A name for the texture. Later calls of /** \param name A name for the texture. Later calls of
getTexture() with this name will return this texture. getTexture() with this name will return this texture.
@ -387,8 +334,7 @@ namespace video
const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0; const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0;
//! Adds a new render target texture with 6 sides for a cubemap map to the texture cache. //! Adds a new render target texture with 6 sides for a cubemap map to the texture cache.
/** NOTE: Only supported on D3D9 so far. /** \param sideLen Length of one cubemap side.
\param sideLen Length of one cubemap side.
\param name A name for the texture. Later calls of getTexture() with this name will return this texture. \param name A name for the texture. Later calls of getTexture() with this name will return this texture.
The name can _not_ be empty. The name can _not_ be empty.
\param format The color format of the render target. Floating point formats are supported. \param format The color format of the render target. Floating point formats are supported.
@ -480,15 +426,9 @@ namespace video
color values may not be exactly the same in the engine and for color values may not be exactly the same in the engine and for
example in picture edit programs. To avoid this problem, you example in picture edit programs. To avoid this problem, you
could use the makeColorKeyTexture method, which takes the could use the makeColorKeyTexture method, which takes the
position of a pixel instead a color value. position of a pixel instead a color value. */
\param zeroTexels (deprecated) If set to true, then any texels that match
the color key will have their color, as well as their alpha, set to zero
(i.e. black). This behavior matches the legacy (buggy) behavior prior
to release 1.5 and is provided for backwards compatibility only.
This parameter may be removed by Irrlicht 1.9. */
virtual void makeColorKeyTexture(video::ITexture* texture, virtual void makeColorKeyTexture(video::ITexture* texture,
video::SColor color, video::SColor color) const =0;
bool zeroTexels = false) const =0;
//! Sets a boolean alpha channel on the texture based on the color at a position. //! Sets a boolean alpha channel on the texture based on the color at a position.
/** This makes the texture fully transparent at the texels where /** This makes the texture fully transparent at the texels where
@ -497,15 +437,9 @@ namespace video
\param texture Texture whose alpha channel is modified. \param texture Texture whose alpha channel is modified.
\param colorKeyPixelPos Position of a pixel with the color key \param colorKeyPixelPos Position of a pixel with the color key
color. Every texel with this color will become fully transparent as color. Every texel with this color will become fully transparent as
described above. described above. */
\param zeroTexels (deprecated) If set to true, then any texels that match
the color key will have their color, as well as their alpha, set to zero
(i.e. black). This behavior matches the legacy (buggy) behavior prior
to release 1.5 and is provided for backwards compatibility only.
This parameter may be removed by Irrlicht 1.9. */
virtual void makeColorKeyTexture(video::ITexture* texture, virtual void makeColorKeyTexture(video::ITexture* texture,
core::position2d<s32> colorKeyPixelPos, core::position2d<s32> colorKeyPixelPos) const =0;
bool zeroTexels = false) const =0;
//! Set a render target. //! Set a render target.
/** This will only work if the driver supports the /** This will only work if the driver supports the
@ -738,23 +672,6 @@ namespace video
virtual void draw3DLine(const core::vector3df& start, virtual void draw3DLine(const core::vector3df& start,
const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0; const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
//! Draws a 3d triangle.
/** This method calls drawVertexPrimitiveList for some triangles.
This method works with all drivers because it simply calls
drawVertexPrimitiveList, but it is hence not very fast.
Note that the triangle is drawn using the current
transformation matrix and material. So if you need to draw it
independently of the current transformation, use
\code
driver->setMaterial(someMaterial);
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
\endcode
for some properly set up material before drawing the triangle.
\param triangle The triangle to draw.
\param color Color of the line. */
virtual void draw3DTriangle(const core::triangle3df& triangle,
SColor color = SColor(255,255,255,255)) =0;
//! Draws a 3d axis aligned box. //! Draws a 3d axis aligned box.
/** This method simply calls draw3DLine for the edges of the /** This method simply calls draw3DLine for the edges of the
box. Note that the box is drawn using the current transformation box. Note that the box is drawn using the current transformation
@ -785,7 +702,7 @@ namespace video
\param texture Texture to be drawn. \param texture Texture to be drawn.
\param destPos Upper left 2d destination position where the \param destPos Upper left 2d destination position where the
image will be drawn. image will be drawn.
\param sourceRect Source rectangle in the image. \param sourceRect Source rectangle in the texture (based on it's OriginalSize)
\param clipRect Pointer to rectangle on the screen where the \param clipRect Pointer to rectangle on the screen where the
image is clipped to. image is clipped to.
If this pointer is NULL the image is not clipped. If this pointer is NULL the image is not clipped.
@ -799,35 +716,6 @@ namespace video
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0; SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
/** The images are drawn beginning at pos and concatenated in
one line. All drawings are clipped against clipRect (if != 0).
The subtextures are defined by the array of sourceRects and are
chosen by the indices given.
\param texture Texture to be drawn.
\param pos Upper left 2d destination position where the image
will be drawn.
\param sourceRects Source rectangles of the image.
\param indices List of indices which choose the actual
rectangle used each time.
\param kerningWidth Offset to Position on X
\param clipRect Pointer to rectangle on the screen where the
image is clipped to.
If this pointer is 0 then the image is not clipped.
\param color Color with which the image is drawn.
Note that the alpha component is used. If alpha is other than
255, the image will be transparent.
\param useAlphaChannelOfTexture: If true, the alpha channel of
the texture is used to draw the image. */
virtual void draw2DImageBatch(const video::ITexture* texture,
const core::position2d<s32>& pos,
const core::array<core::rect<s32> >& sourceRects,
const core::array<s32>& indices,
s32 kerningWidth=0,
const core::rect<s32>* clipRect=0,
SColor color=SColor(255,255,255,255),
bool useAlphaChannelOfTexture=false) =0;
//! Draws a set of 2d images, using a color and the alpha channel of the texture. //! Draws a set of 2d images, using a color and the alpha channel of the texture.
/** All drawings are clipped against clipRect (if != 0). /** All drawings are clipped against clipRect (if != 0).
The subtextures are defined by the array of sourceRects and are The subtextures are defined by the array of sourceRects and are
@ -835,7 +723,7 @@ namespace video
\param texture Texture to be drawn. \param texture Texture to be drawn.
\param positions Array of upper left 2d destinations where the \param positions Array of upper left 2d destinations where the
images will be drawn. images will be drawn.
\param sourceRects Source rectangles of the image. \param sourceRects Source rectangles of the texture (based on it's OriginalSize)
\param clipRect Pointer to rectangle on the screen where the \param clipRect Pointer to rectangle on the screen where the
images are clipped to. images are clipped to.
If this pointer is 0 then the image is not clipped. If this pointer is 0 then the image is not clipped.
@ -855,7 +743,7 @@ namespace video
/** Suggested and first implemented by zola. /** Suggested and first implemented by zola.
\param texture The texture to draw from \param texture The texture to draw from
\param destRect The rectangle to draw into \param destRect The rectangle to draw into
\param sourceRect The rectangle denoting a part of the texture \param sourceRect The rectangle denoting a part of the texture (based on it's OriginalSize)
\param clipRect Clips the destination rectangle (may be 0) \param clipRect Clips the destination rectangle (may be 0)
\param colors Array of 4 colors denoting the color values of \param colors Array of 4 colors denoting the color values of
the corners of the destRect the corners of the destRect
@ -898,13 +786,6 @@ namespace video
SColor colorLeftDown, SColor colorRightDown, SColor colorLeftDown, SColor colorRightDown,
const core::rect<s32>* clip =0) =0; const core::rect<s32>* clip =0) =0;
//! Draws the outline of a 2D rectangle.
/** \param pos Position of the rectangle.
\param color Color of the rectangle to draw. The alpha component
specifies how transparent the rectangle outline will be. */
virtual void draw2DRectangleOutline(const core::recti& pos,
SColor color=SColor(255,255,255,255)) =0;
//! Draws a 2d line. //! Draws a 2d line.
/** In theory both start and end will be included in coloring. /** In theory both start and end will be included in coloring.
BUG: Currently d3d ignores the last pixel BUG: Currently d3d ignores the last pixel
@ -918,72 +799,6 @@ namespace video
const core::position2d<s32>& end, const core::position2d<s32>& end,
SColor color=SColor(255,255,255,255)) =0; SColor color=SColor(255,255,255,255)) =0;
//! Draws a pixel.
/** \param x The x-position of the pixel.
\param y The y-position of the pixel.
\param color Color of the pixel to draw. */
virtual void drawPixel(u32 x, u32 y, const SColor& color) =0;
//! Draws a non filled concyclic regular 2d polygon.
/** This method can be used to draw circles, but also
triangles, tetragons, pentagons, hexagons, heptagons, octagons,
enneagons, decagons, hendecagons, dodecagon, triskaidecagons,
etc. I think you'll got it now. And all this by simply
specifying the vertex count. Welcome to the wonders of
geometry.
\param center Position of center of circle (pixels).
\param radius Radius of circle in pixels.
\param color Color of the circle.
\param vertexCount Amount of vertices of the polygon. Specify 2
to draw a line, 3 to draw a triangle, 4 for tetragons and a lot
(>10) for nearly a circle. */
virtual void draw2DPolygon(core::position2d<s32> center,
f32 radius,
video::SColor color=SColor(100,255,255,255),
s32 vertexCount=10) =0;
//! Draws a shadow volume into the stencil buffer.
/** To draw a stencil shadow, do this: First, draw all geometry.
Then use this method, to draw the shadow volume. Then, use
IVideoDriver::drawStencilShadow() to visualize the shadow.
Please note that the code for the opengl version of the method
is based on free code sent in by Philipp Dortmann, lots of
thanks go to him!
\param triangles Array of 3d vectors, specifying the shadow
volume.
\param zfail If set to true, zfail method is used, otherwise
zpass.
\param debugDataVisible The debug data that is enabled for this
shadow node
*/
virtual void drawStencilShadowVolume(const core::array<core::vector3df>& triangles, bool zfail=true, u32 debugDataVisible=0) =0;
//! Fills the stencil shadow with color.
/** After the shadow volume has been drawn into the stencil
buffer using IVideoDriver::drawStencilShadowVolume(), use this
to draw the color of the shadow.
Please note that the code for the opengl version of the method
is based on free code sent in by Philipp Dortmann, lots of
thanks go to him!
\param clearStencilBuffer Set this to false, if you want to
draw every shadow with the same color, and only want to call
drawStencilShadow() once after all shadow volumes have been
drawn. Set this to true, if you want to paint every shadow with
its own color.
\param leftUpEdge Color of the shadow in the upper left corner
of screen.
\param rightUpEdge Color of the shadow in the upper right
corner of screen.
\param leftDownEdge Color of the shadow in the lower left
corner of screen.
\param rightDownEdge Color of the shadow in the lower right
corner of screen. */
virtual void drawStencilShadow(bool clearStencilBuffer=false,
video::SColor leftUpEdge = video::SColor(255,0,0,0),
video::SColor rightUpEdge = video::SColor(255,0,0,0),
video::SColor leftDownEdge = video::SColor(255,0,0,0),
video::SColor rightDownEdge = video::SColor(255,0,0,0)) =0;
//! Draws a mesh buffer //! Draws a mesh buffer
/** \param mb Buffer to draw */ /** \param mb Buffer to draw */
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0; virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
@ -1099,28 +914,6 @@ namespace video
\return The current texture creation flag enabled mode. */ \return The current texture creation flag enabled mode. */
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0; virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
//! Creates a software images from a file.
/** No hardware texture will be created for those images. This
method is useful for example if you want to read a heightmap
for a terrain renderer.
\param filename Name of the file from which the images are created.
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
\return The array of created images.
If you no longer need those images, you should call IImage::drop() on each of them.
See IReferenceCounted::drop() for more information. */
virtual core::array<IImage*> createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type = 0) = 0;
//! Creates a software images from a file.
/** No hardware texture will be created for those images. This
method is useful for example if you want to read a heightmap
for a terrain renderer.
\param file File from which the image is created.
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
\return The array of created images.
If you no longer need those images, you should call IImage::drop() on each of them.
See IReferenceCounted::drop() for more information. */
virtual core::array<IImage*> createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type = 0) = 0;
//! Creates a software image from a file. //! Creates a software image from a file.
/** No hardware texture will be created for this image. This /** No hardware texture will be created for this image. This
method is useful for example if you want to read a heightmap method is useful for example if you want to read a heightmap
@ -1130,15 +923,7 @@ namespace video
\return The created image. \return The created image.
If you no longer need the image, you should call IImage::drop(). If you no longer need the image, you should call IImage::drop().
See IReferenceCounted::drop() for more information. */ See IReferenceCounted::drop() for more information. */
IImage* createImageFromFile(const io::path& filename) virtual IImage* createImageFromFile(const io::path& filename) = 0;
{
core::array<IImage*> imageArray = createImagesFromFile(filename);
for (u32 i = 1; i < imageArray.size(); ++i)
imageArray[i]->drop();
return (imageArray.size() > 0) ? imageArray[0] : 0;
}
//! Creates a software image from a file. //! Creates a software image from a file.
/** No hardware texture will be created for this image. This /** No hardware texture will be created for this image. This
@ -1148,15 +933,7 @@ namespace video
\return The created image. \return The created image.
If you no longer need the image, you should call IImage::drop(). If you no longer need the image, you should call IImage::drop().
See IReferenceCounted::drop() for more information. */ See IReferenceCounted::drop() for more information. */
IImage* createImageFromFile(io::IReadFile* file) virtual IImage* createImageFromFile(io::IReadFile* file) = 0;
{
core::array<IImage*> imageArray = createImagesFromFile(file);
for (u32 i = 1; i < imageArray.size(); ++i)
imageArray[i]->drop();
return (imageArray.size() > 0) ? imageArray[0] : 0;
}
//! Writes the provided image to a file. //! Writes the provided image to a file.
/** Requires that there is a suitable image writer registered /** Requires that there is a suitable image writer registered
@ -1210,27 +987,6 @@ namespace video
See IReferenceCounted::drop() for more information. */ See IReferenceCounted::drop() for more information. */
virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) =0; virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) =0;
//! Creates a software image by converting it to given format from another image.
/** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9.
\param format Desired color format of the image.
\param imageToCopy Image to copy to the new image.
\return The created image.
If you no longer need the image, you should call IImage::drop().
See IReferenceCounted::drop() for more information. */
_IRR_DEPRECATED_ virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy) =0;
//! Creates a software image from a part of another image.
/** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9.
\param imageToCopy Image to copy to the new image in part.
\param pos Position of rectangle to copy.
\param size Extents of rectangle to copy.
\return The created image.
If you no longer need the image, you should call IImage::drop().
See IReferenceCounted::drop() for more information. */
_IRR_DEPRECATED_ virtual IImage* createImage(IImage* imageToCopy,
const core::position2d<s32>& pos,
const core::dimension2d<u32>& size) =0;
//! Creates a software image from a part of a texture. //! Creates a software image from a part of a texture.
/** /**
\param texture Texture to copy to the new image in part. \param texture Texture to copy to the new image in part.
@ -1300,7 +1056,7 @@ namespace video
E_MATERIAL_TYPE enum or a value which was returned by E_MATERIAL_TYPE enum or a value which was returned by
addMaterialRenderer(). addMaterialRenderer().
\param name: New name of the material renderer. */ \param name: New name of the material renderer. */
virtual void setMaterialRendererName(s32 idx, const c8* name) =0; virtual void setMaterialRendererName(u32 idx, const c8* name) =0;
//! Swap the material renderers used for certain id's //! Swap the material renderers used for certain id's
/** Swap the IMaterialRenderers responsible for rendering specific /** Swap the IMaterialRenderers responsible for rendering specific
@ -1334,23 +1090,6 @@ namespace video
//! Clear the color, depth and/or stencil buffers. //! Clear the color, depth and/or stencil buffers.
virtual void clearBuffers(u16 flag, SColor color = SColor(255,0,0,0), f32 depth = 1.f, u8 stencil = 0) = 0; virtual void clearBuffers(u16 flag, SColor color = SColor(255,0,0,0), f32 depth = 1.f, u8 stencil = 0) = 0;
//! Clear the color, depth and/or stencil buffers.
_IRR_DEPRECATED_ void clearBuffers(bool backBuffer, bool depthBuffer, bool stencilBuffer, SColor color)
{
u16 flag = 0;
if (backBuffer)
flag |= ECBF_COLOR;
if (depthBuffer)
flag |= ECBF_DEPTH;
if (stencilBuffer)
flag |= ECBF_STENCIL;
clearBuffers(flag, color);
}
//! Clears the ZBuffer. //! Clears the ZBuffer.
/** Note that you usually need not to call this method, as it /** Note that you usually need not to call this method, as it
is automatically done in IVideoDriver::beginScene() or is automatically done in IVideoDriver::beginScene() or

View File

@ -6,8 +6,8 @@
#define __IRR_COMPILE_CONFIG_H_INCLUDED__ #define __IRR_COMPILE_CONFIG_H_INCLUDED__
//! Identifies the IrrlichtMt fork customized for the Minetest engine //! Identifies the IrrlichtMt fork customized for the Minetest engine
#define IRRLICHT_VERSION_MT_REVISION 7 #define IRRLICHT_VERSION_MT_REVISION 12
#define IRRLICHT_VERSION_MT "mt7" #define IRRLICHT_VERSION_MT "mt12"
//! Irrlicht SDK Version //! Irrlicht SDK Version
#define IRRLICHT_VERSION_MAJOR 1 #define IRRLICHT_VERSION_MAJOR 1
@ -20,454 +20,14 @@
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw #include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
//! The defines for different operating system are: #ifdef _WIN32
//! _IRR_WINDOWS_ for all irrlicht supported Windows versions
//! _IRR_WINDOWS_API_ for Windows or XBox
//! _IRR_LINUX_PLATFORM_ for Linux (it is defined here if no other os is defined)
//! _IRR_SOLARIS_PLATFORM_ for Solaris
//! _IRR_OSX_PLATFORM_ for Apple systems running OSX
//! _IRR_IOS_PLATFORM_ for Apple devices running iOS
//! _IRR_ANDROID_PLATFORM_ for devices running Android
//! _IRR_POSIX_API_ for Posix compatible systems
//! Note: PLATFORM defines the OS specific layer, API can group several platforms
//! DEVICE is the windowing system used, several PLATFORMs support more than one DEVICE
//! Irrlicht can be compiled with more than one device
//! _IRR_COMPILE_WITH_WINDOWS_DEVICE_ for Windows API based device
//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX
//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device
//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework
//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative
//! way which can be used to disable defines (instead of outcommenting them in this header).
//! So defines can be controlled from Makefiles or Projectfiles which allows building
//! different library versions without having to change the sources.
//! Example: NO_IRR_COMPILE_WITH_X11_ would disable X11
//! Uncomment this line to compile with the SDL device
//#define _IRR_COMPILE_WITH_SDL_DEVICE_
#ifdef NO_IRR_COMPILE_WITH_SDL_DEVICE_
#undef _IRR_COMPILE_WITH_SDL_DEVICE_
#endif
//! WIN32 for Windows32
//! WIN64 for Windows64
// The windows platform and API support SDL and WINDOW device
#if defined(_WIN32) || defined(_WIN64)
#define _IRR_WINDOWS_
#define _IRR_WINDOWS_API_
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_
#endif
#endif
#if defined(__APPLE__)
#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
#define _IRR_IOS_PLATFORM_
#define _IRR_COMPILE_WITH_IOS_DEVICE_
#define NO_IRR_COMPILE_WITH_OPENGL_
// The application state events and following methods: IrrlichtDevice::isWindowActive, IrrlichtDevice::isWindowFocused,
// IrrlichtDevice::isWindowMinimized works out of box only if you'll use built-in CIrrDelegateiOS,
// so _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ must be enabled in this case. If you need a custom UIApplicationDelegate
// you must disable _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ definition and handle all application events yourself.
#define _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_
#else
#define _IRR_OSX_PLATFORM_
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
#define _IRR_COMPILE_WITH_OSX_DEVICE_
#endif
#define NO_IRR_COMPILE_WITH_OGLES1_
#define NO_IRR_COMPILE_WITH_OGLES2_
#define NO_IRR_COMPILE_WITH_WEBGL1_
#endif
#endif
#if defined(__EMSCRIPTEN__)
#define _IRR_EMSCRIPTEN_PLATFORM_
#define NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
#define NO_IRR_COMPILE_WITH_OPENGL_
#define NO_IRR_COMPILE_WITH_OGLES1_
#define _IRR_COMPILE_WITH_OGLES2_
#define _IRR_COMPILE_WITH_WEBGL1_
#define _IRR_COMPILE_WITH_EGL_MANAGER_
#define _IRR_COMPILE_WITH_SDL_DEVICE_
#define NO_IRR_COMPILE_WITH_X11_DEVICE_
#define _IRR_LINUX_PLATFORM_ // emscripten basically working like a unix
#endif // __EMSCRIPTEN__
#if defined(__ANDROID__)
#define _IRR_ANDROID_PLATFORM_
#define _IRR_COMPILE_WITH_ANDROID_DEVICE_
#define _IRR_COMPILE_ANDROID_ASSET_READER_
#define NO_IRR_COMPILE_WITH_OPENGL_
#endif
#if defined(__SVR4) && defined(__sun)
#define _IRR_SOLARIS_PLATFORM_
#if defined(__sparc)
#define __BIG_ENDIAN__
#endif
#endif
#if !defined(_IRR_WINDOWS_API_) && !defined(_IRR_OSX_PLATFORM_) && !defined(_IRR_IOS_PLATFORM_) && !defined(_IRR_ANDROID_PLATFORM_) && !defined(_IRR_EMSCRIPTEN_PLATFORM_)
#ifndef _IRR_SOLARIS_PLATFORM_
#define _IRR_LINUX_PLATFORM_
#endif
#define _IRR_POSIX_API_
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
#define _IRR_COMPILE_WITH_X11_DEVICE_
#endif
#endif
//! Define _IRR_COMPILE_WITH_JOYSTICK_SUPPORT_ if you want joystick events.
#if !(defined(__FreeBSD__) || defined(__OpenBSD__))
#define _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
#endif
#ifdef NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
#endif
//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht.
#define _IRR_MATERIAL_MAX_TEXTURES_ 4
//! Add a leak-hunter to Irrlicht which helps finding unreleased reference counted objects.
//! NOTE: This is slow and should only be used for debugging
//#define _IRR_COMPILE_WITH_LEAK_HUNTER_
#ifdef NO_IRR_COMPILE_WITH_LEAK_HUNTER_
#undef _IRR_COMPILE_WITH_LEAK_HUNTER_
#endif
//! Enable profiling information in the engine
/** NOTE: The profiler itself always exists and can be used by applications.
This define is about the engine creating profile data
while it runs and enabling it will slow down the engine. */
//#define _IRR_COMPILE_WITH_PROFILING_
#ifdef NO_IRR_COMPILE_WITH_PROFILING_
#undef _IRR_COMPILE_WITH_PROFILING_
#endif
//! Define _IRR_COMPILE_WITH_DIRECT3D_9_ to compile the Irrlicht engine with DIRECT3D9.
/** If you only want to use the software device or opengl you can disable those defines.
This switch is mostly disabled because people do not get the g++ compiler compile
directX header files, and directX is only available on Windows platforms. If you
are using Dev-Cpp, and want to compile this using a DX dev pack, you can define
_IRR_COMPILE_WITH_DX9_DEV_PACK_. So you simply need to add something like this
to the compiler settings: -DIRR_COMPILE_WITH_DX9_DEV_PACK
and this to the linker settings: -ld3dx9
*/
#if defined(_IRR_WINDOWS_API_) && defined(IRR_COMPILE_WITH_DX9_DEV_PACK)
//! Define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ if you want to use DirectInput for joystick handling.
/** This only applies to Windows devices, currently only supported under Win32 device.
If not defined, Windows Multimedia library is used, which offers also broad support for joystick devices. */
#define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#ifdef NO_IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#endif
#endif
//! Define _IRR_COMPILE_WITH_OPENGL_ to compile the Irrlicht engine with OpenGL.
/** If you do not wish the engine to be compiled with OpenGL, comment this
define out. */
#define _IRR_COMPILE_WITH_OPENGL_
#ifdef NO_IRR_COMPILE_WITH_OPENGL_
#undef _IRR_COMPILE_WITH_OPENGL_
#endif
//! Define required options for OpenGL drivers.
#if defined(_IRR_COMPILE_WITH_OPENGL_)
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
#define _IRR_OPENGL_USE_EXTPOINTER_
#define _IRR_COMPILE_WITH_WGL_MANAGER_
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
#define _IRR_OPENGL_USE_EXTPOINTER_
#define _IRR_COMPILE_WITH_GLX_MANAGER_
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
#define _IRR_COMPILE_WITH_NSOGL_MANAGER_
#elif defined(_IRR_SOLARIS_PLATFORM_)
#define _IRR_COMPILE_WITH_GLX_MANAGER_
#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_)
#define _IRR_OPENGL_USE_EXTPOINTER_
#endif
#endif
//! Define _IRR_COMPILE_WITH_OGLES1_ to compile the Irrlicht engine with OpenGL ES 1.1.
/** If you do not wish the engine to be compiled with OpenGL ES 1.1, comment this
define out.
Depending on platform you may have to enable _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ as well when using it.
*/
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
#define _IRR_COMPILE_WITH_OGLES1_
#endif
#ifdef NO_IRR_COMPILE_WITH_OGLES1_
#undef _IRR_COMPILE_WITH_OGLES1_
#endif
#ifdef _IRR_COMPILE_WITH_OGLES1_
//! Define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ to use the OpenGL ES headers from the Debian Khronos-api package
//#define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_
#endif
//! Define required options for OpenGL ES 1.1 drivers.
#if defined(_IRR_COMPILE_WITH_OGLES1_)
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#define _IRR_OGLES1_USE_EXTPOINTER_
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
#define _IRR_COMPILE_WITH_EGL_MANAGER_
#endif
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
#endif
#endif
#endif
//! Define _IRR_COMPILE_WITH_OGLES2_ to compile the Irrlicht engine with OpenGL ES 2.0.
/** If you do not wish the engine to be compiled with OpenGL ES 2.0, comment this
define out. */
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
#define _IRR_COMPILE_WITH_OGLES2_
#else
//#define _IRR_COMPILE_WITH_OGLES2_
#endif
#ifdef NO_IRR_COMPILE_WITH_OGLES2_
#undef _IRR_COMPILE_WITH_OGLES2_
#endif
//! Define _IRR_COMPILE_WITH_WEBGL1_ to compile Irrlicht engine with a WebGL friendly
//! subset of the OpenGL ES 2.0 driver.
//#define _IRR_COMPILE_WITH_WEBGL1_
#ifdef NO_IRR_COMPILE_WITH_WEBGL1_
#undef _IRR_COMPILE_WITH_WEBGL1_
#endif
#ifdef _IRR_COMPILE_WITH_WEBGL1_
#define _IRR_COMPILE_WITH_OGLES2_ // it's a subset of OGL ES2, so always needed when using WebGL
#endif
//! Define required options for OpenGL ES 2.0 drivers.
#if defined(_IRR_COMPILE_WITH_OGLES2_)
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(__EMSCRIPTEN__)
#define _IRR_OGLES2_USE_EXTPOINTER_
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
#define _IRR_COMPILE_WITH_EGL_MANAGER_
#endif
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
#endif
#endif
#endif
//! Define _IRR_COMPILE_WITH_X11_ to compile the Irrlicht engine with X11 support.
/** If you do not wish the engine to be compiled with X11, comment this
define out. */
// Only used in LinuxDevice.
#define _IRR_COMPILE_WITH_X11_
#ifdef NO_IRR_COMPILE_WITH_X11_
#undef _IRR_COMPILE_WITH_X11_
#endif
#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_)
//! XInput2 (library called Xi) is currently only used to support touch-input.
#define _IRR_LINUX_X11_XINPUT2_
#ifdef NO_IRR_LINUX_X11_XINPUT2_
#undef _IRR_LINUX_X11_XINPUT2_
#endif
//! X11 has by default only monochrome cursors, but using the Xcursor library we can also get color cursor support.
//! If you have the need for custom color cursors on X11 then enable this and make sure you also link
//! to the Xcursor library in your Makefile/Projectfile.
//#define _IRR_LINUX_XCURSOR_
#ifdef NO_IRR_LINUX_XCURSOR_
#undef _IRR_LINUX_XCURSOR_
#endif
#endif
//! Define _IRR_COMPILE_WITH_GUI_ to compile the engine with the built-in GUI
/** Disable this if you are using an external library to draw the GUI. If you disable this then
you will not be able to use anything provided by the GUI Environment, including loading fonts. */
#define _IRR_COMPILE_WITH_GUI_
#ifdef NO_IRR_COMPILE_WITH_GUI_
#undef _IRR_COMPILE_WITH_GUI_
#endif
//! Define _IRR_COMPILE_WITH_LIBJPEG_ to enable compiling the engine using libjpeg.
/** This enables the engine to read jpeg images. If you comment this out,
the engine will no longer read .jpeg images. */
#define _IRR_COMPILE_WITH_LIBJPEG_
#ifdef NO_IRR_COMPILE_WITH_LIBJPEG_
#undef _IRR_COMPILE_WITH_LIBJPEG_
#endif
//! Define _IRR_COMPILE_WITH_LIBPNG_ to enable compiling the engine using libpng.
/** This enables the engine to read png images. If you comment this out,
the engine will no longer read .png images. */
#define _IRR_COMPILE_WITH_LIBPNG_
#ifdef NO_IRR_COMPILE_WITH_LIBPNG_
#undef _IRR_COMPILE_WITH_LIBPNG_
#endif
//! Uncomment the following line if you want to ignore the deprecated warnings
//#define IGNORE_DEPRECATED_WARNING
//! Define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_ to support BillboardSceneNodes
#define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
#ifdef NO_IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
#undef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
#endif
//! Define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ if you want to use bone based
/** animated meshes. If you compile without this, you will be unable to load
B3D, MS3D or X meshes */
#define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
#ifdef NO_IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
#undef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
#endif
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
//! Define _IRR_COMPILE_WITH_B3D_LOADER_ if you want to use Blitz3D files
#define _IRR_COMPILE_WITH_B3D_LOADER_
#ifdef NO_IRR_COMPILE_WITH_B3D_LOADER_
#undef _IRR_COMPILE_WITH_B3D_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_X_LOADER_ if you want to use Microsoft X files
#define _IRR_COMPILE_WITH_X_LOADER_
#ifdef NO_IRR_COMPILE_WITH_X_LOADER_
#undef _IRR_COMPILE_WITH_X_LOADER_
#endif
#endif // _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
//! Define _IRR_COMPILE_WITH_OBJ_LOADER_ if you want to load Wavefront OBJ files
#define _IRR_COMPILE_WITH_OBJ_LOADER_
#ifdef NO_IRR_COMPILE_WITH_OBJ_LOADER_
#undef _IRR_COMPILE_WITH_OBJ_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files
//! Disabling this loader will also disable the built-in font
#define _IRR_COMPILE_WITH_BMP_LOADER_
#ifdef NO_IRR_COMPILE_WITH_BMP_LOADER_
#undef _IRR_COMPILE_WITH_BMP_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_JPG_LOADER_ if you want to load .jpg files
#define _IRR_COMPILE_WITH_JPG_LOADER_
#ifdef NO_IRR_COMPILE_WITH_JPG_LOADER_
#undef _IRR_COMPILE_WITH_JPG_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_PNG_LOADER_ if you want to load .png files
#define _IRR_COMPILE_WITH_PNG_LOADER_
#ifdef NO_IRR_COMPILE_WITH_PNG_LOADER_
#undef _IRR_COMPILE_WITH_PNG_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_TGA_LOADER_ if you want to load .tga files
#define _IRR_COMPILE_WITH_TGA_LOADER_
#ifdef NO_IRR_COMPILE_WITH_TGA_LOADER_
#undef _IRR_COMPILE_WITH_TGA_LOADER_
#endif
//! Define _IRR_COMPILE_WITH_JPG_WRITER_ if you want to write .jpg files
#define _IRR_COMPILE_WITH_JPG_WRITER_
#ifdef NO_IRR_COMPILE_WITH_JPG_WRITER_
#undef _IRR_COMPILE_WITH_JPG_WRITER_
#endif
//! Define _IRR_COMPILE_WITH_PNG_WRITER_ if you want to write .png files
#define _IRR_COMPILE_WITH_PNG_WRITER_
#ifdef NO_IRR_COMPILE_WITH_PNG_WRITER_
#undef _IRR_COMPILE_WITH_PNG_WRITER_
#endif
//! Define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ if you want to open ZIP and GZIP archives
/** ZIP reading has several more options below to configure. */
#define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
#ifdef NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
#undef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
#endif
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
//! Define _IRR_COMPILE_WITH_ZLIB_ to enable compiling the engine using zlib.
/** This enables the engine to read from compressed .zip archives. If you
disable this feature, the engine can still read archives, but only uncompressed
ones. */
#define _IRR_COMPILE_WITH_ZLIB_
#ifdef NO_IRR_COMPILE_WITH_ZLIB_
#undef _IRR_COMPILE_WITH_ZLIB_
#endif
#endif
//! Define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ if you want to mount folders as archives
#define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
#ifdef NO__IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
#undef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
#endif
// Some cleanup and standard stuff
#ifdef _IRR_WINDOWS_API_
// To build Irrlicht as a static library, you must define _IRR_STATIC_LIB_ in both the
// Irrlicht build, *and* in the user application, before #including <irrlicht.h>
#ifndef _IRR_STATIC_LIB_
#ifdef IRRLICHT_EXPORTS
#define IRRLICHT_API __declspec(dllexport)
#else
#define IRRLICHT_API __declspec(dllimport)
#endif // IRRLICHT_EXPORT
#else
#define IRRLICHT_API
#endif // _IRR_STATIC_LIB_
// Declare the calling convention.
#if defined(_STDCALL_SUPPORTED)
#define IRRCALLCONV __stdcall #define IRRCALLCONV __stdcall
#else #else
#define IRRCALLCONV __cdecl
#endif // STDCALL_SUPPORTED
#else // _IRR_WINDOWS_API_
// Force symbol export in shared libraries built with gcc.
#if defined(__GNUC__) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS)
#define IRRLICHT_API __attribute__ ((visibility("default")))
#else
#define IRRLICHT_API
#endif
#define IRRCALLCONV #define IRRCALLCONV
#endif // _IRR_WINDOWS_API_
#if defined(_IRR_SOLARIS_PLATFORM_)
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
#endif #endif
//! Define __IRR_HAS_S64 if the irr::s64 type should be enable (needs long long, available on most platforms, but not part of ISO C++ 98) #ifndef IRRLICHT_API
#define __IRR_HAS_S64 #define IRRLICHT_API
#ifdef NO__IRR_HAS_S64
#undef __IRR_HAS_S64
#endif
#ifndef __has_feature
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif
#ifdef _DEBUG
//! A few attributes are written in CSceneManager when _IRR_SCENEMANAGER_DEBUG is enabled
// NOTE: Those attributes were used always until 1.8.0 and became a global define for 1.8.1
// which is only enabled in debug because it had a large (sometimes >5%) impact on speed.
// A better solution in the long run is to break the interface and remove _all_ attribute
// access in functions like CSceneManager::drawAll and instead put that information in some
// own struct/class or in CSceneManager.
// See http://irrlicht.sourceforge.net/forum/viewtopic.php?f=2&t=48211 for the discussion.
#define _IRR_SCENEMANAGER_DEBUG
#ifdef NO_IRR_SCENEMANAGER_DEBUG
#undef _IRR_SCENEMANAGER_DEBUG
#endif
#endif #endif
#endif // __IRR_COMPILE_CONFIG_H_INCLUDED__ #endif // __IRR_COMPILE_CONFIG_H_INCLUDED__

View File

@ -14,6 +14,7 @@
#include "ICursorControl.h" #include "ICursorControl.h"
#include "ITimer.h" #include "ITimer.h"
#include "IOSOperator.h" #include "IOSOperator.h"
#include "IrrCompileConfig.h"
namespace irr namespace irr
{ {
@ -34,6 +35,7 @@ namespace irr
namespace video { namespace video {
class IContextManager; class IContextManager;
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
} // end namespace video } // end namespace video
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx(). //! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
@ -130,6 +132,11 @@ namespace irr
/** \param text: New text of the window caption. */ /** \param text: New text of the window caption. */
virtual void setWindowCaption(const wchar_t* text) = 0; virtual void setWindowCaption(const wchar_t* text) = 0;
//! Sets the window icon.
/** \param img The icon texture.
\return False if no icon was set. */
virtual bool setWindowIcon(const video::IImage *img) = 0;
//! Returns if the window is active. //! Returns if the window is active.
/** If the window is inactive, /** If the window is inactive,
nothing needs to be drawn. So if you don't want to draw anything nothing needs to be drawn. So if you don't want to draw anything
@ -156,6 +163,12 @@ namespace irr
/** \return True if window is minimized. */ /** \return True if window is minimized. */
virtual bool isWindowMinimized() const = 0; virtual bool isWindowMinimized() const = 0;
//! Checks if the Irrlicht window is maximized
//! Only fully works on SDL. Returns false, or the last value set via
//! maximizeWindow() and restoreWindow(), on other backends.
/** \return True if window is maximized. */
virtual bool isWindowMaximized() const = 0;
//! Checks if the Irrlicht window is running in fullscreen mode //! Checks if the Irrlicht window is running in fullscreen mode
/** \return True if window is fullscreen. */ /** \return True if window is fullscreen. */
virtual bool isFullscreen() const = 0; virtual bool isFullscreen() const = 0;
@ -229,8 +242,8 @@ namespace irr
as this would consume joystick info that 3rd party libraries might rely on. Call this method to as this would consume joystick info that 3rd party libraries might rely on. Call this method to
activate joystick support in Irrlicht and to receive irr::SJoystickEvent events. activate joystick support in Irrlicht and to receive irr::SJoystickEvent events.
\param joystickInfo On return, this will contain an array of each joystick that was found and activated. \param joystickInfo On return, this will contain an array of each joystick that was found and activated.
\return true if joysticks are supported on this device and _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ \return true if joysticks are supported on this device, false if joysticks are not
is defined, false if joysticks are not supported or support is compiled out. supported or support is compiled out.
*/ */
virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0; virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0;
@ -299,42 +312,16 @@ namespace irr
used. */ used. */
virtual E_DEVICE_TYPE getType() const = 0; virtual E_DEVICE_TYPE getType() const = 0;
//! Get the display density in dots per inch.
//! Returns 0.0f on failure.
virtual float getDisplayDensity() const = 0;
//! Check if a driver type is supported by the engine. //! Check if a driver type is supported by the engine.
/** Even if true is returned the driver may not be available /** Even if true is returned the driver may not be available
for a configuration requested when creating the device. */ for a configuration requested when creating the device. */
static bool isDriverSupported(video::E_DRIVER_TYPE driver) static bool isDriverSupported(video::E_DRIVER_TYPE driver)
{ {
switch (driver) return video::isDriverSupported(driver);
{
case video::EDT_NULL:
return true;
case video::EDT_OPENGL:
#ifdef _IRR_COMPILE_WITH_OPENGL_
return true;
#else
return false;
#endif
case video::EDT_OGLES1:
#ifdef _IRR_COMPILE_WITH_OGLES1_
return true;
#else
return false;
#endif
case video::EDT_OGLES2:
#ifdef _IRR_COMPILE_WITH_OGLES2_
return true;
#else
return false;
#endif
case video::EDT_WEBGL1:
#ifdef _IRR_COMPILE_WITH_WEBGL1_
return true;
#else
return false;
#endif
default:
return false;
}
} }
}; };

View File

@ -44,7 +44,7 @@ const char* const sBuiltInVertexTypeNames[] =
struct S3DVertex struct S3DVertex
{ {
//! default constructor //! default constructor
S3DVertex() {} S3DVertex() : Color(0xffffffff) {}
//! constructor //! constructor
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
@ -142,7 +142,7 @@ struct S3DVertex2TCoords : public S3DVertex
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {} : S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
//! constructor from S3DVertex //! constructor from S3DVertex
S3DVertex2TCoords(S3DVertex& o) : S3DVertex(o) {} S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {}
//! Second set of texture coordinates //! Second set of texture coordinates
core::vector2d<f32> TCoords2; core::vector2d<f32> TCoords2;
@ -150,21 +150,21 @@ struct S3DVertex2TCoords : public S3DVertex
//! Equality operator //! Equality operator
bool operator==(const S3DVertex2TCoords& other) const bool operator==(const S3DVertex2TCoords& other) const
{ {
return ((static_cast<S3DVertex>(*this)==other) && return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
(TCoords2 == other.TCoords2)); (TCoords2 == other.TCoords2));
} }
//! Inequality operator //! Inequality operator
bool operator!=(const S3DVertex2TCoords& other) const bool operator!=(const S3DVertex2TCoords& other) const
{ {
return ((static_cast<S3DVertex>(*this)!=other) || return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
(TCoords2 != other.TCoords2)); (TCoords2 != other.TCoords2));
} }
bool operator<(const S3DVertex2TCoords& other) const bool operator<(const S3DVertex2TCoords& other) const
{ {
return ((static_cast<S3DVertex>(*this) < other) || return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == other) && (TCoords2 < other.TCoords2))); ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (TCoords2 < other.TCoords2)));
} }
static E_VERTEX_TYPE getType() static E_VERTEX_TYPE getType()
@ -214,6 +214,9 @@ struct S3DVertexTangents : public S3DVertex
const core::vector3df& binormal=core::vector3df()) const core::vector3df& binormal=core::vector3df())
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { } : S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
//! constructor from S3DVertex
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {}
//! Tangent vector along the x-axis of the texture //! Tangent vector along the x-axis of the texture
core::vector3df Tangent; core::vector3df Tangent;
@ -222,14 +225,14 @@ struct S3DVertexTangents : public S3DVertex
bool operator==(const S3DVertexTangents& other) const bool operator==(const S3DVertexTangents& other) const
{ {
return ((static_cast<S3DVertex>(*this)==other) && return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
(Tangent == other.Tangent) && (Tangent == other.Tangent) &&
(Binormal == other.Binormal)); (Binormal == other.Binormal));
} }
bool operator!=(const S3DVertexTangents& other) const bool operator!=(const S3DVertexTangents& other) const
{ {
return ((static_cast<S3DVertex>(*this)!=other) || return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
(Tangent != other.Tangent) || (Tangent != other.Tangent) ||
(Binormal != other.Binormal)); (Binormal != other.Binormal));
} }
@ -237,8 +240,8 @@ struct S3DVertexTangents : public S3DVertex
bool operator<(const S3DVertexTangents& other) const bool operator<(const S3DVertexTangents& other) const
{ {
return ((static_cast<S3DVertex>(*this) < other) || return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == other) && (Tangent < other.Tangent)) || ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent < other.Tangent)) ||
((static_cast<S3DVertex>(*this) == other) && (Tangent == other.Tangent) && (Binormal < other.Binormal))); ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
} }
static E_VERTEX_TYPE getType() static E_VERTEX_TYPE getType()

View File

@ -38,14 +38,14 @@ namespace scene
//! Gets the frame count of the animated mesh. //! Gets the frame count of the animated mesh.
/** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */ /** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */
virtual u32 getFrameCount() const _IRR_OVERRIDE_ u32 getFrameCount() const override
{ {
return Meshes.size(); return Meshes.size();
} }
//! Gets the default animation speed of the animated mesh. //! Gets the default animation speed of the animated mesh.
/** \return Amount of frames per second. If the amount is 0, it is a static, non animated mesh. */ /** \return Amount of frames per second. If the amount is 0, it is a static, non animated mesh. */
virtual f32 getAnimationSpeed() const _IRR_OVERRIDE_ f32 getAnimationSpeed() const override
{ {
return FramesPerSecond; return FramesPerSecond;
} }
@ -53,7 +53,7 @@ namespace scene
//! Gets the frame count of the animated mesh. //! Gets the frame count of the animated mesh.
/** \param fps Frames per second to play the animation with. If the amount is 0, it is not animated. /** \param fps Frames per second to play the animation with. If the amount is 0, it is not animated.
The actual speed is set in the scene node the mesh is instantiated in.*/ The actual speed is set in the scene node the mesh is instantiated in.*/
virtual void setAnimationSpeed(f32 fps) _IRR_OVERRIDE_ void setAnimationSpeed(f32 fps) override
{ {
FramesPerSecond=fps; FramesPerSecond=fps;
} }
@ -66,7 +66,7 @@ namespace scene
\param startFrameLoop: start frame \param startFrameLoop: start frame
\param endFrameLoop: end frame \param endFrameLoop: end frame
\return The animated mesh based on a detail level. */ \return The animated mesh based on a detail level. */
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) _IRR_OVERRIDE_ IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) override
{ {
if (Meshes.empty()) if (Meshes.empty())
return 0; return 0;
@ -86,13 +86,13 @@ namespace scene
//! Returns an axis aligned bounding box of the mesh. //! Returns an axis aligned bounding box of the mesh.
/** \return A bounding box of this mesh is returned. */ /** \return A bounding box of this mesh is returned. */
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ const core::aabbox3d<f32>& getBoundingBox() const override
{ {
return Box; return Box;
} }
//! set user axis aligned bounding box //! set user axis aligned bounding box
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_ void setBoundingBox(const core::aabbox3df& box) override
{ {
Box = box; Box = box;
} }
@ -112,13 +112,13 @@ namespace scene
} }
//! Returns the type of the animated mesh. //! Returns the type of the animated mesh.
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_ E_ANIMATED_MESH_TYPE getMeshType() const override
{ {
return Type; return Type;
} }
//! returns amount of mesh buffers. //! returns amount of mesh buffers.
virtual u32 getMeshBufferCount() const _IRR_OVERRIDE_ u32 getMeshBufferCount() const override
{ {
if (Meshes.empty()) if (Meshes.empty())
return 0; return 0;
@ -127,7 +127,7 @@ namespace scene
} }
//! returns pointer to a mesh buffer //! returns pointer to a mesh buffer
virtual IMeshBuffer* getMeshBuffer(u32 nr) const _IRR_OVERRIDE_ IMeshBuffer* getMeshBuffer(u32 nr) const override
{ {
if (Meshes.empty()) if (Meshes.empty())
return 0; return 0;
@ -139,7 +139,7 @@ namespace scene
/** \param material: material to search for /** \param material: material to search for
\return Returns the pointer to the mesh buffer or \return Returns the pointer to the mesh buffer or
NULL if there is no such mesh buffer. */ NULL if there is no such mesh buffer. */
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const _IRR_OVERRIDE_ IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const override
{ {
if (Meshes.empty()) if (Meshes.empty())
return 0; return 0;
@ -147,22 +147,15 @@ namespace scene
return Meshes[0]->getMeshBuffer(material); return Meshes[0]->getMeshBuffer(material);
} }
//! Set a material flag for all meshbuffers of this mesh.
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) _IRR_OVERRIDE_
{
for (u32 i=0; i<Meshes.size(); ++i)
Meshes[i]->setMaterialFlag(flag, newvalue);
}
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
{ {
for (u32 i=0; i<Meshes.size(); ++i) for (u32 i=0; i<Meshes.size(); ++i)
Meshes[i]->setHardwareMappingHint(newMappingHint, buffer); Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
} }
//! flags the meshbuffer as changed, reloads hardware buffers //! flags the meshbuffer as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_ void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
{ {
for (u32 i=0; i<Meshes.size(); ++i) for (u32 i=0; i<Meshes.size(); ++i)
Meshes[i]->setDirty(buffer); Meshes[i]->setDirty(buffer);

View File

@ -5,12 +5,6 @@
#ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__ #ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__ #define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
// forward declarations for internal pointers
struct IDirect3D9;
struct IDirect3DDevice9;
struct IDirect3D8;
struct IDirect3DDevice8;
namespace irr namespace irr
{ {
namespace video namespace video
@ -27,19 +21,6 @@ struct SExposedVideoData
SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;} SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;}
explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;} explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;}
struct SD3D9
{
//! Pointer to the IDirect3D9 interface
IDirect3D9* D3D9;
//! Pointer to the IDirect3DDevice9 interface
IDirect3DDevice9* D3DDev9;
//! Window handle.
/** Get with for example HWND h = reinterpret_cast<HWND>(exposedData.D3D9.HWnd) */
void* HWnd;
};
struct SOpenGLWin32 struct SOpenGLWin32
{ {
//! Private GDI Device Context. //! Private GDI Device Context.
@ -79,21 +60,6 @@ struct SExposedVideoData
void* Window; void* Window;
}; };
struct SOpenGLiOS
{
//! The EAGLContext object.
void* Context;
//! The subview UIView object where the drawing happens.
void* View;
//! The UIViewController object.
void* ViewController;
//! The UIWindow object.
void* Window;
};
struct SOGLESAndroid struct SOGLESAndroid
{ {
//! The ANativeWindow object. //! The ANativeWindow object.
@ -102,12 +68,10 @@ struct SExposedVideoData
union union
{ {
SD3D9 D3D9;
SOpenGLWin32 OpenGLWin32; SOpenGLWin32 OpenGLWin32;
SOpenGLLinux OpenGLLinux; SOpenGLLinux OpenGLLinux;
SOpenGLOSX OpenGLOSX; SOpenGLOSX OpenGLOSX;
SOpenGLFB OpenGLFB; SOpenGLFB OpenGLFB;
SOpenGLiOS OpenGLiOS;
SOGLESAndroid OGLESAndroid; SOGLESAndroid OGLESAndroid;
}; };
}; };

View File

@ -11,7 +11,7 @@
#include "ILogger.h" #include "ILogger.h"
#include "position2d.h" #include "position2d.h"
#include "path.h" #include "path.h"
#include "IrrCompileConfig.h" #include "IrrCompileConfig.h" // for IRRLICHT_SDK_VERSION
namespace irr namespace irr
{ {
@ -24,12 +24,13 @@ namespace irr
//! Constructs a SIrrlichtCreationParameters structure with default values. //! Constructs a SIrrlichtCreationParameters structure with default values.
SIrrlichtCreationParameters() : SIrrlichtCreationParameters() :
DeviceType(EIDT_BEST), DeviceType(EIDT_BEST),
DriverType(video::EDT_BURNINGSVIDEO), DriverType(video::EDT_OPENGL),
WindowSize(core::dimension2d<u32>(800, 600)), WindowSize(core::dimension2d<u32>(800, 600)),
WindowPosition(core::position2di(-1,-1)), WindowPosition(core::position2di(-1,-1)),
Bits(32), Bits(32),
ZBufferBits(24), ZBufferBits(24),
Fullscreen(false), Fullscreen(false),
WindowMaximized(false),
WindowResizable(2), WindowResizable(2),
Stencilbuffer(true), Stencilbuffer(true),
Vsync(false), Vsync(false),
@ -39,7 +40,6 @@ namespace irr
Doublebuffer(true), Doublebuffer(true),
IgnoreInput(false), IgnoreInput(false),
Stereobuffer(false), Stereobuffer(false),
HighPrecisionFPU(false),
EventReceiver(0), EventReceiver(0),
WindowId(0), WindowId(0),
#ifdef _DEBUG #ifdef _DEBUG
@ -47,12 +47,9 @@ namespace irr
#else #else
LoggingLevel(ELL_INFORMATION), LoggingLevel(ELL_INFORMATION),
#endif #endif
DisplayAdapter(0),
DriverMultithreaded(false),
UsePerformanceTimer(true),
SDK_version_do_not_use(IRRLICHT_SDK_VERSION), SDK_version_do_not_use(IRRLICHT_SDK_VERSION),
PrivateData(0), PrivateData(0),
#if defined(_IRR_COMPILE_WITH_IOS_DEVICE_) || defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_EMSCRIPTEN_PLATFORM_) #ifdef IRR_MOBILE_PATHS
OGLES2ShaderPath("media/Shaders/") OGLES2ShaderPath("media/Shaders/")
#else #else
OGLES2ShaderPath("../../media/Shaders/") OGLES2ShaderPath("../../media/Shaders/")
@ -73,6 +70,7 @@ namespace irr
Bits = other.Bits; Bits = other.Bits;
ZBufferBits = other.ZBufferBits; ZBufferBits = other.ZBufferBits;
Fullscreen = other.Fullscreen; Fullscreen = other.Fullscreen;
WindowMaximized = other.WindowMaximized;
WindowResizable = other.WindowResizable; WindowResizable = other.WindowResizable;
Stencilbuffer = other.Stencilbuffer; Stencilbuffer = other.Stencilbuffer;
Vsync = other.Vsync; Vsync = other.Vsync;
@ -82,13 +80,9 @@ namespace irr
Doublebuffer = other.Doublebuffer; Doublebuffer = other.Doublebuffer;
IgnoreInput = other.IgnoreInput; IgnoreInput = other.IgnoreInput;
Stereobuffer = other.Stereobuffer; Stereobuffer = other.Stereobuffer;
HighPrecisionFPU = other.HighPrecisionFPU;
EventReceiver = other.EventReceiver; EventReceiver = other.EventReceiver;
WindowId = other.WindowId; WindowId = other.WindowId;
LoggingLevel = other.LoggingLevel; LoggingLevel = other.LoggingLevel;
DisplayAdapter = other.DisplayAdapter;
DriverMultithreaded = other.DriverMultithreaded;
UsePerformanceTimer = other.UsePerformanceTimer;
PrivateData = other.PrivateData; PrivateData = other.PrivateData;
OGLES2ShaderPath = other.OGLES2ShaderPath; OGLES2ShaderPath = other.OGLES2ShaderPath;
return *this; return *this;
@ -106,9 +100,6 @@ namespace irr
E_DEVICE_TYPE DeviceType; E_DEVICE_TYPE DeviceType;
//! Type of video driver used to render graphics. //! Type of video driver used to render graphics.
/** This can currently be video::EDT_NULL, video::EDT_SOFTWARE,
video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D9, and video::EDT_OPENGL.
Default: EDT_BURNINGSVIDEO. */
video::E_DRIVER_TYPE DriverType; video::E_DRIVER_TYPE DriverType;
//! Size of the window or the video mode in fullscreen mode. Default: 800x600 //! Size of the window or the video mode in fullscreen mode. Default: 800x600
@ -127,6 +118,9 @@ namespace irr
/** Otherwise the device runs in windowed mode. Default: false. */ /** Otherwise the device runs in windowed mode. Default: false. */
bool Fullscreen; bool Fullscreen;
//! Maximised window. (Only supported on SDL.) Default: false
bool WindowMaximized;
//! Should a non-fullscreen window be resizable. //! Should a non-fullscreen window be resizable.
/** Might not be supported by all devices. Ignored when Fullscreen is true. /** Might not be supported by all devices. Ignored when Fullscreen is true.
Values: 0 = not resizable, 1 = resizable, 2 = system decides default itself Values: 0 = not resizable, 1 = resizable, 2 = system decides default itself
@ -214,15 +208,6 @@ namespace irr
Default value: false */ Default value: false */
bool Stereobuffer; bool Stereobuffer;
//! Specifies if the device should use high precision FPU setting
/** This is only relevant for DirectX Devices, which switch to
low FPU precision by default for performance reasons. However,
this may lead to problems with the other computations of the
application. In this case setting this flag to true should help
- on the expense of performance loss, though.
Default value: false */
bool HighPrecisionFPU;
//! A user created event receiver. //! A user created event receiver.
IEventReceiver* EventReceiver; IEventReceiver* EventReceiver;
@ -230,7 +215,6 @@ namespace irr
/** If this is set to a value other than 0, the Irrlicht Engine /** If this is set to a value other than 0, the Irrlicht Engine
will be created in an already existing window. will be created in an already existing window.
For Windows, set this to the HWND of the window you want. For Windows, set this to the HWND of the window you want.
For iOS, assign UIView to this variable.
The windowSize and FullScreen options will be ignored when using The windowSize and FullScreen options will be ignored when using
the WindowId parameter. Default this is set to 0. the WindowId parameter. Default this is set to 0.
To make Irrlicht run inside the custom window, you still will To make Irrlicht run inside the custom window, you still will
@ -288,23 +272,6 @@ namespace irr
*/ */
ELOG_LEVEL LoggingLevel; ELOG_LEVEL LoggingLevel;
//! Allows to select which graphic card is used for rendering when more than one card is in the system.
/** So far only supported on D3D */
u32 DisplayAdapter;
//! Create the driver multithreaded.
/** Default is false. Enabling this can slow down your application.
Note that this does _not_ make Irrlicht threadsafe, but only the underlying driver-API for the graphiccard.
So far only supported on D3D. */
bool DriverMultithreaded;
//! Enables use of high performance timers on Windows platform.
/** When performance timers are not used, standard GetTickCount()
is used instead which usually has worse resolution, but also less
problems with speed stepping and other techniques.
*/
bool UsePerformanceTimer;
//! Don't use or change this parameter. //! Don't use or change this parameter.
/** Always set it to IRRLICHT_SDK_VERSION, which is done by default. /** Always set it to IRRLICHT_SDK_VERSION, which is done by default.
This is needed for sdk version checks. */ This is needed for sdk version checks. */

View File

@ -10,8 +10,9 @@
#include "irrArray.h" #include "irrArray.h"
#include "irrMath.h" #include "irrMath.h"
#include "EMaterialTypes.h" #include "EMaterialTypes.h"
#include "EMaterialFlags.h" #include "EMaterialProps.h"
#include "SMaterialLayer.h" #include "SMaterialLayer.h"
#include "IrrCompileConfig.h" // for IRRLICHT_API
namespace irr namespace irr
{ {
@ -227,19 +228,6 @@ namespace video
ECM_DIFFUSE_AND_AMBIENT ECM_DIFFUSE_AND_AMBIENT
}; };
//! DEPRECATED. Will be removed after Irrlicht 1.9.
/** Flags for the definition of the polygon offset feature. These flags define whether the offset should be into the screen, or towards the eye. */
enum E_POLYGON_OFFSET
{
//! Push pixel towards the far plane, away from the eye
/** This is typically used for rendering inner areas. */
EPO_BACK=0,
//! Pull pixels towards the camera.
/** This is typically used for polygons which should appear on top
of other elements, such as decals. */
EPO_FRONT=1
};
//! Names for polygon offset direction //! Names for polygon offset direction
const c8* const PolygonOffsetDirectionNames[] = const c8* const PolygonOffsetDirectionNames[] =
{ {
@ -255,7 +243,7 @@ namespace video
EZW_OFF = 0, EZW_OFF = 0,
//! This is the default setting for SMaterial and tries to handle things automatically. //! This is the default setting for SMaterial and tries to handle things automatically.
//! This is also the value which is set when SMaterial::setFlag(EMF_ZWRITE_ENABLE) is enabled. //! This is what you want to set to enable zwriting.
//! Usually zwriting is enabled non-transparent materials - as far as Irrlicht can recognize those. //! Usually zwriting is enabled non-transparent materials - as far as Irrlicht can recognize those.
//! Basically Irrlicht tries to handle the zwriting for you and assumes transparent materials don't need it. //! Basically Irrlicht tries to handle the zwriting for you and assumes transparent materials don't need it.
//! This is addionally affected by IVideoDriver::setAllowZWriteOnTransparent //! This is addionally affected by IVideoDriver::setAllowZWriteOnTransparent
@ -280,7 +268,7 @@ namespace video
/** SMaterial might ignore some textures in most function, like assignment and comparison, /** SMaterial might ignore some textures in most function, like assignment and comparison,
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number. when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
*/ */
const u32 MATERIAL_MAX_TEXTURES = _IRR_MATERIAL_MAX_TEXTURES_; const u32 MATERIAL_MAX_TEXTURES = 4;
//! Struct for holding parameters for a material renderer //! Struct for holding parameters for a material renderer
// Note for implementors: Serialization is in CNullDriver // Note for implementors: Serialization is in CNullDriver
@ -288,21 +276,21 @@ namespace video
{ {
public: public:
//! Default constructor. Creates a solid, lit material with white colors //! Default constructor. Creates a solid, lit material with white colors
SMaterial() SMaterial() :
: MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255), MaterialType(EMT_SOLID), AmbientColor(255, 255, 255, 255),
EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255), DiffuseColor(255, 255, 255, 255), EmissiveColor(0, 0, 0, 0),
Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f), SpecularColor(255, 255, 255, 255), Shininess(0.0f),
ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), MaterialTypeParam(0.0f), Thickness(1.0f), ZBuffer(ECFN_LESSEQUAL),
ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), BlendFactor(0.0f), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), ColorMaterial(ECM_DIFFUSE),
PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT), BlendOperation(EBO_NONE), BlendFactor(0.0f), PolygonOffsetDepthBias(0.f),
PolygonOffsetDepthBias(0.f), PolygonOffsetSlopeScale(0.f), PolygonOffsetSlopeScale(0.f), Wireframe(false), PointCloud(false),
Wireframe(false), PointCloud(false), GouraudShading(true), GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
Lighting(true), ZWriteEnable(EZW_AUTO), BackfaceCulling(true), FrontfaceCulling(false), BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
FogEnable(false), NormalizeNormals(false), UseMipMaps(true) NormalizeNormals(false), UseMipMaps(true)
{ } { }
//! Texture layer array. //! Texture layer array.
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES]; SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
//! Type of the material. Specifies how everything is blended together //! Type of the material. Specifies how everything is blended together
E_MATERIAL_TYPE MaterialType; E_MATERIAL_TYPE MaterialType;
@ -349,10 +337,6 @@ namespace video
EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */ EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */
f32 MaterialTypeParam; f32 MaterialTypeParam;
//! Second free parameter, dependent on the material type.
/** Mostly ignored. */
f32 MaterialTypeParam2;
//! Thickness of non-3dimensional elements such as lines and points. //! Thickness of non-3dimensional elements such as lines and points.
f32 Thickness; f32 Thickness;
@ -398,18 +382,6 @@ namespace video
(setting it to EBO_ADD is probably the most common one value). */ (setting it to EBO_ADD is probably the most common one value). */
f32 BlendFactor; f32 BlendFactor;
//! DEPRECATED. Will be removed after Irrlicht 1.9. Please use PolygonOffsetDepthBias instead.
/** Factor specifying how far the polygon offset should be made.
Specifying 0 disables the polygon offset. The direction is specified separately.
The factor can be from 0 to 7.
Note: This probably never worked on Direct3D9 (was coded for D3D8 which had different value ranges) */
u8 PolygonOffsetFactor:3;
//! DEPRECATED. Will be removed after Irrlicht 1.9.
/** Flag defining the direction the polygon offset is applied to.
Can be to front or to back, specified by values from E_POLYGON_OFFSET. */
E_POLYGON_OFFSET PolygonOffsetDirection:1;
//! A constant z-buffer offset for a polygon/line/point //! A constant z-buffer offset for a polygon/line/point
/** The range of the value is driver specific. /** The range of the value is driver specific.
On OpenGL you get units which are multiplied by the smallest value that is guaranteed to produce a resolvable offset. On OpenGL you get units which are multiplied by the smallest value that is guaranteed to produce a resolvable offset.
@ -429,9 +401,6 @@ namespace video
f32 PolygonOffsetSlopeScale; f32 PolygonOffsetSlopeScale;
//! Draw as wireframe or filled triangles? Default: false //! Draw as wireframe or filled triangles? Default: false
/** The user can access a material flag using
\code material.Wireframe=true \endcode
or \code material.setFlag(EMF_WIREFRAME, true); \endcode */
bool Wireframe:1; bool Wireframe:1;
//! Draw as point cloud or filled triangles? Default: false //! Draw as point cloud or filled triangles? Default: false
@ -465,12 +434,22 @@ namespace video
/** Sometimes, disabling mipmap usage can be useful. Default: true */ /** Sometimes, disabling mipmap usage can be useful. Default: true */
bool UseMipMaps:1; bool UseMipMaps:1;
//! Execute a function on all texture layers.
/** Useful for setting properties which are not per material, but per
texture layer, e.g. bilinear filtering. */
template <typename F>
void forEachTexture(F &&fn) {
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
fn(TextureLayers[i]);
}
}
//! Gets the texture transformation matrix for level i //! Gets the texture transformation matrix for level i
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES /** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
\return Texture matrix for texture level i. */ \return Texture matrix for texture level i. */
core::matrix4& getTextureMatrix(u32 i) core::matrix4& getTextureMatrix(u32 i)
{ {
return TextureLayer[i].getTextureMatrix(); return TextureLayers[i].getTextureMatrix();
} }
//! Gets the immutable texture transformation matrix for level i //! Gets the immutable texture transformation matrix for level i
@ -479,7 +458,7 @@ namespace video
const core::matrix4& getTextureMatrix(u32 i) const const core::matrix4& getTextureMatrix(u32 i) const
{ {
if (i<MATERIAL_MAX_TEXTURES) if (i<MATERIAL_MAX_TEXTURES)
return TextureLayer[i].getTextureMatrix(); return TextureLayers[i].getTextureMatrix();
else else
return core::IdentityMatrix; return core::IdentityMatrix;
} }
@ -491,7 +470,7 @@ namespace video
{ {
if (i>=MATERIAL_MAX_TEXTURES) if (i>=MATERIAL_MAX_TEXTURES)
return; return;
TextureLayer[i].setTextureMatrix(mat); TextureLayers[i].setTextureMatrix(mat);
} }
//! Gets the i-th texture //! Gets the i-th texture
@ -499,7 +478,7 @@ namespace video
\return Texture for texture level i, if defined, else 0. */ \return Texture for texture level i, if defined, else 0. */
ITexture* getTexture(u32 i) const ITexture* getTexture(u32 i) const
{ {
return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0; return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
} }
//! Sets the i-th texture //! Sets the i-th texture
@ -510,144 +489,7 @@ namespace video
{ {
if (i>=MATERIAL_MAX_TEXTURES) if (i>=MATERIAL_MAX_TEXTURES)
return; return;
TextureLayer[i].Texture = tex; TextureLayers[i].Texture = tex;
}
//! Sets the Material flag to the given value
/** \param flag The flag to be set.
\param value The new value for the flag. */
void setFlag(E_MATERIAL_FLAG flag, bool value)
{
switch (flag)
{
case EMF_WIREFRAME:
Wireframe = value; break;
case EMF_POINTCLOUD:
PointCloud = value; break;
case EMF_GOURAUD_SHADING:
GouraudShading = value; break;
case EMF_LIGHTING:
Lighting = value; break;
case EMF_ZBUFFER:
ZBuffer = value; break;
case EMF_ZWRITE_ENABLE:
ZWriteEnable = value ? EZW_AUTO : EZW_OFF; break;
case EMF_BACK_FACE_CULLING:
BackfaceCulling = value; break;
case EMF_FRONT_FACE_CULLING:
FrontfaceCulling = value; break;
case EMF_BILINEAR_FILTER:
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].BilinearFilter = value;
}
break;
case EMF_TRILINEAR_FILTER:
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].TrilinearFilter = value;
}
break;
case EMF_ANISOTROPIC_FILTER:
{
if (value)
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].AnisotropicFilter = 0xFF;
else
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].AnisotropicFilter = 0;
}
break;
case EMF_FOG_ENABLE:
FogEnable = value; break;
case EMF_NORMALIZE_NORMALS:
NormalizeNormals = value; break;
case EMF_TEXTURE_WRAP:
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)value;
TextureLayer[i].TextureWrapV = (E_TEXTURE_CLAMP)value;
TextureLayer[i].TextureWrapW = (E_TEXTURE_CLAMP)value;
}
}
break;
case EMF_ANTI_ALIASING:
AntiAliasing = value?EAAM_SIMPLE:EAAM_OFF; break;
case EMF_COLOR_MASK:
ColorMask = value?ECP_ALL:ECP_NONE; break;
case EMF_COLOR_MATERIAL:
ColorMaterial = value?ECM_DIFFUSE:ECM_NONE; break;
case EMF_USE_MIP_MAPS:
UseMipMaps = value; break;
case EMF_BLEND_OPERATION:
BlendOperation = value?EBO_ADD:EBO_NONE; break;
case EMF_BLEND_FACTOR:
break;
case EMF_POLYGON_OFFSET:
PolygonOffsetFactor = value?1:0;
PolygonOffsetDirection = EPO_BACK;
PolygonOffsetSlopeScale = value?1.f:0.f;
PolygonOffsetDepthBias = value?1.f:0.f;
default:
break;
}
}
//! Gets the Material flag
/** \param flag The flag to query.
\return The current value of the flag. */
bool getFlag(E_MATERIAL_FLAG flag) const
{
switch (flag)
{
case EMF_WIREFRAME:
return Wireframe;
case EMF_POINTCLOUD:
return PointCloud;
case EMF_GOURAUD_SHADING:
return GouraudShading;
case EMF_LIGHTING:
return Lighting;
case EMF_ZBUFFER:
return ZBuffer!=ECFN_DISABLED;
case EMF_ZWRITE_ENABLE:
return ZWriteEnable != EZW_OFF;
case EMF_BACK_FACE_CULLING:
return BackfaceCulling;
case EMF_FRONT_FACE_CULLING:
return FrontfaceCulling;
case EMF_BILINEAR_FILTER:
return TextureLayer[0].BilinearFilter;
case EMF_TRILINEAR_FILTER:
return TextureLayer[0].TrilinearFilter;
case EMF_ANISOTROPIC_FILTER:
return TextureLayer[0].AnisotropicFilter!=0;
case EMF_FOG_ENABLE:
return FogEnable;
case EMF_NORMALIZE_NORMALS:
return NormalizeNormals;
case EMF_TEXTURE_WRAP:
return !(TextureLayer[0].TextureWrapU ||
TextureLayer[0].TextureWrapV ||
TextureLayer[0].TextureWrapW);
case EMF_ANTI_ALIASING:
return (AntiAliasing==1);
case EMF_COLOR_MASK:
return (ColorMask!=ECP_NONE);
case EMF_COLOR_MATERIAL:
return (ColorMaterial != ECM_NONE);
case EMF_USE_MIP_MAPS:
return UseMipMaps;
case EMF_BLEND_OPERATION:
return BlendOperation != EBO_NONE;
case EMF_BLEND_FACTOR:
return BlendFactor != 0.f;
case EMF_POLYGON_OFFSET:
return PolygonOffsetFactor != 0 || PolygonOffsetDepthBias != 0.f;
}
return false;
} }
//! Inequality operator //! Inequality operator
@ -663,7 +505,6 @@ namespace video
SpecularColor != b.SpecularColor || SpecularColor != b.SpecularColor ||
Shininess != b.Shininess || Shininess != b.Shininess ||
MaterialTypeParam != b.MaterialTypeParam || MaterialTypeParam != b.MaterialTypeParam ||
MaterialTypeParam2 != b.MaterialTypeParam2 ||
Thickness != b.Thickness || Thickness != b.Thickness ||
Wireframe != b.Wireframe || Wireframe != b.Wireframe ||
PointCloud != b.PointCloud || PointCloud != b.PointCloud ||
@ -680,15 +521,13 @@ namespace video
ColorMaterial != b.ColorMaterial || ColorMaterial != b.ColorMaterial ||
BlendOperation != b.BlendOperation || BlendOperation != b.BlendOperation ||
BlendFactor != b.BlendFactor || BlendFactor != b.BlendFactor ||
PolygonOffsetFactor != b.PolygonOffsetFactor ||
PolygonOffsetDirection != b.PolygonOffsetDirection ||
PolygonOffsetDepthBias != b.PolygonOffsetDepthBias || PolygonOffsetDepthBias != b.PolygonOffsetDepthBias ||
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale || PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
UseMipMaps != b.UseMipMaps UseMipMaps != b.UseMipMaps
; ;
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i) for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
{ {
different |= (TextureLayer[i] != b.TextureLayer[i]); different |= (TextureLayers[i] != b.TextureLayers[i]);
} }
return different; return different;
} }
@ -727,10 +566,8 @@ namespace video
//! as it asks the material renders directly what they do with the material. //! as it asks the material renders directly what they do with the material.
bool isTransparent() const bool isTransparent() const
{ {
if ( MaterialType==EMT_TRANSPARENT_ADD_COLOR || if ( MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL || MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA )
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA ||
MaterialType==EMT_TRANSPARENT_REFLECTION_2_LAYER )
return true; return true;
return false; return false;

View File

@ -6,7 +6,6 @@
#define __S_MATERIAL_LAYER_H_INCLUDED__ #define __S_MATERIAL_LAYER_H_INCLUDED__
#include "matrix4.h" #include "matrix4.h"
#include "irrAllocator.h"
namespace irr namespace irr
{ {
@ -44,6 +43,32 @@ namespace video
"texture_clamp_mirror_clamp_to_edge", "texture_clamp_mirror_clamp_to_edge",
"texture_clamp_mirror_clamp_to_border", 0}; "texture_clamp_mirror_clamp_to_border", 0};
//! Texture minification filter.
/** Used when scaling textures down. See the documentation on OpenGL's
`GL_TEXTURE_MIN_FILTER` for more information. */
enum E_TEXTURE_MIN_FILTER {
//! Aka nearest-neighbor.
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
//! Aka bilinear.
ETMINF_LINEAR_MIPMAP_NEAREST,
//! Isn't known by any other name.
ETMINF_NEAREST_MIPMAP_LINEAR,
//! Aka trilinear.
ETMINF_LINEAR_MIPMAP_LINEAR,
};
//! Texture magnification filter.
/** Used when scaling textures up. See the documentation on OpenGL's
`GL_TEXTURE_MAG_FILTER` for more information.
Note that mipmaps are only used for minification, not for magnification. */
enum E_TEXTURE_MAG_FILTER {
//! Aka nearest-neighbor.
ETMAGF_NEAREST = 0,
//! Aka bilinear.
ETMAGF_LINEAR,
};
//! Struct for holding material parameters which exist per texture layer //! Struct for holding material parameters which exist per texture layer
// Note for implementors: Serialization is in CNullDriver // Note for implementors: Serialization is in CNullDriver
class SMaterialLayer class SMaterialLayer
@ -51,7 +76,7 @@ namespace video
public: public:
//! Default constructor //! Default constructor
SMaterialLayer() : Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT), SMaterialLayer() : Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
BilinearFilter(true), TrilinearFilter(false), AnisotropicFilter(0), LODBias(0), TextureMatrix(0) MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
{ {
} }
@ -69,8 +94,7 @@ namespace video
{ {
if ( TextureMatrix ) if ( TextureMatrix )
{ {
MatrixAllocator.destruct(TextureMatrix); delete TextureMatrix;
MatrixAllocator.deallocate(TextureMatrix);
} }
} }
@ -90,8 +114,7 @@ namespace video
*TextureMatrix = *other.TextureMatrix; *TextureMatrix = *other.TextureMatrix;
else else
{ {
MatrixAllocator.destruct(TextureMatrix); delete TextureMatrix;
MatrixAllocator.deallocate(TextureMatrix);
TextureMatrix = 0; TextureMatrix = 0;
} }
} }
@ -99,8 +122,7 @@ namespace video
{ {
if (other.TextureMatrix) if (other.TextureMatrix)
{ {
TextureMatrix = MatrixAllocator.allocate(1); TextureMatrix = new core::matrix4(*other.TextureMatrix);
MatrixAllocator.construct(TextureMatrix,*other.TextureMatrix);
} }
else else
TextureMatrix = 0; TextureMatrix = 0;
@ -108,8 +130,8 @@ namespace video
TextureWrapU = other.TextureWrapU; TextureWrapU = other.TextureWrapU;
TextureWrapV = other.TextureWrapV; TextureWrapV = other.TextureWrapV;
TextureWrapW = other.TextureWrapW; TextureWrapW = other.TextureWrapW;
BilinearFilter = other.BilinearFilter; MinFilter = other.MinFilter;
TrilinearFilter = other.TrilinearFilter; MagFilter = other.MagFilter;
AnisotropicFilter = other.AnisotropicFilter; AnisotropicFilter = other.AnisotropicFilter;
LODBias = other.LODBias; LODBias = other.LODBias;
@ -122,8 +144,7 @@ namespace video
{ {
if (!TextureMatrix) if (!TextureMatrix)
{ {
TextureMatrix = MatrixAllocator.allocate(1); TextureMatrix = new core::matrix4();
MatrixAllocator.construct(TextureMatrix,core::IdentityMatrix);
} }
return *TextureMatrix; return *TextureMatrix;
} }
@ -146,8 +167,7 @@ namespace video
{ {
if (!TextureMatrix) if (!TextureMatrix)
{ {
TextureMatrix = MatrixAllocator.allocate(1); TextureMatrix = new core::matrix4(mat);
MatrixAllocator.construct(TextureMatrix,mat);
} }
else else
*TextureMatrix = mat; *TextureMatrix = mat;
@ -163,8 +183,8 @@ namespace video
TextureWrapU != b.TextureWrapU || TextureWrapU != b.TextureWrapU ||
TextureWrapV != b.TextureWrapV || TextureWrapV != b.TextureWrapV ||
TextureWrapW != b.TextureWrapW || TextureWrapW != b.TextureWrapW ||
BilinearFilter != b.BilinearFilter || MinFilter != b.MinFilter ||
TrilinearFilter != b.TrilinearFilter || MagFilter != b.MagFilter ||
AnisotropicFilter != b.AnisotropicFilter || AnisotropicFilter != b.AnisotropicFilter ||
LODBias != b.LODBias; LODBias != b.LODBias;
if (different) if (different)
@ -190,13 +210,11 @@ namespace video
u8 TextureWrapV:4; u8 TextureWrapV:4;
u8 TextureWrapW:4; u8 TextureWrapW:4;
//! Is bilinear filtering enabled? Default: true //! Minification (downscaling) filter
bool BilinearFilter:1; E_TEXTURE_MIN_FILTER MinFilter;
//! Is trilinear filtering enabled? Default: false //! Magnification (upscaling) filter
/** If the trilinear filter flag is enabled, E_TEXTURE_MAG_FILTER MagFilter;
the bilinear filtering flag is ignored. */
bool TrilinearFilter:1;
//! Is anisotropic filtering enabled? Default: 0, disabled //! Is anisotropic filtering enabled? Default: 0, disabled
/** In Irrlicht you can use anisotropic texture filtering /** In Irrlicht you can use anisotropic texture filtering
@ -216,7 +234,6 @@ namespace video
private: private:
friend class SMaterial; friend class SMaterial;
irr::core::irrAllocator<irr::core::matrix4> MatrixAllocator;
//! Texture Matrix //! Texture Matrix
/** Do not access this element directly as the internal /** Do not access this element directly as the internal

View File

@ -44,20 +44,20 @@ namespace scene
//! returns amount of mesh buffers. //! returns amount of mesh buffers.
virtual u32 getMeshBufferCount() const _IRR_OVERRIDE_ u32 getMeshBufferCount() const override
{ {
return MeshBuffers.size(); return MeshBuffers.size();
} }
//! returns pointer to a mesh buffer //! returns pointer to a mesh buffer
virtual IMeshBuffer* getMeshBuffer(u32 nr) const _IRR_OVERRIDE_ IMeshBuffer* getMeshBuffer(u32 nr) const override
{ {
return MeshBuffers[nr]; return MeshBuffers[nr];
} }
//! returns a meshbuffer which fits a material //! returns a meshbuffer which fits a material
/** reverse search */ /** reverse search */
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const _IRR_OVERRIDE_ IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const override
{ {
for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i) for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
{ {
@ -69,13 +69,13 @@ namespace scene
} }
//! returns an axis aligned bounding box //! returns an axis aligned bounding box
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ const core::aabbox3d<f32>& getBoundingBox() const override
{ {
return BoundingBox; return BoundingBox;
} }
//! set user axis aligned bounding box //! set user axis aligned bounding box
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_ void setBoundingBox( const core::aabbox3df& box) override
{ {
BoundingBox = box; BoundingBox = box;
} }
@ -117,22 +117,15 @@ namespace scene
} }
} }
//! sets a flag of all contained materials to a new value
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) _IRR_OVERRIDE_
{
for (u32 i=0; i<MeshBuffers.size(); ++i)
MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
}
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
{ {
for (u32 i=0; i<MeshBuffers.size(); ++i) for (u32 i=0; i<MeshBuffers.size(); ++i)
MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer); MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
} }
//! flags the meshbuffer as changed, reloads hardware buffers //! flags the meshbuffer as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_ void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
{ {
for (u32 i=0; i<MeshBuffers.size(); ++i) for (u32 i=0; i<MeshBuffers.size(); ++i)
MeshBuffers[i]->setDirty(buffer); MeshBuffers[i]->setDirty(buffer);

View File

@ -18,16 +18,16 @@ namespace video
SMaterial Material; SMaterial Material;
//! Which values are overridden //! Which values are overridden
/** OR'ed values from E_MATERIAL_FLAGS. */ /** OR'ed values from E_MATERIAL_PROPS. */
u32 EnableFlags; u32 EnableProps;
//! For those flags in EnableFlags which affect layers, set which of the layers are affected //! For those properties in EnableProps which affect layers, set which of the layers are affected
bool EnableLayerFlags[MATERIAL_MAX_TEXTURES]; bool EnableLayerProps[MATERIAL_MAX_TEXTURES];
//! Which textures are overridden //! Which textures are overridden
bool EnableTextures[MATERIAL_MAX_TEXTURES]; bool EnableTextures[MATERIAL_MAX_TEXTURES];
//! Overwrite complete layers (settings of EnableLayerFlags and EnableTextures don't matter then for layer data) //! Overwrite complete layers (settings of EnableLayerProps and EnableTextures don't matter then for layer data)
bool EnableLayers[MATERIAL_MAX_TEXTURES]; bool EnableLayers[MATERIAL_MAX_TEXTURES];
//! Set in which render passes the material override is active. //! Set in which render passes the material override is active.
@ -59,19 +59,19 @@ namespace video
core::array<SMaterialTypeReplacement> MaterialTypes; core::array<SMaterialTypeReplacement> MaterialTypes;
//! Default constructor //! Default constructor
SOverrideMaterial() : EnableFlags(0), EnablePasses(0), Enabled(false) SOverrideMaterial() : EnableProps(0), EnablePasses(0), Enabled(false)
{ {
} }
//! disable overrides and reset all flags //! disable overrides and reset all properties
void reset() void reset()
{ {
EnableFlags = 0; EnableProps = 0;
EnablePasses = 0; EnablePasses = 0;
Enabled = false; Enabled = false;
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
{ {
EnableLayerFlags[i] = true; // doesn't do anything unless EnableFlags is set, just saying by default all texture layers are affected by flags EnableLayerProps[i] = true; // doesn't do anything unless EnableProps is set, just saying by default all texture layers are affected by properties
EnableTextures[i] = false; EnableTextures[i] = false;
EnableLayers[i] = false; EnableLayers[i] = false;
} }
@ -92,67 +92,65 @@ namespace video
for (u32 f=0; f<32; ++f) for (u32 f=0; f<32; ++f)
{ {
const u32 num=(1<<f); const u32 num=(1<<f);
if (EnableFlags & num) if (EnableProps & num)
{ {
switch (num) switch (num)
{ {
case EMF_WIREFRAME: material.Wireframe = Material.Wireframe; break; case EMP_WIREFRAME: material.Wireframe = Material.Wireframe; break;
case EMF_POINTCLOUD: material.PointCloud = Material.PointCloud; break; case EMP_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
case EMF_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break; case EMP_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
case EMF_LIGHTING: material.Lighting = Material.Lighting; break; case EMP_LIGHTING: material.Lighting = Material.Lighting; break;
case EMF_ZBUFFER: material.ZBuffer = Material.ZBuffer; break; case EMP_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
case EMF_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break; case EMP_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
case EMF_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break; case EMP_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
case EMF_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break; case EMP_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
case EMF_BILINEAR_FILTER: case EMP_MIN_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i) for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{ {
if ( EnableLayerFlags[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].BilinearFilter = Material.TextureLayer[i].BilinearFilter; material.TextureLayers[i].MinFilter = Material.TextureLayers[i].MinFilter;
} }
} }
break; break;
case EMF_TRILINEAR_FILTER: case EMP_MAG_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i) for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{ {
if ( EnableLayerFlags[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].TrilinearFilter = Material.TextureLayer[i].TrilinearFilter; material.TextureLayers[i].MagFilter = Material.TextureLayers[i].MagFilter;
} }
} }
break; break;
case EMF_ANISOTROPIC_FILTER: case EMP_ANISOTROPIC_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i) for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{ {
if ( EnableLayerFlags[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].AnisotropicFilter = Material.TextureLayer[i].AnisotropicFilter; material.TextureLayers[i].AnisotropicFilter = Material.TextureLayers[i].AnisotropicFilter;
} }
} }
break; break;
case EMF_FOG_ENABLE: material.FogEnable = Material.FogEnable; break; case EMP_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
case EMF_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break; case EMP_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
case EMF_TEXTURE_WRAP: case EMP_TEXTURE_WRAP:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i) for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{ {
if ( EnableLayerFlags[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].TextureWrapU = Material.TextureLayer[i].TextureWrapU; material.TextureLayers[i].TextureWrapU = Material.TextureLayers[i].TextureWrapU;
material.TextureLayer[i].TextureWrapV = Material.TextureLayer[i].TextureWrapV; material.TextureLayers[i].TextureWrapV = Material.TextureLayers[i].TextureWrapV;
material.TextureLayer[i].TextureWrapW = Material.TextureLayer[i].TextureWrapW; material.TextureLayers[i].TextureWrapW = Material.TextureLayers[i].TextureWrapW;
} }
} }
break; break;
case EMF_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break; case EMP_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
case EMF_COLOR_MASK: material.ColorMask = Material.ColorMask; break; case EMP_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
case EMF_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break; case EMP_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
case EMF_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break; case EMP_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
case EMF_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break; case EMP_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
case EMF_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break; case EMP_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
case EMF_POLYGON_OFFSET: case EMP_POLYGON_OFFSET:
material.PolygonOffsetDirection = Material.PolygonOffsetDirection;
material.PolygonOffsetFactor = Material.PolygonOffsetFactor;
material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias; material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias;
material.PolygonOffsetSlopeScale = Material.PolygonOffsetSlopeScale; material.PolygonOffsetSlopeScale = Material.PolygonOffsetSlopeScale;
break; break;
@ -163,11 +161,11 @@ namespace video
{ {
if ( EnableLayers[i] ) if ( EnableLayers[i] )
{ {
material.TextureLayer[i] = Material.TextureLayer[i]; material.TextureLayers[i] = Material.TextureLayers[i];
} }
else if ( EnableTextures[i] ) else if ( EnableTextures[i] )
{ {
material.TextureLayer[i].Texture = Material.TextureLayer[i].Texture; material.TextureLayers[i].Texture = Material.TextureLayers[i].Texture;
} }
} }
} }

View File

@ -32,13 +32,13 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Get Material of this buffer. //! Get Material of this buffer.
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_ const video::SMaterial& getMaterial() const override
{ {
return Material; return Material;
} }
//! Get Material of this buffer. //! Get Material of this buffer.
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_ video::SMaterial& getMaterial() override
{ {
return Material; return Material;
} }
@ -58,7 +58,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Get pointer to vertex array //! Get pointer to vertex array
virtual const void* getVertices() const _IRR_OVERRIDE_ const void* getVertices() const override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -72,7 +72,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Get pointer to vertex array //! Get pointer to vertex array
virtual void* getVertices() _IRR_OVERRIDE_ void* getVertices() override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -86,7 +86,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Get vertex count //! Get vertex count
virtual u32 getVertexCount() const _IRR_OVERRIDE_ u32 getVertexCount() const override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -101,43 +101,43 @@ struct SSkinMeshBuffer : public IMeshBuffer
//! Get type of index data which is stored in this meshbuffer. //! Get type of index data which is stored in this meshbuffer.
/** \return Index type of this buffer. */ /** \return Index type of this buffer. */
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_ video::E_INDEX_TYPE getIndexType() const override
{ {
return video::EIT_16BIT; return video::EIT_16BIT;
} }
//! Get pointer to index array //! Get pointer to index array
virtual const u16* getIndices() const _IRR_OVERRIDE_ const u16* getIndices() const override
{ {
return Indices.const_pointer(); return Indices.const_pointer();
} }
//! Get pointer to index array //! Get pointer to index array
virtual u16* getIndices() _IRR_OVERRIDE_ u16* getIndices() override
{ {
return Indices.pointer(); return Indices.pointer();
} }
//! Get index count //! Get index count
virtual u32 getIndexCount() const _IRR_OVERRIDE_ u32 getIndexCount() const override
{ {
return Indices.size(); return Indices.size();
} }
//! Get bounding box //! Get bounding box
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ const core::aabbox3d<f32>& getBoundingBox() const override
{ {
return BoundingBox; return BoundingBox;
} }
//! Set bounding box //! Set bounding box
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_ void setBoundingBox( const core::aabbox3df& box) override
{ {
BoundingBox = box; BoundingBox = box;
} }
//! Recalculate bounding box //! Recalculate bounding box
virtual void recalculateBoundingBox() _IRR_OVERRIDE_ void recalculateBoundingBox() override
{ {
if(!BoundingBoxNeedsRecalculated) if(!BoundingBoxNeedsRecalculated)
return; return;
@ -186,7 +186,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Get vertex type //! Get vertex type
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_ video::E_VERTEX_TYPE getVertexType() const override
{ {
return VertexType; return VertexType;
} }
@ -244,7 +244,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns position of vertex i //! returns position of vertex i
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_ const core::vector3df& getPosition(u32 i) const override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -258,7 +258,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns position of vertex i //! returns position of vertex i
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_ core::vector3df& getPosition(u32 i) override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -272,7 +272,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns normal of vertex i //! returns normal of vertex i
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_ const core::vector3df& getNormal(u32 i) const override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -286,7 +286,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns normal of vertex i //! returns normal of vertex i
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_ core::vector3df& getNormal(u32 i) override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -300,7 +300,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns texture coords of vertex i //! returns texture coords of vertex i
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_ const core::vector2df& getTCoords(u32 i) const override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -314,7 +314,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! returns texture coords of vertex i //! returns texture coords of vertex i
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_ core::vector2df& getTCoords(u32 i) override
{ {
switch (VertexType) switch (VertexType)
{ {
@ -328,25 +328,25 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! append the vertices and indices to the current buffer //! append the vertices and indices to the current buffer
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_ {} void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override {}
//! append the meshbuffer to the current buffer //! append the meshbuffer to the current buffer
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_ {} void append(const IMeshBuffer* const other) override {}
//! get the current hardware mapping hint for vertex buffers //! get the current hardware mapping hint for vertex buffers
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
{ {
return MappingHint_Vertex; return MappingHint_Vertex;
} }
//! get the current hardware mapping hint for index buffers //! get the current hardware mapping hint for index buffers
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_ E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
{ {
return MappingHint_Index; return MappingHint_Index;
} }
//! set the hardware mapping hint, for driver //! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_ void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
{ {
if (Buffer==EBT_VERTEX) if (Buffer==EBT_VERTEX)
MappingHint_Vertex=NewMappingHint; MappingHint_Vertex=NewMappingHint;
@ -360,19 +360,19 @@ struct SSkinMeshBuffer : public IMeshBuffer
} }
//! Describe what kind of primitive geometry is used by the meshbuffer //! Describe what kind of primitive geometry is used by the meshbuffer
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_ void setPrimitiveType(E_PRIMITIVE_TYPE type) override
{ {
PrimitiveType = type; PrimitiveType = type;
} }
//! Get the kind of primitive geometry which is used by the meshbuffer //! Get the kind of primitive geometry which is used by the meshbuffer
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_ E_PRIMITIVE_TYPE getPrimitiveType() const override
{ {
return PrimitiveType; return PrimitiveType;
} }
//! flags the mesh as changed, reloads hardware buffers //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_ void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
{ {
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX) if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
++ChangedID_Vertex; ++ChangedID_Vertex;
@ -380,15 +380,15 @@ struct SSkinMeshBuffer : public IMeshBuffer
++ChangedID_Index; ++ChangedID_Index;
} }
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;} u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;} u32 getChangedID_Index() const override {return ChangedID_Index;}
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ { void setHWBuffer(void *ptr) const override {
HWBuffer = ptr; HWBuffer = ptr;
} }
virtual void *getHWBuffer() const _IRR_OVERRIDE_ { void *getHWBuffer() const override {
return HWBuffer; return HWBuffer;
} }

View File

@ -5,7 +5,6 @@
#ifndef __EXAMPLE_HELPER_H_INCLUDED__ #ifndef __EXAMPLE_HELPER_H_INCLUDED__
#define __EXAMPLE_HELPER_H_INCLUDED__ #define __EXAMPLE_HELPER_H_INCLUDED__
#include "IrrCompileConfig.h"
#include "path.h" #include "path.h"
namespace irr namespace irr
@ -13,7 +12,7 @@ namespace irr
static io::path getExampleMediaPath() static io::path getExampleMediaPath()
{ {
#if defined (_IRR_IOS_PLATFORM_) || defined (_IRR_ANDROID_PLATFORM_) || defined (_IRR_OSX_PLATFORM_) || defined (_IRR_EMSCRIPTEN_PLATFORM_) #ifdef IRR_MOBILE_PATHS
return io::path("media/"); return io::path("media/");
#else #else
return io::path("../../media/"); return io::path("../../media/");

View File

@ -1,113 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
#ifndef __IRR_ALLOCATOR_H_INCLUDED__
#define __IRR_ALLOCATOR_H_INCLUDED__
#include "irrTypes.h"
#include <new>
// necessary for older compilers
#include <memory.h>
namespace irr
{
namespace core
{
//! Very simple allocator implementation, containers using it can be used across dll boundaries
template<typename T>
class irrAllocator
{
public:
//! Destructor
virtual ~irrAllocator() {}
//! Allocate memory for an array of objects
T* allocate(size_t cnt)
{
return (T*)internal_new(cnt* sizeof(T));
}
//! Deallocate memory for an array of objects
void deallocate(T* ptr)
{
internal_delete(ptr);
}
//! Construct an element
void construct(T* ptr, const T&e)
{
new ((void*)ptr) T(e);
}
//! Destruct an element
void destruct(T* ptr)
{
ptr->~T();
}
protected:
virtual void* internal_new(size_t cnt)
{
return operator new(cnt);
}
virtual void internal_delete(void* ptr)
{
operator delete(ptr);
}
};
//! Fast allocator, only to be used in containers inside the same memory heap.
/** Containers using it are NOT able to be used it across dll boundaries. Use this
when using in an internal class or function or when compiled into a static lib */
template<typename T>
class irrAllocatorFast
{
public:
//! Allocate memory for an array of objects
T* allocate(size_t cnt)
{
return (T*)operator new(cnt* sizeof(T));
}
//! Deallocate memory for an array of objects
void deallocate(T* ptr)
{
operator delete(ptr);
}
//! Construct an element
void construct(T* ptr, const T&e)
{
new ((void*)ptr) T(e);
}
//! Destruct an element
void destruct(T* ptr)
{
ptr->~T();
}
};
//! defines an allocation strategy (used only by irr::array so far)
enum eAllocStrategy
{
ALLOC_STRATEGY_SAFE = 0, // increase size by 1
ALLOC_STRATEGY_DOUBLE = 1, // double size when under 500 elements, beyond that increase by 1/4th size. Plus a small constant.
ALLOC_STRATEGY_SQRT = 2 // not implemented
};
} // end namespace core
} // end namespace irr
#endif

View File

@ -5,7 +5,6 @@
#ifndef __IRR_MATH_H_INCLUDED__ #ifndef __IRR_MATH_H_INCLUDED__
#define __IRR_MATH_H_INCLUDED__ #define __IRR_MATH_H_INCLUDED__
#include "IrrCompileConfig.h"
#include "irrTypes.h" #include "irrTypes.h"
#include <math.h> #include <math.h>
#include <float.h> #include <float.h>
@ -21,9 +20,7 @@ namespace core
const s32 ROUNDING_ERROR_S32 = 0; const s32 ROUNDING_ERROR_S32 = 0;
#ifdef __IRR_HAS_S64
const s64 ROUNDING_ERROR_S64 = 0; const s64 ROUNDING_ERROR_S64 = 0;
#endif
const f32 ROUNDING_ERROR_f32 = 0.000001f; const f32 ROUNDING_ERROR_f32 = 0.000001f;
const f64 ROUNDING_ERROR_f64 = 0.00000001; const f64 ROUNDING_ERROR_f64 = 0.00000001;
@ -186,7 +183,6 @@ namespace core
return ROUNDING_ERROR_S32; return ROUNDING_ERROR_S32;
} }
#ifdef __IRR_HAS_S64
template <> template <>
inline s64 roundingError() inline s64 roundingError()
{ {
@ -198,7 +194,6 @@ namespace core
{ {
return ROUNDING_ERROR_S64; return ROUNDING_ERROR_S64;
} }
#endif
template <class T> template <class T>
inline T relativeErrorFactor() inline T relativeErrorFactor()
@ -310,13 +305,11 @@ namespace core
return a <= tolerance; return a <= tolerance;
} }
#ifdef __IRR_HAS_S64
//! returns if a equals zero, taking rounding errors into account //! returns if a equals zero, taking rounding errors into account
inline bool iszero(const s64 a, const s64 tolerance = 0) inline bool iszero(const s64 a, const s64 tolerance = 0)
{ {
return abs_(a) <= tolerance; return abs_(a) <= tolerance;
} }
#endif
inline s32 s32_min(s32 a, s32 b) inline s32 s32_min(s32 a, s32 b)
{ {
@ -406,13 +399,11 @@ namespace core
return static_cast<s32>(squareroot(static_cast<f32>(f))); return static_cast<s32>(squareroot(static_cast<f32>(f)));
} }
#ifdef __IRR_HAS_S64
// calculate: sqrt ( x ) // calculate: sqrt ( x )
REALINLINE s64 squareroot(const s64 f) REALINLINE s64 squareroot(const s64 f)
{ {
return static_cast<s64>(squareroot(static_cast<f64>(f))); return static_cast<s64>(squareroot(static_cast<f64>(f)));
} }
#endif
// calculate: 1 / sqrt ( x ) // calculate: 1 / sqrt ( x )
REALINLINE f64 reciprocal_squareroot(const f64 x) REALINLINE f64 reciprocal_squareroot(const f64 x)

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,6 @@
#ifndef __IRR_TYPES_H_INCLUDED__ #ifndef __IRR_TYPES_H_INCLUDED__
#define __IRR_TYPES_H_INCLUDED__ #define __IRR_TYPES_H_INCLUDED__
#include "IrrCompileConfig.h"
#include <stdint.h> #include <stdint.h>
namespace irr namespace irr
@ -38,13 +37,11 @@ typedef uint32_t u32;
typedef int32_t s32; typedef int32_t s32;
#ifdef __IRR_HAS_S64
//! 64 bit unsigned variable. //! 64 bit unsigned variable.
typedef uint64_t u64; typedef uint64_t u64;
//! 64 bit signed variable. //! 64 bit signed variable.
typedef int64_t s64; typedef int64_t s64;
#endif // __IRR_HAS_S64
@ -112,13 +109,10 @@ For functions: template<class T> _IRR_DEPRECATED_ void test4(void) {}
#define _IRR_DEPRECATED_ #define _IRR_DEPRECATED_
#endif #endif
//! Defines an override macro, to protect virtual functions from typos and other mismatches //! deprecated macro for virtual function override
/** Usage in a derived class: /** prefer to use the override keyword for new code */
virtual void somefunc() _IRR_OVERRIDE_;
*/
#define _IRR_OVERRIDE_ override #define _IRR_OVERRIDE_ override
//! creates four CC codes used in Irrlicht for simple ids //! creates four CC codes used in Irrlicht for simple ids
/** some compilers can create those by directly writing the /** some compilers can create those by directly writing the
code like 'code', but some generate warnings so we use this macro here */ code like 'code', but some generate warnings so we use this macro here */

File diff suppressed because it is too large Load Diff

View File

@ -29,13 +29,11 @@
#ifndef __IRRLICHT_H_INCLUDED__ #ifndef __IRRLICHT_H_INCLUDED__
#define __IRRLICHT_H_INCLUDED__ #define __IRRLICHT_H_INCLUDED__
#include "IrrCompileConfig.h"
#include "aabbox3d.h" #include "aabbox3d.h"
#include "CIndexBuffer.h" #include "CIndexBuffer.h"
#include "CMeshBuffer.h" #include "CMeshBuffer.h"
#include "coreutil.h" #include "coreutil.h"
#include "CVertexBuffer.h" #include "CVertexBuffer.h"
#include "IProfiler.h"
#include "dimension2d.h" #include "dimension2d.h"
#include "ECullingTypes.h" #include "ECullingTypes.h"
#include "EDebugSceneTypes.h" #include "EDebugSceneTypes.h"
@ -44,7 +42,7 @@
#include "EGUIAlignment.h" #include "EGUIAlignment.h"
#include "EGUIElementTypes.h" #include "EGUIElementTypes.h"
#include "EHardwareBufferFlags.h" #include "EHardwareBufferFlags.h"
#include "EMaterialFlags.h" #include "EMaterialProps.h"
#include "EMaterialTypes.h" #include "EMaterialTypes.h"
#include "EMeshWriterEnums.h" #include "EMeshWriterEnums.h"
#include "ESceneNodeTypes.h" #include "ESceneNodeTypes.h"
@ -136,6 +134,7 @@
#include "triangle3d.h" #include "triangle3d.h"
#include "vector2d.h" #include "vector2d.h"
#include "vector3d.h" #include "vector3d.h"
#include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV
/*! \mainpage Irrlicht Engine 1.9 API documentation /*! \mainpage Irrlicht Engine 1.9 API documentation
* *
@ -256,8 +255,7 @@ namespace irr
//! Creates an Irrlicht device. The Irrlicht device is the root object for using the engine. //! Creates an Irrlicht device. The Irrlicht device is the root object for using the engine.
/** If you need more parameters to be passed to the creation of the Irrlicht Engine device, /** If you need more parameters to be passed to the creation of the Irrlicht Engine device,
use the createDeviceEx() function. use the createDeviceEx() function.
\param driverType: Type of the video driver to use. This can currently be video::EDT_NULL, \param driverType: Type of the video driver to use.
video::EDT_SOFTWARE, video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D9 and video::EDT_OPENGL.
\param windowSize: Size of the window or the video mode in fullscreen mode. \param windowSize: Size of the window or the video mode in fullscreen mode.
\param bits: Bits per pixel in fullscreen mode. Ignored if windowed mode. \param bits: Bits per pixel in fullscreen mode. Ignored if windowed mode.
\param fullscreen: Should be set to true if the device should run in fullscreen. Otherwise \param fullscreen: Should be set to true if the device should run in fullscreen. Otherwise
@ -272,7 +270,7 @@ namespace irr
device could not be created. device could not be created.
*/ */
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice( extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice(
video::E_DRIVER_TYPE driverType = video::EDT_SOFTWARE, video::E_DRIVER_TYPE driverType = video::EDT_OPENGL,
// parentheses are necessary for some compilers // parentheses are necessary for some compilers
const core::dimension2d<u32>& windowSize = (core::dimension2d<u32>(640,480)), const core::dimension2d<u32>& windowSize = (core::dimension2d<u32>(640,480)),
u32 bits = 32, u32 bits = 32,
@ -281,16 +279,6 @@ namespace irr
bool vsync = false, bool vsync = false,
IEventReceiver* receiver = 0); IEventReceiver* receiver = 0);
//! typedef for Function Pointer
typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDevice )(
video::E_DRIVER_TYPE driverType,
const core::dimension2d<u32>& windowSize,
u32 bits,
bool fullscreen,
bool stencilbuffer,
bool vsync,
IEventReceiver* receiver);
//! Creates an Irrlicht device with the option to specify advanced parameters. //! Creates an Irrlicht device with the option to specify advanced parameters.
/** Usually you should used createDevice() for creating an Irrlicht Engine device. /** Usually you should used createDevice() for creating an Irrlicht Engine device.
@ -303,10 +291,6 @@ namespace irr
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx( extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx(
const SIrrlichtCreationParameters& parameters); const SIrrlichtCreationParameters& parameters);
//! typedef for Function Pointer
typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDeviceEx )( const SIrrlichtCreationParameters& parameters );
// THE FOLLOWING IS AN EMPTY LIST OF ALL SUB NAMESPACES // THE FOLLOWING IS AN EMPTY LIST OF ALL SUB NAMESPACES
// EXISTING ONLY FOR THE DOCUMENTATION SOFTWARE DOXYGEN. // EXISTING ONLY FOR THE DOCUMENTATION SOFTWARE DOXYGEN.

View File

@ -1,70 +0,0 @@
// Copyright (C) 2013 Michael Zeilfelder
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __LEAK_HUNTER_INCLUDED__
#define __LEAK_HUNTER_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
#include "irrArray.h"
namespace irr
{
class IReferenceCounted;
//! A class helping to find unreleased objects of type IReferenceCounted.
/** To use this you have recompile Irrlicht with _IRR_COMPILE_WITH_LEAK_HUNTER_.
Note that this will slow down your application and should only be used for debugging.
The way to use is that you can check after you closed and dropped your last Irrlicht device
if there are still any IReferenceCounted left over which have not been deleted.
*/
class LeakHunter
{
public:
friend class IReferenceCounted;
//! Clear all IReferenceCounted objects inside LeakHunter
/** This does not affect the IReferenceCounted themselves only the
counting of them. Usually you don't ever need to clear, but
sometimes it helps when for example you want to ignore
certain leaks.
*/
static void clearReferenceCountedObjects()
{
ReferenceCountedObjects.clear();
}
//! Access all objects which are currently reference counted.
static inline irr::core::array<const IReferenceCounted*> getReferenceCountedObjects()
{
return ReferenceCountedObjects;
}
protected:
static inline void addObject(const IReferenceCounted* object)
{
ReferenceCountedObjects.push_back(object);
}
static inline void removeObject(const IReferenceCounted* object)
{
irr::s32 idx = ReferenceCountedObjects.linear_search(object );
if ( idx >= 0 )
{
irr::core::swap( ReferenceCountedObjects[idx], ReferenceCountedObjects.getLast() );
ReferenceCountedObjects.erase( ReferenceCountedObjects.size()-1 );
}
}
private:
// NOTE: We don't do additional grab()/drop()'s here as we want to supervise reference counted objects and not affect them otherwise.
IRRLICHT_API static irr::core::array<const IReferenceCounted*> ReferenceCountedObjects;
};
} // end namespace irr
#endif // _IRR_COMPILE_WITH_LEAK_HUNTER_
#endif

View File

@ -12,6 +12,7 @@
#include "aabbox3d.h" #include "aabbox3d.h"
#include "rect.h" #include "rect.h"
#include "irrString.h" #include "irrString.h"
#include "IrrCompileConfig.h" // for IRRLICHT_API
// enable this to keep track of changes to the matrix // enable this to keep track of changes to the matrix
// and make simpler identity check for seldom changing matrices // and make simpler identity check for seldom changing matrices
@ -142,7 +143,7 @@ namespace core
//! Set this matrix to the product of two matrices //! Set this matrix to the product of two matrices
/** Calculate b*a, no optimization used, /** Calculate b*a, no optimization used,
use it if you know you never have a identity matrix */ use it if you know you never have an identity matrix */
CMatrix4<T>& setbyproduct_nocheck(const CMatrix4<T>& other_a,const CMatrix4<T>& other_b ); CMatrix4<T>& setbyproduct_nocheck(const CMatrix4<T>& other_a,const CMatrix4<T>& other_b );
//! Multiply by another matrix. //! Multiply by another matrix.
@ -150,7 +151,8 @@ namespace core
CMatrix4<T> operator*(const CMatrix4<T>& other) const; CMatrix4<T> operator*(const CMatrix4<T>& other) const;
//! Multiply by another matrix. //! Multiply by another matrix.
/** Calculate and return other*this */ /** Like calling: (*this) = (*this) * other
*/
CMatrix4<T>& operator*=(const CMatrix4<T>& other); CMatrix4<T>& operator*=(const CMatrix4<T>& other);
//! Multiply by scalar. //! Multiply by scalar.
@ -186,14 +188,25 @@ namespace core
//! Make a rotation matrix from Euler angles. The 4th row and column are unmodified. //! Make a rotation matrix from Euler angles. The 4th row and column are unmodified.
CMatrix4<T>& setRotationDegrees( const vector3d<T>& rotation ); CMatrix4<T>& setRotationDegrees( const vector3d<T>& rotation );
//! Get the rotation, as set by setRotation() when you already know the scale. //! Get the rotation, as set by setRotation() when you already know the scale used to create the matrix
/** If you already know the scale then this function is faster than the other getRotationDegrees overload. /** NOTE: The scale needs to be the correct one used to create this matrix.
NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values. You can _not_ use the result of getScale(), but have to save your scale
variable in another place (like ISceneNode does).
NOTE: No scale value can be 0 or the result is undefined.
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
NOTE: It will (usually) give wrong results when further transformations have been added in the matrix (like shear).
WARNING: There have been troubles with this function over the years and we may still have missed some corner cases.
It's generally safer to keep the rotation and scale you used to create the matrix around and work with those.
*/ */
core::vector3d<T> getRotationDegrees(const vector3d<T>& scale) const; core::vector3d<T> getRotationDegrees(const vector3d<T>& scale) const;
//! Returns the rotation, as set by setRotation(). //! Returns the rotation, as set by setRotation().
/** NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values. /** NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
NOTE: This only works correct if no other matrix operations have been done on the inner 3x3 matrix besides
setting rotation (so no scale/shear). Thought it (probably) works as long as scale doesn't flip handedness.
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
*/ */
core::vector3d<T> getRotationDegrees() const; core::vector3d<T> getRotationDegrees() const;
@ -265,13 +278,6 @@ namespace core
void transformPlane( const core::plane3d<f32> &in, core::plane3d<f32> &out) const; void transformPlane( const core::plane3d<f32> &in, core::plane3d<f32> &out) const;
//! Transforms a axis aligned bounding box //! Transforms a axis aligned bounding box
/** The result box of this operation may not be accurate at all. For
correct results, use transformBoxEx() */
void transformBox(core::aabbox3d<f32>& box) const;
//! Transforms a axis aligned bounding box
/** The result box of this operation should be accurate, but this operation
is slower than transformBox(). */
void transformBoxEx(core::aabbox3d<f32>& box) const; void transformBoxEx(core::aabbox3d<f32>& box) const;
//! Multiplies this matrix by a 1x4 matrix //! Multiplies this matrix by a 1x4 matrix
@ -827,11 +833,9 @@ namespace core
//! Returns the absolute values of the scales of the matrix. //! Returns the absolute values of the scales of the matrix.
/** /**
Note that this returns the absolute (positive) values unless only scale is set. Note: You only get back original values if the matrix only set the scale.
Unfortunately it does not appear to be possible to extract any original negative Otherwise the result is a scale you can use to normalize the matrix axes,
values. The best that we could do would be to arbitrarily make one scale but it's usually no longer what you did set with setScale.
negative if one or three of them were negative.
FIXME - return the original values.
*/ */
template <class T> template <class T>
inline vector3d<T> CMatrix4<T>::getScale() const inline vector3d<T> CMatrix4<T>::getScale() const
@ -894,33 +898,16 @@ namespace core
} }
//! Returns a rotation that is equivalent to that set by setRotationDegrees(). //! Returns a rotation which (mostly) works in combination with the given scale
/** This code was sent in by Chev. Note that it does not necessarily return /**
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will This code was originally written by by Chev (assuming no scaling back then,
be equivalent, i.e. will have the same result when used to rotate a vector or node. we can be blamed for all problems added by regarding scale)
This code was originally written by by Chev.
*/ */
template <class T> template <class T>
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees(const vector3d<T>& scale_) const inline core::vector3d<T> CMatrix4<T>::getRotationDegrees(const vector3d<T>& scale_) const
{ {
const CMatrix4<T> &mat = *this; const CMatrix4<T> &mat = *this;
core::vector3d<T> scale(scale_); const core::vector3d<f64> scale(core::iszero(scale_.X) ? FLT_MAX : scale_.X , core::iszero(scale_.Y) ? FLT_MAX : scale_.Y, core::iszero(scale_.Z) ? FLT_MAX : scale_.Z);
// we need to check for negative scale on to axes, which would bring up wrong results
if (scale.Y<0 && scale.Z<0)
{
scale.Y =-scale.Y;
scale.Z =-scale.Z;
}
else if (scale.X<0 && scale.Z<0)
{
scale.X =-scale.X;
scale.Z =-scale.Z;
}
else if (scale.X<0 && scale.Y<0)
{
scale.X =-scale.X;
scale.Y =-scale.Y;
}
const core::vector3d<f64> invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z)); const core::vector3d<f64> invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z));
f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0)); f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0));
@ -929,7 +916,7 @@ namespace core
f64 rotx, roty, X, Z; f64 rotx, roty, X, Z;
if (!core::iszero(C)) if (!core::iszero((T)C))
{ {
const f64 invC = core::reciprocal(C); const f64 invC = core::reciprocal(C);
rotx = mat[10] * invC * invScale.Z; rotx = mat[10] * invC * invScale.Z;
@ -956,14 +943,37 @@ namespace core
} }
//! Returns a rotation that is equivalent to that set by setRotationDegrees(). //! Returns a rotation that is equivalent to that set by setRotationDegrees().
/** This code was sent in by Chev. Note that it does not necessarily return
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will
be equivalent, i.e. will have the same result when used to rotate a vector or node.
This code was originally written by by Chev. */
template <class T> template <class T>
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees() const inline core::vector3d<T> CMatrix4<T>::getRotationDegrees() const
{ {
return getRotationDegrees(getScale()); // Note: Using getScale() here make it look like it could do matrix decomposition.
// It can't! It works (or should work) as long as rotation doesn't flip the handedness
// aka scale swapping 1 or 3 axes. (I think we could catch that as well by comparing
// crossproduct of first 2 axes to direction of third axis, but TODO)
// And maybe it should also offer the solution for the simple calculation
// without regarding scaling as Irrlicht did before 1.7
core::vector3d<T> scale(getScale());
// We assume the matrix uses rotations instead of negative scaling 2 axes.
// Otherwise it fails even for some simple cases, like rotating around
// 2 axes by 180° which getScale thinks is a negative scaling.
if (scale.Y<0 && scale.Z<0)
{
scale.Y =-scale.Y;
scale.Z =-scale.Z;
}
else if (scale.X<0 && scale.Z<0)
{
scale.X =-scale.X;
scale.Z =-scale.Z;
}
else if (scale.X<0 && scale.Y<0)
{
scale.X =-scale.X;
scale.Y =-scale.Y;
}
return getRotationDegrees(scale);
} }
@ -1155,10 +1165,10 @@ namespace core
template <class T> template <class T>
inline void CMatrix4<T>::rotateVect( vector3df& vect ) const inline void CMatrix4<T>::rotateVect( vector3df& vect ) const
{ {
vector3df tmp = vect; vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
vect.X = tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8]; vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8]);
vect.Y = tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9]; vect.Y = static_cast<f32>(tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9]);
vect.Z = tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10]; vect.Z = static_cast<f32>(tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10]);
} }
//! An alternate transform vector method, writing into a second vector //! An alternate transform vector method, writing into a second vector
@ -1182,24 +1192,24 @@ namespace core
template <class T> template <class T>
inline void CMatrix4<T>::inverseRotateVect( vector3df& vect ) const inline void CMatrix4<T>::inverseRotateVect( vector3df& vect ) const
{ {
vector3df tmp = vect; vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
vect.X = tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2]; vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2]);
vect.Y = tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6]; vect.Y = static_cast<f32>(tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6]);
vect.Z = tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10]; vect.Z = static_cast<f32>(tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10]);
} }
template <class T> template <class T>
inline void CMatrix4<T>::transformVect( vector3df& vect) const inline void CMatrix4<T>::transformVect( vector3df& vect) const
{ {
f32 vector[3]; T vector[3];
vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12]; vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12];
vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13]; vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13];
vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14]; vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14];
vect.X = vector[0]; vect.X = static_cast<f32>(vector[0]);
vect.Y = vector[1]; vect.Y = static_cast<f32>(vector[1]);
vect.Z = vector[2]; vect.Z = static_cast<f32>(vector[2]);
} }
template <class T> template <class T>
@ -1261,22 +1271,6 @@ namespace core
transformPlane( out ); transformPlane( out );
} }
//! Transforms the edge-points of a bounding box
//! Deprecated as it's usually not what people need (regards only 2 corners, but other corners might be outside the box after transformation)
//! Use transformBoxEx instead.
template <class T>
_IRR_DEPRECATED_ inline void CMatrix4<T>::transformBox(core::aabbox3d<f32>& box) const
{
#if defined ( USE_MATRIX_TEST )
if (isIdentity())
return;
#endif
transformVect(box.MinEdge);
transformVect(box.MaxEdge);
box.repair();
}
//! Transforms a axis aligned bounding box more accurately than transformBox() //! Transforms a axis aligned bounding box more accurately than transformBox()
template <class T> template <class T>
inline void CMatrix4<T>::transformBoxEx(core::aabbox3d<f32>& box) const inline void CMatrix4<T>::transformBoxEx(core::aabbox3d<f32>& box) const

View File

@ -5,7 +5,7 @@
#include <string> #include <string>
#include <unordered_set> #include <unordered_set>
#include "IrrCompileConfig.h" #include "IrrCompileConfig.h" // for IRRLICHT_API
#include "irrTypes.h" #include "irrTypes.h"
#include "IContextManager.h" #include "IContextManager.h"
#include <KHR/khrplatform.h> #include <KHR/khrplatform.h>

View File

@ -100,8 +100,7 @@ namespace core
//! Check if a point is inside the triangle (border-points count also as inside) //! Check if a point is inside the triangle (border-points count also as inside)
/** This method uses a barycentric coordinate system. /** This method uses a barycentric coordinate system.
It is faster than isPointInside but is more susceptible to floating point rounding It is faster than isPointInside but is more susceptible to floating point rounding
errors. This will especially be noticeable when the FPU is in single precision mode errors.
(which is for example set on default by Direct3D).
\param p Point to test. Assumes that this point is already \param p Point to test. Assumes that this point is already
on the plane of the triangle. on the plane of the triangle.
\return True if point is inside the triangle, otherwise false. */ \return True if point is inside the triangle, otherwise false. */

View File

@ -1,72 +0,0 @@
precision mediump float;
/* Uniforms */
uniform float uModulate;
uniform int uTextureUsage0;
uniform int uTextureUsage1;
uniform sampler2D uTextureUnit0;
uniform sampler2D uTextureUnit1;
uniform int uFogEnable;
uniform int uFogType;
uniform vec4 uFogColor;
uniform float uFogStart;
uniform float uFogEnd;
uniform float uFogDensity;
/* Varyings */
varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord;
float computeFog()
{
const float LOG2 = 1.442695;
float FogFactor = 0.0;
if (uFogType == 0) // Exp
{
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
}
else if (uFogType == 1) // Linear
{
float Scale = 1.0 / (uFogEnd - uFogStart);
FogFactor = (uFogEnd - vFogCoord) * Scale;
}
else if (uFogType == 2) // Exp2
{
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
}
FogFactor = clamp(FogFactor, 0.0, 1.0);
return FogFactor;
}
void main()
{
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
if (bool(uTextureUsage0))
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uTextureUsage1))
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
vec4 FinalColor = (Color0 * Color1 * uModulate) * vVertexColor;
FinalColor += vSpecularColor;
if (bool(uFogEnable))
{
float FogFactor = computeFog();
vec4 FogColor = uFogColor;
FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor);
}
gl_FragColor = FinalColor;
}

View File

@ -1,53 +0,0 @@
/* Attributes */
attribute vec3 inVertexPosition;
attribute vec3 inVertexNormal;
attribute vec4 inVertexColor;
attribute vec2 inTexCoord0;
attribute vec2 inTexCoord1;
/* Uniforms */
uniform mat4 uWVPMatrix;
uniform mat4 uWVMatrix;
uniform mat4 uNMatrix;
uniform mat4 uTMatrix0;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
uniform float uThickness;
/* Varyings */
varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord;
void main()
{
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
gl_PointSize = uThickness;
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
vec3 P = normalize(Position);
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
vec3 R = reflect(P, N);
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
vTextureCoord1 = vec2(R.x/V + 0.5, R.y/V + 0.5);
vVertexColor = inVertexColor.bgra;
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
vFogCoord = length(Position);
}

View File

@ -1,72 +0,0 @@
precision mediump float;
/* Uniforms */
uniform int uTextureUsage0;
uniform int uTextureUsage1;
uniform sampler2D uTextureUnit0;
uniform sampler2D uTextureUnit1;
uniform int uFogEnable;
uniform int uFogType;
uniform vec4 uFogColor;
uniform float uFogStart;
uniform float uFogEnd;
uniform float uFogDensity;
/* Varyings */
varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord;
float computeFog()
{
const float LOG2 = 1.442695;
float FogFactor = 0.0;
if (uFogType == 0) // Exp
{
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
}
else if (uFogType == 1) // Linear
{
float Scale = 1.0 / (uFogEnd - uFogStart);
FogFactor = (uFogEnd - vFogCoord) * Scale;
}
else if (uFogType == 2) // Exp2
{
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
}
FogFactor = clamp(FogFactor, 0.0, 1.0);
return FogFactor;
}
void main()
{
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
if (bool(uTextureUsage0))
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uTextureUsage1))
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor;
FinalColor += vSpecularColor;
if (bool(uFogEnable))
{
float FogFactor = computeFog();
vec4 FogColor = uFogColor;
FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor);
}
gl_FragColor = FinalColor;
}

View File

@ -1,48 +0,0 @@
/* Attributes */
attribute vec3 inVertexPosition;
attribute vec3 inVertexNormal;
attribute vec4 inVertexColor;
attribute vec2 inTexCoord0;
attribute vec2 inTexCoord1;
/* Uniforms */
uniform mat4 uWVPMatrix;
uniform mat4 uWVMatrix;
uniform mat4 uNMatrix;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
uniform float uThickness;
/* Varyings */
varying vec2 vTextureCoord0;
varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord;
void main()
{
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
gl_PointSize = uThickness;
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
vec3 P = normalize(Position);
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
vec3 R = reflect(P, N);
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
vTextureCoord0 = vec2(R.x/V + 0.5, R.y/V + 0.5);
vVertexColor = inVertexColor.bgra;
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
vFogCoord = length(Position);
}

View File

@ -1,11 +1,12 @@
#version 100
precision mediump float; precision mediump float;
/* Uniforms */ /* Uniforms */
uniform int uTextureUsage0; uniform int uTextureUsage0;
uniform int uTextureUsage1;
uniform sampler2D uTextureUnit0; uniform sampler2D uTextureUnit0;
uniform sampler2D uTextureUnit1; uniform int uBlendType;
uniform int uFogEnable; uniform int uFogEnable;
uniform int uFogType; uniform int uFogType;
uniform vec4 uFogColor; uniform vec4 uFogColor;
@ -16,9 +17,7 @@ uniform float uFogDensity;
/* Varyings */ /* Varyings */
varying vec2 vTextureCoord0; varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor; varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord; varying float vFogCoord;
float computeFog() float computeFog()
@ -47,16 +46,22 @@ float computeFog()
void main() void main()
{ {
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); vec4 Color0 = vVertexColor;
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0); vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
if (bool(uTextureUsage0)) if (bool(uTextureUsage0))
Color0 = texture2D(uTextureUnit0, vTextureCoord0); Color1 = texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uTextureUsage1)) vec4 FinalColor = Color0 * Color1;
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
vec4 FinalColor = (Color0 * Color1) * vVertexColor + vSpecularColor; if (uBlendType == 1)
{
FinalColor.w = Color0.w;
}
else if (uBlendType == 2)
{
FinalColor.w = Color1.w;
}
if (bool(uFogEnable)) if (bool(uFogEnable))
{ {

View File

@ -0,0 +1,23 @@
#version 100
precision mediump float;
/* Uniforms */
uniform int uTextureUsage;
uniform sampler2D uTextureUnit;
/* Varyings */
varying vec2 vTextureCoord;
varying vec4 vVertexColor;
void main()
{
vec4 Color = vVertexColor;
if (bool(uTextureUsage))
Color *= texture2D(uTextureUnit, vTextureCoord);
gl_FragColor = Color;
}

View File

@ -0,0 +1,24 @@
#version 100
/* Attributes */
attribute vec4 inVertexPosition;
attribute vec4 inVertexColor;
attribute vec2 inTexCoord0;
/* Uniforms */
uniform float uThickness;
/* Varyings */
varying vec2 vTextureCoord;
varying vec4 vVertexColor;
void main()
{
gl_Position = inVertexPosition;
gl_PointSize = uThickness;
vTextureCoord = inTexCoord0;
vVertexColor = inVertexColor.bgra;
}

View File

@ -0,0 +1,11 @@
#version 100
precision mediump float;
/* Varyings */
varying vec4 vVertexColor;
void main()
{
gl_FragColor = vVertexColor;
}

View File

@ -1,3 +1,5 @@
#version 100
precision mediump float; precision mediump float;
/* Uniforms */ /* Uniforms */
@ -15,7 +17,6 @@ uniform float uFogDensity;
varying vec2 vTextureCoord0; varying vec2 vTextureCoord0;
varying vec4 vVertexColor; varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord; varying float vFogCoord;
float computeFog() float computeFog()
@ -48,7 +49,6 @@ void main()
if (bool(uTextureUsage0)) if (bool(uTextureUsage0))
Color *= texture2D(uTextureUnit0, vTextureCoord0); Color *= texture2D(uTextureUnit0, vTextureCoord0);
Color += vSpecularColor;
if (bool(uFogEnable)) if (bool(uFogEnable))
{ {

View File

@ -1,10 +1,11 @@
#version 100
/* Attributes */ /* Attributes */
attribute vec3 inVertexPosition; attribute vec3 inVertexPosition;
attribute vec3 inVertexNormal; attribute vec3 inVertexNormal;
attribute vec4 inVertexColor; attribute vec4 inVertexColor;
attribute vec2 inTexCoord0; attribute vec2 inTexCoord0;
attribute vec2 inTexCoord1;
/* Uniforms */ /* Uniforms */
@ -12,23 +13,13 @@ uniform mat4 uWVPMatrix;
uniform mat4 uWVMatrix; uniform mat4 uWVMatrix;
uniform mat4 uNMatrix; uniform mat4 uNMatrix;
uniform mat4 uTMatrix0; uniform mat4 uTMatrix0;
uniform mat4 uTMatrix1;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
uniform float uThickness; uniform float uThickness;
/* Varyings */ /* Varyings */
varying vec2 vTextureCoord0; varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor; varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord; varying float vFogCoord;
void main() void main()
@ -39,11 +30,7 @@ void main()
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0); vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy; vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
vec4 TextureCoord1 = vec4(inTexCoord1.x, inTexCoord1.y, 1.0, 1.0);
vTextureCoord1 = vec4(uTMatrix1 * TextureCoord1).xy;
vVertexColor = inVertexColor.bgra; vVertexColor = inVertexColor.bgra;
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz; vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;

View File

@ -1,11 +1,12 @@
#version 100
precision mediump float; precision mediump float;
/* Uniforms */ /* Uniforms */
uniform float uAlphaRef;
uniform int uTextureUsage0; uniform int uTextureUsage0;
uniform int uTextureUsage1;
uniform sampler2D uTextureUnit0; uniform sampler2D uTextureUnit0;
uniform sampler2D uTextureUnit1;
uniform int uFogEnable; uniform int uFogEnable;
uniform int uFogType; uniform int uFogType;
uniform vec4 uFogColor; uniform vec4 uFogColor;
@ -16,9 +17,7 @@ uniform float uFogDensity;
/* Varyings */ /* Varyings */
varying vec2 vTextureCoord0; varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor; varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord; varying float vFogCoord;
float computeFog() float computeFog()
@ -47,24 +46,24 @@ float computeFog()
void main() void main()
{ {
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); vec4 Color = vVertexColor;
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
if (bool(uTextureUsage0)) if (bool(uTextureUsage0))
Color0 = texture2D(uTextureUnit0, vTextureCoord0); {
Color *= texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uTextureUsage1)) // TODO: uAlphaRef should rather control sharpness of alpha, don't know how to do that right now and this works in most cases.
Color1 = texture2D(uTextureUnit1, vTextureCoord1); if (Color.a < uAlphaRef)
discard;
vec4 FinalColor = (Color0 + Color1) * vVertexColor + vSpecularColor; }
if (bool(uFogEnable)) if (bool(uFogEnable))
{ {
float FogFactor = computeFog(); float FogFactor = computeFog();
vec4 FogColor = uFogColor; vec4 FogColor = uFogColor;
FogColor.a = 1.0; FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor); Color = mix(FogColor, Color, FogFactor);
} }
gl_FragColor = FinalColor; gl_FragColor = Color;
} }

View File

@ -1,11 +1,12 @@
#version 100
precision mediump float; precision mediump float;
/* Uniforms */ /* Uniforms */
uniform float uAlphaRef;
uniform int uTextureUsage0; uniform int uTextureUsage0;
uniform int uTextureUsage1;
uniform sampler2D uTextureUnit0; uniform sampler2D uTextureUnit0;
uniform sampler2D uTextureUnit1;
uniform int uFogEnable; uniform int uFogEnable;
uniform int uFogType; uniform int uFogType;
uniform vec4 uFogColor; uniform vec4 uFogColor;
@ -16,9 +17,7 @@ uniform float uFogDensity;
/* Varyings */ /* Varyings */
varying vec2 vTextureCoord0; varying vec2 vTextureCoord0;
varying vec2 vTextureCoord1;
varying vec4 vVertexColor; varying vec4 vVertexColor;
varying vec4 vSpecularColor;
varying float vFogCoord; varying float vFogCoord;
float computeFog() float computeFog()
@ -47,24 +46,21 @@ float computeFog()
void main() void main()
{ {
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0); vec4 Color = vVertexColor;
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
if (bool(uTextureUsage0)) if (bool(uTextureUsage0))
Color0 = texture2D(uTextureUnit0, vTextureCoord0); Color *= texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uTextureUsage1)) if (Color.a < uAlphaRef)
Color1 = texture2D(uTextureUnit1, vTextureCoord1); discard;
vec4 FinalColor = vec4(Color0 + (Color1 - 0.5)) * vVertexColor + vSpecularColor;
if (bool(uFogEnable)) if (bool(uFogEnable))
{ {
float FogFactor = computeFog(); float FogFactor = computeFog();
vec4 FogColor = uFogColor; vec4 FogColor = uFogColor;
FogColor.a = 1.0; FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor); Color = mix(FogColor, Color, FogFactor);
} }
gl_FragColor = FinalColor; gl_FragColor = Color;
} }

View File

@ -0,0 +1,62 @@
#version 100
precision mediump float;
/* Uniforms */
uniform int uTextureUsage0;
uniform sampler2D uTextureUnit0;
uniform int uFogEnable;
uniform int uFogType;
uniform vec4 uFogColor;
uniform float uFogStart;
uniform float uFogEnd;
uniform float uFogDensity;
/* Varyings */
varying vec2 vTextureCoord0;
varying vec4 vVertexColor;
varying float vFogCoord;
float computeFog()
{
const float LOG2 = 1.442695;
float FogFactor = 0.0;
if (uFogType == 0) // Exp
{
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
}
else if (uFogType == 1) // Linear
{
float Scale = 1.0 / (uFogEnd - uFogStart);
FogFactor = (uFogEnd - vFogCoord) * Scale;
}
else if (uFogType == 2) // Exp2
{
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
}
FogFactor = clamp(FogFactor, 0.0, 1.0);
return FogFactor;
}
void main()
{
vec4 Color = vVertexColor;
if (bool(uTextureUsage0))
Color *= texture2D(uTextureUnit0, vTextureCoord0);
if (bool(uFogEnable))
{
float FogFactor = computeFog();
vec4 FogColor = uFogColor;
FogColor.a = 1.0;
Color = mix(FogColor, Color, FogFactor);
}
gl_FragColor = Color;
}

34
repro.sh Executable file
View File

@ -0,0 +1,34 @@
#!/bin/bash
aflout=out/default
myout=out_rep
exe=./bin/Linux/LoadMesh
rm -rf "$myout" && mkdir -p "$myout"
find $aflout/crashes -name 'id:*' -print | \
while read file; do
echo "➤ Testing $file..."
short=${file##*/}
short=${short%%,*}
fout=$myout/$short.txt
$exe "$file" >"$fout" 2>&1
r=$?
if grep -Fq '==ERROR: AddressSanitizer: SEGV on unknown address' "$fout"; then
gdb -q --batch -iex 'set confirm off' -ex r -ex bt --args \
${exe}_noasan "$file" >"$fout" 2>&1
if grep -Eq '^(Thread|Program).*received signal' "$fout"; then
cp "$file" "$myout/$short.bin"
echo "✔ Reproduced (gdb)"
else
echo "✗ Not reproduced (gdb)"
rm -f "$fout"
fi
continue
fi
grep -Fq '==ABORTING' "$fout" && r=1
if [ $r -eq 0 ]; then
echo "✗ Not reproduced (asan)"
rm -f "$fout"
continue
fi
cp "$file" "$myout/$short.bin"
echo "✔ Reproduced (asan)"
done

17
run.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
export AFL_SKIP_CPUFREQ=1
export AFL_TMPDIR=/dev/shm
exe=./bin/Linux/LoadMesh
opts=(
-t 100
-i sample_u/
-o out/
)
if ! [ -d sample_u ]; then
mkdir sample_u
afl-cmin.bash -T 4 -i sample/ -o sample_u/ -- $exe @@
echo; echo
fi
exec afl-fuzz \
"${opts[@]}" "$@" \
-- $exe @@

View File

@ -349,7 +349,7 @@ f:write[[
#include <string> #include <string>
#include <unordered_set> #include <unordered_set>
#include "IrrCompileConfig.h" #include "IrrCompileConfig.h" // for IRRLICHT_API
#include "irrTypes.h" #include "irrTypes.h"
#include "IContextManager.h" #include "IContextManager.h"
#include <KHR/khrplatform.h> #include <KHR/khrplatform.h>

View File

@ -4,24 +4,30 @@
variant=win32 variant=win32
[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64 [[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64
with_sdl=0
[[ "$extras" == *"-sdl"* ]] && with_sdl=1
#with_gl3=0
#[[ "$extras" == *"-gl3"* ]] && with_gl3=1
libjpeg_version=2.1.2 libjpeg_version=2.1.5.1
libpng_version=1.6.37 libpng_version=1.6.39
zlib_version=1.2.11 sdl2_version=2.28.1
zlib_version=1.2.13
mkdir -p libs mkdir -p libs
pushd libs pushd libs
libs=$PWD libs=$PWD
tmp=
[ "$variant" = win32 ] && tmp=dw2/
[ -e libjpeg.zip ] || \ [ -e libjpeg.zip ] || \
wget "http://minetest.kitsunemimi.pw/libjpeg-$libjpeg_version-$variant.zip" -O libjpeg.zip wget "http://minetest.kitsunemimi.pw/libjpeg-$libjpeg_version-$variant.zip" -O libjpeg.zip
[ -e libpng.zip ] || \ [ -e libpng.zip ] || \
wget "http://minetest.kitsunemimi.pw/${tmp}libpng-$libpng_version-$variant.zip" -O libpng.zip wget "http://minetest.kitsunemimi.pw/libpng-$libpng_version-$variant.zip" -O libpng.zip
[[ $with_sdl -eq 0 || -e sdl2.zip ]] || \
wget "http://minetest.kitsunemimi.pw/sdl2-$sdl2_version-$variant.zip" -O sdl2.zip
[ -e zlib.zip ] || \ [ -e zlib.zip ] || \
wget "http://minetest.kitsunemimi.pw/${tmp}zlib-$zlib_version-$variant.zip" -O zlib.zip wget "http://minetest.kitsunemimi.pw/zlib-$zlib_version-$variant.zip" -O zlib.zip
[ -d libjpeg ] || unzip -o libjpeg.zip -d libjpeg [ -d libjpeg ] || unzip -o libjpeg.zip -d libjpeg
[ -d libpng ] || unzip -o libpng.zip -d libpng [ -d libpng ] || unzip -o libpng.zip -d libpng
[[ $with_sdl -eq 0 || -d sdl2 ]] || unzip -o sdl2.zip -d sdl2
[ -d zlib ] || unzip -o zlib.zip -d zlib [ -d zlib ] || unzip -o zlib.zip -d zlib
popd popd
@ -34,6 +40,11 @@ tmp=(
-DZLIB_LIBRARY=$libs/zlib/lib/libz.dll.a \ -DZLIB_LIBRARY=$libs/zlib/lib/libz.dll.a \
-DZLIB_INCLUDE_DIR=$libs/zlib/include -DZLIB_INCLUDE_DIR=$libs/zlib/include
) )
[ $with_sdl -eq 1 ] && tmp+=(
-DUSE_SDL2=ON
-DCMAKE_PREFIX_PATH=$libs/sdl2/lib/cmake
)
#[ $with_gl3 -eq 1 ] && tmp+=(-DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON)
cmake . "${tmp[@]}" cmake . "${tmp[@]}"
make -j$(nproc) make -j$(nproc)
@ -43,8 +54,9 @@ if [ "$1" = "package" ]; then
# strip library # strip library
"${CXX%-*}-strip" --strip-unneeded _install/usr/local/lib/*.dll "${CXX%-*}-strip" --strip-unneeded _install/usr/local/lib/*.dll
# bundle the DLLs that are specific to Irrlicht (kind of a hack) # bundle the DLLs that are specific to Irrlicht (kind of a hack)
cp -p $libs/*/bin/lib{jpeg,png}*.dll _install/usr/local/lib/ shopt -s nullglob
cp -p $libs/*/bin/{libjpeg,libpng,SDL}*.dll _install/usr/local/lib/
# create a ZIP # create a ZIP
(cd _install/usr/local; zip -9r "$OLDPWD"/irrlicht-$variant.zip -- *) (cd _install/usr/local; zip -9r "$OLDPWD/irrlicht-$variant$extras.zip" -- *)
fi fi
exit 0 exit 0

View File

@ -2,7 +2,6 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_ #ifdef _IRR_COMPILE_ANDROID_ASSET_READER_

View File

@ -2,11 +2,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_ANDROID_ASSET_FILE_ARCHIVE_H_INCLUDED__ #pragma once
#define __C_ANDROID_ASSET_FILE_ARCHIVE_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_ #ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
@ -54,7 +50,7 @@ namespace io
virtual void addDirectoryToFileList(const io::path &filename); virtual void addDirectoryToFileList(const io::path &filename);
//! return the name (id) of the file Archive //! return the name (id) of the file Archive
virtual const io::path& getArchiveName() const _IRR_OVERRIDE_ {return Path;} const io::path& getArchiveName() const override {return Path;}
protected: protected:
//! Android's asset manager //! Android's asset manager
@ -66,5 +62,3 @@ namespace io
} // end namespace irr } // end namespace irr
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_ #endif // _IRR_COMPILE_ANDROID_ASSET_READER_
#endif // __C_ANDROID_ASSET_READER_H_INCLUDED__

View File

@ -2,7 +2,6 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_ #ifdef _IRR_COMPILE_ANDROID_ASSET_READER_

View File

@ -2,11 +2,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_ANDROID_ASSET_READER_H_INCLUDED__ #pragma once
#define __C_ANDROID_ASSET_READER_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_ #ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
@ -71,5 +67,3 @@ namespace io
} // end namespace irr } // end namespace irr
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_ #endif // _IRR_COMPILE_ANDROID_ASSET_READER_
#endif // __C_ANDROID_ASSET_READER_H_INCLUDED__

View File

@ -180,11 +180,6 @@ void CIrrDeviceAndroid::setWindowCaption(const wchar_t* text)
{ {
} }
bool CIrrDeviceAndroid::present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip)
{
return true;
}
bool CIrrDeviceAndroid::isWindowActive() const bool CIrrDeviceAndroid::isWindowActive() const
{ {
return (Focused && !Paused); return (Focused && !Paused);
@ -540,11 +535,7 @@ void CIrrDeviceAndroid::createDriver()
case video::EDT_NULL: case video::EDT_NULL:
VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize); VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize);
break; break;
case video::EDT_SOFTWARE:
case video::EDT_BURNINGSVIDEO:
case video::EDT_OPENGL: case video::EDT_OPENGL:
case video::DEPRECATED_EDT_DIRECT3D8_NO_LONGER_EXISTS:
case video::EDT_DIRECT3D9:
os::Printer::log("This driver is not available in Android. Try OpenGL ES 1.0 or ES 2.0.", ELL_ERROR); os::Printer::log("This driver is not available in Android. Try OpenGL ES 1.0 or ES 2.0.", ELL_ERROR);
break; break;
default: default:

View File

@ -2,16 +2,13 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_IRR_DEVICE_ANDROID_H_INCLUDED__ #pragma once
#define __C_IRR_DEVICE_ANDROID_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_ #ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
#include "CIrrDeviceStub.h" #include "CIrrDeviceStub.h"
#include "IrrlichtDevice.h" #include "IrrlichtDevice.h"
#include "IImagePresenter.h"
#include "ICursorControl.h" #include "ICursorControl.h"
#include <android/sensor.h> #include <android/sensor.h>
@ -19,7 +16,7 @@
namespace irr namespace irr
{ {
class CIrrDeviceAndroid : public CIrrDeviceStub, video::IImagePresenter class CIrrDeviceAndroid : public CIrrDeviceStub
{ {
public: public:
CIrrDeviceAndroid(const SIrrlichtCreationParameters& param); CIrrDeviceAndroid(const SIrrlichtCreationParameters& param);
@ -34,8 +31,6 @@ namespace irr
virtual void setWindowCaption(const wchar_t* text); virtual void setWindowCaption(const wchar_t* text);
virtual bool present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip);
virtual bool isWindowActive() const; virtual bool isWindowActive() const;
virtual bool isWindowFocused() const; virtual bool isWindowFocused() const;
@ -104,4 +99,3 @@ namespace irr
} // end namespace irr } // end namespace irr
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_ #endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
#endif // __C_IRR_DEVICE_ANDROID_H_INCLUDED__

View File

@ -1,10 +1,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__ #pragma once
#define __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_ #ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
@ -40,4 +37,3 @@ private:
} // namespace irr } // namespace irr
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_ #endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
#endif // __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__

View File

@ -2,11 +2,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __BUILD_IN_FONT_H_INCLUDED__ #pragma once
#define __BUILD_IN_FONT_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_GUI_
// header file generated by Bin2H, copyright 2002 by N.Gebhardt. // header file generated by Bin2H, copyright 2002 by N.Gebhardt.
// Bin2H is Freeware. Download it freely from www.code3d.com. // Bin2H is Freeware. Download it freely from www.code3d.com.
@ -16,7 +12,6 @@ namespace irr
{ {
namespace gui namespace gui
{ {
#ifdef _IRR_COMPILE_WITH_BMP_LOADER_
const u8 BuiltInFontData[] = const u8 BuiltInFontData[] =
{ {
0x42, 0x4d, 0x4a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4d, 0x4a, 0x20, 0x00, 0x00, 0x00, 0x00,
@ -1056,20 +1051,5 @@ const u8 BuiltInFontData[] =
}; };
const u32 BuiltInFontDataSize = sizeof(BuiltInFontData); const u32 BuiltInFontDataSize = sizeof(BuiltInFontData);
#else // !defined(_IRR_COMPILE_WITH_BMP_LOADER_)
// built-in font cannot be loaded if there is no BMP loader
const u8 * const BuiltInFontData=0;
const u32 BuiltInFontDataSize = 0;
#endif
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif // _IRR_COMPILE_WITH_GUI_
#endif

View File

@ -7,7 +7,9 @@
#include "ISceneManager.h" #include "ISceneManager.h"
#include "S3DVertex.h" #include "S3DVertex.h"
#include "os.h" #include "os.h"
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
#include "CSkinnedMesh.h" #include "CSkinnedMesh.h"
#endif
#include "IDummyTransformationSceneNode.h" #include "IDummyTransformationSceneNode.h"
#include "IBoneSceneNode.h" #include "IBoneSceneNode.h"
#include "IMaterialRenderer.h" #include "IMaterialRenderer.h"
@ -236,15 +238,6 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs)
// set CurrentFrameNr // set CurrentFrameNr
buildFrameNr(timeMs-LastTimeMs); buildFrameNr(timeMs-LastTimeMs);
// update bbox
if (Mesh)
{
scene::IMesh * mesh = getMeshForCurrentFrame();
if (mesh)
Box = mesh->getBoundingBox();
}
LastTimeMs = timeMs; LastTimeMs = timeMs;
IAnimatedMeshSceneNode::OnAnimate(timeMs); IAnimatedMeshSceneNode::OnAnimate(timeMs);
@ -281,36 +274,6 @@ void CAnimatedMeshSceneNode::render()
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
// for debug purposes only:
bool renderMeshes = true;
video::SMaterial mat;
if (DebugDataVisible && PassCount==1)
{
// overwrite half transparency
if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY)
{
for (u32 i=0; i<m->getMeshBufferCount(); ++i)
{
scene::IMeshBuffer* mb = m->getMeshBuffer(i);
mat = ReadOnlyMaterials ? mb->getMaterial() : Materials[i];
mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
if (RenderFromIdentity)
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix );
else if (Mesh->getMeshType() == EAMT_SKINNED)
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation);
driver->setMaterial(mat);
driver->drawMeshBuffer(mb);
}
renderMeshes = false;
}
}
// render original meshes
if (renderMeshes)
{
for (u32 i=0; i<m->getMeshBufferCount(); ++i) for (u32 i=0; i<m->getMeshBufferCount(); ++i)
{ {
const bool transparent = driver->needsTransparentRenderPass(Materials[i]); const bool transparent = driver->needsTransparentRenderPass(Materials[i]);
@ -330,7 +293,6 @@ void CAnimatedMeshSceneNode::render()
driver->drawMeshBuffer(mb); driver->drawMeshBuffer(mb);
} }
} }
}
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h // For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__ #pragma once
#define __C_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
#include "IAnimatedMeshSceneNode.h" #include "IAnimatedMeshSceneNode.h"
#include "IAnimatedMesh.h" #include "IAnimatedMesh.h"
@ -31,114 +30,114 @@ namespace scene
virtual ~CAnimatedMeshSceneNode(); virtual ~CAnimatedMeshSceneNode();
//! sets the current frame. from now on the animation is played from this frame. //! sets the current frame. from now on the animation is played from this frame.
virtual void setCurrentFrame(f32 frame) _IRR_OVERRIDE_; void setCurrentFrame(f32 frame) override;
//! frame //! frame
virtual void OnRegisterSceneNode() _IRR_OVERRIDE_; void OnRegisterSceneNode() override;
//! OnAnimate() is called just before rendering the whole scene. //! OnAnimate() is called just before rendering the whole scene.
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_; void OnAnimate(u32 timeMs) override;
//! renders the node. //! renders the node.
virtual void render() _IRR_OVERRIDE_; void render() override;
//! returns the axis aligned bounding box of this node //! returns the axis aligned bounding box of this node
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_; const core::aabbox3d<f32>& getBoundingBox() const override;
//! sets the frames between the animation is looped. //! sets the frames between the animation is looped.
//! the default is 0 - MaximalFrameCount of the mesh. //! the default is 0 - MaximalFrameCount of the mesh.
//! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh //! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh
virtual bool setFrameLoop(s32 begin, s32 end) _IRR_OVERRIDE_; bool setFrameLoop(s32 begin, s32 end) override;
//! Sets looping mode which is on by default. If set to false, //! Sets looping mode which is on by default. If set to false,
//! animations will not be looped. //! animations will not be looped.
virtual void setLoopMode(bool playAnimationLooped) _IRR_OVERRIDE_; void setLoopMode(bool playAnimationLooped) override;
//! returns the current loop mode //! returns the current loop mode
virtual bool getLoopMode() const _IRR_OVERRIDE_; bool getLoopMode() const override;
//! Sets a callback interface which will be called if an animation //! Sets a callback interface which will be called if an animation
//! playback has ended. Set this to 0 to disable the callback again. //! playback has ended. Set this to 0 to disable the callback again.
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) _IRR_OVERRIDE_; void setAnimationEndCallback(IAnimationEndCallBack* callback=0) override;
//! sets the speed with which the animation is played //! sets the speed with which the animation is played
//! NOTE: setMesh will also change this value and set it to the default speed of the mesh //! NOTE: setMesh will also change this value and set it to the default speed of the mesh
virtual void setAnimationSpeed(f32 framesPerSecond) _IRR_OVERRIDE_; void setAnimationSpeed(f32 framesPerSecond) override;
//! gets the speed with which the animation is played //! gets the speed with which the animation is played
virtual f32 getAnimationSpeed() const _IRR_OVERRIDE_; f32 getAnimationSpeed() const override;
//! returns the material based on the zero based index i. To get the amount //! returns the material based on the zero based index i. To get the amount
//! of materials used by this scene node, use getMaterialCount(). //! of materials used by this scene node, use getMaterialCount().
//! This function is needed for inserting the node into the scene hierarchy on a //! This function is needed for inserting the node into the scene hierarchy on a
//! optimal position for minimizing renderstate changes, but can also be used //! optimal position for minimizing renderstate changes, but can also be used
//! to directly modify the material of a scene node. //! to directly modify the material of a scene node.
virtual video::SMaterial& getMaterial(u32 i) _IRR_OVERRIDE_; video::SMaterial& getMaterial(u32 i) override;
//! returns amount of materials used by this scene node. //! returns amount of materials used by this scene node.
virtual u32 getMaterialCount() const _IRR_OVERRIDE_; u32 getMaterialCount() const override;
//! Returns a pointer to a child node, which has the same transformation as //! Returns a pointer to a child node, which has the same transformation as
//! the corresponding joint, if the mesh in this scene node is a skinned mesh. //! the corresponding joint, if the mesh in this scene node is a skinned mesh.
virtual IBoneSceneNode* getJointNode(const c8* jointName) _IRR_OVERRIDE_; IBoneSceneNode* getJointNode(const c8* jointName) override;
//! same as getJointNode(const c8* jointName), but based on id //! same as getJointNode(const c8* jointName), but based on id
virtual IBoneSceneNode* getJointNode(u32 jointID) _IRR_OVERRIDE_; IBoneSceneNode* getJointNode(u32 jointID) override;
//! Gets joint count. //! Gets joint count.
virtual u32 getJointCount() const _IRR_OVERRIDE_; u32 getJointCount() const override;
//! Removes a child from this scene node. //! Removes a child from this scene node.
//! Implemented here, to be able to remove the shadow properly, if there is one, //! Implemented here, to be able to remove the shadow properly, if there is one,
//! or to remove attached child. //! or to remove attached child.
virtual bool removeChild(ISceneNode* child) _IRR_OVERRIDE_; bool removeChild(ISceneNode* child) override;
//! Returns the current displayed frame number. //! Returns the current displayed frame number.
virtual f32 getFrameNr() const _IRR_OVERRIDE_; f32 getFrameNr() const override;
//! Returns the current start frame number. //! Returns the current start frame number.
virtual s32 getStartFrame() const _IRR_OVERRIDE_; s32 getStartFrame() const override;
//! Returns the current end frame number. //! Returns the current end frame number.
virtual s32 getEndFrame() const _IRR_OVERRIDE_; s32 getEndFrame() const override;
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
/* In this way it is possible to change the materials a mesh causing all mesh scene nodes /* In this way it is possible to change the materials a mesh causing all mesh scene nodes
referencing this mesh to change too. */ referencing this mesh to change too. */
virtual void setReadOnlyMaterials(bool readonly) _IRR_OVERRIDE_; void setReadOnlyMaterials(bool readonly) override;
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
virtual bool isReadOnlyMaterials() const _IRR_OVERRIDE_; bool isReadOnlyMaterials() const override;
//! Sets a new mesh //! Sets a new mesh
virtual void setMesh(IAnimatedMesh* mesh) _IRR_OVERRIDE_; void setMesh(IAnimatedMesh* mesh) override;
//! Returns the current mesh //! Returns the current mesh
virtual IAnimatedMesh* getMesh(void) _IRR_OVERRIDE_ { return Mesh; } IAnimatedMesh* getMesh(void) override { return Mesh; }
//! Returns type of the scene node //! Returns type of the scene node
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_ANIMATED_MESH; } ESCENE_NODE_TYPE getType() const override { return ESNT_ANIMATED_MESH; }
//! updates the absolute position based on the relative and the parents position //! updates the absolute position based on the relative and the parents position
virtual void updateAbsolutePosition() _IRR_OVERRIDE_; void updateAbsolutePosition() override;
//! Set the joint update mode (0-unused, 1-get joints only, 2-set joints only, 3-move and set) //! Set the joint update mode (0-unused, 1-get joints only, 2-set joints only, 3-move and set)
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode) _IRR_OVERRIDE_; void setJointMode(E_JOINT_UPDATE_ON_RENDER mode) override;
//! Sets the transition time in seconds (note: This needs to enable joints, and setJointmode maybe set to 2) //! Sets the transition time in seconds (note: This needs to enable joints, and setJointmode maybe set to 2)
//! you must call animateJoints(), or the mesh will not animate //! you must call animateJoints(), or the mesh will not animate
virtual void setTransitionTime(f32 Time) _IRR_OVERRIDE_; void setTransitionTime(f32 Time) override;
//! updates the joint positions of this mesh //! updates the joint positions of this mesh
virtual void animateJoints(bool CalculateAbsolutePositions=true) _IRR_OVERRIDE_; void animateJoints(bool CalculateAbsolutePositions=true) override;
//! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected) //! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected)
virtual void setRenderFromIdentity( bool On ) _IRR_OVERRIDE_; void setRenderFromIdentity( bool On ) override;
//! Creates a clone of this scene node and its children. //! Creates a clone of this scene node and its children.
/** \param newParent An optional new parent. /** \param newParent An optional new parent.
\param newManager An optional new scene manager. \param newManager An optional new scene manager.
\return The newly created clone of this node. */ \return The newly created clone of this node. */
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) _IRR_OVERRIDE_; ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) override;
private: private:
@ -180,6 +179,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -27,42 +27,42 @@ public:
setBool(value); setBool(value);
} }
virtual s32 getInt() const _IRR_OVERRIDE_ s32 getInt() const override
{ {
return BoolValue ? 1 : 0; return BoolValue ? 1 : 0;
} }
virtual f32 getFloat() const _IRR_OVERRIDE_ f32 getFloat() const override
{ {
return BoolValue ? 1.0f : 0.0f; return BoolValue ? 1.0f : 0.0f;
} }
virtual bool getBool() const _IRR_OVERRIDE_ bool getBool() const override
{ {
return BoolValue; return BoolValue;
} }
virtual void setInt(s32 intValue) _IRR_OVERRIDE_ void setInt(s32 intValue) override
{ {
BoolValue = (intValue != 0); BoolValue = (intValue != 0);
} }
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_ void setFloat(f32 floatValue) override
{ {
BoolValue = (floatValue != 0); BoolValue = (floatValue != 0);
} }
virtual void setBool(bool boolValue) _IRR_OVERRIDE_ void setBool(bool boolValue) override
{ {
BoolValue = boolValue; BoolValue = boolValue;
} }
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_ E_ATTRIBUTE_TYPE getType() const override
{ {
return EAT_BOOL; return EAT_BOOL;
} }
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_ const wchar_t* getTypeString() const override
{ {
return L"bool"; return L"bool";
} }
@ -81,32 +81,32 @@ public:
setInt(value); setInt(value);
} }
virtual s32 getInt() const _IRR_OVERRIDE_ s32 getInt() const override
{ {
return Value; return Value;
} }
virtual f32 getFloat() const _IRR_OVERRIDE_ f32 getFloat() const override
{ {
return (f32)Value; return (f32)Value;
} }
virtual void setInt(s32 intValue) _IRR_OVERRIDE_ void setInt(s32 intValue) override
{ {
Value = intValue; Value = intValue;
} }
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_ void setFloat(f32 floatValue) override
{ {
Value = (s32)floatValue; Value = (s32)floatValue;
}; };
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_ E_ATTRIBUTE_TYPE getType() const override
{ {
return EAT_INT; return EAT_INT;
} }
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_ const wchar_t* getTypeString() const override
{ {
return L"int"; return L"int";
} }
@ -125,32 +125,32 @@ public:
setFloat(value); setFloat(value);
} }
virtual s32 getInt() const _IRR_OVERRIDE_ s32 getInt() const override
{ {
return (s32)Value; return (s32)Value;
} }
virtual f32 getFloat() const _IRR_OVERRIDE_ f32 getFloat() const override
{ {
return Value; return Value;
} }
virtual void setInt(s32 intValue) _IRR_OVERRIDE_ void setInt(s32 intValue) override
{ {
Value = (f32)intValue; Value = (f32)intValue;
} }
virtual void setFloat(f32 floatValue) _IRR_OVERRIDE_ void setFloat(f32 floatValue) override
{ {
Value = floatValue; Value = floatValue;
} }
virtual E_ATTRIBUTE_TYPE getType() const _IRR_OVERRIDE_ E_ATTRIBUTE_TYPE getType() const override
{ {
return EAT_FLOAT; return EAT_FLOAT;
} }
virtual const wchar_t* getTypeString() const _IRR_OVERRIDE_ const wchar_t* getTypeString() const override
{ {
return L"float"; return L"float";
} }

Some files were not shown because too many files have changed in this diff Show More