Compare commits

..

105 Commits

Author SHA1 Message Date
celeron55
7173c2c629
Update README.md: Add notice about IrrlichtMt having been moved into the main repo 2024-05-13 15:29:27 +03:00
sfan5
124708784f Restore buildability with SDL 2.0.10 2024-03-21 22:48:22 +01:00
Desour
bcb952c3ca Move source/Irrlicht/ to src/ 2024-03-21 22:08:26 +01:00
Desour
594e88bf3b Remove the tab removal script again 2024-03-21 22:08:26 +01:00
Desour
dd1043c4c0 Replace non-leading tabs with spaces, using:
find -type f |  # list all regular files
  grep -E '\.(h|cpp|mm)$' |  # filter for source files
  grep -v '/mt_' |  # filter out generated files
  grep -v '/vendor/' | # and vendored GL
  xargs -n 1 -P $(nproc) ./replace_non_leading_tabs.lua  # reformat everything
2024-03-21 22:08:26 +01:00
Desour
72e303238e Add a small script for tab removal 2024-03-21 22:08:26 +01:00
Desour
adc96072cd Fix ugly formatted arrays
Found via: `rg --multiline "=\n\t*\{\n"`
2024-03-21 22:08:26 +01:00
Desour
7cf801244c Reformat test/image_loader_test.cpp manually 2024-03-21 22:08:26 +01:00
numzero
b01a3ea781 Fix ifs clang-format didn’t get 2024-03-21 22:08:26 +01:00
Desour
e5b97d440a Remove .clang-format again 2024-03-21 22:08:26 +01:00
Desour
f5c6d3e945 Reformat the code, using:
find -type f |  # list all regular files
  grep -E '\.(h|cpp|mm)$' |  # filter for source files
  grep -v '/mt_' |  # filter out generated files
  grep -v '/vendor/' | # and vendored GL
  grep -v '/test/image_loader_test.cpp' |  # and this file (has giant literals arrays)
  xargs -n 1 -P $(nproc) clang-format -i  # reformat everything

Co-authored-by: numzero <numzer0@yandex.ru>
2024-03-21 22:08:26 +01:00
numzero
9814510b1b Add clang-format file, based on that from Minetest 2024-03-21 22:08:26 +01:00
sfan5
05c8bc8314 Try to fix macOS CI 2024-03-20 20:37:22 +01:00
sfan5
a9c4683b18 Do not include core::string in matrix4.h 2024-03-17 23:25:45 +01:00
sfan5
26c4f4e63d Ensure enough alignment for IImages 2024-03-10 13:58:24 +01:00
sfan5
9d07f906a7 Delete mesh writing support entirely
CB3DMeshWriter.cpp was not even being compiled
2024-03-10 10:11:27 +01:00
sfan5
d26c0aeaaf Remove more dead code 2024-03-09 23:00:33 +01:00
sfan5
70b0b46d50 Delete deprecated video driver methods 2024-03-09 23:00:33 +01:00
sfan5
a7dd075dec Mark some common constructors and other stuff as constexpr 2024-03-09 22:05:06 +01:00
sfan5
1e89db1b80 Consistently include C headers by their C++ wrapper 2024-02-25 22:10:04 +01:00
sfan5
44a368ef0e Migrate public headers to #pragma once 2024-02-25 22:10:04 +01:00
sfan5
7ddf740f9b Remove unused includes in public headers 2024-02-25 22:10:04 +01:00
ROllerozxa
2bbfa178ea
Don't link against SDL2main (#265) 2024-02-23 22:44:16 +01:00
sfan5
61682104df COpenGLCoreTexture: fix abort when format not supported 2024-02-23 21:31:33 +01:00
sfan5
46542793d6 OpenGL: Fix BGRA format mapping 2024-02-23 21:31:33 +01:00
sfan5
9f2d13a2b6 OpenGL: Print more debug info at init time 2024-02-23 21:31:33 +01:00
sfan5
602a4050b5 Adjust CI vcpkg run package installation 2024-02-23 21:31:33 +01:00
sfan5
54de743641 Workaround for too old GL header on older SDL versions
Problem: Since the removal of !_IRR_OPENGL_USE_EXTPOINTER_ we require some quite recent
symbols to compile the legacy GL driver. (*) Since the previous commit we prefer including
them via SDL but those are sometimes too old.

(*) This was in fact always a problem since USE_EXTPOINTER is the default.
    I guess people just had recent enough headers usually.
2024-02-23 21:31:33 +01:00
sfan5
3e8d8440e3 Vendor GL headers again
primary reason:
The unified GLES2 driver requires OpenGL headers (really), which Android does not provide.
2024-02-23 21:31:33 +01:00
sfan5
8189b2338a Remove now unused legacy OGLES2 driver 2024-02-23 21:31:33 +01:00
sfan5
0a77ef5dc2 Enable unified driver with all devices 2024-02-23 21:31:33 +01:00
sfan5
19f0f707a6 Use ContextManager to resolve symbols in GL driver 2024-02-23 21:31:33 +01:00
sfan5
83998f7471 Reduce OGLES extension array to ones actually used 2024-02-23 21:31:33 +01:00
sfan5
b7bb4b5958 Remove all !_IRR_OGLES1_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5
f28e442bfa Drop all !_IRR_OGLES2_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5
4cd5c3489e Drop all !_IRR_OPENGL_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5
52e4d72ae2 Migrate OpenGL cache and texture handler to GL pointers
this makes the OpenGL 3 driver free of GL symbol references!
2024-02-23 21:31:33 +01:00
sfan5
7241a49566 Compile at least one CI build as debug 2024-02-23 13:19:23 +01:00
Muhammad Rifqi Priyo Susanto
2db8c8728e Missing value_or() when printing std::optional 2024-02-23 13:17:41 +01:00
paradust7
270b2bec6e Ensure that std::abs is used and not integer abs 2024-02-21 23:25:52 +01:00
sfan5
c83f28431b Add API to delete shader materials 2024-02-21 21:53:38 +01:00
sfan5
e60921f0cb Drop old shader material functions
I'm not sure what these actually are, but the situation is the same as the last commit.
2024-02-21 21:53:38 +01:00
sfan5
92252f70d2 Drop low-level shader constant setters
These don't work on the modern drivers and are unused anyway.
2024-02-21 21:53:38 +01:00
sfan5
4e9d0db4be Delete a broken method
implementation commented out, lol?
2024-02-19 21:22:54 +01:00
SmallJoker
2bb2d3fe01
CFileSystem: Fix signed integer conversion on MinGW 2024-02-18 23:45:39 +01:00
sfan5
45ace61007 OpenGL: support scene::EHM_STREAM
the relevant enum value is defined in both gl3 and gles2
2024-02-18 22:43:25 +01:00
sfan5
89d0717779 Delete some dead code 2024-02-18 17:12:51 +01:00
sfan5
19819bd23a Reduce needless use of wchar / stringw 2024-02-18 17:12:51 +01:00
sfan5
2894d9ab03 Add debug output to GL shader loading 2024-02-18 17:12:51 +01:00
sfan5
e56605d7ce
Update README for new SDL status 2024-02-17 22:15:02 +01:00
HybridDog
f91be59811 Remove support for GL_POINT_SMOOTH and GL_LINE_SMOOTH antialiasing
These antialiasing techniques have been removed in OpenGL 3.1, they were often executed by the CPU, and Minetest does not use them.
The OpenGL wiki recommends that we do not use this functionality in our program.
https://www.khronos.org/opengl/wiki/Multisampling#Smooth_antialiasing
2024-02-17 22:04:01 +01:00
wsor4035
0069837920
Upgrade CI actions (#290)
* update ci package versions to resolve warnings
* fix bug with duplicate package names under msvc
2024-02-17 21:07:25 +01:00
sfan5
ad96fabe4a Remove mistaken code block from OGLES1 driver
Version can never be 200 here, this was probably mistakenly copy-pasted from the OpenGL driver.
2024-02-17 21:01:15 +01:00
sfan5
6ba6118b8c Upgrade SDL CI to 22.04 everywhere
fed up with stuff not working for random reasons.
2024-02-16 22:42:49 +01:00
sfan5
7f11d2f950 Switch to llvm-mingw 2024-02-16 21:30:07 +01:00
sfan5
fe3e41e7ea Set minimum SDL version
It was determined that the touch/mouse hints only exist in this version.
Since it's from 2019 this should be a reasonable minimum.
2024-02-15 10:37:24 +01:00
sfan5
4478b1f1ec Remove old SDL Windows workaround
suggested by @waxtatect
2024-02-15 10:35:21 +01:00
sfan5
3992129735 Bind keypad enter on SDL
fixes https://github.com/minetest/minetest/issues/14170
2024-02-15 10:34:23 +01:00
Fatih Uzunoglu
0dab737d60 Do not use core::max_() with variable that can not be addressed
header struct is packed, and `core::max_()` takes the input as reference.
2024-02-12 16:31:10 +01:00
Fatih Uzunoglu
330150854b SDL: set default for ActiveIcon
getActiveIcon() may be called before ActiveIcon
is initialized, leading to undefined behavior.
2024-02-12 16:31:10 +01:00
y5nw
6779ac83f9
SDL: Improve handling of IMEs (#285)
* Set text input rectangle for IMEs
* Avoid unnecessarily "restarting" text input
2024-02-09 00:08:03 +01:00
Lars Müller
f1504093d1
Ensure that absent bone names work (#284) 2024-02-06 20:22:44 +01:00
sfan5
8482cc3db8 Adjust package config dependency again
Predictably, this broke dynamic linking setups where
SDL is not available at build-time (it doesn't need to be).
2024-01-30 14:23:33 +01:00
sfan5
a4f94b7656 Add missing dependency find to package config
refer to <https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html#creating-a-package-configuration-file>
2024-01-28 01:06:17 +01:00
SmallJoker
4299ee21d8
CMake: Move generator conditional expressions (#281) 2024-01-22 09:50:29 +01:00
Vitaliy
5b81694b1d
CI: Android support (#197) 2024-01-21 15:51:11 +01:00
grorp
66786d0059
Make IrrlichtDevice::isWindowVisible do what it says on the tin (#279) 2024-01-19 18:17:26 +01:00
David Heidelberg
9df2f0b944 Undefine SDL2 DirectFB video driver
1. we don't need it
2. it's dropped in SDL 3
3. it breaks compilation on Alpine and postmarketOS with SDL2 enabled
   (and the bug never going to get fixed on SDL2 side)

Signed-off-by: David Heidelberg <david@ixit.cz>
2024-01-18 23:28:45 +01:00
sfan5
c3571261ca Fix build with OpenGL ES 1 2024-01-17 17:55:19 +01:00
sfan5
bdcd27ab5b Bump revision 2024-01-17 17:19:03 +01:00
savilli
345285786f Make vector comparison operators transitive 2024-01-17 17:09:46 +01:00
savilli
dda9b23c3d Make equals method symmetric 2024-01-17 17:09:46 +01:00
sfan5
b349266855 Enable SDL to compile on macOS 2024-01-17 11:00:40 +01:00
sfan5
ee2467d622 Remove some dead code 2024-01-16 23:59:46 +01:00
sfan5
88ca26c418 Define extpointer for SDL + OGLES2 2024-01-16 20:23:23 +01:00
sfan5
8f44270e4a Rip out compressed color formats 2024-01-16 20:23:23 +01:00
jordan4ibanez
edc678f995
Update minimum CMake version 2024-01-16 18:48:30 +01:00
Lars Müller
0faeea33c3
build.yml: Upgrade bionic/jammy -> focal (current oldest LTS) 2024-01-16 18:34:24 +01:00
sfan5
f86b9b93e8 Fix crash when SDL context fails to create 2024-01-16 18:24:02 +01:00
Lars Mueller
a3ec3a88e8 Fix scene nodes not dropping meshes (memleak) 2024-01-13 18:13:04 +01:00
Gregor Parzefall
7df45b4cf3 SDL: Implement touchscreen support 2024-01-13 14:08:13 +01:00
sfan5
a2b6244f54 Fix build with older SDL2 2024-01-08 23:51:34 +01:00
Lars Müller
3983c29645
Optimize scene node child removal to constant time (#275) 2024-01-08 18:43:24 +01:00
David Heidelberg
73e62f8676 Keep RTTI for Minetest IPO/LTO
Minetest using RTTI, so we cannot apply the flag here
if we want to start using IPO/LTO.

If we keep `-fno-rtti` here, compiler loses part of informations and
cannot do efficient optimizations.

The benefit of using RTTI on Irrlicht disappears with IPO/LTO on whole binary.

Signed-off-by: David Heidelberg <david@ixit.cz>
2024-01-06 21:30:15 +01:00
HybridDog
fb4ee6ac93 Fix mip map size calculation for non-square textures
The size of a mip map is `max{floor(width / 2 ^ level), 1} x max{floor(height / 2 ^ level), 1}`,
where `width x height` is the size of the full-resolution image,
`level` is the integer mip map level
and the smallest mip map has `1 x 1` resolution.
If `regenerateMipMapLevels` is called with custom mip map data,
the mip map sizes are calculated in this function and separately in `uploadTexture`.
`uploadTexture` calculates a size by `floor(width / 2 ^ level) x floor(height / 2 ^ level)`.

To support non-square textures, after this change,
`uploadTexture` sets the mip map width or height to `1` if it is `0`.
2024-01-05 14:09:50 +01:00
Muhammad Rifqi Priyo Susanto
91e4129615
Windows: Return early if the clipboard data is not Unicode text 2024-01-04 21:24:50 +01:00
grorp
54b82aad26
Add IrrlichtDevice::isWindowVisible for Android 2024-01-04 16:48:35 +01:00
sfan5
03dd8b0336 Update vendored khrplatform.h 2023-12-19 22:56:31 +01:00
sfan5
6e6b4a6f3c Fix some minor issues with GL loader
fixes #258
2023-12-19 22:56:31 +01:00
sfan5
0110826ce9 Resync mt_opengl_loader.cpp with BindingGenerator.lua
also add a warning that you can't edit it by hand
2023-12-19 22:56:31 +01:00
sfan5
4e52d547b2 MinGW toolchain refresh 2023-12-17 20:47:29 +01:00
Vitaliy
9a439a3646
Use SDL2 by default
Except on Android and macOS, for now
2023-12-17 18:46:08 +01:00
Josiah VanderZee
854e97f57c Add size_t to u32/s32 static_casts in irrArray
This fixes 5 narrowing cast warnings from Visual Studio 17 2022.
2023-12-17 17:02:22 +01:00
Josiah VanderZee
22f2c37322 Add size_t to u32 static_casts to irrString
The irrString implementation doesn't allow constructing a string with a
size that would exceed a u32, so it should be safe to narrow the size of
the underlying STL container back to a u32.

This fixes 5 narrowing cast warnings from Visual Studio 17 2022.
2023-12-17 17:02:22 +01:00
paradust7
94cb0cc19d
Use KHRONOS_APIENTRY to fix win32 crash 2023-12-17 17:00:41 +01:00
sfan5
9b52d6fb0d Hash-check windows CI dependencies 2023-12-13 12:17:54 +01:00
sfan5
16a99c2079 Add a file to gitignore 2023-12-13 12:17:04 +01:00
paradust7
bb7c06d32a Initialize X11 thread safety 2023-12-10 16:29:22 +01:00
Muhammad Rifqi Priyo Susanto
a2884e4000
Android: Make ALooper_pollAll call always non-blocking (#255) 2023-11-30 15:52:04 +01:00
sfan5
b284ea076b Use newer vcpkg in Windows CI 2023-11-30 15:43:24 +01:00
numzero
85081d6fe0 Fix off-by-one error in the TGA RLE decompressor 2023-11-01 14:40:11 +01:00
numzero
eafc282efd Add unit tests for image loaders 2023-11-01 14:40:11 +01:00
numzero
8c2ad025b1 Add CTest 2023-11-01 14:40:11 +01:00
numzero
a07cfc0f7a Require C++17 at the top level 2023-11-01 14:40:11 +01:00
sfan5
f725b68c57 Remove irrUString.h
now unused
2023-10-31 10:10:31 +01:00
448 changed files with 62556 additions and 67811 deletions

View File

@ -8,47 +8,46 @@ on:
jobs: jobs:
linux-gl: linux-gl:
runs-on: ubuntu-latest runs-on: ubuntu-20.04
container:
image: ubuntu:bionic
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
apt-get update sudo apt-get update
apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
- name: Build - name: Build
run: | run: |
cmake . cmake . -DUSE_SDL2=OFF
make VERBOSE=1 -j2 make VERBOSE=1 -j2
- name: Test
run: |
ctest --output-on-failure
- name: Package - name: Package
run: | run: |
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@v3 - uses: actions/upload-artifact@v4
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-latest # Xvfb test is broken on 20.04 for unknown reasons (not our bug)
container: runs-on: ubuntu-22.04
image: ubuntu:bionic
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
apt-get update sudo apt-get update
apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build - name: Build
run: | run: |
cmake . -DBUILD_EXAMPLES=1 -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
make -j2 make -j2
- name: Test (headless) - name: Test (headless)
@ -62,20 +61,17 @@ jobs:
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2 LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
linux-sdl: linux-sdl:
runs-on: ubuntu-latest runs-on: ubuntu-20.04
container:
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
apt-get update sudo apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
- name: Build - name: Build
run: | run: |
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
make -j2 make -j2
- name: Test (headless) - name: Test (headless)
@ -84,16 +80,14 @@ jobs:
./AutomatedTest null ./AutomatedTest null
linux-sdl-gl3: linux-sdl-gl3:
runs-on: ubuntu-latest # Xvfb test is broken on 20.04 for unknown reasons (not our bug)
container: runs-on: ubuntu-22.04
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
apt-get update sudo apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build - name: Build
run: | run: |
@ -111,16 +105,13 @@ jobs:
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3 LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
linux-sdl-gles2: linux-sdl-gles2:
runs-on: ubuntu-latest runs-on: ubuntu-20.04
container:
image: ubuntu:jammy
env: { LANG: "C.UTF-8" }
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
apt-get update sudo apt-get update
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
- name: Build - name: Build
run: | run: |
@ -139,7 +130,7 @@ jobs:
mingw: mingw:
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}" name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -149,22 +140,21 @@ jobs:
- {variant: win32, arch: i686, extras: "-sdl"} - {variant: win32, arch: i686, extras: "-sdl"}
- {variant: win64, arch: x86_64, extras: "-sdl"} - {variant: win64, arch: x86_64, extras: "-sdl"}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- 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-${{matrix.config.arch}}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz ./scripts/ci-get-mingw.sh
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: ${{matrix.config.arch}}-w64-mingw32-gcc CC: ${{matrix.config.arch}}-w64-mingw32-clang
CXX: ${{matrix.config.arch}}-w64-mingw32-g++ CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
extras: ${{matrix.config.extras}} extras: ${{matrix.config.extras}}
- uses: actions/upload-artifact@v3 - uses: actions/upload-artifact@v4
with: with:
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}} name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
@ -172,11 +162,14 @@ jobs:
macos: macos:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install deps - name: Install deps
run: | run: |
brew update brew update --auto-update
brew install cmake libpng jpeg brew install cmake libpng jpeg
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- name: Build - name: Build
run: | run: |
@ -187,13 +180,30 @@ jobs:
run: | run: |
./bin/OSX/AutomatedTest null ./bin/OSX/AutomatedTest null
macos-sdl:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install deps
run: |
brew update --auto-update
brew install cmake libpng jpeg sdl2
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- name: Build
run: |
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1
make -j3
msvc: msvc:
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }} name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
runs-on: windows-2019 runs-on: windows-2019
env: env:
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44 VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
# 2022.05.10 # 2023.10.19
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry vcpkg_packages: zlib libpng libjpeg-turbo
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -210,6 +220,7 @@ jobs:
- -
use: FALSE use: FALSE
label: '(no SDL)' label: '(no SDL)'
vcpkg_packages: opengl-registry
- -
use: TRUE use: TRUE
label: '(with SDL)' label: '(with SDL)'
@ -217,7 +228,7 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Restore from cache and run vcpkg - name: Restore from cache and run vcpkg
uses: lukka/run-vcpkg@v7 uses: lukka/run-vcpkg@v7
@ -250,7 +261,50 @@ jobs:
run: move include artifact/ run: move include artifact/
- name: Upload Artifact - name: Upload Artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
name: msvc-${{ matrix.config.arch }} name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
path: artifact/ path: artifact/
android:
name: Android ${{ matrix.arch }}
runs-on: ubuntu-20.04
env:
ndk_version: "r25c"
ANDROID_NDK: ${{ github.workspace }}/android-ndk
strategy:
matrix:
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install deps
run: |
sudo rm /var/lib/man-db/auto-update
sudo apt-get update
sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake
- name: Cache NDK
id: cache-ndk
uses: actions/cache@v4
with:
key: android-ndk-${{ env.ndk_version }}-linux
path: ${{ env.ANDROID_NDK }}
- name: Install NDK
run: |
wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
unzip -q "android-ndk-${ndk_version}-linux.zip"
rm "android-ndk-${ndk_version}-linux.zip"
mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}
- name: Build
run: ./scripts/ci-build-android.sh ${{ matrix.arch }}
#- name: Upload Artifact
# uses: actions/upload-artifact@v4
# with:
# name: irrlicht-android-${{ matrix.arch }}
# path: ${{ runner.temp }}/pkg/${{ matrix.arch }}

1
.gitignore vendored
View File

@ -5,6 +5,7 @@ install_manifest.txt
IrrlichtMtConfig.cmake IrrlichtMtConfig.cmake
IrrlichtMtConfigVersion.cmake IrrlichtMtConfigVersion.cmake
IrrlichtMtTargets.cmake IrrlichtMtTargets.cmake
CTestTestfile.cmake
Makefile Makefile
libs/* libs/*
*.so* *.so*

View File

@ -1,13 +1,6 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.12)
# >=3.9 enables IPO; >=3.11 prefers GLVND set(IRRLICHTMT_REVISION 15)
if(${CMAKE_VERSION} VERSION_LESS 3.11)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
cmake_policy(VERSION 3.11)
endif()
set(IRRLICHTMT_REVISION 13)
project(Irrlicht project(Irrlicht
VERSION 1.9.0.${IRRLICHTMT_REVISION} VERSION 1.9.0.${IRRLICHTMT_REVISION}
@ -16,6 +9,9 @@ project(Irrlicht
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***") message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(GNUInstallDirs) include(GNUInstallDirs)
if(ANDROID) if(ANDROID)
@ -38,7 +34,9 @@ if(NOT CMAKE_BUILD_TYPE)
endif() endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
add_subdirectory(source/Irrlicht) enable_testing()
add_subdirectory(src)
add_subdirectory(test)
option(BUILD_EXAMPLES "Build example applications" FALSE) option(BUILD_EXAMPLES "Build example applications" FALSE)
if(BUILD_EXAMPLES) if(BUILD_EXAMPLES)

View File

@ -1,5 +1,11 @@
@PACKAGE_INIT@ @PACKAGE_INIT@
include(CMakeFindDependencyMacro)
if(NOT TARGET IrrlichtMt::IrrlichtMt) if(NOT TARGET IrrlichtMt::IrrlichtMt)
# private dependency only explicitly needed with static libs
if(@USE_SDL2@ AND NOT @BUILD_SHARED_LIBS@)
find_dependency(SDL2)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
endif() endif()

View File

@ -1,6 +1,14 @@
IrrlichtMt version 1.9 IrrlichtMt version 1.9
====================== ======================
Notice
------
IrrlichtMt has been moved into the [main Minetest repository](https://github.com/minetest) during Minetest 5.9 development. This repository is an archive useful for building older versions of Minetest.
About
-----
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest). IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently. It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest. It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
@ -15,6 +23,7 @@ The following libraries are required to be installed:
* OpenGL * OpenGL
* or on mobile: OpenGL ES (can be optionally enabled on desktop too) * or on mobile: OpenGL ES (can be optionally enabled on desktop too)
* on Unix: X11 * on Unix: X11
* SDL2 (see below)
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
@ -23,7 +32,7 @@ Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver * `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy * `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver * `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
* `USE_SDL2` (default: `OFF`) - Use SDL2 instead of native platform device * `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code
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:
@ -40,7 +49,7 @@ It is highly recommended to use vcpkg as package manager.
After you successfully built vcpkg you can easily install the required libraries: After you successfully built vcpkg you can easily install the required libraries:
vcpkg install zlib libjpeg-turbo libpng opengl-registry --triplet x64-windows vcpkg install zlib libjpeg-turbo libpng sdl2 --triplet x64-windows
Run the following script in PowerShell: Run the following script in PowerShell:

View File

@ -28,14 +28,14 @@ static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
static inline void check(bool ok, const char *msg) static inline void check(bool ok, const char *msg)
{ {
if (!ok) if (!ok) {
{
test_fail++; test_fail++;
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR); device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
} }
} }
void run_unit_tests() { void run_unit_tests()
{
std::cout << "Running unit tests:" << std::endl; std::cout << "Running unit tests:" << std::endl;
try { try {
test_irr_array(); test_irr_array();
@ -93,13 +93,11 @@ int main(int argc, char *argv[])
check(mesh, "mesh loading"); check(mesh, "mesh loading");
if (mesh_file) if (mesh_file)
mesh_file->drop(); mesh_file->drop();
if (mesh) if (mesh) {
{
video::ITexture *tex = driver->getTexture(mediaPath + "cooltexture.png"); video::ITexture *tex = driver->getTexture(mediaPath + "cooltexture.png");
check(tex, "texture loading"); check(tex, "texture loading");
scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh); scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh);
if (node) if (node) {
{
node->forEachMaterial([tex](video::SMaterial &mat) { node->forEachMaterial([tex](video::SMaterial &mat) {
mat.Lighting = false; mat.Lighting = false;
mat.setTexture(0, tex); mat.setTexture(0, tex);
@ -115,25 +113,20 @@ int main(int argc, char *argv[])
SEvent event; SEvent event;
device->getTimer()->start(); device->getTimer()->start();
while (device->run()) while (device->run()) {
{ if (device->getTimer()->getTime() >= 1000) {
if (device->getTimer()->getTime() >= 1000)
{
device->getTimer()->setTime(0); device->getTimer()->setTime(0);
++n; ++n;
if (n == 1) // Tooltip display if (n == 1) { // Tooltip display
{
bzero(&event, sizeof(SEvent)); bzero(&event, sizeof(SEvent));
event.EventType = irr::EET_MOUSE_INPUT_EVENT; event.EventType = irr::EET_MOUSE_INPUT_EVENT;
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED; event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
event.MouseInput.X = button->getAbsolutePosition().getCenter().X; event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y; event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
device->postEventFromUser(event); device->postEventFromUser(event);
} } else if (n == 2) // Text input focus
else if (n == 2) // Text input focus
guienv->setFocus(editbox); guienv->setFocus(editbox);
else if (n == 3) // Keypress for Text input else if (n == 3) { // Keypress for Text input
{
bzero(&event, sizeof(SEvent)); bzero(&event, sizeof(SEvent));
event.EventType = irr::EET_KEY_INPUT_EVENT; event.EventType = irr::EET_KEY_INPUT_EVENT;
event.KeyInput.Char = L'a'; event.KeyInput.Char = L'a';
@ -142,8 +135,7 @@ int main(int argc, char *argv[])
device->postEventFromUser(event); device->postEventFromUser(event);
event.KeyInput.PressedDown = false; event.KeyInput.PressedDown = false;
device->postEventFromUser(event); device->postEventFromUser(event);
} } else
else
device->closeDevice(); device->closeDevice();
} }

View File

@ -4,7 +4,8 @@
using namespace irr; using namespace irr;
using core::array; using core::array;
static void test_basics() { static void test_basics()
{
array<int> v; array<int> v;
v.push_back(1); // 1 v.push_back(1); // 1
v.push_front(2); // 2, 1 v.push_front(2); // 2, 1
@ -57,7 +58,8 @@ static void test_basics() {
UASSERTEQ(v.size(), 2); UASSERTEQ(v.size(), 2);
} }
static void test_linear_searches() { static void test_linear_searches()
{
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0 // Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
array<int> arr; array<int> arr;
for (int i = 0; i <= 100; i++) for (int i = 0; i <= 100; i++)
@ -75,7 +77,8 @@ static void test_linear_searches() {
} }
} }
static void test_binary_searches() { static void test_binary_searches()
{
const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15}; const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15};
array<int> arr; array<int> arr;
for (int value : values) { for (int value : values) {

View File

@ -3,11 +3,13 @@
#include <exception> #include <exception>
#include <iostream> #include <iostream>
class TestFailedException : public std::exception { class TestFailedException : public std::exception
{
}; };
// Asserts the comparison specified by CMP is true, or fails the current unit test // Asserts the comparison specified by CMP is true, or fails the current unit test
#define UASSERTCMP(CMP, actual, expected) do { \ #define UASSERTCMP(CMP, actual, expected) \
do { \
const auto &a = (actual); \ const auto &a = (actual); \
const auto &e = (expected); \ const auto &e = (expected); \
if (!CMP(a, e)) { \ if (!CMP(a, e)) { \
@ -15,7 +17,8 @@ class TestFailedException : public std::exception {
<< "Test assertion failed: " << #actual << " " << #CMP << " " \ << "Test assertion failed: " << #actual << " " << #CMP << " " \
<< #expected << std::endl \ << #expected << std::endl \
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \ << " at " << __FILE__ << ":" << __LINE__ << std::endl \
<< " actual: " << a << std::endl << " expected: " \ << " actual: " << a << std::endl \
<< " expected: " \
<< e << std::endl; \ << e << std::endl; \
throw TestFailedException(); \ throw TestFailedException(); \
} \ } \

View File

@ -1,6 +1,3 @@
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(IRREXAMPLES set(IRREXAMPLES
# removed # removed
) )

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 __T_MESH_BUFFER_H_INCLUDED__ #pragma once
#define __T_MESH_BUFFER_H_INCLUDED__
#include "irrArray.h" #include "irrArray.h"
#include "IMeshBuffer.h" #include "IMeshBuffer.h"
@ -18,18 +17,14 @@ namespace scene
{ {
public: public:
//! Default constructor for empty meshbuffer //! Default constructor for empty meshbuffer
CMeshBuffer() CMeshBuffer() :
: ChangedID_Vertex(1), ChangedID_Index(1) ChangedID_Vertex(1), ChangedID_Index(1), MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), HWBuffer(NULL), PrimitiveType(EPT_TRIANGLES)
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
, HWBuffer(NULL)
, PrimitiveType(EPT_TRIANGLES)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("CMeshBuffer"); setDebugName("CMeshBuffer");
#endif #endif
} }
//! Get material of this meshbuffer //! Get material of this meshbuffer
/** \return Material of this buffer */ /** \return Material of this buffer */
const video::SMaterial &getMaterial() const override const video::SMaterial &getMaterial() const override
@ -37,7 +32,6 @@ namespace scene
return Material; return Material;
} }
//! Get material of this meshbuffer //! Get material of this meshbuffer
/** \return Material of this buffer */ /** \return Material of this buffer */
video::SMaterial &getMaterial() override video::SMaterial &getMaterial() override
@ -45,7 +39,6 @@ namespace scene
return Material; return Material;
} }
//! Get pointer to vertices //! Get pointer to vertices
/** \return Pointer to vertices. */ /** \return Pointer to vertices. */
const void *getVertices() const override const void *getVertices() const override
@ -53,7 +46,6 @@ namespace scene
return Vertices.const_pointer(); return Vertices.const_pointer();
} }
//! Get pointer to vertices //! Get pointer to vertices
/** \return Pointer to vertices. */ /** \return Pointer to vertices. */
void *getVertices() override void *getVertices() override
@ -61,7 +53,6 @@ namespace scene
return Vertices.pointer(); return Vertices.pointer();
} }
//! Get number of vertices //! Get number of vertices
/** \return Number of vertices. */ /** \return Number of vertices. */
u32 getVertexCount() const override u32 getVertexCount() const override
@ -83,7 +74,6 @@ namespace scene
return Indices.const_pointer(); return Indices.const_pointer();
} }
//! Get pointer to indices //! Get pointer to indices
/** \return Pointer to indices. */ /** \return Pointer to indices. */
u16 *getIndices() override u16 *getIndices() override
@ -91,7 +81,6 @@ namespace scene
return Indices.pointer(); return Indices.pointer();
} }
//! Get number of indices //! Get number of indices
/** \return Number of indices. */ /** \return Number of indices. */
u32 getIndexCount() const override u32 getIndexCount() const override
@ -99,7 +88,6 @@ namespace scene
return Indices.size(); return Indices.size();
} }
//! 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. */
const core::aabbox3d<f32> &getBoundingBox() const override const core::aabbox3d<f32> &getBoundingBox() const override
@ -107,7 +95,6 @@ namespace scene
return BoundingBox; return BoundingBox;
} }
//! 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
@ -116,24 +103,19 @@ namespace scene
BoundingBox = box; BoundingBox = box;
} }
//! Recalculate the bounding box. //! Recalculate the bounding box.
/** should be called if the mesh changed. */ /** should be called if the mesh changed. */
void recalculateBoundingBox() override void recalculateBoundingBox() override
{ {
if (!Vertices.empty()) if (!Vertices.empty()) {
{
BoundingBox.reset(Vertices[0].Pos); BoundingBox.reset(Vertices[0].Pos);
const irr::u32 vsize = Vertices.size(); const irr::u32 vsize = Vertices.size();
for (u32 i = 1; i < vsize; ++i) for (u32 i = 1; i < vsize; ++i)
BoundingBox.addInternalPoint(Vertices[i].Pos); BoundingBox.addInternalPoint(Vertices[i].Pos);
} } else
else
BoundingBox.reset(0, 0, 0); BoundingBox.reset(0, 0, 0);
} }
//! 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. */
video::E_VERTEX_TYPE getVertexType() const override video::E_VERTEX_TYPE getVertexType() const override
@ -177,7 +159,6 @@ namespace scene
return Vertices[i].TCoords; return Vertices[i].TCoords;
} }
//! Append the vertices and indices to the current buffer //! Append the vertices and indices to the current buffer
/** Only works for compatible types, i.e. either the same type /** Only works for compatible types, i.e. either the same type
or the main buffer is of standard type. Otherwise, behavior is or the main buffer is of standard type. Otherwise, behavior is
@ -192,51 +173,17 @@ namespace scene
u32 i; u32 i;
Vertices.reallocate(vertexCount + numVertices); Vertices.reallocate(vertexCount + numVertices);
for (i=0; i<numVertices; ++i) for (i = 0; i < numVertices; ++i) {
{
Vertices.push_back(static_cast<const T *>(vertices)[i]); Vertices.push_back(static_cast<const T *>(vertices)[i]);
BoundingBox.addInternalPoint(static_cast<const T *>(vertices)[i].Pos); BoundingBox.addInternalPoint(static_cast<const T *>(vertices)[i].Pos);
} }
Indices.reallocate(getIndexCount() + numIndices); Indices.reallocate(getIndexCount() + numIndices);
for (i=0; i<numIndices; ++i) for (i = 0; i < numIndices; ++i) {
{
Indices.push_back(indices[i] + vertexCount); Indices.push_back(indices[i] + vertexCount);
} }
} }
//! Append the meshbuffer to the current buffer
/** Only works for compatible types, i.e. either the same type
or the main buffer is of standard type. Otherwise, behavior is
undefined.
\param other Meshbuffer to be appended to this one.
*/
void append(const IMeshBuffer* const other) override
{
/*
if (this==other)
return;
const u32 vertexCount = getVertexCount();
u32 i;
Vertices.reallocate(vertexCount+other->getVertexCount());
for (i=0; i<other->getVertexCount(); ++i)
{
Vertices.push_back(reinterpret_cast<const T*>(other->getVertices())[i]);
}
Indices.reallocate(getIndexCount()+other->getIndexCount());
for (i=0; i<other->getIndexCount(); ++i)
{
Indices.push_back(other->getIndices()[i]+vertexCount);
}
BoundingBox.addInternalBox(other->getBoundingBox());
*/
}
//! get the current hardware mapping hint //! get the current hardware mapping hint
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
{ {
@ -287,15 +234,16 @@ namespace scene
/** This shouldn't be used for anything outside the VideoDriver. */ /** This shouldn't be used for anything outside the VideoDriver. */
u32 getChangedID_Index() const override { return ChangedID_Index; } u32 getChangedID_Index() const override { return ChangedID_Index; }
void setHWBuffer(void *ptr) const override { void setHWBuffer(void *ptr) const override
{
HWBuffer = ptr; HWBuffer = ptr;
} }
void *getHWBuffer() const override { void *getHWBuffer() const override
{
return HWBuffer; return HWBuffer;
} }
u32 ChangedID_Vertex; u32 ChangedID_Vertex;
u32 ChangedID_Index; u32 ChangedID_Index;
@ -324,7 +272,3 @@ namespace scene
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents; typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __E_ATTRIBUTES_H_INCLUDED__ #pragma once
#define __E_ATTRIBUTES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -19,75 +18,9 @@ enum E_ATTRIBUTE_TYPE
// float attribute // float attribute
EAT_FLOAT, EAT_FLOAT,
// string attribute
EAT_STRING,
// boolean attribute // boolean attribute
EAT_BOOL, EAT_BOOL,
// enumeration attribute
EAT_ENUM,
// color attribute
EAT_COLOR,
// floating point color attribute
EAT_COLORF,
// 3d vector attribute
EAT_VECTOR3D,
// 2d position attribute
EAT_POSITION2D,
// vector 2d attribute
EAT_VECTOR2D,
// rectangle attribute
EAT_RECT,
// matrix attribute
EAT_MATRIX,
// quaternion attribute
EAT_QUATERNION,
// 3d bounding box
EAT_BBOX,
// plane
EAT_PLANE,
// 3d triangle
EAT_TRIANGLE3D,
// line 2d
EAT_LINE2D,
// line 3d
EAT_LINE3D,
// array of stringws attribute
EAT_STRINGWARRAY,
// array of float
EAT_FLOATARRAY,
// array of int
EAT_INTARRAY,
// binary data attribute
EAT_BINARY,
// texture reference attribute
EAT_TEXTURE,
// user pointer void*
EAT_USER_POINTER,
// dimension attribute
EAT_DIMENSION2D,
// known attribute type count // known attribute type count
EAT_COUNT, EAT_COUNT,
@ -97,5 +30,3 @@ enum E_ATTRIBUTE_TYPE
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __E_CULLING_TYPES_H_INCLUDED__ #pragma once
#define __E_CULLING_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -23,19 +22,14 @@ namespace scene
}; };
//! Names for culling type //! Names for culling type
const c8* const AutomaticCullingNames[] = const c8 *const AutomaticCullingNames[] = {
{
"false", "false",
"box", // camera box against node box "box", // camera box against node box
"frustum_box", // camera frustum against node box "frustum_box", // camera frustum against node box
"frustum_sphere", // camera frustum against node sphere "frustum_sphere", // camera frustum against node sphere
"occ_query", // occlusion query "occ_query", // occlusion query
0 0,
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif // __E_CULLING_TYPES_H_INCLUDED__

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 __E_DEBUG_SCENE_TYPES_H_INCLUDED__ #pragma once
#define __E_DEBUG_SCENE_TYPES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -38,10 +37,5 @@ namespace scene
EDS_FULL = 0xffffffff EDS_FULL = 0xffffffff
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__

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 __E_DEVICE_TYPES_H_INCLUDED__ #pragma once
#define __E_DEVICE_TYPES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -45,6 +44,3 @@ namespace irr
}; };
} // end namespace irr } // end namespace irr
#endif // __E_DEVICE_TYPES_H_INCLUDED__

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 __E_DRIVER_FEATURES_H_INCLUDED__ #pragma once
#define __E_DRIVER_FEATURES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -121,21 +120,6 @@ namespace video
//! Support for texture coord transformation via texture matrix //! Support for texture coord transformation via texture matrix
EVDF_TEXTURE_MATRIX, EVDF_TEXTURE_MATRIX,
//! Support for DXTn compressed textures.
EVDF_TEXTURE_COMPRESSED_DXT,
//! Support for PVRTC compressed textures.
EVDF_TEXTURE_COMPRESSED_PVRTC,
//! Support for PVRTC2 compressed textures.
EVDF_TEXTURE_COMPRESSED_PVRTC2,
//! Support for ETC1 compressed textures.
EVDF_TEXTURE_COMPRESSED_ETC1,
//! Support for ETC2 compressed textures.
EVDF_TEXTURE_COMPRESSED_ETC2,
//! Support for cube map textures. //! Support for cube map textures.
EVDF_TEXTURE_CUBEMAP, EVDF_TEXTURE_CUBEMAP,
@ -151,7 +135,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __E_DRIVER_TYPES_H_INCLUDED__ #pragma once
#define __E_DRIVER_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -43,6 +42,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

