mirror of
https://github.com/minetest/irrlicht.git
synced 2025-03-06 20:49:24 +01:00
Compare commits
390 commits
Author | SHA1 | Date | |
---|---|---|---|
|
7173c2c629 | ||
|
124708784f | ||
|
bcb952c3ca | ||
|
594e88bf3b | ||
|
dd1043c4c0 | ||
|
72e303238e | ||
|
adc96072cd | ||
|
7cf801244c | ||
|
b01a3ea781 | ||
|
e5b97d440a | ||
|
f5c6d3e945 | ||
|
9814510b1b | ||
|
05c8bc8314 | ||
|
a9c4683b18 | ||
|
26c4f4e63d | ||
|
9d07f906a7 | ||
|
d26c0aeaaf | ||
|
70b0b46d50 | ||
|
a7dd075dec | ||
|
1e89db1b80 | ||
|
44a368ef0e | ||
|
7ddf740f9b | ||
|
2bbfa178ea | ||
|
61682104df | ||
|
46542793d6 | ||
|
9f2d13a2b6 | ||
|
602a4050b5 | ||
|
54de743641 | ||
|
3e8d8440e3 | ||
|
8189b2338a | ||
|
0a77ef5dc2 | ||
|
19f0f707a6 | ||
|
83998f7471 | ||
|
b7bb4b5958 | ||
|
f28e442bfa | ||
|
4cd5c3489e | ||
|
52e4d72ae2 | ||
|
7241a49566 | ||
|
2db8c8728e | ||
|
270b2bec6e | ||
|
c83f28431b | ||
|
e60921f0cb | ||
|
92252f70d2 | ||
|
4e9d0db4be | ||
|
2bb2d3fe01 | ||
|
45ace61007 | ||
|
89d0717779 | ||
|
19819bd23a | ||
|
2894d9ab03 | ||
|
e56605d7ce | ||
|
f91be59811 | ||
|
0069837920 | ||
|
ad96fabe4a | ||
|
6ba6118b8c | ||
|
7f11d2f950 | ||
|
fe3e41e7ea | ||
|
4478b1f1ec | ||
|
3992129735 | ||
|
0dab737d60 | ||
|
330150854b | ||
|
6779ac83f9 | ||
|
f1504093d1 | ||
|
8482cc3db8 | ||
|
a4f94b7656 | ||
|
4299ee21d8 | ||
|
5b81694b1d | ||
|
66786d0059 | ||
|
9df2f0b944 | ||
|
c3571261ca | ||
|
bdcd27ab5b | ||
|
345285786f | ||
|
dda9b23c3d | ||
|
b349266855 | ||
|
ee2467d622 | ||
|
88ca26c418 | ||
|
8f44270e4a | ||
|
edc678f995 | ||
|
0faeea33c3 | ||
|
f86b9b93e8 | ||
|
a3ec3a88e8 | ||
|
7df45b4cf3 | ||
|
a2b6244f54 | ||
|
3983c29645 | ||
|
73e62f8676 | ||
|
fb4ee6ac93 | ||
|
91e4129615 | ||
|
54b82aad26 | ||
|
03dd8b0336 | ||
|
6e6b4a6f3c | ||
|
0110826ce9 | ||
|
4e52d547b2 | ||
|
9a439a3646 | ||
|
854e97f57c | ||
|
22f2c37322 | ||
|
94cb0cc19d | ||
|
9b52d6fb0d | ||
|
16a99c2079 | ||
|
bb7c06d32a | ||
|
a2884e4000 | ||
|
b284ea076b | ||
|
85081d6fe0 | ||
|
eafc282efd | ||
|
8c2ad025b1 | ||
|
a07cfc0f7a | ||
|
f725b68c57 | ||
|
99be15f40b | ||
|
6fccc79270 | ||
|
7cade6f27f | ||
|
ae63f1bf02 | ||
|
dd14486d3f | ||
|
4a7d3de89a | ||
|
631c0fa77b | ||
|
9813b460e1 | ||
|
565f14677c | ||
|
f53af0f2cf | ||
|
05ebc43222 | ||
|
c01de80583 | ||
|
fbdc4ee8d5 | ||
|
2c086e5fdc | ||
|
627a3a5172 | ||
|
01e05f3c94 | ||
|
b673a4b2bb | ||
|
5e01152f56 | ||
|
c2dd664fc6 | ||
|
774d3d6d2b | ||
|
e1f41edd29 | ||
|
c766c3a023 | ||
|
93eebed8c9 | ||
|
645b51a34d | ||
|
bcc53e1e1a | ||
|
d4735ebc76 | ||
|
063079b372 | ||
|
3b198bdfda | ||
|
5b2f1927d0 | ||
|
9954667c45 | ||
|
ea1b58387e | ||
|
d767d27ca8 | ||
|
6f4f7c4d75 | ||
|
103ab16679 | ||
|
64688f4490 | ||
|
827710f74a | ||
|
80e160935d | ||
|
4506d23dc3 | ||
|
028cb8dbed | ||
|
a5c9945bb8 | ||
|
cfb73d07d7 | ||
|
87f7cf3438 | ||
|
ebe4fd0a59 | ||
|
fc7e3f2dff | ||
|
b0a070d980 | ||
|
d9216362ec | ||
|
d8a21cb25f | ||
|
9c54d927b9 | ||
|
b89455f385 | ||
|
6a5fceb8fd | ||
|
0b9ee5884f | ||
|
679dfd3343 | ||
|
f9d7a632f5 | ||
|
dc43583a2c | ||
|
03fd4ff533 | ||
|
b7292226b4 | ||
|
7298b46504 | ||
|
af20d9ff86 | ||
|
00dd1f8ef3 | ||
|
364cb37698 | ||
|
7ce9169d8d | ||
|
ebdb2e410b | ||
|
a28b8f9e91 | ||
|
6cd27d5dca | ||
|
04ab99f218 | ||
|
d753c8b782 | ||
|
6a3ed6428f | ||
|
3492fd0d2d | ||
|
c6b06533f3 | ||
|
e609f5f263 | ||
|
ddecc0fae2 | ||
|
dd3a34d674 | ||
|
0735220f86 | ||
|
0740d055ac | ||
|
1d4672bd92 | ||
|
ef3bab610d | ||
|
d98dc90b38 | ||
|
c311d01c07 | ||
|
d7f75ae882 | ||
|
e0d4d7d8b4 | ||
|
fb7a0e4298 | ||
|
a994c31ccf | ||
|
c40045a40a | ||
|
c0ef1092c0 | ||
|
5ececc7d29 | ||
|
9e0189019e | ||
|
b249e4523d | ||
|
041377c24c | ||
|
83699a835d | ||
|
98589d2fd2 | ||
|
8c856408f5 | ||
|
cbc7aeb302 | ||
|
09af5ac00d | ||
|
2c6efbdf06 | ||
|
510976f130 | ||
|
b958fdc271 | ||
|
1387370260 | ||
|
49b6ccde72 | ||
|
acbc90a000 | ||
|
6a2a569233 | ||
|
1f15fd0805 | ||
|
81ad195aa3 | ||
|
13680ef42d | ||
|
44f7c22bbf | ||
|
2e477a07d1 | ||
|
78d0819a2c | ||
|
df07b3bf99 | ||
|
523590e16c | ||
|
8cf02ea27f | ||
|
efb660e7ed | ||
|
5f88555ed3 | ||
|
4ee1ab261e | ||
|
ab628e641c | ||
|
1d782702e1 | ||
|
c4ab49201b | ||
|
896c825b9e | ||
|
7a3fc62ada | ||
|
09043e3da7 | ||
|
2d81374b34 | ||
|
aa1696a7e6 | ||
|
e01f285c8f | ||
|
5eb607f86f | ||
|
fc0440ff89 | ||
|
462657960d | ||
|
6a152e8629 | ||
|
718ba69e1b | ||
|
54314691ec | ||
|
36a3a7f349 | ||
|
ca5f005b74 | ||
|
e850bd102a | ||
|
a677f5a01a | ||
|
f5d3448b17 | ||
|
3a074e4124 | ||
|
70ee4b05aa | ||
|
58a96b7d23 | ||
|
ba1cd19983 | ||
|
a67f3003de | ||
|
4dda28450f | ||
|
219b7fd7d2 | ||
|
28d0e0644c | ||
|
d97d1708d6 | ||
|
799c8b936f | ||
|
8da1bcf58b | ||
|
d86abb40c1 | ||
|
53b9eaa831 | ||
|
1967d71cfb | ||
|
c5373262ca | ||
|
939b3f7bfb | ||
|
9c2c91776e | ||
|
6f3435f349 | ||
|
9f9d22ca33 | ||
|
edb381bd50 | ||
|
8ffa7eafea | ||
|
2bff147904 | ||
|
3cf75cdce4 | ||
|
a7f9afd289 | ||
|
98df6eae77 | ||
|
3ce4b2b5dc | ||
|
424eb85f4d | ||
|
6a9e0f109c | ||
|
15e3f15b48 | ||
|
263f243523 | ||
|
c5ee8c8397 | ||
|
b0c03b6f3b | ||
|
679d3a8ba7 | ||
|
d1f441787a | ||
|
739a9eaf7c | ||
|
0acf0de2db | ||
|
52a0b9d8e5 | ||
|
0160cdc51d | ||
|
5a1565072a | ||
|
25a7074c9a | ||
|
df8881898d | ||
|
ba77d01c91 | ||
|
f641500d01 | ||
|
02c6449f0d | ||
|
2331083837 | ||
|
d84dc18e13 | ||
|
ea0ca7f917 | ||
|
82d1feb933 | ||
|
d81db9dd6d | ||
|
6c68217426 | ||
|
21c61e9973 | ||
|
5a5a7d04b7 | ||
|
b279810437 | ||
|
e484698ba2 | ||
|
5f76be9380 | ||
|
6de0afa8b3 | ||
|
1d43ea17ca | ||
|
a6d062ebd9 | ||
|
2e9ed529b1 | ||
|
ceb53be9e3 | ||
|
df28a4cc46 | ||
|
8dd8652f5f | ||
|
2932065346 | ||
|
1326dfbcb1 | ||
|
1bbe341daa | ||
|
d6716ec31b | ||
|
620f4869a1 | ||
|
05384fdc5e | ||
|
48270029cd | ||
|
c5ce853148 | ||
|
4fba496917 | ||
|
79fdab0551 | ||
|
608aa150ff | ||
|
1f750cd7b2 | ||
|
8c521939b9 | ||
|
cfa8dd7845 | ||
|
01295c9ce6 | ||
|
5a95b40a0e | ||
|
8efd4527f6 | ||
|
a0e1e39ea7 | ||
|
d8e09f14bd | ||
|
67f852be57 | ||
|
5a2b807890 | ||
|
06db7b7ab7 | ||
|
09e6eeb65b | ||
|
839bdc1a65 | ||
|
ea297196b7 | ||
|
38f18eec56 | ||
|
5527b9f373 | ||
|
cd3e784534 | ||
|
51dffc416a | ||
|
8f13ae81e5 | ||
|
3de3ff524a | ||
|
7d3142b969 | ||
|
a9230e5f49 | ||
|
b5a6dc0a15 | ||
|
ce0d29df93 | ||
|
2ae816b5a6 | ||
|
61af99adfa | ||
|
afbe41019c | ||
|
05a00a8d91 | ||
|
07fd32da50 | ||
|
735af8eec6 | ||
|
29a448de4d | ||
|
1579ce2740 | ||
|
b9e0641203 | ||
|
6f98515f34 | ||
|
a549d0bfed | ||
|
a0af653c3d | ||
|
cac4e62852 | ||
|
d6766fb8f4 | ||
|
e46ab74859 | ||
|
57705d57cf | ||
|
e9908ca545 | ||
|
2709c937d9 | ||
|
59fc4401f1 | ||
|
f3a1f9f656 | ||
|
1128d9deab | ||
|
9b541f2948 | ||
|
1cf0f3bef0 | ||
|
3225007e8d | ||
|
e9f205f952 | ||
|
d733e03430 | ||
|
f0766c845f | ||
|
ff645cc876 | ||
|
f6ec00e1c4 | ||
|
51f0acb7c1 | ||
|
91edd214aa | ||
|
538c9e5cde | ||
|
abebac8bd4 | ||
|
67c0cb5740 | ||
|
748e005794 | ||
|
a7b306f702 | ||
|
074e81f78f | ||
|
25ae156944 | ||
|
c4ca31313f | ||
|
b787ec3e3e | ||
|
6db035e0aa | ||
|
6064e12133 | ||
|
53e1b52ff4 | ||
|
a04a0d2a4b | ||
|
392df9bae3 | ||
|
426730bf91 | ||
|
aa095d9525 | ||
|
128cf1696c | ||
|
3e81f38098 | ||
|
593103a261 | ||
|
0732807cc8 | ||
|
00a7741cd4 | ||
|
51ae495c4a | ||
|
6928c7eb6f | ||
|
372b3642bf | ||
|
51dad49d8b |
565 changed files with 104111 additions and 139955 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
|
|
||||||
|
|
308
.github/workflows/build.yml
vendored
308
.github/workflows/build.yml
vendored
|
@ -8,43 +8,46 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
linux-gl:
|
linux-gl:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install g++ cmake libxxf86vm-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@v2
|
- 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-18.04
|
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install g++ cmake libxxf86vm-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: |
|
||||||
sed '/#define _IRR_COMPILE_WITH_OGLES2_/ s|^//||g' -i include/IrrCompileConfig.h
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
sed '/#define _IRR_COMPILE_WITH_OPENGL_/ s|^|//|g' -i include/IrrCompileConfig.h
|
|
||||||
cmake . -DBUILD_EXAMPLES=1
|
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
|
@ -55,60 +58,118 @@ jobs:
|
||||||
- name: Test (Xvfb)
|
- name: Test (Xvfb)
|
||||||
run: |
|
run: |
|
||||||
cd bin/Linux
|
cd bin/Linux
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
win32:
|
linux-sdl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Install compiler
|
|
||||||
run: |
|
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
|
||||||
wget http://minetest.kitsunemimi.pw/mingw-w64-i686_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
|
||||||
sudo tar -xaf mingw.tar.xz -C /usr
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
./scripts/ci-build-mingw.sh package
|
|
||||||
env:
|
|
||||||
CC: i686-w64-mingw32-gcc
|
|
||||||
CXX: i686-w64-mingw32-g++
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: irrlicht-win32
|
|
||||||
path: ./irrlicht-win32.zip
|
|
||||||
|
|
||||||
win64:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Install compiler
|
|
||||||
run: |
|
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
|
||||||
wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
|
||||||
sudo tar -xaf mingw.tar.xz -C /usr
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
./scripts/ci-build-mingw.sh package
|
|
||||||
env:
|
|
||||||
CC: x86_64-w64-mingw32-gcc
|
|
||||||
CXX: x86_64-w64-mingw32-g++
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: irrlicht-win64
|
|
||||||
path: ./irrlicht-win64.zip
|
|
||||||
|
|
||||||
macos:
|
|
||||||
runs-on: macos-10.15
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
brew update
|
sudo apt-get update
|
||||||
|
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
|
linux-sdl-gl3:
|
||||||
|
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
|
- name: Test (Xvfb)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
||||||
|
|
||||||
|
linux-sdl-gles2:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
|
- name: Test (Xvfb)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
|
mingw:
|
||||||
|
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
- {variant: win32, arch: i686}
|
||||||
|
- {variant: win64, arch: x86_64}
|
||||||
|
- {variant: win32, arch: i686, extras: "-sdl"}
|
||||||
|
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install compiler
|
||||||
|
run: |
|
||||||
|
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||||
|
./scripts/ci-get-mingw.sh
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
./scripts/ci-build-mingw.sh package
|
||||||
|
env:
|
||||||
|
CC: ${{matrix.config.arch}}-w64-mingw32-clang
|
||||||
|
CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
|
||||||
|
extras: ${{matrix.config.extras}}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
||||||
|
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
||||||
|
|
||||||
|
macos:
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
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: |
|
||||||
|
@ -118,3 +179,132 @@ jobs:
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
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:
|
||||||
|
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
||||||
|
runs-on: windows-2019
|
||||||
|
env:
|
||||||
|
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
||||||
|
# 2023.10.19
|
||||||
|
vcpkg_packages: zlib libpng libjpeg-turbo
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
-
|
||||||
|
arch: x86
|
||||||
|
generator: "-G'Visual Studio 16 2019' -A Win32"
|
||||||
|
vcpkg_triplet: x86-windows
|
||||||
|
-
|
||||||
|
arch: x64
|
||||||
|
generator: "-G'Visual Studio 16 2019' -A x64"
|
||||||
|
vcpkg_triplet: x64-windows
|
||||||
|
sdl:
|
||||||
|
-
|
||||||
|
use: FALSE
|
||||||
|
label: '(no SDL)'
|
||||||
|
vcpkg_packages: opengl-registry
|
||||||
|
-
|
||||||
|
use: TRUE
|
||||||
|
label: '(with SDL)'
|
||||||
|
vcpkg_packages: sdl2
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Restore from cache and run vcpkg
|
||||||
|
uses: lukka/run-vcpkg@v7
|
||||||
|
with:
|
||||||
|
vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
|
||||||
|
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
||||||
|
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
||||||
|
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
||||||
|
vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
|
||||||
|
|
||||||
|
- name: CMake
|
||||||
|
run: |
|
||||||
|
cmake ${{matrix.config.generator}} `
|
||||||
|
-DUSE_SDL2=${{matrix.sdl.use}} `
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
|
||||||
|
-DCMAKE_BUILD_TYPE=Release .
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build . --config Release
|
||||||
|
|
||||||
|
- name: Create artifact folder
|
||||||
|
run: |
|
||||||
|
mkdir artifact/
|
||||||
|
mkdir artifact/lib/
|
||||||
|
|
||||||
|
- name: Move dlls into artifact folder
|
||||||
|
run: move bin\Win32-VisualStudio\Release\* artifact\lib\
|
||||||
|
|
||||||
|
- name: Move includes into artifact folder
|
||||||
|
run: move include artifact/
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
|
||||||
|
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 }}
|
||||||
|
|
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -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*
|
||||||
|
@ -15,3 +16,10 @@ bin/Linux
|
||||||
scripts/gl2ext.h
|
scripts/gl2ext.h
|
||||||
scripts/glcorearb.h
|
scripts/glcorearb.h
|
||||||
scripts/glext.h
|
scripts/glext.h
|
||||||
|
*.vcxproj*
|
||||||
|
*.dir/
|
||||||
|
*.sln
|
||||||
|
*visualstudio/
|
||||||
|
|
||||||
|
# vscode cmake plugin
|
||||||
|
build/*
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
|
||||||
# Set policies up to 3.9 since we want to enable the IPO option
|
set(IRRLICHTMT_REVISION 15)
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 3.9)
|
|
||||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
|
||||||
else()
|
|
||||||
cmake_policy(VERSION 3.9)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
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)
|
||||||
|
@ -36,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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
33
README.md
33
README.md
|
@ -1,9 +1,17 @@
|
||||||
IrrlichtMt version 1.9
|
IrrlichtMt version 1.9
|
||||||
======================
|
======================
|
||||||
|
|
||||||
The Irrlicht Engine is an open source realtime 3D engine written in C++.
|
Notice
|
||||||
|
------
|
||||||
|
|
||||||
This is a fork by the [Minetest](https://github.com/minetest) developers that contains features, customizations and fixes specifically for use in Minetest.
|
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).
|
||||||
|
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.
|
||||||
|
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
|
@ -15,10 +23,16 @@ 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
|
||||||
* `BUILD_EXAMPLES` (default: `OFF`) - Build example applications
|
* `BUILD_EXAMPLES` (default: `OFF`) - Build example applications
|
||||||
|
* `ENABLE_OPENGL` - Enable OpenGL driver
|
||||||
|
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
|
||||||
|
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
|
||||||
|
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
|
||||||
|
* `USE_SDL2` (default: 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:
|
||||||
|
|
||||||
|
@ -29,6 +43,21 @@ e.g. on a Linux system you might want to build for local use like this:
|
||||||
|
|
||||||
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
|
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
|
||||||
|
|
||||||
|
on Windows system:
|
||||||
|
|
||||||
|
It is highly recommended to use vcpkg as package manager.
|
||||||
|
|
||||||
|
After you successfully built vcpkg you can easily install the required libraries:
|
||||||
|
|
||||||
|
vcpkg install zlib libjpeg-turbo libpng sdl2 --triplet x64-windows
|
||||||
|
|
||||||
|
Run the following script in PowerShell:
|
||||||
|
|
||||||
|
git clone https://github.com/minetest/irrlicht
|
||||||
|
cd irrlicht
|
||||||
|
cmake -B build -G "Visual Studio 17 2022" -A "Win64" -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake -DBUILD_SHARED_LIBS=OFF
|
||||||
|
cmake --build build --config Release
|
||||||
|
|
||||||
Platforms
|
Platforms
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
If you wish to compile the engine in linux yourself,
|
|
||||||
goto the \source directory. Run a 'make' in the subfolder 'Irrlicht'.
|
|
||||||
After this, you should be able to make all example applications in \examples.
|
|
||||||
Then just start an X Server and run them, from the directory where they are.
|
|
|
@ -1 +0,0 @@
|
||||||
If you want to compile only the Irrlicht Engine you should use XCode project available at source/Irrlicht/ directory. You can also use examples/BuildAllExamples.xcworkspace file to build the Irrlicht Engine + all examples.
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
|
@ -1,25 +0,0 @@
|
||||||
The Win32-VisualStudio version is currently (Irrlicht 1.8) compiled with VS 2010 using the Windows 7.1 SDK as platform toolset.
|
|
||||||
You might get the necessary Windows Platform SDK here: http://msdn.microsoft.com/en-us/windows/bb980924.aspx
|
|
||||||
|
|
||||||
To link to that Irrlicht.dll you need to set platform toolset in your VS version to the same target or re-compile the Irrlicht.dll using another platform toolset.
|
|
||||||
|
|
||||||
To re-compile Irrlicht for Win32-VisualStudio:
|
|
||||||
There are several project files for different VS versions in source/Irrlicht.
|
|
||||||
Irrlicht10.0.sln is for VS 2010
|
|
||||||
Irrlicht11.0.sln is for VS 2012
|
|
||||||
Irrlicht12.0.sln is for VS 2013
|
|
||||||
|
|
||||||
To compile Irrlicht + all examples and all tools check the BuildAllExamples_*.sln files in the examples folder.
|
|
||||||
|
|
||||||
For newer VS versions you have update one of those projects (VS usually can do that automatically when you open an older solution file).
|
|
||||||
|
|
||||||
Currently each of those solutions does set the platform toolset "Windows 7.1 SDK" (to be compatible to each other).
|
|
||||||
You might want to change that in the project settings and set it to your current version.
|
|
||||||
Make sure you use the same platform toolset in your application and in the engine.
|
|
||||||
Also when compiling examples each example has to use the same platform toolset as was used for the engine.
|
|
||||||
|
|
||||||
Platform should be Win32
|
|
||||||
Configuration is by default "Release"
|
|
||||||
But you can also chose "Debug" if you want Irrlicht with Debug information.
|
|
||||||
Static builds are possible but you have to additionally set the _IRR_STATIC_LIB_ define in the application when linking to a static Irrlicht.lib
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
|
@ -1,16 +0,0 @@
|
||||||
If you wish to compile Irrlicht for Win32-gcc you have several choices.
|
|
||||||
|
|
||||||
1. You can work from within a MinGW shell.
|
|
||||||
Go to the folder source/Irrlicht and run the Makefile with:
|
|
||||||
make win32
|
|
||||||
Examples can be build by going into the folder of the example (for example examples/01.HelloWorld) and running the Makefile with:
|
|
||||||
make all_win32
|
|
||||||
|
|
||||||
2. Use the Code::Blocks IDE
|
|
||||||
There is a project file called Irrlicht-gcc.cbp in source/Irrlicht to compile just the engine.
|
|
||||||
Be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
|
||||||
|
|
||||||
There is also Code::Blocks workspace file in the examples folder called BuildAllExamples.workspace
|
|
||||||
Again be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
|
||||||
This workspace allows you to compile the engine together with all examples and tools.
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
If you wish to compile Irrlicht for emscripten please check the documenation in examples/01.HelloWorld_emscripten.
|
|
5527
changes.txt
5527
changes.txt
File diff suppressed because it is too large
Load diff
|
@ -1,63 +0,0 @@
|
||||||
Checklist for Irrlicht developers doing releases.
|
|
||||||
|
|
||||||
Note: Generally the more platforms, compilers, settings you can test the better. Ask for help for platforms which you don't own.
|
|
||||||
|
|
||||||
- PRE-BUILD TESTS:
|
|
||||||
- - Run tests in the tests folder
|
|
||||||
- - Compile and run examples.
|
|
||||||
- - Compile and run the tools. Note that some tools are in the buildall-examples VS project files on Windows,
|
|
||||||
but on Linux command line you have to compile them individually.
|
|
||||||
|
|
||||||
- VERSION UPDATES:
|
|
||||||
- - check IRRLICHT_SDK_VERSION (in IrrCompileConfig.h)
|
|
||||||
- - check version number in the Makefile
|
|
||||||
- - update readme.txt (version number, supported compilers)
|
|
||||||
- - Add new release information (date+version-number) in changes.txt
|
|
||||||
- - go through folders if other .txt files still make sense (things change and updating those files tends to be forgotten)
|
|
||||||
|
|
||||||
- DOCUMENTATION UPDATES:
|
|
||||||
- - run makedocumentation.sh in scripts\doc\irrlicht
|
|
||||||
- - run maketutorial.sh in scripts\doc\irrlicht (commit changed tutorial.html's)
|
|
||||||
|
|
||||||
- BUILDING THE RELEASE
|
|
||||||
(TBD - should we still release dll's? Newer and older VS builds are no longer compatible anyway)
|
|
||||||
- - run a clean build for buildAllExamples in the examples folder with the
|
|
||||||
target compiler for 32-bit and for release (old VS compiler - so far VS2010)
|
|
||||||
- - when possible compile the dll for MinGW on Windows (in release and with -s for smaller size)
|
|
||||||
- - when possible compile the dll for 64 bit (again with Visual Studio and release)
|
|
||||||
- - create a target directory, like irrlicht-1.8.1 for example
|
|
||||||
- - svn export to the target directory
|
|
||||||
- - copy the subfolders of doctemp into the doc folder of the target directory
|
|
||||||
careful, this should only be one(!) subfolder (we ended up with copies before, maybe Windows/Linux builds use different names?)
|
|
||||||
- - copy all .exe files (except test.exe) from bin\Win32-VisualStudio (.pdb's are not necessary)
|
|
||||||
- - copy Irrlicht.dll from bin\Win32-visualstudio
|
|
||||||
- - copy the files in lib\Win32-visualstudio
|
|
||||||
- - copy Irrlicht.dll from bin\Win64-VisualStudio
|
|
||||||
- - copy the files in lib\Win64-visualstudio
|
|
||||||
- - copy Irrlicht.dll from bin\Win32-gcc
|
|
||||||
- - copy the files in lib\Win32-gcc
|
|
||||||
- - remove the tests folder
|
|
||||||
- - remove scripts folder (if the release comes with docs, if you do a release
|
|
||||||
without docs for smaller filesizes then the script folder has to stay in).
|
|
||||||
- - create a zip file
|
|
||||||
- - figure out how to fix unix access right for shell-scripts in the zip file (my
|
|
||||||
trick so far is: unzip in Linux, set +x for all .sh files, zip again)
|
|
||||||
|
|
||||||
RELEASING:
|
|
||||||
- - upload the zip-file somewhere, then download it again on all platforms and do
|
|
||||||
another quick test with that file (do examples still run, can you compile)
|
|
||||||
- - give the link to the zip out on the mailinglist for others to look at
|
|
||||||
- - Upload new documentation (the content of doc/html) to: web.sourceforge.net
|
|
||||||
(sftp protocol, user and passwd are your sourceforge account, the folder
|
|
||||||
might not be shown - but you can still cd into it!):
|
|
||||||
/home/project-web/i/ir/irrlicht/htdocs
|
|
||||||
Best create first a folder with a new name, copy stuff in there, test (just
|
|
||||||
check the website), rename old folder and give new folder the "docu" name.
|
|
||||||
Then you can delete the old folder if you want.
|
|
||||||
- - upload the zip by logging in to sourceforge and using the "Files" menu (needs
|
|
||||||
admin privileges and it's the 'Files' menu between 'Summary' and 'Reviews').
|
|
||||||
The target is in one of the Irrlicht SDK subfolders. Then click the "i" beside
|
|
||||||
the file and "select all" to make it the active download.
|
|
||||||
- - write a forum post, tell everyone in facebook, reddit, your friends...
|
|
||||||
- - login to wordpress at http://irrlicht.sourceforge.net/wp-login.php, update the
|
|
||||||
downloads section and write a release post.
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,4 @@
|
||||||
|
#include <iostream>
|
||||||
#include <irrlicht.h>
|
#include <irrlicht.h>
|
||||||
#include "exampleHelper.h"
|
#include "exampleHelper.h"
|
||||||
|
|
||||||
|
@ -6,29 +7,50 @@ using namespace irr;
|
||||||
static IrrlichtDevice *device = nullptr;
|
static IrrlichtDevice *device = nullptr;
|
||||||
static int test_fail = 0;
|
static int test_fail = 0;
|
||||||
|
|
||||||
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
void test_irr_array();
|
||||||
{
|
void test_irr_string();
|
||||||
if (core::stringc(arg_) == "null")
|
|
||||||
return video::EDT_NULL;
|
|
||||||
|
|
||||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
|
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||||
|
{
|
||||||
|
if (arg_ == "null")
|
||||||
|
return video::EDT_NULL;
|
||||||
|
if (arg_ == "ogles1")
|
||||||
return video::EDT_OGLES1;
|
return video::EDT_OGLES1;
|
||||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))
|
if (arg_ == "ogles2")
|
||||||
return video::EDT_OGLES2;
|
return video::EDT_OGLES2;
|
||||||
|
if (arg_ == "opengl")
|
||||||
|
return video::EDT_OPENGL;
|
||||||
|
if (arg_ == "opengl3")
|
||||||
|
return video::EDT_OPENGL3;
|
||||||
|
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
|
||||||
return video::EDT_OPENGL;
|
return video::EDT_OPENGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
||||||
|
{
|
||||||
|
std::cout << "Running unit tests:" << std::endl;
|
||||||
|
try {
|
||||||
|
test_irr_array();
|
||||||
|
test_irr_string();
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
std::cerr << e.what() << std::endl;
|
||||||
|
test_fail++;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
run_unit_tests();
|
||||||
|
|
||||||
SIrrlichtCreationParameters p;
|
SIrrlichtCreationParameters p;
|
||||||
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
||||||
p.WindowSize = core::dimension2du(640, 480);
|
p.WindowSize = core::dimension2du(640, 480);
|
||||||
|
@ -65,19 +87,23 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
const io::path mediaPath = getExampleMediaPath();
|
const io::path mediaPath = getExampleMediaPath();
|
||||||
|
|
||||||
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
|
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
||||||
|
check(mesh_file, "mesh file loading");
|
||||||
|
scene::IAnimatedMesh *mesh = smgr->getMesh(mesh_file);
|
||||||
check(mesh, "mesh loading");
|
check(mesh, "mesh loading");
|
||||||
if (mesh)
|
if (mesh_file)
|
||||||
{
|
mesh_file->drop();
|
||||||
|
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->setMaterialFlag(video::EMF_LIGHTING, false);
|
mat.Lighting = false;
|
||||||
|
mat.setTexture(0, tex);
|
||||||
|
});
|
||||||
node->setFrameLoop(0, 29);
|
node->setFrameLoop(0, 29);
|
||||||
node->setAnimationSpeed(30);
|
node->setAnimationSpeed(30);
|
||||||
node->setMaterialTexture(0, tex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,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() >= 1300)
|
|
||||||
{
|
|
||||||
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';
|
||||||
|
@ -114,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
138
examples/AutomatedTest/test_array.cpp
Normal file
138
examples/AutomatedTest/test_array.cpp
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
#include <irrArray.h>
|
||||||
|
#include "test_helper.h"
|
||||||
|
|
||||||
|
using namespace irr;
|
||||||
|
using core::array;
|
||||||
|
|
||||||
|
static void test_basics()
|
||||||
|
{
|
||||||
|
array<int> v;
|
||||||
|
v.push_back(1); // 1
|
||||||
|
v.push_front(2); // 2, 1
|
||||||
|
v.insert(4, 0); // 4, 2, 1
|
||||||
|
v.insert(3, 1); // 4, 3, 2, 1
|
||||||
|
v.insert(0, 4); // 4, 3, 2, 1, 0
|
||||||
|
UASSERTEQ(v.size(), 5);
|
||||||
|
UASSERTEQ(v[0], 4);
|
||||||
|
UASSERTEQ(v[1], 3);
|
||||||
|
UASSERTEQ(v[2], 2);
|
||||||
|
UASSERTEQ(v[3], 1);
|
||||||
|
UASSERTEQ(v[4], 0);
|
||||||
|
array<int> w = v;
|
||||||
|
UASSERTEQ(w.size(), 5);
|
||||||
|
UASSERT(w == v);
|
||||||
|
w.clear();
|
||||||
|
UASSERTEQ(w.size(), 0);
|
||||||
|
UASSERTEQ(w.allocated_size(), 0);
|
||||||
|
UASSERT(w.empty());
|
||||||
|
w = v;
|
||||||
|
UASSERTEQ(w.size(), 5);
|
||||||
|
w.set_used(3);
|
||||||
|
UASSERTEQ(w.size(), 3);
|
||||||
|
UASSERTEQ(w[0], 4);
|
||||||
|
UASSERTEQ(w[1], 3);
|
||||||
|
UASSERTEQ(w[2], 2);
|
||||||
|
UASSERTEQ(w.getLast(), 2);
|
||||||
|
w.set_used(20);
|
||||||
|
UASSERTEQ(w.size(), 20);
|
||||||
|
w = v;
|
||||||
|
w.sort();
|
||||||
|
UASSERTEQ(w.size(), 5);
|
||||||
|
UASSERTEQ(w[0], 0);
|
||||||
|
UASSERTEQ(w[1], 1);
|
||||||
|
UASSERTEQ(w[2], 2);
|
||||||
|
UASSERTEQ(w[3], 3);
|
||||||
|
UASSERTEQ(w[4], 4);
|
||||||
|
w.erase(0);
|
||||||
|
UASSERTEQ(w.size(), 4);
|
||||||
|
UASSERTEQ(w[0], 1);
|
||||||
|
UASSERTEQ(w[1], 2);
|
||||||
|
UASSERTEQ(w[2], 3);
|
||||||
|
UASSERTEQ(w[3], 4);
|
||||||
|
w.erase(1, 2);
|
||||||
|
UASSERTEQ(w.size(), 2);
|
||||||
|
UASSERTEQ(w[0], 1);
|
||||||
|
UASSERTEQ(w[1], 4);
|
||||||
|
w.swap(v);
|
||||||
|
UASSERTEQ(w.size(), 5);
|
||||||
|
UASSERTEQ(v.size(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_linear_searches()
|
||||||
|
{
|
||||||
|
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
|
||||||
|
array<int> arr;
|
||||||
|
for (int i = 0; i <= 100; i++)
|
||||||
|
arr.push_back(i);
|
||||||
|
for (int i = 100; i >= 0; i--)
|
||||||
|
arr.push_back(i);
|
||||||
|
s32 end = arr.size() - 1;
|
||||||
|
for (int i = 0; i <= 100; i++) {
|
||||||
|
s32 index = arr.linear_reverse_search(i);
|
||||||
|
UASSERTEQ(index, end - i);
|
||||||
|
}
|
||||||
|
for (int i = 0; i <= 100; i++) {
|
||||||
|
s32 index = arr.linear_search(i);
|
||||||
|
UASSERTEQ(index, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_binary_searches()
|
||||||
|
{
|
||||||
|
const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15};
|
||||||
|
array<int> arr;
|
||||||
|
for (int value : values) {
|
||||||
|
arr.push_back(value);
|
||||||
|
}
|
||||||
|
// Test the const form first, it uses a linear search without sorting
|
||||||
|
const array<int> &carr = arr;
|
||||||
|
UASSERTEQ(carr.binary_search(20), -1);
|
||||||
|
UASSERTEQ(carr.binary_search(0), -1);
|
||||||
|
UASSERTEQ(carr.binary_search(1), 2);
|
||||||
|
|
||||||
|
// Sorted: 1, 1, 2, 2, 3, 5, 5, 5, 7, 8, 9, 10, 15, 19
|
||||||
|
UASSERTEQ(arr.binary_search(20), -1);
|
||||||
|
UASSERTEQ(arr.binary_search(0), -1);
|
||||||
|
|
||||||
|
for (int value : values) {
|
||||||
|
s32 i = arr.binary_search(value);
|
||||||
|
UASSERTNE(i, -1);
|
||||||
|
UASSERTEQ(arr[i], value);
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 first, last;
|
||||||
|
first = arr.binary_search_multi(1, last);
|
||||||
|
UASSERTEQ(first, 0);
|
||||||
|
UASSERTEQ(last, 1);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(2, last);
|
||||||
|
UASSERTEQ(first, 2);
|
||||||
|
UASSERTEQ(last, 3);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(3, last);
|
||||||
|
UASSERTEQ(first, 4);
|
||||||
|
UASSERTEQ(last, 4);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(4, last);
|
||||||
|
UASSERTEQ(first, -1);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(5, last);
|
||||||
|
UASSERTEQ(first, 5);
|
||||||
|
UASSERTEQ(last, 7);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(7, last);
|
||||||
|
UASSERTEQ(first, 8);
|
||||||
|
UASSERTEQ(last, 8);
|
||||||
|
|
||||||
|
first = arr.binary_search_multi(19, last);
|
||||||
|
UASSERTEQ(first, 13);
|
||||||
|
UASSERTEQ(last, 13);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_irr_array()
|
||||||
|
{
|
||||||
|
test_basics();
|
||||||
|
test_linear_searches();
|
||||||
|
test_binary_searches();
|
||||||
|
std::cout << " test_irr_array PASSED" << std::endl;
|
||||||
|
}
|
33
examples/AutomatedTest/test_helper.h
Normal file
33
examples/AutomatedTest/test_helper.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <exception>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
class TestFailedException : public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
// Asserts the comparison specified by CMP is true, or fails the current unit test
|
||||||
|
#define UASSERTCMP(CMP, actual, expected) \
|
||||||
|
do { \
|
||||||
|
const auto &a = (actual); \
|
||||||
|
const auto &e = (expected); \
|
||||||
|
if (!CMP(a, e)) { \
|
||||||
|
std::cout \
|
||||||
|
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
|
||||||
|
<< #expected << std::endl \
|
||||||
|
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
|
||||||
|
<< " actual: " << a << std::endl \
|
||||||
|
<< " expected: " \
|
||||||
|
<< e << std::endl; \
|
||||||
|
throw TestFailedException(); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define CMPEQ(a, e) (a == e)
|
||||||
|
#define CMPTRUE(a, e) (a)
|
||||||
|
#define CMPNE(a, e) (a != e)
|
||||||
|
|
||||||
|
#define UASSERTEQ(actual, expected) UASSERTCMP(CMPEQ, actual, expected)
|
||||||
|
#define UASSERTNE(actual, nexpected) UASSERTCMP(CMPNE, actual, nexpected)
|
||||||
|
#define UASSERT(actual) UASSERTCMP(CMPTRUE, actual, true)
|
205
examples/AutomatedTest/test_string.cpp
Normal file
205
examples/AutomatedTest/test_string.cpp
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
#include <irrString.h>
|
||||||
|
#include <cstring>
|
||||||
|
#include <clocale>
|
||||||
|
#include <vector>
|
||||||
|
#include "test_helper.h"
|
||||||
|
|
||||||
|
using namespace irr;
|
||||||
|
using namespace irr::core;
|
||||||
|
|
||||||
|
#define CMPSTR(a, b) (!strcmp(a, b))
|
||||||
|
#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected)
|
||||||
|
|
||||||
|
static void test_basics()
|
||||||
|
{
|
||||||
|
// ctor
|
||||||
|
stringc s;
|
||||||
|
UASSERTEQ(s.c_str()[0], '\0');
|
||||||
|
s = stringc(0.1234567);
|
||||||
|
UASSERTSTR(s, "0.123457");
|
||||||
|
s = stringc(0x1p+53);
|
||||||
|
UASSERTSTR(s, "9007199254740992.000000");
|
||||||
|
s = stringc(static_cast<int>(-102400));
|
||||||
|
UASSERTSTR(s, "-102400");
|
||||||
|
s = stringc(static_cast<unsigned int>(102400));
|
||||||
|
UASSERTSTR(s, "102400");
|
||||||
|
s = stringc(static_cast<long>(-1024000));
|
||||||
|
UASSERTSTR(s, "-1024000");
|
||||||
|
s = stringc(static_cast<unsigned long>(1024000));
|
||||||
|
UASSERTSTR(s, "1024000");
|
||||||
|
s = stringc("YESno", 3);
|
||||||
|
UASSERTSTR(s, "YES");
|
||||||
|
s = stringc(L"test", 4);
|
||||||
|
UASSERTSTR(s, "test");
|
||||||
|
s = stringc("Hello World!");
|
||||||
|
UASSERTSTR(s, "Hello World!");
|
||||||
|
// operator=
|
||||||
|
s = stringw(L"abcdef");
|
||||||
|
UASSERTSTR(s, "abcdef");
|
||||||
|
s = L"abcdef";
|
||||||
|
UASSERTSTR(s, "abcdef");
|
||||||
|
s = static_cast<const char *>(nullptr);
|
||||||
|
UASSERTSTR(s, "");
|
||||||
|
// operator+
|
||||||
|
s = s + stringc("foo");
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s = s + L"bar";
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
// the rest
|
||||||
|
s = "f";
|
||||||
|
UASSERTEQ(s[0], 'f');
|
||||||
|
const auto &sref = s;
|
||||||
|
UASSERTEQ(sref[0], 'f');
|
||||||
|
UASSERT(sref == "f");
|
||||||
|
UASSERT(sref == stringc("f"));
|
||||||
|
s = "a";
|
||||||
|
UASSERT(sref < stringc("aa"));
|
||||||
|
UASSERT(sref < stringc("b"));
|
||||||
|
UASSERT(stringc("Z") < sref);
|
||||||
|
UASSERT(!(sref < stringc("a")));
|
||||||
|
UASSERT(sref.lower_ignore_case("AA"));
|
||||||
|
UASSERT(sref.lower_ignore_case("B"));
|
||||||
|
UASSERT(!sref.lower_ignore_case("A"));
|
||||||
|
s = "dog";
|
||||||
|
UASSERT(sref != "cat");
|
||||||
|
UASSERT(sref != stringc("cat"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_methods()
|
||||||
|
{
|
||||||
|
stringc s;
|
||||||
|
const auto &sref = s;
|
||||||
|
s = "irrlicht";
|
||||||
|
UASSERTEQ(sref.size(), 8);
|
||||||
|
UASSERT(!sref.empty());
|
||||||
|
s.clear();
|
||||||
|
UASSERTEQ(sref.size(), 0);
|
||||||
|
UASSERT(sref.empty());
|
||||||
|
UASSERT(sref[0] == 0);
|
||||||
|
s = "\tAz#`";
|
||||||
|
s.make_lower();
|
||||||
|
UASSERTSTR(s, "\taz#`");
|
||||||
|
s.make_upper();
|
||||||
|
UASSERTSTR(s, "\tAZ#`");
|
||||||
|
UASSERT(sref.equals_ignore_case("\taz#`"));
|
||||||
|
UASSERT(sref.equals_substring_ignore_case("Z#`", 2));
|
||||||
|
s = "irrlicht";
|
||||||
|
UASSERT(sref.equalsn(stringc("irr"), 3));
|
||||||
|
UASSERT(sref.equalsn("irr", 3));
|
||||||
|
s = "fo";
|
||||||
|
s.append('o');
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s.append("bar", 1);
|
||||||
|
UASSERTSTR(s, "foob");
|
||||||
|
s.append("ar", 999999);
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
s = "nyan";
|
||||||
|
s.append(stringc("cat"));
|
||||||
|
UASSERTSTR(s, "nyancat");
|
||||||
|
s.append(stringc("sam"), 1);
|
||||||
|
UASSERTSTR(s, "nyancats");
|
||||||
|
s = "fbar";
|
||||||
|
s.insert(1, "ooXX", 2);
|
||||||
|
UASSERTSTR(s, "foobar");
|
||||||
|
UASSERTEQ(sref.findFirst('o'), 1);
|
||||||
|
UASSERTEQ(sref.findFirst('X'), -1);
|
||||||
|
UASSERTEQ(sref.findFirstChar("abff", 2), 3);
|
||||||
|
UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3);
|
||||||
|
UASSERTEQ(sref.findLast('o'), 2);
|
||||||
|
UASSERTEQ(sref.findLast('X'), -1);
|
||||||
|
UASSERTEQ(sref.findLastChar("abrr", 2), 4);
|
||||||
|
UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3);
|
||||||
|
UASSERTEQ(sref.findNext('o', 2), 2);
|
||||||
|
UASSERTEQ(sref.findLast('o', 1), 1);
|
||||||
|
s = "ob-oob";
|
||||||
|
UASSERTEQ(sref.find("ob", 1), 4);
|
||||||
|
UASSERTEQ(sref.find("ob"), 0);
|
||||||
|
UASSERTEQ(sref.find("?"), -1);
|
||||||
|
s = "HOMEOWNER";
|
||||||
|
stringc s2 = sref.subString(2, 4);
|
||||||
|
UASSERTSTR(s2, "MEOW");
|
||||||
|
s2 = sref.subString(2, 4, true);
|
||||||
|
UASSERTSTR(s2, "meow");
|
||||||
|
s = "land";
|
||||||
|
s.replace('l', 's');
|
||||||
|
UASSERTSTR(s, "sand");
|
||||||
|
s = ">dog<";
|
||||||
|
s.replace("dog", "cat");
|
||||||
|
UASSERTSTR(s, ">cat<");
|
||||||
|
s.replace("cat", "horse");
|
||||||
|
UASSERTSTR(s, ">horse<");
|
||||||
|
s.replace("horse", "gnu");
|
||||||
|
UASSERTSTR(s, ">gnu<");
|
||||||
|
s = " h e l p ";
|
||||||
|
s.remove(' ');
|
||||||
|
UASSERTSTR(s, "help");
|
||||||
|
s.remove("el");
|
||||||
|
UASSERTSTR(s, "hp");
|
||||||
|
s = "irrlicht";
|
||||||
|
s.removeChars("it");
|
||||||
|
UASSERTSTR(s, "rrlch");
|
||||||
|
s = "\r\nfoo bar ";
|
||||||
|
s.trim();
|
||||||
|
UASSERTSTR(s, "foo bar");
|
||||||
|
s = "foxo";
|
||||||
|
s.erase(2);
|
||||||
|
UASSERTSTR(s, "foo");
|
||||||
|
s = "a";
|
||||||
|
s.append('\0');
|
||||||
|
s.append('b');
|
||||||
|
UASSERTEQ(s.size(), 3);
|
||||||
|
s.validate();
|
||||||
|
UASSERTEQ(s.size(), 1);
|
||||||
|
UASSERTEQ(s.lastChar(), 'a');
|
||||||
|
std::vector<stringc> res;
|
||||||
|
s = "a,,b,c";
|
||||||
|
s.split(res, ",aa", 1, true, false);
|
||||||
|
UASSERTEQ(res.size(), 3);
|
||||||
|
UASSERTSTR(res[0], "a");
|
||||||
|
UASSERTSTR(res[2], "c");
|
||||||
|
res.clear();
|
||||||
|
s.split(res, ",", 1, false, true);
|
||||||
|
UASSERTEQ(res.size(), 7);
|
||||||
|
UASSERTSTR(res[0], "a");
|
||||||
|
UASSERTSTR(res[2], "");
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
UASSERTSTR(res[2 * i + 1], ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_conv()
|
||||||
|
{
|
||||||
|
// locale-independent
|
||||||
|
|
||||||
|
stringw out;
|
||||||
|
utf8ToWString(out, "†††");
|
||||||
|
UASSERTEQ(out.size(), 3);
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
||||||
|
|
||||||
|
stringc out2;
|
||||||
|
wStringToUTF8(out2, L"†††");
|
||||||
|
UASSERTEQ(out2.size(), 9);
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3 * i]), 0xe2);
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3 * i + 1]), 0x80);
|
||||||
|
UASSERTEQ(static_cast<u8>(out2[3 * i + 2]), 0xa0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// locale-dependent
|
||||||
|
if (!setlocale(LC_CTYPE, "C.UTF-8"))
|
||||||
|
setlocale(LC_CTYPE, "UTF-8"); // macOS
|
||||||
|
|
||||||
|
stringw out3;
|
||||||
|
multibyteToWString(out3, "†††");
|
||||||
|
UASSERTEQ(out3.size(), 3);
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
UASSERTEQ(static_cast<u16>(out3[i]), 0x2020);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_irr_string()
|
||||||
|
{
|
||||||
|
test_basics();
|
||||||
|
test_methods();
|
||||||
|
test_conv();
|
||||||
|
std::cout << " test_irr_string PASSED" << std::endl;
|
||||||
|
}
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
set(IRREXAMPLES
|
set(IRREXAMPLES
|
||||||
# removed
|
# removed
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,226 +0,0 @@
|
||||||
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_INDEX_BUFFER_H_INCLUDED__
|
|
||||||
#define __C_INDEX_BUFFER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IIndexBuffer.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
class CIndexBuffer : public IIndexBuffer
|
|
||||||
{
|
|
||||||
|
|
||||||
class IIndexList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~IIndexList(){};
|
|
||||||
|
|
||||||
virtual u32 stride() const =0;
|
|
||||||
virtual u32 size() const =0;
|
|
||||||
virtual void push_back(const u32 &element) =0;
|
|
||||||
virtual u32 operator [](u32 index) const =0;
|
|
||||||
virtual u32 getLast() =0;
|
|
||||||
virtual void setValue(u32 index, u32 value) =0;
|
|
||||||
virtual void set_used(u32 usedNow) =0;
|
|
||||||
virtual void reallocate(u32 new_size) =0;
|
|
||||||
virtual u32 allocated_size() const =0;
|
|
||||||
virtual void* pointer() =0;
|
|
||||||
virtual video::E_INDEX_TYPE getType() const =0;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
class CSpecificIndexList : public IIndexList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
core::array<T> Indices;
|
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);}
|
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_ {return Indices.size();}
|
|
||||||
|
|
||||||
virtual void push_back(const u32 &element) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
// push const ref due to compiler problem with gcc 4.6, big endian
|
|
||||||
Indices.push_back((const T&)element);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return (u32)(Indices[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 getLast() _IRR_OVERRIDE_ {return (u32)Indices.getLast();}
|
|
||||||
|
|
||||||
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices[index]=(T)value;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices.set_used(usedNow);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices.reallocate(new_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Indices.allocated_size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void* pointer() _IRR_OVERRIDE_ {return Indices.pointer();}
|
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
if (sizeof(T)==sizeof(u16))
|
|
||||||
return video::EIT_16BIT;
|
|
||||||
else
|
|
||||||
return video::EIT_32BIT;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
IIndexList *Indices;
|
|
||||||
|
|
||||||
CIndexBuffer(video::E_INDEX_TYPE IndexType) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1)
|
|
||||||
{
|
|
||||||
setType(IndexType);
|
|
||||||
}
|
|
||||||
|
|
||||||
CIndexBuffer(const IIndexBuffer &IndexBufferCopy) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1)
|
|
||||||
{
|
|
||||||
setType(IndexBufferCopy.getType());
|
|
||||||
reallocate(IndexBufferCopy.size());
|
|
||||||
|
|
||||||
for (u32 n=0;n<IndexBufferCopy.size();++n)
|
|
||||||
push_back(IndexBufferCopy[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~CIndexBuffer()
|
|
||||||
{
|
|
||||||
delete Indices;
|
|
||||||
}
|
|
||||||
|
|
||||||
//virtual void setType(video::E_INDEX_TYPE IndexType);
|
|
||||||
virtual void setType(video::E_INDEX_TYPE IndexType) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
IIndexList *NewIndices=0;
|
|
||||||
|
|
||||||
switch (IndexType)
|
|
||||||
{
|
|
||||||
case video::EIT_16BIT:
|
|
||||||
{
|
|
||||||
NewIndices=new CSpecificIndexList<u16>;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case video::EIT_32BIT:
|
|
||||||
{
|
|
||||||
NewIndices=new CSpecificIndexList<u32>;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Indices)
|
|
||||||
{
|
|
||||||
NewIndices->reallocate( Indices->size() );
|
|
||||||
|
|
||||||
for(u32 n=0;n<Indices->size();++n)
|
|
||||||
NewIndices->push_back((*Indices)[n]);
|
|
||||||
|
|
||||||
delete Indices;
|
|
||||||
}
|
|
||||||
|
|
||||||
Indices=NewIndices;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void* getData() _IRR_OVERRIDE_ {return Indices->pointer();}
|
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const _IRR_OVERRIDE_ {return Indices->getType();}
|
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return Indices->stride();}
|
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Indices->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void push_back(const u32 &element) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices->push_back(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 operator [](u32 index) const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return (*Indices)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 getLast() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Indices->getLast();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void setValue(u32 index, u32 value) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices->setValue(index, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices->set_used(usedNow);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Indices->reallocate(new_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Indices->allocated_size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void* pointer() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Indices->pointer();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return MappingHint;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
MappingHint=NewMappingHint;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
|
||||||
virtual void setDirty() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
++ChangedID;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
|
||||||
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;}
|
|
||||||
|
|
||||||
E_HARDWARE_MAPPING MappingHint;
|
|
||||||
u32 ChangedID;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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,172 +17,154 @@ 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 */
|
||||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
|
const video::SMaterial &getMaterial() const override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get material of this meshbuffer
|
//! Get material of this meshbuffer
|
||||||
/** \return Material of this buffer */
|
/** \return Material of this buffer */
|
||||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
|
video::SMaterial &getMaterial() override
|
||||||
{
|
{
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
virtual const void* getVertices() const _IRR_OVERRIDE_
|
const void *getVertices() const override
|
||||||
{
|
{
|
||||||
return Vertices.const_pointer();
|
return Vertices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
virtual void* getVertices() _IRR_OVERRIDE_
|
void *getVertices() override
|
||||||
{
|
{
|
||||||
return Vertices.pointer();
|
return Vertices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get number of vertices
|
//! Get number of vertices
|
||||||
/** \return Number of vertices. */
|
/** \return Number of vertices. */
|
||||||
virtual u32 getVertexCount() const _IRR_OVERRIDE_
|
u32 getVertexCount() const override
|
||||||
{
|
{
|
||||||
return Vertices.size();
|
return Vertices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
/** \return Index type of this buffer. */
|
/** \return Index type of this buffer. */
|
||||||
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
|
video::E_INDEX_TYPE getIndexType() const override
|
||||||
{
|
{
|
||||||
return video::EIT_16BIT;
|
return video::EIT_16BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
virtual const u16* getIndices() const _IRR_OVERRIDE_
|
const u16 *getIndices() const override
|
||||||
{
|
{
|
||||||
return Indices.const_pointer();
|
return Indices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
virtual u16* getIndices() _IRR_OVERRIDE_
|
u16 *getIndices() override
|
||||||
{
|
{
|
||||||
return Indices.pointer();
|
return Indices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get number of indices
|
//! Get number of indices
|
||||||
/** \return Number of indices. */
|
/** \return Number of indices. */
|
||||||
virtual u32 getIndexCount() const _IRR_OVERRIDE_
|
u32 getIndexCount() const override
|
||||||
{
|
{
|
||||||
return Indices.size();
|
return Indices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get the axis aligned bounding box
|
//! Get the axis aligned bounding box
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
const core::aabbox3d<f32> &getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Set the axis aligned bounding box
|
//! Set the axis aligned bounding box
|
||||||
/** \param box New axis aligned bounding box for this buffer. */
|
/** \param box New axis aligned bounding box for this buffer. */
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_
|
void setBoundingBox(const core::aabbox3df &box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Recalculate the bounding box.
|
//! Recalculate the bounding box.
|
||||||
/** should be called if the mesh changed. */
|
/** should be called if the mesh changed. */
|
||||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
|
void recalculateBoundingBox() override
|
||||||
{
|
|
||||||
if (!Vertices.empty())
|
|
||||||
{
|
{
|
||||||
|
if (!Vertices.empty()) {
|
||||||
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. */
|
||||||
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
|
video::E_VERTEX_TYPE getVertexType() const override
|
||||||
{
|
{
|
||||||
return T::getType();
|
return T::getType();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df &getPosition(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
|
core::vector3df &getPosition(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
|
const core::vector3df &getNormal(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
|
core::vector3df &getNormal(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
|
const core::vector2df &getTCoords(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
|
core::vector2df &getTCoords(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! 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
|
||||||
undefined.
|
undefined.
|
||||||
*/
|
*/
|
||||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_
|
void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) override
|
||||||
{
|
{
|
||||||
if (vertices == getVertices())
|
if (vertices == getVertices())
|
||||||
return;
|
return;
|
||||||
|
@ -192,65 +173,31 @@ 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.
|
|
||||||
*/
|
|
||||||
virtual void append(const IMeshBuffer* const other) _IRR_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
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Vertex;
|
return MappingHint_Vertex;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
|
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
||||||
{
|
{
|
||||||
return MappingHint_Index;
|
return MappingHint_Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
||||||
MappingHint_Vertex = NewMappingHint;
|
MappingHint_Vertex = NewMappingHint;
|
||||||
|
@ -259,19 +206,19 @@ namespace scene
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
|
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
||||||
{
|
{
|
||||||
PrimitiveType = type;
|
PrimitiveType = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
|
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
||||||
{
|
{
|
||||||
return PrimitiveType;
|
return PrimitiveType;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
void setDirty(E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
||||||
++ChangedID_Vertex;
|
++ChangedID_Vertex;
|
||||||
|
@ -281,21 +228,22 @@ namespace scene
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;}
|
u32 getChangedID_Vertex() const override { return ChangedID_Vertex; }
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
|
u32 getChangedID_Index() const override { return ChangedID_Index; }
|
||||||
|
|
||||||
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ {
|
void setHWBuffer(void *ptr) const override
|
||||||
|
{
|
||||||
HWBuffer = ptr;
|
HWBuffer = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void *getHWBuffer() const _IRR_OVERRIDE_ {
|
void *getHWBuffer() const override
|
||||||
|
{
|
||||||
return HWBuffer;
|
return HWBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,210 +0,0 @@
|
||||||
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_VERTEX_BUFFER_H_INCLUDED__
|
|
||||||
#define __C_VERTEX_BUFFER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IVertexBuffer.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
class CVertexBuffer : public IVertexBuffer
|
|
||||||
{
|
|
||||||
class IVertexList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~IVertexList(){};
|
|
||||||
|
|
||||||
virtual u32 stride() const =0;
|
|
||||||
|
|
||||||
virtual u32 size() const =0;
|
|
||||||
|
|
||||||
virtual void push_back (const video::S3DVertex &element) =0;
|
|
||||||
virtual video::S3DVertex& operator [](const u32 index) const =0;
|
|
||||||
virtual video::S3DVertex& getLast() =0;
|
|
||||||
virtual void set_used(u32 usedNow) =0;
|
|
||||||
virtual void reallocate(u32 new_size) =0;
|
|
||||||
virtual u32 allocated_size() const =0;
|
|
||||||
virtual video::S3DVertex* pointer() =0;
|
|
||||||
virtual video::E_VERTEX_TYPE getType() const =0;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
class CSpecificVertexList : public IVertexList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
core::array<T> Vertices;
|
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return sizeof(T);}
|
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_ {return Vertices.size();}
|
|
||||||
|
|
||||||
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_
|
|
||||||
{Vertices.push_back((T&)element);}
|
|
||||||
|
|
||||||
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_
|
|
||||||
{return (video::S3DVertex&)Vertices[index];}
|
|
||||||
|
|
||||||
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_
|
|
||||||
{return (video::S3DVertex&)Vertices.getLast();}
|
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
|
||||||
{Vertices.set_used(usedNow);}
|
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
|
||||||
{Vertices.reallocate(new_size);}
|
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Vertices.allocated_size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_ {return Vertices.pointer();}
|
|
||||||
|
|
||||||
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return T::getType();}
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
IVertexList *Vertices;
|
|
||||||
|
|
||||||
CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0),
|
|
||||||
MappingHint(EHM_NEVER), ChangedID(1)
|
|
||||||
{
|
|
||||||
setType(vertexType);
|
|
||||||
}
|
|
||||||
|
|
||||||
CVertexBuffer(const IVertexBuffer &VertexBufferCopy) :
|
|
||||||
Vertices(0), MappingHint(EHM_NEVER),
|
|
||||||
ChangedID(1)
|
|
||||||
{
|
|
||||||
setType(VertexBufferCopy.getType());
|
|
||||||
reallocate(VertexBufferCopy.size());
|
|
||||||
|
|
||||||
for (u32 n=0;n<VertexBufferCopy.size();++n)
|
|
||||||
push_back(VertexBufferCopy[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~CVertexBuffer()
|
|
||||||
{
|
|
||||||
delete Vertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
virtual void setType(video::E_VERTEX_TYPE vertexType) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
IVertexList *NewVertices=0;
|
|
||||||
|
|
||||||
switch (vertexType)
|
|
||||||
{
|
|
||||||
case video::EVT_STANDARD:
|
|
||||||
{
|
|
||||||
NewVertices=new CSpecificVertexList<video::S3DVertex>;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case video::EVT_2TCOORDS:
|
|
||||||
{
|
|
||||||
NewVertices=new CSpecificVertexList<video::S3DVertex2TCoords>;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case video::EVT_TANGENTS:
|
|
||||||
{
|
|
||||||
NewVertices=new CSpecificVertexList<video::S3DVertexTangents>;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Vertices)
|
|
||||||
{
|
|
||||||
NewVertices->reallocate( Vertices->size() );
|
|
||||||
|
|
||||||
for(u32 n=0;n<Vertices->size();++n)
|
|
||||||
NewVertices->push_back((*Vertices)[n]);
|
|
||||||
|
|
||||||
delete Vertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vertices=NewVertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void* getData() _IRR_OVERRIDE_ {return Vertices->pointer();}
|
|
||||||
|
|
||||||
virtual video::E_VERTEX_TYPE getType() const _IRR_OVERRIDE_ {return Vertices->getType();}
|
|
||||||
|
|
||||||
virtual u32 stride() const _IRR_OVERRIDE_ {return Vertices->stride();}
|
|
||||||
|
|
||||||
virtual u32 size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Vertices->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void push_back (const video::S3DVertex &element) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Vertices->push_back(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual video::S3DVertex& operator [](const u32 index) const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return (*Vertices)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual video::S3DVertex& getLast() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Vertices->getLast();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void set_used(u32 usedNow) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Vertices->set_used(usedNow);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void reallocate(u32 new_size) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
Vertices->reallocate(new_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual u32 allocated_size() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Vertices->allocated_size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual video::S3DVertex* pointer() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return Vertices->pointer();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
return MappingHint;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
MappingHint=NewMappingHint;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
|
||||||
virtual void setDirty() _IRR_OVERRIDE_
|
|
||||||
{
|
|
||||||
++ChangedID;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
|
||||||
virtual u32 getChangedID() const _IRR_OVERRIDE_ {return ChangedID;}
|
|
||||||
|
|
||||||
E_HARDWARE_MAPPING MappingHint;
|
|
||||||
u32 ChangedID;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -28,9 +27,6 @@ namespace scene
|
||||||
//! Overlays Mesh Wireframe
|
//! Overlays Mesh Wireframe
|
||||||
EDS_MESH_WIRE_OVERLAY = 8,
|
EDS_MESH_WIRE_OVERLAY = 8,
|
||||||
|
|
||||||
//! Temporary use transparency Material Type
|
|
||||||
EDS_HALF_TRANSPARENCY = 16,
|
|
||||||
|
|
||||||
//! Show Bounding Boxes of all MeshBuffers
|
//! Show Bounding Boxes of all MeshBuffers
|
||||||
EDS_BBOX_BUFFERS = 32,
|
EDS_BBOX_BUFFERS = 32,
|
||||||
|
|
||||||
|
@ -41,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__
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -16,10 +15,6 @@ namespace irr
|
||||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||||
EIDT_WIN32,
|
EIDT_WIN32,
|
||||||
|
|
||||||
//! A device native to Windows CE devices
|
|
||||||
/** This device works on Windows Mobile, Pocket PC and Microsoft SmartPhone devices */
|
|
||||||
EIDT_WINCE,
|
|
||||||
|
|
||||||
//! A device native to Unix style operating systems.
|
//! A device native to Unix style operating systems.
|
||||||
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
||||||
other operating systems which support X11. */
|
other operating systems which support X11. */
|
||||||
|
@ -29,27 +24,11 @@ namespace irr
|
||||||
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
||||||
EIDT_OSX,
|
EIDT_OSX,
|
||||||
|
|
||||||
//! A device native to the iOS
|
|
||||||
/** This device should be used with the OpenGL-ES driver. */
|
|
||||||
EIDT_IOS,
|
|
||||||
|
|
||||||
//! A device which uses Simple DirectMedia Layer
|
//! A device which uses Simple DirectMedia Layer
|
||||||
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
||||||
in by defining the _IRR_COMPILE_WITH_SDL_DEVICE_ macro in IrrCompileConfig.h */
|
in by setting the USE_SDL2 CMake option to ON */
|
||||||
EIDT_SDL,
|
EIDT_SDL,
|
||||||
|
|
||||||
//! A device for raw framebuffer access
|
|
||||||
/** Best used with embedded devices and mobile systems.
|
|
||||||
Does not need X11 or other graphical subsystems.
|
|
||||||
May support hw-acceleration via OpenGL-ES for FBDirect */
|
|
||||||
EIDT_FRAMEBUFFER,
|
|
||||||
|
|
||||||
//! A simple text only device supported by all platforms.
|
|
||||||
/** This device allows applications to run from the command line without opening a window.
|
|
||||||
It can render the output of the software drivers to the console as ASCII. It only supports
|
|
||||||
mouse and keyboard in Windows operating systems. */
|
|
||||||
EIDT_CONSOLE,
|
|
||||||
|
|
||||||
//! This selection allows Irrlicht to choose the best device from the ones available.
|
//! This selection allows Irrlicht to choose the best device from the ones available.
|
||||||
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
||||||
to your operating system. If this is unavailable then the X11, SDL and then console device
|
to your operating system. If this is unavailable then the X11, SDL and then console device
|
||||||
|
@ -65,6 +44,3 @@ namespace irr
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // __E_DEVICE_TYPES_H_INCLUDED__
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
@ -20,33 +19,6 @@ namespace video
|
||||||
render and display any graphics. */
|
render and display any graphics. */
|
||||||
EDT_NULL,
|
EDT_NULL,
|
||||||
|
|
||||||
//! The Irrlicht Engine Software renderer.
|
|
||||||
/** Runs on all platforms, with every hardware. It should only
|
|
||||||
be used for 2d graphics, but it can also perform some primitive
|
|
||||||
3d functions. These 3d drawing functions are quite fast, but
|
|
||||||
very inaccurate, and don't even support clipping in 3D mode. */
|
|
||||||
EDT_SOFTWARE,
|
|
||||||
|
|
||||||
//! The Burning's Software Renderer, an alternative software renderer
|
|
||||||
/** Basically it can be described as the Irrlicht Software
|
|
||||||
renderer on steroids. It rasterizes 3D geometry perfectly: It
|
|
||||||
is able to perform correct 3d clipping, perspective correct
|
|
||||||
texture mapping, perspective correct color mapping, and renders
|
|
||||||
sub pixel correct, sub texel correct primitives. In addition,
|
|
||||||
it does bilinear texel filtering and supports more materials
|
|
||||||
than the EDT_SOFTWARE driver. This renderer has been written
|
|
||||||
entirely by Thomas Alten, thanks a lot for this huge
|
|
||||||
contribution. */
|
|
||||||
EDT_BURNINGSVIDEO,
|
|
||||||
|
|
||||||
//! Direct3D8 device is longer supported in Irrlicht. You have to go back to Irrlicht 1.8 if you still need that.
|
|
||||||
DEPRECATED_EDT_DIRECT3D8_NO_LONGER_EXISTS, // keep enum to avoid breaking enumeration order (might be used in ini-files, serialization, etc)
|
|
||||||
|
|
||||||
//! Direct3D 9 device, only available on Win32 platforms.
|
|
||||||
/** Performs hardware accelerated rendering of 3D and 2D
|
|
||||||
primitives. */
|
|
||||||
EDT_DIRECT3D9,
|
|
||||||
|
|
||||||
//! OpenGL device, available on most platforms.
|
//! OpenGL device, available on most platforms.
|
||||||
/** Performs hardware accelerated rendering of 3D and 2D
|
/** Performs hardware accelerated rendering of 3D and 2D
|
||||||
primitives. */
|
primitives. */
|
||||||
|
@ -62,40 +34,11 @@ namespace video
|
||||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||||
EDT_WEBGL1,
|
EDT_WEBGL1,
|
||||||
|
|
||||||
|
EDT_OPENGL3,
|
||||||
|
|
||||||
//! No driver, just for counting the elements
|
//! No driver, just for counting the elements
|
||||||
EDT_COUNT
|
EDT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
const c8* const DRIVER_TYPE_NAMES[] =
|
|
||||||
{
|
|
||||||
"NullDriver",
|
|
||||||
"Software Renderer",
|
|
||||||
"Burning's Video",
|
|
||||||
"Direct3D 8.1",
|
|
||||||
"Direct3D 9.0c",
|
|
||||||
"OpenGL 1.x/2.x/3.x",
|
|
||||||
"OpenGL ES1",
|
|
||||||
"OpenGL ES2",
|
|
||||||
"WebGL 1",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
const c8* const DRIVER_TYPE_NAMES_SHORT[] =
|
|
||||||
{
|
|
||||||
"null",
|
|
||||||
"software",
|
|
||||||
"burning",
|
|
||||||
"d3d8",
|
|
||||||
"d3d9",
|
|
||||||
"opengl",
|
|
||||||
"ogles1",
|
|
||||||
"ogles2",
|
|
||||||
"webgl1",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
@ -91,9 +90,6 @@ enum EGUI_ELEMENT_TYPE
|
||||||
//! The root of the GUI
|
//! The root of the GUI
|
||||||
EGUIET_ROOT,
|
EGUIET_ROOT,
|
||||||
|
|
||||||
//! IGUIProfiler
|
|
||||||
EGUIET_PROFILER,
|
|
||||||
|
|
||||||
//! Not an element, amount of elements in there
|
//! Not an element, amount of elements in there
|
||||||
EGUIET_COUNT,
|
EGUIET_COUNT,
|
||||||
|
|
||||||
|
@ -103,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",
|
||||||
|
@ -131,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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
#define __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Material flags
|
|
||||||
enum E_MATERIAL_FLAG
|
|
||||||
{
|
|
||||||
//! Draw as wireframe or filled triangles? Default: false
|
|
||||||
EMF_WIREFRAME = 0x1,
|
|
||||||
|
|
||||||
//! Draw as point cloud or filled triangles? Default: false
|
|
||||||
EMF_POINTCLOUD = 0x2,
|
|
||||||
|
|
||||||
//! Flat or Gouraud shading? Default: true
|
|
||||||
EMF_GOURAUD_SHADING = 0x4,
|
|
||||||
|
|
||||||
//! Will this material be lighted? Default: true
|
|
||||||
EMF_LIGHTING = 0x8,
|
|
||||||
|
|
||||||
//! Is the ZBuffer enabled? Default: true
|
|
||||||
EMF_ZBUFFER = 0x10,
|
|
||||||
|
|
||||||
//! May be written to the zbuffer or is it readonly. Default: true
|
|
||||||
/** This flag is ignored, if the material type is a transparent type. */
|
|
||||||
EMF_ZWRITE_ENABLE = 0x20,
|
|
||||||
|
|
||||||
//! Is backface culling enabled? Default: true
|
|
||||||
EMF_BACK_FACE_CULLING = 0x40,
|
|
||||||
|
|
||||||
//! Is frontface culling enabled? Default: false
|
|
||||||
/** Overrides EMF_BACK_FACE_CULLING if both are enabled. */
|
|
||||||
EMF_FRONT_FACE_CULLING = 0x80,
|
|
||||||
|
|
||||||
//! Is bilinear filtering enabled? Default: true
|
|
||||||
EMF_BILINEAR_FILTER = 0x100,
|
|
||||||
|
|
||||||
//! Is trilinear filtering enabled? Default: false
|
|
||||||
/** If the trilinear filter flag is enabled,
|
|
||||||
the bilinear filtering flag is ignored. */
|
|
||||||
EMF_TRILINEAR_FILTER = 0x200,
|
|
||||||
|
|
||||||
//! Is anisotropic filtering? Default: false
|
|
||||||
/** In Irrlicht you can use anisotropic texture filtering in
|
|
||||||
conjunction with bilinear or trilinear texture filtering
|
|
||||||
to improve rendering results. Primitives will look less
|
|
||||||
blurry with this flag switched on. */
|
|
||||||
EMF_ANISOTROPIC_FILTER = 0x400,
|
|
||||||
|
|
||||||
//! Is fog enabled? Default: false
|
|
||||||
EMF_FOG_ENABLE = 0x800,
|
|
||||||
|
|
||||||
//! Normalizes normals. Default: false
|
|
||||||
/** You can enable this if you need to scale a dynamic lighted
|
|
||||||
model. Usually, its normals will get scaled too then and it
|
|
||||||
will get darker. If you enable the EMF_NORMALIZE_NORMALS flag,
|
|
||||||
the normals will be normalized again, and the model will look
|
|
||||||
as bright as it should. */
|
|
||||||
EMF_NORMALIZE_NORMALS = 0x1000,
|
|
||||||
|
|
||||||
//! Access to all layers texture wrap settings. Overwrites separate layer settings.
|
|
||||||
/** Note that if you want to change TextureWrapU, TextureWrapV, TextureWrapW
|
|
||||||
independently, then you can't work with this flag, but will have to set the variables
|
|
||||||
directly. */
|
|
||||||
EMF_TEXTURE_WRAP = 0x2000,
|
|
||||||
|
|
||||||
//! AntiAliasing mode
|
|
||||||
EMF_ANTI_ALIASING = 0x4000,
|
|
||||||
|
|
||||||
//! ColorMask bits, for enabling the color planes
|
|
||||||
EMF_COLOR_MASK = 0x8000,
|
|
||||||
|
|
||||||
//! ColorMaterial enum for vertex color interpretation
|
|
||||||
EMF_COLOR_MATERIAL = 0x10000,
|
|
||||||
|
|
||||||
//! Flag for enabling/disabling mipmap usage
|
|
||||||
EMF_USE_MIP_MAPS = 0x20000,
|
|
||||||
|
|
||||||
//! Flag for blend operation
|
|
||||||
EMF_BLEND_OPERATION = 0x40000,
|
|
||||||
|
|
||||||
//! Flag for polygon offset
|
|
||||||
EMF_POLYGON_OFFSET = 0x80000,
|
|
||||||
|
|
||||||
//! Flag for blend factor
|
|
||||||
EMF_BLEND_FACTOR = 0x160000
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
|
|
||||||
#endif // __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
|
|
82
include/EMaterialProps.h
Normal file
82
include/EMaterialProps.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
// 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
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace video
|
||||||
|
{
|
||||||
|
|
||||||
|
//! Material properties
|
||||||
|
enum E_MATERIAL_PROP
|
||||||
|
{
|
||||||
|
//! Corresponds to SMaterial::Wireframe.
|
||||||
|
EMP_WIREFRAME = 0x1,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::PointCloud.
|
||||||
|
EMP_POINTCLOUD = 0x2,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::GouraudShading.
|
||||||
|
EMP_GOURAUD_SHADING = 0x4,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::Lighting.
|
||||||
|
EMP_LIGHTING = 0x8,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ZBuffer.
|
||||||
|
EMP_ZBUFFER = 0x10,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ZWriteEnable.
|
||||||
|
EMP_ZWRITE_ENABLE = 0x20,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BackfaceCulling.
|
||||||
|
EMP_BACK_FACE_CULLING = 0x40,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::FrontfaceCulling.
|
||||||
|
EMP_FRONT_FACE_CULLING = 0x80,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::MinFilter.
|
||||||
|
EMP_MIN_FILTER = 0x100,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::MagFilter.
|
||||||
|
EMP_MAG_FILTER = 0x200,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::AnisotropicFilter.
|
||||||
|
EMP_ANISOTROPIC_FILTER = 0x400,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::FogEnable.
|
||||||
|
EMP_FOG_ENABLE = 0x800,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::NormalizeNormals.
|
||||||
|
EMP_NORMALIZE_NORMALS = 0x1000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
|
||||||
|
//! TextureWrapW.
|
||||||
|
EMP_TEXTURE_WRAP = 0x2000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::AntiAliasing.
|
||||||
|
EMP_ANTI_ALIASING = 0x4000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ColorMask.
|
||||||
|
EMP_COLOR_MASK = 0x8000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ColorMaterial.
|
||||||
|
EMP_COLOR_MATERIAL = 0x10000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::UseMipMaps.
|
||||||
|
EMP_USE_MIP_MAPS = 0x20000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BlendOperation.
|
||||||
|
EMP_BLEND_OPERATION = 0x40000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
|
||||||
|
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
|
||||||
|
EMP_POLYGON_OFFSET = 0x80000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BlendFactor.
|
||||||
|
EMP_BLEND_FACTOR = 0x100000,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -18,75 +19,6 @@ namespace video
|
||||||
diffuse material. */
|
diffuse material. */
|
||||||
EMT_SOLID = 0,
|
EMT_SOLID = 0,
|
||||||
|
|
||||||
//! Solid material with 2 texture layers.
|
|
||||||
/** The second is blended onto the first using the alpha value
|
|
||||||
of the vertex colors. This material is currently not implemented in OpenGL.
|
|
||||||
*/
|
|
||||||
EMT_SOLID_2_LAYER,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. */
|
|
||||||
EMT_LIGHTMAP,
|
|
||||||
|
|
||||||
//! Material type with lightmap technique like EMT_LIGHTMAP.
|
|
||||||
/** But lightmap and diffuse texture are added instead of modulated. */
|
|
||||||
EMT_LIGHTMAP_ADD,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. The texture colors are effectively multiplied by 2
|
|
||||||
for brightening. Like known in DirectX as D3DTOP_MODULATE2X. */
|
|
||||||
EMT_LIGHTMAP_M2,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. The texture colors are effectively multiplied by 4
|
|
||||||
for brightening. Like known in DirectX as D3DTOP_MODULATE4X. */
|
|
||||||
EMT_LIGHTMAP_M4,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP_M2, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING_M2,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP_M4, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING_M4,
|
|
||||||
|
|
||||||
//! Detail mapped material.
|
|
||||||
/** The first texture is diffuse color map, the second is added
|
|
||||||
to this and usually displayed with a bigger scale value so that
|
|
||||||
it adds more detail. The detail map is added to the diffuse map
|
|
||||||
using ADD_SIGNED, so that it is possible to add and subtract
|
|
||||||
color from the diffuse map. For example a value of
|
|
||||||
(127,127,127) will not change the appearance of the diffuse map
|
|
||||||
at all. Often used for terrain rendering. */
|
|
||||||
EMT_DETAIL_MAP,
|
|
||||||
|
|
||||||
//! Look like a reflection of the environment around it.
|
|
||||||
/** To make this possible, a texture called 'sphere map' is
|
|
||||||
used, which must be set as the first texture. */
|
|
||||||
EMT_SPHERE_MAP,
|
|
||||||
|
|
||||||
//! A reflecting material with an optional non reflecting texture layer.
|
|
||||||
/** The reflection map should be set as first texture. */
|
|
||||||
EMT_REFLECTION_2_LAYER,
|
|
||||||
|
|
||||||
//! A transparent material.
|
|
||||||
/** Only the first texture is used. The new color is calculated
|
|
||||||
by simply adding the source color and the dest color. This
|
|
||||||
means if for example a billboard using a texture with black
|
|
||||||
background and a red circle on it is drawn with this material,
|
|
||||||
the result is that only the red circle will be drawn a little
|
|
||||||
bit transparent, and everything which was black is 100%
|
|
||||||
transparent and not visible. This material type is useful for
|
|
||||||
particle effects. */
|
|
||||||
EMT_TRANSPARENT_ADD_COLOR,
|
|
||||||
|
|
||||||
//! Makes the material transparent based on the texture alpha channel.
|
//! Makes the material transparent based on the texture alpha channel.
|
||||||
/** The final color is blended together from the destination
|
/** The final color is blended together from the destination
|
||||||
color and the texture color, using the alpha channel value as
|
color and the texture color, using the alpha channel value as
|
||||||
|
@ -115,12 +47,6 @@ namespace video
|
||||||
//! Makes the material transparent based on the vertex alpha value.
|
//! Makes the material transparent based on the vertex alpha value.
|
||||||
EMT_TRANSPARENT_VERTEX_ALPHA,
|
EMT_TRANSPARENT_VERTEX_ALPHA,
|
||||||
|
|
||||||
//! A transparent reflecting material with an optional additional non reflecting texture layer.
|
|
||||||
/** The reflection map should be set as first texture. The
|
|
||||||
transparency depends on the alpha value in the vertex colors. A
|
|
||||||
texture which will not reflect can be set as second texture.*/
|
|
||||||
EMT_TRANSPARENT_REFLECTION_2_LAYER,
|
|
||||||
|
|
||||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||||
/** Using only first texture. Generic blending method.
|
/** Using only first texture. Generic blending method.
|
||||||
The blend function is set to SMaterial::MaterialTypeParam with
|
The blend function is set to SMaterial::MaterialTypeParam with
|
||||||
|
@ -132,32 +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",
|
||||||
"solid_2layer",
|
|
||||||
"lightmap",
|
|
||||||
"lightmap_add",
|
|
||||||
"lightmap_m2",
|
|
||||||
"lightmap_m4",
|
|
||||||
"lightmap_light",
|
|
||||||
"lightmap_light_m2",
|
|
||||||
"lightmap_light_m4",
|
|
||||||
"detail_map",
|
|
||||||
"sphere_map",
|
|
||||||
"reflection_2layer",
|
|
||||||
"trans_add",
|
|
||||||
"trans_alphach",
|
"trans_alphach",
|
||||||
"trans_alphach_ref",
|
"trans_alphach_ref",
|
||||||
"trans_vertex_alpha",
|
"trans_vertex_alpha",
|
||||||
"trans_reflection_2layer",
|
|
||||||
"onetexture_blend",
|
"onetexture_blend",
|
||||||
0
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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__
|
|
||||||
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
|
@ -1,36 +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_MESSAGE_BOX_FLAGS_H_INCLUDED__
|
|
||||||
#define __E_MESSAGE_BOX_FLAGS_H_INCLUDED__
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! enumeration for message box layout flags
|
|
||||||
enum EMESSAGE_BOX_FLAG
|
|
||||||
{
|
|
||||||
//! Flag for the OK button
|
|
||||||
EMBF_OK = 0x1,
|
|
||||||
|
|
||||||
//! Flag for the cancel button
|
|
||||||
EMBF_CANCEL = 0x2,
|
|
||||||
|
|
||||||
//! Flag for the yes button
|
|
||||||
EMBF_YES = 0x4,
|
|
||||||
|
|
||||||
//! Flag for the no button
|
|
||||||
EMBF_NO = 0x8,
|
|
||||||
|
|
||||||
//! This value is not used. It only forces this enumeration to compile in 32 bit.
|
|
||||||
EMBF_FORCE_32BIT = 0x7fffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gui
|
|
||||||
} // namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -36,26 +35,9 @@ namespace scene
|
||||||
//! Explicitly set all vertices for each triangle.
|
//! Explicitly set all vertices for each triangle.
|
||||||
EPT_TRIANGLES,
|
EPT_TRIANGLES,
|
||||||
|
|
||||||
//! After the first two vertices each further two vertices create a quad with the preceding two.
|
|
||||||
//! Not supported by Direct3D
|
|
||||||
EPT_QUAD_STRIP,
|
|
||||||
|
|
||||||
//! Every four vertices create a quad.
|
|
||||||
//! Not supported by Direct3D
|
|
||||||
//! Deprecated with newer OpenGL drivers
|
|
||||||
EPT_QUADS,
|
|
||||||
|
|
||||||
//! Just as LINE_LOOP, but filled.
|
|
||||||
//! Not supported by Direct3D
|
|
||||||
//! Deprecated with newer OpenGL drivers
|
|
||||||
EPT_POLYGON,
|
|
||||||
|
|
||||||
//! The single vertices are expanded to quad billboards on the GPU.
|
//! The single vertices are expanded to quad billboards on the GPU.
|
||||||
EPT_POINT_SPRITES
|
EPT_POINT_SPRITES
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
||||||
|
|
|
@ -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__
|
|
|
@ -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,
|
||||||
|
@ -61,7 +59,7 @@ namespace scene
|
||||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||||
IAnimatedMesh to IAnimatedMeshMD2.
|
IAnimatedMesh to IAnimatedMeshMD2.
|
||||||
\returns Type of the mesh. */
|
\returns Type of the mesh. */
|
||||||
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_
|
E_ANIMATED_MESH_TYPE getMeshType() const override
|
||||||
{
|
{
|
||||||
return EAMT_UNKNOWN;
|
return EAMT_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -69,6 +67,3 @@ namespace scene
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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,28 +40,21 @@ 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) {}
|
||||||
|
|
||||||
//! Get the name of the bone
|
|
||||||
/** \deprecated Use getName instead. This method may be removed by Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ virtual const c8* getBoneName() const { return getName(); }
|
|
||||||
|
|
||||||
//! Get the index of the bone
|
//! Get the index of the bone
|
||||||
virtual u32 getBoneIndex() const = 0;
|
virtual u32 getBoneIndex() const = 0;
|
||||||
|
|
||||||
|
@ -74,17 +66,17 @@ namespace scene
|
||||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||||
|
|
||||||
//! Get the axis aligned bounding box of this node
|
//! Get the axis aligned bounding box of this node
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ = 0;
|
const core::aabbox3d<f32> &getBoundingBox() const override = 0;
|
||||||
|
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
// virtual core::matrix4 getRelativeTransformation() const = 0;
|
// virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||||
|
|
||||||
//! The animation method.
|
//! The animation method.
|
||||||
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_ =0;
|
void OnAnimate(u32 timeMs) override = 0;
|
||||||
|
|
||||||
//! The render method.
|
//! The render method.
|
||||||
/** Does nothing as bones are not visible. */
|
/** Does nothing as bones are not visible. */
|
||||||
virtual void render() _IRR_OVERRIDE_ { }
|
void render() override {}
|
||||||
|
|
||||||
//! How the relative transformation of the bone is used
|
//! How the relative transformation of the bone is used
|
||||||
virtual void setSkinningSpace(E_BONE_SKINNING_SPACE space) = 0;
|
virtual void setSkinningSpace(E_BONE_SKINNING_SPACE space) = 0;
|
||||||
|
@ -100,9 +92,5 @@ namespace scene
|
||||||
s32 rotationHint;
|
s32 rotationHint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
@ -72,7 +71,7 @@ namespace scene
|
||||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||||
this input for changing their position, look at target or
|
this input for changing their position, look at target or
|
||||||
whatever. */
|
whatever. */
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_ =0;
|
bool OnEvent(const SEvent &event) override = 0;
|
||||||
|
|
||||||
//! Sets the look at target of the camera
|
//! Sets the look at target of the camera
|
||||||
/** If the camera's target and rotation are bound ( @see
|
/** If the camera's target and rotation are bound ( @see
|
||||||
|
@ -90,7 +89,7 @@ namespace scene
|
||||||
bindTargetAndRotation() ) then calling this will also change
|
bindTargetAndRotation() ) then calling this will also change
|
||||||
the camera's target to match the rotation.
|
the camera's target to match the rotation.
|
||||||
\param rotation New rotation of the node in degrees. */
|
\param rotation New rotation of the node in degrees. */
|
||||||
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_ =0;
|
void setRotation(const core::vector3df &rotation) override = 0;
|
||||||
|
|
||||||
//! Gets the current look at target of the camera
|
//! Gets the current look at target of the camera
|
||||||
/** \return The current look at target of the camera, in world co-ordinates */
|
/** \return The current look at target of the camera, in world co-ordinates */
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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 __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
#pragma once
|
||||||
#define __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "SExposedVideoData.h"
|
#include "SExposedVideoData.h"
|
||||||
#include "SIrrCreationParameters.h"
|
#include "SIrrCreationParameters.h"
|
||||||
|
@ -58,6 +57,3 @@ namespace video
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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"
|
||||||
|
@ -26,7 +25,7 @@ namespace gui
|
||||||
ECI_HELP, // Arrow and question mark
|
ECI_HELP, // Arrow and question mark
|
||||||
ECI_IBEAM, // typical text-selection cursor
|
ECI_IBEAM, // typical text-selection cursor
|
||||||
ECI_NO, // should not click icon
|
ECI_NO, // should not click icon
|
||||||
ECI_WAIT, // hourclass
|
ECI_WAIT, // hourglass
|
||||||
ECI_SIZEALL, // arrow in all directions
|
ECI_SIZEALL, // arrow in all directions
|
||||||
ECI_SIZENESW, // resizes in direction north-east or south-west
|
ECI_SIZENESW, // resizes in direction north-east or south-west
|
||||||
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
||||||
|
@ -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. */
|
||||||
|
@ -160,6 +157,9 @@ namespace gui
|
||||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||||
virtual void setReferenceRect(core::rect<s32> *rect = 0) = 0;
|
virtual void setReferenceRect(core::rect<s32> *rect = 0) = 0;
|
||||||
|
|
||||||
|
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
||||||
|
/** Specific to SDL */
|
||||||
|
virtual void setRelativeMode(bool relative){};
|
||||||
|
|
||||||
//! Sets the active cursor icon
|
//! Sets the active cursor icon
|
||||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||||
|
@ -191,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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
@ -263,6 +262,10 @@ namespace irr
|
||||||
//! A checkbox has changed its check state.
|
//! A checkbox has changed its check state.
|
||||||
EGET_CHECKBOX_CHANGED,
|
EGET_CHECKBOX_CHANGED,
|
||||||
|
|
||||||
|
//! A listbox would like to open.
|
||||||
|
/** You can prevent the listbox from opening by absorbing the event. */
|
||||||
|
EGET_LISTBOX_OPENED,
|
||||||
|
|
||||||
//! A new item in a listbox was selected.
|
//! A new item in a listbox was selected.
|
||||||
/** NOTE: You also get this event currently when the same item was clicked again after more than 500 ms. */
|
/** NOTE: You also get this event currently when the same item was clicked again after more than 500 ms. */
|
||||||
EGET_LISTBOX_CHANGED,
|
EGET_LISTBOX_CHANGED,
|
||||||
|
@ -280,18 +283,6 @@ namespace irr
|
||||||
//! A file open dialog has been closed without choosing a file
|
//! A file open dialog has been closed without choosing a file
|
||||||
EGET_FILE_CHOOSE_DIALOG_CANCELLED,
|
EGET_FILE_CHOOSE_DIALOG_CANCELLED,
|
||||||
|
|
||||||
//! 'Yes' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_YES,
|
|
||||||
|
|
||||||
//! 'No' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_NO,
|
|
||||||
|
|
||||||
//! 'OK' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_OK,
|
|
||||||
|
|
||||||
//! 'Cancel' was clicked on a messagebox
|
|
||||||
EGET_MESSAGEBOX_CANCEL,
|
|
||||||
|
|
||||||
//! In an editbox 'ENTER' was pressed
|
//! In an editbox 'ENTER' was pressed
|
||||||
EGET_EDITBOX_ENTER,
|
EGET_EDITBOX_ENTER,
|
||||||
|
|
||||||
|
@ -304,42 +295,19 @@ namespace irr
|
||||||
//! The tab was changed in an tab control
|
//! The tab was changed in an tab control
|
||||||
EGET_TAB_CHANGED,
|
EGET_TAB_CHANGED,
|
||||||
|
|
||||||
//! A menu item was selected in a (context) menu
|
|
||||||
EGET_MENU_ITEM_SELECTED,
|
|
||||||
|
|
||||||
//! The selection in a combo box has been changed
|
//! The selection in a combo box has been changed
|
||||||
EGET_COMBO_BOX_CHANGED,
|
EGET_COMBO_BOX_CHANGED,
|
||||||
|
|
||||||
//! The value of a spin box has changed
|
|
||||||
EGET_SPINBOX_CHANGED,
|
|
||||||
|
|
||||||
//! A table has changed
|
//! A table has changed
|
||||||
EGET_TABLE_CHANGED,
|
EGET_TABLE_CHANGED,
|
||||||
EGET_TABLE_HEADER_CHANGED,
|
EGET_TABLE_HEADER_CHANGED,
|
||||||
EGET_TABLE_SELECTED_AGAIN,
|
EGET_TABLE_SELECTED_AGAIN,
|
||||||
|
|
||||||
//! A tree view node lost selection. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_DESELECT,
|
|
||||||
|
|
||||||
//! A tree view node was selected. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_SELECT,
|
|
||||||
|
|
||||||
//! A tree view node was expanded. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_EXPAND,
|
|
||||||
|
|
||||||
//! A tree view node was collapsed. See IGUITreeView::getLastEventNode().
|
|
||||||
EGET_TREEVIEW_NODE_COLLAPSE,
|
|
||||||
|
|
||||||
//! deprecated - use EGET_TREEVIEW_NODE_COLLAPSE instead. This
|
|
||||||
//! may be removed by Irrlicht 1.9
|
|
||||||
EGET_TREEVIEW_NODE_COLLAPS = EGET_TREEVIEW_NODE_COLLAPSE,
|
|
||||||
|
|
||||||
//! No real event. Just for convenience to get number of events
|
//! No real event. Just for convenience to get number of events
|
||||||
EGET_COUNT
|
EGET_COUNT
|
||||||
};
|
};
|
||||||
} // 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
|
||||||
{
|
{
|
||||||
|
@ -354,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.
|
||||||
|
@ -486,10 +453,10 @@ struct SEvent
|
||||||
/** Unlike other events, joystick events represent the result of polling
|
/** Unlike other events, joystick events represent the result of polling
|
||||||
* each connected joystick once per run() of the device. Joystick events will
|
* each connected joystick once per run() of the device. Joystick events will
|
||||||
* not be generated by default. If joystick support is available for the
|
* not be generated by default. If joystick support is available for the
|
||||||
* active device, _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ is defined, and
|
* active device, and @ref irr::IrrlichtDevice::activateJoysticks() has been
|
||||||
* @ref irr::IrrlichtDevice::activateJoysticks() has been called, an event of
|
* called, an event of this type will be generated once per joystick per
|
||||||
* this type will be generated once per joystick per @ref IrrlichtDevice::run()
|
* @ref IrrlichtDevice::run() regardless of whether the state of the joystick
|
||||||
* regardless of whether the state of the joystick has actually changed. */
|
* has actually changed. */
|
||||||
struct SJoystickEvent
|
struct SJoystickEvent
|
||||||
{
|
{
|
||||||
enum
|
enum
|
||||||
|
@ -603,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.
|
||||||
|
@ -615,7 +581,6 @@ path it takes through the system. */
|
||||||
class IEventReceiver
|
class IEventReceiver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IEventReceiver() {}
|
virtual ~IEventReceiver() {}
|
||||||
|
|
||||||
|
@ -628,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
|
||||||
{
|
{
|
||||||
|
@ -665,8 +629,4 @@ struct SJoystickInfo
|
||||||
} PovHat;
|
} PovHat;
|
||||||
}; // struct SJoystickInfo
|
}; // struct SJoystickInfo
|
||||||
|
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
@ -210,58 +206,6 @@ public:
|
||||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||||
virtual IArchiveLoader *getArchiveLoader(u32 index) const = 0;
|
virtual IArchiveLoader *getArchiveLoader(u32 index) const = 0;
|
||||||
|
|
||||||
//! Adds a zip archive to the file system.
|
|
||||||
/** \deprecated This function is provided for compatibility
|
|
||||||
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
|
|
||||||
you should use addFileArchive instead.
|
|
||||||
After calling this, the Irrlicht Engine will search and open files directly from this archive too.
|
|
||||||
This is useful for hiding data from the end user, speeding up file access and making it possible to
|
|
||||||
access for example Quake3 .pk3 files, which are no different than .zip files.
|
|
||||||
\param filename: Filename of the zip archive to add to the file system.
|
|
||||||
\param ignoreCase: If set to true, files in the archive can be accessed without
|
|
||||||
writing all letters in the right case.
|
|
||||||
\param ignorePaths: If set to true, files in the added archive can be accessed
|
|
||||||
without its complete path.
|
|
||||||
\return True if the archive was added successfully, false if not. */
|
|
||||||
_IRR_DEPRECATED_ virtual bool addZipFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
|
|
||||||
{
|
|
||||||
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_ZIP);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds an unzipped archive (or basedirectory with subdirectories..) to the file system.
|
|
||||||
/** \deprecated This function is provided for compatibility
|
|
||||||
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
|
|
||||||
you should use addFileArchive instead.
|
|
||||||
Useful for handling data which will be in a zip file
|
|
||||||
\param filename: Filename of the unzipped zip archive base directory to add to the file system.
|
|
||||||
\param ignoreCase: If set to true, files in the archive can be accessed without
|
|
||||||
writing all letters in the right case.
|
|
||||||
\param ignorePaths: If set to true, files in the added archive can be accessed
|
|
||||||
without its complete path.
|
|
||||||
\return True if the archive was added successful, false if not. */
|
|
||||||
_IRR_DEPRECATED_ virtual bool addFolderFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
|
|
||||||
{
|
|
||||||
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_FOLDER);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds a pak archive to the file system.
|
|
||||||
/** \deprecated This function is provided for compatibility
|
|
||||||
with older versions of Irrlicht and may be removed in Irrlicht 1.9,
|
|
||||||
you should use addFileArchive instead.
|
|
||||||
After calling this, the Irrlicht Engine will search and open files directly from this archive too.
|
|
||||||
This is useful for hiding data from the end user, speeding up file access and making it possible to
|
|
||||||
access for example Quake2/KingPin/Hexen2 .pak files
|
|
||||||
\param filename: Filename of the pak archive to add to the file system.
|
|
||||||
\param ignoreCase: If set to true, files in the archive can be accessed without
|
|
||||||
writing all letters in the right case.
|
|
||||||
\param ignorePaths: If set to true, files in the added archive can be accessed
|
|
||||||
without its complete path.(should not use with Quake2 paks
|
|
||||||
\return True if the archive was added successful, false if not. */
|
|
||||||
_IRR_DEPRECATED_ virtual bool addPakFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true)
|
|
||||||
{
|
|
||||||
return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_PAK);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the current working directory.
|
//! Get the current working directory.
|
||||||
/** \return Current working directory as a string. */
|
/** \return Current working directory as a string. */
|
||||||
virtual const path &getWorkingDirectory() = 0;
|
virtual const path &getWorkingDirectory() = 0;
|
||||||
|
@ -317,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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,37 +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 __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
#define __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Standard color chooser dialog.
|
|
||||||
class IGUIColorSelectDialog : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIColorSelectDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_COLOR_SELECT_DIALOG, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! get chosen color as usual SColor struct
|
|
||||||
virtual video::SColor getColor() =0;
|
|
||||||
|
|
||||||
//! get chosen color as HSL values
|
|
||||||
virtual video::SColorHSL getColorHSL() =0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -52,11 +50,15 @@ namespace gui
|
||||||
//! Sets the selected item. Set this to -1 if no item should be selected
|
//! Sets the selected item. Set this to -1 if no item should be selected
|
||||||
virtual void setSelected(s32 idx) = 0;
|
virtual void setSelected(s32 idx) = 0;
|
||||||
|
|
||||||
|
//! Sets the selected item and emits a change event.
|
||||||
|
/** Set this to -1 if no item should be selected */
|
||||||
|
virtual void setAndSendSelected(s32 idx) = 0;
|
||||||
|
|
||||||
//! Sets text justification of the text area
|
//! Sets text justification of the text area
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
|
|
||||||
//! Set the maximal number of rows for the selection listbox
|
//! Set the maximal number of rows for the selection listbox
|
||||||
|
@ -66,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
|
|
||||||
|
|
||||||
|
|
|
@ -1,162 +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 __I_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
#define __I_GUI_CONTEXT_MENU_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
//! Close behavior.
|
|
||||||
//! Default is ECMC_REMOVE
|
|
||||||
enum ECONTEXT_MENU_CLOSE
|
|
||||||
{
|
|
||||||
//! do nothing - menu stays open
|
|
||||||
ECMC_IGNORE = 0,
|
|
||||||
|
|
||||||
//! remove the gui element
|
|
||||||
ECMC_REMOVE = 1,
|
|
||||||
|
|
||||||
//! call setVisible(false)
|
|
||||||
ECMC_HIDE = 2
|
|
||||||
|
|
||||||
// note to implementers - this is planned as bitset, so continue with 4 if you need to add further flags.
|
|
||||||
};
|
|
||||||
|
|
||||||
//! GUI Context menu interface.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_ELEMENT_CLOSED
|
|
||||||
\li EGET_MENU_ITEM_SELECTED
|
|
||||||
*/
|
|
||||||
class IGUIContextMenu : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIContextMenu(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_CONTEXT_MENU, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! set behavior when menus are closed
|
|
||||||
virtual void setCloseHandling(ECONTEXT_MENU_CLOSE onClose) = 0;
|
|
||||||
|
|
||||||
//! get current behavior when the menu will be closed
|
|
||||||
virtual ECONTEXT_MENU_CLOSE getCloseHandling() const = 0;
|
|
||||||
|
|
||||||
//! Get amount of menu items
|
|
||||||
virtual u32 getItemCount() const = 0;
|
|
||||||
|
|
||||||
//! Adds a menu item.
|
|
||||||
/** \param text: Text of menu item. Set this to 0 to create
|
|
||||||
an separator instead of a real item, which is the same like
|
|
||||||
calling addSeparator();
|
|
||||||
\param commandId: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want.
|
|
||||||
\param enabled: Specifies if the menu item should be enabled.
|
|
||||||
\param hasSubMenu: Set this to true if there should be a submenu
|
|
||||||
at this item. You can access this submenu via getSubMenu().
|
|
||||||
\param checked: Specifies if the menu item should be initially checked.
|
|
||||||
\param autoChecking: Specifies if the item should be checked by clicking
|
|
||||||
\return Returns the index of the new item */
|
|
||||||
virtual u32 addItem(const wchar_t* text, s32 commandId=-1, bool enabled=true,
|
|
||||||
bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0;
|
|
||||||
|
|
||||||
//! Insert a menu item at specified position.
|
|
||||||
/** \param idx: Position to insert the new element,
|
|
||||||
should be smaller than itemcount otherwise the item is added to the end.
|
|
||||||
\param text: Text of menu item. Set this to 0 to create
|
|
||||||
an separator instead of a real item, which is the same like
|
|
||||||
calling addSeparator();
|
|
||||||
\param commandId: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want.
|
|
||||||
\param enabled: Specifies if the menu item should be enabled.
|
|
||||||
\param hasSubMenu: Set this to true if there should be a submenu
|
|
||||||
at this item. You can access this submenu via getSubMenu().
|
|
||||||
\param checked: Specifies if the menu item should be initially checked.
|
|
||||||
\param autoChecking: Specifies if the item should be checked by clicking
|
|
||||||
\return Returns the index of the new item */
|
|
||||||
virtual u32 insertItem(u32 idx, const wchar_t* text, s32 commandId=-1, bool enabled=true,
|
|
||||||
bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0;
|
|
||||||
|
|
||||||
//! Find an item by its CommandID
|
|
||||||
/**
|
|
||||||
\param commandId: We are looking for the first item which has this commandID
|
|
||||||
\param idxStartSearch: Start searching from this index.
|
|
||||||
\return Returns the index of the item when found or otherwise -1. */
|
|
||||||
virtual s32 findItemWithCommandId(s32 commandId, u32 idxStartSearch=0) const = 0;
|
|
||||||
|
|
||||||
//! Adds a separator item to the menu
|
|
||||||
virtual void addSeparator() = 0;
|
|
||||||
|
|
||||||
//! Get text of the menu item.
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual const wchar_t* getItemText(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets text of the menu item.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param text: New text of the item. */
|
|
||||||
virtual void setItemText(u32 idx, const wchar_t* text) = 0;
|
|
||||||
|
|
||||||
//! Check if a menu item is enabled
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual bool isItemEnabled(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be enabled.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param enabled: True if it is enabled, otherwise false. */
|
|
||||||
virtual void setItemEnabled(u32 idx, bool enabled) = 0;
|
|
||||||
|
|
||||||
//! Sets if the menu item should be checked.
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param enabled: True if it is enabled, otherwise false. */
|
|
||||||
virtual void setItemChecked(u32 idx, bool enabled) = 0;
|
|
||||||
|
|
||||||
//! Check if a menu item is checked
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual bool isItemChecked(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Removes a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual void removeItem(u32 idx) = 0;
|
|
||||||
|
|
||||||
//! Removes all menu items
|
|
||||||
virtual void removeAllItems() = 0;
|
|
||||||
|
|
||||||
//! Get the selected item in the menu
|
|
||||||
/** \return Index of the selected item, -1 if none selected. */
|
|
||||||
virtual s32 getSelectedItem() const = 0;
|
|
||||||
|
|
||||||
//! Get the command id of a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item */
|
|
||||||
virtual s32 getItemCommandId(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Sets the command id of a menu item
|
|
||||||
/** \param idx: Zero based index of the menu item
|
|
||||||
\param id: Command id of menu item, a simple id you may
|
|
||||||
set to whatever you want. */
|
|
||||||
virtual void setItemCommandId(u32 idx, s32 id) = 0;
|
|
||||||
|
|
||||||
//! Get a pointer to the submenu of an item.
|
|
||||||
/** 0 is returned if there is no submenu
|
|
||||||
\param idx: Zero based index of the menu item
|
|
||||||
\return Returns a pointer to the submenu of an item. */
|
|
||||||
virtual IGUIContextMenu* getSubMenu(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! should the element change the checked status on clicking
|
|
||||||
virtual void setItemAutoChecking(u32 idx, bool autoChecking) = 0;
|
|
||||||
|
|
||||||
//! does the element change the checked status on clicking
|
|
||||||
virtual bool getItemAutoChecking(u32 idx) const = 0;
|
|
||||||
|
|
||||||
//! When an eventparent is set it receives events instead of the usual parent element
|
|
||||||
virtual void setEventParent(IGUIElement *parent) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -2,11 +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 __I_GUI_ELEMENT_H_INCLUDED__
|
#pragma once
|
||||||
#define __I_GUI_ELEMENT_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrList.h"
|
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
#include "IEventReceiver.h"
|
#include "IEventReceiver.h"
|
||||||
|
@ -14,6 +12,10 @@
|
||||||
#include "EGUIAlignment.h"
|
#include "EGUIAlignment.h"
|
||||||
#include "IAttributes.h"
|
#include "IAttributes.h"
|
||||||
#include "IGUIEnvironment.h"
|
#include "IGUIEnvironment.h"
|
||||||
|
#include <cassert>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <list>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -23,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),
|
||||||
|
@ -39,27 +41,21 @@ 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()
|
||||||
{
|
{
|
||||||
// delete all children
|
for (auto child : Children) {
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
child->Parent = nullptr;
|
||||||
for (; it != Children.end(); ++it)
|
child->drop();
|
||||||
{
|
|
||||||
(*it)->Parent = 0;
|
|
||||||
(*it)->drop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! 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,14 +224,11 @@ public:
|
||||||
recalculateAbsolutePosition(false);
|
recalculateAbsolutePosition(false);
|
||||||
|
|
||||||
// update all children
|
// update all children
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
for (auto child : Children) {
|
||||||
for (; it != Children.end(); ++it)
|
child->updateAbsolutePosition();
|
||||||
{
|
|
||||||
(*it)->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
|
||||||
|
@ -263,20 +245,17 @@ public:
|
||||||
{
|
{
|
||||||
IGUIElement *target = 0;
|
IGUIElement *target = 0;
|
||||||
|
|
||||||
|
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();
|
||||||
core::list<IGUIElement*>::ConstIterator it = Children.getLast();
|
auto ie = Children.rend();
|
||||||
|
while (it != ie) {
|
||||||
if (isVisible())
|
|
||||||
{
|
|
||||||
while(it != Children.end())
|
|
||||||
{
|
|
||||||
target = (*it)->getElementFromPoint(point);
|
target = (*it)->getElementFromPoint(point);
|
||||||
if (target)
|
if (target)
|
||||||
return target;
|
return target;
|
||||||
|
|
||||||
--it;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,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
|
||||||
|
@ -294,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();
|
||||||
}
|
}
|
||||||
|
@ -308,17 +284,20 @@ public:
|
||||||
//! Removes a child.
|
//! Removes a child.
|
||||||
virtual void removeChild(IGUIElement *child)
|
virtual void removeChild(IGUIElement *child)
|
||||||
{
|
{
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
assert(child->Parent == this);
|
||||||
for (; it != Children.end(); ++it)
|
Children.erase(child->ParentPos);
|
||||||
if ((*it) == child)
|
child->Parent = nullptr;
|
||||||
{
|
child->drop();
|
||||||
(*it)->Parent = 0;
|
|
||||||
(*it)->drop();
|
|
||||||
Children.erase(it);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Removes all children.
|
||||||
|
virtual void removeAllChildren()
|
||||||
|
{
|
||||||
|
while (!Children.empty()) {
|
||||||
|
auto child = Children.back();
|
||||||
|
child->remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! Removes this element from its parent.
|
//! Removes this element from its parent.
|
||||||
virtual void remove()
|
virtual void remove()
|
||||||
|
@ -327,38 +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)
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
child->draw();
|
||||||
for (; it != Children.end(); ++it)
|
|
||||||
(*it)->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)
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
child->OnPostRender(timeMs);
|
||||||
for (; it != Children.end(); ++it)
|
|
||||||
(*it)->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
|
||||||
{
|
{
|
||||||
|
@ -385,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() */
|
||||||
|
@ -401,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. */
|
||||||
|
@ -410,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);
|
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. */
|
||||||
|
@ -463,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()
|
||||||
{
|
{
|
||||||
|
@ -482,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.
|
||||||
|
@ -496,109 +453,86 @@ 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.
|
||||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_
|
bool OnEvent(const SEvent &event) override
|
||||||
{
|
{
|
||||||
return Parent ? Parent->OnEvent(event) : false;
|
return Parent ? Parent->OnEvent(event) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! 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* element)
|
virtual bool bringToFront(IGUIElement *child)
|
||||||
{
|
{
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
if (child->Parent != this)
|
||||||
for (; it != Children.end(); ++it)
|
return false;
|
||||||
{
|
if (std::next(child->ParentPos) == Children.end()) // already there
|
||||||
if (element == (*it))
|
return true;
|
||||||
{
|
Children.erase(child->ParentPos);
|
||||||
Children.erase(it);
|
child->ParentPos = Children.insert(Children.end(), child);
|
||||||
Children.push_back(element);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! 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)
|
||||||
{
|
{
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
if (child->Parent != this)
|
||||||
if (child == (*it)) // already there
|
|
||||||
return true;
|
|
||||||
for (; it != Children.end(); ++it)
|
|
||||||
{
|
|
||||||
if (child == (*it))
|
|
||||||
{
|
|
||||||
Children.erase(it);
|
|
||||||
Children.push_front(child);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
if (child->ParentPos == Children.begin()) // already there
|
||||||
|
return true;
|
||||||
|
Children.erase(child->ParentPos);
|
||||||
|
child->ParentPos = Children.insert(Children.begin(), child);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns list with children of this element
|
//! Returns list with children of this element
|
||||||
virtual const core::list<IGUIElement*>& getChildren() const
|
virtual const std::list<IGUIElement *> &getChildren() const
|
||||||
{
|
{
|
||||||
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
|
||||||
|
@ -610,14 +544,12 @@ public:
|
||||||
{
|
{
|
||||||
IGUIElement *e = 0;
|
IGUIElement *e = 0;
|
||||||
|
|
||||||
core::list<IGUIElement*>::ConstIterator it = Children.begin();
|
for (auto child : Children) {
|
||||||
for (; it != Children.end(); ++it)
|
if (child->getID() == id)
|
||||||
{
|
return child;
|
||||||
if ((*it)->getID() == id)
|
|
||||||
return (*it);
|
|
||||||
|
|
||||||
if (searchchildren)
|
if (searchchildren)
|
||||||
e = (*it)->getElementFromId(id, true);
|
e = child->getElementFromId(id, true);
|
||||||
|
|
||||||
if (e)
|
if (e)
|
||||||
return e;
|
return e;
|
||||||
|
@ -626,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
|
||||||
|
@ -663,66 +591,50 @@ public:
|
||||||
if (wanted == -2)
|
if (wanted == -2)
|
||||||
wanted = 1073741824; // maximum s32
|
wanted = 1073741824; // maximum s32
|
||||||
|
|
||||||
core::list<IGUIElement*>::ConstIterator it = Children.begin();
|
auto it = Children.begin();
|
||||||
|
|
||||||
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))
|
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled)) {
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -731,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.
|
||||||
|
@ -756,10 +667,8 @@ 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. For serializing your own elements, override this function
|
/** This is needed serializing elements. */
|
||||||
and return your own type name which is created by your IGUIElementFactory */
|
|
||||||
virtual const c8 *getTypeName() const
|
virtual const c8 *getTypeName() const
|
||||||
{
|
{
|
||||||
return GUIElementTypeNames[Type];
|
return GUIElementTypeNames[Type];
|
||||||
|
@ -772,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)
|
||||||
|
@ -780,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)
|
||||||
|
@ -788,28 +695,54 @@ 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();
|
||||||
child->Parent = this;
|
child->Parent = this;
|
||||||
Children.push_back(child);
|
child->ParentPos = Children.insert(Children.end(), child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
template <typename Iterator>
|
||||||
|
static size_t _fastSetChecksum(Iterator begin, Iterator end)
|
||||||
|
{
|
||||||
|
std::hash<typename Iterator::value_type> hasher;
|
||||||
|
size_t checksum = 0;
|
||||||
|
for (Iterator it = begin; it != end; ++it) {
|
||||||
|
size_t h = hasher(*it);
|
||||||
|
checksum ^= 966073049 + (h * 3432918353) + ((h >> 16) * 461845907);
|
||||||
|
}
|
||||||
|
return checksum;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Reorder children [from, to) to the order given by `neworder`
|
||||||
|
void reorderChildren(
|
||||||
|
std::list<IGUIElement *>::iterator from,
|
||||||
|
std::list<IGUIElement *>::iterator to,
|
||||||
|
const std::vector<IGUIElement *> &neworder)
|
||||||
|
{
|
||||||
|
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
|
||||||
|
for (auto e : neworder) {
|
||||||
|
*from = e;
|
||||||
|
e->ParentPos = from;
|
||||||
|
++from;
|
||||||
|
}
|
||||||
|
assert(from == to);
|
||||||
|
}
|
||||||
|
|
||||||
// not virtual because needed in constructor
|
// not virtual because needed in constructor
|
||||||
void recalculateAbsolutePosition(bool recursive)
|
void recalculateAbsolutePosition(bool recursive)
|
||||||
{
|
{
|
||||||
|
@ -817,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -841,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:
|
||||||
|
@ -856,8 +785,7 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignRight)
|
switch (AlignRight) {
|
||||||
{
|
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -871,8 +799,7 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignTop)
|
switch (AlignTop) {
|
||||||
{
|
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -886,8 +813,7 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignBottom)
|
switch (AlignBottom) {
|
||||||
{
|
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -928,25 +854,24 @@ protected:
|
||||||
|
|
||||||
LastParentRect = parentAbsolute;
|
LastParentRect = parentAbsolute;
|
||||||
|
|
||||||
if ( recursive )
|
if (recursive) {
|
||||||
{
|
|
||||||
// update all children
|
// update all children
|
||||||
core::list<IGUIElement*>::Iterator it = Children.begin();
|
for (auto child : Children) {
|
||||||
for (; it != Children.end(); ++it)
|
child->recalculateAbsolutePosition(recursive);
|
||||||
{
|
|
||||||
(*it)->recalculateAbsolutePosition(recursive);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! List of all children of this element
|
//! List of all children of this element
|
||||||
core::list<IGUIElement*> Children;
|
std::list<IGUIElement *> Children;
|
||||||
|
|
||||||
//! Pointer to the parent
|
//! Pointer to the parent
|
||||||
IGUIElement *Parent;
|
IGUIElement *Parent;
|
||||||
|
|
||||||
|
//! Our position in the parent list. Only valid when Parent != nullptr
|
||||||
|
std::list<IGUIElement *>::iterator ParentPos;
|
||||||
|
|
||||||
//! relative rect of element
|
//! relative rect of element
|
||||||
core::rect<s32> RelativeRect;
|
core::rect<s32> RelativeRect;
|
||||||
|
|
||||||
|
@ -1012,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
|
|
||||||
|
|
||||||
|
|
|
@ -1,66 +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 __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
#define __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
|
||||||
#include "EGUIElementTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIElement;
|
|
||||||
|
|
||||||
//! Interface making it possible to dynamically create GUI elements
|
|
||||||
/** To be able to add custom elements to Irrlicht and to make it possible for the
|
|
||||||
scene manager to save and load them, simply implement this interface and register it
|
|
||||||
in your gui environment via IGUIEnvironment::registerGUIElementFactory.
|
|
||||||
Note: When implementing your own element factory, don't call IGUIEnvironment::grab() to
|
|
||||||
increase the reference counter of the environment. This is not necessary because the
|
|
||||||
it will grab() the factory anyway, and otherwise cyclic references will be created.
|
|
||||||
*/
|
|
||||||
class IGUIElementFactory : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! adds an element to the gui environment based on its type id
|
|
||||||
/** \param type: Type of the element to add.
|
|
||||||
\param parent: Parent scene node of the new element, can be null to add to the root.
|
|
||||||
\return Pointer to the new element or null if not successful. */
|
|
||||||
virtual IGUIElement* addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! adds a GUI element to the GUI Environment based on its type name
|
|
||||||
/** \param typeName: Type name of the element to add.
|
|
||||||
\param parent: Parent scene node of the new element, can be null to add it to the root.
|
|
||||||
\return Pointer to the new element or null if not successful. */
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* typeName, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Get amount of GUI element types this factory is able to create
|
|
||||||
virtual s32 getCreatableGUIElementTypeCount() const = 0;
|
|
||||||
|
|
||||||
//! Get type of a creatable element type
|
|
||||||
/** \param idx: Index of the element type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableGUIElementTypeCount() */
|
|
||||||
virtual EGUI_ELEMENT_TYPE getCreateableGUIElementType(s32 idx) const = 0;
|
|
||||||
|
|
||||||
//! Get type name of a creatable GUI element type by index
|
|
||||||
/** \param idx: Index of the type in this factory. Must be a value between 0 and
|
|
||||||
getCreatableGUIElementTypeCount() */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(s32 idx) const = 0;
|
|
||||||
|
|
||||||
//! returns type name of a creatable GUI element
|
|
||||||
/** \param type: Type of GUI element.
|
|
||||||
\return Name of the type if this factory can create the type, otherwise 0. */
|
|
||||||
virtual const c8* getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // __I_GUI_ELEMENT_FACTORY_H_INCLUDED__
|
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
// 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"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "EMessageBoxFlags.h"
|
|
||||||
#include "EFocusFlags.h"
|
#include "EFocusFlags.h"
|
||||||
#include "IEventReceiver.h"
|
#include "IEventReceiver.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -38,27 +36,17 @@ class IGUIFont;
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
class IGUIScrollBar;
|
class IGUIScrollBar;
|
||||||
class IGUIImage;
|
class IGUIImage;
|
||||||
class IGUIMeshViewer;
|
|
||||||
class IGUICheckBox;
|
class IGUICheckBox;
|
||||||
class IGUIListBox;
|
class IGUIListBox;
|
||||||
class IGUITreeView;
|
|
||||||
class IGUIImageList;
|
class IGUIImageList;
|
||||||
class IGUIFileOpenDialog;
|
class IGUIFileOpenDialog;
|
||||||
class IGUIColorSelectDialog;
|
|
||||||
class IGUIInOutFader;
|
|
||||||
class IGUIStaticText;
|
class IGUIStaticText;
|
||||||
class IGUIEditBox;
|
class IGUIEditBox;
|
||||||
class IGUISpinBox;
|
|
||||||
class IGUITabControl;
|
class IGUITabControl;
|
||||||
class IGUITab;
|
class IGUITab;
|
||||||
class IGUITable;
|
|
||||||
class IGUIContextMenu;
|
|
||||||
class IGUIComboBox;
|
class IGUIComboBox;
|
||||||
class IGUIToolBar;
|
|
||||||
class IGUIButton;
|
class IGUIButton;
|
||||||
class IGUIWindow;
|
class IGUIWindow;
|
||||||
class IGUIProfiler;
|
|
||||||
class IGUIElementFactory;
|
|
||||||
|
|
||||||
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
||||||
|
@ -70,7 +58,6 @@ class IGUIElementFactory;
|
||||||
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. */
|
||||||
|
@ -164,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
|
||||||
|
@ -235,55 +221,6 @@ public:
|
||||||
virtual IGUIButton *addButton(const core::rect<s32> &rectangle,
|
virtual IGUIButton *addButton(const core::rect<s32> &rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0, const wchar_t *tooltiptext = 0) = 0;
|
IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0, const wchar_t *tooltiptext = 0) = 0;
|
||||||
|
|
||||||
//! Adds an empty window element.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the window.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the window cannot be used until
|
|
||||||
it is removed.
|
|
||||||
\param text Text displayed as the window title.
|
|
||||||
\param parent Parent gui element of the window.
|
|
||||||
\param id Id with which the gui element can be identified.
|
|
||||||
\return Pointer to the created window. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIWindow* addWindow(const core::rect<s32>& rectangle, bool modal = false,
|
|
||||||
const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a modal screen.
|
|
||||||
/** Input focus stays with children of the modal screen.
|
|
||||||
If you have some window x which should keep the input focus you
|
|
||||||
do something like: addModalScreen()->addChild(x). And x will then get the focus
|
|
||||||
and not lose it anymore.
|
|
||||||
The modal screen removes itself when it no longer has any children.
|
|
||||||
Note that it usually works badly to pass the modal screen already as parent when creating
|
|
||||||
a new element. It's better to add that new element later to the modal screen with addChild.
|
|
||||||
\param parent Parent gui element of the modal.
|
|
||||||
\param blinkMode Bitset of when to blink (can be combined)
|
|
||||||
0 = never
|
|
||||||
1 = focus changes
|
|
||||||
2 = Left mouse button pressed down
|
|
||||||
\return Pointer to the created modal. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIElement* addModalScreen(IGUIElement* parent, int blinkMode = 3) = 0;
|
|
||||||
|
|
||||||
//! Adds a message box.
|
|
||||||
/** \param caption Text to be displayed the title of the message box.
|
|
||||||
\param text Text to be displayed in the body of the message box.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the message box cannot be used
|
|
||||||
until this messagebox is removed.
|
|
||||||
\param flags Flags specifying the layout of the message box using ::EMESSAGE_BOX_FLAG.
|
|
||||||
Create a message box with an OK and CANCEL button for example with (EMBF_OK | EMBF_CANCEL).
|
|
||||||
\param parent Parent gui element of the message box.
|
|
||||||
\param id Id with which the gui element can be identified.
|
|
||||||
\param image Optional texture which will be displayed beside the text as an image
|
|
||||||
\return Pointer to the created message box. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0,
|
|
||||||
bool modal = true, s32 flags = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0) = 0;
|
|
||||||
|
|
||||||
//! Adds a scrollbar.
|
//! Adds a scrollbar.
|
||||||
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
||||||
or vertical.
|
or vertical.
|
||||||
|
@ -348,31 +285,6 @@ public:
|
||||||
virtual IGUIListBox *addListBox(const core::rect<s32> &rectangle,
|
virtual IGUIListBox *addListBox(const core::rect<s32> &rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, bool drawBackground = false) = 0;
|
IGUIElement *parent = 0, s32 id = -1, bool drawBackground = false) = 0;
|
||||||
|
|
||||||
//! Adds a tree view element.
|
|
||||||
/** \param rectangle Position and dimension of list box.
|
|
||||||
\param parent Parent gui element of the list box.
|
|
||||||
\param id Id to identify the gui element.
|
|
||||||
\param drawBackground Flag whether the background should be drawn.
|
|
||||||
\param scrollBarVertical Flag whether a vertical scrollbar should be used
|
|
||||||
\param scrollBarHorizontal Flag whether a horizontal scrollbar should be used
|
|
||||||
\return Pointer to the created list box. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUITreeView* addTreeView(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false,
|
|
||||||
bool scrollBarVertical = true, bool scrollBarHorizontal = false) = 0;
|
|
||||||
|
|
||||||
//! Adds a mesh viewer. Not 100% implemented yet.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the mesh viewer.
|
|
||||||
\param parent Parent gui element of the mesh viewer.
|
|
||||||
\param id Id to identify the gui element.
|
|
||||||
\param text Title text of the mesh viewer.
|
|
||||||
\return Pointer to the created mesh viewer. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIMeshViewer* addMeshViewer(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
|
||||||
|
|
||||||
//! Adds a file open dialog.
|
//! Adds a file open dialog.
|
||||||
/** \param title Text to be displayed as the title of the dialog.
|
/** \param title Text to be displayed as the title of the dialog.
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
\param modal Defines if the dialog is modal. This means, that all other
|
||||||
|
@ -391,19 +303,6 @@ public:
|
||||||
bool modal = true, IGUIElement *parent = 0, s32 id = -1,
|
bool modal = true, IGUIElement *parent = 0, s32 id = -1,
|
||||||
bool restoreCWD = false, io::path::char_type *startDir = 0) = 0;
|
bool restoreCWD = false, io::path::char_type *startDir = 0) = 0;
|
||||||
|
|
||||||
//! Adds a color select dialog.
|
|
||||||
/** \param title The title of the dialog.
|
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
|
||||||
gui elements which were created before the dialog cannot be used
|
|
||||||
until it is removed.
|
|
||||||
\param parent The parent of the dialog.
|
|
||||||
\param id The ID of the dialog.
|
|
||||||
\return Pointer to the created file open dialog. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0,
|
|
||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a static text.
|
//! Adds a static text.
|
||||||
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
||||||
\param rectangle Rectangle specifying the borders of the static text
|
\param rectangle Rectangle specifying the borders of the static text
|
||||||
|
@ -438,30 +337,6 @@ public:
|
||||||
virtual IGUIEditBox *addEditBox(const wchar_t *text, const core::rect<s32> &rectangle,
|
virtual IGUIEditBox *addEditBox(const wchar_t *text, const core::rect<s32> &rectangle,
|
||||||
bool border = true, IGUIElement *parent = 0, s32 id = -1) = 0;
|
bool border = true, IGUIElement *parent = 0, s32 id = -1) = 0;
|
||||||
|
|
||||||
//! Adds a spin box.
|
|
||||||
/** An edit box with up and down buttons
|
|
||||||
\param text Text to be displayed. Can be altered after creation by setText().
|
|
||||||
\param rectangle Rectangle specifying the borders of the spin box.
|
|
||||||
\param border Set to true if the spin box should have a 3d border.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the spin box directly in the environment.
|
|
||||||
\param id The ID of the element.
|
|
||||||
\return Pointer to the created spin box. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
|
||||||
bool border=true,IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds an element for fading in or out.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the fader.
|
|
||||||
If the pointer is NULL, the whole screen is used.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
\param id An identifier for the fader.
|
|
||||||
\return Pointer to the created in-out-fader. Returns 0 if an error
|
|
||||||
occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIInOutFader* addInOutFader(const core::rect<s32>* rectangle=0, IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a tab control to the environment.
|
//! Adds a tab control to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the tab control.
|
/** \param rectangle Rectangle specifying the borders of the tab control.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
|
@ -493,40 +368,6 @@ public:
|
||||||
virtual IGUITab *addTab(const core::rect<s32> &rectangle,
|
virtual IGUITab *addTab(const core::rect<s32> &rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1) = 0;
|
IGUIElement *parent = 0, s32 id = -1) = 0;
|
||||||
|
|
||||||
//! Adds a context menu to the environment.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the menu.
|
|
||||||
Note that the menu is resizing itself based on what items you add.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the menu directly in the environment.
|
|
||||||
\param id An identifier for the menu.
|
|
||||||
\return Pointer to the created context menu. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIContextMenu* addContextMenu(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a menu to the environment.
|
|
||||||
/** This is like the menu you can find on top of most windows in modern
|
|
||||||
graphical user interfaces.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the menu directly in the environment.
|
|
||||||
\param id An identifier for the menu.
|
|
||||||
\return Pointer to the created menu. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a toolbar to the environment.
|
|
||||||
/** It is like a menu that is always placed on top of its parent, and
|
|
||||||
contains buttons.
|
|
||||||
\param parent Parent item of the element, e.g. a window.
|
|
||||||
Set it to 0 to place the tool bar directly in the environment.
|
|
||||||
\param id An identifier for the tool bar.
|
|
||||||
\return Pointer to the created tool bar. Returns 0 if an
|
|
||||||
error occurred. This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Adds a combo box to the environment.
|
//! Adds a combo box to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the combo box.
|
/** \param rectangle Rectangle specifying the borders of the combo box.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
|
@ -538,86 +379,6 @@ public:
|
||||||
virtual IGUIComboBox *addComboBox(const core::rect<s32> &rectangle,
|
virtual IGUIComboBox *addComboBox(const core::rect<s32> &rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1) = 0;
|
IGUIElement *parent = 0, s32 id = -1) = 0;
|
||||||
|
|
||||||
//! Adds a table to the environment
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the table.
|
|
||||||
\param parent Parent item of the element, e.g. a window. Set it to 0
|
|
||||||
to place the element directly in the environment.
|
|
||||||
\param id An identifier for the table.
|
|
||||||
\param drawBackground Flag whether the background should be drawn.
|
|
||||||
\return Pointer to the created table. Returns 0 if an error occurred.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUITable* addTable(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) =0;
|
|
||||||
|
|
||||||
//! Adds an element to display the information from the Irrlicht profiler
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the element.
|
|
||||||
\param parent Parent of the element. When 0 the environment itself will
|
|
||||||
be the parent.
|
|
||||||
\param id An identifier for the element. */
|
|
||||||
virtual IGUIProfiler* addProfilerDisplay(const core::rect<s32>& rectangle,
|
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
|
||||||
|
|
||||||
//! Get the default element factory which can create all built-in elements
|
|
||||||
/** \return Pointer to the factory.
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
|
||||||
more information. */
|
|
||||||
virtual IGUIElementFactory* getDefaultGUIElementFactory() const = 0;
|
|
||||||
|
|
||||||
//! Adds an element factory to the gui environment.
|
|
||||||
/** Use this to extend the gui environment with new element types which
|
|
||||||
it should be able to create automatically, for example when loading
|
|
||||||
data from xml files.
|
|
||||||
\param factoryToAdd Pointer to new factory. */
|
|
||||||
virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd) = 0;
|
|
||||||
|
|
||||||
//! Get amount of registered gui element factories.
|
|
||||||
/** \return Amount of registered gui element factories. */
|
|
||||||
virtual u32 getRegisteredGUIElementFactoryCount() const = 0;
|
|
||||||
|
|
||||||
//! Get a gui element factory by index
|
|
||||||
/** \param index Index of the factory.
|
|
||||||
\return Factory at given index, or 0 if no such factory exists. */
|
|
||||||
virtual IGUIElementFactory* getGUIElementFactory(u32 index) const = 0;
|
|
||||||
|
|
||||||
//! Adds a GUI element by its name
|
|
||||||
/** Each factory is checked if it can create an element of the given
|
|
||||||
name. The first match will be created.
|
|
||||||
\param elementName Name of the element to be created.
|
|
||||||
\param parent Parent of the new element, if not 0.
|
|
||||||
\return New GUI element, or 0 if no such element exists. */
|
|
||||||
virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param filename Name of the file.
|
|
||||||
\param start The GUIElement to start with. Root if 0.
|
|
||||||
\return True if saving succeeded, else false. */
|
|
||||||
virtual bool saveGUI(const io::path& filename, IGUIElement* start=0) = 0;
|
|
||||||
|
|
||||||
//! Saves the current gui into a file.
|
|
||||||
/** \param file The file to write to.
|
|
||||||
\param start The GUIElement to start with. Root if 0.
|
|
||||||
\return True if saving succeeded, else false. */
|
|
||||||
virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) = 0;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
|
|
||||||
When the file contains skin-settings from the gui-environment those are always serialized into the
|
|
||||||
guienvironment independent of the parent setting.
|
|
||||||
\param filename Name of the file.
|
|
||||||
\param parent Parent for the loaded GUI, root if 0.
|
|
||||||
\return True if loading succeeded, else false. */
|
|
||||||
virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Loads the gui. Note that the current gui is not cleared before.
|
|
||||||
/** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
|
|
||||||
When the file contains skin-settings from the gui-environment those are always serialized into the
|
|
||||||
guienvironment independent of the parent setting.
|
|
||||||
\param file The file to load from.
|
|
||||||
\param parent Parent for the loaded GUI, root if 0.
|
|
||||||
\return True if loading succeeded, else false. */
|
|
||||||
virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0;
|
|
||||||
|
|
||||||
//! Find the next element which would be selected when pressing the tab-key
|
//! Find the next element which would be selected when pressing the tab-key
|
||||||
/** If you set the focus for the result you can manually force focus-changes like they
|
/** If you set the focus for the result you can manually force focus-changes like they
|
||||||
would happen otherwise by the tab-keys.
|
would happen otherwise by the tab-keys.
|
||||||
|
@ -649,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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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,9 +16,8 @@ namespace gui
|
||||||
class IGUIFontBitmap : public IGUIFont
|
class IGUIFontBitmap : public IGUIFont
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns the type of this font
|
//! Returns the type of this font
|
||||||
virtual EGUI_FONT_TYPE getType() const _IRR_OVERRIDE_ { return EGFT_BITMAP; }
|
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||||
|
|
||||||
//! returns the parsed Symbol Information
|
//! returns the parsed Symbol Information
|
||||||
virtual IGUISpriteBank *getSpriteBank() const = 0;
|
virtual IGUISpriteBank *getSpriteBank() const = 0;
|
||||||
|
@ -36,11 +34,8 @@ public:
|
||||||
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
||||||
left side kerning value of thisLetter, then add the global value.
|
left side kerning value of thisLetter, then add the global value.
|
||||||
*/
|
*/
|
||||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const _IRR_OVERRIDE_ = 0;
|
s32 getKerningWidth(const wchar_t *thisLetter = 0, const wchar_t *previousLetter = 0) const override = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,67 +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 __I_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
#define __I_GUI_IN_OUT_FADER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "SColor.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Element for fading out or in
|
|
||||||
/** Here is a small example on how the class is used. In this example we fade
|
|
||||||
in from a total red screen in the beginning. As you can see, the fader is not
|
|
||||||
only useful for dramatic in and out fading, but also to show that the player
|
|
||||||
is hit in a first person shooter game for example.
|
|
||||||
\code
|
|
||||||
gui::IGUIInOutFader* fader = device->getGUIEnvironment()->addInOutFader();
|
|
||||||
fader->setColor(video::SColor(0,255,0,0));
|
|
||||||
fader->fadeIn(4000);
|
|
||||||
\endcode
|
|
||||||
*/
|
|
||||||
class IGUIInOutFader : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIInOutFader(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_IN_OUT_FADER, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Gets the color to fade out to or to fade in from.
|
|
||||||
virtual video::SColor getColor() const = 0;
|
|
||||||
|
|
||||||
//! Sets the color to fade out to or to fade in from.
|
|
||||||
/** \param color: Color to where it is faded out od from it is faded in. */
|
|
||||||
virtual void setColor(video::SColor color) = 0;
|
|
||||||
virtual void setColor(video::SColor source, video::SColor dest) = 0;
|
|
||||||
|
|
||||||
//! Starts the fade in process.
|
|
||||||
/** In the beginning the whole rect is drawn by the set color
|
|
||||||
(black by default) and at the end of the overgiven time the
|
|
||||||
color has faded out.
|
|
||||||
\param time: Time specifying how long it should need to fade in,
|
|
||||||
in milliseconds. */
|
|
||||||
virtual void fadeIn(u32 time) = 0;
|
|
||||||
|
|
||||||
//! Starts the fade out process.
|
|
||||||
/** In the beginning everything is visible, and at the end of
|
|
||||||
the time only the set color (black by the fault) will be drawn.
|
|
||||||
\param time: Time specifying how long it should need to fade out,
|
|
||||||
in milliseconds. */
|
|
||||||
virtual void fadeOut(u32 time) = 0;
|
|
||||||
|
|
||||||
//! Returns if the fade in or out process is done.
|
|
||||||
virtual bool isReady() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,53 +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 __I_GUI_MESH_VIEWER_H_INCLUDED__
|
|
||||||
#define __I_GUI_MESH_VIEWER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
class SMaterial;
|
|
||||||
} // end namespace video
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
class IAnimatedMesh;
|
|
||||||
} // end namespace scene
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
|
|
||||||
//! 3d mesh viewing GUI element.
|
|
||||||
class IGUIMeshViewer : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIMeshViewer(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_MESH_VIEWER, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Sets the mesh to be shown
|
|
||||||
virtual void setMesh(scene::IAnimatedMesh* mesh) = 0;
|
|
||||||
|
|
||||||
//! Gets the displayed mesh
|
|
||||||
virtual scene::IAnimatedMesh* getMesh() const = 0;
|
|
||||||
|
|
||||||
//! Sets the material
|
|
||||||
virtual void setMaterial(const video::SMaterial& material) = 0;
|
|
||||||
|
|
||||||
//! Gets the material
|
|
||||||
virtual const video::SMaterial& getMaterial() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,82 +0,0 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
// Written by Michael Zeilfelder
|
|
||||||
|
|
||||||
#ifndef I_GUI_PROFILER_H_INCLUDED__
|
|
||||||
#define I_GUI_PROFILER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
class IProfiler;
|
|
||||||
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
|
|
||||||
//! Element to display profiler information
|
|
||||||
class IGUIProfiler : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
/** \param profiler You can pass a custom profiler, but typically you can pass 0 in which cases it takes the global profiler from Irrlicht */
|
|
||||||
IGUIProfiler(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle, IProfiler* profiler = NULL)
|
|
||||||
: IGUIElement(EGUIET_PROFILER, environment, parent, id, rectangle)
|
|
||||||
{}
|
|
||||||
|
|
||||||
//! Show first page of profile data
|
|
||||||
/** \param includeOverview When true show the group-overview page, when false show the profile data of the first group */
|
|
||||||
virtual void firstPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Show next page of profile data
|
|
||||||
/** \param includeOverview Include the group-overview page */
|
|
||||||
virtual void nextPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Show previous page of profile data
|
|
||||||
/** \param includeOverview Include the group-overview page */
|
|
||||||
virtual void previousPage(bool includeOverview=true) = 0;
|
|
||||||
|
|
||||||
//! Try to show as many group-pages together as possible instead of showing at most one group per page.
|
|
||||||
/** \param groupsTogether When true show several groups on one page, when false show max. one group per page. Default is false. */
|
|
||||||
virtual void setShowGroupsTogether(bool groupsTogether) = 0;
|
|
||||||
|
|
||||||
//! Can several groups be displayed per page?
|
|
||||||
virtual bool getShowGroupsTogether() const = 0;
|
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
|
||||||
\param font: New font to set. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
|
||||||
font of the active skin otherwise */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether to draw the background. By default disabled,
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
|
||||||
|
|
||||||
//! Allows to freeze updates which makes it easier to read the numbers
|
|
||||||
/** Numbers are updated once when you switch pages. */
|
|
||||||
virtual void setFrozen(bool freeze) = 0;
|
|
||||||
|
|
||||||
//! Are updates currently frozen
|
|
||||||
virtual bool getFrozen() const = 0;
|
|
||||||
|
|
||||||
//! Filters prevents data that doesn't achieve the conditions from being displayed
|
|
||||||
virtual void setFilters(irr::u32 minCalls = 0, irr::u32 minTimeSum = 0, irr::f32 minTimeAverage = 0.f, irr::u32 minTimeMax = 0) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
// Copyright (C) 2006-2012 Michael Zeilfelder
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
#define __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIEditBox;
|
|
||||||
|
|
||||||
//! Enumeration bitflag for when to validate the text typed into the spinbox
|
|
||||||
//! Default used by Irrlicht is: (EGUI_SBV_ENTER|EGUI_SBV_LOSE_FOCUS)
|
|
||||||
enum EGUI_SPINBOX_VALIDATION
|
|
||||||
{
|
|
||||||
//! Does not validate typed text, probably a bad idea setting this usually.
|
|
||||||
EGUI_SBV_NEVER = 0,
|
|
||||||
//! Validate on each change. Was default up to Irrlicht 1.8
|
|
||||||
EGUI_SBV_CHANGE = 1,
|
|
||||||
//! Validate when enter was pressed
|
|
||||||
EGUI_SBV_ENTER = 2,
|
|
||||||
//! Validate when the editbox loses the focus
|
|
||||||
EGUI_SBV_LOSE_FOCUS = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! Single line edit box + spin buttons
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_SPINBOX_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUISpinBox : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUISpinBox(IGUIEnvironment* environment, IGUIElement* parent,
|
|
||||||
s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_SPIN_BOX, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Access the edit box used in the spin control
|
|
||||||
virtual IGUIEditBox* getEditBox() const = 0;
|
|
||||||
|
|
||||||
//! set the current value of the spinbox
|
|
||||||
/** \param val: value to be set in the spinbox */
|
|
||||||
virtual void setValue(f32 val) = 0;
|
|
||||||
|
|
||||||
//! Get the current value of the spinbox
|
|
||||||
virtual f32 getValue() const = 0;
|
|
||||||
|
|
||||||
//! set the range of values which can be used in the spinbox
|
|
||||||
/** \param min: minimum value
|
|
||||||
\param max: maximum value */
|
|
||||||
virtual void setRange(f32 min, f32 max) = 0;
|
|
||||||
|
|
||||||
//! get the minimum value which can be used in the spinbox
|
|
||||||
virtual f32 getMin() const = 0;
|
|
||||||
|
|
||||||
//! get the maximum value which can be used in the spinbox
|
|
||||||
virtual f32 getMax() const = 0;
|
|
||||||
|
|
||||||
//! Step size by which values are changed when pressing the spinbuttons
|
|
||||||
/** The step size also determines the number of decimal places to display
|
|
||||||
\param step: stepsize used for value changes when pressing spinbuttons */
|
|
||||||
virtual void setStepSize(f32 step=1.f) = 0;
|
|
||||||
|
|
||||||
//! Sets the number of decimal places to display.
|
|
||||||
//! Note that this also rounds the range to the same number of decimal places.
|
|
||||||
/** \param places: The number of decimal places to display, use -1 to reset */
|
|
||||||
virtual void setDecimalPlaces(s32 places) = 0;
|
|
||||||
|
|
||||||
//! get the current step size
|
|
||||||
virtual f32 getStepSize() const = 0;
|
|
||||||
|
|
||||||
//! Sets when the spinbox has to validate entered text.
|
|
||||||
/** \param validateOn Can be any combination of EGUI_SPINBOX_VALIDATION bit flags */
|
|
||||||
virtual void setValidateOn(u32 validateOn) = 0;
|
|
||||||
|
|
||||||
//! Gets when the spinbox has to validate entered text.
|
|
||||||
/** \return A combination of EGUI_SPINBOX_VALIDATION bit flags */
|
|
||||||
virtual u32 getValidateOn() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // __I_GUI_SPIN_BOX_H_INCLUDED__
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
@ -88,9 +86,9 @@ namespace gui
|
||||||
|
|
||||||
//! Sets text justification mode
|
//! Sets text justification mode
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
|
|
||||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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,19 +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) {}
|
||||||
|
|
||||||
//! Returns zero based index of tab if in tabcontrol.
|
|
||||||
/** \deprecated Deprecated in 1.9, use IGUITabControl::getTabIndex instead*/
|
|
||||||
_IRR_DEPRECATED_ virtual s32 getNumber() const
|
|
||||||
{
|
|
||||||
if (Parent && Parent->getType() == EGUIET_TAB_CONTROL)
|
|
||||||
return static_cast<IGUITabControl*>(Parent)->getTabIndex(this);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! sets if the tab should draw its background
|
//! sets if the tab should draw its background
|
||||||
virtual void setDrawBackground(bool draw = true) = 0;
|
virtual void setDrawBackground(bool draw = true) = 0;
|
||||||
|
@ -159,6 +147,3 @@ namespace gui
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
// Copyright (C) 2003-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_TABLE_H_INCLUDED__
|
|
||||||
#define __I_GUI_TABLE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "SColor.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
class IGUIScrollBar;
|
|
||||||
|
|
||||||
//! modes for ordering used when a column header is clicked
|
|
||||||
enum EGUI_COLUMN_ORDERING
|
|
||||||
{
|
|
||||||
//! Do not use ordering
|
|
||||||
EGCO_NONE,
|
|
||||||
|
|
||||||
//! Send a EGET_TABLE_HEADER_CHANGED message when a column header is clicked.
|
|
||||||
EGCO_CUSTOM,
|
|
||||||
|
|
||||||
//! Sort it ascending by it's ascii value like: a,b,c,...
|
|
||||||
EGCO_ASCENDING,
|
|
||||||
|
|
||||||
//! Sort it descending by it's ascii value like: z,x,y,...
|
|
||||||
EGCO_DESCENDING,
|
|
||||||
|
|
||||||
//! Sort it ascending on first click, descending on next, etc
|
|
||||||
EGCO_FLIP_ASCENDING_DESCENDING,
|
|
||||||
|
|
||||||
//! Not used as mode, only to get maximum value for this enum
|
|
||||||
EGCO_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Names for EGUI_COLUMN_ORDERING types
|
|
||||||
const c8* const GUIColumnOrderingNames[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"custom",
|
|
||||||
"ascend",
|
|
||||||
"descend",
|
|
||||||
"ascend_descend",
|
|
||||||
0,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum EGUI_ORDERING_MODE
|
|
||||||
{
|
|
||||||
//! No element ordering
|
|
||||||
EGOM_NONE,
|
|
||||||
|
|
||||||
//! Elements are ordered from the smallest to the largest.
|
|
||||||
EGOM_ASCENDING,
|
|
||||||
|
|
||||||
//! Elements are ordered from the largest to the smallest.
|
|
||||||
EGOM_DESCENDING,
|
|
||||||
|
|
||||||
//! this value is not used, it only specifies the amount of default ordering types
|
|
||||||
//! available.
|
|
||||||
EGOM_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
const c8* const GUIOrderingModeNames[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"ascending",
|
|
||||||
"descending",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
enum EGUI_TABLE_DRAW_FLAGS
|
|
||||||
{
|
|
||||||
EGTDF_ROWS = 1,
|
|
||||||
EGTDF_COLUMNS = 2,
|
|
||||||
EGTDF_ACTIVE_ROW = 4,
|
|
||||||
EGTDF_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Default list box GUI element.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_TABLE_CHANGED
|
|
||||||
\li EGET_TABLE_SELECTED_AGAIN
|
|
||||||
\li EGET_TABLE_HEADER_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUITable : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
IGUITable(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_TABLE, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Adds a column
|
|
||||||
/** If columnIndex is outside the current range, do push new column at the end */
|
|
||||||
virtual void addColumn(const wchar_t* caption, s32 columnIndex=-1) = 0;
|
|
||||||
|
|
||||||
//! remove a column from the table
|
|
||||||
virtual void removeColumn(u32 columnIndex) = 0;
|
|
||||||
|
|
||||||
//! Returns the number of columns in the table control
|
|
||||||
virtual s32 getColumnCount() const = 0;
|
|
||||||
|
|
||||||
//! Makes a column active. This will trigger an ordering process.
|
|
||||||
/** \param idx: The id of the column to make active or a negative number to make non active.
|
|
||||||
\param doOrder: Do also the ordering which depending on mode for active column
|
|
||||||
\return True when the column could be set active (aka - it did exist). */
|
|
||||||
virtual bool setActiveColumn(s32 idx, bool doOrder=false) = 0;
|
|
||||||
|
|
||||||
//! Returns which header is currently active
|
|
||||||
virtual s32 getActiveColumn() const = 0;
|
|
||||||
|
|
||||||
//! Returns the ordering used by the currently active column
|
|
||||||
virtual EGUI_ORDERING_MODE getActiveColumnOrdering() const = 0;
|
|
||||||
|
|
||||||
//! Set the width of a column
|
|
||||||
virtual void setColumnWidth(u32 columnIndex, u32 width) = 0;
|
|
||||||
|
|
||||||
//! Get the width of a column
|
|
||||||
virtual u32 getColumnWidth(u32 columnIndex) const = 0;
|
|
||||||
|
|
||||||
//! columns can be resized by drag 'n drop
|
|
||||||
virtual void setResizableColumns(bool resizable) = 0;
|
|
||||||
|
|
||||||
//! can columns be resized by drag 'n drop?
|
|
||||||
virtual bool hasResizableColumns() const = 0;
|
|
||||||
|
|
||||||
//! This tells the table control which ordering mode should be used when a column header is clicked.
|
|
||||||
/** \param columnIndex The index of the column header.
|
|
||||||
\param mode: One of the modes defined in EGUI_COLUMN_ORDERING */
|
|
||||||
virtual void setColumnOrdering(u32 columnIndex, EGUI_COLUMN_ORDERING mode) = 0;
|
|
||||||
|
|
||||||
//! Returns which row is currently selected
|
|
||||||
virtual s32 getSelected() const = 0;
|
|
||||||
|
|
||||||
//! set which row is currently selected
|
|
||||||
virtual void setSelected( s32 index ) = 0;
|
|
||||||
|
|
||||||
//! Get amount of rows in the tabcontrol
|
|
||||||
virtual s32 getRowCount() const = 0;
|
|
||||||
|
|
||||||
//! adds a row to the table
|
|
||||||
/** \param rowIndex Zero based index of rows. The row will be
|
|
||||||
inserted at this position, if a row already exist there, it
|
|
||||||
will be placed after it. If the row is larger than the actual
|
|
||||||
number of row by more than one, it won't be created. Note that
|
|
||||||
if you create a row that's not at the end, there might be
|
|
||||||
performance issues.
|
|
||||||
\return index of inserted row. */
|
|
||||||
virtual u32 addRow(u32 rowIndex) = 0;
|
|
||||||
|
|
||||||
//! Remove a row from the table
|
|
||||||
virtual void removeRow(u32 rowIndex) = 0;
|
|
||||||
|
|
||||||
//! clears the table rows, but keeps the columns intact
|
|
||||||
virtual void clearRows() = 0;
|
|
||||||
|
|
||||||
//! Swap two row positions.
|
|
||||||
virtual void swapRows(u32 rowIndexA, u32 rowIndexB) = 0;
|
|
||||||
|
|
||||||
//! This tells the table to start ordering all the rows.
|
|
||||||
/** You need to explicitly tell the table to re order the rows
|
|
||||||
when a new row is added or the cells data is changed. This
|
|
||||||
makes the system more flexible and doesn't make you pay the
|
|
||||||
cost of ordering when adding a lot of rows.
|
|
||||||
\param columnIndex: When set to -1 the active column is used.
|
|
||||||
\param mode Ordering mode of the rows. */
|
|
||||||
virtual void orderRows(s32 columnIndex=-1, EGUI_ORDERING_MODE mode=EGOM_NONE) = 0;
|
|
||||||
|
|
||||||
//! Set the text of a cell
|
|
||||||
virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text) = 0;
|
|
||||||
|
|
||||||
//! Set the text of a cell, and set a color of this cell.
|
|
||||||
virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text, video::SColor color) = 0;
|
|
||||||
|
|
||||||
//! Set the data of a cell
|
|
||||||
virtual void setCellData(u32 rowIndex, u32 columnIndex, void *data) = 0;
|
|
||||||
|
|
||||||
//! Set the color of a cell text
|
|
||||||
virtual void setCellColor(u32 rowIndex, u32 columnIndex, video::SColor color) = 0;
|
|
||||||
|
|
||||||
//! Get the text of a cell
|
|
||||||
virtual const wchar_t* getCellText(u32 rowIndex, u32 columnIndex ) const = 0;
|
|
||||||
|
|
||||||
//! Get the data of a cell
|
|
||||||
virtual void* getCellData(u32 rowIndex, u32 columnIndex ) const = 0;
|
|
||||||
|
|
||||||
//! clears the table, deletes all items in the table
|
|
||||||
virtual void clear() = 0;
|
|
||||||
|
|
||||||
//! Set flags, as defined in ::EGUI_TABLE_DRAW_FLAGS, which influence the layout
|
|
||||||
virtual void setDrawFlags(s32 flags) = 0;
|
|
||||||
|
|
||||||
//! Get the flags, as defined in ::EGUI_TABLE_DRAW_FLAGS, which influence the layout
|
|
||||||
virtual s32 getDrawFlags() const = 0;
|
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
|
||||||
\param font: New font to set. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
|
||||||
font of the active skin otherwise */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Get the height of items/rows
|
|
||||||
virtual s32 getItemHeight() const = 0;
|
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Access the horizontal scrollbar
|
|
||||||
virtual IGUIScrollBar* getHorizontalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether to draw the background.
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -1,298 +0,0 @@
|
||||||
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __I_GUI_TREE_VIEW_H_INCLUDED__
|
|
||||||
#define __I_GUI_TREE_VIEW_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "IGUIImageList.h"
|
|
||||||
#include "irrTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIFont;
|
|
||||||
class IGUITreeView;
|
|
||||||
class IGUIScrollBar;
|
|
||||||
|
|
||||||
|
|
||||||
//! Node for gui tree view
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_TREEVIEW_NODE_EXPAND
|
|
||||||
\li EGET_TREEVIEW_NODE_COLLAPS
|
|
||||||
\li EGET_TREEVIEW_NODE_DESELECT
|
|
||||||
\li EGET_TREEVIEW_NODE_SELECT
|
|
||||||
*/
|
|
||||||
class IGUITreeViewNode : public IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! returns the owner (tree view) of this node
|
|
||||||
virtual IGUITreeView* getOwner() const = 0;
|
|
||||||
|
|
||||||
//! Returns the parent node of this node.
|
|
||||||
/** For the root node this will return 0. */
|
|
||||||
virtual IGUITreeViewNode* getParent() const = 0;
|
|
||||||
|
|
||||||
//! returns the text of the node
|
|
||||||
virtual const wchar_t* getText() const = 0;
|
|
||||||
|
|
||||||
//! sets the text of the node
|
|
||||||
virtual void setText( const wchar_t* text ) = 0;
|
|
||||||
|
|
||||||
//! returns the icon text of the node
|
|
||||||
virtual const wchar_t* getIcon() const = 0;
|
|
||||||
|
|
||||||
//! sets the icon text of the node
|
|
||||||
virtual void setIcon( const wchar_t* icon ) = 0;
|
|
||||||
|
|
||||||
//! returns the image index of the node
|
|
||||||
virtual u32 getImageIndex() const = 0;
|
|
||||||
|
|
||||||
//! sets the image index of the node
|
|
||||||
virtual void setImageIndex( u32 imageIndex ) = 0;
|
|
||||||
|
|
||||||
//! returns the image index of the node
|
|
||||||
virtual u32 getSelectedImageIndex() const = 0;
|
|
||||||
|
|
||||||
//! sets the image index of the node
|
|
||||||
virtual void setSelectedImageIndex( u32 imageIndex ) = 0;
|
|
||||||
|
|
||||||
//! returns the user data (void*) of this node
|
|
||||||
virtual void* getData() const = 0;
|
|
||||||
|
|
||||||
//! sets the user data (void*) of this node
|
|
||||||
virtual void setData( void* data ) = 0;
|
|
||||||
|
|
||||||
//! returns the user data2 (IReferenceCounted) of this node
|
|
||||||
virtual IReferenceCounted* getData2() const = 0;
|
|
||||||
|
|
||||||
//! sets the user data2 (IReferenceCounted) of this node
|
|
||||||
virtual void setData2( IReferenceCounted* data ) = 0;
|
|
||||||
|
|
||||||
//! returns the child item count
|
|
||||||
virtual u32 getChildCount() const = 0;
|
|
||||||
|
|
||||||
//! removes all children (recursive) from this node
|
|
||||||
virtual void clearChildren() = 0;
|
|
||||||
|
|
||||||
//! removes all children (recursive) from this node
|
|
||||||
/** \deprecated Deprecated in 1.8, use clearChildren() instead.
|
|
||||||
This method may be removed by Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ void clearChilds()
|
|
||||||
{
|
|
||||||
return clearChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! returns true if this node has child nodes
|
|
||||||
virtual bool hasChildren() const = 0;
|
|
||||||
|
|
||||||
//! returns true if this node has child nodes
|
|
||||||
/** \deprecated Deprecated in 1.8, use hasChildren() instead.
|
|
||||||
This method may be removed by Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ bool hasChilds() const
|
|
||||||
{
|
|
||||||
return hasChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Adds a new node behind the last child node.
|
|
||||||
/** \param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* addChildBack(
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) =0;
|
|
||||||
|
|
||||||
//! Adds a new node before the first child node.
|
|
||||||
/** \param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* addChildFront(
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0 ) =0;
|
|
||||||
|
|
||||||
//! Adds a new node behind the other node.
|
|
||||||
/** The other node has also to be a child node from this node.
|
|
||||||
\param other Node to insert after
|
|
||||||
\param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node or 0 if other is no child node from this
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* insertChildAfter(
|
|
||||||
IGUITreeViewNode* other,
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) =0;
|
|
||||||
|
|
||||||
//! Adds a new node before the other node.
|
|
||||||
/** The other node has also to be a child node from this node.
|
|
||||||
\param other Node to insert before
|
|
||||||
\param text text of the new node
|
|
||||||
\param icon icon text of the new node
|
|
||||||
\param imageIndex index of the image for the new node (-1 = none)
|
|
||||||
\param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex)
|
|
||||||
\param data user data (void*) of the new node
|
|
||||||
\param data2 user data2 (IReferenceCounted*) of the new node
|
|
||||||
\return The new node or 0 if other is no child node from this
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* insertChildBefore(
|
|
||||||
IGUITreeViewNode* other,
|
|
||||||
const wchar_t* text, const wchar_t* icon = 0,
|
|
||||||
s32 imageIndex=-1, s32 selectedImageIndex=-1,
|
|
||||||
void* data=0, IReferenceCounted* data2=0) = 0;
|
|
||||||
|
|
||||||
//! Return the first child node from this node.
|
|
||||||
/** \return The first child node or 0 if this node has no children. */
|
|
||||||
virtual IGUITreeViewNode* getFirstChild() const = 0;
|
|
||||||
|
|
||||||
//! Return the last child node from this node.
|
|
||||||
/** \return The last child node or 0 if this node has no children. */
|
|
||||||
virtual IGUITreeViewNode* getLastChild() const = 0;
|
|
||||||
|
|
||||||
//! Returns the previous sibling node from this node.
|
|
||||||
/** \return The previous sibling node from this node or 0 if this is
|
|
||||||
the first node from the parent node.
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* getPrevSibling() const = 0;
|
|
||||||
|
|
||||||
//! Returns the next sibling node from this node.
|
|
||||||
/** \return The next sibling node from this node or 0 if this is
|
|
||||||
the last node from the parent node.
|
|
||||||
*/
|
|
||||||
virtual IGUITreeViewNode* getNextSibling() const = 0;
|
|
||||||
|
|
||||||
//! Returns the next visible (expanded, may be out of scrolling) node from this node.
|
|
||||||
/** \return The next visible node from this node or 0 if this is
|
|
||||||
the last visible node. */
|
|
||||||
virtual IGUITreeViewNode* getNextVisible() const = 0;
|
|
||||||
|
|
||||||
//! Deletes a child node.
|
|
||||||
/** \return Returns true if the node was found as a child and is deleted. */
|
|
||||||
virtual bool deleteChild( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Moves a child node one position up.
|
|
||||||
/** \return True if the node was found as a child node and was not already the first child. */
|
|
||||||
virtual bool moveChildUp( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Moves a child node one position down.
|
|
||||||
/** \return True if the node was found as a child node and was not already the last child. */
|
|
||||||
virtual bool moveChildDown( IGUITreeViewNode* child ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if the node is expanded (children are visible).
|
|
||||||
virtual bool getExpanded() const = 0;
|
|
||||||
|
|
||||||
//! Sets if the node is expanded.
|
|
||||||
virtual void setExpanded( bool expanded ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if the node is currently selected.
|
|
||||||
virtual bool getSelected() const = 0;
|
|
||||||
|
|
||||||
//! Sets this node as selected.
|
|
||||||
virtual void setSelected( bool selected ) = 0;
|
|
||||||
|
|
||||||
//! Returns true if this node is the root node.
|
|
||||||
virtual bool isRoot() const = 0;
|
|
||||||
|
|
||||||
//! Returns the level of this node.
|
|
||||||
/** The root node has level 0. Direct children of the root has level 1 ... */
|
|
||||||
virtual s32 getLevel() const = 0;
|
|
||||||
|
|
||||||
//! Returns true if this node is visible (all parents are expanded).
|
|
||||||
virtual bool isVisible() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//! Default tree view GUI element.
|
|
||||||
/** Displays a windows like tree buttons to expand/collapse the child
|
|
||||||
nodes of an node and optional tree lines. Each node consists of an
|
|
||||||
text, an icon text and a void pointer for user data. */
|
|
||||||
class IGUITreeView : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
|
||||||
IGUITreeView(IGUIEnvironment* environment, IGUIElement* parent,
|
|
||||||
s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement( EGUIET_TREE_VIEW, environment, parent, id, rectangle ) {}
|
|
||||||
|
|
||||||
//! returns the root node (not visible) from the tree.
|
|
||||||
virtual IGUITreeViewNode* getRoot() const = 0;
|
|
||||||
|
|
||||||
//! returns the selected node of the tree or 0 if none is selected
|
|
||||||
virtual IGUITreeViewNode* getSelected() const = 0;
|
|
||||||
|
|
||||||
//! returns true if the tree lines are visible
|
|
||||||
virtual bool getLinesVisible() const = 0;
|
|
||||||
|
|
||||||
//! sets if the tree lines are visible
|
|
||||||
/** \param visible true for visible, false for invisible */
|
|
||||||
virtual void setLinesVisible( bool visible ) = 0;
|
|
||||||
|
|
||||||
//! Sets the font which should be used as icon font.
|
|
||||||
/** This font is set to the Irrlicht engine built-in-font by
|
|
||||||
default. Icons can be displayed in front of every list item.
|
|
||||||
An icon is a string, displayed with the icon font. When using
|
|
||||||
the build-in-font of the Irrlicht engine as icon font, the icon
|
|
||||||
strings defined in GUIIcons.h can be used.
|
|
||||||
*/
|
|
||||||
virtual void setIconFont( IGUIFont* font ) = 0;
|
|
||||||
|
|
||||||
//! Sets a skin independent font.
|
|
||||||
/** \param font: New font to set or 0 to use the skin-font. */
|
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
|
||||||
|
|
||||||
//! Get the font which is used for drawing
|
|
||||||
/** This is the override font when one is set and the
|
|
||||||
font of the skin otherwise. */
|
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
|
||||||
|
|
||||||
//! Sets the image list which should be used for the image and selected image of every node.
|
|
||||||
/** The default is 0 (no images). */
|
|
||||||
virtual void setImageList( IGUIImageList* imageList ) = 0;
|
|
||||||
|
|
||||||
//! Returns the image list which is used for the nodes.
|
|
||||||
virtual IGUIImageList* getImageList() const = 0;
|
|
||||||
|
|
||||||
//! Sets if the image is left of the icon. Default is true.
|
|
||||||
virtual void setImageLeftOfIcon( bool bLeftOf ) = 0;
|
|
||||||
|
|
||||||
//! Returns if the Image is left of the icon. Default is true.
|
|
||||||
virtual bool getImageLeftOfIcon() const = 0;
|
|
||||||
|
|
||||||
//! Returns the node which is associated to the last event.
|
|
||||||
/** This pointer is only valid inside the OnEvent call! */
|
|
||||||
virtual IGUITreeViewNode* getLastEventNode() const = 0;
|
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
|
||||||
|
|
||||||
//! Access the horizontal scrollbar
|
|
||||||
virtual IGUIScrollBar* getHorizontalScrollBar() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,74 +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 __I_GUI_WINDOW_H_INCLUDED__
|
|
||||||
#define __I_GUI_WINDOW_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
|
||||||
#include "EMessageBoxFlags.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace gui
|
|
||||||
{
|
|
||||||
class IGUIButton;
|
|
||||||
|
|
||||||
//! Default moveable window GUI element with border, caption and close icons.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_ELEMENT_CLOSED
|
|
||||||
*/
|
|
||||||
class IGUIWindow : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! constructor
|
|
||||||
IGUIWindow(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
|
||||||
: IGUIElement(EGUIET_WINDOW, environment, parent, id, rectangle) {}
|
|
||||||
|
|
||||||
//! Returns pointer to the close button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getCloseButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns pointer to the minimize button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getMinimizeButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns pointer to the maximize button
|
|
||||||
/** You can hide the button by calling setVisible(false) on the result. */
|
|
||||||
virtual IGUIButton* getMaximizeButton() const = 0;
|
|
||||||
|
|
||||||
//! Returns true if the window can be dragged with the mouse, false if not
|
|
||||||
virtual bool isDraggable() const = 0;
|
|
||||||
|
|
||||||
//! Sets whether the window can be dragged by the mouse
|
|
||||||
virtual void setDraggable(bool draggable) = 0;
|
|
||||||
|
|
||||||
//! Set if the window background will be drawn
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Get if the window background will be drawn
|
|
||||||
virtual bool getDrawBackground() const = 0;
|
|
||||||
|
|
||||||
//! Set if the window titlebar will be drawn
|
|
||||||
//! Note: If the background is not drawn, then the titlebar is automatically also not drawn
|
|
||||||
virtual void setDrawTitlebar(bool draw) = 0;
|
|
||||||
|
|
||||||
//! Get if the window titlebar will be drawn
|
|
||||||
virtual bool getDrawTitlebar() const = 0;
|
|
||||||
|
|
||||||
//! Returns the rectangle of the drawable area (without border and without titlebar)
|
|
||||||
/** The coordinates are given relative to the top-left position of the gui element.<br>
|
|
||||||
So to get absolute positions you have to add the resulting rectangle to getAbsolutePosition().UpperLeftCorner.<br>
|
|
||||||
To get it relative to the parent element you have to add the resulting rectangle to getRelativePosition().UpperLeftCorner.
|
|
||||||
Beware that adding a menu will not change the clientRect as menus are own gui elements, so in that case you might want to subtract
|
|
||||||
the menu area additionally. */
|
|
||||||
virtual core::rect<s32> getClientRect() const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
232
include/IImage.h
232
include/IImage.h
|
@ -2,15 +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 "irrAllocator.h"
|
#include <cstring>
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -25,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;
|
||||||
|
@ -44,7 +38,7 @@ public:
|
||||||
delete[] Data;
|
delete[] Data;
|
||||||
|
|
||||||
if (DeleteMipMapsMemory)
|
if (DeleteMipMapsMemory)
|
||||||
Allocator.deallocate(MipMapsData);
|
delete[] MipMapsData;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the color format
|
//! Returns the color format
|
||||||
|
@ -53,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
|
||||||
{
|
{
|
||||||
|
@ -105,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:
|
||||||
|
@ -123,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:
|
||||||
|
@ -141,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:
|
||||||
|
@ -159,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:
|
||||||
|
@ -184,24 +162,6 @@ public:
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Lock function. Use this to get a pointer to the image data.
|
|
||||||
/** Use getData instead.
|
|
||||||
\return Pointer to the image data. What type of data is pointed to
|
|
||||||
depends on the color format of the image. For example if the color
|
|
||||||
format is ECF_A8R8G8B8, it is of u32. Be sure to call unlock() after
|
|
||||||
you don't need the pointer any more. */
|
|
||||||
_IRR_DEPRECATED_ void* lock()
|
|
||||||
{
|
|
||||||
return getData();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Unlock function.
|
|
||||||
/** Should be called after the pointer received by lock() is not
|
|
||||||
needed anymore. */
|
|
||||||
_IRR_DEPRECATED_ void unlock()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the mipmap size for this image for a certain mipmap level
|
//! Get the mipmap size for this image for a certain mipmap level
|
||||||
/** level 0 will be full image size. Every further level is half the size.
|
/** level 0 will be full image size. Every further level is half the size.
|
||||||
Doesn't care if the image actually has mipmaps, just which size would be needed. */
|
Doesn't care if the image actually has mipmaps, just which size would be needed. */
|
||||||
|
@ -210,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)
|
||||||
|
@ -231,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.
|
||||||
|
@ -239,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;
|
||||||
|
|
||||||
|
@ -275,33 +230,26 @@ public:
|
||||||
will by copied internally.
|
will by copied internally.
|
||||||
\param deleteMemory Whether the memory is deallocated upon
|
\param deleteMemory Whether the memory is deallocated upon
|
||||||
destruction. */
|
destruction. */
|
||||||
void setMipMapsData(void* data, bool ownForeignMemory, bool deleteMemory)
|
void setMipMapsData(void *data, bool ownForeignMemory)
|
||||||
{
|
{
|
||||||
if (data != MipMapsData)
|
if (data != MipMapsData) {
|
||||||
{
|
if (DeleteMipMapsMemory) {
|
||||||
if (DeleteMipMapsMemory)
|
delete[] MipMapsData;
|
||||||
{
|
|
||||||
Allocator.deallocate(MipMapsData);
|
|
||||||
|
|
||||||
DeleteMipMapsMemory = false;
|
DeleteMipMapsMemory = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data)
|
if (data) {
|
||||||
{
|
if (ownForeignMemory) {
|
||||||
if (ownForeignMemory)
|
|
||||||
{
|
|
||||||
MipMapsData = static_cast<u8 *>(data);
|
MipMapsData = static_cast<u8 *>(data);
|
||||||
|
|
||||||
DeleteMipMapsMemory = deleteMemory;
|
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;
|
||||||
|
|
||||||
|
@ -311,14 +259,12 @@ public:
|
||||||
dataSize += getDataSizeFromFormat(Format, width, height);
|
dataSize += getDataSizeFromFormat(Format, width, height);
|
||||||
} while (width != 1 || height != 1);
|
} while (width != 1 || height != 1);
|
||||||
|
|
||||||
MipMapsData = Allocator.allocate(dataSize);
|
MipMapsData = new u8[dataSize];
|
||||||
memcpy(MipMapsData, data, dataSize);
|
memcpy(MipMapsData, data, dataSize);
|
||||||
|
|
||||||
DeleteMipMapsMemory = true;
|
DeleteMipMapsMemory = true;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
MipMapsData = 0;
|
MipMapsData = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,6 +276,12 @@ public:
|
||||||
//! Sets a pixel
|
//! Sets a pixel
|
||||||
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false) = 0;
|
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false) = 0;
|
||||||
|
|
||||||
|
//! Copies this surface into another, if it has the exact same size and format.
|
||||||
|
/** NOTE: mipmaps are ignored
|
||||||
|
\return True if it was copied, false otherwise.
|
||||||
|
*/
|
||||||
|
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format = ECF_A8R8G8B8, u32 pitch = 0) const = 0;
|
||||||
|
|
||||||
//! Copies the image into the target, scaling the image to fit
|
//! Copies the image into the target, scaling the image to fit
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyToScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format = ECF_A8R8G8B8, u32 pitch = 0) = 0;
|
virtual void copyToScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format = ECF_A8R8G8B8, u32 pitch = 0) = 0;
|
||||||
|
@ -362,24 +314,10 @@ public:
|
||||||
//! fills the surface with given color
|
//! fills the surface with given color
|
||||||
virtual void fill(const SColor &color) = 0;
|
virtual void fill(const SColor &color) = 0;
|
||||||
|
|
||||||
//! Inform whether the image is compressed
|
|
||||||
_IRR_DEPRECATED_ bool isCompressed() const
|
|
||||||
{
|
|
||||||
return IImage::isCompressedFormat(Format);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Check whether the image has MipMaps
|
|
||||||
/** \return True if image has MipMaps, else false. */
|
|
||||||
_IRR_DEPRECATED_ bool hasMipMaps() const
|
|
||||||
{
|
|
||||||
return (getMipMapsData() != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! get the amount of Bits per Pixel of the given color format
|
//! get the amount of Bits per Pixel of the given color format
|
||||||
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
|
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
|
||||||
{
|
{
|
||||||
switch(format)
|
switch (format) {
|
||||||
{
|
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 16;
|
return 16;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -388,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:
|
||||||
|
@ -444,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:
|
||||||
|
@ -534,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:
|
||||||
|
@ -549,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;
|
||||||
|
@ -577,16 +418,7 @@ protected:
|
||||||
|
|
||||||
bool DeleteMemory;
|
bool DeleteMemory;
|
||||||
bool DeleteMipMapsMemory;
|
bool DeleteMipMapsMemory;
|
||||||
|
|
||||||
core::irrAllocator<u8> Allocator;
|
|
||||||
#if defined(IRRLICHT_sRGB)
|
|
||||||
int Format_sRGB;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
@ -45,22 +43,7 @@ public:
|
||||||
/** \param file File handle to check.
|
/** \param file File handle to check.
|
||||||
\return Pointer to newly created image, or 0 upon error. */
|
\return Pointer to newly created image, or 0 upon error. */
|
||||||
virtual IImage *loadImage(io::IReadFile *file) const = 0;
|
virtual IImage *loadImage(io::IReadFile *file) const = 0;
|
||||||
|
|
||||||
//! Creates a multiple surfaces from the file eg. whole cube map.
|
|
||||||
/** \param file File handle to check.
|
|
||||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
|
||||||
\return Array of pointers to newly created images. */
|
|
||||||
virtual core::array<IImage*> loadImages(io::IReadFile* file, E_TEXTURE_TYPE* type) const
|
|
||||||
{
|
|
||||||
core::array<IImage*> image;
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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__
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
@ -19,7 +18,7 @@ enum ELOG_LEVEL
|
||||||
//! Used for printing information helpful in debugging
|
//! Used for printing information helpful in debugging
|
||||||
ELL_DEBUG,
|
ELL_DEBUG,
|
||||||
|
|
||||||
//! Useful information to print. For example hardware infos or something started/stopped.
|
//! Useful information to print. For example hardware info or something started/stopped.
|
||||||
ELL_INFORMATION,
|
ELL_INFORMATION,
|
||||||
|
|
||||||
//! Warnings that something isn't as expected and can cause oddities
|
//! Warnings that something isn't as expected and can cause oddities
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
||||||
|
@ -38,30 +35,11 @@ public:
|
||||||
const SMaterial &lastMaterial,
|
const SMaterial &lastMaterial,
|
||||||
bool resetAllRenderstates) = 0;
|
bool resetAllRenderstates) = 0;
|
||||||
|
|
||||||
//! Return an index constant for the vertex shader based on a name.
|
//! Return an index constant for the vertex shader based on a uniform variable name.
|
||||||
virtual s32 getVertexShaderConstantID(const c8 *name) = 0;
|
virtual s32 getVertexShaderConstantID(const c8 *name) = 0;
|
||||||
|
|
||||||
//! Sets a constant for the vertex shader based on a name.
|
//! Sets a value for a vertex shader uniform variable.
|
||||||
/** This can be used if you used a high level shader language like GLSL
|
/** \param index Index of the variable (as received from getVertexShaderConstantID)
|
||||||
or HLSL to create a shader. Example: If you created a shader which has
|
|
||||||
variables named 'mWorldViewProj' (containing the WorldViewProjection
|
|
||||||
matrix) and another one named 'fTime' containing one float, you can set
|
|
||||||
them in your IShaderConstantSetCallBack derived class like this:
|
|
||||||
\code
|
|
||||||
virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
|
|
||||||
{
|
|
||||||
video::IVideoDriver* driver = services->getVideoDriver();
|
|
||||||
|
|
||||||
f32 time = (f32)os::Timer::getTime()/100000.0f;
|
|
||||||
services->setVertexShaderConstant("fTime", &time, 1);
|
|
||||||
|
|
||||||
core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
|
|
||||||
worldViewProj *= driver->getTransform(video::ETS_VIEW);
|
|
||||||
worldViewProj *= driver->getTransform(video::ETS_WORLD);
|
|
||||||
services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
\param index Index of the variable
|
|
||||||
\param floats Pointer to array of floats
|
\param floats Pointer to array of floats
|
||||||
\param count Amount of floats in array.
|
\param count Amount of floats in array.
|
||||||
\return True if successful.
|
\return True if successful.
|
||||||
|
@ -72,27 +50,16 @@ 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.
|
//! Return an index constant for the pixel shader for the given uniform variable name
|
||||||
/** 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 based on a name.
|
|
||||||
virtual s32 getPixelShaderConstantID(const c8 *name) = 0;
|
virtual s32 getPixelShaderConstantID(const c8 *name) = 0;
|
||||||
|
|
||||||
//! Sets a constant for the pixel shader based on a name.
|
//! Sets a value for the given pixel shader uniform variable
|
||||||
/** This can be used if you used a high level shader language like GLSL
|
/** This can be used if you used a high level shader language like GLSL
|
||||||
or HLSL to create a shader. See setVertexShaderConstant() for an
|
or HLSL to create a shader. See setVertexShaderConstant() for an
|
||||||
example on how to use this.
|
example on how to use this.
|
||||||
\param index Index of the variable
|
\param index Index of the variable (as received from getPixelShaderConstantID)
|
||||||
\param floats Pointer to array of floats
|
\param floats Pointer to array of floats
|
||||||
\param count Amount of floats in array.
|
\param count Amount of floats in array.
|
||||||
\return True if successful. */
|
\return True if successful. */
|
||||||
|
@ -102,43 +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;
|
|
||||||
|
|
||||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
|
||||||
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const f32* floats, int count)
|
|
||||||
{
|
|
||||||
return setVertexShaderConstant(getVertexShaderConstantID(name), floats, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
|
||||||
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const s32* ints, int count)
|
|
||||||
{
|
|
||||||
return setVertexShaderConstant(getVertexShaderConstantID(name), ints, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
|
||||||
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const f32* floats, int count)
|
|
||||||
{
|
|
||||||
return setPixelShaderConstant(getPixelShaderConstantID(name), floats, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
|
||||||
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const s32* ints, int count)
|
|
||||||
{
|
|
||||||
return setPixelShaderConstant(getPixelShaderConstantID(name), ints, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get pointer to the IVideoDriver interface
|
//! Get pointer to the IVideoDriver interface
|
||||||
/** \return Pointer to the IVideoDriver interface */
|
/** \return Pointer to the IVideoDriver interface */
|
||||||
virtual IVideoDriver *getVideoDriver() = 0;
|
virtual IVideoDriver *getVideoDriver() = 0;
|
||||||
|
@ -146,6 +78,3 @@ public:
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -97,11 +94,6 @@ namespace scene
|
||||||
/** \param box New bounding box to use for the mesh. */
|
/** \param box New bounding box to use for the mesh. */
|
||||||
virtual void setBoundingBox(const core::aabbox3df &box) = 0;
|
virtual void setBoundingBox(const core::aabbox3df &box) = 0;
|
||||||
|
|
||||||
//! Sets a flag of all contained materials to a new value.
|
|
||||||
/** \param flag: Flag to set in all materials.
|
|
||||||
\param newvalue: New value to set in all materials. */
|
|
||||||
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) = 0;
|
|
||||||
|
|
||||||
//! Set the hardware mapping hint
|
//! Set the hardware mapping hint
|
||||||
/** This methods allows to define optimization hints for the
|
/** This methods allows to define optimization hints for the
|
||||||
hardware. This enables, e.g., the use of hardware buffers on
|
hardware. This enables, e.g., the use of hardware buffers on
|
||||||
|
@ -129,6 +121,3 @@ namespace scene
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -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,26 +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_QUAD_STRIP: return (indexCount-2)/2;
|
case scene::EPT_TRIANGLE_STRIP:
|
||||||
case scene::EPT_QUADS: return indexCount/4;
|
return (indexCount - 2);
|
||||||
case scene::EPT_POLYGON: return indexCount; // (not really primitives, that would be 1, works like line_strip)
|
case scene::EPT_TRIANGLE_FAN:
|
||||||
case scene::EPT_POINT_SPRITES: return indexCount;
|
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
|
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
||||||
|
@ -78,46 +76,6 @@ namespace scene
|
||||||
number. */
|
number. */
|
||||||
virtual IAnimatedMesh *getMeshByIndex(u32 index) = 0;
|
virtual IAnimatedMesh *getMeshByIndex(u32 index) = 0;
|
||||||
|
|
||||||
//! Returns a mesh based on its name (often a filename).
|
|
||||||
/** \deprecated Use getMeshByName() instead. This method may be removed by
|
|
||||||
Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ IAnimatedMesh* getMeshByFilename(const io::path& filename)
|
|
||||||
{
|
|
||||||
return getMeshByName(filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the name of a loaded mesh, based on its index. (Name is often identical to the filename).
|
|
||||||
/** \deprecated Use getMeshName() instead. This method may be removed by
|
|
||||||
Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ const io::path& getMeshFilename(u32 index) const
|
|
||||||
{
|
|
||||||
return getMeshName(index).getInternalName();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the name of a loaded mesh, if there is any. (Name is often identical to the filename).
|
|
||||||
/** \deprecated Use getMeshName() instead. This method may be removed by
|
|
||||||
Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ const io::path& getMeshFilename(const IMesh* const mesh) const
|
|
||||||
{
|
|
||||||
return getMeshName(mesh).getInternalName();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Renames a loaded mesh.
|
|
||||||
/** \deprecated Use renameMesh() instead. This method may be removed by
|
|
||||||
Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ bool setMeshFilename(u32 index, const io::path& filename)
|
|
||||||
{
|
|
||||||
return renameMesh(index, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Renames a loaded mesh.
|
|
||||||
/** \deprecated Use renameMesh() instead. This method may be removed by
|
|
||||||
Irrlicht 1.9 */
|
|
||||||
_IRR_DEPRECATED_ bool setMeshFilename(const IMesh* const mesh, const io::path& filename)
|
|
||||||
{
|
|
||||||
return renameMesh(mesh, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns a mesh based on its name.
|
//! Returns a mesh based on its name.
|
||||||
/** \param name Name of the mesh. Usually a filename.
|
/** \param name Name of the mesh. Usually a filename.
|
||||||
\return Pointer to the mesh or 0 if there is none with this number. */
|
\return Pointer to the mesh or 0 if there is none with this number. */
|
||||||
|
@ -169,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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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,45 +28,6 @@ namespace scene
|
||||||
class IMeshManipulator : public virtual IReferenceCounted
|
class IMeshManipulator : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Flips the direction of surfaces.
|
|
||||||
/** Changes backfacing triangles to frontfacing
|
|
||||||
triangles and vice versa.
|
|
||||||
\param mesh Mesh on which the operation is performed. */
|
|
||||||
virtual void flipSurfaces(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Sets the alpha vertex color value of the whole mesh to a new value.
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param alpha New alpha value. Must be a value between 0 and 255. */
|
|
||||||
void setVertexColorAlpha(IMesh* mesh, s32 alpha) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetAlphaManipulator(alpha), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the alpha vertex color value of the whole mesh to a new value.
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param alpha New alpha value. Must be a value between 0 and 255. */
|
|
||||||
void setVertexColorAlpha(IMeshBuffer* buffer, s32 alpha) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetAlphaManipulator(alpha), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the colors of all vertices to one color
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param color New color. */
|
|
||||||
void setVertexColors(IMesh* mesh, video::SColor color) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetManipulator(color), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the colors of all vertices to one color
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param color New color. */
|
|
||||||
void setVertexColors(IMeshBuffer* buffer, video::SColor color) const
|
|
||||||
{
|
|
||||||
apply(scene::SVertexColorSetManipulator(color), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! 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.
|
||||||
|
@ -82,26 +42,6 @@ namespace scene
|
||||||
virtual void recalculateNormals(IMeshBuffer *buffer,
|
virtual void recalculateNormals(IMeshBuffer *buffer,
|
||||||
bool smooth = false, bool angleWeighted = false) const = 0;
|
bool smooth = false, bool angleWeighted = false) const = 0;
|
||||||
|
|
||||||
//! Recalculates tangents, requires a tangent mesh
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param recalculateNormals If the normals shall be recalculated, otherwise original normals of the mesh are used unchanged.
|
|
||||||
\param smooth If the normals shall be smoothed.
|
|
||||||
\param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision.
|
|
||||||
*/
|
|
||||||
virtual void recalculateTangents(IMesh* mesh,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false) const=0;
|
|
||||||
|
|
||||||
//! Recalculates tangents, requires a tangent mesh buffer
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param recalculateNormals If the normals shall be recalculated, otherwise original normals of the buffer are used unchanged.
|
|
||||||
\param smooth If the normals shall be smoothed.
|
|
||||||
\param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision.
|
|
||||||
*/
|
|
||||||
virtual void recalculateTangents(IMeshBuffer* buffer,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false) const=0;
|
|
||||||
|
|
||||||
//! Scales the actual mesh, not a scene node.
|
//! Scales the actual mesh, not a scene node.
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
/** \param mesh Mesh on which the operation is performed.
|
||||||
\param factor Scale factor for each axis. */
|
\param factor Scale factor for each axis. */
|
||||||
|
@ -118,116 +58,6 @@ namespace scene
|
||||||
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Scales the actual mesh, not a scene node.
|
|
||||||
/** \deprecated Use scale() instead. This method may be removed by Irrlicht 1.9
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param factor Scale factor for each axis. */
|
|
||||||
_IRR_DEPRECATED_ void scaleMesh(IMesh* mesh, const core::vector3df& factor) const {return scale(mesh,factor);}
|
|
||||||
|
|
||||||
//! Scale the texture coords of a mesh.
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param factor Vector which defines the scale for each axis.
|
|
||||||
\param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */
|
|
||||||
void scaleTCoords(scene::IMesh* mesh, const core::vector2df& factor, u32 level=1) const
|
|
||||||
{
|
|
||||||
apply(SVertexTCoordsScaleManipulator(factor, level), mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Scale the texture coords of a meshbuffer.
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param factor Vector which defines the scale for each axis.
|
|
||||||
\param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */
|
|
||||||
void scaleTCoords(scene::IMeshBuffer* buffer, const core::vector2df& factor, u32 level=1) const
|
|
||||||
{
|
|
||||||
apply(SVertexTCoordsScaleManipulator(factor, level), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a mesh
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
|
||||||
\param m transformation matrix.
|
|
||||||
\param normalsUpdate When 0 - don't update normals.
|
|
||||||
When 1 - update normals with inverse transposed of the transformation matrix
|
|
||||||
*/
|
|
||||||
void transform(IMesh* mesh, const core::matrix4& m, u32 normalsUpdate = 0) const
|
|
||||||
{
|
|
||||||
apply(SVertexPositionTransformManipulator(m), mesh, true);
|
|
||||||
|
|
||||||
if ( normalsUpdate == 1 )
|
|
||||||
{
|
|
||||||
core::matrix4 invT;
|
|
||||||
if ( m.getInverse(invT) )
|
|
||||||
{
|
|
||||||
invT = invT.getTransposed();
|
|
||||||
apply(SVertexNormalTransformManipulator(invT), mesh, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a meshbuffer
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
|
||||||
\param m transformation matrix.
|
|
||||||
\param normalsUpdate When 0 - don't update normals.
|
|
||||||
When 1 - update normals with inverse transposed of the transformation matrix
|
|
||||||
*/
|
|
||||||
void transform(IMeshBuffer* buffer, const core::matrix4& m, u32 normalsUpdate = 0) const
|
|
||||||
{
|
|
||||||
apply(SVertexPositionTransformManipulator(m), buffer, true);
|
|
||||||
|
|
||||||
if ( normalsUpdate == 1 )
|
|
||||||
{
|
|
||||||
core::matrix4 invT;
|
|
||||||
if ( m.getInverse(invT) )
|
|
||||||
{
|
|
||||||
invT = invT.getTransposed();
|
|
||||||
apply(SVertexNormalTransformManipulator(invT), buffer, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Applies a transformation to a mesh
|
|
||||||
/** \deprecated Use transform() instead. This method may be removed by Irrlicht 1.9
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param m transformation matrix. */
|
|
||||||
_IRR_DEPRECATED_ virtual void transformMesh(IMesh* mesh, const core::matrix4& m) const {return transform(mesh,m);}
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the mesh
|
|
||||||
/** \param mesh: Mesh on which the operation is performed.
|
|
||||||
\param resolution: resolution of the planar mapping. This is
|
|
||||||
the value specifying which is the relation between world space
|
|
||||||
and texture coordinate space. */
|
|
||||||
virtual void makePlanarTextureMapping(IMesh* mesh, f32 resolution=0.001f) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the meshbuffer
|
|
||||||
/** \param meshbuffer: Buffer on which the operation is performed.
|
|
||||||
\param resolution: resolution of the planar mapping. This is
|
|
||||||
the value specifying which is the relation between world space
|
|
||||||
and texture coordinate space. */
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMeshBuffer* meshbuffer, f32 resolution=0.001f) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the buffer
|
|
||||||
/** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
|
|
||||||
\param mesh Mesh on which the operation is performed.
|
|
||||||
\param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space.
|
|
||||||
\param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space.
|
|
||||||
\param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z).
|
|
||||||
\param offset Vector added to the vertex positions (in object coordinates).
|
|
||||||
*/
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMesh* mesh,
|
|
||||||
f32 resolutionS, f32 resolutionT,
|
|
||||||
u8 axis, const core::vector3df& offset) const=0;
|
|
||||||
|
|
||||||
//! Creates a planar texture mapping on the meshbuffer
|
|
||||||
/** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required.
|
|
||||||
\param buffer Buffer on which the operation is performed.
|
|
||||||
\param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space.
|
|
||||||
\param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space.
|
|
||||||
\param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z).
|
|
||||||
\param offset Vector added to the vertex positions (in object coordinates).
|
|
||||||
*/
|
|
||||||
virtual void makePlanarTextureMapping(scene::IMeshBuffer* buffer,
|
|
||||||
f32 resolutionS, f32 resolutionT,
|
|
||||||
u8 axis, const core::vector3df& offset) const=0;
|
|
||||||
|
|
||||||
//! Clones a static IMesh into a modifiable SMesh.
|
//! Clones a static IMesh into a modifiable SMesh.
|
||||||
/** All meshbuffers in the returned SMesh
|
/** All meshbuffers in the returned SMesh
|
||||||
are of type SMeshBuffer or SMeshBufferLightMap.
|
are of type SMeshBuffer or SMeshBufferLightMap.
|
||||||
|
@ -237,59 +67,6 @@ namespace scene
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual SMesh *createMeshCopy(IMesh *mesh) const = 0;
|
virtual SMesh *createMeshCopy(IMesh *mesh) const = 0;
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices.
|
|
||||||
/** This is useful if you want to draw tangent space normal
|
|
||||||
mapped geometry because it calculates the tangent and binormal
|
|
||||||
data which is needed there.
|
|
||||||
\param mesh Input mesh
|
|
||||||
\param recalculateNormals The normals are recalculated if set,
|
|
||||||
otherwise the original ones are kept. Note that keeping the
|
|
||||||
normals may introduce inaccurate tangents if the normals are
|
|
||||||
very different to those calculated from the faces.
|
|
||||||
\param smooth The normals/tangents are smoothed across the
|
|
||||||
meshbuffer's faces if this flag is set.
|
|
||||||
\param angleWeighted Improved smoothing calculation used
|
|
||||||
\param recalculateTangents Whether are actually calculated, or just the mesh with proper type is created.
|
|
||||||
\return Mesh consisting only of S3DVertexTangents vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWithTangents(IMesh* mesh,
|
|
||||||
bool recalculateNormals=false, bool smooth=false,
|
|
||||||
bool angleWeighted=false, bool recalculateTangents=true) const=0;
|
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices.
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of S3DVertex2TCoord vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWith2TCoords(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of the mesh, which will only consist of S3DVertex vertices.
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of S3DVertex vertices. If
|
|
||||||
you no longer need the cloned mesh, you should call
|
|
||||||
IMesh::drop(). See IReferenceCounted::drop() for more
|
|
||||||
information. */
|
|
||||||
virtual IMesh* createMeshWith1TCoords(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of a mesh with all vertices unwelded
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\return Mesh consisting only of unique faces. All vertices
|
|
||||||
which were previously shared are now duplicated. If you no
|
|
||||||
longer need the cloned mesh, you should call IMesh::drop(). See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IMesh* createMeshUniquePrimitives(IMesh* mesh) const = 0;
|
|
||||||
|
|
||||||
//! Creates a copy of a mesh with vertices welded
|
|
||||||
/** \param mesh Input mesh
|
|
||||||
\param tolerance The threshold for vertex comparisons.
|
|
||||||
\return Mesh without redundant vertices. If you no longer need
|
|
||||||
the cloned mesh, you should call IMesh::drop(). See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IMesh* createMeshWelded(IMesh* mesh, f32 tolerance=core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Get amount of polygons in mesh.
|
//! Get amount of polygons in mesh.
|
||||||
/** \param mesh Input mesh
|
/** \param mesh Input mesh
|
||||||
\return Number of polygons in mesh. */
|
\return Number of polygons in mesh. */
|
||||||
|
@ -310,43 +87,6 @@ namespace scene
|
||||||
virtual IAnimatedMesh *createAnimatedMesh(IMesh *mesh,
|
virtual IAnimatedMesh *createAnimatedMesh(IMesh *mesh,
|
||||||
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
||||||
|
|
||||||
//! Vertex cache optimization according to the Forsyth paper
|
|
||||||
/** More information can be found at
|
|
||||||
http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
|
|
||||||
|
|
||||||
The function is thread-safe (read: you can optimize several
|
|
||||||
meshes in different threads).
|
|
||||||
|
|
||||||
\param mesh Source mesh for the operation.
|
|
||||||
\return A new mesh optimized for the vertex cache. */
|
|
||||||
virtual IMesh* createForsythOptimizedMesh(const IMesh *mesh) const = 0;
|
|
||||||
|
|
||||||
//! Optimize the mesh with an algorithm tuned for heightmaps.
|
|
||||||
/**
|
|
||||||
This differs from usual simplification methods in two ways:
|
|
||||||
- it's intended to be lossless
|
|
||||||
- it has special care for the borders, which are useful with heightmap tiles
|
|
||||||
|
|
||||||
This function is thread-safe. Remember to weld afterwards - this
|
|
||||||
function only moves vertices, it does not weld.
|
|
||||||
|
|
||||||
\param mesh Mesh to operate on.
|
|
||||||
*/
|
|
||||||
virtual void heightmapOptimizeMesh(IMesh * const mesh, const f32 tolerance = core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Optimize the meshbuffer with an algorithm tuned for heightmaps.
|
|
||||||
/**
|
|
||||||
This differs from usual simplification methods in two ways:
|
|
||||||
- it's intended to be lossless
|
|
||||||
- it has special care for the borders, which are useful with heightmap tiles
|
|
||||||
|
|
||||||
This function is thread-safe. Remember to weld afterward - this
|
|
||||||
function only moves vertices, it does not weld.
|
|
||||||
|
|
||||||
\param mb Meshbuffer to operate on.
|
|
||||||
*/
|
|
||||||
virtual void heightmapOptimizeMesh(IMeshBuffer * const mb, const f32 tolerance = core::ROUNDING_ERROR_f32) const = 0;
|
|
||||||
|
|
||||||
//! Apply a manipulator on the Meshbuffer
|
//! Apply a manipulator on the Meshbuffer
|
||||||
/** \param func A functor defining the mesh manipulation.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param buffer The Meshbuffer to apply the manipulator to.
|
\param buffer The Meshbuffer to apply the manipulator to.
|
||||||
|
@ -358,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.
|
||||||
|
@ -371,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
|
||||||
|
@ -401,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
|
||||||
|
@ -440,6 +168,3 @@ protected:
|
||||||
|
|
||||||
} // 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
Loading…
Add table
Reference in a new issue