mirror of
https://github.com/minetest/irrlicht.git
synced 2025-07-03 00:30:26 +02:00
Compare commits
252 Commits
Author | SHA1 | Date | |
---|---|---|---|
bdcd27ab5b | |||
345285786f | |||
dda9b23c3d | |||
b349266855 | |||
ee2467d622 | |||
88ca26c418 | |||
8f44270e4a | |||
edc678f995 | |||
0faeea33c3 | |||
f86b9b93e8 | |||
a3ec3a88e8 | |||
7df45b4cf3 | |||
a2b6244f54 | |||
3983c29645 | |||
73e62f8676 | |||
fb4ee6ac93 | |||
91e4129615 | |||
54b82aad26 | |||
03dd8b0336 | |||
6e6b4a6f3c | |||
0110826ce9 | |||
4e52d547b2 | |||
9a439a3646 | |||
854e97f57c | |||
22f2c37322 | |||
94cb0cc19d | |||
9b52d6fb0d | |||
16a99c2079 | |||
bb7c06d32a | |||
a2884e4000 | |||
b284ea076b | |||
85081d6fe0 | |||
eafc282efd | |||
8c2ad025b1 | |||
a07cfc0f7a | |||
f725b68c57 | |||
99be15f40b | |||
6fccc79270 | |||
7cade6f27f | |||
ae63f1bf02 | |||
dd14486d3f | |||
4a7d3de89a | |||
631c0fa77b | |||
9813b460e1 | |||
565f14677c | |||
f53af0f2cf | |||
05ebc43222 | |||
c01de80583 | |||
fbdc4ee8d5 | |||
2c086e5fdc | |||
627a3a5172 | |||
01e05f3c94 | |||
b673a4b2bb | |||
5e01152f56 | |||
c2dd664fc6 | |||
774d3d6d2b | |||
e1f41edd29 | |||
c766c3a023 | |||
93eebed8c9 | |||
645b51a34d | |||
bcc53e1e1a | |||
d4735ebc76 | |||
063079b372 | |||
3b198bdfda | |||
5b2f1927d0 | |||
9954667c45 | |||
ea1b58387e | |||
d767d27ca8 | |||
6f4f7c4d75 | |||
103ab16679 | |||
64688f4490 | |||
827710f74a | |||
80e160935d | |||
4506d23dc3 | |||
028cb8dbed | |||
a5c9945bb8 | |||
cfb73d07d7 | |||
87f7cf3438 | |||
ebe4fd0a59 | |||
fc7e3f2dff | |||
b0a070d980 | |||
d9216362ec | |||
d8a21cb25f | |||
9c54d927b9 | |||
b89455f385 | |||
6a5fceb8fd | |||
0b9ee5884f | |||
679dfd3343 | |||
f9d7a632f5 | |||
dc43583a2c | |||
03fd4ff533 | |||
b7292226b4 | |||
7298b46504 | |||
af20d9ff86 | |||
00dd1f8ef3 | |||
364cb37698 | |||
7ce9169d8d | |||
ebdb2e410b | |||
a28b8f9e91 | |||
6cd27d5dca | |||
04ab99f218 | |||
d753c8b782 | |||
6a3ed6428f | |||
3492fd0d2d | |||
c6b06533f3 | |||
e609f5f263 | |||
ddecc0fae2 | |||
dd3a34d674 | |||
0735220f86 | |||
0740d055ac | |||
1d4672bd92 | |||
ef3bab610d | |||
d98dc90b38 | |||
c311d01c07 | |||
d7f75ae882 | |||
e0d4d7d8b4 | |||
fb7a0e4298 | |||
a994c31ccf | |||
c40045a40a | |||
c0ef1092c0 | |||
5ececc7d29 | |||
9e0189019e | |||
b249e4523d | |||
041377c24c | |||
83699a835d | |||
98589d2fd2 | |||
8c856408f5 | |||
cbc7aeb302 | |||
09af5ac00d | |||
2c6efbdf06 | |||
510976f130 | |||
b958fdc271 | |||
1387370260 | |||
49b6ccde72 | |||
acbc90a000 | |||
6a2a569233 | |||
1f15fd0805 | |||
81ad195aa3 | |||
13680ef42d | |||
44f7c22bbf | |||
2e477a07d1 | |||
78d0819a2c | |||
df07b3bf99 | |||
523590e16c | |||
8cf02ea27f | |||
efb660e7ed | |||
5f88555ed3 | |||
4ee1ab261e | |||
ab628e641c | |||
1d782702e1 | |||
c4ab49201b | |||
896c825b9e | |||
7a3fc62ada | |||
09043e3da7 | |||
2d81374b34 | |||
aa1696a7e6 | |||
e01f285c8f | |||
5eb607f86f | |||
fc0440ff89 | |||
462657960d | |||
6a152e8629 | |||
718ba69e1b | |||
54314691ec | |||
36a3a7f349 | |||
ca5f005b74 | |||
e850bd102a | |||
a677f5a01a | |||
f5d3448b17 | |||
3a074e4124 | |||
70ee4b05aa | |||
58a96b7d23 | |||
ba1cd19983 | |||
a67f3003de | |||
4dda28450f | |||
219b7fd7d2 | |||
28d0e0644c | |||
d97d1708d6 | |||
799c8b936f | |||
8da1bcf58b | |||
d86abb40c1 | |||
53b9eaa831 | |||
1967d71cfb | |||
c5373262ca | |||
939b3f7bfb | |||
9c2c91776e | |||
6f3435f349 | |||
9f9d22ca33 | |||
edb381bd50 | |||
8ffa7eafea | |||
2bff147904 | |||
3cf75cdce4 | |||
a7f9afd289 | |||
98df6eae77 | |||
3ce4b2b5dc | |||
424eb85f4d | |||
6a9e0f109c | |||
15e3f15b48 | |||
263f243523 | |||
c5ee8c8397 | |||
b0c03b6f3b | |||
679d3a8ba7 | |||
d1f441787a | |||
739a9eaf7c | |||
0acf0de2db | |||
52a0b9d8e5 | |||
0160cdc51d | |||
5a1565072a | |||
25a7074c9a | |||
df8881898d | |||
ba77d01c91 | |||
f641500d01 | |||
02c6449f0d | |||
2331083837 | |||
d84dc18e13 | |||
ea0ca7f917 | |||
82d1feb933 | |||
d81db9dd6d | |||
6c68217426 | |||
21c61e9973 | |||
5a5a7d04b7 | |||
b279810437 | |||
e484698ba2 | |||
5f76be9380 | |||
6de0afa8b3 | |||
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 | |||
38f18eec56 |
@ -1,3 +1,5 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
|
||||
|
168
.github/workflows/build.yml
vendored
168
.github/workflows/build.yml
vendored
@ -8,22 +8,23 @@ on:
|
||||
jobs:
|
||||
|
||||
linux-gl:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu:bionic
|
||||
env: { LANG: "C.UTF-8" }
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install deps
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||
sudo apt-get update
|
||||
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
|
||||
@ -35,22 +36,18 @@ jobs:
|
||||
path: ./irrlicht-linux.tar.gz
|
||||
|
||||
linux-gles:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu:bionic
|
||||
env: { LANG: "C.UTF-8" }
|
||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install deps
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||
sudo apt-get update
|
||||
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)
|
||||
@ -61,24 +58,20 @@ jobs:
|
||||
- name: Test (Xvfb)
|
||||
run: |
|
||||
cd bin/Linux
|
||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||
|
||||
linux-sdl:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu:jammy
|
||||
env: { LANG: "C.UTF-8" }
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install deps
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||
sudo apt-get update
|
||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
sed '/#define _IRR_COMPILE_WITH_SDL_DEVICE_/ s|^//||g' -i include/IrrCompileConfig.h
|
||||
cmake . -DBUILD_EXAMPLES=1
|
||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
|
||||
make -j2
|
||||
|
||||
- name: Test (headless)
|
||||
@ -86,49 +79,85 @@ jobs:
|
||||
cd bin/Linux
|
||||
./AutomatedTest null
|
||||
|
||||
win32:
|
||||
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@v3
|
||||
- name: Install deps
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
|
||||
make -j2
|
||||
|
||||
- name: Test (headless)
|
||||
run: |
|
||||
cd bin/Linux
|
||||
./AutomatedTest null
|
||||
|
||||
- name: Test (Xvfb)
|
||||
run: |
|
||||
cd bin/Linux
|
||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
||||
|
||||
linux-sdl-gles2:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- 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@v3
|
||||
- name: Install compiler
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||
wget http://minetest.kitsunemimi.pw/mingw-w64-i686_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
||||
sudo tar -xaf mingw.tar.xz -C /usr
|
||||
./scripts/ci-get-mingw.sh ${{matrix.config.arch}}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
./scripts/ci-build-mingw.sh package
|
||||
env:
|
||||
CC: i686-w64-mingw32-gcc
|
||||
CXX: i686-w64-mingw32-g++
|
||||
CC: ${{matrix.config.arch}}-w64-mingw32-gcc
|
||||
CXX: ${{matrix.config.arch}}-w64-mingw32-g++
|
||||
extras: ${{matrix.config.extras}}
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: irrlicht-win32
|
||||
path: ./irrlicht-win32.zip
|
||||
|
||||
win64:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install compiler
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||
wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
||||
sudo tar -xaf mingw.tar.xz -C /usr
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
./scripts/ci-build-mingw.sh package
|
||||
env:
|
||||
CC: x86_64-w64-mingw32-gcc
|
||||
CXX: x86_64-w64-mingw32-g++
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: irrlicht-win64
|
||||
path: ./irrlicht-win64.zip
|
||||
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
||||
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
||||
|
||||
macos:
|
||||
runs-on: macos-latest
|
||||
@ -148,12 +177,26 @@ jobs:
|
||||
run: |
|
||||
./bin/OSX/AutomatedTest null
|
||||
|
||||
macos-sdl:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- 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 }}
|
||||
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
||||
runs-on: windows-2019
|
||||
env:
|
||||
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
||||
# 2022.05.10
|
||||
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
||||
# 2023.10.19
|
||||
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@ -167,6 +210,14 @@ jobs:
|
||||
arch: x64
|
||||
generator: "-G'Visual Studio 16 2019' -A x64"
|
||||
vcpkg_triplet: x64-windows
|
||||
sdl:
|
||||
-
|
||||
use: FALSE
|
||||
label: '(no SDL)'
|
||||
-
|
||||
use: TRUE
|
||||
label: '(with SDL)'
|
||||
vcpkg_packages: sdl2
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -175,7 +226,7 @@ jobs:
|
||||
- name: Restore from cache and run vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
with:
|
||||
vcpkgArguments: ${{env.vcpkg_packages}}
|
||||
vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
|
||||
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
||||
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
||||
@ -184,6 +235,7 @@ jobs:
|
||||
- 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 .
|
||||
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -5,6 +5,7 @@ install_manifest.txt
|
||||
IrrlichtMtConfig.cmake
|
||||
IrrlichtMtConfigVersion.cmake
|
||||
IrrlichtMtTargets.cmake
|
||||
CTestTestfile.cmake
|
||||
Makefile
|
||||
libs/*
|
||||
*.so*
|
||||
@ -19,3 +20,6 @@ scripts/glext.h
|
||||
*.dir/
|
||||
*.sln
|
||||
*visualstudio/
|
||||
|
||||
# vscode cmake plugin
|
||||
build/*
|
||||
|
@ -1,13 +1,6 @@
|
||||
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 10)
|
||||
set(IRRLICHTMT_REVISION 14)
|
||||
|
||||
project(Irrlicht
|
||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||
@ -16,6 +9,9 @@ project(Irrlicht
|
||||
|
||||
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if(ANDROID)
|
||||
@ -38,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)
|
||||
|
26
LICENSE
Normal file
26
LICENSE
Normal file
@ -0,0 +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.
|
10
README.md
10
README.md
@ -1,9 +1,8 @@
|
||||
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 was stripped-down and customized 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
|
||||
@ -20,6 +19,11 @@ The following libraries are required to be installed:
|
||||
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: `OFF`) - Use SDL2 instead of native platform device
|
||||
|
||||
e.g. on a Linux system you might want to build for local use like this:
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
If you wish to compile the engine in linux yourself,
|
||||
goto the \source directory. Run a 'make' in the subfolder 'Irrlicht'.
|
||||
After this, you should be able to make all example applications in \examples.
|
||||
Then just start an X Server and run them, from the directory where they are.
|
@ -1 +0,0 @@
|
||||
If you want to compile only the Irrlicht Engine you should use XCode project available at source/Irrlicht/ directory. You can also use examples/BuildAllExamples.xcworkspace file to build the Irrlicht Engine + all examples.
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
@ -1,25 +0,0 @@
|
||||
The Win32-VisualStudio version is currently (Irrlicht 1.8) compiled with VS 2010 using the Windows 7.1 SDK as platform toolset.
|
||||
You might get the necessary Windows Platform SDK here: http://msdn.microsoft.com/en-us/windows/bb980924.aspx
|
||||
|
||||
To link to that Irrlicht.dll you need to set platform toolset in your VS version to the same target or re-compile the Irrlicht.dll using another platform toolset.
|
||||
|
||||
To re-compile Irrlicht for Win32-VisualStudio:
|
||||
There are several project files for different VS versions in source/Irrlicht.
|
||||
Irrlicht10.0.sln is for VS 2010
|
||||
Irrlicht11.0.sln is for VS 2012
|
||||
Irrlicht12.0.sln is for VS 2013
|
||||
|
||||
To compile Irrlicht + all examples and all tools check the BuildAllExamples_*.sln files in the examples folder.
|
||||
|
||||
For newer VS versions you have update one of those projects (VS usually can do that automatically when you open an older solution file).
|
||||
|
||||
Currently each of those solutions does set the platform toolset "Windows 7.1 SDK" (to be compatible to each other).
|
||||
You might want to change that in the project settings and set it to your current version.
|
||||
Make sure you use the same platform toolset in your application and in the engine.
|
||||
Also when compiling examples each example has to use the same platform toolset as was used for the engine.
|
||||
|
||||
Platform should be Win32
|
||||
Configuration is by default "Release"
|
||||
But you can also chose "Debug" if you want Irrlicht with Debug information.
|
||||
Static builds are possible but you have to additionally set the _IRR_STATIC_LIB_ define in the application when linking to a static Irrlicht.lib
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
@ -1,16 +0,0 @@
|
||||
If you wish to compile Irrlicht for Win32-gcc you have several choices.
|
||||
|
||||
1. You can work from within a MinGW shell.
|
||||
Go to the folder source/Irrlicht and run the Makefile with:
|
||||
make win32
|
||||
Examples can be build by going into the folder of the example (for example examples/01.HelloWorld) and running the Makefile with:
|
||||
make all_win32
|
||||
|
||||
2. Use the Code::Blocks IDE
|
||||
There is a project file called Irrlicht-gcc.cbp in source/Irrlicht to compile just the engine.
|
||||
Be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
||||
|
||||
There is also Code::Blocks workspace file in the examples folder called BuildAllExamples.workspace
|
||||
Again be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
||||
This workspace allows you to compile the engine together with all examples and tools.
|
||||
|
@ -1 +0,0 @@
|
||||
If you wish to compile Irrlicht for emscripten please check the documenation in examples/01.HelloWorld_emscripten.
|
5527
changes.txt
5527
changes.txt
File diff suppressed because it is too large
Load Diff
@ -1,26 +0,0 @@
|
||||
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.
|
@ -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
@ -10,15 +10,19 @@ static int test_fail = 0;
|
||||
void test_irr_array();
|
||||
void test_irr_string();
|
||||
|
||||
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
||||
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||
{
|
||||
if (core::stringc(arg_) == "null")
|
||||
if (arg_ == "null")
|
||||
return video::EDT_NULL;
|
||||
|
||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
|
||||
if (arg_ == "ogles1")
|
||||
return video::EDT_OGLES1;
|
||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))
|
||||
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;
|
||||
}
|
||||
|
||||
@ -83,8 +87,12 @@ int main(int argc, char *argv[])
|
||||
|
||||
const io::path mediaPath = getExampleMediaPath();
|
||||
|
||||
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
|
||||
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
||||
check(mesh_file, "mesh file loading");
|
||||
scene::IAnimatedMesh* mesh = smgr->getMesh(mesh_file);
|
||||
check(mesh, "mesh loading");
|
||||
if (mesh_file)
|
||||
mesh_file->drop();
|
||||
if (mesh)
|
||||
{
|
||||
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
||||
@ -92,10 +100,12 @@ int main(int argc, char *argv[])
|
||||
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
||||
if (node)
|
||||
{
|
||||
node->setMaterialFlag(video::EMF_LIGHTING, false);
|
||||
node->forEachMaterial([tex] (video::SMaterial &mat) {
|
||||
mat.Lighting = false;
|
||||
mat.setTexture(0, tex);
|
||||
});
|
||||
node->setFrameLoop(0, 29);
|
||||
node->setAnimationSpeed(30);
|
||||
node->setMaterialTexture(0, tex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -168,22 +168,32 @@ static void test_methods()
|
||||
|
||||
static void test_conv()
|
||||
{
|
||||
// assumes Unicode and UTF-8 locale
|
||||
setlocale(LC_CTYPE, "");
|
||||
// locale-independent
|
||||
|
||||
stringw out;
|
||||
multibyteToWString(out, "†††");
|
||||
utf8ToWString(out, "†††");
|
||||
UASSERTEQ(out.size(), 3);
|
||||
for (int i = 0; i < 3; i++)
|
||||
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
||||
|
||||
stringc out2;
|
||||
wStringToMultibyte(out2, L"†††");
|
||||
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()
|
||||
|
@ -1,6 +1,3 @@
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(IRREXAMPLES
|
||||
# removed
|
||||
)
|
||||
|
@ -1,226 +0,0 @@
|
||||
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __C_INDEX_BUFFER_H_INCLUDED__
|
||||
#define __C_INDEX_BUFFER_H_INCLUDED__
|
||||
|
||||
#include "IIndexBuffer.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
class CIndexBuffer : public IIndexBuffer
|
||||
{
|
||||
|
||||
class IIndexList
|
||||
{
|
||||
public:
|
||||
virtual ~IIndexList(){};
|
||||
|
||||
virtual u32 stride() const =0;
|
||||
virtual u32 size() const =0;
|
||||
virtual void push_back(const u32 &element) =0;
|
||||
virtual u32 operator [](u32 index) const =0;
|
||||
virtual u32 getLast() =0;
|
||||
virtual void setValue(u32 index, u32 value) =0;
|
||||
virtual void set_used(u32 usedNow) =0;
|
||||
virtual void reallocate(u32 new_size) =0;
|
||||
virtual u32 allocated_size() const =0;
|
||||
virtual void* pointer() =0;
|
||||
virtual video::E_INDEX_TYPE getType() const =0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class CSpecificIndexList : public IIndexList
|
||||
{
|
||||
public:
|
||||
core::array<T> Indices;
|
||||
|
||||
u32 stride() const override {return sizeof(T);}
|
||||
|
||||
u32 size() const override {return Indices.size();}
|
||||
|
||||
void push_back(const u32 &element) override
|
||||
{
|
||||
// push const ref due to compiler problem with gcc 4.6, big endian
|
||||
Indices.push_back((const T&)element);
|
||||
}
|
||||
|
||||
u32 operator [](u32 index) const override
|
||||
{
|
||||
return (u32)(Indices[index]);
|
||||
}
|
||||
|
||||
u32 getLast() override {return (u32)Indices.getLast();}
|
||||
|
||||
void setValue(u32 index, u32 value) override
|
||||
{
|
||||
Indices[index]=(T)value;
|
||||
}
|
||||
|
||||
void set_used(u32 usedNow) override
|
||||
{
|
||||
Indices.set_used(usedNow);
|
||||
}
|
||||
|
||||
void reallocate(u32 new_size) override
|
||||
{
|
||||
Indices.reallocate(new_size);
|
||||
}
|
||||
|
||||
u32 allocated_size() const override
|
||||
{
|
||||
return Indices.allocated_size();
|
||||
}
|
||||
|
||||
void* pointer() override {return Indices.pointer();}
|
||||
|
||||
video::E_INDEX_TYPE getType() const 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);
|
||||
void setType(video::E_INDEX_TYPE IndexType) 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;
|
||||
}
|
||||
|
||||
void* getData() override {return Indices->pointer();}
|
||||
|
||||
video::E_INDEX_TYPE getType() const override {return Indices->getType();}
|
||||
|
||||
u32 stride() const override {return Indices->stride();}
|
||||
|
||||
u32 size() const override
|
||||
{
|
||||
return Indices->size();
|
||||
}
|
||||
|
||||
void push_back(const u32 &element) override
|
||||
{
|
||||
Indices->push_back(element);
|
||||
}
|
||||
|
||||
u32 operator [](u32 index) const override
|
||||
{
|
||||
return (*Indices)[index];
|
||||
}
|
||||
|
||||
u32 getLast() override
|
||||
{
|
||||
return Indices->getLast();
|
||||
}
|
||||
|
||||
void setValue(u32 index, u32 value) override
|
||||
{
|
||||
Indices->setValue(index, value);
|
||||
}
|
||||
|
||||
void set_used(u32 usedNow) override
|
||||
{
|
||||
Indices->set_used(usedNow);
|
||||
}
|
||||
|
||||
void reallocate(u32 new_size) override
|
||||
{
|
||||
Indices->reallocate(new_size);
|
||||
}
|
||||
|
||||
u32 allocated_size() const override
|
||||
{
|
||||
return Indices->allocated_size();
|
||||
}
|
||||
|
||||
void* pointer() override
|
||||
{
|
||||
return Indices->pointer();
|
||||
}
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||
{
|
||||
return MappingHint;
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||
{
|
||||
MappingHint=NewMappingHint;
|
||||
}
|
||||
|
||||
//! flags the mesh as changed, reloads hardware buffers
|
||||
void setDirty() override
|
||||
{
|
||||
++ChangedID;
|
||||
}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
u32 getChangedID() const override {return ChangedID;}
|
||||
|
||||
E_HARDWARE_MAPPING MappingHint;
|
||||
u32 ChangedID;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -1,210 +0,0 @@
|
||||
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __C_VERTEX_BUFFER_H_INCLUDED__
|
||||
#define __C_VERTEX_BUFFER_H_INCLUDED__
|
||||
|
||||
#include "IVertexBuffer.h"
|
||||
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace scene
|
||||
{
|
||||
|
||||
class CVertexBuffer : public IVertexBuffer
|
||||
{
|
||||
class IVertexList
|
||||
{
|
||||
public:
|
||||
virtual ~IVertexList(){};
|
||||
|
||||
virtual u32 stride() const =0;
|
||||
|
||||
virtual u32 size() const =0;
|
||||
|
||||
virtual void push_back (const video::S3DVertex &element) =0;
|
||||
virtual video::S3DVertex& operator [](const u32 index) const =0;
|
||||
virtual video::S3DVertex& getLast() =0;
|
||||
virtual void set_used(u32 usedNow) =0;
|
||||
virtual void reallocate(u32 new_size) =0;
|
||||
virtual u32 allocated_size() const =0;
|
||||
virtual video::S3DVertex* pointer() =0;
|
||||
virtual video::E_VERTEX_TYPE getType() const =0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class CSpecificVertexList : public IVertexList
|
||||
{
|
||||
public:
|
||||
core::array<T> Vertices;
|
||||
|
||||
u32 stride() const override {return sizeof(T);}
|
||||
|
||||
u32 size() const override {return Vertices.size();}
|
||||
|
||||
void push_back (const video::S3DVertex &element) override
|
||||
{Vertices.push_back((T&)element);}
|
||||
|
||||
video::S3DVertex& operator [](const u32 index) const override
|
||||
{return (video::S3DVertex&)Vertices[index];}
|
||||
|
||||
video::S3DVertex& getLast() override
|
||||
{return (video::S3DVertex&)Vertices.getLast();}
|
||||
|
||||
void set_used(u32 usedNow) override
|
||||
{Vertices.set_used(usedNow);}
|
||||
|
||||
void reallocate(u32 new_size) override
|
||||
{Vertices.reallocate(new_size);}
|
||||
|
||||
u32 allocated_size() const override
|
||||
{
|
||||
return Vertices.allocated_size();
|
||||
}
|
||||
|
||||
video::S3DVertex* pointer() override {return Vertices.pointer();}
|
||||
|
||||
video::E_VERTEX_TYPE getType() const 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;
|
||||
}
|
||||
|
||||
|
||||
void setType(video::E_VERTEX_TYPE vertexType) 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;
|
||||
}
|
||||
|
||||
void* getData() override {return Vertices->pointer();}
|
||||
|
||||
video::E_VERTEX_TYPE getType() const override {return Vertices->getType();}
|
||||
|
||||
u32 stride() const override {return Vertices->stride();}
|
||||
|
||||
u32 size() const override
|
||||
{
|
||||
return Vertices->size();
|
||||
}
|
||||
|
||||
void push_back (const video::S3DVertex &element) override
|
||||
{
|
||||
Vertices->push_back(element);
|
||||
}
|
||||
|
||||
video::S3DVertex& operator [](const u32 index) const override
|
||||
{
|
||||
return (*Vertices)[index];
|
||||
}
|
||||
|
||||
video::S3DVertex& getLast() override
|
||||
{
|
||||
return Vertices->getLast();
|
||||
}
|
||||
|
||||
void set_used(u32 usedNow) override
|
||||
{
|
||||
Vertices->set_used(usedNow);
|
||||
}
|
||||
|
||||
void reallocate(u32 new_size) override
|
||||
{
|
||||
Vertices->reallocate(new_size);
|
||||
}
|
||||
|
||||
u32 allocated_size() const override
|
||||
{
|
||||
return Vertices->allocated_size();
|
||||
}
|
||||
|
||||
video::S3DVertex* pointer() override
|
||||
{
|
||||
return Vertices->pointer();
|
||||
}
|
||||
|
||||
//! get the current hardware mapping hint
|
||||
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||
{
|
||||
return MappingHint;
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||
{
|
||||
MappingHint=NewMappingHint;
|
||||
}
|
||||
|
||||
//! flags the mesh as changed, reloads hardware buffers
|
||||
void setDirty() override
|
||||
{
|
||||
++ChangedID;
|
||||
}
|
||||
|
||||
//! Get the currently used ID for identification of changes.
|
||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||
u32 getChangedID() const override {return ChangedID;}
|
||||
|
||||
E_HARDWARE_MAPPING MappingHint;
|
||||
u32 ChangedID;
|
||||
};
|
||||
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -28,9 +28,6 @@ namespace scene
|
||||
//! 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,
|
||||
|
||||
|
@ -25,13 +25,9 @@ namespace irr
|
||||
/** 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 */
|
||||
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.
|
||||
|
@ -121,21 +121,6 @@ namespace video
|
||||
//! 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,
|
||||
|
||||
|
@ -20,33 +20,6 @@ namespace video
|
||||
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. */
|
||||
@ -62,38 +35,12 @@ namespace video
|
||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||
EDT_WEBGL1,
|
||||
|
||||
EDT_OPENGL3,
|
||||
|
||||
//! 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
|
||||
|
||||
|
@ -1,101 +0,0 @@
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __E_MATERIAL_FLAGS_H_INCLUDED__
|
||||
#define __E_MATERIAL_FLAGS_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Material flags
|
||||
enum E_MATERIAL_FLAG
|
||||
{
|
||||
//! Draw as wireframe or filled triangles? Default: false
|
||||
EMF_WIREFRAME = 0x1,
|
||||
|
||||
//! Draw as point cloud or filled triangles? Default: false
|
||||
EMF_POINTCLOUD = 0x2,
|
||||
|
||||
//! Flat or Gouraud shading? Default: true
|
||||
EMF_GOURAUD_SHADING = 0x4,
|
||||
|
||||
//! Will this material be lighted? Default: true
|
||||
EMF_LIGHTING = 0x8,
|
||||
|
||||
//! Is the ZBuffer enabled? Default: true
|
||||
EMF_ZBUFFER = 0x10,
|
||||
|
||||
//! May be written to the zbuffer or is it readonly. Default: true
|
||||
/** This flag is ignored, if the material type is a transparent type. */
|
||||
EMF_ZWRITE_ENABLE = 0x20,
|
||||
|
||||
//! Is backface culling enabled? Default: true
|
||||
EMF_BACK_FACE_CULLING = 0x40,
|
||||
|
||||
//! Is frontface culling enabled? Default: false
|
||||
/** Overrides EMF_BACK_FACE_CULLING if both are enabled. */
|
||||
EMF_FRONT_FACE_CULLING = 0x80,
|
||||
|
||||
//! Is bilinear filtering enabled? Default: true
|
||||
EMF_BILINEAR_FILTER = 0x100,
|
||||
|
||||
//! Is trilinear filtering enabled? Default: false
|
||||
/** If the trilinear filter flag is enabled,
|
||||
the bilinear filtering flag is ignored. */
|
||||
EMF_TRILINEAR_FILTER = 0x200,
|
||||
|
||||
//! Is anisotropic filtering? Default: false
|
||||
/** In Irrlicht you can use anisotropic texture filtering in
|
||||
conjunction with bilinear or trilinear texture filtering
|
||||
to improve rendering results. Primitives will look less
|
||||
blurry with this flag switched on. */
|
||||
EMF_ANISOTROPIC_FILTER = 0x400,
|
||||
|
||||
//! Is fog enabled? Default: false
|
||||
EMF_FOG_ENABLE = 0x800,
|
||||
|
||||
//! Normalizes normals. Default: false
|
||||
/** You can enable this if you need to scale a dynamic lighted
|
||||
model. Usually, its normals will get scaled too then and it
|
||||
will get darker. If you enable the EMF_NORMALIZE_NORMALS flag,
|
||||
the normals will be normalized again, and the model will look
|
||||
as bright as it should. */
|
||||
EMF_NORMALIZE_NORMALS = 0x1000,
|
||||
|
||||
//! Access to all layers texture wrap settings. Overwrites separate layer settings.
|
||||
/** Note that if you want to change TextureWrapU, TextureWrapV, TextureWrapW
|
||||
independently, then you can't work with this flag, but will have to set the variables
|
||||
directly. */
|
||||
EMF_TEXTURE_WRAP = 0x2000,
|
||||
|
||||
//! AntiAliasing mode
|
||||
EMF_ANTI_ALIASING = 0x4000,
|
||||
|
||||
//! ColorMask bits, for enabling the color planes
|
||||
EMF_COLOR_MASK = 0x8000,
|
||||
|
||||
//! ColorMaterial enum for vertex color interpretation
|
||||
EMF_COLOR_MATERIAL = 0x10000,
|
||||
|
||||
//! Flag for enabling/disabling mipmap usage
|
||||
EMF_USE_MIP_MAPS = 0x20000,
|
||||
|
||||
//! Flag for blend operation
|
||||
EMF_BLEND_OPERATION = 0x40000,
|
||||
|
||||
//! Flag for polygon offset
|
||||
EMF_POLYGON_OFFSET = 0x80000,
|
||||
|
||||
//! Flag for blend factor
|
||||
EMF_BLEND_FACTOR = 0x160000
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif // __E_MATERIAL_FLAGS_H_INCLUDED__
|
||||
|
87
include/EMaterialProps.h
Normal file
87
include/EMaterialProps.h
Normal file
@ -0,0 +1,87 @@
|
||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __E_MATERIAL_PROPS_H_INCLUDED__
|
||||
#define __E_MATERIAL_PROPS_H_INCLUDED__
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
//! Material properties
|
||||
enum E_MATERIAL_PROP
|
||||
{
|
||||
//! Corresponds to SMaterial::Wireframe.
|
||||
EMP_WIREFRAME = 0x1,
|
||||
|
||||
//! Corresponds to SMaterial::PointCloud.
|
||||
EMP_POINTCLOUD = 0x2,
|
||||
|
||||
//! Corresponds to SMaterial::GouraudShading.
|
||||
EMP_GOURAUD_SHADING = 0x4,
|
||||
|
||||
//! Corresponds to SMaterial::Lighting.
|
||||
EMP_LIGHTING = 0x8,
|
||||
|
||||
//! Corresponds to SMaterial::ZBuffer.
|
||||
EMP_ZBUFFER = 0x10,
|
||||
|
||||
//! Corresponds to SMaterial::ZWriteEnable.
|
||||
EMP_ZWRITE_ENABLE = 0x20,
|
||||
|
||||
//! Corresponds to SMaterial::BackfaceCulling.
|
||||
EMP_BACK_FACE_CULLING = 0x40,
|
||||
|
||||
//! Corresponds to SMaterial::FrontfaceCulling.
|
||||
EMP_FRONT_FACE_CULLING = 0x80,
|
||||
|
||||
//! Corresponds to SMaterialLayer::MinFilter.
|
||||
EMP_MIN_FILTER = 0x100,
|
||||
|
||||
//! Corresponds to SMaterialLayer::MagFilter.
|
||||
EMP_MAG_FILTER = 0x200,
|
||||
|
||||
//! Corresponds to SMaterialLayer::AnisotropicFilter.
|
||||
EMP_ANISOTROPIC_FILTER = 0x400,
|
||||
|
||||
//! Corresponds to SMaterial::FogEnable.
|
||||
EMP_FOG_ENABLE = 0x800,
|
||||
|
||||
//! Corresponds to SMaterial::NormalizeNormals.
|
||||
EMP_NORMALIZE_NORMALS = 0x1000,
|
||||
|
||||
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
|
||||
//! TextureWrapW.
|
||||
EMP_TEXTURE_WRAP = 0x2000,
|
||||
|
||||
//! Corresponds to SMaterial::AntiAliasing.
|
||||
EMP_ANTI_ALIASING = 0x4000,
|
||||
|
||||
//! Corresponds to SMaterial::ColorMask.
|
||||
EMP_COLOR_MASK = 0x8000,
|
||||
|
||||
//! Corresponds to SMaterial::ColorMaterial.
|
||||
EMP_COLOR_MATERIAL = 0x10000,
|
||||
|
||||
//! Corresponds to SMaterial::UseMipMaps.
|
||||
EMP_USE_MIP_MAPS = 0x20000,
|
||||
|
||||
//! Corresponds to SMaterial::BlendOperation.
|
||||
EMP_BLEND_OPERATION = 0x40000,
|
||||
|
||||
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
|
||||
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
|
||||
EMP_POLYGON_OFFSET = 0x80000,
|
||||
|
||||
//! Corresponds to SMaterial::BlendFactor.
|
||||
EMP_BLEND_FACTOR = 0x100000,
|
||||
};
|
||||
|
||||
} // end namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif // __E_MATERIAL_PROPS_H_INCLUDED__
|
||||
|
@ -18,75 +18,6 @@ namespace video
|
||||
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
|
||||
@ -115,12 +46,6 @@ namespace video
|
||||
//! 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,
|
||||
|
||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||
/** Using only first texture. Generic blending method.
|
||||
The blend function is set to SMaterial::MaterialTypeParam with
|
||||
@ -135,22 +60,9 @@ namespace video
|
||||
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",
|
||||
"onetexture_blend",
|
||||
0
|
||||
};
|
||||
|
@ -36,20 +36,6 @@ namespace scene
|
||||
//! 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
|
||||
};
|
||||
|
@ -59,10 +59,6 @@ namespace scene
|
||||
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;
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// 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__
|
||||
#pragma once
|
||||
|
||||
#include "SExposedVideoData.h"
|
||||
#include "SIrrCreationParameters.h"
|
||||
@ -60,4 +59,3 @@ namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -26,7 +26,7 @@ namespace gui
|
||||
ECI_HELP, // Arrow and question mark
|
||||
ECI_IBEAM, // typical text-selection cursor
|
||||
ECI_NO, // should not click icon
|
||||
ECI_WAIT, // hourclass
|
||||
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
|
||||
|
@ -263,6 +263,10 @@ namespace irr
|
||||
//! A checkbox has changed its check state.
|
||||
EGET_CHECKBOX_CHANGED,
|
||||
|
||||
//! A listbox would like to open.
|
||||
/** You can prevent the listbox from opening by absorbing the event. */
|
||||
EGET_LISTBOX_OPENED,
|
||||
|
||||
//! A new item in a listbox was selected.
|
||||
/** NOTE: You also get this event currently when the same item was clicked again after more than 500 ms. */
|
||||
EGET_LISTBOX_CHANGED,
|
||||
@ -452,10 +456,10 @@ struct SEvent
|
||||
/** Unlike other events, joystick events represent the result of polling
|
||||
* each connected joystick once per run() of the device. Joystick events will
|
||||
* not be generated by default. If joystick support is available for the
|
||||
* active device, _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ is defined, and
|
||||
* @ref irr::IrrlichtDevice::activateJoysticks() has been called, an event of
|
||||
* this type will be generated once per joystick per @ref IrrlichtDevice::run()
|
||||
* regardless of whether the state of the joystick has actually changed. */
|
||||
* active device, and @ref irr::IrrlichtDevice::activateJoysticks() has been
|
||||
* called, an event of this type will be generated once per joystick per
|
||||
* @ref IrrlichtDevice::run() regardless of whether the state of the joystick
|
||||
* has actually changed. */
|
||||
struct SJoystickEvent
|
||||
{
|
||||
enum
|
||||
|
@ -210,58 +210,6 @@ public:
|
||||
\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;
|
||||
|
@ -52,11 +52,15 @@ namespace gui
|
||||
//! 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_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Set the maximal number of rows for the selection listbox
|
||||
|
@ -433,7 +433,7 @@ public:
|
||||
if (el)
|
||||
{
|
||||
// find the highest element number
|
||||
el->getNextElement(-1, true, IsTabGroup, first, closest, true);
|
||||
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
|
||||
if (first)
|
||||
{
|
||||
TabOrder = first->getTabOrder() + 1;
|
||||
@ -706,7 +706,7 @@ public:
|
||||
}
|
||||
}
|
||||
// search within children
|
||||
if ((*it)->getNextElement(startOrder, reverse, group, first, closest))
|
||||
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -88,9 +88,9 @@ namespace gui
|
||||
|
||||
//! Sets text justification mode
|
||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||
|
||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||
|
@ -129,15 +129,6 @@ namespace gui
|
||||
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;
|
||||
|
||||
|
136
include/IImage.h
136
include/IImage.h
@ -183,24 +183,6 @@ public:
|
||||
return Data;
|
||||
}
|
||||
|
||||
//! Lock function. Use this to get a pointer to the image data.
|
||||
/** Use getData instead.
|
||||
\return Pointer to the image data. What type of data is pointed to
|
||||
depends on the color format of the image. For example if the color
|
||||
format is ECF_A8R8G8B8, it is of u32. Be sure to call unlock() after
|
||||
you don't need the pointer any more. */
|
||||
_IRR_DEPRECATED_ void* lock()
|
||||
{
|
||||
return getData();
|
||||
}
|
||||
|
||||
//! Unlock function.
|
||||
/** Should be called after the pointer received by lock() is not
|
||||
needed anymore. */
|
||||
_IRR_DEPRECATED_ void unlock()
|
||||
{
|
||||
}
|
||||
|
||||
//! Get the mipmap size for this image for a certain mipmap level
|
||||
/** level 0 will be full image size. Every further level is half the size.
|
||||
Doesn't care if the image actually has mipmaps, just which size would be needed. */
|
||||
@ -329,6 +311,12 @@ public:
|
||||
//! Sets a pixel
|
||||
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
|
||||
|
||||
//! Copies this surface into another, if it has the exact same size and format.
|
||||
/** NOTE: mipmaps are ignored
|
||||
\return True if it was copied, false otherwise.
|
||||
*/
|
||||
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) const = 0;
|
||||
|
||||
//! Copies the image into the target, scaling the image to fit
|
||||
/** NOTE: mipmaps are ignored */
|
||||
virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
|
||||
@ -361,19 +349,6 @@ public:
|
||||
//! fills the surface with given color
|
||||
virtual void fill(const SColor &color) =0;
|
||||
|
||||
//! Inform whether the image is compressed
|
||||
_IRR_DEPRECATED_ bool isCompressed() const
|
||||
{
|
||||
return IImage::isCompressedFormat(Format);
|
||||
}
|
||||
|
||||
//! Check whether the image has MipMaps
|
||||
/** \return True if image has MipMaps, else false. */
|
||||
_IRR_DEPRECATED_ bool hasMipMaps() const
|
||||
{
|
||||
return (getMipMapsData() != 0);
|
||||
}
|
||||
|
||||
//! get the amount of Bits per Pixel of the given color format
|
||||
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
|
||||
{
|
||||
@ -387,28 +362,6 @@ public:
|
||||
return 24;
|
||||
case ECF_A8R8G8B8:
|
||||
return 32;
|
||||
case ECF_DXT1:
|
||||
return 16;
|
||||
case ECF_DXT2:
|
||||
case ECF_DXT3:
|
||||
case ECF_DXT4:
|
||||
case ECF_DXT5:
|
||||
return 32;
|
||||
case ECF_PVRTC_RGB2:
|
||||
return 12;
|
||||
case ECF_PVRTC_ARGB2:
|
||||
case ECF_PVRTC2_ARGB2:
|
||||
return 16;
|
||||
case ECF_PVRTC_RGB4:
|
||||
return 24;
|
||||
case ECF_PVRTC_ARGB4:
|
||||
case ECF_PVRTC2_ARGB4:
|
||||
return 32;
|
||||
case ECF_ETC1:
|
||||
case ECF_ETC2_RGB:
|
||||
return 24;
|
||||
case ECF_ETC2_ARGB:
|
||||
return 32;
|
||||
case ECF_D16:
|
||||
return 16;
|
||||
case ECF_D32:
|
||||
@ -443,75 +396,18 @@ public:
|
||||
//! calculate image data size in bytes for selected format, width and height.
|
||||
static u32 getDataSizeFromFormat(ECOLOR_FORMAT format, u32 width, u32 height)
|
||||
{
|
||||
u32 imageSize = 0;
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case ECF_DXT1:
|
||||
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 8;
|
||||
break;
|
||||
case ECF_DXT2:
|
||||
case ECF_DXT3:
|
||||
case ECF_DXT4:
|
||||
case ECF_DXT5:
|
||||
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 16;
|
||||
break;
|
||||
case ECF_PVRTC_RGB2:
|
||||
case ECF_PVRTC_ARGB2:
|
||||
imageSize = (core::max_<u32>(width, 16) * core::max_<u32>(height, 8) * 2 + 7) / 8;
|
||||
break;
|
||||
case ECF_PVRTC_RGB4:
|
||||
case ECF_PVRTC_ARGB4:
|
||||
imageSize = (core::max_<u32>(width, 8) * core::max_<u32>(height, 8) * 4 + 7) / 8;
|
||||
break;
|
||||
case ECF_PVRTC2_ARGB2:
|
||||
imageSize = core::ceil32(width / 8.0f) * core::ceil32(height / 4.0f) * 8;
|
||||
break;
|
||||
case ECF_PVRTC2_ARGB4:
|
||||
case ECF_ETC1:
|
||||
case ECF_ETC2_RGB:
|
||||
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 8;
|
||||
break;
|
||||
case ECF_ETC2_ARGB:
|
||||
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 16;
|
||||
break;
|
||||
default: // uncompressed formats
|
||||
imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
|
||||
// non-compressed formats
|
||||
u32 imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
|
||||
imageSize *= height;
|
||||
break;
|
||||
}
|
||||
|
||||
return imageSize;
|
||||
}
|
||||
|
||||
// Define to check for all compressed image formats cases in a switch
|
||||
#define IRR_CASE_IIMAGE_COMPRESSED_FORMAT\
|
||||
case ECF_DXT1:\
|
||||
case ECF_DXT2:\
|
||||
case ECF_DXT3:\
|
||||
case ECF_DXT4:\
|
||||
case ECF_DXT5:\
|
||||
case ECF_PVRTC_RGB2:\
|
||||
case ECF_PVRTC_ARGB2:\
|
||||
case ECF_PVRTC2_ARGB2:\
|
||||
case ECF_PVRTC_RGB4:\
|
||||
case ECF_PVRTC_ARGB4:\
|
||||
case ECF_PVRTC2_ARGB4:\
|
||||
case ECF_ETC1:\
|
||||
case ECF_ETC2_RGB:\
|
||||
case ECF_ETC2_ARGB:
|
||||
|
||||
//! check if this is compressed color format
|
||||
static bool isCompressedFormat(const ECOLOR_FORMAT format)
|
||||
{
|
||||
switch(format)
|
||||
{
|
||||
IRR_CASE_IIMAGE_COMPRESSED_FORMAT
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//! check if the color format is only viable for depth/stencil textures
|
||||
static bool isDepthFormat(const ECOLOR_FORMAT format)
|
||||
@ -548,22 +444,6 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)
|
||||
static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case ECF_A1R5G5B5:
|
||||
case ECF_R5G6B5:
|
||||
case ECF_R8G8B8:
|
||||
case ECF_A8R8G8B8:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
ECOLOR_FORMAT Format;
|
||||
core::dimension2d<u32> Size;
|
||||
|
@ -45,17 +45,6 @@ public:
|
||||
/** \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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -19,7 +19,7 @@ enum ELOG_LEVEL
|
||||
//! Used for printing information helpful in debugging
|
||||
ELL_DEBUG,
|
||||
|
||||
//! Useful information to print. For example hardware infos or something started/stopped.
|
||||
//! Useful information to print. For example hardware info or something started/stopped.
|
||||
ELL_INFORMATION,
|
||||
|
||||
//! Warnings that something isn't as expected and can cause oddities
|
||||
|
@ -38,30 +38,11 @@ public:
|
||||
const SMaterial& lastMaterial,
|
||||
bool resetAllRenderstates) = 0;
|
||||
|
||||
//! Return an index constant for the vertex shader based on a name.
|
||||
//! Return an index constant for the vertex shader based on a uniform variable name.
|
||||
virtual s32 getVertexShaderConstantID(const c8* name) = 0;
|
||||
|
||||
//! Sets a constant for the vertex shader based on a name.
|
||||
/** This can be used if you used a high level shader language like GLSL
|
||||
or HLSL to create a shader. Example: If you created a shader which has
|
||||
variables named 'mWorldViewProj' (containing the WorldViewProjection
|
||||
matrix) and another one named 'fTime' containing one float, you can set
|
||||
them in your IShaderConstantSetCallBack derived class like this:
|
||||
\code
|
||||
virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
|
||||
{
|
||||
video::IVideoDriver* driver = services->getVideoDriver();
|
||||
|
||||
f32 time = (f32)os::Timer::getTime()/100000.0f;
|
||||
services->setVertexShaderConstant("fTime", &time, 1);
|
||||
|
||||
core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
|
||||
worldViewProj *= driver->getTransform(video::ETS_VIEW);
|
||||
worldViewProj *= driver->getTransform(video::ETS_WORLD);
|
||||
services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
|
||||
}
|
||||
\endcode
|
||||
\param index Index of the variable
|
||||
//! Sets a value for a vertex shader uniform variable.
|
||||
/** \param index Index of the variable (as received from getVertexShaderConstantID)
|
||||
\param floats Pointer to array of floats
|
||||
\param count Amount of floats in array.
|
||||
\return True if successful.
|
||||
@ -85,14 +66,14 @@ public:
|
||||
\param constantAmount: Amount of registers to be set. One register consists of 4 floats. */
|
||||
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
|
||||
|
||||
//! Return an index constant for the pixel shader based on a name.
|
||||
//! Return an index constant for the pixel shader for the given uniform variable name
|
||||
virtual s32 getPixelShaderConstantID(const c8* name) = 0;
|
||||
|
||||
//! Sets a constant for the pixel shader based on a name.
|
||||
//! Sets a value for the given pixel shader uniform variable
|
||||
/** This can be used if you used a high level shader language like GLSL
|
||||
or HLSL to create a shader. See setVertexShaderConstant() for an
|
||||
example on how to use this.
|
||||
\param index Index of the variable
|
||||
\param index Index of the variable (as received from getPixelShaderConstantID)
|
||||
\param floats Pointer to array of floats
|
||||
\param count Amount of floats in array.
|
||||
\return True if successful. */
|
||||
@ -115,30 +96,6 @@ public:
|
||||
\param constantAmount Amount of registers to be set. One register consists of 4 floats. */
|
||||
virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
|
||||
|
||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
||||
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const f32* floats, int count)
|
||||
{
|
||||
return setVertexShaderConstant(getVertexShaderConstantID(name), floats, count);
|
||||
}
|
||||
|
||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
||||
_IRR_DEPRECATED_ bool setVertexShaderConstant(const c8* name, const s32* ints, int count)
|
||||
{
|
||||
return setVertexShaderConstant(getVertexShaderConstantID(name), ints, count);
|
||||
}
|
||||
|
||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
||||
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const f32* floats, int count)
|
||||
{
|
||||
return setPixelShaderConstant(getPixelShaderConstantID(name), floats, count);
|
||||
}
|
||||
|
||||
//! \deprecated. This method may be removed by Irrlicht 2.0
|
||||
_IRR_DEPRECATED_ bool setPixelShaderConstant(const c8* name, const s32* ints, int count)
|
||||
{
|
||||
return setPixelShaderConstant(getPixelShaderConstantID(name), ints, count);
|
||||
}
|
||||
|
||||
//! Get pointer to the IVideoDriver interface
|
||||
/** \return Pointer to the IVideoDriver interface */
|
||||
virtual IVideoDriver* getVideoDriver() = 0;
|
||||
|
@ -97,11 +97,6 @@ namespace scene
|
||||
/** \param box New bounding box to use for the mesh. */
|
||||
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
||||
|
||||
//! Sets a flag of all contained materials to a new value.
|
||||
/** \param flag: Flag to set in all materials.
|
||||
\param newvalue: New value to set in all materials. */
|
||||
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) = 0;
|
||||
|
||||
//! Set the hardware mapping hint
|
||||
/** This methods allows to define optimization hints for the
|
||||
hardware. This enables, e.g., the use of hardware buffers on
|
||||
|
@ -172,9 +172,6 @@ namespace scene
|
||||
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2);
|
||||
case scene::EPT_TRIANGLE_FAN: return (indexCount-2);
|
||||
case scene::EPT_TRIANGLES: return indexCount/3;
|
||||
case scene::EPT_QUAD_STRIP: return (indexCount-2)/2;
|
||||
case scene::EPT_QUADS: return indexCount/4;
|
||||
case scene::EPT_POLYGON: return indexCount; // (not really primitives, that would be 1, works like line_strip)
|
||||
case scene::EPT_POINT_SPRITES: return indexCount;
|
||||
}
|
||||
return 0;
|
||||
|
@ -78,46 +78,6 @@ namespace scene
|
||||
number. */
|
||||
virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
|
||||
|
||||
//! Returns a mesh based on its name (often a filename).
|
||||
/** \deprecated Use getMeshByName() instead. This method may be removed by
|
||||
Irrlicht 1.9 */
|
||||
_IRR_DEPRECATED_ IAnimatedMesh* getMeshByFilename(const io::path& filename)
|
||||
{
|
||||
return getMeshByName(filename);
|
||||
}
|
||||
|
||||
//! Get the name of a loaded mesh, based on its index. (Name is often identical to the filename).
|
||||
/** \deprecated Use getMeshName() instead. This method may be removed by
|
||||
Irrlicht 1.9 */
|
||||
_IRR_DEPRECATED_ const io::path& getMeshFilename(u32 index) const
|
||||
{
|
||||
return getMeshName(index).getInternalName();
|
||||
}
|
||||
|
||||
//! Get the name of a loaded mesh, if there is any. (Name is often identical to the filename).
|
||||
/** \deprecated Use getMeshName() instead. This method may be removed by
|
||||
Irrlicht 1.9 */
|
||||
_IRR_DEPRECATED_ const io::path& getMeshFilename(const IMesh* const mesh) const
|
||||
{
|
||||
return getMeshName(mesh).getInternalName();
|
||||
}
|
||||
|
||||
//! Renames a loaded mesh.
|
||||
/** \deprecated Use renameMesh() instead. This method may be removed by
|
||||
Irrlicht 1.9 */
|
||||
_IRR_DEPRECATED_ bool setMeshFilename(u32 index, const io::path& filename)
|
||||
{
|
||||
return renameMesh(index, filename);
|
||||
}
|
||||
|
||||
//! Renames a loaded mesh.
|
||||
/** \deprecated Use renameMesh() instead. This method may be removed by
|
||||
Irrlicht 1.9 */
|
||||
_IRR_DEPRECATED_ bool setMeshFilename(const IMesh* const mesh, const io::path& filename)
|
||||
{
|
||||
return renameMesh(mesh, filename);
|
||||
}
|
||||
|
||||
//! Returns a mesh based on its name.
|
||||
/** \param name Name of the mesh. Usually a filename.
|
||||
\return Pointer to the mesh or 0 if there is none with this number. */
|
||||
|
@ -2,9 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_I_MESH_WRITER_H_INCLUDED__
|
||||
#define __IRR_I_MESH_WRITER_H_INCLUDED__
|
||||
|
||||
#pragma once
|
||||
#include "IReferenceCounted.h"
|
||||
#include "EMeshWriterEnums.h"
|
||||
|
||||
@ -54,5 +52,4 @@ namespace scene
|
||||
} // end namespace
|
||||
} // end namespace
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -11,27 +11,31 @@
|
||||
namespace irr
|
||||
{
|
||||
|
||||
//! The Operating system operator provides operation system specific methods and information.
|
||||
//! The OSOperator provides OS-specific methods and information.
|
||||
class IOSOperator : public virtual IReferenceCounted
|
||||
{
|
||||
public:
|
||||
//! Get the current operation system version as string.
|
||||
//! Get the current OS version as string.
|
||||
virtual const core::stringc& getOperatingSystemVersion() const = 0;
|
||||
|
||||
//! Get the current operation system version as string.
|
||||
/** \deprecated Use getOperatingSystemVersion instead. This method will be removed in Irrlicht 1.9. */
|
||||
_IRR_DEPRECATED_ const wchar_t* getOperationSystemVersion() const
|
||||
{
|
||||
return core::stringw(getOperatingSystemVersion()).c_str();
|
||||
}
|
||||
|
||||
//! Copies text to the clipboard
|
||||
//! \param text: text in utf-8
|
||||
virtual void copyToClipboard(const c8* text) const = 0;
|
||||
|
||||
//! Copies text to the primary selection
|
||||
//! This is a no-op on some platforms.
|
||||
//! \param text: text in utf-8
|
||||
virtual void copyToPrimarySelection(const c8* text) const = 0;
|
||||
|
||||
//! Get text from the clipboard
|
||||
/** \return Returns 0 if no string is in there. */
|
||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||
virtual const c8* getTextFromClipboard() const = 0;
|
||||
|
||||
//! Get text from the primary selection
|
||||
//! This is a no-op on some platforms.
|
||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||
virtual const c8* getTextFromPrimarySelection() const = 0;
|
||||
|
||||
//! Get the total and available system RAM
|
||||
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
||||
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
||||
|
@ -130,7 +130,7 @@ namespace scene
|
||||
{
|
||||
public:
|
||||
|
||||
//! Get pointer to an animateable mesh. Loads the file if not loaded already.
|
||||
//! Get pointer to an animatable mesh. Loads the file if not loaded already.
|
||||
/**
|
||||
* If you want to remove a loaded mesh from the cache again, use removeMesh().
|
||||
* Currently there are the following mesh formats supported:
|
||||
@ -318,20 +318,10 @@ namespace scene
|
||||
* \endcode
|
||||
* If you would like to implement and add your own file format loader to Irrlicht,
|
||||
* see addExternalMeshLoader().
|
||||
* \param filename: Filename of the mesh to load.
|
||||
* \param alternativeCacheName: In case you want to have the mesh under another name in the cache (to create real copies)
|
||||
* \param file File handle of the mesh to load.
|
||||
* \return Null if failed, otherwise pointer to the mesh.
|
||||
* This pointer should not be dropped. See IReferenceCounted::drop() for more information.
|
||||
**/
|
||||
virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName=io::path("")) = 0;
|
||||
|
||||
//! Get pointer to an animateable mesh. Loads the file if not loaded already.
|
||||
/** Works just as getMesh(const char* filename). If you want to
|
||||
remove a loaded mesh from the cache again, use removeMesh().
|
||||
\param file File handle of the mesh to load.
|
||||
\return NULL if failed and pointer to the mesh if successful.
|
||||
This pointer should not be dropped. See
|
||||
IReferenceCounted::drop() for more information. */
|
||||
virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
|
||||
|
||||
//! Get interface to the mesh cache which is shared between all existing scene managers.
|
||||
@ -345,16 +335,6 @@ namespace scene
|
||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||
virtual video::IVideoDriver* getVideoDriver() = 0;
|
||||
|
||||
//! Get the active GUIEnvironment
|
||||
/** \return Pointer to the GUIEnvironment
|
||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||
virtual gui::IGUIEnvironment* getGUIEnvironment() = 0;
|
||||
|
||||
//! Get the active FileSystem
|
||||
/** \return Pointer to the FileSystem
|
||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||
virtual io::IFileSystem* getFileSystem() = 0;
|
||||
|
||||
//! Adds a scene node for rendering an animated mesh model.
|
||||
/** \param mesh: Pointer to the loaded animated mesh to be displayed.
|
||||
\param parent: Parent of the scene node. Can be NULL if no parent.
|
||||
@ -529,7 +509,7 @@ namespace scene
|
||||
|
||||
//! Clear all nodes which are currently registered for rendering
|
||||
/** Usually you don't have to care about this as drawAll will clear nodes
|
||||
after rendering them. But sometimes you might have to manully reset this.
|
||||
after rendering them. But sometimes you might have to manually reset this.
|
||||
For example when you deleted nodes between registering and rendering. */
|
||||
virtual void clearAllRegisteredNodesForRendering() = 0;
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "matrix4.h"
|
||||
#include "IAttributes.h"
|
||||
#include <list>
|
||||
#include <optional>
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -65,7 +66,7 @@ namespace scene
|
||||
|
||||
//! This method is called just before the rendering process of the whole scene.
|
||||
/** Nodes may register themselves in the render pipeline during this call,
|
||||
precalculate the geometry which should be renderered, and prevent their
|
||||
precalculate the geometry which should be rendered, and prevent their
|
||||
children from being able to register themselves if they are clipped by simply
|
||||
not calling their OnRegisterSceneNode method.
|
||||
If you are implementing your own scene node, you should overwrite this method
|
||||
@ -275,33 +276,33 @@ namespace scene
|
||||
|
||||
child->grab();
|
||||
child->remove(); // remove from old parent
|
||||
Children.push_back(child);
|
||||
// Note: This iterator is not invalidated until we erase it.
|
||||
child->ThisIterator = Children.insert(Children.end(), child);
|
||||
child->Parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//! Removes a child from this scene node.
|
||||
/** If found in the children list, the child pointer is also
|
||||
dropped and might be deleted if no other grab exists.
|
||||
/**
|
||||
\param child A pointer to the child which shall be removed.
|
||||
\return True if the child was removed, and false if not,
|
||||
e.g. because it couldn't be found in the children list. */
|
||||
e.g. because it belongs to a different parent or no parent. */
|
||||
virtual bool removeChild(ISceneNode* child)
|
||||
{
|
||||
ISceneNodeList::iterator it = Children.begin();
|
||||
for (; it != Children.end(); ++it)
|
||||
if ((*it) == child)
|
||||
{
|
||||
(*it)->Parent = 0;
|
||||
(*it)->drop();
|
||||
if (child->Parent != this)
|
||||
return false;
|
||||
|
||||
// The iterator must be set since the parent is not null.
|
||||
_IRR_DEBUG_BREAK_IF(!child->ThisIterator.has_value());
|
||||
auto it = *child->ThisIterator;
|
||||
child->ThisIterator = std::nullopt;
|
||||
child->Parent = nullptr;
|
||||
child->drop();
|
||||
Children.erase(it);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//! Removes all children of this scene node
|
||||
/** The scene nodes found in the children list are also dropped
|
||||
@ -309,13 +310,11 @@ namespace scene
|
||||
*/
|
||||
virtual void removeAll()
|
||||
{
|
||||
ISceneNodeList::iterator it = Children.begin();
|
||||
for (; it != Children.end(); ++it)
|
||||
{
|
||||
(*it)->Parent = 0;
|
||||
(*it)->drop();
|
||||
for (auto &child : Children) {
|
||||
child->Parent = nullptr;
|
||||
child->ThisIterator = std::nullopt;
|
||||
child->drop();
|
||||
}
|
||||
|
||||
Children.clear();
|
||||
}
|
||||
|
||||
@ -352,38 +351,14 @@ namespace scene
|
||||
}
|
||||
|
||||
|
||||
//! Sets all material flags at once to a new value.
|
||||
/** Useful, for example, if you want the whole mesh to be
|
||||
affected by light.
|
||||
\param flag Which flag of all materials to be set.
|
||||
\param newvalue New value of that flag. */
|
||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
|
||||
{
|
||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
||||
getMaterial(i).setFlag(flag, newvalue);
|
||||
//! Execute a function on all materials of this scene node.
|
||||
/** Useful for setting material properties, e.g. if you want the whole
|
||||
mesh to be affected by light. */
|
||||
template <typename F>
|
||||
void forEachMaterial(F &&fn) {
|
||||
for (u32 i = 0; i < getMaterialCount(); i++) {
|
||||
fn(getMaterial(i));
|
||||
}
|
||||
|
||||
|
||||
//! Sets the texture of the specified layer in all materials of this scene node to the new texture.
|
||||
/** \param textureLayer Layer of texture to be set. Must be a
|
||||
value smaller than MATERIAL_MAX_TEXTURES.
|
||||
\param texture New texture to be used. */
|
||||
void setMaterialTexture(u32 textureLayer, video::ITexture* texture)
|
||||
{
|
||||
if (textureLayer >= video::MATERIAL_MAX_TEXTURES)
|
||||
return;
|
||||
|
||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
||||
getMaterial(i).setTexture(textureLayer, texture);
|
||||
}
|
||||
|
||||
|
||||
//! Sets the material type of all materials in this scene node to a new material type.
|
||||
/** \param newType New type of material to be set. */
|
||||
void setMaterialType(video::E_MATERIAL_TYPE newType)
|
||||
{
|
||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
||||
getMaterial(i).MaterialType = newType;
|
||||
}
|
||||
|
||||
|
||||
@ -532,10 +507,8 @@ namespace scene
|
||||
grab();
|
||||
remove();
|
||||
|
||||
Parent = newParent;
|
||||
|
||||
if (Parent)
|
||||
Parent->addChild(this);
|
||||
if (newParent)
|
||||
newParent->addChild(this);
|
||||
|
||||
drop();
|
||||
}
|
||||
@ -642,12 +615,15 @@ namespace scene
|
||||
//! Relative scale of the scene node.
|
||||
core::vector3df RelativeScale;
|
||||
|
||||
//! Pointer to the parent
|
||||
ISceneNode* Parent;
|
||||
|
||||
//! List of all children of this node
|
||||
std::list<ISceneNode*> Children;
|
||||
|
||||
//! Iterator pointing to this node in the parent's child list.
|
||||
std::optional<ISceneNodeList::iterator> ThisIterator;
|
||||
|
||||
//! Pointer to the parent
|
||||
ISceneNode* Parent;
|
||||
|
||||
//! Pointer to the scene manager
|
||||
ISceneManager* SceneManager;
|
||||
|
||||
|
@ -97,14 +97,6 @@ enum E_TEXTURE_CREATION_FLAG
|
||||
*/
|
||||
ETCF_AUTO_GENERATE_MIP_MAPS = 0x00000100,
|
||||
|
||||
//! Enable support for vertex shader texture sampling on some drivers
|
||||
/** Default is false.
|
||||
This adds a small costs to all texture switches.
|
||||
Currently only affects D3D9.
|
||||
On OpenGL vertex shaders use the same texture unit as pixel shaders, so support there only depends on GL version and not on this flag
|
||||
*/
|
||||
ETCF_SUPPORT_VERTEXT_TEXTURE = 0x00000200,
|
||||
|
||||
/** This flag is never used, it only forces the compiler to compile
|
||||
these enumeration values to 32 bit. */
|
||||
ETCF_FORCE_32_BIT_DO_NOT_USE = 0x7fffffff
|
||||
@ -300,11 +292,6 @@ public:
|
||||
{
|
||||
case ECF_A8R8G8B8:
|
||||
case ECF_A1R5G5B5:
|
||||
case ECF_DXT1:
|
||||
case ECF_DXT2:
|
||||
case ECF_DXT3:
|
||||
case ECF_DXT4:
|
||||
case ECF_DXT5:
|
||||
case ECF_A16B16G16R16F:
|
||||
case ECF_A32B32G32R32F:
|
||||
status = true;
|
||||
|
@ -21,41 +21,6 @@ public:
|
||||
*/
|
||||
virtual u32 getRealTime() const = 0;
|
||||
|
||||
enum EWeekday
|
||||
{
|
||||
EWD_SUNDAY=0,
|
||||
EWD_MONDAY,
|
||||
EWD_TUESDAY,
|
||||
EWD_WEDNESDAY,
|
||||
EWD_THURSDAY,
|
||||
EWD_FRIDAY,
|
||||
EWD_SATURDAY
|
||||
};
|
||||
|
||||
struct RealTimeDate
|
||||
{
|
||||
// Hour of the day, from 0 to 23
|
||||
u32 Hour;
|
||||
// Minute of the hour, from 0 to 59
|
||||
u32 Minute;
|
||||
// Second of the minute, due to extra seconds from 0 to 61
|
||||
u32 Second;
|
||||
// Year of the Gregorian calender
|
||||
s32 Year;
|
||||
// Month of the year, from 1 to 12
|
||||
u32 Month;
|
||||
// Day of the month, from 1 to 31
|
||||
u32 Day;
|
||||
// Weekday for the current day
|
||||
EWeekday Weekday;
|
||||
// Day of the year, from 1 to 366
|
||||
u32 Yearday;
|
||||
// Whether daylight saving is on
|
||||
bool IsDST;
|
||||
};
|
||||
|
||||
virtual RealTimeDate getRealTimeAndDate() const = 0;
|
||||
|
||||
//! Returns current virtual time in milliseconds.
|
||||
/** This value starts with 0 and can be manipulated using setTime(),
|
||||
stopTimer(), startTimer(), etc. This value depends on the set speed of
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_I_VIDEO_DRIVER_H_INCLUDED__
|
||||
#define __IRR_I_VIDEO_DRIVER_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "rect.h"
|
||||
#include "SColor.h"
|
||||
@ -56,32 +55,11 @@ namespace video
|
||||
ETS_WORLD,
|
||||
//! Projection transformation
|
||||
ETS_PROJECTION,
|
||||
//! Texture transformation
|
||||
//! Texture 0 transformation
|
||||
//! Use E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + texture_number) to access other texture transformations
|
||||
ETS_TEXTURE_0,
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_1,
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_2,
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_3,
|
||||
#if _IRR_MATERIAL_MAX_TEXTURES_>4
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_4,
|
||||
#if _IRR_MATERIAL_MAX_TEXTURES_>5
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_5,
|
||||
#if _IRR_MATERIAL_MAX_TEXTURES_>6
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_6,
|
||||
#if _IRR_MATERIAL_MAX_TEXTURES_>7
|
||||
//! Texture transformation
|
||||
ETS_TEXTURE_7,
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
//! Only used internally
|
||||
ETS_COUNT = ETS_TEXTURE_0 + _IRR_MATERIAL_MAX_TEXTURES_
|
||||
ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES
|
||||
};
|
||||
|
||||
//! Special render targets, which usually map to dedicated hardware
|
||||
@ -286,24 +264,10 @@ namespace video
|
||||
IReferenceCounted::drop() for more information. */
|
||||
virtual ITexture* getTexture(io::IReadFile* file) =0;
|
||||
|
||||
//! Returns a texture by index
|
||||
/** \param index: Index of the texture, must be smaller than
|
||||
getTextureCount() Please note that this index might change when
|
||||
adding or removing textures
|
||||
\return Pointer to the texture, or 0 if the texture was not
|
||||
set or index is out of bounds. This pointer should not be
|
||||
dropped. See IReferenceCounted::drop() for more information. */
|
||||
virtual ITexture* getTextureByIndex(u32 index) =0;
|
||||
|
||||
//! Returns amount of textures currently loaded
|
||||
/** \return Amount of textures currently loaded */
|
||||
virtual u32 getTextureCount() const = 0;
|
||||
|
||||
//! Renames a texture
|
||||
/** \param texture Pointer to the texture to rename.
|
||||
\param newName New name for the texture. This should be a unique name. */
|
||||
virtual void renameTexture(ITexture* texture, const io::path& newName) = 0;
|
||||
|
||||
//! Creates an empty texture of specified size.
|
||||
/** \param size: Size of the texture.
|
||||
\param name A name for the texture. Later calls to
|
||||
@ -318,24 +282,6 @@ namespace video
|
||||
virtual ITexture* addTexture(const core::dimension2d<u32>& size,
|
||||
const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
|
||||
|
||||
//! Creates a texture from an IImage.
|
||||
/** \param name A name for the texture. Later calls of
|
||||
getTexture() with this name will return this texture.
|
||||
The name can _not_ be empty.
|
||||
\param image Image the texture is created from.
|
||||
\param mipmapData Optional pointer to a mipmaps data.
|
||||
If this parameter is not given, the mipmaps are derived from image.
|
||||
\return Pointer to the newly created texture. This pointer
|
||||
should not be dropped. See IReferenceCounted::drop() for more
|
||||
information. */
|
||||
_IRR_DEPRECATED_ ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData)
|
||||
{
|
||||
if (image)
|
||||
image->setMipMapsData(mipmapData, false);
|
||||
|
||||
return addTexture(name, image);
|
||||
}
|
||||
|
||||
//! Creates a texture from an IImage.
|
||||
/** \param name A name for the texture. Later calls of
|
||||
getTexture() with this name will return this texture.
|
||||
@ -387,8 +333,7 @@ namespace video
|
||||
const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0;
|
||||
|
||||
//! Adds a new render target texture with 6 sides for a cubemap map to the texture cache.
|
||||
/** NOTE: Only supported on D3D9 so far.
|
||||
\param sideLen Length of one cubemap side.
|
||||
/** \param sideLen Length of one cubemap side.
|
||||
\param name A name for the texture. Later calls of getTexture() with this name will return this texture.
|
||||
The name can _not_ be empty.
|
||||
\param format The color format of the render target. Floating point formats are supported.
|
||||
@ -480,15 +425,9 @@ namespace video
|
||||
color values may not be exactly the same in the engine and for
|
||||
example in picture edit programs. To avoid this problem, you
|
||||
could use the makeColorKeyTexture method, which takes the
|
||||
position of a pixel instead a color value.
|
||||
\param zeroTexels (deprecated) If set to true, then any texels that match
|
||||
the color key will have their color, as well as their alpha, set to zero
|
||||
(i.e. black). This behavior matches the legacy (buggy) behavior prior
|
||||
to release 1.5 and is provided for backwards compatibility only.
|
||||
This parameter may be removed by Irrlicht 1.9. */
|
||||
position of a pixel instead a color value. */
|
||||
virtual void makeColorKeyTexture(video::ITexture* texture,
|
||||
video::SColor color,
|
||||
bool zeroTexels = false) const =0;
|
||||
video::SColor color) const =0;
|
||||
|
||||
//! Sets a boolean alpha channel on the texture based on the color at a position.
|
||||
/** This makes the texture fully transparent at the texels where
|
||||
@ -497,15 +436,9 @@ namespace video
|
||||
\param texture Texture whose alpha channel is modified.
|
||||
\param colorKeyPixelPos Position of a pixel with the color key
|
||||
color. Every texel with this color will become fully transparent as
|
||||
described above.
|
||||
\param zeroTexels (deprecated) If set to true, then any texels that match
|
||||
the color key will have their color, as well as their alpha, set to zero
|
||||
(i.e. black). This behavior matches the legacy (buggy) behavior prior
|
||||
to release 1.5 and is provided for backwards compatibility only.
|
||||
This parameter may be removed by Irrlicht 1.9. */
|
||||
described above. */
|
||||
virtual void makeColorKeyTexture(video::ITexture* texture,
|
||||
core::position2d<s32> colorKeyPixelPos,
|
||||
bool zeroTexels = false) const =0;
|
||||
core::position2d<s32> colorKeyPixelPos) const =0;
|
||||
|
||||
//! Set a render target.
|
||||
/** This will only work if the driver supports the
|
||||
@ -738,23 +671,6 @@ namespace video
|
||||
virtual void draw3DLine(const core::vector3df& start,
|
||||
const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
|
||||
|
||||
//! Draws a 3d triangle.
|
||||
/** This method calls drawVertexPrimitiveList for some triangles.
|
||||
This method works with all drivers because it simply calls
|
||||
drawVertexPrimitiveList, but it is hence not very fast.
|
||||
Note that the triangle is drawn using the current
|
||||
transformation matrix and material. So if you need to draw it
|
||||
independently of the current transformation, use
|
||||
\code
|
||||
driver->setMaterial(someMaterial);
|
||||
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
|
||||
\endcode
|
||||
for some properly set up material before drawing the triangle.
|
||||
\param triangle The triangle to draw.
|
||||
\param color Color of the line. */
|
||||
virtual void draw3DTriangle(const core::triangle3df& triangle,
|
||||
SColor color = SColor(255,255,255,255)) =0;
|
||||
|
||||
//! Draws a 3d axis aligned box.
|
||||
/** This method simply calls draw3DLine for the edges of the
|
||||
box. Note that the box is drawn using the current transformation
|
||||
@ -785,7 +701,7 @@ namespace video
|
||||
\param texture Texture to be drawn.
|
||||
\param destPos Upper left 2d destination position where the
|
||||
image will be drawn.
|
||||
\param sourceRect Source rectangle in the image.
|
||||
\param sourceRect Source rectangle in the texture (based on it's OriginalSize)
|
||||
\param clipRect Pointer to rectangle on the screen where the
|
||||
image is clipped to.
|
||||
If this pointer is NULL the image is not clipped.
|
||||
@ -799,35 +715,6 @@ namespace video
|
||||
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
|
||||
SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
|
||||
|
||||
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
||||
/** The images are drawn beginning at pos and concatenated in
|
||||
one line. All drawings are clipped against clipRect (if != 0).
|
||||
The subtextures are defined by the array of sourceRects and are
|
||||
chosen by the indices given.
|
||||
\param texture Texture to be drawn.
|
||||
\param pos Upper left 2d destination position where the image
|
||||
will be drawn.
|
||||
\param sourceRects Source rectangles of the image.
|
||||
\param indices List of indices which choose the actual
|
||||
rectangle used each time.
|
||||
\param kerningWidth Offset to Position on X
|
||||
\param clipRect Pointer to rectangle on the screen where the
|
||||
image is clipped to.
|
||||
If this pointer is 0 then the image is not clipped.
|
||||
\param color Color with which the image is drawn.
|
||||
Note that the alpha component is used. If alpha is other than
|
||||
255, the image will be transparent.
|
||||
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
||||
the texture is used to draw the image. */
|
||||
virtual void draw2DImageBatch(const video::ITexture* texture,
|
||||
const core::position2d<s32>& pos,
|
||||
const core::array<core::rect<s32> >& sourceRects,
|
||||
const core::array<s32>& indices,
|
||||
s32 kerningWidth=0,
|
||||
const core::rect<s32>* clipRect=0,
|
||||
SColor color=SColor(255,255,255,255),
|
||||
bool useAlphaChannelOfTexture=false) =0;
|
||||
|
||||
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
||||
/** All drawings are clipped against clipRect (if != 0).
|
||||
The subtextures are defined by the array of sourceRects and are
|
||||
@ -835,7 +722,7 @@ namespace video
|
||||
\param texture Texture to be drawn.
|
||||
\param positions Array of upper left 2d destinations where the
|
||||
images will be drawn.
|
||||
\param sourceRects Source rectangles of the image.
|
||||
\param sourceRects Source rectangles of the texture (based on it's OriginalSize)
|
||||
\param clipRect Pointer to rectangle on the screen where the
|
||||
images are clipped to.
|
||||
If this pointer is 0 then the image is not clipped.
|
||||
@ -855,7 +742,7 @@ namespace video
|
||||
/** Suggested and first implemented by zola.
|
||||
\param texture The texture to draw from
|
||||
\param destRect The rectangle to draw into
|
||||
\param sourceRect The rectangle denoting a part of the texture
|
||||
\param sourceRect The rectangle denoting a part of the texture (based on it's OriginalSize)
|
||||
\param clipRect Clips the destination rectangle (may be 0)
|
||||
\param colors Array of 4 colors denoting the color values of
|
||||
the corners of the destRect
|
||||
@ -898,13 +785,6 @@ namespace video
|
||||
SColor colorLeftDown, SColor colorRightDown,
|
||||
const core::rect<s32>* clip =0) =0;
|
||||
|
||||
//! Draws the outline of a 2D rectangle.
|
||||
/** \param pos Position of the rectangle.
|
||||
\param color Color of the rectangle to draw. The alpha component
|
||||
specifies how transparent the rectangle outline will be. */
|
||||
virtual void draw2DRectangleOutline(const core::recti& pos,
|
||||
SColor color=SColor(255,255,255,255)) =0;
|
||||
|
||||
//! Draws a 2d line.
|
||||
/** In theory both start and end will be included in coloring.
|
||||
BUG: Currently d3d ignores the last pixel
|
||||
@ -918,72 +798,6 @@ namespace video
|
||||
const core::position2d<s32>& end,
|
||||
SColor color=SColor(255,255,255,255)) =0;
|
||||
|
||||
//! Draws a pixel.
|
||||
/** \param x The x-position of the pixel.
|
||||
\param y The y-position of the pixel.
|
||||
\param color Color of the pixel to draw. */
|
||||
virtual void drawPixel(u32 x, u32 y, const SColor& color) =0;
|
||||
|
||||
//! Draws a non filled concyclic regular 2d polygon.
|
||||
/** This method can be used to draw circles, but also
|
||||
triangles, tetragons, pentagons, hexagons, heptagons, octagons,
|
||||
enneagons, decagons, hendecagons, dodecagon, triskaidecagons,
|
||||
etc. I think you'll got it now. And all this by simply
|
||||
specifying the vertex count. Welcome to the wonders of
|
||||
geometry.
|
||||
\param center Position of center of circle (pixels).
|
||||
\param radius Radius of circle in pixels.
|
||||
\param color Color of the circle.
|
||||
\param vertexCount Amount of vertices of the polygon. Specify 2
|
||||
to draw a line, 3 to draw a triangle, 4 for tetragons and a lot
|
||||
(>10) for nearly a circle. */
|
||||
virtual void draw2DPolygon(core::position2d<s32> center,
|
||||
f32 radius,
|
||||
video::SColor color=SColor(100,255,255,255),
|
||||
s32 vertexCount=10) =0;
|
||||
|
||||
//! Draws a shadow volume into the stencil buffer.
|
||||
/** To draw a stencil shadow, do this: First, draw all geometry.
|
||||
Then use this method, to draw the shadow volume. Then, use
|
||||
IVideoDriver::drawStencilShadow() to visualize the shadow.
|
||||
Please note that the code for the opengl version of the method
|
||||
is based on free code sent in by Philipp Dortmann, lots of
|
||||
thanks go to him!
|
||||
\param triangles Array of 3d vectors, specifying the shadow
|
||||
volume.
|
||||
\param zfail If set to true, zfail method is used, otherwise
|
||||
zpass.
|
||||
\param debugDataVisible The debug data that is enabled for this
|
||||
shadow node
|
||||
*/
|
||||
virtual void drawStencilShadowVolume(const core::array<core::vector3df>& triangles, bool zfail=true, u32 debugDataVisible=0) =0;
|
||||
|
||||
//! Fills the stencil shadow with color.
|
||||
/** After the shadow volume has been drawn into the stencil
|
||||
buffer using IVideoDriver::drawStencilShadowVolume(), use this
|
||||
to draw the color of the shadow.
|
||||
Please note that the code for the opengl version of the method
|
||||
is based on free code sent in by Philipp Dortmann, lots of
|
||||
thanks go to him!
|
||||
\param clearStencilBuffer Set this to false, if you want to
|
||||
draw every shadow with the same color, and only want to call
|
||||
drawStencilShadow() once after all shadow volumes have been
|
||||
drawn. Set this to true, if you want to paint every shadow with
|
||||
its own color.
|
||||
\param leftUpEdge Color of the shadow in the upper left corner
|
||||
of screen.
|
||||
\param rightUpEdge Color of the shadow in the upper right
|
||||
corner of screen.
|
||||
\param leftDownEdge Color of the shadow in the lower left
|
||||
corner of screen.
|
||||
\param rightDownEdge Color of the shadow in the lower right
|
||||
corner of screen. */
|
||||
virtual void drawStencilShadow(bool clearStencilBuffer=false,
|
||||
video::SColor leftUpEdge = video::SColor(255,0,0,0),
|
||||
video::SColor rightUpEdge = video::SColor(255,0,0,0),
|
||||
video::SColor leftDownEdge = video::SColor(255,0,0,0),
|
||||
video::SColor rightDownEdge = video::SColor(255,0,0,0)) =0;
|
||||
|
||||
//! Draws a mesh buffer
|
||||
/** \param mb Buffer to draw */
|
||||
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
|
||||
@ -1099,28 +913,6 @@ namespace video
|
||||
\return The current texture creation flag enabled mode. */
|
||||
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
|
||||
|
||||
//! Creates a software images from a file.
|
||||
/** No hardware texture will be created for those images. This
|
||||
method is useful for example if you want to read a heightmap
|
||||
for a terrain renderer.
|
||||
\param filename Name of the file from which the images are created.
|
||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
||||
\return The array of created images.
|
||||
If you no longer need those images, you should call IImage::drop() on each of them.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual core::array<IImage*> createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type = 0) = 0;
|
||||
|
||||
//! Creates a software images from a file.
|
||||
/** No hardware texture will be created for those images. This
|
||||
method is useful for example if you want to read a heightmap
|
||||
for a terrain renderer.
|
||||
\param file File from which the image is created.
|
||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
||||
\return The array of created images.
|
||||
If you no longer need those images, you should call IImage::drop() on each of them.
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual core::array<IImage*> createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type = 0) = 0;
|
||||
|
||||
//! Creates a software image from a file.
|
||||
/** No hardware texture will be created for this image. This
|
||||
method is useful for example if you want to read a heightmap
|
||||
@ -1130,15 +922,7 @@ namespace video
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
IImage* createImageFromFile(const io::path& filename)
|
||||
{
|
||||
core::array<IImage*> imageArray = createImagesFromFile(filename);
|
||||
|
||||
for (u32 i = 1; i < imageArray.size(); ++i)
|
||||
imageArray[i]->drop();
|
||||
|
||||
return (imageArray.size() > 0) ? imageArray[0] : 0;
|
||||
}
|
||||
virtual IImage* createImageFromFile(const io::path& filename) = 0;
|
||||
|
||||
//! Creates a software image from a file.
|
||||
/** No hardware texture will be created for this image. This
|
||||
@ -1148,15 +932,7 @@ namespace video
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
IImage* createImageFromFile(io::IReadFile* file)
|
||||
{
|
||||
core::array<IImage*> imageArray = createImagesFromFile(file);
|
||||
|
||||
for (u32 i = 1; i < imageArray.size(); ++i)
|
||||
imageArray[i]->drop();
|
||||
|
||||
return (imageArray.size() > 0) ? imageArray[0] : 0;
|
||||
}
|
||||
virtual IImage* createImageFromFile(io::IReadFile* file) = 0;
|
||||
|
||||
//! Writes the provided image to a file.
|
||||
/** Requires that there is a suitable image writer registered
|
||||
@ -1210,27 +986,6 @@ namespace video
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) =0;
|
||||
|
||||
//! Creates a software image by converting it to given format from another image.
|
||||
/** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9.
|
||||
\param format Desired color format of the image.
|
||||
\param imageToCopy Image to copy to the new image.
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
_IRR_DEPRECATED_ virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy) =0;
|
||||
|
||||
//! Creates a software image from a part of another image.
|
||||
/** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9.
|
||||
\param imageToCopy Image to copy to the new image in part.
|
||||
\param pos Position of rectangle to copy.
|
||||
\param size Extents of rectangle to copy.
|
||||
\return The created image.
|
||||
If you no longer need the image, you should call IImage::drop().
|
||||
See IReferenceCounted::drop() for more information. */
|
||||
_IRR_DEPRECATED_ virtual IImage* createImage(IImage* imageToCopy,
|
||||
const core::position2d<s32>& pos,
|
||||
const core::dimension2d<u32>& size) =0;
|
||||
|
||||
//! Creates a software image from a part of a texture.
|
||||
/**
|
||||
\param texture Texture to copy to the new image in part.
|
||||
@ -1291,7 +1046,7 @@ namespace video
|
||||
E_MATERIAL_TYPE enum or a value which was returned by
|
||||
addMaterialRenderer().
|
||||
\return String with the name of the renderer, or 0 if not
|
||||
exisiting */
|
||||
existing */
|
||||
virtual const c8* getMaterialRendererName(u32 idx) const =0;
|
||||
|
||||
//! Sets the name of a material renderer.
|
||||
@ -1300,7 +1055,7 @@ namespace video
|
||||
E_MATERIAL_TYPE enum or a value which was returned by
|
||||
addMaterialRenderer().
|
||||
\param name: New name of the material renderer. */
|
||||
virtual void setMaterialRendererName(s32 idx, const c8* name) =0;
|
||||
virtual void setMaterialRendererName(u32 idx, const c8* name) =0;
|
||||
|
||||
//! Swap the material renderers used for certain id's
|
||||
/** Swap the IMaterialRenderers responsible for rendering specific
|
||||
@ -1334,23 +1089,6 @@ namespace video
|
||||
//! Clear the color, depth and/or stencil buffers.
|
||||
virtual void clearBuffers(u16 flag, SColor color = SColor(255,0,0,0), f32 depth = 1.f, u8 stencil = 0) = 0;
|
||||
|
||||
//! Clear the color, depth and/or stencil buffers.
|
||||
_IRR_DEPRECATED_ void clearBuffers(bool backBuffer, bool depthBuffer, bool stencilBuffer, SColor color)
|
||||
{
|
||||
u16 flag = 0;
|
||||
|
||||
if (backBuffer)
|
||||
flag |= ECBF_COLOR;
|
||||
|
||||
if (depthBuffer)
|
||||
flag |= ECBF_DEPTH;
|
||||
|
||||
if (stencilBuffer)
|
||||
flag |= ECBF_STENCIL;
|
||||
|
||||
clearBuffers(flag, color);
|
||||
}
|
||||
|
||||
//! Clears the ZBuffer.
|
||||
/** Note that you usually need not to call this method, as it
|
||||
is automatically done in IVideoDriver::beginScene() or
|
||||
@ -1472,4 +1210,3 @@ namespace video
|
||||
} // end namespace irr
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -2,12 +2,11 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
||||
#define IRRLICHT_VERSION_MT_REVISION 10
|
||||
#define IRRLICHT_VERSION_MT "mt10"
|
||||
#define IRRLICHT_VERSION_MT_REVISION 14
|
||||
#define IRRLICHT_VERSION_MT "mt14"
|
||||
|
||||
//! Irrlicht SDK Version
|
||||
#define IRRLICHT_VERSION_MAJOR 1
|
||||
@ -20,454 +19,12 @@
|
||||
|
||||
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
|
||||
|
||||
//! The defines for different operating system are:
|
||||
//! _IRR_WINDOWS_ for all irrlicht supported Windows versions
|
||||
//! _IRR_WINDOWS_API_ for Windows or XBox
|
||||
//! _IRR_LINUX_PLATFORM_ for Linux (it is defined here if no other os is defined)
|
||||
//! _IRR_SOLARIS_PLATFORM_ for Solaris
|
||||
//! _IRR_OSX_PLATFORM_ for Apple systems running OSX
|
||||
//! _IRR_IOS_PLATFORM_ for Apple devices running iOS
|
||||
//! _IRR_ANDROID_PLATFORM_ for devices running Android
|
||||
//! _IRR_POSIX_API_ for Posix compatible systems
|
||||
//! Note: PLATFORM defines the OS specific layer, API can group several platforms
|
||||
|
||||
//! DEVICE is the windowing system used, several PLATFORMs support more than one DEVICE
|
||||
//! Irrlicht can be compiled with more than one device
|
||||
//! _IRR_COMPILE_WITH_WINDOWS_DEVICE_ for Windows API based device
|
||||
//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX
|
||||
//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device
|
||||
//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework
|
||||
|
||||
//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative
|
||||
//! way which can be used to disable defines (instead of outcommenting them in this header).
|
||||
//! So defines can be controlled from Makefiles or Projectfiles which allows building
|
||||
//! different library versions without having to change the sources.
|
||||
//! Example: NO_IRR_COMPILE_WITH_X11_ would disable X11
|
||||
|
||||
//! Uncomment this line to compile with the SDL device
|
||||
//#define _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#ifdef NO_IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#undef _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#endif
|
||||
|
||||
//! WIN32 for Windows32
|
||||
//! WIN64 for Windows64
|
||||
// The windows platform and API support SDL and WINDOW device
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#define _IRR_WINDOWS_
|
||||
#define _IRR_WINDOWS_API_
|
||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
|
||||
#define _IRR_IOS_PLATFORM_
|
||||
#define _IRR_COMPILE_WITH_IOS_DEVICE_
|
||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
||||
// The application state events and following methods: IrrlichtDevice::isWindowActive, IrrlichtDevice::isWindowFocused,
|
||||
// IrrlichtDevice::isWindowMinimized works out of box only if you'll use built-in CIrrDelegateiOS,
|
||||
// so _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ must be enabled in this case. If you need a custom UIApplicationDelegate
|
||||
// you must disable _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ definition and handle all application events yourself.
|
||||
#define _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_
|
||||
#else
|
||||
#define _IRR_OSX_PLATFORM_
|
||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#define _IRR_COMPILE_WITH_OSX_DEVICE_
|
||||
#endif
|
||||
#define NO_IRR_COMPILE_WITH_OGLES1_
|
||||
#define NO_IRR_COMPILE_WITH_OGLES2_
|
||||
#define NO_IRR_COMPILE_WITH_WEBGL1_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__EMSCRIPTEN__)
|
||||
#define _IRR_EMSCRIPTEN_PLATFORM_
|
||||
#define NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
||||
#define NO_IRR_COMPILE_WITH_OGLES1_
|
||||
#define _IRR_COMPILE_WITH_OGLES2_
|
||||
#define _IRR_COMPILE_WITH_WEBGL1_
|
||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||
#define _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#define NO_IRR_COMPILE_WITH_X11_DEVICE_
|
||||
#define _IRR_LINUX_PLATFORM_ // emscripten basically working like a unix
|
||||
#endif // __EMSCRIPTEN__
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
#define _IRR_ANDROID_PLATFORM_
|
||||
#define _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
||||
#define _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
||||
#endif
|
||||
|
||||
#if defined(__SVR4) && defined(__sun)
|
||||
#define _IRR_SOLARIS_PLATFORM_
|
||||
#if defined(__sparc)
|
||||
#define __BIG_ENDIAN__
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(_IRR_WINDOWS_API_) && !defined(_IRR_OSX_PLATFORM_) && !defined(_IRR_IOS_PLATFORM_) && !defined(_IRR_ANDROID_PLATFORM_) && !defined(_IRR_EMSCRIPTEN_PLATFORM_)
|
||||
#ifndef _IRR_SOLARIS_PLATFORM_
|
||||
#define _IRR_LINUX_PLATFORM_
|
||||
#endif
|
||||
#define _IRR_POSIX_API_
|
||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
||||
#define _IRR_COMPILE_WITH_X11_DEVICE_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_JOYSTICK_SUPPORT_ if you want joystick events.
|
||||
#if !(defined(__FreeBSD__) || defined(__OpenBSD__))
|
||||
#define _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#endif
|
||||
#ifdef NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#endif
|
||||
|
||||
|
||||
//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht.
|
||||
#define _IRR_MATERIAL_MAX_TEXTURES_ 4
|
||||
|
||||
//! Add a leak-hunter to Irrlicht which helps finding unreleased reference counted objects.
|
||||
//! NOTE: This is slow and should only be used for debugging
|
||||
//#define _IRR_COMPILE_WITH_LEAK_HUNTER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_LEAK_HUNTER_
|
||||
#undef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
||||
#endif
|
||||
|
||||
//! Enable profiling information in the engine
|
||||
/** NOTE: The profiler itself always exists and can be used by applications.
|
||||
This define is about the engine creating profile data
|
||||
while it runs and enabling it will slow down the engine. */
|
||||
//#define _IRR_COMPILE_WITH_PROFILING_
|
||||
#ifdef NO_IRR_COMPILE_WITH_PROFILING_
|
||||
#undef _IRR_COMPILE_WITH_PROFILING_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_DIRECT3D_9_ to compile the Irrlicht engine with DIRECT3D9.
|
||||
/** If you only want to use the software device or opengl you can disable those defines.
|
||||
This switch is mostly disabled because people do not get the g++ compiler compile
|
||||
directX header files, and directX is only available on Windows platforms. If you
|
||||
are using Dev-Cpp, and want to compile this using a DX dev pack, you can define
|
||||
_IRR_COMPILE_WITH_DX9_DEV_PACK_. So you simply need to add something like this
|
||||
to the compiler settings: -DIRR_COMPILE_WITH_DX9_DEV_PACK
|
||||
and this to the linker settings: -ld3dx9
|
||||
*/
|
||||
#if defined(_IRR_WINDOWS_API_) && defined(IRR_COMPILE_WITH_DX9_DEV_PACK)
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ if you want to use DirectInput for joystick handling.
|
||||
/** This only applies to Windows devices, currently only supported under Win32 device.
|
||||
If not defined, Windows Multimedia library is used, which offers also broad support for joystick devices. */
|
||||
#define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
||||
#ifdef NO_IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
||||
#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_OPENGL_ to compile the Irrlicht engine with OpenGL.
|
||||
/** If you do not wish the engine to be compiled with OpenGL, comment this
|
||||
define out. */
|
||||
#define _IRR_COMPILE_WITH_OPENGL_
|
||||
#ifdef NO_IRR_COMPILE_WITH_OPENGL_
|
||||
#undef _IRR_COMPILE_WITH_OPENGL_
|
||||
#endif
|
||||
|
||||
//! Define required options for OpenGL drivers.
|
||||
#if defined(_IRR_COMPILE_WITH_OPENGL_)
|
||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
|
||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
||||
#define _IRR_COMPILE_WITH_WGL_MANAGER_
|
||||
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
|
||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
||||
#define _IRR_COMPILE_WITH_GLX_MANAGER_
|
||||
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
|
||||
#define _IRR_COMPILE_WITH_NSOGL_MANAGER_
|
||||
#elif defined(_IRR_SOLARIS_PLATFORM_)
|
||||
#define _IRR_COMPILE_WITH_GLX_MANAGER_
|
||||
#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_)
|
||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_OGLES1_ to compile the Irrlicht engine with OpenGL ES 1.1.
|
||||
/** If you do not wish the engine to be compiled with OpenGL ES 1.1, comment this
|
||||
define out.
|
||||
Depending on platform you may have to enable _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ as well when using it.
|
||||
*/
|
||||
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
|
||||
#define _IRR_COMPILE_WITH_OGLES1_
|
||||
#endif
|
||||
#ifdef NO_IRR_COMPILE_WITH_OGLES1_
|
||||
#undef _IRR_COMPILE_WITH_OGLES1_
|
||||
#endif
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_OGLES1_
|
||||
//! Define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ to use the OpenGL ES headers from the Debian Khronos-api package
|
||||
//#define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_
|
||||
#endif
|
||||
|
||||
//! Define required options for OpenGL ES 1.1 drivers.
|
||||
#if defined(_IRR_COMPILE_WITH_OGLES1_)
|
||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
|
||||
#define _IRR_OGLES1_USE_EXTPOINTER_
|
||||
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||
#endif
|
||||
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
|
||||
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
||||
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_OGLES2_ to compile the Irrlicht engine with OpenGL ES 2.0.
|
||||
/** If you do not wish the engine to be compiled with OpenGL ES 2.0, comment this
|
||||
define out. */
|
||||
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
|
||||
#define _IRR_COMPILE_WITH_OGLES2_
|
||||
#else
|
||||
//#define _IRR_COMPILE_WITH_OGLES2_
|
||||
#endif
|
||||
#ifdef NO_IRR_COMPILE_WITH_OGLES2_
|
||||
#undef _IRR_COMPILE_WITH_OGLES2_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_WEBGL1_ to compile Irrlicht engine with a WebGL friendly
|
||||
//! subset of the OpenGL ES 2.0 driver.
|
||||
//#define _IRR_COMPILE_WITH_WEBGL1_
|
||||
#ifdef NO_IRR_COMPILE_WITH_WEBGL1_
|
||||
#undef _IRR_COMPILE_WITH_WEBGL1_
|
||||
#endif
|
||||
#ifdef _IRR_COMPILE_WITH_WEBGL1_
|
||||
#define _IRR_COMPILE_WITH_OGLES2_ // it's a subset of OGL ES2, so always needed when using WebGL
|
||||
#endif
|
||||
|
||||
//! Define required options for OpenGL ES 2.0 drivers.
|
||||
#if defined(_IRR_COMPILE_WITH_OGLES2_)
|
||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(__EMSCRIPTEN__)
|
||||
#define _IRR_OGLES2_USE_EXTPOINTER_
|
||||
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||
#endif
|
||||
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
|
||||
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
||||
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_X11_ to compile the Irrlicht engine with X11 support.
|
||||
/** If you do not wish the engine to be compiled with X11, comment this
|
||||
define out. */
|
||||
// Only used in LinuxDevice.
|
||||
#define _IRR_COMPILE_WITH_X11_
|
||||
#ifdef NO_IRR_COMPILE_WITH_X11_
|
||||
#undef _IRR_COMPILE_WITH_X11_
|
||||
#endif
|
||||
|
||||
#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_)
|
||||
//! XInput2 (library called Xi) is currently only used to support touch-input.
|
||||
#define _IRR_LINUX_X11_XINPUT2_
|
||||
#ifdef NO_IRR_LINUX_X11_XINPUT2_
|
||||
#undef _IRR_LINUX_X11_XINPUT2_
|
||||
#endif
|
||||
|
||||
//! X11 has by default only monochrome cursors, but using the Xcursor library we can also get color cursor support.
|
||||
//! If you have the need for custom color cursors on X11 then enable this and make sure you also link
|
||||
//! to the Xcursor library in your Makefile/Projectfile.
|
||||
//#define _IRR_LINUX_XCURSOR_
|
||||
#ifdef NO_IRR_LINUX_XCURSOR_
|
||||
#undef _IRR_LINUX_XCURSOR_
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_GUI_ to compile the engine with the built-in GUI
|
||||
/** Disable this if you are using an external library to draw the GUI. If you disable this then
|
||||
you will not be able to use anything provided by the GUI Environment, including loading fonts. */
|
||||
#define _IRR_COMPILE_WITH_GUI_
|
||||
#ifdef NO_IRR_COMPILE_WITH_GUI_
|
||||
#undef _IRR_COMPILE_WITH_GUI_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_LIBJPEG_ to enable compiling the engine using libjpeg.
|
||||
/** This enables the engine to read jpeg images. If you comment this out,
|
||||
the engine will no longer read .jpeg images. */
|
||||
#define _IRR_COMPILE_WITH_LIBJPEG_
|
||||
#ifdef NO_IRR_COMPILE_WITH_LIBJPEG_
|
||||
#undef _IRR_COMPILE_WITH_LIBJPEG_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_LIBPNG_ to enable compiling the engine using libpng.
|
||||
/** This enables the engine to read png images. If you comment this out,
|
||||
the engine will no longer read .png images. */
|
||||
#define _IRR_COMPILE_WITH_LIBPNG_
|
||||
#ifdef NO_IRR_COMPILE_WITH_LIBPNG_
|
||||
#undef _IRR_COMPILE_WITH_LIBPNG_
|
||||
#endif
|
||||
|
||||
//! Uncomment the following line if you want to ignore the deprecated warnings
|
||||
//#define IGNORE_DEPRECATED_WARNING
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_ to support BillboardSceneNodes
|
||||
#define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
||||
#ifdef NO_IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
||||
#undef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ if you want to use bone based
|
||||
/** animated meshes. If you compile without this, you will be unable to load
|
||||
B3D, MS3D or X meshes */
|
||||
#define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||
#ifdef NO_IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||
#undef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||
#endif
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||
//! Define _IRR_COMPILE_WITH_B3D_LOADER_ if you want to use Blitz3D files
|
||||
#define _IRR_COMPILE_WITH_B3D_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_B3D_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_B3D_LOADER_
|
||||
#endif
|
||||
//! Define _IRR_COMPILE_WITH_X_LOADER_ if you want to use Microsoft X files
|
||||
#define _IRR_COMPILE_WITH_X_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_X_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_X_LOADER_
|
||||
#endif
|
||||
#endif // _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_OBJ_LOADER_ if you want to load Wavefront OBJ files
|
||||
#define _IRR_COMPILE_WITH_OBJ_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_OBJ_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_OBJ_LOADER_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files
|
||||
//! Disabling this loader will also disable the built-in font
|
||||
#define _IRR_COMPILE_WITH_BMP_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_BMP_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_BMP_LOADER_
|
||||
#endif
|
||||
//! Define _IRR_COMPILE_WITH_JPG_LOADER_ if you want to load .jpg files
|
||||
#define _IRR_COMPILE_WITH_JPG_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_JPG_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_JPG_LOADER_
|
||||
#endif
|
||||
//! Define _IRR_COMPILE_WITH_PNG_LOADER_ if you want to load .png files
|
||||
#define _IRR_COMPILE_WITH_PNG_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_PNG_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_PNG_LOADER_
|
||||
#endif
|
||||
//! Define _IRR_COMPILE_WITH_TGA_LOADER_ if you want to load .tga files
|
||||
#define _IRR_COMPILE_WITH_TGA_LOADER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_TGA_LOADER_
|
||||
#undef _IRR_COMPILE_WITH_TGA_LOADER_
|
||||
#endif
|
||||
|
||||
//! Define _IRR_COMPILE_WITH_JPG_WRITER_ if you want to write .jpg files
|
||||
#define _IRR_COMPILE_WITH_JPG_WRITER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_JPG_WRITER_
|
||||
#undef _IRR_COMPILE_WITH_JPG_WRITER_
|
||||
#endif
|
||||
//! Define _IRR_COMPILE_WITH_PNG_WRITER_ if you want to write .png files
|
||||
#define _IRR_COMPILE_WITH_PNG_WRITER_
|
||||
#ifdef NO_IRR_COMPILE_WITH_PNG_WRITER_
|
||||
#undef _IRR_COMPILE_WITH_PNG_WRITER_
|
||||
#endif
|
||||
|
||||
//! Define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ if you want to open ZIP and GZIP archives
|
||||
/** ZIP reading has several more options below to configure. */
|
||||
#define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
||||
#ifdef NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
||||
#undef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
||||
#endif
|
||||
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
||||
//! Define _IRR_COMPILE_WITH_ZLIB_ to enable compiling the engine using zlib.
|
||||
/** This enables the engine to read from compressed .zip archives. If you
|
||||
disable this feature, the engine can still read archives, but only uncompressed
|
||||
ones. */
|
||||
#define _IRR_COMPILE_WITH_ZLIB_
|
||||
#ifdef NO_IRR_COMPILE_WITH_ZLIB_
|
||||
#undef _IRR_COMPILE_WITH_ZLIB_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//! Define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ if you want to mount folders as archives
|
||||
#define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
||||
#ifdef NO__IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
||||
#undef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
||||
#endif
|
||||
|
||||
// Some cleanup and standard stuff
|
||||
|
||||
#ifdef _IRR_WINDOWS_API_
|
||||
|
||||
// To build Irrlicht as a static library, you must define _IRR_STATIC_LIB_ in both the
|
||||
// Irrlicht build, *and* in the user application, before #including <irrlicht.h>
|
||||
#ifndef _IRR_STATIC_LIB_
|
||||
#ifdef IRRLICHT_EXPORTS
|
||||
#define IRRLICHT_API __declspec(dllexport)
|
||||
#else
|
||||
#define IRRLICHT_API __declspec(dllimport)
|
||||
#endif // IRRLICHT_EXPORT
|
||||
#else
|
||||
#define IRRLICHT_API
|
||||
#endif // _IRR_STATIC_LIB_
|
||||
|
||||
// Declare the calling convention.
|
||||
#if defined(_STDCALL_SUPPORTED)
|
||||
#ifdef _WIN32
|
||||
#define IRRCALLCONV __stdcall
|
||||
#else
|
||||
#define IRRCALLCONV __cdecl
|
||||
#endif // STDCALL_SUPPORTED
|
||||
#define IRRCALLCONV
|
||||
#endif
|
||||
|
||||
#else // _IRR_WINDOWS_API_
|
||||
|
||||
// Force symbol export in shared libraries built with gcc.
|
||||
#if defined(__GNUC__) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS)
|
||||
#define IRRLICHT_API __attribute__ ((visibility("default")))
|
||||
#else
|
||||
#ifndef IRRLICHT_API
|
||||
#define IRRLICHT_API
|
||||
#endif
|
||||
|
||||
#define IRRCALLCONV
|
||||
|
||||
#endif // _IRR_WINDOWS_API_
|
||||
|
||||
#if defined(_IRR_SOLARIS_PLATFORM_)
|
||||
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
#endif
|
||||
|
||||
//! Define __IRR_HAS_S64 if the irr::s64 type should be enable (needs long long, available on most platforms, but not part of ISO C++ 98)
|
||||
#define __IRR_HAS_S64
|
||||
#ifdef NO__IRR_HAS_S64
|
||||
#undef __IRR_HAS_S64
|
||||
#endif
|
||||
|
||||
#ifndef __has_feature
|
||||
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
//! A few attributes are written in CSceneManager when _IRR_SCENEMANAGER_DEBUG is enabled
|
||||
// NOTE: Those attributes were used always until 1.8.0 and became a global define for 1.8.1
|
||||
// which is only enabled in debug because it had a large (sometimes >5%) impact on speed.
|
||||
// A better solution in the long run is to break the interface and remove _all_ attribute
|
||||
// access in functions like CSceneManager::drawAll and instead put that information in some
|
||||
// own struct/class or in CSceneManager.
|
||||
// See http://irrlicht.sourceforge.net/forum/viewtopic.php?f=2&t=48211 for the discussion.
|
||||
#define _IRR_SCENEMANAGER_DEBUG
|
||||
#ifdef NO_IRR_SCENEMANAGER_DEBUG
|
||||
#undef _IRR_SCENEMANAGER_DEBUG
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "ICursorControl.h"
|
||||
#include "ITimer.h"
|
||||
#include "IOSOperator.h"
|
||||
#include "IrrCompileConfig.h"
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -34,6 +35,7 @@ namespace irr
|
||||
|
||||
namespace video {
|
||||
class IContextManager;
|
||||
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
|
||||
} // end namespace video
|
||||
|
||||
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
|
||||
@ -74,13 +76,17 @@ namespace irr
|
||||
virtual bool run() = 0;
|
||||
|
||||
//! Cause the device to temporarily pause execution and let other processes run.
|
||||
/** This should bring down processor usage without major
|
||||
performance loss for Irrlicht */
|
||||
/** This should bring down processor usage without major performance loss for Irrlicht.
|
||||
But this is system dependent, so there's a chance your thread won't get control back quickly.
|
||||
*/
|
||||
virtual void yield() = 0;
|
||||
|
||||
//! Pause execution and let other processes to run for a specified amount of time.
|
||||
/** It may not wait the full given time, as sleep may be interrupted
|
||||
\param timeMs: Time to sleep for in milliseconds.
|
||||
/** It may not wait the full given time, as sleep may be interrupted and also may wait longer on some OS.
|
||||
\param timeMs: Time to sleep for in milliseconds. Note that the OS can round up this number.
|
||||
On Windows you usually get at least 15ms sleep time minium for any value > 0.
|
||||
So if you call this in your main loop you can't get more than 65 FPS anymore in your game.
|
||||
On most Linux systems it's relatively exact, but also no guarantee.
|
||||
\param pauseTimer: If true, pauses the device timer while sleeping
|
||||
*/
|
||||
virtual void sleep(u32 timeMs, bool pauseTimer=false) = 0;
|
||||
@ -130,6 +136,11 @@ namespace irr
|
||||
/** \param text: New text of the window caption. */
|
||||
virtual void setWindowCaption(const wchar_t* text) = 0;
|
||||
|
||||
//! Sets the window icon.
|
||||
/** \param img The icon texture.
|
||||
\return False if no icon was set. */
|
||||
virtual bool setWindowIcon(const video::IImage *img) = 0;
|
||||
|
||||
//! Returns if the window is active.
|
||||
/** If the window is inactive,
|
||||
nothing needs to be drawn. So if you don't want to draw anything
|
||||
@ -166,6 +177,10 @@ namespace irr
|
||||
/** \return True if window is fullscreen. */
|
||||
virtual bool isFullscreen() const = 0;
|
||||
|
||||
//! Checks if the window could possibly be visible.
|
||||
//! Currently, this only returns false when the app is paused on Android.
|
||||
virtual bool isWindowVisible() const { return true; };
|
||||
|
||||
//! Get the current color format of the window
|
||||
/** \return Color format of the window. */
|
||||
virtual video::ECOLOR_FORMAT getColorFormat() const = 0;
|
||||
@ -235,8 +250,8 @@ namespace irr
|
||||
as this would consume joystick info that 3rd party libraries might rely on. Call this method to
|
||||
activate joystick support in Irrlicht and to receive irr::SJoystickEvent events.
|
||||
\param joystickInfo On return, this will contain an array of each joystick that was found and activated.
|
||||
\return true if joysticks are supported on this device and _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
||||
is defined, false if joysticks are not supported or support is compiled out.
|
||||
\return true if joysticks are supported on this device, false if joysticks are not
|
||||
supported or support is compiled out.
|
||||
*/
|
||||
virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0;
|
||||
|
||||
@ -305,42 +320,16 @@ namespace irr
|
||||
used. */
|
||||
virtual E_DEVICE_TYPE getType() const = 0;
|
||||
|
||||
//! Get the display density in dots per inch.
|
||||
//! Returns 0.0f on failure.
|
||||
virtual float getDisplayDensity() const = 0;
|
||||
|
||||
//! Check if a driver type is supported by the engine.
|
||||
/** Even if true is returned the driver may not be available
|
||||
for a configuration requested when creating the device. */
|
||||
static bool isDriverSupported(video::E_DRIVER_TYPE driver)
|
||||
{
|
||||
switch (driver)
|
||||
{
|
||||
case video::EDT_NULL:
|
||||
return true;
|
||||
case video::EDT_OPENGL:
|
||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
case video::EDT_OGLES1:
|
||||
#ifdef _IRR_COMPILE_WITH_OGLES1_
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
case video::EDT_OGLES2:
|
||||
#ifdef _IRR_COMPILE_WITH_OGLES2_
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
case video::EDT_WEBGL1:
|
||||
#ifdef _IRR_COMPILE_WITH_WEBGL1_
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return video::isDriverSupported(driver);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_KEY_CODES_H_INCLUDED__
|
||||
#define __IRR_KEY_CODES_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -90,7 +89,7 @@ namespace irr
|
||||
KEY_KEY_X = 0x58, // X key
|
||||
KEY_KEY_Y = 0x59, // Y key
|
||||
KEY_KEY_Z = 0x5A, // Z key
|
||||
KEY_LWIN = 0x5B, // Left Windows key (Microsoft<EFBFBD> Natural<EFBFBD> keyboard)
|
||||
KEY_LWIN = 0x5B, // Left Windows key (Microsoft Natural keyboard)
|
||||
KEY_RWIN = 0x5C, // Right Windows key (Natural keyboard)
|
||||
KEY_APPS = 0x5D, // Applications key (Natural keyboard)
|
||||
KEY_SLEEP = 0x5F, // Computer Sleep key
|
||||
@ -185,5 +184,4 @@ namespace irr
|
||||
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -44,7 +44,7 @@ const char* const sBuiltInVertexTypeNames[] =
|
||||
struct S3DVertex
|
||||
{
|
||||
//! default constructor
|
||||
S3DVertex() {}
|
||||
S3DVertex() : Color(0xffffffff) {}
|
||||
|
||||
//! constructor
|
||||
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
|
||||
@ -142,7 +142,7 @@ struct S3DVertex2TCoords : public S3DVertex
|
||||
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
|
||||
|
||||
//! constructor from S3DVertex
|
||||
S3DVertex2TCoords(S3DVertex& o) : S3DVertex(o) {}
|
||||
S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {}
|
||||
|
||||
//! Second set of texture coordinates
|
||||
core::vector2d<f32> TCoords2;
|
||||
@ -150,21 +150,21 @@ struct S3DVertex2TCoords : public S3DVertex
|
||||
//! Equality operator
|
||||
bool operator==(const S3DVertex2TCoords& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this)==other) &&
|
||||
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||
(TCoords2 == other.TCoords2));
|
||||
}
|
||||
|
||||
//! Inequality operator
|
||||
bool operator!=(const S3DVertex2TCoords& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this)!=other) ||
|
||||
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||
(TCoords2 != other.TCoords2));
|
||||
}
|
||||
|
||||
bool operator<(const S3DVertex2TCoords& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||
((static_cast<S3DVertex>(*this) == other) && (TCoords2 < other.TCoords2)));
|
||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (TCoords2 < other.TCoords2)));
|
||||
}
|
||||
|
||||
static E_VERTEX_TYPE getType()
|
||||
@ -214,6 +214,9 @@ struct S3DVertexTangents : public S3DVertex
|
||||
const core::vector3df& binormal=core::vector3df())
|
||||
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
|
||||
|
||||
//! constructor from S3DVertex
|
||||
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {}
|
||||
|
||||
//! Tangent vector along the x-axis of the texture
|
||||
core::vector3df Tangent;
|
||||
|
||||
@ -222,14 +225,14 @@ struct S3DVertexTangents : public S3DVertex
|
||||
|
||||
bool operator==(const S3DVertexTangents& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this)==other) &&
|
||||
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||
(Tangent == other.Tangent) &&
|
||||
(Binormal == other.Binormal));
|
||||
}
|
||||
|
||||
bool operator!=(const S3DVertexTangents& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this)!=other) ||
|
||||
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||
(Tangent != other.Tangent) ||
|
||||
(Binormal != other.Binormal));
|
||||
}
|
||||
@ -237,8 +240,8 @@ struct S3DVertexTangents : public S3DVertex
|
||||
bool operator<(const S3DVertexTangents& other) const
|
||||
{
|
||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||
((static_cast<S3DVertex>(*this) == other) && (Tangent < other.Tangent)) ||
|
||||
((static_cast<S3DVertex>(*this) == other) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent < other.Tangent)) ||
|
||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
||||
}
|
||||
|
||||
static E_VERTEX_TYPE getType()
|
||||
|
@ -147,13 +147,6 @@ namespace scene
|
||||
return Meshes[0]->getMeshBuffer(material);
|
||||
}
|
||||
|
||||
//! Set a material flag for all meshbuffers of this mesh.
|
||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
||||
{
|
||||
for (u32 i=0; i<Meshes.size(); ++i)
|
||||
Meshes[i]->setMaterialFlag(flag, newvalue);
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||
{
|
||||
|
@ -37,50 +37,6 @@ namespace video
|
||||
//! Warning: This tends to be BGRA in memory (it's ARGB on file, but with usual big-endian memory it's flipped)
|
||||
ECF_A8R8G8B8,
|
||||
|
||||
/** Compressed image formats. **/
|
||||
|
||||
//! DXT1 color format.
|
||||
ECF_DXT1,
|
||||
|
||||
//! DXT2 color format.
|
||||
ECF_DXT2,
|
||||
|
||||
//! DXT3 color format.
|
||||
ECF_DXT3,
|
||||
|
||||
//! DXT4 color format.
|
||||
ECF_DXT4,
|
||||
|
||||
//! DXT5 color format.
|
||||
ECF_DXT5,
|
||||
|
||||
//! PVRTC RGB 2bpp.
|
||||
ECF_PVRTC_RGB2,
|
||||
|
||||
//! PVRTC ARGB 2bpp.
|
||||
ECF_PVRTC_ARGB2,
|
||||
|
||||
//! PVRTC RGB 4bpp.
|
||||
ECF_PVRTC_RGB4,
|
||||
|
||||
//! PVRTC ARGB 4bpp.
|
||||
ECF_PVRTC_ARGB4,
|
||||
|
||||
//! PVRTC2 ARGB 2bpp.
|
||||
ECF_PVRTC2_ARGB2,
|
||||
|
||||
//! PVRTC2 ARGB 4bpp.
|
||||
ECF_PVRTC2_ARGB4,
|
||||
|
||||
//! ETC1 RGB.
|
||||
ECF_ETC1,
|
||||
|
||||
//! ETC2 RGB.
|
||||
ECF_ETC2_RGB,
|
||||
|
||||
//! ETC2 ARGB.
|
||||
ECF_ETC2_ARGB,
|
||||
|
||||
/** The following formats may only be used for render target textures. */
|
||||
|
||||
/** Floating point formats. */
|
||||
@ -139,20 +95,6 @@ namespace video
|
||||
"R5G6B5",
|
||||
"R8G8B8",
|
||||
"A8R8G8B8",
|
||||
"DXT1",
|
||||
"DXT2",
|
||||
"DXT3",
|
||||
"DXT4",
|
||||
"DXT5",
|
||||
"PVRTC_RGB2",
|
||||
"PVRTC_ARGB2",
|
||||
"PVRTC_RGB4",
|
||||
"PVRTC_ARGB4",
|
||||
"PVRTC2_ARGB2",
|
||||
"PVRTC2_ARGB4",
|
||||
"ETC1",
|
||||
"ETC2_RGB",
|
||||
"ETC2_ARGB",
|
||||
"R16F",
|
||||
"G16R16F",
|
||||
"A16B16G16R16F",
|
||||
|
@ -5,12 +5,6 @@
|
||||
#ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
|
||||
#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
|
||||
|
||||
// forward declarations for internal pointers
|
||||
struct IDirect3D9;
|
||||
struct IDirect3DDevice9;
|
||||
struct IDirect3D8;
|
||||
struct IDirect3DDevice8;
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
@ -27,19 +21,6 @@ struct SExposedVideoData
|
||||
SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;}
|
||||
explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;}
|
||||
|
||||
struct SD3D9
|
||||
{
|
||||
//! Pointer to the IDirect3D9 interface
|
||||
IDirect3D9* D3D9;
|
||||
|
||||
//! Pointer to the IDirect3DDevice9 interface
|
||||
IDirect3DDevice9* D3DDev9;
|
||||
|
||||
//! Window handle.
|
||||
/** Get with for example HWND h = reinterpret_cast<HWND>(exposedData.D3D9.HWnd) */
|
||||
void* HWnd;
|
||||
};
|
||||
|
||||
struct SOpenGLWin32
|
||||
{
|
||||
//! Private GDI Device Context.
|
||||
@ -79,21 +60,6 @@ struct SExposedVideoData
|
||||
void* Window;
|
||||
};
|
||||
|
||||
struct SOpenGLiOS
|
||||
{
|
||||
//! The EAGLContext object.
|
||||
void* Context;
|
||||
|
||||
//! The subview UIView object where the drawing happens.
|
||||
void* View;
|
||||
|
||||
//! The UIViewController object.
|
||||
void* ViewController;
|
||||
|
||||
//! The UIWindow object.
|
||||
void* Window;
|
||||
};
|
||||
|
||||
struct SOGLESAndroid
|
||||
{
|
||||
//! The ANativeWindow object.
|
||||
@ -102,12 +68,10 @@ struct SExposedVideoData
|
||||
|
||||
union
|
||||
{
|
||||
SD3D9 D3D9;
|
||||
SOpenGLWin32 OpenGLWin32;
|
||||
SOpenGLLinux OpenGLLinux;
|
||||
SOpenGLOSX OpenGLOSX;
|
||||
SOpenGLFB OpenGLFB;
|
||||
SOpenGLiOS OpenGLiOS;
|
||||
SOGLESAndroid OGLESAndroid;
|
||||
};
|
||||
};
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "ILogger.h"
|
||||
#include "position2d.h"
|
||||
#include "path.h"
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "IrrCompileConfig.h" // for IRRLICHT_SDK_VERSION
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -24,7 +24,7 @@ namespace irr
|
||||
//! Constructs a SIrrlichtCreationParameters structure with default values.
|
||||
SIrrlichtCreationParameters() :
|
||||
DeviceType(EIDT_BEST),
|
||||
DriverType(video::EDT_BURNINGSVIDEO),
|
||||
DriverType(video::EDT_OPENGL),
|
||||
WindowSize(core::dimension2d<u32>(800, 600)),
|
||||
WindowPosition(core::position2di(-1,-1)),
|
||||
Bits(32),
|
||||
@ -40,7 +40,6 @@ namespace irr
|
||||
Doublebuffer(true),
|
||||
IgnoreInput(false),
|
||||
Stereobuffer(false),
|
||||
HighPrecisionFPU(false),
|
||||
EventReceiver(0),
|
||||
WindowId(0),
|
||||
#ifdef _DEBUG
|
||||
@ -48,12 +47,9 @@ namespace irr
|
||||
#else
|
||||
LoggingLevel(ELL_INFORMATION),
|
||||
#endif
|
||||
DisplayAdapter(0),
|
||||
DriverMultithreaded(false),
|
||||
UsePerformanceTimer(true),
|
||||
SDK_version_do_not_use(IRRLICHT_SDK_VERSION),
|
||||
PrivateData(0),
|
||||
#if defined(_IRR_COMPILE_WITH_IOS_DEVICE_) || defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_EMSCRIPTEN_PLATFORM_)
|
||||
#ifdef IRR_MOBILE_PATHS
|
||||
OGLES2ShaderPath("media/Shaders/")
|
||||
#else
|
||||
OGLES2ShaderPath("../../media/Shaders/")
|
||||
@ -84,13 +80,9 @@ namespace irr
|
||||
Doublebuffer = other.Doublebuffer;
|
||||
IgnoreInput = other.IgnoreInput;
|
||||
Stereobuffer = other.Stereobuffer;
|
||||
HighPrecisionFPU = other.HighPrecisionFPU;
|
||||
EventReceiver = other.EventReceiver;
|
||||
WindowId = other.WindowId;
|
||||
LoggingLevel = other.LoggingLevel;
|
||||
DisplayAdapter = other.DisplayAdapter;
|
||||
DriverMultithreaded = other.DriverMultithreaded;
|
||||
UsePerformanceTimer = other.UsePerformanceTimer;
|
||||
PrivateData = other.PrivateData;
|
||||
OGLES2ShaderPath = other.OGLES2ShaderPath;
|
||||
return *this;
|
||||
@ -108,9 +100,6 @@ namespace irr
|
||||
E_DEVICE_TYPE DeviceType;
|
||||
|
||||
//! Type of video driver used to render graphics.
|
||||
/** This can currently be video::EDT_NULL, video::EDT_SOFTWARE,
|
||||
video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D9, and video::EDT_OPENGL.
|
||||
Default: EDT_BURNINGSVIDEO. */
|
||||
video::E_DRIVER_TYPE DriverType;
|
||||
|
||||
//! Size of the window or the video mode in fullscreen mode. Default: 800x600
|
||||
@ -219,15 +208,6 @@ namespace irr
|
||||
Default value: false */
|
||||
bool Stereobuffer;
|
||||
|
||||
//! Specifies if the device should use high precision FPU setting
|
||||
/** This is only relevant for DirectX Devices, which switch to
|
||||
low FPU precision by default for performance reasons. However,
|
||||
this may lead to problems with the other computations of the
|
||||
application. In this case setting this flag to true should help
|
||||
- on the expense of performance loss, though.
|
||||
Default value: false */
|
||||
bool HighPrecisionFPU;
|
||||
|
||||
//! A user created event receiver.
|
||||
IEventReceiver* EventReceiver;
|
||||
|
||||
@ -235,7 +215,6 @@ namespace irr
|
||||
/** If this is set to a value other than 0, the Irrlicht Engine
|
||||
will be created in an already existing window.
|
||||
For Windows, set this to the HWND of the window you want.
|
||||
For iOS, assign UIView to this variable.
|
||||
The windowSize and FullScreen options will be ignored when using
|
||||
the WindowId parameter. Default this is set to 0.
|
||||
To make Irrlicht run inside the custom window, you still will
|
||||
@ -293,23 +272,6 @@ namespace irr
|
||||
*/
|
||||
ELOG_LEVEL LoggingLevel;
|
||||
|
||||
//! Allows to select which graphic card is used for rendering when more than one card is in the system.
|
||||
/** So far only supported on D3D */
|
||||
u32 DisplayAdapter;
|
||||
|
||||
//! Create the driver multithreaded.
|
||||
/** Default is false. Enabling this can slow down your application.
|
||||
Note that this does _not_ make Irrlicht threadsafe, but only the underlying driver-API for the graphiccard.
|
||||
So far only supported on D3D. */
|
||||
bool DriverMultithreaded;
|
||||
|
||||
//! Enables use of high performance timers on Windows platform.
|
||||
/** When performance timers are not used, standard GetTickCount()
|
||||
is used instead which usually has worse resolution, but also less
|
||||
problems with speed stepping and other techniques.
|
||||
*/
|
||||
bool UsePerformanceTimer;
|
||||
|
||||
//! Don't use or change this parameter.
|
||||
/** Always set it to IRRLICHT_SDK_VERSION, which is done by default.
|
||||
This is needed for sdk version checks. */
|
||||
|
@ -10,8 +10,9 @@
|
||||
#include "irrArray.h"
|
||||
#include "irrMath.h"
|
||||
#include "EMaterialTypes.h"
|
||||
#include "EMaterialFlags.h"
|
||||
#include "EMaterialProps.h"
|
||||
#include "SMaterialLayer.h"
|
||||
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -227,19 +228,6 @@ namespace video
|
||||
ECM_DIFFUSE_AND_AMBIENT
|
||||
};
|
||||
|
||||
//! DEPRECATED. Will be removed after Irrlicht 1.9.
|
||||
/** Flags for the definition of the polygon offset feature. These flags define whether the offset should be into the screen, or towards the eye. */
|
||||
enum E_POLYGON_OFFSET
|
||||
{
|
||||
//! Push pixel towards the far plane, away from the eye
|
||||
/** This is typically used for rendering inner areas. */
|
||||
EPO_BACK=0,
|
||||
//! Pull pixels towards the camera.
|
||||
/** This is typically used for polygons which should appear on top
|
||||
of other elements, such as decals. */
|
||||
EPO_FRONT=1
|
||||
};
|
||||
|
||||
//! Names for polygon offset direction
|
||||
const c8* const PolygonOffsetDirectionNames[] =
|
||||
{
|
||||
@ -255,7 +243,7 @@ namespace video
|
||||
EZW_OFF = 0,
|
||||
|
||||
//! This is the default setting for SMaterial and tries to handle things automatically.
|
||||
//! This is also the value which is set when SMaterial::setFlag(EMF_ZWRITE_ENABLE) is enabled.
|
||||
//! This is what you want to set to enable zwriting.
|
||||
//! Usually zwriting is enabled non-transparent materials - as far as Irrlicht can recognize those.
|
||||
//! Basically Irrlicht tries to handle the zwriting for you and assumes transparent materials don't need it.
|
||||
//! This is addionally affected by IVideoDriver::setAllowZWriteOnTransparent
|
||||
@ -280,7 +268,7 @@ namespace video
|
||||
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
||||
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
||||
*/
|
||||
const u32 MATERIAL_MAX_TEXTURES = _IRR_MATERIAL_MAX_TEXTURES_;
|
||||
const u32 MATERIAL_MAX_TEXTURES = 4;
|
||||
|
||||
//! Struct for holding parameters for a material renderer
|
||||
// Note for implementors: Serialization is in CNullDriver
|
||||
@ -288,21 +276,21 @@ namespace video
|
||||
{
|
||||
public:
|
||||
//! Default constructor. Creates a solid, lit material with white colors
|
||||
SMaterial()
|
||||
: MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255),
|
||||
EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255),
|
||||
Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f),
|
||||
ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL),
|
||||
ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), BlendFactor(0.0f),
|
||||
PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT),
|
||||
PolygonOffsetDepthBias(0.f), PolygonOffsetSlopeScale(0.f),
|
||||
Wireframe(false), PointCloud(false), GouraudShading(true),
|
||||
Lighting(true), ZWriteEnable(EZW_AUTO), BackfaceCulling(true), FrontfaceCulling(false),
|
||||
FogEnable(false), NormalizeNormals(false), UseMipMaps(true)
|
||||
SMaterial() :
|
||||
MaterialType(EMT_SOLID), AmbientColor(255, 255, 255, 255),
|
||||
DiffuseColor(255, 255, 255, 255), EmissiveColor(0, 0, 0, 0),
|
||||
SpecularColor(255, 255, 255, 255), Shininess(0.0f),
|
||||
MaterialTypeParam(0.0f), Thickness(1.0f), ZBuffer(ECFN_LESSEQUAL),
|
||||
AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), ColorMaterial(ECM_DIFFUSE),
|
||||
BlendOperation(EBO_NONE), BlendFactor(0.0f), PolygonOffsetDepthBias(0.f),
|
||||
PolygonOffsetSlopeScale(0.f), Wireframe(false), PointCloud(false),
|
||||
GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
|
||||
BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
|
||||
NormalizeNormals(false), UseMipMaps(true)
|
||||
{ }
|
||||
|
||||
//! Texture layer array.
|
||||
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES];
|
||||
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
|
||||
|
||||
//! Type of the material. Specifies how everything is blended together
|
||||
E_MATERIAL_TYPE MaterialType;
|
||||
@ -349,10 +337,6 @@ namespace video
|
||||
EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */
|
||||
f32 MaterialTypeParam;
|
||||
|
||||
//! Second free parameter, dependent on the material type.
|
||||
/** Mostly ignored. */
|
||||
f32 MaterialTypeParam2;
|
||||
|
||||
//! Thickness of non-3dimensional elements such as lines and points.
|
||||
f32 Thickness;
|
||||
|
||||
@ -398,18 +382,6 @@ namespace video
|
||||
(setting it to EBO_ADD is probably the most common one value). */
|
||||
f32 BlendFactor;
|
||||
|
||||
//! DEPRECATED. Will be removed after Irrlicht 1.9. Please use PolygonOffsetDepthBias instead.
|
||||
/** Factor specifying how far the polygon offset should be made.
|
||||
Specifying 0 disables the polygon offset. The direction is specified separately.
|
||||
The factor can be from 0 to 7.
|
||||
Note: This probably never worked on Direct3D9 (was coded for D3D8 which had different value ranges) */
|
||||
u8 PolygonOffsetFactor:3;
|
||||
|
||||
//! DEPRECATED. Will be removed after Irrlicht 1.9.
|
||||
/** Flag defining the direction the polygon offset is applied to.
|
||||
Can be to front or to back, specified by values from E_POLYGON_OFFSET. */
|
||||
E_POLYGON_OFFSET PolygonOffsetDirection:1;
|
||||
|
||||
//! A constant z-buffer offset for a polygon/line/point
|
||||
/** The range of the value is driver specific.
|
||||
On OpenGL you get units which are multiplied by the smallest value that is guaranteed to produce a resolvable offset.
|
||||
@ -429,9 +401,6 @@ namespace video
|
||||
f32 PolygonOffsetSlopeScale;
|
||||
|
||||
//! Draw as wireframe or filled triangles? Default: false
|
||||
/** The user can access a material flag using
|
||||
\code material.Wireframe=true \endcode
|
||||
or \code material.setFlag(EMF_WIREFRAME, true); \endcode */
|
||||
bool Wireframe:1;
|
||||
|
||||
//! Draw as point cloud or filled triangles? Default: false
|
||||
@ -465,12 +434,22 @@ namespace video
|
||||
/** Sometimes, disabling mipmap usage can be useful. Default: true */
|
||||
bool UseMipMaps:1;
|
||||
|
||||
//! Execute a function on all texture layers.
|
||||
/** Useful for setting properties which are not per material, but per
|
||||
texture layer, e.g. bilinear filtering. */
|
||||
template <typename F>
|
||||
void forEachTexture(F &&fn) {
|
||||
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
|
||||
fn(TextureLayers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
//! Gets the texture transformation matrix for level i
|
||||
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
|
||||
\return Texture matrix for texture level i. */
|
||||
core::matrix4& getTextureMatrix(u32 i)
|
||||
{
|
||||
return TextureLayer[i].getTextureMatrix();
|
||||
return TextureLayers[i].getTextureMatrix();
|
||||
}
|
||||
|
||||
//! Gets the immutable texture transformation matrix for level i
|
||||
@ -479,7 +458,7 @@ namespace video
|
||||
const core::matrix4& getTextureMatrix(u32 i) const
|
||||
{
|
||||
if (i<MATERIAL_MAX_TEXTURES)
|
||||
return TextureLayer[i].getTextureMatrix();
|
||||
return TextureLayers[i].getTextureMatrix();
|
||||
else
|
||||
return core::IdentityMatrix;
|
||||
}
|
||||
@ -491,7 +470,7 @@ namespace video
|
||||
{
|
||||
if (i>=MATERIAL_MAX_TEXTURES)
|
||||
return;
|
||||
TextureLayer[i].setTextureMatrix(mat);
|
||||
TextureLayers[i].setTextureMatrix(mat);
|
||||
}
|
||||
|
||||
//! Gets the i-th texture
|
||||
@ -499,7 +478,7 @@ namespace video
|
||||
\return Texture for texture level i, if defined, else 0. */
|
||||
ITexture* getTexture(u32 i) const
|
||||
{
|
||||
return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0;
|
||||
return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
|
||||
}
|
||||
|
||||
//! Sets the i-th texture
|
||||
@ -510,144 +489,7 @@ namespace video
|
||||
{
|
||||
if (i>=MATERIAL_MAX_TEXTURES)
|
||||
return;
|
||||
TextureLayer[i].Texture = tex;
|
||||
}
|
||||
|
||||
//! Sets the Material flag to the given value
|
||||
/** \param flag The flag to be set.
|
||||
\param value The new value for the flag. */
|
||||
void setFlag(E_MATERIAL_FLAG flag, bool value)
|
||||
{
|
||||
switch (flag)
|
||||
{
|
||||
case EMF_WIREFRAME:
|
||||
Wireframe = value; break;
|
||||
case EMF_POINTCLOUD:
|
||||
PointCloud = value; break;
|
||||
case EMF_GOURAUD_SHADING:
|
||||
GouraudShading = value; break;
|
||||
case EMF_LIGHTING:
|
||||
Lighting = value; break;
|
||||
case EMF_ZBUFFER:
|
||||
ZBuffer = value; break;
|
||||
case EMF_ZWRITE_ENABLE:
|
||||
ZWriteEnable = value ? EZW_AUTO : EZW_OFF; break;
|
||||
case EMF_BACK_FACE_CULLING:
|
||||
BackfaceCulling = value; break;
|
||||
case EMF_FRONT_FACE_CULLING:
|
||||
FrontfaceCulling = value; break;
|
||||
case EMF_BILINEAR_FILTER:
|
||||
{
|
||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
TextureLayer[i].BilinearFilter = value;
|
||||
}
|
||||
break;
|
||||
case EMF_TRILINEAR_FILTER:
|
||||
{
|
||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
TextureLayer[i].TrilinearFilter = value;
|
||||
}
|
||||
break;
|
||||
case EMF_ANISOTROPIC_FILTER:
|
||||
{
|
||||
if (value)
|
||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
TextureLayer[i].AnisotropicFilter = 0xFF;
|
||||
else
|
||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
TextureLayer[i].AnisotropicFilter = 0;
|
||||
}
|
||||
break;
|
||||
case EMF_FOG_ENABLE:
|
||||
FogEnable = value; break;
|
||||
case EMF_NORMALIZE_NORMALS:
|
||||
NormalizeNormals = value; break;
|
||||
case EMF_TEXTURE_WRAP:
|
||||
{
|
||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)value;
|
||||
TextureLayer[i].TextureWrapV = (E_TEXTURE_CLAMP)value;
|
||||
TextureLayer[i].TextureWrapW = (E_TEXTURE_CLAMP)value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMF_ANTI_ALIASING:
|
||||
AntiAliasing = value?EAAM_SIMPLE:EAAM_OFF; break;
|
||||
case EMF_COLOR_MASK:
|
||||
ColorMask = value?ECP_ALL:ECP_NONE; break;
|
||||
case EMF_COLOR_MATERIAL:
|
||||
ColorMaterial = value?ECM_DIFFUSE:ECM_NONE; break;
|
||||
case EMF_USE_MIP_MAPS:
|
||||
UseMipMaps = value; break;
|
||||
case EMF_BLEND_OPERATION:
|
||||
BlendOperation = value?EBO_ADD:EBO_NONE; break;
|
||||
case EMF_BLEND_FACTOR:
|
||||
break;
|
||||
case EMF_POLYGON_OFFSET:
|
||||
PolygonOffsetFactor = value?1:0;
|
||||
PolygonOffsetDirection = EPO_BACK;
|
||||
PolygonOffsetSlopeScale = value?1.f:0.f;
|
||||
PolygonOffsetDepthBias = value?1.f:0.f;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//! Gets the Material flag
|
||||
/** \param flag The flag to query.
|
||||
\return The current value of the flag. */
|
||||
bool getFlag(E_MATERIAL_FLAG flag) const
|
||||
{
|
||||
switch (flag)
|
||||
{
|
||||
case EMF_WIREFRAME:
|
||||
return Wireframe;
|
||||
case EMF_POINTCLOUD:
|
||||
return PointCloud;
|
||||
case EMF_GOURAUD_SHADING:
|
||||
return GouraudShading;
|
||||
case EMF_LIGHTING:
|
||||
return Lighting;
|
||||
case EMF_ZBUFFER:
|
||||
return ZBuffer!=ECFN_DISABLED;
|
||||
case EMF_ZWRITE_ENABLE:
|
||||
return ZWriteEnable != EZW_OFF;
|
||||
case EMF_BACK_FACE_CULLING:
|
||||
return BackfaceCulling;
|
||||
case EMF_FRONT_FACE_CULLING:
|
||||
return FrontfaceCulling;
|
||||
case EMF_BILINEAR_FILTER:
|
||||
return TextureLayer[0].BilinearFilter;
|
||||
case EMF_TRILINEAR_FILTER:
|
||||
return TextureLayer[0].TrilinearFilter;
|
||||
case EMF_ANISOTROPIC_FILTER:
|
||||
return TextureLayer[0].AnisotropicFilter!=0;
|
||||
case EMF_FOG_ENABLE:
|
||||
return FogEnable;
|
||||
case EMF_NORMALIZE_NORMALS:
|
||||
return NormalizeNormals;
|
||||
case EMF_TEXTURE_WRAP:
|
||||
return !(TextureLayer[0].TextureWrapU ||
|
||||
TextureLayer[0].TextureWrapV ||
|
||||
TextureLayer[0].TextureWrapW);
|
||||
case EMF_ANTI_ALIASING:
|
||||
return (AntiAliasing==1);
|
||||
case EMF_COLOR_MASK:
|
||||
return (ColorMask!=ECP_NONE);
|
||||
case EMF_COLOR_MATERIAL:
|
||||
return (ColorMaterial != ECM_NONE);
|
||||
case EMF_USE_MIP_MAPS:
|
||||
return UseMipMaps;
|
||||
case EMF_BLEND_OPERATION:
|
||||
return BlendOperation != EBO_NONE;
|
||||
case EMF_BLEND_FACTOR:
|
||||
return BlendFactor != 0.f;
|
||||
case EMF_POLYGON_OFFSET:
|
||||
return PolygonOffsetFactor != 0 || PolygonOffsetDepthBias != 0.f;
|
||||
}
|
||||
|
||||
return false;
|
||||
TextureLayers[i].Texture = tex;
|
||||
}
|
||||
|
||||
//! Inequality operator
|
||||
@ -663,7 +505,6 @@ namespace video
|
||||
SpecularColor != b.SpecularColor ||
|
||||
Shininess != b.Shininess ||
|
||||
MaterialTypeParam != b.MaterialTypeParam ||
|
||||
MaterialTypeParam2 != b.MaterialTypeParam2 ||
|
||||
Thickness != b.Thickness ||
|
||||
Wireframe != b.Wireframe ||
|
||||
PointCloud != b.PointCloud ||
|
||||
@ -680,15 +521,13 @@ namespace video
|
||||
ColorMaterial != b.ColorMaterial ||
|
||||
BlendOperation != b.BlendOperation ||
|
||||
BlendFactor != b.BlendFactor ||
|
||||
PolygonOffsetFactor != b.PolygonOffsetFactor ||
|
||||
PolygonOffsetDirection != b.PolygonOffsetDirection ||
|
||||
PolygonOffsetDepthBias != b.PolygonOffsetDepthBias ||
|
||||
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
|
||||
UseMipMaps != b.UseMipMaps
|
||||
;
|
||||
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
|
||||
{
|
||||
different |= (TextureLayer[i] != b.TextureLayer[i]);
|
||||
different |= (TextureLayers[i] != b.TextureLayers[i]);
|
||||
}
|
||||
return different;
|
||||
}
|
||||
@ -727,10 +566,8 @@ namespace video
|
||||
//! as it asks the material renders directly what they do with the material.
|
||||
bool isTransparent() const
|
||||
{
|
||||
if ( MaterialType==EMT_TRANSPARENT_ADD_COLOR ||
|
||||
MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
||||
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA ||
|
||||
MaterialType==EMT_TRANSPARENT_REFLECTION_2_LAYER )
|
||||
if ( MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
||||
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -43,6 +43,32 @@ namespace video
|
||||
"texture_clamp_mirror_clamp_to_edge",
|
||||
"texture_clamp_mirror_clamp_to_border", 0};
|
||||
|
||||
|
||||
//! Texture minification filter.
|
||||
/** Used when scaling textures down. See the documentation on OpenGL's
|
||||
`GL_TEXTURE_MIN_FILTER` for more information. */
|
||||
enum E_TEXTURE_MIN_FILTER {
|
||||
//! Aka nearest-neighbor.
|
||||
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
|
||||
//! Aka bilinear.
|
||||
ETMINF_LINEAR_MIPMAP_NEAREST,
|
||||
//! Isn't known by any other name.
|
||||
ETMINF_NEAREST_MIPMAP_LINEAR,
|
||||
//! Aka trilinear.
|
||||
ETMINF_LINEAR_MIPMAP_LINEAR,
|
||||
};
|
||||
|
||||
//! Texture magnification filter.
|
||||
/** Used when scaling textures up. See the documentation on OpenGL's
|
||||
`GL_TEXTURE_MAG_FILTER` for more information.
|
||||
Note that mipmaps are only used for minification, not for magnification. */
|
||||
enum E_TEXTURE_MAG_FILTER {
|
||||
//! Aka nearest-neighbor.
|
||||
ETMAGF_NEAREST = 0,
|
||||
//! Aka bilinear.
|
||||
ETMAGF_LINEAR,
|
||||
};
|
||||
|
||||
//! Struct for holding material parameters which exist per texture layer
|
||||
// Note for implementors: Serialization is in CNullDriver
|
||||
class SMaterialLayer
|
||||
@ -50,7 +76,7 @@ namespace video
|
||||
public:
|
||||
//! Default constructor
|
||||
SMaterialLayer() : Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
|
||||
BilinearFilter(true), TrilinearFilter(false), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
||||
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -104,8 +130,8 @@ namespace video
|
||||
TextureWrapU = other.TextureWrapU;
|
||||
TextureWrapV = other.TextureWrapV;
|
||||
TextureWrapW = other.TextureWrapW;
|
||||
BilinearFilter = other.BilinearFilter;
|
||||
TrilinearFilter = other.TrilinearFilter;
|
||||
MinFilter = other.MinFilter;
|
||||
MagFilter = other.MagFilter;
|
||||
AnisotropicFilter = other.AnisotropicFilter;
|
||||
LODBias = other.LODBias;
|
||||
|
||||
@ -157,8 +183,8 @@ namespace video
|
||||
TextureWrapU != b.TextureWrapU ||
|
||||
TextureWrapV != b.TextureWrapV ||
|
||||
TextureWrapW != b.TextureWrapW ||
|
||||
BilinearFilter != b.BilinearFilter ||
|
||||
TrilinearFilter != b.TrilinearFilter ||
|
||||
MinFilter != b.MinFilter ||
|
||||
MagFilter != b.MagFilter ||
|
||||
AnisotropicFilter != b.AnisotropicFilter ||
|
||||
LODBias != b.LODBias;
|
||||
if (different)
|
||||
@ -184,13 +210,11 @@ namespace video
|
||||
u8 TextureWrapV:4;
|
||||
u8 TextureWrapW:4;
|
||||
|
||||
//! Is bilinear filtering enabled? Default: true
|
||||
bool BilinearFilter:1;
|
||||
//! Minification (downscaling) filter
|
||||
E_TEXTURE_MIN_FILTER MinFilter;
|
||||
|
||||
//! Is trilinear filtering enabled? Default: false
|
||||
/** If the trilinear filter flag is enabled,
|
||||
the bilinear filtering flag is ignored. */
|
||||
bool TrilinearFilter:1;
|
||||
//! Magnification (upscaling) filter
|
||||
E_TEXTURE_MAG_FILTER MagFilter;
|
||||
|
||||
//! Is anisotropic filtering enabled? Default: 0, disabled
|
||||
/** In Irrlicht you can use anisotropic texture filtering
|
||||
|
@ -117,13 +117,6 @@ namespace scene
|
||||
}
|
||||
}
|
||||
|
||||
//! sets a flag of all contained materials to a new value
|
||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
||||
{
|
||||
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||
MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
|
||||
}
|
||||
|
||||
//! set the hardware mapping hint, for driver
|
||||
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||
{
|
||||
|
@ -18,16 +18,16 @@ namespace video
|
||||
SMaterial Material;
|
||||
|
||||
//! Which values are overridden
|
||||
/** OR'ed values from E_MATERIAL_FLAGS. */
|
||||
u32 EnableFlags;
|
||||
/** OR'ed values from E_MATERIAL_PROPS. */
|
||||
u32 EnableProps;
|
||||
|
||||
//! For those flags in EnableFlags which affect layers, set which of the layers are affected
|
||||
bool EnableLayerFlags[MATERIAL_MAX_TEXTURES];
|
||||
//! For those properties in EnableProps which affect layers, set which of the layers are affected
|
||||
bool EnableLayerProps[MATERIAL_MAX_TEXTURES];
|
||||
|
||||
//! Which textures are overridden
|
||||
bool EnableTextures[MATERIAL_MAX_TEXTURES];
|
||||
|
||||
//! Overwrite complete layers (settings of EnableLayerFlags and EnableTextures don't matter then for layer data)
|
||||
//! Overwrite complete layers (settings of EnableLayerProps and EnableTextures don't matter then for layer data)
|
||||
bool EnableLayers[MATERIAL_MAX_TEXTURES];
|
||||
|
||||
//! Set in which render passes the material override is active.
|
||||
@ -59,19 +59,19 @@ namespace video
|
||||
core::array<SMaterialTypeReplacement> MaterialTypes;
|
||||
|
||||
//! Default constructor
|
||||
SOverrideMaterial() : EnableFlags(0), EnablePasses(0), Enabled(false)
|
||||
SOverrideMaterial() : EnableProps(0), EnablePasses(0), Enabled(false)
|
||||
{
|
||||
}
|
||||
|
||||
//! disable overrides and reset all flags
|
||||
//! disable overrides and reset all properties
|
||||
void reset()
|
||||
{
|
||||
EnableFlags = 0;
|
||||
EnableProps = 0;
|
||||
EnablePasses = 0;
|
||||
Enabled = false;
|
||||
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
EnableLayerFlags[i] = true; // doesn't do anything unless EnableFlags is set, just saying by default all texture layers are affected by flags
|
||||
EnableLayerProps[i] = true; // doesn't do anything unless EnableProps is set, just saying by default all texture layers are affected by properties
|
||||
EnableTextures[i] = false;
|
||||
EnableLayers[i] = false;
|
||||
}
|
||||
@ -92,67 +92,65 @@ namespace video
|
||||
for (u32 f=0; f<32; ++f)
|
||||
{
|
||||
const u32 num=(1<<f);
|
||||
if (EnableFlags & num)
|
||||
if (EnableProps & num)
|
||||
{
|
||||
switch (num)
|
||||
{
|
||||
case EMF_WIREFRAME: material.Wireframe = Material.Wireframe; break;
|
||||
case EMF_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
|
||||
case EMF_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
|
||||
case EMF_LIGHTING: material.Lighting = Material.Lighting; break;
|
||||
case EMF_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
|
||||
case EMF_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
|
||||
case EMF_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
|
||||
case EMF_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
|
||||
case EMF_BILINEAR_FILTER:
|
||||
case EMP_WIREFRAME: material.Wireframe = Material.Wireframe; break;
|
||||
case EMP_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
|
||||
case EMP_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
|
||||
case EMP_LIGHTING: material.Lighting = Material.Lighting; break;
|
||||
case EMP_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
|
||||
case EMP_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
|
||||
case EMP_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
|
||||
case EMP_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
|
||||
case EMP_MIN_FILTER:
|
||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
if ( EnableLayerFlags[i] )
|
||||
if ( EnableLayerProps[i] )
|
||||
{
|
||||
material.TextureLayer[i].BilinearFilter = Material.TextureLayer[i].BilinearFilter;
|
||||
material.TextureLayers[i].MinFilter = Material.TextureLayers[i].MinFilter;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMF_TRILINEAR_FILTER:
|
||||
case EMP_MAG_FILTER:
|
||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
if ( EnableLayerFlags[i] )
|
||||
if ( EnableLayerProps[i] )
|
||||
{
|
||||
material.TextureLayer[i].TrilinearFilter = Material.TextureLayer[i].TrilinearFilter;
|
||||
material.TextureLayers[i].MagFilter = Material.TextureLayers[i].MagFilter;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMF_ANISOTROPIC_FILTER:
|
||||
case EMP_ANISOTROPIC_FILTER:
|
||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
if ( EnableLayerFlags[i] )
|
||||
if ( EnableLayerProps[i] )
|
||||
{
|
||||
material.TextureLayer[i].AnisotropicFilter = Material.TextureLayer[i].AnisotropicFilter;
|
||||
material.TextureLayers[i].AnisotropicFilter = Material.TextureLayers[i].AnisotropicFilter;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMF_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
|
||||
case EMF_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
|
||||
case EMF_TEXTURE_WRAP:
|
||||
case EMP_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
|
||||
case EMP_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
|
||||
case EMP_TEXTURE_WRAP:
|
||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
{
|
||||
if ( EnableLayerFlags[i] )
|
||||
if ( EnableLayerProps[i] )
|
||||
{
|
||||
material.TextureLayer[i].TextureWrapU = Material.TextureLayer[i].TextureWrapU;
|
||||
material.TextureLayer[i].TextureWrapV = Material.TextureLayer[i].TextureWrapV;
|
||||
material.TextureLayer[i].TextureWrapW = Material.TextureLayer[i].TextureWrapW;
|
||||
material.TextureLayers[i].TextureWrapU = Material.TextureLayers[i].TextureWrapU;
|
||||
material.TextureLayers[i].TextureWrapV = Material.TextureLayers[i].TextureWrapV;
|
||||
material.TextureLayers[i].TextureWrapW = Material.TextureLayers[i].TextureWrapW;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMF_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
|
||||
case EMF_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
|
||||
case EMF_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
|
||||
case EMF_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
|
||||
case EMF_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
|
||||
case EMF_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
|
||||
case EMF_POLYGON_OFFSET:
|
||||
material.PolygonOffsetDirection = Material.PolygonOffsetDirection;
|
||||
material.PolygonOffsetFactor = Material.PolygonOffsetFactor;
|
||||
case EMP_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
|
||||
case EMP_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
|
||||
case EMP_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
|
||||
case EMP_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
|
||||
case EMP_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
|
||||
case EMP_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
|
||||
case EMP_POLYGON_OFFSET:
|
||||
material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias;
|
||||
material.PolygonOffsetSlopeScale = Material.PolygonOffsetSlopeScale;
|
||||
break;
|
||||
@ -163,11 +161,11 @@ namespace video
|
||||
{
|
||||
if ( EnableLayers[i] )
|
||||
{
|
||||
material.TextureLayer[i] = Material.TextureLayer[i];
|
||||
material.TextureLayers[i] = Material.TextureLayers[i];
|
||||
}
|
||||
else if ( EnableTextures[i] )
|
||||
{
|
||||
material.TextureLayer[i].Texture = Material.TextureLayer[i].Texture;
|
||||
material.TextureLayers[i].Texture = Material.TextureLayers[i].Texture;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_AABBOX_3D_H_INCLUDED__
|
||||
#define __IRR_AABBOX_3D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrMath.h"
|
||||
#include "plane3d.h"
|
||||
@ -364,6 +363,3 @@ class aabbox3d
|
||||
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_CORE_UTIL_H_INCLUDED__
|
||||
#define __IRR_CORE_UTIL_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrString.h"
|
||||
#include "path.h"
|
||||
@ -202,4 +201,3 @@ inline bool isupper(s32 c) { return c >= 'A' && c <= 'Z'; }
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_DIMENSION2D_H_INCLUDED__
|
||||
#define __IRR_DIMENSION2D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include "irrMath.h" // for irr::core::equals()
|
||||
@ -220,5 +219,4 @@ namespace core
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
#ifndef __EXAMPLE_HELPER_H_INCLUDED__
|
||||
#define __EXAMPLE_HELPER_H_INCLUDED__
|
||||
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "path.h"
|
||||
|
||||
namespace irr
|
||||
@ -13,7 +12,7 @@ namespace irr
|
||||
|
||||
static io::path getExampleMediaPath()
|
||||
{
|
||||
#if defined (_IRR_IOS_PLATFORM_) || defined (_IRR_ANDROID_PLATFORM_) || defined (_IRR_OSX_PLATFORM_) || defined (_IRR_EMSCRIPTEN_PLATFORM_)
|
||||
#ifdef IRR_MOBILE_PATHS
|
||||
return io::path("media/");
|
||||
#else
|
||||
return io::path("../../media/");
|
||||
|
@ -2,9 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
|
||||
|
||||
#ifndef __IRR_ARRAY_H_INCLUDED__
|
||||
#define __IRR_ARRAY_H_INCLUDED__
|
||||
|
||||
#pragma once
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
@ -243,7 +241,7 @@ public:
|
||||
/** \return Size of elements in the array which are actually occupied. */
|
||||
u32 size() const
|
||||
{
|
||||
return m_data.size();
|
||||
return static_cast<u32>(m_data.size());
|
||||
}
|
||||
|
||||
|
||||
@ -319,7 +317,7 @@ public:
|
||||
// *it = first element in [first, last) that is >= element, or last if not found.
|
||||
if (*it < element || element < *it)
|
||||
return -1;
|
||||
return it - m_data.begin();
|
||||
return static_cast<u32>(it - m_data.begin());
|
||||
}
|
||||
|
||||
|
||||
@ -337,8 +335,8 @@ public:
|
||||
auto iters = std::equal_range(m_data.begin(), m_data.end(), element);
|
||||
if (iters.first == iters.second)
|
||||
return -1;
|
||||
last = (iters.second - m_data.begin()) - 1;
|
||||
return iters.first - m_data.begin();
|
||||
last = static_cast<s32>((iters.second - m_data.begin()) - 1);
|
||||
return static_cast<s32>(iters.first - m_data.begin());
|
||||
}
|
||||
|
||||
|
||||
@ -353,7 +351,7 @@ public:
|
||||
auto it = std::find(m_data.begin(), m_data.end(), element);
|
||||
if (it == m_data.end())
|
||||
return -1;
|
||||
return it - m_data.begin();
|
||||
return static_cast<u32>(it - m_data.begin());
|
||||
}
|
||||
|
||||
|
||||
@ -438,5 +436,4 @@ private:
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,15 +2,14 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_MATH_H_INCLUDED__
|
||||
#define __IRR_MATH_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "irrTypes.h"
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <stdlib.h> // for abs() etc.
|
||||
#include <limits.h> // For INT_MAX / UINT_MAX
|
||||
#include <type_traits>
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -19,11 +18,6 @@ namespace core
|
||||
|
||||
//! Rounding error constant often used when comparing f32 values.
|
||||
|
||||
const s32 ROUNDING_ERROR_S32 = 0;
|
||||
|
||||
#ifdef __IRR_HAS_S64
|
||||
const s64 ROUNDING_ERROR_S64 = 0;
|
||||
#endif
|
||||
const f32 ROUNDING_ERROR_f32 = 0.000001f;
|
||||
const f64 ROUNDING_ERROR_f64 = 0.00000001;
|
||||
|
||||
@ -174,32 +168,6 @@ namespace core
|
||||
return ROUNDING_ERROR_f64;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline s32 roundingError()
|
||||
{
|
||||
return ROUNDING_ERROR_S32;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline u32 roundingError()
|
||||
{
|
||||
return ROUNDING_ERROR_S32;
|
||||
}
|
||||
|
||||
#ifdef __IRR_HAS_S64
|
||||
template <>
|
||||
inline s64 roundingError()
|
||||
{
|
||||
return ROUNDING_ERROR_S64;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline u64 roundingError()
|
||||
{
|
||||
return ROUNDING_ERROR_S64;
|
||||
}
|
||||
#endif
|
||||
|
||||
template <class T>
|
||||
inline T relativeErrorFactor()
|
||||
{
|
||||
@ -218,13 +186,19 @@ namespace core
|
||||
return 8;
|
||||
}
|
||||
|
||||
//! returns if a equals b, taking possible rounding errors into account
|
||||
template <class T>
|
||||
inline bool equals(const T a, const T b, const T tolerance = roundingError<T>())
|
||||
//! returns if a equals b, for types without rounding errors
|
||||
template <class T, std::enable_if_t<std::is_integral<T>::value, bool> = true>
|
||||
inline bool equals(const T a, const T b)
|
||||
{
|
||||
return (a + tolerance >= b) && (a - tolerance <= b);
|
||||
return a == b;
|
||||
}
|
||||
|
||||
//! returns if a equals b, taking possible rounding errors into account
|
||||
template <class T, std::enable_if_t<std::is_floating_point<T>::value, bool> = true>
|
||||
inline bool equals(const T a, const T b, const T tolerance = roundingError<T>())
|
||||
{
|
||||
return abs(a - b) <= tolerance;
|
||||
}
|
||||
|
||||
//! returns if a equals b, taking relative error in form of factor
|
||||
//! this particular function does not involve any division.
|
||||
@ -310,13 +284,11 @@ namespace core
|
||||
return a <= tolerance;
|
||||
}
|
||||
|
||||
#ifdef __IRR_HAS_S64
|
||||
//! returns if a equals zero, taking rounding errors into account
|
||||
inline bool iszero(const s64 a, const s64 tolerance = 0)
|
||||
{
|
||||
return abs_(a) <= tolerance;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline s32 s32_min(s32 a, s32 b)
|
||||
{
|
||||
@ -406,13 +378,11 @@ namespace core
|
||||
return static_cast<s32>(squareroot(static_cast<f32>(f)));
|
||||
}
|
||||
|
||||
#ifdef __IRR_HAS_S64
|
||||
// calculate: sqrt ( x )
|
||||
REALINLINE s64 squareroot(const s64 f)
|
||||
{
|
||||
return static_cast<s64>(squareroot(static_cast<f64>(f)));
|
||||
}
|
||||
#endif
|
||||
|
||||
// calculate: 1 / sqrt ( x )
|
||||
REALINLINE f64 reciprocal_squareroot(const f64 x)
|
||||
@ -488,4 +458,3 @@ namespace core
|
||||
using irr::core::IR;
|
||||
using irr::core::FR;
|
||||
|
||||
#endif
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
|
||||
|
||||
#ifndef __IRR_STRING_H_INCLUDED__
|
||||
#define __IRR_STRING_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include <string>
|
||||
@ -11,6 +10,8 @@
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <cwchar>
|
||||
#include <codecvt>
|
||||
#include <locale>
|
||||
|
||||
namespace irr
|
||||
{
|
||||
@ -35,8 +36,13 @@ outside the string class for explicit use.
|
||||
// forward declarations
|
||||
template <typename T>
|
||||
class string;
|
||||
static size_t multibyteToWString(string<wchar_t>& destination, const char* source, u32 sourceSize);
|
||||
static size_t wStringToMultibyte(string<c8>& destination, const wchar_t* source, u32 sourceSize);
|
||||
|
||||
//! Typedef for character strings
|
||||
typedef string<c8> stringc;
|
||||
|
||||
//! Typedef for wide character strings
|
||||
typedef string<wchar_t> stringw;
|
||||
|
||||
|
||||
//! Returns a character converted to lower case
|
||||
static inline u32 locale_lower ( u32 x )
|
||||
@ -260,7 +266,7 @@ public:
|
||||
the trailing NUL. */
|
||||
u32 size() const
|
||||
{
|
||||
return str.size();
|
||||
return static_cast<u32>(str.size());
|
||||
}
|
||||
|
||||
//! Informs if the string is empty or not.
|
||||
@ -828,7 +834,7 @@ public:
|
||||
if (!delimiter)
|
||||
return 0;
|
||||
|
||||
const u32 oldSize=ret.size();
|
||||
const u32 oldSize=static_cast<u32>(ret.size());
|
||||
|
||||
u32 tokenStartIdx = 0;
|
||||
for (u32 i=0; i<size()+1; ++i)
|
||||
@ -856,11 +862,14 @@ public:
|
||||
else if (!ignoreEmptyTokens)
|
||||
ret.push_back(string<T>());
|
||||
|
||||
return ret.size()-oldSize;
|
||||
return static_cast<u32>(ret.size()-oldSize);
|
||||
}
|
||||
|
||||
friend size_t multibyteToWString(string<wchar_t>& destination, const char* source, u32 sourceSize);
|
||||
friend size_t wStringToMultibyte(string<c8>& destination, const wchar_t* source, u32 sourceSize);
|
||||
// This function should not be used and is only kept for "CGUIFileOpenDialog::pathToStringW".
|
||||
friend size_t multibyteToWString(stringw& destination, const stringc &source);
|
||||
|
||||
friend size_t utf8ToWString(stringw &destination, const char *source);
|
||||
friend size_t wStringToUTF8(stringc &destination, const wchar_t *source);
|
||||
|
||||
private:
|
||||
|
||||
@ -879,10 +888,10 @@ private:
|
||||
return len;
|
||||
}
|
||||
static inline u32 calclen(const char* p) {
|
||||
return strlen(p);
|
||||
return static_cast<u32>(strlen(p));
|
||||
}
|
||||
static inline u32 calclen(const wchar_t* p) {
|
||||
return wcslen(p);
|
||||
return static_cast<u32>(wcslen(p));
|
||||
}
|
||||
|
||||
//! strcmp wrapper
|
||||
@ -913,38 +922,18 @@ private:
|
||||
};
|
||||
|
||||
|
||||
//! Typedef for character strings
|
||||
typedef string<c8> stringc;
|
||||
|
||||
//! Typedef for wide character strings
|
||||
typedef string<wchar_t> stringw;
|
||||
|
||||
//! Convert multibyte string to wide-character string
|
||||
/** Wrapper around mbstowcs from standard library, but directly using Irrlicht string class.
|
||||
What the function does exactly depends on the LC_CTYPE of the current c locale.
|
||||
\param destination Wide-character string receiving the converted source
|
||||
\param source multibyte string
|
||||
\return The number of wide characters written to destination, not including the eventual terminating null character or -1 when conversion failed */
|
||||
static inline size_t multibyteToWString(string<wchar_t>& destination, const core::string<c8>& source)
|
||||
{
|
||||
return multibyteToWString(destination, source.c_str(), (u32)source.size());
|
||||
}
|
||||
\return The number of wide characters written to destination, not including the eventual terminating null character or -1 when conversion failed
|
||||
|
||||
//! Convert multibyte string to wide-character string
|
||||
/** Wrapper around mbstowcs from standard library, but directly writing to Irrlicht string class.
|
||||
What the function does exactly depends on the LC_CTYPE of the current c locale.
|
||||
\param destination Wide-character string receiving the converted source
|
||||
\param source multibyte string
|
||||
\return The number of wide characters written to destination, not including the eventual terminating null character or -1 when conversion failed. */
|
||||
static inline size_t multibyteToWString(string<wchar_t>& destination, const char* source)
|
||||
This function should not be used and is only kept for "CGUIFileOpenDialog::pathToStringW". */
|
||||
inline size_t multibyteToWString(stringw& destination, const core::stringc& source)
|
||||
{
|
||||
const u32 s = source ? (u32)strlen(source) : 0;
|
||||
return multibyteToWString(destination, source, s);
|
||||
}
|
||||
u32 sourceSize = source.size();
|
||||
|
||||
//! Internally used by the other multibyteToWString functions
|
||||
static size_t multibyteToWString(string<wchar_t>& destination, const char* source, u32 sourceSize)
|
||||
{
|
||||
if ( sourceSize )
|
||||
{
|
||||
destination.str.resize(sourceSize+1);
|
||||
@ -952,7 +941,7 @@ static size_t multibyteToWString(string<wchar_t>& destination, const char* sourc
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4996) // 'mbstowcs': This function or variable may be unsafe. Consider using mbstowcs_s instead.
|
||||
#endif
|
||||
const size_t written = mbstowcs(&destination[0], source, (size_t)sourceSize);
|
||||
const size_t written = mbstowcs(&destination[0], source.c_str(), (size_t)sourceSize);
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
@ -975,55 +964,33 @@ static size_t multibyteToWString(string<wchar_t>& destination, const char* sourc
|
||||
}
|
||||
}
|
||||
|
||||
//! Same as multibyteToWString, but the other way around
|
||||
static inline size_t wStringToMultibyte(string<c8>& destination, const core::string<wchar_t>& source)
|
||||
|
||||
inline size_t utf8ToWString(stringw &destination, const char *source)
|
||||
{
|
||||
return wStringToMultibyte(destination, source.c_str(), (u32)source.size());
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
|
||||
destination = conv.from_bytes(source);
|
||||
return destination.size();
|
||||
}
|
||||
|
||||
//! Same as multibyteToWString, but the other way around
|
||||
static inline size_t wStringToMultibyte(string<c8>& destination, const wchar_t* source)
|
||||
inline size_t utf8ToWString(stringw &destination, const stringc &source)
|
||||
{
|
||||
const u32 s = source ? (u32)wcslen(source) : 0;
|
||||
return wStringToMultibyte(destination, source, s);
|
||||
return utf8ToWString(destination, source.c_str());
|
||||
}
|
||||
|
||||
//! Same as multibyteToWString, but the other way around
|
||||
static size_t wStringToMultibyte(string<c8>& destination, const wchar_t* source, u32 sourceSize)
|
||||
inline size_t wStringToUTF8(stringc &destination, const wchar_t *source)
|
||||
{
|
||||
if ( sourceSize )
|
||||
{
|
||||
destination.str.resize(sizeof(wchar_t)*sourceSize+1);
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4996) // 'wcstombs': This function or variable may be unsafe. Consider using wcstombs_s instead.
|
||||
#endif
|
||||
const size_t written = wcstombs(&destination[0], source, destination.size());
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
if ( written != (size_t)-1 )
|
||||
{
|
||||
destination.str.resize(written);
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
|
||||
destination = conv.to_bytes(source);
|
||||
return destination.size();
|
||||
}
|
||||
else
|
||||
|
||||
inline size_t wStringToUTF8(stringc &destination, const stringw &source)
|
||||
{
|
||||
// Likely character which got converted until the invalid character was encountered are in destination now.
|
||||
// And it seems even 0-terminated, but I found no documentation anywhere that this (the 0-termination) is guaranteed :-(
|
||||
destination.clear();
|
||||
}
|
||||
return written;
|
||||
}
|
||||
else
|
||||
{
|
||||
destination.clear();
|
||||
return 0;
|
||||
}
|
||||
return wStringToUTF8(destination, source.c_str());
|
||||
}
|
||||
|
||||
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,10 +2,8 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_TYPES_H_INCLUDED__
|
||||
#define __IRR_TYPES_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "IrrCompileConfig.h"
|
||||
#include <stdint.h>
|
||||
|
||||
namespace irr
|
||||
@ -38,13 +36,11 @@ typedef uint32_t u32;
|
||||
typedef int32_t s32;
|
||||
|
||||
|
||||
#ifdef __IRR_HAS_S64
|
||||
//! 64 bit unsigned variable.
|
||||
typedef uint64_t u64;
|
||||
|
||||
//! 64 bit signed variable.
|
||||
typedef int64_t s64;
|
||||
#endif // __IRR_HAS_S64
|
||||
|
||||
|
||||
|
||||
@ -123,4 +119,3 @@ code like 'code', but some generate warnings so we use this macro here */
|
||||
((irr::u32)(irr::u8)(c0) | ((irr::u32)(irr::u8)(c1) << 8) | \
|
||||
((irr::u32)(irr::u8)(c2) << 16) | ((irr::u32)(irr::u8)(c3) << 24 ))
|
||||
|
||||
#endif // __IRR_TYPES_H_INCLUDED__
|
||||
|
3616
include/irrUString.h
3616
include/irrUString.h
File diff suppressed because it is too large
Load Diff
@ -29,12 +29,9 @@
|
||||
#ifndef __IRRLICHT_H_INCLUDED__
|
||||
#define __IRRLICHT_H_INCLUDED__
|
||||
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "aabbox3d.h"
|
||||
#include "CIndexBuffer.h"
|
||||
#include "CMeshBuffer.h"
|
||||
#include "coreutil.h"
|
||||
#include "CVertexBuffer.h"
|
||||
#include "dimension2d.h"
|
||||
#include "ECullingTypes.h"
|
||||
#include "EDebugSceneTypes.h"
|
||||
@ -43,7 +40,7 @@
|
||||
#include "EGUIAlignment.h"
|
||||
#include "EGUIElementTypes.h"
|
||||
#include "EHardwareBufferFlags.h"
|
||||
#include "EMaterialFlags.h"
|
||||
#include "EMaterialProps.h"
|
||||
#include "EMaterialTypes.h"
|
||||
#include "EMeshWriterEnums.h"
|
||||
#include "ESceneNodeTypes.h"
|
||||
@ -135,6 +132,7 @@
|
||||
#include "triangle3d.h"
|
||||
#include "vector2d.h"
|
||||
#include "vector3d.h"
|
||||
#include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV
|
||||
|
||||
/*! \mainpage Irrlicht Engine 1.9 API documentation
|
||||
*
|
||||
@ -255,8 +253,7 @@ namespace irr
|
||||
//! Creates an Irrlicht device. The Irrlicht device is the root object for using the engine.
|
||||
/** If you need more parameters to be passed to the creation of the Irrlicht Engine device,
|
||||
use the createDeviceEx() function.
|
||||
\param driverType: Type of the video driver to use. This can currently be video::EDT_NULL,
|
||||
video::EDT_SOFTWARE, video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D9 and video::EDT_OPENGL.
|
||||
\param driverType: Type of the video driver to use.
|
||||
\param windowSize: Size of the window or the video mode in fullscreen mode.
|
||||
\param bits: Bits per pixel in fullscreen mode. Ignored if windowed mode.
|
||||
\param fullscreen: Should be set to true if the device should run in fullscreen. Otherwise
|
||||
@ -271,7 +268,7 @@ namespace irr
|
||||
device could not be created.
|
||||
*/
|
||||
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice(
|
||||
video::E_DRIVER_TYPE driverType = video::EDT_SOFTWARE,
|
||||
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL,
|
||||
// parentheses are necessary for some compilers
|
||||
const core::dimension2d<u32>& windowSize = (core::dimension2d<u32>(640,480)),
|
||||
u32 bits = 32,
|
||||
@ -280,16 +277,6 @@ namespace irr
|
||||
bool vsync = false,
|
||||
IEventReceiver* receiver = 0);
|
||||
|
||||
//! typedef for Function Pointer
|
||||
typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDevice )(
|
||||
video::E_DRIVER_TYPE driverType,
|
||||
const core::dimension2d<u32>& windowSize,
|
||||
u32 bits,
|
||||
bool fullscreen,
|
||||
bool stencilbuffer,
|
||||
bool vsync,
|
||||
IEventReceiver* receiver);
|
||||
|
||||
|
||||
//! Creates an Irrlicht device with the option to specify advanced parameters.
|
||||
/** Usually you should used createDevice() for creating an Irrlicht Engine device.
|
||||
@ -302,10 +289,6 @@ namespace irr
|
||||
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx(
|
||||
const SIrrlichtCreationParameters& parameters);
|
||||
|
||||
//! typedef for Function Pointer
|
||||
typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDeviceEx )( const SIrrlichtCreationParameters& parameters );
|
||||
|
||||
|
||||
// THE FOLLOWING IS AN EMPTY LIST OF ALL SUB NAMESPACES
|
||||
// EXISTING ONLY FOR THE DOCUMENTATION SOFTWARE DOXYGEN.
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_LINE_2D_H_INCLUDED__
|
||||
#define __IRR_LINE_2D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include "vector2d.h"
|
||||
@ -66,7 +65,7 @@ class line2d
|
||||
vector2d<T> getVector() const { return vector2d<T>( end.X - start.X, end.Y - start.Y); }
|
||||
|
||||
/*! Check if this segment intersects another segment,
|
||||
or if segments are coincindent (colinear). */
|
||||
or if segments are coincident (colinear). */
|
||||
bool intersectAsSegments( const line2d<T>& other) const
|
||||
{
|
||||
// Taken from:
|
||||
@ -83,7 +82,7 @@ class line2d
|
||||
if (o1 != o2 && o3 != o4)
|
||||
return true;
|
||||
|
||||
// Special Cases to check if segments are coolinear
|
||||
// Special Cases to check if segments are colinear
|
||||
if (o1 == 0 && other.start.isBetweenPoints( start, end)) return true;
|
||||
if (o2 == 0 && other.end.isBetweenPoints( start, end)) return true;
|
||||
if (o3 == 0 && start.isBetweenPoints( other.start, other.end)) return true;
|
||||
@ -355,5 +354,4 @@ class line2d
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_LINE_3D_H_INCLUDED__
|
||||
#define __IRR_LINE_3D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include "vector3d.h"
|
||||
@ -140,5 +139,4 @@ class line3d
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_MATRIX_H_INCLUDED__
|
||||
#define __IRR_MATRIX_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrMath.h"
|
||||
#include "vector3d.h"
|
||||
@ -12,6 +11,7 @@
|
||||
#include "aabbox3d.h"
|
||||
#include "rect.h"
|
||||
#include "irrString.h"
|
||||
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||
|
||||
// enable this to keep track of changes to the matrix
|
||||
// and make simpler identity check for seldom changing matrices
|
||||
@ -142,7 +142,7 @@ namespace core
|
||||
|
||||
//! Set this matrix to the product of two matrices
|
||||
/** Calculate b*a, no optimization used,
|
||||
use it if you know you never have a identity matrix */
|
||||
use it if you know you never have an identity matrix */
|
||||
CMatrix4<T>& setbyproduct_nocheck(const CMatrix4<T>& other_a,const CMatrix4<T>& other_b );
|
||||
|
||||
//! Multiply by another matrix.
|
||||
@ -150,7 +150,8 @@ namespace core
|
||||
CMatrix4<T> operator*(const CMatrix4<T>& other) const;
|
||||
|
||||
//! Multiply by another matrix.
|
||||
/** Calculate and return other*this */
|
||||
/** Like calling: (*this) = (*this) * other
|
||||
*/
|
||||
CMatrix4<T>& operator*=(const CMatrix4<T>& other);
|
||||
|
||||
//! Multiply by scalar.
|
||||
@ -186,14 +187,25 @@ namespace core
|
||||
//! Make a rotation matrix from Euler angles. The 4th row and column are unmodified.
|
||||
CMatrix4<T>& setRotationDegrees( const vector3d<T>& rotation );
|
||||
|
||||
//! Get the rotation, as set by setRotation() when you already know the scale.
|
||||
/** If you already know the scale then this function is faster than the other getRotationDegrees overload.
|
||||
NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
|
||||
//! Get the rotation, as set by setRotation() when you already know the scale used to create the matrix
|
||||
/** NOTE: The scale needs to be the correct one used to create this matrix.
|
||||
You can _not_ use the result of getScale(), but have to save your scale
|
||||
variable in another place (like ISceneNode does).
|
||||
NOTE: No scale value can be 0 or the result is undefined.
|
||||
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
|
||||
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||
NOTE: It will (usually) give wrong results when further transformations have been added in the matrix (like shear).
|
||||
WARNING: There have been troubles with this function over the years and we may still have missed some corner cases.
|
||||
It's generally safer to keep the rotation and scale you used to create the matrix around and work with those.
|
||||
*/
|
||||
core::vector3d<T> getRotationDegrees(const vector3d<T>& scale) const;
|
||||
|
||||
//! Returns the rotation, as set by setRotation().
|
||||
/** NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
|
||||
NOTE: This only works correct if no other matrix operations have been done on the inner 3x3 matrix besides
|
||||
setting rotation (so no scale/shear). Thought it (probably) works as long as scale doesn't flip handedness.
|
||||
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
|
||||
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||
*/
|
||||
core::vector3d<T> getRotationDegrees() const;
|
||||
|
||||
@ -265,13 +277,6 @@ namespace core
|
||||
void transformPlane( const core::plane3d<f32> &in, core::plane3d<f32> &out) const;
|
||||
|
||||
//! Transforms a axis aligned bounding box
|
||||
/** The result box of this operation may not be accurate at all. For
|
||||
correct results, use transformBoxEx() */
|
||||
void transformBox(core::aabbox3d<f32>& box) const;
|
||||
|
||||
//! Transforms a axis aligned bounding box
|
||||
/** The result box of this operation should be accurate, but this operation
|
||||
is slower than transformBox(). */
|
||||
void transformBoxEx(core::aabbox3d<f32>& box) const;
|
||||
|
||||
//! Multiplies this matrix by a 1x4 matrix
|
||||
@ -827,11 +832,9 @@ namespace core
|
||||
|
||||
//! Returns the absolute values of the scales of the matrix.
|
||||
/**
|
||||
Note that this returns the absolute (positive) values unless only scale is set.
|
||||
Unfortunately it does not appear to be possible to extract any original negative
|
||||
values. The best that we could do would be to arbitrarily make one scale
|
||||
negative if one or three of them were negative.
|
||||
FIXME - return the original values.
|
||||
Note: You only get back original values if the matrix only set the scale.
|
||||
Otherwise the result is a scale you can use to normalize the matrix axes,
|
||||
but it's usually no longer what you did set with setScale.
|
||||
*/
|
||||
template <class T>
|
||||
inline vector3d<T> CMatrix4<T>::getScale() const
|
||||
@ -894,33 +897,16 @@ namespace core
|
||||
}
|
||||
|
||||
|
||||
//! Returns a rotation that is equivalent to that set by setRotationDegrees().
|
||||
/** This code was sent in by Chev. Note that it does not necessarily return
|
||||
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will
|
||||
be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||
This code was originally written by by Chev.
|
||||
//! Returns a rotation which (mostly) works in combination with the given scale
|
||||
/**
|
||||
This code was originally written by by Chev (assuming no scaling back then,
|
||||
we can be blamed for all problems added by regarding scale)
|
||||
*/
|
||||
template <class T>
|
||||
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees(const vector3d<T>& scale_) const
|
||||
{
|
||||
const CMatrix4<T> &mat = *this;
|
||||
core::vector3d<T> scale(scale_);
|
||||
// we need to check for negative scale on to axes, which would bring up wrong results
|
||||
if (scale.Y<0 && scale.Z<0)
|
||||
{
|
||||
scale.Y =-scale.Y;
|
||||
scale.Z =-scale.Z;
|
||||
}
|
||||
else if (scale.X<0 && scale.Z<0)
|
||||
{
|
||||
scale.X =-scale.X;
|
||||
scale.Z =-scale.Z;
|
||||
}
|
||||
else if (scale.X<0 && scale.Y<0)
|
||||
{
|
||||
scale.X =-scale.X;
|
||||
scale.Y =-scale.Y;
|
||||
}
|
||||
const core::vector3d<f64> scale(core::iszero(scale_.X) ? FLT_MAX : scale_.X , core::iszero(scale_.Y) ? FLT_MAX : scale_.Y, core::iszero(scale_.Z) ? FLT_MAX : scale_.Z);
|
||||
const core::vector3d<f64> invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z));
|
||||
|
||||
f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0));
|
||||
@ -929,7 +915,7 @@ namespace core
|
||||
|
||||
f64 rotx, roty, X, Z;
|
||||
|
||||
if (!core::iszero(C))
|
||||
if (!core::iszero((T)C))
|
||||
{
|
||||
const f64 invC = core::reciprocal(C);
|
||||
rotx = mat[10] * invC * invScale.Z;
|
||||
@ -956,14 +942,37 @@ namespace core
|
||||
}
|
||||
|
||||
//! Returns a rotation that is equivalent to that set by setRotationDegrees().
|
||||
/** This code was sent in by Chev. Note that it does not necessarily return
|
||||
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will
|
||||
be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||
This code was originally written by by Chev. */
|
||||
template <class T>
|
||||
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees() const
|
||||
{
|
||||
return getRotationDegrees(getScale());
|
||||
// Note: Using getScale() here make it look like it could do matrix decomposition.
|
||||
// It can't! It works (or should work) as long as rotation doesn't flip the handedness
|
||||
// aka scale swapping 1 or 3 axes. (I think we could catch that as well by comparing
|
||||
// crossproduct of first 2 axes to direction of third axis, but TODO)
|
||||
// And maybe it should also offer the solution for the simple calculation
|
||||
// without regarding scaling as Irrlicht did before 1.7
|
||||
core::vector3d<T> scale(getScale());
|
||||
|
||||
// We assume the matrix uses rotations instead of negative scaling 2 axes.
|
||||
// Otherwise it fails even for some simple cases, like rotating around
|
||||
// 2 axes by 180° which getScale thinks is a negative scaling.
|
||||
if (scale.Y<0 && scale.Z<0)
|
||||
{
|
||||
scale.Y =-scale.Y;
|
||||
scale.Z =-scale.Z;
|
||||
}
|
||||
else if (scale.X<0 && scale.Z<0)
|
||||
{
|
||||
scale.X =-scale.X;
|
||||
scale.Z =-scale.Z;
|
||||
}
|
||||
else if (scale.X<0 && scale.Y<0)
|
||||
{
|
||||
scale.X =-scale.X;
|
||||
scale.Y =-scale.Y;
|
||||
}
|
||||
|
||||
return getRotationDegrees(scale);
|
||||
}
|
||||
|
||||
|
||||
@ -1155,10 +1164,10 @@ namespace core
|
||||
template <class T>
|
||||
inline void CMatrix4<T>::rotateVect( vector3df& vect ) const
|
||||
{
|
||||
vector3df tmp = vect;
|
||||
vect.X = tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8];
|
||||
vect.Y = tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9];
|
||||
vect.Z = tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10];
|
||||
vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
|
||||
vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8]);
|
||||
vect.Y = static_cast<f32>(tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9]);
|
||||
vect.Z = static_cast<f32>(tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10]);
|
||||
}
|
||||
|
||||
//! An alternate transform vector method, writing into a second vector
|
||||
@ -1182,24 +1191,24 @@ namespace core
|
||||
template <class T>
|
||||
inline void CMatrix4<T>::inverseRotateVect( vector3df& vect ) const
|
||||
{
|
||||
vector3df tmp = vect;
|
||||
vect.X = tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2];
|
||||
vect.Y = tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6];
|
||||
vect.Z = tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10];
|
||||
vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
|
||||
vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2]);
|
||||
vect.Y = static_cast<f32>(tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6]);
|
||||
vect.Z = static_cast<f32>(tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10]);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline void CMatrix4<T>::transformVect( vector3df& vect) const
|
||||
{
|
||||
f32 vector[3];
|
||||
T vector[3];
|
||||
|
||||
vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12];
|
||||
vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13];
|
||||
vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14];
|
||||
|
||||
vect.X = vector[0];
|
||||
vect.Y = vector[1];
|
||||
vect.Z = vector[2];
|
||||
vect.X = static_cast<f32>(vector[0]);
|
||||
vect.Y = static_cast<f32>(vector[1]);
|
||||
vect.Z = static_cast<f32>(vector[2]);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
@ -1261,22 +1270,6 @@ namespace core
|
||||
transformPlane( out );
|
||||
}
|
||||
|
||||
//! Transforms the edge-points of a bounding box
|
||||
//! Deprecated as it's usually not what people need (regards only 2 corners, but other corners might be outside the box after transformation)
|
||||
//! Use transformBoxEx instead.
|
||||
template <class T>
|
||||
_IRR_DEPRECATED_ inline void CMatrix4<T>::transformBox(core::aabbox3d<f32>& box) const
|
||||
{
|
||||
#if defined ( USE_MATRIX_TEST )
|
||||
if (isIdentity())
|
||||
return;
|
||||
#endif
|
||||
|
||||
transformVect(box.MinEdge);
|
||||
transformVect(box.MaxEdge);
|
||||
box.repair();
|
||||
}
|
||||
|
||||
//! Transforms a axis aligned bounding box more accurately than transformBox()
|
||||
template <class T>
|
||||
inline void CMatrix4<T>::transformBoxEx(core::aabbox3d<f32>& box) const
|
||||
@ -2063,7 +2056,7 @@ namespace core
|
||||
core::vector3df v(vs);
|
||||
v.normalize();
|
||||
|
||||
// cosinus angle
|
||||
// cosine angle
|
||||
T ca = f.dotProduct(t);
|
||||
|
||||
core::vector3df vt(v * (1 - ca));
|
||||
@ -2124,7 +2117,7 @@ namespace core
|
||||
// axis multiplication by sin
|
||||
const core::vector3df vs = look.crossProduct(from);
|
||||
|
||||
// cosinus angle
|
||||
// cosine angle
|
||||
const f32 ca = from.dotProduct(look);
|
||||
|
||||
core::vector3df vt(up * (1.f - ca));
|
||||
@ -2369,5 +2362,4 @@ namespace core
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -5,13 +5,13 @@
|
||||
|
||||
#include <string>
|
||||
#include <unordered_set>
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||
#include "irrTypes.h"
|
||||
#include "IContextManager.h"
|
||||
#include <KHR/khrplatform.h>
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#define APIENTRY KHRONOS_APIENTRY
|
||||
#endif
|
||||
#ifndef APIENTRYP
|
||||
#define APIENTRYP APIENTRY *
|
||||
@ -705,7 +705,6 @@ private:
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC_MT) (GLenum mode, const void * indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC_MT) (GLenum mode, GLenum type, const void * indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
|
||||
typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC_MT) (GLfloat factor, GLfloat units, GLfloat clamp);
|
||||
typedef void (APIENTRYP PFNGLGENPERFMONITORSEXPROC_MT) (GLsizei n, GLuint * monitors);
|
||||
typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXPROC_MT) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
|
||||
typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEPROC_MT) (GLuint texture);
|
||||
typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEPROC_MT) (GLuint texture, GLuint sampler);
|
||||
@ -781,9 +780,9 @@ public:
|
||||
// Call this once after creating the context.
|
||||
void LoadAllProcedures(irr::video::IContextManager *cmgr);
|
||||
// Check if an extension is supported.
|
||||
inline bool IsExtensionPresent(const std::string &ext)
|
||||
inline bool IsExtensionPresent(const std::string &ext) const
|
||||
{
|
||||
return extensions.find(ext) != extensions.end();
|
||||
return extensions.count(ext) > 0;
|
||||
}
|
||||
|
||||
PFNGLCULLFACEPROC_MT CullFace = NULL;
|
||||
@ -1436,7 +1435,6 @@ public:
|
||||
PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC_MT MultiDrawArraysIndirectCount = NULL;
|
||||
PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC_MT MultiDrawElementsIndirectCount = NULL;
|
||||
PFNGLPOLYGONOFFSETCLAMPPROC_MT PolygonOffsetClamp = NULL;
|
||||
PFNGLGENPERFMONITORSEXPROC_MT GenPerfMonitorsEX = NULL;
|
||||
PFNGLPRIMITIVEBOUNDINGBOXPROC_MT PrimitiveBoundingBox = NULL;
|
||||
PFNGLGETTEXTUREHANDLEPROC_MT GetTextureHandle = NULL;
|
||||
PFNGLGETTEXTURESAMPLERHANDLEPROC_MT GetTextureSamplerHandle = NULL;
|
||||
@ -3020,6 +3018,16 @@ public:
|
||||
static constexpr const GLenum TEXTURE_SRGB_DECODE = 0x8A48;
|
||||
static constexpr const GLenum DECODE = 0x8A49;
|
||||
static constexpr const GLenum SKIP_DECODE = 0x8A4A;
|
||||
static constexpr const GLenum ALPHA8 = 0x803C;
|
||||
static constexpr const GLenum LUMINANCE8 = 0x8040;
|
||||
static constexpr const GLenum LUMINANCE8_ALPHA8 = 0x8045;
|
||||
static constexpr const GLenum ALPHA32F = 0x8816;
|
||||
static constexpr const GLenum LUMINANCE32F = 0x8818;
|
||||
static constexpr const GLenum LUMINANCE_ALPHA32F = 0x8819;
|
||||
static constexpr const GLenum ALPHA16F = 0x881C;
|
||||
static constexpr const GLenum LUMINANCE16F = 0x881E;
|
||||
static constexpr const GLenum LUMINANCE_ALPHA16F = 0x881F;
|
||||
static constexpr const GLenum BGRA8 = 0x93A1;
|
||||
static constexpr const GLenum INCLUSIVE = 0x8F10;
|
||||
static constexpr const GLenum EXCLUSIVE = 0x8F11;
|
||||
static constexpr const GLenum WINDOW_RECTANGLE = 0x8F12;
|
||||
@ -3044,10 +3052,7 @@ public:
|
||||
static constexpr const GLenum GEOMETRY_LINKED_VERTICES_OUT = 0x8916;
|
||||
static constexpr const GLenum GEOMETRY_LINKED_INPUT_TYPE = 0x8917;
|
||||
static constexpr const GLenum GEOMETRY_LINKED_OUTPUT_TYPE = 0x8918;
|
||||
static constexpr const GLenum ALPHA8 = 0x803C;
|
||||
static constexpr const GLenum LUMINANCE4_ALPHA4 = 0x8043;
|
||||
static constexpr const GLenum LUMINANCE8_ALPHA8 = 0x8045;
|
||||
static constexpr const GLenum LUMINANCE8 = 0x8040;
|
||||
static constexpr const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET = 0x8CD4;
|
||||
static constexpr const GLenum COMPRESSED_RGBA_ASTC_3x3x3 = 0x93C0;
|
||||
static constexpr const GLenum COMPRESSED_RGBA_ASTC_4x3x3 = 0x93C1;
|
||||
@ -3070,7 +3075,6 @@ public:
|
||||
static constexpr const GLenum COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5 = 0x93E8;
|
||||
static constexpr const GLenum COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6 = 0x93E9;
|
||||
static constexpr const GLenum INT_10_10_10_2 = 0x8DF7;
|
||||
static constexpr const GLenum BGRA8 = 0x93A1;
|
||||
static constexpr const GLenum MALI_PROGRAM_BINARY_ARM = 0x8F61;
|
||||
static constexpr const GLenum MALI_SHADER_BINARY_ARM = 0x8F60;
|
||||
static constexpr const GLenum FETCH_PER_SAMPLE_ARM = 0x8F65;
|
||||
@ -3080,8 +3084,37 @@ public:
|
||||
static constexpr const GLenum SMAPHS_PROGRAM_BINARY_DMP = 0x9252;
|
||||
static constexpr const GLenum DMP_PROGRAM_BINARY_DMP = 0x9253;
|
||||
static constexpr const GLenum SHADER_BINARY_DMP = 0x9250;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION = 0x96C0;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_NONE = 0x96C1;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_DEFAULT = 0x96C2;
|
||||
static constexpr const GLenum SAMPLER_EXTERNAL_2D_Y2Y = 0x8BE7;
|
||||
static constexpr const GLenum GPU_DISJOINT = 0x8FBB;
|
||||
static constexpr const GLenum SHADING_RATE_1X1_PIXELS = 0x96A6;
|
||||
static constexpr const GLenum SHADING_RATE_1X2_PIXELS = 0x96A7;
|
||||
static constexpr const GLenum SHADING_RATE_2X1_PIXELS = 0x96A8;
|
||||
static constexpr const GLenum SHADING_RATE_2X2_PIXELS = 0x96A9;
|
||||
static constexpr const GLenum SHADING_RATE_1X4_PIXELS = 0x96AA;
|
||||
static constexpr const GLenum SHADING_RATE_4X1_PIXELS = 0x96AB;
|
||||
static constexpr const GLenum SHADING_RATE_4X2_PIXELS = 0x96AC;
|
||||
static constexpr const GLenum SHADING_RATE_2X4_PIXELS = 0x96AD;
|
||||
static constexpr const GLenum SHADING_RATE_4X4_PIXELS = 0x96AE;
|
||||
static constexpr const GLenum SHADING_RATE = 0x96D0;
|
||||
static constexpr const GLenum SHADING_RATE_ATTACHMENT = 0x96D1;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP = 0x96D2;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE = 0x96D3;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_COMBINER_OP_MIN = 0x96D4;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_COMBINER_OP_MAX = 0x96D5;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_COMBINER_OP_MUL = 0x96D6;
|
||||
static constexpr const GLenum MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH = 0x96D7;
|
||||
static constexpr const GLenum MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH = 0x96D8;
|
||||
static constexpr const GLenum MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT = 0x96D9;
|
||||
static constexpr const GLenum MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT = 0x96DA;
|
||||
static constexpr const GLenum MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO = 0x96DB;
|
||||
static constexpr const GLenum MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS = 0x96DC;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED = 0x96DD;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED = 0x96DE;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED = 0x96DF;
|
||||
static constexpr const GLenum FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED = 0x8F6F;
|
||||
static constexpr const GLenum TEXTURE_TILING = 0x9580;
|
||||
static constexpr const GLenum DEDICATED_MEMORY_OBJECT = 0x9581;
|
||||
static constexpr const GLenum PROTECTED_MEMORY_OBJECT = 0x959B;
|
||||
@ -3136,12 +3169,19 @@ public:
|
||||
static constexpr const GLenum COMPRESSED_SRGB_ALPHA_S3TC_DXT3 = 0x8C4E;
|
||||
static constexpr const GLenum COMPRESSED_SRGB_ALPHA_S3TC_DXT5 = 0x8C4F;
|
||||
static constexpr const GLenum TEXTURE_FORMAT_SRGB_OVERRIDE = 0x8FBF;
|
||||
static constexpr const GLenum ALPHA32F = 0x8816;
|
||||
static constexpr const GLenum LUMINANCE32F = 0x8818;
|
||||
static constexpr const GLenum LUMINANCE_ALPHA32F = 0x8819;
|
||||
static constexpr const GLenum ALPHA16F = 0x881C;
|
||||
static constexpr const GLenum LUMINANCE16F = 0x881E;
|
||||
static constexpr const GLenum LUMINANCE_ALPHA16F = 0x881F;
|
||||
static constexpr const GLenum NUM_SURFACE_COMPRESSION_FIXED_RATES = 0x8F6E;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_1BPC = 0x96C4;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_2BPC = 0x96C5;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_3BPC = 0x96C6;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_4BPC = 0x96C7;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_5BPC = 0x96C8;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_6BPC = 0x96C9;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_7BPC = 0x96CA;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_8BPC = 0x96CB;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_9BPC = 0x96CC;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_10BPC = 0x96CD;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_11BPC = 0x96CE;
|
||||
static constexpr const GLenum SURFACE_COMPRESSION_FIXED_RATE_12BPC = 0x96CF;
|
||||
static constexpr const GLenum GCCSO_SHADER_BINARY_FJ = 0x9260;
|
||||
static constexpr const GLenum STATE_RESTORE = 0x8BDC;
|
||||
static constexpr const GLenum SHADER_BINARY_VIV = 0x8FC4;
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_PATH_H_INCLUDED__
|
||||
#define __IRR_PATH_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrString.h"
|
||||
|
||||
@ -87,4 +86,3 @@ private:
|
||||
} // io
|
||||
} // irr
|
||||
|
||||
#endif // __IRR_PATH_H_INCLUDED__
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_PLANE_3D_H_INCLUDED__
|
||||
#define __IRR_PLANE_3D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrMath.h"
|
||||
#include "vector3d.h"
|
||||
@ -241,5 +240,4 @@ typedef plane3d<s32> plane3di;
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -5,8 +5,7 @@
|
||||
//! As of Irrlicht 1.6, position2d is a synonym for vector2d.
|
||||
/** You should consider position2d to be deprecated, and use vector2d by preference. */
|
||||
|
||||
#ifndef __IRR_POSITION_H_INCLUDED__
|
||||
#define __IRR_POSITION_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "vector2d.h"
|
||||
|
||||
@ -28,5 +27,4 @@ typedef vector2d<s32> position2di;
|
||||
// ...and use a #define to catch the rest, for (e.g.) position2d<f64>
|
||||
#define position2d vector2d
|
||||
|
||||
#endif // __IRR_POSITION_H_INCLUDED__
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_QUATERNION_H_INCLUDED__
|
||||
#define __IRR_QUATERNION_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include "irrMath.h"
|
||||
@ -720,6 +719,8 @@ inline core::quaternion& quaternion::makeIdentity()
|
||||
inline core::quaternion& quaternion::rotationFromTo(const vector3df& from, const vector3df& to)
|
||||
{
|
||||
// Based on Stan Melax's article in Game Programming Gems
|
||||
// Optimized by Robert Eisele: https://raw.org/proof/quaternion-from-two-vectors
|
||||
|
||||
// Copy, since cannot modify local
|
||||
vector3df v0 = from;
|
||||
vector3df v1 = to;
|
||||
@ -744,15 +745,12 @@ inline core::quaternion& quaternion::rotationFromTo(const vector3df& from, const
|
||||
return set(axis.X, axis.Y, axis.Z, 0).normalize();
|
||||
}
|
||||
|
||||
const f32 s = sqrtf( (1+d)*2 ); // optimize inv_sqrt
|
||||
const f32 invs = 1.f / s;
|
||||
const vector3df c = v0.crossProduct(v1)*invs;
|
||||
return set(c.X, c.Y, c.Z, s * 0.5f).normalize();
|
||||
const vector3df c = v0.crossProduct(v1);
|
||||
return set(c.X, c.Y, c.Z, 1 + d).normalize();
|
||||
}
|
||||
|
||||
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_RECT_H_INCLUDED__
|
||||
#define __IRR_RECT_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrTypes.h"
|
||||
#include "dimension2d.h"
|
||||
@ -284,5 +283,4 @@ namespace core
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_TRIANGLE_3D_H_INCLUDED__
|
||||
#define __IRR_TRIANGLE_3D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "vector3d.h"
|
||||
#include "line3d.h"
|
||||
@ -100,8 +99,7 @@ namespace core
|
||||
//! Check if a point is inside the triangle (border-points count also as inside)
|
||||
/** This method uses a barycentric coordinate system.
|
||||
It is faster than isPointInside but is more susceptible to floating point rounding
|
||||
errors. This will especially be noticeable when the FPU is in single precision mode
|
||||
(which is for example set on default by Direct3D).
|
||||
errors.
|
||||
\param p Point to test. Assumes that this point is already
|
||||
on the plane of the triangle.
|
||||
\return True if point is inside the triangle, otherwise false. */
|
||||
@ -275,5 +273,4 @@ namespace core
|
||||
} // end namespace core
|
||||
} // end namespace irr
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_POINT_2D_H_INCLUDED__
|
||||
#define __IRR_POINT_2D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrMath.h"
|
||||
#include "dimension2d.h"
|
||||
@ -76,47 +75,47 @@ public:
|
||||
return *(&X+index);
|
||||
}
|
||||
|
||||
//! sort in order X, Y. Equality with rounding tolerance.
|
||||
//! sort in order X, Y.
|
||||
bool operator<=(const vector2d<T>&other) const
|
||||
{
|
||||
return (X<other.X || core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && (Y<other.Y || core::equals(Y, other.Y)));
|
||||
return !(*this > other);
|
||||
}
|
||||
|
||||
//! sort in order X, Y. Equality with rounding tolerance.
|
||||
//! sort in order X, Y.
|
||||
bool operator>=(const vector2d<T>&other) const
|
||||
{
|
||||
return (X>other.X || core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && (Y>other.Y || core::equals(Y, other.Y)));
|
||||
return !(*this < other);
|
||||
}
|
||||
|
||||
//! sort in order X, Y. Difference must be above rounding tolerance.
|
||||
//! sort in order X, Y.
|
||||
bool operator<(const vector2d<T>&other) const
|
||||
{
|
||||
return (X<other.X && !core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && Y<other.Y && !core::equals(Y, other.Y));
|
||||
return X < other.X || (X == other.X && Y < other.Y);
|
||||
}
|
||||
|
||||
//! sort in order X, Y. Difference must be above rounding tolerance.
|
||||
//! sort in order X, Y.
|
||||
bool operator>(const vector2d<T>&other) const
|
||||
{
|
||||
return (X>other.X && !core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && Y>other.Y && !core::equals(Y, other.Y));
|
||||
return X > other.X || (X == other.X && Y > other.Y);
|
||||
}
|
||||
|
||||
bool operator==(const vector2d<T>& other) const { return equals(other); }
|
||||
bool operator!=(const vector2d<T>& other) const { return !equals(other); }
|
||||
bool operator==(const vector2d<T>& other) const {
|
||||
return X == other.X && Y == other.Y;
|
||||
}
|
||||
|
||||
bool operator!=(const vector2d<T>& other) const {
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
// functions
|
||||
|
||||
//! Checks if this vector equals the other one.
|
||||
/** Takes floating point rounding errors into account.
|
||||
\param other Vector to compare with.
|
||||
\param tolerance Epsilon value for both - comparing X and Y.
|
||||
\return True if the two vector are (almost) equal, else false. */
|
||||
bool equals(const vector2d<T>& other, const T tolerance = (T)ROUNDING_ERROR_f32 ) const
|
||||
bool equals(const vector2d<T>& other) const
|
||||
{
|
||||
return core::equals(X, other.X, tolerance) && core::equals(Y, other.Y, tolerance);
|
||||
return core::equals(X, other.X) && core::equals(Y, other.Y);
|
||||
}
|
||||
|
||||
vector2d<T>& set(T nx, T ny) {X=nx; Y=ny; return *this; }
|
||||
@ -143,7 +142,7 @@ public:
|
||||
bool nearlyParallel( const vector2d<T> & other, const T factor = relativeErrorFactor<T>()) const
|
||||
{
|
||||
// https://eagergames.wordpress.com/2017/04/01/fast-parallel-lines-and-vectors-test/
|
||||
// if a || b then a.x/a.y = b.x/b.y (similiar triangles)
|
||||
// if a || b then a.x/a.y = b.x/b.y (similar triangles)
|
||||
// if a || b then either both x are 0 or both y are 0.
|
||||
|
||||
return equalsRelative( X*other.Y, other.X* Y, factor)
|
||||
@ -432,5 +431,4 @@ struct hash<irr::core::vector2d<T> >
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||
|
||||
#ifndef __IRR_POINT_3D_H_INCLUDED__
|
||||
#define __IRR_POINT_3D_H_INCLUDED__
|
||||
#pragma once
|
||||
|
||||
#include "irrMath.h"
|
||||
|
||||
@ -69,57 +68,51 @@ namespace core
|
||||
return *(&X+index);
|
||||
}
|
||||
|
||||
//! sort in order X, Y, Z. Equality with rounding tolerance.
|
||||
//! sort in order X, Y, Z.
|
||||
bool operator<=(const vector3d<T>&other) const
|
||||
{
|
||||
return (X<other.X || core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && (Y<other.Y || core::equals(Y, other.Y))) ||
|
||||
(core::equals(X, other.X) && core::equals(Y, other.Y) && (Z<other.Z || core::equals(Z, other.Z)));
|
||||
return !(*this > other);
|
||||
}
|
||||
|
||||
//! sort in order X, Y, Z. Equality with rounding tolerance.
|
||||
//! sort in order X, Y, Z.
|
||||
bool operator>=(const vector3d<T>&other) const
|
||||
{
|
||||
return (X>other.X || core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && (Y>other.Y || core::equals(Y, other.Y))) ||
|
||||
(core::equals(X, other.X) && core::equals(Y, other.Y) && (Z>other.Z || core::equals(Z, other.Z)));
|
||||
return !(*this < other);
|
||||
}
|
||||
|
||||
//! sort in order X, Y, Z. Difference must be above rounding tolerance.
|
||||
//! sort in order X, Y, Z.
|
||||
bool operator<(const vector3d<T>&other) const
|
||||
{
|
||||
return (X<other.X && !core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && Y<other.Y && !core::equals(Y, other.Y)) ||
|
||||
(core::equals(X, other.X) && core::equals(Y, other.Y) && Z<other.Z && !core::equals(Z, other.Z));
|
||||
return X < other.X || (X == other.X && Y < other.Y) ||
|
||||
(X == other.X && Y == other.Y && Z < other.Z);
|
||||
}
|
||||
|
||||
//! sort in order X, Y, Z. Difference must be above rounding tolerance.
|
||||
//! sort in order X, Y, Z.
|
||||
bool operator>(const vector3d<T>&other) const
|
||||
{
|
||||
return (X>other.X && !core::equals(X, other.X)) ||
|
||||
(core::equals(X, other.X) && Y>other.Y && !core::equals(Y, other.Y)) ||
|
||||
(core::equals(X, other.X) && core::equals(Y, other.Y) && Z>other.Z && !core::equals(Z, other.Z));
|
||||
return X > other.X || (X == other.X && Y > other.Y) ||
|
||||
(X == other.X && Y == other.Y && Z > other.Z);
|
||||
}
|
||||
|
||||
//! use weak float compare
|
||||
bool operator==(const vector3d<T>& other) const
|
||||
{
|
||||
return this->equals(other);
|
||||
return X == other.X && Y == other.Y && Z == other.Z;
|
||||
}
|
||||
|
||||
bool operator!=(const vector3d<T>& other) const
|
||||
{
|
||||
return !this->equals(other);
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
// functions
|
||||
|
||||
//! returns if this vector equals the other one, taking floating point rounding errors into account
|
||||
bool equals(const vector3d<T>& other, const T tolerance = (T)ROUNDING_ERROR_f32 ) const
|
||||
//! Checks if this vector equals the other one.
|
||||
/** Takes floating point rounding errors into account.
|
||||
\param other Vector to compare with.
|
||||
\return True if the two vector are (almost) equal, else false. */
|
||||
bool equals(const vector3d<T>& other) const
|
||||
{
|
||||
return core::equals(X, other.X, tolerance) &&
|
||||
core::equals(Y, other.Y, tolerance) &&
|
||||
core::equals(Z, other.Z, tolerance);
|
||||
return core::equals(X, other.X) && core::equals(Y, other.Y) && core::equals(Z, other.Z);
|
||||
}
|
||||
|
||||
vector3d<T>& set(const T nx, const T ny, const T nz) {X=nx; Y=ny; Z=nz; return *this;}
|
||||
@ -207,7 +200,10 @@ namespace core
|
||||
}
|
||||
|
||||
//! Rotates the vector by a specified number of degrees around the Y axis and the specified center.
|
||||
/** \param degrees Number of degrees to rotate around the Y axis.
|
||||
/** CAREFUL: For historical reasons rotateXZBy uses a right-handed rotation
|
||||
(maybe to make it more similar to the 2D vector rotations which are counterclockwise).
|
||||
To have this work the same way as rest of Irrlicht (nodes, matrices, other rotateBy functions) pass -1*degrees in here.
|
||||
\param degrees Number of degrees to rotate around the Y axis.
|
||||
\param center The center of the rotation. */
|
||||
void rotateXZBy(f64 degrees, const vector3d<T>& center=vector3d<T>())
|
||||
{
|
||||
@ -485,5 +481,4 @@ struct hash<irr::core::vector3d<T> >
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
235
irr-readme.txt
235
irr-readme.txt
@ -1,235 +0,0 @@
|
||||
==========================================================================
|
||||
The Irrlicht Engine SDK version 1.9
|
||||
==========================================================================
|
||||
|
||||
Welcome to the Irrlicht Engine SDK.
|
||||
|
||||
Content of this file:
|
||||
|
||||
1. Directory Structure Overview
|
||||
2. How To Start
|
||||
3. Requirements
|
||||
4. Release Notes
|
||||
5. License
|
||||
6. Contact
|
||||
|
||||
|
||||
==========================================================================
|
||||
1. Directory Structure Overview
|
||||
==========================================================================
|
||||
|
||||
You will find some directories after uncompressing the archive of the
|
||||
SDK. These are:
|
||||
|
||||
\bin The compiled library Irrlicht.DLL and some compiled demo
|
||||
and example applications, just start them to see the
|
||||
Irrlicht Engine in action. Windows only.
|
||||
\doc Documentation of the Irrlicht Engine.
|
||||
\examples Examples and tutorials showing how to use the engine with
|
||||
C++.
|
||||
\include Header files to include when programming with the engine.
|
||||
\lib Libs to link with your programs when using the engine.
|
||||
\media Graphics and sound resources for the demo applications and
|
||||
examples.
|
||||
\source The source code of the Irrlicht Engine. This code is
|
||||
not needed to develop applications with the engine,
|
||||
but it is included to enable recompilation and
|
||||
debugging, if necessary.
|
||||
\tools Useful tools (with sourcecode) for the engine.
|
||||
|
||||
|
||||
|
||||
==========================================================================
|
||||
2. How to start
|
||||
==========================================================================
|
||||
|
||||
To see the engine in action in Windows, just go to the \bin\Win32-VisualStudio
|
||||
directory, and start some applications. There should also be an
|
||||
application named Demo.exe which should show the most
|
||||
interesting features of Irrlicht.
|
||||
|
||||
To start developing own applications and games with the engine take
|
||||
a look at the 01.HelloWorld example in the \examples directory.
|
||||
There is also a .html file with a tutorial which should be
|
||||
easily comprehensible.
|
||||
|
||||
The Irrlicht Engine is a static lib under linux. A precompiled version can be
|
||||
generated from the sources using the Makefile in source/Irrlicht. Run 'make' in
|
||||
that subfolder. After this you should be able to 'make' all
|
||||
example applications in /examples by calling the buildAllExamples script. You
|
||||
can run the examples then from the bin folder.
|
||||
|
||||
It is also possible to use Irrlicht as shared object
|
||||
(libIrrlicht.so.versionNumber). Use the proper makefile target for this by
|
||||
running 'make sharedlib' in the source folder. See the Makefile for details.
|
||||
|
||||
For OSX you can find an XCode project file in source/Irrlicht/MacOSX. This will
|
||||
build the libIrrlicht.a library necessary to create the apps.
|
||||
|
||||
==========================================================================
|
||||
3. Requirements
|
||||
==========================================================================
|
||||
|
||||
You can use one of the following compilers/IDEs to develop applications
|
||||
with Irrlicht or recompile the engine. However, other compilers/IDEs may
|
||||
work as well, we simply didn't test them.
|
||||
|
||||
* gcc 4.x
|
||||
* Visual Studio 2010(10.0)-2013(12.0)
|
||||
* Code::Blocks (& gcc or visual studio toolkit)
|
||||
|
||||
If you ever want to (re)compile the engine yourself (which means you don't
|
||||
want to use the precompiled version) you need the following:
|
||||
|
||||
* Windows:
|
||||
* Needed: PlatformSDK (which usually comes with all IDEs, download
|
||||
it separately for MSVC Express 2005)
|
||||
* Optional: DirectX SDK, for D3D9 support
|
||||
* Optional: DirectX SDK prior to May 2006, for D3D8 support
|
||||
|
||||
* Linux:
|
||||
* Needed: XServer with include files
|
||||
* Optional: OpenGL headers and libraries (libGL.so) for OpenGL support
|
||||
GLX +
|
||||
XF86VidMode [package x11proto-xf86vidmode-dev] or XRandr
|
||||
(X11 support libraries, the latter two for fullscreen mode)
|
||||
|
||||
* OSX:
|
||||
* Needed: XCode and Cocoa framework
|
||||
* Needed: OpenGL headers and libraries
|
||||
|
||||
==========================================================================
|
||||
4. Release Notes
|
||||
==========================================================================
|
||||
|
||||
Informations about changes in this new version of the engine can be
|
||||
found in changes.txt.
|
||||
|
||||
Please note that the textures, 3D models and levels are copyright
|
||||
by their authors and not covered by the Irrlicht engine license.
|
||||
|
||||
==========================================================================
|
||||
5. License
|
||||
==========================================================================
|
||||
|
||||
The license of the Irrlicht Engine is based on the zlib/libpng license.
|
||||
Even though this license does not require you to mention that you are
|
||||
using the Irrlicht Engine in your product, an acknowledgement
|
||||
would be highly appreciated.
|
||||
|
||||
Please note that the Irrlicht Engine is based in part on the work of
|
||||
the Independent JPEG Group, the zlib, and libpng. This means that if you use
|
||||
the Irrlicht Engine in your product, you must acknowledge somewhere
|
||||
in your documentation that you've used the IJG code and libpng. It would
|
||||
also be nice to mention that you use the Irrlicht Engine and the zlib.
|
||||
See the README files in the jpeglib and the zlib for
|
||||
further informations.
|
||||
|
||||
|
||||
The Irrlicht Engine License
|
||||
===========================
|
||||
|
||||
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 acknowledgement in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be clearly 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.
|
||||
|
||||
|
||||
==========================================================================
|
||||
6. Contact
|
||||
==========================================================================
|
||||
|
||||
If you have problems, questions or suggestions, please visit the
|
||||
official homepage of the Irrlicht Engine:
|
||||
|
||||
http://irrlicht.sourceforge.net
|
||||
|
||||
You will find forums, bugtrackers, patches, tutorials, and other stuff
|
||||
which will help you out.
|
||||
|
||||
If want to contact the team of the engine, please send an email to
|
||||
Nikolaus Gebhardt:
|
||||
|
||||
irrlicht@users.sourceforge.net
|
||||
|
||||
Please also not that parts of the engine have been written or contributed
|
||||
by other people. Especially: (There are probably more people, sorry if I forgot one.
|
||||
See http://irrlicht.sourceforge.net/author.html for more informations)
|
||||
|
||||
Christian Stehno (hybrid) Contribution Coordinator/Developer
|
||||
Michael Zeilfelder (cutealien) Developer
|
||||
Patryk Nadrowski (Nadro) Developer
|
||||
Yoran Bosman (Yoran) Webserver administrator
|
||||
Gareth Davidson (bitplane) Developer/ Forum admin
|
||||
Thomas Alten (burningwater) Wrote the burningsvideo software rasterizer
|
||||
Luke P. Hoschke (luke) Wrote the b3d loader, the new animation system, VBOs and other things
|
||||
Colin MacDonald (rogerborg) All hands person
|
||||
Ahmed Hilali (blindside) The shader and advanced effects man
|
||||
Dean Wadsworth (varmint) OSX port maintainer and game developer
|
||||
Alvaro F. Celis (afecelis) Lots of work in the community, for example video tutorials about Irrlicht, forum admin
|
||||
John Goewert (Saigumi) Wrote some tutorials for the Irrlicht Engine and doing admin stuff
|
||||
Jam Takes care of moderating the forums and keeps them clean from those evil spammers.
|
||||
|
||||
Many others (this list hasn't been updated in a while, but they are often mentioned in changes.txt)
|
||||
Etienne Petitjean wrote the MacPort of the engine
|
||||
Mark Jeacocke Wrote lots of helpful comments and ideas in the forums and per email.
|
||||
Julio Gorg<72> Created the 'Unofficial DirectX 9.0 Driver for the Irrlicht Engine'
|
||||
Andy Spurgeon Wrote the Dev-Cpp tutorial.
|
||||
Andr<64> Simon Wrote the Codewarrior tutorial.
|
||||
KnightToFlight Created the unoffical terrain renderer addon for the Irrlicht Engine.
|
||||
Jon Pry Wrote the code to load compressed TGA files.
|
||||
Matthew Couch Wrote the tokamak integration tutorial.
|
||||
Max Winkel Wrote the splitscreen tutorial.
|
||||
Gorgon Zola Wrote the ODE integration tutorial.
|
||||
Dean P. Macri Sent in code for curved surfaces and PCX Loading.
|
||||
Sirshane Made several bug fixes, sent in code for making the mouse cursor invisible in Linux.
|
||||
Matthias Gall Sent in code for a spline scene node animator and reported lots of bugs.
|
||||
Mario Gruber Suggested triangle fan drawing and sent in code for this.
|
||||
Ariaci Spotted out a bug in the ATI driver.
|
||||
Dr Andros C Bragianos Improved texture mapping in cube scene node.
|
||||
Philipp Dortmann Sent in code for stencil buffer support for OpenGL.
|
||||
Jerome Nichols Created the Irrlicht/Ruby interface located at irr.rubyforge.org
|
||||
Vash TheStampede Sent code for missing Draw2DLine() implementations
|
||||
MattyBoy XBOX support suggestions
|
||||
Oliver Klems createImageFromData() method suggestion/implementation
|
||||
Jox really, really a lot of bug fixes, and the LMTS file loader
|
||||
Zola Quaternion method additions
|
||||
Tomasz Nowakowski various bug fixes
|
||||
Nicholas Bray stencil shadow bug fixes with OpenGL
|
||||
REAPER mouswheel events for scrollbar
|
||||
Calimero various bug fixes like vector2d operators
|
||||
Haddock bugfix in the linked list
|
||||
G.o.D XML parser fix
|
||||
Erik Zilli Translated some of the tutorials from my stuttering english into real english. :)
|
||||
Martin Piskernig Linux bugfixing and testing
|
||||
Soconne Wrote the original terrain renderer were Irrlichts terrain renderer of Irrlicht is based on it.
|
||||
Spintz GeoMipMap scene node, terrain renderer of Irrlicht is based on it.
|
||||
Murphy McCauley OCT file loader, MIM tools
|
||||
Saurav Mohapatra IrrCSM, and lots of addons, suggestions and bug reports
|
||||
Zhuck Dimitry My3D Tools
|
||||
Terry Welsh Allowed me to use the textures of his 'Parallax Mapping with Offset Limiting' paper for the parallax demo of Irrlicht
|
||||
rt Wrote the original .png loader for Irrlicht
|
||||
Salvatore Russo Wrote the original .dmf loader for Irrlicht
|
||||
Vox Various bug reports and fixes
|
||||
atomice Contributed code for a ms3d loader enhancement
|
||||
William Finlayson OpenGL RTT, GLSL support and the reflection 2 layer material for OpenGL.
|
||||
Delight Various code contributions for Irrlicht.NET (particle system, basic shader support and more)
|
||||
Michael Zoech Improved GLSL support
|
||||
Jean-loup Gailly, Mark Adler Created the zlib and libpng
|
||||
Guy Eric Schalnat, Andreas Dilger, Glenn Randers-Pehrson and others Created libpng
|
||||
The Independent JPEG Group Created JPEG lib
|
||||
Dr Brian Gladman AES Created aesGladman
|
||||
|
@ -1,2 +0,0 @@
|
||||
You might have to recompile the engine to get library files in here.
|
||||
Check the readme.txt in the corresponding bin folders for more information.
|
@ -1,2 +0,0 @@
|
||||
You might have to recompile the engine to get library files in here.
|
||||
Check the readme.txt in the corresponding bin folders for more information.
|
@ -1,2 +0,0 @@
|
||||
You might have to recompile the engine to get library files in here.
|
||||
Check the readme.txt in the corresponding bin folders for more information.
|
@ -1,2 +0,0 @@
|
||||
You might have to recompile the engine to get library files in here.
|
||||
Check the readme.txt in the corresponding bin folders for more information.
|
@ -1,72 +0,0 @@
|
||||
precision mediump float;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform float uModulate;
|
||||
uniform int uTextureUsage0;
|
||||
uniform int uTextureUsage1;
|
||||
uniform sampler2D uTextureUnit0;
|
||||
uniform sampler2D uTextureUnit1;
|
||||
uniform int uFogEnable;
|
||||
uniform int uFogType;
|
||||
uniform vec4 uFogColor;
|
||||
uniform float uFogStart;
|
||||
uniform float uFogEnd;
|
||||
uniform float uFogDensity;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord0;
|
||||
varying vec2 vTextureCoord1;
|
||||
varying vec4 vVertexColor;
|
||||
varying vec4 vSpecularColor;
|
||||
varying float vFogCoord;
|
||||
|
||||
float computeFog()
|
||||
{
|
||||
const float LOG2 = 1.442695;
|
||||
float FogFactor = 0.0;
|
||||
|
||||
if (uFogType == 0) // Exp
|
||||
{
|
||||
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
|
||||
}
|
||||
else if (uFogType == 1) // Linear
|
||||
{
|
||||
float Scale = 1.0 / (uFogEnd - uFogStart);
|
||||
FogFactor = (uFogEnd - vFogCoord) * Scale;
|
||||
}
|
||||
else if (uFogType == 2) // Exp2
|
||||
{
|
||||
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
|
||||
}
|
||||
|
||||
FogFactor = clamp(FogFactor, 0.0, 1.0);
|
||||
|
||||
return FogFactor;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
if (bool(uTextureUsage0))
|
||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
||||
|
||||
if (bool(uTextureUsage1))
|
||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
||||
|
||||
vec4 FinalColor = (Color0 * Color1 * uModulate) * vVertexColor;
|
||||
FinalColor += vSpecularColor;
|
||||
|
||||
if (bool(uFogEnable))
|
||||
{
|
||||
float FogFactor = computeFog();
|
||||
vec4 FogColor = uFogColor;
|
||||
FogColor.a = 1.0;
|
||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
||||
}
|
||||
|
||||
gl_FragColor = FinalColor;
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
/* Attributes */
|
||||
|
||||
attribute vec3 inVertexPosition;
|
||||
attribute vec3 inVertexNormal;
|
||||
attribute vec4 inVertexColor;
|
||||
attribute vec2 inTexCoord0;
|
||||
attribute vec2 inTexCoord1;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform mat4 uWVPMatrix;
|
||||
uniform mat4 uWVMatrix;
|
||||
uniform mat4 uNMatrix;
|
||||
uniform mat4 uTMatrix0;
|
||||
|
||||
uniform vec4 uGlobalAmbient;
|
||||
uniform vec4 uMaterialAmbient;
|
||||
uniform vec4 uMaterialDiffuse;
|
||||
uniform vec4 uMaterialEmissive;
|
||||
uniform vec4 uMaterialSpecular;
|
||||
uniform float uMaterialShininess;
|
||||
|
||||
uniform float uThickness;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord0;
|
||||
varying vec2 vTextureCoord1;
|
||||
varying vec4 vVertexColor;
|
||||
varying vec4 vSpecularColor;
|
||||
varying float vFogCoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||
gl_PointSize = uThickness;
|
||||
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
|
||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
||||
|
||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||
vec3 P = normalize(Position);
|
||||
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
||||
vec3 R = reflect(P, N);
|
||||
|
||||
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
|
||||
vTextureCoord1 = vec2(R.x/V + 0.5, R.y/V + 0.5);
|
||||
|
||||
vVertexColor = inVertexColor.bgra;
|
||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
vFogCoord = length(Position);
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
precision mediump float;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform int uTextureUsage0;
|
||||
uniform int uTextureUsage1;
|
||||
uniform sampler2D uTextureUnit0;
|
||||
uniform sampler2D uTextureUnit1;
|
||||
uniform int uFogEnable;
|
||||
uniform int uFogType;
|
||||
uniform vec4 uFogColor;
|
||||
uniform float uFogStart;
|
||||
uniform float uFogEnd;
|
||||
uniform float uFogDensity;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord0;
|
||||
varying vec2 vTextureCoord1;
|
||||
varying vec4 vVertexColor;
|
||||
varying vec4 vSpecularColor;
|
||||
varying float vFogCoord;
|
||||
|
||||
float computeFog()
|
||||
{
|
||||
const float LOG2 = 1.442695;
|
||||
float FogFactor = 0.0;
|
||||
|
||||
if (uFogType == 0) // Exp
|
||||
{
|
||||
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
|
||||
}
|
||||
else if (uFogType == 1) // Linear
|
||||
{
|
||||
float Scale = 1.0 / (uFogEnd - uFogStart);
|
||||
FogFactor = (uFogEnd - vFogCoord) * Scale;
|
||||
}
|
||||
else if (uFogType == 2) // Exp2
|
||||
{
|
||||
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
|
||||
}
|
||||
|
||||
FogFactor = clamp(FogFactor, 0.0, 1.0);
|
||||
|
||||
return FogFactor;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
if (bool(uTextureUsage0))
|
||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
||||
|
||||
if (bool(uTextureUsage1))
|
||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
||||
|
||||
vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor;
|
||||
FinalColor += vSpecularColor;
|
||||
|
||||
if (bool(uFogEnable))
|
||||
{
|
||||
float FogFactor = computeFog();
|
||||
vec4 FogColor = uFogColor;
|
||||
FogColor.a = 1.0;
|
||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
||||
}
|
||||
|
||||
gl_FragColor = FinalColor;
|
||||
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
/* Attributes */
|
||||
|
||||
attribute vec3 inVertexPosition;
|
||||
attribute vec3 inVertexNormal;
|
||||
attribute vec4 inVertexColor;
|
||||
attribute vec2 inTexCoord0;
|
||||
attribute vec2 inTexCoord1;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform mat4 uWVPMatrix;
|
||||
uniform mat4 uWVMatrix;
|
||||
uniform mat4 uNMatrix;
|
||||
|
||||
uniform vec4 uGlobalAmbient;
|
||||
uniform vec4 uMaterialAmbient;
|
||||
uniform vec4 uMaterialDiffuse;
|
||||
uniform vec4 uMaterialEmissive;
|
||||
uniform vec4 uMaterialSpecular;
|
||||
uniform float uMaterialShininess;
|
||||
|
||||
uniform float uThickness;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord0;
|
||||
varying vec4 vVertexColor;
|
||||
varying vec4 vSpecularColor;
|
||||
varying float vFogCoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||
gl_PointSize = uThickness;
|
||||
|
||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||
vec3 P = normalize(Position);
|
||||
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
||||
vec3 R = reflect(P, N);
|
||||
|
||||
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
|
||||
vTextureCoord0 = vec2(R.x/V + 0.5, R.y/V + 0.5);
|
||||
|
||||
vVertexColor = inVertexColor.bgra;
|
||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
vFogCoord = length(Position);
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
#version 100
|
||||
|
||||
precision mediump float;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform int uTextureUsage0;
|
||||
uniform int uTextureUsage1;
|
||||
uniform sampler2D uTextureUnit0;
|
||||
uniform sampler2D uTextureUnit1;
|
||||
uniform int uBlendType;
|
||||
uniform int uFogEnable;
|
||||
uniform int uFogType;
|
||||
uniform vec4 uFogColor;
|
||||
@ -16,9 +17,7 @@ uniform float uFogDensity;
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord0;
|
||||
varying vec2 vTextureCoord1;
|
||||
varying vec4 vVertexColor;
|
||||
varying vec4 vSpecularColor;
|
||||
varying float vFogCoord;
|
||||
|
||||
float computeFog()
|
||||
@ -47,16 +46,22 @@ float computeFog()
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
vec4 Color0 = vVertexColor;
|
||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
if (bool(uTextureUsage0))
|
||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
||||
Color1 = texture2D(uTextureUnit0, vTextureCoord0);
|
||||
|
||||
if (bool(uTextureUsage1))
|
||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
||||
vec4 FinalColor = Color0 * Color1;
|
||||
|
||||
vec4 FinalColor = (Color0 * Color1) * vVertexColor + vSpecularColor;
|
||||
if (uBlendType == 1)
|
||||
{
|
||||
FinalColor.w = Color0.w;
|
||||
}
|
||||
else if (uBlendType == 2)
|
||||
{
|
||||
FinalColor.w = Color1.w;
|
||||
}
|
||||
|
||||
if (bool(uFogEnable))
|
||||
{
|
23
media/Shaders/Renderer2D.fsh
Normal file
23
media/Shaders/Renderer2D.fsh
Normal file
@ -0,0 +1,23 @@
|
||||
#version 100
|
||||
|
||||
precision mediump float;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform int uTextureUsage;
|
||||
uniform sampler2D uTextureUnit;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord;
|
||||
varying vec4 vVertexColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 Color = vVertexColor;
|
||||
|
||||
if (bool(uTextureUsage))
|
||||
Color *= texture2D(uTextureUnit, vTextureCoord);
|
||||
|
||||
gl_FragColor = Color;
|
||||
}
|
24
media/Shaders/Renderer2D.vsh
Normal file
24
media/Shaders/Renderer2D.vsh
Normal file
@ -0,0 +1,24 @@
|
||||
#version 100
|
||||
|
||||
/* Attributes */
|
||||
|
||||
attribute vec4 inVertexPosition;
|
||||
attribute vec4 inVertexColor;
|
||||
attribute vec2 inTexCoord0;
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
uniform float uThickness;
|
||||
|
||||
/* Varyings */
|
||||
|
||||
varying vec2 vTextureCoord;
|
||||
varying vec4 vVertexColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = inVertexPosition;
|
||||
gl_PointSize = uThickness;
|
||||
vTextureCoord = inTexCoord0;
|
||||
vVertexColor = inVertexColor.bgra;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user