View File

@ -1,8 +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 E_FOCUS_FLAGS_H_INCLUDED__ #pragma once
#define E_FOCUS_FLAGS_H_INCLUDED__
namespace irr namespace irr
{ {
@ -33,6 +32,3 @@ enum EFOCUS_FLAG
} // namespace gui } // namespace gui
} // namespace irr } // namespace irr
#endif

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 __E_GUI_ALIGNMENT_H_INCLUDED__ #pragma once
#define __E_GUI_ALIGNMENT_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -24,16 +23,13 @@ enum EGUI_ALIGNMENT
}; };
//! Names for alignments //! Names for alignments
const c8* const GUIAlignmentNames[] = const c8 *const GUIAlignmentNames[] = {
{
"upperLeft", "upperLeft",
"lowerRight", "lowerRight",
"center", "center",
"scale", "scale",
0 0,
}; };
} // namespace gui } // namespace gui
} // namespace irr } // namespace irr
#endif // __E_GUI_ALIGNMENT_H_INCLUDED__

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 __E_GUI_ELEMENT_TYPES_H_INCLUDED__ #pragma once
#define __E_GUI_ELEMENT_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -100,8 +99,7 @@ enum EGUI_ELEMENT_TYPE
}; };
//! Names for built-in element types //! Names for built-in element types
const c8* const GUIElementTypeNames[] = const c8 *const GUIElementTypeNames[] = {
{
"button", "button",
"checkBox", "checkBox",
"comboBox", "comboBox",
@ -128,14 +126,8 @@ const c8* const GUIElementTypeNames[] =
"element", "element",
"root", "root",
"profiler", "profiler",
0 0,
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __E_HARDWARE_BUFFER_FLAGS_INCLUDED__ #pragma once
#define __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
namespace irr namespace irr
{ {
@ -39,6 +38,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __E_MATERIAL_PROPS_H_INCLUDED__ #pragma once
#define __E_MATERIAL_PROPS_H_INCLUDED__
namespace irr namespace irr
{ {
@ -81,7 +80,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif // __E_MATERIAL_PROPS_H_INCLUDED__

View File

@ -2,8 +2,9 @@
// 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 __E_MATERIAL_TYPES_H_INCLUDED__ #pragma once
#define __E_MATERIAL_TYPES_H_INCLUDED__
#include "irrTypes.h"
namespace irr namespace irr
{ {
@ -57,19 +58,17 @@ namespace video
}; };
//! Array holding the built in material type names //! Array holding the built in material type names
const char* const sBuiltInMaterialTypeNames[] = const char *const sBuiltInMaterialTypeNames[] = {
{
"solid", "solid",
"trans_alphach", "trans_alphach",
"trans_alphach_ref", "trans_alphach_ref",
"trans_vertex_alpha", "trans_vertex_alpha",
"onetexture_blend", "onetexture_blend",
0 0,
}; };
constexpr u32 numBuiltInMaterials =
sizeof(sBuiltInMaterialTypeNames) / sizeof(char *) - 1;
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif // __E_MATERIAL_TYPES_H_INCLUDED__

View File

@ -1,65 +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_MESH_WRITER_ENUMS_H_INCLUDED__
#define __E_MESH_WRITER_ENUMS_H_INCLUDED__
#include "irrTypes.h"
namespace irr
{
namespace scene
{
//! An enumeration for all supported types of built-in mesh writers
/** A scene mesh writers is represented by a four character code
such as 'irrm' or 'coll' instead of simple numbers, to avoid
name clashes with external mesh writers.*/
enum EMESH_WRITER_TYPE
{
//! Irrlicht native mesh writer, for static .irrmesh files.
EMWT_IRR_MESH = MAKE_IRR_ID('i','r','r','m'),
//! COLLADA mesh writer for .dae and .xml files
EMWT_COLLADA = MAKE_IRR_ID('c','o','l','l'),
//! STL mesh writer for .stl files
EMWT_STL = MAKE_IRR_ID('s','t','l',0),
//! OBJ mesh writer for .obj files
EMWT_OBJ = MAKE_IRR_ID('o','b','j',0),
//! PLY mesh writer for .ply files
EMWT_PLY = MAKE_IRR_ID('p','l','y',0),
//! B3D mesh writer, for static .b3d files
EMWT_B3D = MAKE_IRR_ID('b', '3', 'd', 0)
};
//! flags configuring mesh writing
enum E_MESH_WRITER_FLAGS
{
//! no writer flags
EMWF_NONE = 0,
//! write lightmap textures out if possible
//! Currently not used by any Irrlicht mesh-writer
// (Note: User meshwriters can still use it)
EMWF_WRITE_LIGHTMAPS = 0x1,
//! write in a way that consumes less disk space
// (Note: Mainly there for user meshwriters)
EMWF_WRITE_COMPRESSED = 0x2,
//! write in binary format rather than text
EMWF_WRITE_BINARY = 0x4
};
} // end namespace scene
} // end namespace irr
#endif // __E_MESH_WRITER_ENUMS_H_INCLUDED__

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 __E_PRIMITIVE_TYPES_H_INCLUDED__ #pragma once
#define __E_PRIMITIVE_TYPES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -42,6 +41,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __E_READ_FILE_TYPES_H_INCLUDED__ #pragma once
#define __E_READ_FILE_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -29,6 +28,3 @@ namespace io
}; };
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __E_SCENE_NODE_TYPES_H_INCLUDED__ #pragma once
#define __E_SCENE_NODE_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -46,11 +45,5 @@ namespace scene
ESNT_ANY = MAKE_IRR_ID('a', 'n', 'y', '_') ESNT_ANY = MAKE_IRR_ID('a', 'n', 'y', '_')
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -1,5 +1,4 @@
#ifndef __E_SHADER_TYPES_H_INCLUDED__ #pragma once
#define __E_SHADER_TYPES_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -82,9 +81,5 @@ const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
"gs_4_0", "gs_4_0",
0}; 0};
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif // __E_SHADER_TYPES_H_INCLUDED__

View File

@ -1,5 +1,4 @@
#ifndef __E_VERTEX_ATTRIBUTES_H_INCLUDED__ #pragma once
#define __E_VERTEX_ATTRIBUTES_H_INCLUDED__
namespace irr namespace irr
{ {
@ -20,8 +19,7 @@ enum E_VERTEX_ATTRIBUTES
}; };
//! Array holding the built in vertex attribute names //! Array holding the built in vertex attribute names
const char* const sBuiltInVertexAttributeNames[] = const char *const sBuiltInVertexAttributeNames[] = {
{
"inVertexPosition", "inVertexPosition",
"inVertexNormal", "inVertexNormal",
"inVertexColor", "inVertexColor",
@ -29,10 +27,8 @@ const char* const sBuiltInVertexAttributeNames[] =
"inTexCoord1", "inTexCoord1",
"inVertexTangent", "inVertexTangent",
"inVertexBinormal", "inVertexBinormal",
0 0,
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif //__E_VERTEX_ATTRIBUTES_H_INCLUDED__

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 __I_ANIMATED_MESH_H_INCLUDED__ #pragma once
#define __I_ANIMATED_MESH_H_INCLUDED__
#include "aabbox3d.h" #include "aabbox3d.h"
#include "IMesh.h" #include "IMesh.h"
@ -20,7 +19,6 @@ namespace scene
class IAnimatedMesh : public IMesh class IAnimatedMesh : public IMesh
{ {
public: public:
//! Gets the frame count of the animated mesh. //! Gets the frame count of the animated mesh.
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached. /** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
\return The amount of frames. If the amount is 1, \return The amount of frames. If the amount is 1,
@ -69,6 +67,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
#include "IBoneSceneNode.h" #include "IBoneSceneNode.h"
@ -25,7 +24,6 @@ namespace scene
EJUOR_CONTROL EJUOR_CONTROL
}; };
class IAnimatedMeshSceneNode; class IAnimatedMeshSceneNode;
//! Callback interface for catching events of ended animations. //! Callback interface for catching events of ended animations.
@ -36,7 +34,6 @@ namespace scene
class IAnimationEndCallBack : public virtual IReferenceCounted class IAnimationEndCallBack : public virtual IReferenceCounted
{ {
public: public:
//! Will be called when the animation playback has ended. //! Will be called when the animation playback has ended.
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for /** See IAnimatedMeshSceneNode::setAnimationEndCallback for
more information. more information.
@ -48,13 +45,12 @@ namespace scene
class IAnimatedMeshSceneNode : public ISceneNode class IAnimatedMeshSceneNode : public ISceneNode
{ {
public: public:
//! Constructor //! Constructor
IAnimatedMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id, IAnimatedMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
: ISceneNode(parent, mgr, id, position, rotation, scale) {} ISceneNode(parent, mgr, id, position, rotation, scale) {}
//! Destructor //! Destructor
virtual ~IAnimatedMeshSceneNode() {} virtual ~IAnimatedMeshSceneNode() {}
@ -167,11 +163,7 @@ namespace scene
\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) = 0; virtual ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -2,29 +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 __I_ATTRIBUTES_H_INCLUDED__ #pragma once
#define __I_ATTRIBUTES_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "SColor.h"
#include "vector3d.h"
#include "vector2d.h"
#include "line2d.h"
#include "line3d.h"
#include "triangle3d.h"
#include "position2d.h"
#include "rect.h"
#include "dimension2d.h"
#include "matrix4.h"
#include "quaternion.h"
#include "plane3d.h"
#include "triangle3d.h"
#include "line2d.h"
#include "line3d.h"
#include "irrString.h"
#include "irrArray.h"
#include "EAttributes.h" #include "EAttributes.h"
#include "path.h"
// not needed here but I can't be bothered to clean the transitive includes up.
#include "quaternion.h"
namespace irr namespace irr
{ {
@ -39,7 +23,6 @@ namespace io
class IAttributes : public virtual IReferenceCounted class IAttributes : public virtual IReferenceCounted
{ {
public: public:
//! Returns amount of attributes in this collection of attributes. //! Returns amount of attributes in this collection of attributes.
virtual u32 getAttributeCount() const = 0; virtual u32 getAttributeCount() const = 0;
@ -55,16 +38,6 @@ public:
//! \param index: Index value, must be between 0 and getAttributeCount()-1. //! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0; virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
//! Returns the type string of the attribute
//! \param attributeName: String for the attribute type
//! \param defaultNotFound Value returned when attributeName was not found
virtual const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const = 0;
//! Returns the type string of the attribute by index.
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
//! \param defaultNotFound Value returned for an invalid index
virtual const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const = 0;
//! Returns if an attribute with a name exists //! Returns if an attribute with a name exists
virtual bool existsAttribute(const c8 *attributeName) const = 0; virtual bool existsAttribute(const c8 *attributeName) const = 0;
@ -74,7 +47,6 @@ public:
//! Removes all attributes //! Removes all attributes
virtual void clear() = 0; virtual void clear() = 0;
/* /*
Integer Attribute Integer Attribute
@ -125,7 +97,6 @@ public:
//! Sets an attribute as float value //! Sets an attribute as float value
virtual void setAttribute(s32 index, f32 value) = 0; virtual void setAttribute(s32 index, f32 value) = 0;
/* /*
Bool Attribute Bool Attribute
*/ */
@ -148,10 +119,7 @@ public:
//! Sets an attribute as boolean value //! Sets an attribute as boolean value
virtual void setAttribute(s32 index, bool value) = 0; virtual void setAttribute(s32 index, bool value) = 0;
}; };
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __I_BILLBOARD_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
@ -22,11 +21,10 @@ lensflares, particles and things like that.
class IBillboardSceneNode : public ISceneNode class IBillboardSceneNode : public ISceneNode
{ {
public: public:
//! Constructor //! Constructor
IBillboardSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id, IBillboardSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df& position = core::vector3df(0,0,0)) const core::vector3df &position = core::vector3df(0, 0, 0)) :
: ISceneNode(parent, mgr, id, position) {} ISceneNode(parent, mgr, id, position) {}
//! Sets the size of the billboard, making it rectangular. //! Sets the size of the billboard, making it rectangular.
virtual void setSize(const core::dimension2d<f32> &size) = 0; virtual void setSize(const core::dimension2d<f32> &size) = 0;
@ -90,7 +88,3 @@ public:
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_BONE_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_BONE_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
@ -41,21 +40,18 @@ namespace scene
}; };
//! Names for bone animation modes //! Names for bone animation modes
const c8* const BoneAnimationModeNames[] = const c8 *const BoneAnimationModeNames[] = {
{
"automatic", "automatic",
"animated", "animated",
"unanimated", "unanimated",
0, 0,
}; };
//! Interface for bones used for skeletal animation. //! Interface for bones used for skeletal animation.
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */ /** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
class IBoneSceneNode : public ISceneNode class IBoneSceneNode : public ISceneNode
{ {
public: public:
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) {}
@ -96,9 +92,5 @@ namespace scene
s32 rotationHint; s32 rotationHint;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_CAMERA_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_CAMERA_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
#include "IEventReceiver.h" #include "IEventReceiver.h"
@ -23,13 +22,13 @@ namespace scene
class ICameraSceneNode : public ISceneNode, public IEventReceiver class ICameraSceneNode : public ISceneNode, public IEventReceiver
{ {
public: public:
//! Constructor //! Constructor
ICameraSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id, ICameraSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f)) const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {} ISceneNode(parent, mgr, id, position, rotation, scale),
IsOrthogonal(false) {}
//! Sets the projection matrix of the camera. //! Sets the projection matrix of the camera.
/** The core::matrix4 class has some methods to build a /** The core::matrix4 class has some methods to build a
@ -173,7 +172,6 @@ namespace scene
virtual bool getTargetAndRotationBinding(void) const = 0; virtual bool getTargetAndRotationBinding(void) const = 0;
protected: protected:
void cloneMembers(const ICameraSceneNode *toCopyFrom) void cloneMembers(const ICameraSceneNode *toCopyFrom)
{ {
IsOrthogonal = toCopyFrom->IsOrthogonal; IsOrthogonal = toCopyFrom->IsOrthogonal;
@ -184,6 +182,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -57,5 +57,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr

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 __I_CURSOR_CONTROL_H_INCLUDED__ #pragma once
#define __I_CURSOR_CONTROL_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "position2d.h" #include "position2d.h"
@ -42,8 +41,7 @@ namespace gui
}; };
//! Names for ECURSOR_ICON //! Names for ECURSOR_ICON
const c8* const GUICursorIconNames[ECI_COUNT+1] = const c8 *const GUICursorIconNames[ECI_COUNT + 1] = {
{
"normal", "normal",
"cross", "cross",
"hand", "hand",
@ -57,19 +55,19 @@ namespace gui
"sizens", "sizens",
"sizewe", "sizewe",
"sizeup", "sizeup",
0 0,
}; };
//! structure used to set sprites as cursors. //! structure used to set sprites as cursors.
struct SCursorSprite struct SCursorSprite
{ {
SCursorSprite() SCursorSprite() :
: SpriteBank(0), SpriteId(-1) SpriteBank(0), SpriteId(-1)
{ {
} }
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) ) SCursorSprite(gui::IGUISpriteBank *spriteBank, s32 spriteId, const core::position2d<s32> &hotspot = (core::position2d<s32>(0, 0))) :
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot) SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
{ {
} }
@ -97,7 +95,6 @@ namespace gui
class ICursorControl : public virtual IReferenceCounted class ICursorControl : public virtual IReferenceCounted
{ {
public: public:
//! Changes the visible state of the mouse cursor. //! Changes the visible state of the mouse cursor.
/** \param visible: The new visible state. If true, the cursor will be visible, /** \param visible: The new visible state. If true, the cursor will be visible,
if false, it will be invisible. */ if false, it will be invisible. */
@ -194,9 +191,5 @@ namespace gui
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; } virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
@ -23,10 +22,9 @@ joint scene nodes when playing skeletal animations.
class IDummyTransformationSceneNode : public ISceneNode class IDummyTransformationSceneNode : public ISceneNode
{ {
public: public:
//! Constructor //! Constructor
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id) IDummyTransformationSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id) :
: ISceneNode(parent, mgr, id) {} ISceneNode(parent, mgr, id) {}
//! Returns a reference to the current relative transformation matrix. //! Returns a reference to the current relative transformation matrix.
/** This is the matrix, this scene node uses instead of scale, translation /** This is the matrix, this scene node uses instead of scale, translation
@ -36,7 +34,3 @@ public:
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_EVENT_RECEIVER_H_INCLUDED__ #pragma once
#define __I_EVENT_RECEIVER_H_INCLUDED__
#include "ILogger.h" #include "ILogger.h"
#include "Keycodes.h" #include "Keycodes.h"
@ -309,7 +308,6 @@ namespace irr
}; };
} // end namespace gui } // end namespace gui
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling. //! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
struct SEvent struct SEvent
{ {
@ -324,7 +322,6 @@ struct SEvent
//! Type of GUI Event //! Type of GUI Event
gui::EGUI_EVENT_TYPE EventType; gui::EGUI_EVENT_TYPE EventType;
}; };
//! Any kind of mouse event. //! Any kind of mouse event.
@ -573,7 +570,6 @@ struct SEvent
struct SSystemEvent SystemEvent; struct SSystemEvent SystemEvent;
struct SApplicationEvent ApplicationEvent; struct SApplicationEvent ApplicationEvent;
}; };
}; };
//! Interface of an object which can receive events. //! Interface of an object which can receive events.
@ -585,7 +581,6 @@ path it takes through the system. */
class IEventReceiver class IEventReceiver
{ {
public: public:
//! Destructor //! Destructor
virtual ~IEventReceiver() {} virtual ~IEventReceiver() {}
@ -598,7 +593,6 @@ public:
virtual bool OnEvent(const SEvent &event) = 0; virtual bool OnEvent(const SEvent &event) = 0;
}; };
//! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks() //! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks()
struct SJoystickInfo struct SJoystickInfo
{ {
@ -635,8 +629,4 @@ struct SJoystickInfo
} PovHat; } PovHat;
}; // struct SJoystickInfo }; // struct SJoystickInfo
} // end namespace irr } // end namespace irr
#endif

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 __I_FILE_ARCHIVE_H_INCLUDED__ #pragma once
#define __I_FILE_ARCHIVE_H_INCLUDED__
#include "IReadFile.h" #include "IReadFile.h"
#include "IFileList.h" #include "IFileList.h"
@ -30,21 +29,6 @@ enum E_FILE_ARCHIVE_TYPE
//! A gzip archive //! A gzip archive
EFAT_GZIP = MAKE_IRR_ID('g', 'z', 'i', 'p'), EFAT_GZIP = MAKE_IRR_ID('g', 'z', 'i', 'p'),
//! A virtual directory
EFAT_FOLDER = MAKE_IRR_ID('f','l','d','r'),
//! An ID Software PAK archive
EFAT_PAK = MAKE_IRR_ID('P','A','K', 0),
//! A Nebula Device archive
EFAT_NPK = MAKE_IRR_ID('N','P','K', 0),
//! A Tape ARchive
EFAT_TAR = MAKE_IRR_ID('T','A','R', 0),
//! A wad Archive, Quake2, Halflife
EFAT_WAD = MAKE_IRR_ID('W','A','D', 0),
//! An Android asset file archive //! An Android asset file archive
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A', 'S', 'S', 'E'), EFAT_ANDROID_ASSET = MAKE_IRR_ID('A', 'S', 'S', 'E'),
@ -56,7 +40,6 @@ enum E_FILE_ARCHIVE_TYPE
class IFileArchive : public virtual IReferenceCounted class IFileArchive : public virtual IReferenceCounted
{ {
public: public:
//! Opens a file based on its name //! Opens a file based on its name
/** Creates and returns a new IReadFile for a file in the archive. /** Creates and returns a new IReadFile for a file in the archive.
\param filename The file to open \param filename The file to open
@ -140,9 +123,5 @@ public:
virtual IFileArchive *createArchive(io::IReadFile *file, bool ignoreCase, bool ignorePaths) const = 0; virtual IFileArchive *createArchive(io::IReadFile *file, bool ignoreCase, bool ignorePaths) const = 0;
}; };
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __I_FILE_LIST_H_INCLUDED__ #pragma once
#define __I_FILE_LIST_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "path.h" #include "path.h"
@ -88,7 +87,3 @@ public:
} // end namespace irr } // end namespace irr
} // end namespace io } // end namespace io
#endif

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 __I_FILE_SYSTEM_H_INCLUDED__ #pragma once
#define __I_FILE_SYSTEM_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "IFileArchive.h" #include "IFileArchive.h"
@ -22,7 +21,6 @@ class IWriteFile;
class IFileList; class IFileList;
class IAttributes; class IAttributes;
//! The FileSystem manages files and archives and provides access to them. //! The FileSystem manages files and archives and provides access to them.
/** It manages where files are, so that modules which use the the IO do not /** It manages where files are, so that modules which use the the IO do not
need to know where every file is located. A file could be in a .zip-Archive or need to know where every file is located. A file could be in a .zip-Archive or
@ -30,7 +28,6 @@ as file on disk, using the IFileSystem makes no difference to this. */
class IFileSystem : public virtual IReferenceCounted class IFileSystem : public virtual IReferenceCounted
{ {
public: public:
//! Opens a file for read access. //! Opens a file for read access.
/** \param filename: Name of file to open. /** \param filename: Name of file to open.
\return Pointer to the created file interface. \return Pointer to the created file interface.
@ -78,7 +75,6 @@ public:
*/ */
virtual IWriteFile *createMemoryWriteFile(void *memory, s32 len, const path &fileName, bool deleteMemoryWhenDropped = false) = 0; virtual IWriteFile *createMemoryWriteFile(void *memory, s32 len, const path &fileName, bool deleteMemoryWhenDropped = false) = 0;
//! Opens a file for write access. //! Opens a file for write access.
/** \param filename: Name of file to open. /** \param filename: Name of file to open.
\param append: If the file already exist, all write operations are \param append: If the file already exist, all write operations are
@ -265,9 +261,5 @@ public:
virtual bool existFile(const path &filename) const = 0; virtual bool existFile(const path &filename) const = 0;
}; };
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__ #pragma once
#define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
#include "EShaderTypes.h" #include "EShaderTypes.h"
#include "EMaterialTypes.h" #include "EMaterialTypes.h"
@ -28,7 +27,6 @@ class IShaderConstantSetCallBack;
class IGPUProgrammingServices class IGPUProgrammingServices
{ {
public: public:
//! Destructor //! Destructor
virtual ~IGPUProgrammingServices() {} virtual ~IGPUProgrammingServices() {}
@ -155,7 +153,7 @@ public:
callback, baseMaterial, userData); callback, baseMaterial, userData);
} }
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. //! Like addHighLevelShaderMaterial(), but loads from files.
/** \param vertexShaderProgramFileName Text file containing the source /** \param vertexShaderProgramFileName Text file containing the source
of the vertex shader program. Set to empty string if no vertex shader of the vertex shader program. Set to empty string if no vertex shader
shall be created. shall be created.
@ -279,7 +277,7 @@ public:
callback, baseMaterial, userData); callback, baseMaterial, userData);
} }
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. //! Like addHighLevelShaderMaterial(), but loads from files.
/** \param vertexShaderProgram Text file handle containing the source /** \param vertexShaderProgram Text file handle containing the source
of the vertex shader program. Set to 0 if no vertex shader shall be of the vertex shader program. Set to 0 if no vertex shader shall be
created. created.
@ -357,99 +355,15 @@ public:
callback, baseMaterial, userData); callback, baseMaterial, userData);
} }
//! Adds a new ASM shader material renderer to the VideoDriver //! Delete a shader material and associated data.
/** Note that it is a good idea to call IVideoDriver::queryFeature() in /**
advance to check if the IVideoDriver supports the vertex and/or pixel After you have deleted a material it is invalid to still use and doing
shader version your are using. so might result in a crash. The ID may be reused in the future when new
materials are added.
The material is added to the VideoDriver like with \param material Number of the material type. Must not be a built-in
IVideoDriver::addMaterialRenderer() and can be used like it had been material. */
added with that method. virtual void deleteShaderMaterial(s32 material) = 0;
\param vertexShaderProgram String containing the source of the vertex
shader program. This can be 0 if no vertex program shall be used.
For DX8 programs, the will always input registers look like this: v0:
position, v1: normal, v2: color, v3: texture coordinates, v4: texture
coordinates 2 if available.
For DX9 programs, you can manually set the registers using the dcl_
statements.
\param pixelShaderProgram String containing the source of the pixel
shader program. This can be 0 if you don't want to use a pixel shader.
\param callback Pointer to an implementation of
IShaderConstantSetCallBack in which you can set the needed vertex and
pixel shader program constants. Set this to 0 if you don't need this.
\param baseMaterial Base material which renderstates will be used to
shade the material.
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
const c8* pixelShaderProgram = 0,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
/** \param vertexShaderProgram Text file containing the source of the
vertex shader program. Set to 0 if no shader shall be created.
\param pixelShaderProgram Text file containing the source of the pixel
shader program. Set to 0 if no shader shall be created.
\param callback Pointer to an IShaderConstantSetCallback object to
which the OnSetConstants function is called.
\param baseMaterial baseMaterial
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
io::IReadFile* pixelShaderProgram,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
/** \param vertexShaderProgramFileName Text file name containing the
source of the vertex shader program. Set to 0 if no shader shall be
created.
\param pixelShaderProgramFileName Text file name containing the source
of the pixel shader program. Set to 0 if no shader shall be created.
\param callback Pointer to an IShaderConstantSetCallback object on
which the OnSetConstants function is called.
\param baseMaterial baseMaterial
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
const io::path& pixelShaderProgramFileName,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_BUTTON_H_INCLUDED__ #pragma once
#define __I_GUI_BUTTON_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -46,8 +45,7 @@ namespace gui
}; };
//! Names for gui button state icons //! Names for gui button state icons
const c8* const GUIButtonStateNames[EGBS_COUNT+1] = const c8 *const GUIButtonStateNames[EGBS_COUNT + 1] = {
{
"buttonUp", "buttonUp",
"buttonDown", "buttonDown",
"buttonMouseOver", "buttonMouseOver",
@ -55,7 +53,7 @@ namespace gui
"buttonFocused", "buttonFocused",
"buttonNotFocused", "buttonNotFocused",
"buttonDisabled", "buttonDisabled",
0 // count 0, // count
}; };
//! State of buttons used for drawing texture images. //! State of buttons used for drawing texture images.
@ -88,8 +86,7 @@ namespace gui
}; };
//! Names for gui button image states //! Names for gui button image states
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] = const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
{
"Image", // not "ImageUp" as it otherwise breaks serialization of old files "Image", // not "ImageUp" as it otherwise breaks serialization of old files
"ImageUpOver", "ImageUpOver",
"ImageUpFocused", "ImageUpFocused",
@ -99,7 +96,7 @@ namespace gui
"ImageDownFocused", "ImageDownFocused",
"ImageDownFocusedOver", "ImageDownFocusedOver",
"ImageDisabled", "ImageDisabled",
0 // count 0, // count
}; };
//! GUI Button interface. //! GUI Button interface.
@ -109,10 +106,9 @@ namespace gui
class IGUIButton : public IGUIElement class IGUIButton : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIButton(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {} IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
//! Sets another skin independent font. //! Sets another skin independent font.
/** If this is set to zero, the button uses the font of the skin. /** If this is set to zero, the button uses the font of the skin.
@ -188,7 +184,6 @@ namespace gui
\param sourceRect: Position in the texture, where the image is located */ \param sourceRect: Position in the texture, where the image is located */
virtual void setPressedImage(video::ITexture *image, const core::rect<s32> &sourceRect) = 0; virtual void setPressedImage(video::ITexture *image, const core::rect<s32> &sourceRect) = 0;
//! Sets the sprite bank used by the button //! Sets the sprite bank used by the button
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized. /** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
Which means after loading the gui you still have to set the spritebank manually. */ Which means after loading the gui you still have to set the spritebank manually. */
@ -260,9 +255,5 @@ namespace gui
virtual bool getClickControlState() const = 0; virtual bool getClickControlState() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_CHECKBOX_H_INCLUDED__ #pragma once
#define __I_GUI_CHECKBOX_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUICheckBox : public IGUIElement class IGUICheckBox : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUICheckBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {} IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
//! Set if box is checked. //! Set if box is checked.
virtual void setChecked(bool checked) = 0; virtual void setChecked(bool checked) = 0;
@ -43,11 +41,7 @@ namespace gui
//! Checks if border drawing is enabled //! Checks if border drawing is enabled
/** \return true if border drawing is enabled, false otherwise */ /** \return true if border drawing is enabled, false otherwise */
virtual bool isDrawBorderEnabled() const = 0; virtual bool isDrawBorderEnabled() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_COMBO_BOX_H_INCLUDED__ #pragma once
#define __I_GUI_COMBO_BOX_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIComboBox : public IGUIElement class IGUIComboBox : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIComboBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {} IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
//! Returns amount of items in box //! Returns amount of items in box
virtual u32 getItemCount() const = 0; virtual u32 getItemCount() const = 0;
@ -70,9 +68,5 @@ namespace gui
virtual u32 getMaxSelectionRows() const = 0; virtual u32 getMaxSelectionRows() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_EDIT_BOX_H_INCLUDED__ #pragma once
#define __I_GUI_EDIT_BOX_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "SColor.h" #include "SColor.h"
@ -23,10 +22,9 @@ namespace gui
class IGUIEditBox : public IGUIElement class IGUIEditBox : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIEditBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {} IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
//! Sets another skin independent font. //! Sets another skin independent font.
/** If this is set to zero, the button uses the font of the skin. /** If this is set to zero, the button uses the font of the skin.
@ -149,9 +147,5 @@ namespace gui
virtual irr::u32 getCursorBlinkTime() const = 0; virtual irr::u32 getCursorBlinkTime() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_ELEMENT_H_INCLUDED__ #pragma once
#define __I_GUI_ELEMENT_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "rect.h" #include "rect.h"
@ -26,11 +25,11 @@ namespace gui
class IGUIElement : virtual public IReferenceCounted, public IEventReceiver class IGUIElement : virtual public IReferenceCounted, public IEventReceiver
{ {
public: public:
//! Constructor //! Constructor
IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment *environment, IGUIElement *parent, IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment *environment, IGUIElement *parent,
s32 id, const core::rect<s32>& rectangle) s32 id, const core::rect<s32> &rectangle) :
: Parent(0), RelativeRect(rectangle), AbsoluteRect(rectangle), Parent(0),
RelativeRect(rectangle), AbsoluteRect(rectangle),
AbsoluteClippingRect(rectangle), DesiredRect(rectangle), AbsoluteClippingRect(rectangle), DesiredRect(rectangle),
MaxSize(0, 0), MinSize(1, 1), IsVisible(true), IsEnabled(true), MaxSize(0, 0), MinSize(1, 1), IsVisible(true), IsEnabled(true),
IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false), IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false),
@ -42,14 +41,12 @@ public:
#endif #endif
// if we were given a parent to attach to // if we were given a parent to attach to
if (parent) if (parent) {
{
parent->addChildToEnd(this); parent->addChildToEnd(this);
recalculateAbsolutePosition(true); recalculateAbsolutePosition(true);
} }
} }
//! Destructor //! Destructor
virtual ~IGUIElement() virtual ~IGUIElement()
{ {
@ -59,7 +56,6 @@ public:
} }
} }
//! Returns parent of this element. //! Returns parent of this element.
IGUIElement *getParent() const IGUIElement *getParent() const
{ {
@ -72,13 +68,11 @@ public:
return RelativeRect; return RelativeRect;
} }
//! Sets the relative rectangle of this element. //! Sets the relative rectangle of this element.
/** \param r The absolute position to set */ /** \param r The absolute position to set */
void setRelativePosition(const core::rect<s32> &r) void setRelativePosition(const core::rect<s32> &r)
{ {
if (Parent) if (Parent) {
{
const core::rect<s32> &r2 = Parent->getAbsolutePosition(); const core::rect<s32> &r2 = Parent->getAbsolutePosition();
core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height)); core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height));
@ -107,7 +101,6 @@ public:
setRelativePosition(rectangle); setRelativePosition(rectangle);
} }
//! Sets the relative rectangle of this element as a proportion of its parent's area. //! Sets the relative rectangle of this element as a proportion of its parent's area.
/** \note This method used to be 'void setRelativePosition(const core::rect<f32>& r)' /** \note This method used to be 'void setRelativePosition(const core::rect<f32>& r)'
\param r The rectangle to set, interpreted as a proportion of the parent's area. \param r The rectangle to set, interpreted as a proportion of the parent's area.
@ -131,21 +124,18 @@ public:
updateAbsolutePosition(); updateAbsolutePosition();
} }
//! Gets the absolute rectangle of this element //! Gets the absolute rectangle of this element
core::rect<s32> getAbsolutePosition() const core::rect<s32> getAbsolutePosition() const
{ {
return AbsoluteRect; return AbsoluteRect;
} }
//! Returns the visible area of the element. //! Returns the visible area of the element.
core::rect<s32> getAbsoluteClippingRect() const core::rect<s32> getAbsoluteClippingRect() const
{ {
return AbsoluteClippingRect; return AbsoluteClippingRect;
} }
//! Sets whether the element will ignore its parent's clipping rectangle //! Sets whether the element will ignore its parent's clipping rectangle
/** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */ /** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */
void setNotClipped(bool noClip) void setNotClipped(bool noClip)
@ -154,7 +144,6 @@ public:
updateAbsolutePosition(); updateAbsolutePosition();
} }
//! Gets whether the element will ignore its parent's clipping rectangle //! Gets whether the element will ignore its parent's clipping rectangle
/** \return true if the element is not clipped by its parent's clipping rectangle. */ /** \return true if the element is not clipped by its parent's clipping rectangle. */
bool isNotClipped() const bool isNotClipped() const
@ -162,7 +151,6 @@ public:
return NoClip; return NoClip;
} }
//! Sets the maximum size allowed for this element //! Sets the maximum size allowed for this element
/** If set to 0,0, there is no maximum size */ /** If set to 0,0, there is no maximum size */
void setMaxSize(core::dimension2du size) void setMaxSize(core::dimension2du size)
@ -171,7 +159,6 @@ public:
updateAbsolutePosition(); updateAbsolutePosition();
} }
//! Sets the minimum size allowed for this element //! Sets the minimum size allowed for this element
void setMinSize(core::dimension2du size) void setMinSize(core::dimension2du size)
{ {
@ -183,7 +170,6 @@ public:
updateAbsolutePosition(); updateAbsolutePosition();
} }
//! The alignment defines how the borders of this element will be positioned when the parent element is resized. //! The alignment defines how the borders of this element will be positioned when the parent element is resized.
void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom) void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom)
{ {
@ -192,8 +178,7 @@ public:
AlignTop = top; AlignTop = top;
AlignBottom = bottom; AlignBottom = bottom;
if (Parent) if (Parent) {
{
core::rect<s32> r(Parent->getAbsolutePosition()); core::rect<s32> r(Parent->getAbsolutePosition());
core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height); core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height);
@ -239,13 +224,11 @@ public:
recalculateAbsolutePosition(false); recalculateAbsolutePosition(false);
// update all children // update all children
for (auto child : Children) for (auto child : Children) {
{
child->updateAbsolutePosition(); child->updateAbsolutePosition();
} }
} }
//! Returns the topmost GUI element at the specific position. //! Returns the topmost GUI element at the specific position.
/** /**
This will check this GUI element and all of its descendants, so it This will check this GUI element and all of its descendants, so it
@ -262,14 +245,12 @@ public:
{ {
IGUIElement *target = 0; IGUIElement *target = 0;
if (isVisible()) if (isVisible()) {
{
// we have to search from back to front, because later children // we have to search from back to front, because later children
// might be drawn over the top of earlier ones. // might be drawn over the top of earlier ones.
auto it = Children.rbegin(); auto it = Children.rbegin();
auto ie = Children.rend(); auto ie = Children.rend();
while (it != ie) while (it != ie) {
{
target = (*it)->getElementFromPoint(point); target = (*it)->getElementFromPoint(point);
if (target) if (target)
return target; return target;
@ -284,7 +265,6 @@ public:
return target; return target;
} }
//! Returns true if a point is within this element. //! Returns true if a point is within this element.
/** Elements with a shape other than a rectangle should override this method */ /** Elements with a shape other than a rectangle should override this method */
virtual bool isPointInside(const core::position2d<s32> &point) const virtual bool isPointInside(const core::position2d<s32> &point) const
@ -292,12 +272,10 @@ public:
return AbsoluteClippingRect.isPointInside(point); return AbsoluteClippingRect.isPointInside(point);
} }
//! Adds a GUI element as new child of this element. //! Adds a GUI element as new child of this element.
virtual void addChild(IGUIElement *child) virtual void addChild(IGUIElement *child)
{ {
if ( child && child != this ) if (child && child != this) {
{
addChildToEnd(child); addChildToEnd(child);
child->updateAbsolutePosition(); child->updateAbsolutePosition();
} }
@ -313,7 +291,8 @@ public:
} }
//! Removes all children. //! Removes all children.
virtual void removeAllChildren() { virtual void removeAllChildren()
{
while (!Children.empty()) { while (!Children.empty()) {
auto child = Children.back(); auto child = Children.back();
child->remove(); child->remove();
@ -327,36 +306,30 @@ public:
Parent->removeChild(this); Parent->removeChild(this);
} }
//! Draws the element and its children. //! Draws the element and its children.
virtual void draw() virtual void draw()
{ {
if ( isVisible() ) if (isVisible()) {
{
for (auto child : Children) for (auto child : Children)
child->draw(); child->draw();
} }
} }
//! animate the element and its children. //! animate the element and its children.
virtual void OnPostRender(u32 timeMs) virtual void OnPostRender(u32 timeMs)
{ {
if ( isVisible() ) if (isVisible()) {
{
for (auto child : Children) for (auto child : Children)
child->OnPostRender(timeMs); child->OnPostRender(timeMs);
} }
} }
//! Moves this element. //! Moves this element.
virtual void move(core::position2d<s32> absoluteMovement) virtual void move(core::position2d<s32> absoluteMovement)
{ {
setRelativePosition(DesiredRect + absoluteMovement); setRelativePosition(DesiredRect + absoluteMovement);
} }
//! Returns true if element is visible. //! Returns true if element is visible.
virtual bool isVisible() const virtual bool isVisible() const
{ {
@ -383,14 +356,12 @@ public:
IsVisible = visible; IsVisible = visible;
} }
//! Returns true if this element was created as part of its parent control //! Returns true if this element was created as part of its parent control
virtual bool isSubElement() const virtual bool isSubElement() const
{ {
return IsSubElement; return IsSubElement;
} }
//! Sets whether this control was created as part of its parent. //! Sets whether this control was created as part of its parent.
/** For example, it is true when a scrollbar is part of a listbox. /** For example, it is true when a scrollbar is part of a listbox.
SubElements are not saved to disk when calling guiEnvironment->saveGUI() */ SubElements are not saved to disk when calling guiEnvironment->saveGUI() */
@ -399,7 +370,6 @@ public:
IsSubElement = subElement; IsSubElement = subElement;
} }
//! If set to true, the focus will visit this element when using the tab key to cycle through elements. //! If set to true, the focus will visit this element when using the tab key to cycle through elements.
/** If this element is a tab group (see isTabGroup/setTabGroup) then /** If this element is a tab group (see isTabGroup/setTabGroup) then
ctrl+tab will be used instead. */ ctrl+tab will be used instead. */
@ -408,51 +378,43 @@ public:
IsTabStop = enable; IsTabStop = enable;
} }
//! Returns true if this element can be focused by navigating with the tab key //! Returns true if this element can be focused by navigating with the tab key
bool isTabStop() const bool isTabStop() const
{ {
return IsTabStop; return IsTabStop;
} }
//! Sets the priority of focus when using the tab key to navigate between a group of elements. //! Sets the priority of focus when using the tab key to navigate between a group of elements.
/** See setTabGroup, isTabGroup and getTabGroup for information on tab groups. /** See setTabGroup, isTabGroup and getTabGroup for information on tab groups.
Elements with a lower number are focused first */ Elements with a lower number are focused first */
void setTabOrder(s32 index) void setTabOrder(s32 index)
{ {
// negative = autonumber // negative = autonumber
if (index < 0) if (index < 0) {
{
TabOrder = 0; TabOrder = 0;
IGUIElement *el = getTabGroup(); IGUIElement *el = getTabGroup();
while (IsTabGroup && el && el->Parent) while (IsTabGroup && el && el->Parent)
el = el->Parent; el = el->Parent;
IGUIElement *first = 0, *closest = 0; IGUIElement *first = 0, *closest = 0;
if (el) if (el) {
{
// find the highest element number // find the highest element number
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true); el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
if (first) if (first) {
{
TabOrder = first->getTabOrder() + 1; TabOrder = first->getTabOrder() + 1;
} }
} }
} } else
else
TabOrder = index; TabOrder = index;
} }
//! Returns the number in the tab order sequence //! Returns the number in the tab order sequence
s32 getTabOrder() const s32 getTabOrder() const
{ {
return TabOrder; return TabOrder;
} }
//! Sets whether this element is a container for a group of elements which can be navigated using the tab key. //! Sets whether this element is a container for a group of elements which can be navigated using the tab key.
/** For example, windows are tab groups. /** For example, windows are tab groups.
Groups can be navigated using ctrl+tab, providing isTabStop is true. */ Groups can be navigated using ctrl+tab, providing isTabStop is true. */
@ -461,14 +423,12 @@ public:
IsTabGroup = isGroup; IsTabGroup = isGroup;
} }
//! Returns true if this element is a tab group. //! Returns true if this element is a tab group.
bool isTabGroup() const bool isTabGroup() const
{ {
return IsTabGroup; return IsTabGroup;
} }
//! Returns the container element which holds all elements in this element's tab group. //! Returns the container element which holds all elements in this element's tab group.
IGUIElement *getTabGroup() IGUIElement *getTabGroup()
{ {
@ -480,7 +440,6 @@ public:
return ret; return ret;
} }
//! Returns true if element is enabled //! Returns true if element is enabled
/** Currently elements do _not_ care about parent-states. /** Currently elements do _not_ care about parent-states.
So if you want to affect children you have to enable/disable them all. So if you want to affect children you have to enable/disable them all.
@ -494,63 +453,54 @@ public:
return IsEnabled; return IsEnabled;
} }
//! Sets the enabled state of this element. //! Sets the enabled state of this element.
virtual void setEnabled(bool enabled) virtual void setEnabled(bool enabled)
{ {
IsEnabled = enabled; IsEnabled = enabled;
} }
//! Sets the new caption of this element. //! Sets the new caption of this element.
virtual void setText(const wchar_t *text) virtual void setText(const wchar_t *text)
{ {
Text = text; Text = text;
} }
//! Returns caption of this element. //! Returns caption of this element.
virtual const wchar_t *getText() const virtual const wchar_t *getText() const
{ {
return Text.c_str(); return Text.c_str();
} }
//! Sets the new caption of this element. //! Sets the new caption of this element.
virtual void setToolTipText(const wchar_t *text) virtual void setToolTipText(const wchar_t *text)
{ {
ToolTipText = text; ToolTipText = text;
} }
//! Returns caption of this element. //! Returns caption of this element.
virtual const core::stringw &getToolTipText() const virtual const core::stringw &getToolTipText() const
{ {
return ToolTipText; return ToolTipText;
} }
//! Returns id. Can be used to identify the element. //! Returns id. Can be used to identify the element.
virtual s32 getID() const virtual s32 getID() const
{ {
return ID; return ID;
} }
//! Sets the id of this element //! Sets the id of this element
virtual void setID(s32 id) virtual void setID(s32 id)
{ {
ID = id; ID = id;
} }
//! Called if an event happened. //! Called if an event happened.
bool OnEvent(const SEvent &event) override bool OnEvent(const SEvent &event) override
{ {
return Parent ? Parent->OnEvent(event) : false; return Parent ? Parent->OnEvent(event) : false;
} }
//! Brings a child to front //! Brings a child to front
/** \return True if successful, false if not. */ /** \return True if successful, false if not. */
virtual bool bringToFront(IGUIElement *child) virtual bool bringToFront(IGUIElement *child)
@ -564,7 +514,6 @@ public:
return true; return true;
} }
//! Moves a child to the back, so it's siblings are drawn on top of it //! Moves a child to the back, so it's siblings are drawn on top of it
/** \return True if successful, false if not. */ /** \return True if successful, false if not. */
virtual bool sendToBack(IGUIElement *child) virtual bool sendToBack(IGUIElement *child)
@ -584,7 +533,6 @@ public:
return Children; return Children;
} }
//! Finds the first element with the given id. //! Finds the first element with the given id.
/** \param id: Id to search for. /** \param id: Id to search for.
\param searchchildren: Set this to true, if also children of this \param searchchildren: Set this to true, if also children of this
@ -596,8 +544,7 @@ public:
{ {
IGUIElement *e = 0; IGUIElement *e = 0;
for (auto child : Children) for (auto child : Children) {
{
if (child->getID() == id) if (child->getID() == id)
return child; return child;
@ -611,25 +558,21 @@ public:
return e; return e;
} }
//! returns true if the given element is a child of this one. //! returns true if the given element is a child of this one.
//! \param child: The child element to check //! \param child: The child element to check
bool isMyChild(IGUIElement *child) const bool isMyChild(IGUIElement *child) const
{ {
if (!child) if (!child)
return false; return false;
do do {
{
if (child->Parent) if (child->Parent)
child = child->Parent; child = child->Parent;
} while (child->Parent && child != this); } while (child->Parent && child != this);
return child == this; return child == this;
} }
//! searches elements to find the closest next element to tab to //! searches elements to find the closest next element to tab to
/** \param startOrder: The TabOrder of the current element, -1 if none /** \param startOrder: The TabOrder of the current element, -1 if none
\param reverse: true if searching for a lower number \param reverse: true if searching for a lower number
@ -652,62 +595,46 @@ public:
s32 closestOrder, currentOrder; s32 closestOrder, currentOrder;
while(it != Children.end()) while (it != Children.end()) {
{
// ignore invisible elements and their children // ignore invisible elements and their children
if (((*it)->isVisible() || includeInvisible) && if (((*it)->isVisible() || includeInvisible) &&
(group == true || (*it)->isTabGroup() == false) ) (group == true || (*it)->isTabGroup() == false)) {
{
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states) // ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
if ( (*it)->isEnabled() || includeDisabled ) if ((*it)->isEnabled() || includeDisabled) {
{
// only check tab stops and those with the same group status // only check tab stops and those with the same group status
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) {
{
currentOrder = (*it)->getTabOrder(); currentOrder = (*it)->getTabOrder();
// is this what we're looking for? // is this what we're looking for?
if (currentOrder == wanted) if (currentOrder == wanted) {
{
closest = *it; closest = *it;
return true; return true;
} }
// is it closer than the current closest? // is it closer than the current closest?
if (closest) if (closest) {
{
closestOrder = closest->getTabOrder(); closestOrder = closest->getTabOrder();
if ( ( reverse && currentOrder > closestOrder && currentOrder < startOrder) if ((reverse && currentOrder > closestOrder && currentOrder < startOrder) || (!reverse && currentOrder < closestOrder && currentOrder > startOrder)) {
||(!reverse && currentOrder < closestOrder && currentOrder > startOrder))
{
closest = *it; closest = *it;
} }
} } else if ((reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder)) {
else
if ( (reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder) )
{
closest = *it; closest = *it;
} }
// is it before the current first? // is it before the current first?
if (first) if (first) {
{
closestOrder = first->getTabOrder(); closestOrder = first->getTabOrder();
if ( (reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder) ) if ((reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder)) {
{
first = *it; first = *it;
} }
} } else {
else
{
first = *it; first = *it;
} }
} }
} }
// search within children // search within children
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled)) if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled)) {
{
return true; return true;
} }
} }
@ -716,7 +643,6 @@ public:
return false; return false;
} }
//! Returns the type of the gui element. //! Returns the type of the gui element.
/** This is needed for the .NET wrapper but will be used /** This is needed for the .NET wrapper but will be used
later for serializing and deserializing. later for serializing and deserializing.
@ -741,7 +667,6 @@ public:
return type == Type; return type == Type;
} }
//! Returns the type name of the gui element. //! Returns the type name of the gui element.
/** This is needed serializing elements. */ /** This is needed serializing elements. */
virtual const c8 *getTypeName() const virtual const c8 *getTypeName() const
@ -756,7 +681,6 @@ public:
return Name.c_str(); return Name.c_str();
} }
//! Sets the name of the element. //! Sets the name of the element.
/** \param name New name of the gui element. */ /** \param name New name of the gui element. */
virtual void setName(const c8 *name) virtual void setName(const c8 *name)
@ -764,7 +688,6 @@ public:
Name = name; Name = name;
} }
//! Sets the name of the element. //! Sets the name of the element.
/** \param name New name of the gui element. */ /** \param name New name of the gui element. */
virtual void setName(const core::stringc &name) virtual void setName(const core::stringc &name)
@ -772,20 +695,17 @@ public:
Name = name; Name = name;
} }
//! Returns whether the element takes input from the IME //! Returns whether the element takes input from the IME
virtual bool acceptsIME() virtual bool acceptsIME()
{ {
return false; return false;
} }
protected: protected:
// not virtual because needed in constructor // not virtual because needed in constructor
void addChildToEnd(IGUIElement *child) void addChildToEnd(IGUIElement *child)
{ {
if (child) if (child) {
{
child->grab(); // prevent destruction when removed child->grab(); // prevent destruction when removed
child->remove(); // remove from old parent child->remove(); // remove from old parent
child->LastParentRect = getAbsolutePosition(); child->LastParentRect = getAbsolutePosition();
@ -796,7 +716,8 @@ protected:
#ifndef NDEBUG #ifndef NDEBUG
template <typename Iterator> template <typename Iterator>
static size_t _fastSetChecksum(Iterator begin, Iterator end) { static size_t _fastSetChecksum(Iterator begin, Iterator end)
{
std::hash<typename Iterator::value_type> hasher; std::hash<typename Iterator::value_type> hasher;
size_t checksum = 0; size_t checksum = 0;
for (Iterator it = begin; it != end; ++it) { for (Iterator it = begin; it != end; ++it) {
@ -814,8 +735,7 @@ protected:
const std::vector<IGUIElement *> &neworder) const std::vector<IGUIElement *> &neworder)
{ {
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end())); assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
for (auto e : neworder) for (auto e : neworder) {
{
*from = e; *from = e;
e->ParentPos = from; e->ParentPos = from;
++from; ++from;
@ -823,7 +743,6 @@ protected:
assert(from == to); assert(from == to);
} }
// not virtual because needed in constructor // not virtual because needed in constructor
void recalculateAbsolutePosition(bool recursive) void recalculateAbsolutePosition(bool recursive)
{ {
@ -831,18 +750,15 @@ protected:
core::rect<s32> parentAbsoluteClip; core::rect<s32> parentAbsoluteClip;
f32 fw = 0.f, fh = 0.f; f32 fw = 0.f, fh = 0.f;
if (Parent) if (Parent) {
{
parentAbsolute = Parent->AbsoluteRect; parentAbsolute = Parent->AbsoluteRect;
if (NoClip) if (NoClip) {
{
IGUIElement *p = this; IGUIElement *p = this;
while (p->Parent) while (p->Parent)
p = p->Parent; p = p->Parent;
parentAbsoluteClip = p->AbsoluteClippingRect; parentAbsoluteClip = p->AbsoluteClippingRect;
} } else
else
parentAbsoluteClip = Parent->AbsoluteClippingRect; parentAbsoluteClip = Parent->AbsoluteClippingRect;
} }
@ -855,8 +771,7 @@ protected:
if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE) if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE)
fh = (f32)parentAbsolute.getHeight(); fh = (f32)parentAbsolute.getHeight();
switch (AlignLeft) switch (AlignLeft) {
{
case EGUIA_UPPERLEFT: case EGUIA_UPPERLEFT:
break; break;
case EGUIA_LOWERRIGHT: case EGUIA_LOWERRIGHT:
@ -870,8 +785,7 @@ protected:
break; break;
} }
switch (AlignRight) switch (AlignRight) {
{
case EGUIA_UPPERLEFT: case EGUIA_UPPERLEFT:
break; break;
case EGUIA_LOWERRIGHT: case EGUIA_LOWERRIGHT:
@ -885,8 +799,7 @@ protected:
break; break;
} }
switch (AlignTop) switch (AlignTop) {
{
case EGUIA_UPPERLEFT: case EGUIA_UPPERLEFT:
break; break;
case EGUIA_LOWERRIGHT: case EGUIA_LOWERRIGHT:
@ -900,8 +813,7 @@ protected:
break; break;
} }
switch (AlignBottom) switch (AlignBottom) {
{
case EGUIA_UPPERLEFT: case EGUIA_UPPERLEFT:
break; break;
case EGUIA_LOWERRIGHT: case EGUIA_LOWERRIGHT:
@ -942,18 +854,15 @@ protected:
LastParentRect = parentAbsolute; LastParentRect = parentAbsolute;
if ( recursive ) if (recursive) {
{
// update all children // update all children
for (auto child : Children) for (auto child : Children) {
{
child->recalculateAbsolutePosition(recursive); child->recalculateAbsolutePosition(recursive);
} }
} }
} }
protected: protected:
//! List of all children of this element //! List of all children of this element
std::list<IGUIElement *> Children; std::list<IGUIElement *> Children;
@ -1028,9 +937,5 @@ protected:
EGUI_ELEMENT_TYPE Type; EGUI_ELEMENT_TYPE Type;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_ENVIRONMENT_H_INCLUDED__ #pragma once
#define __I_GUI_ENVIRONMENT_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "IGUISkin.h" #include "IGUISkin.h"
@ -59,7 +58,6 @@ class IGUIWindow;
class IGUIEnvironment : public virtual IReferenceCounted class IGUIEnvironment : public virtual IReferenceCounted
{ {
public: public:
//! Draws all gui elements by traversing the GUI environment starting at the root node. //! Draws all gui elements by traversing the GUI environment starting at the root node.
/** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize. /** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */ Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
@ -153,7 +151,6 @@ public:
See IReferenceCounted::drop() for more information. */ See IReferenceCounted::drop() for more information. */
virtual IGUISkin *createSkin(EGUI_SKIN_TYPE type) = 0; virtual IGUISkin *createSkin(EGUI_SKIN_TYPE type) = 0;
//! Creates the image list from the given texture. //! Creates the image list from the given texture.
/** \param texture Texture to split into images /** \param texture Texture to split into images
\param imageSize Dimension of each image \param imageSize Dimension of each image
@ -413,9 +410,5 @@ public:
virtual void addToDeletionQueue(IGUIElement *element) = 0; virtual void addToDeletionQueue(IGUIElement *element) = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__ #pragma once
#define __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "path.h" #include "path.h"
@ -24,10 +23,9 @@ namespace gui
class IGUIFileOpenDialog : public IGUIElement class IGUIFileOpenDialog : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIFileOpenDialog(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {} IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
//! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected. //! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected.
virtual const wchar_t *getFileName() const = 0; virtual const wchar_t *getFileName() const = 0;
@ -42,9 +40,5 @@ namespace gui
virtual const wchar_t *getDirectoryNameW() const = 0; virtual const wchar_t *getDirectoryNameW() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_FONT_H_INCLUDED__ #pragma once
#define __I_GUI_FONT_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "SColor.h" #include "SColor.h"
@ -39,7 +38,6 @@ enum EGUI_FONT_TYPE
class IGUIFont : public virtual IReferenceCounted class IGUIFont : public virtual IReferenceCounted
{ {
public: public:
//! Draws some text and clips it to the specified rectangle if wanted. //! Draws some text and clips it to the specified rectangle if wanted.
/** \param text: Text to draw /** \param text: Text to draw
\param position: Rectangle specifying position where to draw the text. \param position: Rectangle specifying position where to draw the text.
@ -99,6 +97,3 @@ public:
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_FONT_BITMAP_H_INCLUDED__ #pragma once
#define __I_GUI_FONT_BITMAP_H_INCLUDED__
#include "IGUIFont.h" #include "IGUIFont.h"
@ -17,7 +16,6 @@ namespace gui
class IGUIFontBitmap : public IGUIFont class IGUIFontBitmap : public IGUIFont
{ {
public: public:
//! Returns the type of this font //! Returns the type of this font
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; } EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
@ -41,6 +39,3 @@ public:
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_IMAGE_H_INCLUDED__ #pragma once
#define __I_GUI_IMAGE_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIImage : public IGUIElement class IGUIImage : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIImage(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {} IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
//! Sets an image texture //! Sets an image texture
virtual void setImage(video::ITexture *image) = 0; virtual void setImage(video::ITexture *image) = 0;
@ -80,8 +78,5 @@ namespace gui
virtual bool isDrawBackgroundEnabled() const = 0; virtual bool isDrawBackgroundEnabled() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

View File

@ -1,8 +1,7 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de // written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
#ifndef __I_GUI_IMAGE_LIST_H_INCLUDED__ #pragma once
#define __I_GUI_IMAGE_LIST_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "rect.h" #include "rect.h"
@ -17,7 +16,6 @@ namespace gui
class IGUIImageList : public virtual IReferenceCounted class IGUIImageList : public virtual IReferenceCounted
{ {
public: public:
//! Destructor //! Destructor
virtual ~IGUIImageList(){}; virtual ~IGUIImageList(){};
@ -40,6 +38,3 @@ public:
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_LIST_BOX_H_INCLUDED__ #pragma once
#define __I_GUI_LIST_BOX_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "SColor.h" #include "SColor.h"
@ -30,7 +29,6 @@ namespace gui
EGUI_LBC_COUNT EGUI_LBC_COUNT
}; };
//! Default list box GUI element. //! Default list box GUI element.
/** \par This element can create the following events of type EGUI_EVENT_TYPE: /** \par This element can create the following events of type EGUI_EVENT_TYPE:
\li EGET_LISTBOX_CHANGED \li EGET_LISTBOX_CHANGED
@ -40,8 +38,8 @@ namespace gui
{ {
public: public:
//! constructor //! constructor
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIListBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {} IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
//! returns amount of list items //! returns amount of list items
virtual u32 getItemCount() const = 0; virtual u32 getItemCount() const = 0;
@ -134,9 +132,5 @@ namespace gui
virtual IGUIScrollBar *getVerticalScrollBar() const = 0; virtual IGUIScrollBar *getVerticalScrollBar() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_SCROLL_BAR_H_INCLUDED__ #pragma once
#define __I_GUI_SCROLL_BAR_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIScrollBar : public IGUIElement class IGUIScrollBar : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {} IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
//! sets the maximum value of the scrollbar. //! sets the maximum value of the scrollbar.
virtual void setMax(s32 max) = 0; virtual void setMax(s32 max) = 0;
@ -57,9 +55,5 @@ namespace gui
virtual void setPos(s32 pos) = 0; virtual void setPos(s32 pos) = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_SKIN_H_INCLUDED__ #pragma once
#define __I_GUI_SKIN_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "EGUIAlignment.h" #include "EGUIAlignment.h"
@ -46,8 +45,7 @@ namespace gui
}; };
//! Names for gui element types //! Names for gui element types
const c8* const GUISkinTypeNames[EGST_COUNT+1] = const c8 *const GUISkinTypeNames[EGST_COUNT + 1] = {
{
"windowsClassic", "windowsClassic",
"windowsMetallic", "windowsMetallic",
"burning", "burning",
@ -55,7 +53,6 @@ namespace gui
0, 0,
}; };
//! Enumeration for skin colors //! Enumeration for skin colors
enum EGUI_DEFAULT_COLOR enum EGUI_DEFAULT_COLOR
{ {
@ -116,8 +113,7 @@ namespace gui
}; };
//! Names for default skin colors //! Names for default skin colors
const c8* const GUISkinColorNames[EGDC_COUNT+1] = const c8 *const GUISkinColorNames[EGDC_COUNT + 1] = {
{
"3DDarkShadow", "3DDarkShadow",
"3DShadow", "3DShadow",
"3DFace", "3DFace",
@ -201,10 +197,8 @@ namespace gui
EGDS_COUNT EGDS_COUNT
}; };
//! Names for default skin sizes //! Names for default skin sizes
const c8* const GUISkinSizeNames[EGDS_COUNT+1] = const c8 *const GUISkinSizeNames[EGDS_COUNT + 1] = {
{
"ScrollBarSize", "ScrollBarSize",
"MenuHeight", "MenuHeight",
"WindowButtonWidth", "WindowButtonWidth",
@ -228,10 +222,9 @@ namespace gui
"ButtonPressedTextOffsetY", "ButtonPressedTextOffsetY",
"ButtonPressedSpriteOffsetX", "ButtonPressedSpriteOffsetX",
"ButtonPressedSpriteOffsetY", "ButtonPressedSpriteOffsetY",
0 0,
}; };
enum EGUI_DEFAULT_TEXT enum EGUI_DEFAULT_TEXT
{ {
//! Text for the OK button on a message box //! Text for the OK button on a message box
@ -256,8 +249,7 @@ namespace gui
}; };
//! Names for default skin sizes //! Names for default skin sizes
const c8* const GUISkinTextNames[EGDT_COUNT+1] = const c8 *const GUISkinTextNames[EGDT_COUNT + 1] = {
{
"MessageBoxOkay", "MessageBoxOkay",
"MessageBoxCancel", "MessageBoxCancel",
"MessageBoxYes", "MessageBoxYes",
@ -266,7 +258,7 @@ namespace gui
"WindowButtonMaximize", "WindowButtonMaximize",
"WindowButtonMinimize", "WindowButtonMinimize",
"WindowButtonRestore", "WindowButtonRestore",
0 0,
}; };
//! Customizable symbols for GUI //! Customizable symbols for GUI
@ -324,8 +316,7 @@ namespace gui
EGDI_COUNT EGDI_COUNT
}; };
const c8* const GUISkinIconNames[EGDI_COUNT+1] = const c8 *const GUISkinIconNames[EGDI_COUNT + 1] = {
{
"windowMaximize", "windowMaximize",
"windowRestore", "windowRestore",
"windowClose", "windowClose",
@ -349,7 +340,7 @@ namespace gui
"collapse", "collapse",
"file", "file",
"directory", "directory",
0 0,
}; };
// Customizable fonts // Customizable fonts
@ -370,21 +361,19 @@ namespace gui
EGDF_COUNT EGDF_COUNT
}; };
const c8* const GUISkinFontNames[EGDF_COUNT+1] = const c8 *const GUISkinFontNames[EGDF_COUNT + 1] = {
{
"defaultFont", "defaultFont",
"buttonFont", "buttonFont",
"windowFont", "windowFont",
"menuFont", "menuFont",
"tooltipFont", "tooltipFont",
0 0,
}; };
//! A skin modifies the look of the GUI elements. //! A skin modifies the look of the GUI elements.
class IGUISkin : virtual public IReferenceCounted class IGUISkin : virtual public IReferenceCounted
{ {
public: public:
//! returns default color //! returns default color
virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0; virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
@ -572,9 +561,5 @@ namespace gui
virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; } virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_SPRITE_BANK_H_INCLUDED__ #pragma once
#define __I_GUI_SPRITE_BANK_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrArray.h" #include "irrArray.h"
@ -25,12 +24,13 @@ namespace gui
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while // Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
struct SGUISpriteFrame struct SGUISpriteFrame
{ {
SGUISpriteFrame() : textureNumber(0), rectNumber(0) SGUISpriteFrame() :
textureNumber(0), rectNumber(0)
{ {
} }
SGUISpriteFrame(u32 textureIndex, u32 positionIndex) SGUISpriteFrame(u32 textureIndex, u32 positionIndex) :
: textureNumber(textureIndex), rectNumber(positionIndex) textureNumber(textureIndex), rectNumber(positionIndex)
{ {
} }
@ -45,8 +45,10 @@ struct SGUISpriteFrame
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while // Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
struct SGUISprite struct SGUISprite
{ {
SGUISprite() : frameTime(0) {} SGUISprite() :
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0) frameTime(0) {}
SGUISprite(const SGUISpriteFrame &firstFrame) :
frameTime(0)
{ {
Frames.push_back(firstFrame); Frames.push_back(firstFrame);
} }
@ -55,7 +57,6 @@ struct SGUISprite
u32 frameTime; u32 frameTime;
}; };
//! Sprite bank interface. //! Sprite bank interface.
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742 /** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
* for more information how to use the spritebank. * for more information how to use the spritebank.
@ -63,7 +64,6 @@ struct SGUISprite
class IGUISpriteBank : public virtual IReferenceCounted class IGUISpriteBank : public virtual IReferenceCounted
{ {
public: public:
//! Returns the list of rectangles held by the sprite bank //! Returns the list of rectangles held by the sprite bank
virtual core::array<core::rect<s32>> &getPositions() = 0; virtual core::array<core::rect<s32>> &getPositions() = 0;
@ -134,9 +134,5 @@ public:
bool loop = true, bool center = false) = 0; bool loop = true, bool center = false) = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__

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 __I_GUI_STATIC_TEXT_H_INCLUDED__ #pragma once
#define __I_GUI_STATIC_TEXT_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "SColor.h" #include "SColor.h"
@ -18,10 +17,9 @@ namespace gui
class IGUIStaticText : public IGUIElement class IGUIStaticText : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIStaticText(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {} IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
//! Sets another skin independent font. //! Sets another skin independent font.
/** If this is set to zero, the button uses the font of the skin. /** If this is set to zero, the button uses the font of the skin.
@ -131,9 +129,5 @@ namespace gui
virtual bool isRightToLeft() const = 0; virtual bool isRightToLeft() const = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_TAB_CONTROL_H_INCLUDED__ #pragma once
#define __I_GUI_TAB_CONTROL_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
#include "SColor.h" #include "SColor.h"
@ -22,10 +21,9 @@ namespace gui
class IGUITabControl : public IGUIElement class IGUITabControl : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUITabControl(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {} IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
//! Adds a tab //! Adds a tab
virtual IGUITab *addTab(const wchar_t *caption, s32 id = -1) = 0; virtual IGUITab *addTab(const wchar_t *caption, s32 id = -1) = 0;
@ -124,10 +122,9 @@ namespace gui
class IGUITab : public IGUIElement class IGUITab : public IGUIElement
{ {
public: public:
//! constructor //! constructor
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) {}
//! 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;
@ -150,6 +147,3 @@ namespace gui
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

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 __I_GUI_TOOL_BAR_H_INCLUDED__ #pragma once
#define __I_GUI_TOOL_BAR_H_INCLUDED__
#include "IGUIElement.h" #include "IGUIElement.h"
@ -21,10 +20,9 @@ namespace gui
class IGUIToolBar : public IGUIElement class IGUIToolBar : public IGUIElement
{ {
public: public:
//! constructor //! constructor
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle) IGUIToolBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {} IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
//! Adds a button to the tool bar //! Adds a button to the tool bar
virtual IGUIButton *addButton(s32 id = -1, const wchar_t *text = 0, const wchar_t *tooltiptext = 0, virtual IGUIButton *addButton(s32 id = -1, const wchar_t *text = 0, const wchar_t *tooltiptext = 0,
@ -32,9 +30,5 @@ namespace gui
bool isPushButton = false, bool useAlphaChannel = false) = 0; bool isPushButton = false, bool useAlphaChannel = false) = 0;
}; };
} // end namespace gui } // end namespace gui
} // end namespace irr } // end namespace irr
#endif

View File

@ -2,14 +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 __I_IMAGE_H_INCLUDED__ #pragma once
#define __I_IMAGE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "position2d.h" #include "position2d.h"
#include "rect.h" #include "rect.h"
#include "SColor.h" #include "SColor.h"
#include <string.h> #include <cstring>
namespace irr namespace irr
{ {
@ -24,13 +23,9 @@ NOTE: Floating point formats are not well supported yet. Basically only getData(
class IImage : public virtual IReferenceCounted class IImage : public virtual IReferenceCounted
{ {
public: public:
//! constructor //! constructor
IImage(ECOLOR_FORMAT format, const core::dimension2d<u32> &size, bool deleteMemory) : IImage(ECOLOR_FORMAT format, const core::dimension2d<u32> &size, bool deleteMemory) :
Format(format), Size(size), Data(0), MipMapsData(0), BytesPerPixel(0), Pitch(0), DeleteMemory(deleteMemory), DeleteMipMapsMemory(false) Format(format), Size(size), Data(0), MipMapsData(0), BytesPerPixel(0), Pitch(0), DeleteMemory(deleteMemory), DeleteMipMapsMemory(false)
#if defined(IRRLICHT_sRGB)
,Format_sRGB(1)
#endif
{ {
BytesPerPixel = getBitsPerPixelFromFormat(Format) / 8; BytesPerPixel = getBitsPerPixelFromFormat(Format) / 8;
Pitch = BytesPerPixel * Size.Width; Pitch = BytesPerPixel * Size.Width;
@ -52,18 +47,6 @@ public:
return Format; return Format;
} }
#if defined(IRRLICHT_sRGB)
//! Texture is linear/sRGB (should be part of ColorFormat: default yes)
int get_sRGB() const
{
return Format_sRGB;
}
void set_sRGB(int val)
{
Format_sRGB = val;
}
#endif
//! Returns width and height of image data. //! Returns width and height of image data.
const core::dimension2d<u32> &getDimension() const const core::dimension2d<u32> &getDimension() const
{ {
@ -104,8 +87,7 @@ public:
//! Returns mask for red value of a pixel //! Returns mask for red value of a pixel
u32 getRedMask() const u32 getRedMask() const
{ {
switch (Format) switch (Format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
return 0x1F << 10; return 0x1F << 10;
case ECF_R5G6B5: case ECF_R5G6B5:
@ -122,8 +104,7 @@ public:
//! Returns mask for green value of a pixel //! Returns mask for green value of a pixel
u32 getGreenMask() const u32 getGreenMask() const
{ {
switch (Format) switch (Format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
return 0x1F << 5; return 0x1F << 5;
case ECF_R5G6B5: case ECF_R5G6B5:
@ -140,8 +121,7 @@ public:
//! Returns mask for blue value of a pixel //! Returns mask for blue value of a pixel
u32 getBlueMask() const u32 getBlueMask() const
{ {
switch (Format) switch (Format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
return 0x1F; return 0x1F;
case ECF_R5G6B5: case ECF_R5G6B5:
@ -158,8 +138,7 @@ public:
//! Returns mask for alpha value of a pixel //! Returns mask for alpha value of a pixel
u32 getAlphaMask() const u32 getAlphaMask() const
{ {
switch (Format) switch (Format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
return 0x1 << 15; return 0x1 << 15;
case ECF_R5G6B5: case ECF_R5G6B5:
@ -191,15 +170,13 @@ public:
return getMipMapsSize(Size, mipmapLevel); return getMipMapsSize(Size, mipmapLevel);
} }
//! Calculate mipmap size for a certain level //! Calculate mipmap size for a certain 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. */
static core::dimension2du getMipMapsSize(const core::dimension2du &sizeLevel0, u32 mipmapLevel) static core::dimension2du getMipMapsSize(const core::dimension2du &sizeLevel0, u32 mipmapLevel)
{ {
core::dimension2du result(sizeLevel0); core::dimension2du result(sizeLevel0);
u32 i = 0; u32 i = 0;
while (i != mipmapLevel) while (i != mipmapLevel) {
{
if (result.Width > 1) if (result.Width > 1)
result.Width >>= 1; result.Width >>= 1;
if (result.Height > 1) if (result.Height > 1)
@ -212,7 +189,6 @@ public:
return result; return result;
} }
//! Get mipmaps data. //! Get mipmaps data.
/** Note that different mip levels are just behind each other in memory block. /** Note that different mip levels are just behind each other in memory block.
So if you just get level 1 you also have the data for all other levels. So if you just get level 1 you also have the data for all other levels.
@ -220,14 +196,12 @@ public:
*/ */
void *getMipMapsData(irr::u32 mipLevel = 1) const void *getMipMapsData(irr::u32 mipLevel = 1) const
{ {
if ( MipMapsData && mipLevel > 0) if (MipMapsData && mipLevel > 0) {
{
size_t dataSize = 0; size_t dataSize = 0;
core::dimension2du mipSize(Size); core::dimension2du mipSize(Size);
u32 i = 1; // We want the start of data for this level, not end. u32 i = 1; // We want the start of data for this level, not end.
while (i != mipLevel) while (i != mipLevel) {
{
if (mipSize.Width > 1) if (mipSize.Width > 1)
mipSize.Width >>= 1; mipSize.Width >>= 1;
@ -258,31 +232,24 @@ public:
destruction. */ destruction. */
void setMipMapsData(void *data, bool ownForeignMemory) void setMipMapsData(void *data, bool ownForeignMemory)
{ {
if (data != MipMapsData) if (data != MipMapsData) {
{ if (DeleteMipMapsMemory) {
if (DeleteMipMapsMemory)
{
delete[] MipMapsData; delete[] MipMapsData;
DeleteMipMapsMemory = false; DeleteMipMapsMemory = false;
} }
if (data) if (data) {
{ if (ownForeignMemory) {
if (ownForeignMemory)
{
MipMapsData = static_cast<u8 *>(data); MipMapsData = static_cast<u8 *>(data);
DeleteMipMapsMemory = false; DeleteMipMapsMemory = false;
} } else {
else
{
u32 dataSize = 0; u32 dataSize = 0;
u32 width = Size.Width; u32 width = Size.Width;
u32 height = Size.Height; u32 height = Size.Height;
do do {
{
if (width > 1) if (width > 1)
width >>= 1; width >>= 1;
@ -297,9 +264,7 @@ public:
DeleteMipMapsMemory = true; DeleteMipMapsMemory = true;
} }
} } else {
else
{
MipMapsData = 0; MipMapsData = 0;
} }
} }
@ -352,8 +317,7 @@ public:
//! 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)
{ {
switch(format) switch (format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
return 16; return 16;
case ECF_R5G6B5: case ECF_R5G6B5:
@ -362,28 +326,6 @@ public:
return 24; return 24;
case ECF_A8R8G8B8: case ECF_A8R8G8B8:
return 32; return 32;
case ECF_DXT1:
return 16;
case ECF_DXT2:
case ECF_DXT3:
case ECF_DXT4:
case ECF_DXT5:
return 32;
case ECF_PVRTC_RGB2:
return 12;
case ECF_PVRTC_ARGB2:
case ECF_PVRTC2_ARGB2:
return 16;
case ECF_PVRTC_RGB4:
return 24;
case ECF_PVRTC_ARGB4:
case ECF_PVRTC2_ARGB4:
return 32;
case ECF_ETC1:
case ECF_ETC2_RGB:
return 24;
case ECF_ETC2_ARGB:
return 32;
case ECF_D16: case ECF_D16:
return 16; return 16;
case ECF_D32: case ECF_D32:
@ -418,81 +360,23 @@ public:
//! calculate image data size in bytes for selected format, width and height. //! calculate image data size in bytes for selected format, width and height.
static u32 getDataSizeFromFormat(ECOLOR_FORMAT format, u32 width, u32 height) static u32 getDataSizeFromFormat(ECOLOR_FORMAT format, u32 width, u32 height)
{ {
u32 imageSize = 0; // non-compressed formats
u32 imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
switch (format)
{
case ECF_DXT1:
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 8;
break;
case ECF_DXT2:
case ECF_DXT3:
case ECF_DXT4:
case ECF_DXT5:
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 16;
break;
case ECF_PVRTC_RGB2:
case ECF_PVRTC_ARGB2:
imageSize = (core::max_<u32>(width, 16) * core::max_<u32>(height, 8) * 2 + 7) / 8;
break;
case ECF_PVRTC_RGB4:
case ECF_PVRTC_ARGB4:
imageSize = (core::max_<u32>(width, 8) * core::max_<u32>(height, 8) * 4 + 7) / 8;
break;
case ECF_PVRTC2_ARGB2:
imageSize = core::ceil32(width / 8.0f) * core::ceil32(height / 4.0f) * 8;
break;
case ECF_PVRTC2_ARGB4:
case ECF_ETC1:
case ECF_ETC2_RGB:
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 8;
break;
case ECF_ETC2_ARGB:
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 16;
break;
default: // uncompressed formats
imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
imageSize *= height; imageSize *= height;
break;
}
return imageSize; return imageSize;
} }
// Define to check for all compressed image formats cases in a switch
#define IRR_CASE_IIMAGE_COMPRESSED_FORMAT\
case ECF_DXT1:\
case ECF_DXT2:\
case ECF_DXT3:\
case ECF_DXT4:\
case ECF_DXT5:\
case ECF_PVRTC_RGB2:\
case ECF_PVRTC_ARGB2:\
case ECF_PVRTC2_ARGB2:\
case ECF_PVRTC_RGB4:\
case ECF_PVRTC_ARGB4:\
case ECF_PVRTC2_ARGB4:\
case ECF_ETC1:\
case ECF_ETC2_RGB:\
case ECF_ETC2_ARGB:
//! check if this is compressed color format //! check if this is compressed color format
static bool isCompressedFormat(const ECOLOR_FORMAT format) static bool isCompressedFormat(const ECOLOR_FORMAT format)
{ {
switch(format)
{
IRR_CASE_IIMAGE_COMPRESSED_FORMAT
return true;
default:
return false; return false;
} }
}
//! check if the color format is only viable for depth/stencil textures //! check if the color format is only viable for depth/stencil textures
static bool isDepthFormat(const ECOLOR_FORMAT format) static bool isDepthFormat(const ECOLOR_FORMAT format)
{ {
switch(format) switch (format) {
{
case ECF_D16: case ECF_D16:
case ECF_D32: case ECF_D32:
case ECF_D24S8: case ECF_D24S8:
@ -508,8 +392,7 @@ public:
if (isCompressedFormat(format)) if (isCompressedFormat(format))
return false; return false;
switch(format) switch (format) {
{
case ECF_R16F: case ECF_R16F:
case ECF_G16R16F: case ECF_G16R16F:
case ECF_A16B16G16R16F: case ECF_A16B16G16R16F:
@ -523,22 +406,6 @@ public:
return false; return false;
} }
#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)
static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format)
{
switch (format)
{
case ECF_A1R5G5B5:
case ECF_R5G6B5:
case ECF_R8G8B8:
case ECF_A8R8G8B8:
return false;
default:
return true;
}
}
#endif
protected: protected:
ECOLOR_FORMAT Format; ECOLOR_FORMAT Format;
core::dimension2d<u32> Size; core::dimension2d<u32> Size;
@ -551,15 +418,7 @@ protected:
bool DeleteMemory; bool DeleteMemory;
bool DeleteMipMapsMemory; bool DeleteMipMapsMemory;
#if defined(IRRLICHT_sRGB)
int Format_sRGB;
#endif
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_SURFACE_LOADER_H_INCLUDED__ #pragma once
#define __I_SURFACE_LOADER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "IImage.h" #include "IImage.h"
@ -28,7 +27,6 @@ IVideoDriver::addExternalImageLoader() to the engine. */
class IImageLoader : public virtual IReferenceCounted class IImageLoader : public virtual IReferenceCounted
{ {
public: public:
//! Check if the file might be loaded by this class //! Check if the file might be loaded by this class
/** Check is based on the file extension (e.g. ".tga") /** Check is based on the file extension (e.g. ".tga")
\param filename Name of file to check. \param filename Name of file to check.
@ -47,9 +45,5 @@ public:
virtual IImage *loadImage(io::IReadFile *file) const = 0; virtual IImage *loadImage(io::IReadFile *file) const = 0;
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 _I_IMAGE_WRITER_H_INCLUDED__ #pragma once
#define _I_IMAGE_WRITER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrString.h" #include "irrString.h"
@ -20,7 +19,6 @@ namespace video
{ {
class IImage; class IImage;
//! Interface for writing software image data. //! Interface for writing software image data.
class IImageWriter : public IReferenceCounted class IImageWriter : public IReferenceCounted
{ {
@ -40,6 +38,3 @@ public:
} // namespace video } // namespace video
} // namespace irr } // namespace irr
#endif // _I_IMAGE_WRITER_H_INCLUDED__

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 __I_INDEX_BUFFER_H_INCLUDED__ #pragma once
#define __I_INDEX_BUFFER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrArray.h" #include "irrArray.h"
@ -24,7 +23,6 @@ namespace scene
class IIndexBuffer : public virtual IReferenceCounted class IIndexBuffer : public virtual IReferenceCounted
{ {
public: public:
virtual void *getData() = 0; virtual void *getData() = 0;
virtual video::E_INDEX_TYPE getType() const = 0; virtual video::E_INDEX_TYPE getType() const = 0;
@ -57,9 +55,5 @@ namespace scene
virtual u32 getChangedID() const = 0; virtual u32 getChangedID() const = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_LOGGER_H_INCLUDED__ #pragma once
#define __I_LOGGER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
@ -33,12 +32,10 @@ enum ELOG_LEVEL
ELL_NONE ELL_NONE
}; };
//! Interface for logging messages, warnings and errors //! Interface for logging messages, warnings and errors
class ILogger : public virtual IReferenceCounted class ILogger : public virtual IReferenceCounted
{ {
public: public:
//! Destructor //! Destructor
virtual ~ILogger() {} virtual ~ILogger() {}
@ -73,30 +70,6 @@ public:
filtered with these levels. If you want to be a text displayed, filtered with these levels. If you want to be a text displayed,
independent on what level filter is set, use ELL_NONE. */ independent on what level filter is set, use ELL_NONE. */
virtual void log(const c8 *text, const c8 *hint, ELOG_LEVEL ll = ELL_INFORMATION) = 0; virtual void log(const c8 *text, const c8 *hint, ELOG_LEVEL ll = ELL_INFORMATION) = 0;
virtual void log(const c8* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
//! Prints out a text into the log
/** \param text: Text to print out.
\param hint: Additional info. This string is added after a " :" to the
string.
\param ll: Log level of the text. If the text is an error, set
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
is just an informational text, set it to ELL_INFORMATION. Texts are
filtered with these levels. If you want to be a text displayed,
independent on what level filter is set, use ELL_NONE. */
virtual void log(const wchar_t* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
//! Prints out a text into the log
/** \param text: Text to print out.
\param ll: Log level of the text. If the text is an error, set
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
is just an informational text, set it to ELL_INFORMATION. Texts are
filtered with these levels. If you want to be a text displayed,
independent on what level filter is set, use ELL_NONE. */
virtual void log(const wchar_t* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
}; };
} // end namespace } // end namespace
#endif

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 __I_MATERIAL_RENDERER_H_INCLUDED__ #pragma once
#define __I_MATERIAL_RENDERER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "SMaterial.h" #include "SMaterial.h"
@ -25,7 +24,6 @@ engine with new materials. */
class IMaterialRenderer : public virtual IReferenceCounted class IMaterialRenderer : public virtual IReferenceCounted
{ {
public: public:
//! Called by the IVideoDriver implementation the let the renderer set its needed render states. //! Called by the IVideoDriver implementation the let the renderer set its needed render states.
/** This is called during the IVideoDriver::setMaterial() call. /** This is called during the IVideoDriver::setMaterial() call.
When overriding this, you can set some renderstates or for example a When overriding this, you can set some renderstates or for example a
@ -99,9 +97,5 @@ public:
virtual IShaderConstantSetCallBack *getShaderConstantSetCallBack() const { return 0; } virtual IShaderConstantSetCallBack *getShaderConstantSetCallBack() const { return 0; }
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__ #pragma once
#define __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__
#include "SMaterial.h" #include "SMaterial.h"
#include "S3DVertex.h" #include "S3DVertex.h"
@ -15,12 +14,10 @@ namespace video
class IVideoDriver; class IVideoDriver;
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver. //! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
class IMaterialRendererServices class IMaterialRendererServices
{ {
public: public:
//! Destructor //! Destructor
virtual ~IMaterialRendererServices() {} virtual ~IMaterialRendererServices() {}
@ -53,19 +50,8 @@ public:
virtual bool setVertexShaderConstant(s32 index, const s32 *ints, int count) = 0; virtual bool setVertexShaderConstant(s32 index, const s32 *ints, int count) = 0;
//! Uint interface for the above. //! Uint interface for the above.
/* NOTE: UINT only works with GLSL, not supported for other shaders.
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
*/
virtual bool setVertexShaderConstant(s32 index, const u32 *ints, int count) = 0; virtual bool setVertexShaderConstant(s32 index, const u32 *ints, int count) = 0;
//! Sets a vertex shader constant.
/** Can be used if you created a shader using pixel/vertex shader
assembler or ARB_fragment_program or ARB_vertex_program.
\param data: Data to be set in the constants
\param startRegister: First register to be set
\param constantAmount: Amount of registers to be set. One register consists of 4 floats. */
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
//! Return an index constant for the pixel shader for the given uniform variable name //! Return an index constant for the pixel shader for the given uniform variable name
virtual s32 getPixelShaderConstantID(const c8 *name) = 0; virtual s32 getPixelShaderConstantID(const c8 *name) = 0;
@ -83,19 +69,8 @@ public:
virtual bool setPixelShaderConstant(s32 index, const s32 *ints, int count) = 0; virtual bool setPixelShaderConstant(s32 index, const s32 *ints, int count) = 0;
//! Uint interface for the above. //! Uint interface for the above.
/* NOTE: UINT only works with GLSL, not supported for other shaders.
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
*/
virtual bool setPixelShaderConstant(s32 index, const u32 *ints, int count) = 0; virtual bool setPixelShaderConstant(s32 index, const u32 *ints, int count) = 0;
//! Sets a pixel shader constant.
/** Can be used if you created a shader using pixel/vertex shader
assembler or ARB_fragment_program or ARB_vertex_program.
\param data Data to be set in the constants
\param startRegister First register to be set.
\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;
//! 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;
@ -103,6 +78,3 @@ public:
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_MEMORY_READ_FILE_H_INCLUDED__ #pragma once
#define __I_MEMORY_READ_FILE_H_INCLUDED__
#include "IReadFile.h" #include "IReadFile.h"
@ -26,6 +25,3 @@ namespace io
}; };
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_H_INCLUDED__ #pragma once
#define __I_MESH_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "SMaterial.h" #include "SMaterial.h"
@ -60,7 +59,6 @@ namespace scene
EAMT_STATIC EAMT_STATIC
}; };
class IMeshBuffer; class IMeshBuffer;
//! Class which holds the geometry of an object. //! Class which holds the geometry of an object.
@ -71,7 +69,6 @@ namespace scene
class IMesh : public virtual IReferenceCounted class IMesh : public virtual IReferenceCounted
{ {
public: public:
//! Get the amount of mesh buffers. //! Get the amount of mesh buffers.
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */ /** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
virtual u32 getMeshBufferCount() const = 0; virtual u32 getMeshBufferCount() const = 0;
@ -124,6 +121,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_BUFFER_H_INCLUDED__ #pragma once
#define __I_MESH_BUFFER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "SMaterial.h" #include "SMaterial.h"
@ -39,7 +38,6 @@ namespace scene
class IMeshBuffer : public virtual IReferenceCounted class IMeshBuffer : public virtual IReferenceCounted
{ {
public: public:
//! Get the material of this meshbuffer //! Get the material of this meshbuffer
/** \return Material of this buffer. */ /** \return Material of this buffer. */
virtual video::SMaterial &getMaterial() = 0; virtual video::SMaterial &getMaterial() = 0;
@ -120,11 +118,6 @@ namespace scene
\param numIndices Number of indices in array. */ \param numIndices Number of indices in array. */
virtual void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) = 0; virtual void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) = 0;
//! Append the meshbuffer to the current buffer
/** Only works for compatible vertex types
\param other Buffer to append to this one. */
virtual void append(const IMeshBuffer* const other) = 0;
//! get the current hardware mapping hint //! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0; virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
@ -163,23 +156,27 @@ namespace scene
virtual u32 getPrimitiveCount() const virtual u32 getPrimitiveCount() const
{ {
const u32 indexCount = getIndexCount(); const u32 indexCount = getIndexCount();
switch (getPrimitiveType()) switch (getPrimitiveType()) {
{ case scene::EPT_POINTS:
case scene::EPT_POINTS: return indexCount; return indexCount;
case scene::EPT_LINE_STRIP: return indexCount-1; case scene::EPT_LINE_STRIP:
case scene::EPT_LINE_LOOP: return indexCount; return indexCount - 1;
case scene::EPT_LINES: return indexCount/2; case scene::EPT_LINE_LOOP:
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2); return indexCount;
case scene::EPT_TRIANGLE_FAN: return (indexCount-2); case scene::EPT_LINES:
case scene::EPT_TRIANGLES: return indexCount/3; return indexCount / 2;
case scene::EPT_POINT_SPRITES: return indexCount; case scene::EPT_TRIANGLE_STRIP:
return (indexCount - 2);
case scene::EPT_TRIANGLE_FAN:
return (indexCount - 2);
case scene::EPT_TRIANGLES:
return indexCount / 3;
case scene::EPT_POINT_SPRITES:
return indexCount;
} }
return 0; return 0;
} }
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_CACHE_H_INCLUDED__ #pragma once
#define __I_MESH_CACHE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "path.h" #include "path.h"
@ -27,7 +26,6 @@ namespace scene
class IMeshCache : public virtual IReferenceCounted class IMeshCache : public virtual IReferenceCounted
{ {
public: public:
//! Destructor //! Destructor
virtual ~IMeshCache() {} virtual ~IMeshCache() {}
@ -129,9 +127,5 @@ namespace scene
virtual void clearUnusedMeshes() = 0; virtual void clearUnusedMeshes() = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_LOADER_H_INCLUDED__ #pragma once
#define __I_MESH_LOADER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "path.h" #include "path.h"
@ -26,7 +25,6 @@ ISceneManager::addExternalMeshLoader() to the engine. */
class IMeshLoader : public virtual IReferenceCounted class IMeshLoader : public virtual IReferenceCounted
{ {
public: public:
//! Constructor //! Constructor
IMeshLoader() {} IMeshLoader() {}
@ -48,8 +46,5 @@ public:
virtual IAnimatedMesh *createMesh(io::IReadFile *file) = 0; virtual IAnimatedMesh *createMesh(io::IReadFile *file) = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_MANIPULATOR_H_INCLUDED__ #pragma once
#define __I_MESH_MANIPULATOR_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "vector3d.h" #include "vector3d.h"
@ -29,7 +28,6 @@ namespace scene
class IMeshManipulator : public virtual IReferenceCounted class IMeshManipulator : public virtual IReferenceCounted
{ {
public: public:
//! Recalculates all normals of the mesh. //! Recalculates all normals of the mesh.
/** \param mesh: Mesh on which the operation is performed. /** \param mesh: Mesh on which the operation is performed.
\param smooth: If the normals shall be smoothed. \param smooth: If the normals shall be smoothed.
@ -100,7 +98,6 @@ namespace scene
return apply_(func, buffer, boundingBoxUpdate, func); return apply_(func, buffer, boundingBoxUpdate, func);
} }
//! Apply a manipulator on the Mesh //! Apply a manipulator on the Mesh
/** \param func A functor defining the mesh manipulation. /** \param func A functor defining the mesh manipulation.
\param mesh The Mesh to apply the manipulator to. \param mesh The Mesh to apply the manipulator to.
@ -113,11 +110,9 @@ namespace scene
return true; return true;
bool result = true; bool result = true;
core::aabbox3df bufferbox; core::aabbox3df bufferbox;
for (u32 i=0; i<mesh->getMeshBufferCount(); ++i) for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
{
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate); result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
if (boundingBoxUpdate) if (boundingBoxUpdate) {
{
if (0 == i) if (0 == i)
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox()); bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
else else
@ -143,31 +138,22 @@ protected:
return true; return true;
core::aabbox3df bufferbox; core::aabbox3df bufferbox;
for (u32 i=0; i<buffer->getVertexCount(); ++i) for (u32 i = 0; i < buffer->getVertexCount(); ++i) {
{ switch (buffer->getVertexType()) {
switch (buffer->getVertexType()) case video::EVT_STANDARD: {
{
case video::EVT_STANDARD:
{
video::S3DVertex *verts = (video::S3DVertex *)buffer->getVertices(); video::S3DVertex *verts = (video::S3DVertex *)buffer->getVertices();
func(verts[i]); func(verts[i]);
} } break;
break; case video::EVT_2TCOORDS: {
case video::EVT_2TCOORDS:
{
video::S3DVertex2TCoords *verts = (video::S3DVertex2TCoords *)buffer->getVertices(); video::S3DVertex2TCoords *verts = (video::S3DVertex2TCoords *)buffer->getVertices();
func(verts[i]); func(verts[i]);
} } break;
break; case video::EVT_TANGENTS: {
case video::EVT_TANGENTS:
{
video::S3DVertexTangents *verts = (video::S3DVertexTangents *)buffer->getVertices(); video::S3DVertexTangents *verts = (video::S3DVertexTangents *)buffer->getVertices();
func(verts[i]); func(verts[i]);
} break;
} }
break; if (boundingBoxUpdate) {
}
if (boundingBoxUpdate)
{
if (0 == i) if (0 == i)
bufferbox.reset(buffer->getPosition(0)); bufferbox.reset(buffer->getPosition(0));
else else
@ -182,6 +168,3 @@ protected:
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_MESH_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_MESH_SCENE_NODE_H_INCLUDED__
#include "ISceneNode.h" #include "ISceneNode.h"
@ -14,20 +13,18 @@ namespace scene
class IMesh; class IMesh;
//! A scene node displaying a static mesh //! A scene node displaying a static mesh
class IMeshSceneNode : public ISceneNode class IMeshSceneNode : public ISceneNode
{ {
public: public:
//! Constructor //! Constructor
/** Use setMesh() to set the mesh to display. /** Use setMesh() to set the mesh to display.
*/ */
IMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id, IMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1,1,1)) const core::vector3df &scale = core::vector3df(1, 1, 1)) :
: ISceneNode(parent, mgr, id, position, rotation, scale) {} ISceneNode(parent, mgr, id, position, rotation, scale) {}
//! Sets a new mesh to display //! Sets a new mesh to display
/** \param mesh Mesh to display. */ /** \param mesh Mesh to display. */
@ -51,7 +48,3 @@ public:
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -1,55 +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
#pragma once
#include "IReferenceCounted.h"
#include "EMeshWriterEnums.h"
namespace irr
{
namespace io
{
class IWriteFile;
} // end namespace io
namespace scene
{
class IMesh;
//! Interface for writing meshes
class IMeshWriter : public virtual IReferenceCounted
{
public:
//! Destructor
virtual ~IMeshWriter() {}
//! Get the type of the mesh writer
/** For own implementations, use MAKE_IRR_ID as shown in the
EMESH_WRITER_TYPE enumeration to return your own unique mesh
type id.
\return Type of the mesh writer. */
virtual EMESH_WRITER_TYPE getType() const = 0;
//! Write a static mesh.
/** \param file File handle to write the mesh to.
\param mesh Pointer to mesh to be written.
\param flags Optional flags to set properties of the writer.
\return True if successful */
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh,
s32 flags=EMWF_NONE) = 0;
// Writes an animated mesh
// for future use, only b3d writer is able to write animated meshes currently and that was implemented using the writeMesh above.
/* \return Returns true if successful */
//virtual bool writeAnimatedMesh(io::IWriteFile* file,
// scene::IAnimatedMesh* mesh,
// s32 flags=EMWF_NONE) = 0;
};
} // end namespace
} // end namespace

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 __I_OS_OPERATOR_H_INCLUDED__ #pragma once
#define __I_OS_OPERATOR_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrString.h" #include "irrString.h"
@ -41,9 +40,6 @@ public:
\param availableBytes: will contain the available memory in Kilobytes (1024 B) \param availableBytes: will contain the available memory in Kilobytes (1024 B)
\return True if successful, false if not */ \return True if successful, false if not */
virtual bool getSystemMemory(u32 *totalBytes, u32 *availableBytes) const = 0; virtual bool getSystemMemory(u32 *totalBytes, u32 *availableBytes) const = 0;
}; };
} // end namespace } // end namespace
#endif

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 __I_READ_FILE_H_INCLUDED__ #pragma once
#define __I_READ_FILE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "coreutil.h" #include "coreutil.h"
@ -56,6 +55,3 @@ namespace io
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

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 __I_IREFERENCE_COUNTED_H_INCLUDED__ #pragma once
#define __I_IREFERENCE_COUNTED_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
@ -41,10 +40,9 @@ namespace irr
class IReferenceCounted class IReferenceCounted
{ {
public: public:
//! Constructor. //! Constructor.
IReferenceCounted() IReferenceCounted() :
: DebugName(0), ReferenceCounter(1) DebugName(0), ReferenceCounter(1)
{ {
} }
@ -119,8 +117,7 @@ namespace irr
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0) _IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
--ReferenceCounter; --ReferenceCounter;
if (!ReferenceCounter) if (!ReferenceCounter) {
{
delete this; delete this;
return true; return true;
} }
@ -145,7 +142,6 @@ namespace irr
} }
protected: protected:
//! Sets the debug name of the object. //! Sets the debug name of the object.
/** The Debugname may only be set and changed by the object /** The Debugname may only be set and changed by the object
itself. This method should only be used in Debug mode. itself. This method should only be used in Debug mode.
@ -156,7 +152,6 @@ namespace irr
} }
private: private:
//! The debug name. //! The debug name.
const c8 *DebugName; const c8 *DebugName;
@ -165,6 +160,3 @@ namespace irr
}; };
} // end namespace irr } // end namespace irr
#endif

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 __I_RENDER_TARGET_H_INCLUDED__ #pragma once
#define __I_RENDER_TARGET_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "EDriverTypes.h" #include "EDriverTypes.h"
@ -30,9 +29,9 @@ namespace video
class IRenderTarget : public virtual IReferenceCounted class IRenderTarget : public virtual IReferenceCounted
{ {
public: public:
//! constructor //! constructor
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL) IRenderTarget() :
DepthStencil(0), DriverType(EDT_NULL)
{ {
} }
@ -70,12 +69,9 @@ namespace video
//! You can pass getDepthStencil() for depthStencil if you don't want to change that one //! You can pass getDepthStencil() for depthStencil if you don't want to change that one
void setTexture(ITexture *texture, ITexture *depthStencil) void setTexture(ITexture *texture, ITexture *depthStencil)
{ {
if ( texture ) if (texture) {
{
setTextures(&texture, 1, depthStencil); setTextures(&texture, 1, depthStencil);
} } else {
else
{
setTextures(0, 0, depthStencil); setTextures(0, 0, depthStencil);
} }
} }
@ -83,12 +79,9 @@ namespace video
//! Set one cube surface texture. //! Set one cube surface texture.
void setTexture(ITexture *texture, ITexture *depthStencil, E_CUBE_SURFACE cubeSurface) void setTexture(ITexture *texture, ITexture *depthStencil, E_CUBE_SURFACE cubeSurface)
{ {
if ( texture ) if (texture) {
{
setTextures(&texture, 1, depthStencil, &cubeSurface, 1); setTextures(&texture, 1, depthStencil, &cubeSurface, 1);
} } else {
else
{
setTextures(0, 0, depthStencil, &cubeSurface, 1); setTextures(0, 0, depthStencil, &cubeSurface, 1);
} }
} }
@ -100,7 +93,6 @@ namespace video
} }
protected: protected:
//! Set multiple textures. //! Set multiple textures.
// NOTE: working with pointers instead of arrays to avoid unnecessary memory allocations for the single textures case // NOTE: working with pointers instead of arrays to avoid unnecessary memory allocations for the single textures case
virtual void setTextures(ITexture *const *textures, u32 numTextures, ITexture *depthStencil, const E_CUBE_SURFACE *cubeSurfaces = 0, u32 numCubeSurfaces = 0) = 0; virtual void setTextures(ITexture *const *textures, u32 numTextures, ITexture *depthStencil, const E_CUBE_SURFACE *cubeSurfaces = 0, u32 numCubeSurfaces = 0) = 0;
@ -125,5 +117,3 @@ namespace video
} }
} }
#endif

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 __I_SCENE_COLLISION_MANAGER_H_INCLUDED__ #pragma once
#define __I_SCENE_COLLISION_MANAGER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "position2d.h" #include "position2d.h"
@ -19,7 +18,6 @@ namespace scene
class ISceneCollisionManager : public virtual IReferenceCounted class ISceneCollisionManager : public virtual IReferenceCounted
{ {
public: public:
//! Returns a 3d ray which would go through the 2d screen coordinates. //! Returns a 3d ray which would go through the 2d screen coordinates.
/** \param pos: Screen coordinates in pixels. /** \param pos: Screen coordinates in pixels.
\param camera: Camera from which the ray starts. If null, the \param camera: Camera from which the ray starts. If null, the
@ -29,10 +27,7 @@ namespace scene
would be behind the 2d screen coordinates. */ would be behind the 2d screen coordinates. */
virtual core::line3d<f32> getRayFromScreenCoordinates( virtual core::line3d<f32> getRayFromScreenCoordinates(
const core::position2d<s32> &pos, const ICameraSceneNode *camera = 0) = 0; const core::position2d<s32> &pos, const ICameraSceneNode *camera = 0) = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_SCENE_MANAGER_H_INCLUDED__ #pragma once
#define __I_SCENE_MANAGER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrArray.h" #include "irrArray.h"
@ -13,7 +12,6 @@
#include "dimension2d.h" #include "dimension2d.h"
#include "SColor.h" #include "SColor.h"
#include "ESceneNodeTypes.h" #include "ESceneNodeTypes.h"
#include "EMeshWriterEnums.h"
#include "SceneParameters.h" #include "SceneParameters.h"
#include "ISkinnedMesh.h" #include "ISkinnedMesh.h"
@ -109,7 +107,6 @@ namespace scene
class IMeshLoader; class IMeshLoader;
class IMeshManipulator; class IMeshManipulator;
class IMeshSceneNode; class IMeshSceneNode;
class IMeshWriter;
class ISceneNode; class ISceneNode;
class ISceneNodeFactory; class ISceneNodeFactory;
@ -129,7 +126,6 @@ namespace scene
class ISceneManager : public virtual IReferenceCounted class ISceneManager : public virtual IReferenceCounted
{ {
public: public:
//! Get pointer to an animatable mesh. Loads the file if not loaded already. //! Get pointer to an animatable mesh. Loads the file if not loaded already.
/** /**
* If you want to remove a loaded mesh from the cache again, use removeMesh(). * If you want to remove a loaded mesh from the cache again, use removeMesh().
@ -603,11 +599,6 @@ namespace scene
See IReferenceCounted::drop() for more information. */ See IReferenceCounted::drop() for more information. */
virtual ISceneManager *createNewSceneManager(bool cloneContent = false) = 0; virtual ISceneManager *createNewSceneManager(bool cloneContent = false) = 0;
//! Get a mesh writer implementation if available
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
for details. */
virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0;
//! Get a skinned mesh, which is not available as header-only code //! Get a skinned mesh, which is not available as header-only code
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop() /** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
for details. */ for details. */
@ -637,9 +628,5 @@ namespace scene
virtual bool isCulled(const ISceneNode *node) const = 0; virtual bool isCulled(const ISceneNode *node) const = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_SCENE_NODE_H_INCLUDED__ #pragma once
#define __I_SCENE_NODE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "ESceneNodeTypes.h" #include "ESceneNodeTypes.h"
@ -14,7 +13,9 @@
#include "aabbox3d.h" #include "aabbox3d.h"
#include "matrix4.h" #include "matrix4.h"
#include "IAttributes.h" #include "IAttributes.h"
#include <list> #include <list>
#include <optional>
namespace irr namespace irr
{ {
@ -37,13 +38,13 @@ namespace scene
class ISceneNode : virtual public IReferenceCounted class ISceneNode : virtual public IReferenceCounted
{ {
public: public:
//! Constructor //! Constructor
ISceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id = -1, ISceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id = -1,
const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
: RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale), RelativeTranslation(position),
RelativeRotation(rotation), RelativeScale(scale),
Parent(0), SceneManager(mgr), ID(id), Parent(0), SceneManager(mgr), ID(id),
AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF), AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF),
IsVisible(true), IsDebugObject(false) IsVisible(true), IsDebugObject(false)
@ -54,7 +55,6 @@ namespace scene
updateAbsolutePosition(); updateAbsolutePosition();
} }
//! Destructor //! Destructor
virtual ~ISceneNode() virtual ~ISceneNode()
{ {
@ -62,7 +62,6 @@ namespace scene
removeAll(); removeAll();
} }
//! This method is called just before the rendering process of the whole scene. //! This method is called just before the rendering process of the whole scene.
/** Nodes may register themselves in the render pipeline during this call, /** Nodes may register themselves in the render pipeline during this call,
precalculate the geometry which should be rendered, and prevent their precalculate the geometry which should be rendered, and prevent their
@ -79,15 +78,13 @@ namespace scene
*/ */
virtual void OnRegisterSceneNode() virtual void OnRegisterSceneNode()
{ {
if (IsVisible) if (IsVisible) {
{
ISceneNodeList::iterator it = Children.begin(); ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it) for (; it != Children.end(); ++it)
(*it)->OnRegisterSceneNode(); (*it)->OnRegisterSceneNode();
} }
} }
//! OnAnimate() is called just before rendering the whole scene. //! OnAnimate() is called just before rendering the whole scene.
/** Nodes may calculate or store animations here, and may do other useful things, /** Nodes may calculate or store animations here, and may do other useful things,
depending on what they are. Also, OnAnimate() should be called for all depending on what they are. Also, OnAnimate() should be called for all
@ -96,8 +93,7 @@ namespace scene
\param timeMs Current time in milliseconds. */ \param timeMs Current time in milliseconds. */
virtual void OnAnimate(u32 timeMs) virtual void OnAnimate(u32 timeMs)
{ {
if (IsVisible) if (IsVisible) {
{
// update absolute position // update absolute position
updateAbsolutePosition(); updateAbsolutePosition();
@ -109,35 +105,23 @@ namespace scene
} }
} }
//! Renders the node. //! Renders the node.
virtual void render() = 0; virtual void render() = 0;
//! Returns the name of the node. //! Returns the name of the node.
/** \return Name as character string. */ /** \return Name as character string. */
virtual const c8* getName() const virtual const std::optional<std::string> &getName() const
{ {
return Name.c_str(); return Name;
} }
//! Sets the name of the node. //! Sets the name of the node.
/** \param name New name of the scene node. */ /** \param name New name of the scene node. */
virtual void setName(const c8* name) virtual void setName(const std::optional<std::string> &name)
{ {
Name = name; Name = name;
} }
//! Sets the name of the node.
/** \param name New name of the scene node. */
virtual void setName(const core::stringc& name)
{
Name = name;
}
//! Get the axis aligned, not transformed bounding box of this node. //! Get the axis aligned, not transformed bounding box of this node.
/** This means that if this node is an animated 3d character, /** This means that if this node is an animated 3d character,
moving in a room, the bounding box will always be around the moving in a room, the bounding box will always be around the
@ -148,7 +132,6 @@ namespace scene
\return The non-transformed bounding box. */ \return The non-transformed bounding box. */
virtual const core::aabbox3d<f32> &getBoundingBox() const = 0; virtual const core::aabbox3d<f32> &getBoundingBox() const = 0;
//! Get the axis aligned, transformed and animated absolute bounding box of this node. //! Get the axis aligned, transformed and animated absolute bounding box of this node.
/** Note: The result is still an axis-aligned bounding box, so it's size /** Note: The result is still an axis-aligned bounding box, so it's size
changes with rotation. changes with rotation.
@ -185,7 +168,6 @@ namespace scene
return AbsoluteTransformation; return AbsoluteTransformation;
} }
//! Returns the relative transformation of the scene node. //! Returns the relative transformation of the scene node.
/** The relative transformation is stored internally as 3 /** The relative transformation is stored internally as 3
vectors: translation, rotation and scale. To get the relative vectors: translation, rotation and scale. To get the relative
@ -197,8 +179,7 @@ namespace scene
mat.setRotationDegrees(RelativeRotation); mat.setRotationDegrees(RelativeRotation);
mat.setTranslation(RelativeTranslation); mat.setTranslation(RelativeTranslation);
if (RelativeScale != core::vector3df(1.f,1.f,1.f)) if (RelativeScale != core::vector3df(1.f, 1.f, 1.f)) {
{
core::matrix4 smat; core::matrix4 smat;
smat.setScale(RelativeScale); smat.setScale(RelativeScale);
mat *= smat; mat *= smat;
@ -207,7 +188,6 @@ namespace scene
return mat; return mat;
} }
//! Returns whether the node should be visible (if all of its parents are visible). //! Returns whether the node should be visible (if all of its parents are visible).
/** This is only an option set by the user, but has nothing to /** This is only an option set by the user, but has nothing to
do with geometry culling do with geometry culling
@ -242,7 +222,6 @@ namespace scene
IsVisible = isVisible; IsVisible = isVisible;
} }
//! Get the id of the scene node. //! Get the id of the scene node.
/** This id can be used to identify the node. /** This id can be used to identify the node.
\return The id. */ \return The id. */
@ -251,7 +230,6 @@ namespace scene
return ID; return ID;
} }
//! Sets the id of the scene node. //! Sets the id of the scene node.
/** This id can be used to identify the node. /** This id can be used to identify the node.
\param id The new id. */ \param id The new id. */
@ -260,66 +238,59 @@ namespace scene
ID = id; ID = id;
} }
//! Adds a child to this scene node. //! Adds a child to this scene node.
/** If the scene node already has a parent it is first removed /** If the scene node already has a parent it is first removed
from the other parent. from the other parent.
\param child A pointer to the new child. */ \param child A pointer to the new child. */
virtual void addChild(ISceneNode *child) virtual void addChild(ISceneNode *child)
{ {
if (child && (child != this)) if (child && (child != this)) {
{
// Change scene manager? // Change scene manager?
if (SceneManager != child->SceneManager) if (SceneManager != child->SceneManager)
child->setSceneManager(SceneManager); child->setSceneManager(SceneManager);
child->grab(); child->grab();
child->remove(); // remove from old parent child->remove(); // remove from old parent
Children.push_back(child); // Note: This iterator is not invalidated until we erase it.
child->ThisIterator = Children.insert(Children.end(), child);
child->Parent = this; child->Parent = this;
} }
} }
//! Removes a child from this scene node. //! Removes a child from this scene node.
/** If found in the children list, the child pointer is also /**
dropped and might be deleted if no other grab exists.
\param child A pointer to the child which shall be removed. \param child A pointer to the child which shall be removed.
\return True if the child was removed, and false if not, \return True if the child was removed, and false if not,
e.g. because it couldn't be found in the children list. */ e.g. because it belongs to a different parent or no parent. */
virtual bool removeChild(ISceneNode *child) virtual bool removeChild(ISceneNode *child)
{ {
ISceneNodeList::iterator it = Children.begin(); if (child->Parent != this)
for (; it != Children.end(); ++it) return false;
if ((*it) == child)
{ // The iterator must be set since the parent is not null.
(*it)->Parent = 0; _IRR_DEBUG_BREAK_IF(!child->ThisIterator.has_value());
(*it)->drop(); auto it = *child->ThisIterator;
child->ThisIterator = std::nullopt;
child->Parent = nullptr;
child->drop();
Children.erase(it); Children.erase(it);
return true; return true;
} }
return false;
}
//! Removes all children of this scene node //! Removes all children of this scene node
/** The scene nodes found in the children list are also dropped /** The scene nodes found in the children list are also dropped
and might be deleted if no other grab exists on them. and might be deleted if no other grab exists on them.
*/ */
virtual void removeAll() virtual void removeAll()
{ {
ISceneNodeList::iterator it = Children.begin(); for (auto &child : Children) {
for (; it != Children.end(); ++it) child->Parent = nullptr;
{ child->ThisIterator = std::nullopt;
(*it)->Parent = 0; child->drop();
(*it)->drop();
} }
Children.clear(); Children.clear();
} }
//! Removes this scene node from the scene //! Removes this scene node from the scene
/** If no other grab exists for this node, it will be deleted. /** If no other grab exists for this node, it will be deleted.
*/ */
@ -329,7 +300,6 @@ namespace scene
Parent->removeChild(this); Parent->removeChild(this);
} }
//! Returns the material based on the zero based index i. //! Returns the material based on the zero based index i.
/** To get the amount of materials used by this scene node, use /** To get the amount of materials used by this scene node, use
getMaterialCount(). This function is needed for inserting the getMaterialCount(). This function is needed for inserting the
@ -343,7 +313,6 @@ namespace scene
return video::IdentityMaterial; return video::IdentityMaterial;
} }
//! Get amount of materials used by this scene node. //! Get amount of materials used by this scene node.
/** \return Current amount of materials of this scene node. */ /** \return Current amount of materials of this scene node. */
virtual u32 getMaterialCount() const virtual u32 getMaterialCount() const
@ -351,18 +320,17 @@ namespace scene
return 0; return 0;
} }
//! Execute a function on all materials of this scene node. //! Execute a function on all materials of this scene node.
/** Useful for setting material properties, e.g. if you want the whole /** Useful for setting material properties, e.g. if you want the whole
mesh to be affected by light. */ mesh to be affected by light. */
template <typename F> template <typename F>
void forEachMaterial(F &&fn) { void forEachMaterial(F &&fn)
{
for (u32 i = 0; i < getMaterialCount(); i++) { for (u32 i = 0; i < getMaterialCount(); i++) {
fn(getMaterial(i)); fn(getMaterial(i));
} }
} }
//! Gets the scale of the scene node relative to its parent. //! Gets the scale of the scene node relative to its parent.
/** This is the scale of this node relative to its parent. /** This is the scale of this node relative to its parent.
If you want the absolute scale, use If you want the absolute scale, use
@ -373,7 +341,6 @@ namespace scene
return RelativeScale; return RelativeScale;
} }
//! Sets the relative scale of the scene node. //! Sets the relative scale of the scene node.
/** \param scale New scale of the node, relative to its parent. */ /** \param scale New scale of the node, relative to its parent. */
virtual void setScale(const core::vector3df &scale) virtual void setScale(const core::vector3df &scale)
@ -381,7 +348,6 @@ namespace scene
RelativeScale = scale; RelativeScale = scale;
} }
//! Gets the rotation of the node relative to its parent. //! Gets the rotation of the node relative to its parent.
/** Note that this is the relative rotation of the node. /** Note that this is the relative rotation of the node.
If you want the absolute rotation, use If you want the absolute rotation, use
@ -392,7 +358,6 @@ namespace scene
return RelativeRotation; return RelativeRotation;
} }
//! Sets the rotation of the node relative to its parent. //! Sets the rotation of the node relative to its parent.
/** This only modifies the relative rotation of the node. /** This only modifies the relative rotation of the node.
\param rotation New rotation of the node in degrees. */ \param rotation New rotation of the node in degrees. */
@ -401,7 +366,6 @@ namespace scene
RelativeRotation = rotation; RelativeRotation = rotation;
} }
//! Gets the position of the node relative to its parent. //! Gets the position of the node relative to its parent.
/** Note that the position is relative to the parent. If you want /** Note that the position is relative to the parent. If you want
the position in world coordinates, use getAbsolutePosition() instead. the position in world coordinates, use getAbsolutePosition() instead.
@ -411,7 +375,6 @@ namespace scene
return RelativeTranslation; return RelativeTranslation;
} }
//! Sets the position of the node relative to its parent. //! Sets the position of the node relative to its parent.
/** Note that the position is relative to the parent. /** Note that the position is relative to the parent.
\param newpos New relative position of the scene node. */ \param newpos New relative position of the scene node. */
@ -420,7 +383,6 @@ namespace scene
RelativeTranslation = newpos; RelativeTranslation = newpos;
} }
//! Gets the absolute position of the node in world coordinates. //! Gets the absolute position of the node in world coordinates.
/** If you want the position of the node relative to its parent, /** If you want the position of the node relative to its parent,
use getPosition() instead. use getPosition() instead.
@ -435,7 +397,6 @@ namespace scene
return AbsoluteTransformation.getTranslation(); return AbsoluteTransformation.getTranslation();
} }
//! Set a culling style or disable culling completely. //! Set a culling style or disable culling completely.
/** Box cullling (EAC_BOX) is set by default. Note that not /** Box cullling (EAC_BOX) is set by default. Note that not
all SceneNodes support culling and that some nodes always cull all SceneNodes support culling and that some nodes always cull
@ -447,7 +408,6 @@ namespace scene
AutomaticCullingState = state; AutomaticCullingState = state;
} }
//! Gets the automatic culling state. //! Gets the automatic culling state.
/** \return The automatic culling state. */ /** \return The automatic culling state. */
u32 getAutomaticCulling() const u32 getAutomaticCulling() const
@ -455,7 +415,6 @@ namespace scene
return AutomaticCullingState; return AutomaticCullingState;
} }
//! Sets if debug data like bounding boxes should be drawn. //! Sets if debug data like bounding boxes should be drawn.
/** A bitwise OR of the types from @ref irr::scene::E_DEBUG_SCENE_TYPE. /** A bitwise OR of the types from @ref irr::scene::E_DEBUG_SCENE_TYPE.
Please note that not all scene nodes support all debug data types. Please note that not all scene nodes support all debug data types.
@ -473,7 +432,6 @@ namespace scene
return DebugDataVisible; return DebugDataVisible;
} }
//! Sets if this scene node is a debug object. //! Sets if this scene node is a debug object.
/** Debug objects have some special properties, for example they can be easily /** Debug objects have some special properties, for example they can be easily
excluded from collision detection or from serialization, etc. */ excluded from collision detection or from serialization, etc. */
@ -482,7 +440,6 @@ namespace scene
IsDebugObject = debugObject; IsDebugObject = debugObject;
} }
//! Returns if this scene node is a debug object. //! Returns if this scene node is a debug object.
/** Debug objects have some special properties, for example they can be easily /** Debug objects have some special properties, for example they can be easily
excluded from collision detection or from serialization, etc. excluded from collision detection or from serialization, etc.
@ -492,7 +449,6 @@ namespace scene
return IsDebugObject; return IsDebugObject;
} }
//! Returns a const reference to the list of all children. //! Returns a const reference to the list of all children.
/** \return The list of all children of this node. */ /** \return The list of all children of this node. */
const std::list<ISceneNode *> &getChildren() const const std::list<ISceneNode *> &getChildren() const
@ -500,7 +456,6 @@ namespace scene
return Children; return Children;
} }
//! Changes the parent of the scene node. //! Changes the parent of the scene node.
/** \param newParent The new parent to be used. */ /** \param newParent The new parent to be used. */
virtual void setParent(ISceneNode *newParent) virtual void setParent(ISceneNode *newParent)
@ -508,30 +463,24 @@ namespace scene
grab(); grab();
remove(); remove();
Parent = newParent; if (newParent)
newParent->addChild(this);
if (Parent)
Parent->addChild(this);
drop(); drop();
} }
//! Updates the absolute position based on the relative and the parents position //! Updates the absolute position based on the relative and the parents position
/** Note: This does not recursively update the parents absolute positions, so if you have a deeper /** Note: This does not recursively update the parents absolute positions, so if you have a deeper
hierarchy you might want to update the parents first.*/ hierarchy you might want to update the parents first.*/
virtual void updateAbsolutePosition() virtual void updateAbsolutePosition()
{ {
if (Parent) if (Parent) {
{
AbsoluteTransformation = AbsoluteTransformation =
Parent->getAbsoluteTransformation() * getRelativeTransformation(); Parent->getAbsoluteTransformation() * getRelativeTransformation();
} } else
else
AbsoluteTransformation = getRelativeTransformation(); AbsoluteTransformation = getRelativeTransformation();
} }
//! Returns the parent of this scene node //! Returns the parent of this scene node
/** \return A pointer to the parent. */ /** \return A pointer to the parent. */
scene::ISceneNode *getParent() const scene::ISceneNode *getParent() const
@ -539,7 +488,6 @@ namespace scene
return Parent; return Parent;
} }
//! Returns type of the scene node //! Returns type of the scene node
/** \return The type of this node. */ /** \return The type of this node. */
virtual ESCENE_NODE_TYPE getType() const virtual ESCENE_NODE_TYPE getType() const
@ -561,7 +509,6 @@ namespace scene
virtual ISceneManager *getSceneManager(void) const { return SceneManager; } virtual ISceneManager *getSceneManager(void) const { return SceneManager; }
protected: protected:
//! A clone function for the ISceneNode members. //! A clone function for the ISceneNode members.
/** This method can be used by clone() implementations of /** This method can be used by clone() implementations of
derived classes derived classes
@ -604,7 +551,7 @@ namespace scene
} }
//! Name of the scene node. //! Name of the scene node.
core::stringc Name; std::optional<std::string> Name;
//! Absolute transformation of the node. //! Absolute transformation of the node.
core::matrix4 AbsoluteTransformation; core::matrix4 AbsoluteTransformation;
@ -618,12 +565,15 @@ namespace scene
//! Relative scale of the scene node. //! Relative scale of the scene node.
core::vector3df RelativeScale; core::vector3df RelativeScale;
//! Pointer to the parent
ISceneNode* Parent;
//! List of all children of this node //! List of all children of this node
std::list<ISceneNode *> Children; std::list<ISceneNode *> Children;
//! Iterator pointing to this node in the parent's child list.
std::optional<ISceneNodeList::iterator> ThisIterator;
//! Pointer to the parent
ISceneNode *Parent;
//! Pointer to the scene manager //! Pointer to the scene manager
ISceneManager *SceneManager; ISceneManager *SceneManager;
@ -643,9 +593,5 @@ namespace scene
bool IsDebugObject; bool IsDebugObject;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__ #pragma once
#define __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
@ -21,7 +20,6 @@ OnSetConstants method will be called every frame now. */
class IShaderConstantSetCallBack : public virtual IReferenceCounted class IShaderConstantSetCallBack : public virtual IReferenceCounted
{ {
public: public:
//! Called to let the callBack know the used material (optional method) //! Called to let the callBack know the used material (optional method)
/** /**
\code \code
@ -77,9 +75,5 @@ public:
virtual void OnSetConstants(IMaterialRendererServices *services, s32 userData) = 0; virtual void OnSetConstants(IMaterialRendererServices *services, s32 userData) = 0;
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

View File

@ -2,14 +2,15 @@
// 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 __I_SKINNED_MESH_H_INCLUDED__ #pragma once
#define __I_SKINNED_MESH_H_INCLUDED__
#include "irrArray.h" #include "irrArray.h"
#include "IBoneSceneNode.h" #include "IBoneSceneNode.h"
#include "IAnimatedMesh.h" #include "IAnimatedMesh.h"
#include "SSkinMeshBuffer.h" #include "SSkinMeshBuffer.h"
#include <optional>
namespace irr namespace irr
{ {
namespace scene namespace scene
@ -27,12 +28,10 @@ namespace scene
EIM_COUNT EIM_COUNT
}; };
//! Interface for using some special functions of Skinned meshes //! Interface for using some special functions of Skinned meshes
class ISkinnedMesh : public IAnimatedMesh class ISkinnedMesh : public IAnimatedMesh
{ {
public: public:
//! Gets joint count. //! Gets joint count.
/** \return Amount of joints in the skeletal animated mesh. */ /** \return Amount of joints in the skeletal animated mesh. */
virtual u32 getJointCount() const = 0; virtual u32 getJointCount() const = 0;
@ -41,12 +40,12 @@ namespace scene
/** \param number: Zero based index of joint. The last joint /** \param number: Zero based index of joint. The last joint
has the number getJointCount()-1; has the number getJointCount()-1;
\return Name of joint and null if an error happened. */ \return Name of joint and null if an error happened. */
virtual const c8* getJointName(u32 number) const = 0; virtual const std::optional<std::string> &getJointName(u32 number) const = 0;
//! Gets a joint number from its name //! Gets a joint number from its name
/** \param name: Name of the joint. /** \param name: Name of the joint.
\return Number of the joint or -1 if not found. */ \return Number of the joint or std::nullopt if not found. */
virtual s32 getJointNumber(const c8* name) const = 0; virtual std::optional<u32> getJointNumber(const std::string &name) const = 0;
//! Use animation from another mesh //! Use animation from another mesh
/** The animation is linked (not copied) based on joint names /** The animation is linked (not copied) based on joint names
@ -105,7 +104,6 @@ namespace scene
core::vector3df StaticNormal; core::vector3df StaticNormal;
}; };
//! Animation keyframe which describes a new position //! Animation keyframe which describes a new position
struct SPositionKey struct SPositionKey
{ {
@ -130,13 +128,14 @@ namespace scene
//! Joints //! Joints
struct SJoint struct SJoint
{ {
SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false), SJoint() :
UseAnimationFrom(0), GlobalSkinningSpace(false),
positionHint(-1), scaleHint(-1), rotationHint(-1) positionHint(-1), scaleHint(-1), rotationHint(-1)
{ {
} }
//! The name of this joint //! The name of this joint
core::stringc Name; std::optional<std::string> Name;
//! Local matrix of this joint //! Local matrix of this joint
core::matrix4 LocalMatrix; core::matrix4 LocalMatrix;
@ -181,7 +180,6 @@ namespace scene
s32 rotationHint; s32 rotationHint;
}; };
// Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_ // Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
// these functions will use the needed arrays, set values, etc to help the loaders // these functions will use the needed arrays, set values, etc to help the loaders
@ -220,6 +218,3 @@ namespace scene
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __I_TEXTURE_H_INCLUDED__ #pragma once
#define __I_TEXTURE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "IImage.h" #include "IImage.h"
@ -17,7 +16,6 @@ namespace irr
namespace video namespace video
{ {
//! Enumeration flags used to tell the video driver with setTextureCreationFlag in which format textures should be created. //! Enumeration flags used to tell the video driver with setTextureCreationFlag in which format textures should be created.
enum E_TEXTURE_CREATION_FLAG enum E_TEXTURE_CREATION_FLAG
{ {
@ -177,9 +175,9 @@ and write a warning or an error message to the output buffer.
class ITexture : public virtual IReferenceCounted class ITexture : public virtual IReferenceCounted
{ {
public: public:
//! constructor //! constructor
ITexture(const io::path& name, E_TEXTURE_TYPE type) : NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN), ITexture(const io::path &name, E_TEXTURE_TYPE type) :
NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN),
ColorFormat(ECF_UNKNOWN), Pitch(0), HasMipMaps(false), IsRenderTarget(false), Source(ETS_UNKNOWN), Type(type) ColorFormat(ECF_UNKNOWN), Pitch(0), HasMipMaps(false), IsRenderTarget(false), Source(ETS_UNKNOWN), Type(type)
{ {
} }
@ -288,15 +286,9 @@ public:
{ {
bool status = false; bool status = false;
switch (ColorFormat) switch (ColorFormat) {
{
case ECF_A8R8G8B8: case ECF_A8R8G8B8:
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
case ECF_DXT1:
case ECF_DXT2:
case ECF_DXT3:
case ECF_DXT4:
case ECF_DXT5:
case ECF_A16B16G16R16F: case ECF_A16B16G16R16F:
case ECF_A32B32G32R32F: case ECF_A32B32G32R32F:
status = true; status = true;
@ -312,7 +304,6 @@ public:
E_TEXTURE_TYPE getType() const { return Type; } E_TEXTURE_TYPE getType() const { return Type; }
protected: protected:
//! Helper function, helps to get the desired texture creation format from the flags. //! Helper function, helps to get the desired texture creation format from the flags.
/** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT, /** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT,
ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */ ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */
@ -342,9 +333,5 @@ protected:
E_TEXTURE_TYPE Type; E_TEXTURE_TYPE Type;
}; };
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_TIMER_H_INCLUDED__ #pragma once
#define __I_TIMER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
@ -64,5 +63,3 @@ public:
}; };
} // end namespace irr } // end namespace irr
#endif

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 __I_VERTEX_BUFFER_H_INCLUDED__ #pragma once
#define __I_VERTEX_BUFFER_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "irrArray.h" #include "irrArray.h"
@ -45,9 +44,5 @@ namespace scene
virtual u32 getChangedID() const = 0; virtual u32 getChangedID() const = 0;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

