mirror of
https://github.com/minetest/irrlicht.git
synced 2024-09-30 08:20:26 +02:00
Compare commits
No commits in common. "master" and "1.9.0mt13" have entirely different histories.
162
.github/workflows/build.yml
vendored
162
.github/workflows/build.yml
vendored
|
@ -8,46 +8,47 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
linux-gl:
|
linux-gl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DUSE_SDL2=OFF
|
cmake .
|
||||||
make VERBOSE=1 -j2
|
make VERBOSE=1 -j2
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: |
|
|
||||||
ctest --output-on-failure
|
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
run: |
|
run: |
|
||||||
make DESTDIR=$PWD/_install install
|
make DESTDIR=$PWD/_install install
|
||||||
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-linux
|
name: irrlicht-linux
|
||||||
path: ./irrlicht-linux.tar.gz
|
path: ./irrlicht-linux.tar.gz
|
||||||
|
|
||||||
linux-gles:
|
linux-gles:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
cmake . -DBUILD_EXAMPLES=1 -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
|
@ -61,17 +62,20 @@ jobs:
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
linux-sdl:
|
linux-sdl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
|
@ -80,14 +84,16 @@ jobs:
|
||||||
./AutomatedTest null
|
./AutomatedTest null
|
||||||
|
|
||||||
linux-sdl-gl3:
|
linux-sdl-gl3:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
@ -105,13 +111,16 @@ jobs:
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
||||||
|
|
||||||
linux-sdl-gles2:
|
linux-sdl-gles2:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
@ -130,7 +139,7 @@ jobs:
|
||||||
|
|
||||||
mingw:
|
mingw:
|
||||||
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
@ -140,21 +149,22 @@ jobs:
|
||||||
- {variant: win32, arch: i686, extras: "-sdl"}
|
- {variant: win32, arch: i686, extras: "-sdl"}
|
||||||
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install compiler
|
- name: Install compiler
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||||
./scripts/ci-get-mingw.sh
|
wget http://minetest.kitsunemimi.pw/mingw-w64-${{matrix.config.arch}}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
||||||
|
sudo tar -xaf mingw.tar.xz -C /usr
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
./scripts/ci-build-mingw.sh package
|
./scripts/ci-build-mingw.sh package
|
||||||
env:
|
env:
|
||||||
CC: ${{matrix.config.arch}}-w64-mingw32-clang
|
CC: ${{matrix.config.arch}}-w64-mingw32-gcc
|
||||||
CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
|
CXX: ${{matrix.config.arch}}-w64-mingw32-g++
|
||||||
extras: ${{matrix.config.extras}}
|
extras: ${{matrix.config.extras}}
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
||||||
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
||||||
|
@ -162,14 +172,11 @@ jobs:
|
||||||
macos:
|
macos:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
brew update --auto-update
|
brew update
|
||||||
brew install cmake libpng jpeg
|
brew install cmake libpng jpeg
|
||||||
env:
|
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
@ -180,30 +187,13 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
./bin/OSX/AutomatedTest null
|
./bin/OSX/AutomatedTest null
|
||||||
|
|
||||||
macos-sdl:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
brew update --auto-update
|
|
||||||
brew install cmake libpng jpeg sdl2
|
|
||||||
env:
|
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1
|
|
||||||
make -j3
|
|
||||||
|
|
||||||
msvc:
|
msvc:
|
||||||
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
||||||
runs-on: windows-2019
|
runs-on: windows-2019
|
||||||
env:
|
env:
|
||||||
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
||||||
# 2023.10.19
|
# 2022.05.10
|
||||||
vcpkg_packages: zlib libpng libjpeg-turbo
|
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
@ -220,7 +210,6 @@ jobs:
|
||||||
-
|
-
|
||||||
use: FALSE
|
use: FALSE
|
||||||
label: '(no SDL)'
|
label: '(no SDL)'
|
||||||
vcpkg_packages: opengl-registry
|
|
||||||
-
|
-
|
||||||
use: TRUE
|
use: TRUE
|
||||||
label: '(with SDL)'
|
label: '(with SDL)'
|
||||||
|
@ -228,7 +217,7 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Restore from cache and run vcpkg
|
- name: Restore from cache and run vcpkg
|
||||||
uses: lukka/run-vcpkg@v7
|
uses: lukka/run-vcpkg@v7
|
||||||
|
@ -261,50 +250,7 @@ jobs:
|
||||||
run: move include artifact/
|
run: move include artifact/
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
|
name: msvc-${{ matrix.config.arch }}
|
||||||
path: artifact/
|
path: artifact/
|
||||||
|
|
||||||
android:
|
|
||||||
name: Android ${{ matrix.arch }}
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
ndk_version: "r25c"
|
|
||||||
ANDROID_NDK: ${{ github.workspace }}/android-ndk
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo rm /var/lib/man-db/auto-update
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake
|
|
||||||
|
|
||||||
- name: Cache NDK
|
|
||||||
id: cache-ndk
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
key: android-ndk-${{ env.ndk_version }}-linux
|
|
||||||
path: ${{ env.ANDROID_NDK }}
|
|
||||||
|
|
||||||
- name: Install NDK
|
|
||||||
run: |
|
|
||||||
wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
|
|
||||||
unzip -q "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
rm "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
|
|
||||||
if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ./scripts/ci-build-android.sh ${{ matrix.arch }}
|
|
||||||
|
|
||||||
#- name: Upload Artifact
|
|
||||||
# uses: actions/upload-artifact@v4
|
|
||||||
# with:
|
|
||||||
# name: irrlicht-android-${{ matrix.arch }}
|
|
||||||
# path: ${{ runner.temp }}/pkg/${{ matrix.arch }}
|
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,7 +5,6 @@ install_manifest.txt
|
||||||
IrrlichtMtConfig.cmake
|
IrrlichtMtConfig.cmake
|
||||||
IrrlichtMtConfigVersion.cmake
|
IrrlichtMtConfigVersion.cmake
|
||||||
IrrlichtMtTargets.cmake
|
IrrlichtMtTargets.cmake
|
||||||
CTestTestfile.cmake
|
|
||||||
Makefile
|
Makefile
|
||||||
libs/*
|
libs/*
|
||||||
*.so*
|
*.so*
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
cmake_minimum_required(VERSION 3.12)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
set(IRRLICHTMT_REVISION 15)
|
# >=3.9 enables IPO; >=3.11 prefers GLVND
|
||||||
|
if(${CMAKE_VERSION} VERSION_LESS 3.11)
|
||||||
|
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||||
|
else()
|
||||||
|
cmake_policy(VERSION 3.11)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(IRRLICHTMT_REVISION 13)
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
|
@ -9,9 +16,6 @@ project(Irrlicht
|
||||||
|
|
||||||
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
|
@ -34,9 +38,7 @@ if(NOT CMAKE_BUILD_TYPE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
enable_testing()
|
add_subdirectory(source/Irrlicht)
|
||||||
add_subdirectory(src)
|
|
||||||
add_subdirectory(test)
|
|
||||||
|
|
||||||
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
||||||
if(BUILD_EXAMPLES)
|
if(BUILD_EXAMPLES)
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
@PACKAGE_INIT@
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
include(CMakeFindDependencyMacro)
|
|
||||||
|
|
||||||
if(NOT TARGET IrrlichtMt::IrrlichtMt)
|
if(NOT TARGET IrrlichtMt::IrrlichtMt)
|
||||||
# private dependency only explicitly needed with static libs
|
|
||||||
if(@USE_SDL2@ AND NOT @BUILD_SHARED_LIBS@)
|
|
||||||
find_dependency(SDL2)
|
|
||||||
endif()
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
|
||||||
endif()
|
endif()
|
||||||
|
|
13
README.md
13
README.md
|
@ -1,14 +1,6 @@
|
||||||
IrrlichtMt version 1.9
|
IrrlichtMt version 1.9
|
||||||
======================
|
======================
|
||||||
|
|
||||||
Notice
|
|
||||||
------
|
|
||||||
|
|
||||||
IrrlichtMt has been moved into the [main Minetest repository](https://github.com/minetest) during Minetest 5.9 development. This repository is an archive useful for building older versions of Minetest.
|
|
||||||
|
|
||||||
About
|
|
||||||
-----
|
|
||||||
|
|
||||||
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
|
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
|
||||||
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
|
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
|
||||||
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
|
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
|
||||||
|
@ -23,7 +15,6 @@ The following libraries are required to be installed:
|
||||||
* OpenGL
|
* OpenGL
|
||||||
* or on mobile: OpenGL ES (can be optionally enabled on desktop too)
|
* or on mobile: OpenGL ES (can be optionally enabled on desktop too)
|
||||||
* on Unix: X11
|
* on Unix: X11
|
||||||
* SDL2 (see below)
|
|
||||||
|
|
||||||
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
|
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
|
||||||
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
|
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
|
||||||
|
@ -32,7 +23,7 @@ Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the
|
||||||
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
|
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
|
||||||
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
|
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
|
||||||
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
|
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
|
||||||
* `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code
|
* `USE_SDL2` (default: `OFF`) - Use SDL2 instead of native platform device
|
||||||
|
|
||||||
e.g. on a Linux system you might want to build for local use like this:
|
e.g. on a Linux system you might want to build for local use like this:
|
||||||
|
|
||||||
|
@ -49,7 +40,7 @@ It is highly recommended to use vcpkg as package manager.
|
||||||
|
|
||||||
After you successfully built vcpkg you can easily install the required libraries:
|
After you successfully built vcpkg you can easily install the required libraries:
|
||||||
|
|
||||||
vcpkg install zlib libjpeg-turbo libpng sdl2 --triplet x64-windows
|
vcpkg install zlib libjpeg-turbo libpng opengl-registry --triplet x64-windows
|
||||||
|
|
||||||
Run the following script in PowerShell:
|
Run the following script in PowerShell:
|
||||||
|
|
||||||
|
|
|
@ -28,14 +28,14 @@ static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||||
|
|
||||||
static inline void check(bool ok, const char *msg)
|
static inline void check(bool ok, const char *msg)
|
||||||
{
|
{
|
||||||
if (!ok) {
|
if (!ok)
|
||||||
|
{
|
||||||
test_fail++;
|
test_fail++;
|
||||||
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
|
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_unit_tests()
|
void run_unit_tests() {
|
||||||
{
|
|
||||||
std::cout << "Running unit tests:" << std::endl;
|
std::cout << "Running unit tests:" << std::endl;
|
||||||
try {
|
try {
|
||||||
test_irr_array();
|
test_irr_array();
|
||||||
|
@ -93,11 +93,13 @@ int main(int argc, char *argv[])
|
||||||
check(mesh, "mesh loading");
|
check(mesh, "mesh loading");
|
||||||
if (mesh_file)
|
if (mesh_file)
|
||||||
mesh_file->drop();
|
mesh_file->drop();
|
||||||
if (mesh) {
|
if (mesh)
|
||||||
|
{
|
||||||
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
||||||
check(tex, "texture loading");
|
check(tex, "texture loading");
|
||||||
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
||||||
if (node) {
|
if (node)
|
||||||
|
{
|
||||||
node->forEachMaterial([tex] (video::SMaterial &mat) {
|
node->forEachMaterial([tex] (video::SMaterial &mat) {
|
||||||
mat.Lighting = false;
|
mat.Lighting = false;
|
||||||
mat.setTexture(0, tex);
|
mat.setTexture(0, tex);
|
||||||
|
@ -113,20 +115,25 @@ int main(int argc, char *argv[])
|
||||||
SEvent event;
|
SEvent event;
|
||||||
device->getTimer()->start();
|
device->getTimer()->start();
|
||||||
|
|
||||||
while (device->run()) {
|
while (device->run())
|
||||||
if (device->getTimer()->getTime() >= 1000) {
|
{
|
||||||
|
if (device->getTimer()->getTime() >= 1000)
|
||||||
|
{
|
||||||
device->getTimer()->setTime(0);
|
device->getTimer()->setTime(0);
|
||||||
++n;
|
++n;
|
||||||
if (n == 1) { // Tooltip display
|
if (n == 1) // Tooltip display
|
||||||
|
{
|
||||||
bzero(&event, sizeof(SEvent));
|
bzero(&event, sizeof(SEvent));
|
||||||
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||||
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||||
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
||||||
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
||||||
device->postEventFromUser(event);
|
device->postEventFromUser(event);
|
||||||
} else if (n == 2) // Text input focus
|
}
|
||||||
|
else if (n == 2) // Text input focus
|
||||||
guienv->setFocus(editbox);
|
guienv->setFocus(editbox);
|
||||||
else if (n == 3) { // Keypress for Text input
|
else if (n == 3) // Keypress for Text input
|
||||||
|
{
|
||||||
bzero(&event, sizeof(SEvent));
|
bzero(&event, sizeof(SEvent));
|
||||||
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
||||||
event.KeyInput.Char = L'a';
|
event.KeyInput.Char = L'a';
|
||||||
|
@ -135,7 +142,8 @@ int main(int argc, char *argv[])
|
||||||
device->postEventFromUser(event);
|
device->postEventFromUser(event);
|
||||||
event.KeyInput.PressedDown = false;
|
event.KeyInput.PressedDown = false;
|
||||||
device->postEventFromUser(event);
|
device->postEventFromUser(event);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
device->closeDevice();
|
device->closeDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,7 @@
|
||||||
using namespace irr;
|
using namespace irr;
|
||||||
using core::array;
|
using core::array;
|
||||||
|
|
||||||
static void test_basics()
|
static void test_basics() {
|
||||||
{
|
|
||||||
array<int> v;
|
array<int> v;
|
||||||
v.push_back(1); // 1
|
v.push_back(1); // 1
|
||||||
v.push_front(2); // 2, 1
|
v.push_front(2); // 2, 1
|
||||||
|
@ -58,8 +57,7 @@ static void test_basics()
|
||||||
UASSERTEQ(v.size(), 2);
|
UASSERTEQ(v.size(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_linear_searches()
|
static void test_linear_searches() {
|
||||||
{
|
|
||||||
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
|
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
|
||||||
array<int> arr;
|
array<int> arr;
|
||||||
for (int i = 0; i <= 100; i++)
|
for (int i = 0; i <= 100; i++)
|
||||||
|
@ -77,8 +75,7 @@ static void test_linear_searches()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_binary_searches()
|
static void test_binary_searches() {
|
||||||
{
|
|
||||||
const auto& values = { 3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15 };
|
const auto& values = { 3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15 };
|
||||||
array<int> arr;
|
array<int> arr;
|
||||||
for (int value : values) {
|
for (int value : values) {
|
||||||
|
|
|
@ -3,13 +3,11 @@
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
class TestFailedException : public std::exception
|
class TestFailedException : public std::exception {
|
||||||
{
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Asserts the comparison specified by CMP is true, or fails the current unit test
|
// Asserts the comparison specified by CMP is true, or fails the current unit test
|
||||||
#define UASSERTCMP(CMP, actual, expected) \
|
#define UASSERTCMP(CMP, actual, expected) do { \
|
||||||
do { \
|
|
||||||
const auto &a = (actual); \
|
const auto &a = (actual); \
|
||||||
const auto &e = (expected); \
|
const auto &e = (expected); \
|
||||||
if (!CMP(a, e)) { \
|
if (!CMP(a, e)) { \
|
||||||
|
@ -17,8 +15,7 @@ class TestFailedException : public std::exception
|
||||||
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
|
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
|
||||||
<< #expected << std::endl \
|
<< #expected << std::endl \
|
||||||
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
|
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
|
||||||
<< " actual: " << a << std::endl \
|
<< " actual: " << a << std::endl << " expected: " \
|
||||||
<< " expected: " \
|
|
||||||
<< e << std::endl; \
|
<< e << std::endl; \
|
||||||
throw TestFailedException(); \
|
throw TestFailedException(); \
|
||||||
} \
|
} \
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
set(IRREXAMPLES
|
set(IRREXAMPLES
|
||||||
# removed
|
# removed
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __T_MESH_BUFFER_H_INCLUDED__
|
||||||
|
#define __T_MESH_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "IMeshBuffer.h"
|
#include "IMeshBuffer.h"
|
||||||
|
@ -17,14 +18,18 @@ class CMeshBuffer : public IMeshBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Default constructor for empty meshbuffer
|
//! Default constructor for empty meshbuffer
|
||||||
CMeshBuffer() :
|
CMeshBuffer()
|
||||||
ChangedID_Vertex(1), ChangedID_Index(1), MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), HWBuffer(NULL), PrimitiveType(EPT_TRIANGLES)
|
: ChangedID_Vertex(1), ChangedID_Index(1)
|
||||||
|
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
|
||||||
|
, HWBuffer(NULL)
|
||||||
|
, PrimitiveType(EPT_TRIANGLES)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("CMeshBuffer");
|
setDebugName("CMeshBuffer");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get material of this meshbuffer
|
//! Get material of this meshbuffer
|
||||||
/** \return Material of this buffer */
|
/** \return Material of this buffer */
|
||||||
const video::SMaterial& getMaterial() const override
|
const video::SMaterial& getMaterial() const override
|
||||||
|
@ -32,6 +37,7 @@ public:
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get material of this meshbuffer
|
//! Get material of this meshbuffer
|
||||||
/** \return Material of this buffer */
|
/** \return Material of this buffer */
|
||||||
video::SMaterial& getMaterial() override
|
video::SMaterial& getMaterial() override
|
||||||
|
@ -39,6 +45,7 @@ public:
|
||||||
return Material;
|
return Material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
const void* getVertices() const override
|
const void* getVertices() const override
|
||||||
|
@ -46,6 +53,7 @@ public:
|
||||||
return Vertices.const_pointer();
|
return Vertices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to vertices
|
//! Get pointer to vertices
|
||||||
/** \return Pointer to vertices. */
|
/** \return Pointer to vertices. */
|
||||||
void* getVertices() override
|
void* getVertices() override
|
||||||
|
@ -53,6 +61,7 @@ public:
|
||||||
return Vertices.pointer();
|
return Vertices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get number of vertices
|
//! Get number of vertices
|
||||||
/** \return Number of vertices. */
|
/** \return Number of vertices. */
|
||||||
u32 getVertexCount() const override
|
u32 getVertexCount() const override
|
||||||
|
@ -74,6 +83,7 @@ public:
|
||||||
return Indices.const_pointer();
|
return Indices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
u16* getIndices() override
|
u16* getIndices() override
|
||||||
|
@ -81,6 +91,7 @@ public:
|
||||||
return Indices.pointer();
|
return Indices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get number of indices
|
//! Get number of indices
|
||||||
/** \return Number of indices. */
|
/** \return Number of indices. */
|
||||||
u32 getIndexCount() const override
|
u32 getIndexCount() const override
|
||||||
|
@ -88,6 +99,7 @@ public:
|
||||||
return Indices.size();
|
return Indices.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get the axis aligned bounding box
|
//! Get the axis aligned bounding box
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
const core::aabbox3d<f32>& getBoundingBox() const override
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
|
@ -95,6 +107,7 @@ public:
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Set the axis aligned bounding box
|
//! Set the axis aligned bounding box
|
||||||
/** \param box New axis aligned bounding box for this buffer. */
|
/** \param box New axis aligned bounding box for this buffer. */
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
|
@ -103,18 +116,23 @@ public:
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Recalculate the bounding box.
|
//! Recalculate the bounding box.
|
||||||
/** should be called if the mesh changed. */
|
/** should be called if the mesh changed. */
|
||||||
void recalculateBoundingBox() override
|
void recalculateBoundingBox() override
|
||||||
{
|
{
|
||||||
if (!Vertices.empty()) {
|
if (!Vertices.empty())
|
||||||
|
{
|
||||||
BoundingBox.reset(Vertices[0].Pos);
|
BoundingBox.reset(Vertices[0].Pos);
|
||||||
const irr::u32 vsize = Vertices.size();
|
const irr::u32 vsize = Vertices.size();
|
||||||
for (u32 i=1; i<vsize; ++i)
|
for (u32 i=1; i<vsize; ++i)
|
||||||
BoundingBox.addInternalPoint(Vertices[i].Pos);
|
BoundingBox.addInternalPoint(Vertices[i].Pos);
|
||||||
} else
|
|
||||||
BoundingBox.reset(0, 0, 0);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
BoundingBox.reset(0,0,0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get type of vertex data stored in this buffer.
|
//! Get type of vertex data stored in this buffer.
|
||||||
/** \return Type of vertex data. */
|
/** \return Type of vertex data. */
|
||||||
|
@ -159,6 +177,7 @@ public:
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Append the vertices and indices to the current buffer
|
//! Append the vertices and indices to the current buffer
|
||||||
/** Only works for compatible types, i.e. either the same type
|
/** Only works for compatible types, i.e. either the same type
|
||||||
or the main buffer is of standard type. Otherwise, behavior is
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
|
@ -173,17 +192,51 @@ public:
|
||||||
u32 i;
|
u32 i;
|
||||||
|
|
||||||
Vertices.reallocate(vertexCount+numVertices);
|
Vertices.reallocate(vertexCount+numVertices);
|
||||||
for (i = 0; i < numVertices; ++i) {
|
for (i=0; i<numVertices; ++i)
|
||||||
|
{
|
||||||
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
||||||
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
|
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
Indices.reallocate(getIndexCount()+numIndices);
|
Indices.reallocate(getIndexCount()+numIndices);
|
||||||
for (i = 0; i < numIndices; ++i) {
|
for (i=0; i<numIndices; ++i)
|
||||||
|
{
|
||||||
Indices.push_back(indices[i]+vertexCount);
|
Indices.push_back(indices[i]+vertexCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Append the meshbuffer to the current buffer
|
||||||
|
/** Only works for compatible types, i.e. either the same type
|
||||||
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
|
undefined.
|
||||||
|
\param other Meshbuffer to be appended to this one.
|
||||||
|
*/
|
||||||
|
void append(const IMeshBuffer* const other) override
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
if (this==other)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const u32 vertexCount = getVertexCount();
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
Vertices.reallocate(vertexCount+other->getVertexCount());
|
||||||
|
for (i=0; i<other->getVertexCount(); ++i)
|
||||||
|
{
|
||||||
|
Vertices.push_back(reinterpret_cast<const T*>(other->getVertices())[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Indices.reallocate(getIndexCount()+other->getIndexCount());
|
||||||
|
for (i=0; i<other->getIndexCount(); ++i)
|
||||||
|
{
|
||||||
|
Indices.push_back(other->getIndices()[i]+vertexCount);
|
||||||
|
}
|
||||||
|
BoundingBox.addInternalBox(other->getBoundingBox());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||||
{
|
{
|
||||||
|
@ -234,16 +287,15 @@ public:
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
||||||
|
|
||||||
void setHWBuffer(void *ptr) const override
|
void setHWBuffer(void *ptr) const override {
|
||||||
{
|
|
||||||
HWBuffer = ptr;
|
HWBuffer = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *getHWBuffer() const override
|
void *getHWBuffer() const override {
|
||||||
{
|
|
||||||
return HWBuffer;
|
return HWBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
u32 ChangedID_Vertex;
|
u32 ChangedID_Vertex;
|
||||||
u32 ChangedID_Index;
|
u32 ChangedID_Index;
|
||||||
|
|
||||||
|
@ -272,3 +324,7 @@ typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
||||||
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_ATTRIBUTES_H_INCLUDED__
|
||||||
|
#define __E_ATTRIBUTES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -18,9 +19,75 @@ enum E_ATTRIBUTE_TYPE
|
||||||
// float attribute
|
// float attribute
|
||||||
EAT_FLOAT,
|
EAT_FLOAT,
|
||||||
|
|
||||||
|
// string attribute
|
||||||
|
EAT_STRING,
|
||||||
|
|
||||||
// boolean attribute
|
// boolean attribute
|
||||||
EAT_BOOL,
|
EAT_BOOL,
|
||||||
|
|
||||||
|
// enumeration attribute
|
||||||
|
EAT_ENUM,
|
||||||
|
|
||||||
|
// color attribute
|
||||||
|
EAT_COLOR,
|
||||||
|
|
||||||
|
// floating point color attribute
|
||||||
|
EAT_COLORF,
|
||||||
|
|
||||||
|
// 3d vector attribute
|
||||||
|
EAT_VECTOR3D,
|
||||||
|
|
||||||
|
// 2d position attribute
|
||||||
|
EAT_POSITION2D,
|
||||||
|
|
||||||
|
// vector 2d attribute
|
||||||
|
EAT_VECTOR2D,
|
||||||
|
|
||||||
|
// rectangle attribute
|
||||||
|
EAT_RECT,
|
||||||
|
|
||||||
|
// matrix attribute
|
||||||
|
EAT_MATRIX,
|
||||||
|
|
||||||
|
// quaternion attribute
|
||||||
|
EAT_QUATERNION,
|
||||||
|
|
||||||
|
// 3d bounding box
|
||||||
|
EAT_BBOX,
|
||||||
|
|
||||||
|
// plane
|
||||||
|
EAT_PLANE,
|
||||||
|
|
||||||
|
// 3d triangle
|
||||||
|
EAT_TRIANGLE3D,
|
||||||
|
|
||||||
|
// line 2d
|
||||||
|
EAT_LINE2D,
|
||||||
|
|
||||||
|
// line 3d
|
||||||
|
EAT_LINE3D,
|
||||||
|
|
||||||
|
// array of stringws attribute
|
||||||
|
EAT_STRINGWARRAY,
|
||||||
|
|
||||||
|
// array of float
|
||||||
|
EAT_FLOATARRAY,
|
||||||
|
|
||||||
|
// array of int
|
||||||
|
EAT_INTARRAY,
|
||||||
|
|
||||||
|
// binary data attribute
|
||||||
|
EAT_BINARY,
|
||||||
|
|
||||||
|
// texture reference attribute
|
||||||
|
EAT_TEXTURE,
|
||||||
|
|
||||||
|
// user pointer void*
|
||||||
|
EAT_USER_POINTER,
|
||||||
|
|
||||||
|
// dimension attribute
|
||||||
|
EAT_DIMENSION2D,
|
||||||
|
|
||||||
// known attribute type count
|
// known attribute type count
|
||||||
EAT_COUNT,
|
EAT_COUNT,
|
||||||
|
|
||||||
|
@ -30,3 +97,5 @@ enum E_ATTRIBUTE_TYPE
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_CULLING_TYPES_H_INCLUDED__
|
||||||
|
#define __E_CULLING_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -22,14 +23,19 @@ enum E_CULLING_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for culling type
|
//! Names for culling type
|
||||||
const c8 *const AutomaticCullingNames[] = {
|
const c8* const AutomaticCullingNames[] =
|
||||||
|
{
|
||||||
"false",
|
"false",
|
||||||
"box", // camera box against node box
|
"box", // camera box against node box
|
||||||
"frustum_box", // camera frustum against node box
|
"frustum_box", // camera frustum against node box
|
||||||
"frustum_sphere", // camera frustum against node sphere
|
"frustum_sphere", // camera frustum against node sphere
|
||||||
"occ_query", // occlusion query
|
"occ_query", // occlusion query
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_CULLING_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -37,5 +38,10 @@ enum E_DEBUG_SCENE_TYPE
|
||||||
EDS_FULL = 0xffffffff
|
EDS_FULL = 0xffffffff
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -44,3 +45,6 @@ enum E_DEVICE_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_DRIVER_FEATURES_H_INCLUDED__
|
||||||
|
#define __E_DRIVER_FEATURES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -120,6 +121,21 @@ enum E_VIDEO_DRIVER_FEATURE
|
||||||
//! Support for texture coord transformation via texture matrix
|
//! Support for texture coord transformation via texture matrix
|
||||||
EVDF_TEXTURE_MATRIX,
|
EVDF_TEXTURE_MATRIX,
|
||||||
|
|
||||||
|
//! Support for DXTn compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_DXT,
|
||||||
|
|
||||||
|
//! Support for PVRTC compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_PVRTC,
|
||||||
|
|
||||||
|
//! Support for PVRTC2 compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_PVRTC2,
|
||||||
|
|
||||||
|
//! Support for ETC1 compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_ETC1,
|
||||||
|
|
||||||
|
//! Support for ETC2 compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_ETC2,
|
||||||
|
|
||||||
//! Support for cube map textures.
|
//! Support for cube map textures.
|
||||||
EVDF_TEXTURE_CUBEMAP,
|
EVDF_TEXTURE_CUBEMAP,
|
||||||
|
|
||||||
|
@ -135,3 +151,7 @@ enum E_VIDEO_DRIVER_FEATURE
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_DRIVER_TYPES_H_INCLUDED__
|
||||||
|
#define __E_DRIVER_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -42,3 +43,6 @@ enum E_DRIVER_TYPE
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef E_FOCUS_FLAGS_H_INCLUDED__
|
||||||
|
#define E_FOCUS_FLAGS_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -32,3 +33,6 @@ enum EFOCUS_FLAG
|
||||||
|
|
||||||
} // namespace gui
|
} // namespace gui
|
||||||
} // namespace irr
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||||
|
#define __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -23,13 +24,16 @@ enum EGUI_ALIGNMENT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for alignments
|
//! Names for alignments
|
||||||
const c8 *const GUIAlignmentNames[] = {
|
const c8* const GUIAlignmentNames[] =
|
||||||
|
{
|
||||||
"upperLeft",
|
"upperLeft",
|
||||||
"lowerRight",
|
"lowerRight",
|
||||||
"center",
|
"center",
|
||||||
"scale",
|
"scale",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace gui
|
} // namespace gui
|
||||||
} // namespace irr
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif // __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_GUI_ELEMENT_TYPES_H_INCLUDED__
|
||||||
|
#define __E_GUI_ELEMENT_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -99,7 +100,8 @@ enum EGUI_ELEMENT_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for built-in element types
|
//! Names for built-in element types
|
||||||
const c8 *const GUIElementTypeNames[] = {
|
const c8* const GUIElementTypeNames[] =
|
||||||
|
{
|
||||||
"button",
|
"button",
|
||||||
"checkBox",
|
"checkBox",
|
||||||
"comboBox",
|
"comboBox",
|
||||||
|
@ -126,8 +128,14 @@ const c8 *const GUIElementTypeNames[] = {
|
||||||
"element",
|
"element",
|
||||||
"root",
|
"root",
|
||||||
"profiler",
|
"profiler",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
|
||||||
|
#define __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -38,3 +39,6 @@ enum E_BUFFER_TYPE
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
#define __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -80,3 +81,7 @@ enum E_MATERIAL_PROP
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_MATERIAL_TYPES_H_INCLUDED__
|
||||||
|
#define __E_MATERIAL_TYPES_H_INCLUDED__
|
||||||
#include "irrTypes.h"
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -58,17 +57,19 @@ enum E_MATERIAL_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Array holding the built in material type names
|
//! Array holding the built in material type names
|
||||||
const char *const sBuiltInMaterialTypeNames[] = {
|
const char* const sBuiltInMaterialTypeNames[] =
|
||||||
|
{
|
||||||
"solid",
|
"solid",
|
||||||
"trans_alphach",
|
"trans_alphach",
|
||||||
"trans_alphach_ref",
|
"trans_alphach_ref",
|
||||||
"trans_vertex_alpha",
|
"trans_vertex_alpha",
|
||||||
"onetexture_blend",
|
"onetexture_blend",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr u32 numBuiltInMaterials =
|
|
||||||
sizeof(sBuiltInMaterialTypeNames) / sizeof(char *) - 1;
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MATERIAL_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
65
include/EMeshWriterEnums.h
Normal file
65
include/EMeshWriterEnums.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
|
// This file is part of the "Irrlicht Engine".
|
||||||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
|
#ifndef __E_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
|
#define __E_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
|
|
||||||
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace scene
|
||||||
|
{
|
||||||
|
|
||||||
|
//! An enumeration for all supported types of built-in mesh writers
|
||||||
|
/** A scene mesh writers is represented by a four character code
|
||||||
|
such as 'irrm' or 'coll' instead of simple numbers, to avoid
|
||||||
|
name clashes with external mesh writers.*/
|
||||||
|
enum EMESH_WRITER_TYPE
|
||||||
|
{
|
||||||
|
//! Irrlicht native mesh writer, for static .irrmesh files.
|
||||||
|
EMWT_IRR_MESH = MAKE_IRR_ID('i','r','r','m'),
|
||||||
|
|
||||||
|
//! COLLADA mesh writer for .dae and .xml files
|
||||||
|
EMWT_COLLADA = MAKE_IRR_ID('c','o','l','l'),
|
||||||
|
|
||||||
|
//! STL mesh writer for .stl files
|
||||||
|
EMWT_STL = MAKE_IRR_ID('s','t','l',0),
|
||||||
|
|
||||||
|
//! OBJ mesh writer for .obj files
|
||||||
|
EMWT_OBJ = MAKE_IRR_ID('o','b','j',0),
|
||||||
|
|
||||||
|
//! PLY mesh writer for .ply files
|
||||||
|
EMWT_PLY = MAKE_IRR_ID('p','l','y',0),
|
||||||
|
|
||||||
|
//! B3D mesh writer, for static .b3d files
|
||||||
|
EMWT_B3D = MAKE_IRR_ID('b', '3', 'd', 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! flags configuring mesh writing
|
||||||
|
enum E_MESH_WRITER_FLAGS
|
||||||
|
{
|
||||||
|
//! no writer flags
|
||||||
|
EMWF_NONE = 0,
|
||||||
|
|
||||||
|
//! write lightmap textures out if possible
|
||||||
|
//! Currently not used by any Irrlicht mesh-writer
|
||||||
|
// (Note: User meshwriters can still use it)
|
||||||
|
EMWF_WRITE_LIGHTMAPS = 0x1,
|
||||||
|
|
||||||
|
//! write in a way that consumes less disk space
|
||||||
|
// (Note: Mainly there for user meshwriters)
|
||||||
|
EMWF_WRITE_COMPRESSED = 0x2,
|
||||||
|
|
||||||
|
//! write in binary format rather than text
|
||||||
|
EMWF_WRITE_BINARY = 0x4
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_PRIMITIVE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_PRIMITIVE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -41,3 +42,6 @@ enum E_PRIMITIVE_TYPE
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_READ_FILE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_READ_FILE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -28,3 +29,6 @@ enum EREAD_FILE_TYPE
|
||||||
};
|
};
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_SCENE_NODE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_SCENE_NODE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -45,5 +46,11 @@ enum ESCENE_NODE_TYPE
|
||||||
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#ifndef __E_SHADER_TYPES_H_INCLUDED__
|
||||||
|
#define __E_SHADER_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -81,5 +82,9 @@ const c8 *const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
||||||
"gs_4_0",
|
"gs_4_0",
|
||||||
0 };
|
0 };
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __E_SHADER_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#ifndef __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||||
|
#define __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -19,7 +20,8 @@ enum E_VERTEX_ATTRIBUTES
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Array holding the built in vertex attribute names
|
//! Array holding the built in vertex attribute names
|
||||||
const char *const sBuiltInVertexAttributeNames[] = {
|
const char* const sBuiltInVertexAttributeNames[] =
|
||||||
|
{
|
||||||
"inVertexPosition",
|
"inVertexPosition",
|
||||||
"inVertexNormal",
|
"inVertexNormal",
|
||||||
"inVertexColor",
|
"inVertexColor",
|
||||||
|
@ -27,8 +29,10 @@ const char *const sBuiltInVertexAttributeNames[] = {
|
||||||
"inTexCoord1",
|
"inTexCoord1",
|
||||||
"inVertexTangent",
|
"inVertexTangent",
|
||||||
"inVertexBinormal",
|
"inVertexBinormal",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif //__E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_ANIMATED_MESH_H_INCLUDED__
|
||||||
|
#define __I_ANIMATED_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "aabbox3d.h"
|
#include "aabbox3d.h"
|
||||||
#include "IMesh.h"
|
#include "IMesh.h"
|
||||||
|
@ -19,6 +20,7 @@ irr::scene::SMeshBuffer etc. */
|
||||||
class IAnimatedMesh : public IMesh
|
class IAnimatedMesh : public IMesh
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Gets the frame count of the animated mesh.
|
//! Gets the frame count of the animated mesh.
|
||||||
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
|
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
|
||||||
\return The amount of frames. If the amount is 1,
|
\return The amount of frames. If the amount is 1,
|
||||||
|
@ -67,3 +69,6 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
#include "IBoneSceneNode.h"
|
#include "IBoneSceneNode.h"
|
||||||
|
@ -24,6 +25,7 @@ enum E_JOINT_UPDATE_ON_RENDER
|
||||||
EJUOR_CONTROL
|
EJUOR_CONTROL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class IAnimatedMeshSceneNode;
|
class IAnimatedMeshSceneNode;
|
||||||
|
|
||||||
//! Callback interface for catching events of ended animations.
|
//! Callback interface for catching events of ended animations.
|
||||||
|
@ -34,6 +36,7 @@ be notified if an animation playback has ended.
|
||||||
class IAnimationEndCallBack : public virtual IReferenceCounted
|
class IAnimationEndCallBack : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Will be called when the animation playback has ended.
|
//! Will be called when the animation playback has ended.
|
||||||
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
||||||
more information.
|
more information.
|
||||||
|
@ -45,12 +48,13 @@ public:
|
||||||
class IAnimatedMeshSceneNode : public ISceneNode
|
class IAnimatedMeshSceneNode : public ISceneNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
|
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
|
||||||
ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IAnimatedMeshSceneNode() {}
|
virtual ~IAnimatedMeshSceneNode() {}
|
||||||
|
@ -163,7 +167,11 @@ public:
|
||||||
\param newManager An optional new scene manager.
|
\param newManager An optional new scene manager.
|
||||||
\return The newly created clone of this node. */
|
\return The newly created clone of this node. */
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,29 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_ATTRIBUTES_H_INCLUDED__
|
||||||
|
#define __I_ATTRIBUTES_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EAttributes.h"
|
#include "SColor.h"
|
||||||
|
#include "vector3d.h"
|
||||||
// not needed here but I can't be bothered to clean the transitive includes up.
|
#include "vector2d.h"
|
||||||
|
#include "line2d.h"
|
||||||
|
#include "line3d.h"
|
||||||
|
#include "triangle3d.h"
|
||||||
|
#include "position2d.h"
|
||||||
|
#include "rect.h"
|
||||||
|
#include "dimension2d.h"
|
||||||
|
#include "matrix4.h"
|
||||||
#include "quaternion.h"
|
#include "quaternion.h"
|
||||||
|
#include "plane3d.h"
|
||||||
|
#include "triangle3d.h"
|
||||||
|
#include "line2d.h"
|
||||||
|
#include "line3d.h"
|
||||||
|
#include "irrString.h"
|
||||||
|
#include "irrArray.h"
|
||||||
|
#include "EAttributes.h"
|
||||||
|
#include "path.h"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -23,6 +39,7 @@ namespace io
|
||||||
class IAttributes : public virtual IReferenceCounted
|
class IAttributes : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns amount of attributes in this collection of attributes.
|
//! Returns amount of attributes in this collection of attributes.
|
||||||
virtual u32 getAttributeCount() const = 0;
|
virtual u32 getAttributeCount() const = 0;
|
||||||
|
|
||||||
|
@ -38,6 +55,16 @@ public:
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
|
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
|
||||||
|
|
||||||
|
//! Returns the type string of the attribute
|
||||||
|
//! \param attributeName: String for the attribute type
|
||||||
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
|
virtual const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const = 0;
|
||||||
|
|
||||||
|
//! Returns the type string of the attribute by index.
|
||||||
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
//! \param defaultNotFound Value returned for an invalid index
|
||||||
|
virtual const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const = 0;
|
||||||
|
|
||||||
//! Returns if an attribute with a name exists
|
//! Returns if an attribute with a name exists
|
||||||
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
||||||
|
|
||||||
|
@ -47,6 +74,7 @@ public:
|
||||||
//! Removes all attributes
|
//! Removes all attributes
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Integer Attribute
|
Integer Attribute
|
||||||
|
@ -97,6 +125,7 @@ public:
|
||||||
//! Sets an attribute as float value
|
//! Sets an attribute as float value
|
||||||
virtual void setAttribute(s32 index, f32 value) = 0;
|
virtual void setAttribute(s32 index, f32 value) = 0;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Bool Attribute
|
Bool Attribute
|
||||||
*/
|
*/
|
||||||
|
@ -119,7 +148,10 @@ public:
|
||||||
|
|
||||||
//! Sets an attribute as boolean value
|
//! Sets an attribute as boolean value
|
||||||
virtual void setAttribute(s32 index, bool value) = 0;
|
virtual void setAttribute(s32 index, bool value) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
|
@ -21,10 +22,11 @@ lensflares, particles and things like that.
|
||||||
class IBillboardSceneNode : public ISceneNode
|
class IBillboardSceneNode : public ISceneNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df &position = core::vector3df(0, 0, 0)) :
|
const core::vector3df& position = core::vector3df(0,0,0))
|
||||||
ISceneNode(parent, mgr, id, position) {}
|
: ISceneNode(parent, mgr, id, position) {}
|
||||||
|
|
||||||
//! Sets the size of the billboard, making it rectangular.
|
//! Sets the size of the billboard, making it rectangular.
|
||||||
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
||||||
|
@ -88,3 +90,7 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_BONE_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_BONE_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
|
@ -40,18 +41,21 @@ enum E_BONE_SKINNING_SPACE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for bone animation modes
|
//! Names for bone animation modes
|
||||||
const c8 *const BoneAnimationModeNames[] = {
|
const c8* const BoneAnimationModeNames[] =
|
||||||
|
{
|
||||||
"automatic",
|
"automatic",
|
||||||
"animated",
|
"animated",
|
||||||
"unanimated",
|
"unanimated",
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Interface for bones used for skeletal animation.
|
//! Interface for bones used for skeletal animation.
|
||||||
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
||||||
class IBoneSceneNode : public ISceneNode
|
class IBoneSceneNode : public ISceneNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
|
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
|
||||||
ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { }
|
ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { }
|
||||||
|
|
||||||
|
@ -92,5 +96,9 @@ public:
|
||||||
s32 rotationHint;
|
s32 rotationHint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_CAMERA_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_CAMERA_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
#include "IEventReceiver.h"
|
#include "IEventReceiver.h"
|
||||||
|
@ -22,13 +23,13 @@ on.
|
||||||
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
|
const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f))
|
||||||
ISceneNode(parent, mgr, id, position, rotation, scale),
|
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
|
||||||
IsOrthogonal(false) {}
|
|
||||||
|
|
||||||
//! Sets the projection matrix of the camera.
|
//! Sets the projection matrix of the camera.
|
||||||
/** The core::matrix4 class has some methods to build a
|
/** The core::matrix4 class has some methods to build a
|
||||||
|
@ -172,6 +173,7 @@ public:
|
||||||
virtual bool getTargetAndRotationBinding(void) const =0;
|
virtual bool getTargetAndRotationBinding(void) const =0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void cloneMembers(const ICameraSceneNode* toCopyFrom)
|
void cloneMembers(const ICameraSceneNode* toCopyFrom)
|
||||||
{
|
{
|
||||||
IsOrthogonal = toCopyFrom->IsOrthogonal;
|
IsOrthogonal = toCopyFrom->IsOrthogonal;
|
||||||
|
@ -182,3 +184,6 @@ protected:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -57,3 +57,5 @@ public:
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_CURSOR_CONTROL_H_INCLUDED__
|
||||||
|
#define __I_CURSOR_CONTROL_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
|
@ -41,7 +42,8 @@ enum ECURSOR_ICON
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for ECURSOR_ICON
|
//! Names for ECURSOR_ICON
|
||||||
const c8 *const GUICursorIconNames[ECI_COUNT + 1] = {
|
const c8* const GUICursorIconNames[ECI_COUNT+1] =
|
||||||
|
{
|
||||||
"normal",
|
"normal",
|
||||||
"cross",
|
"cross",
|
||||||
"hand",
|
"hand",
|
||||||
|
@ -55,19 +57,19 @@ const c8 *const GUICursorIconNames[ECI_COUNT + 1] = {
|
||||||
"sizens",
|
"sizens",
|
||||||
"sizewe",
|
"sizewe",
|
||||||
"sizeup",
|
"sizeup",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! structure used to set sprites as cursors.
|
//! structure used to set sprites as cursors.
|
||||||
struct SCursorSprite
|
struct SCursorSprite
|
||||||
{
|
{
|
||||||
SCursorSprite() :
|
SCursorSprite()
|
||||||
SpriteBank(0), SpriteId(-1)
|
: SpriteBank(0), SpriteId(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SCursorSprite(gui::IGUISpriteBank *spriteBank, s32 spriteId, const core::position2d<s32> &hotspot = (core::position2d<s32>(0, 0))) :
|
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) )
|
||||||
SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,6 +97,7 @@ enum ECURSOR_PLATFORM_BEHAVIOR
|
||||||
class ICursorControl : public virtual IReferenceCounted
|
class ICursorControl : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Changes the visible state of the mouse cursor.
|
//! Changes the visible state of the mouse cursor.
|
||||||
/** \param visible: The new visible state. If true, the cursor will be visible,
|
/** \param visible: The new visible state. If true, the cursor will be visible,
|
||||||
if false, it will be invisible. */
|
if false, it will be invisible. */
|
||||||
|
@ -191,5 +194,9 @@ public:
|
||||||
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
|
@ -22,9 +23,10 @@ joint scene nodes when playing skeletal animations.
|
||||||
class IDummyTransformationSceneNode : public ISceneNode
|
class IDummyTransformationSceneNode : public ISceneNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IDummyTransformationSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id) :
|
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
|
||||||
ISceneNode(parent, mgr, id) {}
|
: ISceneNode(parent, mgr, id) {}
|
||||||
|
|
||||||
//! Returns a reference to the current relative transformation matrix.
|
//! Returns a reference to the current relative transformation matrix.
|
||||||
/** This is the matrix, this scene node uses instead of scale, translation
|
/** This is the matrix, this scene node uses instead of scale, translation
|
||||||
|
@ -34,3 +36,7 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_EVENT_RECEIVER_H_INCLUDED__
|
||||||
|
#define __I_EVENT_RECEIVER_H_INCLUDED__
|
||||||
|
|
||||||
#include "ILogger.h"
|
#include "ILogger.h"
|
||||||
#include "Keycodes.h"
|
#include "Keycodes.h"
|
||||||
|
@ -308,6 +309,7 @@ enum EGUI_EVENT_TYPE
|
||||||
};
|
};
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
|
||||||
|
|
||||||
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
|
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
|
||||||
struct SEvent
|
struct SEvent
|
||||||
{
|
{
|
||||||
|
@ -322,6 +324,7 @@ struct SEvent
|
||||||
|
|
||||||
//! Type of GUI Event
|
//! Type of GUI Event
|
||||||
gui::EGUI_EVENT_TYPE EventType;
|
gui::EGUI_EVENT_TYPE EventType;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Any kind of mouse event.
|
//! Any kind of mouse event.
|
||||||
|
@ -570,6 +573,7 @@ struct SEvent
|
||||||
struct SSystemEvent SystemEvent;
|
struct SSystemEvent SystemEvent;
|
||||||
struct SApplicationEvent ApplicationEvent;
|
struct SApplicationEvent ApplicationEvent;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Interface of an object which can receive events.
|
//! Interface of an object which can receive events.
|
||||||
|
@ -581,6 +585,7 @@ path it takes through the system. */
|
||||||
class IEventReceiver
|
class IEventReceiver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IEventReceiver() {}
|
virtual ~IEventReceiver() {}
|
||||||
|
|
||||||
|
@ -593,6 +598,7 @@ public:
|
||||||
virtual bool OnEvent(const SEvent& event) = 0;
|
virtual bool OnEvent(const SEvent& event) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks()
|
//! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks()
|
||||||
struct SJoystickInfo
|
struct SJoystickInfo
|
||||||
{
|
{
|
||||||
|
@ -629,4 +635,8 @@ struct SJoystickInfo
|
||||||
} PovHat;
|
} PovHat;
|
||||||
}; // struct SJoystickInfo
|
}; // struct SJoystickInfo
|
||||||
|
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_FILE_ARCHIVE_H_INCLUDED__
|
||||||
|
#define __I_FILE_ARCHIVE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReadFile.h"
|
#include "IReadFile.h"
|
||||||
#include "IFileList.h"
|
#include "IFileList.h"
|
||||||
|
@ -29,6 +30,21 @@ enum E_FILE_ARCHIVE_TYPE
|
||||||
//! A gzip archive
|
//! A gzip archive
|
||||||
EFAT_GZIP = MAKE_IRR_ID('g','z','i','p'),
|
EFAT_GZIP = MAKE_IRR_ID('g','z','i','p'),
|
||||||
|
|
||||||
|
//! A virtual directory
|
||||||
|
EFAT_FOLDER = MAKE_IRR_ID('f','l','d','r'),
|
||||||
|
|
||||||
|
//! An ID Software PAK archive
|
||||||
|
EFAT_PAK = MAKE_IRR_ID('P','A','K', 0),
|
||||||
|
|
||||||
|
//! A Nebula Device archive
|
||||||
|
EFAT_NPK = MAKE_IRR_ID('N','P','K', 0),
|
||||||
|
|
||||||
|
//! A Tape ARchive
|
||||||
|
EFAT_TAR = MAKE_IRR_ID('T','A','R', 0),
|
||||||
|
|
||||||
|
//! A wad Archive, Quake2, Halflife
|
||||||
|
EFAT_WAD = MAKE_IRR_ID('W','A','D', 0),
|
||||||
|
|
||||||
//! An Android asset file archive
|
//! An Android asset file archive
|
||||||
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
||||||
|
|
||||||
|
@ -40,6 +56,7 @@ enum E_FILE_ARCHIVE_TYPE
|
||||||
class IFileArchive : public virtual IReferenceCounted
|
class IFileArchive : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Opens a file based on its name
|
//! Opens a file based on its name
|
||||||
/** Creates and returns a new IReadFile for a file in the archive.
|
/** Creates and returns a new IReadFile for a file in the archive.
|
||||||
\param filename The file to open
|
\param filename The file to open
|
||||||
|
@ -123,5 +140,9 @@ public:
|
||||||
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_FILE_LIST_H_INCLUDED__
|
||||||
|
#define __I_FILE_LIST_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -87,3 +88,7 @@ public:
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_FILE_SYSTEM_H_INCLUDED__
|
||||||
|
#define __I_FILE_SYSTEM_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "IFileArchive.h"
|
#include "IFileArchive.h"
|
||||||
|
@ -21,6 +22,7 @@ class IWriteFile;
|
||||||
class IFileList;
|
class IFileList;
|
||||||
class IAttributes;
|
class IAttributes;
|
||||||
|
|
||||||
|
|
||||||
//! The FileSystem manages files and archives and provides access to them.
|
//! The FileSystem manages files and archives and provides access to them.
|
||||||
/** It manages where files are, so that modules which use the the IO do not
|
/** It manages where files are, so that modules which use the the IO do not
|
||||||
need to know where every file is located. A file could be in a .zip-Archive or
|
need to know where every file is located. A file could be in a .zip-Archive or
|
||||||
|
@ -28,6 +30,7 @@ as file on disk, using the IFileSystem makes no difference to this. */
|
||||||
class IFileSystem : public virtual IReferenceCounted
|
class IFileSystem : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Opens a file for read access.
|
//! Opens a file for read access.
|
||||||
/** \param filename: Name of file to open.
|
/** \param filename: Name of file to open.
|
||||||
\return Pointer to the created file interface.
|
\return Pointer to the created file interface.
|
||||||
|
@ -75,6 +78,7 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||||
|
|
||||||
|
|
||||||
//! Opens a file for write access.
|
//! Opens a file for write access.
|
||||||
/** \param filename: Name of file to open.
|
/** \param filename: Name of file to open.
|
||||||
\param append: If the file already exist, all write operations are
|
\param append: If the file already exist, all write operations are
|
||||||
|
@ -261,5 +265,9 @@ public:
|
||||||
virtual bool existFile(const path& filename) const =0;
|
virtual bool existFile(const path& filename) const =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
|
||||||
|
#define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
|
||||||
|
|
||||||
#include "EShaderTypes.h"
|
#include "EShaderTypes.h"
|
||||||
#include "EMaterialTypes.h"
|
#include "EMaterialTypes.h"
|
||||||
|
@ -27,6 +28,7 @@ class IShaderConstantSetCallBack;
|
||||||
class IGPUProgrammingServices
|
class IGPUProgrammingServices
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IGPUProgrammingServices() {}
|
virtual ~IGPUProgrammingServices() {}
|
||||||
|
|
||||||
|
@ -153,7 +155,7 @@ public:
|
||||||
callback, baseMaterial, userData);
|
callback, baseMaterial, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
/** \param vertexShaderProgramFileName Text file containing the source
|
/** \param vertexShaderProgramFileName Text file containing the source
|
||||||
of the vertex shader program. Set to empty string if no vertex shader
|
of the vertex shader program. Set to empty string if no vertex shader
|
||||||
shall be created.
|
shall be created.
|
||||||
|
@ -277,7 +279,7 @@ public:
|
||||||
callback, baseMaterial, userData);
|
callback, baseMaterial, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
/** \param vertexShaderProgram Text file handle containing the source
|
/** \param vertexShaderProgram Text file handle containing the source
|
||||||
of the vertex shader program. Set to 0 if no vertex shader shall be
|
of the vertex shader program. Set to 0 if no vertex shader shall be
|
||||||
created.
|
created.
|
||||||
|
@ -355,15 +357,99 @@ public:
|
||||||
callback, baseMaterial, userData);
|
callback, baseMaterial, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Delete a shader material and associated data.
|
//! Adds a new ASM shader material renderer to the VideoDriver
|
||||||
/**
|
/** Note that it is a good idea to call IVideoDriver::queryFeature() in
|
||||||
After you have deleted a material it is invalid to still use and doing
|
advance to check if the IVideoDriver supports the vertex and/or pixel
|
||||||
so might result in a crash. The ID may be reused in the future when new
|
shader version your are using.
|
||||||
materials are added.
|
|
||||||
\param material Number of the material type. Must not be a built-in
|
The material is added to the VideoDriver like with
|
||||||
material. */
|
IVideoDriver::addMaterialRenderer() and can be used like it had been
|
||||||
virtual void deleteShaderMaterial(s32 material) = 0;
|
added with that method.
|
||||||
|
\param vertexShaderProgram String containing the source of the vertex
|
||||||
|
shader program. This can be 0 if no vertex program shall be used.
|
||||||
|
|
||||||
|
For DX8 programs, the will always input registers look like this: v0:
|
||||||
|
position, v1: normal, v2: color, v3: texture coordinates, v4: texture
|
||||||
|
coordinates 2 if available.
|
||||||
|
|
||||||
|
For DX9 programs, you can manually set the registers using the dcl_
|
||||||
|
statements.
|
||||||
|
\param pixelShaderProgram String containing the source of the pixel
|
||||||
|
shader program. This can be 0 if you don't want to use a pixel shader.
|
||||||
|
\param callback Pointer to an implementation of
|
||||||
|
IShaderConstantSetCallBack in which you can set the needed vertex and
|
||||||
|
pixel shader program constants. Set this to 0 if you don't need this.
|
||||||
|
\param baseMaterial Base material which renderstates will be used to
|
||||||
|
shade the material.
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
|
||||||
|
const c8* pixelShaderProgram = 0,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
|
/** \param vertexShaderProgram Text file containing the source of the
|
||||||
|
vertex shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param pixelShaderProgram Text file containing the source of the pixel
|
||||||
|
shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param callback Pointer to an IShaderConstantSetCallback object to
|
||||||
|
which the OnSetConstants function is called.
|
||||||
|
\param baseMaterial baseMaterial
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
|
||||||
|
io::IReadFile* pixelShaderProgram,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
|
/** \param vertexShaderProgramFileName Text file name containing the
|
||||||
|
source of the vertex shader program. Set to 0 if no shader shall be
|
||||||
|
created.
|
||||||
|
\param pixelShaderProgramFileName Text file name containing the source
|
||||||
|
of the pixel shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param callback Pointer to an IShaderConstantSetCallback object on
|
||||||
|
which the OnSetConstants function is called.
|
||||||
|
\param baseMaterial baseMaterial
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
|
||||||
|
const io::path& pixelShaderProgramFileName,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_BUTTON_H_INCLUDED__
|
||||||
|
#define __I_GUI_BUTTON_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -45,7 +46,8 @@ enum EGUI_BUTTON_STATE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for gui button state icons
|
//! Names for gui button state icons
|
||||||
const c8 *const GUIButtonStateNames[EGBS_COUNT + 1] = {
|
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
|
||||||
|
{
|
||||||
"buttonUp",
|
"buttonUp",
|
||||||
"buttonDown",
|
"buttonDown",
|
||||||
"buttonMouseOver",
|
"buttonMouseOver",
|
||||||
|
@ -53,7 +55,7 @@ const c8 *const GUIButtonStateNames[EGBS_COUNT + 1] = {
|
||||||
"buttonFocused",
|
"buttonFocused",
|
||||||
"buttonNotFocused",
|
"buttonNotFocused",
|
||||||
"buttonDisabled",
|
"buttonDisabled",
|
||||||
0, // count
|
0 // count
|
||||||
};
|
};
|
||||||
|
|
||||||
//! State of buttons used for drawing texture images.
|
//! State of buttons used for drawing texture images.
|
||||||
|
@ -86,7 +88,8 @@ enum EGUI_BUTTON_IMAGE_STATE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for gui button image states
|
//! Names for gui button image states
|
||||||
const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
|
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
|
||||||
|
{
|
||||||
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
||||||
"ImageUpOver",
|
"ImageUpOver",
|
||||||
"ImageUpFocused",
|
"ImageUpFocused",
|
||||||
|
@ -96,7 +99,7 @@ const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
|
||||||
"ImageDownFocused",
|
"ImageDownFocused",
|
||||||
"ImageDownFocusedOver",
|
"ImageDownFocusedOver",
|
||||||
"ImageDisabled",
|
"ImageDisabled",
|
||||||
0, // count
|
0 // count
|
||||||
};
|
};
|
||||||
|
|
||||||
//! GUI Button interface.
|
//! GUI Button interface.
|
||||||
|
@ -106,9 +109,10 @@ const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
|
||||||
class IGUIButton : public IGUIElement
|
class IGUIButton : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIButton(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
//! Sets another skin independent font.
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
|
@ -184,6 +188,7 @@ public:
|
||||||
\param sourceRect: Position in the texture, where the image is located */
|
\param sourceRect: Position in the texture, where the image is located */
|
||||||
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||||
|
|
||||||
|
|
||||||
//! Sets the sprite bank used by the button
|
//! Sets the sprite bank used by the button
|
||||||
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
|
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
|
||||||
Which means after loading the gui you still have to set the spritebank manually. */
|
Which means after loading the gui you still have to set the spritebank manually. */
|
||||||
|
@ -255,5 +260,9 @@ public:
|
||||||
virtual bool getClickControlState() const = 0;
|
virtual bool getClickControlState() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_CHECKBOX_H_INCLUDED__
|
||||||
|
#define __I_GUI_CHECKBOX_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -18,9 +19,10 @@ namespace gui
|
||||||
class IGUICheckBox : public IGUIElement
|
class IGUICheckBox : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUICheckBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Set if box is checked.
|
//! Set if box is checked.
|
||||||
virtual void setChecked(bool checked) = 0;
|
virtual void setChecked(bool checked) = 0;
|
||||||
|
@ -41,7 +43,11 @@ public:
|
||||||
//! Checks if border drawing is enabled
|
//! Checks if border drawing is enabled
|
||||||
/** \return true if border drawing is enabled, false otherwise */
|
/** \return true if border drawing is enabled, false otherwise */
|
||||||
virtual bool isDrawBorderEnabled() const = 0;
|
virtual bool isDrawBorderEnabled() const = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_COMBO_BOX_H_INCLUDED__
|
||||||
|
#define __I_GUI_COMBO_BOX_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -18,9 +19,10 @@ namespace gui
|
||||||
class IGUIComboBox : public IGUIElement
|
class IGUIComboBox : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIComboBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Returns amount of items in box
|
//! Returns amount of items in box
|
||||||
virtual u32 getItemCount() const = 0;
|
virtual u32 getItemCount() const = 0;
|
||||||
|
@ -68,5 +70,9 @@ public:
|
||||||
virtual u32 getMaxSelectionRows() const = 0;
|
virtual u32 getMaxSelectionRows() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_EDIT_BOX_H_INCLUDED__
|
||||||
|
#define __I_GUI_EDIT_BOX_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
|
@ -22,9 +23,10 @@ class IGUIFont;
|
||||||
class IGUIEditBox : public IGUIElement
|
class IGUIEditBox : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIEditBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
//! Sets another skin independent font.
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
|
@ -147,5 +149,9 @@ public:
|
||||||
virtual irr::u32 getCursorBlinkTime() const = 0;
|
virtual irr::u32 getCursorBlinkTime() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_ELEMENT_H_INCLUDED__
|
||||||
|
#define __I_GUI_ELEMENT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
|
@ -25,11 +26,11 @@ namespace gui
|
||||||
class IGUIElement : virtual public IReferenceCounted, public IEventReceiver
|
class IGUIElement : virtual public IReferenceCounted, public IEventReceiver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment* environment, IGUIElement* parent,
|
IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment* environment, IGUIElement* parent,
|
||||||
s32 id, const core::rect<s32> &rectangle) :
|
s32 id, const core::rect<s32>& rectangle)
|
||||||
Parent(0),
|
: Parent(0), RelativeRect(rectangle), AbsoluteRect(rectangle),
|
||||||
RelativeRect(rectangle), AbsoluteRect(rectangle),
|
|
||||||
AbsoluteClippingRect(rectangle), DesiredRect(rectangle),
|
AbsoluteClippingRect(rectangle), DesiredRect(rectangle),
|
||||||
MaxSize(0,0), MinSize(1,1), IsVisible(true), IsEnabled(true),
|
MaxSize(0,0), MinSize(1,1), IsVisible(true), IsEnabled(true),
|
||||||
IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false),
|
IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false),
|
||||||
|
@ -41,12 +42,14 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// if we were given a parent to attach to
|
// if we were given a parent to attach to
|
||||||
if (parent) {
|
if (parent)
|
||||||
|
{
|
||||||
parent->addChildToEnd(this);
|
parent->addChildToEnd(this);
|
||||||
recalculateAbsolutePosition(true);
|
recalculateAbsolutePosition(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IGUIElement()
|
virtual ~IGUIElement()
|
||||||
{
|
{
|
||||||
|
@ -56,6 +59,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns parent of this element.
|
//! Returns parent of this element.
|
||||||
IGUIElement* getParent() const
|
IGUIElement* getParent() const
|
||||||
{
|
{
|
||||||
|
@ -68,11 +72,13 @@ public:
|
||||||
return RelativeRect;
|
return RelativeRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the relative rectangle of this element.
|
//! Sets the relative rectangle of this element.
|
||||||
/** \param r The absolute position to set */
|
/** \param r The absolute position to set */
|
||||||
void setRelativePosition(const core::rect<s32>& r)
|
void setRelativePosition(const core::rect<s32>& r)
|
||||||
{
|
{
|
||||||
if (Parent) {
|
if (Parent)
|
||||||
|
{
|
||||||
const core::rect<s32>& r2 = Parent->getAbsolutePosition();
|
const core::rect<s32>& r2 = Parent->getAbsolutePosition();
|
||||||
|
|
||||||
core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height));
|
core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height));
|
||||||
|
@ -101,6 +107,7 @@ public:
|
||||||
setRelativePosition(rectangle);
|
setRelativePosition(rectangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the relative rectangle of this element as a proportion of its parent's area.
|
//! Sets the relative rectangle of this element as a proportion of its parent's area.
|
||||||
/** \note This method used to be 'void setRelativePosition(const core::rect<f32>& r)'
|
/** \note This method used to be 'void setRelativePosition(const core::rect<f32>& r)'
|
||||||
\param r The rectangle to set, interpreted as a proportion of the parent's area.
|
\param r The rectangle to set, interpreted as a proportion of the parent's area.
|
||||||
|
@ -124,18 +131,21 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the absolute rectangle of this element
|
//! Gets the absolute rectangle of this element
|
||||||
core::rect<s32> getAbsolutePosition() const
|
core::rect<s32> getAbsolutePosition() const
|
||||||
{
|
{
|
||||||
return AbsoluteRect;
|
return AbsoluteRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the visible area of the element.
|
//! Returns the visible area of the element.
|
||||||
core::rect<s32> getAbsoluteClippingRect() const
|
core::rect<s32> getAbsoluteClippingRect() const
|
||||||
{
|
{
|
||||||
return AbsoluteClippingRect;
|
return AbsoluteClippingRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets whether the element will ignore its parent's clipping rectangle
|
//! Sets whether the element will ignore its parent's clipping rectangle
|
||||||
/** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */
|
/** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */
|
||||||
void setNotClipped(bool noClip)
|
void setNotClipped(bool noClip)
|
||||||
|
@ -144,6 +154,7 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets whether the element will ignore its parent's clipping rectangle
|
//! Gets whether the element will ignore its parent's clipping rectangle
|
||||||
/** \return true if the element is not clipped by its parent's clipping rectangle. */
|
/** \return true if the element is not clipped by its parent's clipping rectangle. */
|
||||||
bool isNotClipped() const
|
bool isNotClipped() const
|
||||||
|
@ -151,6 +162,7 @@ public:
|
||||||
return NoClip;
|
return NoClip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the maximum size allowed for this element
|
//! Sets the maximum size allowed for this element
|
||||||
/** If set to 0,0, there is no maximum size */
|
/** If set to 0,0, there is no maximum size */
|
||||||
void setMaxSize(core::dimension2du size)
|
void setMaxSize(core::dimension2du size)
|
||||||
|
@ -159,6 +171,7 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the minimum size allowed for this element
|
//! Sets the minimum size allowed for this element
|
||||||
void setMinSize(core::dimension2du size)
|
void setMinSize(core::dimension2du size)
|
||||||
{
|
{
|
||||||
|
@ -170,6 +183,7 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! The alignment defines how the borders of this element will be positioned when the parent element is resized.
|
//! The alignment defines how the borders of this element will be positioned when the parent element is resized.
|
||||||
void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom)
|
void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom)
|
||||||
{
|
{
|
||||||
|
@ -178,7 +192,8 @@ public:
|
||||||
AlignTop = top;
|
AlignTop = top;
|
||||||
AlignBottom = bottom;
|
AlignBottom = bottom;
|
||||||
|
|
||||||
if (Parent) {
|
if (Parent)
|
||||||
|
{
|
||||||
core::rect<s32> r(Parent->getAbsolutePosition());
|
core::rect<s32> r(Parent->getAbsolutePosition());
|
||||||
|
|
||||||
core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height);
|
core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height);
|
||||||
|
@ -224,11 +239,13 @@ public:
|
||||||
recalculateAbsolutePosition(false);
|
recalculateAbsolutePosition(false);
|
||||||
|
|
||||||
// update all children
|
// update all children
|
||||||
for (auto child : Children) {
|
for (auto child : Children)
|
||||||
|
{
|
||||||
child->updateAbsolutePosition();
|
child->updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the topmost GUI element at the specific position.
|
//! Returns the topmost GUI element at the specific position.
|
||||||
/**
|
/**
|
||||||
This will check this GUI element and all of its descendants, so it
|
This will check this GUI element and all of its descendants, so it
|
||||||
|
@ -245,12 +262,14 @@ public:
|
||||||
{
|
{
|
||||||
IGUIElement* target = 0;
|
IGUIElement* target = 0;
|
||||||
|
|
||||||
if (isVisible()) {
|
if (isVisible())
|
||||||
|
{
|
||||||
// we have to search from back to front, because later children
|
// we have to search from back to front, because later children
|
||||||
// might be drawn over the top of earlier ones.
|
// might be drawn over the top of earlier ones.
|
||||||
auto it = Children.rbegin();
|
auto it = Children.rbegin();
|
||||||
auto ie = Children.rend();
|
auto ie = Children.rend();
|
||||||
while (it != ie) {
|
while (it != ie)
|
||||||
|
{
|
||||||
target = (*it)->getElementFromPoint(point);
|
target = (*it)->getElementFromPoint(point);
|
||||||
if (target)
|
if (target)
|
||||||
return target;
|
return target;
|
||||||
|
@ -265,6 +284,7 @@ public:
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if a point is within this element.
|
//! Returns true if a point is within this element.
|
||||||
/** Elements with a shape other than a rectangle should override this method */
|
/** Elements with a shape other than a rectangle should override this method */
|
||||||
virtual bool isPointInside(const core::position2d<s32>& point) const
|
virtual bool isPointInside(const core::position2d<s32>& point) const
|
||||||
|
@ -272,10 +292,12 @@ public:
|
||||||
return AbsoluteClippingRect.isPointInside(point);
|
return AbsoluteClippingRect.isPointInside(point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Adds a GUI element as new child of this element.
|
//! Adds a GUI element as new child of this element.
|
||||||
virtual void addChild(IGUIElement* child)
|
virtual void addChild(IGUIElement* child)
|
||||||
{
|
{
|
||||||
if (child && child != this) {
|
if ( child && child != this )
|
||||||
|
{
|
||||||
addChildToEnd(child);
|
addChildToEnd(child);
|
||||||
child->updateAbsolutePosition();
|
child->updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
@ -291,8 +313,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Removes all children.
|
//! Removes all children.
|
||||||
virtual void removeAllChildren()
|
virtual void removeAllChildren() {
|
||||||
{
|
|
||||||
while (!Children.empty()) {
|
while (!Children.empty()) {
|
||||||
auto child = Children.back();
|
auto child = Children.back();
|
||||||
child->remove();
|
child->remove();
|
||||||
|
@ -306,30 +327,36 @@ public:
|
||||||
Parent->removeChild(this);
|
Parent->removeChild(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Draws the element and its children.
|
//! Draws the element and its children.
|
||||||
virtual void draw()
|
virtual void draw()
|
||||||
{
|
{
|
||||||
if (isVisible()) {
|
if ( isVisible() )
|
||||||
|
{
|
||||||
for (auto child : Children)
|
for (auto child : Children)
|
||||||
child->draw();
|
child->draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! animate the element and its children.
|
//! animate the element and its children.
|
||||||
virtual void OnPostRender(u32 timeMs)
|
virtual void OnPostRender(u32 timeMs)
|
||||||
{
|
{
|
||||||
if (isVisible()) {
|
if ( isVisible() )
|
||||||
|
{
|
||||||
for (auto child : Children)
|
for (auto child : Children)
|
||||||
child->OnPostRender( timeMs );
|
child->OnPostRender( timeMs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Moves this element.
|
//! Moves this element.
|
||||||
virtual void move(core::position2d<s32> absoluteMovement)
|
virtual void move(core::position2d<s32> absoluteMovement)
|
||||||
{
|
{
|
||||||
setRelativePosition(DesiredRect + absoluteMovement);
|
setRelativePosition(DesiredRect + absoluteMovement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if element is visible.
|
//! Returns true if element is visible.
|
||||||
virtual bool isVisible() const
|
virtual bool isVisible() const
|
||||||
{
|
{
|
||||||
|
@ -356,12 +383,14 @@ public:
|
||||||
IsVisible = visible;
|
IsVisible = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if this element was created as part of its parent control
|
//! Returns true if this element was created as part of its parent control
|
||||||
virtual bool isSubElement() const
|
virtual bool isSubElement() const
|
||||||
{
|
{
|
||||||
return IsSubElement;
|
return IsSubElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets whether this control was created as part of its parent.
|
//! Sets whether this control was created as part of its parent.
|
||||||
/** For example, it is true when a scrollbar is part of a listbox.
|
/** For example, it is true when a scrollbar is part of a listbox.
|
||||||
SubElements are not saved to disk when calling guiEnvironment->saveGUI() */
|
SubElements are not saved to disk when calling guiEnvironment->saveGUI() */
|
||||||
|
@ -370,6 +399,7 @@ public:
|
||||||
IsSubElement = subElement;
|
IsSubElement = subElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! If set to true, the focus will visit this element when using the tab key to cycle through elements.
|
//! If set to true, the focus will visit this element when using the tab key to cycle through elements.
|
||||||
/** If this element is a tab group (see isTabGroup/setTabGroup) then
|
/** If this element is a tab group (see isTabGroup/setTabGroup) then
|
||||||
ctrl+tab will be used instead. */
|
ctrl+tab will be used instead. */
|
||||||
|
@ -378,43 +408,51 @@ public:
|
||||||
IsTabStop = enable;
|
IsTabStop = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if this element can be focused by navigating with the tab key
|
//! Returns true if this element can be focused by navigating with the tab key
|
||||||
bool isTabStop() const
|
bool isTabStop() const
|
||||||
{
|
{
|
||||||
return IsTabStop;
|
return IsTabStop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the priority of focus when using the tab key to navigate between a group of elements.
|
//! Sets the priority of focus when using the tab key to navigate between a group of elements.
|
||||||
/** See setTabGroup, isTabGroup and getTabGroup for information on tab groups.
|
/** See setTabGroup, isTabGroup and getTabGroup for information on tab groups.
|
||||||
Elements with a lower number are focused first */
|
Elements with a lower number are focused first */
|
||||||
void setTabOrder(s32 index)
|
void setTabOrder(s32 index)
|
||||||
{
|
{
|
||||||
// negative = autonumber
|
// negative = autonumber
|
||||||
if (index < 0) {
|
if (index < 0)
|
||||||
|
{
|
||||||
TabOrder = 0;
|
TabOrder = 0;
|
||||||
IGUIElement *el = getTabGroup();
|
IGUIElement *el = getTabGroup();
|
||||||
while (IsTabGroup && el && el->Parent)
|
while (IsTabGroup && el && el->Parent)
|
||||||
el = el->Parent;
|
el = el->Parent;
|
||||||
|
|
||||||
IGUIElement *first=0, *closest=0;
|
IGUIElement *first=0, *closest=0;
|
||||||
if (el) {
|
if (el)
|
||||||
|
{
|
||||||
// find the highest element number
|
// find the highest element number
|
||||||
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
|
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
|
||||||
if (first) {
|
if (first)
|
||||||
|
{
|
||||||
TabOrder = first->getTabOrder() + 1;
|
TabOrder = first->getTabOrder() + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
TabOrder = index;
|
TabOrder = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the number in the tab order sequence
|
//! Returns the number in the tab order sequence
|
||||||
s32 getTabOrder() const
|
s32 getTabOrder() const
|
||||||
{
|
{
|
||||||
return TabOrder;
|
return TabOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets whether this element is a container for a group of elements which can be navigated using the tab key.
|
//! Sets whether this element is a container for a group of elements which can be navigated using the tab key.
|
||||||
/** For example, windows are tab groups.
|
/** For example, windows are tab groups.
|
||||||
Groups can be navigated using ctrl+tab, providing isTabStop is true. */
|
Groups can be navigated using ctrl+tab, providing isTabStop is true. */
|
||||||
|
@ -423,12 +461,14 @@ public:
|
||||||
IsTabGroup = isGroup;
|
IsTabGroup = isGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if this element is a tab group.
|
//! Returns true if this element is a tab group.
|
||||||
bool isTabGroup() const
|
bool isTabGroup() const
|
||||||
{
|
{
|
||||||
return IsTabGroup;
|
return IsTabGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the container element which holds all elements in this element's tab group.
|
//! Returns the container element which holds all elements in this element's tab group.
|
||||||
IGUIElement* getTabGroup()
|
IGUIElement* getTabGroup()
|
||||||
{
|
{
|
||||||
|
@ -440,6 +480,7 @@ public:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns true if element is enabled
|
//! Returns true if element is enabled
|
||||||
/** Currently elements do _not_ care about parent-states.
|
/** Currently elements do _not_ care about parent-states.
|
||||||
So if you want to affect children you have to enable/disable them all.
|
So if you want to affect children you have to enable/disable them all.
|
||||||
|
@ -453,54 +494,63 @@ public:
|
||||||
return IsEnabled;
|
return IsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the enabled state of this element.
|
//! Sets the enabled state of this element.
|
||||||
virtual void setEnabled(bool enabled)
|
virtual void setEnabled(bool enabled)
|
||||||
{
|
{
|
||||||
IsEnabled = enabled;
|
IsEnabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the new caption of this element.
|
//! Sets the new caption of this element.
|
||||||
virtual void setText(const wchar_t* text)
|
virtual void setText(const wchar_t* text)
|
||||||
{
|
{
|
||||||
Text = text;
|
Text = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns caption of this element.
|
//! Returns caption of this element.
|
||||||
virtual const wchar_t* getText() const
|
virtual const wchar_t* getText() const
|
||||||
{
|
{
|
||||||
return Text.c_str();
|
return Text.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the new caption of this element.
|
//! Sets the new caption of this element.
|
||||||
virtual void setToolTipText(const wchar_t* text)
|
virtual void setToolTipText(const wchar_t* text)
|
||||||
{
|
{
|
||||||
ToolTipText = text;
|
ToolTipText = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns caption of this element.
|
//! Returns caption of this element.
|
||||||
virtual const core::stringw& getToolTipText() const
|
virtual const core::stringw& getToolTipText() const
|
||||||
{
|
{
|
||||||
return ToolTipText;
|
return ToolTipText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns id. Can be used to identify the element.
|
//! Returns id. Can be used to identify the element.
|
||||||
virtual s32 getID() const
|
virtual s32 getID() const
|
||||||
{
|
{
|
||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the id of this element
|
//! Sets the id of this element
|
||||||
virtual void setID(s32 id)
|
virtual void setID(s32 id)
|
||||||
{
|
{
|
||||||
ID = id;
|
ID = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Called if an event happened.
|
//! Called if an event happened.
|
||||||
bool OnEvent(const SEvent& event) override
|
bool OnEvent(const SEvent& event) override
|
||||||
{
|
{
|
||||||
return Parent ? Parent->OnEvent(event) : false;
|
return Parent ? Parent->OnEvent(event) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Brings a child to front
|
//! Brings a child to front
|
||||||
/** \return True if successful, false if not. */
|
/** \return True if successful, false if not. */
|
||||||
virtual bool bringToFront(IGUIElement* child)
|
virtual bool bringToFront(IGUIElement* child)
|
||||||
|
@ -514,6 +564,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Moves a child to the back, so it's siblings are drawn on top of it
|
//! Moves a child to the back, so it's siblings are drawn on top of it
|
||||||
/** \return True if successful, false if not. */
|
/** \return True if successful, false if not. */
|
||||||
virtual bool sendToBack(IGUIElement* child)
|
virtual bool sendToBack(IGUIElement* child)
|
||||||
|
@ -533,6 +584,7 @@ public:
|
||||||
return Children;
|
return Children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Finds the first element with the given id.
|
//! Finds the first element with the given id.
|
||||||
/** \param id: Id to search for.
|
/** \param id: Id to search for.
|
||||||
\param searchchildren: Set this to true, if also children of this
|
\param searchchildren: Set this to true, if also children of this
|
||||||
|
@ -544,7 +596,8 @@ public:
|
||||||
{
|
{
|
||||||
IGUIElement* e = 0;
|
IGUIElement* e = 0;
|
||||||
|
|
||||||
for (auto child : Children) {
|
for (auto child : Children)
|
||||||
|
{
|
||||||
if (child->getID() == id)
|
if (child->getID() == id)
|
||||||
return child;
|
return child;
|
||||||
|
|
||||||
|
@ -558,21 +611,25 @@ public:
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! returns true if the given element is a child of this one.
|
//! returns true if the given element is a child of this one.
|
||||||
//! \param child: The child element to check
|
//! \param child: The child element to check
|
||||||
bool isMyChild(IGUIElement* child) const
|
bool isMyChild(IGUIElement* child) const
|
||||||
{
|
{
|
||||||
if (!child)
|
if (!child)
|
||||||
return false;
|
return false;
|
||||||
do {
|
do
|
||||||
|
{
|
||||||
if (child->Parent)
|
if (child->Parent)
|
||||||
child = child->Parent;
|
child = child->Parent;
|
||||||
|
|
||||||
} while (child->Parent && child != this);
|
} while (child->Parent && child != this);
|
||||||
|
|
||||||
|
|
||||||
return child == this;
|
return child == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! searches elements to find the closest next element to tab to
|
//! searches elements to find the closest next element to tab to
|
||||||
/** \param startOrder: The TabOrder of the current element, -1 if none
|
/** \param startOrder: The TabOrder of the current element, -1 if none
|
||||||
\param reverse: true if searching for a lower number
|
\param reverse: true if searching for a lower number
|
||||||
|
@ -595,46 +652,62 @@ public:
|
||||||
|
|
||||||
s32 closestOrder, currentOrder;
|
s32 closestOrder, currentOrder;
|
||||||
|
|
||||||
while (it != Children.end()) {
|
while(it != Children.end())
|
||||||
|
{
|
||||||
// ignore invisible elements and their children
|
// ignore invisible elements and their children
|
||||||
if ( ( (*it)->isVisible() || includeInvisible ) &&
|
if ( ( (*it)->isVisible() || includeInvisible ) &&
|
||||||
(group == true || (*it)->isTabGroup() == false)) {
|
(group == true || (*it)->isTabGroup() == false) )
|
||||||
|
{
|
||||||
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
|
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
|
||||||
if ((*it)->isEnabled() || includeDisabled) {
|
if ( (*it)->isEnabled() || includeDisabled )
|
||||||
|
{
|
||||||
// only check tab stops and those with the same group status
|
// only check tab stops and those with the same group status
|
||||||
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) {
|
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group))
|
||||||
|
{
|
||||||
currentOrder = (*it)->getTabOrder();
|
currentOrder = (*it)->getTabOrder();
|
||||||
|
|
||||||
// is this what we're looking for?
|
// is this what we're looking for?
|
||||||
if (currentOrder == wanted) {
|
if (currentOrder == wanted)
|
||||||
|
{
|
||||||
closest = *it;
|
closest = *it;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// is it closer than the current closest?
|
// is it closer than the current closest?
|
||||||
if (closest) {
|
if (closest)
|
||||||
|
{
|
||||||
closestOrder = closest->getTabOrder();
|
closestOrder = closest->getTabOrder();
|
||||||
if ((reverse && currentOrder > closestOrder && currentOrder < startOrder) || (!reverse && currentOrder < closestOrder && currentOrder > startOrder)) {
|
if ( ( reverse && currentOrder > closestOrder && currentOrder < startOrder)
|
||||||
|
||(!reverse && currentOrder < closestOrder && currentOrder > startOrder))
|
||||||
|
{
|
||||||
closest = *it;
|
closest = *it;
|
||||||
}
|
}
|
||||||
} else if ((reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder)) {
|
}
|
||||||
|
else
|
||||||
|
if ( (reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder) )
|
||||||
|
{
|
||||||
closest = *it;
|
closest = *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
// is it before the current first?
|
// is it before the current first?
|
||||||
if (first) {
|
if (first)
|
||||||
|
{
|
||||||
closestOrder = first->getTabOrder();
|
closestOrder = first->getTabOrder();
|
||||||
|
|
||||||
if ((reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder)) {
|
if ( (reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder) )
|
||||||
|
{
|
||||||
first = *it;
|
first = *it;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
first = *it;
|
first = *it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// search within children
|
// search within children
|
||||||
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled)) {
|
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -643,6 +716,7 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the type of the gui element.
|
//! Returns the type of the gui element.
|
||||||
/** This is needed for the .NET wrapper but will be used
|
/** This is needed for the .NET wrapper but will be used
|
||||||
later for serializing and deserializing.
|
later for serializing and deserializing.
|
||||||
|
@ -667,6 +741,7 @@ public:
|
||||||
return type == Type;
|
return type == Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the type name of the gui element.
|
//! Returns the type name of the gui element.
|
||||||
/** This is needed serializing elements. */
|
/** This is needed serializing elements. */
|
||||||
virtual const c8* getTypeName() const
|
virtual const c8* getTypeName() const
|
||||||
|
@ -681,6 +756,7 @@ public:
|
||||||
return Name.c_str();
|
return Name.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the name of the element.
|
//! Sets the name of the element.
|
||||||
/** \param name New name of the gui element. */
|
/** \param name New name of the gui element. */
|
||||||
virtual void setName(const c8* name)
|
virtual void setName(const c8* name)
|
||||||
|
@ -688,6 +764,7 @@ public:
|
||||||
Name = name;
|
Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the name of the element.
|
//! Sets the name of the element.
|
||||||
/** \param name New name of the gui element. */
|
/** \param name New name of the gui element. */
|
||||||
virtual void setName(const core::stringc& name)
|
virtual void setName(const core::stringc& name)
|
||||||
|
@ -695,17 +772,20 @@ public:
|
||||||
Name = name;
|
Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns whether the element takes input from the IME
|
//! Returns whether the element takes input from the IME
|
||||||
virtual bool acceptsIME()
|
virtual bool acceptsIME()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// not virtual because needed in constructor
|
// not virtual because needed in constructor
|
||||||
void addChildToEnd(IGUIElement* child)
|
void addChildToEnd(IGUIElement* child)
|
||||||
{
|
{
|
||||||
if (child) {
|
if (child)
|
||||||
|
{
|
||||||
child->grab(); // prevent destruction when removed
|
child->grab(); // prevent destruction when removed
|
||||||
child->remove(); // remove from old parent
|
child->remove(); // remove from old parent
|
||||||
child->LastParentRect = getAbsolutePosition();
|
child->LastParentRect = getAbsolutePosition();
|
||||||
|
@ -716,8 +796,7 @@ protected:
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
template<typename Iterator>
|
template<typename Iterator>
|
||||||
static size_t _fastSetChecksum(Iterator begin, Iterator end)
|
static size_t _fastSetChecksum(Iterator begin, Iterator end) {
|
||||||
{
|
|
||||||
std::hash<typename Iterator::value_type> hasher;
|
std::hash<typename Iterator::value_type> hasher;
|
||||||
size_t checksum = 0;
|
size_t checksum = 0;
|
||||||
for (Iterator it = begin; it != end; ++it) {
|
for (Iterator it = begin; it != end; ++it) {
|
||||||
|
@ -735,7 +814,8 @@ protected:
|
||||||
const std::vector<IGUIElement*> &neworder)
|
const std::vector<IGUIElement*> &neworder)
|
||||||
{
|
{
|
||||||
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
|
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
|
||||||
for (auto e : neworder) {
|
for (auto e : neworder)
|
||||||
|
{
|
||||||
*from = e;
|
*from = e;
|
||||||
e->ParentPos = from;
|
e->ParentPos = from;
|
||||||
++from;
|
++from;
|
||||||
|
@ -743,6 +823,7 @@ protected:
|
||||||
assert(from == to);
|
assert(from == to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// not virtual because needed in constructor
|
// not virtual because needed in constructor
|
||||||
void recalculateAbsolutePosition(bool recursive)
|
void recalculateAbsolutePosition(bool recursive)
|
||||||
{
|
{
|
||||||
|
@ -750,15 +831,18 @@ protected:
|
||||||
core::rect<s32> parentAbsoluteClip;
|
core::rect<s32> parentAbsoluteClip;
|
||||||
f32 fw=0.f, fh=0.f;
|
f32 fw=0.f, fh=0.f;
|
||||||
|
|
||||||
if (Parent) {
|
if (Parent)
|
||||||
|
{
|
||||||
parentAbsolute = Parent->AbsoluteRect;
|
parentAbsolute = Parent->AbsoluteRect;
|
||||||
|
|
||||||
if (NoClip) {
|
if (NoClip)
|
||||||
|
{
|
||||||
IGUIElement* p=this;
|
IGUIElement* p=this;
|
||||||
while (p->Parent)
|
while (p->Parent)
|
||||||
p = p->Parent;
|
p = p->Parent;
|
||||||
parentAbsoluteClip = p->AbsoluteClippingRect;
|
parentAbsoluteClip = p->AbsoluteClippingRect;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
parentAbsoluteClip = Parent->AbsoluteClippingRect;
|
parentAbsoluteClip = Parent->AbsoluteClippingRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -771,7 +855,8 @@ protected:
|
||||||
if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE)
|
if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE)
|
||||||
fh = (f32)parentAbsolute.getHeight();
|
fh = (f32)parentAbsolute.getHeight();
|
||||||
|
|
||||||
switch (AlignLeft) {
|
switch (AlignLeft)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -785,7 +870,8 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignRight) {
|
switch (AlignRight)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -799,7 +885,8 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignTop) {
|
switch (AlignTop)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -813,7 +900,8 @@ protected:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignBottom) {
|
switch (AlignBottom)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
|
@ -854,15 +942,18 @@ protected:
|
||||||
|
|
||||||
LastParentRect = parentAbsolute;
|
LastParentRect = parentAbsolute;
|
||||||
|
|
||||||
if (recursive) {
|
if ( recursive )
|
||||||
|
{
|
||||||
// update all children
|
// update all children
|
||||||
for (auto child : Children) {
|
for (auto child : Children)
|
||||||
|
{
|
||||||
child->recalculateAbsolutePosition(recursive);
|
child->recalculateAbsolutePosition(recursive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! List of all children of this element
|
//! List of all children of this element
|
||||||
std::list<IGUIElement*> Children;
|
std::list<IGUIElement*> Children;
|
||||||
|
|
||||||
|
@ -937,5 +1028,9 @@ protected:
|
||||||
EGUI_ELEMENT_TYPE Type;
|
EGUI_ELEMENT_TYPE Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_ENVIRONMENT_H_INCLUDED__
|
||||||
|
#define __I_GUI_ENVIRONMENT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "IGUISkin.h"
|
#include "IGUISkin.h"
|
||||||
|
@ -58,6 +59,7 @@ class IGUIWindow;
|
||||||
class IGUIEnvironment : public virtual IReferenceCounted
|
class IGUIEnvironment : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Draws all gui elements by traversing the GUI environment starting at the root node.
|
//! Draws all gui elements by traversing the GUI environment starting at the root node.
|
||||||
/** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
|
/** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
|
||||||
Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
|
Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
|
||||||
|
@ -151,6 +153,7 @@ public:
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0;
|
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0;
|
||||||
|
|
||||||
|
|
||||||
//! Creates the image list from the given texture.
|
//! Creates the image list from the given texture.
|
||||||
/** \param texture Texture to split into images
|
/** \param texture Texture to split into images
|
||||||
\param imageSize Dimension of each image
|
\param imageSize Dimension of each image
|
||||||
|
@ -410,5 +413,9 @@ public:
|
||||||
virtual void addToDeletionQueue(IGUIElement* element) = 0;
|
virtual void addToDeletionQueue(IGUIElement* element) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
|
||||||
|
#define __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -23,9 +24,10 @@ namespace gui
|
||||||
class IGUIFileOpenDialog : public IGUIElement
|
class IGUIFileOpenDialog : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIFileOpenDialog(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected.
|
//! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected.
|
||||||
virtual const wchar_t* getFileName() const = 0;
|
virtual const wchar_t* getFileName() const = 0;
|
||||||
|
@ -40,5 +42,9 @@ public:
|
||||||
virtual const wchar_t* getDirectoryNameW() const = 0;
|
virtual const wchar_t* getDirectoryNameW() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_FONT_H_INCLUDED__
|
||||||
|
#define __I_GUI_FONT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
|
@ -38,6 +39,7 @@ enum EGUI_FONT_TYPE
|
||||||
class IGUIFont : public virtual IReferenceCounted
|
class IGUIFont : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Draws some text and clips it to the specified rectangle if wanted.
|
//! Draws some text and clips it to the specified rectangle if wanted.
|
||||||
/** \param text: Text to draw
|
/** \param text: Text to draw
|
||||||
\param position: Rectangle specifying position where to draw the text.
|
\param position: Rectangle specifying position where to draw the text.
|
||||||
|
@ -97,3 +99,6 @@ public:
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_FONT_BITMAP_H_INCLUDED__
|
||||||
|
#define __I_GUI_FONT_BITMAP_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIFont.h"
|
#include "IGUIFont.h"
|
||||||
|
|
||||||
|
@ -16,6 +17,7 @@ class IGUISpriteBank;
|
||||||
class IGUIFontBitmap : public IGUIFont
|
class IGUIFontBitmap : public IGUIFont
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns the type of this font
|
//! Returns the type of this font
|
||||||
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||||
|
|
||||||
|
@ -39,3 +41,6 @@ public:
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_IMAGE_H_INCLUDED__
|
||||||
|
#define __I_GUI_IMAGE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -18,9 +19,10 @@ namespace gui
|
||||||
class IGUIImage : public IGUIElement
|
class IGUIImage : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIImage(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Sets an image texture
|
//! Sets an image texture
|
||||||
virtual void setImage(video::ITexture* image) = 0;
|
virtual void setImage(video::ITexture* image) = 0;
|
||||||
|
@ -78,5 +80,8 @@ public:
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_IMAGE_LIST_H_INCLUDED__
|
||||||
|
#define __I_GUI_IMAGE_LIST_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
|
@ -16,6 +17,7 @@ namespace gui
|
||||||
class IGUIImageList : public virtual IReferenceCounted
|
class IGUIImageList : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IGUIImageList() {};
|
virtual ~IGUIImageList() {};
|
||||||
|
|
||||||
|
@ -38,3 +40,6 @@ public:
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_LIST_BOX_H_INCLUDED__
|
||||||
|
#define __I_GUI_LIST_BOX_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
|
@ -29,6 +30,7 @@ enum EGUI_LISTBOX_COLOR
|
||||||
EGUI_LBC_COUNT
|
EGUI_LBC_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Default list box GUI element.
|
//! Default list box GUI element.
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
\li EGET_LISTBOX_CHANGED
|
\li EGET_LISTBOX_CHANGED
|
||||||
|
@ -38,8 +40,8 @@ class IGUIListBox : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIListBox(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! returns amount of list items
|
//! returns amount of list items
|
||||||
virtual u32 getItemCount() const = 0;
|
virtual u32 getItemCount() const = 0;
|
||||||
|
@ -132,5 +134,9 @@ public:
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_SCROLL_BAR_H_INCLUDED__
|
||||||
|
#define __I_GUI_SCROLL_BAR_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -18,9 +19,10 @@ namespace gui
|
||||||
class IGUIScrollBar : public IGUIElement
|
class IGUIScrollBar : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! sets the maximum value of the scrollbar.
|
//! sets the maximum value of the scrollbar.
|
||||||
virtual void setMax(s32 max) = 0;
|
virtual void setMax(s32 max) = 0;
|
||||||
|
@ -55,5 +57,9 @@ public:
|
||||||
virtual void setPos(s32 pos) = 0;
|
virtual void setPos(s32 pos) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_SKIN_H_INCLUDED__
|
||||||
|
#define __I_GUI_SKIN_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EGUIAlignment.h"
|
#include "EGUIAlignment.h"
|
||||||
|
@ -45,7 +46,8 @@ enum EGUI_SKIN_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for gui element types
|
//! Names for gui element types
|
||||||
const c8 *const GUISkinTypeNames[EGST_COUNT + 1] = {
|
const c8* const GUISkinTypeNames[EGST_COUNT+1] =
|
||||||
|
{
|
||||||
"windowsClassic",
|
"windowsClassic",
|
||||||
"windowsMetallic",
|
"windowsMetallic",
|
||||||
"burning",
|
"burning",
|
||||||
|
@ -53,6 +55,7 @@ const c8 *const GUISkinTypeNames[EGST_COUNT + 1] = {
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Enumeration for skin colors
|
//! Enumeration for skin colors
|
||||||
enum EGUI_DEFAULT_COLOR
|
enum EGUI_DEFAULT_COLOR
|
||||||
{
|
{
|
||||||
|
@ -113,7 +116,8 @@ enum EGUI_DEFAULT_COLOR
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for default skin colors
|
//! Names for default skin colors
|
||||||
const c8 *const GUISkinColorNames[EGDC_COUNT + 1] = {
|
const c8* const GUISkinColorNames[EGDC_COUNT+1] =
|
||||||
|
{
|
||||||
"3DDarkShadow",
|
"3DDarkShadow",
|
||||||
"3DShadow",
|
"3DShadow",
|
||||||
"3DFace",
|
"3DFace",
|
||||||
|
@ -197,8 +201,10 @@ enum EGUI_DEFAULT_SIZE
|
||||||
EGDS_COUNT
|
EGDS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Names for default skin sizes
|
//! Names for default skin sizes
|
||||||
const c8 *const GUISkinSizeNames[EGDS_COUNT + 1] = {
|
const c8* const GUISkinSizeNames[EGDS_COUNT+1] =
|
||||||
|
{
|
||||||
"ScrollBarSize",
|
"ScrollBarSize",
|
||||||
"MenuHeight",
|
"MenuHeight",
|
||||||
"WindowButtonWidth",
|
"WindowButtonWidth",
|
||||||
|
@ -222,9 +228,10 @@ const c8 *const GUISkinSizeNames[EGDS_COUNT + 1] = {
|
||||||
"ButtonPressedTextOffsetY",
|
"ButtonPressedTextOffsetY",
|
||||||
"ButtonPressedSpriteOffsetX",
|
"ButtonPressedSpriteOffsetX",
|
||||||
"ButtonPressedSpriteOffsetY",
|
"ButtonPressedSpriteOffsetY",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum EGUI_DEFAULT_TEXT
|
enum EGUI_DEFAULT_TEXT
|
||||||
{
|
{
|
||||||
//! Text for the OK button on a message box
|
//! Text for the OK button on a message box
|
||||||
|
@ -249,7 +256,8 @@ enum EGUI_DEFAULT_TEXT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for default skin sizes
|
//! Names for default skin sizes
|
||||||
const c8 *const GUISkinTextNames[EGDT_COUNT + 1] = {
|
const c8* const GUISkinTextNames[EGDT_COUNT+1] =
|
||||||
|
{
|
||||||
"MessageBoxOkay",
|
"MessageBoxOkay",
|
||||||
"MessageBoxCancel",
|
"MessageBoxCancel",
|
||||||
"MessageBoxYes",
|
"MessageBoxYes",
|
||||||
|
@ -258,7 +266,7 @@ const c8 *const GUISkinTextNames[EGDT_COUNT + 1] = {
|
||||||
"WindowButtonMaximize",
|
"WindowButtonMaximize",
|
||||||
"WindowButtonMinimize",
|
"WindowButtonMinimize",
|
||||||
"WindowButtonRestore",
|
"WindowButtonRestore",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Customizable symbols for GUI
|
//! Customizable symbols for GUI
|
||||||
|
@ -316,7 +324,8 @@ enum EGUI_DEFAULT_ICON
|
||||||
EGDI_COUNT
|
EGDI_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
const c8 *const GUISkinIconNames[EGDI_COUNT + 1] = {
|
const c8* const GUISkinIconNames[EGDI_COUNT+1] =
|
||||||
|
{
|
||||||
"windowMaximize",
|
"windowMaximize",
|
||||||
"windowRestore",
|
"windowRestore",
|
||||||
"windowClose",
|
"windowClose",
|
||||||
|
@ -340,7 +349,7 @@ const c8 *const GUISkinIconNames[EGDI_COUNT + 1] = {
|
||||||
"collapse",
|
"collapse",
|
||||||
"file",
|
"file",
|
||||||
"directory",
|
"directory",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
// Customizable fonts
|
// Customizable fonts
|
||||||
|
@ -361,19 +370,21 @@ enum EGUI_DEFAULT_FONT
|
||||||
EGDF_COUNT
|
EGDF_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
const c8 *const GUISkinFontNames[EGDF_COUNT + 1] = {
|
const c8* const GUISkinFontNames[EGDF_COUNT+1] =
|
||||||
|
{
|
||||||
"defaultFont",
|
"defaultFont",
|
||||||
"buttonFont",
|
"buttonFont",
|
||||||
"windowFont",
|
"windowFont",
|
||||||
"menuFont",
|
"menuFont",
|
||||||
"tooltipFont",
|
"tooltipFont",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! A skin modifies the look of the GUI elements.
|
//! A skin modifies the look of the GUI elements.
|
||||||
class IGUISkin : virtual public IReferenceCounted
|
class IGUISkin : virtual public IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! returns default color
|
//! returns default color
|
||||||
virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
|
virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
|
||||||
|
|
||||||
|
@ -561,5 +572,9 @@ public:
|
||||||
virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
|
virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||||
|
#define __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
|
@ -24,13 +25,12 @@ namespace gui
|
||||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||||
struct SGUISpriteFrame
|
struct SGUISpriteFrame
|
||||||
{
|
{
|
||||||
SGUISpriteFrame() :
|
SGUISpriteFrame() : textureNumber(0), rectNumber(0)
|
||||||
textureNumber(0), rectNumber(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SGUISpriteFrame(u32 textureIndex, u32 positionIndex) :
|
SGUISpriteFrame(u32 textureIndex, u32 positionIndex)
|
||||||
textureNumber(textureIndex), rectNumber(positionIndex)
|
: textureNumber(textureIndex), rectNumber(positionIndex)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,10 +45,8 @@ struct SGUISpriteFrame
|
||||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||||
struct SGUISprite
|
struct SGUISprite
|
||||||
{
|
{
|
||||||
SGUISprite() :
|
SGUISprite() : frameTime(0) {}
|
||||||
frameTime(0) {}
|
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0)
|
||||||
SGUISprite(const SGUISpriteFrame &firstFrame) :
|
|
||||||
frameTime(0)
|
|
||||||
{
|
{
|
||||||
Frames.push_back(firstFrame);
|
Frames.push_back(firstFrame);
|
||||||
}
|
}
|
||||||
|
@ -57,6 +55,7 @@ struct SGUISprite
|
||||||
u32 frameTime;
|
u32 frameTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Sprite bank interface.
|
//! Sprite bank interface.
|
||||||
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
||||||
* for more information how to use the spritebank.
|
* for more information how to use the spritebank.
|
||||||
|
@ -64,6 +63,7 @@ struct SGUISprite
|
||||||
class IGUISpriteBank : public virtual IReferenceCounted
|
class IGUISpriteBank : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns the list of rectangles held by the sprite bank
|
//! Returns the list of rectangles held by the sprite bank
|
||||||
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
||||||
|
|
||||||
|
@ -134,5 +134,9 @@ public:
|
||||||
bool loop=true, bool center=false) = 0;
|
bool loop=true, bool center=false) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_STATIC_TEXT_H_INCLUDED__
|
||||||
|
#define __I_GUI_STATIC_TEXT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
|
@ -17,9 +18,10 @@ class IGUIFont;
|
||||||
class IGUIStaticText : public IGUIElement
|
class IGUIStaticText : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIStaticText(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Sets another skin independent font.
|
//! Sets another skin independent font.
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
|
@ -129,5 +131,9 @@ public:
|
||||||
virtual bool isRightToLeft() const = 0;
|
virtual bool isRightToLeft() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_TAB_CONTROL_H_INCLUDED__
|
||||||
|
#define __I_GUI_TAB_CONTROL_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
|
@ -21,9 +22,10 @@ class IGUITab;
|
||||||
class IGUITabControl : public IGUIElement
|
class IGUITabControl : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUITabControl(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Adds a tab
|
//! Adds a tab
|
||||||
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
||||||
|
@ -122,9 +124,10 @@ public:
|
||||||
class IGUITab : public IGUIElement
|
class IGUITab : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUITab(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! sets if the tab should draw its background
|
//! sets if the tab should draw its background
|
||||||
virtual void setDrawBackground(bool draw=true) = 0;
|
virtual void setDrawBackground(bool draw=true) = 0;
|
||||||
|
@ -147,3 +150,6 @@ public:
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_GUI_TOOL_BAR_H_INCLUDED__
|
||||||
|
#define __I_GUI_TOOL_BAR_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -20,9 +21,10 @@ class IGUIButton;
|
||||||
class IGUIToolBar : public IGUIElement
|
class IGUIToolBar : public IGUIElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IGUIToolBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, core::rect<s32> rectangle) :
|
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
||||||
|
|
||||||
//! Adds a button to the tool bar
|
//! Adds a button to the tool bar
|
||||||
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
||||||
|
@ -30,5 +32,9 @@ public:
|
||||||
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
183
include/IImage.h
183
include/IImage.h
|
@ -2,13 +2,14 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_IMAGE_H_INCLUDED__
|
||||||
|
#define __I_IMAGE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
#include <cstring>
|
#include <string.h>
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -23,9 +24,13 @@ NOTE: Floating point formats are not well supported yet. Basically only getData(
|
||||||
class IImage : public virtual IReferenceCounted
|
class IImage : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size, bool deleteMemory) :
|
IImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size, bool deleteMemory) :
|
||||||
Format(format), Size(size), Data(0), MipMapsData(0), BytesPerPixel(0), Pitch(0), DeleteMemory(deleteMemory), DeleteMipMapsMemory(false)
|
Format(format), Size(size), Data(0), MipMapsData(0), BytesPerPixel(0), Pitch(0), DeleteMemory(deleteMemory), DeleteMipMapsMemory(false)
|
||||||
|
#if defined(IRRLICHT_sRGB)
|
||||||
|
,Format_sRGB(1)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
BytesPerPixel = getBitsPerPixelFromFormat(Format) / 8;
|
BytesPerPixel = getBitsPerPixelFromFormat(Format) / 8;
|
||||||
Pitch = BytesPerPixel * Size.Width;
|
Pitch = BytesPerPixel * Size.Width;
|
||||||
|
@ -47,6 +52,18 @@ public:
|
||||||
return Format;
|
return Format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(IRRLICHT_sRGB)
|
||||||
|
//! Texture is linear/sRGB (should be part of ColorFormat: default yes)
|
||||||
|
int get_sRGB() const
|
||||||
|
{
|
||||||
|
return Format_sRGB;
|
||||||
|
}
|
||||||
|
void set_sRGB(int val)
|
||||||
|
{
|
||||||
|
Format_sRGB = val;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Returns width and height of image data.
|
//! Returns width and height of image data.
|
||||||
const core::dimension2d<u32>& getDimension() const
|
const core::dimension2d<u32>& getDimension() const
|
||||||
{
|
{
|
||||||
|
@ -87,7 +104,8 @@ public:
|
||||||
//! Returns mask for red value of a pixel
|
//! Returns mask for red value of a pixel
|
||||||
u32 getRedMask() const
|
u32 getRedMask() const
|
||||||
{
|
{
|
||||||
switch (Format) {
|
switch (Format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 0x1F << 10;
|
return 0x1F << 10;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -104,7 +122,8 @@ public:
|
||||||
//! Returns mask for green value of a pixel
|
//! Returns mask for green value of a pixel
|
||||||
u32 getGreenMask() const
|
u32 getGreenMask() const
|
||||||
{
|
{
|
||||||
switch (Format) {
|
switch (Format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 0x1F << 5;
|
return 0x1F << 5;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -121,7 +140,8 @@ public:
|
||||||
//! Returns mask for blue value of a pixel
|
//! Returns mask for blue value of a pixel
|
||||||
u32 getBlueMask() const
|
u32 getBlueMask() const
|
||||||
{
|
{
|
||||||
switch (Format) {
|
switch (Format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 0x1F;
|
return 0x1F;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -138,7 +158,8 @@ public:
|
||||||
//! Returns mask for alpha value of a pixel
|
//! Returns mask for alpha value of a pixel
|
||||||
u32 getAlphaMask() const
|
u32 getAlphaMask() const
|
||||||
{
|
{
|
||||||
switch (Format) {
|
switch (Format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 0x1 << 15;
|
return 0x1 << 15;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -170,13 +191,15 @@ public:
|
||||||
return getMipMapsSize(Size, mipmapLevel);
|
return getMipMapsSize(Size, mipmapLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Calculate mipmap size for a certain level
|
//! Calculate mipmap size for a certain level
|
||||||
/** level 0 will be full image size. Every further level is half the size. */
|
/** level 0 will be full image size. Every further level is half the size. */
|
||||||
static core::dimension2du getMipMapsSize(const core::dimension2du& sizeLevel0, u32 mipmapLevel)
|
static core::dimension2du getMipMapsSize(const core::dimension2du& sizeLevel0, u32 mipmapLevel)
|
||||||
{
|
{
|
||||||
core::dimension2du result(sizeLevel0);
|
core::dimension2du result(sizeLevel0);
|
||||||
u32 i=0;
|
u32 i=0;
|
||||||
while (i != mipmapLevel) {
|
while (i != mipmapLevel)
|
||||||
|
{
|
||||||
if (result.Width>1)
|
if (result.Width>1)
|
||||||
result.Width >>= 1;
|
result.Width >>= 1;
|
||||||
if (result.Height>1)
|
if (result.Height>1)
|
||||||
|
@ -189,6 +212,7 @@ public:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get mipmaps data.
|
//! Get mipmaps data.
|
||||||
/** Note that different mip levels are just behind each other in memory block.
|
/** Note that different mip levels are just behind each other in memory block.
|
||||||
So if you just get level 1 you also have the data for all other levels.
|
So if you just get level 1 you also have the data for all other levels.
|
||||||
|
@ -196,12 +220,14 @@ public:
|
||||||
*/
|
*/
|
||||||
void* getMipMapsData(irr::u32 mipLevel=1) const
|
void* getMipMapsData(irr::u32 mipLevel=1) const
|
||||||
{
|
{
|
||||||
if (MipMapsData && mipLevel > 0) {
|
if ( MipMapsData && mipLevel > 0)
|
||||||
|
{
|
||||||
size_t dataSize = 0;
|
size_t dataSize = 0;
|
||||||
core::dimension2du mipSize(Size);
|
core::dimension2du mipSize(Size);
|
||||||
u32 i = 1; // We want the start of data for this level, not end.
|
u32 i = 1; // We want the start of data for this level, not end.
|
||||||
|
|
||||||
while (i != mipLevel) {
|
while (i != mipLevel)
|
||||||
|
{
|
||||||
if (mipSize.Width > 1)
|
if (mipSize.Width > 1)
|
||||||
mipSize.Width >>= 1;
|
mipSize.Width >>= 1;
|
||||||
|
|
||||||
|
@ -232,24 +258,31 @@ public:
|
||||||
destruction. */
|
destruction. */
|
||||||
void setMipMapsData(void* data, bool ownForeignMemory)
|
void setMipMapsData(void* data, bool ownForeignMemory)
|
||||||
{
|
{
|
||||||
if (data != MipMapsData) {
|
if (data != MipMapsData)
|
||||||
if (DeleteMipMapsMemory) {
|
{
|
||||||
|
if (DeleteMipMapsMemory)
|
||||||
|
{
|
||||||
delete[] MipMapsData;
|
delete[] MipMapsData;
|
||||||
|
|
||||||
DeleteMipMapsMemory = false;
|
DeleteMipMapsMemory = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data) {
|
if (data)
|
||||||
if (ownForeignMemory) {
|
{
|
||||||
|
if (ownForeignMemory)
|
||||||
|
{
|
||||||
MipMapsData = static_cast<u8*>(data);
|
MipMapsData = static_cast<u8*>(data);
|
||||||
|
|
||||||
DeleteMipMapsMemory = false;
|
DeleteMipMapsMemory = false;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
u32 dataSize = 0;
|
u32 dataSize = 0;
|
||||||
u32 width = Size.Width;
|
u32 width = Size.Width;
|
||||||
u32 height = Size.Height;
|
u32 height = Size.Height;
|
||||||
|
|
||||||
do {
|
do
|
||||||
|
{
|
||||||
if (width > 1)
|
if (width > 1)
|
||||||
width >>= 1;
|
width >>= 1;
|
||||||
|
|
||||||
|
@ -264,7 +297,9 @@ public:
|
||||||
|
|
||||||
DeleteMipMapsMemory = true;
|
DeleteMipMapsMemory = true;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
MipMapsData = 0;
|
MipMapsData = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,7 +352,8 @@ public:
|
||||||
//! get the amount of Bits per Pixel of the given color format
|
//! get the amount of Bits per Pixel of the given color format
|
||||||
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
|
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch(format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
return 16;
|
return 16;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
|
@ -326,6 +362,28 @@ public:
|
||||||
return 24;
|
return 24;
|
||||||
case ECF_A8R8G8B8:
|
case ECF_A8R8G8B8:
|
||||||
return 32;
|
return 32;
|
||||||
|
case ECF_DXT1:
|
||||||
|
return 16;
|
||||||
|
case ECF_DXT2:
|
||||||
|
case ECF_DXT3:
|
||||||
|
case ECF_DXT4:
|
||||||
|
case ECF_DXT5:
|
||||||
|
return 32;
|
||||||
|
case ECF_PVRTC_RGB2:
|
||||||
|
return 12;
|
||||||
|
case ECF_PVRTC_ARGB2:
|
||||||
|
case ECF_PVRTC2_ARGB2:
|
||||||
|
return 16;
|
||||||
|
case ECF_PVRTC_RGB4:
|
||||||
|
return 24;
|
||||||
|
case ECF_PVRTC_ARGB4:
|
||||||
|
case ECF_PVRTC2_ARGB4:
|
||||||
|
return 32;
|
||||||
|
case ECF_ETC1:
|
||||||
|
case ECF_ETC2_RGB:
|
||||||
|
return 24;
|
||||||
|
case ECF_ETC2_ARGB:
|
||||||
|
return 32;
|
||||||
case ECF_D16:
|
case ECF_D16:
|
||||||
return 16;
|
return 16;
|
||||||
case ECF_D32:
|
case ECF_D32:
|
||||||
|
@ -360,23 +418,81 @@ public:
|
||||||
//! calculate image data size in bytes for selected format, width and height.
|
//! calculate image data size in bytes for selected format, width and height.
|
||||||
static u32 getDataSizeFromFormat(ECOLOR_FORMAT format, u32 width, u32 height)
|
static u32 getDataSizeFromFormat(ECOLOR_FORMAT format, u32 width, u32 height)
|
||||||
{
|
{
|
||||||
// non-compressed formats
|
u32 imageSize = 0;
|
||||||
u32 imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
|
|
||||||
|
switch (format)
|
||||||
|
{
|
||||||
|
case ECF_DXT1:
|
||||||
|
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 8;
|
||||||
|
break;
|
||||||
|
case ECF_DXT2:
|
||||||
|
case ECF_DXT3:
|
||||||
|
case ECF_DXT4:
|
||||||
|
case ECF_DXT5:
|
||||||
|
imageSize = ((width + 3) / 4) * ((height + 3) / 4) * 16;
|
||||||
|
break;
|
||||||
|
case ECF_PVRTC_RGB2:
|
||||||
|
case ECF_PVRTC_ARGB2:
|
||||||
|
imageSize = (core::max_<u32>(width, 16) * core::max_<u32>(height, 8) * 2 + 7) / 8;
|
||||||
|
break;
|
||||||
|
case ECF_PVRTC_RGB4:
|
||||||
|
case ECF_PVRTC_ARGB4:
|
||||||
|
imageSize = (core::max_<u32>(width, 8) * core::max_<u32>(height, 8) * 4 + 7) / 8;
|
||||||
|
break;
|
||||||
|
case ECF_PVRTC2_ARGB2:
|
||||||
|
imageSize = core::ceil32(width / 8.0f) * core::ceil32(height / 4.0f) * 8;
|
||||||
|
break;
|
||||||
|
case ECF_PVRTC2_ARGB4:
|
||||||
|
case ECF_ETC1:
|
||||||
|
case ECF_ETC2_RGB:
|
||||||
|
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 8;
|
||||||
|
break;
|
||||||
|
case ECF_ETC2_ARGB:
|
||||||
|
imageSize = core::ceil32(width / 4.0f) * core::ceil32(height / 4.0f) * 16;
|
||||||
|
break;
|
||||||
|
default: // uncompressed formats
|
||||||
|
imageSize = getBitsPerPixelFromFormat(format) / 8 * width;
|
||||||
imageSize *= height;
|
imageSize *= height;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return imageSize;
|
return imageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Define to check for all compressed image formats cases in a switch
|
||||||
|
#define IRR_CASE_IIMAGE_COMPRESSED_FORMAT\
|
||||||
|
case ECF_DXT1:\
|
||||||
|
case ECF_DXT2:\
|
||||||
|
case ECF_DXT3:\
|
||||||
|
case ECF_DXT4:\
|
||||||
|
case ECF_DXT5:\
|
||||||
|
case ECF_PVRTC_RGB2:\
|
||||||
|
case ECF_PVRTC_ARGB2:\
|
||||||
|
case ECF_PVRTC2_ARGB2:\
|
||||||
|
case ECF_PVRTC_RGB4:\
|
||||||
|
case ECF_PVRTC_ARGB4:\
|
||||||
|
case ECF_PVRTC2_ARGB4:\
|
||||||
|
case ECF_ETC1:\
|
||||||
|
case ECF_ETC2_RGB:\
|
||||||
|
case ECF_ETC2_ARGB:
|
||||||
|
|
||||||
//! check if this is compressed color format
|
//! check if this is compressed color format
|
||||||
static bool isCompressedFormat(const ECOLOR_FORMAT format)
|
static bool isCompressedFormat(const ECOLOR_FORMAT format)
|
||||||
{
|
{
|
||||||
|
switch(format)
|
||||||
|
{
|
||||||
|
IRR_CASE_IIMAGE_COMPRESSED_FORMAT
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! check if the color format is only viable for depth/stencil textures
|
//! check if the color format is only viable for depth/stencil textures
|
||||||
static bool isDepthFormat(const ECOLOR_FORMAT format)
|
static bool isDepthFormat(const ECOLOR_FORMAT format)
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch(format)
|
||||||
|
{
|
||||||
case ECF_D16:
|
case ECF_D16:
|
||||||
case ECF_D32:
|
case ECF_D32:
|
||||||
case ECF_D24S8:
|
case ECF_D24S8:
|
||||||
|
@ -392,7 +508,8 @@ public:
|
||||||
if (isCompressedFormat(format))
|
if (isCompressedFormat(format))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (format) {
|
switch(format)
|
||||||
|
{
|
||||||
case ECF_R16F:
|
case ECF_R16F:
|
||||||
case ECF_G16R16F:
|
case ECF_G16R16F:
|
||||||
case ECF_A16B16G16R16F:
|
case ECF_A16B16G16R16F:
|
||||||
|
@ -406,6 +523,22 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)
|
||||||
|
static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format)
|
||||||
|
{
|
||||||
|
switch (format)
|
||||||
|
{
|
||||||
|
case ECF_A1R5G5B5:
|
||||||
|
case ECF_R5G6B5:
|
||||||
|
case ECF_R8G8B8:
|
||||||
|
case ECF_A8R8G8B8:
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ECOLOR_FORMAT Format;
|
ECOLOR_FORMAT Format;
|
||||||
core::dimension2d<u32> Size;
|
core::dimension2d<u32> Size;
|
||||||
|
@ -418,7 +551,15 @@ protected:
|
||||||
|
|
||||||
bool DeleteMemory;
|
bool DeleteMemory;
|
||||||
bool DeleteMipMapsMemory;
|
bool DeleteMipMapsMemory;
|
||||||
|
|
||||||
|
#if defined(IRRLICHT_sRGB)
|
||||||
|
int Format_sRGB;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SURFACE_LOADER_H_INCLUDED__
|
||||||
|
#define __I_SURFACE_LOADER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "IImage.h"
|
#include "IImage.h"
|
||||||
|
@ -27,6 +28,7 @@ IVideoDriver::addExternalImageLoader() to the engine. */
|
||||||
class IImageLoader : public virtual IReferenceCounted
|
class IImageLoader : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Check if the file might be loaded by this class
|
//! Check if the file might be loaded by this class
|
||||||
/** Check is based on the file extension (e.g. ".tga")
|
/** Check is based on the file extension (e.g. ".tga")
|
||||||
\param filename Name of file to check.
|
\param filename Name of file to check.
|
||||||
|
@ -45,5 +47,9 @@ public:
|
||||||
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef _I_IMAGE_WRITER_H_INCLUDED__
|
||||||
|
#define _I_IMAGE_WRITER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
|
@ -19,6 +20,7 @@ namespace video
|
||||||
{
|
{
|
||||||
class IImage;
|
class IImage;
|
||||||
|
|
||||||
|
|
||||||
//! Interface for writing software image data.
|
//! Interface for writing software image data.
|
||||||
class IImageWriter : public IReferenceCounted
|
class IImageWriter : public IReferenceCounted
|
||||||
{
|
{
|
||||||
|
@ -38,3 +40,6 @@ public:
|
||||||
|
|
||||||
} // namespace video
|
} // namespace video
|
||||||
} // namespace irr
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif // _I_IMAGE_WRITER_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_INDEX_BUFFER_H_INCLUDED__
|
||||||
|
#define __I_INDEX_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
|
@ -23,6 +24,7 @@ namespace scene
|
||||||
class IIndexBuffer : public virtual IReferenceCounted
|
class IIndexBuffer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual void* getData() =0;
|
virtual void* getData() =0;
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const =0;
|
virtual video::E_INDEX_TYPE getType() const =0;
|
||||||
|
@ -55,5 +57,9 @@ public:
|
||||||
virtual u32 getChangedID() const = 0;
|
virtual u32 getChangedID() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_LOGGER_H_INCLUDED__
|
||||||
|
#define __I_LOGGER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
|
|
||||||
|
@ -32,10 +33,12 @@ enum ELOG_LEVEL
|
||||||
ELL_NONE
|
ELL_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Interface for logging messages, warnings and errors
|
//! Interface for logging messages, warnings and errors
|
||||||
class ILogger : public virtual IReferenceCounted
|
class ILogger : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~ILogger() {}
|
virtual ~ILogger() {}
|
||||||
|
|
||||||
|
@ -70,6 +73,30 @@ public:
|
||||||
filtered with these levels. If you want to be a text displayed,
|
filtered with these levels. If you want to be a text displayed,
|
||||||
independent on what level filter is set, use ELL_NONE. */
|
independent on what level filter is set, use ELL_NONE. */
|
||||||
virtual void log(const c8* text, const c8* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
virtual void log(const c8* text, const c8* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
|
virtual void log(const c8* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
|
|
||||||
|
//! Prints out a text into the log
|
||||||
|
/** \param text: Text to print out.
|
||||||
|
\param hint: Additional info. This string is added after a " :" to the
|
||||||
|
string.
|
||||||
|
\param ll: Log level of the text. If the text is an error, set
|
||||||
|
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
||||||
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
|
filtered with these levels. If you want to be a text displayed,
|
||||||
|
independent on what level filter is set, use ELL_NONE. */
|
||||||
|
virtual void log(const wchar_t* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
|
|
||||||
|
//! Prints out a text into the log
|
||||||
|
/** \param text: Text to print out.
|
||||||
|
\param ll: Log level of the text. If the text is an error, set
|
||||||
|
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
||||||
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
|
filtered with these levels. If you want to be a text displayed,
|
||||||
|
independent on what level filter is set, use ELL_NONE. */
|
||||||
|
virtual void log(const wchar_t* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MATERIAL_RENDERER_H_INCLUDED__
|
||||||
|
#define __I_MATERIAL_RENDERER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
|
@ -24,6 +25,7 @@ engine with new materials. */
|
||||||
class IMaterialRenderer : public virtual IReferenceCounted
|
class IMaterialRenderer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Called by the IVideoDriver implementation the let the renderer set its needed render states.
|
//! Called by the IVideoDriver implementation the let the renderer set its needed render states.
|
||||||
/** This is called during the IVideoDriver::setMaterial() call.
|
/** This is called during the IVideoDriver::setMaterial() call.
|
||||||
When overriding this, you can set some renderstates or for example a
|
When overriding this, you can set some renderstates or for example a
|
||||||
|
@ -97,5 +99,9 @@ public:
|
||||||
virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const { return 0; }
|
virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__
|
||||||
|
#define __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__
|
||||||
|
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
#include "S3DVertex.h"
|
#include "S3DVertex.h"
|
||||||
|
@ -14,10 +15,12 @@ namespace video
|
||||||
|
|
||||||
class IVideoDriver;
|
class IVideoDriver;
|
||||||
|
|
||||||
|
|
||||||
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
|
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
|
||||||
class IMaterialRendererServices
|
class IMaterialRendererServices
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IMaterialRendererServices() {}
|
virtual ~IMaterialRendererServices() {}
|
||||||
|
|
||||||
|
@ -50,8 +53,19 @@ public:
|
||||||
virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) = 0;
|
virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) = 0;
|
||||||
|
|
||||||
//! Uint interface for the above.
|
//! Uint interface for the above.
|
||||||
|
/* NOTE: UINT only works with GLSL, not supported for other shaders.
|
||||||
|
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
|
||||||
|
*/
|
||||||
virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) = 0;
|
virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) = 0;
|
||||||
|
|
||||||
|
//! Sets a vertex shader constant.
|
||||||
|
/** Can be used if you created a shader using pixel/vertex shader
|
||||||
|
assembler or ARB_fragment_program or ARB_vertex_program.
|
||||||
|
\param data: Data to be set in the constants
|
||||||
|
\param startRegister: First register to be set
|
||||||
|
\param constantAmount: Amount of registers to be set. One register consists of 4 floats. */
|
||||||
|
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
|
||||||
|
|
||||||
//! Return an index constant for the pixel shader for the given uniform variable name
|
//! Return an index constant for the pixel shader for the given uniform variable name
|
||||||
virtual s32 getPixelShaderConstantID(const c8* name) = 0;
|
virtual s32 getPixelShaderConstantID(const c8* name) = 0;
|
||||||
|
|
||||||
|
@ -69,8 +83,19 @@ public:
|
||||||
virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) = 0;
|
virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) = 0;
|
||||||
|
|
||||||
//! Uint interface for the above.
|
//! Uint interface for the above.
|
||||||
|
/* NOTE: UINT only works with GLSL, not supported for other shaders.
|
||||||
|
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
|
||||||
|
*/
|
||||||
virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) = 0;
|
virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) = 0;
|
||||||
|
|
||||||
|
//! Sets a pixel shader constant.
|
||||||
|
/** Can be used if you created a shader using pixel/vertex shader
|
||||||
|
assembler or ARB_fragment_program or ARB_vertex_program.
|
||||||
|
\param data Data to be set in the constants
|
||||||
|
\param startRegister First register to be set.
|
||||||
|
\param constantAmount Amount of registers to be set. One register consists of 4 floats. */
|
||||||
|
virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
|
||||||
|
|
||||||
//! Get pointer to the IVideoDriver interface
|
//! Get pointer to the IVideoDriver interface
|
||||||
/** \return Pointer to the IVideoDriver interface */
|
/** \return Pointer to the IVideoDriver interface */
|
||||||
virtual IVideoDriver* getVideoDriver() = 0;
|
virtual IVideoDriver* getVideoDriver() = 0;
|
||||||
|
@ -78,3 +103,6 @@ public:
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MEMORY_READ_FILE_H_INCLUDED__
|
||||||
|
#define __I_MEMORY_READ_FILE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReadFile.h"
|
#include "IReadFile.h"
|
||||||
|
|
||||||
|
@ -25,3 +26,6 @@ public:
|
||||||
};
|
};
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_H_INCLUDED__
|
||||||
|
#define __I_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
|
@ -59,6 +60,7 @@ enum E_ANIMATED_MESH_TYPE
|
||||||
EAMT_STATIC
|
EAMT_STATIC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class IMeshBuffer;
|
class IMeshBuffer;
|
||||||
|
|
||||||
//! Class which holds the geometry of an object.
|
//! Class which holds the geometry of an object.
|
||||||
|
@ -69,6 +71,7 @@ A mesh is usually added to an IMeshSceneNode in order to be rendered.
|
||||||
class IMesh : public virtual IReferenceCounted
|
class IMesh : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Get the amount of mesh buffers.
|
//! Get the amount of mesh buffers.
|
||||||
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
||||||
virtual u32 getMeshBufferCount() const = 0;
|
virtual u32 getMeshBufferCount() const = 0;
|
||||||
|
@ -121,3 +124,6 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_BUFFER_H_INCLUDED__
|
||||||
|
#define __I_MESH_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
|
@ -38,6 +39,7 @@ the current code block anymore.
|
||||||
class IMeshBuffer : public virtual IReferenceCounted
|
class IMeshBuffer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Get the material of this meshbuffer
|
//! Get the material of this meshbuffer
|
||||||
/** \return Material of this buffer. */
|
/** \return Material of this buffer. */
|
||||||
virtual video::SMaterial& getMaterial() = 0;
|
virtual video::SMaterial& getMaterial() = 0;
|
||||||
|
@ -118,6 +120,11 @@ public:
|
||||||
\param numIndices Number of indices in array. */
|
\param numIndices Number of indices in array. */
|
||||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0;
|
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0;
|
||||||
|
|
||||||
|
//! Append the meshbuffer to the current buffer
|
||||||
|
/** Only works for compatible vertex types
|
||||||
|
\param other Buffer to append to this one. */
|
||||||
|
virtual void append(const IMeshBuffer* const other) = 0;
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
|
||||||
|
|
||||||
|
@ -156,27 +163,23 @@ public:
|
||||||
virtual u32 getPrimitiveCount() const
|
virtual u32 getPrimitiveCount() const
|
||||||
{
|
{
|
||||||
const u32 indexCount = getIndexCount();
|
const u32 indexCount = getIndexCount();
|
||||||
switch (getPrimitiveType()) {
|
switch (getPrimitiveType())
|
||||||
case scene::EPT_POINTS:
|
{
|
||||||
return indexCount;
|
case scene::EPT_POINTS: return indexCount;
|
||||||
case scene::EPT_LINE_STRIP:
|
case scene::EPT_LINE_STRIP: return indexCount-1;
|
||||||
return indexCount - 1;
|
case scene::EPT_LINE_LOOP: return indexCount;
|
||||||
case scene::EPT_LINE_LOOP:
|
case scene::EPT_LINES: return indexCount/2;
|
||||||
return indexCount;
|
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2);
|
||||||
case scene::EPT_LINES:
|
case scene::EPT_TRIANGLE_FAN: return (indexCount-2);
|
||||||
return indexCount / 2;
|
case scene::EPT_TRIANGLES: return indexCount/3;
|
||||||
case scene::EPT_TRIANGLE_STRIP:
|
case scene::EPT_POINT_SPRITES: return indexCount;
|
||||||
return (indexCount - 2);
|
|
||||||
case scene::EPT_TRIANGLE_FAN:
|
|
||||||
return (indexCount - 2);
|
|
||||||
case scene::EPT_TRIANGLES:
|
|
||||||
return indexCount / 3;
|
|
||||||
case scene::EPT_POINT_SPRITES:
|
|
||||||
return indexCount;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_CACHE_H_INCLUDED__
|
||||||
|
#define __I_MESH_CACHE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -26,6 +27,7 @@ to remove them and to iterate through already loaded meshes. */
|
||||||
class IMeshCache : public virtual IReferenceCounted
|
class IMeshCache : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IMeshCache() {}
|
virtual ~IMeshCache() {}
|
||||||
|
|
||||||
|
@ -127,5 +129,9 @@ public:
|
||||||
virtual void clearUnusedMeshes() = 0;
|
virtual void clearUnusedMeshes() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_LOADER_H_INCLUDED__
|
||||||
|
#define __I_MESH_LOADER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -25,6 +26,7 @@ ISceneManager::addExternalMeshLoader() to the engine. */
|
||||||
class IMeshLoader : public virtual IReferenceCounted
|
class IMeshLoader : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IMeshLoader() {}
|
IMeshLoader() {}
|
||||||
|
|
||||||
|
@ -46,5 +48,8 @@ public:
|
||||||
virtual IAnimatedMesh* createMesh(io::IReadFile* file) = 0;
|
virtual IAnimatedMesh* createMesh(io::IReadFile* file) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_MANIPULATOR_H_INCLUDED__
|
||||||
|
#define __I_MESH_MANIPULATOR_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "vector3d.h"
|
#include "vector3d.h"
|
||||||
|
@ -28,6 +29,7 @@ animations during runtime.
|
||||||
class IMeshManipulator : public virtual IReferenceCounted
|
class IMeshManipulator : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Recalculates all normals of the mesh.
|
//! Recalculates all normals of the mesh.
|
||||||
/** \param mesh: Mesh on which the operation is performed.
|
/** \param mesh: Mesh on which the operation is performed.
|
||||||
\param smooth: If the normals shall be smoothed.
|
\param smooth: If the normals shall be smoothed.
|
||||||
|
@ -98,6 +100,7 @@ public:
|
||||||
return apply_(func, buffer, boundingBoxUpdate, func);
|
return apply_(func, buffer, boundingBoxUpdate, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Apply a manipulator on the Mesh
|
//! Apply a manipulator on the Mesh
|
||||||
/** \param func A functor defining the mesh manipulation.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param mesh The Mesh to apply the manipulator to.
|
\param mesh The Mesh to apply the manipulator to.
|
||||||
|
@ -110,9 +113,11 @@ public:
|
||||||
return true;
|
return true;
|
||||||
bool result = true;
|
bool result = true;
|
||||||
core::aabbox3df bufferbox;
|
core::aabbox3df bufferbox;
|
||||||
for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
|
for (u32 i=0; i<mesh->getMeshBufferCount(); ++i)
|
||||||
|
{
|
||||||
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
||||||
if (boundingBoxUpdate) {
|
if (boundingBoxUpdate)
|
||||||
|
{
|
||||||
if (0==i)
|
if (0==i)
|
||||||
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
|
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
|
||||||
else
|
else
|
||||||
|
@ -138,22 +143,31 @@ protected:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
core::aabbox3df bufferbox;
|
core::aabbox3df bufferbox;
|
||||||
for (u32 i = 0; i < buffer->getVertexCount(); ++i) {
|
for (u32 i=0; i<buffer->getVertexCount(); ++i)
|
||||||
switch (buffer->getVertexType()) {
|
{
|
||||||
case video::EVT_STANDARD: {
|
switch (buffer->getVertexType())
|
||||||
|
{
|
||||||
|
case video::EVT_STANDARD:
|
||||||
|
{
|
||||||
video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices();
|
video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices();
|
||||||
func(verts[i]);
|
func(verts[i]);
|
||||||
} break;
|
}
|
||||||
case video::EVT_2TCOORDS: {
|
break;
|
||||||
|
case video::EVT_2TCOORDS:
|
||||||
|
{
|
||||||
video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices();
|
video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices();
|
||||||
func(verts[i]);
|
func(verts[i]);
|
||||||
} break;
|
}
|
||||||
case video::EVT_TANGENTS: {
|
break;
|
||||||
|
case video::EVT_TANGENTS:
|
||||||
|
{
|
||||||
video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices();
|
video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices();
|
||||||
func(verts[i]);
|
func(verts[i]);
|
||||||
} break;
|
|
||||||
}
|
}
|
||||||
if (boundingBoxUpdate) {
|
break;
|
||||||
|
}
|
||||||
|
if (boundingBoxUpdate)
|
||||||
|
{
|
||||||
if (0==i)
|
if (0==i)
|
||||||
bufferbox.reset(buffer->getPosition(0));
|
bufferbox.reset(buffer->getPosition(0));
|
||||||
else
|
else
|
||||||
|
@ -168,3 +182,6 @@ protected:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_MESH_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_MESH_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
|
@ -13,18 +14,20 @@ namespace scene
|
||||||
|
|
||||||
class IMesh;
|
class IMesh;
|
||||||
|
|
||||||
|
|
||||||
//! A scene node displaying a static mesh
|
//! A scene node displaying a static mesh
|
||||||
class IMeshSceneNode : public ISceneNode
|
class IMeshSceneNode : public ISceneNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
/** Use setMesh() to set the mesh to display.
|
/** Use setMesh() to set the mesh to display.
|
||||||
*/
|
*/
|
||||||
IMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
IMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
const core::vector3df &scale = core::vector3df(1, 1, 1)) :
|
const core::vector3df& scale = core::vector3df(1,1,1))
|
||||||
ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||||
|
|
||||||
//! Sets a new mesh to display
|
//! Sets a new mesh to display
|
||||||
/** \param mesh Mesh to display. */
|
/** \param mesh Mesh to display. */
|
||||||
|
@ -48,3 +51,7 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
55
include/IMeshWriter.h
Normal file
55
include/IMeshWriter.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
|
// This file is part of the "Irrlicht Engine".
|
||||||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "IReferenceCounted.h"
|
||||||
|
#include "EMeshWriterEnums.h"
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace io
|
||||||
|
{
|
||||||
|
class IWriteFile;
|
||||||
|
} // end namespace io
|
||||||
|
|
||||||
|
namespace scene
|
||||||
|
{
|
||||||
|
class IMesh;
|
||||||
|
|
||||||
|
//! Interface for writing meshes
|
||||||
|
class IMeshWriter : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Destructor
|
||||||
|
virtual ~IMeshWriter() {}
|
||||||
|
|
||||||
|
//! Get the type of the mesh writer
|
||||||
|
/** For own implementations, use MAKE_IRR_ID as shown in the
|
||||||
|
EMESH_WRITER_TYPE enumeration to return your own unique mesh
|
||||||
|
type id.
|
||||||
|
\return Type of the mesh writer. */
|
||||||
|
virtual EMESH_WRITER_TYPE getType() const = 0;
|
||||||
|
|
||||||
|
//! Write a static mesh.
|
||||||
|
/** \param file File handle to write the mesh to.
|
||||||
|
\param mesh Pointer to mesh to be written.
|
||||||
|
\param flags Optional flags to set properties of the writer.
|
||||||
|
\return True if successful */
|
||||||
|
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh,
|
||||||
|
s32 flags=EMWF_NONE) = 0;
|
||||||
|
|
||||||
|
// Writes an animated mesh
|
||||||
|
// for future use, only b3d writer is able to write animated meshes currently and that was implemented using the writeMesh above.
|
||||||
|
/* \return Returns true if successful */
|
||||||
|
//virtual bool writeAnimatedMesh(io::IWriteFile* file,
|
||||||
|
// scene::IAnimatedMesh* mesh,
|
||||||
|
// s32 flags=EMWF_NONE) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace
|
||||||
|
} // end namespace
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_OS_OPERATOR_H_INCLUDED__
|
||||||
|
#define __I_OS_OPERATOR_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
|
@ -40,6 +41,9 @@ public:
|
||||||
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
||||||
\return True if successful, false if not */
|
\return True if successful, false if not */
|
||||||
virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0;
|
virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_READ_FILE_H_INCLUDED__
|
||||||
|
#define __I_READ_FILE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "coreutil.h"
|
#include "coreutil.h"
|
||||||
|
@ -55,3 +56,6 @@ IReadFile *createLimitReadFile(const io::path &fileName, IReadFile *alreadyOpene
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_IREFERENCE_COUNTED_H_INCLUDED__
|
||||||
|
#define __I_IREFERENCE_COUNTED_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
|
@ -40,9 +41,10 @@ is stored somewhere by the driver.
|
||||||
class IReferenceCounted
|
class IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor.
|
//! Constructor.
|
||||||
IReferenceCounted() :
|
IReferenceCounted()
|
||||||
DebugName(0), ReferenceCounter(1)
|
: DebugName(0), ReferenceCounter(1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +119,8 @@ public:
|
||||||
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
|
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
|
||||||
|
|
||||||
--ReferenceCounter;
|
--ReferenceCounter;
|
||||||
if (!ReferenceCounter) {
|
if (!ReferenceCounter)
|
||||||
|
{
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -142,6 +145,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Sets the debug name of the object.
|
//! Sets the debug name of the object.
|
||||||
/** The Debugname may only be set and changed by the object
|
/** The Debugname may only be set and changed by the object
|
||||||
itself. This method should only be used in Debug mode.
|
itself. This method should only be used in Debug mode.
|
||||||
|
@ -152,6 +156,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//! The debug name.
|
//! The debug name.
|
||||||
const c8* DebugName;
|
const c8* DebugName;
|
||||||
|
|
||||||
|
@ -160,3 +165,6 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_RENDER_TARGET_H_INCLUDED__
|
||||||
|
#define __I_RENDER_TARGET_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EDriverTypes.h"
|
#include "EDriverTypes.h"
|
||||||
|
@ -29,9 +30,9 @@ enum E_CUBE_SURFACE
|
||||||
class IRenderTarget : public virtual IReferenceCounted
|
class IRenderTarget : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IRenderTarget() :
|
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL)
|
||||||
DepthStencil(0), DriverType(EDT_NULL)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,9 +70,12 @@ public:
|
||||||
//! You can pass getDepthStencil() for depthStencil if you don't want to change that one
|
//! You can pass getDepthStencil() for depthStencil if you don't want to change that one
|
||||||
void setTexture(ITexture* texture, ITexture* depthStencil)
|
void setTexture(ITexture* texture, ITexture* depthStencil)
|
||||||
{
|
{
|
||||||
if (texture) {
|
if ( texture )
|
||||||
|
{
|
||||||
setTextures(&texture, 1, depthStencil);
|
setTextures(&texture, 1, depthStencil);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
setTextures(0, 0, depthStencil);
|
setTextures(0, 0, depthStencil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,9 +83,12 @@ public:
|
||||||
//! Set one cube surface texture.
|
//! Set one cube surface texture.
|
||||||
void setTexture(ITexture* texture, ITexture* depthStencil, E_CUBE_SURFACE cubeSurface)
|
void setTexture(ITexture* texture, ITexture* depthStencil, E_CUBE_SURFACE cubeSurface)
|
||||||
{
|
{
|
||||||
if (texture) {
|
if ( texture )
|
||||||
|
{
|
||||||
setTextures(&texture, 1, depthStencil, &cubeSurface, 1);
|
setTextures(&texture, 1, depthStencil, &cubeSurface, 1);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
setTextures(0, 0, depthStencil, &cubeSurface, 1);
|
setTextures(0, 0, depthStencil, &cubeSurface, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,6 +100,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Set multiple textures.
|
//! Set multiple textures.
|
||||||
// NOTE: working with pointers instead of arrays to avoid unnecessary memory allocations for the single textures case
|
// NOTE: working with pointers instead of arrays to avoid unnecessary memory allocations for the single textures case
|
||||||
virtual void setTextures(ITexture* const * textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces=0, u32 numCubeSurfaces=0) = 0;
|
virtual void setTextures(ITexture* const * textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces=0, u32 numCubeSurfaces=0) = 0;
|
||||||
|
@ -117,3 +125,5 @@ private:
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SCENE_COLLISION_MANAGER_H_INCLUDED__
|
||||||
|
#define __I_SCENE_COLLISION_MANAGER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
|
@ -18,6 +19,7 @@ class ICameraSceneNode;
|
||||||
class ISceneCollisionManager : public virtual IReferenceCounted
|
class ISceneCollisionManager : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Returns a 3d ray which would go through the 2d screen coordinates.
|
//! Returns a 3d ray which would go through the 2d screen coordinates.
|
||||||
/** \param pos: Screen coordinates in pixels.
|
/** \param pos: Screen coordinates in pixels.
|
||||||
\param camera: Camera from which the ray starts. If null, the
|
\param camera: Camera from which the ray starts. If null, the
|
||||||
|
@ -27,7 +29,10 @@ public:
|
||||||
would be behind the 2d screen coordinates. */
|
would be behind the 2d screen coordinates. */
|
||||||
virtual core::line3d<f32> getRayFromScreenCoordinates(
|
virtual core::line3d<f32> getRayFromScreenCoordinates(
|
||||||
const core::position2d<s32>& pos, const ICameraSceneNode* camera = 0) = 0;
|
const core::position2d<s32>& pos, const ICameraSceneNode* camera = 0) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SCENE_MANAGER_H_INCLUDED__
|
||||||
|
#define __I_SCENE_MANAGER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
|
@ -12,6 +13,7 @@
|
||||||
#include "dimension2d.h"
|
#include "dimension2d.h"
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
#include "ESceneNodeTypes.h"
|
#include "ESceneNodeTypes.h"
|
||||||
|
#include "EMeshWriterEnums.h"
|
||||||
#include "SceneParameters.h"
|
#include "SceneParameters.h"
|
||||||
#include "ISkinnedMesh.h"
|
#include "ISkinnedMesh.h"
|
||||||
|
|
||||||
|
@ -107,6 +109,7 @@ class ISceneCollisionManager;
|
||||||
class IMeshLoader;
|
class IMeshLoader;
|
||||||
class IMeshManipulator;
|
class IMeshManipulator;
|
||||||
class IMeshSceneNode;
|
class IMeshSceneNode;
|
||||||
|
class IMeshWriter;
|
||||||
class ISceneNode;
|
class ISceneNode;
|
||||||
class ISceneNodeFactory;
|
class ISceneNodeFactory;
|
||||||
|
|
||||||
|
@ -126,6 +129,7 @@ addExternalMeshLoader() to add new formats to the engine.
|
||||||
class ISceneManager : public virtual IReferenceCounted
|
class ISceneManager : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Get pointer to an animatable mesh. Loads the file if not loaded already.
|
//! Get pointer to an animatable mesh. Loads the file if not loaded already.
|
||||||
/**
|
/**
|
||||||
* If you want to remove a loaded mesh from the cache again, use removeMesh().
|
* If you want to remove a loaded mesh from the cache again, use removeMesh().
|
||||||
|
@ -599,6 +603,11 @@ public:
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0;
|
virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0;
|
||||||
|
|
||||||
|
//! Get a mesh writer implementation if available
|
||||||
|
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
|
||||||
|
for details. */
|
||||||
|
virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0;
|
||||||
|
|
||||||
//! Get a skinned mesh, which is not available as header-only code
|
//! Get a skinned mesh, which is not available as header-only code
|
||||||
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
|
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
|
||||||
for details. */
|
for details. */
|
||||||
|
@ -628,5 +637,9 @@ public:
|
||||||
virtual bool isCulled(const ISceneNode* node) const =0;
|
virtual bool isCulled(const ISceneNode* node) const =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "ESceneNodeTypes.h"
|
#include "ESceneNodeTypes.h"
|
||||||
|
@ -13,9 +14,7 @@
|
||||||
#include "aabbox3d.h"
|
#include "aabbox3d.h"
|
||||||
#include "matrix4.h"
|
#include "matrix4.h"
|
||||||
#include "IAttributes.h"
|
#include "IAttributes.h"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -38,13 +37,13 @@ a walking character on a moving platform on a moving ship.
|
||||||
class ISceneNode : virtual public IReferenceCounted
|
class ISceneNode : virtual public IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
ISceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1,
|
ISceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1,
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
|
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
|
||||||
RelativeTranslation(position),
|
: RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale),
|
||||||
RelativeRotation(rotation), RelativeScale(scale),
|
|
||||||
Parent(0), SceneManager(mgr), ID(id),
|
Parent(0), SceneManager(mgr), ID(id),
|
||||||
AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF),
|
AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF),
|
||||||
IsVisible(true), IsDebugObject(false)
|
IsVisible(true), IsDebugObject(false)
|
||||||
|
@ -55,6 +54,7 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~ISceneNode()
|
virtual ~ISceneNode()
|
||||||
{
|
{
|
||||||
|
@ -62,6 +62,7 @@ public:
|
||||||
removeAll();
|
removeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! This method is called just before the rendering process of the whole scene.
|
//! This method is called just before the rendering process of the whole scene.
|
||||||
/** Nodes may register themselves in the render pipeline during this call,
|
/** Nodes may register themselves in the render pipeline during this call,
|
||||||
precalculate the geometry which should be rendered, and prevent their
|
precalculate the geometry which should be rendered, and prevent their
|
||||||
|
@ -78,13 +79,15 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void OnRegisterSceneNode()
|
virtual void OnRegisterSceneNode()
|
||||||
{
|
{
|
||||||
if (IsVisible) {
|
if (IsVisible)
|
||||||
|
{
|
||||||
ISceneNodeList::iterator it = Children.begin();
|
ISceneNodeList::iterator it = Children.begin();
|
||||||
for (; it != Children.end(); ++it)
|
for (; it != Children.end(); ++it)
|
||||||
(*it)->OnRegisterSceneNode();
|
(*it)->OnRegisterSceneNode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! OnAnimate() is called just before rendering the whole scene.
|
//! OnAnimate() is called just before rendering the whole scene.
|
||||||
/** Nodes may calculate or store animations here, and may do other useful things,
|
/** Nodes may calculate or store animations here, and may do other useful things,
|
||||||
depending on what they are. Also, OnAnimate() should be called for all
|
depending on what they are. Also, OnAnimate() should be called for all
|
||||||
|
@ -93,7 +96,8 @@ public:
|
||||||
\param timeMs Current time in milliseconds. */
|
\param timeMs Current time in milliseconds. */
|
||||||
virtual void OnAnimate(u32 timeMs)
|
virtual void OnAnimate(u32 timeMs)
|
||||||
{
|
{
|
||||||
if (IsVisible) {
|
if (IsVisible)
|
||||||
|
{
|
||||||
// update absolute position
|
// update absolute position
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
|
|
||||||
|
@ -105,23 +109,35 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Renders the node.
|
//! Renders the node.
|
||||||
virtual void render() = 0;
|
virtual void render() = 0;
|
||||||
|
|
||||||
|
|
||||||
//! Returns the name of the node.
|
//! Returns the name of the node.
|
||||||
/** \return Name as character string. */
|
/** \return Name as character string. */
|
||||||
virtual const std::optional<std::string> &getName() const
|
virtual const c8* getName() const
|
||||||
{
|
{
|
||||||
return Name;
|
return Name.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the name of the node.
|
//! Sets the name of the node.
|
||||||
/** \param name New name of the scene node. */
|
/** \param name New name of the scene node. */
|
||||||
virtual void setName(const std::optional<std::string> &name)
|
virtual void setName(const c8* name)
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Sets the name of the node.
|
||||||
|
/** \param name New name of the scene node. */
|
||||||
|
virtual void setName(const core::stringc& name)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get the axis aligned, not transformed bounding box of this node.
|
//! Get the axis aligned, not transformed bounding box of this node.
|
||||||
/** This means that if this node is an animated 3d character,
|
/** This means that if this node is an animated 3d character,
|
||||||
moving in a room, the bounding box will always be around the
|
moving in a room, the bounding box will always be around the
|
||||||
|
@ -132,6 +148,7 @@ public:
|
||||||
\return The non-transformed bounding box. */
|
\return The non-transformed bounding box. */
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
|
virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
|
||||||
|
|
||||||
|
|
||||||
//! Get the axis aligned, transformed and animated absolute bounding box of this node.
|
//! Get the axis aligned, transformed and animated absolute bounding box of this node.
|
||||||
/** Note: The result is still an axis-aligned bounding box, so it's size
|
/** Note: The result is still an axis-aligned bounding box, so it's size
|
||||||
changes with rotation.
|
changes with rotation.
|
||||||
|
@ -168,6 +185,7 @@ public:
|
||||||
return AbsoluteTransformation;
|
return AbsoluteTransformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
/** The relative transformation is stored internally as 3
|
/** The relative transformation is stored internally as 3
|
||||||
vectors: translation, rotation and scale. To get the relative
|
vectors: translation, rotation and scale. To get the relative
|
||||||
|
@ -179,7 +197,8 @@ public:
|
||||||
mat.setRotationDegrees(RelativeRotation);
|
mat.setRotationDegrees(RelativeRotation);
|
||||||
mat.setTranslation(RelativeTranslation);
|
mat.setTranslation(RelativeTranslation);
|
||||||
|
|
||||||
if (RelativeScale != core::vector3df(1.f, 1.f, 1.f)) {
|
if (RelativeScale != core::vector3df(1.f,1.f,1.f))
|
||||||
|
{
|
||||||
core::matrix4 smat;
|
core::matrix4 smat;
|
||||||
smat.setScale(RelativeScale);
|
smat.setScale(RelativeScale);
|
||||||
mat *= smat;
|
mat *= smat;
|
||||||
|
@ -188,6 +207,7 @@ public:
|
||||||
return mat;
|
return mat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns whether the node should be visible (if all of its parents are visible).
|
//! Returns whether the node should be visible (if all of its parents are visible).
|
||||||
/** This is only an option set by the user, but has nothing to
|
/** This is only an option set by the user, but has nothing to
|
||||||
do with geometry culling
|
do with geometry culling
|
||||||
|
@ -222,6 +242,7 @@ public:
|
||||||
IsVisible = isVisible;
|
IsVisible = isVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get the id of the scene node.
|
//! Get the id of the scene node.
|
||||||
/** This id can be used to identify the node.
|
/** This id can be used to identify the node.
|
||||||
\return The id. */
|
\return The id. */
|
||||||
|
@ -230,6 +251,7 @@ public:
|
||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the id of the scene node.
|
//! Sets the id of the scene node.
|
||||||
/** This id can be used to identify the node.
|
/** This id can be used to identify the node.
|
||||||
\param id The new id. */
|
\param id The new id. */
|
||||||
|
@ -238,59 +260,66 @@ public:
|
||||||
ID = id;
|
ID = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Adds a child to this scene node.
|
//! Adds a child to this scene node.
|
||||||
/** If the scene node already has a parent it is first removed
|
/** If the scene node already has a parent it is first removed
|
||||||
from the other parent.
|
from the other parent.
|
||||||
\param child A pointer to the new child. */
|
\param child A pointer to the new child. */
|
||||||
virtual void addChild(ISceneNode* child)
|
virtual void addChild(ISceneNode* child)
|
||||||
{
|
{
|
||||||
if (child && (child != this)) {
|
if (child && (child != this))
|
||||||
|
{
|
||||||
// Change scene manager?
|
// Change scene manager?
|
||||||
if (SceneManager != child->SceneManager)
|
if (SceneManager != child->SceneManager)
|
||||||
child->setSceneManager(SceneManager);
|
child->setSceneManager(SceneManager);
|
||||||
|
|
||||||
child->grab();
|
child->grab();
|
||||||
child->remove(); // remove from old parent
|
child->remove(); // remove from old parent
|
||||||
// Note: This iterator is not invalidated until we erase it.
|
Children.push_back(child);
|
||||||
child->ThisIterator = Children.insert(Children.end(), child);
|
|
||||||
child->Parent = this;
|
child->Parent = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Removes a child from this scene node.
|
//! Removes a child from this scene node.
|
||||||
/**
|
/** If found in the children list, the child pointer is also
|
||||||
|
dropped and might be deleted if no other grab exists.
|
||||||
\param child A pointer to the child which shall be removed.
|
\param child A pointer to the child which shall be removed.
|
||||||
\return True if the child was removed, and false if not,
|
\return True if the child was removed, and false if not,
|
||||||
e.g. because it belongs to a different parent or no parent. */
|
e.g. because it couldn't be found in the children list. */
|
||||||
virtual bool removeChild(ISceneNode* child)
|
virtual bool removeChild(ISceneNode* child)
|
||||||
{
|
{
|
||||||
if (child->Parent != this)
|
ISceneNodeList::iterator it = Children.begin();
|
||||||
return false;
|
for (; it != Children.end(); ++it)
|
||||||
|
if ((*it) == child)
|
||||||
// The iterator must be set since the parent is not null.
|
{
|
||||||
_IRR_DEBUG_BREAK_IF(!child->ThisIterator.has_value());
|
(*it)->Parent = 0;
|
||||||
auto it = *child->ThisIterator;
|
(*it)->drop();
|
||||||
child->ThisIterator = std::nullopt;
|
|
||||||
child->Parent = nullptr;
|
|
||||||
child->drop();
|
|
||||||
Children.erase(it);
|
Children.erase(it);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Removes all children of this scene node
|
//! Removes all children of this scene node
|
||||||
/** The scene nodes found in the children list are also dropped
|
/** The scene nodes found in the children list are also dropped
|
||||||
and might be deleted if no other grab exists on them.
|
and might be deleted if no other grab exists on them.
|
||||||
*/
|
*/
|
||||||
virtual void removeAll()
|
virtual void removeAll()
|
||||||
{
|
{
|
||||||
for (auto &child : Children) {
|
ISceneNodeList::iterator it = Children.begin();
|
||||||
child->Parent = nullptr;
|
for (; it != Children.end(); ++it)
|
||||||
child->ThisIterator = std::nullopt;
|
{
|
||||||
child->drop();
|
(*it)->Parent = 0;
|
||||||
|
(*it)->drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
Children.clear();
|
Children.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Removes this scene node from the scene
|
//! Removes this scene node from the scene
|
||||||
/** If no other grab exists for this node, it will be deleted.
|
/** If no other grab exists for this node, it will be deleted.
|
||||||
*/
|
*/
|
||||||
|
@ -300,6 +329,7 @@ public:
|
||||||
Parent->removeChild(this);
|
Parent->removeChild(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the material based on the zero based index i.
|
//! Returns the material based on the zero based index i.
|
||||||
/** To get the amount of materials used by this scene node, use
|
/** To get the amount of materials used by this scene node, use
|
||||||
getMaterialCount(). This function is needed for inserting the
|
getMaterialCount(). This function is needed for inserting the
|
||||||
|
@ -313,6 +343,7 @@ public:
|
||||||
return video::IdentityMaterial;
|
return video::IdentityMaterial;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get amount of materials used by this scene node.
|
//! Get amount of materials used by this scene node.
|
||||||
/** \return Current amount of materials of this scene node. */
|
/** \return Current amount of materials of this scene node. */
|
||||||
virtual u32 getMaterialCount() const
|
virtual u32 getMaterialCount() const
|
||||||
|
@ -320,17 +351,18 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Execute a function on all materials of this scene node.
|
//! Execute a function on all materials of this scene node.
|
||||||
/** Useful for setting material properties, e.g. if you want the whole
|
/** Useful for setting material properties, e.g. if you want the whole
|
||||||
mesh to be affected by light. */
|
mesh to be affected by light. */
|
||||||
template <typename F>
|
template <typename F>
|
||||||
void forEachMaterial(F &&fn)
|
void forEachMaterial(F &&fn) {
|
||||||
{
|
|
||||||
for (u32 i = 0; i < getMaterialCount(); i++) {
|
for (u32 i = 0; i < getMaterialCount(); i++) {
|
||||||
fn(getMaterial(i));
|
fn(getMaterial(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the scale of the scene node relative to its parent.
|
//! Gets the scale of the scene node relative to its parent.
|
||||||
/** This is the scale of this node relative to its parent.
|
/** This is the scale of this node relative to its parent.
|
||||||
If you want the absolute scale, use
|
If you want the absolute scale, use
|
||||||
|
@ -341,6 +373,7 @@ public:
|
||||||
return RelativeScale;
|
return RelativeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the relative scale of the scene node.
|
//! Sets the relative scale of the scene node.
|
||||||
/** \param scale New scale of the node, relative to its parent. */
|
/** \param scale New scale of the node, relative to its parent. */
|
||||||
virtual void setScale(const core::vector3df& scale)
|
virtual void setScale(const core::vector3df& scale)
|
||||||
|
@ -348,6 +381,7 @@ public:
|
||||||
RelativeScale = scale;
|
RelativeScale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the rotation of the node relative to its parent.
|
//! Gets the rotation of the node relative to its parent.
|
||||||
/** Note that this is the relative rotation of the node.
|
/** Note that this is the relative rotation of the node.
|
||||||
If you want the absolute rotation, use
|
If you want the absolute rotation, use
|
||||||
|
@ -358,6 +392,7 @@ public:
|
||||||
return RelativeRotation;
|
return RelativeRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the rotation of the node relative to its parent.
|
//! Sets the rotation of the node relative to its parent.
|
||||||
/** This only modifies the relative rotation of the node.
|
/** This only modifies the relative rotation of the node.
|
||||||
\param rotation New rotation of the node in degrees. */
|
\param rotation New rotation of the node in degrees. */
|
||||||
|
@ -366,6 +401,7 @@ public:
|
||||||
RelativeRotation = rotation;
|
RelativeRotation = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the position of the node relative to its parent.
|
//! Gets the position of the node relative to its parent.
|
||||||
/** Note that the position is relative to the parent. If you want
|
/** Note that the position is relative to the parent. If you want
|
||||||
the position in world coordinates, use getAbsolutePosition() instead.
|
the position in world coordinates, use getAbsolutePosition() instead.
|
||||||
|
@ -375,6 +411,7 @@ public:
|
||||||
return RelativeTranslation;
|
return RelativeTranslation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets the position of the node relative to its parent.
|
//! Sets the position of the node relative to its parent.
|
||||||
/** Note that the position is relative to the parent.
|
/** Note that the position is relative to the parent.
|
||||||
\param newpos New relative position of the scene node. */
|
\param newpos New relative position of the scene node. */
|
||||||
|
@ -383,6 +420,7 @@ public:
|
||||||
RelativeTranslation = newpos;
|
RelativeTranslation = newpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the absolute position of the node in world coordinates.
|
//! Gets the absolute position of the node in world coordinates.
|
||||||
/** If you want the position of the node relative to its parent,
|
/** If you want the position of the node relative to its parent,
|
||||||
use getPosition() instead.
|
use getPosition() instead.
|
||||||
|
@ -397,6 +435,7 @@ public:
|
||||||
return AbsoluteTransformation.getTranslation();
|
return AbsoluteTransformation.getTranslation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Set a culling style or disable culling completely.
|
//! Set a culling style or disable culling completely.
|
||||||
/** Box cullling (EAC_BOX) is set by default. Note that not
|
/** Box cullling (EAC_BOX) is set by default. Note that not
|
||||||
all SceneNodes support culling and that some nodes always cull
|
all SceneNodes support culling and that some nodes always cull
|
||||||
|
@ -408,6 +447,7 @@ public:
|
||||||
AutomaticCullingState = state;
|
AutomaticCullingState = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Gets the automatic culling state.
|
//! Gets the automatic culling state.
|
||||||
/** \return The automatic culling state. */
|
/** \return The automatic culling state. */
|
||||||
u32 getAutomaticCulling() const
|
u32 getAutomaticCulling() const
|
||||||
|
@ -415,6 +455,7 @@ public:
|
||||||
return AutomaticCullingState;
|
return AutomaticCullingState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets if debug data like bounding boxes should be drawn.
|
//! Sets if debug data like bounding boxes should be drawn.
|
||||||
/** A bitwise OR of the types from @ref irr::scene::E_DEBUG_SCENE_TYPE.
|
/** A bitwise OR of the types from @ref irr::scene::E_DEBUG_SCENE_TYPE.
|
||||||
Please note that not all scene nodes support all debug data types.
|
Please note that not all scene nodes support all debug data types.
|
||||||
|
@ -432,6 +473,7 @@ public:
|
||||||
return DebugDataVisible;
|
return DebugDataVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets if this scene node is a debug object.
|
//! Sets if this scene node is a debug object.
|
||||||
/** Debug objects have some special properties, for example they can be easily
|
/** Debug objects have some special properties, for example they can be easily
|
||||||
excluded from collision detection or from serialization, etc. */
|
excluded from collision detection or from serialization, etc. */
|
||||||
|
@ -440,6 +482,7 @@ public:
|
||||||
IsDebugObject = debugObject;
|
IsDebugObject = debugObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns if this scene node is a debug object.
|
//! Returns if this scene node is a debug object.
|
||||||
/** Debug objects have some special properties, for example they can be easily
|
/** Debug objects have some special properties, for example they can be easily
|
||||||
excluded from collision detection or from serialization, etc.
|
excluded from collision detection or from serialization, etc.
|
||||||
|
@ -449,6 +492,7 @@ public:
|
||||||
return IsDebugObject;
|
return IsDebugObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns a const reference to the list of all children.
|
//! Returns a const reference to the list of all children.
|
||||||
/** \return The list of all children of this node. */
|
/** \return The list of all children of this node. */
|
||||||
const std::list<ISceneNode*>& getChildren() const
|
const std::list<ISceneNode*>& getChildren() const
|
||||||
|
@ -456,6 +500,7 @@ public:
|
||||||
return Children;
|
return Children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Changes the parent of the scene node.
|
//! Changes the parent of the scene node.
|
||||||
/** \param newParent The new parent to be used. */
|
/** \param newParent The new parent to be used. */
|
||||||
virtual void setParent(ISceneNode* newParent)
|
virtual void setParent(ISceneNode* newParent)
|
||||||
|
@ -463,24 +508,30 @@ public:
|
||||||
grab();
|
grab();
|
||||||
remove();
|
remove();
|
||||||
|
|
||||||
if (newParent)
|
Parent = newParent;
|
||||||
newParent->addChild(this);
|
|
||||||
|
if (Parent)
|
||||||
|
Parent->addChild(this);
|
||||||
|
|
||||||
drop();
|
drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Updates the absolute position based on the relative and the parents position
|
//! Updates the absolute position based on the relative and the parents position
|
||||||
/** Note: This does not recursively update the parents absolute positions, so if you have a deeper
|
/** Note: This does not recursively update the parents absolute positions, so if you have a deeper
|
||||||
hierarchy you might want to update the parents first.*/
|
hierarchy you might want to update the parents first.*/
|
||||||
virtual void updateAbsolutePosition()
|
virtual void updateAbsolutePosition()
|
||||||
{
|
{
|
||||||
if (Parent) {
|
if (Parent)
|
||||||
|
{
|
||||||
AbsoluteTransformation =
|
AbsoluteTransformation =
|
||||||
Parent->getAbsoluteTransformation() * getRelativeTransformation();
|
Parent->getAbsoluteTransformation() * getRelativeTransformation();
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
AbsoluteTransformation = getRelativeTransformation();
|
AbsoluteTransformation = getRelativeTransformation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the parent of this scene node
|
//! Returns the parent of this scene node
|
||||||
/** \return A pointer to the parent. */
|
/** \return A pointer to the parent. */
|
||||||
scene::ISceneNode* getParent() const
|
scene::ISceneNode* getParent() const
|
||||||
|
@ -488,6 +539,7 @@ public:
|
||||||
return Parent;
|
return Parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns type of the scene node
|
//! Returns type of the scene node
|
||||||
/** \return The type of this node. */
|
/** \return The type of this node. */
|
||||||
virtual ESCENE_NODE_TYPE getType() const
|
virtual ESCENE_NODE_TYPE getType() const
|
||||||
|
@ -509,6 +561,7 @@ public:
|
||||||
virtual ISceneManager* getSceneManager(void) const { return SceneManager; }
|
virtual ISceneManager* getSceneManager(void) const { return SceneManager; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! A clone function for the ISceneNode members.
|
//! A clone function for the ISceneNode members.
|
||||||
/** This method can be used by clone() implementations of
|
/** This method can be used by clone() implementations of
|
||||||
derived classes
|
derived classes
|
||||||
|
@ -551,7 +604,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Name of the scene node.
|
//! Name of the scene node.
|
||||||
std::optional<std::string> Name;
|
core::stringc Name;
|
||||||
|
|
||||||
//! Absolute transformation of the node.
|
//! Absolute transformation of the node.
|
||||||
core::matrix4 AbsoluteTransformation;
|
core::matrix4 AbsoluteTransformation;
|
||||||
|
@ -565,15 +618,12 @@ protected:
|
||||||
//! Relative scale of the scene node.
|
//! Relative scale of the scene node.
|
||||||
core::vector3df RelativeScale;
|
core::vector3df RelativeScale;
|
||||||
|
|
||||||
//! 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
|
//! Pointer to the parent
|
||||||
ISceneNode* Parent;
|
ISceneNode* Parent;
|
||||||
|
|
||||||
|
//! List of all children of this node
|
||||||
|
std::list<ISceneNode*> Children;
|
||||||
|
|
||||||
//! Pointer to the scene manager
|
//! Pointer to the scene manager
|
||||||
ISceneManager* SceneManager;
|
ISceneManager* SceneManager;
|
||||||
|
|
||||||
|
@ -593,5 +643,9 @@ protected:
|
||||||
bool IsDebugObject;
|
bool IsDebugObject;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
|
||||||
|
#define __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
|
|
||||||
|
@ -20,6 +21,7 @@ OnSetConstants method will be called every frame now. */
|
||||||
class IShaderConstantSetCallBack : public virtual IReferenceCounted
|
class IShaderConstantSetCallBack : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Called to let the callBack know the used material (optional method)
|
//! Called to let the callBack know the used material (optional method)
|
||||||
/**
|
/**
|
||||||
\code
|
\code
|
||||||
|
@ -75,5 +77,9 @@ public:
|
||||||
virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0;
|
virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,14 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_SKINNED_MESH_H_INCLUDED__
|
||||||
|
#define __I_SKINNED_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "IBoneSceneNode.h"
|
#include "IBoneSceneNode.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "IAnimatedMesh.h"
|
||||||
#include "SSkinMeshBuffer.h"
|
#include "SSkinMeshBuffer.h"
|
||||||
|
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
|
@ -28,10 +27,12 @@ enum E_INTERPOLATION_MODE
|
||||||
EIM_COUNT
|
EIM_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Interface for using some special functions of Skinned meshes
|
//! Interface for using some special functions of Skinned meshes
|
||||||
class ISkinnedMesh : public IAnimatedMesh
|
class ISkinnedMesh : public IAnimatedMesh
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Gets joint count.
|
//! Gets joint count.
|
||||||
/** \return Amount of joints in the skeletal animated mesh. */
|
/** \return Amount of joints in the skeletal animated mesh. */
|
||||||
virtual u32 getJointCount() const = 0;
|
virtual u32 getJointCount() const = 0;
|
||||||
|
@ -40,12 +41,12 @@ public:
|
||||||
/** \param number: Zero based index of joint. The last joint
|
/** \param number: Zero based index of joint. The last joint
|
||||||
has the number getJointCount()-1;
|
has the number getJointCount()-1;
|
||||||
\return Name of joint and null if an error happened. */
|
\return Name of joint and null if an error happened. */
|
||||||
virtual const std::optional<std::string> &getJointName(u32 number) const = 0;
|
virtual const c8* getJointName(u32 number) const = 0;
|
||||||
|
|
||||||
//! Gets a joint number from its name
|
//! Gets a joint number from its name
|
||||||
/** \param name: Name of the joint.
|
/** \param name: Name of the joint.
|
||||||
\return Number of the joint or std::nullopt if not found. */
|
\return Number of the joint or -1 if not found. */
|
||||||
virtual std::optional<u32> getJointNumber(const std::string &name) const = 0;
|
virtual s32 getJointNumber(const c8* name) const = 0;
|
||||||
|
|
||||||
//! Use animation from another mesh
|
//! Use animation from another mesh
|
||||||
/** The animation is linked (not copied) based on joint names
|
/** The animation is linked (not copied) based on joint names
|
||||||
|
@ -104,6 +105,7 @@ public:
|
||||||
core::vector3df StaticNormal;
|
core::vector3df StaticNormal;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Animation keyframe which describes a new position
|
//! Animation keyframe which describes a new position
|
||||||
struct SPositionKey
|
struct SPositionKey
|
||||||
{
|
{
|
||||||
|
@ -128,14 +130,13 @@ public:
|
||||||
//! Joints
|
//! Joints
|
||||||
struct SJoint
|
struct SJoint
|
||||||
{
|
{
|
||||||
SJoint() :
|
SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false),
|
||||||
UseAnimationFrom(0), GlobalSkinningSpace(false),
|
|
||||||
positionHint(-1),scaleHint(-1),rotationHint(-1)
|
positionHint(-1),scaleHint(-1),rotationHint(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//! The name of this joint
|
//! The name of this joint
|
||||||
std::optional<std::string> Name;
|
core::stringc Name;
|
||||||
|
|
||||||
//! Local matrix of this joint
|
//! Local matrix of this joint
|
||||||
core::matrix4 LocalMatrix;
|
core::matrix4 LocalMatrix;
|
||||||
|
@ -180,6 +181,7 @@ public:
|
||||||
s32 rotationHint;
|
s32 rotationHint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
|
//Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
|
||||||
|
|
||||||
//these functions will use the needed arrays, set values, etc to help the loaders
|
//these functions will use the needed arrays, set values, etc to help the loaders
|
||||||
|
@ -218,3 +220,6 @@ public:
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_TEXTURE_H_INCLUDED__
|
||||||
|
#define __I_TEXTURE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "IImage.h"
|
#include "IImage.h"
|
||||||
|
@ -16,6 +17,7 @@ namespace irr
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//! Enumeration flags used to tell the video driver with setTextureCreationFlag in which format textures should be created.
|
//! Enumeration flags used to tell the video driver with setTextureCreationFlag in which format textures should be created.
|
||||||
enum E_TEXTURE_CREATION_FLAG
|
enum E_TEXTURE_CREATION_FLAG
|
||||||
{
|
{
|
||||||
|
@ -175,9 +177,9 @@ and write a warning or an error message to the output buffer.
|
||||||
class ITexture : public virtual IReferenceCounted
|
class ITexture : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
ITexture(const io::path &name, E_TEXTURE_TYPE type) :
|
ITexture(const io::path& name, E_TEXTURE_TYPE type) : NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN),
|
||||||
NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN),
|
|
||||||
ColorFormat(ECF_UNKNOWN), Pitch(0), HasMipMaps(false), IsRenderTarget(false), Source(ETS_UNKNOWN), Type(type)
|
ColorFormat(ECF_UNKNOWN), Pitch(0), HasMipMaps(false), IsRenderTarget(false), Source(ETS_UNKNOWN), Type(type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -286,9 +288,15 @@ public:
|
||||||
{
|
{
|
||||||
bool status = false;
|
bool status = false;
|
||||||
|
|
||||||
switch (ColorFormat) {
|
switch (ColorFormat)
|
||||||
|
{
|
||||||
case ECF_A8R8G8B8:
|
case ECF_A8R8G8B8:
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
|
case ECF_DXT1:
|
||||||
|
case ECF_DXT2:
|
||||||
|
case ECF_DXT3:
|
||||||
|
case ECF_DXT4:
|
||||||
|
case ECF_DXT5:
|
||||||
case ECF_A16B16G16R16F:
|
case ECF_A16B16G16R16F:
|
||||||
case ECF_A32B32G32R32F:
|
case ECF_A32B32G32R32F:
|
||||||
status = true;
|
status = true;
|
||||||
|
@ -304,6 +312,7 @@ public:
|
||||||
E_TEXTURE_TYPE getType() const { return Type; }
|
E_TEXTURE_TYPE getType() const { return Type; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Helper function, helps to get the desired texture creation format from the flags.
|
//! Helper function, helps to get the desired texture creation format from the flags.
|
||||||
/** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT,
|
/** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT,
|
||||||
ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */
|
ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */
|
||||||
|
@ -333,5 +342,9 @@ protected:
|
||||||
E_TEXTURE_TYPE Type;
|
E_TEXTURE_TYPE Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_TIMER_H_INCLUDED__
|
||||||
|
#define __I_TIMER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
|
|
||||||
|
@ -63,3 +64,5 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_VERTEX_BUFFER_H_INCLUDED__
|
||||||
|
#define __I_VERTEX_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
|
@ -44,5 +45,9 @@ public:
|
||||||
virtual u32 getChangedID() const = 0;
|
virtual u32 getChangedID() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "dimension2d.h"
|
#include "dimension2d.h"
|
||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
#include "IMeshBuffer.h"
|
#include "IMeshBuffer.h"
|
||||||
|
#include "triangle3d.h"
|
||||||
#include "EDriverTypes.h"
|
#include "EDriverTypes.h"
|
||||||
#include "EDriverFeatures.h"
|
#include "EDriverFeatures.h"
|
||||||
#include "SExposedVideoData.h"
|
#include "SExposedVideoData.h"
|
||||||
|
@ -107,11 +108,12 @@ enum E_FOG_TYPE
|
||||||
EFT_FOG_EXP2
|
EFT_FOG_EXP2
|
||||||
};
|
};
|
||||||
|
|
||||||
const c8 *const FogTypeNames[] = {
|
const c8* const FogTypeNames[] =
|
||||||
|
{
|
||||||
"FogExp",
|
"FogExp",
|
||||||
"FogLinear",
|
"FogLinear",
|
||||||
"FogExp2",
|
"FogExp2",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Interface to driver which is able to perform 2d and 3d graphics functions.
|
//! Interface to driver which is able to perform 2d and 3d graphics functions.
|
||||||
|
@ -125,6 +127,7 @@ and methods to make the programmer's life easier.
|
||||||
class IVideoDriver : public virtual IReferenceCounted
|
class IVideoDriver : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Applications must call this method before performing any rendering.
|
//! Applications must call this method before performing any rendering.
|
||||||
/** This method can clear the back- and the z-buffer.
|
/** This method can clear the back- and the z-buffer.
|
||||||
\param clearFlag A combination of the E_CLEAR_BUFFER_FLAG bit-flags.
|
\param clearFlag A combination of the E_CLEAR_BUFFER_FLAG bit-flags.
|
||||||
|
@ -866,7 +869,7 @@ public:
|
||||||
//! Gets name of this video driver.
|
//! Gets name of this video driver.
|
||||||
/** \return Returns the name of the video driver, e.g. in case
|
/** \return Returns the name of the video driver, e.g. in case
|
||||||
of the Direct3D8 driver, it would return "Direct3D 8.1". */
|
of the Direct3D8 driver, it would return "Direct3D 8.1". */
|
||||||
virtual const char *getName() const = 0;
|
virtual const wchar_t* getName() const =0;
|
||||||
|
|
||||||
//! Adds an external image loader to the engine.
|
//! Adds an external image loader to the engine.
|
||||||
/** This is useful if the Irrlicht Engine should be able to load
|
/** This is useful if the Irrlicht Engine should be able to load
|
||||||
|
@ -1205,3 +1208,5 @@ public:
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_WRITE_FILE_H_INCLUDED__
|
||||||
|
#define __I_WRITE_FILE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
@ -45,3 +46,6 @@ public:
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
||||||
#define IRRLICHT_VERSION_MT_REVISION 15
|
#define IRRLICHT_VERSION_MT_REVISION 13
|
||||||
#define IRRLICHT_VERSION_MT "mt15"
|
#define IRRLICHT_VERSION_MT "mt13"
|
||||||
|
|
||||||
//! Irrlicht SDK Version
|
//! Irrlicht SDK Version
|
||||||
#define IRRLICHT_VERSION_MAJOR 1
|
#define IRRLICHT_VERSION_MAJOR 1
|
||||||
|
@ -17,6 +17,8 @@
|
||||||
#define IRRLICHT_VERSION_SVN alpha
|
#define IRRLICHT_VERSION_SVN alpha
|
||||||
#define IRRLICHT_SDK_VERSION "1.9.0" IRRLICHT_VERSION_MT
|
#define IRRLICHT_SDK_VERSION "1.9.0" IRRLICHT_VERSION_MT
|
||||||
|
|
||||||
|
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define IRRCALLCONV __stdcall
|
#define IRRCALLCONV __stdcall
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_IRRLICHT_DEVICE_H_INCLUDED__
|
||||||
|
#define __I_IRRLICHT_DEVICE_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "dimension2d.h"
|
#include "dimension2d.h"
|
||||||
|
@ -20,23 +21,19 @@ namespace irr
|
||||||
class ILogger;
|
class ILogger;
|
||||||
class IEventReceiver;
|
class IEventReceiver;
|
||||||
|
|
||||||
namespace io
|
namespace io {
|
||||||
{
|
|
||||||
class IFileSystem;
|
class IFileSystem;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
namespace gui
|
namespace gui {
|
||||||
{
|
|
||||||
class IGUIEnvironment;
|
class IGUIEnvironment;
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
|
||||||
namespace scene
|
namespace scene {
|
||||||
{
|
|
||||||
class ISceneManager;
|
class ISceneManager;
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
|
|
||||||
namespace video
|
namespace video {
|
||||||
{
|
|
||||||
class IContextManager;
|
class IContextManager;
|
||||||
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
|
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
@ -50,6 +47,7 @@ time.
|
||||||
class IrrlichtDevice : public virtual IReferenceCounted
|
class IrrlichtDevice : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Runs the device.
|
//! Runs the device.
|
||||||
/** Also increments the virtual timer by calling
|
/** Also increments the virtual timer by calling
|
||||||
ITimer::tick();. You can prevent this
|
ITimer::tick();. You can prevent this
|
||||||
|
@ -179,13 +177,6 @@ public:
|
||||||
/** \return True if window is fullscreen. */
|
/** \return True if window is fullscreen. */
|
||||||
virtual bool isFullscreen() const = 0;
|
virtual bool isFullscreen() const = 0;
|
||||||
|
|
||||||
//! Checks if the window could possibly be visible.
|
|
||||||
//! Currently, this only returns false when the activity is stopped on
|
|
||||||
//! Android. Note that for Android activities, "stopped" means something
|
|
||||||
//! different than you might expect (and also something different than
|
|
||||||
//! "paused"). Read the Android lifecycle documentation.
|
|
||||||
virtual bool isWindowVisible() const { return true; };
|
|
||||||
|
|
||||||
//! Get the current color format of the window
|
//! Get the current color format of the window
|
||||||
/** \return Color format of the window. */
|
/** \return Color format of the window. */
|
||||||
virtual video::ECOLOR_FORMAT getColorFormat() const = 0;
|
virtual video::ECOLOR_FORMAT getColorFormat() const = 0;
|
||||||
|
@ -339,3 +330,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -183,3 +183,5 @@ enum EKEY_CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_3D_VERTEX_H_INCLUDED__
|
||||||
|
#define __S_3D_VERTEX_H_INCLUDED__
|
||||||
|
|
||||||
#include "vector3d.h"
|
#include "vector3d.h"
|
||||||
#include "vector2d.h"
|
#include "vector2d.h"
|
||||||
|
@ -31,29 +32,28 @@ enum E_VERTEX_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Array holding the built in vertex type names
|
//! Array holding the built in vertex type names
|
||||||
const char *const sBuiltInVertexTypeNames[] = {
|
const char* const sBuiltInVertexTypeNames[] =
|
||||||
|
{
|
||||||
"standard",
|
"standard",
|
||||||
"2tcoords",
|
"2tcoords",
|
||||||
"tangents",
|
"tangents",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! standard vertex used by the Irrlicht engine.
|
//! standard vertex used by the Irrlicht engine.
|
||||||
struct S3DVertex
|
struct S3DVertex
|
||||||
{
|
{
|
||||||
//! default constructor
|
//! default constructor
|
||||||
constexpr S3DVertex() :
|
S3DVertex() : Color(0xffffffff) {}
|
||||||
Color(0xffffffff) {}
|
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
constexpr S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) :
|
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
|
||||||
Pos(x, y, z), Normal(nx, ny, nz), Color(c), TCoords(tu, tv) {}
|
: Pos(x,y,z), Normal(nx,ny,nz), Color(c), TCoords(tu,tv) {}
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
constexpr S3DVertex(const core::vector3df &pos, const core::vector3df &normal,
|
S3DVertex(const core::vector3df& pos, const core::vector3df& normal,
|
||||||
SColor color, const core::vector2df &tcoords) :
|
SColor color, const core::vector2d<f32>& tcoords)
|
||||||
Pos(pos),
|
: Pos(pos), Normal(normal), Color(color), TCoords(tcoords) {}
|
||||||
Normal(normal), Color(color), TCoords(tcoords) {}
|
|
||||||
|
|
||||||
//! Position
|
//! Position
|
||||||
core::vector3df Pos;
|
core::vector3df Pos;
|
||||||
|
@ -65,21 +65,21 @@ struct S3DVertex
|
||||||
SColor Color;
|
SColor Color;
|
||||||
|
|
||||||
//! Texture coordinates
|
//! Texture coordinates
|
||||||
core::vector2df TCoords;
|
core::vector2d<f32> TCoords;
|
||||||
|
|
||||||
constexpr bool operator==(const S3DVertex &other) const
|
bool operator==(const S3DVertex& other) const
|
||||||
{
|
{
|
||||||
return ((Pos == other.Pos) && (Normal == other.Normal) &&
|
return ((Pos == other.Pos) && (Normal == other.Normal) &&
|
||||||
(Color == other.Color) && (TCoords == other.TCoords));
|
(Color == other.Color) && (TCoords == other.TCoords));
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator!=(const S3DVertex &other) const
|
bool operator!=(const S3DVertex& other) const
|
||||||
{
|
{
|
||||||
return ((Pos != other.Pos) || (Normal != other.Normal) ||
|
return ((Pos != other.Pos) || (Normal != other.Normal) ||
|
||||||
(Color != other.Color) || (TCoords != other.TCoords));
|
(Color != other.Color) || (TCoords != other.TCoords));
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator<(const S3DVertex &other) const
|
bool operator<(const S3DVertex& other) const
|
||||||
{
|
{
|
||||||
return ((Pos < other.Pos) ||
|
return ((Pos < other.Pos) ||
|
||||||
((Pos == other.Pos) && (Normal < other.Normal)) ||
|
((Pos == other.Pos) && (Normal < other.Normal)) ||
|
||||||
|
@ -104,6 +104,7 @@ struct S3DVertex
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Vertex with two texture coordinates.
|
//! Vertex with two texture coordinates.
|
||||||
/** Usually used for geometry with lightmaps
|
/** Usually used for geometry with lightmaps
|
||||||
or other special materials.
|
or other special materials.
|
||||||
|
@ -111,65 +112,56 @@ or other special materials.
|
||||||
struct S3DVertex2TCoords : public S3DVertex
|
struct S3DVertex2TCoords : public S3DVertex
|
||||||
{
|
{
|
||||||
//! default constructor
|
//! default constructor
|
||||||
constexpr S3DVertex2TCoords() :
|
S3DVertex2TCoords() : S3DVertex() {}
|
||||||
S3DVertex() {}
|
|
||||||
|
|
||||||
//! constructor with two different texture coords, but no normal
|
//! constructor with two different texture coords, but no normal
|
||||||
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
|
S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2)
|
||||||
S3DVertex(x, y, z, 0.0f, 0.0f, 0.0f, c, tu, tv), TCoords2(tu2, tv2) {}
|
: S3DVertex(x,y,z, 0.0f, 0.0f, 0.0f, c, tu,tv), TCoords2(tu2,tv2) {}
|
||||||
|
|
||||||
//! constructor with two different texture coords, but no normal
|
//! constructor with two different texture coords, but no normal
|
||||||
constexpr S3DVertex2TCoords(const core::vector3df &pos, SColor color,
|
S3DVertex2TCoords(const core::vector3df& pos, SColor color,
|
||||||
const core::vector2df &tcoords, const core::vector2df &tcoords2) :
|
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2)
|
||||||
S3DVertex(pos, core::vector3df(), color, tcoords),
|
: S3DVertex(pos, core::vector3df(), color, tcoords), TCoords2(tcoords2) {}
|
||||||
TCoords2(tcoords2) {}
|
|
||||||
|
|
||||||
//! constructor with all values
|
//! constructor with all values
|
||||||
constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal, const SColor &color,
|
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, const SColor& color,
|
||||||
const core::vector2df &tcoords, const core::vector2df &tcoords2) :
|
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2)
|
||||||
S3DVertex(pos, normal, color, tcoords),
|
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords2) {}
|
||||||
TCoords2(tcoords2) {}
|
|
||||||
|
|
||||||
//! constructor with all values
|
//! constructor with all values
|
||||||
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
|
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2)
|
||||||
SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
|
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu2,tv2) {}
|
||||||
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
|
|
||||||
TCoords2(tu2, tv2) {}
|
|
||||||
|
|
||||||
//! constructor with the same texture coords and normal
|
//! constructor with the same texture coords and normal
|
||||||
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
|
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
|
||||||
SColor c, f32 tu, f32 tv) :
|
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu,tv) {}
|
||||||
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
|
|
||||||
TCoords2(tu, tv) {}
|
|
||||||
|
|
||||||
//! constructor with the same texture coords and normal
|
//! constructor with the same texture coords and normal
|
||||||
constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal,
|
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal,
|
||||||
SColor color, const core::vector2df &tcoords) :
|
SColor color, const core::vector2d<f32>& tcoords)
|
||||||
S3DVertex(pos, normal, color, tcoords),
|
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
|
||||||
TCoords2(tcoords) {}
|
|
||||||
|
|
||||||
//! constructor from S3DVertex
|
//! constructor from S3DVertex
|
||||||
constexpr S3DVertex2TCoords(const S3DVertex &o) :
|
S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {}
|
||||||
S3DVertex(o) {}
|
|
||||||
|
|
||||||
//! Second set of texture coordinates
|
//! Second set of texture coordinates
|
||||||
core::vector2df TCoords2;
|
core::vector2d<f32> TCoords2;
|
||||||
|
|
||||||
//! Equality operator
|
//! Equality operator
|
||||||
constexpr bool operator==(const S3DVertex2TCoords &other) const
|
bool operator==(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||||
(TCoords2 == other.TCoords2));
|
(TCoords2 == other.TCoords2));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Inequality operator
|
//! Inequality operator
|
||||||
constexpr bool operator!=(const S3DVertex2TCoords &other) const
|
bool operator!=(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||||
(TCoords2 != other.TCoords2));
|
(TCoords2 != other.TCoords2));
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator<(const S3DVertex2TCoords &other) const
|
bool operator<(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (TCoords2 < other.TCoords2)));
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (TCoords2 < other.TCoords2)));
|
||||||
|
@ -192,6 +184,7 @@ struct S3DVertex2TCoords : public S3DVertex
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Vertex with a tangent and binormal vector.
|
//! Vertex with a tangent and binormal vector.
|
||||||
/** Usually used for tangent space normal mapping.
|
/** Usually used for tangent space normal mapping.
|
||||||
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
||||||
|
@ -199,34 +192,30 @@ struct S3DVertex2TCoords : public S3DVertex
|
||||||
struct S3DVertexTangents : public S3DVertex
|
struct S3DVertexTangents : public S3DVertex
|
||||||
{
|
{
|
||||||
//! default constructor
|
//! default constructor
|
||||||
S3DVertexTangents() :
|
S3DVertexTangents() : S3DVertex() { }
|
||||||
S3DVertex() {}
|
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
constexpr S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx = 0.0f, f32 ny = 0.0f, f32 nz = 0.0f,
|
S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx=0.0f, f32 ny=0.0f, f32 nz=0.0f,
|
||||||
SColor c = 0xFFFFFFFF, f32 tu=0.0f, f32 tv=0.0f,
|
SColor c = 0xFFFFFFFF, f32 tu=0.0f, f32 tv=0.0f,
|
||||||
f32 tanx=0.0f, f32 tany=0.0f, f32 tanz=0.0f,
|
f32 tanx=0.0f, f32 tany=0.0f, f32 tanz=0.0f,
|
||||||
f32 bx = 0.0f, f32 by = 0.0f, f32 bz = 0.0f) :
|
f32 bx=0.0f, f32 by=0.0f, f32 bz=0.0f)
|
||||||
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
|
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), Tangent(tanx,tany,tanz), Binormal(bx,by,bz) { }
|
||||||
Tangent(tanx, tany, tanz), Binormal(bx, by, bz) {}
|
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
constexpr S3DVertexTangents(const core::vector3df &pos, SColor c,
|
S3DVertexTangents(const core::vector3df& pos, SColor c,
|
||||||
const core::vector2df &tcoords) :
|
const core::vector2df& tcoords)
|
||||||
S3DVertex(pos, core::vector3df(), c, tcoords) {}
|
: S3DVertex(pos, core::vector3df(), c, tcoords) { }
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
constexpr S3DVertexTangents(const core::vector3df &pos,
|
S3DVertexTangents(const core::vector3df& pos,
|
||||||
const core::vector3df& normal, SColor c,
|
const core::vector3df& normal, SColor c,
|
||||||
const core::vector2df& tcoords,
|
const core::vector2df& tcoords,
|
||||||
const core::vector3df& tangent=core::vector3df(),
|
const core::vector3df& tangent=core::vector3df(),
|
||||||
const core::vector3df &binormal = core::vector3df()) :
|
const core::vector3df& binormal=core::vector3df())
|
||||||
S3DVertex(pos, normal, c, tcoords),
|
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
|
||||||
Tangent(tangent), Binormal(binormal) {}
|
|
||||||
|
|
||||||
//! constructor from S3DVertex
|
//! constructor from S3DVertex
|
||||||
constexpr S3DVertexTangents(const S3DVertex &o) :
|
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {}
|
||||||
S3DVertex(o) {}
|
|
||||||
|
|
||||||
//! Tangent vector along the x-axis of the texture
|
//! Tangent vector along the x-axis of the texture
|
||||||
core::vector3df Tangent;
|
core::vector3df Tangent;
|
||||||
|
@ -234,21 +223,21 @@ struct S3DVertexTangents : public S3DVertex
|
||||||
//! Binormal vector (tangent x normal)
|
//! Binormal vector (tangent x normal)
|
||||||
core::vector3df Binormal;
|
core::vector3df Binormal;
|
||||||
|
|
||||||
constexpr bool operator==(const S3DVertexTangents &other) const
|
bool operator==(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||||
(Tangent == other.Tangent) &&
|
(Tangent == other.Tangent) &&
|
||||||
(Binormal == other.Binormal));
|
(Binormal == other.Binormal));
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator!=(const S3DVertexTangents &other) const
|
bool operator!=(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||||
(Tangent != other.Tangent) ||
|
(Tangent != other.Tangent) ||
|
||||||
(Binormal != other.Binormal));
|
(Binormal != other.Binormal));
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool operator<(const S3DVertexTangents &other) const
|
bool operator<(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent < other.Tangent)) ||
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent < other.Tangent)) ||
|
||||||
|
@ -272,9 +261,12 @@ struct S3DVertexTangents : public S3DVertex
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
|
inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
|
||||||
{
|
{
|
||||||
switch (vertexType) {
|
switch (vertexType)
|
||||||
|
{
|
||||||
case video::EVT_2TCOORDS:
|
case video::EVT_2TCOORDS:
|
||||||
return sizeof(video::S3DVertex2TCoords);
|
return sizeof(video::S3DVertex2TCoords);
|
||||||
case video::EVT_TANGENTS:
|
case video::EVT_TANGENTS:
|
||||||
|
@ -284,5 +276,9 @@ inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_ANIMATED_MESH_H_INCLUDED__
|
||||||
|
#define __S_ANIMATED_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "IAnimatedMesh.h"
|
#include "IAnimatedMesh.h"
|
||||||
#include "IMesh.h"
|
#include "IMesh.h"
|
||||||
|
@ -18,8 +19,7 @@ namespace scene
|
||||||
struct SAnimatedMesh : public IAnimatedMesh
|
struct SAnimatedMesh : public IAnimatedMesh
|
||||||
{
|
{
|
||||||
//! constructor
|
//! constructor
|
||||||
SAnimatedMesh(scene::IMesh *mesh = 0, scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) :
|
SAnimatedMesh(scene::IMesh* mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) : IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
|
||||||
IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
|
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("SAnimatedMesh");
|
setDebugName("SAnimatedMesh");
|
||||||
|
@ -77,7 +77,8 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
//! adds a Mesh
|
//! adds a Mesh
|
||||||
void addMesh(IMesh* mesh)
|
void addMesh(IMesh* mesh)
|
||||||
{
|
{
|
||||||
if (mesh) {
|
if (mesh)
|
||||||
|
{
|
||||||
mesh->grab();
|
mesh->grab();
|
||||||
Meshes.push_back(mesh);
|
Meshes.push_back(mesh);
|
||||||
}
|
}
|
||||||
|
@ -173,5 +174,9 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
E_ANIMATED_MESH_TYPE Type;
|
E_ANIMATED_MESH_TYPE Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
218
include/SColor.h
218
include/SColor.h
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __COLOR_H_INCLUDED__
|
||||||
|
#define __COLOR_H_INCLUDED__
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
#include "irrMath.h"
|
#include "irrMath.h"
|
||||||
|
@ -36,6 +37,50 @@ enum ECOLOR_FORMAT
|
||||||
//! Warning: This tends to be BGRA in memory (it's ARGB on file, but with usual big-endian memory it's flipped)
|
//! Warning: This tends to be BGRA in memory (it's ARGB on file, but with usual big-endian memory it's flipped)
|
||||||
ECF_A8R8G8B8,
|
ECF_A8R8G8B8,
|
||||||
|
|
||||||
|
/** Compressed image formats. **/
|
||||||
|
|
||||||
|
//! DXT1 color format.
|
||||||
|
ECF_DXT1,
|
||||||
|
|
||||||
|
//! DXT2 color format.
|
||||||
|
ECF_DXT2,
|
||||||
|
|
||||||
|
//! DXT3 color format.
|
||||||
|
ECF_DXT3,
|
||||||
|
|
||||||
|
//! DXT4 color format.
|
||||||
|
ECF_DXT4,
|
||||||
|
|
||||||
|
//! DXT5 color format.
|
||||||
|
ECF_DXT5,
|
||||||
|
|
||||||
|
//! PVRTC RGB 2bpp.
|
||||||
|
ECF_PVRTC_RGB2,
|
||||||
|
|
||||||
|
//! PVRTC ARGB 2bpp.
|
||||||
|
ECF_PVRTC_ARGB2,
|
||||||
|
|
||||||
|
//! PVRTC RGB 4bpp.
|
||||||
|
ECF_PVRTC_RGB4,
|
||||||
|
|
||||||
|
//! PVRTC ARGB 4bpp.
|
||||||
|
ECF_PVRTC_ARGB4,
|
||||||
|
|
||||||
|
//! PVRTC2 ARGB 2bpp.
|
||||||
|
ECF_PVRTC2_ARGB2,
|
||||||
|
|
||||||
|
//! PVRTC2 ARGB 4bpp.
|
||||||
|
ECF_PVRTC2_ARGB4,
|
||||||
|
|
||||||
|
//! ETC1 RGB.
|
||||||
|
ECF_ETC1,
|
||||||
|
|
||||||
|
//! ETC2 RGB.
|
||||||
|
ECF_ETC2_RGB,
|
||||||
|
|
||||||
|
//! ETC2 ARGB.
|
||||||
|
ECF_ETC2_ARGB,
|
||||||
|
|
||||||
/** The following formats may only be used for render target textures. */
|
/** The following formats may only be used for render target textures. */
|
||||||
|
|
||||||
/** Floating point formats. */
|
/** Floating point formats. */
|
||||||
|
@ -88,11 +133,26 @@ enum ECOLOR_FORMAT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for ECOLOR_FORMAT types
|
//! Names for ECOLOR_FORMAT types
|
||||||
const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = {
|
const c8* const ColorFormatNames[ECF_UNKNOWN+2] =
|
||||||
|
{
|
||||||
"A1R5G5B5",
|
"A1R5G5B5",
|
||||||
"R5G6B5",
|
"R5G6B5",
|
||||||
"R8G8B8",
|
"R8G8B8",
|
||||||
"A8R8G8B8",
|
"A8R8G8B8",
|
||||||
|
"DXT1",
|
||||||
|
"DXT2",
|
||||||
|
"DXT3",
|
||||||
|
"DXT4",
|
||||||
|
"DXT5",
|
||||||
|
"PVRTC_RGB2",
|
||||||
|
"PVRTC_ARGB2",
|
||||||
|
"PVRTC_RGB4",
|
||||||
|
"PVRTC_ARGB4",
|
||||||
|
"PVRTC2_ARGB2",
|
||||||
|
"PVRTC2_ARGB4",
|
||||||
|
"ETC1",
|
||||||
|
"ETC2_RGB",
|
||||||
|
"ETC2_ARGB",
|
||||||
"R16F",
|
"R16F",
|
||||||
"G16R16F",
|
"G16R16F",
|
||||||
"A16B16G16R16F",
|
"A16B16G16R16F",
|
||||||
|
@ -107,9 +167,10 @@ const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = {
|
||||||
"D32",
|
"D32",
|
||||||
"D24S8",
|
"D24S8",
|
||||||
"UNKNOWN",
|
"UNKNOWN",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Creates a 16 bit A1R5G5B5 color
|
//! Creates a 16 bit A1R5G5B5 color
|
||||||
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a=0xFF)
|
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a=0xFF)
|
||||||
{
|
{
|
||||||
|
@ -119,12 +180,14 @@ inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF)
|
||||||
(b & 0xF8) >> 3);
|
(b & 0xF8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Creates a 16 bit A1R5G5B5 color
|
//! Creates a 16 bit A1R5G5B5 color
|
||||||
inline u16 RGB16(u32 r, u32 g, u32 b)
|
inline u16 RGB16(u32 r, u32 g, u32 b)
|
||||||
{
|
{
|
||||||
return RGBA16(r,g,b);
|
return RGBA16(r,g,b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values
|
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values
|
||||||
inline u16 RGB16from16(u16 r, u16 g, u16 b)
|
inline u16 RGB16from16(u16 r, u16 g, u16 b)
|
||||||
{
|
{
|
||||||
|
@ -134,6 +197,7 @@ inline u16 RGB16from16(u16 r, u16 g, u16 b)
|
||||||
(b & 0x1F));
|
(b & 0x1F));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
|
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
|
||||||
inline u16 X8R8G8B8toA1R5G5B5(u32 color)
|
inline u16 X8R8G8B8toA1R5G5B5(u32 color)
|
||||||
{
|
{
|
||||||
|
@ -143,6 +207,7 @@ inline u16 X8R8G8B8toA1R5G5B5(u32 color)
|
||||||
( color & 0x000000F8) >> 3);
|
( color & 0x000000F8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
|
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
|
||||||
inline u16 A8R8G8B8toA1R5G5B5(u32 color)
|
inline u16 A8R8G8B8toA1R5G5B5(u32 color)
|
||||||
{
|
{
|
||||||
|
@ -152,6 +217,7 @@ inline u16 A8R8G8B8toA1R5G5B5(u32 color)
|
||||||
( color & 0x000000F8) >> 3);
|
( color & 0x000000F8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
|
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
|
||||||
inline u16 A8R8G8B8toR5G6B5(u32 color)
|
inline u16 A8R8G8B8toR5G6B5(u32 color)
|
||||||
{
|
{
|
||||||
|
@ -160,6 +226,7 @@ inline u16 A8R8G8B8toR5G6B5(u32 color)
|
||||||
( color & 0x000000F8) >> 3);
|
( color & 0x000000F8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Convert A8R8G8B8 Color from A1R5G5B5 color
|
//! Convert A8R8G8B8 Color from A1R5G5B5 color
|
||||||
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */
|
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */
|
||||||
inline u32 A1R5G5B5toA8R8G8B8(u16 color)
|
inline u32 A1R5G5B5toA8R8G8B8(u16 color)
|
||||||
|
@ -167,9 +234,11 @@ inline u32 A1R5G5B5toA8R8G8B8(u16 color)
|
||||||
return ( (( -( (s32) color & 0x00008000 ) >> (s32) 31 ) & 0xFF000000 ) |
|
return ( (( -( (s32) color & 0x00008000 ) >> (s32) 31 ) & 0xFF000000 ) |
|
||||||
(( color & 0x00007C00 ) << 9) | (( color & 0x00007000 ) << 4) |
|
(( color & 0x00007C00 ) << 9) | (( color & 0x00007000 ) << 4) |
|
||||||
(( color & 0x000003E0 ) << 6) | (( color & 0x00000380 ) << 1) |
|
(( color & 0x000003E0 ) << 6) | (( color & 0x00000380 ) << 1) |
|
||||||
((color & 0x0000001F) << 3) | ((color & 0x0000001C) >> 2));
|
(( color & 0x0000001F ) << 3) | (( color & 0x0000001C ) >> 2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns A8R8G8B8 Color from R5G6B5 color
|
//! Returns A8R8G8B8 Color from R5G6B5 color
|
||||||
inline u32 R5G6B5toA8R8G8B8(u16 color)
|
inline u32 R5G6B5toA8R8G8B8(u16 color)
|
||||||
{
|
{
|
||||||
|
@ -179,18 +248,22 @@ inline u32 R5G6B5toA8R8G8B8(u16 color)
|
||||||
((color & 0x001F) << 3);
|
((color & 0x001F) << 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns A1R5G5B5 Color from R5G6B5 color
|
//! Returns A1R5G5B5 Color from R5G6B5 color
|
||||||
inline u16 R5G6B5toA1R5G5B5(u16 color)
|
inline u16 R5G6B5toA1R5G5B5(u16 color)
|
||||||
{
|
{
|
||||||
return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F));
|
return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns R5G6B5 Color from A1R5G5B5 color
|
//! Returns R5G6B5 Color from A1R5G5B5 color
|
||||||
inline u16 A1R5G5B5toR5G6B5(u16 color)
|
inline u16 A1R5G5B5toR5G6B5(u16 color)
|
||||||
{
|
{
|
||||||
return (((color & 0x7FE0) << 1) | (color & 0x1F));
|
return (((color & 0x7FE0) << 1) | (color & 0x1F));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//! Returns the alpha component from A1R5G5B5 color
|
//! Returns the alpha component from A1R5G5B5 color
|
||||||
/** In Irrlicht, alpha refers to opacity.
|
/** In Irrlicht, alpha refers to opacity.
|
||||||
\return The alpha value of the color. 0 is transparent, 1 is opaque. */
|
\return The alpha value of the color. 0 is transparent, 1 is opaque. */
|
||||||
|
@ -199,6 +272,7 @@ inline u32 getAlpha(u16 color)
|
||||||
return ((color >> 15)&0x1);
|
return ((color >> 15)&0x1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the red component from A1R5G5B5 color.
|
//! Returns the red component from A1R5G5B5 color.
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
inline u32 getRed(u16 color)
|
inline u32 getRed(u16 color)
|
||||||
|
@ -206,6 +280,7 @@ inline u32 getRed(u16 color)
|
||||||
return ((color >> 10)&0x1F);
|
return ((color >> 10)&0x1F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the green component from A1R5G5B5 color
|
//! Returns the green component from A1R5G5B5 color
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
inline u32 getGreen(u16 color)
|
inline u32 getGreen(u16 color)
|
||||||
|
@ -213,6 +288,7 @@ inline u32 getGreen(u16 color)
|
||||||
return ((color >> 5)&0x1F);
|
return ((color >> 5)&0x1F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the blue component from A1R5G5B5 color
|
//! Returns the blue component from A1R5G5B5 color
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
inline u32 getBlue(u16 color)
|
inline u32 getBlue(u16 color)
|
||||||
|
@ -220,12 +296,14 @@ inline u32 getBlue(u16 color)
|
||||||
return (color & 0x1F);
|
return (color & 0x1F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns the average from a 16 bit A1R5G5B5 color
|
//! Returns the average from a 16 bit A1R5G5B5 color
|
||||||
inline s32 getAverage(s16 color)
|
inline s32 getAverage(s16 color)
|
||||||
{
|
{
|
||||||
return ((getRed(color)<<3) + (getGreen(color)<<3) + (getBlue(color)<<3)) / 3;
|
return ((getRed(color)<<3) + (getGreen(color)<<3) + (getBlue(color)<<3)) / 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Class representing a 32 bit ARGB color.
|
//! Class representing a 32 bit ARGB color.
|
||||||
/** The color values for alpha, red, green, and blue are
|
/** The color values for alpha, red, green, and blue are
|
||||||
stored in a single u32. So all four values may be between 0 and 255.
|
stored in a single u32. So all four values may be between 0 and 255.
|
||||||
|
@ -238,18 +316,19 @@ This class must consist of only one u32 and must not use virtual functions.
|
||||||
class SColor
|
class SColor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor of the Color. Does nothing.
|
//! Constructor of the Color. Does nothing.
|
||||||
/** The color value is not initialized to save time. */
|
/** The color value is not initialized to save time. */
|
||||||
SColor() {}
|
SColor() {}
|
||||||
|
|
||||||
//! Constructs the color from 4 values representing the alpha, red, green and blue component.
|
//! Constructs the color from 4 values representing the alpha, red, green and blue component.
|
||||||
/** Must be values between 0 and 255. */
|
/** Must be values between 0 and 255. */
|
||||||
constexpr SColor(u32 a, u32 r, u32 g, u32 b) :
|
SColor (u32 a, u32 r, u32 g, u32 b)
|
||||||
color(((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)) {}
|
: color(((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff)) {}
|
||||||
|
|
||||||
//! Constructs the color from a 32 bit value. Could be another color.
|
//! Constructs the color from a 32 bit value. Could be another color.
|
||||||
constexpr SColor(u32 clr) :
|
SColor(u32 clr)
|
||||||
color(clr) {}
|
: color(clr) {}
|
||||||
|
|
||||||
//! Returns the alpha component of the color.
|
//! Returns the alpha component of the color.
|
||||||
/** The alpha component defines how opaque a color is.
|
/** The alpha component defines how opaque a color is.
|
||||||
|
@ -398,17 +477,13 @@ public:
|
||||||
|
|
||||||
return SColor(
|
return SColor(
|
||||||
core::clamp( core::floor32(
|
core::clamp( core::floor32(
|
||||||
getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2),
|
getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2 ), 0, 255 ),
|
||||||
0, 255),
|
|
||||||
core::clamp( core::floor32(
|
core::clamp( core::floor32(
|
||||||
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2),
|
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2 ), 0, 255 ),
|
||||||
0, 255),
|
|
||||||
core::clamp ( core::floor32(
|
core::clamp ( core::floor32(
|
||||||
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2),
|
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2 ), 0, 255 ),
|
||||||
0, 255),
|
|
||||||
core::clamp ( core::floor32(
|
core::clamp ( core::floor32(
|
||||||
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2),
|
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2 ), 0, 255 ));
|
||||||
0, 255));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the color by expecting data in the given format
|
//! set the color by expecting data in the given format
|
||||||
|
@ -417,7 +492,8 @@ public:
|
||||||
*/
|
*/
|
||||||
void setData(const void *data, ECOLOR_FORMAT format)
|
void setData(const void *data, ECOLOR_FORMAT format)
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch (format)
|
||||||
|
{
|
||||||
case ECF_A1R5G5B5:
|
case ECF_A1R5G5B5:
|
||||||
color = A1R5G5B5toA8R8G8B8(*(u16*)data);
|
color = A1R5G5B5toA8R8G8B8(*(u16*)data);
|
||||||
break;
|
break;
|
||||||
|
@ -427,10 +503,12 @@ public:
|
||||||
case ECF_A8R8G8B8:
|
case ECF_A8R8G8B8:
|
||||||
color = *(u32*)data;
|
color = *(u32*)data;
|
||||||
break;
|
break;
|
||||||
case ECF_R8G8B8: {
|
case ECF_R8G8B8:
|
||||||
|
{
|
||||||
const u8* p = (u8*)data;
|
const u8* p = (u8*)data;
|
||||||
set(255, p[0],p[1],p[2]);
|
set(255, p[0],p[1],p[2]);
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
color = 0xffffffff;
|
color = 0xffffffff;
|
||||||
break;
|
break;
|
||||||
|
@ -443,28 +521,37 @@ public:
|
||||||
*/
|
*/
|
||||||
void getData(void *data, ECOLOR_FORMAT format) const
|
void getData(void *data, ECOLOR_FORMAT format) const
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch(format)
|
||||||
case ECF_A1R5G5B5: {
|
{
|
||||||
|
case ECF_A1R5G5B5:
|
||||||
|
{
|
||||||
u16 * dest = (u16*)data;
|
u16 * dest = (u16*)data;
|
||||||
*dest = video::A8R8G8B8toA1R5G5B5( color );
|
*dest = video::A8R8G8B8toA1R5G5B5( color );
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ECF_R5G6B5: {
|
case ECF_R5G6B5:
|
||||||
|
{
|
||||||
u16 * dest = (u16*)data;
|
u16 * dest = (u16*)data;
|
||||||
*dest = video::A8R8G8B8toR5G6B5( color );
|
*dest = video::A8R8G8B8toR5G6B5( color );
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ECF_R8G8B8: {
|
case ECF_R8G8B8:
|
||||||
|
{
|
||||||
u8* dest = (u8*)data;
|
u8* dest = (u8*)data;
|
||||||
dest[0] = (u8)getRed();
|
dest[0] = (u8)getRed();
|
||||||
dest[1] = (u8)getGreen();
|
dest[1] = (u8)getGreen();
|
||||||
dest[2] = (u8)getBlue();
|
dest[2] = (u8)getBlue();
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ECF_A8R8G8B8: {
|
case ECF_A8R8G8B8:
|
||||||
|
{
|
||||||
u32 * dest = (u32*)data;
|
u32 * dest = (u32*)data;
|
||||||
*dest = color;
|
*dest = color;
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -475,6 +562,7 @@ public:
|
||||||
u32 color;
|
u32 color;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Class representing a color with four floats.
|
//! Class representing a color with four floats.
|
||||||
/** The color values for red, green, blue
|
/** The color values for red, green, blue
|
||||||
and alpha are each stored in a 32 bit floating point variable.
|
and alpha are each stored in a 32 bit floating point variable.
|
||||||
|
@ -487,8 +575,7 @@ class SColorf
|
||||||
public:
|
public:
|
||||||
//! Default constructor for SColorf.
|
//! Default constructor for SColorf.
|
||||||
/** Sets red, green and blue to 0.0f and alpha to 1.0f. */
|
/** Sets red, green and blue to 0.0f and alpha to 1.0f. */
|
||||||
SColorf() :
|
SColorf() : r(0.0f), g(0.0f), b(0.0f), a(1.0f) {}
|
||||||
r(0.0f), g(0.0f), b(0.0f), a(1.0f) {}
|
|
||||||
|
|
||||||
//! Constructs a color from up to four color values: red, green, blue, and alpha.
|
//! Constructs a color from up to four color values: red, green, blue, and alpha.
|
||||||
/** \param r: Red color component. Should be a value between
|
/** \param r: Red color component. Should be a value between
|
||||||
|
@ -501,8 +588,7 @@ public:
|
||||||
component defines how transparent a color should be. Has to be
|
component defines how transparent a color should be. Has to be
|
||||||
a value between 0.0f and 1.0f, 1.0f means not transparent
|
a value between 0.0f and 1.0f, 1.0f means not transparent
|
||||||
(opaque), 0.0f means fully transparent. */
|
(opaque), 0.0f means fully transparent. */
|
||||||
SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) :
|
SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) : r(r), g(g), b(b), a(a) {}
|
||||||
r(r), g(g), b(b), a(a) {}
|
|
||||||
|
|
||||||
//! Constructs a color from 32 bit Color.
|
//! Constructs a color from 32 bit Color.
|
||||||
/** \param c: 32 bit color from which this SColorf class is
|
/** \param c: 32 bit color from which this SColorf class is
|
||||||
|
@ -529,12 +615,7 @@ public:
|
||||||
no green (=black) and 1.0f, meaning full green.
|
no green (=black) and 1.0f, meaning full green.
|
||||||
\param bb: Blue color component. Should be a value between 0.0f meaning
|
\param bb: Blue color component. Should be a value between 0.0f meaning
|
||||||
no blue (=black) and 1.0f, meaning full blue. */
|
no blue (=black) and 1.0f, meaning full blue. */
|
||||||
void set(f32 rr, f32 gg, f32 bb)
|
void set(f32 rr, f32 gg, f32 bb) {r = rr; g =gg; b = bb; }
|
||||||
{
|
|
||||||
r = rr;
|
|
||||||
g = gg;
|
|
||||||
b = bb;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets all four color components to new values at once.
|
//! Sets all four color components to new values at once.
|
||||||
/** \param aa: Alpha component. Should be a value between 0.0f meaning
|
/** \param aa: Alpha component. Should be a value between 0.0f meaning
|
||||||
|
@ -545,13 +626,7 @@ public:
|
||||||
no green and 1.0f, meaning full green.
|
no green and 1.0f, meaning full green.
|
||||||
\param bb: Blue color component. Should be a value between 0.0f meaning
|
\param bb: Blue color component. Should be a value between 0.0f meaning
|
||||||
no blue and 1.0f, meaning full blue. */
|
no blue and 1.0f, meaning full blue. */
|
||||||
void set(f32 aa, f32 rr, f32 gg, f32 bb)
|
void set(f32 aa, f32 rr, f32 gg, f32 bb) {a = aa; r = rr; g =gg; b = bb; }
|
||||||
{
|
|
||||||
a = aa;
|
|
||||||
r = rr;
|
|
||||||
g = gg;
|
|
||||||
b = bb;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Interpolates the color with a f32 value to another color
|
//! Interpolates the color with a f32 value to another color
|
||||||
/** \param other: Other color
|
/** \param other: Other color
|
||||||
|
@ -585,22 +660,16 @@ public:
|
||||||
a * mul0 + c1.a * mul1 + c2.a * mul2);
|
a * mul0 + c1.a * mul1 + c2.a * mul2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets a color component by index. R=0, G=1, B=2, A=3
|
//! Sets a color component by index. R=0, G=1, B=2, A=3
|
||||||
void setColorComponentValue(s32 index, f32 value)
|
void setColorComponentValue(s32 index, f32 value)
|
||||||
{
|
{
|
||||||
switch (index) {
|
switch(index)
|
||||||
case 0:
|
{
|
||||||
r = value;
|
case 0: r = value; break;
|
||||||
break;
|
case 1: g = value; break;
|
||||||
case 1:
|
case 2: b = value; break;
|
||||||
g = value;
|
case 3: a = value; break;
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
b = value;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
a = value;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,6 +698,7 @@ public:
|
||||||
f32 a;
|
f32 a;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! Class representing a color in HSL format
|
//! Class representing a color in HSL format
|
||||||
/** The color values for hue, saturation, luminance
|
/** The color values for hue, saturation, luminance
|
||||||
are stored in 32bit floating point variables. Hue is in range [0,360],
|
are stored in 32bit floating point variables. Hue is in range [0,360],
|
||||||
|
@ -637,8 +707,8 @@ Luminance and Saturation are in percent [0,100]
|
||||||
class SColorHSL
|
class SColorHSL
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
constexpr SColorHSL(f32 h = 0.f, f32 s = 0.f, f32 l = 0.f) :
|
SColorHSL ( f32 h = 0.f, f32 s = 0.f, f32 l = 0.f )
|
||||||
Hue(h), Saturation(s), Luminance(l) {}
|
: Hue ( h ), Saturation ( s ), Luminance ( l ) {}
|
||||||
|
|
||||||
void fromRGB(const SColorf &color);
|
void fromRGB(const SColorf &color);
|
||||||
void toRGB(SColorf &color) const;
|
void toRGB(SColorf &color) const;
|
||||||
|
@ -649,6 +719,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const;
|
inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void SColorHSL::fromRGB(const SColorf &color)
|
inline void SColorHSL::fromRGB(const SColorf &color)
|
||||||
|
@ -656,16 +727,20 @@ inline void SColorHSL::fromRGB(const SColorf &color)
|
||||||
const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue());
|
const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue());
|
||||||
const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue());
|
const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue());
|
||||||
Luminance = (maxVal+minVal)*50;
|
Luminance = (maxVal+minVal)*50;
|
||||||
if (core::equals(maxVal, minVal)) {
|
if (core::equals(maxVal, minVal))
|
||||||
|
{
|
||||||
Hue=0.f;
|
Hue=0.f;
|
||||||
Saturation=0.f;
|
Saturation=0.f;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const f32 delta = maxVal-minVal;
|
const f32 delta = maxVal-minVal;
|
||||||
if (Luminance <= 50) {
|
if ( Luminance <= 50 )
|
||||||
|
{
|
||||||
Saturation = (delta)/(maxVal+minVal);
|
Saturation = (delta)/(maxVal+minVal);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Saturation = (delta)/(2-maxVal-minVal);
|
Saturation = (delta)/(2-maxVal-minVal);
|
||||||
}
|
}
|
||||||
Saturation *= 100;
|
Saturation *= 100;
|
||||||
|
@ -682,19 +757,24 @@ inline void SColorHSL::fromRGB(const SColorf &color)
|
||||||
Hue += 360;
|
Hue += 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void SColorHSL::toRGB(SColorf &color) const
|
inline void SColorHSL::toRGB(SColorf &color) const
|
||||||
{
|
{
|
||||||
const f32 l = Luminance/100;
|
const f32 l = Luminance/100;
|
||||||
if (core::iszero(Saturation)) { // grey
|
if (core::iszero(Saturation)) // grey
|
||||||
|
{
|
||||||
color.set(l, l, l);
|
color.set(l, l, l);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 rm2;
|
f32 rm2;
|
||||||
|
|
||||||
if (Luminance <= 50) {
|
if ( Luminance <= 50 )
|
||||||
|
{
|
||||||
rm2 = l + l * (Saturation/100);
|
rm2 = l + l * (Saturation/100);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
rm2 = l + (1 - l) * (Saturation/100);
|
rm2 = l + (1 - l) * (Saturation/100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,9 +783,11 @@ inline void SColorHSL::toRGB(SColorf &color) const
|
||||||
const f32 h = Hue / 360.0f;
|
const f32 h = Hue / 360.0f;
|
||||||
color.set( toRGB1(rm1, rm2, h + 1.f/3.f),
|
color.set( toRGB1(rm1, rm2, h + 1.f/3.f),
|
||||||
toRGB1(rm1, rm2, h),
|
toRGB1(rm1, rm2, h),
|
||||||
toRGB1(rm1, rm2, h - 1.f / 3.f));
|
toRGB1(rm1, rm2, h - 1.f/3.f)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// algorithm from Foley/Van-Dam
|
// algorithm from Foley/Van-Dam
|
||||||
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
|
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
|
||||||
{
|
{
|
||||||
|
@ -726,3 +808,5 @@ inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
|
||||||
|
#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
@ -17,18 +18,8 @@ you are using the software or the null device.
|
||||||
*/
|
*/
|
||||||
struct SExposedVideoData
|
struct SExposedVideoData
|
||||||
{
|
{
|
||||||
SExposedVideoData()
|
SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;}
|
||||||
{
|
explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;}
|
||||||
OpenGLWin32.HDc = 0;
|
|
||||||
OpenGLWin32.HRc = 0;
|
|
||||||
OpenGLWin32.HWnd = 0;
|
|
||||||
}
|
|
||||||
explicit SExposedVideoData(void *Window)
|
|
||||||
{
|
|
||||||
OpenGLWin32.HDc = 0;
|
|
||||||
OpenGLWin32.HRc = 0;
|
|
||||||
OpenGLWin32.HWnd = Window;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct SOpenGLWin32
|
struct SOpenGLWin32
|
||||||
{
|
{
|
||||||
|
@ -87,3 +78,7 @@ struct SExposedVideoData
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__
|
||||||
|
#define __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__
|
||||||
|
|
||||||
#include "EDriverTypes.h"
|
#include "EDriverTypes.h"
|
||||||
#include "EDeviceTypes.h"
|
#include "EDeviceTypes.h"
|
||||||
|
@ -34,8 +35,10 @@ struct SIrrlichtCreationParameters
|
||||||
Stencilbuffer(true),
|
Stencilbuffer(true),
|
||||||
Vsync(false),
|
Vsync(false),
|
||||||
AntiAlias(0),
|
AntiAlias(0),
|
||||||
|
HandleSRGB(false),
|
||||||
WithAlphaChannel(false),
|
WithAlphaChannel(false),
|
||||||
Doublebuffer(true),
|
Doublebuffer(true),
|
||||||
|
IgnoreInput(false),
|
||||||
Stereobuffer(false),
|
Stereobuffer(false),
|
||||||
EventReceiver(0),
|
EventReceiver(0),
|
||||||
WindowId(0),
|
WindowId(0),
|
||||||
|
@ -56,9 +59,7 @@ struct SIrrlichtCreationParameters
|
||||||
|
|
||||||
SIrrlichtCreationParameters(const SIrrlichtCreationParameters& other) :
|
SIrrlichtCreationParameters(const SIrrlichtCreationParameters& other) :
|
||||||
SDK_version_do_not_use(IRRLICHT_SDK_VERSION)
|
SDK_version_do_not_use(IRRLICHT_SDK_VERSION)
|
||||||
{
|
{*this = other;}
|
||||||
*this = other;
|
|
||||||
}
|
|
||||||
|
|
||||||
SIrrlichtCreationParameters& operator=(const SIrrlichtCreationParameters& other)
|
SIrrlichtCreationParameters& operator=(const SIrrlichtCreationParameters& other)
|
||||||
{
|
{
|
||||||
|
@ -74,8 +75,10 @@ struct SIrrlichtCreationParameters
|
||||||
Stencilbuffer = other.Stencilbuffer;
|
Stencilbuffer = other.Stencilbuffer;
|
||||||
Vsync = other.Vsync;
|
Vsync = other.Vsync;
|
||||||
AntiAlias = other.AntiAlias;
|
AntiAlias = other.AntiAlias;
|
||||||
|
HandleSRGB = other.HandleSRGB;
|
||||||
WithAlphaChannel = other.WithAlphaChannel;
|
WithAlphaChannel = other.WithAlphaChannel;
|
||||||
Doublebuffer = other.Doublebuffer;
|
Doublebuffer = other.Doublebuffer;
|
||||||
|
IgnoreInput = other.IgnoreInput;
|
||||||
Stereobuffer = other.Stereobuffer;
|
Stereobuffer = other.Stereobuffer;
|
||||||
EventReceiver = other.EventReceiver;
|
EventReceiver = other.EventReceiver;
|
||||||
WindowId = other.WindowId;
|
WindowId = other.WindowId;
|
||||||
|
@ -156,6 +159,21 @@ struct SIrrlichtCreationParameters
|
||||||
Default value: 0 - disabled */
|
Default value: 0 - disabled */
|
||||||
u8 AntiAlias;
|
u8 AntiAlias;
|
||||||
|
|
||||||
|
//! Flag to enable proper sRGB and linear color handling
|
||||||
|
/** In most situations, it is desirable to have the color handling in
|
||||||
|
non-linear sRGB color space, and only do the intermediate color
|
||||||
|
calculations in linear RGB space. If this flag is enabled, the device and
|
||||||
|
driver try to assure that all color input and output are color corrected
|
||||||
|
and only the internal color representation is linear. This means, that
|
||||||
|
the color output is properly gamma-adjusted to provide the brighter
|
||||||
|
colors for monitor display. And that blending and lighting give a more
|
||||||
|
natural look, due to proper conversion from non-linear colors into linear
|
||||||
|
color space for blend operations. If this flag is enabled, all texture colors
|
||||||
|
(which are usually in sRGB space) are correctly displayed. However vertex colors
|
||||||
|
and other explicitly set values have to be manually encoded in linear color space.
|
||||||
|
Default value: false. */
|
||||||
|
bool HandleSRGB;
|
||||||
|
|
||||||
//! Whether the main framebuffer uses an alpha channel.
|
//! Whether the main framebuffer uses an alpha channel.
|
||||||
/** In some situations it might be desirable to get a color
|
/** In some situations it might be desirable to get a color
|
||||||
buffer with an alpha channel, e.g. when rendering into a
|
buffer with an alpha channel, e.g. when rendering into a
|
||||||
|
@ -175,6 +193,13 @@ struct SIrrlichtCreationParameters
|
||||||
single buffers. Default value: true */
|
single buffers. Default value: true */
|
||||||
bool Doublebuffer;
|
bool Doublebuffer;
|
||||||
|
|
||||||
|
//! Specifies if the device should ignore input events
|
||||||
|
/** This is only relevant when using external I/O handlers.
|
||||||
|
External windows need to take care of this themselves.
|
||||||
|
Currently only supported by X11.
|
||||||
|
Default value: false */
|
||||||
|
bool IgnoreInput;
|
||||||
|
|
||||||
//! Specifies if the device should use stereo buffers
|
//! Specifies if the device should use stereo buffers
|
||||||
/** Some high-end gfx cards support two framebuffers for direct
|
/** Some high-end gfx cards support two framebuffers for direct
|
||||||
support of stereoscopic output devices. If this flag is set the
|
support of stereoscopic output devices. If this flag is set the
|
||||||
|
@ -264,4 +289,8 @@ struct SIrrlichtCreationParameters
|
||||||
irr::io::path OGLES2ShaderPath;
|
irr::io::path OGLES2ShaderPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_MATERIAL_H_INCLUDED__
|
||||||
|
#define __S_MATERIAL_H_INCLUDED__
|
||||||
|
|
||||||
#include "SColor.h"
|
#include "SColor.h"
|
||||||
#include "matrix4.h"
|
#include "matrix4.h"
|
||||||
|
@ -163,7 +164,8 @@ inline void unpack_textureBlendFuncSeparate(E_BLEND_FACTOR &srcRGBFact, E_BLEND_
|
||||||
//! has blend factor alphablending
|
//! has blend factor alphablending
|
||||||
inline bool textureBlendFunc_hasAlpha ( const E_BLEND_FACTOR factor )
|
inline bool textureBlendFunc_hasAlpha ( const E_BLEND_FACTOR factor )
|
||||||
{
|
{
|
||||||
switch (factor) {
|
switch ( factor )
|
||||||
|
{
|
||||||
case EBF_SRC_ALPHA:
|
case EBF_SRC_ALPHA:
|
||||||
case EBF_ONE_MINUS_SRC_ALPHA:
|
case EBF_ONE_MINUS_SRC_ALPHA:
|
||||||
case EBF_DST_ALPHA:
|
case EBF_DST_ALPHA:
|
||||||
|
@ -175,6 +177,7 @@ inline bool textureBlendFunc_hasAlpha(const E_BLEND_FACTOR factor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! These flags are used to specify the anti-aliasing and smoothing modes
|
//! These flags are used to specify the anti-aliasing and smoothing modes
|
||||||
/** Techniques supported are multisampling, geometry smoothing, and alpha
|
/** Techniques supported are multisampling, geometry smoothing, and alpha
|
||||||
to coverage.
|
to coverage.
|
||||||
|
@ -190,9 +193,16 @@ enum E_ANTI_ALIASING_MODE
|
||||||
EAAM_SIMPLE=1,
|
EAAM_SIMPLE=1,
|
||||||
//! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode
|
//! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode
|
||||||
EAAM_QUALITY=3,
|
EAAM_QUALITY=3,
|
||||||
|
//! Line smoothing
|
||||||
|
//! Careful, enabling this can lead to software emulation under OpenGL
|
||||||
|
EAAM_LINE_SMOOTH=4,
|
||||||
|
//! point smoothing, often in software and slow, only with OpenGL
|
||||||
|
EAAM_POINT_SMOOTH=8,
|
||||||
|
//! All typical anti-alias and smooth modes
|
||||||
|
EAAM_FULL_BASIC=15,
|
||||||
//! Enhanced anti-aliasing for transparent materials
|
//! Enhanced anti-aliasing for transparent materials
|
||||||
/** Usually used with EMT_TRANSPARENT_ALPHA_CHANNEL_REF and multisampling. */
|
/** Usually used with EMT_TRANSPARENT_ALPHA_CHANNEL_REF and multisampling. */
|
||||||
EAAM_ALPHA_TO_COVERAGE = 4
|
EAAM_ALPHA_TO_COVERAGE=16
|
||||||
};
|
};
|
||||||
|
|
||||||
//! These flags allow to define the interpretation of vertex color when lighting is enabled
|
//! These flags allow to define the interpretation of vertex color when lighting is enabled
|
||||||
|
@ -219,10 +229,11 @@ enum E_COLOR_MATERIAL
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for polygon offset direction
|
//! Names for polygon offset direction
|
||||||
const c8 *const PolygonOffsetDirectionNames[] = {
|
const c8* const PolygonOffsetDirectionNames[] =
|
||||||
|
{
|
||||||
"Back",
|
"Back",
|
||||||
"Front",
|
"Front",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! For SMaterial.ZWriteEnable
|
//! For SMaterial.ZWriteEnable
|
||||||
|
@ -243,13 +254,16 @@ enum E_ZWRITE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for E_ZWRITE
|
//! Names for E_ZWRITE
|
||||||
const c8 *const ZWriteNames[] = {
|
const c8* const ZWriteNames[] =
|
||||||
|
{
|
||||||
"Off",
|
"Off",
|
||||||
"Auto",
|
"Auto",
|
||||||
"On",
|
"On",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//! Maximum number of texture an SMaterial can have.
|
//! Maximum number of texture an SMaterial can have.
|
||||||
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
||||||
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
||||||
|
@ -273,8 +287,7 @@ public:
|
||||||
GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
|
GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
|
||||||
BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
|
BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
|
||||||
NormalizeNormals(false), UseMipMaps(true)
|
NormalizeNormals(false), UseMipMaps(true)
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
//! Texture layer array.
|
//! Texture layer array.
|
||||||
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
|
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
|
||||||
|
@ -425,8 +438,7 @@ public:
|
||||||
/** Useful for setting properties which are not per material, but per
|
/** Useful for setting properties which are not per material, but per
|
||||||
texture layer, e.g. bilinear filtering. */
|
texture layer, e.g. bilinear filtering. */
|
||||||
template <typename F>
|
template <typename F>
|
||||||
void forEachTexture(F &&fn)
|
void forEachTexture(F &&fn) {
|
||||||
{
|
|
||||||
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
|
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
|
||||||
fn(TextureLayers[i]);
|
fn(TextureLayers[i]);
|
||||||
}
|
}
|
||||||
|
@ -511,8 +523,10 @@ public:
|
||||||
BlendFactor != b.BlendFactor ||
|
BlendFactor != b.BlendFactor ||
|
||||||
PolygonOffsetDepthBias != b.PolygonOffsetDepthBias ||
|
PolygonOffsetDepthBias != b.PolygonOffsetDepthBias ||
|
||||||
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
|
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
|
||||||
UseMipMaps != b.UseMipMaps;
|
UseMipMaps != b.UseMipMaps
|
||||||
for (u32 i = 0; (i < MATERIAL_MAX_TEXTURES) && !different; ++i) {
|
;
|
||||||
|
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
|
||||||
|
{
|
||||||
different |= (TextureLayers[i] != b.TextureLayers[i]);
|
different |= (TextureLayers[i] != b.TextureLayers[i]);
|
||||||
}
|
}
|
||||||
return different;
|
return different;
|
||||||
|
@ -522,14 +536,13 @@ public:
|
||||||
/** \param b Material to compare to.
|
/** \param b Material to compare to.
|
||||||
\return True if the materials are equal, else false. */
|
\return True if the materials are equal, else false. */
|
||||||
inline bool operator==(const SMaterial& b) const
|
inline bool operator==(const SMaterial& b) const
|
||||||
{
|
{ return !(b!=*this); }
|
||||||
return !(b != *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Check if material needs alpha blending
|
//! Check if material needs alpha blending
|
||||||
bool isAlphaBlendOperation() const
|
bool isAlphaBlendOperation() const
|
||||||
{
|
{
|
||||||
if (BlendOperation != EBO_NONE && BlendFactor != 0.f) {
|
if (BlendOperation != EBO_NONE && BlendFactor != 0.f)
|
||||||
|
{
|
||||||
E_BLEND_FACTOR srcRGBFact = EBF_ZERO;
|
E_BLEND_FACTOR srcRGBFact = EBF_ZERO;
|
||||||
E_BLEND_FACTOR dstRGBFact = EBF_ZERO;
|
E_BLEND_FACTOR dstRGBFact = EBF_ZERO;
|
||||||
E_BLEND_FACTOR srcAlphaFact = EBF_ZERO;
|
E_BLEND_FACTOR srcAlphaFact = EBF_ZERO;
|
||||||
|
@ -540,7 +553,8 @@ public:
|
||||||
unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, BlendFactor);
|
unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, BlendFactor);
|
||||||
|
|
||||||
if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) ||
|
if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) ||
|
||||||
textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact)) {
|
textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -564,3 +578,5 @@ public:
|
||||||
IRRLICHT_API extern SMaterial IdentityMaterial;
|
IRRLICHT_API extern SMaterial IdentityMaterial;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_MATERIAL_LAYER_H_INCLUDED__
|
||||||
|
#define __S_MATERIAL_LAYER_H_INCLUDED__
|
||||||
|
|
||||||
#include "matrix4.h"
|
#include "matrix4.h"
|
||||||
|
|
||||||
|
@ -42,11 +43,11 @@ static const char *const aTextureClampNames[] = {
|
||||||
"texture_clamp_mirror_clamp_to_edge",
|
"texture_clamp_mirror_clamp_to_edge",
|
||||||
"texture_clamp_mirror_clamp_to_border", 0};
|
"texture_clamp_mirror_clamp_to_border", 0};
|
||||||
|
|
||||||
|
|
||||||
//! Texture minification filter.
|
//! Texture minification filter.
|
||||||
/** Used when scaling textures down. See the documentation on OpenGL's
|
/** Used when scaling textures down. See the documentation on OpenGL's
|
||||||
`GL_TEXTURE_MIN_FILTER` for more information. */
|
`GL_TEXTURE_MIN_FILTER` for more information. */
|
||||||
enum E_TEXTURE_MIN_FILTER
|
enum E_TEXTURE_MIN_FILTER {
|
||||||
{
|
|
||||||
//! Aka nearest-neighbor.
|
//! Aka nearest-neighbor.
|
||||||
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
|
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
|
||||||
//! Aka bilinear.
|
//! Aka bilinear.
|
||||||
|
@ -61,8 +62,7 @@ enum E_TEXTURE_MIN_FILTER
|
||||||
/** Used when scaling textures up. See the documentation on OpenGL's
|
/** Used when scaling textures up. See the documentation on OpenGL's
|
||||||
`GL_TEXTURE_MAG_FILTER` for more information.
|
`GL_TEXTURE_MAG_FILTER` for more information.
|
||||||
Note that mipmaps are only used for minification, not for magnification. */
|
Note that mipmaps are only used for minification, not for magnification. */
|
||||||
enum E_TEXTURE_MAG_FILTER
|
enum E_TEXTURE_MAG_FILTER {
|
||||||
{
|
|
||||||
//! Aka nearest-neighbor.
|
//! Aka nearest-neighbor.
|
||||||
ETMAGF_NEAREST = 0,
|
ETMAGF_NEAREST = 0,
|
||||||
//! Aka bilinear.
|
//! Aka bilinear.
|
||||||
|
@ -75,8 +75,7 @@ class SMaterialLayer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Default constructor
|
//! Default constructor
|
||||||
SMaterialLayer() :
|
SMaterialLayer() : Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
|
||||||
Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
|
|
||||||
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -93,7 +92,8 @@ public:
|
||||||
//! Destructor
|
//! Destructor
|
||||||
~SMaterialLayer()
|
~SMaterialLayer()
|
||||||
{
|
{
|
||||||
if (TextureMatrix) {
|
if ( TextureMatrix )
|
||||||
|
{
|
||||||
delete TextureMatrix;
|
delete TextureMatrix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,17 +108,23 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
|
|
||||||
Texture = other.Texture;
|
Texture = other.Texture;
|
||||||
if (TextureMatrix) {
|
if (TextureMatrix)
|
||||||
|
{
|
||||||
if (other.TextureMatrix)
|
if (other.TextureMatrix)
|
||||||
*TextureMatrix = *other.TextureMatrix;
|
*TextureMatrix = *other.TextureMatrix;
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
delete TextureMatrix;
|
delete TextureMatrix;
|
||||||
TextureMatrix = 0;
|
TextureMatrix = 0;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
if (other.TextureMatrix) {
|
else
|
||||||
|
{
|
||||||
|
if (other.TextureMatrix)
|
||||||
|
{
|
||||||
TextureMatrix = new core::matrix4(*other.TextureMatrix);
|
TextureMatrix = new core::matrix4(*other.TextureMatrix);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
TextureMatrix = 0;
|
TextureMatrix = 0;
|
||||||
}
|
}
|
||||||
TextureWrapU = other.TextureWrapU;
|
TextureWrapU = other.TextureWrapU;
|
||||||
|
@ -136,7 +142,8 @@ public:
|
||||||
/** \return Texture matrix of this layer. */
|
/** \return Texture matrix of this layer. */
|
||||||
core::matrix4& getTextureMatrix()
|
core::matrix4& getTextureMatrix()
|
||||||
{
|
{
|
||||||
if (!TextureMatrix) {
|
if (!TextureMatrix)
|
||||||
|
{
|
||||||
TextureMatrix = new core::matrix4();
|
TextureMatrix = new core::matrix4();
|
||||||
}
|
}
|
||||||
return *TextureMatrix;
|
return *TextureMatrix;
|
||||||
|
@ -158,9 +165,11 @@ public:
|
||||||
\param mat New texture matrix for this layer. */
|
\param mat New texture matrix for this layer. */
|
||||||
void setTextureMatrix(const core::matrix4& mat)
|
void setTextureMatrix(const core::matrix4& mat)
|
||||||
{
|
{
|
||||||
if (!TextureMatrix) {
|
if (!TextureMatrix)
|
||||||
|
{
|
||||||
TextureMatrix = new core::matrix4(mat);
|
TextureMatrix = new core::matrix4(mat);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
*TextureMatrix = mat;
|
*TextureMatrix = mat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,9 +199,7 @@ public:
|
||||||
/** \param b Layer to compare to.
|
/** \param b Layer to compare to.
|
||||||
\return True if layers are equal, else false. */
|
\return True if layers are equal, else false. */
|
||||||
inline bool operator==(const SMaterialLayer& b) const
|
inline bool operator==(const SMaterialLayer& b) const
|
||||||
{
|
{ return !(b!=*this); }
|
||||||
return !(b != *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Texture
|
//! Texture
|
||||||
ITexture* Texture;
|
ITexture* Texture;
|
||||||
|
@ -236,3 +243,5 @@ private:
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __S_MATERIAL_LAYER_H_INCLUDED__
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __S_MESH_H_INCLUDED__
|
||||||
|
#define __S_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "IMesh.h"
|
#include "IMesh.h"
|
||||||
#include "IMeshBuffer.h"
|
#include "IMeshBuffer.h"
|
||||||
|
@ -41,6 +42,7 @@ struct SMesh : public IMesh
|
||||||
BoundingBox.reset ( 0.f, 0.f, 0.f );
|
BoundingBox.reset ( 0.f, 0.f, 0.f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! returns amount of mesh buffers.
|
//! returns amount of mesh buffers.
|
||||||
u32 getMeshBufferCount() const override
|
u32 getMeshBufferCount() const override
|
||||||
{
|
{
|
||||||
|
@ -57,7 +59,8 @@ struct SMesh : public IMesh
|
||||||
/** reverse search */
|
/** reverse search */
|
||||||
IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const override
|
IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const override
|
||||||
{
|
{
|
||||||
for (s32 i = (s32)MeshBuffers.size() - 1; i >= 0; --i) {
|
for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
|
||||||
|
{
|
||||||
if ( material == MeshBuffers[i]->getMaterial())
|
if ( material == MeshBuffers[i]->getMaterial())
|
||||||
return MeshBuffers[i];
|
return MeshBuffers[i];
|
||||||
}
|
}
|
||||||
|
@ -81,15 +84,21 @@ struct SMesh : public IMesh
|
||||||
void recalculateBoundingBox()
|
void recalculateBoundingBox()
|
||||||
{
|
{
|
||||||
bool hasMeshBufferBBox = false;
|
bool hasMeshBufferBBox = false;
|
||||||
for (u32 i = 0; i < MeshBuffers.size(); ++i) {
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
|
{
|
||||||
const core::aabbox3df& bb = MeshBuffers[i]->getBoundingBox();
|
const core::aabbox3df& bb = MeshBuffers[i]->getBoundingBox();
|
||||||
if (!bb.isEmpty()) {
|
if ( !bb.isEmpty() )
|
||||||
if (!hasMeshBufferBBox) {
|
{
|
||||||
|
if ( !hasMeshBufferBBox )
|
||||||
|
{
|
||||||
hasMeshBufferBBox = true;
|
hasMeshBufferBBox = true;
|
||||||
BoundingBox = bb;
|
BoundingBox = bb;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
BoundingBox.addInternalBox(bb);
|
BoundingBox.addInternalBox(bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +110,8 @@ struct SMesh : public IMesh
|
||||||
/** The bounding box is not updated automatically. */
|
/** The bounding box is not updated automatically. */
|
||||||
void addMeshBuffer(IMeshBuffer* buf)
|
void addMeshBuffer(IMeshBuffer* buf)
|
||||||
{
|
{
|
||||||
if (buf) {
|
if (buf)
|
||||||
|
{
|
||||||
buf->grab();
|
buf->grab();
|
||||||
MeshBuffers.push_back(buf);
|
MeshBuffers.push_back(buf);
|
||||||
}
|
}
|
||||||
|
@ -128,5 +138,9 @@ struct SMesh : public IMesh
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user