forked from Mirrorlandia_minetest/irrlicht
Compare commits
410 Commits
bitmapfont
...
master
Author | SHA1 | Date | |
---|---|---|---|
154064522e | |||
|
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 | ||
5f22e03109 | |||
|
4299ee21d8 | ||
|
5b81694b1d | ||
|
66786d0059 | ||
|
9df2f0b944 | ||
|
c3571261ca | ||
|
bdcd27ab5b | ||
|
345285786f | ||
|
dda9b23c3d | ||
|
b349266855 | ||
|
ee2467d622 | ||
|
88ca26c418 | ||
|
8f44270e4a | ||
|
edc678f995 | ||
|
0faeea33c3 | ||
|
f86b9b93e8 | ||
|
a3ec3a88e8 | ||
|
7df45b4cf3 | ||
66ccfc3a3f | |||
|
a2b6244f54 | ||
|
3983c29645 | ||
|
73e62f8676 | ||
|
fb4ee6ac93 | ||
|
91e4129615 | ||
|
54b82aad26 | ||
|
03dd8b0336 | ||
|
6e6b4a6f3c | ||
|
0110826ce9 | ||
|
4e52d547b2 | ||
|
9a439a3646 | ||
|
854e97f57c | ||
|
22f2c37322 | ||
|
94cb0cc19d | ||
9bde930364 | |||
|
9b52d6fb0d | ||
|
16a99c2079 | ||
|
bb7c06d32a | ||
68b1bee6df | |||
|
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 | ||
|
fc4eda0f44 | ||
|
401e769114 | ||
|
24594ce226 | ||
|
ba0396e93d | ||
|
c9b66c8c58 | ||
|
8b1d0db8e2 | ||
|
e469c54f76 | ||
|
df908ef4ea | ||
|
01586f584a | ||
|
95af6d7c08 | ||
|
00dd274510 | ||
|
d59bcdbd07 | ||
|
09b8837ef9 | ||
|
4fb1c55ec5 | ||
|
7fb36849c7 | ||
|
8c0ee7d9ab | ||
|
684293f527 | ||
|
1b8be72ccb | ||
|
d3132e0731 | ||
|
e5f69157db | ||
|
fa2a7dc236 | ||
|
7d1dc8b2d5 | ||
|
53db262bd2 | ||
|
195759100f | ||
|
2fec5e5dd3 | ||
|
52e03a8485 | ||
|
dd09fdcb4e | ||
|
4bdecbc6b7 | ||
|
6d133e1bcc | ||
|
d4119ba664 | ||
|
2f2d37dce6 | ||
|
d322b73e4c | ||
|
6779cb7254 | ||
|
39cad3e618 |
@ -1,3 +1,5 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
|
||||
|
262
.github/workflows/build.yml
vendored
262
.github/workflows/build.yml
vendored
@ -8,43 +8,46 @@ on:
|
||||
jobs:
|
||||
|
||||
linux-gl:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
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
|
||||
run: |
|
||||
cmake .
|
||||
cmake . -DUSE_SDL2=OFF
|
||||
make VERBOSE=1 -j2
|
||||
|
||||
- name: Test
|
||||
run: |
|
||||
ctest --output-on-failure
|
||||
|
||||
- name: Package
|
||||
run: |
|
||||
make DESTDIR=$PWD/_install install
|
||||
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:
|
||||
name: irrlicht-linux
|
||||
path: ./irrlicht-linux.tar.gz
|
||||
|
||||
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:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
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
|
||||
run: |
|
||||
sed '/#define _IRR_COMPILE_WITH_OGLES2_/ s|^//||g' -i include/IrrCompileConfig.h
|
||||
sed '/#define _IRR_COMPILE_WITH_OPENGL_/ s|^|//|g' -i include/IrrCompileConfig.h
|
||||
cmake . -DBUILD_EXAMPLES=1
|
||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||
make -j2
|
||||
|
||||
- name: Test (headless)
|
||||
@ -55,44 +58,113 @@ jobs:
|
||||
- name: Test (Xvfb)
|
||||
run: |
|
||||
cd bin/Linux
|
||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||
|
||||
win32:
|
||||
runs-on: ubuntu-18.04
|
||||
linux-sdl:
|
||||
# something is wrong with the SDL cmake files on 20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install cmake g++-mingw-w64-i686 -qyy
|
||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
./scripts/ci-build-mingw.sh
|
||||
env:
|
||||
CC: i686-w64-mingw32-gcc
|
||||
CXX: i686-w64-mingw32-g++
|
||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
|
||||
make -j2
|
||||
|
||||
win64:
|
||||
runs-on: ubuntu-18.04
|
||||
- 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@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install cmake g++-mingw-w64-x86-64 -qyy
|
||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
./scripts/ci-build-mingw.sh
|
||||
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:
|
||||
# something is wrong with the SDL cmake files on 20.04
|
||||
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_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: x86_64-w64-mingw32-gcc
|
||||
CXX: x86_64-w64-mingw32-g++
|
||||
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-10.15
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
brew update
|
||||
@ -100,5 +172,135 @@ jobs:
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST
|
||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1
|
||||
make -j3
|
||||
|
||||
- name: Test (headless)
|
||||
run: |
|
||||
./bin/OSX/AutomatedTest null
|
||||
|
||||
macos-sdl:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install deps
|
||||
run: |
|
||||
brew update
|
||||
brew install cmake libpng jpeg sdl2
|
||||
|
||||
- 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
|
||||
IrrlichtMtConfigVersion.cmake
|
||||
IrrlichtMtTargets.cmake
|
||||
CTestTestfile.cmake
|
||||
Makefile
|
||||
libs/*
|
||||
*.so*
|
||||
@ -15,3 +16,10 @@ bin/Linux
|
||||
scripts/gl2ext.h
|
||||
scripts/glcorearb.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
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.9)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.9)
|
||||
endif()
|
||||
set(IRRLICHTMT_REVISION 15)
|
||||
|
||||
project(Irrlicht
|
||||
VERSION 1.9.0
|
||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if(ANDROID)
|
||||
@ -36,7 +34,9 @@ if(NOT CMAKE_BUILD_TYPE)
|
||||
endif()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
enable_testing()
|
||||
add_subdirectory(source/Irrlicht)
|
||||
add_subdirectory(test)
|
||||
|
||||
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
||||
if(BUILD_EXAMPLES)
|
||||
|
@ -1,5 +1,11 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
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")
|
||||
endif()
|
||||
|
@ -1,26 +1,26 @@
|
||||
Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Please note that the Irrlicht Engine is based in part on the work of the
|
||||
Independent JPEG Group, the zlib, libPng and aesGladman. This means that if you use
|
||||
the Irrlicht Engine in your product, you must acknowledge somewhere in your
|
||||
documentation that you've used the IJPG code. It would also be nice to mention
|
||||
that you use the Irrlicht Engine, the zlib, libPng and aesGladman. See the
|
||||
corresponding license files for further informations. It is also possible to disable
|
||||
usage of those additional libraries by defines in the IrrCompileConfig.h header and
|
||||
recompiling the engine.
|
||||
Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Please note that the Irrlicht Engine is based in part on the work of the
|
||||
Independent JPEG Group, the zlib, libPng and aesGladman. This means that if you use
|
||||
the Irrlicht Engine in your product, you must acknowledge somewhere in your
|
||||
documentation that you've used the IJPG code. It would also be nice to mention
|
||||
that you use the Irrlicht Engine, the zlib, libPng and aesGladman. See the
|
||||
corresponding license files for further informations. It is also possible to disable
|
||||
usage of those additional libraries by defines in the IrrCompileConfig.h header and
|
||||
recompiling the engine.
|
27
README.md
27
README.md
@ -1,9 +1,9 @@
|
||||
IrrlichtMt version 1.9
|
||||
======================
|
||||
|
||||
The Irrlicht Engine is an open source realtime 3D engine written in C++.
|
||||
|
||||
This is a fork by the [Minetest](https://github.com/minetest) developers that contains features, customizations and fixes specifically for use in Minetest.
|
||||
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
|
||||
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
|
||||
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
|
||||
|
||||
Build
|
||||
-----
|
||||
@ -15,10 +15,16 @@ The following libraries are required to be installed:
|
||||
* OpenGL
|
||||
* or on mobile: OpenGL ES (can be optionally enabled on desktop too)
|
||||
* on Unix: X11
|
||||
* SDL2 (see below)
|
||||
|
||||
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_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:
|
||||
|
||||
@ -29,6 +35,21 @@ e.g. on a Linux system you might want to build for local use like this:
|
||||
|
||||
This will put an IrrlichtMtTargets.cmake file into the cmake directory in the current build directory, and it can then be imported from another project by pointing `find_package()` to the build directory, or by setting the `CMAKE_PREFIX_PATH` variable to that same path.
|
||||
|
||||
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
|
||||
---------
|
||||
|
||||
|
@ -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.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
@ -1,24 +0,0 @@
|
||||
The Win64-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 Win64
|
||||
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
|
@ -1 +0,0 @@
|
||||
If you wish to compile Irrlicht for emscripten please check the documenation in examples/01.HelloWorld_emscripten.
|
5524
changes.txt
5524
changes.txt
File diff suppressed because it is too large
Load Diff
@ -1,34 +0,0 @@
|
||||
The Irrlicht Engine may be compiled to provide support for AES encrypted files. The implementation used by Irrlicht is provided by Dr Brian Gladman. The license for these files (including AES, a PRNG, SHA, and other algorithms) is as follows
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK.
|
||||
All rights reserved.
|
||||
|
||||
LICENSE TERMS
|
||||
|
||||
The free distribution and use of this software in both source and binary
|
||||
form is allowed (with or without changes) provided that:
|
||||
|
||||
1. distributions of this source code include the above copyright
|
||||
notice, this list of conditions and the following disclaimer;
|
||||
|
||||
2. distributions in binary form include the above copyright
|
||||
notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other associated materials;
|
||||
|
||||
3. the copyright holder's name is not used to endorse products
|
||||
built using this software without specific written permission.
|
||||
|
||||
ALTERNATIVELY, provided that this notice is retained in full, this product
|
||||
may be distributed under the terms of the GNU General Public License (GPL),
|
||||
in which case the provisions of the GPL apply INSTEAD OF those given above.
|
||||
|
||||
DISCLAIMER
|
||||
|
||||
This software is provided 'as is' with no explicit or implied warranties
|
||||
in respect of its properties, including, but not limited to, correctness
|
||||
and/or fitness for purpose.
|
||||
---------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -1,42 +0,0 @@
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
This program, "bzip2", the associated library "libbzip2", and all
|
||||
documentation, are copyright (C) 1996-2007 Julian R Seward. All
|
||||
rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, jseward@bzip.org
|
||||
bzip2/libbzip2 version 1.0.5 of 10 December 2007
|
||||
|
||||
--------------------------------------------------------------------------
|
@ -1,351 +0,0 @@
|
||||
The Independent JPEG Group's JPEG software
|
||||
==========================================
|
||||
|
||||
README for release 8d of 15-Jan-2012
|
||||
====================================
|
||||
|
||||
This distribution contains the eighth public release of the Independent JPEG
|
||||
Group's free JPEG software. You are welcome to redistribute this software and
|
||||
to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
|
||||
|
||||
This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,
|
||||
Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
|
||||
Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
|
||||
and other members of the Independent JPEG Group.
|
||||
|
||||
IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
|
||||
(also known as JPEG, together with ITU-T SG16).
|
||||
|
||||
|
||||
DOCUMENTATION ROADMAP
|
||||
=====================
|
||||
|
||||
This file contains the following sections:
|
||||
|
||||
OVERVIEW General description of JPEG and the IJG software.
|
||||
LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
|
||||
REFERENCES Where to learn more about JPEG.
|
||||
ARCHIVE LOCATIONS Where to find newer versions of this software.
|
||||
ACKNOWLEDGMENTS Special thanks.
|
||||
FILE FORMAT WARS Software *not* to get.
|
||||
TO DO Plans for future IJG releases.
|
||||
|
||||
Other documentation files in the distribution are:
|
||||
|
||||
User documentation:
|
||||
install.txt How to configure and install the IJG software.
|
||||
usage.txt Usage instructions for cjpeg, djpeg, jpegtran,
|
||||
rdjpgcom, and wrjpgcom.
|
||||
*.1 Unix-style man pages for programs (same info as usage.txt).
|
||||
wizard.txt Advanced usage instructions for JPEG wizards only.
|
||||
change.log Version-to-version change highlights.
|
||||
Programmer and internal documentation:
|
||||
libjpeg.txt How to use the JPEG library in your own programs.
|
||||
example.c Sample code for calling the JPEG library.
|
||||
structure.txt Overview of the JPEG library's internal structure.
|
||||
filelist.txt Road map of IJG files.
|
||||
coderules.txt Coding style rules --- please read if you contribute code.
|
||||
|
||||
Please read at least the files install.txt and usage.txt. Some information
|
||||
can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
|
||||
ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
|
||||
|
||||
If you want to understand how the JPEG code works, we suggest reading one or
|
||||
more of the REFERENCES, then looking at the documentation files (in roughly
|
||||
the order listed) before diving into the code.
|
||||
|
||||
|
||||
OVERVIEW
|
||||
========
|
||||
|
||||
This package contains C software to implement JPEG image encoding, decoding,
|
||||
and transcoding. JPEG (pronounced "jay-peg") is a standardized compression
|
||||
method for full-color and gray-scale images.
|
||||
|
||||
This software implements JPEG baseline, extended-sequential, and progressive
|
||||
compression processes. Provision is made for supporting all variants of these
|
||||
processes, although some uncommon parameter settings aren't implemented yet.
|
||||
We have made no provision for supporting the hierarchical or lossless
|
||||
processes defined in the standard.
|
||||
|
||||
We provide a set of library routines for reading and writing JPEG image files,
|
||||
plus two sample applications "cjpeg" and "djpeg", which use the library to
|
||||
perform conversion between JPEG and some other popular image file formats.
|
||||
The library is intended to be reused in other applications.
|
||||
|
||||
In order to support file conversion and viewing software, we have included
|
||||
considerable functionality beyond the bare JPEG coding/decoding capability;
|
||||
for example, the color quantization modules are not strictly part of JPEG
|
||||
decoding, but they are essential for output to colormapped file formats or
|
||||
colormapped displays. These extra functions can be compiled out of the
|
||||
library if not required for a particular application.
|
||||
|
||||
We have also included "jpegtran", a utility for lossless transcoding between
|
||||
different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
|
||||
applications for inserting and extracting textual comments in JFIF files.
|
||||
|
||||
The emphasis in designing this software has been on achieving portability and
|
||||
flexibility, while also making it fast enough to be useful. In particular,
|
||||
the software is not intended to be read as a tutorial on JPEG. (See the
|
||||
REFERENCES section for introductory material.) Rather, it is intended to
|
||||
be reliable, portable, industrial-strength code. We do not claim to have
|
||||
achieved that goal in every aspect of the software, but we strive for it.
|
||||
|
||||
We welcome the use of this software as a component of commercial products.
|
||||
No royalty is required, but we do ask for an acknowledgement in product
|
||||
documentation, as described under LEGAL ISSUES.
|
||||
|
||||
|
||||
LEGAL ISSUES
|
||||
============
|
||||
|
||||
In plain English:
|
||||
|
||||
1. We don't promise that this software works. (But if you find any bugs,
|
||||
please let us know!)
|
||||
2. You can use this software for whatever you want. You don't have to pay us.
|
||||
3. You may not pretend that you wrote this software. If you use it in a
|
||||
program, you must acknowledge somewhere in your documentation that
|
||||
you've used the IJG code.
|
||||
|
||||
In legalese:
|
||||
|
||||
The authors make NO WARRANTY or representation, either express or implied,
|
||||
with respect to this software, its quality, accuracy, merchantability, or
|
||||
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||
its user, assume the entire risk as to its quality and accuracy.
|
||||
|
||||
This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
|
||||
All Rights Reserved except as specified below.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute this
|
||||
software (or portions thereof) for any purpose, without fee, subject to these
|
||||
conditions:
|
||||
(1) If any part of the source code for this software is distributed, then this
|
||||
README file must be included, with this copyright and no-warranty notice
|
||||
unaltered; and any additions, deletions, or changes to the original files
|
||||
must be clearly indicated in accompanying documentation.
|
||||
(2) If only executable code is distributed, then the accompanying
|
||||
documentation must state that "this software is based in part on the work of
|
||||
the Independent JPEG Group".
|
||||
(3) Permission for use of this software is granted only if the user accepts
|
||||
full responsibility for any undesirable consequences; the authors accept
|
||||
NO LIABILITY for damages of any kind.
|
||||
|
||||
These conditions apply to any software derived from or based on the IJG code,
|
||||
not just to the unmodified library. If you use our work, you ought to
|
||||
acknowledge us.
|
||||
|
||||
Permission is NOT granted for the use of any IJG author's name or company name
|
||||
in advertising or publicity relating to this software or products derived from
|
||||
it. This software may be referred to only as "the Independent JPEG Group's
|
||||
software".
|
||||
|
||||
We specifically permit and encourage the use of this software as the basis of
|
||||
commercial products, provided that all warranty or liability claims are
|
||||
assumed by the product vendor.
|
||||
|
||||
|
||||
ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
|
||||
sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
|
||||
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
|
||||
by the usual distribution terms of the Free Software Foundation; principally,
|
||||
that you must include source code if you redistribute it. (See the file
|
||||
ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
|
||||
of any program generated from the IJG code, this does not limit you more than
|
||||
the foregoing paragraphs do.
|
||||
|
||||
The Unix configuration script "configure" was produced with GNU Autoconf.
|
||||
It is copyright by the Free Software Foundation but is freely distributable.
|
||||
The same holds for its supporting scripts (config.guess, config.sub,
|
||||
ltmain.sh). Another support script, install-sh, is copyright by X Consortium
|
||||
but is also freely distributable.
|
||||
|
||||
The IJG distribution formerly included code to read and write GIF files.
|
||||
To avoid entanglement with the Unisys LZW patent, GIF reading support has
|
||||
been removed altogether, and the GIF writer has been simplified to produce
|
||||
"uncompressed GIFs". This technique does not use the LZW algorithm; the
|
||||
resulting GIF files are larger than usual, but are readable by all standard
|
||||
GIF decoders.
|
||||
|
||||
We are required to state that
|
||||
"The Graphics Interchange Format(c) is the Copyright property of
|
||||
CompuServe Incorporated. GIF(sm) is a Service Mark property of
|
||||
CompuServe Incorporated."
|
||||
|
||||
|
||||
REFERENCES
|
||||
==========
|
||||
|
||||
We recommend reading one or more of these references before trying to
|
||||
understand the innards of the JPEG software.
|
||||
|
||||
The best short technical introduction to the JPEG compression algorithm is
|
||||
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
||||
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
||||
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
||||
applications of JPEG, and related topics.) If you don't have the CACM issue
|
||||
handy, a PostScript file containing a revised version of Wallace's article is
|
||||
available at http://www.ijg.org/files/wallace.ps.gz. The file (actually
|
||||
a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
|
||||
omits the sample images that appeared in CACM, but it includes corrections
|
||||
and some added material. Note: the Wallace article is copyright ACM and IEEE,
|
||||
and it may not be used for commercial purposes.
|
||||
|
||||
A somewhat less technical, more leisurely introduction to JPEG can be found in
|
||||
"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
|
||||
M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides
|
||||
good explanations and example C code for a multitude of compression methods
|
||||
including JPEG. It is an excellent source if you are comfortable reading C
|
||||
code but don't know much about data compression in general. The book's JPEG
|
||||
sample code is far from industrial-strength, but when you are ready to look
|
||||
at a full implementation, you've got one here...
|
||||
|
||||
The best currently available description of JPEG is the textbook "JPEG Still
|
||||
Image Data Compression Standard" by William B. Pennebaker and Joan L.
|
||||
Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
|
||||
Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG
|
||||
standards (DIS 10918-1 and draft DIS 10918-2).
|
||||
Although this is by far the most detailed and comprehensive exposition of
|
||||
JPEG publicly available, we point out that it is still missing an explanation
|
||||
of the most essential properties and algorithms of the underlying DCT
|
||||
technology.
|
||||
If you think that you know about DCT-based JPEG after reading this book,
|
||||
then you are in delusion. The real fundamentals and corresponding potential
|
||||
of DCT-based JPEG are not publicly known so far, and that is the reason for
|
||||
all the mistaken developments taking place in the image coding domain.
|
||||
|
||||
The original JPEG standard is divided into two parts, Part 1 being the actual
|
||||
specification, while Part 2 covers compliance testing methods. Part 1 is
|
||||
titled "Digital Compression and Coding of Continuous-tone Still Images,
|
||||
Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
|
||||
10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
|
||||
Continuous-tone Still Images, Part 2: Compliance testing" and has document
|
||||
numbers ISO/IEC IS 10918-2, ITU-T T.83.
|
||||
IJG JPEG 8 introduces an implementation of the JPEG SmartScale extension
|
||||
which is specified in two documents: A contributed document at ITU and ISO
|
||||
with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced
|
||||
Image Coding", April 2006, Geneva, Switzerland. The latest version of this
|
||||
document is Revision 3. And a contributed document ISO/IEC JTC1/SC29/WG1 N
|
||||
5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany.
|
||||
|
||||
The JPEG standard does not specify all details of an interchangeable file
|
||||
format. For the omitted details we follow the "JFIF" conventions, revision
|
||||
1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report
|
||||
and thus received a formal publication status. It is available as a free
|
||||
download in PDF format from
|
||||
http://www.ecma-international.org/publications/techreports/E-TR-098.htm.
|
||||
A PostScript version of the JFIF document is available at
|
||||
http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at
|
||||
http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.
|
||||
|
||||
The TIFF 6.0 file format specification can be obtained by FTP from
|
||||
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
|
||||
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
|
||||
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
|
||||
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
|
||||
(Compression tag 7). Copies of this Note can be obtained from
|
||||
http://www.ijg.org/files/. It is expected that the next revision
|
||||
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
||||
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
||||
uses our library to implement TIFF/JPEG per the Note.
|
||||
|
||||
|
||||
ARCHIVE LOCATIONS
|
||||
=================
|
||||
|
||||
The "official" archive site for this software is www.ijg.org.
|
||||
The most recent released version can always be found there in
|
||||
directory "files". This particular version will be archived as
|
||||
http://www.ijg.org/files/jpegsrc.v8d.tar.gz, and in Windows-compatible
|
||||
"zip" archive format as http://www.ijg.org/files/jpegsr8d.zip.
|
||||
|
||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||
general information about JPEG.
|
||||
It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
|
||||
and other news.answers archive sites, including the official news.answers
|
||||
archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
|
||||
If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
|
||||
with body
|
||||
send usenet/news.answers/jpeg-faq/part1
|
||||
send usenet/news.answers/jpeg-faq/part2
|
||||
|
||||
|
||||
ACKNOWLEDGMENTS
|
||||
===============
|
||||
|
||||
Thank to Juergen Bruder for providing me with a copy of the common DCT
|
||||
algorithm article, only to find out that I had come to the same result
|
||||
in a more direct and comprehensible way with a more generative approach.
|
||||
|
||||
Thank to Istvan Sebestyen and Joan L. Mitchell for inviting me to the
|
||||
ITU JPEG (Study Group 16) meeting in Geneva, Switzerland.
|
||||
|
||||
Thank to Thomas Wiegand and Gary Sullivan for inviting me to the
|
||||
Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland.
|
||||
|
||||
Thank to Thomas Richter and Daniel Lee for inviting me to the
|
||||
ISO/IEC JTC1/SC29/WG1 (also known as JPEG, together with ITU-T SG16)
|
||||
meeting in Berlin, Germany.
|
||||
|
||||
Thank to John Korejwa and Massimo Ballerini for inviting me to
|
||||
fruitful consultations in Boston, MA and Milan, Italy.
|
||||
|
||||
Thank to Hendrik Elstner, Roland Fassauer, Simone Zuck, Guenther
|
||||
Maier-Gerber, Walter Stoeber, Fred Schmitz, and Norbert Braunagel
|
||||
for corresponding business development.
|
||||
|
||||
Thank to Nico Zschach and Dirk Stelling of the technical support team
|
||||
at the Digital Images company in Halle for providing me with extra
|
||||
equipment for configuration tests.
|
||||
|
||||
Thank to Richard F. Lyon (then of Foveon Inc.) for fruitful
|
||||
communication about JPEG configuration in Sigma Photo Pro software.
|
||||
|
||||
Thank to Andrew Finkenstadt for hosting the ijg.org site.
|
||||
|
||||
Last but not least special thank to Thomas G. Lane for the original
|
||||
design and development of this singular software package.
|
||||
|
||||
|
||||
FILE FORMAT WARS
|
||||
================
|
||||
|
||||
The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
|
||||
with ITU-T SG16) currently promotes different formats containing the name
|
||||
"JPEG" which is misleading because these formats are incompatible with
|
||||
original DCT-based JPEG and are based on faulty technologies.
|
||||
IJG therefore does not and will not support such momentary mistakes
|
||||
(see REFERENCES).
|
||||
There exist also distributions under the name "OpenJPEG" promoting such
|
||||
kind of formats which is misleading because they don't support original
|
||||
JPEG images.
|
||||
We have no sympathy for the promotion of inferior formats. Indeed, one of
|
||||
the original reasons for developing this free software was to help force
|
||||
convergence on common, interoperable format standards for JPEG files.
|
||||
Don't use an incompatible file format!
|
||||
(In any case, our decoder will remain capable of reading existing JPEG
|
||||
image files indefinitely.)
|
||||
|
||||
Furthermore, the ISO committee pretends to be "responsible for the popular
|
||||
JPEG" in their public reports which is not true because they don't respond to
|
||||
actual requirements for the maintenance of the original JPEG specification.
|
||||
|
||||
There are currently distributions in circulation containing the name
|
||||
"libjpeg" which claim to be a "derivative" or "fork" of the original
|
||||
libjpeg, but don't have the features and are incompatible with formats
|
||||
supported by actual IJG libjpeg distributions. Furthermore, they
|
||||
violate the license conditions as described under LEGAL ISSUES above.
|
||||
We have no sympathy for the release of misleading and illegal
|
||||
distributions derived from obsolete code bases.
|
||||
Don't use an obsolete code base!
|
||||
|
||||
|
||||
TO DO
|
||||
=====
|
||||
|
||||
Version 8 is the first release of a new generation JPEG standard
|
||||
to overcome the limitations of the original JPEG specification.
|
||||
More features are being prepared for coming releases...
|
||||
|
||||
Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.
|
@ -1,111 +0,0 @@
|
||||
|
||||
This copy of the libpng notices is provided for your convenience. In case of
|
||||
any discrepancy between this copy and the notices in the file png.h that is
|
||||
included in the libpng distribution, the latter shall prevail.
|
||||
|
||||
COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
|
||||
|
||||
If you modify libpng you may insert additional notices immediately following
|
||||
this sentence.
|
||||
|
||||
This code is released under the libpng license.
|
||||
|
||||
libpng versions 1.2.6, August 15, 2004, through 1.5.9, February 18, 2012, are
|
||||
Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are
|
||||
distributed according to the same disclaimer and license as libpng-1.2.5
|
||||
with the following individual added to the list of Contributing Authors
|
||||
|
||||
Cosmin Truta
|
||||
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
|
||||
Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
|
||||
distributed according to the same disclaimer and license as libpng-1.0.6
|
||||
with the following individuals added to the list of Contributing Authors
|
||||
|
||||
Simon-Pierre Cadieux
|
||||
Eric S. Raymond
|
||||
Gilles Vollant
|
||||
|
||||
and with the following additions to the disclaimer:
|
||||
|
||||
There is no warranty against interference with your enjoyment of the
|
||||
library or against infringement. There is no warranty that our
|
||||
efforts or the library will fulfill any of your particular purposes
|
||||
or needs. This library is provided with all faults, and the entire
|
||||
risk of satisfactory quality, performance, accuracy, and effort is with
|
||||
the user.
|
||||
|
||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||
Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
|
||||
distributed according to the same disclaimer and license as libpng-0.96,
|
||||
with the following individuals added to the list of Contributing Authors:
|
||||
|
||||
Tom Lane
|
||||
Glenn Randers-Pehrson
|
||||
Willem van Schaik
|
||||
|
||||
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||
Copyright (c) 1996, 1997 Andreas Dilger
|
||||
Distributed according to the same disclaimer and license as libpng-0.88,
|
||||
with the following individuals added to the list of Contributing Authors:
|
||||
|
||||
John Bowler
|
||||
Kevin Bracey
|
||||
Sam Bushell
|
||||
Magnus Holmgren
|
||||
Greg Roelofs
|
||||
Tom Tanner
|
||||
|
||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||
|
||||
For the purposes of this copyright and license, "Contributing Authors"
|
||||
is defined as the following set of individuals:
|
||||
|
||||
Andreas Dilger
|
||||
Dave Martindale
|
||||
Guy Eric Schalnat
|
||||
Paul Schmidt
|
||||
Tim Wegner
|
||||
|
||||
The PNG Reference Library is supplied "AS IS". The Contributing Authors
|
||||
and Group 42, Inc. disclaim all warranties, expressed or implied,
|
||||
including, without limitation, the warranties of merchantability and of
|
||||
fitness for any purpose. The Contributing Authors and Group 42, Inc.
|
||||
assume no liability for direct, indirect, incidental, special, exemplary,
|
||||
or consequential damages, which may result from the use of the PNG
|
||||
Reference Library, even if advised of the possibility of such damage.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute this
|
||||
source code, or portions hereof, for any purpose, without fee, subject
|
||||
to the following restrictions:
|
||||
|
||||
1. The origin of this source code must not be misrepresented.
|
||||
|
||||
2. Altered versions must be plainly marked as such and must not
|
||||
be misrepresented as being the original source.
|
||||
|
||||
3. This Copyright notice may not be removed or altered from any
|
||||
source or altered source distribution.
|
||||
|
||||
The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||
fee, and encourage the use of this source code as a component to
|
||||
supporting the PNG file format in commercial products. If you use this
|
||||
source code in a product, acknowledgment is not required but would be
|
||||
appreciated.
|
||||
|
||||
|
||||
A "png_get_copyright" function is available, for convenient use in "about"
|
||||
boxes and the like:
|
||||
|
||||
printf("%s",png_get_copyright(NULL));
|
||||
|
||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||
|
||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
|
||||
certification mark of the Open Source Initiative.
|
||||
|
||||
Glenn Randers-Pehrson
|
||||
glennrp at users.sourceforge.net
|
||||
February 18, 2012
|
@ -1,2 +0,0 @@
|
||||
Linux Users: There are some tools at the web for reading .chm files (try http://xchm.sourceforge.net/).
|
||||
You can find a html version of this documentation at http://irrlicht.sourceforge.net/docu/index.html
|
@ -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,113 +1,162 @@
|
||||
#include <irrlicht.h>
|
||||
#include "exampleHelper.h"
|
||||
|
||||
using namespace irr;
|
||||
|
||||
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
||||
{
|
||||
if (core::stringc(arg_) == "null")
|
||||
return video::EDT_NULL;
|
||||
|
||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
|
||||
return video::EDT_OGLES1;
|
||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))
|
||||
return video::EDT_OGLES2;
|
||||
return video::EDT_OPENGL;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
SIrrlichtCreationParameters p;
|
||||
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
||||
p.WindowSize = core::dimension2du(640, 480);
|
||||
p.Vsync = true;
|
||||
p.LoggingLevel = ELL_DEBUG;
|
||||
|
||||
IrrlichtDevice *device = createDeviceEx(p);
|
||||
if (!device)
|
||||
return 1;
|
||||
|
||||
device->setWindowCaption(L"Hello World!");
|
||||
device->setResizable(true);
|
||||
|
||||
video::IVideoDriver* driver = device->getVideoDriver();
|
||||
scene::ISceneManager* smgr = device->getSceneManager();
|
||||
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
|
||||
|
||||
guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);
|
||||
|
||||
gui::IGUIButton* button = guienv->addButton(
|
||||
core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",
|
||||
L"sample tooltip");
|
||||
|
||||
gui::IGUIEditBox* editbox = guienv->addEditBox(L"",
|
||||
core::rect<s32>(10,70,60,70 + 16));
|
||||
|
||||
const io::path mediaPath = getExampleMediaPath();
|
||||
|
||||
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
|
||||
if (!mesh)
|
||||
return 1;
|
||||
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
||||
if (node)
|
||||
{
|
||||
node->setMaterialFlag(video::EMF_LIGHTING, false);
|
||||
node->setFrameLoop(0, 29);
|
||||
node->setAnimationSpeed(30);
|
||||
node->setMaterialTexture(0, driver->getTexture(mediaPath + "cooltexture.png"));
|
||||
}
|
||||
|
||||
smgr->addCameraSceneNode(0, core::vector3df(0,4,5), core::vector3df(0,2,0));
|
||||
|
||||
s32 n = 0;
|
||||
SEvent event;
|
||||
device->getTimer()->start();
|
||||
|
||||
while (device->run())
|
||||
{
|
||||
if (device->getTimer()->getTime() >= 1300)
|
||||
{
|
||||
device->getTimer()->setTime(0);
|
||||
++n;
|
||||
if (n == 1) // Tooltip display
|
||||
{
|
||||
bzero(&event, sizeof(SEvent));
|
||||
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
||||
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
||||
device->postEventFromUser(event);
|
||||
}
|
||||
else if (n == 2) // Text input focus
|
||||
guienv->setFocus(editbox);
|
||||
else if (n == 3) // Keypress for Text input
|
||||
{
|
||||
bzero(&event, sizeof(SEvent));
|
||||
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
||||
event.KeyInput.Char = L'a';
|
||||
event.KeyInput.Key = KEY_KEY_A;
|
||||
event.KeyInput.PressedDown = true;
|
||||
device->postEventFromUser(event);
|
||||
event.KeyInput.PressedDown = false;
|
||||
device->postEventFromUser(event);
|
||||
}
|
||||
else
|
||||
device->closeDevice();
|
||||
}
|
||||
|
||||
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
||||
video::SColor(255,100,100,150));
|
||||
smgr->drawAll();
|
||||
guienv->drawAll();
|
||||
driver->endScene();
|
||||
}
|
||||
|
||||
if (core::stringw(L"a") != editbox->getText()) {
|
||||
device->getLogger()->log("EditBox text mismatch", ELL_INFORMATION);
|
||||
return 1;
|
||||
}
|
||||
|
||||
device->getLogger()->log("Done.", ELL_INFORMATION);
|
||||
device->drop();
|
||||
return 0;
|
||||
}
|
||||
#include <iostream>
|
||||
#include <irrlicht.h>
|
||||
#include "exampleHelper.h"
|
||||
|
||||
using namespace irr;
|
||||
|
||||
static IrrlichtDevice *device = nullptr;
|
||||
static int test_fail = 0;
|
||||
|
||||
void test_irr_array();
|
||||
void test_irr_string();
|
||||
|
||||
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||
{
|
||||
if (arg_ == "null")
|
||||
return video::EDT_NULL;
|
||||
if (arg_ == "ogles1")
|
||||
return video::EDT_OGLES1;
|
||||
if (arg_ == "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;
|
||||
}
|
||||
|
||||
static inline void check(bool ok, const char *msg)
|
||||
{
|
||||
if (!ok)
|
||||
{
|
||||
test_fail++;
|
||||
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[])
|
||||
{
|
||||
run_unit_tests();
|
||||
|
||||
SIrrlichtCreationParameters p;
|
||||
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
||||
p.WindowSize = core::dimension2du(640, 480);
|
||||
p.Vsync = true;
|
||||
p.LoggingLevel = ELL_DEBUG;
|
||||
|
||||
device = createDeviceEx(p);
|
||||
if (!device)
|
||||
return 1;
|
||||
|
||||
{
|
||||
u32 total = 0;
|
||||
device->getOSOperator()->getSystemMemory(&total, nullptr);
|
||||
core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10);
|
||||
device->getLogger()->log(message.c_str(), ELL_INFORMATION);
|
||||
check(total > 130 * 1024, "RAM amount");
|
||||
}
|
||||
|
||||
device->setWindowCaption(L"Hello World!");
|
||||
device->setResizable(true);
|
||||
|
||||
video::IVideoDriver* driver = device->getVideoDriver();
|
||||
scene::ISceneManager* smgr = device->getSceneManager();
|
||||
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
|
||||
|
||||
guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);
|
||||
|
||||
gui::IGUIButton* button = guienv->addButton(
|
||||
core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",
|
||||
L"sample tooltip");
|
||||
|
||||
gui::IGUIEditBox* editbox = guienv->addEditBox(L"",
|
||||
core::rect<s32>(10,70,60,70 + 16));
|
||||
|
||||
const io::path mediaPath = getExampleMediaPath();
|
||||
|
||||
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");
|
||||
if (mesh_file)
|
||||
mesh_file->drop();
|
||||
if (mesh)
|
||||
{
|
||||
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
||||
check(tex, "texture loading");
|
||||
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
||||
if (node)
|
||||
{
|
||||
node->forEachMaterial([tex] (video::SMaterial &mat) {
|
||||
mat.Lighting = false;
|
||||
mat.setTexture(0, tex);
|
||||
});
|
||||
node->setFrameLoop(0, 29);
|
||||
node->setAnimationSpeed(30);
|
||||
}
|
||||
}
|
||||
|
||||
smgr->addCameraSceneNode(0, core::vector3df(0,4,5), core::vector3df(0,2,0));
|
||||
|
||||
s32 n = 0;
|
||||
SEvent event;
|
||||
device->getTimer()->start();
|
||||
|
||||
while (device->run())
|
||||
{
|
||||
if (device->getTimer()->getTime() >= 1000)
|
||||
{
|
||||
device->getTimer()->setTime(0);
|
||||
++n;
|
||||
if (n == 1) // Tooltip display
|
||||
{
|
||||
bzero(&event, sizeof(SEvent));
|
||||
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
||||
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
||||
device->postEventFromUser(event);
|
||||
}
|
||||
else if (n == 2) // Text input focus
|
||||
guienv->setFocus(editbox);
|
||||
else if (n == 3) // Keypress for Text input
|
||||
{
|
||||
bzero(&event, sizeof(SEvent));
|
||||
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
||||
event.KeyInput.Char = L'a';
|
||||
event.KeyInput.Key = KEY_KEY_A;
|
||||
event.KeyInput.PressedDown = true;
|
||||
device->postEventFromUser(event);
|
||||
event.KeyInput.PressedDown = false;
|
||||
device->postEventFromUser(event);
|
||||
}
|
||||
else
|
||||
device->closeDevice();
|
||||
}
|
||||
|
||||
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
||||
video::SColor(255,100,100,150));
|
||||
smgr->drawAll();
|
||||
guienv->drawAll();
|
||||
driver->endScene();
|
||||
}
|
||||
|
||||
check(core::stringw(L"a") == editbox->getText(), "EditBox text");
|
||||
|
||||
device->getLogger()->log("Done.", ELL_INFORMATION);
|
||||
device->drop();
|
||||
return test_fail > 0 ? 1 : 0;
|
||||
}
|
||||
|
135
examples/AutomatedTest/test_array.cpp
Normal file
135
examples/AutomatedTest/test_array.cpp
Normal file
@ -0,0 +1,135 @@
|
||||
#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;
|
||||
}
|
30
examples/AutomatedTest/test_helper.h
Normal file
30
examples/AutomatedTest/test_helper.h
Normal file
@ -0,0 +1,30 @@
|
||||
#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
|
||||
# removed
|
||||
)
|
||||
|
@ -1,133 +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_DYNAMIC_MESHBUFFER_H_INCLUDED__
|
||||
#define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
|
||||
|
||||
#include "IDynamicMeshBuffer.h"
|
||||
|
||||
#include "CVertexBuffer.h"
|
||||
#include "CIndexBuffer.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
class CDynamicMeshBuffer: public IDynamicMeshBuffer
|
||||
{
|
||||
public:
|
||||
//! constructor
|
||||
CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType)
|
||||
: PrimitiveType(EPT_TRIANGLES)
|
||||
{
|
||||
VertexBuffer=new CVertexBuffer(vertexType);
|
||||
IndexBuffer=new CIndexBuffer(indexType);
|
||||
}
|
||||
|
||||
//! destructor
|
||||
virtual ~CDynamicMeshBuffer()
|
||||
{
|
||||
if (VertexBuffer)
|
||||
VertexBuffer->drop();
|
||||
if (IndexBuffer)
|
||||
IndexBuffer->drop();
|
||||
}
|
||||
|
||||
virtual IVertexBuffer& getVertexBuffer() const _IRR_OVERRIDE_
|
||||
{
|
||||
return *VertexBuffer;
|
||||
}
|
||||
|
||||
virtual IIndexBuffer& getIndexBuffer() const _IRR_OVERRIDE_
|
||||
{
|
||||
return *IndexBuffer;
|
||||
}
|
||||
|
||||
virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer) _IRR_OVERRIDE_
|
||||
{
|
||||
if (newVertexBuffer)
|
||||
newVertexBuffer->grab();
|
||||
if (VertexBuffer)
|
||||
VertexBuffer->drop();
|
||||
|
||||
VertexBuffer=newVertexBuffer;
|
||||
}
|
||||
|
||||
virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer) _IRR_OVERRIDE_
|
||||
{
|
||||
if (newIndexBuffer)
|
||||
newIndexBuffer->grab();
|
||||
if (IndexBuffer)
|
||||
IndexBuffer->drop();
|
||||
|
||||
IndexBuffer=newIndexBuffer;
|
||||
}
|
||||
|
||||
//! Get Material of this buffer.
|
||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
//! Get Material of this buffer.
|
||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
//! Get bounding box
|
||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
||||
{
|
||||
return BoundingBox;
|
||||
}
|
||||
|
||||
//! Set bounding box
|
||||
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
|
||||
{
|
||||
BoundingBox = box;
|
||||
}
|
||||
|
||||
//! Recalculate bounding box
|
||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
|
||||
{
|
||||
if (!getVertexBuffer().size())
|
||||
BoundingBox.reset(0,0,0);
|
||||
else
|
||||
{
|
||||
BoundingBox.reset(getVertexBuffer()[0].Pos);
|
||||
for (u32 i=1; i<getVertexBuffer().size(); ++i)
|
||||
BoundingBox.addInternalPoint(getVertexBuffer()[i].Pos);
|
||||
}
|
||||
}
|
||||
|
||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
|
||||
{
|
||||
PrimitiveType = type;
|
||||
}
|
||||
|
||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
video::SMaterial Material;
|
||||
core::aabbox3d<f32> BoundingBox;
|
||||
//! Primitive type used for rendering (triangles, lines, ...)
|
||||
E_PRIMITIVE_TYPE PrimitiveType;
|
||||
private:
|
||||
CDynamicMeshBuffer(const CDynamicMeshBuffer&); // = delete in c++11, prevent copying
|
||||
|
||||
IVertexBuffer *VertexBuffer;
|
||||
IIndexBuffer *IndexBuffer;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -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
|
||||
|
@ -1,319 +1,294 @@
|
||||
// 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 __T_MESH_BUFFER_H_INCLUDED__
|
||||
#define __T_MESH_BUFFER_H_INCLUDED__
|
||||
|
||||
#include "irrArray.h"
|
||||
#include "IMeshBuffer.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
//! Template implementation of the IMeshBuffer interface
|
||||
template <class T>
|
||||
class CMeshBuffer : public IMeshBuffer
|
||||
{
|
||||
public:
|
||||
//! Default constructor for empty meshbuffer
|
||||
CMeshBuffer()
|
||||
: ChangedID_Vertex(1), ChangedID_Index(1)
|
||||
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
|
||||
, PrimitiveType(EPT_TRIANGLES)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
setDebugName("CMeshBuffer");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//! Get material of this meshbuffer
|
||||
/** \return Material of this buffer */
|
||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
|
||||
//! Get material of this meshbuffer
|
||||
/** \return Material of this buffer */
|
||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to vertices
|
||||
/** \return Pointer to vertices. */
|
||||
virtual const void* getVertices() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices.const_pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to vertices
|
||||
/** \return Pointer to vertices. */
|
||||
virtual void* getVertices() _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices.pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get number of vertices
|
||||
/** \return Number of vertices. */
|
||||
virtual u32 getVertexCount() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices.size();
|
||||
}
|
||||
|
||||
//! Get type of index data which is stored in this meshbuffer.
|
||||
/** \return Index type of this buffer. */
|
||||
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return video::EIT_16BIT;
|
||||
}
|
||||
|
||||
//! Get pointer to indices
|
||||
/** \return Pointer to indices. */
|
||||
virtual const u16* getIndices() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Indices.const_pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to indices
|
||||
/** \return Pointer to indices. */
|
||||
virtual u16* getIndices() _IRR_OVERRIDE_
|
||||
{
|
||||
return Indices.pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get number of indices
|
||||
/** \return Number of indices. */
|
||||
virtual u32 getIndexCount() const _IRR_OVERRIDE_
|
||||
{
|
||||
return Indices.size();
|
||||
}
|
||||
|
||||
|
||||
//! Get the axis aligned bounding box
|
||||
/** \return Axis aligned bounding box of this buffer. */
|
||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
|
||||
{
|
||||
return BoundingBox;
|
||||
}
|
||||
|
||||
|
||||
//! Set the axis aligned bounding box
|
||||
/** \param box New axis aligned bounding box for this buffer. */
|
||||
//! set user axis aligned bounding box
|
||||
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_
|
||||
{
|
||||
BoundingBox = box;
|
||||
}
|
||||
|
||||
|
||||
//! Recalculate the bounding box.
|
||||
/** should be called if the mesh changed. */
|
||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
|
||||
{
|
||||
if (!Vertices.empty())
|
||||
{
|
||||
BoundingBox.reset(Vertices[0].Pos);
|
||||
const irr::u32 vsize = Vertices.size();
|
||||
for (u32 i=1; i<vsize; ++i)
|
||||
BoundingBox.addInternalPoint(Vertices[i].Pos);
|
||||
}
|
||||
else
|
||||
BoundingBox.reset(0,0,0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//! Get type of vertex data stored in this buffer.
|
||||
/** \return Type of vertex data. */
|
||||
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return T::getType();
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].Pos;
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].Pos;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].Normal;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].Normal;
|
||||
}
|
||||
|
||||
//! returns texture coord of vertex i
|
||||
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].TCoords;
|
||||
}
|
||||
|
||||
//! returns texture coord of vertex i
|
||||
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return Vertices[i].TCoords;
|
||||
}
|
||||
|
||||
|
||||
//! Append the vertices and indices 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.
|
||||
*/
|
||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_
|
||||
{
|
||||
if (vertices == getVertices())
|
||||
return;
|
||||
|
||||
const u32 vertexCount = getVertexCount();
|
||||
u32 i;
|
||||
|
||||
Vertices.reallocate(vertexCount+numVertices);
|
||||
for (i=0; i<numVertices; ++i)
|
||||
{
|
||||
Vertices.push_back(reinterpret_cast<const T*>(vertices)[i]);
|
||||
BoundingBox.addInternalPoint(reinterpret_cast<const T*>(vertices)[i].Pos);
|
||||
}
|
||||
|
||||
Indices.reallocate(getIndexCount()+numIndices);
|
||||
for (i=0; i<numIndices; ++i)
|
||||
{
|
||||
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
|
||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
|
||||
{
|
||||
return MappingHint_Vertex;
|
||||
}
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
|
||||
{
|
||||
return MappingHint_Index;
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||
MappingHint_Vertex=NewMappingHint;
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
MappingHint_Index=NewMappingHint;
|
||||
}
|
||||
|
||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
|
||||
{
|
||||
PrimitiveType = type;
|
||||
}
|
||||
|
||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
//! flags the mesh as changed, reloads hardware buffers
|
||||
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
||||
++ChangedID_Vertex;
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
++ChangedID_Index;
|
||||
}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
|
||||
|
||||
u32 ChangedID_Vertex;
|
||||
u32 ChangedID_Index;
|
||||
|
||||
//! hardware mapping hint
|
||||
E_HARDWARE_MAPPING MappingHint_Vertex;
|
||||
E_HARDWARE_MAPPING MappingHint_Index;
|
||||
|
||||
//! Material for this meshbuffer.
|
||||
video::SMaterial Material;
|
||||
//! Vertices of this buffer
|
||||
core::array<T> Vertices;
|
||||
//! Indices into the vertices of this buffer.
|
||||
core::array<u16> Indices;
|
||||
//! Bounding box of this meshbuffer.
|
||||
core::aabbox3d<f32> BoundingBox;
|
||||
//! Primitive type used for rendering (triangles, lines, ...)
|
||||
E_PRIMITIVE_TYPE PrimitiveType;
|
||||
};
|
||||
|
||||
//! Standard meshbuffer
|
||||
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
||||
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
||||
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
||||
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
||||
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrArray.h"
|
||||
#include "IMeshBuffer.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
//! Template implementation of the IMeshBuffer interface
|
||||
template <class T>
|
||||
class CMeshBuffer : public IMeshBuffer
|
||||
{
|
||||
public:
|
||||
//! Default constructor for empty meshbuffer
|
||||
CMeshBuffer()
|
||||
: ChangedID_Vertex(1), ChangedID_Index(1)
|
||||
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
|
||||
, HWBuffer(NULL)
|
||||
, PrimitiveType(EPT_TRIANGLES)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
setDebugName("CMeshBuffer");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//! Get material of this meshbuffer
|
||||
/** \return Material of this buffer */
|
||||
const video::SMaterial& getMaterial() const override
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
|
||||
//! Get material of this meshbuffer
|
||||
/** \return Material of this buffer */
|
||||
video::SMaterial& getMaterial() override
|
||||
{
|
||||
return Material;
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to vertices
|
||||
/** \return Pointer to vertices. */
|
||||
const void* getVertices() const override
|
||||
{
|
||||
return Vertices.const_pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to vertices
|
||||
/** \return Pointer to vertices. */
|
||||
void* getVertices() override
|
||||
{
|
||||
return Vertices.pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get number of vertices
|
||||
/** \return Number of vertices. */
|
||||
u32 getVertexCount() const override
|
||||
{
|
||||
return Vertices.size();
|
||||
}
|
||||
|
||||
//! Get type of index data which is stored in this meshbuffer.
|
||||
/** \return Index type of this buffer. */
|
||||
video::E_INDEX_TYPE getIndexType() const override
|
||||
{
|
||||
return video::EIT_16BIT;
|
||||
}
|
||||
|
||||
//! Get pointer to indices
|
||||
/** \return Pointer to indices. */
|
||||
const u16* getIndices() const override
|
||||
{
|
||||
return Indices.const_pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get pointer to indices
|
||||
/** \return Pointer to indices. */
|
||||
u16* getIndices() override
|
||||
{
|
||||
return Indices.pointer();
|
||||
}
|
||||
|
||||
|
||||
//! Get number of indices
|
||||
/** \return Number of indices. */
|
||||
u32 getIndexCount() const override
|
||||
{
|
||||
return Indices.size();
|
||||
}
|
||||
|
||||
|
||||
//! Get the axis aligned bounding box
|
||||
/** \return Axis aligned bounding box of this buffer. */
|
||||
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||
{
|
||||
return BoundingBox;
|
||||
}
|
||||
|
||||
|
||||
//! Set the axis aligned bounding box
|
||||
/** \param box New axis aligned bounding box for this buffer. */
|
||||
//! set user axis aligned bounding box
|
||||
void setBoundingBox(const core::aabbox3df& box) override
|
||||
{
|
||||
BoundingBox = box;
|
||||
}
|
||||
|
||||
|
||||
//! Recalculate the bounding box.
|
||||
/** should be called if the mesh changed. */
|
||||
void recalculateBoundingBox() override
|
||||
{
|
||||
if (!Vertices.empty())
|
||||
{
|
||||
BoundingBox.reset(Vertices[0].Pos);
|
||||
const irr::u32 vsize = Vertices.size();
|
||||
for (u32 i=1; i<vsize; ++i)
|
||||
BoundingBox.addInternalPoint(Vertices[i].Pos);
|
||||
}
|
||||
else
|
||||
BoundingBox.reset(0,0,0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//! Get type of vertex data stored in this buffer.
|
||||
/** \return Type of vertex data. */
|
||||
video::E_VERTEX_TYPE getVertexType() const override
|
||||
{
|
||||
return T::getType();
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
const core::vector3df& getPosition(u32 i) const override
|
||||
{
|
||||
return Vertices[i].Pos;
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
core::vector3df& getPosition(u32 i) override
|
||||
{
|
||||
return Vertices[i].Pos;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
const core::vector3df& getNormal(u32 i) const override
|
||||
{
|
||||
return Vertices[i].Normal;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
core::vector3df& getNormal(u32 i) override
|
||||
{
|
||||
return Vertices[i].Normal;
|
||||
}
|
||||
|
||||
//! returns texture coord of vertex i
|
||||
const core::vector2df& getTCoords(u32 i) const override
|
||||
{
|
||||
return Vertices[i].TCoords;
|
||||
}
|
||||
|
||||
//! returns texture coord of vertex i
|
||||
core::vector2df& getTCoords(u32 i) override
|
||||
{
|
||||
return Vertices[i].TCoords;
|
||||
}
|
||||
|
||||
|
||||
//! Append the vertices and indices 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.
|
||||
*/
|
||||
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
|
||||
{
|
||||
if (vertices == getVertices())
|
||||
return;
|
||||
|
||||
const u32 vertexCount = getVertexCount();
|
||||
u32 i;
|
||||
|
||||
Vertices.reallocate(vertexCount+numVertices);
|
||||
for (i=0; i<numVertices; ++i)
|
||||
{
|
||||
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
||||
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
|
||||
}
|
||||
|
||||
Indices.reallocate(getIndexCount()+numIndices);
|
||||
for (i=0; i<numIndices; ++i)
|
||||
{
|
||||
Indices.push_back(indices[i]+vertexCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||
{
|
||||
return MappingHint_Vertex;
|
||||
}
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
||||
{
|
||||
return MappingHint_Index;
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||
MappingHint_Vertex=NewMappingHint;
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
MappingHint_Index=NewMappingHint;
|
||||
}
|
||||
|
||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
||||
{
|
||||
PrimitiveType = type;
|
||||
}
|
||||
|
||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
||||
{
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
//! flags the mesh as changed, reloads hardware buffers
|
||||
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
||||
++ChangedID_Vertex;
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
++ChangedID_Index;
|
||||
}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
||||
|
||||
void setHWBuffer(void *ptr) const override {
|
||||
HWBuffer = ptr;
|
||||
}
|
||||
|
||||
void *getHWBuffer() const override {
|
||||
return HWBuffer;
|
||||
}
|
||||
|
||||
|
||||
u32 ChangedID_Vertex;
|
||||
u32 ChangedID_Index;
|
||||
|
||||
//! hardware mapping hint
|
||||
E_HARDWARE_MAPPING MappingHint_Vertex;
|
||||
E_HARDWARE_MAPPING MappingHint_Index;
|
||||
mutable void *HWBuffer;
|
||||
|
||||
//! Material for this meshbuffer.
|
||||
video::SMaterial Material;
|
||||
//! Vertices of this buffer
|
||||
core::array<T> Vertices;
|
||||
//! Indices into the vertices of this buffer.
|
||||
core::array<u16> Indices;
|
||||
//! Bounding box of this meshbuffer.
|
||||
core::aabbox3d<f32> BoundingBox;
|
||||
//! Primitive type used for rendering (triangles, lines, ...)
|
||||
E_PRIMITIVE_TYPE PrimitiveType;
|
||||
};
|
||||
|
||||
//! Standard meshbuffer
|
||||
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
||||
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
||||
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
||||
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
||||
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
@ -1,101 +1,32 @@
|
||||
// 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_ATTRIBUTES_H_INCLUDED__
|
||||
#define __E_ATTRIBUTES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! Types of attributes available for IAttributes
|
||||
enum E_ATTRIBUTE_TYPE
|
||||
{
|
||||
// integer attribute
|
||||
EAT_INT = 0,
|
||||
|
||||
// float attribute
|
||||
EAT_FLOAT,
|
||||
|
||||
// string attribute
|
||||
EAT_STRING,
|
||||
|
||||
// boolean attribute
|
||||
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
|
||||
EAT_COUNT,
|
||||
|
||||
// unknown attribute
|
||||
EAT_UNKNOWN
|
||||
};
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
// 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 io
|
||||
{
|
||||
|
||||
//! Types of attributes available for IAttributes
|
||||
enum E_ATTRIBUTE_TYPE
|
||||
{
|
||||
// integer attribute
|
||||
EAT_INT = 0,
|
||||
|
||||
// float attribute
|
||||
EAT_FLOAT,
|
||||
|
||||
// boolean attribute
|
||||
EAT_BOOL,
|
||||
|
||||
// known attribute type count
|
||||
EAT_COUNT,
|
||||
|
||||
// unknown attribute
|
||||
EAT_UNKNOWN
|
||||
};
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
@ -1,41 +1,36 @@
|
||||
// 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_CULLING_TYPES_H_INCLUDED__
|
||||
#define __E_CULLING_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of automatic culling for built-in scene nodes
|
||||
enum E_CULLING_TYPE
|
||||
{
|
||||
EAC_OFF = 0,
|
||||
EAC_BOX = 1,
|
||||
EAC_FRUSTUM_BOX = 2,
|
||||
EAC_FRUSTUM_SPHERE = 4,
|
||||
EAC_OCC_QUERY = 8
|
||||
};
|
||||
|
||||
//! Names for culling type
|
||||
const c8* const AutomaticCullingNames[] =
|
||||
{
|
||||
"false",
|
||||
"box", // camera box against node box
|
||||
"frustum_box", // camera frustum against node box
|
||||
"frustum_sphere", // camera frustum against node sphere
|
||||
"occ_query", // occlusion query
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif // __E_CULLING_TYPES_H_INCLUDED__
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of automatic culling for built-in scene nodes
|
||||
enum E_CULLING_TYPE
|
||||
{
|
||||
EAC_OFF = 0,
|
||||
EAC_BOX = 1,
|
||||
EAC_FRUSTUM_BOX = 2,
|
||||
EAC_FRUSTUM_SPHERE = 4,
|
||||
EAC_OCC_QUERY = 8
|
||||
};
|
||||
|
||||
//! Names for culling type
|
||||
const c8* const AutomaticCullingNames[] =
|
||||
{
|
||||
"false",
|
||||
"box", // camera box against node box
|
||||
"frustum_box", // camera frustum against node box
|
||||
"frustum_sphere", // camera frustum against node sphere
|
||||
"occ_query", // occlusion query
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,50 +1,42 @@
|
||||
// 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_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||
#define __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of debug data for built-in scene nodes (flags)
|
||||
enum E_DEBUG_SCENE_TYPE
|
||||
{
|
||||
//! No Debug Data ( Default )
|
||||
EDS_OFF = 0,
|
||||
|
||||
//! Show Bounding Boxes of SceneNode
|
||||
EDS_BBOX = 1,
|
||||
|
||||
//! Show Vertex Normals
|
||||
EDS_NORMALS = 2,
|
||||
|
||||
//! Shows Skeleton/Tags
|
||||
EDS_SKELETON = 4,
|
||||
|
||||
//! Overlays Mesh Wireframe
|
||||
EDS_MESH_WIRE_OVERLAY = 8,
|
||||
|
||||
//! Temporary use transparency Material Type
|
||||
EDS_HALF_TRANSPARENCY = 16,
|
||||
|
||||
//! Show Bounding Boxes of all MeshBuffers
|
||||
EDS_BBOX_BUFFERS = 32,
|
||||
|
||||
//! EDS_BBOX | EDS_BBOX_BUFFERS
|
||||
EDS_BBOX_ALL = EDS_BBOX | EDS_BBOX_BUFFERS,
|
||||
|
||||
//! Show all debug infos
|
||||
EDS_FULL = 0xffffffff
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||
|
||||
// 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 scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of debug data for built-in scene nodes (flags)
|
||||
enum E_DEBUG_SCENE_TYPE
|
||||
{
|
||||
//! No Debug Data ( Default )
|
||||
EDS_OFF = 0,
|
||||
|
||||
//! Show Bounding Boxes of SceneNode
|
||||
EDS_BBOX = 1,
|
||||
|
||||
//! Show Vertex Normals
|
||||
EDS_NORMALS = 2,
|
||||
|
||||
//! Shows Skeleton/Tags
|
||||
EDS_SKELETON = 4,
|
||||
|
||||
//! Overlays Mesh Wireframe
|
||||
EDS_MESH_WIRE_OVERLAY = 8,
|
||||
|
||||
//! Show Bounding Boxes of all MeshBuffers
|
||||
EDS_BBOX_BUFFERS = 32,
|
||||
|
||||
//! EDS_BBOX | EDS_BBOX_BUFFERS
|
||||
EDS_BBOX_ALL = EDS_BBOX | EDS_BBOX_BUFFERS,
|
||||
|
||||
//! Show all debug infos
|
||||
EDS_FULL = 0xffffffff
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,70 +1,46 @@
|
||||
// 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_DEVICE_TYPES_H_INCLUDED__
|
||||
#define __E_DEVICE_TYPES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
//! An enum for the different device types supported by the Irrlicht Engine.
|
||||
enum E_DEVICE_TYPE
|
||||
{
|
||||
|
||||
//! A device native to Microsoft Windows
|
||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||
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.
|
||||
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
||||
other operating systems which support X11. */
|
||||
EIDT_X11,
|
||||
|
||||
//! A device native to Mac OSX
|
||||
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
||||
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
|
||||
/** 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 */
|
||||
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.
|
||||
/** 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
|
||||
will be tried. This ensures that Irrlicht will run even if your platform is unsupported,
|
||||
although it may not be able to render anything. */
|
||||
EIDT_BEST,
|
||||
|
||||
//! A device for Android platforms
|
||||
/** Best used with embedded devices and mobile systems.
|
||||
Does not need X11 or other graphical subsystems.
|
||||
May support hw-acceleration via OpenGL-ES */
|
||||
EIDT_ANDROID,
|
||||
};
|
||||
|
||||
} // end namespace irr
|
||||
|
||||
#endif // __E_DEVICE_TYPES_H_INCLUDED__
|
||||
|
||||
// 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
|
||||
{
|
||||
|
||||
//! An enum for the different device types supported by the Irrlicht Engine.
|
||||
enum E_DEVICE_TYPE
|
||||
{
|
||||
|
||||
//! A device native to Microsoft Windows
|
||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||
EIDT_WIN32,
|
||||
|
||||
//! A device native to Unix style operating systems.
|
||||
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
||||
other operating systems which support X11. */
|
||||
EIDT_X11,
|
||||
|
||||
//! A device native to Mac OSX
|
||||
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
||||
EIDT_OSX,
|
||||
|
||||
//! A device which uses Simple DirectMedia Layer
|
||||
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
||||
in by setting the USE_SDL2 CMake option to ON */
|
||||
EIDT_SDL,
|
||||
|
||||
//! 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
|
||||
to your operating system. If this is unavailable then the X11, SDL and then console device
|
||||
will be tried. This ensures that Irrlicht will run even if your platform is unsupported,
|
||||
although it may not be able to render anything. */
|
||||
EIDT_BEST,
|
||||
|
||||
//! A device for Android platforms
|
||||
/** Best used with embedded devices and mobile systems.
|
||||
Does not need X11 or other graphical subsystems.
|
||||
May support hw-acceleration via OpenGL-ES */
|
||||
EIDT_ANDROID,
|
||||
};
|
||||
|
||||
} // end namespace irr
|
||||
|
@ -1,157 +1,137 @@
|
||||
// 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_DRIVER_FEATURES_H_INCLUDED__
|
||||
#define __E_DRIVER_FEATURES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! enumeration for querying features of the video driver.
|
||||
enum E_VIDEO_DRIVER_FEATURE
|
||||
{
|
||||
//! Is driver able to render to a surface?
|
||||
EVDF_RENDER_TO_TARGET = 0,
|
||||
|
||||
//! Is hardware transform and lighting supported?
|
||||
EVDF_HARDWARE_TL,
|
||||
|
||||
//! Are multiple textures per material possible?
|
||||
EVDF_MULTITEXTURE,
|
||||
|
||||
//! Is driver able to render with a bilinear filter applied?
|
||||
EVDF_BILINEAR_FILTER,
|
||||
|
||||
//! Can the driver handle mip maps?
|
||||
EVDF_MIP_MAP,
|
||||
|
||||
//! Can the driver update mip maps automatically?
|
||||
EVDF_MIP_MAP_AUTO_UPDATE,
|
||||
|
||||
//! Are stencilbuffers switched on and does the device support stencil buffers?
|
||||
EVDF_STENCIL_BUFFER,
|
||||
|
||||
//! Is Vertex Shader 1.1 supported?
|
||||
EVDF_VERTEX_SHADER_1_1,
|
||||
|
||||
//! Is Vertex Shader 2.0 supported?
|
||||
EVDF_VERTEX_SHADER_2_0,
|
||||
|
||||
//! Is Vertex Shader 3.0 supported?
|
||||
EVDF_VERTEX_SHADER_3_0,
|
||||
|
||||
//! Is Pixel Shader 1.1 supported?
|
||||
EVDF_PIXEL_SHADER_1_1,
|
||||
|
||||
//! Is Pixel Shader 1.2 supported?
|
||||
EVDF_PIXEL_SHADER_1_2,
|
||||
|
||||
//! Is Pixel Shader 1.3 supported?
|
||||
EVDF_PIXEL_SHADER_1_3,
|
||||
|
||||
//! Is Pixel Shader 1.4 supported?
|
||||
EVDF_PIXEL_SHADER_1_4,
|
||||
|
||||
//! Is Pixel Shader 2.0 supported?
|
||||
EVDF_PIXEL_SHADER_2_0,
|
||||
|
||||
//! Is Pixel Shader 3.0 supported?
|
||||
EVDF_PIXEL_SHADER_3_0,
|
||||
|
||||
//! Are ARB vertex programs v1.0 supported?
|
||||
EVDF_ARB_VERTEX_PROGRAM_1,
|
||||
|
||||
//! Are ARB fragment programs v1.0 supported?
|
||||
EVDF_ARB_FRAGMENT_PROGRAM_1,
|
||||
|
||||
//! Is GLSL supported?
|
||||
EVDF_ARB_GLSL,
|
||||
|
||||
//! Is HLSL supported?
|
||||
EVDF_HLSL,
|
||||
|
||||
//! Are non-square textures supported?
|
||||
EVDF_TEXTURE_NSQUARE,
|
||||
|
||||
//! Are non-power-of-two textures supported?
|
||||
EVDF_TEXTURE_NPOT,
|
||||
|
||||
//! Are framebuffer objects supported?
|
||||
EVDF_FRAMEBUFFER_OBJECT,
|
||||
|
||||
//! Are vertex buffer objects supported?
|
||||
EVDF_VERTEX_BUFFER_OBJECT,
|
||||
|
||||
//! Supports Alpha To Coverage
|
||||
EVDF_ALPHA_TO_COVERAGE,
|
||||
|
||||
//! Supports Color masks (disabling color planes in output)
|
||||
EVDF_COLOR_MASK,
|
||||
|
||||
//! Supports multiple render targets at once
|
||||
EVDF_MULTIPLE_RENDER_TARGETS,
|
||||
|
||||
//! Supports separate blend settings for multiple render targets
|
||||
EVDF_MRT_BLEND,
|
||||
|
||||
//! Supports separate color masks for multiple render targets
|
||||
EVDF_MRT_COLOR_MASK,
|
||||
|
||||
//! Supports separate blend functions for multiple render targets
|
||||
EVDF_MRT_BLEND_FUNC,
|
||||
|
||||
//! Supports geometry shaders
|
||||
EVDF_GEOMETRY_SHADER,
|
||||
|
||||
//! Supports occlusion queries
|
||||
EVDF_OCCLUSION_QUERY,
|
||||
|
||||
//! Supports polygon offset/depth bias for avoiding z-fighting
|
||||
EVDF_POLYGON_OFFSET,
|
||||
|
||||
//! Support for different blend functions. Without, only ADD is available
|
||||
EVDF_BLEND_OPERATIONS,
|
||||
|
||||
//! Support for separate blending for RGB and Alpha.
|
||||
EVDF_BLEND_SEPARATE,
|
||||
|
||||
//! Support for texture coord transformation via 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.
|
||||
EVDF_TEXTURE_CUBEMAP,
|
||||
|
||||
//! Support for filtering across different faces of the cubemap
|
||||
EVDF_TEXTURE_CUBEMAP_SEAMLESS,
|
||||
|
||||
//! Support for clamping vertices beyond far-plane to depth instead of capping them.
|
||||
EVDF_DEPTH_CLAMP,
|
||||
|
||||
//! Only used for counting the elements of this enum
|
||||
EVDF_COUNT
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// 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
|
||||
{
|
||||
|
||||
//! enumeration for querying features of the video driver.
|
||||
enum E_VIDEO_DRIVER_FEATURE
|
||||
{
|
||||
//! Is driver able to render to a surface?
|
||||
EVDF_RENDER_TO_TARGET = 0,
|
||||
|
||||
//! Is hardware transform and lighting supported?
|
||||
EVDF_HARDWARE_TL,
|
||||
|
||||
//! Are multiple textures per material possible?
|
||||
EVDF_MULTITEXTURE,
|
||||
|
||||
//! Is driver able to render with a bilinear filter applied?
|
||||
EVDF_BILINEAR_FILTER,
|
||||
|
||||
//! Can the driver handle mip maps?
|
||||
EVDF_MIP_MAP,
|
||||
|
||||
//! Can the driver update mip maps automatically?
|
||||
EVDF_MIP_MAP_AUTO_UPDATE,
|
||||
|
||||
//! Are stencilbuffers switched on and does the device support stencil buffers?
|
||||
EVDF_STENCIL_BUFFER,
|
||||
|
||||
//! Is Vertex Shader 1.1 supported?
|
||||
EVDF_VERTEX_SHADER_1_1,
|
||||
|
||||
//! Is Vertex Shader 2.0 supported?
|
||||
EVDF_VERTEX_SHADER_2_0,
|
||||
|
||||
//! Is Vertex Shader 3.0 supported?
|
||||
EVDF_VERTEX_SHADER_3_0,
|
||||
|
||||
//! Is Pixel Shader 1.1 supported?
|
||||
EVDF_PIXEL_SHADER_1_1,
|
||||
|
||||
//! Is Pixel Shader 1.2 supported?
|
||||
EVDF_PIXEL_SHADER_1_2,
|
||||
|
||||
//! Is Pixel Shader 1.3 supported?
|
||||
EVDF_PIXEL_SHADER_1_3,
|
||||
|
||||
//! Is Pixel Shader 1.4 supported?
|
||||
EVDF_PIXEL_SHADER_1_4,
|
||||
|
||||
//! Is Pixel Shader 2.0 supported?
|
||||
EVDF_PIXEL_SHADER_2_0,
|
||||
|
||||
//! Is Pixel Shader 3.0 supported?
|
||||
EVDF_PIXEL_SHADER_3_0,
|
||||
|
||||
//! Are ARB vertex programs v1.0 supported?
|
||||
EVDF_ARB_VERTEX_PROGRAM_1,
|
||||
|
||||
//! Are ARB fragment programs v1.0 supported?
|
||||
EVDF_ARB_FRAGMENT_PROGRAM_1,
|
||||
|
||||
//! Is GLSL supported?
|
||||
EVDF_ARB_GLSL,
|
||||
|
||||
//! Is HLSL supported?
|
||||
EVDF_HLSL,
|
||||
|
||||
//! Are non-square textures supported?
|
||||
EVDF_TEXTURE_NSQUARE,
|
||||
|
||||
//! Are non-power-of-two textures supported?
|
||||
EVDF_TEXTURE_NPOT,
|
||||
|
||||
//! Are framebuffer objects supported?
|
||||
EVDF_FRAMEBUFFER_OBJECT,
|
||||
|
||||
//! Are vertex buffer objects supported?
|
||||
EVDF_VERTEX_BUFFER_OBJECT,
|
||||
|
||||
//! Supports Alpha To Coverage
|
||||
EVDF_ALPHA_TO_COVERAGE,
|
||||
|
||||
//! Supports Color masks (disabling color planes in output)
|
||||
EVDF_COLOR_MASK,
|
||||
|
||||
//! Supports multiple render targets at once
|
||||
EVDF_MULTIPLE_RENDER_TARGETS,
|
||||
|
||||
//! Supports separate blend settings for multiple render targets
|
||||
EVDF_MRT_BLEND,
|
||||
|
||||
//! Supports separate color masks for multiple render targets
|
||||
EVDF_MRT_COLOR_MASK,
|
||||
|
||||
//! Supports separate blend functions for multiple render targets
|
||||
EVDF_MRT_BLEND_FUNC,
|
||||
|
||||
//! Supports geometry shaders
|
||||
EVDF_GEOMETRY_SHADER,
|
||||
|
||||
//! Supports occlusion queries
|
||||
EVDF_OCCLUSION_QUERY,
|
||||
|
||||
//! Supports polygon offset/depth bias for avoiding z-fighting
|
||||
EVDF_POLYGON_OFFSET,
|
||||
|
||||
//! Support for different blend functions. Without, only ADD is available
|
||||
EVDF_BLEND_OPERATIONS,
|
||||
|
||||
//! Support for separate blending for RGB and Alpha.
|
||||
EVDF_BLEND_SEPARATE,
|
||||
|
||||
//! Support for texture coord transformation via texture matrix
|
||||
EVDF_TEXTURE_MATRIX,
|
||||
|
||||
//! Support for cube map textures.
|
||||
EVDF_TEXTURE_CUBEMAP,
|
||||
|
||||
//! Support for filtering across different faces of the cubemap
|
||||
EVDF_TEXTURE_CUBEMAP_SEAMLESS,
|
||||
|
||||
//! Support for clamping vertices beyond far-plane to depth instead of capping them.
|
||||
EVDF_DEPTH_CLAMP,
|
||||
|
||||
//! Only used for counting the elements of this enum
|
||||
EVDF_COUNT
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -1,101 +1,44 @@
|
||||
// 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_DRIVER_TYPES_H_INCLUDED__
|
||||
#define __E_DRIVER_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! An enum for all types of drivers the Irrlicht Engine supports.
|
||||
enum E_DRIVER_TYPE
|
||||
{
|
||||
//! Null driver, useful for applications to run the engine without visualization.
|
||||
/** The null device is able to load textures, but does not
|
||||
render and display any graphics. */
|
||||
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.
|
||||
/** Performs hardware accelerated rendering of 3D and 2D
|
||||
primitives. */
|
||||
EDT_OPENGL,
|
||||
|
||||
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
||||
EDT_OGLES1,
|
||||
|
||||
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
||||
/** Supports shaders etc. */
|
||||
EDT_OGLES2,
|
||||
|
||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||
EDT_WEBGL1,
|
||||
|
||||
//! No driver, just for counting the elements
|
||||
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 irr
|
||||
|
||||
|
||||
#endif
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! An enum for all types of drivers the Irrlicht Engine supports.
|
||||
enum E_DRIVER_TYPE
|
||||
{
|
||||
//! Null driver, useful for applications to run the engine without visualization.
|
||||
/** The null device is able to load textures, but does not
|
||||
render and display any graphics. */
|
||||
EDT_NULL,
|
||||
|
||||
//! OpenGL device, available on most platforms.
|
||||
/** Performs hardware accelerated rendering of 3D and 2D
|
||||
primitives. */
|
||||
EDT_OPENGL,
|
||||
|
||||
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
||||
EDT_OGLES1,
|
||||
|
||||
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
||||
/** Supports shaders etc. */
|
||||
EDT_OGLES2,
|
||||
|
||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||
EDT_WEBGL1,
|
||||
|
||||
EDT_OPENGL3,
|
||||
|
||||
//! No driver, just for counting the elements
|
||||
EDT_COUNT
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -1,38 +1,34 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef E_FOCUS_FLAGS_H_INCLUDED__
|
||||
#define E_FOCUS_FLAGS_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Bitflags for defining the the focus behavior of the gui
|
||||
// (all names start with SET as we might add REMOVE flags later to control that behavior as well)
|
||||
enum EFOCUS_FLAG
|
||||
{
|
||||
//! When set the focus changes when the left mouse-button got clicked while over an element
|
||||
EFF_SET_ON_LMOUSE_DOWN = 0x1,
|
||||
|
||||
//! When set the focus changes when the right mouse-button got clicked while over an element
|
||||
//! Note that elements usually don't care about right-click and that won't change with this flag
|
||||
//! This is mostly to allow taking away focus from elements with right-mouse additionally.
|
||||
EFF_SET_ON_RMOUSE_DOWN = 0x2,
|
||||
|
||||
//! When set the focus changes when the mouse-cursor is over an element
|
||||
EFF_SET_ON_MOUSE_OVER = 0x4,
|
||||
|
||||
//! When set the focus can be changed with TAB-key combinations.
|
||||
EFF_SET_ON_TAB = 0x8,
|
||||
|
||||
//! When set it's possible to set the focus to disabled elements.
|
||||
EFF_CAN_FOCUS_DISABLED = 0x16
|
||||
};
|
||||
|
||||
} // namespace gui
|
||||
} // namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// 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 gui
|
||||
{
|
||||
|
||||
//! Bitflags for defining the the focus behavior of the gui
|
||||
// (all names start with SET as we might add REMOVE flags later to control that behavior as well)
|
||||
enum EFOCUS_FLAG
|
||||
{
|
||||
//! When set the focus changes when the left mouse-button got clicked while over an element
|
||||
EFF_SET_ON_LMOUSE_DOWN = 0x1,
|
||||
|
||||
//! When set the focus changes when the right mouse-button got clicked while over an element
|
||||
//! Note that elements usually don't care about right-click and that won't change with this flag
|
||||
//! This is mostly to allow taking away focus from elements with right-mouse additionally.
|
||||
EFF_SET_ON_RMOUSE_DOWN = 0x2,
|
||||
|
||||
//! When set the focus changes when the mouse-cursor is over an element
|
||||
EFF_SET_ON_MOUSE_OVER = 0x4,
|
||||
|
||||
//! When set the focus can be changed with TAB-key combinations.
|
||||
EFF_SET_ON_TAB = 0x8,
|
||||
|
||||
//! When set it's possible to set the focus to disabled elements.
|
||||
EFF_CAN_FOCUS_DISABLED = 0x16
|
||||
};
|
||||
|
||||
} // namespace gui
|
||||
} // namespace irr
|
||||
|
@ -1,39 +1,36 @@
|
||||
// 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_GUI_ALIGNMENT_H_INCLUDED__
|
||||
#define __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
enum EGUI_ALIGNMENT
|
||||
{
|
||||
//! Aligned to parent's top or left side (default)
|
||||
EGUIA_UPPERLEFT=0,
|
||||
//! Aligned to parent's bottom or right side
|
||||
EGUIA_LOWERRIGHT,
|
||||
//! Aligned to the center of parent
|
||||
EGUIA_CENTER,
|
||||
//! Stretched to fit parent
|
||||
EGUIA_SCALE
|
||||
};
|
||||
|
||||
//! Names for alignments
|
||||
const c8* const GUIAlignmentNames[] =
|
||||
{
|
||||
"upperLeft",
|
||||
"lowerRight",
|
||||
"center",
|
||||
"scale",
|
||||
0
|
||||
};
|
||||
|
||||
} // namespace gui
|
||||
} // namespace irr
|
||||
|
||||
#endif // __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
enum EGUI_ALIGNMENT
|
||||
{
|
||||
//! Aligned to parent's top or left side (default)
|
||||
EGUIA_UPPERLEFT=0,
|
||||
//! Aligned to parent's bottom or right side
|
||||
EGUIA_LOWERRIGHT,
|
||||
//! Aligned to the center of parent
|
||||
EGUIA_CENTER,
|
||||
//! Stretched to fit parent
|
||||
EGUIA_SCALE
|
||||
};
|
||||
|
||||
//! Names for alignments
|
||||
const c8* const GUIAlignmentNames[] =
|
||||
{
|
||||
"upperLeft",
|
||||
"lowerRight",
|
||||
"center",
|
||||
"scale",
|
||||
0
|
||||
};
|
||||
|
||||
} // namespace gui
|
||||
} // namespace irr
|
||||
|
@ -1,144 +1,134 @@
|
||||
// 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_GUI_ELEMENT_TYPES_H_INCLUDED__
|
||||
#define __E_GUI_ELEMENT_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! List of all basic Irrlicht GUI elements.
|
||||
/** An IGUIElement returns this when calling IGUIElement::getType(); */
|
||||
enum EGUI_ELEMENT_TYPE
|
||||
{
|
||||
//! A button (IGUIButton)
|
||||
EGUIET_BUTTON = 0,
|
||||
|
||||
//! A check box (IGUICheckBox)
|
||||
EGUIET_CHECK_BOX,
|
||||
|
||||
//! A combo box (IGUIComboBox)
|
||||
EGUIET_COMBO_BOX,
|
||||
|
||||
//! A context menu (IGUIContextMenu)
|
||||
EGUIET_CONTEXT_MENU,
|
||||
|
||||
//! A menu (IGUIMenu)
|
||||
EGUIET_MENU,
|
||||
|
||||
//! An edit box (IGUIEditBox)
|
||||
EGUIET_EDIT_BOX,
|
||||
|
||||
//! A file open dialog (IGUIFileOpenDialog)
|
||||
EGUIET_FILE_OPEN_DIALOG,
|
||||
|
||||
//! A color select open dialog (IGUIColorSelectDialog)
|
||||
EGUIET_COLOR_SELECT_DIALOG,
|
||||
|
||||
//! A in/out fader (IGUIInOutFader)
|
||||
EGUIET_IN_OUT_FADER,
|
||||
|
||||
//! An image (IGUIImage)
|
||||
EGUIET_IMAGE,
|
||||
|
||||
//! A list box (IGUIListBox)
|
||||
EGUIET_LIST_BOX,
|
||||
|
||||
//! A mesh viewer (IGUIMeshViewer)
|
||||
EGUIET_MESH_VIEWER,
|
||||
|
||||
//! A message box (IGUIWindow)
|
||||
EGUIET_MESSAGE_BOX,
|
||||
|
||||
//! A modal screen
|
||||
EGUIET_MODAL_SCREEN,
|
||||
|
||||
//! A scroll bar (IGUIScrollBar)
|
||||
EGUIET_SCROLL_BAR,
|
||||
|
||||
//! A spin box (IGUISpinBox)
|
||||
EGUIET_SPIN_BOX,
|
||||
|
||||
//! A static text (IGUIStaticText)
|
||||
EGUIET_STATIC_TEXT,
|
||||
|
||||
//! A tab (IGUITab)
|
||||
EGUIET_TAB,
|
||||
|
||||
//! A tab control
|
||||
EGUIET_TAB_CONTROL,
|
||||
|
||||
//! A Table
|
||||
EGUIET_TABLE,
|
||||
|
||||
//! A tool bar (IGUIToolBar)
|
||||
EGUIET_TOOL_BAR,
|
||||
|
||||
//! A Tree View
|
||||
EGUIET_TREE_VIEW,
|
||||
|
||||
//! A window
|
||||
EGUIET_WINDOW,
|
||||
|
||||
//! Unknown type.
|
||||
EGUIET_ELEMENT,
|
||||
|
||||
//! The root of the GUI
|
||||
EGUIET_ROOT,
|
||||
|
||||
//! IGUIProfiler
|
||||
EGUIET_PROFILER,
|
||||
|
||||
//! Not an element, amount of elements in there
|
||||
EGUIET_COUNT,
|
||||
|
||||
//! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit.
|
||||
EGUIET_FORCE_32_BIT = 0x7fffffff
|
||||
|
||||
};
|
||||
|
||||
//! Names for built-in element types
|
||||
const c8* const GUIElementTypeNames[] =
|
||||
{
|
||||
"button",
|
||||
"checkBox",
|
||||
"comboBox",
|
||||
"contextMenu",
|
||||
"menu",
|
||||
"editBox",
|
||||
"fileOpenDialog",
|
||||
"colorSelectDialog",
|
||||
"inOutFader",
|
||||
"image",
|
||||
"listBox",
|
||||
"meshViewer",
|
||||
"messageBox",
|
||||
"modalScreen",
|
||||
"scrollBar",
|
||||
"spinBox",
|
||||
"staticText",
|
||||
"tab",
|
||||
"tabControl",
|
||||
"table",
|
||||
"toolBar",
|
||||
"treeview",
|
||||
"window",
|
||||
"element",
|
||||
"root",
|
||||
"profiler",
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! List of all basic Irrlicht GUI elements.
|
||||
/** An IGUIElement returns this when calling IGUIElement::getType(); */
|
||||
enum EGUI_ELEMENT_TYPE
|
||||
{
|
||||
//! A button (IGUIButton)
|
||||
EGUIET_BUTTON = 0,
|
||||
|
||||
//! A check box (IGUICheckBox)
|
||||
EGUIET_CHECK_BOX,
|
||||
|
||||
//! A combo box (IGUIComboBox)
|
||||
EGUIET_COMBO_BOX,
|
||||
|
||||
//! A context menu (IGUIContextMenu)
|
||||
EGUIET_CONTEXT_MENU,
|
||||
|
||||
//! A menu (IGUIMenu)
|
||||
EGUIET_MENU,
|
||||
|
||||
//! An edit box (IGUIEditBox)
|
||||
EGUIET_EDIT_BOX,
|
||||
|
||||
//! A file open dialog (IGUIFileOpenDialog)
|
||||
EGUIET_FILE_OPEN_DIALOG,
|
||||
|
||||
//! A color select open dialog (IGUIColorSelectDialog)
|
||||
EGUIET_COLOR_SELECT_DIALOG,
|
||||
|
||||
//! A in/out fader (IGUIInOutFader)
|
||||
EGUIET_IN_OUT_FADER,
|
||||
|
||||
//! An image (IGUIImage)
|
||||
EGUIET_IMAGE,
|
||||
|
||||
//! A list box (IGUIListBox)
|
||||
EGUIET_LIST_BOX,
|
||||
|
||||
//! A mesh viewer (IGUIMeshViewer)
|
||||
EGUIET_MESH_VIEWER,
|
||||
|
||||
//! A message box (IGUIWindow)
|
||||
EGUIET_MESSAGE_BOX,
|
||||
|
||||
//! A modal screen
|
||||
EGUIET_MODAL_SCREEN,
|
||||
|
||||
//! A scroll bar (IGUIScrollBar)
|
||||
EGUIET_SCROLL_BAR,
|
||||
|
||||
//! A spin box (IGUISpinBox)
|
||||
EGUIET_SPIN_BOX,
|
||||
|
||||
//! A static text (IGUIStaticText)
|
||||
EGUIET_STATIC_TEXT,
|
||||
|
||||
//! A tab (IGUITab)
|
||||
EGUIET_TAB,
|
||||
|
||||
//! A tab control
|
||||
EGUIET_TAB_CONTROL,
|
||||
|
||||
//! A Table
|
||||
EGUIET_TABLE,
|
||||
|
||||
//! A tool bar (IGUIToolBar)
|
||||
EGUIET_TOOL_BAR,
|
||||
|
||||
//! A Tree View
|
||||
EGUIET_TREE_VIEW,
|
||||
|
||||
//! A window
|
||||
EGUIET_WINDOW,
|
||||
|
||||
//! Unknown type.
|
||||
EGUIET_ELEMENT,
|
||||
|
||||
//! The root of the GUI
|
||||
EGUIET_ROOT,
|
||||
|
||||
//! Not an element, amount of elements in there
|
||||
EGUIET_COUNT,
|
||||
|
||||
//! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit.
|
||||
EGUIET_FORCE_32_BIT = 0x7fffffff
|
||||
|
||||
};
|
||||
|
||||
//! Names for built-in element types
|
||||
const c8* const GUIElementTypeNames[] =
|
||||
{
|
||||
"button",
|
||||
"checkBox",
|
||||
"comboBox",
|
||||
"contextMenu",
|
||||
"menu",
|
||||
"editBox",
|
||||
"fileOpenDialog",
|
||||
"colorSelectDialog",
|
||||
"inOutFader",
|
||||
"image",
|
||||
"listBox",
|
||||
"meshViewer",
|
||||
"messageBox",
|
||||
"modalScreen",
|
||||
"scrollBar",
|
||||
"spinBox",
|
||||
"staticText",
|
||||
"tab",
|
||||
"tabControl",
|
||||
"table",
|
||||
"toolBar",
|
||||
"treeview",
|
||||
"window",
|
||||
"element",
|
||||
"root",
|
||||
"profiler",
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,44 +1,40 @@
|
||||
// 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_HARDWARE_BUFFER_FLAGS_INCLUDED__
|
||||
#define __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
enum E_HARDWARE_MAPPING
|
||||
{
|
||||
//! Don't store on the hardware
|
||||
EHM_NEVER=0,
|
||||
|
||||
//! Rarely changed, usually stored completely on the hardware
|
||||
EHM_STATIC,
|
||||
|
||||
//! Sometimes changed, driver optimized placement
|
||||
EHM_DYNAMIC,
|
||||
|
||||
//! Always changed, cache optimizing on the GPU
|
||||
EHM_STREAM
|
||||
};
|
||||
|
||||
enum E_BUFFER_TYPE
|
||||
{
|
||||
//! Does not change anything
|
||||
EBT_NONE=0,
|
||||
//! Change the vertex mapping
|
||||
EBT_VERTEX,
|
||||
//! Change the index mapping
|
||||
EBT_INDEX,
|
||||
//! Change both vertex and index mapping to the same value
|
||||
EBT_VERTEX_AND_INDEX
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// 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 scene
|
||||
{
|
||||
|
||||
enum E_HARDWARE_MAPPING
|
||||
{
|
||||
//! Don't store on the hardware
|
||||
EHM_NEVER=0,
|
||||
|
||||
//! Rarely changed, usually stored completely on the hardware
|
||||
EHM_STATIC,
|
||||
|
||||
//! Sometimes changed, driver optimized placement
|
||||
EHM_DYNAMIC,
|
||||
|
||||
//! Always changed, cache optimizing on the GPU
|
||||
EHM_STREAM
|
||||
};
|
||||
|
||||
enum E_BUFFER_TYPE
|
||||
{
|
||||
//! Does not change anything
|
||||
EBT_NONE=0,
|
||||
//! Change the vertex mapping
|
||||
EBT_VERTEX,
|
||||
//! Change the index mapping
|
||||
EBT_INDEX,
|
||||
//! Change both vertex and index mapping to the same value
|
||||
EBT_VERTEX_AND_INDEX
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -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
|
@ -1,234 +1,75 @@
|
||||
// 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_TYPES_H_INCLUDED__
|
||||
#define __E_MATERIAL_TYPES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Abstracted and easy to use fixed function/programmable pipeline material modes.
|
||||
enum E_MATERIAL_TYPE
|
||||
{
|
||||
//! Standard solid material.
|
||||
/** Only first texture is used, which is supposed to be the
|
||||
diffuse material. */
|
||||
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.
|
||||
/** The final color is blended together from the destination
|
||||
color and the texture color, using the alpha channel value as
|
||||
blend factor. Only first texture is used. If you are using
|
||||
this material with small textures, it is a good idea to load
|
||||
the texture in 32 bit mode
|
||||
(video::IVideoDriver::setTextureCreationFlag()). Also, an alpha
|
||||
ref is used, which can be manipulated using
|
||||
SMaterial::MaterialTypeParam. This value controls how sharp the
|
||||
edges become when going from a transparent to a solid spot on
|
||||
the texture. */
|
||||
EMT_TRANSPARENT_ALPHA_CHANNEL,
|
||||
|
||||
//! Makes the material transparent based on the texture alpha channel.
|
||||
/** If the alpha channel value is greater than 127, a
|
||||
pixel is written to the target, otherwise not. This
|
||||
material does not use alpha blending and is a lot faster
|
||||
than EMT_TRANSPARENT_ALPHA_CHANNEL. It is ideal for drawing
|
||||
stuff like leaves of plants, because the borders are not
|
||||
blurry but sharp. Only first texture is used. If you are
|
||||
using this material with small textures and 3d object, it
|
||||
is a good idea to load the texture in 32 bit mode
|
||||
(video::IVideoDriver::setTextureCreationFlag()). */
|
||||
EMT_TRANSPARENT_ALPHA_CHANNEL_REF,
|
||||
|
||||
//! Makes the material transparent based on the vertex alpha value.
|
||||
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,
|
||||
|
||||
//! A solid normal map renderer.
|
||||
/** First texture is the color map, the second should be the
|
||||
normal map. Note that you should use this material only when
|
||||
drawing geometry consisting of vertices of type
|
||||
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
|
||||
this format using IMeshManipulator::createMeshWithTangents()
|
||||
(See SpecialFX2 Tutorial). This shader runs on vertex shader
|
||||
1.1 and pixel shader 1.1 capable hardware and falls back to a
|
||||
fixed function lighted material if this hardware is not
|
||||
available. Only two lights are supported by this shader, if
|
||||
there are more, the nearest two are chosen. */
|
||||
EMT_NORMAL_MAP_SOLID,
|
||||
|
||||
//! A transparent normal map renderer.
|
||||
/** First texture is the color map, the second should be the
|
||||
normal map. Note that you should use this material only when
|
||||
drawing geometry consisting of vertices of type
|
||||
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
|
||||
this format using IMeshManipulator::createMeshWithTangents()
|
||||
(See SpecialFX2 Tutorial). This shader runs on vertex shader
|
||||
1.1 and pixel shader 1.1 capable hardware and falls back to a
|
||||
fixed function lighted material if this hardware is not
|
||||
available. Only two lights are supported by this shader, if
|
||||
there are more, the nearest two are chosen. */
|
||||
EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR,
|
||||
|
||||
//! A transparent (based on the vertex alpha value) normal map renderer.
|
||||
/** First texture is the color map, the second should be the
|
||||
normal map. Note that you should use this material only when
|
||||
drawing geometry consisting of vertices of type
|
||||
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
|
||||
this format using IMeshManipulator::createMeshWithTangents()
|
||||
(See SpecialFX2 Tutorial). This shader runs on vertex shader
|
||||
1.1 and pixel shader 1.1 capable hardware and falls back to a
|
||||
fixed function lighted material if this hardware is not
|
||||
available. Only two lights are supported by this shader, if
|
||||
there are more, the nearest two are chosen. */
|
||||
EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA,
|
||||
|
||||
//! Just like EMT_NORMAL_MAP_SOLID, but uses parallax mapping.
|
||||
/** Looks a lot more realistic. This only works when the
|
||||
hardware supports at least vertex shader 1.1 and pixel shader
|
||||
1.4. First texture is the color map, the second should be the
|
||||
normal map. The normal map texture should contain the height
|
||||
value in the alpha component. The
|
||||
IVideoDriver::makeNormalMapTexture() method writes this value
|
||||
automatically when creating normal maps from a heightmap when
|
||||
using a 32 bit texture. The height scale of the material
|
||||
(affecting the bumpiness) is being controlled by the
|
||||
SMaterial::MaterialTypeParam member. If set to zero, the
|
||||
default value (0.02f) will be applied. Otherwise the value set
|
||||
in SMaterial::MaterialTypeParam is taken. This value depends on
|
||||
with which scale the texture is mapped on the material. Too
|
||||
high or low values of MaterialTypeParam can result in strange
|
||||
artifacts. */
|
||||
EMT_PARALLAX_MAP_SOLID,
|
||||
|
||||
//! A material like EMT_PARALLAX_MAP_SOLID, but transparent.
|
||||
/** Using EMT_TRANSPARENT_ADD_COLOR as base material. */
|
||||
EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR,
|
||||
|
||||
//! A material like EMT_PARALLAX_MAP_SOLID, but transparent.
|
||||
/** Using EMT_TRANSPARENT_VERTEX_ALPHA as base material. */
|
||||
EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA,
|
||||
|
||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||
/** Using only first texture. Generic blending method.
|
||||
The blend function is set to SMaterial::MaterialTypeParam with
|
||||
pack_textureBlendFunc (for 2D) or pack_textureBlendFuncSeparate (for 3D). */
|
||||
EMT_ONETEXTURE_BLEND,
|
||||
|
||||
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
||||
EMT_FORCE_32BIT = 0x7fffffff
|
||||
};
|
||||
|
||||
//! Array holding the built in material type names
|
||||
const char* const sBuiltInMaterialTypeNames[] =
|
||||
{
|
||||
"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_ref",
|
||||
"trans_vertex_alpha",
|
||||
"trans_reflection_2layer",
|
||||
"normalmap_solid",
|
||||
"normalmap_trans_add",
|
||||
"normalmap_trans_vertexalpha",
|
||||
"parallaxmap_solid",
|
||||
"parallaxmap_trans_add",
|
||||
"parallaxmap_trans_vertexalpha",
|
||||
"onetexture_blend",
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif // __E_MATERIAL_TYPES_H_INCLUDED__
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Abstracted and easy to use fixed function/programmable pipeline material modes.
|
||||
enum E_MATERIAL_TYPE
|
||||
{
|
||||
//! Standard solid material.
|
||||
/** Only first texture is used, which is supposed to be the
|
||||
diffuse material. */
|
||||
EMT_SOLID = 0,
|
||||
|
||||
//! Makes the material transparent based on the texture alpha channel.
|
||||
/** The final color is blended together from the destination
|
||||
color and the texture color, using the alpha channel value as
|
||||
blend factor. Only first texture is used. If you are using
|
||||
this material with small textures, it is a good idea to load
|
||||
the texture in 32 bit mode
|
||||
(video::IVideoDriver::setTextureCreationFlag()). Also, an alpha
|
||||
ref is used, which can be manipulated using
|
||||
SMaterial::MaterialTypeParam. This value controls how sharp the
|
||||
edges become when going from a transparent to a solid spot on
|
||||
the texture. */
|
||||
EMT_TRANSPARENT_ALPHA_CHANNEL,
|
||||
|
||||
//! Makes the material transparent based on the texture alpha channel.
|
||||
/** If the alpha channel value is greater than 127, a
|
||||
pixel is written to the target, otherwise not. This
|
||||
material does not use alpha blending and is a lot faster
|
||||
than EMT_TRANSPARENT_ALPHA_CHANNEL. It is ideal for drawing
|
||||
stuff like leaves of plants, because the borders are not
|
||||
blurry but sharp. Only first texture is used. If you are
|
||||
using this material with small textures and 3d object, it
|
||||
is a good idea to load the texture in 32 bit mode
|
||||
(video::IVideoDriver::setTextureCreationFlag()). */
|
||||
EMT_TRANSPARENT_ALPHA_CHANNEL_REF,
|
||||
|
||||
//! Makes the material transparent based on the vertex alpha value.
|
||||
EMT_TRANSPARENT_VERTEX_ALPHA,
|
||||
|
||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||
/** Using only first texture. Generic blending method.
|
||||
The blend function is set to SMaterial::MaterialTypeParam with
|
||||
pack_textureBlendFunc (for 2D) or pack_textureBlendFuncSeparate (for 3D). */
|
||||
EMT_ONETEXTURE_BLEND,
|
||||
|
||||
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
||||
EMT_FORCE_32BIT = 0x7fffffff
|
||||
};
|
||||
|
||||
//! Array holding the built in material type names
|
||||
const char* const sBuiltInMaterialTypeNames[] =
|
||||
{
|
||||
"solid",
|
||||
"trans_alphach",
|
||||
"trans_alphach_ref",
|
||||
"trans_vertex_alpha",
|
||||
"onetexture_blend",
|
||||
0
|
||||
};
|
||||
|
||||
constexpr u32 numBuiltInMaterials =
|
||||
sizeof(sBuiltInMaterialTypeNames) / sizeof(char*) - 1;
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -1,65 +1,60 @@
|
||||
// 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__
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "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
|
||||
|
@ -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
|
||||
|
@ -1,61 +1,43 @@
|
||||
// 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_PRIMITIVE_TYPES_H_INCLUDED__
|
||||
#define __E_PRIMITIVE_TYPES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! Enumeration for all primitive types there are.
|
||||
enum E_PRIMITIVE_TYPE
|
||||
{
|
||||
//! All vertices are non-connected points.
|
||||
EPT_POINTS=0,
|
||||
|
||||
//! All vertices form a single connected line.
|
||||
EPT_LINE_STRIP,
|
||||
|
||||
//! Just as LINE_STRIP, but the last and the first vertex is also connected.
|
||||
EPT_LINE_LOOP,
|
||||
|
||||
//! Every two vertices are connected creating n/2 lines.
|
||||
EPT_LINES,
|
||||
|
||||
//! After the first two vertices each vertex defines a new triangle.
|
||||
//! Always the two last and the new one form a new triangle.
|
||||
EPT_TRIANGLE_STRIP,
|
||||
|
||||
//! After the first two vertices each vertex defines a new triangle.
|
||||
//! All around the common first vertex.
|
||||
EPT_TRIANGLE_FAN,
|
||||
|
||||
//! Explicitly set all vertices for each triangle.
|
||||
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.
|
||||
EPT_POINT_SPRITES
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// 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 scene
|
||||
{
|
||||
|
||||
//! Enumeration for all primitive types there are.
|
||||
enum E_PRIMITIVE_TYPE
|
||||
{
|
||||
//! All vertices are non-connected points.
|
||||
EPT_POINTS=0,
|
||||
|
||||
//! All vertices form a single connected line.
|
||||
EPT_LINE_STRIP,
|
||||
|
||||
//! Just as LINE_STRIP, but the last and the first vertex is also connected.
|
||||
EPT_LINE_LOOP,
|
||||
|
||||
//! Every two vertices are connected creating n/2 lines.
|
||||
EPT_LINES,
|
||||
|
||||
//! After the first two vertices each vertex defines a new triangle.
|
||||
//! Always the two last and the new one form a new triangle.
|
||||
EPT_TRIANGLE_STRIP,
|
||||
|
||||
//! After the first two vertices each vertex defines a new triangle.
|
||||
//! All around the common first vertex.
|
||||
EPT_TRIANGLE_FAN,
|
||||
|
||||
//! Explicitly set all vertices for each triangle.
|
||||
EPT_TRIANGLES,
|
||||
|
||||
//! The single vertices are expanded to quad billboards on the GPU.
|
||||
EPT_POINT_SPRITES
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,34 +1,30 @@
|
||||
// Copyright (C) Michael Zeilfelder
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __E_READ_FILE_TYPES_H_INCLUDED__
|
||||
#define __E_READ_FILE_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! An enumeration for different class types implementing IReadFile
|
||||
enum EREAD_FILE_TYPE
|
||||
{
|
||||
//! CReadFile
|
||||
ERFT_READ_FILE = MAKE_IRR_ID('r','e','a','d'),
|
||||
|
||||
//! CMemoryReadFile
|
||||
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r','m','e','m'),
|
||||
|
||||
//! CLimitReadFile
|
||||
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r','l','i','m'),
|
||||
|
||||
//! Unknown type
|
||||
EFIT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||
};
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
// Copyright (C) Michael Zeilfelder
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! An enumeration for different class types implementing IReadFile
|
||||
enum EREAD_FILE_TYPE
|
||||
{
|
||||
//! CReadFile
|
||||
ERFT_READ_FILE = MAKE_IRR_ID('r','e','a','d'),
|
||||
|
||||
//! CMemoryReadFile
|
||||
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r','m','e','m'),
|
||||
|
||||
//! CLimitReadFile
|
||||
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r','l','i','m'),
|
||||
|
||||
//! Unknown type
|
||||
EFIT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||
};
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
@ -1,56 +1,51 @@
|
||||
// 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_SCENE_NODE_TYPES_H_INCLUDED__
|
||||
#define __E_SCENE_NODE_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of built-in scene nodes
|
||||
/** A scene node type is represented by a four character code
|
||||
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
||||
name clashes with external scene nodes.*/
|
||||
enum ESCENE_NODE_TYPE
|
||||
{
|
||||
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
||||
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'),
|
||||
|
||||
//! Mesh Scene Node
|
||||
ESNT_MESH = MAKE_IRR_ID('m','e','s','h'),
|
||||
|
||||
//! Empty Scene Node
|
||||
ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'),
|
||||
|
||||
//! Dummy Transformation Scene Node
|
||||
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'),
|
||||
|
||||
//! Camera Scene Node
|
||||
ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'),
|
||||
|
||||
//! Billboard Scene Node
|
||||
ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'),
|
||||
|
||||
//! Animated Mesh Scene Node
|
||||
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'),
|
||||
|
||||
//! Unknown scene node
|
||||
ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'),
|
||||
|
||||
//! Will match with any scene node when checking types
|
||||
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! An enumeration for all types of built-in scene nodes
|
||||
/** A scene node type is represented by a four character code
|
||||
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
||||
name clashes with external scene nodes.*/
|
||||
enum ESCENE_NODE_TYPE
|
||||
{
|
||||
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
||||
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'),
|
||||
|
||||
//! Mesh Scene Node
|
||||
ESNT_MESH = MAKE_IRR_ID('m','e','s','h'),
|
||||
|
||||
//! Empty Scene Node
|
||||
ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'),
|
||||
|
||||
//! Dummy Transformation Scene Node
|
||||
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'),
|
||||
|
||||
//! Camera Scene Node
|
||||
ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'),
|
||||
|
||||
//! Billboard Scene Node
|
||||
ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'),
|
||||
|
||||
//! Animated Mesh Scene Node
|
||||
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'),
|
||||
|
||||
//! Unknown scene node
|
||||
ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'),
|
||||
|
||||
//! Will match with any scene node when checking types
|
||||
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,90 +1,86 @@
|
||||
#ifndef __E_SHADER_TYPES_H_INCLUDED__
|
||||
#define __E_SHADER_TYPES_H_INCLUDED__
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||
enum E_VERTEX_SHADER_TYPE
|
||||
{
|
||||
EVST_VS_1_1 = 0,
|
||||
EVST_VS_2_0,
|
||||
EVST_VS_2_a,
|
||||
EVST_VS_3_0,
|
||||
EVST_VS_4_0,
|
||||
EVST_VS_4_1,
|
||||
EVST_VS_5_0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EVST_COUNT
|
||||
};
|
||||
|
||||
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
||||
const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
|
||||
"vs_1_1",
|
||||
"vs_2_0",
|
||||
"vs_2_a",
|
||||
"vs_3_0",
|
||||
"vs_4_0",
|
||||
"vs_4_1",
|
||||
"vs_5_0",
|
||||
0 };
|
||||
|
||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||
enum E_PIXEL_SHADER_TYPE
|
||||
{
|
||||
EPST_PS_1_1 = 0,
|
||||
EPST_PS_1_2,
|
||||
EPST_PS_1_3,
|
||||
EPST_PS_1_4,
|
||||
EPST_PS_2_0,
|
||||
EPST_PS_2_a,
|
||||
EPST_PS_2_b,
|
||||
EPST_PS_3_0,
|
||||
EPST_PS_4_0,
|
||||
EPST_PS_4_1,
|
||||
EPST_PS_5_0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EPST_COUNT
|
||||
};
|
||||
|
||||
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
||||
const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
|
||||
"ps_1_1",
|
||||
"ps_1_2",
|
||||
"ps_1_3",
|
||||
"ps_1_4",
|
||||
"ps_2_0",
|
||||
"ps_2_a",
|
||||
"ps_2_b",
|
||||
"ps_3_0",
|
||||
"ps_4_0",
|
||||
"ps_4_1",
|
||||
"ps_5_0",
|
||||
0 };
|
||||
|
||||
//! Enum for supported geometry shader types
|
||||
enum E_GEOMETRY_SHADER_TYPE
|
||||
{
|
||||
EGST_GS_4_0 = 0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EGST_COUNT
|
||||
};
|
||||
|
||||
//! String names for supported geometry shader types
|
||||
const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
||||
"gs_4_0",
|
||||
0 };
|
||||
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
#endif // __E_SHADER_TYPES_H_INCLUDED__
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||
enum E_VERTEX_SHADER_TYPE
|
||||
{
|
||||
EVST_VS_1_1 = 0,
|
||||
EVST_VS_2_0,
|
||||
EVST_VS_2_a,
|
||||
EVST_VS_3_0,
|
||||
EVST_VS_4_0,
|
||||
EVST_VS_4_1,
|
||||
EVST_VS_5_0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EVST_COUNT
|
||||
};
|
||||
|
||||
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
||||
const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
|
||||
"vs_1_1",
|
||||
"vs_2_0",
|
||||
"vs_2_a",
|
||||
"vs_3_0",
|
||||
"vs_4_0",
|
||||
"vs_4_1",
|
||||
"vs_5_0",
|
||||
0 };
|
||||
|
||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||
enum E_PIXEL_SHADER_TYPE
|
||||
{
|
||||
EPST_PS_1_1 = 0,
|
||||
EPST_PS_1_2,
|
||||
EPST_PS_1_3,
|
||||
EPST_PS_1_4,
|
||||
EPST_PS_2_0,
|
||||
EPST_PS_2_a,
|
||||
EPST_PS_2_b,
|
||||
EPST_PS_3_0,
|
||||
EPST_PS_4_0,
|
||||
EPST_PS_4_1,
|
||||
EPST_PS_5_0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EPST_COUNT
|
||||
};
|
||||
|
||||
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
||||
const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
|
||||
"ps_1_1",
|
||||
"ps_1_2",
|
||||
"ps_1_3",
|
||||
"ps_1_4",
|
||||
"ps_2_0",
|
||||
"ps_2_a",
|
||||
"ps_2_b",
|
||||
"ps_3_0",
|
||||
"ps_4_0",
|
||||
"ps_4_1",
|
||||
"ps_5_0",
|
||||
0 };
|
||||
|
||||
//! Enum for supported geometry shader types
|
||||
enum E_GEOMETRY_SHADER_TYPE
|
||||
{
|
||||
EGST_GS_4_0 = 0,
|
||||
|
||||
//! This is not a type, but a value indicating how much types there are.
|
||||
EGST_COUNT
|
||||
};
|
||||
|
||||
//! String names for supported geometry shader types
|
||||
const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
||||
"gs_4_0",
|
||||
0 };
|
||||
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -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_TERRAIN_ELEMENTS_H__
|
||||
#define __E_TERRAIN_ELEMENTS_H__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! enumeration for patch sizes specifying the size of patches in the TerrainSceneNode
|
||||
enum E_TERRAIN_PATCH_SIZE
|
||||
{
|
||||
//! patch size of 9, at most, use 4 levels of detail with this patch size.
|
||||
ETPS_9 = 9,
|
||||
|
||||
//! patch size of 17, at most, use 5 levels of detail with this patch size.
|
||||
ETPS_17 = 17,
|
||||
|
||||
//! patch size of 33, at most, use 6 levels of detail with this patch size.
|
||||
ETPS_33 = 33,
|
||||
|
||||
//! patch size of 65, at most, use 7 levels of detail with this patch size.
|
||||
ETPS_65 = 65,
|
||||
|
||||
//! patch size of 129, at most, use 8 levels of detail with this patch size.
|
||||
ETPS_129 = 129
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -1,38 +1,35 @@
|
||||
#ifndef __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||
#define __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Enumeration for all vertex attributes there are.
|
||||
enum E_VERTEX_ATTRIBUTES
|
||||
{
|
||||
EVA_POSITION = 0,
|
||||
EVA_NORMAL,
|
||||
EVA_COLOR,
|
||||
EVA_TCOORD0,
|
||||
EVA_TCOORD1,
|
||||
EVA_TANGENT,
|
||||
EVA_BINORMAL,
|
||||
EVA_COUNT
|
||||
};
|
||||
|
||||
//! Array holding the built in vertex attribute names
|
||||
const char* const sBuiltInVertexAttributeNames[] =
|
||||
{
|
||||
"inVertexPosition",
|
||||
"inVertexNormal",
|
||||
"inVertexColor",
|
||||
"inTexCoord0",
|
||||
"inTexCoord1",
|
||||
"inVertexTangent",
|
||||
"inVertexBinormal",
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
#endif //__E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Enumeration for all vertex attributes there are.
|
||||
enum E_VERTEX_ATTRIBUTES
|
||||
{
|
||||
EVA_POSITION = 0,
|
||||
EVA_NORMAL,
|
||||
EVA_COLOR,
|
||||
EVA_TCOORD0,
|
||||
EVA_TCOORD1,
|
||||
EVA_TANGENT,
|
||||
EVA_BINORMAL,
|
||||
EVA_COUNT
|
||||
};
|
||||
|
||||
//! Array holding the built in vertex attribute names
|
||||
const char* const sBuiltInVertexAttributeNames[] =
|
||||
{
|
||||
"inVertexPosition",
|
||||
"inVertexNormal",
|
||||
"inVertexColor",
|
||||
"inTexCoord0",
|
||||
"inTexCoord1",
|
||||
"inVertexTangent",
|
||||
"inVertexBinormal",
|
||||
0
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -1,74 +1,70 @@
|
||||
// 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_ANIMATED_MESH_H_INCLUDED__
|
||||
#define __I_ANIMATED_MESH_H_INCLUDED__
|
||||
|
||||
#include "aabbox3d.h"
|
||||
#include "IMesh.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
//! Interface for an animated mesh.
|
||||
/** There are already simple implementations of this interface available so
|
||||
you don't have to implement this interface on your own if you need to:
|
||||
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
||||
irr::scene::SMeshBuffer etc. */
|
||||
class IAnimatedMesh : public IMesh
|
||||
{
|
||||
public:
|
||||
|
||||
//! 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.
|
||||
\return The amount of frames. If the amount is 1,
|
||||
it is a static, non animated mesh. */
|
||||
virtual u32 getFrameCount() const = 0;
|
||||
|
||||
//! Gets the animation speed of the animated mesh.
|
||||
/** \return The number of frames per second to play the
|
||||
animation with by default. If the amount is 0,
|
||||
it is a static, non animated mesh. */
|
||||
virtual f32 getAnimationSpeed() const = 0;
|
||||
|
||||
//! Sets the animation speed of the animated mesh.
|
||||
/** \param fps Number of frames per second to play the
|
||||
animation with by default. If the amount is 0,
|
||||
it is not animated. The actual speed is set in the
|
||||
scene node the mesh is instantiated in.*/
|
||||
virtual void setAnimationSpeed(f32 fps) =0;
|
||||
|
||||
//! Returns the IMesh interface for a frame.
|
||||
/** \param frame: Frame number as zero based index. The maximum
|
||||
frame number is getFrameCount() - 1;
|
||||
\param detailLevel: Level of detail. 0 is the lowest, 255 the
|
||||
highest level of detail. Most meshes will ignore the detail level.
|
||||
\param startFrameLoop: Because some animated meshes (.MD2) are
|
||||
blended between 2 static frames, and maybe animated in a loop,
|
||||
the startFrameLoop and the endFrameLoop have to be defined, to
|
||||
prevent the animation to be blended between frames which are
|
||||
outside of this loop.
|
||||
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
||||
\param endFrameLoop: see startFrameLoop.
|
||||
\return Returns the animated mesh based on a detail level. */
|
||||
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0;
|
||||
|
||||
//! Returns the type of the animated mesh.
|
||||
/** In most cases it is not necessary to use this method.
|
||||
This is useful for making a safe downcast. For example,
|
||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||
IAnimatedMesh to IAnimatedMeshMD2.
|
||||
\returns Type of the mesh. */
|
||||
virtual E_ANIMATED_MESH_TYPE getMeshType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return EAMT_UNKNOWN;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "aabbox3d.h"
|
||||
#include "IMesh.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
//! Interface for an animated mesh.
|
||||
/** There are already simple implementations of this interface available so
|
||||
you don't have to implement this interface on your own if you need to:
|
||||
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
||||
irr::scene::SMeshBuffer etc. */
|
||||
class IAnimatedMesh : public IMesh
|
||||
{
|
||||
public:
|
||||
|
||||
//! 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.
|
||||
\return The amount of frames. If the amount is 1,
|
||||
it is a static, non animated mesh. */
|
||||
virtual u32 getFrameCount() const = 0;
|
||||
|
||||
//! Gets the animation speed of the animated mesh.
|
||||
/** \return The number of frames per second to play the
|
||||
animation with by default. If the amount is 0,
|
||||
it is a static, non animated mesh. */
|
||||
virtual f32 getAnimationSpeed() const = 0;
|
||||
|
||||
//! Sets the animation speed of the animated mesh.
|
||||
/** \param fps Number of frames per second to play the
|
||||
animation with by default. If the amount is 0,
|
||||
it is not animated. The actual speed is set in the
|
||||
scene node the mesh is instantiated in.*/
|
||||
virtual void setAnimationSpeed(f32 fps) =0;
|
||||
|
||||
//! Returns the IMesh interface for a frame.
|
||||
/** \param frame: Frame number as zero based index. The maximum
|
||||
frame number is getFrameCount() - 1;
|
||||
\param detailLevel: Level of detail. 0 is the lowest, 255 the
|
||||
highest level of detail. Most meshes will ignore the detail level.
|
||||
\param startFrameLoop: Because some animated meshes (.MD2) are
|
||||
blended between 2 static frames, and maybe animated in a loop,
|
||||
the startFrameLoop and the endFrameLoop have to be defined, to
|
||||
prevent the animation to be blended between frames which are
|
||||
outside of this loop.
|
||||
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
||||
\param endFrameLoop: see startFrameLoop.
|
||||
\return Returns the animated mesh based on a detail level. */
|
||||
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0;
|
||||
|
||||
//! Returns the type of the animated mesh.
|
||||
/** In most cases it is not necessary to use this method.
|
||||
This is useful for making a safe downcast. For example,
|
||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||
IAnimatedMesh to IAnimatedMeshMD2.
|
||||
\returns Type of the mesh. */
|
||||
E_ANIMATED_MESH_TYPE getMeshType() const override
|
||||
{
|
||||
return EAMT_UNKNOWN;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,177 +1,173 @@
|
||||
// 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_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
||||
#define __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
||||
|
||||
#include "ISceneNode.h"
|
||||
#include "IBoneSceneNode.h"
|
||||
#include "IAnimatedMesh.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
enum E_JOINT_UPDATE_ON_RENDER
|
||||
{
|
||||
//! do nothing
|
||||
EJUOR_NONE = 0,
|
||||
|
||||
//! get joints positions from the mesh (for attached nodes, etc)
|
||||
EJUOR_READ,
|
||||
|
||||
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
||||
EJUOR_CONTROL
|
||||
};
|
||||
|
||||
|
||||
class IAnimatedMeshSceneNode;
|
||||
|
||||
//! Callback interface for catching events of ended animations.
|
||||
/** Implement this interface and use
|
||||
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
||||
be notified if an animation playback has ended.
|
||||
**/
|
||||
class IAnimationEndCallBack : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Will be called when the animation playback has ended.
|
||||
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
||||
more information.
|
||||
\param node: Node of which the animation has ended. */
|
||||
virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0;
|
||||
};
|
||||
|
||||
//! Scene node capable of displaying an animated mesh.
|
||||
class IAnimatedMeshSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = 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))
|
||||
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||
|
||||
//! Destructor
|
||||
virtual ~IAnimatedMeshSceneNode() {}
|
||||
|
||||
//! Sets the current frame number.
|
||||
/** From now on the animation is played from this frame.
|
||||
\param frame: Number of the frame to let the animation be started from.
|
||||
The frame number must be a valid frame number of the IMesh used by this
|
||||
scene node. Set IAnimatedMesh::getMesh() for details. */
|
||||
virtual void setCurrentFrame(f32 frame) = 0;
|
||||
|
||||
//! Sets the frame numbers between the animation is looped.
|
||||
/** The default is 0 to getFrameCount()-1 of the mesh.
|
||||
Number of played frames is end-start.
|
||||
It interpolates toward the last frame but stops when it is reached.
|
||||
It does not interpolate back to start even when looping.
|
||||
Looping animations should ensure last and first frame-key are identical.
|
||||
\param begin: Start frame number of the loop.
|
||||
\param end: End frame number of the loop.
|
||||
\return True if successful, false if not. */
|
||||
virtual bool setFrameLoop(s32 begin, s32 end) = 0;
|
||||
|
||||
//! Sets the speed with which the animation is played.
|
||||
/** \param framesPerSecond: Frames per second played. */
|
||||
virtual void setAnimationSpeed(f32 framesPerSecond) = 0;
|
||||
|
||||
//! Gets the speed with which the animation is played.
|
||||
/** \return Frames per second played. */
|
||||
virtual f32 getAnimationSpeed() const =0;
|
||||
|
||||
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
||||
/** With this method it is possible to attach scene nodes to
|
||||
joints for example possible to attach a weapon to the left hand
|
||||
of an animated model. This example shows how:
|
||||
\code
|
||||
ISceneNode* hand =
|
||||
yourAnimatedMeshSceneNode->getJointNode("LeftHand");
|
||||
hand->addChild(weaponSceneNode);
|
||||
\endcode
|
||||
Please note that the joint returned by this method may not exist
|
||||
before this call and the joints in the node were created by it.
|
||||
\param jointName: Name of the joint.
|
||||
\return Pointer to the scene node which represents the joint
|
||||
with the specified name. Returns 0 if the contained mesh is not
|
||||
an skinned mesh or the name of the joint could not be found. */
|
||||
virtual IBoneSceneNode* getJointNode(const c8* jointName)=0;
|
||||
|
||||
//! same as getJointNode(const c8* jointName), but based on id
|
||||
virtual IBoneSceneNode* getJointNode(u32 jointID) = 0;
|
||||
|
||||
//! Gets joint count.
|
||||
/** \return Amount of joints in the mesh. */
|
||||
virtual u32 getJointCount() const = 0;
|
||||
|
||||
//! Returns the currently displayed frame number.
|
||||
virtual f32 getFrameNr() const = 0;
|
||||
//! Returns the current start frame number.
|
||||
virtual s32 getStartFrame() const = 0;
|
||||
//! Returns the current end frame number.
|
||||
virtual s32 getEndFrame() const = 0;
|
||||
|
||||
//! Sets looping mode which is on by default.
|
||||
/** If set to false, animations will not be played looped. */
|
||||
virtual void setLoopMode(bool playAnimationLooped) = 0;
|
||||
|
||||
//! returns the current loop mode
|
||||
/** When true the animations are played looped */
|
||||
virtual bool getLoopMode() const = 0;
|
||||
|
||||
//! Sets a callback interface which will be called if an animation playback has ended.
|
||||
/** Set this to 0 to disable the callback again.
|
||||
Please note that this will only be called when in non looped
|
||||
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
||||
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0;
|
||||
|
||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||
/** In this way it is possible to change the materials a mesh
|
||||
causing all mesh scene nodes referencing this mesh to change
|
||||
too. */
|
||||
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
||||
|
||||
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
||||
virtual bool isReadOnlyMaterials() const = 0;
|
||||
|
||||
//! Sets a new mesh
|
||||
virtual void setMesh(IAnimatedMesh* mesh) = 0;
|
||||
|
||||
//! Returns the current mesh
|
||||
virtual IAnimatedMesh* getMesh(void) = 0;
|
||||
|
||||
//! Set how the joints should be updated on render
|
||||
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0;
|
||||
|
||||
//! Sets the transition time in seconds
|
||||
/** Note: This needs to enable joints, and setJointmode set to
|
||||
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
||||
not animate. */
|
||||
virtual void setTransitionTime(f32 Time) =0;
|
||||
|
||||
//! animates the joints in the mesh based on the current frame.
|
||||
/** Also takes in to account transitions. */
|
||||
virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0;
|
||||
|
||||
//! render mesh ignoring its transformation.
|
||||
/** Culling is unaffected. */
|
||||
virtual void setRenderFromIdentity( bool On )=0;
|
||||
|
||||
//! Creates a clone of this scene node and its children.
|
||||
/** \param newParent An optional new parent.
|
||||
\param newManager An optional new scene manager.
|
||||
\return The newly created clone of this node. */
|
||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISceneNode.h"
|
||||
#include "IBoneSceneNode.h"
|
||||
#include "IAnimatedMesh.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
enum E_JOINT_UPDATE_ON_RENDER
|
||||
{
|
||||
//! do nothing
|
||||
EJUOR_NONE = 0,
|
||||
|
||||
//! get joints positions from the mesh (for attached nodes, etc)
|
||||
EJUOR_READ,
|
||||
|
||||
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
||||
EJUOR_CONTROL
|
||||
};
|
||||
|
||||
|
||||
class IAnimatedMeshSceneNode;
|
||||
|
||||
//! Callback interface for catching events of ended animations.
|
||||
/** Implement this interface and use
|
||||
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
||||
be notified if an animation playback has ended.
|
||||
**/
|
||||
class IAnimationEndCallBack : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Will be called when the animation playback has ended.
|
||||
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
||||
more information.
|
||||
\param node: Node of which the animation has ended. */
|
||||
virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0;
|
||||
};
|
||||
|
||||
//! Scene node capable of displaying an animated mesh.
|
||||
class IAnimatedMeshSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = 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))
|
||||
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||
|
||||
//! Destructor
|
||||
virtual ~IAnimatedMeshSceneNode() {}
|
||||
|
||||
//! Sets the current frame number.
|
||||
/** From now on the animation is played from this frame.
|
||||
\param frame: Number of the frame to let the animation be started from.
|
||||
The frame number must be a valid frame number of the IMesh used by this
|
||||
scene node. Set IAnimatedMesh::getMesh() for details. */
|
||||
virtual void setCurrentFrame(f32 frame) = 0;
|
||||
|
||||
//! Sets the frame numbers between the animation is looped.
|
||||
/** The default is 0 to getFrameCount()-1 of the mesh.
|
||||
Number of played frames is end-start.
|
||||
It interpolates toward the last frame but stops when it is reached.
|
||||
It does not interpolate back to start even when looping.
|
||||
Looping animations should ensure last and first frame-key are identical.
|
||||
\param begin: Start frame number of the loop.
|
||||
\param end: End frame number of the loop.
|
||||
\return True if successful, false if not. */
|
||||
virtual bool setFrameLoop(s32 begin, s32 end) = 0;
|
||||
|
||||
//! Sets the speed with which the animation is played.
|
||||
/** \param framesPerSecond: Frames per second played. */
|
||||
virtual void setAnimationSpeed(f32 framesPerSecond) = 0;
|
||||
|
||||
//! Gets the speed with which the animation is played.
|
||||
/** \return Frames per second played. */
|
||||
virtual f32 getAnimationSpeed() const =0;
|
||||
|
||||
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
||||
/** With this method it is possible to attach scene nodes to
|
||||
joints for example possible to attach a weapon to the left hand
|
||||
of an animated model. This example shows how:
|
||||
\code
|
||||
ISceneNode* hand =
|
||||
yourAnimatedMeshSceneNode->getJointNode("LeftHand");
|
||||
hand->addChild(weaponSceneNode);
|
||||
\endcode
|
||||
Please note that the joint returned by this method may not exist
|
||||
before this call and the joints in the node were created by it.
|
||||
\param jointName: Name of the joint.
|
||||
\return Pointer to the scene node which represents the joint
|
||||
with the specified name. Returns 0 if the contained mesh is not
|
||||
an skinned mesh or the name of the joint could not be found. */
|
||||
virtual IBoneSceneNode* getJointNode(const c8* jointName)=0;
|
||||
|
||||
//! same as getJointNode(const c8* jointName), but based on id
|
||||
virtual IBoneSceneNode* getJointNode(u32 jointID) = 0;
|
||||
|
||||
//! Gets joint count.
|
||||
/** \return Amount of joints in the mesh. */
|
||||
virtual u32 getJointCount() const = 0;
|
||||
|
||||
//! Returns the currently displayed frame number.
|
||||
virtual f32 getFrameNr() const = 0;
|
||||
//! Returns the current start frame number.
|
||||
virtual s32 getStartFrame() const = 0;
|
||||
//! Returns the current end frame number.
|
||||
virtual s32 getEndFrame() const = 0;
|
||||
|
||||
//! Sets looping mode which is on by default.
|
||||
/** If set to false, animations will not be played looped. */
|
||||
virtual void setLoopMode(bool playAnimationLooped) = 0;
|
||||
|
||||
//! returns the current loop mode
|
||||
/** When true the animations are played looped */
|
||||
virtual bool getLoopMode() const = 0;
|
||||
|
||||
//! Sets a callback interface which will be called if an animation playback has ended.
|
||||
/** Set this to 0 to disable the callback again.
|
||||
Please note that this will only be called when in non looped
|
||||
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
||||
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0;
|
||||
|
||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||
/** In this way it is possible to change the materials a mesh
|
||||
causing all mesh scene nodes referencing this mesh to change
|
||||
too. */
|
||||
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
||||
|
||||
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
||||
virtual bool isReadOnlyMaterials() const = 0;
|
||||
|
||||
//! Sets a new mesh
|
||||
virtual void setMesh(IAnimatedMesh* mesh) = 0;
|
||||
|
||||
//! Returns the current mesh
|
||||
virtual IAnimatedMesh* getMesh(void) = 0;
|
||||
|
||||
//! Set how the joints should be updated on render
|
||||
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0;
|
||||
|
||||
//! Sets the transition time in seconds
|
||||
/** Note: This needs to enable joints, and setJointmode set to
|
||||
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
||||
not animate. */
|
||||
virtual void setTransitionTime(f32 Time) =0;
|
||||
|
||||
//! animates the joints in the mesh based on the current frame.
|
||||
/** Also takes in to account transitions. */
|
||||
virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0;
|
||||
|
||||
//! render mesh ignoring its transformation.
|
||||
/** Culling is unaffected. */
|
||||
virtual void setRenderFromIdentity( bool On )=0;
|
||||
|
||||
//! Creates a clone of this scene node and its children.
|
||||
/** \param newParent An optional new parent.
|
||||
\param newManager An optional new scene manager.
|
||||
\return The newly created clone of this node. */
|
||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,71 +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_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__
|
||||
#define __I_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace io
|
||||
{
|
||||
|
||||
class IAttributes;
|
||||
|
||||
//! Enumeration flags passed through SAttributeReadWriteOptions to the IAttributeExchangingObject object
|
||||
enum E_ATTRIBUTE_READ_WRITE_FLAGS
|
||||
{
|
||||
//! Serialization/Deserializion is done for an xml file
|
||||
EARWF_FOR_FILE = 0x00000001,
|
||||
|
||||
//! Serialization/Deserializion is done for an editor property box
|
||||
EARWF_FOR_EDITOR = 0x00000002,
|
||||
|
||||
//! When writing filenames, relative paths should be used
|
||||
EARWF_USE_RELATIVE_PATHS = 0x00000004
|
||||
};
|
||||
|
||||
|
||||
//! struct holding data describing options
|
||||
struct SAttributeReadWriteOptions
|
||||
{
|
||||
//! Constructor
|
||||
SAttributeReadWriteOptions()
|
||||
: Flags(0), Filename(0)
|
||||
{
|
||||
}
|
||||
|
||||
//! Combination of E_ATTRIBUTE_READ_WRITE_FLAGS or other, custom ones
|
||||
s32 Flags;
|
||||
|
||||
//! Optional filename
|
||||
const fschar_t* Filename;
|
||||
};
|
||||
|
||||
|
||||
//! An object which is able to serialize and deserialize its attributes into an attributes object
|
||||
class IAttributeExchangingObject : virtual public IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Writes attributes of the object.
|
||||
/** Implement this to expose the attributes of your scene node animator for
|
||||
scripting languages, editors, debuggers or xml serialization purposes. */
|
||||
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const {}
|
||||
|
||||
//! Reads attributes of the object.
|
||||
/** Implement this to set the attributes of your scene node animator for
|
||||
scripting languages, editors, debuggers or xml deserialization purposes. */
|
||||
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) {}
|
||||
|
||||
};
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -1,748 +1,129 @@
|
||||
// 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_ATTRIBUTES_H_INCLUDED__
|
||||
#define __I_ATTRIBUTES_H_INCLUDED__
|
||||
|
||||
#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 "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! Provides a generic interface for attributes and their values and the possibility to serialize them
|
||||
class IAttributes : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns amount of attributes in this collection of attributes.
|
||||
virtual u32 getAttributeCount() const = 0;
|
||||
|
||||
//! Returns attribute name by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual const c8* getAttributeName(s32 index) const = 0;
|
||||
|
||||
//! Returns the type of an attribute
|
||||
//! \param attributeName: Name for the attribute
|
||||
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const = 0;
|
||||
|
||||
//! Returns attribute type by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
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
|
||||
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
||||
|
||||
//! Returns attribute index from name, -1 if not found
|
||||
virtual s32 findAttribute(const c8* attributeName) const = 0;
|
||||
|
||||
//! Removes all attributes
|
||||
virtual void clear() = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Integer Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as integer
|
||||
virtual void addInt(const c8* attributeName, s32 value) = 0;
|
||||
|
||||
//! Sets an attribute as integer value
|
||||
virtual void setAttribute(const c8* attributeName, s32 value) = 0;
|
||||
|
||||
//! Gets an attribute as integer value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const = 0;
|
||||
|
||||
//! Gets an attribute as integer value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual s32 getAttributeAsInt(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as integer value
|
||||
virtual void setAttribute(s32 index, s32 value) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Float Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as float
|
||||
virtual void addFloat(const c8* attributeName, f32 value) = 0;
|
||||
|
||||
//! Sets a attribute as float value
|
||||
virtual void setAttribute(const c8* attributeName, f32 value) = 0;
|
||||
|
||||
//! Gets an attribute as float value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const = 0;
|
||||
|
||||
//! Gets an attribute as float value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual f32 getAttributeAsFloat(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as float value
|
||||
virtual void setAttribute(s32 index, f32 value) = 0;
|
||||
|
||||
/*
|
||||
|
||||
String Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as string
|
||||
virtual void addString(const c8* attributeName, const c8* value) = 0;
|
||||
|
||||
//! Sets an attribute value as string.
|
||||
//! \param attributeName: Name for the attribute
|
||||
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
|
||||
virtual void setAttribute(const c8* attributeName, const c8* value) = 0;
|
||||
|
||||
//! Gets an attribute as string.
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
//! or defaultNotFound if attribute is not set.
|
||||
virtual core::stringc getAttributeAsString(const c8* attributeName, const core::stringc& defaultNotFound=core::stringc()) const = 0;
|
||||
|
||||
//! Gets an attribute as string.
|
||||
//! \param attributeName Name of the attribute to get.
|
||||
//! \param target Buffer where the string is copied to.
|
||||
virtual void getAttributeAsString(const c8* attributeName, c8* target) const = 0;
|
||||
|
||||
//! Returns attribute value as string by index.
|
||||
//! \param index Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::stringc getAttributeAsString(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute value as string.
|
||||
//! \param index Index value, must be between 0 and getAttributeCount()-1.
|
||||
//! \param value String to which the attribute is set.
|
||||
virtual void setAttribute(s32 index, const c8* value) = 0;
|
||||
|
||||
// wide strings
|
||||
|
||||
//! Adds an attribute as string
|
||||
virtual void addString(const c8* attributeName, const wchar_t* value) = 0;
|
||||
|
||||
//! Sets an attribute value as string.
|
||||
//! \param attributeName: Name for the attribute
|
||||
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
|
||||
virtual void setAttribute(const c8* attributeName, const wchar_t* value) = 0;
|
||||
|
||||
//! Gets an attribute as string.
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
//! or defaultNotFound if attribute is not set.
|
||||
virtual core::stringw getAttributeAsStringW(const c8* attributeName, const core::stringw& defaultNotFound = core::stringw()) const = 0;
|
||||
|
||||
//! Gets an attribute as string.
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param target: Buffer where the string is copied to.
|
||||
virtual void getAttributeAsStringW(const c8* attributeName, wchar_t* target) const = 0;
|
||||
|
||||
//! Returns attribute value as string by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::stringw getAttributeAsStringW(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute value as string.
|
||||
//! \param index Index value, must be between 0 and getAttributeCount()-1.
|
||||
//! \param value String to which the attribute is set.
|
||||
virtual void setAttribute(s32 index, const wchar_t* value) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Binary Data Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as binary data
|
||||
virtual void addBinary(const c8* attributeName, void* data, s32 dataSizeInBytes) = 0;
|
||||
|
||||
//! Sets an attribute as binary data
|
||||
virtual void setAttribute(const c8* attributeName, void* data, s32 dataSizeInBytes ) = 0;
|
||||
|
||||
//! Gets an attribute as binary data
|
||||
/** \param attributeName: Name of the attribute to get.
|
||||
\param outData Pointer to buffer where data shall be stored.
|
||||
\param maxSizeInBytes Maximum number of bytes to write into outData.
|
||||
*/
|
||||
virtual void getAttributeAsBinaryData(const c8* attributeName, void* outData, s32 maxSizeInBytes) const = 0;
|
||||
|
||||
//! Gets an attribute as binary data
|
||||
/** \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
\param outData Pointer to buffer where data shall be stored.
|
||||
\param maxSizeInBytes Maximum number of bytes to write into outData.
|
||||
*/
|
||||
virtual void getAttributeAsBinaryData(s32 index, void* outData, s32 maxSizeInBytes) const = 0;
|
||||
|
||||
//! Sets an attribute as binary data
|
||||
virtual void setAttribute(s32 index, void* data, s32 dataSizeInBytes ) = 0;
|
||||
|
||||
|
||||
/*
|
||||
Array Attribute
|
||||
*/
|
||||
|
||||
//! Adds an attribute as wide string array
|
||||
virtual void addArray(const c8* attributeName, const core::array<core::stringw>& value) = 0;
|
||||
|
||||
//! Sets an attribute value as a wide string array.
|
||||
//! \param attributeName: Name for the attribute
|
||||
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
|
||||
virtual void setAttribute(const c8* attributeName, const core::array<core::stringw>& value) = 0;
|
||||
|
||||
//! Gets an attribute as an array of wide strings.
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
//! or defaultNotFound if attribute is not set.
|
||||
virtual core::array<core::stringw> getAttributeAsArray(const c8* attributeName, const core::array<core::stringw>& defaultNotFound = core::array<core::stringw>()) const = 0;
|
||||
|
||||
//! Returns attribute value as an array of wide strings by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::array<core::stringw> getAttributeAsArray(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as an array of wide strings
|
||||
virtual void setAttribute(s32 index, const core::array<core::stringw>& value) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Bool Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as bool
|
||||
virtual void addBool(const c8* attributeName, bool value) = 0;
|
||||
|
||||
//! Sets an attribute as boolean value
|
||||
virtual void setAttribute(const c8* attributeName, bool value) = 0;
|
||||
|
||||
//! Gets an attribute as boolean value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const = 0;
|
||||
|
||||
//! Gets an attribute as boolean value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual bool getAttributeAsBool(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as boolean value
|
||||
virtual void setAttribute(s32 index, bool value) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Enumeration Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as enum
|
||||
virtual void addEnum(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
|
||||
|
||||
//! Adds an attribute as enum
|
||||
virtual void addEnum(const c8* attributeName, s32 enumValue, const c8* const* enumerationLiterals) = 0;
|
||||
|
||||
//! Sets an attribute as enumeration
|
||||
virtual void setAttribute(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
|
||||
|
||||
//! Gets an attribute as enumeration
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual const c8* getAttributeAsEnumeration(const c8* attributeName, const c8* defaultNotFound = 0) const = 0;
|
||||
|
||||
//! Gets an attribute as enumeration
|
||||
/** \param attributeName: Name of the attribute to get.
|
||||
\param enumerationLiteralsToUse: Use these enumeration literals to get
|
||||
the index value instead of the set ones. This is useful when the
|
||||
attribute list maybe was read from an xml file, and only contains the
|
||||
enumeration string, but no information about its index.
|
||||
\return Returns value of the attribute previously set by setAttribute()
|
||||
*/
|
||||
virtual s32 getAttributeAsEnumeration(const c8* attributeName, const c8* const* enumerationLiteralsToUse, s32 defaultNotFound = -1) const = 0;
|
||||
|
||||
//! Gets an attribute as enumeration
|
||||
/** \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
\param enumerationLiteralsToUse: Use these enumeration literals to get
|
||||
the index value instead of the set ones. This is useful when the
|
||||
attribute list maybe was read from an xml file, and only contains the
|
||||
enumeration string, but no information about its index.
|
||||
\param defaultNotFound Value returned when the attribute referenced by the index was not found.
|
||||
\return Returns value of the attribute previously set by setAttribute()
|
||||
*/
|
||||
virtual s32 getAttributeAsEnumeration(s32 index, const c8* const* enumerationLiteralsToUse, s32 defaultNotFound = -1) const = 0;
|
||||
|
||||
//! Gets an attribute as enumeration
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual const c8* getAttributeAsEnumeration(s32 index) const = 0;
|
||||
|
||||
//! Gets the list of enumeration literals of an enumeration attribute
|
||||
//! \param attributeName Name of the attribute to get.
|
||||
//! \param outLiterals Set of strings to choose the enum name from.
|
||||
virtual void getAttributeEnumerationLiteralsOfEnumeration(const c8* attributeName, core::array<core::stringc>& outLiterals) const = 0;
|
||||
|
||||
//! Gets the list of enumeration literals of an enumeration attribute
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
//! \param outLiterals Set of strings to choose the enum name from.
|
||||
virtual void getAttributeEnumerationLiteralsOfEnumeration(s32 index, core::array<core::stringc>& outLiterals) const = 0;
|
||||
|
||||
//! Sets an attribute as enumeration
|
||||
virtual void setAttribute(s32 index, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
SColor Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as color
|
||||
virtual void addColor(const c8* attributeName, video::SColor value) = 0;
|
||||
|
||||
|
||||
//! Sets a attribute as color
|
||||
virtual void setAttribute(const c8* attributeName, video::SColor color) = 0;
|
||||
|
||||
//! Gets an attribute as color
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual video::SColor getAttributeAsColor(const c8* attributeName, const video::SColor& defaultNotFound = video::SColor(0)) const = 0;
|
||||
|
||||
//! Gets an attribute as color
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual video::SColor getAttributeAsColor(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as color
|
||||
virtual void setAttribute(s32 index, video::SColor color) = 0;
|
||||
|
||||
/*
|
||||
|
||||
SColorf Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as floating point color
|
||||
virtual void addColorf(const c8* attributeName, video::SColorf value) = 0;
|
||||
|
||||
//! Sets a attribute as floating point color
|
||||
virtual void setAttribute(const c8* attributeName, video::SColorf color) = 0;
|
||||
|
||||
//! Gets an attribute as floating point color
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual video::SColorf getAttributeAsColorf(const c8* attributeName, const video::SColorf& defaultNotFound = video::SColorf(0)) const = 0;
|
||||
|
||||
//! Gets an attribute as floating point color
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual video::SColorf getAttributeAsColorf(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as floating point color
|
||||
virtual void setAttribute(s32 index, video::SColorf color) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Vector3d Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as 3d vector
|
||||
virtual void addVector3d(const c8* attributeName, const core::vector3df& value) = 0;
|
||||
|
||||
//! Sets a attribute as 3d vector
|
||||
virtual void setAttribute(const c8* attributeName, const core::vector3df& v) = 0;
|
||||
|
||||
//! Gets an attribute as 3d vector
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::vector3df getAttributeAsVector3d(const c8* attributeName, const core::vector3df& defaultNotFound=core::vector3df(0,0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as 3d vector
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::vector3df getAttributeAsVector3d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as vector
|
||||
virtual void setAttribute(s32 index, const core::vector3df& v) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Vector2d Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as 2d vector
|
||||
virtual void addVector2d(const c8* attributeName, const core::vector2df& value) = 0;
|
||||
|
||||
//! Sets a attribute as 2d vector
|
||||
virtual void setAttribute(const c8* attributeName, const core::vector2df& v) = 0;
|
||||
|
||||
//! Gets an attribute as vector
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::vector2df getAttributeAsVector2d(const c8* attributeName, const core::vector2df& defaultNotFound=core::vector2df(0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as position
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::vector2df getAttributeAsVector2d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as 2d vector
|
||||
virtual void setAttribute(s32 index, const core::vector2df& v) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Position2d Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as 2d position
|
||||
virtual void addPosition2d(const c8* attributeName, const core::position2di& value) = 0;
|
||||
|
||||
//! Sets a attribute as 2d position
|
||||
virtual void setAttribute(const c8* attributeName, const core::position2di& v) = 0;
|
||||
|
||||
//! Gets an attribute as position
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::position2di getAttributeAsPosition2d(const c8* attributeName, const core::position2di& defaultNotFound=core::position2di(0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as position
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::position2di getAttributeAsPosition2d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as 2d position
|
||||
virtual void setAttribute(s32 index, const core::position2di& v) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Rectangle Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as rectangle
|
||||
virtual void addRect(const c8* attributeName, const core::rect<s32>& value) = 0;
|
||||
|
||||
//! Sets an attribute as rectangle
|
||||
virtual void setAttribute(const c8* attributeName, const core::rect<s32>& v) = 0;
|
||||
|
||||
//! Gets an attribute as rectangle
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::rect<s32> getAttributeAsRect(const c8* attributeName, const core::rect<s32>& defaultNotFound = core::rect<s32>()) const = 0;
|
||||
|
||||
//! Gets an attribute as rectangle
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::rect<s32> getAttributeAsRect(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as rectangle
|
||||
virtual void setAttribute(s32 index, const core::rect<s32>& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Dimension2d Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as dimension2d
|
||||
virtual void addDimension2d(const c8* attributeName, const core::dimension2d<u32>& value) = 0;
|
||||
|
||||
//! Sets an attribute as dimension2d
|
||||
virtual void setAttribute(const c8* attributeName, const core::dimension2d<u32>& v) = 0;
|
||||
|
||||
//! Gets an attribute as dimension2d
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::dimension2d<u32> getAttributeAsDimension2d(const c8* attributeName, const core::dimension2d<u32>& defaultNotFound = core::dimension2d<u32>()) const = 0;
|
||||
|
||||
//! Gets an attribute as dimension2d
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::dimension2d<u32> getAttributeAsDimension2d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as dimension2d
|
||||
virtual void setAttribute(s32 index, const core::dimension2d<u32>& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
matrix attribute
|
||||
*/
|
||||
|
||||
//! Adds an attribute as matrix
|
||||
virtual void addMatrix(const c8* attributeName, const core::matrix4& v) = 0;
|
||||
|
||||
//! Sets an attribute as matrix
|
||||
virtual void setAttribute(const c8* attributeName, const core::matrix4& v) = 0;
|
||||
|
||||
//! Gets an attribute as a matrix4
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::matrix4 getAttributeAsMatrix(const c8* attributeName, const core::matrix4& defaultNotFound=core::matrix4()) const = 0;
|
||||
|
||||
//! Gets an attribute as matrix
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::matrix4 getAttributeAsMatrix(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as matrix
|
||||
virtual void setAttribute(s32 index, const core::matrix4& v) = 0;
|
||||
|
||||
/*
|
||||
quaternion attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as quaternion
|
||||
virtual void addQuaternion(const c8* attributeName, const core::quaternion& v) = 0;
|
||||
|
||||
//! Sets an attribute as quaternion
|
||||
virtual void setAttribute(const c8* attributeName, const core::quaternion& v) = 0;
|
||||
|
||||
//! Gets an attribute as a quaternion
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::quaternion getAttributeAsQuaternion(const c8* attributeName, const core::quaternion& defaultNotFound=core::quaternion(0,1,0, 0)) const = 0;
|
||||
|
||||
//! Gets an attribute as quaternion
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::quaternion getAttributeAsQuaternion(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as quaternion
|
||||
virtual void setAttribute(s32 index, const core::quaternion& v) = 0;
|
||||
|
||||
/*
|
||||
|
||||
3d bounding box
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as axis aligned bounding box
|
||||
virtual void addBox3d(const c8* attributeName, const core::aabbox3df& v) = 0;
|
||||
|
||||
//! Sets an attribute as axis aligned bounding box
|
||||
virtual void setAttribute(const c8* attributeName, const core::aabbox3df& v) = 0;
|
||||
|
||||
//! Gets an attribute as a axis aligned bounding box
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::aabbox3df getAttributeAsBox3d(const c8* attributeName, const core::aabbox3df& defaultNotFound=core::aabbox3df(0,0,0, 0,0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as axis aligned bounding box
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::aabbox3df getAttributeAsBox3d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as axis aligned bounding box
|
||||
virtual void setAttribute(s32 index, const core::aabbox3df& v) = 0;
|
||||
|
||||
/*
|
||||
|
||||
plane
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as 3d plane
|
||||
virtual void addPlane3d(const c8* attributeName, const core::plane3df& v) = 0;
|
||||
|
||||
//! Sets an attribute as 3d plane
|
||||
virtual void setAttribute(const c8* attributeName, const core::plane3df& v) = 0;
|
||||
|
||||
//! Gets an attribute as a 3d plane
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::plane3df getAttributeAsPlane3d(const c8* attributeName, const core::plane3df& defaultNotFound=core::plane3df(0,0,0, 0,1,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as 3d plane
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::plane3df getAttributeAsPlane3d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as 3d plane
|
||||
virtual void setAttribute(s32 index, const core::plane3df& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
3d triangle
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as 3d triangle
|
||||
virtual void addTriangle3d(const c8* attributeName, const core::triangle3df& v) = 0;
|
||||
|
||||
//! Sets an attribute as 3d trianle
|
||||
virtual void setAttribute(const c8* attributeName, const core::triangle3df& v) = 0;
|
||||
|
||||
//! Gets an attribute as a 3d triangle
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::triangle3df getAttributeAsTriangle3d(const c8* attributeName, const core::triangle3df& defaultNotFound = core::triangle3df(core::vector3df(0,0,0), core::vector3df(0,0,0), core::vector3df(0,0,0))) const = 0;
|
||||
|
||||
//! Gets an attribute as 3d triangle
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::triangle3df getAttributeAsTriangle3d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as 3d triangle
|
||||
virtual void setAttribute(s32 index, const core::triangle3df& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
line 2d
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as a 2d line
|
||||
virtual void addLine2d(const c8* attributeName, const core::line2df& v) = 0;
|
||||
|
||||
//! Sets an attribute as a 2d line
|
||||
virtual void setAttribute(const c8* attributeName, const core::line2df& v) = 0;
|
||||
|
||||
//! Gets an attribute as a 2d line
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::line2df getAttributeAsLine2d(const c8* attributeName, const core::line2df& defaultNotFound = core::line2df(0,0, 0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as a 2d line
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::line2df getAttributeAsLine2d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as a 2d line
|
||||
virtual void setAttribute(s32 index, const core::line2df& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
line 3d
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as a 3d line
|
||||
virtual void addLine3d(const c8* attributeName, const core::line3df& v) = 0;
|
||||
|
||||
//! Sets an attribute as a 3d line
|
||||
virtual void setAttribute(const c8* attributeName, const core::line3df& v) = 0;
|
||||
|
||||
//! Gets an attribute as a 3d line
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual core::line3df getAttributeAsLine3d(const c8* attributeName, const core::line3df& defaultNotFound=core::line3df(0,0,0, 0,0,0)) const = 0;
|
||||
|
||||
//! Gets an attribute as a 3d line
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual core::line3df getAttributeAsLine3d(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as a 3d line
|
||||
virtual void setAttribute(s32 index, const core::line3df& v) = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Texture Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as texture reference
|
||||
virtual void addTexture(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0;
|
||||
|
||||
//! Sets an attribute as texture reference
|
||||
virtual void setAttribute(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0;
|
||||
|
||||
//! Gets an attribute as texture reference
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
virtual video::ITexture* getAttributeAsTexture(const c8* attributeName, video::ITexture* defaultNotFound=0) const = 0;
|
||||
|
||||
//! Gets an attribute as texture reference
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual video::ITexture* getAttributeAsTexture(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as texture reference
|
||||
virtual void setAttribute(s32 index, video::ITexture* texture, const io::path& filename = "") = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
User Pointer Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as user pointer
|
||||
virtual void addUserPointer(const c8* attributeName, void* userPointer) = 0;
|
||||
|
||||
//! Sets an attribute as user pointer
|
||||
virtual void setAttribute(const c8* attributeName, void* userPointer) = 0;
|
||||
|
||||
//! Gets an attribute as user pointer
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
virtual void* getAttributeAsUserPointer(const c8* attributeName, void* defaultNotFound = 0) const = 0;
|
||||
|
||||
//! Gets an attribute as user pointer
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual void* getAttributeAsUserPointer(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as user pointer
|
||||
virtual void setAttribute(s32 index, void* userPointer) = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "EAttributes.h"
|
||||
|
||||
// not needed here but I can't be bothered to clean the transitive includes up.
|
||||
#include "quaternion.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! Provides a generic interface for attributes and their values and the possibility to serialize them
|
||||
class IAttributes : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns amount of attributes in this collection of attributes.
|
||||
virtual u32 getAttributeCount() const = 0;
|
||||
|
||||
//! Returns attribute name by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual const c8* getAttributeName(s32 index) const = 0;
|
||||
|
||||
//! Returns the type of an attribute
|
||||
//! \param attributeName: Name for the attribute
|
||||
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const = 0;
|
||||
|
||||
//! Returns attribute type by index.
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
|
||||
|
||||
//! Returns if an attribute with a name exists
|
||||
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
||||
|
||||
//! Returns attribute index from name, -1 if not found
|
||||
virtual s32 findAttribute(const c8* attributeName) const = 0;
|
||||
|
||||
//! Removes all attributes
|
||||
virtual void clear() = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Integer Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as integer
|
||||
virtual void addInt(const c8* attributeName, s32 value) = 0;
|
||||
|
||||
//! Sets an attribute as integer value
|
||||
virtual void setAttribute(const c8* attributeName, s32 value) = 0;
|
||||
|
||||
//! Gets an attribute as integer value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const = 0;
|
||||
|
||||
//! Gets an attribute as integer value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual s32 getAttributeAsInt(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as integer value
|
||||
virtual void setAttribute(s32 index, s32 value) = 0;
|
||||
|
||||
/*
|
||||
|
||||
Float Attribute
|
||||
|
||||
*/
|
||||
|
||||
//! Adds an attribute as float
|
||||
virtual void addFloat(const c8* attributeName, f32 value) = 0;
|
||||
|
||||
//! Sets a attribute as float value
|
||||
virtual void setAttribute(const c8* attributeName, f32 value) = 0;
|
||||
|
||||
//! Gets an attribute as float value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const = 0;
|
||||
|
||||
//! Gets an attribute as float value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual f32 getAttributeAsFloat(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as float value
|
||||
virtual void setAttribute(s32 index, f32 value) = 0;
|
||||
|
||||
|
||||
/*
|
||||
Bool Attribute
|
||||
*/
|
||||
|
||||
//! Adds an attribute as bool
|
||||
virtual void addBool(const c8* attributeName, bool value) = 0;
|
||||
|
||||
//! Sets an attribute as boolean value
|
||||
virtual void setAttribute(const c8* attributeName, bool value) = 0;
|
||||
|
||||
//! Gets an attribute as boolean value
|
||||
//! \param attributeName: Name of the attribute to get.
|
||||
//! \param defaultNotFound Value returned when attributeName was not found
|
||||
//! \return Returns value of the attribute previously set by setAttribute()
|
||||
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const = 0;
|
||||
|
||||
//! Gets an attribute as boolean value
|
||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||
virtual bool getAttributeAsBool(s32 index) const = 0;
|
||||
|
||||
//! Sets an attribute as boolean value
|
||||
virtual void setAttribute(s32 index, bool value) = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
@ -1,84 +1,91 @@
|
||||
// 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_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
||||
#define __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
class ICameraSceneNode;
|
||||
|
||||
//! A billboard scene node.
|
||||
/** A billboard is like a 3d sprite: A 2d element,
|
||||
which always looks to the camera. It is usually used for explosions, fire,
|
||||
lensflares, particles and things like that.
|
||||
*/
|
||||
class IBillboardSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = core::vector3df(0,0,0))
|
||||
: ISceneNode(parent, mgr, id, position) {}
|
||||
|
||||
//! Sets the size of the billboard, making it rectangular.
|
||||
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
||||
|
||||
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
||||
/** \param[in] height The height of the billboard.
|
||||
\param[in] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||
\param[in] topEdgeWidth The width of the top edge of the billboard.
|
||||
*/
|
||||
virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) = 0;
|
||||
|
||||
//! Returns the size of the billboard.
|
||||
/** This will return the width of the bottom edge of the billboard.
|
||||
Use getWidths() to retrieve the bottom and top edges independently.
|
||||
\return Size of the billboard.
|
||||
*/
|
||||
virtual const core::dimension2d<f32>& getSize() const = 0;
|
||||
|
||||
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
||||
/** \param[out] height The height of the billboard.
|
||||
\param[out] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||
\param[out] topEdgeWidth The width of the top edge of the billboard.
|
||||
*/
|
||||
virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const =0;
|
||||
|
||||
//! Set the color of all vertices of the billboard
|
||||
/** \param[in] overallColor Color to set */
|
||||
virtual void setColor(const video::SColor& overallColor) = 0;
|
||||
|
||||
//! Set the color of the top and bottom vertices of the billboard
|
||||
/** \param[in] topColor Color to set the top vertices
|
||||
\param[in] bottomColor Color to set the bottom vertices */
|
||||
virtual void setColor(const video::SColor& topColor,
|
||||
const video::SColor& bottomColor) = 0;
|
||||
|
||||
//! Gets the color of the top and bottom vertices of the billboard
|
||||
/** \param[out] topColor Stores the color of the top vertices
|
||||
\param[out] bottomColor Stores the color of the bottom vertices */
|
||||
virtual void getColor(video::SColor& topColor,
|
||||
video::SColor& bottomColor) const = 0;
|
||||
|
||||
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
||||
/** The boundingbox returned will use absolute coordinates.
|
||||
The billboard orients itself toward the camera and some only update in render().
|
||||
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
||||
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
||||
to contain the billboard. While this function can return the real one. */
|
||||
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
class ICameraSceneNode;
|
||||
class IMeshBuffer;
|
||||
|
||||
//! A billboard scene node.
|
||||
/** A billboard is like a 3d sprite: A 2d element,
|
||||
which always looks to the camera. It is usually used for explosions, fire,
|
||||
lensflares, particles and things like that.
|
||||
*/
|
||||
class IBillboardSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = core::vector3df(0,0,0))
|
||||
: ISceneNode(parent, mgr, id, position) {}
|
||||
|
||||
//! Sets the size of the billboard, making it rectangular.
|
||||
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
||||
|
||||
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
||||
/** \param[in] height The height of the billboard.
|
||||
\param[in] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||
\param[in] topEdgeWidth The width of the top edge of the billboard.
|
||||
*/
|
||||
virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) = 0;
|
||||
|
||||
//! Returns the size of the billboard.
|
||||
/** This will return the width of the bottom edge of the billboard.
|
||||
Use getWidths() to retrieve the bottom and top edges independently.
|
||||
\return Size of the billboard.
|
||||
*/
|
||||
virtual const core::dimension2d<f32>& getSize() const = 0;
|
||||
|
||||
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
||||
/** \param[out] height The height of the billboard.
|
||||
\param[out] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||
\param[out] topEdgeWidth The width of the top edge of the billboard.
|
||||
*/
|
||||
virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const =0;
|
||||
|
||||
//! Set the color of all vertices of the billboard
|
||||
/** \param[in] overallColor Color to set */
|
||||
virtual void setColor(const video::SColor& overallColor) = 0;
|
||||
|
||||
//! Set the color of the top and bottom vertices of the billboard
|
||||
/** \param[in] topColor Color to set the top vertices
|
||||
\param[in] bottomColor Color to set the bottom vertices */
|
||||
virtual void setColor(const video::SColor& topColor,
|
||||
const video::SColor& bottomColor) = 0;
|
||||
|
||||
//! Gets the color of the top and bottom vertices of the billboard
|
||||
/** \param[out] topColor Stores the color of the top vertices
|
||||
\param[out] bottomColor Stores the color of the bottom vertices */
|
||||
virtual void getColor(video::SColor& topColor,
|
||||
video::SColor& bottomColor) const = 0;
|
||||
|
||||
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
||||
/** The boundingbox returned will use absolute coordinates.
|
||||
The billboard orients itself toward the camera and some only update in render().
|
||||
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
||||
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
||||
to contain the billboard. While this function can return the real one. */
|
||||
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
|
||||
|
||||
//! Get the amount of mesh buffers.
|
||||
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
||||
virtual u32 getMeshBufferCount() const = 0;
|
||||
|
||||
//! Get pointer to a mesh buffer.
|
||||
/** NOTE: Positions and normals of this meshbuffers are re-calculated before rendering.
|
||||
So this is mainly useful to access/modify the uv-coordinates.
|
||||
\param nr: Zero based index of the mesh buffer.
|
||||
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
|
||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,108 +1,100 @@
|
||||
// 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_BONE_SCENE_NODE_H_INCLUDED__
|
||||
#define __I_BONE_SCENE_NODE_H_INCLUDED__
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! Enumeration for different bone animation modes
|
||||
enum E_BONE_ANIMATION_MODE
|
||||
{
|
||||
//! The bone is usually animated, unless it's parent is not animated
|
||||
EBAM_AUTOMATIC=0,
|
||||
|
||||
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
||||
EBAM_ANIMATED,
|
||||
|
||||
//! The bone is not animated by the skin
|
||||
EBAM_UNANIMATED,
|
||||
|
||||
//! Not an animation mode, just here to count the available modes
|
||||
EBAM_COUNT
|
||||
|
||||
};
|
||||
|
||||
enum E_BONE_SKINNING_SPACE
|
||||
{
|
||||
//! local skinning, standard
|
||||
EBSS_LOCAL=0,
|
||||
|
||||
//! global skinning
|
||||
EBSS_GLOBAL,
|
||||
|
||||
EBSS_COUNT
|
||||
};
|
||||
|
||||
//! Names for bone animation modes
|
||||
const c8* const BoneAnimationModeNames[] =
|
||||
{
|
||||
"automatic",
|
||||
"animated",
|
||||
"unanimated",
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
//! Interface for bones used for skeletal animation.
|
||||
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
||||
class IBoneSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-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
|
||||
virtual u32 getBoneIndex() const = 0;
|
||||
|
||||
//! Sets the animation mode of the bone.
|
||||
/** \return True if successful. (Unused) */
|
||||
virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) = 0;
|
||||
|
||||
//! Gets the current animation mode of the bone
|
||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||
|
||||
//! Get the axis aligned bounding box of this node
|
||||
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_ = 0;
|
||||
|
||||
//! Returns the relative transformation of the scene node.
|
||||
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||
|
||||
//! The animation method.
|
||||
virtual void OnAnimate(u32 timeMs) _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! The render method.
|
||||
/** Does nothing as bones are not visible. */
|
||||
virtual void render() _IRR_OVERRIDE_ { }
|
||||
|
||||
//! How the relative transformation of the bone is used
|
||||
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
||||
|
||||
//! How the relative transformation of the bone is used
|
||||
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0;
|
||||
|
||||
//! Updates the absolute position based on the relative and the parents position
|
||||
virtual void updateAbsolutePositionOfAllChildren()=0;
|
||||
|
||||
s32 positionHint;
|
||||
s32 scaleHint;
|
||||
s32 rotationHint;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! Enumeration for different bone animation modes
|
||||
enum E_BONE_ANIMATION_MODE
|
||||
{
|
||||
//! The bone is usually animated, unless it's parent is not animated
|
||||
EBAM_AUTOMATIC=0,
|
||||
|
||||
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
||||
EBAM_ANIMATED,
|
||||
|
||||
//! The bone is not animated by the skin
|
||||
EBAM_UNANIMATED,
|
||||
|
||||
//! Not an animation mode, just here to count the available modes
|
||||
EBAM_COUNT
|
||||
|
||||
};
|
||||
|
||||
enum E_BONE_SKINNING_SPACE
|
||||
{
|
||||
//! local skinning, standard
|
||||
EBSS_LOCAL=0,
|
||||
|
||||
//! global skinning
|
||||
EBSS_GLOBAL,
|
||||
|
||||
EBSS_COUNT
|
||||
};
|
||||
|
||||
//! Names for bone animation modes
|
||||
const c8* const BoneAnimationModeNames[] =
|
||||
{
|
||||
"automatic",
|
||||
"animated",
|
||||
"unanimated",
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
//! Interface for bones used for skeletal animation.
|
||||
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
||||
class IBoneSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
|
||||
ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { }
|
||||
|
||||
//! Get the index of the bone
|
||||
virtual u32 getBoneIndex() const = 0;
|
||||
|
||||
//! Sets the animation mode of the bone.
|
||||
/** \return True if successful. (Unused) */
|
||||
virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) = 0;
|
||||
|
||||
//! Gets the current animation mode of the bone
|
||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||
|
||||
//! Get the axis aligned bounding box of this node
|
||||
const core::aabbox3d<f32>& getBoundingBox() const override = 0;
|
||||
|
||||
//! Returns the relative transformation of the scene node.
|
||||
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||
|
||||
//! The animation method.
|
||||
void OnAnimate(u32 timeMs) override =0;
|
||||
|
||||
//! The render method.
|
||||
/** Does nothing as bones are not visible. */
|
||||
void render() override { }
|
||||
|
||||
//! How the relative transformation of the bone is used
|
||||
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
||||
|
||||
//! How the relative transformation of the bone is used
|
||||
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0;
|
||||
|
||||
//! Updates the absolute position based on the relative and the parents position
|
||||
virtual void updateAbsolutePositionOfAllChildren()=0;
|
||||
|
||||
s32 positionHint;
|
||||
s32 scaleHint;
|
||||
s32 rotationHint;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,210 +1,185 @@
|
||||
// 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_CAMERA_SCENE_NODE_H_INCLUDED__
|
||||
#define __I_CAMERA_SCENE_NODE_H_INCLUDED__
|
||||
|
||||
#include "ISceneNode.h"
|
||||
#include "IEventReceiver.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
struct SViewFrustum;
|
||||
|
||||
//! Scene Node which is a (controllable) camera.
|
||||
/** The whole scene will be rendered from the cameras point of view.
|
||||
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
||||
other scene node, and will follow its parents movement, rotation and so
|
||||
on.
|
||||
*/
|
||||
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = 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))
|
||||
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
|
||||
|
||||
//! Sets the projection matrix of the camera.
|
||||
/** The core::matrix4 class has some methods to build a
|
||||
projection matrix. e.g:
|
||||
core::matrix4::buildProjectionMatrixPerspectiveFovLH.
|
||||
Note that the matrix will only stay as set by this method until
|
||||
one of the following Methods are called: setNearValue,
|
||||
setFarValue, setAspectRatio, setFOV.
|
||||
NOTE: The frustum is not updated before render() is called
|
||||
unless you explicitly call updateMatrices()
|
||||
\param projection The new projection matrix of the camera.
|
||||
\param isOrthogonal Set this to true if the matrix is an
|
||||
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
||||
*/
|
||||
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0;
|
||||
|
||||
//! Gets the current projection matrix of the camera.
|
||||
/** \return The current projection matrix of the camera. */
|
||||
virtual const core::matrix4& getProjectionMatrix() const =0;
|
||||
|
||||
//! Gets the current view matrix of the camera.
|
||||
/** \return The current view matrix of the camera. */
|
||||
virtual const core::matrix4& getViewMatrix() const =0;
|
||||
|
||||
//! Sets a custom view matrix affector.
|
||||
/** The matrix passed here, will be multiplied with the view
|
||||
matrix when it gets updated. This allows for custom camera
|
||||
setups like, for example, a reflection camera.
|
||||
\param affector The affector matrix. */
|
||||
virtual void setViewMatrixAffector(const core::matrix4& affector) =0;
|
||||
|
||||
//! Get the custom view matrix affector.
|
||||
/** \return The affector matrix. */
|
||||
virtual const core::matrix4& getViewMatrixAffector() const =0;
|
||||
|
||||
//! It is possible to send mouse and key events to the camera.
|
||||
/** Most cameras may ignore this input, but camera scene nodes
|
||||
which are created for example with
|
||||
ISceneManager::addCameraSceneNodeMaya or
|
||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||
this input for changing their position, look at target or
|
||||
whatever. */
|
||||
virtual bool OnEvent(const SEvent& event) _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Sets the look at target of the camera
|
||||
/** If the camera's target and rotation are bound ( @see
|
||||
bindTargetAndRotation() ) then calling this will also change
|
||||
the camera's scene node rotation to match the target.
|
||||
Note that setTarget uses the current absolute position
|
||||
internally, so if you changed setPosition since last rendering you must
|
||||
call updateAbsolutePosition before using this function.
|
||||
\param pos Look at target of the camera, in world co-ordinates. */
|
||||
virtual void setTarget(const core::vector3df& pos) =0;
|
||||
|
||||
//! Sets the rotation of the node.
|
||||
/** This only modifies the relative rotation of the node.
|
||||
If the camera's target and rotation are bound ( @see
|
||||
bindTargetAndRotation() ) then calling this will also change
|
||||
the camera's target to match the rotation.
|
||||
\param rotation New rotation of the node in degrees. */
|
||||
virtual void setRotation(const core::vector3df& rotation) _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Gets the current look at target of the camera
|
||||
/** \return The current look at target of the camera, in world co-ordinates */
|
||||
virtual const core::vector3df& getTarget() const =0;
|
||||
|
||||
//! Sets the up vector of the camera.
|
||||
/** \param pos: New upvector of the camera. */
|
||||
virtual void setUpVector(const core::vector3df& pos) =0;
|
||||
|
||||
//! Gets the up vector of the camera.
|
||||
/** \return The up vector of the camera, in world space. */
|
||||
virtual const core::vector3df& getUpVector() const =0;
|
||||
|
||||
//! Gets the value of the near plane of the camera.
|
||||
/** \return The value of the near plane of the camera. */
|
||||
virtual f32 getNearValue() const =0;
|
||||
|
||||
//! Gets the value of the far plane of the camera.
|
||||
/** \return The value of the far plane of the camera. */
|
||||
virtual f32 getFarValue() const =0;
|
||||
|
||||
//! Gets the aspect ratio of the camera.
|
||||
/** \return The aspect ratio of the camera. */
|
||||
virtual f32 getAspectRatio() const =0;
|
||||
|
||||
//! Gets the field of view of the camera.
|
||||
/** \return The field of view of the camera in radians. */
|
||||
virtual f32 getFOV() const =0;
|
||||
|
||||
//! Sets the value of the near clipping plane. (default: 1.0f)
|
||||
/** \param zn: New z near value. */
|
||||
virtual void setNearValue(f32 zn) =0;
|
||||
|
||||
//! Sets the value of the far clipping plane (default: 2000.0f)
|
||||
/** \param zf: New z far value. */
|
||||
virtual void setFarValue(f32 zf) =0;
|
||||
|
||||
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
||||
/** \param aspect: New aspect ratio. */
|
||||
virtual void setAspectRatio(f32 aspect) =0;
|
||||
|
||||
//! Sets the field of view (Default: PI / 2.5f)
|
||||
/** \param fovy: New field of view in radians. */
|
||||
virtual void setFOV(f32 fovy) =0;
|
||||
|
||||
//! Get the view frustum.
|
||||
/** \return The current view frustum. */
|
||||
virtual const SViewFrustum* getViewFrustum() const =0;
|
||||
|
||||
//! Disables or enables the camera to get key or mouse inputs.
|
||||
/** If this is set to true, the camera will respond to key
|
||||
inputs otherwise not. */
|
||||
virtual void setInputReceiverEnabled(bool enabled) =0;
|
||||
|
||||
//! Checks if the input receiver of the camera is currently enabled.
|
||||
virtual bool isInputReceiverEnabled() const =0;
|
||||
|
||||
//! Checks if a camera is orthogonal.
|
||||
virtual bool isOrthogonal() const
|
||||
{
|
||||
return IsOrthogonal;
|
||||
}
|
||||
|
||||
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
||||
/** When bound, calling setRotation() will update the camera's
|
||||
target position to be along its +Z axis, and likewise calling
|
||||
setTarget() will update its rotation so that its +Z axis will
|
||||
point at the target point. FPS camera use this binding by
|
||||
default; other cameras do not.
|
||||
\param bound True to bind the camera's scene node rotation
|
||||
and targeting, false to unbind them.
|
||||
@see getTargetAndRotationBinding() */
|
||||
virtual void bindTargetAndRotation(bool bound) =0;
|
||||
|
||||
//! Updates the matrices without uploading them to the driver
|
||||
virtual void updateMatrices() = 0;
|
||||
|
||||
//! Queries if the camera scene node's rotation and its target position are bound together.
|
||||
/** @see bindTargetAndRotation() */
|
||||
virtual bool getTargetAndRotationBinding(void) const =0;
|
||||
|
||||
//! Writes attributes of the camera node
|
||||
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_
|
||||
{
|
||||
ISceneNode::serializeAttributes(out, options);
|
||||
|
||||
if (!out)
|
||||
return;
|
||||
out->addBool("IsOrthogonal", IsOrthogonal);
|
||||
}
|
||||
|
||||
//! Reads attributes of the camera node
|
||||
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_
|
||||
{
|
||||
ISceneNode::deserializeAttributes(in, options);
|
||||
if (!in)
|
||||
return;
|
||||
|
||||
if ( in->findAttribute("IsOrthogonal") )
|
||||
IsOrthogonal = in->getAttributeAsBool("IsOrthogonal");
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void cloneMembers(const ICameraSceneNode* toCopyFrom)
|
||||
{
|
||||
IsOrthogonal = toCopyFrom->IsOrthogonal;
|
||||
}
|
||||
|
||||
bool IsOrthogonal;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISceneNode.h"
|
||||
#include "IEventReceiver.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
struct SViewFrustum;
|
||||
|
||||
//! Scene Node which is a (controllable) camera.
|
||||
/** The whole scene will be rendered from the cameras point of view.
|
||||
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
||||
other scene node, and will follow its parents movement, rotation and so
|
||||
on.
|
||||
*/
|
||||
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||
const core::vector3df& position = 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))
|
||||
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
|
||||
|
||||
//! Sets the projection matrix of the camera.
|
||||
/** The core::matrix4 class has some methods to build a
|
||||
projection matrix. e.g:
|
||||
core::matrix4::buildProjectionMatrixPerspectiveFovLH.
|
||||
Note that the matrix will only stay as set by this method until
|
||||
one of the following Methods are called: setNearValue,
|
||||
setFarValue, setAspectRatio, setFOV.
|
||||
NOTE: The frustum is not updated before render() is called
|
||||
unless you explicitly call updateMatrices()
|
||||
\param projection The new projection matrix of the camera.
|
||||
\param isOrthogonal Set this to true if the matrix is an
|
||||
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
||||
*/
|
||||
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0;
|
||||
|
||||
//! Gets the current projection matrix of the camera.
|
||||
/** \return The current projection matrix of the camera. */
|
||||
virtual const core::matrix4& getProjectionMatrix() const =0;
|
||||
|
||||
//! Gets the current view matrix of the camera.
|
||||
/** \return The current view matrix of the camera. */
|
||||
virtual const core::matrix4& getViewMatrix() const =0;
|
||||
|
||||
//! Sets a custom view matrix affector.
|
||||
/** The matrix passed here, will be multiplied with the view
|
||||
matrix when it gets updated. This allows for custom camera
|
||||
setups like, for example, a reflection camera.
|
||||
\param affector The affector matrix. */
|
||||
virtual void setViewMatrixAffector(const core::matrix4& affector) =0;
|
||||
|
||||
//! Get the custom view matrix affector.
|
||||
/** \return The affector matrix. */
|
||||
virtual const core::matrix4& getViewMatrixAffector() const =0;
|
||||
|
||||
//! It is possible to send mouse and key events to the camera.
|
||||
/** Most cameras may ignore this input, but camera scene nodes
|
||||
which are created for example with
|
||||
ISceneManager::addCameraSceneNodeMaya or
|
||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||
this input for changing their position, look at target or
|
||||
whatever. */
|
||||
bool OnEvent(const SEvent& event) override =0;
|
||||
|
||||
//! Sets the look at target of the camera
|
||||
/** If the camera's target and rotation are bound ( @see
|
||||
bindTargetAndRotation() ) then calling this will also change
|
||||
the camera's scene node rotation to match the target.
|
||||
Note that setTarget uses the current absolute position
|
||||
internally, so if you changed setPosition since last rendering you must
|
||||
call updateAbsolutePosition before using this function.
|
||||
\param pos Look at target of the camera, in world co-ordinates. */
|
||||
virtual void setTarget(const core::vector3df& pos) =0;
|
||||
|
||||
//! Sets the rotation of the node.
|
||||
/** This only modifies the relative rotation of the node.
|
||||
If the camera's target and rotation are bound ( @see
|
||||
bindTargetAndRotation() ) then calling this will also change
|
||||
the camera's target to match the rotation.
|
||||
\param rotation New rotation of the node in degrees. */
|
||||
void setRotation(const core::vector3df& rotation) override =0;
|
||||
|
||||
//! Gets the current look at target of the camera
|
||||
/** \return The current look at target of the camera, in world co-ordinates */
|
||||
virtual const core::vector3df& getTarget() const =0;
|
||||
|
||||
//! Sets the up vector of the camera.
|
||||
/** \param pos: New upvector of the camera. */
|
||||
virtual void setUpVector(const core::vector3df& pos) =0;
|
||||
|
||||
//! Gets the up vector of the camera.
|
||||
/** \return The up vector of the camera, in world space. */
|
||||
virtual const core::vector3df& getUpVector() const =0;
|
||||
|
||||
//! Gets the value of the near plane of the camera.
|
||||
/** \return The value of the near plane of the camera. */
|
||||
virtual f32 getNearValue() const =0;
|
||||
|
||||
//! Gets the value of the far plane of the camera.
|
||||
/** \return The value of the far plane of the camera. */
|
||||
virtual f32 getFarValue() const =0;
|
||||
|
||||
//! Gets the aspect ratio of the camera.
|
||||
/** \return The aspect ratio of the camera. */
|
||||
virtual f32 getAspectRatio() const =0;
|
||||
|
||||
//! Gets the field of view of the camera.
|
||||
/** \return The field of view of the camera in radians. */
|
||||
virtual f32 getFOV() const =0;
|
||||
|
||||
//! Sets the value of the near clipping plane. (default: 1.0f)
|
||||
/** \param zn: New z near value. */
|
||||
virtual void setNearValue(f32 zn) =0;
|
||||
|
||||
//! Sets the value of the far clipping plane (default: 2000.0f)
|
||||
/** \param zf: New z far value. */
|
||||
virtual void setFarValue(f32 zf) =0;
|
||||
|
||||
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
||||
/** \param aspect: New aspect ratio. */
|
||||
virtual void setAspectRatio(f32 aspect) =0;
|
||||
|
||||
//! Sets the field of view (Default: PI / 2.5f)
|
||||
/** \param fovy: New field of view in radians. */
|
||||
virtual void setFOV(f32 fovy) =0;
|
||||
|
||||
//! Get the view frustum.
|
||||
/** \return The current view frustum. */
|
||||
virtual const SViewFrustum* getViewFrustum() const =0;
|
||||
|
||||
//! Disables or enables the camera to get key or mouse inputs.
|
||||
/** If this is set to true, the camera will respond to key
|
||||
inputs otherwise not. */
|
||||
virtual void setInputReceiverEnabled(bool enabled) =0;
|
||||
|
||||
//! Checks if the input receiver of the camera is currently enabled.
|
||||
virtual bool isInputReceiverEnabled() const =0;
|
||||
|
||||
//! Checks if a camera is orthogonal.
|
||||
virtual bool isOrthogonal() const
|
||||
{
|
||||
return IsOrthogonal;
|
||||
}
|
||||
|
||||
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
||||
/** When bound, calling setRotation() will update the camera's
|
||||
target position to be along its +Z axis, and likewise calling
|
||||
setTarget() will update its rotation so that its +Z axis will
|
||||
point at the target point. FPS camera use this binding by
|
||||
default; other cameras do not.
|
||||
\param bound True to bind the camera's scene node rotation
|
||||
and targeting, false to unbind them.
|
||||
@see getTargetAndRotationBinding() */
|
||||
virtual void bindTargetAndRotation(bool bound) =0;
|
||||
|
||||
//! Updates the matrices without uploading them to the driver
|
||||
virtual void updateMatrices() = 0;
|
||||
|
||||
//! Queries if the camera scene node's rotation and its target position are bound together.
|
||||
/** @see bindTargetAndRotation() */
|
||||
virtual bool getTargetAndRotationBinding(void) const =0;
|
||||
|
||||
protected:
|
||||
|
||||
void cloneMembers(const ICameraSceneNode* toCopyFrom)
|
||||
{
|
||||
IsOrthogonal = toCopyFrom->IsOrthogonal;
|
||||
}
|
||||
|
||||
bool IsOrthogonal;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,63 +1,61 @@
|
||||
// Copyright (C) 2013-2015 Patryk Nadrowski
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
||||
#define __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
||||
|
||||
#include "SExposedVideoData.h"
|
||||
#include "SIrrCreationParameters.h"
|
||||
#include <string>
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
// For system specific window contexts (used for OpenGL)
|
||||
class IContextManager : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
||||
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) =0;
|
||||
|
||||
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
||||
virtual void terminate() =0;
|
||||
|
||||
//! Create surface based on current window set
|
||||
virtual bool generateSurface() =0;
|
||||
|
||||
//! Destroy current surface
|
||||
virtual void destroySurface() =0;
|
||||
|
||||
//! Create context based on current surface
|
||||
virtual bool generateContext() =0;
|
||||
|
||||
//! Destroy current context
|
||||
virtual void destroyContext() =0;
|
||||
|
||||
//! Get current context
|
||||
virtual const SExposedVideoData& getContext() const =0;
|
||||
|
||||
//! Change render context, disable old and activate new defined by videoData
|
||||
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
||||
// When false: resets the context when videoData is set to 0 values.
|
||||
/** This is mostly used internally by IVideoDriver::beginScene().
|
||||
But if you want to switch threads which access your OpenGL driver you will have to
|
||||
call this function as follows:
|
||||
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
||||
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
||||
Note that only 1 thread at a time may access an OpenGL context. */
|
||||
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) =0;
|
||||
|
||||
//! Get the address of any OpenGL procedure (including core procedures).
|
||||
virtual void* getProcAddress(const std::string &procName) =0;
|
||||
|
||||
//! Swap buffers.
|
||||
virtual bool swapBuffers() =0;
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
// Copyright (C) 2013-2015 Patryk Nadrowski
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "SExposedVideoData.h"
|
||||
#include "SIrrCreationParameters.h"
|
||||
#include <string>
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
// For system specific window contexts (used for OpenGL)
|
||||
class IContextManager : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
||||
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) =0;
|
||||
|
||||
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
||||
virtual void terminate() =0;
|
||||
|
||||
//! Create surface based on current window set
|
||||
virtual bool generateSurface() =0;
|
||||
|
||||
//! Destroy current surface
|
||||
virtual void destroySurface() =0;
|
||||
|
||||
//! Create context based on current surface
|
||||
virtual bool generateContext() =0;
|
||||
|
||||
//! Destroy current context
|
||||
virtual void destroyContext() =0;
|
||||
|
||||
//! Get current context
|
||||
virtual const SExposedVideoData& getContext() const =0;
|
||||
|
||||
//! Change render context, disable old and activate new defined by videoData
|
||||
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
||||
// When false: resets the context when videoData is set to 0 values.
|
||||
/** This is mostly used internally by IVideoDriver::beginScene().
|
||||
But if you want to switch threads which access your OpenGL driver you will have to
|
||||
call this function as follows:
|
||||
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
||||
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
||||
Note that only 1 thread at a time may access an OpenGL context. */
|
||||
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) =0;
|
||||
|
||||
//! Get the address of any OpenGL procedure (including core procedures).
|
||||
virtual void* getProcAddress(const std::string &procName) =0;
|
||||
|
||||
//! Swap buffers.
|
||||
virtual bool swapBuffers() =0;
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
|
@ -1,199 +1,198 @@
|
||||
// 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_CURSOR_CONTROL_H_INCLUDED__
|
||||
#define __I_CURSOR_CONTROL_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "position2d.h"
|
||||
#include "rect.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Default icons for cursors
|
||||
enum ECURSOR_ICON
|
||||
{
|
||||
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
||||
ECI_NORMAL, // arrow
|
||||
ECI_CROSS, // Crosshair
|
||||
ECI_HAND, // Hand
|
||||
ECI_HELP, // Arrow and question mark
|
||||
ECI_IBEAM, // typical text-selection cursor
|
||||
ECI_NO, // should not click icon
|
||||
ECI_WAIT, // hourclass
|
||||
ECI_SIZEALL, // arrow in all directions
|
||||
ECI_SIZENESW, // resizes in direction north-east or south-west
|
||||
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
||||
ECI_SIZENS, // resizes in direction north or south
|
||||
ECI_SIZEWE, // resizes in direction west or east
|
||||
ECI_UP, // up-arrow
|
||||
|
||||
// Implementer note: Should we add system specific cursors, which use guaranteed the system icons,
|
||||
// then I would recommend using a naming scheme like ECI_W32_CROSS, ECI_X11_CROSSHAIR and adding those
|
||||
// additionally.
|
||||
|
||||
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
||||
};
|
||||
|
||||
//! Names for ECURSOR_ICON
|
||||
const c8* const GUICursorIconNames[ECI_COUNT+1] =
|
||||
{
|
||||
"normal",
|
||||
"cross",
|
||||
"hand",
|
||||
"help",
|
||||
"ibeam",
|
||||
"no",
|
||||
"wait",
|
||||
"sizeall",
|
||||
"sizenesw",
|
||||
"sizenwse",
|
||||
"sizens",
|
||||
"sizewe",
|
||||
"sizeup",
|
||||
0
|
||||
};
|
||||
|
||||
//! structure used to set sprites as cursors.
|
||||
struct SCursorSprite
|
||||
{
|
||||
SCursorSprite()
|
||||
: SpriteBank(0), SpriteId(-1)
|
||||
{
|
||||
}
|
||||
|
||||
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) )
|
||||
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
||||
{
|
||||
}
|
||||
|
||||
IGUISpriteBank * SpriteBank;
|
||||
s32 SpriteId;
|
||||
core::position2d<s32> HotSpot;
|
||||
};
|
||||
|
||||
//! platform specific behavior flags for the cursor
|
||||
enum ECURSOR_PLATFORM_BEHAVIOR
|
||||
{
|
||||
//! default - no platform specific behavior
|
||||
ECPB_NONE = 0,
|
||||
|
||||
//! On X11 try caching cursor updates as XQueryPointer calls can be expensive.
|
||||
/** Update cursor positions only when the irrlicht timer has been updated or the timer is stopped.
|
||||
This means you usually get one cursor update per device->run() which will be fine in most cases.
|
||||
See this forum-thread for a more detailed explanation:
|
||||
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
||||
*/
|
||||
ECPB_X11_CACHE_UPDATES = 1
|
||||
};
|
||||
|
||||
//! Interface to manipulate the mouse cursor.
|
||||
class ICursorControl : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Changes the visible state of the mouse cursor.
|
||||
/** \param visible: The new visible state. If true, the cursor will be visible,
|
||||
if false, it will be invisible. */
|
||||
virtual void setVisible(bool visible) = 0;
|
||||
|
||||
//! Returns if the cursor is currently visible.
|
||||
/** \return True if the cursor flag is set to visible, false if not. */
|
||||
virtual bool isVisible() const = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** The position must be
|
||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window.
|
||||
\param pos New position of the cursor. */
|
||||
virtual void setPosition(const core::position2d<f32> &pos) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** The position must be
|
||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window.
|
||||
\param x New x-coord of the cursor.
|
||||
\param y New x-coord of the cursor. */
|
||||
virtual void setPosition(f32 x, f32 y) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** \param pos: New position of the cursor. The coordinates are pixel units. */
|
||||
virtual void setPosition(const core::position2d<s32> &pos) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** \param x New x-coord of the cursor. The coordinates are pixel units.
|
||||
\param y New y-coord of the cursor. The coordinates are pixel units. */
|
||||
virtual void setPosition(s32 x, s32 y) = 0;
|
||||
|
||||
//! Returns the current position of the mouse cursor.
|
||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||
When false return the last known (buffered) position ( this is useful to
|
||||
check what has become of a setPosition call with float numbers).
|
||||
\return Returns the current position of the cursor. The returned position
|
||||
is the position of the mouse cursor in pixel units. */
|
||||
virtual const core::position2d<s32>& getPosition(bool updateCursor=true) = 0;
|
||||
|
||||
//! Returns the current position of the mouse cursor.
|
||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||
When false return the last known (buffered) position (this is
|
||||
useful to check what has become of a setPosition call with float numbers
|
||||
and is often different from the values you passed in setPosition).
|
||||
\return Returns the current position of the cursor. The returned position
|
||||
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window. */
|
||||
virtual core::position2d<f32> getRelativePosition(bool updateCursor=true) = 0;
|
||||
|
||||
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
||||
/** If this rect is set, the cursor position is not being calculated relative to
|
||||
the rendering window but to this rect. You can set the rect pointer to 0 to disable
|
||||
this feature again. This feature is useful when rendering into parts of foreign windows
|
||||
for example in an editor.
|
||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
||||
|
||||
|
||||
//! Sets the active cursor icon
|
||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||
virtual void setActiveIcon(ECURSOR_ICON iconId) {}
|
||||
|
||||
//! Gets the currently active icon
|
||||
virtual ECURSOR_ICON getActiveIcon() const { return gui::ECI_NORMAL; }
|
||||
|
||||
//! Add a custom sprite as cursor icon.
|
||||
/** \return Identification for the icon */
|
||||
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; }
|
||||
|
||||
//! replace a cursor icon.
|
||||
/** Changing cursor icons is so far only supported on Win32 and Linux
|
||||
Note that this only changes the icons within your application, system cursors outside your
|
||||
application will not be affected.
|
||||
*/
|
||||
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {}
|
||||
|
||||
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
||||
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); }
|
||||
|
||||
//! Set platform specific behavior flags.
|
||||
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
||||
|
||||
//! Return platform specific behavior.
|
||||
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
||||
*/
|
||||
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "position2d.h"
|
||||
#include "rect.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Default icons for cursors
|
||||
enum ECURSOR_ICON
|
||||
{
|
||||
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
||||
ECI_NORMAL, // arrow
|
||||
ECI_CROSS, // Crosshair
|
||||
ECI_HAND, // Hand
|
||||
ECI_HELP, // Arrow and question mark
|
||||
ECI_IBEAM, // typical text-selection cursor
|
||||
ECI_NO, // should not click icon
|
||||
ECI_WAIT, // hourglass
|
||||
ECI_SIZEALL, // arrow in all directions
|
||||
ECI_SIZENESW, // resizes in direction north-east or south-west
|
||||
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
||||
ECI_SIZENS, // resizes in direction north or south
|
||||
ECI_SIZEWE, // resizes in direction west or east
|
||||
ECI_UP, // up-arrow
|
||||
|
||||
// Implementer note: Should we add system specific cursors, which use guaranteed the system icons,
|
||||
// then I would recommend using a naming scheme like ECI_W32_CROSS, ECI_X11_CROSSHAIR and adding those
|
||||
// additionally.
|
||||
|
||||
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
||||
};
|
||||
|
||||
//! Names for ECURSOR_ICON
|
||||
const c8* const GUICursorIconNames[ECI_COUNT+1] =
|
||||
{
|
||||
"normal",
|
||||
"cross",
|
||||
"hand",
|
||||
"help",
|
||||
"ibeam",
|
||||
"no",
|
||||
"wait",
|
||||
"sizeall",
|
||||
"sizenesw",
|
||||
"sizenwse",
|
||||
"sizens",
|
||||
"sizewe",
|
||||
"sizeup",
|
||||
0
|
||||
};
|
||||
|
||||
//! structure used to set sprites as cursors.
|
||||
struct SCursorSprite
|
||||
{
|
||||
SCursorSprite()
|
||||
: SpriteBank(0), SpriteId(-1)
|
||||
{
|
||||
}
|
||||
|
||||
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) )
|
||||
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
||||
{
|
||||
}
|
||||
|
||||
IGUISpriteBank * SpriteBank;
|
||||
s32 SpriteId;
|
||||
core::position2d<s32> HotSpot;
|
||||
};
|
||||
|
||||
//! platform specific behavior flags for the cursor
|
||||
enum ECURSOR_PLATFORM_BEHAVIOR
|
||||
{
|
||||
//! default - no platform specific behavior
|
||||
ECPB_NONE = 0,
|
||||
|
||||
//! On X11 try caching cursor updates as XQueryPointer calls can be expensive.
|
||||
/** Update cursor positions only when the irrlicht timer has been updated or the timer is stopped.
|
||||
This means you usually get one cursor update per device->run() which will be fine in most cases.
|
||||
See this forum-thread for a more detailed explanation:
|
||||
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
||||
*/
|
||||
ECPB_X11_CACHE_UPDATES = 1
|
||||
};
|
||||
|
||||
//! Interface to manipulate the mouse cursor.
|
||||
class ICursorControl : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Changes the visible state of the mouse cursor.
|
||||
/** \param visible: The new visible state. If true, the cursor will be visible,
|
||||
if false, it will be invisible. */
|
||||
virtual void setVisible(bool visible) = 0;
|
||||
|
||||
//! Returns if the cursor is currently visible.
|
||||
/** \return True if the cursor flag is set to visible, false if not. */
|
||||
virtual bool isVisible() const = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** The position must be
|
||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window.
|
||||
\param pos New position of the cursor. */
|
||||
virtual void setPosition(const core::position2d<f32> &pos) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** The position must be
|
||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window.
|
||||
\param x New x-coord of the cursor.
|
||||
\param y New x-coord of the cursor. */
|
||||
virtual void setPosition(f32 x, f32 y) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** \param pos: New position of the cursor. The coordinates are pixel units. */
|
||||
virtual void setPosition(const core::position2d<s32> &pos) = 0;
|
||||
|
||||
//! Sets the new position of the cursor.
|
||||
/** \param x New x-coord of the cursor. The coordinates are pixel units.
|
||||
\param y New y-coord of the cursor. The coordinates are pixel units. */
|
||||
virtual void setPosition(s32 x, s32 y) = 0;
|
||||
|
||||
//! Returns the current position of the mouse cursor.
|
||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||
When false return the last known (buffered) position ( this is useful to
|
||||
check what has become of a setPosition call with float numbers).
|
||||
\return Returns the current position of the cursor. The returned position
|
||||
is the position of the mouse cursor in pixel units. */
|
||||
virtual const core::position2d<s32>& getPosition(bool updateCursor=true) = 0;
|
||||
|
||||
//! Returns the current position of the mouse cursor.
|
||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||
When false return the last known (buffered) position (this is
|
||||
useful to check what has become of a setPosition call with float numbers
|
||||
and is often different from the values you passed in setPosition).
|
||||
\return Returns the current position of the cursor. The returned position
|
||||
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||
render window. */
|
||||
virtual core::position2d<f32> getRelativePosition(bool updateCursor=true) = 0;
|
||||
|
||||
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
||||
/** If this rect is set, the cursor position is not being calculated relative to
|
||||
the rendering window but to this rect. You can set the rect pointer to 0 to disable
|
||||
this feature again. This feature is useful when rendering into parts of foreign windows
|
||||
for example in an editor.
|
||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||
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
|
||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||
virtual void setActiveIcon(ECURSOR_ICON iconId) {}
|
||||
|
||||
//! Gets the currently active icon
|
||||
virtual ECURSOR_ICON getActiveIcon() const { return gui::ECI_NORMAL; }
|
||||
|
||||
//! Add a custom sprite as cursor icon.
|
||||
/** \return Identification for the icon */
|
||||
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; }
|
||||
|
||||
//! replace a cursor icon.
|
||||
/** Changing cursor icons is so far only supported on Win32 and Linux
|
||||
Note that this only changes the icons within your application, system cursors outside your
|
||||
application will not be affected.
|
||||
*/
|
||||
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {}
|
||||
|
||||
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
||||
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); }
|
||||
|
||||
//! Set platform specific behavior flags.
|
||||
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
||||
|
||||
//! Return platform specific behavior.
|
||||
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
||||
*/
|
||||
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,42 +1,37 @@
|
||||
// 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_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
||||
#define __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! Dummy scene node for adding additional transformations to the scene graph.
|
||||
/** This scene node does not render itself, and does not respond to set/getPosition,
|
||||
set/getRotation and set/getScale. Its just a simple scene node that takes a
|
||||
matrix as relative transformation, making it possible to insert any transformation
|
||||
anywhere into the scene graph.
|
||||
This scene node is for example used by the IAnimatedMeshSceneNode for emulating
|
||||
joint scene nodes when playing skeletal animations.
|
||||
*/
|
||||
class IDummyTransformationSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
|
||||
: ISceneNode(parent, mgr, id) {}
|
||||
|
||||
//! Returns a reference to the current relative transformation matrix.
|
||||
/** This is the matrix, this scene node uses instead of scale, translation
|
||||
and rotation. */
|
||||
virtual core::matrix4& getRelativeTransformationMatrix() = 0;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISceneNode.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
//! Dummy scene node for adding additional transformations to the scene graph.
|
||||
/** This scene node does not render itself, and does not respond to set/getPosition,
|
||||
set/getRotation and set/getScale. Its just a simple scene node that takes a
|
||||
matrix as relative transformation, making it possible to insert any transformation
|
||||
anywhere into the scene graph.
|
||||
This scene node is for example used by the IAnimatedMeshSceneNode for emulating
|
||||
joint scene nodes when playing skeletal animations.
|
||||
*/
|
||||
class IDummyTransformationSceneNode : public ISceneNode
|
||||
{
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
|
||||
: ISceneNode(parent, mgr, id) {}
|
||||
|
||||
//! Returns a reference to the current relative transformation matrix.
|
||||
/** This is the matrix, this scene node uses instead of scale, translation
|
||||
and rotation. */
|
||||
virtual core::matrix4& getRelativeTransformationMatrix() = 0;
|
||||
};
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
@ -1,211 +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 __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
|
||||
#define __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
|
||||
|
||||
#include "IMeshBuffer.h"
|
||||
#include "IVertexBuffer.h"
|
||||
#include "IIndexBuffer.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
/** a dynamic meshBuffer */
|
||||
class IDynamicMeshBuffer : public IMeshBuffer
|
||||
{
|
||||
public:
|
||||
virtual IVertexBuffer &getVertexBuffer() const =0;
|
||||
virtual IIndexBuffer &getIndexBuffer() const =0;
|
||||
|
||||
virtual void setVertexBuffer(IVertexBuffer *vertexBuffer) =0;
|
||||
virtual void setIndexBuffer(IIndexBuffer *indexBuffer) =0;
|
||||
|
||||
//! Get the material of this meshbuffer
|
||||
/** \return Material of this buffer. */
|
||||
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Get the material of this meshbuffer
|
||||
/** \return Material of this buffer. */
|
||||
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Get the axis aligned bounding box of this meshbuffer.
|
||||
/** \return Axis aligned bounding box of this buffer. */
|
||||
virtual const core::aabbox3df& getBoundingBox() const _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Set axis aligned bounding box
|
||||
/** \param box User defined axis aligned bounding box to use
|
||||
for this buffer. */
|
||||
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Recalculates the bounding box. Should be called if the mesh changed.
|
||||
virtual void recalculateBoundingBox() _IRR_OVERRIDE_ =0;
|
||||
|
||||
//! Append the vertices and indices to the current buffer
|
||||
/** Only works for compatible vertex types.
|
||||
\param vertices Pointer to a vertex array.
|
||||
\param numVertices Number of vertices in the array.
|
||||
\param indices Pointer to index array.
|
||||
\param numIndices Number of indices in array. */
|
||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//! 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) _IRR_OVERRIDE_
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// ------------------- To be removed? ------------------- //
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().getHardwareMappingHint();
|
||||
}
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getIndexBuffer().getHardwareMappingHint();
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||
getVertexBuffer().setHardwareMappingHint(NewMappingHint);
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
getIndexBuffer().setHardwareMappingHint(NewMappingHint);
|
||||
}
|
||||
|
||||
//! flags the mesh as changed, reloads hardware buffers
|
||||
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
|
||||
{
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||
getVertexBuffer().setDirty();
|
||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||
getIndexBuffer().setDirty();
|
||||
}
|
||||
|
||||
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().getChangedID();
|
||||
}
|
||||
|
||||
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getIndexBuffer().getChangedID();
|
||||
}
|
||||
|
||||
// ------------------- Old interface ------------------- //
|
||||
|
||||
//! Get type of vertex data which is stored in this meshbuffer.
|
||||
/** \return Vertex type of this buffer. */
|
||||
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().getType();
|
||||
}
|
||||
|
||||
//! Get access to vertex data. The data is an array of vertices.
|
||||
/** Which vertex type is used can be determined by getVertexType().
|
||||
\return Pointer to array of vertices. */
|
||||
virtual const void* getVertices() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().getData();
|
||||
}
|
||||
|
||||
//! Get access to vertex data. The data is an array of vertices.
|
||||
/** Which vertex type is used can be determined by getVertexType().
|
||||
\return Pointer to array of vertices. */
|
||||
virtual void* getVertices() _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().getData();
|
||||
}
|
||||
|
||||
//! Get amount of vertices in meshbuffer.
|
||||
/** \return Number of vertices in this buffer. */
|
||||
virtual u32 getVertexCount() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer().size();
|
||||
}
|
||||
|
||||
//! Get type of index data which is stored in this meshbuffer.
|
||||
/** \return Index type of this buffer. */
|
||||
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getIndexBuffer().getType();
|
||||
}
|
||||
|
||||
//! Get access to indices.
|
||||
/** \return Pointer to indices array. */
|
||||
virtual const u16* getIndices() const _IRR_OVERRIDE_
|
||||
{
|
||||
return (u16*)getIndexBuffer().getData();
|
||||
}
|
||||
|
||||
//! Get access to indices.
|
||||
/** \return Pointer to indices array. */
|
||||
virtual u16* getIndices() _IRR_OVERRIDE_
|
||||
{
|
||||
return (u16*)getIndexBuffer().getData();
|
||||
}
|
||||
|
||||
//! Get amount of indices in this meshbuffer.
|
||||
/** \return Number of indices in this buffer. */
|
||||
virtual u32 getIndexCount() const _IRR_OVERRIDE_
|
||||
{
|
||||
return getIndexBuffer().size();
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].Pos;
|
||||
}
|
||||
|
||||
//! returns position of vertex i
|
||||
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].Pos;
|
||||
}
|
||||
|
||||
//! returns texture coords of vertex i
|
||||
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].TCoords;
|
||||
}
|
||||
|
||||
//! returns texture coords of vertex i
|
||||
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].TCoords;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].Normal;
|
||||
}
|
||||
|
||||
//! returns normal of vertex i
|
||||
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
|
||||
{
|
||||
return getVertexBuffer()[i].Normal;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,148 +1,144 @@
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt/ Thomas Alten
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __I_FILE_ARCHIVE_H_INCLUDED__
|
||||
#define __I_FILE_ARCHIVE_H_INCLUDED__
|
||||
|
||||
#include "IReadFile.h"
|
||||
#include "IFileList.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! FileSystemType: which filesystem should be used for e.g. browsing
|
||||
enum EFileSystemType
|
||||
{
|
||||
FILESYSTEM_NATIVE = 0, // Native OS FileSystem
|
||||
FILESYSTEM_VIRTUAL // Virtual FileSystem
|
||||
};
|
||||
|
||||
//! Contains the different types of archives
|
||||
enum E_FILE_ARCHIVE_TYPE
|
||||
{
|
||||
//! A PKZIP archive
|
||||
EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0),
|
||||
|
||||
//! A gzip archive
|
||||
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
|
||||
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
||||
|
||||
//! The type of this archive is unknown
|
||||
EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||
};
|
||||
|
||||
//! The FileArchive manages archives and provides access to files inside them.
|
||||
class IFileArchive : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Opens a file based on its name
|
||||
/** Creates and returns a new IReadFile for a file in the archive.
|
||||
\param filename The file to open
|
||||
\return Returns A pointer to the created file on success,
|
||||
or 0 on failure. */
|
||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||
|
||||
//! Opens a file based on its position in the file list.
|
||||
/** Creates and returns
|
||||
\param index The zero based index of the file.
|
||||
\return Returns a pointer to the created file on success, or 0 on failure. */
|
||||
virtual IReadFile* createAndOpenFile(u32 index) =0;
|
||||
|
||||
//! Returns the complete file tree
|
||||
/** \return Returns the complete directory tree for the archive,
|
||||
including all files and folders */
|
||||
virtual const IFileList* getFileList() const =0;
|
||||
|
||||
//! get the archive type
|
||||
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
||||
|
||||
//! return the name (id) of the file Archive
|
||||
virtual const io::path& getArchiveName() const =0;
|
||||
|
||||
//! Add a directory in the archive and all it's files to the FileList
|
||||
/** Only needed for file-archives which have no information about their own
|
||||
directory structure. In that case the user must add directories manually.
|
||||
Currently this is necessary for archives of type EFAT_ANDROID_ASSET.
|
||||
The root-path itself is already set by the engine.
|
||||
If directories are not added manually opening files might still work,
|
||||
but checks if file exists will fail.
|
||||
*/
|
||||
virtual void addDirectoryToFileList(const io::path &filename) {}
|
||||
|
||||
//! An optionally used password string
|
||||
/** This variable is publicly accessible from the interface in order to
|
||||
avoid single access patterns to this place, and hence allow some more
|
||||
obscurity.
|
||||
*/
|
||||
core::stringc Password;
|
||||
};
|
||||
|
||||
//! Class which is able to create an archive from a file.
|
||||
/** If you want the Irrlicht Engine be able to load archives of
|
||||
currently unsupported file formats (e.g .wad), then implement
|
||||
this and add your new Archive loader with
|
||||
IFileSystem::addArchiveLoader() to the engine. */
|
||||
class IArchiveLoader : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check based on the file extension (e.g. ".zip")
|
||||
\param filename Name of file to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(const path& filename) const =0;
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** This check may look into the file.
|
||||
\param file File handle to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const =0;
|
||||
|
||||
//! Check to see if the loader can create archives of this type.
|
||||
/** Check based on the archive type.
|
||||
\param fileType The archive type to check.
|
||||
\return True if the archive loader supports this type, false if not */
|
||||
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0;
|
||||
|
||||
//! Creates an archive from the filename
|
||||
/** \param filename File to use.
|
||||
\param ignoreCase Searching is performed without regarding the case
|
||||
\param ignorePaths Files are searched for without checking for the directories
|
||||
\return Pointer to newly created archive, or 0 upon error. */
|
||||
virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0;
|
||||
|
||||
//! Creates an archive from the file
|
||||
/** \param file File handle to use.
|
||||
\param ignoreCase Searching is performed without regarding the case
|
||||
\param ignorePaths Files are searched for without checking for the directories
|
||||
\return Pointer to newly created archive, or 0 upon error. */
|
||||
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt/ Thomas Alten
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReadFile.h"
|
||||
#include "IFileList.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! FileSystemType: which filesystem should be used for e.g. browsing
|
||||
enum EFileSystemType
|
||||
{
|
||||
FILESYSTEM_NATIVE = 0, // Native OS FileSystem
|
||||
FILESYSTEM_VIRTUAL // Virtual FileSystem
|
||||
};
|
||||
|
||||
//! Contains the different types of archives
|
||||
enum E_FILE_ARCHIVE_TYPE
|
||||
{
|
||||
//! A PKZIP archive
|
||||
EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0),
|
||||
|
||||
//! A gzip archive
|
||||
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
|
||||
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
||||
|
||||
//! The type of this archive is unknown
|
||||
EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||
};
|
||||
|
||||
//! The FileArchive manages archives and provides access to files inside them.
|
||||
class IFileArchive : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Opens a file based on its name
|
||||
/** Creates and returns a new IReadFile for a file in the archive.
|
||||
\param filename The file to open
|
||||
\return Returns A pointer to the created file on success,
|
||||
or 0 on failure. */
|
||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||
|
||||
//! Opens a file based on its position in the file list.
|
||||
/** Creates and returns
|
||||
\param index The zero based index of the file.
|
||||
\return Returns a pointer to the created file on success, or 0 on failure. */
|
||||
virtual IReadFile* createAndOpenFile(u32 index) =0;
|
||||
|
||||
//! Returns the complete file tree
|
||||
/** \return Returns the complete directory tree for the archive,
|
||||
including all files and folders */
|
||||
virtual const IFileList* getFileList() const =0;
|
||||
|
||||
//! get the archive type
|
||||
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
||||
|
||||
//! return the name (id) of the file Archive
|
||||
virtual const io::path& getArchiveName() const =0;
|
||||
|
||||
//! Add a directory in the archive and all it's files to the FileList
|
||||
/** Only needed for file-archives which have no information about their own
|
||||
directory structure. In that case the user must add directories manually.
|
||||
Currently this is necessary for archives of type EFAT_ANDROID_ASSET.
|
||||
The root-path itself is already set by the engine.
|
||||
If directories are not added manually opening files might still work,
|
||||
but checks if file exists will fail.
|
||||
*/
|
||||
virtual void addDirectoryToFileList(const io::path &filename) {}
|
||||
|
||||
//! An optionally used password string
|
||||
/** This variable is publicly accessible from the interface in order to
|
||||
avoid single access patterns to this place, and hence allow some more
|
||||
obscurity.
|
||||
*/
|
||||
core::stringc Password;
|
||||
};
|
||||
|
||||
//! Class which is able to create an archive from a file.
|
||||
/** If you want the Irrlicht Engine be able to load archives of
|
||||
currently unsupported file formats (e.g .wad), then implement
|
||||
this and add your new Archive loader with
|
||||
IFileSystem::addArchiveLoader() to the engine. */
|
||||
class IArchiveLoader : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check based on the file extension (e.g. ".zip")
|
||||
\param filename Name of file to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(const path& filename) const =0;
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** This check may look into the file.
|
||||
\param file File handle to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const =0;
|
||||
|
||||
//! Check to see if the loader can create archives of this type.
|
||||
/** Check based on the archive type.
|
||||
\param fileType The archive type to check.
|
||||
\return True if the archive loader supports this type, false if not */
|
||||
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0;
|
||||
|
||||
//! Creates an archive from the filename
|
||||
/** \param filename File to use.
|
||||
\param ignoreCase Searching is performed without regarding the case
|
||||
\param ignorePaths Files are searched for without checking for the directories
|
||||
\return Pointer to newly created archive, or 0 upon error. */
|
||||
virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0;
|
||||
|
||||
//! Creates an archive from the file
|
||||
/** \param file File handle to use.
|
||||
\param ignoreCase Searching is performed without regarding the case
|
||||
\param ignorePaths Files are searched for without checking for the directories
|
||||
\return Pointer to newly created archive, or 0 upon error. */
|
||||
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
@ -1,94 +1,89 @@
|
||||
// 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_FILE_LIST_H_INCLUDED__
|
||||
#define __I_FILE_LIST_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! Provides a list of files and folders.
|
||||
/** File lists usually contain a list of all files in a given folder,
|
||||
but can also contain a complete directory structure. */
|
||||
class IFileList : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Get the number of files in the filelist.
|
||||
/** \return Amount of files and directories in the file list. */
|
||||
virtual u32 getFileCount() const = 0;
|
||||
|
||||
//! Gets the name of a file in the list, based on an index.
|
||||
/** The path is not included in this name. Use getFullFileName for this.
|
||||
\param index is the zero based index of the file which name should
|
||||
be returned. The index must be less than the amount getFileCount() returns.
|
||||
\return File name of the file. Returns 0, if an error occurred. */
|
||||
virtual const io::path& getFileName(u32 index) const = 0;
|
||||
|
||||
//! Gets the full name of a file in the list including the path, based on an index.
|
||||
/** \param index is the zero based index of the file which name should
|
||||
be returned. The index must be less than the amount getFileCount() returns.
|
||||
\return File name of the file. Returns 0 if an error occurred. */
|
||||
virtual const io::path& getFullFileName(u32 index) const = 0;
|
||||
|
||||
//! Returns the size of a file in the file list, based on an index.
|
||||
/** \param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The size of the file in bytes. */
|
||||
virtual u32 getFileSize(u32 index) const = 0;
|
||||
|
||||
//! Returns the file offset of a file in the file list, based on an index.
|
||||
/** \param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The offset of the file in bytes. */
|
||||
virtual u32 getFileOffset(u32 index) const = 0;
|
||||
|
||||
//! Returns the ID of a file in the file list, based on an index.
|
||||
/** This optional ID can be used to link the file list entry to information held
|
||||
elsewhere. For example this could be an index in an IFileArchive, linking the entry
|
||||
to its data offset, uncompressed size and CRC.
|
||||
\param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The ID of the file. */
|
||||
virtual u32 getID(u32 index) const = 0;
|
||||
|
||||
//! Check if the file is a directory
|
||||
/** \param index The zero based index which will be checked. The index
|
||||
must be less than the amount getFileCount() returns.
|
||||
\return True if the file is a directory, else false. */
|
||||
virtual bool isDirectory(u32 index) const = 0;
|
||||
|
||||
//! Searches for a file or folder in the list
|
||||
/** Searches for a file by name
|
||||
\param filename The name of the file to search for.
|
||||
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
||||
\return Returns the index of the file in the file list, or -1 if
|
||||
no matching name name was found. */
|
||||
virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0;
|
||||
|
||||
//! Returns the base path of the file list
|
||||
virtual const io::path& getPath() const = 0;
|
||||
|
||||
//! Add as a file or folder to the list
|
||||
/** \param fullPath The file name including path, from the root of the file list.
|
||||
\param isDirectory True if this is a directory rather than a file.
|
||||
\param offset The file offset inside an archive
|
||||
\param size The size of the file in bytes.
|
||||
\param id The ID of the file in the archive which owns it */
|
||||
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0;
|
||||
|
||||
//! Sorts the file list. You should call this after adding any items to the file list
|
||||
virtual void sort() = 0;
|
||||
};
|
||||
|
||||
} // end namespace irr
|
||||
} // end namespace io
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
|
||||
//! Provides a list of files and folders.
|
||||
/** File lists usually contain a list of all files in a given folder,
|
||||
but can also contain a complete directory structure. */
|
||||
class IFileList : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Get the number of files in the filelist.
|
||||
/** \return Amount of files and directories in the file list. */
|
||||
virtual u32 getFileCount() const = 0;
|
||||
|
||||
//! Gets the name of a file in the list, based on an index.
|
||||
/** The path is not included in this name. Use getFullFileName for this.
|
||||
\param index is the zero based index of the file which name should
|
||||
be returned. The index must be less than the amount getFileCount() returns.
|
||||
\return File name of the file. Returns 0, if an error occurred. */
|
||||
virtual const io::path& getFileName(u32 index) const = 0;
|
||||
|
||||
//! Gets the full name of a file in the list including the path, based on an index.
|
||||
/** \param index is the zero based index of the file which name should
|
||||
be returned. The index must be less than the amount getFileCount() returns.
|
||||
\return File name of the file. Returns 0 if an error occurred. */
|
||||
virtual const io::path& getFullFileName(u32 index) const = 0;
|
||||
|
||||
//! Returns the size of a file in the file list, based on an index.
|
||||
/** \param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The size of the file in bytes. */
|
||||
virtual u32 getFileSize(u32 index) const = 0;
|
||||
|
||||
//! Returns the file offset of a file in the file list, based on an index.
|
||||
/** \param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The offset of the file in bytes. */
|
||||
virtual u32 getFileOffset(u32 index) const = 0;
|
||||
|
||||
//! Returns the ID of a file in the file list, based on an index.
|
||||
/** This optional ID can be used to link the file list entry to information held
|
||||
elsewhere. For example this could be an index in an IFileArchive, linking the entry
|
||||
to its data offset, uncompressed size and CRC.
|
||||
\param index is the zero based index of the file which should be returned.
|
||||
The index must be less than the amount getFileCount() returns.
|
||||
\return The ID of the file. */
|
||||
virtual u32 getID(u32 index) const = 0;
|
||||
|
||||
//! Check if the file is a directory
|
||||
/** \param index The zero based index which will be checked. The index
|
||||
must be less than the amount getFileCount() returns.
|
||||
\return True if the file is a directory, else false. */
|
||||
virtual bool isDirectory(u32 index) const = 0;
|
||||
|
||||
//! Searches for a file or folder in the list
|
||||
/** Searches for a file by name
|
||||
\param filename The name of the file to search for.
|
||||
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
||||
\return Returns the index of the file in the file list, or -1 if
|
||||
no matching name name was found. */
|
||||
virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0;
|
||||
|
||||
//! Returns the base path of the file list
|
||||
virtual const io::path& getPath() const = 0;
|
||||
|
||||
//! Add as a file or folder to the list
|
||||
/** \param fullPath The file name including path, from the root of the file list.
|
||||
\param isDirectory True if this is a directory rather than a file.
|
||||
\param offset The file offset inside an archive
|
||||
\param size The size of the file in bytes.
|
||||
\param id The ID of the file in the archive which owns it */
|
||||
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0;
|
||||
|
||||
//! Sorts the file list. You should call this after adding any items to the file list
|
||||
virtual void sort() = 0;
|
||||
};
|
||||
|
||||
} // end namespace irr
|
||||
} // end namespace io
|
||||
|
@ -1,333 +1,269 @@
|
||||
// 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_FILE_SYSTEM_H_INCLUDED__
|
||||
#define __I_FILE_SYSTEM_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "IFileArchive.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class IVideoDriver;
|
||||
} // end namespace video
|
||||
namespace io
|
||||
{
|
||||
|
||||
class IReadFile;
|
||||
class IWriteFile;
|
||||
class IFileList;
|
||||
class IAttributes;
|
||||
|
||||
|
||||
//! 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
|
||||
need to know where every file is located. A file could be in a .zip-Archive or
|
||||
as file on disk, using the IFileSystem makes no difference to this. */
|
||||
class IFileSystem : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Opens a file for read access.
|
||||
/** \param filename: Name of file to open.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||
|
||||
//! Creates an IReadFile interface for accessing memory like a file.
|
||||
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
||||
\param memory: A pointer to the start of the file in memory
|
||||
\param len: The length of the memory in bytes
|
||||
\param fileName: The name given to this file
|
||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||
along with the IReadFile when it is dropped.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||
|
||||
//! Creates an IReadFile interface for accessing files inside files.
|
||||
/** This is useful e.g. for archives.
|
||||
\param fileName: The name given to this file
|
||||
\param alreadyOpenedFile: Pointer to the enclosing file
|
||||
\param pos: Start of the file inside alreadyOpenedFile
|
||||
\param areaSize: The length of the file
|
||||
\return A pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IReadFile* createLimitReadFile(const path& fileName,
|
||||
IReadFile* alreadyOpenedFile, long pos, long areaSize) =0;
|
||||
|
||||
//! Creates an IWriteFile interface for accessing memory like a file.
|
||||
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
||||
You are responsible for allocating enough memory.
|
||||
\param memory: A pointer to the start of the file in memory (allocated by you)
|
||||
\param len: The length of the memory in bytes
|
||||
\param fileName: The name given to this file
|
||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||
along with the IWriteFile when it is dropped.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||
|
||||
|
||||
//! Opens a file for write access.
|
||||
/** \param filename: Name of file to open.
|
||||
\param append: If the file already exist, all write operations are
|
||||
appended to the file.
|
||||
\return Pointer to the created file interface. 0 is returned, if the
|
||||
file could not created or opened for writing.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** After calling this, the Irrlicht Engine will also search and open
|
||||
files directly from this archive. 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 just renamed .zip files. By
|
||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||
archives. You can provide your own archive types by implementing
|
||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||
techniques lzma and bzip2.
|
||||
\param filename: Filename of the 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.
|
||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||
the type of archive will depend on the extension of the file name. If
|
||||
you use a different extension then you can use this parameter to force
|
||||
a specific type of archive.
|
||||
\param password An optional password, which is used in case of encrypted archives.
|
||||
\param retArchive A pointer that will be set to the archive that is added.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(const path& filename, bool ignoreCase=true,
|
||||
bool ignorePaths=true,
|
||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||
const core::stringc& password="",
|
||||
IFileArchive** retArchive=0) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** After calling this, the Irrlicht Engine will also search and open
|
||||
files directly from this archive. 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 just renamed .zip files. By
|
||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||
archives. You can provide your own archive types by implementing
|
||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||
techniques lzma and bzip2.
|
||||
If you want to add a directory as an archive, prefix its name with a
|
||||
slash in order to let Irrlicht recognize it as a folder mount (mypath/).
|
||||
Using this technique one can build up a search order, because archives
|
||||
are read first, and can be used more easily with relative filenames.
|
||||
\param file: 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.
|
||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||
the type of archive will depend on the extension of the file name. If
|
||||
you use a different extension then you can use this parameter to force
|
||||
a specific type of archive.
|
||||
\param password An optional password, which is used in case of encrypted archives.
|
||||
\param retArchive A pointer that will be set to the archive that is added.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
||||
bool ignorePaths=true,
|
||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||
const core::stringc& password="",
|
||||
IFileArchive** retArchive=0) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** \param archive: The archive to add to the file system.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(IFileArchive* archive) =0;
|
||||
|
||||
//! Get the number of archives currently attached to the file system
|
||||
virtual u32 getFileArchiveCount() const =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes.
|
||||
\param index: The index of the archive to remove
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(u32 index) =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes. Note that a relative filename might be
|
||||
interpreted differently on each call, depending on the current working
|
||||
directory. In case you want to remove an archive that was added using
|
||||
a relative path name, you have to change to the same working directory
|
||||
again. This means, that the filename given on creation is not an
|
||||
identifier for the archive, but just a usual filename that is used for
|
||||
locating the archive to work with.
|
||||
\param filename The archive pointed to by the name will be removed
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(const path& filename) =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes.
|
||||
\param archive The archive to remove.
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(const IFileArchive* archive) =0;
|
||||
|
||||
//! Changes the search order of attached archives.
|
||||
/**
|
||||
\param sourceIndex: The index of the archive to change
|
||||
\param relative: The relative change in position, archives with a lower index are searched first */
|
||||
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0;
|
||||
|
||||
//! Get the archive at a given index.
|
||||
virtual IFileArchive* getFileArchive(u32 index) =0;
|
||||
|
||||
//! Adds an external archive loader to the engine.
|
||||
/** Use this function to add support for new archive types to the
|
||||
engine, for example proprietary or encrypted file storage. */
|
||||
virtual void addArchiveLoader(IArchiveLoader* loader) =0;
|
||||
|
||||
//! Gets the number of archive loaders currently added
|
||||
virtual u32 getArchiveLoaderCount() const = 0;
|
||||
|
||||
//! Retrieve the given archive loader
|
||||
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
||||
array index.
|
||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||
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.
|
||||
/** \return Current working directory as a string. */
|
||||
virtual const path& getWorkingDirectory() =0;
|
||||
|
||||
//! Changes the current working directory.
|
||||
/** \param newDirectory: A string specifying the new working directory.
|
||||
The string is operating system dependent. Under Windows it has
|
||||
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
||||
\return True if successful, otherwise false. */
|
||||
virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0;
|
||||
|
||||
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
||||
/** \param filename Possibly relative file or directory name to query.
|
||||
\result Absolute filename which points to the same file. */
|
||||
virtual path getAbsolutePath(const path& filename) const =0;
|
||||
|
||||
//! Get the directory a file is located in.
|
||||
/** \param filename: The file to get the directory from.
|
||||
\return String containing the directory of the file. */
|
||||
virtual path getFileDir(const path& filename) const =0;
|
||||
|
||||
//! Get the base part of a filename, i.e. the name without the directory part.
|
||||
/** If no directory is prefixed, the full name is returned.
|
||||
\param filename: The file to get the basename from
|
||||
\param keepExtension True if filename with extension is returned otherwise everything
|
||||
after the final '.' is removed as well. */
|
||||
virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0;
|
||||
|
||||
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
||||
virtual path& flattenFilename(path& directory, const path& root="/") const =0;
|
||||
|
||||
//! Get the relative filename, relative to the given directory
|
||||
virtual path getRelativeFilename(const path& filename, const path& directory) const =0;
|
||||
|
||||
//! Creates a list of files and directories in the current working directory and returns it.
|
||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||
it has to be deleted using its IFileList::drop() method.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IFileList* createFileList() =0;
|
||||
|
||||
//! Creates an empty filelist
|
||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||
it has to be deleted using its IFileList::drop() method.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0;
|
||||
|
||||
//! Set the active type of file system.
|
||||
virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0;
|
||||
|
||||
//! Determines if a file exists and could be opened.
|
||||
/** \param filename is the string identifying the file which should be tested for existence.
|
||||
\return True if file exists, and false if it does not exist or an error occurred. */
|
||||
virtual bool existFile(const path& filename) const =0;
|
||||
|
||||
//! Creates a new empty collection of attributes, usable for serialization and more.
|
||||
/** \param driver: Video driver to be used to load textures when specified as attribute values.
|
||||
Can be null to prevent automatic texture loading by attributes.
|
||||
\return Pointer to the created object.
|
||||
If you no longer need the object, you should call IAttributes::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IAttributes* createEmptyAttributes(video::IVideoDriver* driver=0) =0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "IFileArchive.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class IVideoDriver;
|
||||
} // end namespace video
|
||||
namespace io
|
||||
{
|
||||
|
||||
class IReadFile;
|
||||
class IWriteFile;
|
||||
class IFileList;
|
||||
class IAttributes;
|
||||
|
||||
|
||||
//! 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
|
||||
need to know where every file is located. A file could be in a .zip-Archive or
|
||||
as file on disk, using the IFileSystem makes no difference to this. */
|
||||
class IFileSystem : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Opens a file for read access.
|
||||
/** \param filename: Name of file to open.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||
|
||||
//! Creates an IReadFile interface for accessing memory like a file.
|
||||
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
||||
\param memory: A pointer to the start of the file in memory
|
||||
\param len: The length of the memory in bytes
|
||||
\param fileName: The name given to this file
|
||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||
along with the IReadFile when it is dropped.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||
|
||||
//! Creates an IReadFile interface for accessing files inside files.
|
||||
/** This is useful e.g. for archives.
|
||||
\param fileName: The name given to this file
|
||||
\param alreadyOpenedFile: Pointer to the enclosing file
|
||||
\param pos: Start of the file inside alreadyOpenedFile
|
||||
\param areaSize: The length of the file
|
||||
\return A pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IReadFile* createLimitReadFile(const path& fileName,
|
||||
IReadFile* alreadyOpenedFile, long pos, long areaSize) =0;
|
||||
|
||||
//! Creates an IWriteFile interface for accessing memory like a file.
|
||||
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
||||
You are responsible for allocating enough memory.
|
||||
\param memory: A pointer to the start of the file in memory (allocated by you)
|
||||
\param len: The length of the memory in bytes
|
||||
\param fileName: The name given to this file
|
||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||
along with the IWriteFile when it is dropped.
|
||||
\return Pointer to the created file interface.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information.
|
||||
*/
|
||||
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||
|
||||
|
||||
//! Opens a file for write access.
|
||||
/** \param filename: Name of file to open.
|
||||
\param append: If the file already exist, all write operations are
|
||||
appended to the file.
|
||||
\return Pointer to the created file interface. 0 is returned, if the
|
||||
file could not created or opened for writing.
|
||||
The returned pointer should be dropped when no longer needed.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** After calling this, the Irrlicht Engine will also search and open
|
||||
files directly from this archive. 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 just renamed .zip files. By
|
||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||
archives. You can provide your own archive types by implementing
|
||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||
techniques lzma and bzip2.
|
||||
\param filename: Filename of the 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.
|
||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||
the type of archive will depend on the extension of the file name. If
|
||||
you use a different extension then you can use this parameter to force
|
||||
a specific type of archive.
|
||||
\param password An optional password, which is used in case of encrypted archives.
|
||||
\param retArchive A pointer that will be set to the archive that is added.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(const path& filename, bool ignoreCase=true,
|
||||
bool ignorePaths=true,
|
||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||
const core::stringc& password="",
|
||||
IFileArchive** retArchive=0) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** After calling this, the Irrlicht Engine will also search and open
|
||||
files directly from this archive. 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 just renamed .zip files. By
|
||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||
archives. You can provide your own archive types by implementing
|
||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||
techniques lzma and bzip2.
|
||||
If you want to add a directory as an archive, prefix its name with a
|
||||
slash in order to let Irrlicht recognize it as a folder mount (mypath/).
|
||||
Using this technique one can build up a search order, because archives
|
||||
are read first, and can be used more easily with relative filenames.
|
||||
\param file: 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.
|
||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||
the type of archive will depend on the extension of the file name. If
|
||||
you use a different extension then you can use this parameter to force
|
||||
a specific type of archive.
|
||||
\param password An optional password, which is used in case of encrypted archives.
|
||||
\param retArchive A pointer that will be set to the archive that is added.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
||||
bool ignorePaths=true,
|
||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||
const core::stringc& password="",
|
||||
IFileArchive** retArchive=0) =0;
|
||||
|
||||
//! Adds an archive to the file system.
|
||||
/** \param archive: The archive to add to the file system.
|
||||
\return True if the archive was added successfully, false if not. */
|
||||
virtual bool addFileArchive(IFileArchive* archive) =0;
|
||||
|
||||
//! Get the number of archives currently attached to the file system
|
||||
virtual u32 getFileArchiveCount() const =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes.
|
||||
\param index: The index of the archive to remove
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(u32 index) =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes. Note that a relative filename might be
|
||||
interpreted differently on each call, depending on the current working
|
||||
directory. In case you want to remove an archive that was added using
|
||||
a relative path name, you have to change to the same working directory
|
||||
again. This means, that the filename given on creation is not an
|
||||
identifier for the archive, but just a usual filename that is used for
|
||||
locating the archive to work with.
|
||||
\param filename The archive pointed to by the name will be removed
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(const path& filename) =0;
|
||||
|
||||
//! Removes an archive from the file system.
|
||||
/** This will close the archive and free any file handles, but will not
|
||||
close resources which have already been loaded and are now cached, for
|
||||
example textures and meshes.
|
||||
\param archive The archive to remove.
|
||||
\return True on success, false on failure */
|
||||
virtual bool removeFileArchive(const IFileArchive* archive) =0;
|
||||
|
||||
//! Changes the search order of attached archives.
|
||||
/**
|
||||
\param sourceIndex: The index of the archive to change
|
||||
\param relative: The relative change in position, archives with a lower index are searched first */
|
||||
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0;
|
||||
|
||||
//! Get the archive at a given index.
|
||||
virtual IFileArchive* getFileArchive(u32 index) =0;
|
||||
|
||||
//! Adds an external archive loader to the engine.
|
||||
/** Use this function to add support for new archive types to the
|
||||
engine, for example proprietary or encrypted file storage. */
|
||||
virtual void addArchiveLoader(IArchiveLoader* loader) =0;
|
||||
|
||||
//! Gets the number of archive loaders currently added
|
||||
virtual u32 getArchiveLoaderCount() const = 0;
|
||||
|
||||
//! Retrieve the given archive loader
|
||||
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
||||
array index.
|
||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||
virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0;
|
||||
|
||||
//! Get the current working directory.
|
||||
/** \return Current working directory as a string. */
|
||||
virtual const path& getWorkingDirectory() =0;
|
||||
|
||||
//! Changes the current working directory.
|
||||
/** \param newDirectory: A string specifying the new working directory.
|
||||
The string is operating system dependent. Under Windows it has
|
||||
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
||||
\return True if successful, otherwise false. */
|
||||
virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0;
|
||||
|
||||
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
||||
/** \param filename Possibly relative file or directory name to query.
|
||||
\result Absolute filename which points to the same file. */
|
||||
virtual path getAbsolutePath(const path& filename) const =0;
|
||||
|
||||
//! Get the directory a file is located in.
|
||||
/** \param filename: The file to get the directory from.
|
||||
\return String containing the directory of the file. */
|
||||
virtual path getFileDir(const path& filename) const =0;
|
||||
|
||||
//! Get the base part of a filename, i.e. the name without the directory part.
|
||||
/** If no directory is prefixed, the full name is returned.
|
||||
\param filename: The file to get the basename from
|
||||
\param keepExtension True if filename with extension is returned otherwise everything
|
||||
after the final '.' is removed as well. */
|
||||
virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0;
|
||||
|
||||
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
||||
virtual path& flattenFilename(path& directory, const path& root="/") const =0;
|
||||
|
||||
//! Get the relative filename, relative to the given directory
|
||||
virtual path getRelativeFilename(const path& filename, const path& directory) const =0;
|
||||
|
||||
//! Creates a list of files and directories in the current working directory and returns it.
|
||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||
it has to be deleted using its IFileList::drop() method.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IFileList* createFileList() =0;
|
||||
|
||||
//! Creates an empty filelist
|
||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||
it has to be deleted using its IFileList::drop() method.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0;
|
||||
|
||||
//! Set the active type of file system.
|
||||
virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0;
|
||||
|
||||
//! Determines if a file exists and could be opened.
|
||||
/** \param filename is the string identifying the file which should be tested for existence.
|
||||
\return True if file exists, and false if it does not exist or an error occurred. */
|
||||
virtual bool existFile(const path& filename) const =0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace io
|
||||
} // end namespace irr
|
||||
|
@ -1,455 +1,371 @@
|
||||
// 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_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
|
||||
#define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
|
||||
|
||||
#include "EShaderTypes.h"
|
||||
#include "EMaterialTypes.h"
|
||||
#include "EPrimitiveTypes.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
} // end namespace io
|
||||
|
||||
namespace video
|
||||
{
|
||||
|
||||
class IVideoDriver;
|
||||
class IShaderConstantSetCallBack;
|
||||
|
||||
//! Interface making it possible to create and use programs running on the GPU.
|
||||
class IGPUProgrammingServices
|
||||
{
|
||||
public:
|
||||
|
||||
//! Destructor
|
||||
virtual ~IGPUProgrammingServices() {}
|
||||
|
||||
//! Adds a new high-level shading material renderer to the VideoDriver.
|
||||
/** Currently only HLSL/D3D9 and GLSL/OpenGL are supported.
|
||||
\param vertexShaderProgram String containing the source of the vertex
|
||||
shader program. This can be 0 if no vertex program shall be used.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram (p.e. "main")
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgram String containing the source of the pixel
|
||||
shader program. This can be 0 if no pixel shader shall be used.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgram String containing the source of the
|
||||
geometry shader program. This can be 0 if no geometry shader shall be
|
||||
used.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\param callback Pointer to an implementation of
|
||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||
pixel, and geometry 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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||
occurred, e.g. if a shader program could not be compiled or a compile
|
||||
target is not reachable. The error strings are then printed to the
|
||||
error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
const c8* pixelShaderProgram,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
const c8* geometryShaderProgram,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName="main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
|
||||
const c8* pixelShaderProgram=0,
|
||||
const c8* pixelShaderEntryPointName="main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback=0,
|
||||
E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
|
||||
s32 userData=0)
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgram,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, without geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* pixelShaderProgram=0,
|
||||
IShaderConstantSetCallBack* callback=0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData=0)
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, "main",
|
||||
EVST_VS_1_1, pixelShaderProgram,
|
||||
"main", EPST_PS_1_1,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, with geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1 and geometry shader 4.0.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* pixelShaderProgram = 0,
|
||||
const c8* geometryShaderProgram = 0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, "main",
|
||||
EVST_VS_1_1, pixelShaderProgram,
|
||||
"main", EPST_PS_1_1,
|
||||
geometryShaderProgram, "main", EGST_GS_4_0,
|
||||
inType, outType, verticesOut,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||
/** \param vertexShaderProgramFileName Text file containing the source
|
||||
of the vertex shader program. Set to empty string if no vertex shader
|
||||
shall be created.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram (p.e. "main")
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgramFileName Text file containing the source of
|
||||
the pixel shader program. Set to empty string if no pixel shader shall
|
||||
be created.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgramFileName Name of the source of
|
||||
the geometry shader program. Set to empty string if no geometry shader
|
||||
shall be created.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\param callback Pointer to an implementation of
|
||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||
pixel, and geometry 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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||
occurred, e.g. if a shader program could not be compiled or a compile
|
||||
target is not reachable. The error strings are then printed to the
|
||||
error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
const io::path& pixelShaderProgramFileName,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
const io::path& geometryShaderProgramFileName,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const c8* vertexShaderEntryPointName = "main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
const c8* pixelShaderEntryPointName = "main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0)
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgramFileName,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
"", "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, without geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, "main",
|
||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||
"main", EPST_PS_1_1,
|
||||
"", "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, with geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1 and geometry shader 4.0.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
const io::path& geometryShaderProgramFileName = "",
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, "main",
|
||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||
"main", EPST_PS_1_1,
|
||||
geometryShaderProgramFileName, "main", EGST_GS_4_0,
|
||||
inType, outType, verticesOut,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||
/** \param vertexShaderProgram Text file handle containing the source
|
||||
of the vertex shader program. Set to 0 if no vertex shader shall be
|
||||
created.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgram Text file handle containing the source of
|
||||
the pixel shader program. Set to 0 if no pixel shader shall be created.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgram Text file handle containing the source of
|
||||
the geometry shader program. Set to 0 if no geometry shader shall be
|
||||
created.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||
error occurred, e.g. if a shader program could not be compiled or a
|
||||
compile target is not reachable. The error strings are then printed to
|
||||
the error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||
io::IReadFile* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
io::IReadFile* pixelShaderProgram,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
io::IReadFile* geometryShaderProgram,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
io::IReadFile* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName = "main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||
io::IReadFile* pixelShaderProgram = 0,
|
||||
const c8* pixelShaderEntryPointName = "main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0)
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgram, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgram,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Adds a new ASM shader material renderer to the VideoDriver
|
||||
/** Note that it is a good idea to call IVideoDriver::queryFeature() in
|
||||
advance to check if the IVideoDriver supports the vertex and/or pixel
|
||||
shader version your are using.
|
||||
|
||||
The material is added to the VideoDriver like with
|
||||
IVideoDriver::addMaterialRenderer() and can be used like it had been
|
||||
added with that method.
|
||||
\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 irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "EShaderTypes.h"
|
||||
#include "EMaterialTypes.h"
|
||||
#include "EPrimitiveTypes.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
} // end namespace io
|
||||
|
||||
namespace video
|
||||
{
|
||||
|
||||
class IVideoDriver;
|
||||
class IShaderConstantSetCallBack;
|
||||
|
||||
//! Interface making it possible to create and use programs running on the GPU.
|
||||
class IGPUProgrammingServices
|
||||
{
|
||||
public:
|
||||
|
||||
//! Destructor
|
||||
virtual ~IGPUProgrammingServices() {}
|
||||
|
||||
//! Adds a new high-level shading material renderer to the VideoDriver.
|
||||
/** Currently only HLSL/D3D9 and GLSL/OpenGL are supported.
|
||||
\param vertexShaderProgram String containing the source of the vertex
|
||||
shader program. This can be 0 if no vertex program shall be used.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram (p.e. "main")
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgram String containing the source of the pixel
|
||||
shader program. This can be 0 if no pixel shader shall be used.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgram String containing the source of the
|
||||
geometry shader program. This can be 0 if no geometry shader shall be
|
||||
used.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\param callback Pointer to an implementation of
|
||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||
pixel, and geometry 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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||
occurred, e.g. if a shader program could not be compiled or a compile
|
||||
target is not reachable. The error strings are then printed to the
|
||||
error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
const c8* pixelShaderProgram,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
const c8* geometryShaderProgram,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName="main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
|
||||
const c8* pixelShaderProgram=0,
|
||||
const c8* pixelShaderEntryPointName="main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback=0,
|
||||
E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
|
||||
s32 userData=0)
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgram,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, without geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* pixelShaderProgram=0,
|
||||
IShaderConstantSetCallBack* callback=0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData=0)
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, "main",
|
||||
EVST_VS_1_1, pixelShaderProgram,
|
||||
"main", EPST_PS_1_1,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, with geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1 and geometry shader 4.0.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterial(
|
||||
const c8* vertexShaderProgram,
|
||||
const c8* pixelShaderProgram = 0,
|
||||
const c8* geometryShaderProgram = 0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterial(
|
||||
vertexShaderProgram, "main",
|
||||
EVST_VS_1_1, pixelShaderProgram,
|
||||
"main", EPST_PS_1_1,
|
||||
geometryShaderProgram, "main", EGST_GS_4_0,
|
||||
inType, outType, verticesOut,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
||||
/** \param vertexShaderProgramFileName Text file containing the source
|
||||
of the vertex shader program. Set to empty string if no vertex shader
|
||||
shall be created.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram (p.e. "main")
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgramFileName Text file containing the source of
|
||||
the pixel shader program. Set to empty string if no pixel shader shall
|
||||
be created.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgramFileName Name of the source of
|
||||
the geometry shader program. Set to empty string if no geometry shader
|
||||
shall be created.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\param callback Pointer to an implementation of
|
||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||
pixel, and geometry 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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||
occurred, e.g. if a shader program could not be compiled or a compile
|
||||
target is not reachable. The error strings are then printed to the
|
||||
error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
const io::path& pixelShaderProgramFileName,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
const io::path& geometryShaderProgramFileName,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const c8* vertexShaderEntryPointName = "main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
const c8* pixelShaderEntryPointName = "main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0)
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgramFileName,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
"", "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, without geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, "main",
|
||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||
"main", EPST_PS_1_1,
|
||||
"", "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! convenience function for use with many defaults, with geometry shader
|
||||
/** All shader names are set to "main" and compile targets are shader
|
||||
type 1.1 and geometry shader 4.0.
|
||||
*/
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
const io::path& vertexShaderProgramFileName,
|
||||
const io::path& pixelShaderProgramFileName = "",
|
||||
const io::path& geometryShaderProgramFileName = "",
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0 )
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgramFileName, "main",
|
||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||
"main", EPST_PS_1_1,
|
||||
geometryShaderProgramFileName, "main", EGST_GS_4_0,
|
||||
inType, outType, verticesOut,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
||||
/** \param vertexShaderProgram Text file handle containing the source
|
||||
of the vertex shader program. Set to 0 if no vertex shader shall be
|
||||
created.
|
||||
\param vertexShaderEntryPointName Name of the entry function of the
|
||||
vertexShaderProgram
|
||||
\param vsCompileTarget Vertex shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param pixelShaderProgram Text file handle containing the source of
|
||||
the pixel shader program. Set to 0 if no pixel shader shall be created.
|
||||
\param pixelShaderEntryPointName Entry name of the function of the
|
||||
pixelShaderProgram (p.e. "main")
|
||||
\param psCompileTarget Pixel shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param geometryShaderProgram Text file handle containing the source of
|
||||
the geometry shader program. Set to 0 if no geometry shader shall be
|
||||
created.
|
||||
\param geometryShaderEntryPointName Entry name of the function of the
|
||||
geometryShaderProgram (p.e. "main")
|
||||
\param gsCompileTarget Geometry shader version the high level shader
|
||||
shall be compiled to.
|
||||
\param inType Type of vertices passed to geometry shader
|
||||
\param outType Type of vertices created by geometry shader
|
||||
\param verticesOut Maximal number of vertices created by geometry
|
||||
shader. If 0, maximal number supported is assumed.
|
||||
\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 Number of the material type which can be set in
|
||||
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||
error occurred, e.g. if a shader program could not be compiled or a
|
||||
compile target is not reachable. The error strings are then printed to
|
||||
the error log and can be caught with a custom event receiver. */
|
||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||
io::IReadFile* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName,
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||
io::IReadFile* pixelShaderProgram,
|
||||
const c8* pixelShaderEntryPointName,
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||
io::IReadFile* geometryShaderProgram,
|
||||
const c8* geometryShaderEntryPointName = "main",
|
||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||
u32 verticesOut = 0,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0) = 0;
|
||||
|
||||
//! convenience function for use without geometry shaders
|
||||
s32 addHighLevelShaderMaterialFromFiles(
|
||||
io::IReadFile* vertexShaderProgram,
|
||||
const c8* vertexShaderEntryPointName = "main",
|
||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||
io::IReadFile* pixelShaderProgram = 0,
|
||||
const c8* pixelShaderEntryPointName = "main",
|
||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||
IShaderConstantSetCallBack* callback = 0,
|
||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||
s32 userData = 0)
|
||||
{
|
||||
return addHighLevelShaderMaterialFromFiles(
|
||||
vertexShaderProgram, vertexShaderEntryPointName,
|
||||
vsCompileTarget, pixelShaderProgram,
|
||||
pixelShaderEntryPointName, psCompileTarget,
|
||||
0, "main", EGST_GS_4_0,
|
||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||
callback, baseMaterial, userData);
|
||||
}
|
||||
|
||||
//! Delete a shader material and associated data.
|
||||
/**
|
||||
After you have deleted a material it is invalid to still use and doing
|
||||
so might result in a crash. The ID may be reused in the future when new
|
||||
materials are added.
|
||||
\param material Number of the material type. Must not be a built-in
|
||||
material. */
|
||||
virtual void deleteShaderMaterial(s32 material) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
@ -1,268 +1,264 @@
|
||||
// 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_BUTTON_H_INCLUDED__
|
||||
#define __I_GUI_BUTTON_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Current state of buttons used for drawing sprites.
|
||||
//! Note that up to 3 states can be active at the same time:
|
||||
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
||||
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
||||
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
||||
enum EGUI_BUTTON_STATE
|
||||
{
|
||||
//! The button is not pressed.
|
||||
EGBS_BUTTON_UP=0,
|
||||
//! The button is currently pressed down.
|
||||
EGBS_BUTTON_DOWN,
|
||||
//! The mouse cursor is over the button
|
||||
EGBS_BUTTON_MOUSE_OVER,
|
||||
//! The mouse cursor is not over the button
|
||||
EGBS_BUTTON_MOUSE_OFF,
|
||||
//! The button has the focus
|
||||
EGBS_BUTTON_FOCUSED,
|
||||
//! The button doesn't have the focus
|
||||
EGBS_BUTTON_NOT_FOCUSED,
|
||||
//! The button is disabled All other states are ignored in that case.
|
||||
EGBS_BUTTON_DISABLED,
|
||||
//! not used, counts the number of enumerated items
|
||||
EGBS_COUNT
|
||||
};
|
||||
|
||||
//! Names for gui button state icons
|
||||
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
|
||||
{
|
||||
"buttonUp",
|
||||
"buttonDown",
|
||||
"buttonMouseOver",
|
||||
"buttonMouseOff",
|
||||
"buttonFocused",
|
||||
"buttonNotFocused",
|
||||
"buttonDisabled",
|
||||
0 // count
|
||||
};
|
||||
|
||||
//! State of buttons used for drawing texture images.
|
||||
//! Note that only a single state is active at a time
|
||||
//! Also when no image is defined for a state it will use images from another state
|
||||
//! and if that state is not set from the replacement for that,etc.
|
||||
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
||||
enum EGUI_BUTTON_IMAGE_STATE
|
||||
{
|
||||
//! When no other states have images they will all use this one.
|
||||
EGBIS_IMAGE_UP,
|
||||
//! When not set EGBIS_IMAGE_UP is used.
|
||||
EGBIS_IMAGE_UP_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
|
||||
EGBIS_IMAGE_UP_FOCUSED,
|
||||
//! When not set EGBIS_IMAGE_UP_FOCUSED is used.
|
||||
EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP is used.
|
||||
EGBIS_IMAGE_DOWN,
|
||||
//! When not set EGBIS_IMAGE_DOWN is used.
|
||||
EGBIS_IMAGE_DOWN_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
|
||||
EGBIS_IMAGE_DOWN_FOCUSED,
|
||||
//! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
|
||||
EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button state).
|
||||
EGBIS_IMAGE_DISABLED,
|
||||
//! not used, counts the number of enumerated items
|
||||
EGBIS_COUNT
|
||||
};
|
||||
|
||||
//! Names for gui button image states
|
||||
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
|
||||
{
|
||||
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
||||
"ImageUpOver",
|
||||
"ImageUpFocused",
|
||||
"ImageUpFocusedOver",
|
||||
"PressedImage", // not "ImageDown" as it otherwise breaks serialization of old files
|
||||
"ImageDownOver",
|
||||
"ImageDownFocused",
|
||||
"ImageDownFocusedOver",
|
||||
"ImageDisabled",
|
||||
0 // count
|
||||
};
|
||||
|
||||
//! GUI Button interface.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_BUTTON_CLICKED
|
||||
*/
|
||||
class IGUIButton : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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 another color for the button text.
|
||||
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
||||
You don't need to call enableOverrideColor(true), that's done by this function.
|
||||
If you want the the color of the skin back, call enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
/** \return: The override color */
|
||||
virtual video::SColor getOverrideColor(void) const = 0;
|
||||
|
||||
//! Gets the currently used text color
|
||||
/** Either a skin-color for the current state or the override color */
|
||||
virtual video::SColor getActiveColor() const = 0;
|
||||
|
||||
//! Sets if the button text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT or EGDC_GRAY_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in the given state.
|
||||
/** Only one image-state can be active at a time. Images are drawn below sprites.
|
||||
If a state is without image it will try to use images from other states as described
|
||||
in ::EGUI_BUTTON_IMAGE_STATE.
|
||||
Images are a little less flexible than sprites, but easier to use.
|
||||
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
||||
\param image: Image to be displayed or NULL to remove the image
|
||||
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
||||
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
||||
\param image: Image to be displayed */
|
||||
virtual void setImage(video::ITexture* image=0) = 0;
|
||||
|
||||
//! Sets a background image for the button when it is in normal state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
||||
\param image: Texture containing the image to be displayed
|
||||
\param sourceRect: Position in the texture, where the image is located.
|
||||
When width or height are 0 then the full texture-size is used */
|
||||
virtual void setImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
//! Sets a background image for the button when it is in pressed state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
||||
If no images is specified for the pressed state via
|
||||
setPressedImage(), this image is also drawn in pressed state.
|
||||
\param image: Image to be displayed */
|
||||
virtual void setPressedImage(video::ITexture* image=0) = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
||||
\param image: Texture containing the image to be displayed
|
||||
\param sourceRect: Position in the texture, where the image is located */
|
||||
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
|
||||
//! Sets the sprite bank used by the button
|
||||
/** 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. */
|
||||
virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0;
|
||||
|
||||
//! Sets the animated sprite for a specific button state
|
||||
/** Several sprites can be drawn at the same time.
|
||||
Sprites can be animated.
|
||||
Sprites are drawn above the images.
|
||||
\param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
||||
\param state: State of the button to set the sprite for
|
||||
\param index: The sprite number from the current sprite bank
|
||||
\param color: The color of the sprite
|
||||
\param loop: True if the animation should loop, false if not
|
||||
\param scale: True if the sprite should scale to button size, false if not */
|
||||
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
||||
video::SColor color=video::SColor(255,255,255,255), bool loop=false, bool scale=false) = 0;
|
||||
|
||||
//! Get the sprite-index for the given state or -1 when no sprite is set
|
||||
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
||||
virtual video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Returns if the sprite in the given state does loop
|
||||
virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Returns if the sprite in the given state is scaled
|
||||
virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Sets if the button should behave like a push button.
|
||||
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
||||
the user can change the state of the button. */
|
||||
virtual void setIsPushButton(bool isPushButton=true) = 0;
|
||||
|
||||
//! Sets the pressed state of the button if this is a pushbutton
|
||||
virtual void setPressed(bool pressed=true) = 0;
|
||||
|
||||
//! Returns if the button is currently pressed
|
||||
virtual bool isPressed() const = 0;
|
||||
|
||||
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
||||
virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0;
|
||||
|
||||
//! Returns if the alpha channel should be used for drawing background images on the button
|
||||
virtual bool isAlphaChannelUsed() const = 0;
|
||||
|
||||
//! Returns whether the button is a push button
|
||||
virtual bool isPushButton() const = 0;
|
||||
|
||||
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
||||
virtual void setDrawBorder(bool border=true) = 0;
|
||||
|
||||
//! Returns if the border and button face are being drawn using the skin
|
||||
virtual bool isDrawingBorder() const = 0;
|
||||
|
||||
//! Sets if the button should scale the button images to fit
|
||||
virtual void setScaleImage(bool scaleImage=true) = 0;
|
||||
|
||||
//! Checks whether the button scales the used images
|
||||
virtual bool isScalingImage() const = 0;
|
||||
|
||||
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
||||
/** Generated together with event, so info is available in the event-receiver. */
|
||||
virtual bool getClickShiftState() const = 0;
|
||||
|
||||
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
||||
/** Generated together with event, so info is available in the event-receiver. */
|
||||
virtual bool getClickControlState() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Current state of buttons used for drawing sprites.
|
||||
//! Note that up to 3 states can be active at the same time:
|
||||
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
||||
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
||||
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
||||
enum EGUI_BUTTON_STATE
|
||||
{
|
||||
//! The button is not pressed.
|
||||
EGBS_BUTTON_UP=0,
|
||||
//! The button is currently pressed down.
|
||||
EGBS_BUTTON_DOWN,
|
||||
//! The mouse cursor is over the button
|
||||
EGBS_BUTTON_MOUSE_OVER,
|
||||
//! The mouse cursor is not over the button
|
||||
EGBS_BUTTON_MOUSE_OFF,
|
||||
//! The button has the focus
|
||||
EGBS_BUTTON_FOCUSED,
|
||||
//! The button doesn't have the focus
|
||||
EGBS_BUTTON_NOT_FOCUSED,
|
||||
//! The button is disabled All other states are ignored in that case.
|
||||
EGBS_BUTTON_DISABLED,
|
||||
//! not used, counts the number of enumerated items
|
||||
EGBS_COUNT
|
||||
};
|
||||
|
||||
//! Names for gui button state icons
|
||||
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
|
||||
{
|
||||
"buttonUp",
|
||||
"buttonDown",
|
||||
"buttonMouseOver",
|
||||
"buttonMouseOff",
|
||||
"buttonFocused",
|
||||
"buttonNotFocused",
|
||||
"buttonDisabled",
|
||||
0 // count
|
||||
};
|
||||
|
||||
//! State of buttons used for drawing texture images.
|
||||
//! Note that only a single state is active at a time
|
||||
//! Also when no image is defined for a state it will use images from another state
|
||||
//! and if that state is not set from the replacement for that,etc.
|
||||
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
||||
enum EGUI_BUTTON_IMAGE_STATE
|
||||
{
|
||||
//! When no other states have images they will all use this one.
|
||||
EGBIS_IMAGE_UP,
|
||||
//! When not set EGBIS_IMAGE_UP is used.
|
||||
EGBIS_IMAGE_UP_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
|
||||
EGBIS_IMAGE_UP_FOCUSED,
|
||||
//! When not set EGBIS_IMAGE_UP_FOCUSED is used.
|
||||
EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP is used.
|
||||
EGBIS_IMAGE_DOWN,
|
||||
//! When not set EGBIS_IMAGE_DOWN is used.
|
||||
EGBIS_IMAGE_DOWN_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
|
||||
EGBIS_IMAGE_DOWN_FOCUSED,
|
||||
//! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
|
||||
EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
|
||||
//! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button state).
|
||||
EGBIS_IMAGE_DISABLED,
|
||||
//! not used, counts the number of enumerated items
|
||||
EGBIS_COUNT
|
||||
};
|
||||
|
||||
//! Names for gui button image states
|
||||
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
|
||||
{
|
||||
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
||||
"ImageUpOver",
|
||||
"ImageUpFocused",
|
||||
"ImageUpFocusedOver",
|
||||
"PressedImage", // not "ImageDown" as it otherwise breaks serialization of old files
|
||||
"ImageDownOver",
|
||||
"ImageDownFocused",
|
||||
"ImageDownFocusedOver",
|
||||
"ImageDisabled",
|
||||
0 // count
|
||||
};
|
||||
|
||||
//! GUI Button interface.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_BUTTON_CLICKED
|
||||
*/
|
||||
class IGUIButton : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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 another color for the button text.
|
||||
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
||||
You don't need to call enableOverrideColor(true), that's done by this function.
|
||||
If you want the the color of the skin back, call enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
/** \return: The override color */
|
||||
virtual video::SColor getOverrideColor(void) const = 0;
|
||||
|
||||
//! Gets the currently used text color
|
||||
/** Either a skin-color for the current state or the override color */
|
||||
virtual video::SColor getActiveColor() const = 0;
|
||||
|
||||
//! Sets if the button text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT or EGDC_GRAY_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in the given state.
|
||||
/** Only one image-state can be active at a time. Images are drawn below sprites.
|
||||
If a state is without image it will try to use images from other states as described
|
||||
in ::EGUI_BUTTON_IMAGE_STATE.
|
||||
Images are a little less flexible than sprites, but easier to use.
|
||||
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
||||
\param image: Image to be displayed or NULL to remove the image
|
||||
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
||||
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
||||
\param image: Image to be displayed */
|
||||
virtual void setImage(video::ITexture* image=0) = 0;
|
||||
|
||||
//! Sets a background image for the button when it is in normal state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
||||
\param image: Texture containing the image to be displayed
|
||||
\param sourceRect: Position in the texture, where the image is located.
|
||||
When width or height are 0 then the full texture-size is used */
|
||||
virtual void setImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
//! Sets a background image for the button when it is in pressed state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
||||
If no images is specified for the pressed state via
|
||||
setPressedImage(), this image is also drawn in pressed state.
|
||||
\param image: Image to be displayed */
|
||||
virtual void setPressedImage(video::ITexture* image=0) = 0;
|
||||
|
||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
||||
\param image: Texture containing the image to be displayed
|
||||
\param sourceRect: Position in the texture, where the image is located */
|
||||
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
|
||||
//! Sets the sprite bank used by the button
|
||||
/** 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. */
|
||||
virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0;
|
||||
|
||||
//! Sets the animated sprite for a specific button state
|
||||
/** Several sprites can be drawn at the same time.
|
||||
Sprites can be animated.
|
||||
Sprites are drawn above the images.
|
||||
\param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
||||
\param state: State of the button to set the sprite for
|
||||
\param index: The sprite number from the current sprite bank
|
||||
\param color: The color of the sprite
|
||||
\param loop: True if the animation should loop, false if not
|
||||
\param scale: True if the sprite should scale to button size, false if not */
|
||||
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
||||
video::SColor color=video::SColor(255,255,255,255), bool loop=false, bool scale=false) = 0;
|
||||
|
||||
//! Get the sprite-index for the given state or -1 when no sprite is set
|
||||
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
||||
virtual video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Returns if the sprite in the given state does loop
|
||||
virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Returns if the sprite in the given state is scaled
|
||||
virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const = 0;
|
||||
|
||||
//! Sets if the button should behave like a push button.
|
||||
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
||||
the user can change the state of the button. */
|
||||
virtual void setIsPushButton(bool isPushButton=true) = 0;
|
||||
|
||||
//! Sets the pressed state of the button if this is a pushbutton
|
||||
virtual void setPressed(bool pressed=true) = 0;
|
||||
|
||||
//! Returns if the button is currently pressed
|
||||
virtual bool isPressed() const = 0;
|
||||
|
||||
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
||||
virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0;
|
||||
|
||||
//! Returns if the alpha channel should be used for drawing background images on the button
|
||||
virtual bool isAlphaChannelUsed() const = 0;
|
||||
|
||||
//! Returns whether the button is a push button
|
||||
virtual bool isPushButton() const = 0;
|
||||
|
||||
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
||||
virtual void setDrawBorder(bool border=true) = 0;
|
||||
|
||||
//! Returns if the border and button face are being drawn using the skin
|
||||
virtual bool isDrawingBorder() const = 0;
|
||||
|
||||
//! Sets if the button should scale the button images to fit
|
||||
virtual void setScaleImage(bool scaleImage=true) = 0;
|
||||
|
||||
//! Checks whether the button scales the used images
|
||||
virtual bool isScalingImage() const = 0;
|
||||
|
||||
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
||||
/** Generated together with event, so info is available in the event-receiver. */
|
||||
virtual bool getClickShiftState() const = 0;
|
||||
|
||||
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
||||
/** Generated together with event, so info is available in the event-receiver. */
|
||||
virtual bool getClickControlState() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,53 +1,49 @@
|
||||
// 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_CHECKBOX_H_INCLUDED__
|
||||
#define __I_GUI_CHECKBOX_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! GUI Check box interface.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_CHECKBOX_CHANGED
|
||||
*/
|
||||
class IGUICheckBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Set if box is checked.
|
||||
virtual void setChecked(bool checked) = 0;
|
||||
|
||||
//! Returns true if box is checked.
|
||||
virtual bool isChecked() 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;
|
||||
|
||||
//! Sets whether to draw the border
|
||||
virtual void setDrawBorder(bool draw) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! GUI Check box interface.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_CHECKBOX_CHANGED
|
||||
*/
|
||||
class IGUICheckBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Set if box is checked.
|
||||
virtual void setChecked(bool checked) = 0;
|
||||
|
||||
//! Returns true if box is checked.
|
||||
virtual bool isChecked() 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;
|
||||
|
||||
//! Sets whether to draw the border
|
||||
virtual void setDrawBorder(bool draw) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
@ -1,74 +1,74 @@
|
||||
// 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_COMBO_BOX_H_INCLUDED__
|
||||
#define __I_GUI_COMBO_BOX_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Combobox widget
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_COMBO_BOX_CHANGED
|
||||
*/
|
||||
class IGUIComboBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Returns amount of items in box
|
||||
virtual u32 getItemCount() const = 0;
|
||||
|
||||
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
||||
virtual const wchar_t* getItem(u32 idx) const = 0;
|
||||
|
||||
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
||||
virtual u32 getItemData(u32 idx) const = 0;
|
||||
|
||||
//! Returns index based on item data
|
||||
virtual s32 getIndexForItemData(u32 data ) const = 0;
|
||||
|
||||
//! Adds an item and returns the index of it
|
||||
virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0;
|
||||
|
||||
//! Removes an item from the combo box.
|
||||
/** Warning. This will change the index of all following items */
|
||||
virtual void removeItem(u32 idx) = 0;
|
||||
|
||||
//! Deletes all items in the combo box
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Returns id of selected item. returns -1 if no item is selected.
|
||||
virtual s32 getSelected() const = 0;
|
||||
|
||||
//! Sets the selected item. Set this to -1 if no item should be selected
|
||||
virtual void setSelected(s32 idx) = 0;
|
||||
|
||||
//! Sets text justification of the text area
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Set the maximal number of rows for the selection listbox
|
||||
virtual void setMaxSelectionRows(u32 max) = 0;
|
||||
|
||||
//! Get the maximal number of rows for the selection listbox
|
||||
virtual u32 getMaxSelectionRows() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Combobox widget
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_COMBO_BOX_CHANGED
|
||||
*/
|
||||
class IGUIComboBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Returns amount of items in box
|
||||
virtual u32 getItemCount() const = 0;
|
||||
|
||||
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
||||
virtual const wchar_t* getItem(u32 idx) const = 0;
|
||||
|
||||
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
||||
virtual u32 getItemData(u32 idx) const = 0;
|
||||
|
||||
//! Returns index based on item data
|
||||
virtual s32 getIndexForItemData(u32 data ) const = 0;
|
||||
|
||||
//! Adds an item and returns the index of it
|
||||
virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0;
|
||||
|
||||
//! Removes an item from the combo box.
|
||||
/** Warning. This will change the index of all following items */
|
||||
virtual void removeItem(u32 idx) = 0;
|
||||
|
||||
//! Deletes all items in the combo box
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Returns id of selected item. returns -1 if no item is selected.
|
||||
virtual s32 getSelected() const = 0;
|
||||
|
||||
//! Sets the selected item. Set this to -1 if no item should be selected
|
||||
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
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Set the maximal number of rows for the selection listbox
|
||||
virtual void setMaxSelectionRows(u32 max) = 0;
|
||||
|
||||
//! Get the maximal number of rows for the selection listbox
|
||||
virtual u32 getMaxSelectionRows() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
@ -1,157 +1,153 @@
|
||||
// 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_EDIT_BOX_H_INCLUDED__
|
||||
#define __I_GUI_EDIT_BOX_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
|
||||
//! Single line edit box for editing simple text.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_EDITBOX_ENTER
|
||||
\li EGET_EDITBOX_CHANGED
|
||||
\li EGET_EDITBOX_MARKING_CHANGED
|
||||
*/
|
||||
class IGUIEditBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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() 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 another color for the text.
|
||||
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
||||
in the skin, but the set color instead. You don't need to call
|
||||
IGUIEditBox::enableOverrrideColor(true) after this, this is done
|
||||
by this function.
|
||||
If you set a color, and you want the text displayed with the color
|
||||
of the skin again, call IGUIEditBox::enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
virtual video::SColor getOverrideColor() const = 0;
|
||||
|
||||
//! Sets if the text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIEditBox::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) 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;
|
||||
|
||||
//! Turns the border on or off
|
||||
/** \param border: true if you want the border to be drawn, false if not */
|
||||
virtual void setDrawBorder(bool border) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
//! Sets text justification mode
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Enables or disables word wrap.
|
||||
/** \param enable: If set to true, words going over one line are
|
||||
broken to the next line. */
|
||||
virtual void setWordWrap(bool enable) = 0;
|
||||
|
||||
//! Checks if word wrap is enabled
|
||||
/** \return true if word wrap is enabled, false otherwise */
|
||||
virtual bool isWordWrapEnabled() const = 0;
|
||||
|
||||
//! Enables or disables newlines.
|
||||
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
||||
instead a newline character will be inserted. */
|
||||
virtual void setMultiLine(bool enable) = 0;
|
||||
|
||||
//! Checks if multi line editing is enabled
|
||||
/** \return true if multi-line is enabled, false otherwise */
|
||||
virtual bool isMultiLineEnabled() const = 0;
|
||||
|
||||
//! Enables or disables automatic scrolling with cursor position
|
||||
/** \param enable: If set to true, the text will move around with the cursor position */
|
||||
virtual void setAutoScroll(bool enable) = 0;
|
||||
|
||||
//! Checks to see if automatic scrolling is enabled
|
||||
/** \return true if automatic scrolling is enabled, false if not */
|
||||
virtual bool isAutoScrollEnabled() const = 0;
|
||||
|
||||
//! Sets whether the edit box is a password box. Setting this to true will
|
||||
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
||||
\param passwordBox: true to enable password, false to disable
|
||||
\param passwordChar: the character that is displayed instead of letters */
|
||||
virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') = 0;
|
||||
|
||||
//! Returns true if the edit box is currently a password box.
|
||||
virtual bool isPasswordBox() const = 0;
|
||||
|
||||
//! Gets the size area of the text in the edit box
|
||||
/** \return The size in pixels of the text */
|
||||
virtual core::dimension2du getTextDimension() = 0;
|
||||
|
||||
//! Sets the maximum amount of characters which may be entered in the box.
|
||||
/** \param max: Maximum amount of characters. If 0, the character amount is
|
||||
infinity. */
|
||||
virtual void setMax(u32 max) = 0;
|
||||
|
||||
//! Returns maximum amount of characters, previously set by setMax();
|
||||
virtual u32 getMax() const = 0;
|
||||
|
||||
//! Set the character used for the cursor.
|
||||
/** By default it's "_" */
|
||||
virtual void setCursorChar(const wchar_t cursorChar) = 0;
|
||||
|
||||
//! Get the character used for the cursor.
|
||||
virtual wchar_t getCursorChar() const = 0;
|
||||
|
||||
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
||||
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
||||
virtual void setCursorBlinkTime(irr::u32 timeMs) = 0;
|
||||
|
||||
//! Get the cursor blinktime
|
||||
virtual irr::u32 getCursorBlinkTime() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
|
||||
//! Single line edit box for editing simple text.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_EDITBOX_ENTER
|
||||
\li EGET_EDITBOX_CHANGED
|
||||
\li EGET_EDITBOX_MARKING_CHANGED
|
||||
*/
|
||||
class IGUIEditBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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() 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 another color for the text.
|
||||
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
||||
in the skin, but the set color instead. You don't need to call
|
||||
IGUIEditBox::enableOverrrideColor(true) after this, this is done
|
||||
by this function.
|
||||
If you set a color, and you want the text displayed with the color
|
||||
of the skin again, call IGUIEditBox::enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
virtual video::SColor getOverrideColor() const = 0;
|
||||
|
||||
//! Sets if the text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIEditBox::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) 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;
|
||||
|
||||
//! Turns the border on or off
|
||||
/** \param border: true if you want the border to be drawn, false if not */
|
||||
virtual void setDrawBorder(bool border) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
//! Sets text justification mode
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Enables or disables word wrap.
|
||||
/** \param enable: If set to true, words going over one line are
|
||||
broken to the next line. */
|
||||
virtual void setWordWrap(bool enable) = 0;
|
||||
|
||||
//! Checks if word wrap is enabled
|
||||
/** \return true if word wrap is enabled, false otherwise */
|
||||
virtual bool isWordWrapEnabled() const = 0;
|
||||
|
||||
//! Enables or disables newlines.
|
||||
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
||||
instead a newline character will be inserted. */
|
||||
virtual void setMultiLine(bool enable) = 0;
|
||||
|
||||
//! Checks if multi line editing is enabled
|
||||
/** \return true if multi-line is enabled, false otherwise */
|
||||
virtual bool isMultiLineEnabled() const = 0;
|
||||
|
||||
//! Enables or disables automatic scrolling with cursor position
|
||||
/** \param enable: If set to true, the text will move around with the cursor position */
|
||||
virtual void setAutoScroll(bool enable) = 0;
|
||||
|
||||
//! Checks to see if automatic scrolling is enabled
|
||||
/** \return true if automatic scrolling is enabled, false if not */
|
||||
virtual bool isAutoScrollEnabled() const = 0;
|
||||
|
||||
//! Sets whether the edit box is a password box. Setting this to true will
|
||||
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
||||
\param passwordBox: true to enable password, false to disable
|
||||
\param passwordChar: the character that is displayed instead of letters */
|
||||
virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') = 0;
|
||||
|
||||
//! Returns true if the edit box is currently a password box.
|
||||
virtual bool isPasswordBox() const = 0;
|
||||
|
||||
//! Gets the size area of the text in the edit box
|
||||
/** \return The size in pixels of the text */
|
||||
virtual core::dimension2du getTextDimension() = 0;
|
||||
|
||||
//! Sets the maximum amount of characters which may be entered in the box.
|
||||
/** \param max: Maximum amount of characters. If 0, the character amount is
|
||||
infinity. */
|
||||
virtual void setMax(u32 max) = 0;
|
||||
|
||||
//! Returns maximum amount of characters, previously set by setMax();
|
||||
virtual u32 getMax() const = 0;
|
||||
|
||||
//! Set the character used for the cursor.
|
||||
/** By default it's "_" */
|
||||
virtual void setCursorChar(const wchar_t cursorChar) = 0;
|
||||
|
||||
//! Get the character used for the cursor.
|
||||
virtual wchar_t getCursorChar() const = 0;
|
||||
|
||||
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
||||
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
||||
virtual void setCursorBlinkTime(irr::u32 timeMs) = 0;
|
||||
|
||||
//! Get the cursor blinktime
|
||||
virtual irr::u32 getCursorBlinkTime() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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__
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,50 +1,46 @@
|
||||
// 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_FILE_OPEN_DIALOG_H_INCLUDED__
|
||||
#define __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Standard file chooser dialog.
|
||||
/** \warning When the user selects a folder this does change the current working directory
|
||||
|
||||
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_DIRECTORY_SELECTED
|
||||
\li EGET_FILE_SELECTED
|
||||
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
||||
*/
|
||||
class IGUIFileOpenDialog : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> 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.
|
||||
virtual const wchar_t* getFileName() const = 0;
|
||||
|
||||
//! Returns the filename of the selected file. Is empty if no file was selected.
|
||||
virtual const io::path& getFileNameP() const = 0;
|
||||
|
||||
//! Returns the directory of the selected file. Empty if no directory was selected.
|
||||
virtual const io::path& getDirectoryName() const = 0;
|
||||
|
||||
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
||||
virtual const wchar_t* getDirectoryNameW() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Standard file chooser dialog.
|
||||
/** \warning When the user selects a folder this does change the current working directory
|
||||
|
||||
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_DIRECTORY_SELECTED
|
||||
\li EGET_FILE_SELECTED
|
||||
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
||||
*/
|
||||
class IGUIFileOpenDialog : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> 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.
|
||||
virtual const wchar_t* getFileName() const = 0;
|
||||
|
||||
//! Returns the filename of the selected file. Is empty if no file was selected.
|
||||
virtual const io::path& getFileNameP() const = 0;
|
||||
|
||||
//! Returns the directory of the selected file. Empty if no directory was selected.
|
||||
virtual const io::path& getDirectoryName() const = 0;
|
||||
|
||||
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
||||
virtual const wchar_t* getDirectoryNameW() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,104 +1,100 @@
|
||||
// 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_FONT_H_INCLUDED__
|
||||
#define __I_GUI_FONT_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "SColor.h"
|
||||
#include "rect.h"
|
||||
#include "irrString.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! An enum for the different types of GUI font.
|
||||
enum EGUI_FONT_TYPE
|
||||
{
|
||||
//! Bitmap fonts loaded from an XML file or a texture.
|
||||
EGFT_BITMAP = 0,
|
||||
|
||||
//! Scalable vector fonts loaded from an XML file.
|
||||
/** These fonts reside in system memory and use no video memory
|
||||
until they are displayed. These are slower than bitmap fonts
|
||||
but can be easily scaled and rotated. */
|
||||
EGFT_VECTOR,
|
||||
|
||||
//! A font which uses a the native API provided by the operating system.
|
||||
/** Currently not used. */
|
||||
EGFT_OS,
|
||||
|
||||
//! An external font type provided by the user.
|
||||
EGFT_CUSTOM
|
||||
};
|
||||
|
||||
//! Font interface.
|
||||
class IGUIFont : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Draws some text and clips it to the specified rectangle if wanted.
|
||||
/** \param text: Text to draw
|
||||
\param position: Rectangle specifying position where to draw the text.
|
||||
\param color: Color of the text
|
||||
\param hcenter: Specifies if the text should be centered horizontally into the rectangle.
|
||||
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
||||
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||
If the pointer is null, no clipping will be done. */
|
||||
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
||||
video::SColor color, bool hcenter=false, bool vcenter=false,
|
||||
const core::rect<s32>* clip=0) = 0;
|
||||
|
||||
//! Calculates the width and height of a given string of text.
|
||||
/** \return Returns width and height of the area covered by the text if
|
||||
it would be drawn. */
|
||||
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const = 0;
|
||||
|
||||
//! Calculates the index of the character in the text which is on a specific position.
|
||||
/** \param text: Text string.
|
||||
\param pixel_x: X pixel position of which the index of the character will be returned.
|
||||
\return Returns zero based index of the character in the text, and -1 if no no character
|
||||
is on this position. (=the text is too short). */
|
||||
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0;
|
||||
|
||||
//! Returns the type of this font
|
||||
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
||||
|
||||
//! Sets global kerning width for the font.
|
||||
virtual void setKerningWidth (s32 kerning) = 0;
|
||||
|
||||
//! Sets global kerning height for the font.
|
||||
virtual void setKerningHeight (s32 kerning) = 0;
|
||||
|
||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||
/** the global kerning distance is returned.
|
||||
\param thisLetter: If this parameter is provided, the left side kerning
|
||||
for this letter is added to the global kerning value. For example, a
|
||||
space might only be one pixel wide, but it may be displayed as several
|
||||
pixels.
|
||||
\param previousLetter: If provided, kerning is calculated for both
|
||||
letters and added to the global kerning value. For example, in a font
|
||||
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
||||
tucked neatly under the 'W'.
|
||||
*/
|
||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0;
|
||||
|
||||
//! Returns the distance between letters
|
||||
virtual s32 getKerningHeight() const = 0;
|
||||
|
||||
//! Define which characters should not be drawn by the font.
|
||||
/** For example " " would not draw any space which is usually blank in
|
||||
most fonts.
|
||||
\param s String of symbols which are not send down to the videodriver
|
||||
*/
|
||||
virtual void setInvisibleCharacters( const wchar_t *s ) = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "SColor.h"
|
||||
#include "rect.h"
|
||||
#include "irrString.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! An enum for the different types of GUI font.
|
||||
enum EGUI_FONT_TYPE
|
||||
{
|
||||
//! Bitmap fonts loaded from an XML file or a texture.
|
||||
EGFT_BITMAP = 0,
|
||||
|
||||
//! Scalable vector fonts loaded from an XML file.
|
||||
/** These fonts reside in system memory and use no video memory
|
||||
until they are displayed. These are slower than bitmap fonts
|
||||
but can be easily scaled and rotated. */
|
||||
EGFT_VECTOR,
|
||||
|
||||
//! A font which uses a the native API provided by the operating system.
|
||||
/** Currently not used. */
|
||||
EGFT_OS,
|
||||
|
||||
//! An external font type provided by the user.
|
||||
EGFT_CUSTOM
|
||||
};
|
||||
|
||||
//! Font interface.
|
||||
class IGUIFont : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Draws some text and clips it to the specified rectangle if wanted.
|
||||
/** \param text: Text to draw
|
||||
\param position: Rectangle specifying position where to draw the text.
|
||||
\param color: Color of the text
|
||||
\param hcenter: Specifies if the text should be centered horizontally into the rectangle.
|
||||
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
||||
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||
If the pointer is null, no clipping will be done. */
|
||||
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
||||
video::SColor color, bool hcenter=false, bool vcenter=false,
|
||||
const core::rect<s32>* clip=0) = 0;
|
||||
|
||||
//! Calculates the width and height of a given string of text.
|
||||
/** \return Returns width and height of the area covered by the text if
|
||||
it would be drawn. */
|
||||
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const = 0;
|
||||
|
||||
//! Calculates the index of the character in the text which is on a specific position.
|
||||
/** \param text: Text string.
|
||||
\param pixel_x: X pixel position of which the index of the character will be returned.
|
||||
\return Returns zero based index of the character in the text, and -1 if no no character
|
||||
is on this position. (=the text is too short). */
|
||||
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0;
|
||||
|
||||
//! Returns the type of this font
|
||||
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
||||
|
||||
//! Sets global kerning width for the font.
|
||||
virtual void setKerningWidth (s32 kerning) = 0;
|
||||
|
||||
//! Sets global kerning height for the font.
|
||||
virtual void setKerningHeight (s32 kerning) = 0;
|
||||
|
||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||
/** the global kerning distance is returned.
|
||||
\param thisLetter: If this parameter is provided, the left side kerning
|
||||
for this letter is added to the global kerning value. For example, a
|
||||
space might only be one pixel wide, but it may be displayed as several
|
||||
pixels.
|
||||
\param previousLetter: If provided, kerning is calculated for both
|
||||
letters and added to the global kerning value. For example, in a font
|
||||
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
||||
tucked neatly under the 'W'.
|
||||
*/
|
||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0;
|
||||
|
||||
//! Returns the distance between letters
|
||||
virtual s32 getKerningHeight() const = 0;
|
||||
|
||||
//! Define which characters should not be drawn by the font.
|
||||
/** For example " " would not draw any space which is usually blank in
|
||||
most fonts.
|
||||
\param s String of symbols which are not send down to the videodriver
|
||||
*/
|
||||
virtual void setInvisibleCharacters( const wchar_t *s ) = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,46 +1,42 @@
|
||||
// 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_FONT_BITMAP_H_INCLUDED__
|
||||
#define __I_GUI_FONT_BITMAP_H_INCLUDED__
|
||||
|
||||
#include "IGUIFont.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Font interface.
|
||||
class IGUIFontBitmap : public IGUIFont
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns the type of this font
|
||||
virtual EGUI_FONT_TYPE getType() const _IRR_OVERRIDE_ { return EGFT_BITMAP; }
|
||||
|
||||
//! returns the parsed Symbol Information
|
||||
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||
|
||||
//! returns the sprite number from a given character
|
||||
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
||||
|
||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||
/** the global kerning distance is returned.
|
||||
\param thisLetter: If this parameter is provided, the left side kerning for this letter is added
|
||||
to the global kerning value. For example, a space might only be one pixel wide, but it may
|
||||
be displayed as several pixels.
|
||||
\param previousLetter: If provided, kerning is calculated for both letters and added to the global
|
||||
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.
|
||||
*/
|
||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const _IRR_OVERRIDE_ = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIFont.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUISpriteBank;
|
||||
|
||||
//! Font interface.
|
||||
class IGUIFontBitmap : public IGUIFont
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns the type of this font
|
||||
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||
|
||||
//! returns the parsed Symbol Information
|
||||
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||
|
||||
//! returns the sprite number from a given character
|
||||
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
||||
|
||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||
/** the global kerning distance is returned.
|
||||
\param thisLetter: If this parameter is provided, the left side kerning for this letter is added
|
||||
to the global kerning value. For example, a space might only be one pixel wide, but it may
|
||||
be displayed as several pixels.
|
||||
\param previousLetter: If provided, kerning is calculated for both letters and added to the global
|
||||
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.
|
||||
*/
|
||||
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,87 +1,84 @@
|
||||
// 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_IMAGE_H_INCLUDED__
|
||||
#define __I_GUI_IMAGE_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
}
|
||||
namespace gui
|
||||
{
|
||||
//! GUI element displaying an image.
|
||||
class IGUIImage : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Sets an image texture
|
||||
virtual void setImage(video::ITexture* image) = 0;
|
||||
|
||||
//! Gets the image texture
|
||||
virtual video::ITexture* getImage() const = 0;
|
||||
|
||||
//! Sets the color of the image
|
||||
/** \param color Color with which the image is drawn. If the color
|
||||
equals Color(255,255,255,255) it is ignored. */
|
||||
virtual void setColor(video::SColor color) = 0;
|
||||
|
||||
//! Sets if the image should scale to fit the element
|
||||
virtual void setScaleImage(bool scale) = 0;
|
||||
|
||||
//! Sets if the image should use its alpha channel to draw itself
|
||||
virtual void setUseAlphaChannel(bool use) = 0;
|
||||
|
||||
//! Gets the color of the image
|
||||
virtual video::SColor getColor() const = 0;
|
||||
|
||||
//! Returns true if the image is scaled to fit, false if not
|
||||
virtual bool isImageScaled() const = 0;
|
||||
|
||||
//! Returns true if the image is using the alpha channel, false if not
|
||||
virtual bool isAlphaChannelUsed() const = 0;
|
||||
|
||||
//! Sets the source rectangle of the image. By default the full image is used.
|
||||
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
||||
virtual void setSourceRect(const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
//! Returns the customized source rectangle of the image to be used.
|
||||
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
||||
virtual core::rect<s32> getSourceRect() const = 0;
|
||||
|
||||
//! Restrict drawing-area.
|
||||
/** This allows for example to use the image as a progress bar.
|
||||
Base for area is the image, which means:
|
||||
- The original clipping area when the texture is scaled or there is no texture.
|
||||
- The source-rect for an unscaled texture (but still restricted afterward by the clipping area)
|
||||
Unlike normal clipping this does not affect the gui-children.
|
||||
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
||||
*/
|
||||
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
||||
|
||||
//! Get drawing-area restrictions.
|
||||
virtual core::rect<f32> getDrawBounds() const = 0;
|
||||
|
||||
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
||||
/** By default it's enabled */
|
||||
virtual void setDrawBackground(bool draw) = 0;
|
||||
|
||||
//! Checks if a background is drawn when no texture is set
|
||||
/** \return true if background drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
}
|
||||
namespace gui
|
||||
{
|
||||
//! GUI element displaying an image.
|
||||
class IGUIImage : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Sets an image texture
|
||||
virtual void setImage(video::ITexture* image) = 0;
|
||||
|
||||
//! Gets the image texture
|
||||
virtual video::ITexture* getImage() const = 0;
|
||||
|
||||
//! Sets the color of the image
|
||||
/** \param color Color with which the image is drawn. If the color
|
||||
equals Color(255,255,255,255) it is ignored. */
|
||||
virtual void setColor(video::SColor color) = 0;
|
||||
|
||||
//! Sets if the image should scale to fit the element
|
||||
virtual void setScaleImage(bool scale) = 0;
|
||||
|
||||
//! Sets if the image should use its alpha channel to draw itself
|
||||
virtual void setUseAlphaChannel(bool use) = 0;
|
||||
|
||||
//! Gets the color of the image
|
||||
virtual video::SColor getColor() const = 0;
|
||||
|
||||
//! Returns true if the image is scaled to fit, false if not
|
||||
virtual bool isImageScaled() const = 0;
|
||||
|
||||
//! Returns true if the image is using the alpha channel, false if not
|
||||
virtual bool isAlphaChannelUsed() const = 0;
|
||||
|
||||
//! Sets the source rectangle of the image. By default the full image is used.
|
||||
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
||||
virtual void setSourceRect(const core::rect<s32>& sourceRect) = 0;
|
||||
|
||||
//! Returns the customized source rectangle of the image to be used.
|
||||
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
||||
virtual core::rect<s32> getSourceRect() const = 0;
|
||||
|
||||
//! Restrict drawing-area.
|
||||
/** This allows for example to use the image as a progress bar.
|
||||
Base for area is the image, which means:
|
||||
- The original clipping area when the texture is scaled or there is no texture.
|
||||
- The source-rect for an unscaled texture (but still restricted afterward by the clipping area)
|
||||
Unlike normal clipping this does not affect the gui-children.
|
||||
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
||||
*/
|
||||
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
||||
|
||||
//! Get drawing-area restrictions.
|
||||
virtual core::rect<f32> getDrawBounds() const = 0;
|
||||
|
||||
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
||||
/** By default it's enabled */
|
||||
virtual void setDrawBackground(bool draw) = 0;
|
||||
|
||||
//! Checks if a background is drawn when no texture is set
|
||||
/** \return true if background drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,45 +1,41 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
||||
|
||||
#ifndef __I_GUI_IMAGE_LIST_H_INCLUDED__
|
||||
#define __I_GUI_IMAGE_LIST_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "rect.h"
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Font interface.
|
||||
class IGUIImageList : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Destructor
|
||||
virtual ~IGUIImageList() {};
|
||||
|
||||
//! Draws an image and clips it to the specified rectangle if wanted
|
||||
//! \param index: Index of the image
|
||||
//! \param destPos: Position of the image to draw
|
||||
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||
//! If the pointer is null, no clipping will be done.
|
||||
virtual void draw(s32 index, const core::position2d<s32>& destPos,
|
||||
const core::rect<s32>* clip = 0) = 0;
|
||||
|
||||
//! Returns the count of Images in the list.
|
||||
//! \return Returns the count of Images in the list.
|
||||
virtual s32 getImageCount() const = 0;
|
||||
|
||||
//! Returns the size of the images in the list.
|
||||
//! \return Returns the size of the images in the list.
|
||||
virtual core::dimension2d<s32> getImageSize() const = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "rect.h"
|
||||
#include "irrTypes.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Font interface.
|
||||
class IGUIImageList : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Destructor
|
||||
virtual ~IGUIImageList() {};
|
||||
|
||||
//! Draws an image and clips it to the specified rectangle if wanted
|
||||
//! \param index: Index of the image
|
||||
//! \param destPos: Position of the image to draw
|
||||
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||
//! If the pointer is null, no clipping will be done.
|
||||
virtual void draw(s32 index, const core::position2d<s32>& destPos,
|
||||
const core::rect<s32>* clip = 0) = 0;
|
||||
|
||||
//! Returns the count of Images in the list.
|
||||
//! \return Returns the count of Images in the list.
|
||||
virtual s32 getImageCount() const = 0;
|
||||
|
||||
//! Returns the size of the images in the list.
|
||||
//! \return Returns the size of the images in the list.
|
||||
virtual core::dimension2d<s32> getImageSize() const = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
@ -1,142 +1,138 @@
|
||||
// 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_LIST_BOX_H_INCLUDED__
|
||||
#define __I_GUI_LIST_BOX_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUISpriteBank;
|
||||
class IGUIScrollBar;
|
||||
|
||||
//! Enumeration for listbox colors
|
||||
enum EGUI_LISTBOX_COLOR
|
||||
{
|
||||
//! Color of text
|
||||
EGUI_LBC_TEXT=0,
|
||||
//! Color of selected text
|
||||
EGUI_LBC_TEXT_HIGHLIGHT,
|
||||
//! Color of icon
|
||||
EGUI_LBC_ICON,
|
||||
//! Color of selected icon
|
||||
EGUI_LBC_ICON_HIGHLIGHT,
|
||||
//! Not used, just counts the number of available colors
|
||||
EGUI_LBC_COUNT
|
||||
};
|
||||
|
||||
|
||||
//! Default list box GUI element.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_LISTBOX_CHANGED
|
||||
\li EGET_LISTBOX_SELECTED_AGAIN
|
||||
*/
|
||||
class IGUIListBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
//! constructor
|
||||
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! returns amount of list items
|
||||
virtual u32 getItemCount() const = 0;
|
||||
|
||||
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
||||
virtual const wchar_t* getListItem(u32 id) const = 0;
|
||||
|
||||
//! adds an list item, returns id of item
|
||||
virtual u32 addItem(const wchar_t* text) = 0;
|
||||
|
||||
//! adds an list item with an icon
|
||||
/** \param text Text of list entry
|
||||
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
||||
\return The id of the new created item */
|
||||
virtual u32 addItem(const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Removes an item from the list
|
||||
virtual void removeItem(u32 index) = 0;
|
||||
|
||||
//! get the the id of the item at the given absolute coordinates
|
||||
/** \return The id of the list item or -1 when no item is at those coordinates*/
|
||||
virtual s32 getItemAt(s32 xpos, s32 ypos) const = 0;
|
||||
|
||||
//! Returns the icon of an item
|
||||
virtual s32 getIcon(u32 index) const = 0;
|
||||
|
||||
//! Sets the sprite bank which should be used to draw list icons.
|
||||
/** This font is set to the sprite bank of the built-in-font by
|
||||
default. A sprite can be displayed in front of every list item.
|
||||
An icon is an index within the icon sprite bank. Several
|
||||
default icons are available in the skin through getIcon. */
|
||||
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
||||
|
||||
//! clears the list, deletes all items in the listbox
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! returns id of selected item. returns -1 if no item is selected.
|
||||
virtual s32 getSelected() const = 0;
|
||||
|
||||
//! sets the selected item. Set this to -1 if no item should be selected
|
||||
virtual void setSelected(s32 index) = 0;
|
||||
|
||||
//! sets the selected item. Set this to 0 if no item should be selected
|
||||
virtual void setSelected(const wchar_t *item) = 0;
|
||||
|
||||
//! set whether the listbox should scroll to newly selected items
|
||||
virtual void setAutoScrollEnabled(bool scroll) = 0;
|
||||
|
||||
//! returns true if automatic scrolling is enabled, false if not.
|
||||
virtual bool isAutoScrollEnabled() const = 0;
|
||||
|
||||
//! set all item colors at given index to color
|
||||
virtual void setItemOverrideColor(u32 index, video::SColor color) = 0;
|
||||
|
||||
//! set all item colors of specified type at given index to color
|
||||
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) = 0;
|
||||
|
||||
//! clear all item colors at index
|
||||
virtual void clearItemOverrideColor(u32 index) = 0;
|
||||
|
||||
//! clear item color at index for given colortype
|
||||
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) = 0;
|
||||
|
||||
//! has the item at index its color overwritten?
|
||||
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! return the overwrite color at given item index.
|
||||
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! return the default color which is used for the given colorType
|
||||
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! set the item at the given index
|
||||
virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Insert the item at the given index
|
||||
/** \return The index on success or -1 on failure. */
|
||||
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Swap the items at the given indices
|
||||
virtual void swapItems(u32 index1, u32 index2) = 0;
|
||||
|
||||
//! set global itemHeight
|
||||
virtual void setItemHeight( s32 height ) = 0;
|
||||
|
||||
//! Sets whether to draw the background
|
||||
virtual void setDrawBackground(bool draw) = 0;
|
||||
|
||||
//! Access the vertical scrollbar
|
||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUISpriteBank;
|
||||
class IGUIScrollBar;
|
||||
|
||||
//! Enumeration for listbox colors
|
||||
enum EGUI_LISTBOX_COLOR
|
||||
{
|
||||
//! Color of text
|
||||
EGUI_LBC_TEXT=0,
|
||||
//! Color of selected text
|
||||
EGUI_LBC_TEXT_HIGHLIGHT,
|
||||
//! Color of icon
|
||||
EGUI_LBC_ICON,
|
||||
//! Color of selected icon
|
||||
EGUI_LBC_ICON_HIGHLIGHT,
|
||||
//! Not used, just counts the number of available colors
|
||||
EGUI_LBC_COUNT
|
||||
};
|
||||
|
||||
|
||||
//! Default list box GUI element.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_LISTBOX_CHANGED
|
||||
\li EGET_LISTBOX_SELECTED_AGAIN
|
||||
*/
|
||||
class IGUIListBox : public IGUIElement
|
||||
{
|
||||
public:
|
||||
//! constructor
|
||||
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
||||
|
||||
//! returns amount of list items
|
||||
virtual u32 getItemCount() const = 0;
|
||||
|
||||
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
||||
virtual const wchar_t* getListItem(u32 id) const = 0;
|
||||
|
||||
//! adds an list item, returns id of item
|
||||
virtual u32 addItem(const wchar_t* text) = 0;
|
||||
|
||||
//! adds an list item with an icon
|
||||
/** \param text Text of list entry
|
||||
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
||||
\return The id of the new created item */
|
||||
virtual u32 addItem(const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Removes an item from the list
|
||||
virtual void removeItem(u32 index) = 0;
|
||||
|
||||
//! get the the id of the item at the given absolute coordinates
|
||||
/** \return The id of the list item or -1 when no item is at those coordinates*/
|
||||
virtual s32 getItemAt(s32 xpos, s32 ypos) const = 0;
|
||||
|
||||
//! Returns the icon of an item
|
||||
virtual s32 getIcon(u32 index) const = 0;
|
||||
|
||||
//! Sets the sprite bank which should be used to draw list icons.
|
||||
/** This font is set to the sprite bank of the built-in-font by
|
||||
default. A sprite can be displayed in front of every list item.
|
||||
An icon is an index within the icon sprite bank. Several
|
||||
default icons are available in the skin through getIcon. */
|
||||
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
||||
|
||||
//! clears the list, deletes all items in the listbox
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! returns id of selected item. returns -1 if no item is selected.
|
||||
virtual s32 getSelected() const = 0;
|
||||
|
||||
//! sets the selected item. Set this to -1 if no item should be selected
|
||||
virtual void setSelected(s32 index) = 0;
|
||||
|
||||
//! sets the selected item. Set this to 0 if no item should be selected
|
||||
virtual void setSelected(const wchar_t *item) = 0;
|
||||
|
||||
//! set whether the listbox should scroll to newly selected items
|
||||
virtual void setAutoScrollEnabled(bool scroll) = 0;
|
||||
|
||||
//! returns true if automatic scrolling is enabled, false if not.
|
||||
virtual bool isAutoScrollEnabled() const = 0;
|
||||
|
||||
//! set all item colors at given index to color
|
||||
virtual void setItemOverrideColor(u32 index, video::SColor color) = 0;
|
||||
|
||||
//! set all item colors of specified type at given index to color
|
||||
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) = 0;
|
||||
|
||||
//! clear all item colors at index
|
||||
virtual void clearItemOverrideColor(u32 index) = 0;
|
||||
|
||||
//! clear item color at index for given colortype
|
||||
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) = 0;
|
||||
|
||||
//! has the item at index its color overwritten?
|
||||
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! return the overwrite color at given item index.
|
||||
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! return the default color which is used for the given colorType
|
||||
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||
|
||||
//! set the item at the given index
|
||||
virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Insert the item at the given index
|
||||
/** \return The index on success or -1 on failure. */
|
||||
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||
|
||||
//! Swap the items at the given indices
|
||||
virtual void swapItems(u32 index1, u32 index2) = 0;
|
||||
|
||||
//! set global itemHeight
|
||||
virtual void setItemHeight( s32 height ) = 0;
|
||||
|
||||
//! Sets whether to draw the background
|
||||
virtual void setDrawBackground(bool draw) = 0;
|
||||
|
||||
//! Access the vertical scrollbar
|
||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
@ -1,65 +1,61 @@
|
||||
// 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_SCROLL_BAR_H_INCLUDED__
|
||||
#define __I_GUI_SCROLL_BAR_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Default scroll bar GUI element.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_SCROLL_BAR_CHANGED
|
||||
*/
|
||||
class IGUIScrollBar : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
||||
|
||||
//! sets the maximum value of the scrollbar.
|
||||
virtual void setMax(s32 max) = 0;
|
||||
//! gets the maximum value of the scrollbar.
|
||||
virtual s32 getMax() const = 0;
|
||||
|
||||
//! sets the minimum value of the scrollbar.
|
||||
virtual void setMin(s32 min) = 0;
|
||||
//! gets the minimum value of the scrollbar.
|
||||
virtual s32 getMin() const = 0;
|
||||
|
||||
//! gets the small step value
|
||||
virtual s32 getSmallStep() const = 0;
|
||||
|
||||
//! Sets the small step
|
||||
/** That is the amount that the value changes by when clicking
|
||||
on the buttons or using the cursor keys. */
|
||||
virtual void setSmallStep(s32 step) = 0;
|
||||
|
||||
//! gets the large step value
|
||||
virtual s32 getLargeStep() const = 0;
|
||||
|
||||
//! Sets the large step
|
||||
/** That is the amount that the value changes by when clicking
|
||||
in the tray, or using the page up and page down keys. */
|
||||
virtual void setLargeStep(s32 step) = 0;
|
||||
|
||||
//! gets the current position of the scrollbar
|
||||
virtual s32 getPos() const = 0;
|
||||
|
||||
//! sets the current position of the scrollbar
|
||||
virtual void setPos(s32 pos) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! Default scroll bar GUI element.
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_SCROLL_BAR_CHANGED
|
||||
*/
|
||||
class IGUIScrollBar : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
||||
|
||||
//! sets the maximum value of the scrollbar.
|
||||
virtual void setMax(s32 max) = 0;
|
||||
//! gets the maximum value of the scrollbar.
|
||||
virtual s32 getMax() const = 0;
|
||||
|
||||
//! sets the minimum value of the scrollbar.
|
||||
virtual void setMin(s32 min) = 0;
|
||||
//! gets the minimum value of the scrollbar.
|
||||
virtual s32 getMin() const = 0;
|
||||
|
||||
//! gets the small step value
|
||||
virtual s32 getSmallStep() const = 0;
|
||||
|
||||
//! Sets the small step
|
||||
/** That is the amount that the value changes by when clicking
|
||||
on the buttons or using the cursor keys. */
|
||||
virtual void setSmallStep(s32 step) = 0;
|
||||
|
||||
//! gets the large step value
|
||||
virtual s32 getLargeStep() const = 0;
|
||||
|
||||
//! Sets the large step
|
||||
/** That is the amount that the value changes by when clicking
|
||||
in the tray, or using the page up and page down keys. */
|
||||
virtual void setLargeStep(s32 step) = 0;
|
||||
|
||||
//! gets the current position of the scrollbar
|
||||
virtual s32 getPos() const = 0;
|
||||
|
||||
//! sets the current position of the scrollbar
|
||||
virtual void setPos(s32 pos) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
1156
include/IGUISkin.h
1156
include/IGUISkin.h
File diff suppressed because it is too large
Load Diff
@ -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__
|
||||
|
@ -1,142 +1,138 @@
|
||||
// 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_SPRITE_BANK_H_INCLUDED__
|
||||
#define __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "irrArray.h"
|
||||
#include "SColor.h"
|
||||
#include "rect.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! A single sprite frame.
|
||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||
struct SGUISpriteFrame
|
||||
{
|
||||
SGUISpriteFrame() : textureNumber(0), rectNumber(0)
|
||||
{
|
||||
}
|
||||
|
||||
SGUISpriteFrame(u32 textureIndex, u32 positionIndex)
|
||||
: textureNumber(textureIndex), rectNumber(positionIndex)
|
||||
{
|
||||
}
|
||||
|
||||
//! Texture index in IGUISpriteBank
|
||||
u32 textureNumber;
|
||||
|
||||
//! Index in IGUISpriteBank::getPositions()
|
||||
u32 rectNumber;
|
||||
};
|
||||
|
||||
//! A sprite composed of several frames.
|
||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||
struct SGUISprite
|
||||
{
|
||||
SGUISprite() : frameTime(0) {}
|
||||
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0)
|
||||
{
|
||||
Frames.push_back(firstFrame);
|
||||
}
|
||||
|
||||
core::array<SGUISpriteFrame> Frames;
|
||||
u32 frameTime;
|
||||
};
|
||||
|
||||
|
||||
//! Sprite bank interface.
|
||||
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
||||
* for more information how to use the spritebank.
|
||||
*/
|
||||
class IGUISpriteBank : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns the list of rectangles held by the sprite bank
|
||||
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
||||
|
||||
//! Returns the array of animated sprites within the sprite bank
|
||||
virtual core::array< SGUISprite >& getSprites() = 0;
|
||||
|
||||
//! Returns the number of textures held by the sprite bank
|
||||
virtual u32 getTextureCount() const = 0;
|
||||
|
||||
//! Gets the texture with the specified index
|
||||
virtual video::ITexture* getTexture(u32 index) const = 0;
|
||||
|
||||
//! Adds a texture to the sprite bank
|
||||
virtual void addTexture(video::ITexture* texture) = 0;
|
||||
|
||||
//! Changes one of the textures in the sprite bank
|
||||
virtual void setTexture(u32 index, video::ITexture* texture) = 0;
|
||||
|
||||
//! Add the texture and use it for a single non-animated sprite.
|
||||
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
||||
\returns The index of the sprite or -1 on failure */
|
||||
virtual s32 addTextureAsSprite(video::ITexture* texture) = 0;
|
||||
|
||||
//! Clears sprites, rectangles and textures
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Draws a sprite in 2d with position and color
|
||||
/**
|
||||
\param index Index of SGUISprite to draw
|
||||
\param pos Target position - depending on center value either the left-top or the sprite center is used as pivot
|
||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||
\param color Color with which the image is drawn.
|
||||
Note that the alpha component is used. If alpha is other than
|
||||
255, the image will be transparent.
|
||||
\param starttime Tick when the first frame was drawn (only difference currenttime-starttime matters).
|
||||
\param currenttime To calculate the frame of animated sprites
|
||||
\param loop When true animations are looped
|
||||
\param center When true pivot is set to the sprite-center. So it affects pos.
|
||||
*/
|
||||
virtual void draw2DSprite(u32 index, const core::position2di& pos,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor& color= video::SColor(255,255,255,255),
|
||||
u32 starttime=0, u32 currenttime=0,
|
||||
bool loop=true, bool center=false) = 0;
|
||||
|
||||
//! Draws a sprite in 2d with destination rectangle and colors
|
||||
/**
|
||||
\param index Index of SGUISprite to draw
|
||||
\param destRect The sprite will be scaled to fit this target rectangle
|
||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||
\param colors Array of 4 colors denoting the color values of
|
||||
the corners of the destRect
|
||||
\param timeTicks Current frame for animated sprites
|
||||
(same as currenttime-starttime in other draw2DSprite function)
|
||||
\param loop When true animations are looped
|
||||
*/
|
||||
virtual void draw2DSprite(u32 index, const core::rect<s32>& destRect,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor * const colors=0,
|
||||
u32 timeTicks = 0,
|
||||
bool loop=true) = 0;
|
||||
|
||||
//! Draws a sprite batch in 2d using an array of positions and a color
|
||||
virtual void draw2DSpriteBatch(const core::array<u32>& indices, const core::array<core::position2di>& pos,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor& color= video::SColor(255,255,255,255),
|
||||
u32 starttime=0, u32 currenttime=0,
|
||||
bool loop=true, bool center=false) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "irrArray.h"
|
||||
#include "SColor.h"
|
||||
#include "rect.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
|
||||
namespace gui
|
||||
{
|
||||
|
||||
//! A single sprite frame.
|
||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||
struct SGUISpriteFrame
|
||||
{
|
||||
SGUISpriteFrame() : textureNumber(0), rectNumber(0)
|
||||
{
|
||||
}
|
||||
|
||||
SGUISpriteFrame(u32 textureIndex, u32 positionIndex)
|
||||
: textureNumber(textureIndex), rectNumber(positionIndex)
|
||||
{
|
||||
}
|
||||
|
||||
//! Texture index in IGUISpriteBank
|
||||
u32 textureNumber;
|
||||
|
||||
//! Index in IGUISpriteBank::getPositions()
|
||||
u32 rectNumber;
|
||||
};
|
||||
|
||||
//! A sprite composed of several frames.
|
||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||
struct SGUISprite
|
||||
{
|
||||
SGUISprite() : frameTime(0) {}
|
||||
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0)
|
||||
{
|
||||
Frames.push_back(firstFrame);
|
||||
}
|
||||
|
||||
core::array<SGUISpriteFrame> Frames;
|
||||
u32 frameTime;
|
||||
};
|
||||
|
||||
|
||||
//! Sprite bank interface.
|
||||
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
||||
* for more information how to use the spritebank.
|
||||
*/
|
||||
class IGUISpriteBank : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Returns the list of rectangles held by the sprite bank
|
||||
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
||||
|
||||
//! Returns the array of animated sprites within the sprite bank
|
||||
virtual core::array< SGUISprite >& getSprites() = 0;
|
||||
|
||||
//! Returns the number of textures held by the sprite bank
|
||||
virtual u32 getTextureCount() const = 0;
|
||||
|
||||
//! Gets the texture with the specified index
|
||||
virtual video::ITexture* getTexture(u32 index) const = 0;
|
||||
|
||||
//! Adds a texture to the sprite bank
|
||||
virtual void addTexture(video::ITexture* texture) = 0;
|
||||
|
||||
//! Changes one of the textures in the sprite bank
|
||||
virtual void setTexture(u32 index, video::ITexture* texture) = 0;
|
||||
|
||||
//! Add the texture and use it for a single non-animated sprite.
|
||||
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
||||
\returns The index of the sprite or -1 on failure */
|
||||
virtual s32 addTextureAsSprite(video::ITexture* texture) = 0;
|
||||
|
||||
//! Clears sprites, rectangles and textures
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Draws a sprite in 2d with position and color
|
||||
/**
|
||||
\param index Index of SGUISprite to draw
|
||||
\param pos Target position - depending on center value either the left-top or the sprite center is used as pivot
|
||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||
\param color Color with which the image is drawn.
|
||||
Note that the alpha component is used. If alpha is other than
|
||||
255, the image will be transparent.
|
||||
\param starttime Tick when the first frame was drawn (only difference currenttime-starttime matters).
|
||||
\param currenttime To calculate the frame of animated sprites
|
||||
\param loop When true animations are looped
|
||||
\param center When true pivot is set to the sprite-center. So it affects pos.
|
||||
*/
|
||||
virtual void draw2DSprite(u32 index, const core::position2di& pos,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor& color= video::SColor(255,255,255,255),
|
||||
u32 starttime=0, u32 currenttime=0,
|
||||
bool loop=true, bool center=false) = 0;
|
||||
|
||||
//! Draws a sprite in 2d with destination rectangle and colors
|
||||
/**
|
||||
\param index Index of SGUISprite to draw
|
||||
\param destRect The sprite will be scaled to fit this target rectangle
|
||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||
\param colors Array of 4 colors denoting the color values of
|
||||
the corners of the destRect
|
||||
\param timeTicks Current frame for animated sprites
|
||||
(same as currenttime-starttime in other draw2DSprite function)
|
||||
\param loop When true animations are looped
|
||||
*/
|
||||
virtual void draw2DSprite(u32 index, const core::rect<s32>& destRect,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor * const colors=0,
|
||||
u32 timeTicks = 0,
|
||||
bool loop=true) = 0;
|
||||
|
||||
//! Draws a sprite batch in 2d using an array of positions and a color
|
||||
virtual void draw2DSpriteBatch(const core::array<u32>& indices, const core::array<core::position2di>& pos,
|
||||
const core::rect<s32>* clip=0,
|
||||
const video::SColor& color= video::SColor(255,255,255,255),
|
||||
u32 starttime=0, u32 currenttime=0,
|
||||
bool loop=true, bool center=false) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,139 +1,135 @@
|
||||
// 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_STATIC_TEXT_H_INCLUDED__
|
||||
#define __I_GUI_STATIC_TEXT_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
|
||||
//! Multi or single line text label.
|
||||
class IGUIStaticText : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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 another color for the text.
|
||||
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
||||
in the skin, but the set color instead. You don't need to call
|
||||
IGUIStaticText::enableOverrrideColor(true) after this, this is done
|
||||
by this function.
|
||||
If you set a color, and you want the text displayed with the color
|
||||
of the skin again, call IGUIStaticText::enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
/** \return: The override color */
|
||||
virtual video::SColor getOverrideColor(void) const = 0;
|
||||
|
||||
//! Gets the currently used text color
|
||||
/** Either a skin-color for the current state or the override color */
|
||||
virtual video::SColor getActiveColor() const = 0;
|
||||
|
||||
//! Sets if the static text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||
|
||||
//! Sets another color for the background.
|
||||
virtual void setBackgroundColor(video::SColor color) = 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;
|
||||
|
||||
//! Gets the background color
|
||||
/** \return: The background color */
|
||||
virtual video::SColor getBackgroundColor() const = 0;
|
||||
|
||||
//! Sets whether to draw the border
|
||||
virtual void setDrawBorder(bool draw) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
//! Sets text justification mode
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||
/** \param enable: If set to true, words going over one line are
|
||||
broken on to the next line. */
|
||||
virtual void setWordWrap(bool enable) = 0;
|
||||
|
||||
//! Checks if word wrap is enabled
|
||||
/** \return true if word wrap is enabled, false otherwise */
|
||||
virtual bool isWordWrapEnabled(void) const = 0;
|
||||
|
||||
//! Returns the height of the text in pixels when it is drawn.
|
||||
/** This is useful for adjusting the layout of gui elements based on the height
|
||||
of the multiline text in this element.
|
||||
\return Height of text in pixels. */
|
||||
virtual s32 getTextHeight() const = 0;
|
||||
|
||||
//! Returns the width of the current text, in the current font
|
||||
/** If the text is broken, this returns the width of the widest line
|
||||
\return The width of the text, or the widest broken line. */
|
||||
virtual s32 getTextWidth(void) const = 0;
|
||||
|
||||
//! Set whether the text in this label should be clipped if it goes outside bounds
|
||||
virtual void setTextRestrainedInside(bool restrainedInside) = 0;
|
||||
|
||||
//! Checks if the text in this label should be clipped if it goes outside bounds
|
||||
virtual bool isTextRestrainedInside() const = 0;
|
||||
|
||||
//! Set whether the string should be interpreted as right-to-left (RTL) text
|
||||
/** \note This component does not implement the Unicode bidi standard, the
|
||||
text of the component should be already RTL if you call this. The
|
||||
main difference when RTL is enabled is that the linebreaks for multiline
|
||||
elements are performed starting from the end.
|
||||
*/
|
||||
virtual void setRightToLeft(bool rtl) = 0;
|
||||
|
||||
//! Checks whether the text in this element should be interpreted as right-to-left
|
||||
virtual bool isRightToLeft() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUIFont;
|
||||
|
||||
//! Multi or single line text label.
|
||||
class IGUIStaticText : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
||||
|
||||
//! 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 another color for the text.
|
||||
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
||||
in the skin, but the set color instead. You don't need to call
|
||||
IGUIStaticText::enableOverrrideColor(true) after this, this is done
|
||||
by this function.
|
||||
If you set a color, and you want the text displayed with the color
|
||||
of the skin again, call IGUIStaticText::enableOverrideColor(false);
|
||||
\param color: New color of the text. */
|
||||
virtual void setOverrideColor(video::SColor color) = 0;
|
||||
|
||||
//! Gets the override color
|
||||
/** \return: The override color */
|
||||
virtual video::SColor getOverrideColor(void) const = 0;
|
||||
|
||||
//! Gets the currently used text color
|
||||
/** Either a skin-color for the current state or the override color */
|
||||
virtual video::SColor getActiveColor() const = 0;
|
||||
|
||||
//! Sets if the static text should use the override color or the color in the gui skin.
|
||||
/** \param enable: If set to true, the override color, which can be set
|
||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||
EGDC_BUTTON_TEXT color of the skin. */
|
||||
virtual void enableOverrideColor(bool enable) = 0;
|
||||
|
||||
//! Checks if an override color is enabled
|
||||
/** \return true if the override color is enabled, false otherwise */
|
||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||
|
||||
//! Sets another color for the background.
|
||||
virtual void setBackgroundColor(video::SColor color) = 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;
|
||||
|
||||
//! Gets the background color
|
||||
/** \return: The background color */
|
||||
virtual video::SColor getBackgroundColor() const = 0;
|
||||
|
||||
//! Sets whether to draw the border
|
||||
virtual void setDrawBorder(bool draw) = 0;
|
||||
|
||||
//! Checks if border drawing is enabled
|
||||
/** \return true if border drawing is enabled, false otherwise */
|
||||
virtual bool isDrawBorderEnabled() const = 0;
|
||||
|
||||
//! Sets text justification mode
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||
/** \param enable: If set to true, words going over one line are
|
||||
broken on to the next line. */
|
||||
virtual void setWordWrap(bool enable) = 0;
|
||||
|
||||
//! Checks if word wrap is enabled
|
||||
/** \return true if word wrap is enabled, false otherwise */
|
||||
virtual bool isWordWrapEnabled(void) const = 0;
|
||||
|
||||
//! Returns the height of the text in pixels when it is drawn.
|
||||
/** This is useful for adjusting the layout of gui elements based on the height
|
||||
of the multiline text in this element.
|
||||
\return Height of text in pixels. */
|
||||
virtual s32 getTextHeight() const = 0;
|
||||
|
||||
//! Returns the width of the current text, in the current font
|
||||
/** If the text is broken, this returns the width of the widest line
|
||||
\return The width of the text, or the widest broken line. */
|
||||
virtual s32 getTextWidth(void) const = 0;
|
||||
|
||||
//! Set whether the text in this label should be clipped if it goes outside bounds
|
||||
virtual void setTextRestrainedInside(bool restrainedInside) = 0;
|
||||
|
||||
//! Checks if the text in this label should be clipped if it goes outside bounds
|
||||
virtual bool isTextRestrainedInside() const = 0;
|
||||
|
||||
//! Set whether the string should be interpreted as right-to-left (RTL) text
|
||||
/** \note This component does not implement the Unicode bidi standard, the
|
||||
text of the component should be already RTL if you call this. The
|
||||
main difference when RTL is enabled is that the linebreaks for multiline
|
||||
elements are performed starting from the end.
|
||||
*/
|
||||
virtual void setRightToLeft(bool rtl) = 0;
|
||||
|
||||
//! Checks whether the text in this element should be interpreted as right-to-left
|
||||
virtual bool isRightToLeft() const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -1,164 +1,151 @@
|
||||
// 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_TAB_CONTROL_H_INCLUDED__
|
||||
#define __I_GUI_TAB_CONTROL_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
#include "IGUISkin.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUITab;
|
||||
|
||||
//! A standard tab control
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_TAB_CHANGED
|
||||
*/
|
||||
class IGUITabControl : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Adds a tab
|
||||
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
||||
|
||||
//! Adds an existing tab
|
||||
/** Note that it will also add the tab as a child of this TabControl.
|
||||
\return Index of added tab or -1 for failure*/
|
||||
virtual s32 addTab(IGUITab* tab) = 0;
|
||||
|
||||
//! Insert the tab at the given index
|
||||
/** \return The tab on success or NULL on failure. */
|
||||
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0;
|
||||
|
||||
//! Insert an existing tab
|
||||
/** Note that it will also add the tab as a child of this TabControl.
|
||||
\param idx Index at which tab will be inserted. Later tabs will be moved.
|
||||
Previous active tab will stay active unless this is the first
|
||||
element to be inserted in which case it becomes active.
|
||||
\param tab New tab to insert.
|
||||
\param serializationMode Internally used for serialization. You should not need this.
|
||||
When true it reserves space for the index, doesn't move but replaces tabs
|
||||
and it doesn't change the active tab.
|
||||
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
||||
virtual s32 insertTab(s32 idx, IGUITab* tab, bool serializationMode=false) = 0;
|
||||
|
||||
//! Removes a tab from the tabcontrol
|
||||
virtual void removeTab(s32 idx) = 0;
|
||||
|
||||
//! Clears the tabcontrol removing all tabs
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Returns amount of tabs in the tabcontrol
|
||||
virtual s32 getTabCount() const = 0;
|
||||
|
||||
//! Returns a tab based on zero based index
|
||||
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
||||
\return Returns pointer to the Tab. Returns 0 if no tab
|
||||
is corresponding to this tab. */
|
||||
virtual IGUITab* getTab(s32 idx) const = 0;
|
||||
|
||||
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
||||
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
||||
those can be tabs, but we allow looking for any kind of IGUIElement* as there are some
|
||||
use-cases for that even if it just returns 0. For example this way you can check for
|
||||
all children of this gui-element if they are tabs or some non-tab children.*/
|
||||
virtual s32 getTabIndex(const IGUIElement *tab) const = 0;
|
||||
|
||||
//! Brings a tab to front.
|
||||
/** \param idx: number of the tab.
|
||||
\return Returns true if successful. */
|
||||
virtual bool setActiveTab(s32 idx) = 0;
|
||||
|
||||
//! Brings a tab to front.
|
||||
/** \param tab: pointer to the tab.
|
||||
\return Returns true if successful. */
|
||||
virtual bool setActiveTab(IGUITab *tab) = 0;
|
||||
|
||||
//! Returns which tab is currently active
|
||||
virtual s32 getActiveTab() const = 0;
|
||||
|
||||
//! get the the id of the tab at the given absolute coordinates
|
||||
/** \return The id of the tab or -1 when no tab is at those coordinates*/
|
||||
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
||||
|
||||
//! Set the height of the tabs
|
||||
virtual void setTabHeight( s32 height ) = 0;
|
||||
|
||||
//! Get the height of the tabs
|
||||
/** return Returns the height of the tabs */
|
||||
virtual s32 getTabHeight() const = 0;
|
||||
|
||||
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
||||
virtual void setTabMaxWidth(s32 width ) = 0;
|
||||
|
||||
//! get the maximal width of a tab
|
||||
virtual s32 getTabMaxWidth() const = 0;
|
||||
|
||||
//! Set the alignment of the tabs
|
||||
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
||||
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0;
|
||||
|
||||
//! Get the alignment of the tabs
|
||||
/** return Returns the alignment of the tabs */
|
||||
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
||||
|
||||
//! Set the extra width added to tabs on each side of the text
|
||||
virtual void setTabExtraWidth( s32 extraWidth ) = 0;
|
||||
|
||||
//! Get the extra width added to tabs on each side of the text
|
||||
/** return Returns the extra width of the tabs */
|
||||
virtual s32 getTabExtraWidth() const = 0;
|
||||
};
|
||||
|
||||
//! A tab-page, onto which other gui elements could be added.
|
||||
/** IGUITab refers mostly to the page itself, but also carries some data about the tab in the tabbar of an IGUITabControl. */
|
||||
class IGUITab : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> 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
|
||||
virtual void setDrawBackground(bool draw=true) = 0;
|
||||
|
||||
//! sets the color of the background, if it should be drawn.
|
||||
virtual void setBackgroundColor(video::SColor c) = 0;
|
||||
|
||||
//! returns true if the tab is drawing its background, false if not
|
||||
virtual bool isDrawingBackground() const = 0;
|
||||
|
||||
//! returns the color of the background
|
||||
virtual video::SColor getBackgroundColor() const = 0;
|
||||
|
||||
//! sets the color of it's text in the tab-bar
|
||||
virtual void setTextColor(video::SColor c) = 0;
|
||||
|
||||
//! gets the color of the text
|
||||
virtual video::SColor getTextColor() const = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
#include "SColor.h"
|
||||
#include "IGUISkin.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class IGUITab;
|
||||
|
||||
//! A standard tab control
|
||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||
\li EGET_TAB_CHANGED
|
||||
*/
|
||||
class IGUITabControl : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Adds a tab
|
||||
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
||||
|
||||
//! Adds an existing tab
|
||||
/** Note that it will also add the tab as a child of this TabControl.
|
||||
\return Index of added tab or -1 for failure*/
|
||||
virtual s32 addTab(IGUITab* tab) = 0;
|
||||
|
||||
//! Insert the tab at the given index
|
||||
/** \return The tab on success or NULL on failure. */
|
||||
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0;
|
||||
|
||||
//! Insert an existing tab
|
||||
/** Note that it will also add the tab as a child of this TabControl.
|
||||
\param idx Index at which tab will be inserted. Later tabs will be moved.
|
||||
Previous active tab will stay active unless this is the first
|
||||
element to be inserted in which case it becomes active.
|
||||
\param tab New tab to insert.
|
||||
\param serializationMode Internally used for serialization. You should not need this.
|
||||
When true it reserves space for the index, doesn't move but replaces tabs
|
||||
and it doesn't change the active tab.
|
||||
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
||||
virtual s32 insertTab(s32 idx, IGUITab* tab, bool serializationMode=false) = 0;
|
||||
|
||||
//! Removes a tab from the tabcontrol
|
||||
virtual void removeTab(s32 idx) = 0;
|
||||
|
||||
//! Clears the tabcontrol removing all tabs
|
||||
virtual void clear() = 0;
|
||||
|
||||
//! Returns amount of tabs in the tabcontrol
|
||||
virtual s32 getTabCount() const = 0;
|
||||
|
||||
//! Returns a tab based on zero based index
|
||||
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
||||
\return Returns pointer to the Tab. Returns 0 if no tab
|
||||
is corresponding to this tab. */
|
||||
virtual IGUITab* getTab(s32 idx) const = 0;
|
||||
|
||||
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
||||
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
||||
those can be tabs, but we allow looking for any kind of IGUIElement* as there are some
|
||||
use-cases for that even if it just returns 0. For example this way you can check for
|
||||
all children of this gui-element if they are tabs or some non-tab children.*/
|
||||
virtual s32 getTabIndex(const IGUIElement *tab) const = 0;
|
||||
|
||||
//! Brings a tab to front.
|
||||
/** \param idx: number of the tab.
|
||||
\return Returns true if successful. */
|
||||
virtual bool setActiveTab(s32 idx) = 0;
|
||||
|
||||
//! Brings a tab to front.
|
||||
/** \param tab: pointer to the tab.
|
||||
\return Returns true if successful. */
|
||||
virtual bool setActiveTab(IGUITab *tab) = 0;
|
||||
|
||||
//! Returns which tab is currently active
|
||||
virtual s32 getActiveTab() const = 0;
|
||||
|
||||
//! get the the id of the tab at the given absolute coordinates
|
||||
/** \return The id of the tab or -1 when no tab is at those coordinates*/
|
||||
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
||||
|
||||
//! Set the height of the tabs
|
||||
virtual void setTabHeight( s32 height ) = 0;
|
||||
|
||||
//! Get the height of the tabs
|
||||
/** return Returns the height of the tabs */
|
||||
virtual s32 getTabHeight() const = 0;
|
||||
|
||||
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
||||
virtual void setTabMaxWidth(s32 width ) = 0;
|
||||
|
||||
//! get the maximal width of a tab
|
||||
virtual s32 getTabMaxWidth() const = 0;
|
||||
|
||||
//! Set the alignment of the tabs
|
||||
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
||||
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0;
|
||||
|
||||
//! Get the alignment of the tabs
|
||||
/** return Returns the alignment of the tabs */
|
||||
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
||||
|
||||
//! Set the extra width added to tabs on each side of the text
|
||||
virtual void setTabExtraWidth( s32 extraWidth ) = 0;
|
||||
|
||||
//! Get the extra width added to tabs on each side of the text
|
||||
/** return Returns the extra width of the tabs */
|
||||
virtual s32 getTabExtraWidth() const = 0;
|
||||
};
|
||||
|
||||
//! A tab-page, onto which other gui elements could be added.
|
||||
/** IGUITab refers mostly to the page itself, but also carries some data about the tab in the tabbar of an IGUITabControl. */
|
||||
class IGUITab : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
|
||||
|
||||
//! sets if the tab should draw its background
|
||||
virtual void setDrawBackground(bool draw=true) = 0;
|
||||
|
||||
//! sets the color of the background, if it should be drawn.
|
||||
virtual void setBackgroundColor(video::SColor c) = 0;
|
||||
|
||||
//! returns true if the tab is drawing its background, false if not
|
||||
virtual bool isDrawingBackground() const = 0;
|
||||
|
||||
//! returns the color of the background
|
||||
virtual video::SColor getBackgroundColor() const = 0;
|
||||
|
||||
//! sets the color of it's text in the tab-bar
|
||||
virtual void setTextColor(video::SColor c) = 0;
|
||||
|
||||
//! gets the color of the text
|
||||
virtual video::SColor getTextColor() const = 0;
|
||||
};
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
@ -1,40 +1,36 @@
|
||||
// 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_TOOL_BAR_H_INCLUDED__
|
||||
#define __I_GUI_TOOL_BAR_H_INCLUDED__
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
namespace gui
|
||||
{
|
||||
class IGUIButton;
|
||||
|
||||
//! Stays at the top of its parent like the menu bar and contains tool buttons
|
||||
class IGUIToolBar : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Adds a button to the tool bar
|
||||
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
||||
video::ITexture* img=0, video::ITexture* pressedimg=0,
|
||||
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IGUIElement.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
class ITexture;
|
||||
} // end namespace video
|
||||
namespace gui
|
||||
{
|
||||
class IGUIButton;
|
||||
|
||||
//! Stays at the top of its parent like the menu bar and contains tool buttons
|
||||
class IGUIToolBar : public IGUIElement
|
||||
{
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
||||
|
||||
//! Adds a button to the tool bar
|
||||
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
||||
video::ITexture* img=0, video::ITexture* pressedimg=0,
|
||||
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace gui
|
||||
} // end namespace irr
|
||||
|
@ -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
|
||||
|
1058
include/IImage.h
1058
include/IImage.h
File diff suppressed because it is too large
Load Diff
@ -1,66 +1,51 @@
|
||||
// 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_SURFACE_LOADER_H_INCLUDED__
|
||||
#define __I_SURFACE_LOADER_H_INCLUDED__
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "IImage.h"
|
||||
#include "ITexture.h"
|
||||
#include "path.h"
|
||||
#include "irrArray.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
} // end namespace io
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Class which is able to create a image from a file.
|
||||
/** If you want the Irrlicht Engine be able to load textures of
|
||||
currently unsupported file formats (e.g .gif), then implement
|
||||
this and add your new Surface loader with
|
||||
IVideoDriver::addExternalImageLoader() to the engine. */
|
||||
class IImageLoader : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check is based on the file extension (e.g. ".tga")
|
||||
\param filename Name of file to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check might look into the file.
|
||||
\param file File handle to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
|
||||
|
||||
//! Creates a surface from the file
|
||||
/** \param file File handle to check.
|
||||
\return Pointer to newly created image, or 0 upon error. */
|
||||
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 irr
|
||||
|
||||
#endif
|
||||
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "IReferenceCounted.h"
|
||||
#include "IImage.h"
|
||||
#include "ITexture.h"
|
||||
#include "path.h"
|
||||
#include "irrArray.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace io
|
||||
{
|
||||
class IReadFile;
|
||||
} // end namespace io
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Class which is able to create a image from a file.
|
||||
/** If you want the Irrlicht Engine be able to load textures of
|
||||
currently unsupported file formats (e.g .gif), then implement
|
||||
this and add your new Surface loader with
|
||||
IVideoDriver::addExternalImageLoader() to the engine. */
|
||||
class IImageLoader : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check is based on the file extension (e.g. ".tga")
|
||||
\param filename Name of file to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||
|
||||
//! Check if the file might be loaded by this class
|
||||
/** Check might look into the file.
|
||||
\param file File handle to check.
|
||||
\return True if file seems to be loadable. */
|
||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
|
||||
|
||||
//! Creates a surface from the file
|
||||
/** \param file File handle to check.
|
||||
\return Pointer to newly created image, or 0 upon error. */
|
||||
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user