View File

@ -13,7 +13,6 @@
#include "dimension2d.h" #include "dimension2d.h"
#include "position2d.h" #include "position2d.h"
#include "IMeshBuffer.h" #include "IMeshBuffer.h"
#include "triangle3d.h"
#include "EDriverTypes.h" #include "EDriverTypes.h"
#include "EDriverFeatures.h" #include "EDriverFeatures.h"
#include "SExposedVideoData.h" #include "SExposedVideoData.h"
@ -108,12 +107,11 @@ namespace video
EFT_FOG_EXP2 EFT_FOG_EXP2
}; };
const c8* const FogTypeNames[] = const c8 *const FogTypeNames[] = {
{
"FogExp", "FogExp",
"FogLinear", "FogLinear",
"FogExp2", "FogExp2",
0 0,
}; };
//! Interface to driver which is able to perform 2d and 3d graphics functions. //! Interface to driver which is able to perform 2d and 3d graphics functions.
@ -127,7 +125,6 @@ namespace video
class IVideoDriver : public virtual IReferenceCounted class IVideoDriver : public virtual IReferenceCounted
{ {
public: public:
//! Applications must call this method before performing any rendering. //! Applications must call this method before performing any rendering.
/** This method can clear the back- and the z-buffer. /** This method can clear the back- and the z-buffer.
\param clearFlag A combination of the E_CLEAR_BUFFER_FLAG bit-flags. \param clearFlag A combination of the E_CLEAR_BUFFER_FLAG bit-flags.
@ -869,7 +866,7 @@ namespace video
//! Gets name of this video driver. //! Gets name of this video driver.
/** \return Returns the name of the video driver, e.g. in case /** \return Returns the name of the video driver, e.g. in case
of the Direct3D8 driver, it would return "Direct3D 8.1". */ of the Direct3D8 driver, it would return "Direct3D 8.1". */
virtual const wchar_t* getName() const =0; virtual const char *getName() const = 0;
//! Adds an external image loader to the engine. //! Adds an external image loader to the engine.
/** This is useful if the Irrlicht Engine should be able to load /** This is useful if the Irrlicht Engine should be able to load
@ -1208,5 +1205,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr

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 __I_WRITE_FILE_H_INCLUDED__ #pragma once
#define __I_WRITE_FILE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "path.h" #include "path.h"
@ -46,6 +45,3 @@ namespace io
} // end namespace io } // end namespace io
} // end namespace irr } // end namespace irr
#endif

View File

@ -5,8 +5,8 @@
#pragma once #pragma once
//! Identifies the IrrlichtMt fork customized for the Minetest engine //! Identifies the IrrlichtMt fork customized for the Minetest engine
#define IRRLICHT_VERSION_MT_REVISION 13 #define IRRLICHT_VERSION_MT_REVISION 15
#define IRRLICHT_VERSION_MT "mt13" #define IRRLICHT_VERSION_MT "mt15"
//! Irrlicht SDK Version //! Irrlicht SDK Version
#define IRRLICHT_VERSION_MAJOR 1 #define IRRLICHT_VERSION_MAJOR 1
@ -17,8 +17,6 @@
#define IRRLICHT_VERSION_SVN alpha #define IRRLICHT_VERSION_SVN alpha
#define IRRLICHT_SDK_VERSION "1.9.0" IRRLICHT_VERSION_MT #define IRRLICHT_SDK_VERSION "1.9.0" IRRLICHT_VERSION_MT
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
#ifdef _WIN32 #ifdef _WIN32
#define IRRCALLCONV __stdcall #define IRRCALLCONV __stdcall
#else #else

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 __I_IRRLICHT_DEVICE_H_INCLUDED__ #pragma once
#define __I_IRRLICHT_DEVICE_H_INCLUDED__
#include "IReferenceCounted.h" #include "IReferenceCounted.h"
#include "dimension2d.h" #include "dimension2d.h"
@ -21,19 +20,23 @@ namespace irr
class ILogger; class ILogger;
class IEventReceiver; class IEventReceiver;
namespace io { namespace io
{
class IFileSystem; class IFileSystem;
} // end namespace io } // end namespace io
namespace gui { namespace gui
{
class IGUIEnvironment; class IGUIEnvironment;
} // end namespace gui } // end namespace gui
namespace scene { namespace scene
{
class ISceneManager; class ISceneManager;
} // end namespace scene } // end namespace scene
namespace video { namespace video
{
class IContextManager; class IContextManager;
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver); extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
} // end namespace video } // end namespace video
@ -47,7 +50,6 @@ namespace irr
class IrrlichtDevice : public virtual IReferenceCounted class IrrlichtDevice : public virtual IReferenceCounted
{ {
public: public:
//! Runs the device. //! Runs the device.
/** Also increments the virtual timer by calling /** Also increments the virtual timer by calling
ITimer::tick();. You can prevent this ITimer::tick();. You can prevent this
@ -177,6 +179,13 @@ namespace irr
/** \return True if window is fullscreen. */ /** \return True if window is fullscreen. */
virtual bool isFullscreen() const = 0; virtual bool isFullscreen() const = 0;
//! Checks if the window could possibly be visible.
//! Currently, this only returns false when the activity is stopped on
//! Android. Note that for Android activities, "stopped" means something
//! different than you might expect (and also something different than
//! "paused"). Read the Android lifecycle documentation.
virtual bool isWindowVisible() const { return true; };
//! Get the current color format of the window //! Get the current color format of the window
/** \return Color format of the window. */ /** \return Color format of the window. */
virtual video::ECOLOR_FORMAT getColorFormat() const = 0; virtual video::ECOLOR_FORMAT getColorFormat() const = 0;
@ -330,6 +339,3 @@ namespace irr
}; };
} // end namespace irr } // end namespace irr
#endif

View File

@ -183,5 +183,3 @@ namespace irr
}; };
} // end namespace irr } // end namespace irr

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 __S_3D_VERTEX_H_INCLUDED__ #pragma once
#define __S_3D_VERTEX_H_INCLUDED__
#include "vector3d.h" #include "vector3d.h"
#include "vector2d.h" #include "vector2d.h"
@ -32,28 +31,29 @@ enum E_VERTEX_TYPE
}; };
//! Array holding the built in vertex type names //! Array holding the built in vertex type names
const char* const sBuiltInVertexTypeNames[] = const char *const sBuiltInVertexTypeNames[] = {
{
"standard", "standard",
"2tcoords", "2tcoords",
"tangents", "tangents",
0 0,
}; };
//! standard vertex used by the Irrlicht engine. //! standard vertex used by the Irrlicht engine.
struct S3DVertex struct S3DVertex
{ {
//! default constructor //! default constructor
S3DVertex() : Color(0xffffffff) {} constexpr S3DVertex() :
Color(0xffffffff) {}
//! constructor //! constructor
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) constexpr S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) :
: Pos(x,y,z), Normal(nx,ny,nz), Color(c), TCoords(tu,tv) {} Pos(x, y, z), Normal(nx, ny, nz), Color(c), TCoords(tu, tv) {}
//! constructor //! constructor
S3DVertex(const core::vector3df& pos, const core::vector3df& normal, constexpr S3DVertex(const core::vector3df &pos, const core::vector3df &normal,
SColor color, const core::vector2d<f32>& tcoords) SColor color, const core::vector2df &tcoords) :
: Pos(pos), Normal(normal), Color(color), TCoords(tcoords) {} Pos(pos),
Normal(normal), Color(color), TCoords(tcoords) {}
//! Position //! Position
core::vector3df Pos; core::vector3df Pos;
@ -65,21 +65,21 @@ struct S3DVertex
SColor Color; SColor Color;
//! Texture coordinates //! Texture coordinates
core::vector2d<f32> TCoords; core::vector2df TCoords;
bool operator==(const S3DVertex& other) const constexpr bool operator==(const S3DVertex &other) const
{ {
return ((Pos == other.Pos) && (Normal == other.Normal) && return ((Pos == other.Pos) && (Normal == other.Normal) &&
(Color == other.Color) && (TCoords == other.TCoords)); (Color == other.Color) && (TCoords == other.TCoords));
} }
bool operator!=(const S3DVertex& other) const constexpr bool operator!=(const S3DVertex &other) const
{ {
return ((Pos != other.Pos) || (Normal != other.Normal) || return ((Pos != other.Pos) || (Normal != other.Normal) ||
(Color != other.Color) || (TCoords != other.TCoords)); (Color != other.Color) || (TCoords != other.TCoords));
} }
bool operator<(const S3DVertex& other) const constexpr bool operator<(const S3DVertex &other) const
{ {
return ((Pos < other.Pos) || return ((Pos < other.Pos) ||
((Pos == other.Pos) && (Normal < other.Normal)) || ((Pos == other.Pos) && (Normal < other.Normal)) ||
@ -104,7 +104,6 @@ struct S3DVertex
} }
}; };
//! Vertex with two texture coordinates. //! Vertex with two texture coordinates.
/** Usually used for geometry with lightmaps /** Usually used for geometry with lightmaps
or other special materials. or other special materials.
@ -112,56 +111,65 @@ or other special materials.
struct S3DVertex2TCoords : public S3DVertex struct S3DVertex2TCoords : public S3DVertex
{ {
//! default constructor //! default constructor
S3DVertex2TCoords() : S3DVertex() {} constexpr S3DVertex2TCoords() :
S3DVertex() {}
//! constructor with two different texture coords, but no normal //! constructor with two different texture coords, but no normal
S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
: S3DVertex(x,y,z, 0.0f, 0.0f, 0.0f, c, tu,tv), TCoords2(tu2,tv2) {} S3DVertex(x, y, z, 0.0f, 0.0f, 0.0f, c, tu, tv), TCoords2(tu2, tv2) {}
//! constructor with two different texture coords, but no normal //! constructor with two different texture coords, but no normal
S3DVertex2TCoords(const core::vector3df& pos, SColor color, constexpr S3DVertex2TCoords(const core::vector3df &pos, SColor color,
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2) const core::vector2df &tcoords, const core::vector2df &tcoords2) :
: S3DVertex(pos, core::vector3df(), color, tcoords), TCoords2(tcoords2) {} S3DVertex(pos, core::vector3df(), color, tcoords),
TCoords2(tcoords2) {}
//! constructor with all values //! constructor with all values
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, const SColor& color, constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal, const SColor &color,
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2) const core::vector2df &tcoords, const core::vector2df &tcoords2) :
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords2) {} S3DVertex(pos, normal, color, tcoords),
TCoords2(tcoords2) {}
//! constructor with all values //! constructor with all values
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu2,tv2) {} SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
TCoords2(tu2, tv2) {}
//! constructor with the same texture coords and normal //! constructor with the same texture coords and normal
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu,tv) {} SColor c, f32 tu, f32 tv) :
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
TCoords2(tu, tv) {}
//! constructor with the same texture coords and normal //! constructor with the same texture coords and normal
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal,
SColor color, const core::vector2d<f32>& tcoords) SColor color, const core::vector2df &tcoords) :
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {} S3DVertex(pos, normal, color, tcoords),
TCoords2(tcoords) {}
//! constructor from S3DVertex //! constructor from S3DVertex
S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {} constexpr S3DVertex2TCoords(const S3DVertex &o) :
S3DVertex(o) {}
//! Second set of texture coordinates //! Second set of texture coordinates
core::vector2d<f32> TCoords2; core::vector2df TCoords2;
//! Equality operator //! Equality operator
bool operator==(const S3DVertex2TCoords& other) const constexpr bool operator==(const S3DVertex2TCoords &other) const
{ {
return ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(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 constexpr bool operator!=(const S3DVertex2TCoords &other) const
{ {
return ((static_cast<S3DVertex>(*this) != static_cast<const S3DVertex &>(other)) || return ((static_cast<S3DVertex>(*this) != static_cast<const S3DVertex &>(other)) ||
(TCoords2 != other.TCoords2)); (TCoords2 != other.TCoords2));
} }
bool operator<(const S3DVertex2TCoords& other) const constexpr bool operator<(const S3DVertex2TCoords &other) const
{ {
return ((static_cast<S3DVertex>(*this) < other) || return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (TCoords2 < other.TCoords2))); ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (TCoords2 < other.TCoords2)));
@ -184,7 +192,6 @@ struct S3DVertex2TCoords : public S3DVertex
} }
}; };
//! Vertex with a tangent and binormal vector. //! Vertex with a tangent and binormal vector.
/** Usually used for tangent space normal mapping. /** Usually used for tangent space normal mapping.
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2. Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
@ -192,30 +199,34 @@ struct S3DVertex2TCoords : public S3DVertex
struct S3DVertexTangents : public S3DVertex struct S3DVertexTangents : public S3DVertex
{ {
//! default constructor //! default constructor
S3DVertexTangents() : S3DVertex() { } S3DVertexTangents() :
S3DVertex() {}
//! constructor //! constructor
S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx=0.0f, f32 ny=0.0f, f32 nz=0.0f, constexpr S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx = 0.0f, f32 ny = 0.0f, f32 nz = 0.0f,
SColor c = 0xFFFFFFFF, f32 tu = 0.0f, f32 tv = 0.0f, SColor c = 0xFFFFFFFF, f32 tu = 0.0f, f32 tv = 0.0f,
f32 tanx = 0.0f, f32 tany = 0.0f, f32 tanz = 0.0f, f32 tanx = 0.0f, f32 tany = 0.0f, f32 tanz = 0.0f,
f32 bx=0.0f, f32 by=0.0f, f32 bz=0.0f) f32 bx = 0.0f, f32 by = 0.0f, f32 bz = 0.0f) :
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), Tangent(tanx,tany,tanz), Binormal(bx,by,bz) { } S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
Tangent(tanx, tany, tanz), Binormal(bx, by, bz) {}
//! constructor //! constructor
S3DVertexTangents(const core::vector3df& pos, SColor c, constexpr S3DVertexTangents(const core::vector3df &pos, SColor c,
const core::vector2df& tcoords) const core::vector2df &tcoords) :
: S3DVertex(pos, core::vector3df(), c, tcoords) { } S3DVertex(pos, core::vector3df(), c, tcoords) {}
//! constructor //! constructor
S3DVertexTangents(const core::vector3df& pos, constexpr S3DVertexTangents(const core::vector3df &pos,
const core::vector3df &normal, SColor c, const core::vector3df &normal, SColor c,
const core::vector2df &tcoords, const core::vector2df &tcoords,
const core::vector3df &tangent = core::vector3df(), const core::vector3df &tangent = core::vector3df(),
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 //! constructor from S3DVertex
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {} constexpr 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;
@ -223,21 +234,21 @@ struct S3DVertexTangents : public S3DVertex
//! Binormal vector (tangent x normal) //! Binormal vector (tangent x normal)
core::vector3df Binormal; core::vector3df Binormal;
bool operator==(const S3DVertexTangents& other) const constexpr bool operator==(const S3DVertexTangents &other) const
{ {
return ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(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 constexpr bool operator!=(const S3DVertexTangents &other) const
{ {
return ((static_cast<S3DVertex>(*this) != static_cast<const S3DVertex &>(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 constexpr bool operator<(const S3DVertexTangents &other) const
{ {
return ((static_cast<S3DVertex>(*this) < other) || return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (Tangent < other.Tangent)) || ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (Tangent < other.Tangent)) ||
@ -261,12 +272,9 @@ struct S3DVertexTangents : public S3DVertex
} }
}; };
inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType) inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
{ {
switch (vertexType) switch (vertexType) {
{
case video::EVT_2TCOORDS: case video::EVT_2TCOORDS:
return sizeof(video::S3DVertex2TCoords); return sizeof(video::S3DVertex2TCoords);
case video::EVT_TANGENTS: case video::EVT_TANGENTS:
@ -276,9 +284,5 @@ inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
} }
} }
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __S_ANIMATED_MESH_H_INCLUDED__ #pragma once
#define __S_ANIMATED_MESH_H_INCLUDED__
#include "IAnimatedMesh.h" #include "IAnimatedMesh.h"
#include "IMesh.h" #include "IMesh.h"
@ -19,7 +18,8 @@ namespace scene
struct SAnimatedMesh : public IAnimatedMesh struct SAnimatedMesh : public IAnimatedMesh
{ {
//! constructor //! constructor
SAnimatedMesh(scene::IMesh* mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) : IAnimatedMesh(), FramesPerSecond(25.f), Type(type) SAnimatedMesh(scene::IMesh *mesh = 0, scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) :
IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("SAnimatedMesh"); setDebugName("SAnimatedMesh");
@ -77,8 +77,7 @@ namespace scene
//! adds a Mesh //! adds a Mesh
void addMesh(IMesh *mesh) void addMesh(IMesh *mesh)
{ {
if (mesh) if (mesh) {
{
mesh->grab(); mesh->grab();
Meshes.push_back(mesh); Meshes.push_back(mesh);
} }
@ -174,9 +173,5 @@ namespace scene
E_ANIMATED_MESH_TYPE Type; E_ANIMATED_MESH_TYPE Type;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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 __COLOR_H_INCLUDED__ #pragma once
#define __COLOR_H_INCLUDED__
#include "irrTypes.h" #include "irrTypes.h"
#include "irrMath.h" #include "irrMath.h"
@ -37,50 +36,6 @@ namespace video
//! Warning: This tends to be BGRA in memory (it's ARGB on file, but with usual big-endian memory it's flipped) //! Warning: This tends to be BGRA in memory (it's ARGB on file, but with usual big-endian memory it's flipped)
ECF_A8R8G8B8, ECF_A8R8G8B8,
/** Compressed image formats. **/
//! DXT1 color format.
ECF_DXT1,
//! DXT2 color format.
ECF_DXT2,
//! DXT3 color format.
ECF_DXT3,
//! DXT4 color format.
ECF_DXT4,
//! DXT5 color format.
ECF_DXT5,
//! PVRTC RGB 2bpp.
ECF_PVRTC_RGB2,
//! PVRTC ARGB 2bpp.
ECF_PVRTC_ARGB2,
//! PVRTC RGB 4bpp.
ECF_PVRTC_RGB4,
//! PVRTC ARGB 4bpp.
ECF_PVRTC_ARGB4,
//! PVRTC2 ARGB 2bpp.
ECF_PVRTC2_ARGB2,
//! PVRTC2 ARGB 4bpp.
ECF_PVRTC2_ARGB4,
//! ETC1 RGB.
ECF_ETC1,
//! ETC2 RGB.
ECF_ETC2_RGB,
//! ETC2 ARGB.
ECF_ETC2_ARGB,
/** The following formats may only be used for render target textures. */ /** The following formats may only be used for render target textures. */
/** Floating point formats. */ /** Floating point formats. */
@ -133,26 +88,11 @@ namespace video
}; };
//! Names for ECOLOR_FORMAT types //! Names for ECOLOR_FORMAT types
const c8* const ColorFormatNames[ECF_UNKNOWN+2] = const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = {
{
"A1R5G5B5", "A1R5G5B5",
"R5G6B5", "R5G6B5",
"R8G8B8", "R8G8B8",
"A8R8G8B8", "A8R8G8B8",
"DXT1",
"DXT2",
"DXT3",
"DXT4",
"DXT5",
"PVRTC_RGB2",
"PVRTC_ARGB2",
"PVRTC_RGB4",
"PVRTC_ARGB4",
"PVRTC2_ARGB2",
"PVRTC2_ARGB4",
"ETC1",
"ETC2_RGB",
"ETC2_ARGB",
"R16F", "R16F",
"G16R16F", "G16R16F",
"A16B16G16R16F", "A16B16G16R16F",
@ -167,10 +107,9 @@ namespace video
"D32", "D32",
"D24S8", "D24S8",
"UNKNOWN", "UNKNOWN",
0 0,
}; };
//! Creates a 16 bit A1R5G5B5 color //! Creates a 16 bit A1R5G5B5 color
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF) inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF)
{ {
@ -180,14 +119,12 @@ namespace video
(b & 0xF8) >> 3); (b & 0xF8) >> 3);
} }
//! Creates a 16 bit A1R5G5B5 color //! Creates a 16 bit A1R5G5B5 color
inline u16 RGB16(u32 r, u32 g, u32 b) inline u16 RGB16(u32 r, u32 g, u32 b)
{ {
return RGBA16(r, g, b); return RGBA16(r, g, b);
} }
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values //! Creates a 16bit A1R5G5B5 color, based on 16bit input values
inline u16 RGB16from16(u16 r, u16 g, u16 b) inline u16 RGB16from16(u16 r, u16 g, u16 b)
{ {
@ -197,7 +134,6 @@ namespace video
(b & 0x1F)); (b & 0x1F));
} }
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color //! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
inline u16 X8R8G8B8toA1R5G5B5(u32 color) inline u16 X8R8G8B8toA1R5G5B5(u32 color)
{ {
@ -207,7 +143,6 @@ namespace video
(color & 0x000000F8) >> 3); (color & 0x000000F8) >> 3);
} }
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color //! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
inline u16 A8R8G8B8toA1R5G5B5(u32 color) inline u16 A8R8G8B8toA1R5G5B5(u32 color)
{ {
@ -217,7 +152,6 @@ namespace video
(color & 0x000000F8) >> 3); (color & 0x000000F8) >> 3);
} }
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color //! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
inline u16 A8R8G8B8toR5G6B5(u32 color) inline u16 A8R8G8B8toR5G6B5(u32 color)
{ {
@ -226,7 +160,6 @@ namespace video
(color & 0x000000F8) >> 3); (color & 0x000000F8) >> 3);
} }
//! Convert A8R8G8B8 Color from A1R5G5B5 color //! Convert A8R8G8B8 Color from A1R5G5B5 color
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */ /** build a nicer 32bit Color by extending dest lower bits with source high bits. */
inline u32 A1R5G5B5toA8R8G8B8(u16 color) inline u32 A1R5G5B5toA8R8G8B8(u16 color)
@ -234,11 +167,9 @@ namespace video
return (((-((s32)color & 0x00008000) >> (s32)31) & 0xFF000000) | return (((-((s32)color & 0x00008000) >> (s32)31) & 0xFF000000) |
((color & 0x00007C00) << 9) | ((color & 0x00007000) << 4) | ((color & 0x00007C00) << 9) | ((color & 0x00007000) << 4) |
((color & 0x000003E0) << 6) | ((color & 0x00000380) << 1) | ((color & 0x000003E0) << 6) | ((color & 0x00000380) << 1) |
(( color & 0x0000001F ) << 3) | (( color & 0x0000001C ) >> 2) ((color & 0x0000001F) << 3) | ((color & 0x0000001C) >> 2));
);
} }
//! Returns A8R8G8B8 Color from R5G6B5 color //! Returns A8R8G8B8 Color from R5G6B5 color
inline u32 R5G6B5toA8R8G8B8(u16 color) inline u32 R5G6B5toA8R8G8B8(u16 color)
{ {
@ -248,22 +179,18 @@ namespace video
((color & 0x001F) << 3); ((color & 0x001F) << 3);
} }
//! Returns A1R5G5B5 Color from R5G6B5 color //! Returns A1R5G5B5 Color from R5G6B5 color
inline u16 R5G6B5toA1R5G5B5(u16 color) inline u16 R5G6B5toA1R5G5B5(u16 color)
{ {
return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F)); return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F));
} }
//! Returns R5G6B5 Color from A1R5G5B5 color //! Returns R5G6B5 Color from A1R5G5B5 color
inline u16 A1R5G5B5toR5G6B5(u16 color) inline u16 A1R5G5B5toR5G6B5(u16 color)
{ {
return (((color & 0x7FE0) << 1) | (color & 0x1F)); return (((color & 0x7FE0) << 1) | (color & 0x1F));
} }
//! Returns the alpha component from A1R5G5B5 color //! Returns the alpha component from A1R5G5B5 color
/** In Irrlicht, alpha refers to opacity. /** In Irrlicht, alpha refers to opacity.
\return The alpha value of the color. 0 is transparent, 1 is opaque. */ \return The alpha value of the color. 0 is transparent, 1 is opaque. */
@ -272,7 +199,6 @@ namespace video
return ((color >> 15) & 0x1); return ((color >> 15) & 0x1);
} }
//! Returns the red component from A1R5G5B5 color. //! Returns the red component from A1R5G5B5 color.
/** Shift left by 3 to get 8 bit value. */ /** Shift left by 3 to get 8 bit value. */
inline u32 getRed(u16 color) inline u32 getRed(u16 color)
@ -280,7 +206,6 @@ namespace video
return ((color >> 10) & 0x1F); return ((color >> 10) & 0x1F);
} }
//! Returns the green component from A1R5G5B5 color //! Returns the green component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */ /** Shift left by 3 to get 8 bit value. */
inline u32 getGreen(u16 color) inline u32 getGreen(u16 color)
@ -288,7 +213,6 @@ namespace video
return ((color >> 5) & 0x1F); return ((color >> 5) & 0x1F);
} }
//! Returns the blue component from A1R5G5B5 color //! Returns the blue component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */ /** Shift left by 3 to get 8 bit value. */
inline u32 getBlue(u16 color) inline u32 getBlue(u16 color)
@ -296,14 +220,12 @@ namespace video
return (color & 0x1F); return (color & 0x1F);
} }
//! Returns the average from a 16 bit A1R5G5B5 color //! Returns the average from a 16 bit A1R5G5B5 color
inline s32 getAverage(s16 color) inline s32 getAverage(s16 color)
{ {
return ((getRed(color) << 3) + (getGreen(color) << 3) + (getBlue(color) << 3)) / 3; return ((getRed(color) << 3) + (getGreen(color) << 3) + (getBlue(color) << 3)) / 3;
} }
//! Class representing a 32 bit ARGB color. //! Class representing a 32 bit ARGB color.
/** The color values for alpha, red, green, and blue are /** The color values for alpha, red, green, and blue are
stored in a single u32. So all four values may be between 0 and 255. stored in a single u32. So all four values may be between 0 and 255.
@ -316,19 +238,18 @@ namespace video
class SColor class SColor
{ {
public: public:
//! Constructor of the Color. Does nothing. //! Constructor of the Color. Does nothing.
/** The color value is not initialized to save time. */ /** The color value is not initialized to save time. */
SColor() {} SColor() {}
//! Constructs the color from 4 values representing the alpha, red, green and blue component. //! Constructs the color from 4 values representing the alpha, red, green and blue component.
/** Must be values between 0 and 255. */ /** Must be values between 0 and 255. */
SColor (u32 a, u32 r, u32 g, u32 b) constexpr SColor(u32 a, u32 r, u32 g, u32 b) :
: color(((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff)) {} color(((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)) {}
//! Constructs the color from a 32 bit value. Could be another color. //! Constructs the color from a 32 bit value. Could be another color.
SColor(u32 clr) constexpr SColor(u32 clr) :
: color(clr) {} color(clr) {}
//! Returns the alpha component of the color. //! Returns the alpha component of the color.
/** The alpha component defines how opaque a color is. /** The alpha component defines how opaque a color is.
@ -477,13 +398,17 @@ namespace video
return SColor( return SColor(
core::clamp(core::floor32( core::clamp(core::floor32(
getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2 ), 0, 255 ), getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2),
0, 255),
core::clamp(core::floor32( core::clamp(core::floor32(
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2 ), 0, 255 ), getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2),
0, 255),
core::clamp(core::floor32( core::clamp(core::floor32(
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2 ), 0, 255 ), getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2),
0, 255),
core::clamp(core::floor32( core::clamp(core::floor32(
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2 ), 0, 255 )); getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2),
0, 255));
} }
//! set the color by expecting data in the given format //! set the color by expecting data in the given format
@ -492,8 +417,7 @@ namespace video
*/ */
void setData(const void *data, ECOLOR_FORMAT format) void setData(const void *data, ECOLOR_FORMAT format)
{ {
switch (format) switch (format) {
{
case ECF_A1R5G5B5: case ECF_A1R5G5B5:
color = A1R5G5B5toA8R8G8B8(*(u16 *)data); color = A1R5G5B5toA8R8G8B8(*(u16 *)data);
break; break;
@ -503,12 +427,10 @@ namespace video
case ECF_A8R8G8B8: case ECF_A8R8G8B8:
color = *(u32 *)data; color = *(u32 *)data;
break; break;
case ECF_R8G8B8: case ECF_R8G8B8: {
{
const u8 *p = (u8 *)data; const u8 *p = (u8 *)data;
set(255, p[0], p[1], p[2]); set(255, p[0], p[1], p[2]);
} } break;
break;
default: default:
color = 0xffffffff; color = 0xffffffff;
break; break;
@ -521,37 +443,28 @@ namespace video
*/ */
void getData(void *data, ECOLOR_FORMAT format) const void getData(void *data, ECOLOR_FORMAT format) const
{ {
switch(format) switch (format) {
{ case ECF_A1R5G5B5: {
case ECF_A1R5G5B5:
{
u16 *dest = (u16 *)data; u16 *dest = (u16 *)data;
*dest = video::A8R8G8B8toA1R5G5B5(color); *dest = video::A8R8G8B8toA1R5G5B5(color);
} } break;
break;
case ECF_R5G6B5: case ECF_R5G6B5: {
{
u16 *dest = (u16 *)data; u16 *dest = (u16 *)data;
*dest = video::A8R8G8B8toR5G6B5(color); *dest = video::A8R8G8B8toR5G6B5(color);
} } break;
break;
case ECF_R8G8B8: case ECF_R8G8B8: {
{
u8 *dest = (u8 *)data; u8 *dest = (u8 *)data;
dest[0] = (u8)getRed(); dest[0] = (u8)getRed();
dest[1] = (u8)getGreen(); dest[1] = (u8)getGreen();
dest[2] = (u8)getBlue(); dest[2] = (u8)getBlue();
} } break;
break;
case ECF_A8R8G8B8: case ECF_A8R8G8B8: {
{
u32 *dest = (u32 *)data; u32 *dest = (u32 *)data;
*dest = color; *dest = color;
} } break;
break;
default: default:
break; break;
@ -562,7 +475,6 @@ namespace video
u32 color; u32 color;
}; };
//! Class representing a color with four floats. //! Class representing a color with four floats.
/** The color values for red, green, blue /** The color values for red, green, blue
and alpha are each stored in a 32 bit floating point variable. and alpha are each stored in a 32 bit floating point variable.
@ -575,7 +487,8 @@ namespace video
public: public:
//! Default constructor for SColorf. //! Default constructor for SColorf.
/** Sets red, green and blue to 0.0f and alpha to 1.0f. */ /** Sets red, green and blue to 0.0f and alpha to 1.0f. */
SColorf() : r(0.0f), g(0.0f), b(0.0f), a(1.0f) {} SColorf() :
r(0.0f), g(0.0f), b(0.0f), a(1.0f) {}
//! Constructs a color from up to four color values: red, green, blue, and alpha. //! Constructs a color from up to four color values: red, green, blue, and alpha.
/** \param r: Red color component. Should be a value between /** \param r: Red color component. Should be a value between
@ -588,7 +501,8 @@ namespace video
component defines how transparent a color should be. Has to be component defines how transparent a color should be. Has to be
a value between 0.0f and 1.0f, 1.0f means not transparent a value between 0.0f and 1.0f, 1.0f means not transparent
(opaque), 0.0f means fully transparent. */ (opaque), 0.0f means fully transparent. */
SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) : r(r), g(g), b(b), a(a) {} SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) :
r(r), g(g), b(b), a(a) {}
//! Constructs a color from 32 bit Color. //! Constructs a color from 32 bit Color.
/** \param c: 32 bit color from which this SColorf class is /** \param c: 32 bit color from which this SColorf class is
@ -615,7 +529,12 @@ namespace video
no green (=black) and 1.0f, meaning full green. no green (=black) and 1.0f, meaning full green.
\param bb: Blue color component. Should be a value between 0.0f meaning \param bb: Blue color component. Should be a value between 0.0f meaning
no blue (=black) and 1.0f, meaning full blue. */ no blue (=black) and 1.0f, meaning full blue. */
void set(f32 rr, f32 gg, f32 bb) {r = rr; g =gg; b = bb; } void set(f32 rr, f32 gg, f32 bb)
{
r = rr;
g = gg;
b = bb;
}
//! Sets all four color components to new values at once. //! Sets all four color components to new values at once.
/** \param aa: Alpha component. Should be a value between 0.0f meaning /** \param aa: Alpha component. Should be a value between 0.0f meaning
@ -626,7 +545,13 @@ namespace video
no green and 1.0f, meaning full green. no green and 1.0f, meaning full green.
\param bb: Blue color component. Should be a value between 0.0f meaning \param bb: Blue color component. Should be a value between 0.0f meaning
no blue and 1.0f, meaning full blue. */ no blue and 1.0f, meaning full blue. */
void set(f32 aa, f32 rr, f32 gg, f32 bb) {a = aa; r = rr; g =gg; b = bb; } void set(f32 aa, f32 rr, f32 gg, f32 bb)
{
a = aa;
r = rr;
g = gg;
b = bb;
}
//! Interpolates the color with a f32 value to another color //! Interpolates the color with a f32 value to another color
/** \param other: Other color /** \param other: Other color
@ -660,16 +585,22 @@ namespace video
a * mul0 + c1.a * mul1 + c2.a * mul2); a * mul0 + c1.a * mul1 + c2.a * mul2);
} }
//! Sets a color component by index. R=0, G=1, B=2, A=3 //! Sets a color component by index. R=0, G=1, B=2, A=3
void setColorComponentValue(s32 index, f32 value) void setColorComponentValue(s32 index, f32 value)
{ {
switch(index) switch (index) {
{ case 0:
case 0: r = value; break; r = value;
case 1: g = value; break; break;
case 2: b = value; break; case 1:
case 3: a = value; break; g = value;
break;
case 2:
b = value;
break;
case 3:
a = value;
break;
} }
} }
@ -698,7 +629,6 @@ namespace video
f32 a; f32 a;
}; };
//! Class representing a color in HSL format //! Class representing a color in HSL format
/** The color values for hue, saturation, luminance /** The color values for hue, saturation, luminance
are stored in 32bit floating point variables. Hue is in range [0,360], are stored in 32bit floating point variables. Hue is in range [0,360],
@ -707,8 +637,8 @@ namespace video
class SColorHSL class SColorHSL
{ {
public: public:
SColorHSL ( f32 h = 0.f, f32 s = 0.f, f32 l = 0.f ) constexpr SColorHSL(f32 h = 0.f, f32 s = 0.f, f32 l = 0.f) :
: Hue ( h ), Saturation ( s ), Luminance ( l ) {} Hue(h), Saturation(s), Luminance(l) {}
void fromRGB(const SColorf &color); void fromRGB(const SColorf &color);
void toRGB(SColorf &color) const; void toRGB(SColorf &color) const;
@ -719,7 +649,6 @@ namespace video
private: private:
inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const; inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const;
}; };
inline void SColorHSL::fromRGB(const SColorf &color) inline void SColorHSL::fromRGB(const SColorf &color)
@ -727,20 +656,16 @@ namespace video
const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue()); const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue());
const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue()); const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue());
Luminance = (maxVal + minVal) * 50; Luminance = (maxVal + minVal) * 50;
if (core::equals(maxVal, minVal)) if (core::equals(maxVal, minVal)) {
{
Hue = 0.f; Hue = 0.f;
Saturation = 0.f; Saturation = 0.f;
return; return;
} }
const f32 delta = maxVal - minVal; const f32 delta = maxVal - minVal;
if ( Luminance <= 50 ) if (Luminance <= 50) {
{
Saturation = (delta) / (maxVal + minVal); Saturation = (delta) / (maxVal + minVal);
} } else {
else
{
Saturation = (delta) / (2 - maxVal - minVal); Saturation = (delta) / (2 - maxVal - minVal);
} }
Saturation *= 100; Saturation *= 100;
@ -757,24 +682,19 @@ namespace video
Hue += 360; Hue += 360;
} }
inline void SColorHSL::toRGB(SColorf &color) const inline void SColorHSL::toRGB(SColorf &color) const
{ {
const f32 l = Luminance / 100; const f32 l = Luminance / 100;
if (core::iszero(Saturation)) // grey if (core::iszero(Saturation)) { // grey
{
color.set(l, l, l); color.set(l, l, l);
return; return;
} }
f32 rm2; f32 rm2;
if ( Luminance <= 50 ) if (Luminance <= 50) {
{
rm2 = l + l * (Saturation / 100); rm2 = l + l * (Saturation / 100);
} } else {
else
{
rm2 = l + (1 - l) * (Saturation / 100); rm2 = l + (1 - l) * (Saturation / 100);
} }
@ -783,11 +703,9 @@ namespace video
const f32 h = Hue / 360.0f; const f32 h = Hue / 360.0f;
color.set(toRGB1(rm1, rm2, h + 1.f / 3.f), color.set(toRGB1(rm1, rm2, h + 1.f / 3.f),
toRGB1(rm1, rm2, h), toRGB1(rm1, rm2, h),
toRGB1(rm1, rm2, h - 1.f/3.f) toRGB1(rm1, rm2, h - 1.f / 3.f));
);
} }
// algorithm from Foley/Van-Dam // algorithm from Foley/Van-Dam
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
{ {
@ -808,5 +726,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __S_EXPOSED_VIDEO_DATA_H_INCLUDED__ #pragma once
#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
namespace irr namespace irr
{ {
@ -18,8 +17,18 @@ you are using the software or the null device.
*/ */
struct SExposedVideoData struct SExposedVideoData
{ {
SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;} SExposedVideoData()
explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;} {
OpenGLWin32.HDc = 0;
OpenGLWin32.HRc = 0;
OpenGLWin32.HWnd = 0;
}
explicit SExposedVideoData(void *Window)
{
OpenGLWin32.HDc = 0;
OpenGLWin32.HRc = 0;
OpenGLWin32.HWnd = Window;
}
struct SOpenGLWin32 struct SOpenGLWin32
{ {
@ -78,7 +87,3 @@ struct SExposedVideoData
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__ #pragma once
#define __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__
#include "EDriverTypes.h" #include "EDriverTypes.h"
#include "EDeviceTypes.h" #include "EDeviceTypes.h"
@ -35,10 +34,8 @@ namespace irr
Stencilbuffer(true), Stencilbuffer(true),
Vsync(false), Vsync(false),
AntiAlias(0), AntiAlias(0),
HandleSRGB(false),
WithAlphaChannel(false), WithAlphaChannel(false),
Doublebuffer(true), Doublebuffer(true),
IgnoreInput(false),
Stereobuffer(false), Stereobuffer(false),
EventReceiver(0), EventReceiver(0),
WindowId(0), WindowId(0),
@ -59,7 +56,9 @@ namespace irr
SIrrlichtCreationParameters(const SIrrlichtCreationParameters &other) : SIrrlichtCreationParameters(const SIrrlichtCreationParameters &other) :
SDK_version_do_not_use(IRRLICHT_SDK_VERSION) SDK_version_do_not_use(IRRLICHT_SDK_VERSION)
{*this = other;} {
*this = other;
}
SIrrlichtCreationParameters &operator=(const SIrrlichtCreationParameters &other) SIrrlichtCreationParameters &operator=(const SIrrlichtCreationParameters &other)
{ {
@ -75,10 +74,8 @@ namespace irr
Stencilbuffer = other.Stencilbuffer; Stencilbuffer = other.Stencilbuffer;
Vsync = other.Vsync; Vsync = other.Vsync;
AntiAlias = other.AntiAlias; AntiAlias = other.AntiAlias;
HandleSRGB = other.HandleSRGB;
WithAlphaChannel = other.WithAlphaChannel; WithAlphaChannel = other.WithAlphaChannel;
Doublebuffer = other.Doublebuffer; Doublebuffer = other.Doublebuffer;
IgnoreInput = other.IgnoreInput;
Stereobuffer = other.Stereobuffer; Stereobuffer = other.Stereobuffer;
EventReceiver = other.EventReceiver; EventReceiver = other.EventReceiver;
WindowId = other.WindowId; WindowId = other.WindowId;
@ -159,21 +156,6 @@ namespace irr
Default value: 0 - disabled */ Default value: 0 - disabled */
u8 AntiAlias; u8 AntiAlias;
//! Flag to enable proper sRGB and linear color handling
/** In most situations, it is desirable to have the color handling in
non-linear sRGB color space, and only do the intermediate color
calculations in linear RGB space. If this flag is enabled, the device and
driver try to assure that all color input and output are color corrected
and only the internal color representation is linear. This means, that
the color output is properly gamma-adjusted to provide the brighter
colors for monitor display. And that blending and lighting give a more
natural look, due to proper conversion from non-linear colors into linear
color space for blend operations. If this flag is enabled, all texture colors
(which are usually in sRGB space) are correctly displayed. However vertex colors
and other explicitly set values have to be manually encoded in linear color space.
Default value: false. */
bool HandleSRGB;
//! Whether the main framebuffer uses an alpha channel. //! Whether the main framebuffer uses an alpha channel.
/** In some situations it might be desirable to get a color /** In some situations it might be desirable to get a color
buffer with an alpha channel, e.g. when rendering into a buffer with an alpha channel, e.g. when rendering into a
@ -193,13 +175,6 @@ namespace irr
single buffers. Default value: true */ single buffers. Default value: true */
bool Doublebuffer; bool Doublebuffer;
//! Specifies if the device should ignore input events
/** This is only relevant when using external I/O handlers.
External windows need to take care of this themselves.
Currently only supported by X11.
Default value: false */
bool IgnoreInput;
//! Specifies if the device should use stereo buffers //! Specifies if the device should use stereo buffers
/** Some high-end gfx cards support two framebuffers for direct /** Some high-end gfx cards support two framebuffers for direct
support of stereoscopic output devices. If this flag is set the support of stereoscopic output devices. If this flag is set the
@ -289,8 +264,4 @@ namespace irr
irr::io::path OGLES2ShaderPath; irr::io::path OGLES2ShaderPath;
}; };
} // end namespace irr } // end namespace irr
#endif

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 __S_MATERIAL_H_INCLUDED__ #pragma once
#define __S_MATERIAL_H_INCLUDED__
#include "SColor.h" #include "SColor.h"
#include "matrix4.h" #include "matrix4.h"
@ -164,8 +163,7 @@ namespace video
//! has blend factor alphablending //! has blend factor alphablending
inline bool textureBlendFunc_hasAlpha(const E_BLEND_FACTOR factor) inline bool textureBlendFunc_hasAlpha(const E_BLEND_FACTOR factor)
{ {
switch ( factor ) switch (factor) {
{
case EBF_SRC_ALPHA: case EBF_SRC_ALPHA:
case EBF_ONE_MINUS_SRC_ALPHA: case EBF_ONE_MINUS_SRC_ALPHA:
case EBF_DST_ALPHA: case EBF_DST_ALPHA:
@ -177,7 +175,6 @@ namespace video
} }
} }
//! These flags are used to specify the anti-aliasing and smoothing modes //! These flags are used to specify the anti-aliasing and smoothing modes
/** Techniques supported are multisampling, geometry smoothing, and alpha /** Techniques supported are multisampling, geometry smoothing, and alpha
to coverage. to coverage.
@ -193,16 +190,9 @@ namespace video
EAAM_SIMPLE = 1, EAAM_SIMPLE = 1,
//! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode //! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode
EAAM_QUALITY = 3, EAAM_QUALITY = 3,
//! Line smoothing
//! Careful, enabling this can lead to software emulation under OpenGL
EAAM_LINE_SMOOTH=4,
//! point smoothing, often in software and slow, only with OpenGL
EAAM_POINT_SMOOTH=8,
//! All typical anti-alias and smooth modes
EAAM_FULL_BASIC=15,
//! Enhanced anti-aliasing for transparent materials //! Enhanced anti-aliasing for transparent materials
/** Usually used with EMT_TRANSPARENT_ALPHA_CHANNEL_REF and multisampling. */ /** Usually used with EMT_TRANSPARENT_ALPHA_CHANNEL_REF and multisampling. */
EAAM_ALPHA_TO_COVERAGE=16 EAAM_ALPHA_TO_COVERAGE = 4
}; };
//! These flags allow to define the interpretation of vertex color when lighting is enabled //! These flags allow to define the interpretation of vertex color when lighting is enabled
@ -229,11 +219,10 @@ namespace video
}; };
//! Names for polygon offset direction //! Names for polygon offset direction
const c8* const PolygonOffsetDirectionNames[] = const c8 *const PolygonOffsetDirectionNames[] = {
{
"Back", "Back",
"Front", "Front",
0 0,
}; };
//! For SMaterial.ZWriteEnable //! For SMaterial.ZWriteEnable
@ -254,16 +243,13 @@ namespace video
}; };
//! Names for E_ZWRITE //! Names for E_ZWRITE
const c8* const ZWriteNames[] = const c8 *const ZWriteNames[] = {
{
"Off", "Off",
"Auto", "Auto",
"On", "On",
0 0,
}; };
//! Maximum number of texture an SMaterial can have. //! Maximum number of texture an SMaterial can have.
/** 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.
@ -287,7 +273,8 @@ namespace video
GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO), GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false), BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
NormalizeNormals(false), UseMipMaps(true) NormalizeNormals(false), UseMipMaps(true)
{ } {
}
//! Texture layer array. //! Texture layer array.
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES]; SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
@ -438,7 +425,8 @@ namespace video
/** Useful for setting properties which are not per material, but per /** Useful for setting properties which are not per material, but per
texture layer, e.g. bilinear filtering. */ texture layer, e.g. bilinear filtering. */
template <typename F> template <typename F>
void forEachTexture(F &&fn) { void forEachTexture(F &&fn)
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) { for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
fn(TextureLayers[i]); fn(TextureLayers[i]);
} }
@ -523,10 +511,8 @@ namespace video
BlendFactor != b.BlendFactor || BlendFactor != b.BlendFactor ||
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 |= (TextureLayers[i] != b.TextureLayers[i]); different |= (TextureLayers[i] != b.TextureLayers[i]);
} }
return different; return different;
@ -536,13 +522,14 @@ namespace video
/** \param b Material to compare to. /** \param b Material to compare to.
\return True if the materials are equal, else false. */ \return True if the materials are equal, else false. */
inline bool operator==(const SMaterial &b) const inline bool operator==(const SMaterial &b) const
{ return !(b!=*this); } {
return !(b != *this);
}
//! Check if material needs alpha blending //! Check if material needs alpha blending
bool isAlphaBlendOperation() const bool isAlphaBlendOperation() const
{ {
if (BlendOperation != EBO_NONE && BlendFactor != 0.f) if (BlendOperation != EBO_NONE && BlendFactor != 0.f) {
{
E_BLEND_FACTOR srcRGBFact = EBF_ZERO; E_BLEND_FACTOR srcRGBFact = EBF_ZERO;
E_BLEND_FACTOR dstRGBFact = EBF_ZERO; E_BLEND_FACTOR dstRGBFact = EBF_ZERO;
E_BLEND_FACTOR srcAlphaFact = EBF_ZERO; E_BLEND_FACTOR srcAlphaFact = EBF_ZERO;
@ -553,8 +540,7 @@ namespace video
unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, BlendFactor); unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, BlendFactor);
if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) || if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) ||
textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact)) textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact)) {
{
return true; return true;
} }
} }
@ -578,5 +564,3 @@ namespace video
IRRLICHT_API extern SMaterial IdentityMaterial; IRRLICHT_API extern SMaterial IdentityMaterial;
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif

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 __S_MATERIAL_LAYER_H_INCLUDED__ #pragma once
#define __S_MATERIAL_LAYER_H_INCLUDED__
#include "matrix4.h" #include "matrix4.h"
@ -43,11 +42,11 @@ 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. //! Texture minification filter.
/** Used when scaling textures down. See the documentation on OpenGL's /** Used when scaling textures down. See the documentation on OpenGL's
`GL_TEXTURE_MIN_FILTER` for more information. */ `GL_TEXTURE_MIN_FILTER` for more information. */
enum E_TEXTURE_MIN_FILTER { enum E_TEXTURE_MIN_FILTER
{
//! Aka nearest-neighbor. //! Aka nearest-neighbor.
ETMINF_NEAREST_MIPMAP_NEAREST = 0, ETMINF_NEAREST_MIPMAP_NEAREST = 0,
//! Aka bilinear. //! Aka bilinear.
@ -62,7 +61,8 @@ namespace video
/** Used when scaling textures up. See the documentation on OpenGL's /** Used when scaling textures up. See the documentation on OpenGL's
`GL_TEXTURE_MAG_FILTER` for more information. `GL_TEXTURE_MAG_FILTER` for more information.
Note that mipmaps are only used for minification, not for magnification. */ Note that mipmaps are only used for minification, not for magnification. */
enum E_TEXTURE_MAG_FILTER { enum E_TEXTURE_MAG_FILTER
{
//! Aka nearest-neighbor. //! Aka nearest-neighbor.
ETMAGF_NEAREST = 0, ETMAGF_NEAREST = 0,
//! Aka bilinear. //! Aka bilinear.
@ -75,7 +75,8 @@ 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),
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0) MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
{ {
} }
@ -92,8 +93,7 @@ namespace video
//! Destructor //! Destructor
~SMaterialLayer() ~SMaterialLayer()
{ {
if ( TextureMatrix ) if (TextureMatrix) {
{
delete TextureMatrix; delete TextureMatrix;
} }
} }
@ -108,23 +108,17 @@ namespace video
return *this; return *this;
Texture = other.Texture; Texture = other.Texture;
if (TextureMatrix) if (TextureMatrix) {
{
if (other.TextureMatrix) if (other.TextureMatrix)
*TextureMatrix = *other.TextureMatrix; *TextureMatrix = *other.TextureMatrix;
else else {
{
delete TextureMatrix; delete TextureMatrix;
TextureMatrix = 0; TextureMatrix = 0;
} }
} } else {
else if (other.TextureMatrix) {
{
if (other.TextureMatrix)
{
TextureMatrix = new core::matrix4(*other.TextureMatrix); TextureMatrix = new core::matrix4(*other.TextureMatrix);
} } else
else
TextureMatrix = 0; TextureMatrix = 0;
} }
TextureWrapU = other.TextureWrapU; TextureWrapU = other.TextureWrapU;
@ -142,8 +136,7 @@ namespace video
/** \return Texture matrix of this layer. */ /** \return Texture matrix of this layer. */
core::matrix4 &getTextureMatrix() core::matrix4 &getTextureMatrix()
{ {
if (!TextureMatrix) if (!TextureMatrix) {
{
TextureMatrix = new core::matrix4(); TextureMatrix = new core::matrix4();
} }
return *TextureMatrix; return *TextureMatrix;
@ -165,11 +158,9 @@ namespace video
\param mat New texture matrix for this layer. */ \param mat New texture matrix for this layer. */
void setTextureMatrix(const core::matrix4 &mat) void setTextureMatrix(const core::matrix4 &mat)
{ {
if (!TextureMatrix) if (!TextureMatrix) {
{
TextureMatrix = new core::matrix4(mat); TextureMatrix = new core::matrix4(mat);
} } else
else
*TextureMatrix = mat; *TextureMatrix = mat;
} }
@ -199,7 +190,9 @@ namespace video
/** \param b Layer to compare to. /** \param b Layer to compare to.
\return True if layers are equal, else false. */ \return True if layers are equal, else false. */
inline bool operator==(const SMaterialLayer &b) const inline bool operator==(const SMaterialLayer &b) const
{ return !(b!=*this); } {
return !(b != *this);
}
//! Texture //! Texture
ITexture *Texture; ITexture *Texture;
@ -243,5 +236,3 @@ namespace video
} // end namespace video } // end namespace video
} // end namespace irr } // end namespace irr
#endif // __S_MATERIAL_LAYER_H_INCLUDED__

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 __S_MESH_H_INCLUDED__ #pragma once
#define __S_MESH_H_INCLUDED__
#include "IMesh.h" #include "IMesh.h"
#include "IMeshBuffer.h" #include "IMeshBuffer.h"
@ -42,7 +41,6 @@ namespace scene
BoundingBox.reset(0.f, 0.f, 0.f); BoundingBox.reset(0.f, 0.f, 0.f);
} }
//! returns amount of mesh buffers. //! returns amount of mesh buffers.
u32 getMeshBufferCount() const override u32 getMeshBufferCount() const override
{ {
@ -59,8 +57,7 @@ namespace scene
/** reverse search */ /** reverse search */
IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const 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) {
{
if (material == MeshBuffers[i]->getMaterial()) if (material == MeshBuffers[i]->getMaterial())
return MeshBuffers[i]; return MeshBuffers[i];
} }
@ -84,21 +81,15 @@ namespace scene
void recalculateBoundingBox() void recalculateBoundingBox()
{ {
bool hasMeshBufferBBox = false; bool hasMeshBufferBBox = false;
for (u32 i=0; i<MeshBuffers.size(); ++i) for (u32 i = 0; i < MeshBuffers.size(); ++i) {
{
const core::aabbox3df &bb = MeshBuffers[i]->getBoundingBox(); const core::aabbox3df &bb = MeshBuffers[i]->getBoundingBox();
if ( !bb.isEmpty() ) if (!bb.isEmpty()) {
{ if (!hasMeshBufferBBox) {
if ( !hasMeshBufferBBox )
{
hasMeshBufferBBox = true; hasMeshBufferBBox = true;
BoundingBox = bb; BoundingBox = bb;
} } else {
else
{
BoundingBox.addInternalBox(bb); BoundingBox.addInternalBox(bb);
} }
} }
} }
@ -110,8 +101,7 @@ namespace scene
/** The bounding box is not updated automatically. */ /** The bounding box is not updated automatically. */
void addMeshBuffer(IMeshBuffer *buf) void addMeshBuffer(IMeshBuffer *buf)
{ {
if (buf) if (buf) {
{
buf->grab(); buf->grab();
MeshBuffers.push_back(buf); MeshBuffers.push_back(buf);
} }
@ -138,9 +128,5 @@ namespace scene
core::aabbox3d<f32> BoundingBox; core::aabbox3d<f32> BoundingBox;
}; };
} // end namespace scene } // end namespace scene
} // end namespace irr } // end namespace irr
#endif

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