mirror of
https://github.com/minetest/irrlicht.git
synced 2024-11-15 23:10:26 +01:00
Compare commits
No commits in common. "master" and "1.9.0mt14" have entirely different histories.
90
.github/workflows/build.yml
vendored
90
.github/workflows/build.yml
vendored
|
@ -10,7 +10,7 @@ jobs:
|
||||||
linux-gl:
|
linux-gl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
@ -30,7 +30,7 @@ jobs:
|
||||||
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
|
||||||
|
@ -39,7 +39,7 @@ jobs:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
@ -63,7 +63,7 @@ jobs:
|
||||||
linux-sdl:
|
linux-sdl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
@ -71,7 +71,7 @@ jobs:
|
||||||
|
|
||||||
- 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)
|
||||||
|
@ -83,7 +83,7 @@ jobs:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
@ -107,7 +107,7 @@ jobs:
|
||||||
linux-sdl-gles2:
|
linux-sdl-gles2:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
@ -140,21 +140,21 @@ jobs:
|
||||||
- {variant: win32, arch: i686, extras: "-sdl"}
|
- {variant: win32, arch: i686, extras: "-sdl"}
|
||||||
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@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
|
./scripts/ci-get-mingw.sh ${{matrix.config.arch}}
|
||||||
|
|
||||||
- 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 +162,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: |
|
||||||
|
@ -183,14 +180,11 @@ jobs:
|
||||||
macos-sdl:
|
macos-sdl:
|
||||||
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 sdl2
|
brew install cmake libpng jpeg sdl2
|
||||||
env:
|
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
@ -203,7 +197,7 @@ jobs:
|
||||||
env:
|
env:
|
||||||
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
||||||
# 2023.10.19
|
# 2023.10.19
|
||||||
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 +214,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 +221,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 +254,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,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.12)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
|
||||||
set(IRRLICHTMT_REVISION 15)
|
set(IRRLICHTMT_REVISION 14)
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
|
@ -35,7 +35,7 @@ endif()
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(src)
|
add_subdirectory(source/Irrlicht)
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
|
||||||
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
||||||
|
|
|
@ -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();
|
||||||
|
@ -72,33 +72,35 @@ int main(int argc, char *argv[])
|
||||||
device->setWindowCaption(L"Hello World!");
|
device->setWindowCaption(L"Hello World!");
|
||||||
device->setResizable(true);
|
device->setResizable(true);
|
||||||
|
|
||||||
video::IVideoDriver *driver = device->getVideoDriver();
|
video::IVideoDriver* driver = device->getVideoDriver();
|
||||||
scene::ISceneManager *smgr = device->getSceneManager();
|
scene::ISceneManager* smgr = device->getSceneManager();
|
||||||
gui::IGUIEnvironment *guienv = device->getGUIEnvironment();
|
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
|
||||||
|
|
||||||
guienv->addStaticText(L"sample text", core::rect<s32>(10, 10, 110, 22), false);
|
guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);
|
||||||
|
|
||||||
gui::IGUIButton *button = guienv->addButton(
|
gui::IGUIButton* button = guienv->addButton(
|
||||||
core::rect<s32>(10, 30, 110, 30 + 32), 0, -1, L"sample button",
|
core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",
|
||||||
L"sample tooltip");
|
L"sample tooltip");
|
||||||
|
|
||||||
gui::IGUIEditBox *editbox = guienv->addEditBox(L"",
|
gui::IGUIEditBox* editbox = guienv->addEditBox(L"",
|
||||||
core::rect<s32>(10, 70, 60, 70 + 16));
|
core::rect<s32>(10,70,60,70 + 16));
|
||||||
|
|
||||||
const io::path mediaPath = getExampleMediaPath();
|
const io::path mediaPath = getExampleMediaPath();
|
||||||
|
|
||||||
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
||||||
check(mesh_file, "mesh file loading");
|
check(mesh_file, "mesh file loading");
|
||||||
scene::IAnimatedMesh *mesh = smgr->getMesh(mesh_file);
|
scene::IAnimatedMesh* mesh = smgr->getMesh(mesh_file);
|
||||||
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);
|
||||||
});
|
});
|
||||||
|
@ -107,26 +109,31 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
smgr->addCameraSceneNode(0, core::vector3df(0, 4, 5), core::vector3df(0, 2, 0));
|
smgr->addCameraSceneNode(0, core::vector3df(0,4,5), core::vector3df(0,2,0));
|
||||||
|
|
||||||
s32 n = 0;
|
s32 n = 0;
|
||||||
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,12 +142,13 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
||||||
video::SColor(255, 100, 100, 150));
|
video::SColor(255,100,100,150));
|
||||||
smgr->drawAll();
|
smgr->drawAll();
|
||||||
guienv->drawAll();
|
guienv->drawAll();
|
||||||
driver->endScene();
|
driver->endScene();
|
||||||
|
|
|
@ -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,15 +75,14 @@ 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) {
|
||||||
arr.push_back(value);
|
arr.push_back(value);
|
||||||
}
|
}
|
||||||
// Test the const form first, it uses a linear search without sorting
|
// Test the const form first, it uses a linear search without sorting
|
||||||
const array<int> &carr = arr;
|
const array<int> & carr = arr;
|
||||||
UASSERTEQ(carr.binary_search(20), -1);
|
UASSERTEQ(carr.binary_search(20), -1);
|
||||||
UASSERTEQ(carr.binary_search(0), -1);
|
UASSERTEQ(carr.binary_search(0), -1);
|
||||||
UASSERTEQ(carr.binary_search(1), 2);
|
UASSERTEQ(carr.binary_search(1), 2);
|
||||||
|
|
|
@ -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,12 +15,11 @@ 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(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define CMPEQ(a, e) (a == e)
|
#define CMPEQ(a, e) (a == e)
|
||||||
#define CMPTRUE(a, e) (a)
|
#define CMPTRUE(a, e) (a)
|
||||||
|
|
|
@ -38,7 +38,7 @@ static void test_basics()
|
||||||
UASSERTSTR(s, "abcdef");
|
UASSERTSTR(s, "abcdef");
|
||||||
s = L"abcdef";
|
s = L"abcdef";
|
||||||
UASSERTSTR(s, "abcdef");
|
UASSERTSTR(s, "abcdef");
|
||||||
s = static_cast<const char *>(nullptr);
|
s = static_cast<const char*>(nullptr);
|
||||||
UASSERTSTR(s, "");
|
UASSERTSTR(s, "");
|
||||||
// operator+
|
// operator+
|
||||||
s = s + stringc("foo");
|
s = s + stringc("foo");
|
||||||
|
@ -163,7 +163,7 @@ static void test_methods()
|
||||||
UASSERTSTR(res[0], "a");
|
UASSERTSTR(res[0], "a");
|
||||||
UASSERTSTR(res[2], "");
|
UASSERTSTR(res[2], "");
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
UASSERTSTR(res[2 * i + 1], ",");
|
UASSERTSTR(res[2*i+1], ",");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_conv()
|
static void test_conv()
|
||||||
|
@ -180,9 +180,9 @@ static void test_conv()
|
||||||
wStringToUTF8(out2, L"†††");
|
wStringToUTF8(out2, L"†††");
|
||||||
UASSERTEQ(out2.size(), 9);
|
UASSERTEQ(out2.size(), 9);
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i]), 0xe2);
|
UASSERTEQ(static_cast<u8>(out2[3*i]), 0xe2);
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i + 1]), 0x80);
|
UASSERTEQ(static_cast<u8>(out2[3*i+1]), 0x80);
|
||||||
UASSERTEQ(static_cast<u8>(out2[3 * i + 2]), 0xa0);
|
UASSERTEQ(static_cast<u8>(out2[3*i+2]), 0xa0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// locale-dependent
|
// locale-dependent
|
||||||
|
|
|
@ -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"
|
||||||
|
@ -11,48 +12,56 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Template implementation of the IMeshBuffer interface
|
//! Template implementation of the IMeshBuffer interface
|
||||||
template <class T>
|
template <class T>
|
||||||
class CMeshBuffer : public IMeshBuffer
|
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
|
||||||
{
|
{
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
|
@ -69,18 +78,20 @@ public:
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
const u16 *getIndices() const override
|
const u16* getIndices() const override
|
||||||
{
|
{
|
||||||
return Indices.const_pointer();
|
return Indices.const_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get pointer to indices
|
//! Get pointer to indices
|
||||||
/** \return Pointer to indices. */
|
/** \return Pointer to indices. */
|
||||||
u16 *getIndices() override
|
u16* getIndices() override
|
||||||
{
|
{
|
||||||
return Indices.pointer();
|
return Indices.pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Get number of indices
|
//! Get number of indices
|
||||||
/** \return Number of indices. */
|
/** \return Number of indices. */
|
||||||
u32 getIndexCount() const override
|
u32 getIndexCount() const override
|
||||||
|
@ -88,33 +99,40 @@ 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
|
||||||
{
|
{
|
||||||
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
|
||||||
void setBoundingBox(const core::aabbox3df &box) override
|
void setBoundingBox(const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Recalculate the bounding box.
|
//! Recalculate the bounding box.
|
||||||
/** should be called if the mesh changed. */
|
/** should be called if the mesh changed. */
|
||||||
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. */
|
||||||
|
@ -124,47 +142,48 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
const core::vector3df &getPosition(u32 i) const override
|
const core::vector3df& getPosition(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
core::vector3df &getPosition(u32 i) override
|
core::vector3df& getPosition(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Pos;
|
return Vertices[i].Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
const core::vector3df &getNormal(u32 i) const override
|
const core::vector3df& getNormal(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
core::vector3df &getNormal(u32 i) override
|
core::vector3df& getNormal(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].Normal;
|
return Vertices[i].Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
const core::vector2df &getTCoords(u32 i) const override
|
const core::vector2df& getTCoords(u32 i) const override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
core::vector2df &getTCoords(u32 i) override
|
core::vector2df& getTCoords(u32 i) override
|
||||||
{
|
{
|
||||||
return Vertices[i].TCoords;
|
return Vertices[i].TCoords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Append the vertices and indices to the current buffer
|
//! Append the vertices and indices to the current buffer
|
||||||
/** Only works for compatible types, i.e. either the same type
|
/** Only works for compatible types, i.e. either the same type
|
||||||
or the main buffer is of standard type. Otherwise, behavior is
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
undefined.
|
undefined.
|
||||||
*/
|
*/
|
||||||
void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) override
|
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
|
||||||
{
|
{
|
||||||
if (vertices == getVertices())
|
if (vertices == getVertices())
|
||||||
return;
|
return;
|
||||||
|
@ -172,18 +191,52 @@ public:
|
||||||
const u32 vertexCount = getVertexCount();
|
const u32 vertexCount = getVertexCount();
|
||||||
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]);
|
{
|
||||||
BoundingBox.addInternalPoint(static_cast<const T *>(vertices)[i].Pos);
|
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
||||||
|
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
|
||||||
{
|
{
|
||||||
|
@ -197,12 +250,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||||
MappingHint_Vertex = NewMappingHint;
|
MappingHint_Vertex=NewMappingHint;
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_INDEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||||
MappingHint_Index = NewMappingHint;
|
MappingHint_Index=NewMappingHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
|
@ -218,32 +271,31 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
void setDirty(E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override
|
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
||||||
++ChangedID_Vertex;
|
++ChangedID_Vertex;
|
||||||
if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_INDEX)
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||||
++ChangedID_Index;
|
++ChangedID_Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
u32 getChangedID_Vertex() const override { return ChangedID_Vertex; }
|
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
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;
|
||||||
|
|
||||||
|
@ -262,13 +314,17 @@ public:
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox;
|
||||||
//! Primitive type used for rendering (triangles, lines, ...)
|
//! Primitive type used for rendering (triangles, lines, ...)
|
||||||
E_PRIMITIVE_TYPE PrimitiveType;
|
E_PRIMITIVE_TYPE PrimitiveType;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Standard meshbuffer
|
//! Standard meshbuffer
|
||||||
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
||||||
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
||||||
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
||||||
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
||||||
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"
|
||||||
|
|
||||||
|
@ -11,25 +12,30 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enumeration for all types of automatic culling for built-in scene nodes
|
//! An enumeration for all types of automatic culling for built-in scene nodes
|
||||||
enum E_CULLING_TYPE
|
enum E_CULLING_TYPE
|
||||||
{
|
{
|
||||||
EAC_OFF = 0,
|
EAC_OFF = 0,
|
||||||
EAC_BOX = 1,
|
EAC_BOX = 1,
|
||||||
EAC_FRUSTUM_BOX = 2,
|
EAC_FRUSTUM_BOX = 2,
|
||||||
EAC_FRUSTUM_SPHERE = 4,
|
EAC_FRUSTUM_SPHERE = 4,
|
||||||
EAC_OCC_QUERY = 8
|
EAC_OCC_QUERY = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,16 +2,17 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enumeration for all types of debug data for built-in scene nodes (flags)
|
//! An enumeration for all types of debug data for built-in scene nodes (flags)
|
||||||
enum E_DEBUG_SCENE_TYPE
|
enum E_DEBUG_SCENE_TYPE
|
||||||
{
|
{
|
||||||
//! No Debug Data ( Default )
|
//! No Debug Data ( Default )
|
||||||
EDS_OFF = 0,
|
EDS_OFF = 0,
|
||||||
|
|
||||||
|
@ -35,7 +36,12 @@ enum E_DEBUG_SCENE_TYPE
|
||||||
|
|
||||||
//! Show all debug infos
|
//! Show all debug infos
|
||||||
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,14 +2,15 @@
|
||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#pragma once
|
#ifndef __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
#define __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enum for the different device types supported by the Irrlicht Engine.
|
//! An enum for the different device types supported by the Irrlicht Engine.
|
||||||
enum E_DEVICE_TYPE
|
enum E_DEVICE_TYPE
|
||||||
{
|
{
|
||||||
|
|
||||||
//! A device native to Microsoft Windows
|
//! A device native to Microsoft Windows
|
||||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||||
|
@ -41,6 +42,9 @@ enum E_DEVICE_TYPE
|
||||||
Does not need X11 or other graphical subsystems.
|
Does not need X11 or other graphical subsystems.
|
||||||
May support hw-acceleration via OpenGL-ES */
|
May support hw-acceleration via OpenGL-ES */
|
||||||
EIDT_ANDROID,
|
EIDT_ANDROID,
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,16 +2,17 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
|
||||||
//! enumeration for querying features of the video driver.
|
//! enumeration for querying features of the video driver.
|
||||||
enum E_VIDEO_DRIVER_FEATURE
|
enum E_VIDEO_DRIVER_FEATURE
|
||||||
{
|
{
|
||||||
//! Is driver able to render to a surface?
|
//! Is driver able to render to a surface?
|
||||||
EVDF_RENDER_TO_TARGET = 0,
|
EVDF_RENDER_TO_TARGET = 0,
|
||||||
|
|
||||||
|
@ -131,7 +132,11 @@ enum E_VIDEO_DRIVER_FEATURE
|
||||||
|
|
||||||
//! Only used for counting the elements of this enum
|
//! Only used for counting the elements of this enum
|
||||||
EVDF_COUNT
|
EVDF_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
|
||||||
|
@ -11,9 +12,9 @@ namespace irr
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enum for all types of drivers the Irrlicht Engine supports.
|
//! An enum for all types of drivers the Irrlicht Engine supports.
|
||||||
enum E_DRIVER_TYPE
|
enum E_DRIVER_TYPE
|
||||||
{
|
{
|
||||||
//! Null driver, useful for applications to run the engine without visualization.
|
//! Null driver, useful for applications to run the engine without visualization.
|
||||||
/** The null device is able to load textures, but does not
|
/** The null device is able to load textures, but does not
|
||||||
render and display any graphics. */
|
render and display any graphics. */
|
||||||
|
@ -38,7 +39,10 @@ enum E_DRIVER_TYPE
|
||||||
|
|
||||||
//! No driver, just for counting the elements
|
//! No driver, just for counting the elements
|
||||||
EDT_COUNT
|
EDT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
|
||||||
|
@ -13,7 +14,7 @@ namespace gui
|
||||||
enum EGUI_ALIGNMENT
|
enum EGUI_ALIGNMENT
|
||||||
{
|
{
|
||||||
//! Aligned to parent's top or left side (default)
|
//! Aligned to parent's top or left side (default)
|
||||||
EGUIA_UPPERLEFT = 0,
|
EGUIA_UPPERLEFT=0,
|
||||||
//! Aligned to parent's bottom or right side
|
//! Aligned to parent's bottom or right side
|
||||||
EGUIA_LOWERRIGHT,
|
EGUIA_LOWERRIGHT,
|
||||||
//! Aligned to the center of parent
|
//! Aligned to the center of parent
|
||||||
|
@ -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,17 +2,18 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
enum E_HARDWARE_MAPPING
|
enum E_HARDWARE_MAPPING
|
||||||
{
|
{
|
||||||
//! Don't store on the hardware
|
//! Don't store on the hardware
|
||||||
EHM_NEVER = 0,
|
EHM_NEVER=0,
|
||||||
|
|
||||||
//! Rarely changed, usually stored completely on the hardware
|
//! Rarely changed, usually stored completely on the hardware
|
||||||
EHM_STATIC,
|
EHM_STATIC,
|
||||||
|
@ -22,19 +23,22 @@ enum E_HARDWARE_MAPPING
|
||||||
|
|
||||||
//! Always changed, cache optimizing on the GPU
|
//! Always changed, cache optimizing on the GPU
|
||||||
EHM_STREAM
|
EHM_STREAM
|
||||||
};
|
};
|
||||||
|
|
||||||
enum E_BUFFER_TYPE
|
enum E_BUFFER_TYPE
|
||||||
{
|
{
|
||||||
//! Does not change anything
|
//! Does not change anything
|
||||||
EBT_NONE = 0,
|
EBT_NONE=0,
|
||||||
//! Change the vertex mapping
|
//! Change the vertex mapping
|
||||||
EBT_VERTEX,
|
EBT_VERTEX,
|
||||||
//! Change the index mapping
|
//! Change the index mapping
|
||||||
EBT_INDEX,
|
EBT_INDEX,
|
||||||
//! Change both vertex and index mapping to the same value
|
//! Change both vertex and index mapping to the same value
|
||||||
EBT_VERTEX_AND_INDEX
|
EBT_VERTEX_AND_INDEX
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,16 +2,17 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Material properties
|
//! Material properties
|
||||||
enum E_MATERIAL_PROP
|
enum E_MATERIAL_PROP
|
||||||
{
|
{
|
||||||
//! Corresponds to SMaterial::Wireframe.
|
//! Corresponds to SMaterial::Wireframe.
|
||||||
EMP_WIREFRAME = 0x1,
|
EMP_WIREFRAME = 0x1,
|
||||||
|
|
||||||
|
@ -76,7 +77,11 @@ enum E_MATERIAL_PROP
|
||||||
|
|
||||||
//! Corresponds to SMaterial::BlendFactor.
|
//! Corresponds to SMaterial::BlendFactor.
|
||||||
EMP_BLEND_FACTOR = 0x100000,
|
EMP_BLEND_FACTOR = 0x100000,
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
||||||
|
|
|
@ -2,18 +2,17 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Abstracted and easy to use fixed function/programmable pipeline material modes.
|
//! Abstracted and easy to use fixed function/programmable pipeline material modes.
|
||||||
enum E_MATERIAL_TYPE
|
enum E_MATERIAL_TYPE
|
||||||
{
|
{
|
||||||
//! Standard solid material.
|
//! Standard solid material.
|
||||||
/** Only first texture is used, which is supposed to be the
|
/** Only first texture is used, which is supposed to be the
|
||||||
diffuse material. */
|
diffuse material. */
|
||||||
|
@ -55,20 +54,22 @@ enum E_MATERIAL_TYPE
|
||||||
|
|
||||||
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
||||||
EMT_FORCE_32BIT = 0x7fffffff
|
EMT_FORCE_32BIT = 0x7fffffff
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,18 +2,19 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Enumeration for all primitive types there are.
|
//! Enumeration for all primitive types there are.
|
||||||
enum E_PRIMITIVE_TYPE
|
enum E_PRIMITIVE_TYPE
|
||||||
{
|
{
|
||||||
//! All vertices are non-connected points.
|
//! All vertices are non-connected points.
|
||||||
EPT_POINTS = 0,
|
EPT_POINTS=0,
|
||||||
|
|
||||||
//! All vertices form a single connected line.
|
//! All vertices form a single connected line.
|
||||||
EPT_LINE_STRIP,
|
EPT_LINE_STRIP,
|
||||||
|
@ -37,7 +38,10 @@ enum E_PRIMITIVE_TYPE
|
||||||
|
|
||||||
//! The single vertices are expanded to quad billboards on the GPU.
|
//! The single vertices are expanded to quad billboards on the GPU.
|
||||||
EPT_POINT_SPRITES
|
EPT_POINT_SPRITES
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,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"
|
||||||
|
|
||||||
|
@ -11,20 +12,23 @@ namespace irr
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enumeration for different class types implementing IReadFile
|
//! An enumeration for different class types implementing IReadFile
|
||||||
enum EREAD_FILE_TYPE
|
enum EREAD_FILE_TYPE
|
||||||
{
|
{
|
||||||
//! CReadFile
|
//! CReadFile
|
||||||
ERFT_READ_FILE = MAKE_IRR_ID('r', 'e', 'a', 'd'),
|
ERFT_READ_FILE = MAKE_IRR_ID('r','e','a','d'),
|
||||||
|
|
||||||
//! CMemoryReadFile
|
//! CMemoryReadFile
|
||||||
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r', 'm', 'e', 'm'),
|
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r','m','e','m'),
|
||||||
|
|
||||||
//! CLimitReadFile
|
//! CLimitReadFile
|
||||||
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r', 'l', 'i', 'm'),
|
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r','l','i','m'),
|
||||||
|
|
||||||
//! Unknown type
|
//! Unknown type
|
||||||
EFIT_UNKNOWN = MAKE_IRR_ID('u', 'n', 'k', 'n')
|
EFIT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||||
};
|
};
|
||||||
} // 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"
|
||||||
|
|
||||||
|
@ -11,39 +12,45 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! An enumeration for all types of built-in scene nodes
|
//! An enumeration for all types of built-in scene nodes
|
||||||
/** A scene node type is represented by a four character code
|
/** A scene node type is represented by a four character code
|
||||||
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
||||||
name clashes with external scene nodes.*/
|
name clashes with external scene nodes.*/
|
||||||
enum ESCENE_NODE_TYPE
|
enum ESCENE_NODE_TYPE
|
||||||
{
|
{
|
||||||
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
||||||
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s', 'm', 'n', 'g'),
|
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'),
|
||||||
|
|
||||||
//! Mesh Scene Node
|
//! Mesh Scene Node
|
||||||
ESNT_MESH = MAKE_IRR_ID('m', 'e', 's', 'h'),
|
ESNT_MESH = MAKE_IRR_ID('m','e','s','h'),
|
||||||
|
|
||||||
//! Empty Scene Node
|
//! Empty Scene Node
|
||||||
ESNT_EMPTY = MAKE_IRR_ID('e', 'm', 't', 'y'),
|
ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'),
|
||||||
|
|
||||||
//! Dummy Transformation Scene Node
|
//! Dummy Transformation Scene Node
|
||||||
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d', 'm', 'm', 'y'),
|
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'),
|
||||||
|
|
||||||
//! Camera Scene Node
|
//! Camera Scene Node
|
||||||
ESNT_CAMERA = MAKE_IRR_ID('c', 'a', 'm', '_'),
|
ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'),
|
||||||
|
|
||||||
//! Billboard Scene Node
|
//! Billboard Scene Node
|
||||||
ESNT_BILLBOARD = MAKE_IRR_ID('b', 'i', 'l', 'l'),
|
ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'),
|
||||||
|
|
||||||
//! Animated Mesh Scene Node
|
//! Animated Mesh Scene Node
|
||||||
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a', 'm', 's', 'h'),
|
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'),
|
||||||
|
|
||||||
//! Unknown scene node
|
//! Unknown scene node
|
||||||
ESNT_UNKNOWN = MAKE_IRR_ID('u', 'n', 'k', 'n'),
|
ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'),
|
||||||
|
|
||||||
//! Will match with any scene node when checking types
|
//! Will match with any scene node when checking types
|
||||||
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"
|
||||||
|
|
||||||
|
@ -23,7 +24,7 @@ enum E_VERTEX_SHADER_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
||||||
const c8 *const VERTEX_SHADER_TYPE_NAMES[] = {
|
const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
|
||||||
"vs_1_1",
|
"vs_1_1",
|
||||||
"vs_2_0",
|
"vs_2_0",
|
||||||
"vs_2_a",
|
"vs_2_a",
|
||||||
|
@ -31,7 +32,7 @@ const c8 *const VERTEX_SHADER_TYPE_NAMES[] = {
|
||||||
"vs_4_0",
|
"vs_4_0",
|
||||||
"vs_4_1",
|
"vs_4_1",
|
||||||
"vs_5_0",
|
"vs_5_0",
|
||||||
0};
|
0 };
|
||||||
|
|
||||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||||
enum E_PIXEL_SHADER_TYPE
|
enum E_PIXEL_SHADER_TYPE
|
||||||
|
@ -53,7 +54,7 @@ enum E_PIXEL_SHADER_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
||||||
const c8 *const PIXEL_SHADER_TYPE_NAMES[] = {
|
const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
|
||||||
"ps_1_1",
|
"ps_1_1",
|
||||||
"ps_1_2",
|
"ps_1_2",
|
||||||
"ps_1_3",
|
"ps_1_3",
|
||||||
|
@ -65,7 +66,7 @@ const c8 *const PIXEL_SHADER_TYPE_NAMES[] = {
|
||||||
"ps_4_0",
|
"ps_4_0",
|
||||||
"ps_4_1",
|
"ps_4_1",
|
||||||
"ps_5_0",
|
"ps_5_0",
|
||||||
0};
|
0 };
|
||||||
|
|
||||||
//! Enum for supported geometry shader types
|
//! Enum for supported geometry shader types
|
||||||
enum E_GEOMETRY_SHADER_TYPE
|
enum E_GEOMETRY_SHADER_TYPE
|
||||||
|
@ -77,9 +78,13 @@ enum E_GEOMETRY_SHADER_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! String names for supported geometry shader types
|
//! String names for supported geometry shader types
|
||||||
const c8 *const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
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"
|
||||||
|
@ -11,14 +12,15 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Interface for an animated mesh.
|
//! Interface for an animated mesh.
|
||||||
/** There are already simple implementations of this interface available so
|
/** There are already simple implementations of this interface available so
|
||||||
you don't have to implement this interface on your own if you need to:
|
you don't have to implement this interface on your own if you need to:
|
||||||
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
||||||
irr::scene::SMeshBuffer etc. */
|
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,
|
||||||
|
@ -36,7 +38,7 @@ public:
|
||||||
animation with by default. If the amount is 0,
|
animation with by default. If the amount is 0,
|
||||||
it is not animated. The actual speed is set in the
|
it is not animated. The actual speed is set in the
|
||||||
scene node the mesh is instantiated in.*/
|
scene node the mesh is instantiated in.*/
|
||||||
virtual void setAnimationSpeed(f32 fps) = 0;
|
virtual void setAnimationSpeed(f32 fps) =0;
|
||||||
|
|
||||||
//! Returns the IMesh interface for a frame.
|
//! Returns the IMesh interface for a frame.
|
||||||
/** \param frame: Frame number as zero based index. The maximum
|
/** \param frame: Frame number as zero based index. The maximum
|
||||||
|
@ -51,7 +53,7 @@ public:
|
||||||
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
||||||
\param endFrameLoop: see startFrameLoop.
|
\param endFrameLoop: see startFrameLoop.
|
||||||
\return Returns the animated mesh based on a detail level. */
|
\return Returns the animated mesh based on a detail level. */
|
||||||
virtual IMesh *getMesh(s32 frame, s32 detailLevel = 255, s32 startFrameLoop = -1, s32 endFrameLoop = -1) = 0;
|
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0;
|
||||||
|
|
||||||
//! Returns the type of the animated mesh.
|
//! Returns the type of the animated mesh.
|
||||||
/** In most cases it is not necessary to use this method.
|
/** In most cases it is not necessary to use this method.
|
||||||
|
@ -63,7 +65,10 @@ public:
|
||||||
{
|
{
|
||||||
return EAMT_UNKNOWN;
|
return EAMT_UNKNOWN;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -12,8 +13,8 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
enum E_JOINT_UPDATE_ON_RENDER
|
enum E_JOINT_UPDATE_ON_RENDER
|
||||||
{
|
{
|
||||||
//! do nothing
|
//! do nothing
|
||||||
EJUOR_NONE = 0,
|
EJUOR_NONE = 0,
|
||||||
|
|
||||||
|
@ -22,35 +23,38 @@ enum E_JOINT_UPDATE_ON_RENDER
|
||||||
|
|
||||||
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
||||||
EJUOR_CONTROL
|
EJUOR_CONTROL
|
||||||
};
|
};
|
||||||
|
|
||||||
class IAnimatedMeshSceneNode;
|
|
||||||
|
|
||||||
//! Callback interface for catching events of ended animations.
|
class IAnimatedMeshSceneNode;
|
||||||
/** Implement this interface and use
|
|
||||||
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
//! Callback interface for catching events of ended animations.
|
||||||
be notified if an animation playback has ended.
|
/** Implement this interface and use
|
||||||
**/
|
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
||||||
class IAnimationEndCallBack : public virtual IReferenceCounted
|
be notified if an animation playback has ended.
|
||||||
{
|
**/
|
||||||
public:
|
class IAnimationEndCallBack : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
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.
|
||||||
\param node: Node of which the animation has ended. */
|
\param node: Node of which the animation has ended. */
|
||||||
virtual void OnAnimationEnd(IAnimatedMeshSceneNode *node) = 0;
|
virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Scene node capable of displaying an animated mesh.
|
||||||
|
class IAnimatedMeshSceneNode : public ISceneNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Scene node capable of displaying an animated mesh.
|
|
||||||
class IAnimatedMeshSceneNode : public ISceneNode
|
|
||||||
{
|
|
||||||
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() {}
|
||||||
|
@ -79,7 +83,7 @@ public:
|
||||||
|
|
||||||
//! Gets the speed with which the animation is played.
|
//! Gets the speed with which the animation is played.
|
||||||
/** \return Frames per second played. */
|
/** \return Frames per second played. */
|
||||||
virtual f32 getAnimationSpeed() const = 0;
|
virtual f32 getAnimationSpeed() const =0;
|
||||||
|
|
||||||
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
||||||
/** With this method it is possible to attach scene nodes to
|
/** With this method it is possible to attach scene nodes to
|
||||||
|
@ -96,10 +100,10 @@ public:
|
||||||
\return Pointer to the scene node which represents the joint
|
\return Pointer to the scene node which represents the joint
|
||||||
with the specified name. Returns 0 if the contained mesh is not
|
with the specified name. Returns 0 if the contained mesh is not
|
||||||
an skinned mesh or the name of the joint could not be found. */
|
an skinned mesh or the name of the joint could not be found. */
|
||||||
virtual IBoneSceneNode *getJointNode(const c8 *jointName) = 0;
|
virtual IBoneSceneNode* getJointNode(const c8* jointName)=0;
|
||||||
|
|
||||||
//! same as getJointNode(const c8* jointName), but based on id
|
//! same as getJointNode(const c8* jointName), but based on id
|
||||||
virtual IBoneSceneNode *getJointNode(u32 jointID) = 0;
|
virtual IBoneSceneNode* getJointNode(u32 jointID) = 0;
|
||||||
|
|
||||||
//! Gets joint count.
|
//! Gets joint count.
|
||||||
/** \return Amount of joints in the mesh. */
|
/** \return Amount of joints in the mesh. */
|
||||||
|
@ -124,7 +128,7 @@ public:
|
||||||
/** Set this to 0 to disable the callback again.
|
/** Set this to 0 to disable the callback again.
|
||||||
Please note that this will only be called when in non looped
|
Please note that this will only be called when in non looped
|
||||||
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
||||||
virtual void setAnimationEndCallback(IAnimationEndCallBack *callback = 0) = 0;
|
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0;
|
||||||
|
|
||||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||||
/** In this way it is possible to change the materials a mesh
|
/** In this way it is possible to change the materials a mesh
|
||||||
|
@ -136,34 +140,38 @@ public:
|
||||||
virtual bool isReadOnlyMaterials() const = 0;
|
virtual bool isReadOnlyMaterials() const = 0;
|
||||||
|
|
||||||
//! Sets a new mesh
|
//! Sets a new mesh
|
||||||
virtual void setMesh(IAnimatedMesh *mesh) = 0;
|
virtual void setMesh(IAnimatedMesh* mesh) = 0;
|
||||||
|
|
||||||
//! Returns the current mesh
|
//! Returns the current mesh
|
||||||
virtual IAnimatedMesh *getMesh(void) = 0;
|
virtual IAnimatedMesh* getMesh(void) = 0;
|
||||||
|
|
||||||
//! Set how the joints should be updated on render
|
//! Set how the joints should be updated on render
|
||||||
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode) = 0;
|
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0;
|
||||||
|
|
||||||
//! Sets the transition time in seconds
|
//! Sets the transition time in seconds
|
||||||
/** Note: This needs to enable joints, and setJointmode set to
|
/** Note: This needs to enable joints, and setJointmode set to
|
||||||
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
||||||
not animate. */
|
not animate. */
|
||||||
virtual void setTransitionTime(f32 Time) = 0;
|
virtual void setTransitionTime(f32 Time) =0;
|
||||||
|
|
||||||
//! animates the joints in the mesh based on the current frame.
|
//! animates the joints in the mesh based on the current frame.
|
||||||
/** Also takes in to account transitions. */
|
/** Also takes in to account transitions. */
|
||||||
virtual void animateJoints(bool CalculateAbsolutePositions = true) = 0;
|
virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0;
|
||||||
|
|
||||||
//! render mesh ignoring its transformation.
|
//! render mesh ignoring its transformation.
|
||||||
/** Culling is unaffected. */
|
/** Culling is unaffected. */
|
||||||
virtual void setRenderFromIdentity(bool On) = 0;
|
virtual void setRenderFromIdentity( bool On )=0;
|
||||||
|
|
||||||
//! Creates a clone of this scene node and its children.
|
//! Creates a clone of this scene node and its children.
|
||||||
/** \param newParent An optional new parent.
|
/** \param newParent An optional new parent.
|
||||||
\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,19 +2,35 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
@ -23,30 +39,42 @@ 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;
|
||||||
|
|
||||||
//! Returns attribute name by index.
|
//! Returns attribute name by index.
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
virtual const c8 *getAttributeName(s32 index) const = 0;
|
virtual const c8* getAttributeName(s32 index) const = 0;
|
||||||
|
|
||||||
//! Returns the type of an attribute
|
//! Returns the type of an attribute
|
||||||
//! \param attributeName: Name for the attribute
|
//! \param attributeName: Name for the attribute
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8 *attributeName) const = 0;
|
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const = 0;
|
||||||
|
|
||||||
//! Returns attribute type by index.
|
//! Returns attribute type by index.
|
||||||
//! \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;
|
||||||
|
|
||||||
//! Returns attribute index from name, -1 if not found
|
//! Returns attribute index from name, -1 if not found
|
||||||
virtual s32 findAttribute(const c8 *attributeName) const = 0;
|
virtual s32 findAttribute(const c8* attributeName) const = 0;
|
||||||
|
|
||||||
//! Removes all attributes
|
//! Removes all attributes
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Integer Attribute
|
Integer Attribute
|
||||||
|
@ -54,16 +82,16 @@ public:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as integer
|
//! Adds an attribute as integer
|
||||||
virtual void addInt(const c8 *attributeName, s32 value) = 0;
|
virtual void addInt(const c8* attributeName, s32 value) = 0;
|
||||||
|
|
||||||
//! Sets an attribute as integer value
|
//! Sets an attribute as integer value
|
||||||
virtual void setAttribute(const c8 *attributeName, s32 value) = 0;
|
virtual void setAttribute(const c8* attributeName, s32 value) = 0;
|
||||||
|
|
||||||
//! Gets an attribute as integer value
|
//! Gets an attribute as integer value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual s32 getAttributeAsInt(const c8 *attributeName, irr::s32 defaultNotFound = 0) const = 0;
|
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const = 0;
|
||||||
|
|
||||||
//! Gets an attribute as integer value
|
//! Gets an attribute as integer value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
@ -79,16 +107,16 @@ public:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as float
|
//! Adds an attribute as float
|
||||||
virtual void addFloat(const c8 *attributeName, f32 value) = 0;
|
virtual void addFloat(const c8* attributeName, f32 value) = 0;
|
||||||
|
|
||||||
//! Sets a attribute as float value
|
//! Sets a attribute as float value
|
||||||
virtual void setAttribute(const c8 *attributeName, f32 value) = 0;
|
virtual void setAttribute(const c8* attributeName, f32 value) = 0;
|
||||||
|
|
||||||
//! Gets an attribute as float value
|
//! Gets an attribute as float value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual f32 getAttributeAsFloat(const c8 *attributeName, irr::f32 defaultNotFound = 0.f) const = 0;
|
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const = 0;
|
||||||
|
|
||||||
//! Gets an attribute as float value
|
//! Gets an attribute as float value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
@ -97,21 +125,22 @@ 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//! Adds an attribute as bool
|
//! Adds an attribute as bool
|
||||||
virtual void addBool(const c8 *attributeName, bool value) = 0;
|
virtual void addBool(const c8* attributeName, bool value) = 0;
|
||||||
|
|
||||||
//! Sets an attribute as boolean value
|
//! Sets an attribute as boolean value
|
||||||
virtual void setAttribute(const c8 *attributeName, bool value) = 0;
|
virtual void setAttribute(const c8* attributeName, bool value) = 0;
|
||||||
|
|
||||||
//! Gets an attribute as boolean value
|
//! Gets an attribute as boolean value
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
virtual bool getAttributeAsBool(const c8 *attributeName, bool defaultNotFound = false) const = 0;
|
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const = 0;
|
||||||
|
|
||||||
//! Gets an attribute as boolean value
|
//! Gets an attribute as boolean value
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -10,8 +11,8 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class ICameraSceneNode;
|
class ICameraSceneNode;
|
||||||
class IMeshBuffer;
|
class IMeshBuffer;
|
||||||
|
|
||||||
//! A billboard scene node.
|
//! A billboard scene node.
|
||||||
/** A billboard is like a 3d sprite: A 2d element,
|
/** A billboard is like a 3d sprite: A 2d element,
|
||||||
|
@ -21,13 +22,14 @@ 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;
|
||||||
|
|
||||||
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
||||||
/** \param[in] height The height of the billboard.
|
/** \param[in] height The height of the billboard.
|
||||||
|
@ -41,30 +43,30 @@ public:
|
||||||
Use getWidths() to retrieve the bottom and top edges independently.
|
Use getWidths() to retrieve the bottom and top edges independently.
|
||||||
\return Size of the billboard.
|
\return Size of the billboard.
|
||||||
*/
|
*/
|
||||||
virtual const core::dimension2d<f32> &getSize() const = 0;
|
virtual const core::dimension2d<f32>& getSize() const = 0;
|
||||||
|
|
||||||
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
||||||
/** \param[out] height The height of the billboard.
|
/** \param[out] height The height of the billboard.
|
||||||
\param[out] bottomEdgeWidth The width of the bottom edge of the billboard.
|
\param[out] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||||
\param[out] topEdgeWidth The width of the top edge of the billboard.
|
\param[out] topEdgeWidth The width of the top edge of the billboard.
|
||||||
*/
|
*/
|
||||||
virtual void getSize(f32 &height, f32 &bottomEdgeWidth, f32 &topEdgeWidth) const = 0;
|
virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const =0;
|
||||||
|
|
||||||
//! Set the color of all vertices of the billboard
|
//! Set the color of all vertices of the billboard
|
||||||
/** \param[in] overallColor Color to set */
|
/** \param[in] overallColor Color to set */
|
||||||
virtual void setColor(const video::SColor &overallColor) = 0;
|
virtual void setColor(const video::SColor& overallColor) = 0;
|
||||||
|
|
||||||
//! Set the color of the top and bottom vertices of the billboard
|
//! Set the color of the top and bottom vertices of the billboard
|
||||||
/** \param[in] topColor Color to set the top vertices
|
/** \param[in] topColor Color to set the top vertices
|
||||||
\param[in] bottomColor Color to set the bottom vertices */
|
\param[in] bottomColor Color to set the bottom vertices */
|
||||||
virtual void setColor(const video::SColor &topColor,
|
virtual void setColor(const video::SColor& topColor,
|
||||||
const video::SColor &bottomColor) = 0;
|
const video::SColor& bottomColor) = 0;
|
||||||
|
|
||||||
//! Gets the color of the top and bottom vertices of the billboard
|
//! Gets the color of the top and bottom vertices of the billboard
|
||||||
/** \param[out] topColor Stores the color of the top vertices
|
/** \param[out] topColor Stores the color of the top vertices
|
||||||
\param[out] bottomColor Stores the color of the bottom vertices */
|
\param[out] bottomColor Stores the color of the bottom vertices */
|
||||||
virtual void getColor(video::SColor &topColor,
|
virtual void getColor(video::SColor& topColor,
|
||||||
video::SColor &bottomColor) const = 0;
|
video::SColor& bottomColor) const = 0;
|
||||||
|
|
||||||
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
||||||
/** The boundingbox returned will use absolute coordinates.
|
/** The boundingbox returned will use absolute coordinates.
|
||||||
|
@ -72,7 +74,7 @@ public:
|
||||||
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
||||||
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
||||||
to contain the billboard. While this function can return the real one. */
|
to contain the billboard. While this function can return the real one. */
|
||||||
virtual const core::aabbox3d<f32> &getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode *camera) = 0;
|
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
|
||||||
|
|
||||||
//! 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. */
|
||||||
|
@ -83,8 +85,12 @@ public:
|
||||||
So this is mainly useful to access/modify the uv-coordinates.
|
So this is mainly useful to access/modify the uv-coordinates.
|
||||||
\param nr: Zero based index of the mesh buffer.
|
\param nr: Zero based index of the mesh buffer.
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
|
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
|
||||||
virtual IMeshBuffer *getMeshBuffer(u32 nr) const = 0;
|
virtual IMeshBuffer* getMeshBuffer(u32 nr) 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_BONE_SCENE_NODE_H_INCLUDED__
|
||||||
|
#define __I_BONE_SCENE_NODE_H_INCLUDED__
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
|
@ -11,11 +12,11 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Enumeration for different bone animation modes
|
//! Enumeration for different bone animation modes
|
||||||
enum E_BONE_ANIMATION_MODE
|
enum E_BONE_ANIMATION_MODE
|
||||||
{
|
{
|
||||||
//! The bone is usually animated, unless it's parent is not animated
|
//! The bone is usually animated, unless it's parent is not animated
|
||||||
EBAM_AUTOMATIC = 0,
|
EBAM_AUTOMATIC=0,
|
||||||
|
|
||||||
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
||||||
EBAM_ANIMATED,
|
EBAM_ANIMATED,
|
||||||
|
@ -26,34 +27,37 @@ enum E_BONE_ANIMATION_MODE
|
||||||
//! Not an animation mode, just here to count the available modes
|
//! Not an animation mode, just here to count the available modes
|
||||||
EBAM_COUNT
|
EBAM_COUNT
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum E_BONE_SKINNING_SPACE
|
enum E_BONE_SKINNING_SPACE
|
||||||
{
|
{
|
||||||
//! local skinning, standard
|
//! local skinning, standard
|
||||||
EBSS_LOCAL = 0,
|
EBSS_LOCAL=0,
|
||||||
|
|
||||||
//! global skinning
|
//! global skinning
|
||||||
EBSS_GLOBAL,
|
EBSS_GLOBAL,
|
||||||
|
|
||||||
EBSS_COUNT
|
EBSS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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.
|
|
||||||
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
//! Interface for bones used for skeletal animation.
|
||||||
class IBoneSceneNode : public ISceneNode
|
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
|
||||||
{
|
class IBoneSceneNode : public ISceneNode
|
||||||
public:
|
{
|
||||||
IBoneSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id = -1) :
|
public:
|
||||||
ISceneNode(parent, mgr, id), positionHint(-1), scaleHint(-1), rotationHint(-1) {}
|
|
||||||
|
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
|
||||||
|
ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { }
|
||||||
|
|
||||||
//! Get the index of the bone
|
//! Get the index of the bone
|
||||||
virtual u32 getBoneIndex() const = 0;
|
virtual u32 getBoneIndex() const = 0;
|
||||||
|
@ -66,31 +70,35 @@ public:
|
||||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||||
|
|
||||||
//! Get the axis aligned bounding box of this node
|
//! Get the axis aligned bounding box of this node
|
||||||
const core::aabbox3d<f32> &getBoundingBox() const override = 0;
|
const core::aabbox3d<f32>& getBoundingBox() const override = 0;
|
||||||
|
|
||||||
//! Returns the relative transformation of the scene node.
|
//! Returns the relative transformation of the scene node.
|
||||||
// virtual core::matrix4 getRelativeTransformation() const = 0;
|
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||||
|
|
||||||
//! The animation method.
|
//! The animation method.
|
||||||
void OnAnimate(u32 timeMs) override = 0;
|
void OnAnimate(u32 timeMs) override =0;
|
||||||
|
|
||||||
//! The render method.
|
//! The render method.
|
||||||
/** Does nothing as bones are not visible. */
|
/** Does nothing as bones are not visible. */
|
||||||
void render() override {}
|
void render() override { }
|
||||||
|
|
||||||
//! How the relative transformation of the bone is used
|
//! How the relative transformation of the bone is used
|
||||||
virtual void setSkinningSpace(E_BONE_SKINNING_SPACE space) = 0;
|
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
||||||
|
|
||||||
//! How the relative transformation of the bone is used
|
//! How the relative transformation of the bone is used
|
||||||
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const = 0;
|
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0;
|
||||||
|
|
||||||
//! Updates the absolute position based on the relative and the parents position
|
//! Updates the absolute position based on the relative and the parents position
|
||||||
virtual void updateAbsolutePositionOfAllChildren() = 0;
|
virtual void updateAbsolutePositionOfAllChildren()=0;
|
||||||
|
|
||||||
s32 positionHint;
|
s32 positionHint;
|
||||||
s32 scaleHint;
|
s32 scaleHint;
|
||||||
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"
|
||||||
|
@ -11,24 +12,24 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
struct SViewFrustum;
|
struct SViewFrustum;
|
||||||
|
|
||||||
|
//! Scene Node which is a (controllable) camera.
|
||||||
|
/** The whole scene will be rendered from the cameras point of view.
|
||||||
|
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
||||||
|
other scene node, and will follow its parents movement, rotation and so
|
||||||
|
on.
|
||||||
|
*/
|
||||||
|
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Scene Node which is a (controllable) camera.
|
|
||||||
/** The whole scene will be rendered from the cameras point of view.
|
|
||||||
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
|
||||||
other scene node, and will follow its parents movement, rotation and so
|
|
||||||
on.
|
|
||||||
*/
|
|
||||||
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Constructor
|
//! 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
|
||||||
|
@ -43,26 +44,26 @@ public:
|
||||||
\param isOrthogonal Set this to true if the matrix is an
|
\param isOrthogonal Set this to true if the matrix is an
|
||||||
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
||||||
*/
|
*/
|
||||||
virtual void setProjectionMatrix(const core::matrix4 &projection, bool isOrthogonal = false) = 0;
|
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0;
|
||||||
|
|
||||||
//! Gets the current projection matrix of the camera.
|
//! Gets the current projection matrix of the camera.
|
||||||
/** \return The current projection matrix of the camera. */
|
/** \return The current projection matrix of the camera. */
|
||||||
virtual const core::matrix4 &getProjectionMatrix() const = 0;
|
virtual const core::matrix4& getProjectionMatrix() const =0;
|
||||||
|
|
||||||
//! Gets the current view matrix of the camera.
|
//! Gets the current view matrix of the camera.
|
||||||
/** \return The current view matrix of the camera. */
|
/** \return The current view matrix of the camera. */
|
||||||
virtual const core::matrix4 &getViewMatrix() const = 0;
|
virtual const core::matrix4& getViewMatrix() const =0;
|
||||||
|
|
||||||
//! Sets a custom view matrix affector.
|
//! Sets a custom view matrix affector.
|
||||||
/** The matrix passed here, will be multiplied with the view
|
/** The matrix passed here, will be multiplied with the view
|
||||||
matrix when it gets updated. This allows for custom camera
|
matrix when it gets updated. This allows for custom camera
|
||||||
setups like, for example, a reflection camera.
|
setups like, for example, a reflection camera.
|
||||||
\param affector The affector matrix. */
|
\param affector The affector matrix. */
|
||||||
virtual void setViewMatrixAffector(const core::matrix4 &affector) = 0;
|
virtual void setViewMatrixAffector(const core::matrix4& affector) =0;
|
||||||
|
|
||||||
//! Get the custom view matrix affector.
|
//! Get the custom view matrix affector.
|
||||||
/** \return The affector matrix. */
|
/** \return The affector matrix. */
|
||||||
virtual const core::matrix4 &getViewMatrixAffector() const = 0;
|
virtual const core::matrix4& getViewMatrixAffector() const =0;
|
||||||
|
|
||||||
//! It is possible to send mouse and key events to the camera.
|
//! It is possible to send mouse and key events to the camera.
|
||||||
/** Most cameras may ignore this input, but camera scene nodes
|
/** Most cameras may ignore this input, but camera scene nodes
|
||||||
|
@ -71,7 +72,7 @@ public:
|
||||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||||
this input for changing their position, look at target or
|
this input for changing their position, look at target or
|
||||||
whatever. */
|
whatever. */
|
||||||
bool OnEvent(const SEvent &event) override = 0;
|
bool OnEvent(const SEvent& event) override =0;
|
||||||
|
|
||||||
//! Sets the look at target of the camera
|
//! Sets the look at target of the camera
|
||||||
/** If the camera's target and rotation are bound ( @see
|
/** If the camera's target and rotation are bound ( @see
|
||||||
|
@ -81,7 +82,7 @@ public:
|
||||||
internally, so if you changed setPosition since last rendering you must
|
internally, so if you changed setPosition since last rendering you must
|
||||||
call updateAbsolutePosition before using this function.
|
call updateAbsolutePosition before using this function.
|
||||||
\param pos Look at target of the camera, in world co-ordinates. */
|
\param pos Look at target of the camera, in world co-ordinates. */
|
||||||
virtual void setTarget(const core::vector3df &pos) = 0;
|
virtual void setTarget(const core::vector3df& pos) =0;
|
||||||
|
|
||||||
//! Sets the rotation of the node.
|
//! Sets the rotation of the node.
|
||||||
/** This only modifies the relative rotation of the node.
|
/** This only modifies the relative rotation of the node.
|
||||||
|
@ -89,63 +90,63 @@ public:
|
||||||
bindTargetAndRotation() ) then calling this will also change
|
bindTargetAndRotation() ) then calling this will also change
|
||||||
the camera's target to match the rotation.
|
the camera's target to match the rotation.
|
||||||
\param rotation New rotation of the node in degrees. */
|
\param rotation New rotation of the node in degrees. */
|
||||||
void setRotation(const core::vector3df &rotation) override = 0;
|
void setRotation(const core::vector3df& rotation) override =0;
|
||||||
|
|
||||||
//! Gets the current look at target of the camera
|
//! Gets the current look at target of the camera
|
||||||
/** \return The current look at target of the camera, in world co-ordinates */
|
/** \return The current look at target of the camera, in world co-ordinates */
|
||||||
virtual const core::vector3df &getTarget() const = 0;
|
virtual const core::vector3df& getTarget() const =0;
|
||||||
|
|
||||||
//! Sets the up vector of the camera.
|
//! Sets the up vector of the camera.
|
||||||
/** \param pos: New upvector of the camera. */
|
/** \param pos: New upvector of the camera. */
|
||||||
virtual void setUpVector(const core::vector3df &pos) = 0;
|
virtual void setUpVector(const core::vector3df& pos) =0;
|
||||||
|
|
||||||
//! Gets the up vector of the camera.
|
//! Gets the up vector of the camera.
|
||||||
/** \return The up vector of the camera, in world space. */
|
/** \return The up vector of the camera, in world space. */
|
||||||
virtual const core::vector3df &getUpVector() const = 0;
|
virtual const core::vector3df& getUpVector() const =0;
|
||||||
|
|
||||||
//! Gets the value of the near plane of the camera.
|
//! Gets the value of the near plane of the camera.
|
||||||
/** \return The value of the near plane of the camera. */
|
/** \return The value of the near plane of the camera. */
|
||||||
virtual f32 getNearValue() const = 0;
|
virtual f32 getNearValue() const =0;
|
||||||
|
|
||||||
//! Gets the value of the far plane of the camera.
|
//! Gets the value of the far plane of the camera.
|
||||||
/** \return The value of the far plane of the camera. */
|
/** \return The value of the far plane of the camera. */
|
||||||
virtual f32 getFarValue() const = 0;
|
virtual f32 getFarValue() const =0;
|
||||||
|
|
||||||
//! Gets the aspect ratio of the camera.
|
//! Gets the aspect ratio of the camera.
|
||||||
/** \return The aspect ratio of the camera. */
|
/** \return The aspect ratio of the camera. */
|
||||||
virtual f32 getAspectRatio() const = 0;
|
virtual f32 getAspectRatio() const =0;
|
||||||
|
|
||||||
//! Gets the field of view of the camera.
|
//! Gets the field of view of the camera.
|
||||||
/** \return The field of view of the camera in radians. */
|
/** \return The field of view of the camera in radians. */
|
||||||
virtual f32 getFOV() const = 0;
|
virtual f32 getFOV() const =0;
|
||||||
|
|
||||||
//! Sets the value of the near clipping plane. (default: 1.0f)
|
//! Sets the value of the near clipping plane. (default: 1.0f)
|
||||||
/** \param zn: New z near value. */
|
/** \param zn: New z near value. */
|
||||||
virtual void setNearValue(f32 zn) = 0;
|
virtual void setNearValue(f32 zn) =0;
|
||||||
|
|
||||||
//! Sets the value of the far clipping plane (default: 2000.0f)
|
//! Sets the value of the far clipping plane (default: 2000.0f)
|
||||||
/** \param zf: New z far value. */
|
/** \param zf: New z far value. */
|
||||||
virtual void setFarValue(f32 zf) = 0;
|
virtual void setFarValue(f32 zf) =0;
|
||||||
|
|
||||||
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
||||||
/** \param aspect: New aspect ratio. */
|
/** \param aspect: New aspect ratio. */
|
||||||
virtual void setAspectRatio(f32 aspect) = 0;
|
virtual void setAspectRatio(f32 aspect) =0;
|
||||||
|
|
||||||
//! Sets the field of view (Default: PI / 2.5f)
|
//! Sets the field of view (Default: PI / 2.5f)
|
||||||
/** \param fovy: New field of view in radians. */
|
/** \param fovy: New field of view in radians. */
|
||||||
virtual void setFOV(f32 fovy) = 0;
|
virtual void setFOV(f32 fovy) =0;
|
||||||
|
|
||||||
//! Get the view frustum.
|
//! Get the view frustum.
|
||||||
/** \return The current view frustum. */
|
/** \return The current view frustum. */
|
||||||
virtual const SViewFrustum *getViewFrustum() const = 0;
|
virtual const SViewFrustum* getViewFrustum() const =0;
|
||||||
|
|
||||||
//! Disables or enables the camera to get key or mouse inputs.
|
//! Disables or enables the camera to get key or mouse inputs.
|
||||||
/** If this is set to true, the camera will respond to key
|
/** If this is set to true, the camera will respond to key
|
||||||
inputs otherwise not. */
|
inputs otherwise not. */
|
||||||
virtual void setInputReceiverEnabled(bool enabled) = 0;
|
virtual void setInputReceiverEnabled(bool enabled) =0;
|
||||||
|
|
||||||
//! Checks if the input receiver of the camera is currently enabled.
|
//! Checks if the input receiver of the camera is currently enabled.
|
||||||
virtual bool isInputReceiverEnabled() const = 0;
|
virtual bool isInputReceiverEnabled() const =0;
|
||||||
|
|
||||||
//! Checks if a camera is orthogonal.
|
//! Checks if a camera is orthogonal.
|
||||||
virtual bool isOrthogonal() const
|
virtual bool isOrthogonal() const
|
||||||
|
@ -162,23 +163,27 @@ public:
|
||||||
\param bound True to bind the camera's scene node rotation
|
\param bound True to bind the camera's scene node rotation
|
||||||
and targeting, false to unbind them.
|
and targeting, false to unbind them.
|
||||||
@see getTargetAndRotationBinding() */
|
@see getTargetAndRotationBinding() */
|
||||||
virtual void bindTargetAndRotation(bool bound) = 0;
|
virtual void bindTargetAndRotation(bool bound) =0;
|
||||||
|
|
||||||
//! Updates the matrices without uploading them to the driver
|
//! Updates the matrices without uploading them to the driver
|
||||||
virtual void updateMatrices() = 0;
|
virtual void updateMatrices() = 0;
|
||||||
|
|
||||||
//! Queries if the camera scene node's rotation and its target position are bound together.
|
//! Queries if the camera scene node's rotation and its target position are bound together.
|
||||||
/** @see bindTargetAndRotation() */
|
/** @see bindTargetAndRotation() */
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsOrthogonal;
|
bool IsOrthogonal;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -12,30 +12,30 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
// For system specific window contexts (used for OpenGL)
|
// For system specific window contexts (used for OpenGL)
|
||||||
class IContextManager : public virtual IReferenceCounted
|
class IContextManager : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
||||||
virtual bool initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &data) = 0;
|
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) =0;
|
||||||
|
|
||||||
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
||||||
virtual void terminate() = 0;
|
virtual void terminate() =0;
|
||||||
|
|
||||||
//! Create surface based on current window set
|
//! Create surface based on current window set
|
||||||
virtual bool generateSurface() = 0;
|
virtual bool generateSurface() =0;
|
||||||
|
|
||||||
//! Destroy current surface
|
//! Destroy current surface
|
||||||
virtual void destroySurface() = 0;
|
virtual void destroySurface() =0;
|
||||||
|
|
||||||
//! Create context based on current surface
|
//! Create context based on current surface
|
||||||
virtual bool generateContext() = 0;
|
virtual bool generateContext() =0;
|
||||||
|
|
||||||
//! Destroy current context
|
//! Destroy current context
|
||||||
virtual void destroyContext() = 0;
|
virtual void destroyContext() =0;
|
||||||
|
|
||||||
//! Get current context
|
//! Get current context
|
||||||
virtual const SExposedVideoData &getContext() const = 0;
|
virtual const SExposedVideoData& getContext() const =0;
|
||||||
|
|
||||||
//! Change render context, disable old and activate new defined by videoData
|
//! Change render context, disable old and activate new defined by videoData
|
||||||
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
||||||
|
@ -46,14 +46,16 @@ public:
|
||||||
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
||||||
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
||||||
Note that only 1 thread at a time may access an OpenGL context. */
|
Note that only 1 thread at a time may access an OpenGL context. */
|
||||||
virtual bool activateContext(const SExposedVideoData &videoData, bool restorePrimaryOnZero = false) = 0;
|
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) =0;
|
||||||
|
|
||||||
//! Get the address of any OpenGL procedure (including core procedures).
|
//! Get the address of any OpenGL procedure (including core procedures).
|
||||||
virtual void *getProcAddress(const std::string &procName) = 0;
|
virtual void* getProcAddress(const std::string &procName) =0;
|
||||||
|
|
||||||
//! Swap buffers.
|
//! Swap buffers.
|
||||||
virtual bool swapBuffers() = 0;
|
virtual bool swapBuffers() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -13,11 +14,11 @@ namespace irr
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
|
|
||||||
//! Default icons for cursors
|
//! Default icons for cursors
|
||||||
enum ECURSOR_ICON
|
enum ECURSOR_ICON
|
||||||
{
|
{
|
||||||
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
||||||
ECI_NORMAL, // arrow
|
ECI_NORMAL, // arrow
|
||||||
ECI_CROSS, // Crosshair
|
ECI_CROSS, // Crosshair
|
||||||
|
@ -38,10 +39,11 @@ enum ECURSOR_ICON
|
||||||
// additionally.
|
// additionally.
|
||||||
|
|
||||||
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,30 +57,30 @@ 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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
IGUISpriteBank *SpriteBank;
|
IGUISpriteBank * SpriteBank;
|
||||||
s32 SpriteId;
|
s32 SpriteId;
|
||||||
core::position2d<s32> HotSpot;
|
core::position2d<s32> HotSpot;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! platform specific behavior flags for the cursor
|
//! platform specific behavior flags for the cursor
|
||||||
enum ECURSOR_PLATFORM_BEHAVIOR
|
enum ECURSOR_PLATFORM_BEHAVIOR
|
||||||
{
|
{
|
||||||
//! default - no platform specific behavior
|
//! default - no platform specific behavior
|
||||||
ECPB_NONE = 0,
|
ECPB_NONE = 0,
|
||||||
|
|
||||||
|
@ -89,12 +91,13 @@ enum ECURSOR_PLATFORM_BEHAVIOR
|
||||||
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
||||||
*/
|
*/
|
||||||
ECPB_X11_CACHE_UPDATES = 1
|
ECPB_X11_CACHE_UPDATES = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Interface to manipulate the mouse cursor.
|
||||||
|
class ICursorControl : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Interface to manipulate the mouse cursor.
|
|
||||||
class ICursorControl : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
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. */
|
||||||
|
@ -136,7 +139,7 @@ public:
|
||||||
check what has become of a setPosition call with float numbers).
|
check what has become of a setPosition call with float numbers).
|
||||||
\return Returns the current position of the cursor. The returned position
|
\return Returns the current position of the cursor. The returned position
|
||||||
is the position of the mouse cursor in pixel units. */
|
is the position of the mouse cursor in pixel units. */
|
||||||
virtual const core::position2d<s32> &getPosition(bool updateCursor = true) = 0;
|
virtual const core::position2d<s32>& getPosition(bool updateCursor=true) = 0;
|
||||||
|
|
||||||
//! Returns the current position of the mouse cursor.
|
//! Returns the current position of the mouse cursor.
|
||||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||||
|
@ -147,7 +150,7 @@ public:
|
||||||
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||||
render window. */
|
render window. */
|
||||||
virtual core::position2d<f32> getRelativePosition(bool updateCursor = true) = 0;
|
virtual core::position2d<f32> getRelativePosition(bool updateCursor=true) = 0;
|
||||||
|
|
||||||
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
||||||
/** If this rect is set, the cursor position is not being calculated relative to
|
/** If this rect is set, the cursor position is not being calculated relative to
|
||||||
|
@ -155,11 +158,11 @@ public:
|
||||||
this feature again. This feature is useful when rendering into parts of foreign windows
|
this feature again. This feature is useful when rendering into parts of foreign windows
|
||||||
for example in an editor.
|
for example in an editor.
|
||||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||||
virtual void setReferenceRect(core::rect<s32> *rect = 0) = 0;
|
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
||||||
|
|
||||||
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
||||||
/** Specific to SDL */
|
/** Specific to SDL */
|
||||||
virtual void setRelativeMode(bool relative){};
|
virtual void setRelativeMode(bool relative) {};
|
||||||
|
|
||||||
//! Sets the active cursor icon
|
//! Sets the active cursor icon
|
||||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||||
|
@ -170,17 +173,17 @@ public:
|
||||||
|
|
||||||
//! Add a custom sprite as cursor icon.
|
//! Add a custom sprite as cursor icon.
|
||||||
/** \return Identification for the icon */
|
/** \return Identification for the icon */
|
||||||
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite &icon) { return gui::ECI_NORMAL; }
|
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; }
|
||||||
|
|
||||||
//! replace a cursor icon.
|
//! replace a cursor icon.
|
||||||
/** Changing cursor icons is so far only supported on Win32 and Linux
|
/** Changing cursor icons is so far only supported on Win32 and Linux
|
||||||
Note that this only changes the icons within your application, system cursors outside your
|
Note that this only changes the icons within your application, system cursors outside your
|
||||||
application will not be affected.
|
application will not be affected.
|
||||||
*/
|
*/
|
||||||
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite &sprite) {}
|
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {}
|
||||||
|
|
||||||
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
||||||
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0, 0); }
|
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); }
|
||||||
|
|
||||||
//! Set platform specific behavior flags.
|
//! Set platform specific behavior flags.
|
||||||
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
||||||
|
@ -189,7 +192,11 @@ public:
|
||||||
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
||||||
*/
|
*/
|
||||||
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,15 +23,20 @@ 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
|
||||||
and rotation. */
|
and rotation. */
|
||||||
virtual core::matrix4 &getRelativeTransformationMatrix() = 0;
|
virtual core::matrix4& getRelativeTransformationMatrix() = 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_EVENT_RECEIVER_H_INCLUDED__
|
||||||
|
#define __I_EVENT_RECEIVER_H_INCLUDED__
|
||||||
|
|
||||||
#include "ILogger.h"
|
#include "ILogger.h"
|
||||||
#include "Keycodes.h"
|
#include "Keycodes.h"
|
||||||
|
@ -10,9 +11,9 @@
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
//! Enumeration for all event types there are.
|
//! Enumeration for all event types there are.
|
||||||
enum EEVENT_TYPE
|
enum EEVENT_TYPE
|
||||||
{
|
{
|
||||||
//! An event of the graphical user interface.
|
//! An event of the graphical user interface.
|
||||||
/** GUI events are created by the GUI environment or the GUI elements in response
|
/** GUI events are created by the GUI environment or the GUI elements in response
|
||||||
to mouse or keyboard events. When a GUI element receives an event it will either
|
to mouse or keyboard events. When a GUI element receives an event it will either
|
||||||
|
@ -89,11 +90,11 @@ enum EEVENT_TYPE
|
||||||
//! compile these enumeration values to 32 bit.
|
//! compile these enumeration values to 32 bit.
|
||||||
EGUIET_FORCE_32_BIT = 0x7fffffff
|
EGUIET_FORCE_32_BIT = 0x7fffffff
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enumeration for all mouse input events
|
//! Enumeration for all mouse input events
|
||||||
enum EMOUSE_INPUT_EVENT
|
enum EMOUSE_INPUT_EVENT
|
||||||
{
|
{
|
||||||
//! Left mouse button was pressed down.
|
//! Left mouse button was pressed down.
|
||||||
EMIE_LMOUSE_PRESSED_DOWN = 0,
|
EMIE_LMOUSE_PRESSED_DOWN = 0,
|
||||||
|
|
||||||
|
@ -153,11 +154,11 @@ enum EMOUSE_INPUT_EVENT
|
||||||
|
|
||||||
//! No real event. Just for convenience to get number of events
|
//! No real event. Just for convenience to get number of events
|
||||||
EMIE_COUNT
|
EMIE_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Masks for mouse button states
|
//! Masks for mouse button states
|
||||||
enum E_MOUSE_BUTTON_STATE_MASK
|
enum E_MOUSE_BUTTON_STATE_MASK
|
||||||
{
|
{
|
||||||
EMBSM_LEFT = 0x01,
|
EMBSM_LEFT = 0x01,
|
||||||
EMBSM_RIGHT = 0x02,
|
EMBSM_RIGHT = 0x02,
|
||||||
EMBSM_MIDDLE = 0x04,
|
EMBSM_MIDDLE = 0x04,
|
||||||
|
@ -169,11 +170,11 @@ enum E_MOUSE_BUTTON_STATE_MASK
|
||||||
EMBSM_EXTRA2 = 0x10,
|
EMBSM_EXTRA2 = 0x10,
|
||||||
|
|
||||||
EMBSM_FORCE_32_BIT = 0x7fffffff
|
EMBSM_FORCE_32_BIT = 0x7fffffff
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enumeration for all touch input events
|
//! Enumeration for all touch input events
|
||||||
enum ETOUCH_INPUT_EVENT
|
enum ETOUCH_INPUT_EVENT
|
||||||
{
|
{
|
||||||
//! Touch was pressed down.
|
//! Touch was pressed down.
|
||||||
ETIE_PRESSED_DOWN = 0,
|
ETIE_PRESSED_DOWN = 0,
|
||||||
|
|
||||||
|
@ -185,10 +186,10 @@ enum ETOUCH_INPUT_EVENT
|
||||||
|
|
||||||
//! No real event. Just for convenience to get number of events
|
//! No real event. Just for convenience to get number of events
|
||||||
ETIE_COUNT
|
ETIE_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ESYSTEM_EVENT_TYPE
|
enum ESYSTEM_EVENT_TYPE
|
||||||
{
|
{
|
||||||
//! From Android command handler for native activity messages
|
//! From Android command handler for native activity messages
|
||||||
ESET_ANDROID_CMD = 0,
|
ESET_ANDROID_CMD = 0,
|
||||||
|
|
||||||
|
@ -196,11 +197,11 @@ enum ESYSTEM_EVENT_TYPE
|
||||||
|
|
||||||
//! No real event, but to get number of event types
|
//! No real event, but to get number of event types
|
||||||
ESET_COUNT
|
ESET_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enumeration for a commonly used application state events (it's useful mainly for mobile devices)
|
//! Enumeration for a commonly used application state events (it's useful mainly for mobile devices)
|
||||||
enum EAPPLICATION_EVENT_TYPE
|
enum EAPPLICATION_EVENT_TYPE
|
||||||
{
|
{
|
||||||
//! The application will be resumed.
|
//! The application will be resumed.
|
||||||
EAET_WILL_RESUME = 0,
|
EAET_WILL_RESUME = 0,
|
||||||
|
|
||||||
|
@ -221,16 +222,16 @@ enum EAPPLICATION_EVENT_TYPE
|
||||||
|
|
||||||
//! No real event, but to get number of event types.
|
//! No real event, but to get number of event types.
|
||||||
EAET_COUNT
|
EAET_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
class IGUIElement;
|
class IGUIElement;
|
||||||
|
|
||||||
//! Enumeration for all events which are sendable by the gui system
|
//! Enumeration for all events which are sendable by the gui system
|
||||||
enum EGUI_EVENT_TYPE
|
enum EGUI_EVENT_TYPE
|
||||||
{
|
{
|
||||||
//! A gui element has lost its focus.
|
//! A gui element has lost its focus.
|
||||||
/** GUIEvent.Caller is losing the focus to GUIEvent.Element.
|
/** GUIEvent.Caller is losing the focus to GUIEvent.Element.
|
||||||
If the event is absorbed then the focus will not be changed. */
|
If the event is absorbed then the focus will not be changed. */
|
||||||
|
@ -305,8 +306,9 @@ enum EGUI_EVENT_TYPE
|
||||||
|
|
||||||
//! No real event. Just for convenience to get number of events
|
//! No real event. Just for convenience to get number of events
|
||||||
EGET_COUNT
|
EGET_COUNT
|
||||||
};
|
};
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
|
||||||
|
|
||||||
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
|
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
|
||||||
struct SEvent
|
struct SEvent
|
||||||
|
@ -315,13 +317,14 @@ struct SEvent
|
||||||
struct SGUIEvent
|
struct SGUIEvent
|
||||||
{
|
{
|
||||||
//! IGUIElement who called the event
|
//! IGUIElement who called the event
|
||||||
gui::IGUIElement *Caller;
|
gui::IGUIElement* Caller;
|
||||||
|
|
||||||
//! If the event has something to do with another element, it will be held here.
|
//! If the event has something to do with another element, it will be held here.
|
||||||
gui::IGUIElement *Element;
|
gui::IGUIElement* Element;
|
||||||
|
|
||||||
//! 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.
|
||||||
|
@ -338,10 +341,10 @@ struct SEvent
|
||||||
f32 Wheel;
|
f32 Wheel;
|
||||||
|
|
||||||
//! True if shift was also pressed
|
//! True if shift was also pressed
|
||||||
bool Shift : 1;
|
bool Shift:1;
|
||||||
|
|
||||||
//! True if ctrl was also pressed
|
//! True if ctrl was also pressed
|
||||||
bool Control : 1;
|
bool Control:1;
|
||||||
|
|
||||||
//! A bitmap of button states. You can use isButtonPressed() to determine
|
//! A bitmap of button states. You can use isButtonPressed() to determine
|
||||||
//! if a button is pressed or not.
|
//! if a button is pressed or not.
|
||||||
|
@ -349,13 +352,13 @@ struct SEvent
|
||||||
u32 ButtonStates;
|
u32 ButtonStates;
|
||||||
|
|
||||||
//! Is the left button pressed down?
|
//! Is the left button pressed down?
|
||||||
bool isLeftPressed() const { return 0 != (ButtonStates & EMBSM_LEFT); }
|
bool isLeftPressed() const { return 0 != ( ButtonStates & EMBSM_LEFT ); }
|
||||||
|
|
||||||
//! Is the right button pressed down?
|
//! Is the right button pressed down?
|
||||||
bool isRightPressed() const { return 0 != (ButtonStates & EMBSM_RIGHT); }
|
bool isRightPressed() const { return 0 != ( ButtonStates & EMBSM_RIGHT ); }
|
||||||
|
|
||||||
//! Is the middle button pressed down?
|
//! Is the middle button pressed down?
|
||||||
bool isMiddlePressed() const { return 0 != (ButtonStates & EMBSM_MIDDLE); }
|
bool isMiddlePressed() const { return 0 != ( ButtonStates & EMBSM_MIDDLE ); }
|
||||||
|
|
||||||
//! Type of mouse event
|
//! Type of mouse event
|
||||||
EMOUSE_INPUT_EVENT Event;
|
EMOUSE_INPUT_EVENT Event;
|
||||||
|
@ -375,13 +378,13 @@ struct SEvent
|
||||||
u32 SystemKeyCode;
|
u32 SystemKeyCode;
|
||||||
|
|
||||||
//! If not true, then the key was left up
|
//! If not true, then the key was left up
|
||||||
bool PressedDown : 1;
|
bool PressedDown:1;
|
||||||
|
|
||||||
//! True if shift was also pressed
|
//! True if shift was also pressed
|
||||||
bool Shift : 1;
|
bool Shift:1;
|
||||||
|
|
||||||
//! True if ctrl was also pressed
|
//! True if ctrl was also pressed
|
||||||
bool Control : 1;
|
bool Control:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! String input event.
|
//! String input event.
|
||||||
|
@ -469,7 +472,7 @@ struct SEvent
|
||||||
AXIS_R, // e.g. rudder, or analog 2 stick 2 top to bottom
|
AXIS_R, // e.g. rudder, or analog 2 stick 2 top to bottom
|
||||||
AXIS_U,
|
AXIS_U,
|
||||||
AXIS_V,
|
AXIS_V,
|
||||||
NUMBER_OF_AXES = 18 // (please tell Irrlicht maintainers if you absolutely need more axes)
|
NUMBER_OF_AXES=18 // (please tell Irrlicht maintainers if you absolutely need more axes)
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A bitmap of button states. You can use IsButtonPressed() to
|
/** A bitmap of button states. You can use IsButtonPressed() to
|
||||||
|
@ -501,7 +504,7 @@ struct SEvent
|
||||||
//! A helper function to check if a button is pressed.
|
//! A helper function to check if a button is pressed.
|
||||||
bool IsButtonPressed(u32 button) const
|
bool IsButtonPressed(u32 button) const
|
||||||
{
|
{
|
||||||
if (button >= (u32)NUMBER_OF_BUTTONS)
|
if(button >= (u32)NUMBER_OF_BUTTONS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return (ButtonStates & (1 << button)) ? true : false;
|
return (ButtonStates & (1 << button)) ? true : false;
|
||||||
|
@ -512,7 +515,7 @@ struct SEvent
|
||||||
struct SLogEvent
|
struct SLogEvent
|
||||||
{
|
{
|
||||||
//! Pointer to text which has been logged
|
//! Pointer to text which has been logged
|
||||||
const c8 *Text;
|
const c8* Text;
|
||||||
|
|
||||||
//! Log level in which the text has been logged
|
//! Log level in which the text has been logged
|
||||||
ELOG_LEVEL Level;
|
ELOG_LEVEL Level;
|
||||||
|
@ -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() {}
|
||||||
|
|
||||||
|
@ -590,9 +595,10 @@ public:
|
||||||
* Therefore your return value for all unprocessed events should be 'false'.
|
* Therefore your return value for all unprocessed events should be 'false'.
|
||||||
\return True if the event was processed.
|
\return True if the event was processed.
|
||||||
*/
|
*/
|
||||||
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"
|
||||||
|
@ -24,45 +25,61 @@ enum EFileSystemType
|
||||||
enum E_FILE_ARCHIVE_TYPE
|
enum E_FILE_ARCHIVE_TYPE
|
||||||
{
|
{
|
||||||
//! A PKZIP archive
|
//! A PKZIP archive
|
||||||
EFAT_ZIP = MAKE_IRR_ID('Z', 'I', 'P', 0),
|
EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0),
|
||||||
|
|
||||||
//! 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'),
|
||||||
|
|
||||||
//! The type of this archive is unknown
|
//! The type of this archive is unknown
|
||||||
EFAT_UNKNOWN = MAKE_IRR_ID('u', 'n', 'k', 'n')
|
EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||||
};
|
};
|
||||||
|
|
||||||
//! The FileArchive manages archives and provides access to files inside them.
|
//! The FileArchive manages archives and provides access to files inside them.
|
||||||
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
|
||||||
\return Returns A pointer to the created file on success,
|
\return Returns A pointer to the created file on success,
|
||||||
or 0 on failure. */
|
or 0 on failure. */
|
||||||
virtual IReadFile *createAndOpenFile(const path &filename) = 0;
|
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||||
|
|
||||||
//! Opens a file based on its position in the file list.
|
//! Opens a file based on its position in the file list.
|
||||||
/** Creates and returns
|
/** Creates and returns
|
||||||
\param index The zero based index of the file.
|
\param index The zero based index of the file.
|
||||||
\return Returns a pointer to the created file on success, or 0 on failure. */
|
\return Returns a pointer to the created file on success, or 0 on failure. */
|
||||||
virtual IReadFile *createAndOpenFile(u32 index) = 0;
|
virtual IReadFile* createAndOpenFile(u32 index) =0;
|
||||||
|
|
||||||
//! Returns the complete file tree
|
//! Returns the complete file tree
|
||||||
/** \return Returns the complete directory tree for the archive,
|
/** \return Returns the complete directory tree for the archive,
|
||||||
including all files and folders */
|
including all files and folders */
|
||||||
virtual const IFileList *getFileList() const = 0;
|
virtual const IFileList* getFileList() const =0;
|
||||||
|
|
||||||
//! get the archive type
|
//! get the archive type
|
||||||
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
||||||
|
|
||||||
//! return the name (id) of the file Archive
|
//! return the name (id) of the file Archive
|
||||||
virtual const io::path &getArchiveName() const = 0;
|
virtual const io::path& getArchiveName() const =0;
|
||||||
|
|
||||||
//! Add a directory in the archive and all it's files to the FileList
|
//! Add a directory in the archive and all it's files to the FileList
|
||||||
/** Only needed for file-archives which have no information about their own
|
/** Only needed for file-archives which have no information about their own
|
||||||
|
@ -94,34 +111,38 @@ public:
|
||||||
/** Check based on the file extension (e.g. ".zip")
|
/** Check based on the file extension (e.g. ".zip")
|
||||||
\param filename Name of file to check.
|
\param filename Name of file to check.
|
||||||
\return True if file seems to be loadable. */
|
\return True if file seems to be loadable. */
|
||||||
virtual bool isALoadableFileFormat(const path &filename) const = 0;
|
virtual bool isALoadableFileFormat(const path& filename) const =0;
|
||||||
|
|
||||||
//! Check if the file might be loaded by this class
|
//! Check if the file might be loaded by this class
|
||||||
/** This check may look into the file.
|
/** This check may look into the file.
|
||||||
\param file File handle to check.
|
\param file File handle to check.
|
||||||
\return True if file seems to be loadable. */
|
\return True if file seems to be loadable. */
|
||||||
virtual bool isALoadableFileFormat(io::IReadFile *file) const = 0;
|
virtual bool isALoadableFileFormat(io::IReadFile* file) const =0;
|
||||||
|
|
||||||
//! Check to see if the loader can create archives of this type.
|
//! Check to see if the loader can create archives of this type.
|
||||||
/** Check based on the archive type.
|
/** Check based on the archive type.
|
||||||
\param fileType The archive type to check.
|
\param fileType The archive type to check.
|
||||||
\return True if the archive loader supports this type, false if not */
|
\return True if the archive loader supports this type, false if not */
|
||||||
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const = 0;
|
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0;
|
||||||
|
|
||||||
//! Creates an archive from the filename
|
//! Creates an archive from the filename
|
||||||
/** \param filename File to use.
|
/** \param filename File to use.
|
||||||
\param ignoreCase Searching is performed without regarding the case
|
\param ignoreCase Searching is performed without regarding the case
|
||||||
\param ignorePaths Files are searched for without checking for the directories
|
\param ignorePaths Files are searched for without checking for the directories
|
||||||
\return Pointer to newly created archive, or 0 upon error. */
|
\return Pointer to newly created archive, or 0 upon error. */
|
||||||
virtual IFileArchive *createArchive(const path &filename, bool ignoreCase, bool ignorePaths) const = 0;
|
virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0;
|
||||||
|
|
||||||
//! Creates an archive from the file
|
//! Creates an archive from the file
|
||||||
/** \param file File handle to use.
|
/** \param file File handle to use.
|
||||||
\param ignoreCase Searching is performed without regarding the case
|
\param ignoreCase Searching is performed without regarding the case
|
||||||
\param ignorePaths Files are searched for without checking for the directories
|
\param ignorePaths Files are searched for without checking for the directories
|
||||||
\return Pointer to newly created archive, or 0 upon error. */
|
\return Pointer to newly created archive, or 0 upon error. */
|
||||||
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"
|
||||||
|
@ -27,13 +28,13 @@ public:
|
||||||
\param index is the zero based index of the file which name should
|
\param index is the zero based index of the file which name should
|
||||||
be returned. The index must be less than the amount getFileCount() returns.
|
be returned. The index must be less than the amount getFileCount() returns.
|
||||||
\return File name of the file. Returns 0, if an error occurred. */
|
\return File name of the file. Returns 0, if an error occurred. */
|
||||||
virtual const io::path &getFileName(u32 index) const = 0;
|
virtual const io::path& getFileName(u32 index) const = 0;
|
||||||
|
|
||||||
//! Gets the full name of a file in the list including the path, based on an index.
|
//! Gets the full name of a file in the list including the path, based on an index.
|
||||||
/** \param index is the zero based index of the file which name should
|
/** \param index is the zero based index of the file which name should
|
||||||
be returned. The index must be less than the amount getFileCount() returns.
|
be returned. The index must be less than the amount getFileCount() returns.
|
||||||
\return File name of the file. Returns 0 if an error occurred. */
|
\return File name of the file. Returns 0 if an error occurred. */
|
||||||
virtual const io::path &getFullFileName(u32 index) const = 0;
|
virtual const io::path& getFullFileName(u32 index) const = 0;
|
||||||
|
|
||||||
//! Returns the size of a file in the file list, based on an index.
|
//! Returns the size of a file in the file list, based on an index.
|
||||||
/** \param index is the zero based index of the file which should be returned.
|
/** \param index is the zero based index of the file which should be returned.
|
||||||
|
@ -68,10 +69,10 @@ public:
|
||||||
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
||||||
\return Returns the index of the file in the file list, or -1 if
|
\return Returns the index of the file in the file list, or -1 if
|
||||||
no matching name name was found. */
|
no matching name name was found. */
|
||||||
virtual s32 findFile(const io::path &filename, bool isFolder = false) const = 0;
|
virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0;
|
||||||
|
|
||||||
//! Returns the base path of the file list
|
//! Returns the base path of the file list
|
||||||
virtual const io::path &getPath() const = 0;
|
virtual const io::path& getPath() const = 0;
|
||||||
|
|
||||||
//! Add as a file or folder to the list
|
//! Add as a file or folder to the list
|
||||||
/** \param fullPath The file name including path, from the root of the file list.
|
/** \param fullPath The file name including path, from the root of the file list.
|
||||||
|
@ -79,7 +80,7 @@ public:
|
||||||
\param offset The file offset inside an archive
|
\param offset The file offset inside an archive
|
||||||
\param size The size of the file in bytes.
|
\param size The size of the file in bytes.
|
||||||
\param id The ID of the file in the archive which owns it */
|
\param id The ID of the file in the archive which owns it */
|
||||||
virtual u32 addItem(const io::path &fullPath, u32 offset, u32 size, bool isDirectory, u32 id = 0) = 0;
|
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0;
|
||||||
|
|
||||||
//! Sorts the file list. You should call this after adding any items to the file list
|
//! Sorts the file list. You should call this after adding any items to the file list
|
||||||
virtual void sort() = 0;
|
virtual void sort() = 0;
|
||||||
|
@ -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"
|
||||||
|
@ -11,7 +12,7 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class IVideoDriver;
|
class IVideoDriver;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
@ -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,12 +30,13 @@ 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.
|
||||||
The returned pointer should be dropped when no longer needed.
|
The returned pointer should be dropped when no longer needed.
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IReadFile *createAndOpenFile(const path &filename) = 0;
|
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||||
|
|
||||||
//! Creates an IReadFile interface for accessing memory like a file.
|
//! Creates an IReadFile interface for accessing memory like a file.
|
||||||
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
||||||
|
@ -46,7 +49,7 @@ public:
|
||||||
The returned pointer should be dropped when no longer needed.
|
The returned pointer should be dropped when no longer needed.
|
||||||
See IReferenceCounted::drop() for more information.
|
See IReferenceCounted::drop() for more information.
|
||||||
*/
|
*/
|
||||||
virtual IReadFile *createMemoryReadFile(const void *memory, s32 len, const path &fileName, bool deleteMemoryWhenDropped = false) = 0;
|
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||||
|
|
||||||
//! Creates an IReadFile interface for accessing files inside files.
|
//! Creates an IReadFile interface for accessing files inside files.
|
||||||
/** This is useful e.g. for archives.
|
/** This is useful e.g. for archives.
|
||||||
|
@ -58,8 +61,8 @@ public:
|
||||||
The returned pointer should be dropped when no longer needed.
|
The returned pointer should be dropped when no longer needed.
|
||||||
See IReferenceCounted::drop() for more information.
|
See IReferenceCounted::drop() for more information.
|
||||||
*/
|
*/
|
||||||
virtual IReadFile *createLimitReadFile(const path &fileName,
|
virtual IReadFile* createLimitReadFile(const path& fileName,
|
||||||
IReadFile *alreadyOpenedFile, long pos, long areaSize) = 0;
|
IReadFile* alreadyOpenedFile, long pos, long areaSize) =0;
|
||||||
|
|
||||||
//! Creates an IWriteFile interface for accessing memory like a file.
|
//! Creates an IWriteFile interface for accessing memory like a file.
|
||||||
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
||||||
|
@ -73,7 +76,8 @@ public:
|
||||||
The returned pointer should be dropped when no longer needed.
|
The returned pointer should be dropped when no longer needed.
|
||||||
See IReferenceCounted::drop() for more information.
|
See IReferenceCounted::drop() for more information.
|
||||||
*/
|
*/
|
||||||
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.
|
||||||
|
@ -83,7 +87,7 @@ public:
|
||||||
file could not created or opened for writing.
|
file could not created or opened for writing.
|
||||||
The returned pointer should be dropped when no longer needed.
|
The returned pointer should be dropped when no longer needed.
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IWriteFile *createAndWriteFile(const path &filename, bool append = false) = 0;
|
virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
/** After calling this, the Irrlicht Engine will also search and open
|
/** After calling this, the Irrlicht Engine will also search and open
|
||||||
|
@ -107,11 +111,11 @@ public:
|
||||||
\param password An optional password, which is used in case of encrypted archives.
|
\param password An optional password, which is used in case of encrypted archives.
|
||||||
\param retArchive A pointer that will be set to the archive that is added.
|
\param retArchive A pointer that will be set to the archive that is added.
|
||||||
\return True if the archive was added successfully, false if not. */
|
\return True if the archive was added successfully, false if not. */
|
||||||
virtual bool addFileArchive(const path &filename, bool ignoreCase = true,
|
virtual bool addFileArchive(const path& filename, bool ignoreCase=true,
|
||||||
bool ignorePaths = true,
|
bool ignorePaths=true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN,
|
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||||
const core::stringc &password = "",
|
const core::stringc& password="",
|
||||||
IFileArchive **retArchive = 0) = 0;
|
IFileArchive** retArchive=0) =0;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
/** After calling this, the Irrlicht Engine will also search and open
|
/** After calling this, the Irrlicht Engine will also search and open
|
||||||
|
@ -139,19 +143,19 @@ public:
|
||||||
\param password An optional password, which is used in case of encrypted archives.
|
\param password An optional password, which is used in case of encrypted archives.
|
||||||
\param retArchive A pointer that will be set to the archive that is added.
|
\param retArchive A pointer that will be set to the archive that is added.
|
||||||
\return True if the archive was added successfully, false if not. */
|
\return True if the archive was added successfully, false if not. */
|
||||||
virtual bool addFileArchive(IReadFile *file, bool ignoreCase = true,
|
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
||||||
bool ignorePaths = true,
|
bool ignorePaths=true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN,
|
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||||
const core::stringc &password = "",
|
const core::stringc& password="",
|
||||||
IFileArchive **retArchive = 0) = 0;
|
IFileArchive** retArchive=0) =0;
|
||||||
|
|
||||||
//! Adds an archive to the file system.
|
//! Adds an archive to the file system.
|
||||||
/** \param archive: The archive to add to the file system.
|
/** \param archive: The archive to add to the file system.
|
||||||
\return True if the archive was added successfully, false if not. */
|
\return True if the archive was added successfully, false if not. */
|
||||||
virtual bool addFileArchive(IFileArchive *archive) = 0;
|
virtual bool addFileArchive(IFileArchive* archive) =0;
|
||||||
|
|
||||||
//! Get the number of archives currently attached to the file system
|
//! Get the number of archives currently attached to the file system
|
||||||
virtual u32 getFileArchiveCount() const = 0;
|
virtual u32 getFileArchiveCount() const =0;
|
||||||
|
|
||||||
//! Removes an archive from the file system.
|
//! Removes an archive from the file system.
|
||||||
/** This will close the archive and free any file handles, but will not
|
/** This will close the archive and free any file handles, but will not
|
||||||
|
@ -159,7 +163,7 @@ public:
|
||||||
example textures and meshes.
|
example textures and meshes.
|
||||||
\param index: The index of the archive to remove
|
\param index: The index of the archive to remove
|
||||||
\return True on success, false on failure */
|
\return True on success, false on failure */
|
||||||
virtual bool removeFileArchive(u32 index) = 0;
|
virtual bool removeFileArchive(u32 index) =0;
|
||||||
|
|
||||||
//! Removes an archive from the file system.
|
//! Removes an archive from the file system.
|
||||||
/** This will close the archive and free any file handles, but will not
|
/** This will close the archive and free any file handles, but will not
|
||||||
|
@ -173,7 +177,7 @@ public:
|
||||||
locating the archive to work with.
|
locating the archive to work with.
|
||||||
\param filename The archive pointed to by the name will be removed
|
\param filename The archive pointed to by the name will be removed
|
||||||
\return True on success, false on failure */
|
\return True on success, false on failure */
|
||||||
virtual bool removeFileArchive(const path &filename) = 0;
|
virtual bool removeFileArchive(const path& filename) =0;
|
||||||
|
|
||||||
//! Removes an archive from the file system.
|
//! Removes an archive from the file system.
|
||||||
/** This will close the archive and free any file handles, but will not
|
/** This will close the archive and free any file handles, but will not
|
||||||
|
@ -181,21 +185,21 @@ public:
|
||||||
example textures and meshes.
|
example textures and meshes.
|
||||||
\param archive The archive to remove.
|
\param archive The archive to remove.
|
||||||
\return True on success, false on failure */
|
\return True on success, false on failure */
|
||||||
virtual bool removeFileArchive(const IFileArchive *archive) = 0;
|
virtual bool removeFileArchive(const IFileArchive* archive) =0;
|
||||||
|
|
||||||
//! Changes the search order of attached archives.
|
//! Changes the search order of attached archives.
|
||||||
/**
|
/**
|
||||||
\param sourceIndex: The index of the archive to change
|
\param sourceIndex: The index of the archive to change
|
||||||
\param relative: The relative change in position, archives with a lower index are searched first */
|
\param relative: The relative change in position, archives with a lower index are searched first */
|
||||||
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) = 0;
|
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0;
|
||||||
|
|
||||||
//! Get the archive at a given index.
|
//! Get the archive at a given index.
|
||||||
virtual IFileArchive *getFileArchive(u32 index) = 0;
|
virtual IFileArchive* getFileArchive(u32 index) =0;
|
||||||
|
|
||||||
//! Adds an external archive loader to the engine.
|
//! Adds an external archive loader to the engine.
|
||||||
/** Use this function to add support for new archive types to the
|
/** Use this function to add support for new archive types to the
|
||||||
engine, for example proprietary or encrypted file storage. */
|
engine, for example proprietary or encrypted file storage. */
|
||||||
virtual void addArchiveLoader(IArchiveLoader *loader) = 0;
|
virtual void addArchiveLoader(IArchiveLoader* loader) =0;
|
||||||
|
|
||||||
//! Gets the number of archive loaders currently added
|
//! Gets the number of archive loaders currently added
|
||||||
virtual u32 getArchiveLoaderCount() const = 0;
|
virtual u32 getArchiveLoaderCount() const = 0;
|
||||||
|
@ -204,62 +208,66 @@ public:
|
||||||
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
||||||
array index.
|
array index.
|
||||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||||
virtual IArchiveLoader *getArchiveLoader(u32 index) const = 0;
|
virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0;
|
||||||
|
|
||||||
//! Get the current working directory.
|
//! Get the current working directory.
|
||||||
/** \return Current working directory as a string. */
|
/** \return Current working directory as a string. */
|
||||||
virtual const path &getWorkingDirectory() = 0;
|
virtual const path& getWorkingDirectory() =0;
|
||||||
|
|
||||||
//! Changes the current working directory.
|
//! Changes the current working directory.
|
||||||
/** \param newDirectory: A string specifying the new working directory.
|
/** \param newDirectory: A string specifying the new working directory.
|
||||||
The string is operating system dependent. Under Windows it has
|
The string is operating system dependent. Under Windows it has
|
||||||
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
||||||
\return True if successful, otherwise false. */
|
\return True if successful, otherwise false. */
|
||||||
virtual bool changeWorkingDirectoryTo(const path &newDirectory) = 0;
|
virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0;
|
||||||
|
|
||||||
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
||||||
/** \param filename Possibly relative file or directory name to query.
|
/** \param filename Possibly relative file or directory name to query.
|
||||||
\result Absolute filename which points to the same file. */
|
\result Absolute filename which points to the same file. */
|
||||||
virtual path getAbsolutePath(const path &filename) const = 0;
|
virtual path getAbsolutePath(const path& filename) const =0;
|
||||||
|
|
||||||
//! Get the directory a file is located in.
|
//! Get the directory a file is located in.
|
||||||
/** \param filename: The file to get the directory from.
|
/** \param filename: The file to get the directory from.
|
||||||
\return String containing the directory of the file. */
|
\return String containing the directory of the file. */
|
||||||
virtual path getFileDir(const path &filename) const = 0;
|
virtual path getFileDir(const path& filename) const =0;
|
||||||
|
|
||||||
//! Get the base part of a filename, i.e. the name without the directory part.
|
//! Get the base part of a filename, i.e. the name without the directory part.
|
||||||
/** If no directory is prefixed, the full name is returned.
|
/** If no directory is prefixed, the full name is returned.
|
||||||
\param filename: The file to get the basename from
|
\param filename: The file to get the basename from
|
||||||
\param keepExtension True if filename with extension is returned otherwise everything
|
\param keepExtension True if filename with extension is returned otherwise everything
|
||||||
after the final '.' is removed as well. */
|
after the final '.' is removed as well. */
|
||||||
virtual path getFileBasename(const path &filename, bool keepExtension = true) const = 0;
|
virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0;
|
||||||
|
|
||||||
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
||||||
virtual path &flattenFilename(path &directory, const path &root = "/") const = 0;
|
virtual path& flattenFilename(path& directory, const path& root="/") const =0;
|
||||||
|
|
||||||
//! Get the relative filename, relative to the given directory
|
//! Get the relative filename, relative to the given directory
|
||||||
virtual path getRelativeFilename(const path &filename, const path &directory) const = 0;
|
virtual path getRelativeFilename(const path& filename, const path& directory) const =0;
|
||||||
|
|
||||||
//! Creates a list of files and directories in the current working directory and returns it.
|
//! Creates a list of files and directories in the current working directory and returns it.
|
||||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||||
it has to be deleted using its IFileList::drop() method.
|
it has to be deleted using its IFileList::drop() method.
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IFileList *createFileList() = 0;
|
virtual IFileList* createFileList() =0;
|
||||||
|
|
||||||
//! Creates an empty filelist
|
//! Creates an empty filelist
|
||||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||||
it has to be deleted using its IFileList::drop() method.
|
it has to be deleted using its IFileList::drop() method.
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IFileList *createEmptyFileList(const io::path &path, bool ignoreCase, bool ignorePaths) = 0;
|
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0;
|
||||||
|
|
||||||
//! Set the active type of file system.
|
//! Set the active type of file system.
|
||||||
virtual EFileSystemType setFileListSystem(EFileSystemType listType) = 0;
|
virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0;
|
||||||
|
|
||||||
//! Determines if a file exists and could be opened.
|
//! Determines if a file exists and could be opened.
|
||||||
/** \param filename is the string identifying the file which should be tested for existence.
|
/** \param filename is the string identifying the file which should be tested for existence.
|
||||||
\return True if file exists, and false if it does not exist or an error occurred. */
|
\return True if file exists, and false if it does not exist or an error occurred. */
|
||||||
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"
|
||||||
|
@ -14,7 +15,7 @@ namespace irr
|
||||||
|
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
namespace video
|
namespace video
|
||||||
|
@ -27,6 +28,7 @@ class IShaderConstantSetCallBack;
|
||||||
class IGPUProgrammingServices
|
class IGPUProgrammingServices
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IGPUProgrammingServices() {}
|
virtual ~IGPUProgrammingServices() {}
|
||||||
|
|
||||||
|
@ -72,33 +74,33 @@ public:
|
||||||
target is not reachable. The error strings are then printed to the
|
target is not reachable. The error strings are then printed to the
|
||||||
error log and can be caught with a custom event receiver. */
|
error log and can be caught with a custom event receiver. */
|
||||||
virtual s32 addHighLevelShaderMaterial(
|
virtual s32 addHighLevelShaderMaterial(
|
||||||
const c8 *vertexShaderProgram,
|
const c8* vertexShaderProgram,
|
||||||
const c8 *vertexShaderEntryPointName,
|
const c8* vertexShaderEntryPointName,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
const c8 *pixelShaderProgram,
|
const c8* pixelShaderProgram,
|
||||||
const c8 *pixelShaderEntryPointName,
|
const c8* pixelShaderEntryPointName,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
const c8 *geometryShaderProgram,
|
const c8* geometryShaderProgram,
|
||||||
const c8 *geometryShaderEntryPointName = "main",
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
u32 verticesOut = 0,
|
u32 verticesOut = 0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0) = 0;
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
//! convenience function for use without geometry shaders
|
//! convenience function for use without geometry shaders
|
||||||
s32 addHighLevelShaderMaterial(
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8 *vertexShaderProgram,
|
const c8* vertexShaderProgram,
|
||||||
const c8 *vertexShaderEntryPointName = "main",
|
const c8* vertexShaderEntryPointName="main",
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
|
||||||
const c8 *pixelShaderProgram = 0,
|
const c8* pixelShaderProgram=0,
|
||||||
const c8 *pixelShaderEntryPointName = "main",
|
const c8* pixelShaderEntryPointName="main",
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback=0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData=0)
|
||||||
{
|
{
|
||||||
return addHighLevelShaderMaterial(
|
return addHighLevelShaderMaterial(
|
||||||
vertexShaderProgram, vertexShaderEntryPointName,
|
vertexShaderProgram, vertexShaderEntryPointName,
|
||||||
|
@ -114,11 +116,11 @@ public:
|
||||||
type 1.1.
|
type 1.1.
|
||||||
*/
|
*/
|
||||||
s32 addHighLevelShaderMaterial(
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8 *vertexShaderProgram,
|
const c8* vertexShaderProgram,
|
||||||
const c8 *pixelShaderProgram = 0,
|
const c8* pixelShaderProgram=0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback=0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData=0)
|
||||||
{
|
{
|
||||||
return addHighLevelShaderMaterial(
|
return addHighLevelShaderMaterial(
|
||||||
vertexShaderProgram, "main",
|
vertexShaderProgram, "main",
|
||||||
|
@ -134,15 +136,15 @@ public:
|
||||||
type 1.1 and geometry shader 4.0.
|
type 1.1 and geometry shader 4.0.
|
||||||
*/
|
*/
|
||||||
s32 addHighLevelShaderMaterial(
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8 *vertexShaderProgram,
|
const c8* vertexShaderProgram,
|
||||||
const c8 *pixelShaderProgram = 0,
|
const c8* pixelShaderProgram = 0,
|
||||||
const c8 *geometryShaderProgram = 0,
|
const c8* geometryShaderProgram = 0,
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
u32 verticesOut = 0,
|
u32 verticesOut = 0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData = 0 )
|
||||||
{
|
{
|
||||||
return addHighLevelShaderMaterial(
|
return addHighLevelShaderMaterial(
|
||||||
vertexShaderProgram, "main",
|
vertexShaderProgram, "main",
|
||||||
|
@ -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.
|
||||||
|
@ -196,31 +198,31 @@ public:
|
||||||
target is not reachable. The error strings are then printed to the
|
target is not reachable. The error strings are then printed to the
|
||||||
error log and can be caught with a custom event receiver. */
|
error log and can be caught with a custom event receiver. */
|
||||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path &vertexShaderProgramFileName,
|
const io::path& vertexShaderProgramFileName,
|
||||||
const c8 *vertexShaderEntryPointName,
|
const c8* vertexShaderEntryPointName,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
const io::path &pixelShaderProgramFileName,
|
const io::path& pixelShaderProgramFileName,
|
||||||
const c8 *pixelShaderEntryPointName,
|
const c8* pixelShaderEntryPointName,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
const io::path &geometryShaderProgramFileName,
|
const io::path& geometryShaderProgramFileName,
|
||||||
const c8 *geometryShaderEntryPointName = "main",
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
u32 verticesOut = 0,
|
u32 verticesOut = 0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0) = 0;
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
//! convenience function for use without geometry shaders
|
//! convenience function for use without geometry shaders
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path &vertexShaderProgramFileName,
|
const io::path& vertexShaderProgramFileName,
|
||||||
const c8 *vertexShaderEntryPointName = "main",
|
const c8* vertexShaderEntryPointName = "main",
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||||
const io::path &pixelShaderProgramFileName = "",
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
const c8 *pixelShaderEntryPointName = "main",
|
const c8* pixelShaderEntryPointName = "main",
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData = 0)
|
||||||
{
|
{
|
||||||
|
@ -238,11 +240,11 @@ public:
|
||||||
type 1.1.
|
type 1.1.
|
||||||
*/
|
*/
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path &vertexShaderProgramFileName,
|
const io::path& vertexShaderProgramFileName,
|
||||||
const io::path &pixelShaderProgramFileName = "",
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData = 0 )
|
||||||
{
|
{
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
vertexShaderProgramFileName, "main",
|
vertexShaderProgramFileName, "main",
|
||||||
|
@ -258,15 +260,15 @@ public:
|
||||||
type 1.1 and geometry shader 4.0.
|
type 1.1 and geometry shader 4.0.
|
||||||
*/
|
*/
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path &vertexShaderProgramFileName,
|
const io::path& vertexShaderProgramFileName,
|
||||||
const io::path &pixelShaderProgramFileName = "",
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
const io::path &geometryShaderProgramFileName = "",
|
const io::path& geometryShaderProgramFileName = "",
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
u32 verticesOut = 0,
|
u32 verticesOut = 0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData = 0 )
|
||||||
{
|
{
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
vertexShaderProgramFileName, "main",
|
vertexShaderProgramFileName, "main",
|
||||||
|
@ -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.
|
||||||
|
@ -318,31 +320,31 @@ public:
|
||||||
compile target is not reachable. The error strings are then printed to
|
compile target is not reachable. The error strings are then printed to
|
||||||
the error log and can be caught with a custom event receiver. */
|
the error log and can be caught with a custom event receiver. */
|
||||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||||
io::IReadFile *vertexShaderProgram,
|
io::IReadFile* vertexShaderProgram,
|
||||||
const c8 *vertexShaderEntryPointName,
|
const c8* vertexShaderEntryPointName,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
io::IReadFile *pixelShaderProgram,
|
io::IReadFile* pixelShaderProgram,
|
||||||
const c8 *pixelShaderEntryPointName,
|
const c8* pixelShaderEntryPointName,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
io::IReadFile *geometryShaderProgram,
|
io::IReadFile* geometryShaderProgram,
|
||||||
const c8 *geometryShaderEntryPointName = "main",
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
u32 verticesOut = 0,
|
u32 verticesOut = 0,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0) = 0;
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
//! convenience function for use without geometry shaders
|
//! convenience function for use without geometry shaders
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
io::IReadFile *vertexShaderProgram,
|
io::IReadFile* vertexShaderProgram,
|
||||||
const c8 *vertexShaderEntryPointName = "main",
|
const c8* vertexShaderEntryPointName = "main",
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||||
io::IReadFile *pixelShaderProgram = 0,
|
io::IReadFile* pixelShaderProgram = 0,
|
||||||
const c8 *pixelShaderEntryPointName = "main",
|
const c8* pixelShaderEntryPointName = "main",
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||||
IShaderConstantSetCallBack *callback = 0,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
s32 userData = 0)
|
s32 userData = 0)
|
||||||
{
|
{
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -11,23 +12,23 @@ namespace irr
|
||||||
|
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIFont;
|
class IGUIFont;
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
|
|
||||||
//! Current state of buttons used for drawing sprites.
|
//! Current state of buttons used for drawing sprites.
|
||||||
//! Note that up to 3 states can be active at the same time:
|
//! Note that up to 3 states can be active at the same time:
|
||||||
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
||||||
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
||||||
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
||||||
enum EGUI_BUTTON_STATE
|
enum EGUI_BUTTON_STATE
|
||||||
{
|
{
|
||||||
//! The button is not pressed.
|
//! The button is not pressed.
|
||||||
EGBS_BUTTON_UP = 0,
|
EGBS_BUTTON_UP=0,
|
||||||
//! The button is currently pressed down.
|
//! The button is currently pressed down.
|
||||||
EGBS_BUTTON_DOWN,
|
EGBS_BUTTON_DOWN,
|
||||||
//! The mouse cursor is over the button
|
//! The mouse cursor is over the button
|
||||||
|
@ -42,10 +43,11 @@ enum EGUI_BUTTON_STATE
|
||||||
EGBS_BUTTON_DISABLED,
|
EGBS_BUTTON_DISABLED,
|
||||||
//! not used, counts the number of enumerated items
|
//! not used, counts the number of enumerated items
|
||||||
EGBS_COUNT
|
EGBS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,16 +55,16 @@ 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.
|
||||||
//! Note that only a single state is active at a time
|
//! Note that only a single state is active at a time
|
||||||
//! Also when no image is defined for a state it will use images from another state
|
//! Also when no image is defined for a state it will use images from another state
|
||||||
//! and if that state is not set from the replacement for that,etc.
|
//! and if that state is not set from the replacement for that,etc.
|
||||||
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
||||||
enum EGUI_BUTTON_IMAGE_STATE
|
enum EGUI_BUTTON_IMAGE_STATE
|
||||||
{
|
{
|
||||||
//! When no other states have images they will all use this one.
|
//! When no other states have images they will all use this one.
|
||||||
EGBIS_IMAGE_UP,
|
EGBIS_IMAGE_UP,
|
||||||
//! When not set EGBIS_IMAGE_UP is used.
|
//! When not set EGBIS_IMAGE_UP is used.
|
||||||
|
@ -83,10 +85,11 @@ enum EGUI_BUTTON_IMAGE_STATE
|
||||||
EGBIS_IMAGE_DISABLED,
|
EGBIS_IMAGE_DISABLED,
|
||||||
//! not used, counts the number of enumerated items
|
//! not used, counts the number of enumerated items
|
||||||
EGBIS_COUNT
|
EGBIS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,33 +99,34 @@ const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
|
||||||
"ImageDownFocused",
|
"ImageDownFocused",
|
||||||
"ImageDownFocusedOver",
|
"ImageDownFocusedOver",
|
||||||
"ImageDisabled",
|
"ImageDisabled",
|
||||||
0, // count
|
0 // count
|
||||||
};
|
};
|
||||||
|
|
||||||
//! GUI Button interface.
|
//! GUI Button interface.
|
||||||
/** \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_BUTTON_CLICKED
|
\li EGET_BUTTON_CLICKED
|
||||||
*/
|
*/
|
||||||
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.
|
||||||
\param font: New font to set. */
|
\param font: New font to set. */
|
||||||
virtual void setOverrideFont(IGUIFont *font = 0) = 0;
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
//! Gets the override font (if any)
|
||||||
/** \return The override font (may be 0) */
|
/** \return The override font (may be 0) */
|
||||||
virtual IGUIFont *getOverrideFont(void) const = 0;
|
virtual IGUIFont* getOverrideFont(void) const = 0;
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
//! Get the font which is used right now for drawing
|
||||||
/** Currently this is the override font when one is set and the
|
/** Currently this is the override font when one is set and the
|
||||||
font of the active skin otherwise */
|
font of the active skin otherwise */
|
||||||
virtual IGUIFont *getActiveFont() const = 0;
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
|
|
||||||
//! Sets another color for the button text.
|
//! Sets another color for the button text.
|
||||||
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
||||||
|
@ -157,37 +161,38 @@ public:
|
||||||
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
||||||
\param image: Image to be displayed or NULL to remove the image
|
\param image: Image to be displayed or NULL to remove the image
|
||||||
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
||||||
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture *image = 0, const core::rect<s32> &sourceRect = core::rect<s32>(0, 0, 0, 0)) = 0;
|
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) = 0;
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
||||||
\param image: Image to be displayed */
|
\param image: Image to be displayed */
|
||||||
virtual void setImage(video::ITexture *image = 0) = 0;
|
virtual void setImage(video::ITexture* image=0) = 0;
|
||||||
|
|
||||||
//! Sets a background image for the button when it is in normal state.
|
//! Sets a background image for the button when it is in normal state.
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
||||||
\param image: Texture containing the image to be displayed
|
\param image: Texture containing the image to be displayed
|
||||||
\param sourceRect: Position in the texture, where the image is located.
|
\param sourceRect: Position in the texture, where the image is located.
|
||||||
When width or height are 0 then the full texture-size is used */
|
When width or height are 0 then the full texture-size is used */
|
||||||
virtual void setImage(video::ITexture *image, const core::rect<s32> &sourceRect) = 0;
|
virtual void setImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||||
|
|
||||||
//! Sets a background image for the button when it is in pressed state.
|
//! Sets a background image for the button when it is in pressed state.
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
||||||
If no images is specified for the pressed state via
|
If no images is specified for the pressed state via
|
||||||
setPressedImage(), this image is also drawn in pressed state.
|
setPressedImage(), this image is also drawn in pressed state.
|
||||||
\param image: Image to be displayed */
|
\param image: Image to be displayed */
|
||||||
virtual void setPressedImage(video::ITexture *image = 0) = 0;
|
virtual void setPressedImage(video::ITexture* image=0) = 0;
|
||||||
|
|
||||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
||||||
\param image: Texture containing the image to be displayed
|
\param image: Texture containing the image to be displayed
|
||||||
\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. */
|
||||||
virtual void setSpriteBank(IGUISpriteBank *bank = 0) = 0;
|
virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0;
|
||||||
|
|
||||||
//! Sets the animated sprite for a specific button state
|
//! Sets the animated sprite for a specific button state
|
||||||
/** Several sprites can be drawn at the same time.
|
/** Several sprites can be drawn at the same time.
|
||||||
|
@ -200,7 +205,7 @@ public:
|
||||||
\param loop: True if the animation should loop, false if not
|
\param loop: True if the animation should loop, false if not
|
||||||
\param scale: True if the sprite should scale to button size, false if not */
|
\param scale: True if the sprite should scale to button size, false if not */
|
||||||
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
||||||
video::SColor color = video::SColor(255, 255, 255, 255), bool loop = false, bool scale = false) = 0;
|
video::SColor color=video::SColor(255,255,255,255), bool loop=false, bool scale=false) = 0;
|
||||||
|
|
||||||
//! Get the sprite-index for the given state or -1 when no sprite is set
|
//! Get the sprite-index for the given state or -1 when no sprite is set
|
||||||
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
||||||
|
@ -217,16 +222,16 @@ public:
|
||||||
//! Sets if the button should behave like a push button.
|
//! Sets if the button should behave like a push button.
|
||||||
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
||||||
the user can change the state of the button. */
|
the user can change the state of the button. */
|
||||||
virtual void setIsPushButton(bool isPushButton = true) = 0;
|
virtual void setIsPushButton(bool isPushButton=true) = 0;
|
||||||
|
|
||||||
//! Sets the pressed state of the button if this is a pushbutton
|
//! Sets the pressed state of the button if this is a pushbutton
|
||||||
virtual void setPressed(bool pressed = true) = 0;
|
virtual void setPressed(bool pressed=true) = 0;
|
||||||
|
|
||||||
//! Returns if the button is currently pressed
|
//! Returns if the button is currently pressed
|
||||||
virtual bool isPressed() const = 0;
|
virtual bool isPressed() const = 0;
|
||||||
|
|
||||||
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
||||||
virtual void setUseAlphaChannel(bool useAlphaChannel = true) = 0;
|
virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0;
|
||||||
|
|
||||||
//! Returns if the alpha channel should be used for drawing background images on the button
|
//! Returns if the alpha channel should be used for drawing background images on the button
|
||||||
virtual bool isAlphaChannelUsed() const = 0;
|
virtual bool isAlphaChannelUsed() const = 0;
|
||||||
|
@ -235,13 +240,13 @@ public:
|
||||||
virtual bool isPushButton() const = 0;
|
virtual bool isPushButton() const = 0;
|
||||||
|
|
||||||
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
||||||
virtual void setDrawBorder(bool border = true) = 0;
|
virtual void setDrawBorder(bool border=true) = 0;
|
||||||
|
|
||||||
//! Returns if the border and button face are being drawn using the skin
|
//! Returns if the border and button face are being drawn using the skin
|
||||||
virtual bool isDrawingBorder() const = 0;
|
virtual bool isDrawingBorder() const = 0;
|
||||||
|
|
||||||
//! Sets if the button should scale the button images to fit
|
//! Sets if the button should scale the button images to fit
|
||||||
virtual void setScaleImage(bool scaleImage = true) = 0;
|
virtual void setScaleImage(bool scaleImage=true) = 0;
|
||||||
|
|
||||||
//! Checks whether the button scales the used images
|
//! Checks whether the button scales the used images
|
||||||
virtual bool isScalingImage() const = 0;
|
virtual bool isScalingImage() const = 0;
|
||||||
|
@ -253,7 +258,11 @@ public:
|
||||||
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
||||||
/** Generated together with event, so info is available in the event-receiver. */
|
/** Generated together with event, so info is available in the event-receiver. */
|
||||||
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"
|
||||||
|
|
||||||
|
@ -11,16 +12,17 @@ namespace irr
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
//! GUI Check box interface.
|
//! GUI Check box interface.
|
||||||
/** \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_CHECKBOX_CHANGED
|
\li EGET_CHECKBOX_CHANGED
|
||||||
*/
|
*/
|
||||||
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"
|
||||||
|
|
||||||
|
@ -11,31 +12,32 @@ namespace irr
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Combobox widget
|
//! Combobox widget
|
||||||
/** \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_COMBO_BOX_CHANGED
|
\li EGET_COMBO_BOX_CHANGED
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
||||||
virtual const wchar_t *getItem(u32 idx) const = 0;
|
virtual const wchar_t* getItem(u32 idx) const = 0;
|
||||||
|
|
||||||
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
||||||
virtual u32 getItemData(u32 idx) const = 0;
|
virtual u32 getItemData(u32 idx) const = 0;
|
||||||
|
|
||||||
//! Returns index based on item data
|
//! Returns index based on item data
|
||||||
virtual s32 getIndexForItemData(u32 data) const = 0;
|
virtual s32 getIndexForItemData(u32 data ) const = 0;
|
||||||
|
|
||||||
//! Adds an item and returns the index of it
|
//! Adds an item and returns the index of it
|
||||||
virtual u32 addItem(const wchar_t *text, u32 data = 0) = 0;
|
virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0;
|
||||||
|
|
||||||
//! Removes an item from the combo box.
|
//! Removes an item from the combo box.
|
||||||
/** Warning. This will change the index of all following items */
|
/** Warning. This will change the index of all following items */
|
||||||
|
@ -66,7 +68,11 @@ public:
|
||||||
|
|
||||||
//! Get the maximal number of rows for the selection listbox
|
//! Get the maximal number of rows for the selection listbox
|
||||||
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"
|
||||||
|
@ -11,34 +12,35 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIFont;
|
class IGUIFont;
|
||||||
|
|
||||||
|
//! Single line edit box for editing simple text.
|
||||||
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
|
\li EGET_EDITBOX_ENTER
|
||||||
|
\li EGET_EDITBOX_CHANGED
|
||||||
|
\li EGET_EDITBOX_MARKING_CHANGED
|
||||||
|
*/
|
||||||
|
class IGUIEditBox : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Single line edit box for editing simple text.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_EDITBOX_ENTER
|
|
||||||
\li EGET_EDITBOX_CHANGED
|
|
||||||
\li EGET_EDITBOX_MARKING_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUIEditBox : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
//! 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.
|
||||||
\param font: New font to set. */
|
\param font: New font to set. */
|
||||||
virtual void setOverrideFont(IGUIFont *font = 0) = 0;
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
//! Gets the override font (if any)
|
||||||
/** \return The override font (may be 0) */
|
/** \return The override font (may be 0) */
|
||||||
virtual IGUIFont *getOverrideFont() const = 0;
|
virtual IGUIFont* getOverrideFont() const = 0;
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
//! Get the font which is used right now for drawing
|
||||||
/** Currently this is the override font when one is set and the
|
/** Currently this is the override font when one is set and the
|
||||||
font of the active skin otherwise */
|
font of the active skin otherwise */
|
||||||
virtual IGUIFont *getActiveFont() const = 0;
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
|
|
||||||
//! Sets another color for the text.
|
//! Sets another color for the text.
|
||||||
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
||||||
|
@ -145,7 +147,11 @@ public:
|
||||||
|
|
||||||
//! Get the cursor blinktime
|
//! Get the cursor blinktime
|
||||||
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,28 +26,30 @@ 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),
|
||||||
AlignLeft(EGUIA_UPPERLEFT), AlignRight(EGUIA_UPPERLEFT), AlignTop(EGUIA_UPPERLEFT), AlignBottom(EGUIA_UPPERLEFT),
|
AlignLeft(EGUIA_UPPERLEFT), AlignRight(EGUIA_UPPERLEFT), AlignTop(EGUIA_UPPERLEFT), AlignBottom(EGUIA_UPPERLEFT),
|
||||||
Environment(environment), Type(type)
|
Environment(environment), Type(type)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("IGUIElement");
|
setDebugName("IGUIElement");
|
||||||
#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,8 +59,9 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns parent of this element.
|
//! Returns parent of this element.
|
||||||
IGUIElement *getParent() const
|
IGUIElement* getParent() const
|
||||||
{
|
{
|
||||||
return Parent;
|
return Parent;
|
||||||
}
|
}
|
||||||
|
@ -68,12 +72,14 @@ 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));
|
||||||
|
|
||||||
|
@ -93,7 +99,7 @@ public:
|
||||||
|
|
||||||
//! Sets the relative rectangle of this element, maintaining its current width and height
|
//! Sets the relative rectangle of this element, maintaining its current width and height
|
||||||
/** \param position The new relative position to set. Width and height will not be changed. */
|
/** \param position The new relative position to set. Width and height will not be changed. */
|
||||||
void setRelativePosition(const core::position2di &position)
|
void setRelativePosition(const core::position2di & position)
|
||||||
{
|
{
|
||||||
const core::dimension2di mySize = RelativeRect.getSize();
|
const core::dimension2di mySize = RelativeRect.getSize();
|
||||||
const core::rect<s32> rectangle(position.X, position.Y,
|
const core::rect<s32> rectangle(position.X, position.Y,
|
||||||
|
@ -101,17 +107,18 @@ 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.
|
||||||
Meaningful values are in the range [0...1], unless you intend this element to spill
|
Meaningful values are in the range [0...1], unless you intend this element to spill
|
||||||
outside its parent. */
|
outside its parent. */
|
||||||
void setRelativePositionProportional(const core::rect<f32> &r)
|
void setRelativePositionProportional(const core::rect<f32>& r)
|
||||||
{
|
{
|
||||||
if (!Parent)
|
if (!Parent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const core::dimension2di &d = Parent->getAbsolutePosition().getSize();
|
const core::dimension2di& d = Parent->getAbsolutePosition().getSize();
|
||||||
|
|
||||||
DesiredRect = core::rect<s32>(
|
DesiredRect = core::rect<s32>(
|
||||||
core::floor32((f32)d.Width * r.UpperLeftCorner.X),
|
core::floor32((f32)d.Width * r.UpperLeftCorner.X),
|
||||||
|
@ -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
|
||||||
|
@ -241,16 +258,18 @@ public:
|
||||||
\return The topmost GUI element at that point, or 0 if there are
|
\return The topmost GUI element at that point, or 0 if there are
|
||||||
no candidate elements at this point.
|
no candidate elements at this point.
|
||||||
*/
|
*/
|
||||||
virtual IGUIElement *getElementFromPoint(const core::position2d<s32> &point)
|
virtual IGUIElement* getElementFromPoint(const core::position2d<s32>& point)
|
||||||
{
|
{
|
||||||
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,24 +284,27 @@ 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
|
||||||
{
|
{
|
||||||
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Removes a child.
|
//! Removes a child.
|
||||||
virtual void removeChild(IGUIElement *child)
|
virtual void removeChild(IGUIElement* child)
|
||||||
{
|
{
|
||||||
assert(child->Parent == this);
|
assert(child->Parent == this);
|
||||||
Children.erase(child->ParentPos);
|
Children.erase(child->ParentPos);
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -341,10 +368,10 @@ public:
|
||||||
false if this or any parent element is invisible. */
|
false if this or any parent element is invisible. */
|
||||||
virtual bool isTrulyVisible() const
|
virtual bool isTrulyVisible() const
|
||||||
{
|
{
|
||||||
if (!IsVisible)
|
if(!IsVisible)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Parent)
|
if(!Parent)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Parent->isTrulyVisible();
|
return Parent->isTrulyVisible();
|
||||||
|
@ -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,16 +461,18 @@ 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()
|
||||||
{
|
{
|
||||||
IGUIElement *ret = this;
|
IGUIElement *ret=this;
|
||||||
|
|
||||||
while (ret && !ret->isTabGroup())
|
while (ret && !ret->isTabGroup())
|
||||||
ret = ret->getParent();
|
ret = ret->getParent();
|
||||||
|
@ -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.
|
||||||
|
@ -447,63 +488,72 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool isEnabled() const
|
virtual bool isEnabled() const
|
||||||
{
|
{
|
||||||
if (isSubElement() && IsEnabled && getParent())
|
if ( isSubElement() && IsEnabled && getParent() )
|
||||||
return getParent()->isEnabled();
|
return getParent()->isEnabled();
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
if (child->Parent != this)
|
if (child->Parent != this)
|
||||||
return false;
|
return false;
|
||||||
|
@ -514,9 +564,10 @@ 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)
|
||||||
{
|
{
|
||||||
if (child->Parent != this)
|
if (child->Parent != this)
|
||||||
return false;
|
return false;
|
||||||
|
@ -528,11 +579,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns list with children of this element
|
//! Returns list with children of this element
|
||||||
virtual const std::list<IGUIElement *> &getChildren() const
|
virtual const std::list<IGUIElement*>& getChildren() const
|
||||||
{
|
{
|
||||||
return Children;
|
return Children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Finds the first element with the given id.
|
//! Finds the first element with the given id.
|
||||||
/** \param id: Id to search for.
|
/** \param id: Id to search for.
|
||||||
\param searchchildren: Set this to true, if also children of this
|
\param searchchildren: Set this to true, if also children of this
|
||||||
|
@ -540,11 +592,12 @@ public:
|
||||||
should be searched too.
|
should be searched too.
|
||||||
\return Returns the first element with the given id. If no element
|
\return Returns the first element with the given id. If no element
|
||||||
with this id was found, 0 is returned. */
|
with this id was found, 0 is returned. */
|
||||||
virtual IGUIElement *getElementFromId(s32 id, bool searchchildren = false) const
|
virtual IGUIElement* getElementFromId(s32 id, bool searchchildren=false) const
|
||||||
{
|
{
|
||||||
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
|
||||||
|
@ -583,58 +640,74 @@ public:
|
||||||
\param includeDisabled: includes disabled elements in the search (default=false)
|
\param includeDisabled: includes disabled elements in the search (default=false)
|
||||||
\return true if successfully found an element, false to continue searching/fail */
|
\return true if successfully found an element, false to continue searching/fail */
|
||||||
bool getNextElement(s32 startOrder, bool reverse, bool group,
|
bool getNextElement(s32 startOrder, bool reverse, bool group,
|
||||||
IGUIElement *&first, IGUIElement *&closest, bool includeInvisible = false,
|
IGUIElement*& first, IGUIElement*& closest, bool includeInvisible=false,
|
||||||
bool includeDisabled = false) const
|
bool includeDisabled=false) const
|
||||||
{
|
{
|
||||||
// we'll stop searching if we find this number
|
// we'll stop searching if we find this number
|
||||||
s32 wanted = startOrder + (reverse ? -1 : 1);
|
s32 wanted = startOrder + ( reverse ? -1 : 1 );
|
||||||
if (wanted == -2)
|
if (wanted==-2)
|
||||||
wanted = 1073741824; // maximum s32
|
wanted = 1073741824; // maximum s32
|
||||||
|
|
||||||
auto it = Children.begin();
|
auto it = Children.begin();
|
||||||
|
|
||||||
s32 closestOrder, currentOrder;
|
s32 closestOrder, currentOrder;
|
||||||
|
|
||||||
while (it != Children.end()) {
|
while(it != Children.end())
|
||||||
|
{
|
||||||
// ignore invisible elements and their children
|
// ignore invisible elements and their children
|
||||||
if (((*it)->isVisible() || includeInvisible) &&
|
if ( ( (*it)->isVisible() || includeInvisible ) &&
|
||||||
(group == true || (*it)->isTabGroup() == false)) {
|
(group == true || (*it)->isTabGroup() == false) )
|
||||||
|
{
|
||||||
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
|
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
|
||||||
if ((*it)->isEnabled() || includeDisabled) {
|
if ( (*it)->isEnabled() || includeDisabled )
|
||||||
|
{
|
||||||
// only check tab stops and those with the same group status
|
// only check tab stops and those with the same group status
|
||||||
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) {
|
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group))
|
||||||
|
{
|
||||||
currentOrder = (*it)->getTabOrder();
|
currentOrder = (*it)->getTabOrder();
|
||||||
|
|
||||||
// is this what we're looking for?
|
// is this what we're looking for?
|
||||||
if (currentOrder == wanted) {
|
if (currentOrder == wanted)
|
||||||
|
{
|
||||||
closest = *it;
|
closest = *it;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// is it closer than the current closest?
|
// is it closer than the current closest?
|
||||||
if (closest) {
|
if (closest)
|
||||||
|
{
|
||||||
closestOrder = closest->getTabOrder();
|
closestOrder = closest->getTabOrder();
|
||||||
if ((reverse && currentOrder > closestOrder && currentOrder < startOrder) || (!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,45 +741,51 @@ 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
|
||||||
{
|
{
|
||||||
return GUIElementTypeNames[Type];
|
return GUIElementTypeNames[Type];
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the name of the element.
|
//! Returns the name of the element.
|
||||||
/** \return Name as character string. */
|
/** \return Name as character string. */
|
||||||
virtual const c8 *getName() const
|
virtual const c8* getName() const
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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();
|
||||||
|
@ -715,9 +795,8 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
template <typename Iterator>
|
template<typename Iterator>
|
||||||
static size_t _fastSetChecksum(Iterator begin, Iterator end)
|
static size_t _fastSetChecksum(Iterator begin, Iterator end) {
|
||||||
{
|
|
||||||
std::hash<typename Iterator::value_type> hasher;
|
std::hash<typename Iterator::value_type> hasher;
|
||||||
size_t checksum = 0;
|
size_t checksum = 0;
|
||||||
for (Iterator it = begin; it != end; ++it) {
|
for (Iterator it = begin; it != end; ++it) {
|
||||||
|
@ -730,12 +809,13 @@ protected:
|
||||||
|
|
||||||
// Reorder children [from, to) to the order given by `neworder`
|
// Reorder children [from, to) to the order given by `neworder`
|
||||||
void reorderChildren(
|
void reorderChildren(
|
||||||
std::list<IGUIElement *>::iterator from,
|
std::list<IGUIElement*>::iterator from,
|
||||||
std::list<IGUIElement *>::iterator to,
|
std::list<IGUIElement*>::iterator to,
|
||||||
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,22 +823,26 @@ 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)
|
||||||
{
|
{
|
||||||
core::rect<s32> parentAbsolute(0, 0, 0, 0);
|
core::rect<s32> parentAbsolute(0,0,0,0);
|
||||||
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,56 +855,60 @@ 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:
|
||||||
DesiredRect.UpperLeftCorner.X += diffx;
|
DesiredRect.UpperLeftCorner.X += diffx;
|
||||||
break;
|
break;
|
||||||
case EGUIA_CENTER:
|
case EGUIA_CENTER:
|
||||||
DesiredRect.UpperLeftCorner.X += diffx / 2;
|
DesiredRect.UpperLeftCorner.X += diffx/2;
|
||||||
break;
|
break;
|
||||||
case EGUIA_SCALE:
|
case EGUIA_SCALE:
|
||||||
DesiredRect.UpperLeftCorner.X = core::round32(ScaleRect.UpperLeftCorner.X * fw);
|
DesiredRect.UpperLeftCorner.X = core::round32(ScaleRect.UpperLeftCorner.X * fw);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignRight) {
|
switch (AlignRight)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
DesiredRect.LowerRightCorner.X += diffx;
|
DesiredRect.LowerRightCorner.X += diffx;
|
||||||
break;
|
break;
|
||||||
case EGUIA_CENTER:
|
case EGUIA_CENTER:
|
||||||
DesiredRect.LowerRightCorner.X += diffx / 2;
|
DesiredRect.LowerRightCorner.X += diffx/2;
|
||||||
break;
|
break;
|
||||||
case EGUIA_SCALE:
|
case EGUIA_SCALE:
|
||||||
DesiredRect.LowerRightCorner.X = core::round32(ScaleRect.LowerRightCorner.X * fw);
|
DesiredRect.LowerRightCorner.X = core::round32(ScaleRect.LowerRightCorner.X * fw);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignTop) {
|
switch (AlignTop)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
DesiredRect.UpperLeftCorner.Y += diffy;
|
DesiredRect.UpperLeftCorner.Y += diffy;
|
||||||
break;
|
break;
|
||||||
case EGUIA_CENTER:
|
case EGUIA_CENTER:
|
||||||
DesiredRect.UpperLeftCorner.Y += diffy / 2;
|
DesiredRect.UpperLeftCorner.Y += diffy/2;
|
||||||
break;
|
break;
|
||||||
case EGUIA_SCALE:
|
case EGUIA_SCALE:
|
||||||
DesiredRect.UpperLeftCorner.Y = core::round32(ScaleRect.UpperLeftCorner.Y * fh);
|
DesiredRect.UpperLeftCorner.Y = core::round32(ScaleRect.UpperLeftCorner.Y * fh);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (AlignBottom) {
|
switch (AlignBottom)
|
||||||
|
{
|
||||||
case EGUIA_UPPERLEFT:
|
case EGUIA_UPPERLEFT:
|
||||||
break;
|
break;
|
||||||
case EGUIA_LOWERRIGHT:
|
case EGUIA_LOWERRIGHT:
|
||||||
DesiredRect.LowerRightCorner.Y += diffy;
|
DesiredRect.LowerRightCorner.Y += diffy;
|
||||||
break;
|
break;
|
||||||
case EGUIA_CENTER:
|
case EGUIA_CENTER:
|
||||||
DesiredRect.LowerRightCorner.Y += diffy / 2;
|
DesiredRect.LowerRightCorner.Y += diffy/2;
|
||||||
break;
|
break;
|
||||||
case EGUIA_SCALE:
|
case EGUIA_SCALE:
|
||||||
DesiredRect.LowerRightCorner.Y = core::round32(ScaleRect.LowerRightCorner.Y * fh);
|
DesiredRect.LowerRightCorner.Y = core::round32(ScaleRect.LowerRightCorner.Y * fh);
|
||||||
|
@ -854,23 +942,26 @@ 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;
|
||||||
|
|
||||||
//! Pointer to the parent
|
//! Pointer to the parent
|
||||||
IGUIElement *Parent;
|
IGUIElement* Parent;
|
||||||
|
|
||||||
//! Our position in the parent list. Only valid when Parent != nullptr
|
//! Our position in the parent list. Only valid when Parent != nullptr
|
||||||
std::list<IGUIElement *>::iterator ParentPos;
|
std::list<IGUIElement*>::iterator ParentPos;
|
||||||
|
|
||||||
//! relative rect of element
|
//! relative rect of element
|
||||||
core::rect<s32> RelativeRect;
|
core::rect<s32> RelativeRect;
|
||||||
|
@ -931,11 +1022,15 @@ protected:
|
||||||
EGUI_ALIGNMENT AlignLeft, AlignRight, AlignTop, AlignBottom;
|
EGUI_ALIGNMENT AlignLeft, AlignRight, AlignTop, AlignBottom;
|
||||||
|
|
||||||
//! GUI Environment
|
//! GUI Environment
|
||||||
IGUIEnvironment *Environment;
|
IGUIEnvironment* Environment;
|
||||||
|
|
||||||
//! type of element
|
//! type of element
|
||||||
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"
|
||||||
|
@ -13,20 +14,20 @@
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
class IOSOperator;
|
class IOSOperator;
|
||||||
class IEventReceiver;
|
class IEventReceiver;
|
||||||
|
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
class IWriteFile;
|
class IWriteFile;
|
||||||
class IFileSystem;
|
class IFileSystem;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class IVideoDriver;
|
class IVideoDriver;
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
@ -58,10 +59,11 @@ 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. */
|
||||||
virtual void drawAll(bool useScreenSize = true) = 0;
|
virtual void drawAll(bool useScreenSize=true) = 0;
|
||||||
|
|
||||||
//! Sets the focus to an element.
|
//! Sets the focus to an element.
|
||||||
/** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a
|
/** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a
|
||||||
|
@ -69,11 +71,11 @@ public:
|
||||||
then the focus will not be changed.
|
then the focus will not be changed.
|
||||||
\param element Pointer to the element which shall get the focus.
|
\param element Pointer to the element which shall get the focus.
|
||||||
\return True on success, false on failure */
|
\return True on success, false on failure */
|
||||||
virtual bool setFocus(IGUIElement *element) = 0;
|
virtual bool setFocus(IGUIElement* element) = 0;
|
||||||
|
|
||||||
//! Returns the element which holds the focus.
|
//! Returns the element which holds the focus.
|
||||||
/** \return Pointer to the element with focus. */
|
/** \return Pointer to the element with focus. */
|
||||||
virtual IGUIElement *getFocus() const = 0;
|
virtual IGUIElement* getFocus() const = 0;
|
||||||
|
|
||||||
//! Returns the element which was last under the mouse cursor
|
//! Returns the element which was last under the mouse cursor
|
||||||
/** NOTE: This information is updated _after_ the user-eventreceiver
|
/** NOTE: This information is updated _after_ the user-eventreceiver
|
||||||
|
@ -81,32 +83,32 @@ public:
|
||||||
mouse events you have to use instead:
|
mouse events you have to use instead:
|
||||||
IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos);
|
IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos);
|
||||||
\return Pointer to the element under the mouse. */
|
\return Pointer to the element under the mouse. */
|
||||||
virtual IGUIElement *getHovered() const = 0;
|
virtual IGUIElement* getHovered() const = 0;
|
||||||
|
|
||||||
//! Removes the focus from an element.
|
//! Removes the focus from an element.
|
||||||
/** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed
|
/** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed
|
||||||
then the focus will not be changed.
|
then the focus will not be changed.
|
||||||
\param element Pointer to the element which shall lose the focus.
|
\param element Pointer to the element which shall lose the focus.
|
||||||
\return True on success, false on failure */
|
\return True on success, false on failure */
|
||||||
virtual bool removeFocus(IGUIElement *element) = 0;
|
virtual bool removeFocus(IGUIElement* element) = 0;
|
||||||
|
|
||||||
//! Returns whether the element has focus
|
//! Returns whether the element has focus
|
||||||
/** \param element Pointer to the element which is tested.
|
/** \param element Pointer to the element which is tested.
|
||||||
\param checkSubElements When true and focus is on a sub-element of element then it will still count as focused and return true
|
\param checkSubElements When true and focus is on a sub-element of element then it will still count as focused and return true
|
||||||
\return True if the element has focus, else false. */
|
\return True if the element has focus, else false. */
|
||||||
virtual bool hasFocus(const IGUIElement *element, bool checkSubElements = false) const = 0;
|
virtual bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const = 0;
|
||||||
|
|
||||||
//! Returns the current video driver.
|
//! Returns the current video driver.
|
||||||
/** \return Pointer to the video driver. */
|
/** \return Pointer to the video driver. */
|
||||||
virtual video::IVideoDriver *getVideoDriver() const = 0;
|
virtual video::IVideoDriver* getVideoDriver() const = 0;
|
||||||
|
|
||||||
//! Returns the file system.
|
//! Returns the file system.
|
||||||
/** \return Pointer to the file system. */
|
/** \return Pointer to the file system. */
|
||||||
virtual io::IFileSystem *getFileSystem() const = 0;
|
virtual io::IFileSystem* getFileSystem() const = 0;
|
||||||
|
|
||||||
//! returns a pointer to the OS operator
|
//! returns a pointer to the OS operator
|
||||||
/** \return Pointer to the OS operator. */
|
/** \return Pointer to the OS operator. */
|
||||||
virtual IOSOperator *getOSOperator() const = 0;
|
virtual IOSOperator* getOSOperator() const = 0;
|
||||||
|
|
||||||
//! Removes all elements from the environment.
|
//! Removes all elements from the environment.
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
@ -116,17 +118,17 @@ public:
|
||||||
use this method, it is used by the engine internally.
|
use this method, it is used by the engine internally.
|
||||||
\param event The event to post.
|
\param event The event to post.
|
||||||
\return True if succeeded, else false. */
|
\return True if succeeded, else false. */
|
||||||
virtual bool postEventFromUser(const SEvent &event) = 0;
|
virtual bool postEventFromUser(const SEvent& event) = 0;
|
||||||
|
|
||||||
//! This sets a new event receiver for gui events.
|
//! This sets a new event receiver for gui events.
|
||||||
/** Usually you do not have to
|
/** Usually you do not have to
|
||||||
use this method, it is used by the engine internally.
|
use this method, it is used by the engine internally.
|
||||||
\param evr Pointer to the new receiver. */
|
\param evr Pointer to the new receiver. */
|
||||||
virtual void setUserEventReceiver(IEventReceiver *evr) = 0;
|
virtual void setUserEventReceiver(IEventReceiver* evr) = 0;
|
||||||
|
|
||||||
//! Returns pointer to the current gui skin.
|
//! Returns pointer to the current gui skin.
|
||||||
/** \return Pointer to the GUI skin. */
|
/** \return Pointer to the GUI skin. */
|
||||||
virtual IGUISkin *getSkin() const = 0;
|
virtual IGUISkin* getSkin() const = 0;
|
||||||
|
|
||||||
//! Sets a new GUI Skin
|
//! Sets a new GUI Skin
|
||||||
/** You can use this to change the appearance of the whole GUI
|
/** You can use this to change the appearance of the whole GUI
|
||||||
|
@ -141,7 +143,7 @@ public:
|
||||||
\endcode
|
\endcode
|
||||||
\param skin New skin to use.
|
\param skin New skin to use.
|
||||||
*/
|
*/
|
||||||
virtual void setSkin(IGUISkin *skin) = 0;
|
virtual void setSkin(IGUISkin* skin) = 0;
|
||||||
|
|
||||||
//! Creates a new GUI Skin based on a template.
|
//! Creates a new GUI Skin based on a template.
|
||||||
/** Use setSkin() to set the created skin.
|
/** Use setSkin() to set the created skin.
|
||||||
|
@ -149,7 +151,8 @@ public:
|
||||||
\return Pointer to the created skin.
|
\return Pointer to the created skin.
|
||||||
If you no longer need it, you should call IGUISkin::drop().
|
If you no longer need it, you should call IGUISkin::drop().
|
||||||
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
|
||||||
|
@ -158,9 +161,9 @@ public:
|
||||||
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIImageList *createImageList(video::ITexture *texture,
|
virtual IGUIImageList* createImageList( video::ITexture* texture,
|
||||||
core::dimension2d<s32> imageSize,
|
core::dimension2d<s32> imageSize,
|
||||||
bool useAlphaChannel) = 0;
|
bool useAlphaChannel ) = 0;
|
||||||
|
|
||||||
//! Returns pointer to the font with the specified filename.
|
//! Returns pointer to the font with the specified filename.
|
||||||
/** Loads the font if it was not loaded before.
|
/** Loads the font if it was not loaded before.
|
||||||
|
@ -168,7 +171,7 @@ public:
|
||||||
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIFont *getFont(const io::path &filename) = 0;
|
virtual IGUIFont* getFont(const io::path& filename) = 0;
|
||||||
|
|
||||||
//! Adds an externally loaded font to the font list.
|
//! Adds an externally loaded font to the font list.
|
||||||
/** This method allows to attach an already loaded font to the list of
|
/** This method allows to attach an already loaded font to the list of
|
||||||
|
@ -176,29 +179,29 @@ public:
|
||||||
\param name Name the font should be stored as.
|
\param name Name the font should be stored as.
|
||||||
\param font Pointer to font to add.
|
\param font Pointer to font to add.
|
||||||
\return Pointer to the font stored. This can differ from given parameter if the name previously existed. */
|
\return Pointer to the font stored. This can differ from given parameter if the name previously existed. */
|
||||||
virtual IGUIFont *addFont(const io::path &name, IGUIFont *font) = 0;
|
virtual IGUIFont* addFont(const io::path& name, IGUIFont* font) = 0;
|
||||||
|
|
||||||
//! remove loaded font
|
//! remove loaded font
|
||||||
virtual void removeFont(IGUIFont *font) = 0;
|
virtual void removeFont(IGUIFont* font) = 0;
|
||||||
|
|
||||||
//! Returns the default built-in font.
|
//! Returns the default built-in font.
|
||||||
/** \return Pointer to the default built-in font.
|
/** \return Pointer to the default built-in font.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIFont *getBuiltInFont() const = 0;
|
virtual IGUIFont* getBuiltInFont() const = 0;
|
||||||
|
|
||||||
//! Returns pointer to the sprite bank which was added with addEmptySpriteBank
|
//! Returns pointer to the sprite bank which was added with addEmptySpriteBank
|
||||||
/** TODO: This should load files in the future, but not implemented so far.
|
/** TODO: This should load files in the future, but not implemented so far.
|
||||||
\param filename Name of a spritebank added with addEmptySpriteBank
|
\param filename Name of a spritebank added with addEmptySpriteBank
|
||||||
\return Pointer to the sprite bank. Returns 0 if it could not be loaded.
|
\return Pointer to the sprite bank. Returns 0 if it could not be loaded.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUISpriteBank *getSpriteBank(const io::path &filename) = 0;
|
virtual IGUISpriteBank* getSpriteBank(const io::path& filename) = 0;
|
||||||
|
|
||||||
//! Adds an empty sprite bank to the manager
|
//! Adds an empty sprite bank to the manager
|
||||||
/** \param name Name of the new sprite bank.
|
/** \param name Name of the new sprite bank.
|
||||||
\return Pointer to the sprite bank.
|
\return Pointer to the sprite bank.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUISpriteBank *addEmptySpriteBank(const io::path &name) = 0;
|
virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) = 0;
|
||||||
|
|
||||||
//! Returns the root gui element.
|
//! Returns the root gui element.
|
||||||
/** This is the first gui element, the (direct or indirect) parent of all
|
/** This is the first gui element, the (direct or indirect) parent of all
|
||||||
|
@ -207,7 +210,7 @@ public:
|
||||||
\return Pointer to the root element of the GUI. The returned pointer
|
\return Pointer to the root element of the GUI. The returned pointer
|
||||||
should not be dropped. See IReferenceCounted::drop() for more
|
should not be dropped. See IReferenceCounted::drop() for more
|
||||||
information. */
|
information. */
|
||||||
virtual IGUIElement *getRootGUIElement() = 0;
|
virtual IGUIElement* getRootGUIElement() = 0;
|
||||||
|
|
||||||
//! Adds a button element.
|
//! Adds a button element.
|
||||||
/** \param rectangle Rectangle specifying the borders of the button.
|
/** \param rectangle Rectangle specifying the borders of the button.
|
||||||
|
@ -218,8 +221,8 @@ public:
|
||||||
\return Pointer to the created button. Returns 0 if an error occurred.
|
\return Pointer to the created button. Returns 0 if an error occurred.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIButton *addButton(const core::rect<s32> &rectangle,
|
virtual IGUIButton* addButton(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0, const wchar_t *tooltiptext = 0) = 0;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;
|
||||||
|
|
||||||
//! Adds a scrollbar.
|
//! Adds a scrollbar.
|
||||||
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
||||||
|
@ -230,8 +233,8 @@ public:
|
||||||
\return Pointer to the created scrollbar. Returns 0 if an error
|
\return Pointer to the created scrollbar. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIScrollBar *addScrollBar(bool horizontal, const core::rect<s32> &rectangle,
|
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1) = 0;
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds an image element.
|
//! Adds an image element.
|
||||||
/** \param image Image to be displayed.
|
/** \param image Image to be displayed.
|
||||||
|
@ -245,8 +248,8 @@ public:
|
||||||
\return Pointer to the created image element. Returns 0 if an error
|
\return Pointer to the created image element. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIImage *addImage(video::ITexture *image, core::position2d<s32> pos,
|
virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
|
||||||
bool useAlphaChannel = true, IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0) = 0;
|
bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
||||||
|
|
||||||
//! Adds an image element.
|
//! Adds an image element.
|
||||||
/** Use IGUIImage::setImage later to set the image to be displayed.
|
/** Use IGUIImage::setImage later to set the image to be displayed.
|
||||||
|
@ -259,8 +262,8 @@ public:
|
||||||
\return Pointer to the created image element. Returns 0 if an error
|
\return Pointer to the created image element. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIImage *addImage(const core::rect<s32> &rectangle,
|
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0, bool useAlphaChannel = true) = 0;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) = 0;
|
||||||
|
|
||||||
//! Adds a checkbox element.
|
//! Adds a checkbox element.
|
||||||
/** \param checked Define the initial state of the check box.
|
/** \param checked Define the initial state of the check box.
|
||||||
|
@ -271,8 +274,8 @@ public:
|
||||||
\return Pointer to the created check box. Returns 0 if an error
|
\return Pointer to the created check box. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUICheckBox *addCheckBox(bool checked, const core::rect<s32> &rectangle,
|
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, const wchar_t *text = 0) = 0;
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
||||||
|
|
||||||
//! Adds a list box element.
|
//! Adds a list box element.
|
||||||
/** \param rectangle Rectangle specifying the borders of the list box.
|
/** \param rectangle Rectangle specifying the borders of the list box.
|
||||||
|
@ -282,8 +285,8 @@ public:
|
||||||
\return Pointer to the created list box. Returns 0 if an error occurred.
|
\return Pointer to the created list box. Returns 0 if an error occurred.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIListBox *addListBox(const core::rect<s32> &rectangle,
|
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1, bool drawBackground = false) = 0;
|
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
|
||||||
|
|
||||||
//! Adds a file open dialog.
|
//! Adds a file open dialog.
|
||||||
/** \param title Text to be displayed as the title of the dialog.
|
/** \param title Text to be displayed as the title of the dialog.
|
||||||
|
@ -299,9 +302,9 @@ public:
|
||||||
\return Pointer to the created file open dialog. Returns 0 if an error
|
\return Pointer to the created file open dialog. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIFileOpenDialog *addFileOpenDialog(const wchar_t *title = 0,
|
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title=0,
|
||||||
bool modal = true, IGUIElement *parent = 0, s32 id = -1,
|
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
bool restoreCWD = false, io::path::char_type *startDir = 0) = 0;
|
bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
|
||||||
|
|
||||||
//! Adds a static text.
|
//! Adds a static text.
|
||||||
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
||||||
|
@ -315,8 +318,8 @@ public:
|
||||||
\return Pointer to the created static text. Returns 0 if an error
|
\return Pointer to the created static text. Returns 0 if an error
|
||||||
occurred. This pointer should not be dropped. See
|
occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIStaticText *addStaticText(const wchar_t *text, const core::rect<s32> &rectangle,
|
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool border = false, bool wordWrap = true, IGUIElement *parent = 0, s32 id = -1,
|
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
bool fillBackground = false) = 0;
|
bool fillBackground = false) = 0;
|
||||||
|
|
||||||
//! Adds an edit box.
|
//! Adds an edit box.
|
||||||
|
@ -334,8 +337,8 @@ public:
|
||||||
\return Pointer to the created edit box. Returns 0 if an error occurred.
|
\return Pointer to the created edit box. Returns 0 if an error occurred.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
more information. */
|
more information. */
|
||||||
virtual IGUIEditBox *addEditBox(const wchar_t *text, const core::rect<s32> &rectangle,
|
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool border = true, IGUIElement *parent = 0, s32 id = -1) = 0;
|
bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a tab control to the environment.
|
//! Adds a tab control to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the tab control.
|
/** \param rectangle Rectangle specifying the borders of the tab control.
|
||||||
|
@ -350,9 +353,9 @@ public:
|
||||||
\return Pointer to the created tab control element. Returns 0 if an
|
\return Pointer to the created tab control element. Returns 0 if an
|
||||||
error occurred. This pointer should not be dropped. See
|
error occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUITabControl *addTabControl(const core::rect<s32> &rectangle,
|
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, bool fillbackground = false,
|
IGUIElement* parent=0, bool fillbackground=false,
|
||||||
bool border = true, s32 id = -1) = 0;
|
bool border=true, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds tab to the environment.
|
//! Adds tab to the environment.
|
||||||
/** You can use this element to group other elements. This is not used
|
/** You can use this element to group other elements. This is not used
|
||||||
|
@ -365,8 +368,8 @@ public:
|
||||||
\return Pointer to the created tab. Returns 0 if an
|
\return Pointer to the created tab. Returns 0 if an
|
||||||
error occurred. This pointer should not be dropped. See
|
error occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUITab *addTab(const core::rect<s32> &rectangle,
|
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1) = 0;
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a combo box to the environment.
|
//! Adds a combo box to the environment.
|
||||||
/** \param rectangle Rectangle specifying the borders of the combo box.
|
/** \param rectangle Rectangle specifying the borders of the combo box.
|
||||||
|
@ -376,8 +379,8 @@ public:
|
||||||
\return Pointer to the created combo box. Returns 0 if an
|
\return Pointer to the created combo box. Returns 0 if an
|
||||||
error occurred. This pointer should not be dropped. See
|
error occurred. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IGUIComboBox *addComboBox(const core::rect<s32> &rectangle,
|
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
||||||
IGUIElement *parent = 0, s32 id = -1) = 0;
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Find the next element which would be selected when pressing the tab-key
|
//! Find the next element which would be selected when pressing the tab-key
|
||||||
/** If you set the focus for the result you can manually force focus-changes like they
|
/** If you set the focus for the result you can manually force focus-changes like they
|
||||||
|
@ -385,7 +388,7 @@ public:
|
||||||
\param reverse When true it will search backward (toward lower TabOrder numbers, like shift+tab)
|
\param reverse When true it will search backward (toward lower TabOrder numbers, like shift+tab)
|
||||||
\param group When true it will search for the next tab-group (like ctrl+tab)
|
\param group When true it will search for the next tab-group (like ctrl+tab)
|
||||||
*/
|
*/
|
||||||
virtual IGUIElement *getNextElement(bool reverse = false, bool group = false) = 0;
|
virtual IGUIElement* getNextElement(bool reverse=false, bool group=false) = 0;
|
||||||
|
|
||||||
//! Set the way the gui will handle automatic focus changes
|
//! Set the way the gui will handle automatic focus changes
|
||||||
/** The default is (EFF_SET_ON_LMOUSE_DOWN | EFF_SET_ON_TAB).
|
/** The default is (EFF_SET_ON_LMOUSE_DOWN | EFF_SET_ON_TAB).
|
||||||
|
@ -407,8 +410,12 @@ public:
|
||||||
Note that in general just calling IGUIElement::remove() is enough.
|
Note that in general just calling IGUIElement::remove() is enough.
|
||||||
Unless you create your own GUI elements removing themselves you won't need it.
|
Unless you create your own GUI elements removing themselves you won't need it.
|
||||||
\param element: Element to remove */
|
\param element: Element to remove */
|
||||||
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"
|
||||||
|
@ -12,33 +13,38 @@ namespace irr
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Standard file chooser dialog.
|
//! Standard file chooser dialog.
|
||||||
/** \warning When the user selects a folder this does change the current working directory
|
/** \warning When the user selects a folder this does change the current working directory
|
||||||
|
|
||||||
|
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
|
\li EGET_DIRECTORY_SELECTED
|
||||||
|
\li EGET_FILE_SELECTED
|
||||||
|
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
||||||
|
*/
|
||||||
|
class IGUIFileOpenDialog : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_DIRECTORY_SELECTED
|
|
||||||
\li EGET_FILE_SELECTED
|
|
||||||
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
|
||||||
*/
|
|
||||||
class IGUIFileOpenDialog : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
//! 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;
|
||||||
|
|
||||||
//! Returns the filename of the selected file. Is empty if no file was selected.
|
//! Returns the filename of the selected file. Is empty if no file was selected.
|
||||||
virtual const io::path &getFileNameP() const = 0;
|
virtual const io::path& getFileNameP() const = 0;
|
||||||
|
|
||||||
//! Returns the directory of the selected file. Empty if no directory was selected.
|
//! Returns the directory of the selected file. Empty if no directory was selected.
|
||||||
virtual const io::path &getDirectoryName() const = 0;
|
virtual const io::path& getDirectoryName() const = 0;
|
||||||
|
|
||||||
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
||||||
virtual const wchar_t *getDirectoryNameW() const = 0;
|
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.
|
||||||
|
@ -46,30 +48,30 @@ public:
|
||||||
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
||||||
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||||
If the pointer is null, no clipping will be done. */
|
If the pointer is null, no clipping will be done. */
|
||||||
virtual void draw(const core::stringw &text, const core::rect<s32> &position,
|
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
||||||
video::SColor color, bool hcenter = false, bool vcenter = false,
|
video::SColor color, bool hcenter=false, bool vcenter=false,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! Calculates the width and height of a given string of text.
|
//! Calculates the width and height of a given string of text.
|
||||||
/** \return Returns width and height of the area covered by the text if
|
/** \return Returns width and height of the area covered by the text if
|
||||||
it would be drawn. */
|
it would be drawn. */
|
||||||
virtual core::dimension2d<u32> getDimension(const wchar_t *text) const = 0;
|
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const = 0;
|
||||||
|
|
||||||
//! Calculates the index of the character in the text which is on a specific position.
|
//! Calculates the index of the character in the text which is on a specific position.
|
||||||
/** \param text: Text string.
|
/** \param text: Text string.
|
||||||
\param pixel_x: X pixel position of which the index of the character will be returned.
|
\param pixel_x: X pixel position of which the index of the character will be returned.
|
||||||
\return Returns zero based index of the character in the text, and -1 if no no character
|
\return Returns zero based index of the character in the text, and -1 if no no character
|
||||||
is on this position. (=the text is too short). */
|
is on this position. (=the text is too short). */
|
||||||
virtual s32 getCharacterFromPos(const wchar_t *text, s32 pixel_x) const = 0;
|
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0;
|
||||||
|
|
||||||
//! Returns the type of this font
|
//! Returns the type of this font
|
||||||
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
||||||
|
|
||||||
//! Sets global kerning width for the font.
|
//! Sets global kerning width for the font.
|
||||||
virtual void setKerningWidth(s32 kerning) = 0;
|
virtual void setKerningWidth (s32 kerning) = 0;
|
||||||
|
|
||||||
//! Sets global kerning height for the font.
|
//! Sets global kerning height for the font.
|
||||||
virtual void setKerningHeight(s32 kerning) = 0;
|
virtual void setKerningHeight (s32 kerning) = 0;
|
||||||
|
|
||||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||||
/** the global kerning distance is returned.
|
/** the global kerning distance is returned.
|
||||||
|
@ -82,7 +84,7 @@ public:
|
||||||
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
||||||
tucked neatly under the 'W'.
|
tucked neatly under the 'W'.
|
||||||
*/
|
*/
|
||||||
virtual s32 getKerningWidth(const wchar_t *thisLetter = 0, const wchar_t *previousLetter = 0) const = 0;
|
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0;
|
||||||
|
|
||||||
//! Returns the distance between letters
|
//! Returns the distance between letters
|
||||||
virtual s32 getKerningHeight() const = 0;
|
virtual s32 getKerningHeight() const = 0;
|
||||||
|
@ -92,8 +94,11 @@ public:
|
||||||
most fonts.
|
most fonts.
|
||||||
\param s String of symbols which are not send down to the videodriver
|
\param s String of symbols which are not send down to the videodriver
|
||||||
*/
|
*/
|
||||||
virtual void setInvisibleCharacters(const wchar_t *s) = 0;
|
virtual void setInvisibleCharacters( const wchar_t *s ) = 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_BITMAP_H_INCLUDED__
|
||||||
|
#define __I_GUI_FONT_BITMAP_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIFont.h"
|
#include "IGUIFont.h"
|
||||||
|
|
||||||
|
@ -10,17 +11,18 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
|
|
||||||
//! Font interface.
|
//! Font interface.
|
||||||
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; }
|
||||||
|
|
||||||
//! returns the parsed Symbol Information
|
//! returns the parsed Symbol Information
|
||||||
virtual IGUISpriteBank *getSpriteBank() const = 0;
|
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||||
|
|
||||||
//! returns the sprite number from a given character
|
//! returns the sprite number from a given character
|
||||||
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
||||||
|
@ -34,8 +36,11 @@ public:
|
||||||
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
||||||
left side kerning value of thisLetter, then add the global value.
|
left side kerning value of thisLetter, then add the global value.
|
||||||
*/
|
*/
|
||||||
s32 getKerningWidth(const wchar_t *thisLetter = 0, const wchar_t *previousLetter = 0) const override = 0;
|
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,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"
|
||||||
|
|
||||||
|
@ -10,23 +11,24 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
}
|
}
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
//! GUI element displaying an image.
|
//! GUI element displaying an image.
|
||||||
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;
|
||||||
|
|
||||||
//! Gets the image texture
|
//! Gets the image texture
|
||||||
virtual video::ITexture *getImage() const = 0;
|
virtual video::ITexture* getImage() const = 0;
|
||||||
|
|
||||||
//! Sets the color of the image
|
//! Sets the color of the image
|
||||||
/** \param color Color with which the image is drawn. If the color
|
/** \param color Color with which the image is drawn. If the color
|
||||||
|
@ -50,7 +52,7 @@ public:
|
||||||
|
|
||||||
//! Sets the source rectangle of the image. By default the full image is used.
|
//! Sets the source rectangle of the image. By default the full image is used.
|
||||||
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
||||||
virtual void setSourceRect(const core::rect<s32> &sourceRect) = 0;
|
virtual void setSourceRect(const core::rect<s32>& sourceRect) = 0;
|
||||||
|
|
||||||
//! Returns the customized source rectangle of the image to be used.
|
//! Returns the customized source rectangle of the image to be used.
|
||||||
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
||||||
|
@ -64,7 +66,7 @@ public:
|
||||||
Unlike normal clipping this does not affect the gui-children.
|
Unlike normal clipping this does not affect the gui-children.
|
||||||
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
||||||
*/
|
*/
|
||||||
virtual void setDrawBounds(const core::rect<f32> &drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
||||||
|
|
||||||
//! Get drawing-area restrictions.
|
//! Get drawing-area restrictions.
|
||||||
virtual core::rect<f32> getDrawBounds() const = 0;
|
virtual core::rect<f32> getDrawBounds() const = 0;
|
||||||
|
@ -76,7 +78,10 @@ public:
|
||||||
//! Checks if a background is drawn when no texture is set
|
//! Checks if a background is drawn when no texture is set
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
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,16 +17,17 @@ namespace gui
|
||||||
class IGUIImageList : public virtual IReferenceCounted
|
class IGUIImageList : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IGUIImageList(){};
|
virtual ~IGUIImageList() {};
|
||||||
|
|
||||||
//! Draws an image and clips it to the specified rectangle if wanted
|
//! Draws an image and clips it to the specified rectangle if wanted
|
||||||
//! \param index: Index of the image
|
//! \param index: Index of the image
|
||||||
//! \param destPos: Position of the image to draw
|
//! \param destPos: Position of the image to draw
|
||||||
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||||
//! If the pointer is null, no clipping will be done.
|
//! If the pointer is null, no clipping will be done.
|
||||||
virtual void draw(s32 index, const core::position2d<s32> &destPos,
|
virtual void draw(s32 index, const core::position2d<s32>& destPos,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip = 0) = 0;
|
||||||
|
|
||||||
//! Returns the count of Images in the list.
|
//! Returns the count of Images in the list.
|
||||||
//! \return Returns the count of Images in the list.
|
//! \return Returns the count of Images in the list.
|
||||||
|
@ -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"
|
||||||
|
@ -11,14 +12,14 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
class IGUIScrollBar;
|
class IGUIScrollBar;
|
||||||
|
|
||||||
//! Enumeration for listbox colors
|
//! Enumeration for listbox colors
|
||||||
enum EGUI_LISTBOX_COLOR
|
enum EGUI_LISTBOX_COLOR
|
||||||
{
|
{
|
||||||
//! Color of text
|
//! Color of text
|
||||||
EGUI_LBC_TEXT = 0,
|
EGUI_LBC_TEXT=0,
|
||||||
//! Color of selected text
|
//! Color of selected text
|
||||||
EGUI_LBC_TEXT_HIGHLIGHT,
|
EGUI_LBC_TEXT_HIGHLIGHT,
|
||||||
//! Color of icon
|
//! Color of icon
|
||||||
|
@ -27,34 +28,35 @@ enum EGUI_LISTBOX_COLOR
|
||||||
EGUI_LBC_ICON_HIGHLIGHT,
|
EGUI_LBC_ICON_HIGHLIGHT,
|
||||||
//! Not used, just counts the number of available colors
|
//! Not used, just counts the number of available colors
|
||||||
EGUI_LBC_COUNT
|
EGUI_LBC_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Default list box GUI element.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! Default list box GUI element.
|
||||||
\li EGET_LISTBOX_CHANGED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
\li EGET_LISTBOX_SELECTED_AGAIN
|
\li EGET_LISTBOX_CHANGED
|
||||||
*/
|
\li EGET_LISTBOX_SELECTED_AGAIN
|
||||||
class IGUIListBox : public IGUIElement
|
*/
|
||||||
{
|
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;
|
||||||
|
|
||||||
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
||||||
virtual const wchar_t *getListItem(u32 id) const = 0;
|
virtual const wchar_t* getListItem(u32 id) const = 0;
|
||||||
|
|
||||||
//! adds an list item, returns id of item
|
//! adds an list item, returns id of item
|
||||||
virtual u32 addItem(const wchar_t *text) = 0;
|
virtual u32 addItem(const wchar_t* text) = 0;
|
||||||
|
|
||||||
//! adds an list item with an icon
|
//! adds an list item with an icon
|
||||||
/** \param text Text of list entry
|
/** \param text Text of list entry
|
||||||
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
||||||
\return The id of the new created item */
|
\return The id of the new created item */
|
||||||
virtual u32 addItem(const wchar_t *text, s32 icon) = 0;
|
virtual u32 addItem(const wchar_t* text, s32 icon) = 0;
|
||||||
|
|
||||||
//! Removes an item from the list
|
//! Removes an item from the list
|
||||||
virtual void removeItem(u32 index) = 0;
|
virtual void removeItem(u32 index) = 0;
|
||||||
|
@ -71,7 +73,7 @@ public:
|
||||||
default. A sprite can be displayed in front of every list item.
|
default. A sprite can be displayed in front of every list item.
|
||||||
An icon is an index within the icon sprite bank. Several
|
An icon is an index within the icon sprite bank. Several
|
||||||
default icons are available in the skin through getIcon. */
|
default icons are available in the skin through getIcon. */
|
||||||
virtual void setSpriteBank(IGUISpriteBank *bank) = 0;
|
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
||||||
|
|
||||||
//! clears the list, deletes all items in the listbox
|
//! clears the list, deletes all items in the listbox
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
@ -113,24 +115,28 @@ public:
|
||||||
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||||
|
|
||||||
//! set the item at the given index
|
//! set the item at the given index
|
||||||
virtual void setItem(u32 index, const wchar_t *text, s32 icon) = 0;
|
virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||||
|
|
||||||
//! Insert the item at the given index
|
//! Insert the item at the given index
|
||||||
/** \return The index on success or -1 on failure. */
|
/** \return The index on success or -1 on failure. */
|
||||||
virtual s32 insertItem(u32 index, const wchar_t *text, s32 icon) = 0;
|
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||||
|
|
||||||
//! Swap the items at the given indices
|
//! Swap the items at the given indices
|
||||||
virtual void swapItems(u32 index1, u32 index2) = 0;
|
virtual void swapItems(u32 index1, u32 index2) = 0;
|
||||||
|
|
||||||
//! set global itemHeight
|
//! set global itemHeight
|
||||||
virtual void setItemHeight(s32 height) = 0;
|
virtual void setItemHeight( s32 height ) = 0;
|
||||||
|
|
||||||
//! Sets whether to draw the background
|
//! Sets whether to draw the background
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
|
|
||||||
//! Access the vertical scrollbar
|
//! Access the vertical scrollbar
|
||||||
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"
|
||||||
|
|
||||||
|
@ -11,16 +12,17 @@ namespace irr
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Default scroll bar GUI element.
|
//! Default scroll bar 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_SCROLL_BAR_CHANGED
|
\li EGET_SCROLL_BAR_CHANGED
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
@ -53,7 +55,11 @@ public:
|
||||||
|
|
||||||
//! sets the current position of the scrollbar
|
//! sets the current position of the scrollbar
|
||||||
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"
|
||||||
|
@ -13,23 +14,23 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIFont;
|
class IGUIFont;
|
||||||
class IGUISpriteBank;
|
class IGUISpriteBank;
|
||||||
class IGUIElement;
|
class IGUIElement;
|
||||||
|
|
||||||
//! Enumeration of available default skins.
|
//! Enumeration of available default skins.
|
||||||
/** To set one of the skins, use the following code, for example to set
|
/** To set one of the skins, use the following code, for example to set
|
||||||
the Windows classic skin:
|
the Windows classic skin:
|
||||||
\code
|
\code
|
||||||
gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC);
|
gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC);
|
||||||
environment->setSkin(newskin);
|
environment->setSkin(newskin);
|
||||||
newskin->drop();
|
newskin->drop();
|
||||||
\endcode
|
\endcode
|
||||||
*/
|
*/
|
||||||
enum EGUI_SKIN_TYPE
|
enum EGUI_SKIN_TYPE
|
||||||
{
|
{
|
||||||
//! Default windows look and feel
|
//! Default windows look and feel
|
||||||
EGST_WINDOWS_CLASSIC = 0,
|
EGST_WINDOWS_CLASSIC=0,
|
||||||
|
|
||||||
//! Like EGST_WINDOWS_CLASSIC, but with metallic shaded windows and buttons
|
//! Like EGST_WINDOWS_CLASSIC, but with metallic shaded windows and buttons
|
||||||
EGST_WINDOWS_METALLIC,
|
EGST_WINDOWS_METALLIC,
|
||||||
|
@ -42,10 +43,11 @@ enum EGUI_SKIN_TYPE
|
||||||
|
|
||||||
//! this value is not used, it only specifies the number of skin types
|
//! this value is not used, it only specifies the number of skin types
|
||||||
EGST_COUNT
|
EGST_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,9 +55,10 @@ const c8 *const GUISkinTypeNames[EGST_COUNT + 1] = {
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enumeration for skin colors
|
|
||||||
enum EGUI_DEFAULT_COLOR
|
//! Enumeration for skin colors
|
||||||
{
|
enum EGUI_DEFAULT_COLOR
|
||||||
|
{
|
||||||
//! Dark shadow for three-dimensional display elements.
|
//! Dark shadow for three-dimensional display elements.
|
||||||
EGDC_3D_DARK_SHADOW = 0,
|
EGDC_3D_DARK_SHADOW = 0,
|
||||||
//! Shadow color for three-dimensional display elements (for edges facing away from the light source).
|
//! Shadow color for three-dimensional display elements (for edges facing away from the light source).
|
||||||
|
@ -110,10 +113,11 @@ enum EGUI_DEFAULT_COLOR
|
||||||
//! this value is not used, it only specifies the amount of default colors
|
//! this value is not used, it only specifies the amount of default colors
|
||||||
//! available.
|
//! available.
|
||||||
EGDC_COUNT
|
EGDC_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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",
|
||||||
|
@ -142,9 +146,9 @@ const c8 *const GUISkinColorNames[EGDC_COUNT + 1] = {
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enumeration for default sizes.
|
//! Enumeration for default sizes.
|
||||||
enum EGUI_DEFAULT_SIZE
|
enum EGUI_DEFAULT_SIZE
|
||||||
{
|
{
|
||||||
//! default with / height of scrollbar. Also width of drop-down button in comboboxes.
|
//! default with / height of scrollbar. Also width of drop-down button in comboboxes.
|
||||||
EGDS_SCROLLBAR_SIZE = 0,
|
EGDS_SCROLLBAR_SIZE = 0,
|
||||||
//! height of menu
|
//! height of menu
|
||||||
|
@ -195,10 +199,12 @@ enum EGUI_DEFAULT_SIZE
|
||||||
//! this value is not used, it only specifies the amount of default sizes
|
//! this value is not used, it only specifies the amount of default sizes
|
||||||
//! available.
|
//! available.
|
||||||
EGDS_COUNT
|
EGDS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Names for default skin sizes
|
|
||||||
const c8 *const GUISkinSizeNames[EGDS_COUNT + 1] = {
|
//! Names for default skin sizes
|
||||||
|
const c8* const GUISkinSizeNames[EGDS_COUNT+1] =
|
||||||
|
{
|
||||||
"ScrollBarSize",
|
"ScrollBarSize",
|
||||||
"MenuHeight",
|
"MenuHeight",
|
||||||
"WindowButtonWidth",
|
"WindowButtonWidth",
|
||||||
|
@ -222,11 +228,12 @@ 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
|
||||||
EGDT_MSG_BOX_OK = 0,
|
EGDT_MSG_BOX_OK = 0,
|
||||||
//! Text for the Cancel button on a message box
|
//! Text for the Cancel button on a message box
|
||||||
|
@ -246,10 +253,11 @@ enum EGUI_DEFAULT_TEXT
|
||||||
|
|
||||||
//! this value is not used, it only specifies the number of default texts
|
//! this value is not used, it only specifies the number of default texts
|
||||||
EGDT_COUNT
|
EGDT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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,12 +266,12 @@ const c8 *const GUISkinTextNames[EGDT_COUNT + 1] = {
|
||||||
"WindowButtonMaximize",
|
"WindowButtonMaximize",
|
||||||
"WindowButtonMinimize",
|
"WindowButtonMinimize",
|
||||||
"WindowButtonRestore",
|
"WindowButtonRestore",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Customizable symbols for GUI
|
//! Customizable symbols for GUI
|
||||||
enum EGUI_DEFAULT_ICON
|
enum EGUI_DEFAULT_ICON
|
||||||
{
|
{
|
||||||
//! maximize window button
|
//! maximize window button
|
||||||
EGDI_WINDOW_MAXIMIZE = 0,
|
EGDI_WINDOW_MAXIMIZE = 0,
|
||||||
//! restore window button
|
//! restore window button
|
||||||
|
@ -314,9 +322,10 @@ enum EGUI_DEFAULT_ICON
|
||||||
|
|
||||||
//! value not used, it only specifies the number of icons
|
//! value not used, it only specifies the number of icons
|
||||||
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,14 +349,14 @@ const c8 *const GUISkinIconNames[EGDI_COUNT + 1] = {
|
||||||
"collapse",
|
"collapse",
|
||||||
"file",
|
"file",
|
||||||
"directory",
|
"directory",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
// Customizable fonts
|
// Customizable fonts
|
||||||
enum EGUI_DEFAULT_FONT
|
enum EGUI_DEFAULT_FONT
|
||||||
{
|
{
|
||||||
//! For static text, edit boxes, lists and most other places
|
//! For static text, edit boxes, lists and most other places
|
||||||
EGDF_DEFAULT = 0,
|
EGDF_DEFAULT=0,
|
||||||
//! Font for buttons
|
//! Font for buttons
|
||||||
EGDF_BUTTON,
|
EGDF_BUTTON,
|
||||||
//! Font for window title bars
|
//! Font for window title bars
|
||||||
|
@ -359,21 +368,23 @@ enum EGUI_DEFAULT_FONT
|
||||||
//! this value is not used, it only specifies the amount of default fonts
|
//! this value is not used, it only specifies the amount of default fonts
|
||||||
//! available.
|
//! available.
|
||||||
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;
|
||||||
|
|
||||||
|
@ -386,27 +397,27 @@ public:
|
||||||
//! Returns a default text.
|
//! Returns a default text.
|
||||||
/** For example for Message box button captions:
|
/** For example for Message box button captions:
|
||||||
"OK", "Cancel", "Yes", "No" and so on. */
|
"OK", "Cancel", "Yes", "No" and so on. */
|
||||||
virtual const wchar_t *getDefaultText(EGUI_DEFAULT_TEXT text) const = 0;
|
virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const = 0;
|
||||||
|
|
||||||
//! Sets a default text.
|
//! Sets a default text.
|
||||||
/** For example for Message box button captions:
|
/** For example for Message box button captions:
|
||||||
"OK", "Cancel", "Yes", "No" and so on. */
|
"OK", "Cancel", "Yes", "No" and so on. */
|
||||||
virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText) = 0;
|
virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) = 0;
|
||||||
|
|
||||||
//! sets a default size
|
//! sets a default size
|
||||||
virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size) = 0;
|
virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size) = 0;
|
||||||
|
|
||||||
//! returns the default font
|
//! returns the default font
|
||||||
virtual IGUIFont *getFont(EGUI_DEFAULT_FONT which = EGDF_DEFAULT) const = 0;
|
virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const = 0;
|
||||||
|
|
||||||
//! sets a default font
|
//! sets a default font
|
||||||
virtual void setFont(IGUIFont *font, EGUI_DEFAULT_FONT which = EGDF_DEFAULT) = 0;
|
virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0;
|
||||||
|
|
||||||
//! returns the sprite bank
|
//! returns the sprite bank
|
||||||
virtual IGUISpriteBank *getSpriteBank() const = 0;
|
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||||
|
|
||||||
//! sets the sprite bank
|
//! sets the sprite bank
|
||||||
virtual void setSpriteBank(IGUISpriteBank *bank) = 0;
|
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
||||||
|
|
||||||
//! Returns a default icon
|
//! Returns a default icon
|
||||||
/** Returns the sprite index within the sprite bank */
|
/** Returns the sprite index within the sprite bank */
|
||||||
|
@ -428,9 +439,9 @@ public:
|
||||||
implementations to find out how to draw the part exactly.
|
implementations to find out how to draw the part exactly.
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void draw3DButtonPaneStandard(IGUIElement *element,
|
virtual void draw3DButtonPaneStandard(IGUIElement* element,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a pressed 3d button pane
|
//! draws a pressed 3d button pane
|
||||||
/** Used for drawing for example buttons in pressed state.
|
/** Used for drawing for example buttons in pressed state.
|
||||||
|
@ -441,9 +452,9 @@ public:
|
||||||
implementations to find out how to draw the part exactly.
|
implementations to find out how to draw the part exactly.
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void draw3DButtonPanePressed(IGUIElement *element,
|
virtual void draw3DButtonPanePressed(IGUIElement* element,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a sunken 3d pane
|
//! draws a sunken 3d pane
|
||||||
/** Used for drawing the background of edit, combo or check boxes.
|
/** Used for drawing the background of edit, combo or check boxes.
|
||||||
|
@ -457,10 +468,10 @@ public:
|
||||||
color or not be drawn at all.
|
color or not be drawn at all.
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void draw3DSunkenPane(IGUIElement *element,
|
virtual void draw3DSunkenPane(IGUIElement* element,
|
||||||
video::SColor bgcolor, bool flat, bool fillBackGround,
|
video::SColor bgcolor, bool flat, bool fillBackGround,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a window background
|
//! draws a window background
|
||||||
/** Used for drawing the background of dialogs and windows.
|
/** Used for drawing the background of dialogs and windows.
|
||||||
|
@ -476,11 +487,11 @@ public:
|
||||||
That is the area without borders and without titlebar.
|
That is the area without borders and without titlebar.
|
||||||
\return Returns rect where it would be good to draw title bar text. This will
|
\return Returns rect where it would be good to draw title bar text. This will
|
||||||
work even when checkClientArea is set to a non-null value.*/
|
work even when checkClientArea is set to a non-null value.*/
|
||||||
virtual core::rect<s32> draw3DWindowBackground(IGUIElement *element,
|
virtual core::rect<s32> draw3DWindowBackground(IGUIElement* element,
|
||||||
bool drawTitleBar, video::SColor titleBarColor,
|
bool drawTitleBar, video::SColor titleBarColor,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0,
|
const core::rect<s32>* clip=0,
|
||||||
core::rect<s32> *checkClientArea = 0) = 0;
|
core::rect<s32>* checkClientArea=0) = 0;
|
||||||
|
|
||||||
//! draws a standard 3d menu pane
|
//! draws a standard 3d menu pane
|
||||||
/** Used for drawing for menus and context menus.
|
/** Used for drawing for menus and context menus.
|
||||||
|
@ -491,9 +502,9 @@ public:
|
||||||
implementations to find out how to draw the part exactly.
|
implementations to find out how to draw the part exactly.
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void draw3DMenuPane(IGUIElement *element,
|
virtual void draw3DMenuPane(IGUIElement* element,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a standard 3d tool bar
|
//! draws a standard 3d tool bar
|
||||||
/** Used for drawing for toolbars and menus.
|
/** Used for drawing for toolbars and menus.
|
||||||
|
@ -502,9 +513,9 @@ public:
|
||||||
implementations to find out how to draw the part exactly.
|
implementations to find out how to draw the part exactly.
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void draw3DToolBar(IGUIElement *element,
|
virtual void draw3DToolBar(IGUIElement* element,
|
||||||
const core::rect<s32> &rect,
|
const core::rect<s32>& rect,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a tab button
|
//! draws a tab button
|
||||||
/** Used for drawing for tab buttons on top of tabs.
|
/** Used for drawing for tab buttons on top of tabs.
|
||||||
|
@ -515,8 +526,8 @@ public:
|
||||||
\param rect: Defining area where to draw.
|
\param rect: Defining area where to draw.
|
||||||
\param clip: Clip area.
|
\param clip: Clip area.
|
||||||
\param alignment Alignment of GUI element. */
|
\param alignment Alignment of GUI element. */
|
||||||
virtual void draw3DTabButton(IGUIElement *element, bool active,
|
virtual void draw3DTabButton(IGUIElement* element, bool active,
|
||||||
const core::rect<s32> &rect, const core::rect<s32> *clip = 0, gui::EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT) = 0;
|
const core::rect<s32>& rect, const core::rect<s32>* clip=0, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) = 0;
|
||||||
|
|
||||||
//! draws a tab control body
|
//! draws a tab control body
|
||||||
/** \param element: Pointer to the element which wishes to draw this. This parameter
|
/** \param element: Pointer to the element which wishes to draw this. This parameter
|
||||||
|
@ -528,8 +539,8 @@ public:
|
||||||
\param clip: Clip area.
|
\param clip: Clip area.
|
||||||
\param tabHeight Height of tab.
|
\param tabHeight Height of tab.
|
||||||
\param alignment Alignment of GUI element. */
|
\param alignment Alignment of GUI element. */
|
||||||
virtual void draw3DTabBody(IGUIElement *element, bool border, bool background,
|
virtual void draw3DTabBody(IGUIElement* element, bool border, bool background,
|
||||||
const core::rect<s32> &rect, const core::rect<s32> *clip = 0, s32 tabHeight = -1, gui::EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT) = 0;
|
const core::rect<s32>& rect, const core::rect<s32>* clip=0, s32 tabHeight=-1, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT ) = 0;
|
||||||
|
|
||||||
//! draws an icon, usually from the skin's sprite bank
|
//! draws an icon, usually from the skin's sprite bank
|
||||||
/** \param element: Pointer to the element which wishes to draw this icon.
|
/** \param element: Pointer to the element which wishes to draw this icon.
|
||||||
|
@ -541,9 +552,9 @@ public:
|
||||||
\param currenttime: The present time, used to calculate the frame number
|
\param currenttime: The present time, used to calculate the frame number
|
||||||
\param loop: Whether the animation should loop or not
|
\param loop: Whether the animation should loop or not
|
||||||
\param clip: Clip area. */
|
\param clip: Clip area. */
|
||||||
virtual void drawIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
|
virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
|
||||||
const core::position2di position, u32 starttime = 0, u32 currenttime = 0,
|
const core::position2di position, u32 starttime=0, u32 currenttime=0,
|
||||||
bool loop = false, const core::rect<s32> *clip = 0) = 0;
|
bool loop=false, const core::rect<s32>* clip=0) = 0;
|
||||||
|
|
||||||
//! draws a 2d rectangle.
|
//! draws a 2d rectangle.
|
||||||
/** \param element: Pointer to the element which wishes to draw this icon.
|
/** \param element: Pointer to the element which wishes to draw this icon.
|
||||||
|
@ -554,12 +565,16 @@ public:
|
||||||
\param pos: Position of the rectangle.
|
\param pos: Position of the rectangle.
|
||||||
\param clip: Pointer to rectangle against which the rectangle will be clipped.
|
\param clip: Pointer to rectangle against which the rectangle will be clipped.
|
||||||
If the pointer is null, no clipping will be performed. */
|
If the pointer is null, no clipping will be performed. */
|
||||||
virtual void draw2DRectangle(IGUIElement *element, const video::SColor &color,
|
virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color,
|
||||||
const core::rect<s32> &pos, const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>& pos, const core::rect<s32>* clip = 0) = 0;
|
||||||
|
|
||||||
//! get the type of this skin
|
//! get the type of this skin
|
||||||
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"
|
||||||
|
@ -14,7 +15,7 @@ namespace irr
|
||||||
|
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
||||||
namespace gui
|
namespace gui
|
||||||
|
@ -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,35 +55,37 @@ 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.
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
//! Returns the array of animated sprites within the sprite bank
|
//! Returns the array of animated sprites within the sprite bank
|
||||||
virtual core::array<SGUISprite> &getSprites() = 0;
|
virtual core::array< SGUISprite >& getSprites() = 0;
|
||||||
|
|
||||||
//! Returns the number of textures held by the sprite bank
|
//! Returns the number of textures held by the sprite bank
|
||||||
virtual u32 getTextureCount() const = 0;
|
virtual u32 getTextureCount() const = 0;
|
||||||
|
|
||||||
//! Gets the texture with the specified index
|
//! Gets the texture with the specified index
|
||||||
virtual video::ITexture *getTexture(u32 index) const = 0;
|
virtual video::ITexture* getTexture(u32 index) const = 0;
|
||||||
|
|
||||||
//! Adds a texture to the sprite bank
|
//! Adds a texture to the sprite bank
|
||||||
virtual void addTexture(video::ITexture *texture) = 0;
|
virtual void addTexture(video::ITexture* texture) = 0;
|
||||||
|
|
||||||
//! Changes one of the textures in the sprite bank
|
//! Changes one of the textures in the sprite bank
|
||||||
virtual void setTexture(u32 index, video::ITexture *texture) = 0;
|
virtual void setTexture(u32 index, video::ITexture* texture) = 0;
|
||||||
|
|
||||||
//! Add the texture and use it for a single non-animated sprite.
|
//! Add the texture and use it for a single non-animated sprite.
|
||||||
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
||||||
\returns The index of the sprite or -1 on failure */
|
\returns The index of the sprite or -1 on failure */
|
||||||
virtual s32 addTextureAsSprite(video::ITexture *texture) = 0;
|
virtual s32 addTextureAsSprite(video::ITexture* texture) = 0;
|
||||||
|
|
||||||
//! Clears sprites, rectangles and textures
|
//! Clears sprites, rectangles and textures
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
@ -103,11 +103,11 @@ public:
|
||||||
\param loop When true animations are looped
|
\param loop When true animations are looped
|
||||||
\param center When true pivot is set to the sprite-center. So it affects pos.
|
\param center When true pivot is set to the sprite-center. So it affects pos.
|
||||||
*/
|
*/
|
||||||
virtual void draw2DSprite(u32 index, const core::position2di &pos,
|
virtual void draw2DSprite(u32 index, const core::position2di& pos,
|
||||||
const core::rect<s32> *clip = 0,
|
const core::rect<s32>* clip=0,
|
||||||
const video::SColor &color = video::SColor(255, 255, 255, 255),
|
const video::SColor& color= video::SColor(255,255,255,255),
|
||||||
u32 starttime = 0, u32 currenttime = 0,
|
u32 starttime=0, u32 currenttime=0,
|
||||||
bool loop = true, bool center = false) = 0;
|
bool loop=true, bool center=false) = 0;
|
||||||
|
|
||||||
//! Draws a sprite in 2d with destination rectangle and colors
|
//! Draws a sprite in 2d with destination rectangle and colors
|
||||||
/**
|
/**
|
||||||
|
@ -120,19 +120,23 @@ public:
|
||||||
(same as currenttime-starttime in other draw2DSprite function)
|
(same as currenttime-starttime in other draw2DSprite function)
|
||||||
\param loop When true animations are looped
|
\param loop When true animations are looped
|
||||||
*/
|
*/
|
||||||
virtual void draw2DSprite(u32 index, const core::rect<s32> &destRect,
|
virtual void draw2DSprite(u32 index, const core::rect<s32>& destRect,
|
||||||
const core::rect<s32> *clip = 0,
|
const core::rect<s32>* clip=0,
|
||||||
const video::SColor *const colors = 0,
|
const video::SColor * const colors=0,
|
||||||
u32 timeTicks = 0,
|
u32 timeTicks = 0,
|
||||||
bool loop = true) = 0;
|
bool loop=true) = 0;
|
||||||
|
|
||||||
//! Draws a sprite batch in 2d using an array of positions and a color
|
//! Draws a sprite batch in 2d using an array of positions and a color
|
||||||
virtual void draw2DSpriteBatch(const core::array<u32> &indices, const core::array<core::position2di> &pos,
|
virtual void draw2DSpriteBatch(const core::array<u32>& indices, const core::array<core::position2di>& pos,
|
||||||
const core::rect<s32> *clip = 0,
|
const core::rect<s32>* clip=0,
|
||||||
const video::SColor &color = video::SColor(255, 255, 255, 255),
|
const video::SColor& color= video::SColor(255,255,255,255),
|
||||||
u32 starttime = 0, u32 currenttime = 0,
|
u32 starttime=0, u32 currenttime=0,
|
||||||
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"
|
||||||
|
@ -11,29 +12,30 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIFont;
|
class IGUIFont;
|
||||||
|
|
||||||
|
//! Multi or single line text label.
|
||||||
|
class IGUIStaticText : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Multi or single line text label.
|
|
||||||
class IGUIStaticText : public IGUIElement
|
|
||||||
{
|
|
||||||
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.
|
||||||
\param font: New font to set. */
|
\param font: New font to set. */
|
||||||
virtual void setOverrideFont(IGUIFont *font = 0) = 0;
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
|
|
||||||
//! Gets the override font (if any)
|
//! Gets the override font (if any)
|
||||||
/** \return The override font (may be 0) */
|
/** \return The override font (may be 0) */
|
||||||
virtual IGUIFont *getOverrideFont(void) const = 0;
|
virtual IGUIFont* getOverrideFont(void) const = 0;
|
||||||
|
|
||||||
//! Get the font which is used right now for drawing
|
//! Get the font which is used right now for drawing
|
||||||
/** Currently this is the override font when one is set and the
|
/** Currently this is the override font when one is set and the
|
||||||
font of the active skin otherwise */
|
font of the active skin otherwise */
|
||||||
virtual IGUIFont *getActiveFont() const = 0;
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
|
|
||||||
//! Sets another color for the text.
|
//! Sets another color for the text.
|
||||||
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
||||||
|
@ -127,7 +129,11 @@ public:
|
||||||
|
|
||||||
//! Checks whether the text in this element should be interpreted as right-to-left
|
//! Checks whether the text in this element should be interpreted as right-to-left
|
||||||
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"
|
||||||
|
@ -12,30 +13,31 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUITab;
|
class IGUITab;
|
||||||
|
|
||||||
|
//! A standard tab control
|
||||||
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
|
\li EGET_TAB_CHANGED
|
||||||
|
*/
|
||||||
|
class IGUITabControl : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! A standard tab control
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_TAB_CHANGED
|
|
||||||
*/
|
|
||||||
class IGUITabControl : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
//! 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;
|
||||||
|
|
||||||
//! Adds an existing tab
|
//! Adds an existing tab
|
||||||
/** Note that it will also add the tab as a child of this TabControl.
|
/** Note that it will also add the tab as a child of this TabControl.
|
||||||
\return Index of added tab or -1 for failure*/
|
\return Index of added tab or -1 for failure*/
|
||||||
virtual s32 addTab(IGUITab *tab) = 0;
|
virtual s32 addTab(IGUITab* tab) = 0;
|
||||||
|
|
||||||
//! Insert the tab at the given index
|
//! Insert the tab at the given index
|
||||||
/** \return The tab on success or NULL on failure. */
|
/** \return The tab on success or NULL on failure. */
|
||||||
virtual IGUITab *insertTab(s32 idx, const wchar_t *caption, s32 id = -1) = 0;
|
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Insert an existing tab
|
//! Insert an existing tab
|
||||||
/** Note that it will also add the tab as a child of this TabControl.
|
/** Note that it will also add the tab as a child of this TabControl.
|
||||||
|
@ -47,7 +49,7 @@ public:
|
||||||
When true it reserves space for the index, doesn't move but replaces tabs
|
When true it reserves space for the index, doesn't move but replaces tabs
|
||||||
and it doesn't change the active tab.
|
and it doesn't change the active tab.
|
||||||
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
||||||
virtual s32 insertTab(s32 idx, IGUITab *tab, bool serializationMode = false) = 0;
|
virtual s32 insertTab(s32 idx, IGUITab* tab, bool serializationMode=false) = 0;
|
||||||
|
|
||||||
//! Removes a tab from the tabcontrol
|
//! Removes a tab from the tabcontrol
|
||||||
virtual void removeTab(s32 idx) = 0;
|
virtual void removeTab(s32 idx) = 0;
|
||||||
|
@ -62,7 +64,7 @@ public:
|
||||||
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
||||||
\return Returns pointer to the Tab. Returns 0 if no tab
|
\return Returns pointer to the Tab. Returns 0 if no tab
|
||||||
is corresponding to this tab. */
|
is corresponding to this tab. */
|
||||||
virtual IGUITab *getTab(s32 idx) const = 0;
|
virtual IGUITab* getTab(s32 idx) const = 0;
|
||||||
|
|
||||||
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
||||||
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
||||||
|
@ -89,45 +91,46 @@ public:
|
||||||
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
||||||
|
|
||||||
//! Set the height of the tabs
|
//! Set the height of the tabs
|
||||||
virtual void setTabHeight(s32 height) = 0;
|
virtual void setTabHeight( s32 height ) = 0;
|
||||||
|
|
||||||
//! Get the height of the tabs
|
//! Get the height of the tabs
|
||||||
/** return Returns the height of the tabs */
|
/** return Returns the height of the tabs */
|
||||||
virtual s32 getTabHeight() const = 0;
|
virtual s32 getTabHeight() const = 0;
|
||||||
|
|
||||||
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
||||||
virtual void setTabMaxWidth(s32 width) = 0;
|
virtual void setTabMaxWidth(s32 width ) = 0;
|
||||||
|
|
||||||
//! get the maximal width of a tab
|
//! get the maximal width of a tab
|
||||||
virtual s32 getTabMaxWidth() const = 0;
|
virtual s32 getTabMaxWidth() const = 0;
|
||||||
|
|
||||||
//! Set the alignment of the tabs
|
//! Set the alignment of the tabs
|
||||||
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
||||||
virtual void setTabVerticalAlignment(gui::EGUI_ALIGNMENT alignment) = 0;
|
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0;
|
||||||
|
|
||||||
//! Get the alignment of the tabs
|
//! Get the alignment of the tabs
|
||||||
/** return Returns the alignment of the tabs */
|
/** return Returns the alignment of the tabs */
|
||||||
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
||||||
|
|
||||||
//! Set the extra width added to tabs on each side of the text
|
//! Set the extra width added to tabs on each side of the text
|
||||||
virtual void setTabExtraWidth(s32 extraWidth) = 0;
|
virtual void setTabExtraWidth( s32 extraWidth ) = 0;
|
||||||
|
|
||||||
//! Get the extra width added to tabs on each side of the text
|
//! Get the extra width added to tabs on each side of the text
|
||||||
/** return Returns the extra width of the tabs */
|
/** return Returns the extra width of the tabs */
|
||||||
virtual s32 getTabExtraWidth() const = 0;
|
virtual s32 getTabExtraWidth() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! A tab-page, onto which other gui elements could be added.
|
||||||
|
/** IGUITab refers mostly to the page itself, but also carries some data about the tab in the tabbar of an IGUITabControl. */
|
||||||
|
class IGUITab : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! A tab-page, onto which other gui elements could be added.
|
|
||||||
/** IGUITab refers mostly to the page itself, but also carries some data about the tab in the tabbar of an IGUITabControl. */
|
|
||||||
class IGUITab : public IGUIElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
//! 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;
|
||||||
|
|
||||||
//! sets the color of the background, if it should be drawn.
|
//! sets the color of the background, if it should be drawn.
|
||||||
virtual void setBackgroundColor(video::SColor c) = 0;
|
virtual void setBackgroundColor(video::SColor c) = 0;
|
||||||
|
@ -143,7 +146,10 @@ public:
|
||||||
|
|
||||||
//! gets the color of the text
|
//! gets the color of the text
|
||||||
virtual video::SColor getTextColor() const = 0;
|
virtual video::SColor getTextColor() 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_TOOL_BAR_H_INCLUDED__
|
||||||
|
#define __I_GUI_TOOL_BAR_H_INCLUDED__
|
||||||
|
|
||||||
#include "IGUIElement.h"
|
#include "IGUIElement.h"
|
||||||
|
|
||||||
|
@ -10,25 +11,30 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIButton;
|
class IGUIButton;
|
||||||
|
|
||||||
|
//! Stays at the top of its parent like the menu bar and contains tool buttons
|
||||||
|
class IGUIToolBar : public IGUIElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Stays at the top of its parent like the menu bar and contains tool buttons
|
|
||||||
class IGUIToolBar : public IGUIElement
|
|
||||||
{
|
|
||||||
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,
|
||||||
video::ITexture *img = 0, video::ITexture *pressedimg = 0,
|
video::ITexture* img=0, video::ITexture* pressedimg=0,
|
||||||
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
|
||||||
|
|
||||||
|
|
140
include/IImage.h
140
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,8 +52,20 @@ 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
|
||||||
{
|
{
|
||||||
return Size;
|
return Size;
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -157,7 +178,7 @@ public:
|
||||||
\return Pointer to the image data. What type of data is pointed to
|
\return Pointer to the image data. What type of data is pointed to
|
||||||
depends on the color format of the image. For example if the color
|
depends on the color format of the image. For example if the color
|
||||||
format is ECF_A8R8G8B8, it is of u32. */
|
format is ECF_A8R8G8B8, it is of u32. */
|
||||||
void *getData() const
|
void* getData() const
|
||||||
{
|
{
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
@ -170,38 +191,43 @@ 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)
|
||||||
result.Height >>= 1;
|
result.Height>>=1;
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
if (result.Width == 1 && result.Height == 1 && i < mipmapLevel)
|
if ( result.Width == 1 && result.Height == 1 && i < mipmapLevel )
|
||||||
return core::dimension2du(0, 0);
|
return core::dimension2du(0,0);
|
||||||
}
|
}
|
||||||
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.
|
||||||
There is no level 0 - use getData to get the original image data.
|
There is no level 0 - use getData to get the original image data.
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
|
@ -211,7 +237,7 @@ public:
|
||||||
dataSize += getDataSizeFromFormat(Format, mipSize.Width, mipSize.Height);
|
dataSize += getDataSizeFromFormat(Format, mipSize.Width, mipSize.Height);
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
if (mipSize.Width == 1 && mipSize.Height == 1 && i < mipLevel)
|
if ( mipSize.Width == 1 && mipSize.Height == 1 && i < mipLevel)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,26 +256,33 @@ public:
|
||||||
will by copied internally.
|
will by copied internally.
|
||||||
\param deleteMemory Whether the memory is deallocated upon
|
\param deleteMemory Whether the memory is deallocated upon
|
||||||
destruction. */
|
destruction. */
|
||||||
void setMipMapsData(void *data, bool ownForeignMemory)
|
void setMipMapsData(void* data, bool ownForeignMemory)
|
||||||
|
{
|
||||||
|
if (data != MipMapsData)
|
||||||
|
{
|
||||||
|
if (DeleteMipMapsMemory)
|
||||||
{
|
{
|
||||||
if (data != MipMapsData) {
|
|
||||||
if (DeleteMipMapsMemory) {
|
|
||||||
delete[] MipMapsData;
|
delete[] MipMapsData;
|
||||||
|
|
||||||
DeleteMipMapsMemory = false;
|
DeleteMipMapsMemory = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data) {
|
if (data)
|
||||||
if (ownForeignMemory) {
|
{
|
||||||
MipMapsData = static_cast<u8 *>(data);
|
if (ownForeignMemory)
|
||||||
|
{
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,50 +309,51 @@ public:
|
||||||
virtual SColor getPixel(u32 x, u32 y) const = 0;
|
virtual SColor getPixel(u32 x, u32 y) const = 0;
|
||||||
|
|
||||||
//! Sets a pixel
|
//! Sets a pixel
|
||||||
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false) = 0;
|
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
|
||||||
|
|
||||||
//! Copies this surface into another, if it has the exact same size and format.
|
//! Copies this surface into another, if it has the exact same size and format.
|
||||||
/** NOTE: mipmaps are ignored
|
/** NOTE: mipmaps are ignored
|
||||||
\return True if it was copied, false otherwise.
|
\return True if it was copied, false otherwise.
|
||||||
*/
|
*/
|
||||||
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format = ECF_A8R8G8B8, u32 pitch = 0) const = 0;
|
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) const = 0;
|
||||||
|
|
||||||
//! Copies the image into the target, scaling the image to fit
|
//! Copies the image into the target, scaling the image to fit
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyToScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format = ECF_A8R8G8B8, u32 pitch = 0) = 0;
|
virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
|
||||||
|
|
||||||
//! Copies the image into the target, scaling the image to fit
|
//! Copies the image into the target, scaling the image to fit
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyToScaling(IImage *target) = 0;
|
virtual void copyToScaling(IImage* target) =0;
|
||||||
|
|
||||||
//! copies this surface into another
|
//! copies this surface into another
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyTo(IImage *target, const core::position2d<s32> &pos = core::position2d<s32>(0, 0)) = 0;
|
virtual void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0)) =0;
|
||||||
|
|
||||||
//! copies this surface into another
|
//! copies this surface into another
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyTo(IImage *target, const core::position2d<s32> &pos, const core::rect<s32> &sourceRect, const core::rect<s32> *clipRect = 0) = 0;
|
virtual void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0) =0;
|
||||||
|
|
||||||
//! copies this surface into another, using the alpha mask and cliprect and a color to add with
|
//! copies this surface into another, using the alpha mask and cliprect and a color to add with
|
||||||
/** NOTE: mipmaps are ignored
|
/** NOTE: mipmaps are ignored
|
||||||
\param combineAlpha - When true then combine alpha channels. When false replace target image alpha with source image alpha.
|
\param combineAlpha - When true then combine alpha channels. When false replace target image alpha with source image alpha.
|
||||||
*/
|
*/
|
||||||
virtual void copyToWithAlpha(IImage *target, const core::position2d<s32> &pos,
|
virtual void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos,
|
||||||
const core::rect<s32> &sourceRect, const SColor &color,
|
const core::rect<s32>& sourceRect, const SColor &color,
|
||||||
const core::rect<s32> *clipRect = 0,
|
const core::rect<s32>* clipRect = 0,
|
||||||
bool combineAlpha = false) = 0;
|
bool combineAlpha=false) =0;
|
||||||
|
|
||||||
//! copies this surface into another, scaling it to fit, applying a box filter
|
//! copies this surface into another, scaling it to fit, applying a box filter
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyToScalingBoxFilter(IImage *target, s32 bias = 0, bool blend = false) = 0;
|
virtual void copyToScalingBoxFilter(IImage* target, s32 bias = 0, bool blend = false) = 0;
|
||||||
|
|
||||||
//! fills the surface with given color
|
//! fills the surface with given color
|
||||||
virtual void fill(const SColor &color) = 0;
|
virtual void fill(const SColor &color) =0;
|
||||||
|
|
||||||
//! 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:
|
||||||
|
@ -376,7 +412,8 @@ public:
|
||||||
//! 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 +429,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:
|
||||||
|
@ -410,15 +448,23 @@ protected:
|
||||||
ECOLOR_FORMAT Format;
|
ECOLOR_FORMAT Format;
|
||||||
core::dimension2d<u32> Size;
|
core::dimension2d<u32> Size;
|
||||||
|
|
||||||
u8 *Data;
|
u8* Data;
|
||||||
u8 *MipMapsData;
|
u8* MipMapsData;
|
||||||
|
|
||||||
u32 BytesPerPixel;
|
u32 BytesPerPixel;
|
||||||
u32 Pitch;
|
u32 Pitch;
|
||||||
|
|
||||||
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"
|
||||||
|
@ -14,7 +15,7 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
|
@ -27,23 +28,28 @@ 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.
|
||||||
\return True if file seems to be loadable. */
|
\return True if file seems to be loadable. */
|
||||||
virtual bool isALoadableFileExtension(const io::path &filename) const = 0;
|
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||||
|
|
||||||
//! Check if the file might be loaded by this class
|
//! Check if the file might be loaded by this class
|
||||||
/** Check might look into the file.
|
/** Check might look into the file.
|
||||||
\param file File handle to check.
|
\param file File handle to check.
|
||||||
\return True if file seems to be loadable. */
|
\return True if file seems to be loadable. */
|
||||||
virtual bool isALoadableFileFormat(io::IReadFile *file) const = 0;
|
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
|
||||||
|
|
||||||
//! Creates a surface from the file
|
//! Creates a surface from the file
|
||||||
/** \param file File handle to check.
|
/** \param file File handle to check.
|
||||||
\return Pointer to newly created image, or 0 upon error. */
|
\return Pointer to newly created image, or 0 upon error. */
|
||||||
virtual IImage *loadImage(io::IReadFile *file) const = 0;
|
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -12,12 +13,13 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IWriteFile;
|
class IWriteFile;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
namespace video
|
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
|
||||||
|
@ -26,7 +28,7 @@ public:
|
||||||
//! Check if this writer can write a file with the given extension
|
//! Check if this writer can write a file with the given extension
|
||||||
/** \param filename Name of the file to check.
|
/** \param filename Name of the file to check.
|
||||||
\return True if file extension specifies a writable type. */
|
\return True if file extension specifies a writable type. */
|
||||||
virtual bool isAWriteableFileExtension(const io::path &filename) const = 0;
|
virtual bool isAWriteableFileExtension(const io::path& filename) const = 0;
|
||||||
|
|
||||||
//! Write image to file
|
//! Write image to file
|
||||||
/** \param file File handle to write to.
|
/** \param file File handle to write to.
|
||||||
|
@ -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"
|
||||||
|
@ -20,32 +21,33 @@ namespace video
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
class IIndexBuffer : public virtual IReferenceCounted
|
class IIndexBuffer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void *getData() = 0;
|
|
||||||
|
|
||||||
virtual video::E_INDEX_TYPE getType() const = 0;
|
virtual void* getData() =0;
|
||||||
virtual void setType(video::E_INDEX_TYPE IndexType) = 0;
|
|
||||||
|
|
||||||
virtual u32 stride() const = 0;
|
virtual video::E_INDEX_TYPE getType() const =0;
|
||||||
|
virtual void setType(video::E_INDEX_TYPE IndexType) =0;
|
||||||
|
|
||||||
virtual u32 size() const = 0;
|
virtual u32 stride() const =0;
|
||||||
virtual void push_back(const u32 &element) = 0;
|
|
||||||
virtual u32 operator[](u32 index) const = 0;
|
|
||||||
virtual u32 getLast() = 0;
|
|
||||||
virtual void setValue(u32 index, u32 value) = 0;
|
|
||||||
virtual void set_used(u32 usedNow) = 0;
|
|
||||||
virtual void reallocate(u32 new_size) = 0;
|
|
||||||
virtual u32 allocated_size() const = 0;
|
|
||||||
|
|
||||||
virtual void *pointer() = 0;
|
virtual u32 size() const =0;
|
||||||
|
virtual void push_back (const u32 &element) =0;
|
||||||
|
virtual u32 operator [](u32 index) const =0;
|
||||||
|
virtual u32 getLast() =0;
|
||||||
|
virtual void setValue(u32 index, u32 value) =0;
|
||||||
|
virtual void set_used(u32 usedNow) =0;
|
||||||
|
virtual void reallocate(u32 new_size) =0;
|
||||||
|
virtual u32 allocated_size() const=0;
|
||||||
|
|
||||||
|
virtual void* pointer() =0;
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0;
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) = 0;
|
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0;
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
virtual void setDirty() = 0;
|
virtual void setDirty() = 0;
|
||||||
|
@ -53,7 +55,11 @@ public:
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID() 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() {}
|
||||||
|
|
||||||
|
@ -58,7 +61,7 @@ public:
|
||||||
is just an informational text, set it to ELL_INFORMATION. Texts are
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
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, ELOG_LEVEL ll = ELL_INFORMATION) = 0;
|
virtual void log(const c8* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
|
|
||||||
//! Prints out a text into the log
|
//! Prints out a text into the log
|
||||||
/** \param text: Text to print out.
|
/** \param text: Text to print out.
|
||||||
|
@ -69,7 +72,31 @@ public:
|
||||||
is just an informational text, set it to ELL_INFORMATION. Texts are
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
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
|
||||||
|
@ -46,8 +48,8 @@ public:
|
||||||
fogenable.
|
fogenable.
|
||||||
\param services: Interface providing some methods for changing
|
\param services: Interface providing some methods for changing
|
||||||
advanced, internal states of a IVideoDriver. */
|
advanced, internal states of a IVideoDriver. */
|
||||||
virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial,
|
virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
|
||||||
bool resetAllRenderstates, IMaterialRendererServices *services) {}
|
bool resetAllRenderstates, IMaterialRendererServices* services) {}
|
||||||
|
|
||||||
//! Called every time before a new bunch of geometry is being drawn using this material with for example drawIndexedTriangleList() call.
|
//! Called every time before a new bunch of geometry is being drawn using this material with for example drawIndexedTriangleList() call.
|
||||||
/** OnSetMaterial should normally only be called if the renderer decides
|
/** OnSetMaterial should normally only be called if the renderer decides
|
||||||
|
@ -67,7 +69,7 @@ public:
|
||||||
example if he doesn't support the specified vertex type. This is
|
example if he doesn't support the specified vertex type. This is
|
||||||
actually done in D3D9 when using a normal mapped material with
|
actually done in D3D9 when using a normal mapped material with
|
||||||
a vertex type other than EVT_TANGENTS. */
|
a vertex type other than EVT_TANGENTS. */
|
||||||
virtual bool OnRender(IMaterialRendererServices *service, E_VERTEX_TYPE vtxtype) { return true; }
|
virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) { return true; }
|
||||||
|
|
||||||
//! Called by the IVideoDriver to unset this material.
|
//! Called by the IVideoDriver to unset this material.
|
||||||
/** Called during the IVideoDriver::setMaterial() call before the new
|
/** Called during the IVideoDriver::setMaterial() call before the new
|
||||||
|
@ -94,8 +96,12 @@ public:
|
||||||
//! Access the callback provided by the users when creating shader materials
|
//! Access the callback provided by the users when creating shader materials
|
||||||
/** \returns Returns either the users provided callback or 0 when no such
|
/** \returns Returns either the users provided callback or 0 when no such
|
||||||
callback exists. Non-shader materials will always return 0. */
|
callback exists. Non-shader materials will always return 0. */
|
||||||
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() {}
|
||||||
|
|
||||||
|
@ -31,12 +34,12 @@ public:
|
||||||
\param lastMaterial The material used until now.
|
\param lastMaterial The material used until now.
|
||||||
\param resetAllRenderstates Set to true if all renderstates should be
|
\param resetAllRenderstates Set to true if all renderstates should be
|
||||||
set, regardless of their current state. */
|
set, regardless of their current state. */
|
||||||
virtual void setBasicRenderStates(const SMaterial &material,
|
virtual void setBasicRenderStates(const SMaterial& material,
|
||||||
const SMaterial &lastMaterial,
|
const SMaterial& lastMaterial,
|
||||||
bool resetAllRenderstates) = 0;
|
bool resetAllRenderstates) = 0;
|
||||||
|
|
||||||
//! Return an index constant for the vertex shader based on a uniform variable name.
|
//! Return an index constant for the vertex shader based on a uniform variable name.
|
||||||
virtual s32 getVertexShaderConstantID(const c8 *name) = 0;
|
virtual s32 getVertexShaderConstantID(const c8* name) = 0;
|
||||||
|
|
||||||
//! Sets a value for a vertex shader uniform variable.
|
//! Sets a value for a vertex shader uniform variable.
|
||||||
/** \param index Index of the variable (as received from getVertexShaderConstantID)
|
/** \param index Index of the variable (as received from getVertexShaderConstantID)
|
||||||
|
@ -44,16 +47,27 @@ public:
|
||||||
\param count Amount of floats in array.
|
\param count Amount of floats in array.
|
||||||
\return True if successful.
|
\return True if successful.
|
||||||
*/
|
*/
|
||||||
virtual bool setVertexShaderConstant(s32 index, const f32 *floats, int count) = 0;
|
virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) = 0;
|
||||||
|
|
||||||
//! Int interface for the above.
|
//! Int interface for the above.
|
||||||
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.
|
||||||
virtual bool setVertexShaderConstant(s32 index, const u32 *ints, int count) = 0;
|
/* 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;
|
||||||
|
|
||||||
|
//! 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;
|
||||||
|
|
||||||
//! Sets a value for the given pixel shader uniform variable
|
//! Sets a value for the given pixel shader uniform variable
|
||||||
/** This can be used if you used a high level shader language like GLSL
|
/** This can be used if you used a high level shader language like GLSL
|
||||||
|
@ -63,18 +77,32 @@ public:
|
||||||
\param floats Pointer to array of floats
|
\param floats Pointer to array of floats
|
||||||
\param count Amount of floats in array.
|
\param count Amount of floats in array.
|
||||||
\return True if successful. */
|
\return True if successful. */
|
||||||
virtual bool setPixelShaderConstant(s32 index, const f32 *floats, int count) = 0;
|
virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) = 0;
|
||||||
|
|
||||||
//! Int interface for the above.
|
//! Int interface for the above.
|
||||||
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.
|
||||||
virtual bool setPixelShaderConstant(s32 index, const u32 *ints, int count) = 0;
|
/* 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;
|
||||||
|
|
||||||
|
//! 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
|
||||||
|
@ -11,10 +12,10 @@ namespace irr
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Interface providing read access to a memory read file.
|
//! Interface providing read access to a memory read file.
|
||||||
class IMemoryReadFile : public IReadFile
|
class IMemoryReadFile : public IReadFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Get direct access to internal buffer of memory block used as file.
|
//! Get direct access to internal buffer of memory block used as file.
|
||||||
/** It's usually better to use the IReadFile functions to access
|
/** It's usually better to use the IReadFile functions to access
|
||||||
the file content. But as that buffer exist over the full life-time
|
the file content. But as that buffer exist over the full life-time
|
||||||
|
@ -22,6 +23,9 @@ public:
|
||||||
data-copy which read() needs.
|
data-copy which read() needs.
|
||||||
*/
|
*/
|
||||||
virtual const void *getBuffer() const = 0;
|
virtual const void *getBuffer() 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_MESH_H_INCLUDED__
|
||||||
|
#define __I_MESH_H_INCLUDED__
|
||||||
|
|
||||||
#include "IReferenceCounted.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SMaterial.h"
|
#include "SMaterial.h"
|
||||||
|
@ -12,11 +13,11 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Possible types of meshes.
|
//! Possible types of meshes.
|
||||||
// Note: Was previously only used in IAnimatedMesh so it still has the "animated" in the name.
|
// Note: Was previously only used in IAnimatedMesh so it still has the "animated" in the name.
|
||||||
// But can now be used for all mesh-types as we need those casts as well.
|
// But can now be used for all mesh-types as we need those casts as well.
|
||||||
enum E_ANIMATED_MESH_TYPE
|
enum E_ANIMATED_MESH_TYPE
|
||||||
{
|
{
|
||||||
//! Unknown animated mesh type.
|
//! Unknown animated mesh type.
|
||||||
EAMT_UNKNOWN = 0,
|
EAMT_UNKNOWN = 0,
|
||||||
|
|
||||||
|
@ -57,18 +58,20 @@ enum E_ANIMATED_MESH_TYPE
|
||||||
|
|
||||||
//! generic non-animated mesh
|
//! generic non-animated mesh
|
||||||
EAMT_STATIC
|
EAMT_STATIC
|
||||||
};
|
};
|
||||||
|
|
||||||
class IMeshBuffer;
|
|
||||||
|
|
||||||
//! Class which holds the geometry of an object.
|
class IMeshBuffer;
|
||||||
/** An IMesh is nothing more than a collection of some mesh buffers
|
|
||||||
(IMeshBuffer). SMesh is a simple implementation of an IMesh.
|
//! Class which holds the geometry of an object.
|
||||||
A mesh is usually added to an IMeshSceneNode in order to be rendered.
|
/** An IMesh is nothing more than a collection of some mesh buffers
|
||||||
*/
|
(IMeshBuffer). SMesh is a simple implementation of an IMesh.
|
||||||
class IMesh : public virtual IReferenceCounted
|
A mesh is usually added to an IMeshSceneNode in order to be rendered.
|
||||||
{
|
*/
|
||||||
public:
|
class IMesh : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
@ -78,34 +81,34 @@ public:
|
||||||
getMeshBufferCount() - 1;
|
getMeshBufferCount() - 1;
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such
|
\return Pointer to the mesh buffer or 0 if there is no such
|
||||||
mesh buffer. */
|
mesh buffer. */
|
||||||
virtual IMeshBuffer *getMeshBuffer(u32 nr) const = 0;
|
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
||||||
|
|
||||||
//! Get pointer to a mesh buffer which fits a material
|
//! Get pointer to a mesh buffer which fits a material
|
||||||
/** \param material: material to search for
|
/** \param material: material to search for
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such
|
\return Pointer to the mesh buffer or 0 if there is no such
|
||||||
mesh buffer. */
|
mesh buffer. */
|
||||||
virtual IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const = 0;
|
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const = 0;
|
||||||
|
|
||||||
//! Get an axis aligned bounding box of the mesh.
|
//! Get an axis aligned bounding box of the mesh.
|
||||||
/** \return Bounding box of this mesh. */
|
/** \return Bounding box of this mesh. */
|
||||||
virtual const core::aabbox3d<f32> &getBoundingBox() const = 0;
|
virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
|
||||||
|
|
||||||
//! Set user-defined axis aligned bounding box
|
//! Set user-defined axis aligned bounding box
|
||||||
/** \param box New bounding box to use for the mesh. */
|
/** \param box New bounding box to use for the mesh. */
|
||||||
virtual void setBoundingBox(const core::aabbox3df &box) = 0;
|
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
||||||
|
|
||||||
//! Set the hardware mapping hint
|
//! Set the hardware mapping hint
|
||||||
/** This methods allows to define optimization hints for the
|
/** This methods allows to define optimization hints for the
|
||||||
hardware. This enables, e.g., the use of hardware buffers on
|
hardware. This enables, e.g., the use of hardware buffers on
|
||||||
platforms that support this feature. This can lead to noticeable
|
platforms that support this feature. This can lead to noticeable
|
||||||
performance gains. */
|
performance gains. */
|
||||||
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0;
|
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
|
|
||||||
//! Flag the meshbuffer as changed, reloads hardware buffers
|
//! Flag the meshbuffer as changed, reloads hardware buffers
|
||||||
/** This method has to be called every time the vertices or
|
/** This method has to be called every time the vertices or
|
||||||
indices have changed. Otherwise, changes won't be updated
|
indices have changed. Otherwise, changes won't be updated
|
||||||
on the GPU in the next render cycle. */
|
on the GPU in the next render cycle. */
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0;
|
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
|
|
||||||
//! Returns the type of the meshes.
|
//! Returns the type of the meshes.
|
||||||
/** This is useful for making a safe downcast. For example,
|
/** This is useful for making a safe downcast. For example,
|
||||||
|
@ -117,7 +120,10 @@ public:
|
||||||
{
|
{
|
||||||
return EAMT_STATIC;
|
return EAMT_STATIC;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -16,35 +17,36 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Struct for holding a mesh with a single material.
|
//! Struct for holding a mesh with a single material.
|
||||||
/** A part of an IMesh which has the same material on each face of that
|
/** A part of an IMesh which has the same material on each face of that
|
||||||
group. Logical groups of an IMesh need not be put into separate mesh
|
group. Logical groups of an IMesh need not be put into separate mesh
|
||||||
buffers, but can be. Separately animated parts of the mesh must be put
|
buffers, but can be. Separately animated parts of the mesh must be put
|
||||||
into separate mesh buffers.
|
into separate mesh buffers.
|
||||||
Some mesh buffer implementations have limitations on the number of
|
Some mesh buffer implementations have limitations on the number of
|
||||||
vertices the buffer can hold. In that case, logical grouping can help.
|
vertices the buffer can hold. In that case, logical grouping can help.
|
||||||
Moreover, the number of vertices should be optimized for the GPU upload,
|
Moreover, the number of vertices should be optimized for the GPU upload,
|
||||||
which often depends on the type of gfx card. Typical figures are
|
which often depends on the type of gfx card. Typical figures are
|
||||||
1000-10000 vertices per buffer.
|
1000-10000 vertices per buffer.
|
||||||
SMeshBuffer is a simple implementation of a MeshBuffer, which supports
|
SMeshBuffer is a simple implementation of a MeshBuffer, which supports
|
||||||
up to 65535 vertices.
|
up to 65535 vertices.
|
||||||
|
|
||||||
Since meshbuffers are used for drawing, and hence will be exposed
|
Since meshbuffers are used for drawing, and hence will be exposed
|
||||||
to the driver, chances are high that they are grab()'ed from somewhere.
|
to the driver, chances are high that they are grab()'ed from somewhere.
|
||||||
It's therefore required to dynamically allocate meshbuffers which are
|
It's therefore required to dynamically allocate meshbuffers which are
|
||||||
passed to a video driver and only drop the buffer once it's not used in
|
passed to a video driver and only drop the buffer once it's not used in
|
||||||
the current code block anymore.
|
the current code block anymore.
|
||||||
*/
|
*/
|
||||||
class IMeshBuffer : public virtual IReferenceCounted
|
class IMeshBuffer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Get the material of this meshbuffer
|
|
||||||
/** \return Material of this buffer. */
|
|
||||||
virtual video::SMaterial &getMaterial() = 0;
|
|
||||||
|
|
||||||
//! Get the material of this meshbuffer
|
//! Get the material of this meshbuffer
|
||||||
/** \return Material of this buffer. */
|
/** \return Material of this buffer. */
|
||||||
virtual const video::SMaterial &getMaterial() const = 0;
|
virtual video::SMaterial& getMaterial() = 0;
|
||||||
|
|
||||||
|
//! Get the material of this meshbuffer
|
||||||
|
/** \return Material of this buffer. */
|
||||||
|
virtual const video::SMaterial& getMaterial() const = 0;
|
||||||
|
|
||||||
//! Get type of vertex data which is stored in this meshbuffer.
|
//! Get type of vertex data which is stored in this meshbuffer.
|
||||||
/** \return Vertex type of this buffer. */
|
/** \return Vertex type of this buffer. */
|
||||||
|
@ -53,12 +55,12 @@ public:
|
||||||
//! Get access to vertex data. The data is an array of vertices.
|
//! Get access to vertex data. The data is an array of vertices.
|
||||||
/** Which vertex type is used can be determined by getVertexType().
|
/** Which vertex type is used can be determined by getVertexType().
|
||||||
\return Pointer to array of vertices. */
|
\return Pointer to array of vertices. */
|
||||||
virtual const void *getVertices() const = 0;
|
virtual const void* getVertices() const = 0;
|
||||||
|
|
||||||
//! Get access to vertex data. The data is an array of vertices.
|
//! Get access to vertex data. The data is an array of vertices.
|
||||||
/** Which vertex type is used can be determined by getVertexType().
|
/** Which vertex type is used can be determined by getVertexType().
|
||||||
\return Pointer to array of vertices. */
|
\return Pointer to array of vertices. */
|
||||||
virtual void *getVertices() = 0;
|
virtual void* getVertices() = 0;
|
||||||
|
|
||||||
//! Get amount of vertices in meshbuffer.
|
//! Get amount of vertices in meshbuffer.
|
||||||
/** \return Number of vertices in this buffer. */
|
/** \return Number of vertices in this buffer. */
|
||||||
|
@ -66,15 +68,15 @@ public:
|
||||||
|
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
/** \return Index type of this buffer. */
|
/** \return Index type of this buffer. */
|
||||||
virtual video::E_INDEX_TYPE getIndexType() const = 0;
|
virtual video::E_INDEX_TYPE getIndexType() const =0;
|
||||||
|
|
||||||
//! Get access to indices.
|
//! Get access to indices.
|
||||||
/** \return Pointer to indices array. */
|
/** \return Pointer to indices array. */
|
||||||
virtual const u16 *getIndices() const = 0;
|
virtual const u16* getIndices() const = 0;
|
||||||
|
|
||||||
//! Get access to indices.
|
//! Get access to indices.
|
||||||
/** \return Pointer to indices array. */
|
/** \return Pointer to indices array. */
|
||||||
virtual u16 *getIndices() = 0;
|
virtual u16* getIndices() = 0;
|
||||||
|
|
||||||
//! Get amount of indices in this meshbuffer.
|
//! Get amount of indices in this meshbuffer.
|
||||||
/** \return Number of indices in this buffer. */
|
/** \return Number of indices in this buffer. */
|
||||||
|
@ -82,33 +84,33 @@ public:
|
||||||
|
|
||||||
//! Get the axis aligned bounding box of this meshbuffer.
|
//! Get the axis aligned bounding box of this meshbuffer.
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
virtual const core::aabbox3df &getBoundingBox() const = 0;
|
virtual const core::aabbox3df& getBoundingBox() const = 0;
|
||||||
|
|
||||||
//! Set axis aligned bounding box
|
//! Set axis aligned bounding box
|
||||||
/** \param box User defined axis aligned bounding box to use
|
/** \param box User defined axis aligned bounding box to use
|
||||||
for this buffer. */
|
for this buffer. */
|
||||||
virtual void setBoundingBox(const core::aabbox3df &box) = 0;
|
virtual void setBoundingBox(const core::aabbox3df& box) = 0;
|
||||||
|
|
||||||
//! Recalculates the bounding box. Should be called if the mesh changed.
|
//! Recalculates the bounding box. Should be called if the mesh changed.
|
||||||
virtual void recalculateBoundingBox() = 0;
|
virtual void recalculateBoundingBox() = 0;
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual const core::vector3df &getPosition(u32 i) const = 0;
|
virtual const core::vector3df& getPosition(u32 i) const = 0;
|
||||||
|
|
||||||
//! returns position of vertex i
|
//! returns position of vertex i
|
||||||
virtual core::vector3df &getPosition(u32 i) = 0;
|
virtual core::vector3df& getPosition(u32 i) = 0;
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual const core::vector3df &getNormal(u32 i) const = 0;
|
virtual const core::vector3df& getNormal(u32 i) const = 0;
|
||||||
|
|
||||||
//! returns normal of vertex i
|
//! returns normal of vertex i
|
||||||
virtual core::vector3df &getNormal(u32 i) = 0;
|
virtual core::vector3df& getNormal(u32 i) = 0;
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual const core::vector2df &getTCoords(u32 i) const = 0;
|
virtual const core::vector2df& getTCoords(u32 i) const = 0;
|
||||||
|
|
||||||
//! returns texture coord of vertex i
|
//! returns texture coord of vertex i
|
||||||
virtual core::vector2df &getTCoords(u32 i) = 0;
|
virtual core::vector2df& getTCoords(u32 i) = 0;
|
||||||
|
|
||||||
//! Append the vertices and indices to the current buffer
|
//! Append the vertices and indices to the current buffer
|
||||||
/** Only works for compatible vertex types.
|
/** Only works for compatible vertex types.
|
||||||
|
@ -116,7 +118,12 @@ public:
|
||||||
\param numVertices Number of vertices in the array.
|
\param numVertices Number of vertices in the array.
|
||||||
\param indices Pointer to index array.
|
\param indices Pointer to index array.
|
||||||
\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;
|
||||||
|
@ -125,10 +132,10 @@ public:
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0;
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0;
|
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) = 0;
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0;
|
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
|
@ -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"
|
||||||
|
@ -12,20 +13,21 @@ namespace irr
|
||||||
|
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class IMesh;
|
class IMesh;
|
||||||
class IAnimatedMesh;
|
class IAnimatedMesh;
|
||||||
class IAnimatedMeshSceneNode;
|
class IAnimatedMeshSceneNode;
|
||||||
class IMeshLoader;
|
class IMeshLoader;
|
||||||
|
|
||||||
|
//! The mesh cache stores already loaded meshes and provides an interface to them.
|
||||||
|
/** You can access it using ISceneManager::getMeshCache(). All existing
|
||||||
|
scene managers will return a pointer to the same mesh cache, because it
|
||||||
|
is shared between them. With this interface, it is possible to manually
|
||||||
|
add new loaded meshes (if ISceneManager::getMesh() is not sufficient),
|
||||||
|
to remove them and to iterate through already loaded meshes. */
|
||||||
|
class IMeshCache : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! The mesh cache stores already loaded meshes and provides an interface to them.
|
|
||||||
/** You can access it using ISceneManager::getMeshCache(). All existing
|
|
||||||
scene managers will return a pointer to the same mesh cache, because it
|
|
||||||
is shared between them. With this interface, it is possible to manually
|
|
||||||
add new loaded meshes (if ISceneManager::getMesh() is not sufficient),
|
|
||||||
to remove them and to iterate through already loaded meshes. */
|
|
||||||
class IMeshCache : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~IMeshCache() {}
|
virtual ~IMeshCache() {}
|
||||||
|
|
||||||
|
@ -45,14 +47,14 @@ public:
|
||||||
set by this method.
|
set by this method.
|
||||||
\param mesh Pointer to a mesh which will now be referenced by
|
\param mesh Pointer to a mesh which will now be referenced by
|
||||||
this name. */
|
this name. */
|
||||||
virtual void addMesh(const io::path &name, IAnimatedMesh *mesh) = 0;
|
virtual void addMesh(const io::path& name, IAnimatedMesh* mesh) = 0;
|
||||||
|
|
||||||
//! Removes the mesh from the cache.
|
//! Removes the mesh from the cache.
|
||||||
/** After loading a mesh with getMesh(), the mesh can be
|
/** After loading a mesh with getMesh(), the mesh can be
|
||||||
removed from the cache using this method, freeing a lot of
|
removed from the cache using this method, freeing a lot of
|
||||||
memory.
|
memory.
|
||||||
\param mesh Pointer to the mesh which shall be removed. */
|
\param mesh Pointer to the mesh which shall be removed. */
|
||||||
virtual void removeMesh(const IMesh *const mesh) = 0;
|
virtual void removeMesh(const IMesh* const mesh) = 0;
|
||||||
|
|
||||||
//! Returns amount of loaded meshes in the cache.
|
//! Returns amount of loaded meshes in the cache.
|
||||||
/** You can load new meshes into the cache using getMesh() and
|
/** You can load new meshes into the cache using getMesh() and
|
||||||
|
@ -65,7 +67,7 @@ public:
|
||||||
//! Returns current index number of the mesh or -1 when not found.
|
//! Returns current index number of the mesh or -1 when not found.
|
||||||
/** \param mesh Pointer to the mesh to search for.
|
/** \param mesh Pointer to the mesh to search for.
|
||||||
\return Index of the mesh in the cache, or -1 if not found. */
|
\return Index of the mesh in the cache, or -1 if not found. */
|
||||||
virtual s32 getMeshIndex(const IMesh *const mesh) const = 0;
|
virtual s32 getMeshIndex(const IMesh* const mesh) const = 0;
|
||||||
|
|
||||||
//! Returns a mesh based on its index number.
|
//! Returns a mesh based on its index number.
|
||||||
/** \param index: Index of the mesh, number between 0 and
|
/** \param index: Index of the mesh, number between 0 and
|
||||||
|
@ -74,22 +76,22 @@ public:
|
||||||
or removed.
|
or removed.
|
||||||
\return Pointer to the mesh or 0 if there is none with this
|
\return Pointer to the mesh or 0 if there is none with this
|
||||||
number. */
|
number. */
|
||||||
virtual IAnimatedMesh *getMeshByIndex(u32 index) = 0;
|
virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
|
||||||
|
|
||||||
//! Returns a mesh based on its name.
|
//! Returns a mesh based on its name.
|
||||||
/** \param name Name of the mesh. Usually a filename.
|
/** \param name Name of the mesh. Usually a filename.
|
||||||
\return Pointer to the mesh or 0 if there is none with this number. */
|
\return Pointer to the mesh or 0 if there is none with this number. */
|
||||||
virtual IAnimatedMesh *getMeshByName(const io::path &name) = 0;
|
virtual IAnimatedMesh* getMeshByName(const io::path& name) = 0;
|
||||||
|
|
||||||
//! Get the name of a loaded mesh, based on its index.
|
//! Get the name of a loaded mesh, based on its index.
|
||||||
/** \param index: Index of the mesh, number between 0 and getMeshCount()-1.
|
/** \param index: Index of the mesh, number between 0 and getMeshCount()-1.
|
||||||
\return The name if mesh was found and has a name, else the path is empty. */
|
\return The name if mesh was found and has a name, else the path is empty. */
|
||||||
virtual const io::SNamedPath &getMeshName(u32 index) const = 0;
|
virtual const io::SNamedPath& getMeshName(u32 index) const = 0;
|
||||||
|
|
||||||
//! Get the name of the loaded mesh if there is any.
|
//! Get the name of the loaded mesh if there is any.
|
||||||
/** \param mesh Pointer to mesh to query.
|
/** \param mesh Pointer to mesh to query.
|
||||||
\return The name if mesh was found and has a name, else the path is empty. */
|
\return The name if mesh was found and has a name, else the path is empty. */
|
||||||
virtual const io::SNamedPath &getMeshName(const IMesh *const mesh) const = 0;
|
virtual const io::SNamedPath& getMeshName(const IMesh* const mesh) const = 0;
|
||||||
|
|
||||||
//! Renames a loaded mesh.
|
//! Renames a loaded mesh.
|
||||||
/** Note that renaming meshes might change the ordering of the
|
/** Note that renaming meshes might change the ordering of the
|
||||||
|
@ -98,7 +100,7 @@ public:
|
||||||
\param index The index of the mesh in the cache.
|
\param index The index of the mesh in the cache.
|
||||||
\param name New name for the mesh.
|
\param name New name for the mesh.
|
||||||
\return True if mesh was renamed. */
|
\return True if mesh was renamed. */
|
||||||
virtual bool renameMesh(u32 index, const io::path &name) = 0;
|
virtual bool renameMesh(u32 index, const io::path& name) = 0;
|
||||||
|
|
||||||
//! Renames the loaded mesh
|
//! Renames the loaded mesh
|
||||||
/** Note that renaming meshes might change the ordering of the
|
/** Note that renaming meshes might change the ordering of the
|
||||||
|
@ -107,12 +109,12 @@ public:
|
||||||
\param mesh Mesh to be renamed.
|
\param mesh Mesh to be renamed.
|
||||||
\param name New name for the mesh.
|
\param name New name for the mesh.
|
||||||
\return True if mesh was renamed. */
|
\return True if mesh was renamed. */
|
||||||
virtual bool renameMesh(const IMesh *const mesh, const io::path &name) = 0;
|
virtual bool renameMesh(const IMesh* const mesh, const io::path& name) = 0;
|
||||||
|
|
||||||
//! Check if a mesh was already loaded.
|
//! Check if a mesh was already loaded.
|
||||||
/** \param name Name of the mesh. Usually a filename.
|
/** \param name Name of the mesh. Usually a filename.
|
||||||
\return True if the mesh has been loaded, else false. */
|
\return True if the mesh has been loaded, else false. */
|
||||||
virtual bool isMeshLoaded(const io::path &name) = 0;
|
virtual bool isMeshLoaded(const io::path& name) = 0;
|
||||||
|
|
||||||
//! Clears the whole mesh cache, removing all meshes.
|
//! Clears the whole mesh cache, removing all meshes.
|
||||||
/** All meshes will be reloaded completely when using ISceneManager::getMesh()
|
/** All meshes will be reloaded completely when using ISceneManager::getMesh()
|
||||||
|
@ -125,7 +127,11 @@ public:
|
||||||
/** Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
/** Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
||||||
and you did not grab them, then they may become invalid. */
|
and you did not grab them, then they may become invalid. */
|
||||||
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"
|
||||||
|
@ -11,11 +12,11 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class IAnimatedMesh;
|
class IAnimatedMesh;
|
||||||
|
|
||||||
//! Class which is able to load an animated mesh from a file.
|
//! Class which is able to load an animated mesh from a file.
|
||||||
/** If you want Irrlicht be able to load meshes of
|
/** If you want Irrlicht be able to load meshes of
|
||||||
|
@ -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() {}
|
||||||
|
|
||||||
|
@ -36,15 +38,18 @@ public:
|
||||||
only.
|
only.
|
||||||
\param filename Name of the file to test.
|
\param filename Name of the file to test.
|
||||||
\return True if the file might be loaded by this class. */
|
\return True if the file might be loaded by this class. */
|
||||||
virtual bool isALoadableFileExtension(const io::path &filename) const = 0;
|
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||||
|
|
||||||
//! Creates/loads an animated mesh from the file.
|
//! Creates/loads an animated mesh from the file.
|
||||||
/** \param file File handler to load the file from.
|
/** \param file File handler to load the file from.
|
||||||
\return Pointer to the created mesh. Returns 0 if loading failed.
|
\return Pointer to the created mesh. Returns 0 if loading failed.
|
||||||
If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
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"
|
||||||
|
@ -17,35 +18,36 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
struct SMesh;
|
struct SMesh;
|
||||||
|
|
||||||
|
//! An interface for easy manipulation of meshes.
|
||||||
|
/** Scale, set alpha value, flip surfaces, and so on. This exists for
|
||||||
|
fixing problems with wrong imported or exported meshes quickly after
|
||||||
|
loading. It is not intended for doing mesh modifications and/or
|
||||||
|
animations during runtime.
|
||||||
|
*/
|
||||||
|
class IMeshManipulator : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! An interface for easy manipulation of meshes.
|
|
||||||
/** Scale, set alpha value, flip surfaces, and so on. This exists for
|
|
||||||
fixing problems with wrong imported or exported meshes quickly after
|
|
||||||
loading. It is not intended for doing mesh modifications and/or
|
|
||||||
animations during runtime.
|
|
||||||
*/
|
|
||||||
class IMeshManipulator : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
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.
|
||||||
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
||||||
virtual void recalculateNormals(IMesh *mesh, bool smooth = false,
|
virtual void recalculateNormals(IMesh* mesh, bool smooth = false,
|
||||||
bool angleWeighted = false) const = 0;
|
bool angleWeighted = false) const=0;
|
||||||
|
|
||||||
//! Recalculates all normals of the mesh buffer.
|
//! Recalculates all normals of the mesh buffer.
|
||||||
/** \param buffer: Mesh buffer on which the operation is performed.
|
/** \param buffer: Mesh buffer on which the operation is performed.
|
||||||
\param smooth: If the normals shall be smoothed.
|
\param smooth: If the normals shall be smoothed.
|
||||||
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
||||||
virtual void recalculateNormals(IMeshBuffer *buffer,
|
virtual void recalculateNormals(IMeshBuffer* buffer,
|
||||||
bool smooth = false, bool angleWeighted = false) const = 0;
|
bool smooth = false, bool angleWeighted = false) const=0;
|
||||||
|
|
||||||
//! Scales the actual mesh, not a scene node.
|
//! Scales the actual mesh, not a scene node.
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
/** \param mesh Mesh on which the operation is performed.
|
||||||
\param factor Scale factor for each axis. */
|
\param factor Scale factor for each axis. */
|
||||||
void scale(IMesh *mesh, const core::vector3df &factor) const
|
void scale(IMesh* mesh, const core::vector3df& factor) const
|
||||||
{
|
{
|
||||||
apply(SVertexPositionScaleManipulator(factor), mesh, true);
|
apply(SVertexPositionScaleManipulator(factor), mesh, true);
|
||||||
}
|
}
|
||||||
|
@ -53,7 +55,7 @@ public:
|
||||||
//! Scales the actual meshbuffer, not a scene node.
|
//! Scales the actual meshbuffer, not a scene node.
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
/** \param buffer Meshbuffer on which the operation is performed.
|
||||||
\param factor Scale factor for each axis. */
|
\param factor Scale factor for each axis. */
|
||||||
void scale(IMeshBuffer *buffer, const core::vector3df &factor) const
|
void scale(IMeshBuffer* buffer, const core::vector3df& factor) const
|
||||||
{
|
{
|
||||||
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
||||||
}
|
}
|
||||||
|
@ -65,17 +67,17 @@ public:
|
||||||
\return Cloned mesh. If you no longer need the
|
\return Cloned mesh. If you no longer need the
|
||||||
cloned mesh, you should call SMesh::drop(). See
|
cloned mesh, you should call SMesh::drop(). See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual SMesh *createMeshCopy(IMesh *mesh) const = 0;
|
virtual SMesh* createMeshCopy(IMesh* mesh) const = 0;
|
||||||
|
|
||||||
//! Get amount of polygons in mesh.
|
//! Get amount of polygons in mesh.
|
||||||
/** \param mesh Input mesh
|
/** \param mesh Input mesh
|
||||||
\return Number of polygons in mesh. */
|
\return Number of polygons in mesh. */
|
||||||
virtual s32 getPolyCount(IMesh *mesh) const = 0;
|
virtual s32 getPolyCount(IMesh* mesh) const = 0;
|
||||||
|
|
||||||
//! Get amount of polygons in mesh.
|
//! Get amount of polygons in mesh.
|
||||||
/** \param mesh Input mesh
|
/** \param mesh Input mesh
|
||||||
\return Number of polygons in mesh. */
|
\return Number of polygons in mesh. */
|
||||||
virtual s32 getPolyCount(IAnimatedMesh *mesh) const = 0;
|
virtual s32 getPolyCount(IAnimatedMesh* mesh) const = 0;
|
||||||
|
|
||||||
//! Create a new AnimatedMesh and adds the mesh to it
|
//! Create a new AnimatedMesh and adds the mesh to it
|
||||||
/** \param mesh Input mesh
|
/** \param mesh Input mesh
|
||||||
|
@ -84,7 +86,7 @@ public:
|
||||||
content. When you don't need the animated mesh anymore, you
|
content. When you don't need the animated mesh anymore, you
|
||||||
should call IAnimatedMesh::drop(). See
|
should call IAnimatedMesh::drop(). See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IAnimatedMesh *createAnimatedMesh(IMesh *mesh,
|
virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh,
|
||||||
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
||||||
|
|
||||||
//! Apply a manipulator on the Meshbuffer
|
//! Apply a manipulator on the Meshbuffer
|
||||||
|
@ -93,27 +95,30 @@ public:
|
||||||
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\return True if the functor was successfully applied, else false. */
|
||||||
template <typename Functor>
|
template <typename Functor>
|
||||||
bool apply(const Functor &func, IMeshBuffer *buffer, bool boundingBoxUpdate = false) const
|
bool apply(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate=false) const
|
||||||
{
|
{
|
||||||
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.
|
||||||
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\return True if the functor was successfully applied, else false. */
|
||||||
template <typename Functor>
|
template <typename Functor>
|
||||||
bool apply(const Functor &func, IMesh *mesh, bool boundingBoxUpdate = false) const
|
bool apply(const Functor& func, IMesh* mesh, bool boundingBoxUpdate=false) const
|
||||||
{
|
{
|
||||||
if (!mesh)
|
if (!mesh)
|
||||||
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
|
||||||
bufferbox.addInternalBox(mesh->getMeshBuffer(i)->getBoundingBox());
|
bufferbox.addInternalBox(mesh->getMeshBuffer(i)->getBoundingBox());
|
||||||
|
@ -132,29 +137,38 @@ protected:
|
||||||
\param typeTest Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times.
|
\param typeTest Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\return True if the functor was successfully applied, else false. */
|
||||||
template <typename Functor>
|
template <typename Functor>
|
||||||
bool apply_(const Functor &func, IMeshBuffer *buffer, bool boundingBoxUpdate, const IVertexManipulator &typeTest) const
|
bool apply_(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate, const IVertexManipulator& typeTest) const
|
||||||
{
|
{
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
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())
|
||||||
video::S3DVertex *verts = (video::S3DVertex *)buffer->getVertices();
|
{
|
||||||
|
case video::EVT_STANDARD:
|
||||||
|
{
|
||||||
|
video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices();
|
||||||
func(verts[i]);
|
func(verts[i]);
|
||||||
} break;
|
|
||||||
case video::EVT_2TCOORDS: {
|
|
||||||
video::S3DVertex2TCoords *verts = (video::S3DVertex2TCoords *)buffer->getVertices();
|
|
||||||
func(verts[i]);
|
|
||||||
} break;
|
|
||||||
case video::EVT_TANGENTS: {
|
|
||||||
video::S3DVertexTangents *verts = (video::S3DVertexTangents *)buffer->getVertices();
|
|
||||||
func(verts[i]);
|
|
||||||
} break;
|
|
||||||
}
|
}
|
||||||
if (boundingBoxUpdate) {
|
break;
|
||||||
if (0 == i)
|
case video::EVT_2TCOORDS:
|
||||||
|
{
|
||||||
|
video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices();
|
||||||
|
func(verts[i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case video::EVT_TANGENTS:
|
||||||
|
{
|
||||||
|
video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices();
|
||||||
|
func(verts[i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (boundingBoxUpdate)
|
||||||
|
{
|
||||||
|
if (0==i)
|
||||||
bufferbox.reset(buffer->getPosition(0));
|
bufferbox.reset(buffer->getPosition(0));
|
||||||
else
|
else
|
||||||
bufferbox.addInternalPoint(buffer->getPosition(i));
|
bufferbox.addInternalPoint(buffer->getPosition(i));
|
||||||
|
@ -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,26 +14,28 @@ 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. */
|
||||||
virtual void setMesh(IMesh *mesh) = 0;
|
virtual void setMesh(IMesh* mesh) = 0;
|
||||||
|
|
||||||
//! Get the currently defined mesh for display.
|
//! Get the currently defined mesh for display.
|
||||||
/** \return Pointer to mesh which is displayed by this node. */
|
/** \return Pointer to mesh which is displayed by this node. */
|
||||||
virtual IMesh *getMesh(void) = 0;
|
virtual IMesh* getMesh(void) = 0;
|
||||||
|
|
||||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||||
/** In this way it is possible to change the materials of a mesh
|
/** In this way it is possible to change the materials of a mesh
|
||||||
|
@ -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"
|
||||||
|
@ -15,31 +16,34 @@ class IOSOperator : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Get the current OS version as string.
|
//! Get the current OS version as string.
|
||||||
virtual const core::stringc &getOperatingSystemVersion() const = 0;
|
virtual const core::stringc& getOperatingSystemVersion() const = 0;
|
||||||
|
|
||||||
//! Copies text to the clipboard
|
//! Copies text to the clipboard
|
||||||
//! \param text: text in utf-8
|
//! \param text: text in utf-8
|
||||||
virtual void copyToClipboard(const c8 *text) const = 0;
|
virtual void copyToClipboard(const c8* text) const = 0;
|
||||||
|
|
||||||
//! Copies text to the primary selection
|
//! Copies text to the primary selection
|
||||||
//! This is a no-op on some platforms.
|
//! This is a no-op on some platforms.
|
||||||
//! \param text: text in utf-8
|
//! \param text: text in utf-8
|
||||||
virtual void copyToPrimarySelection(const c8 *text) const = 0;
|
virtual void copyToPrimarySelection(const c8* text) const = 0;
|
||||||
|
|
||||||
//! Get text from the clipboard
|
//! Get text from the clipboard
|
||||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
virtual const c8 *getTextFromClipboard() const = 0;
|
virtual const c8* getTextFromClipboard() const = 0;
|
||||||
|
|
||||||
//! Get text from the primary selection
|
//! Get text from the primary selection
|
||||||
//! This is a no-op on some platforms.
|
//! This is a no-op on some platforms.
|
||||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
virtual const c8 *getTextFromPrimarySelection() const = 0;
|
virtual const c8* getTextFromPrimarySelection() const = 0;
|
||||||
|
|
||||||
//! Get the total and available system RAM
|
//! Get the total and available system RAM
|
||||||
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
||||||
\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"
|
||||||
|
@ -13,15 +14,15 @@ namespace irr
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Interface providing read access to a file.
|
//! Interface providing read access to a file.
|
||||||
class IReadFile : public virtual IReferenceCounted
|
class IReadFile : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Reads an amount of bytes from the file.
|
//! Reads an amount of bytes from the file.
|
||||||
/** \param buffer Pointer to buffer where read bytes are written to.
|
/** \param buffer Pointer to buffer where read bytes are written to.
|
||||||
\param sizeToRead Amount of bytes to read from the file.
|
\param sizeToRead Amount of bytes to read from the file.
|
||||||
\return How many bytes were read. */
|
\return How many bytes were read. */
|
||||||
virtual size_t read(void *buffer, size_t sizeToRead) = 0;
|
virtual size_t read(void* buffer, size_t sizeToRead) = 0;
|
||||||
|
|
||||||
//! Changes position in file
|
//! Changes position in file
|
||||||
/** \param finalPos Destination position in the file.
|
/** \param finalPos Destination position in the file.
|
||||||
|
@ -41,17 +42,20 @@ public:
|
||||||
|
|
||||||
//! Get name of file.
|
//! Get name of file.
|
||||||
/** \return File name as zero terminated character string. */
|
/** \return File name as zero terminated character string. */
|
||||||
virtual const io::path &getFileName() const = 0;
|
virtual const io::path& getFileName() const = 0;
|
||||||
|
|
||||||
//! Get the type of the class implementing this interface
|
//! Get the type of the class implementing this interface
|
||||||
virtual EREAD_FILE_TYPE getType() const
|
virtual EREAD_FILE_TYPE getType() const
|
||||||
{
|
{
|
||||||
return EFIT_UNKNOWN;
|
return EFIT_UNKNOWN;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Internal function, please do not use.
|
//! Internal function, please do not use.
|
||||||
IReadFile *createLimitReadFile(const io::path &fileName, IReadFile *alreadyOpenedFile, long pos, long areaSize);
|
IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize);
|
||||||
|
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2,47 +2,49 @@
|
||||||
// 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"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Base class of most objects of the Irrlicht Engine.
|
//! Base class of most objects of the Irrlicht Engine.
|
||||||
/** This class provides reference counting through the methods grab() and drop().
|
/** This class provides reference counting through the methods grab() and drop().
|
||||||
It also is able to store a debug string for every instance of an object.
|
It also is able to store a debug string for every instance of an object.
|
||||||
Most objects of the Irrlicht
|
Most objects of the Irrlicht
|
||||||
Engine are derived from IReferenceCounted, and so they are reference counted.
|
Engine are derived from IReferenceCounted, and so they are reference counted.
|
||||||
|
|
||||||
When you create an object in the Irrlicht engine, calling a method
|
When you create an object in the Irrlicht engine, calling a method
|
||||||
which starts with 'create', an object is created, and you get a pointer
|
which starts with 'create', an object is created, and you get a pointer
|
||||||
to the new object. If you no longer need the object, you have
|
to the new object. If you no longer need the object, you have
|
||||||
to call drop(). This will destroy the object, if grab() was not called
|
to call drop(). This will destroy the object, if grab() was not called
|
||||||
in another part of you program, because this part still needs the object.
|
in another part of you program, because this part still needs the object.
|
||||||
Note, that you only need to call drop() to the object, if you created it,
|
Note, that you only need to call drop() to the object, if you created it,
|
||||||
and the method had a 'create' in it.
|
and the method had a 'create' in it.
|
||||||
|
|
||||||
A simple example:
|
A simple example:
|
||||||
|
|
||||||
If you want to create a texture, you may want to call an imaginable method
|
If you want to create a texture, you may want to call an imaginable method
|
||||||
IDriver::createTexture. You call
|
IDriver::createTexture. You call
|
||||||
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
||||||
If you no longer need the texture, call texture->drop().
|
If you no longer need the texture, call texture->drop().
|
||||||
|
|
||||||
|
If you want to load a texture, you may want to call imaginable method
|
||||||
|
IDriver::loadTexture. You do this like
|
||||||
|
ITexture* texture = driver->loadTexture("example.jpg");
|
||||||
|
You will not have to drop the pointer to the loaded texture, because
|
||||||
|
the name of the method does not start with 'create'. The texture
|
||||||
|
is stored somewhere by the driver.
|
||||||
|
*/
|
||||||
|
class IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
If you want to load a texture, you may want to call imaginable method
|
|
||||||
IDriver::loadTexture. You do this like
|
|
||||||
ITexture* texture = driver->loadTexture("example.jpg");
|
|
||||||
You will not have to drop the pointer to the loaded texture, because
|
|
||||||
the name of the method does not start with 'create'. The texture
|
|
||||||
is stored somewhere by the driver.
|
|
||||||
*/
|
|
||||||
class IReferenceCounted
|
|
||||||
{
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -136,27 +139,32 @@ public:
|
||||||
/** 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.
|
||||||
\return Returns a string, previously set by setDebugName(); */
|
\return Returns a string, previously set by setDebugName(); */
|
||||||
const c8 *getDebugName() const
|
const c8* getDebugName() const
|
||||||
{
|
{
|
||||||
return DebugName;
|
return DebugName;
|
||||||
}
|
}
|
||||||
|
|
||||||
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.
|
||||||
\param newName: New debug name to set. */
|
\param newName: New debug name to set. */
|
||||||
void setDebugName(const c8 *newName)
|
void setDebugName(const c8* newName)
|
||||||
{
|
{
|
||||||
DebugName = newName;
|
DebugName = newName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//! The debug name.
|
//! The debug name.
|
||||||
const c8 *DebugName;
|
const c8* DebugName;
|
||||||
|
|
||||||
//! The reference counter. Mutable to do reference counting on const objects.
|
//! The reference counter. Mutable to do reference counting on const objects.
|
||||||
mutable s32 ReferenceCounter;
|
mutable s32 ReferenceCounter;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -12,43 +13,43 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
|
|
||||||
//! Enumeration of cube texture surfaces
|
//! Enumeration of cube texture surfaces
|
||||||
enum E_CUBE_SURFACE
|
enum E_CUBE_SURFACE
|
||||||
{
|
{
|
||||||
ECS_POSX = 0,
|
ECS_POSX = 0,
|
||||||
ECS_NEGX,
|
ECS_NEGX,
|
||||||
ECS_POSY,
|
ECS_POSY,
|
||||||
ECS_NEGY,
|
ECS_NEGY,
|
||||||
ECS_POSZ,
|
ECS_POSZ,
|
||||||
ECS_NEGZ
|
ECS_NEGZ
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Interface of a Render Target.
|
||||||
|
class IRenderTarget : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Interface of a Render Target.
|
|
||||||
class IRenderTarget : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! constructor
|
//! constructor
|
||||||
IRenderTarget() :
|
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL)
|
||||||
DepthStencil(0), DriverType(EDT_NULL)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns an array of previously set textures.
|
//! Returns an array of previously set textures.
|
||||||
const core::array<ITexture *> &getTexture() const
|
const core::array<ITexture*>& getTexture() const
|
||||||
{
|
{
|
||||||
return Textures;
|
return Textures;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns a of previously set depth / depth-stencil texture.
|
//! Returns a of previously set depth / depth-stencil texture.
|
||||||
ITexture *getDepthStencil() const
|
ITexture* getDepthStencil() const
|
||||||
{
|
{
|
||||||
return DepthStencil;
|
return DepthStencil;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns an array of active surface for cube textures
|
//! Returns an array of active surface for cube textures
|
||||||
const core::array<E_CUBE_SURFACE> &getCubeSurfaces() const
|
const core::array<E_CUBE_SURFACE>& getCubeSurfaces() const
|
||||||
{
|
{
|
||||||
return CubeSurfaces;
|
return CubeSurfaces;
|
||||||
}
|
}
|
||||||
|
@ -60,28 +61,34 @@ public:
|
||||||
or depth-stencil buffer. You can pass getDepthStencil() if you don't want to change it.
|
or depth-stencil buffer. You can pass getDepthStencil() if you don't want to change it.
|
||||||
\param cubeSurfaces When rendering to cube textures, set the surface to be used for each texture. Can be empty otherwise.
|
\param cubeSurfaces When rendering to cube textures, set the surface to be used for each texture. Can be empty otherwise.
|
||||||
*/
|
*/
|
||||||
void setTexture(const core::array<ITexture *> &texture, ITexture *depthStencil, const core::array<E_CUBE_SURFACE> &cubeSurfaces = core::array<E_CUBE_SURFACE>())
|
void setTexture(const core::array<ITexture*>& texture, ITexture* depthStencil, const core::array<E_CUBE_SURFACE>& cubeSurfaces = core::array<E_CUBE_SURFACE>())
|
||||||
{
|
{
|
||||||
setTextures(texture.const_pointer(), texture.size(), depthStencil, cubeSurfaces.const_pointer(), cubeSurfaces.size());
|
setTextures(texture.const_pointer(), texture.size(), depthStencil, cubeSurfaces.const_pointer(), cubeSurfaces.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets one texture + depthStencil
|
//! Sets one texture + depthStencil
|
||||||
//! 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,16 +99,17 @@ public:
|
||||||
return DriverType;
|
return DriverType;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
//! Textures assigned to render target.
|
//! Textures assigned to render target.
|
||||||
core::array<ITexture *> Textures;
|
core::array<ITexture*> Textures;
|
||||||
|
|
||||||
//! Depth or packed depth-stencil texture assigned to render target.
|
//! Depth or packed depth-stencil texture assigned to render target.
|
||||||
ITexture *DepthStencil;
|
ITexture* DepthStencil;
|
||||||
|
|
||||||
//! Active surface of cube textures
|
//! Active surface of cube textures
|
||||||
core::array<E_CUBE_SURFACE> CubeSurfaces;
|
core::array<E_CUBE_SURFACE> CubeSurfaces;
|
||||||
|
@ -109,11 +117,13 @@ protected:
|
||||||
//! Driver type of render target.
|
//! Driver type of render target.
|
||||||
E_DRIVER_TYPE DriverType;
|
E_DRIVER_TYPE DriverType;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// no copying (IReferenceCounted still allows that for reasons which take some time to work around)
|
// no copying (IReferenceCounted still allows that for reasons which take some time to work around)
|
||||||
IRenderTarget(const IRenderTarget &);
|
IRenderTarget(const IRenderTarget&);
|
||||||
IRenderTarget &operator=(const IRenderTarget &);
|
IRenderTarget& operator=(const IRenderTarget&);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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"
|
||||||
|
@ -13,11 +14,12 @@ namespace irr
|
||||||
|
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class ICameraSceneNode;
|
class ICameraSceneNode;
|
||||||
|
|
||||||
|
class ISceneCollisionManager : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
class ISceneCollisionManager : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
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
|
||||||
|
@ -26,8 +28,11 @@ public:
|
||||||
at a length of the far value of the camera at a position which
|
at a length of the far value of the camera at a position which
|
||||||
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,56 +13,57 @@
|
||||||
#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"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
struct SKeyMap;
|
struct SKeyMap;
|
||||||
struct SEvent;
|
struct SEvent;
|
||||||
|
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
class IAttributes;
|
class IAttributes;
|
||||||
class IWriteFile;
|
class IWriteFile;
|
||||||
class IFileSystem;
|
class IFileSystem;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
class IGUIFont;
|
class IGUIFont;
|
||||||
class IGUIEnvironment;
|
class IGUIEnvironment;
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class IVideoDriver;
|
class IVideoDriver;
|
||||||
class SMaterial;
|
class SMaterial;
|
||||||
class IImage;
|
class IImage;
|
||||||
class ITexture;
|
class ITexture;
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Enumeration for render passes.
|
//! Enumeration for render passes.
|
||||||
/** A parameter passed to the registerNodeForRendering() method of the ISceneManager,
|
/** A parameter passed to the registerNodeForRendering() method of the ISceneManager,
|
||||||
specifying when the node wants to be drawn in relation to the other nodes.
|
specifying when the node wants to be drawn in relation to the other nodes.
|
||||||
Note: Despite the numbering this is not used as bit-field.
|
Note: Despite the numbering this is not used as bit-field.
|
||||||
*/
|
*/
|
||||||
enum E_SCENE_NODE_RENDER_PASS
|
enum E_SCENE_NODE_RENDER_PASS
|
||||||
{
|
{
|
||||||
//! No pass currently active
|
//! No pass currently active
|
||||||
ESNRP_NONE = 0,
|
ESNRP_NONE =0,
|
||||||
|
|
||||||
//! Camera pass. The active view is set up here. The very first pass.
|
//! Camera pass. The active view is set up here. The very first pass.
|
||||||
ESNRP_CAMERA = 1,
|
ESNRP_CAMERA =1,
|
||||||
|
|
||||||
//! In this pass, lights are transformed into camera space and added to the driver
|
//! In this pass, lights are transformed into camera space and added to the driver
|
||||||
ESNRP_LIGHT = 2,
|
ESNRP_LIGHT =2,
|
||||||
|
|
||||||
//! This is used for sky boxes.
|
//! This is used for sky boxes.
|
||||||
ESNRP_SKY_BOX = 4,
|
ESNRP_SKY_BOX =4,
|
||||||
|
|
||||||
//! All normal objects can use this for registering themselves.
|
//! All normal objects can use this for registering themselves.
|
||||||
/** This value will never be returned by
|
/** This value will never be returned by
|
||||||
|
@ -76,56 +78,58 @@ enum E_SCENE_NODE_RENDER_PASS
|
||||||
render() method call getSceneNodeRenderPass() to find out the
|
render() method call getSceneNodeRenderPass() to find out the
|
||||||
current render pass and render only the corresponding parts of
|
current render pass and render only the corresponding parts of
|
||||||
the node. */
|
the node. */
|
||||||
ESNRP_AUTOMATIC = 24,
|
ESNRP_AUTOMATIC =24,
|
||||||
|
|
||||||
//! Solid scene nodes or special scene nodes without materials.
|
//! Solid scene nodes or special scene nodes without materials.
|
||||||
ESNRP_SOLID = 8,
|
ESNRP_SOLID =8,
|
||||||
|
|
||||||
//! Transparent scene nodes, drawn after solid nodes. They are sorted from back to front and drawn in that order.
|
//! Transparent scene nodes, drawn after solid nodes. They are sorted from back to front and drawn in that order.
|
||||||
ESNRP_TRANSPARENT = 16,
|
ESNRP_TRANSPARENT =16,
|
||||||
|
|
||||||
//! Transparent effect scene nodes, drawn after Transparent nodes. They are sorted from back to front and drawn in that order.
|
//! Transparent effect scene nodes, drawn after Transparent nodes. They are sorted from back to front and drawn in that order.
|
||||||
ESNRP_TRANSPARENT_EFFECT = 32,
|
ESNRP_TRANSPARENT_EFFECT =32,
|
||||||
|
|
||||||
//! Drawn after the solid nodes, before the transparent nodes, the time for drawing shadow volumes
|
//! Drawn after the solid nodes, before the transparent nodes, the time for drawing shadow volumes
|
||||||
ESNRP_SHADOW = 64,
|
ESNRP_SHADOW =64,
|
||||||
|
|
||||||
//! Drawn after transparent effect nodes. For custom gui's. Unsorted (in order nodes registered themselves).
|
//! Drawn after transparent effect nodes. For custom gui's. Unsorted (in order nodes registered themselves).
|
||||||
ESNRP_GUI = 128
|
ESNRP_GUI = 128
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class IAnimatedMesh;
|
class IAnimatedMesh;
|
||||||
class IAnimatedMeshSceneNode;
|
class IAnimatedMeshSceneNode;
|
||||||
class IBillboardSceneNode;
|
class IBillboardSceneNode;
|
||||||
class ICameraSceneNode;
|
class ICameraSceneNode;
|
||||||
class IDummyTransformationSceneNode;
|
class IDummyTransformationSceneNode;
|
||||||
class IMesh;
|
class IMesh;
|
||||||
class IMeshBuffer;
|
class IMeshBuffer;
|
||||||
class IMeshCache;
|
class IMeshCache;
|
||||||
class ISceneCollisionManager;
|
class ISceneCollisionManager;
|
||||||
class IMeshLoader;
|
class IMeshLoader;
|
||||||
class IMeshManipulator;
|
class IMeshManipulator;
|
||||||
class IMeshSceneNode;
|
class IMeshSceneNode;
|
||||||
class ISceneNode;
|
class IMeshWriter;
|
||||||
class ISceneNodeFactory;
|
class ISceneNode;
|
||||||
|
class ISceneNodeFactory;
|
||||||
|
|
||||||
|
//! The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff.
|
||||||
|
/** All Scene nodes can be created only here.
|
||||||
|
A scene node is a node in the hierarchical scene graph. Every scene node
|
||||||
|
may have children, which are other scene nodes. Children move relative
|
||||||
|
the their parents position. If the parent of a node is not visible, its
|
||||||
|
children won't be visible, too. In this way, it is for example easily
|
||||||
|
possible to attach a light to a moving car or to place a walking
|
||||||
|
character on a moving platform on a moving ship.
|
||||||
|
The SceneManager is also able to load 3d mesh files of different
|
||||||
|
formats. Take a look at getMesh() to find out what formats are
|
||||||
|
supported. If these formats are not enough, use
|
||||||
|
addExternalMeshLoader() to add new formats to the engine.
|
||||||
|
*/
|
||||||
|
class ISceneManager : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff.
|
|
||||||
/** All Scene nodes can be created only here.
|
|
||||||
A scene node is a node in the hierarchical scene graph. Every scene node
|
|
||||||
may have children, which are other scene nodes. Children move relative
|
|
||||||
the their parents position. If the parent of a node is not visible, its
|
|
||||||
children won't be visible, too. In this way, it is for example easily
|
|
||||||
possible to attach a light to a moving car or to place a walking
|
|
||||||
character on a moving platform on a moving ship.
|
|
||||||
The SceneManager is also able to load 3d mesh files of different
|
|
||||||
formats. Take a look at getMesh() to find out what formats are
|
|
||||||
supported. If these formats are not enough, use
|
|
||||||
addExternalMeshLoader() to add new formats to the engine.
|
|
||||||
*/
|
|
||||||
class ISceneManager : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
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().
|
||||||
|
@ -318,18 +322,18 @@ public:
|
||||||
* \return Null if failed, otherwise pointer to the mesh.
|
* \return Null if failed, otherwise pointer to the mesh.
|
||||||
* This pointer should not be dropped. See IReferenceCounted::drop() for more information.
|
* This pointer should not be dropped. See IReferenceCounted::drop() for more information.
|
||||||
**/
|
**/
|
||||||
virtual IAnimatedMesh *getMesh(io::IReadFile *file) = 0;
|
virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
|
||||||
|
|
||||||
//! Get interface to the mesh cache which is shared between all existing scene managers.
|
//! Get interface to the mesh cache which is shared between all existing scene managers.
|
||||||
/** With this interface, it is possible to manually add new loaded
|
/** With this interface, it is possible to manually add new loaded
|
||||||
meshes (if ISceneManager::getMesh() is not sufficient), to remove them and to iterate
|
meshes (if ISceneManager::getMesh() is not sufficient), to remove them and to iterate
|
||||||
through already loaded meshes. */
|
through already loaded meshes. */
|
||||||
virtual IMeshCache *getMeshCache() = 0;
|
virtual IMeshCache* getMeshCache() = 0;
|
||||||
|
|
||||||
//! Get the video driver.
|
//! Get the video driver.
|
||||||
/** \return Pointer to the video Driver.
|
/** \return Pointer to the video Driver.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual video::IVideoDriver *getVideoDriver() = 0;
|
virtual video::IVideoDriver* getVideoDriver() = 0;
|
||||||
|
|
||||||
//! Adds a scene node for rendering an animated mesh model.
|
//! Adds a scene node for rendering an animated mesh model.
|
||||||
/** \param mesh: Pointer to the loaded animated mesh to be displayed.
|
/** \param mesh: Pointer to the loaded animated mesh to be displayed.
|
||||||
|
@ -342,12 +346,12 @@ public:
|
||||||
\param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed.
|
\param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed.
|
||||||
\return Pointer to the created scene node.
|
\return Pointer to the created scene node.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IAnimatedMeshSceneNode *addAnimatedMeshSceneNode(IAnimatedMesh *mesh,
|
virtual IAnimatedMeshSceneNode* addAnimatedMeshSceneNode(IAnimatedMesh* mesh,
|
||||||
ISceneNode *parent = 0, s32 id = -1,
|
ISceneNode* parent=0, 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),
|
||||||
bool alsoAddIfMeshPointerZero = false) = 0;
|
bool alsoAddIfMeshPointerZero=false) = 0;
|
||||||
|
|
||||||
//! Adds a scene node for rendering a static mesh.
|
//! Adds a scene node for rendering a static mesh.
|
||||||
/** \param mesh: Pointer to the loaded static mesh to be displayed.
|
/** \param mesh: Pointer to the loaded static mesh to be displayed.
|
||||||
|
@ -360,11 +364,11 @@ public:
|
||||||
\param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed.
|
\param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed.
|
||||||
\return Pointer to the created scene node.
|
\return Pointer to the created scene node.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IMeshSceneNode *addMeshSceneNode(IMesh *mesh, ISceneNode *parent = 0, s32 id = -1,
|
virtual IMeshSceneNode* addMeshSceneNode(IMesh* mesh, ISceneNode* parent=0, 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),
|
||||||
bool alsoAddIfMeshPointerZero = false) = 0;
|
bool alsoAddIfMeshPointerZero=false) = 0;
|
||||||
|
|
||||||
//! Adds a camera scene node to the scene graph and sets it as active camera.
|
//! Adds a camera scene node to the scene graph and sets it as active camera.
|
||||||
/** This camera does not react on user input.
|
/** This camera does not react on user input.
|
||||||
|
@ -383,10 +387,10 @@ public:
|
||||||
Make sure you always have one active camera.
|
Make sure you always have one active camera.
|
||||||
\return Pointer to interface to camera if successful, otherwise 0.
|
\return Pointer to interface to camera if successful, otherwise 0.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ICameraSceneNode *addCameraSceneNode(ISceneNode *parent = 0,
|
virtual ICameraSceneNode* addCameraSceneNode(ISceneNode* parent = 0,
|
||||||
const core::vector3df &position = core::vector3df(0, 0, 0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df &lookat = core::vector3df(0, 0, 100),
|
const core::vector3df& lookat = core::vector3df(0,0,100),
|
||||||
s32 id = -1, bool makeActive = true) = 0;
|
s32 id=-1, bool makeActive=true) = 0;
|
||||||
|
|
||||||
//! Adds a billboard scene node to the scene graph.
|
//! Adds a billboard scene node to the scene graph.
|
||||||
/** A billboard is like a 3d sprite: A 2d element,
|
/** A billboard is like a 3d sprite: A 2d element,
|
||||||
|
@ -407,9 +411,9 @@ public:
|
||||||
\return Pointer to the billboard if successful, otherwise NULL.
|
\return Pointer to the billboard if successful, otherwise NULL.
|
||||||
This pointer should not be dropped. See
|
This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual IBillboardSceneNode *addBillboardSceneNode(ISceneNode *parent = 0,
|
virtual IBillboardSceneNode* addBillboardSceneNode(ISceneNode* parent = 0,
|
||||||
const core::dimension2d<f32> &size = core::dimension2d<f32>(10.0f, 10.0f),
|
const core::dimension2d<f32>& size = core::dimension2d<f32>(10.0f, 10.0f),
|
||||||
const core::vector3df &position = core::vector3df(0, 0, 0), s32 id = -1,
|
const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1,
|
||||||
video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0;
|
video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0;
|
||||||
|
|
||||||
//! Adds an empty scene node to the scene graph.
|
//! Adds an empty scene node to the scene graph.
|
||||||
|
@ -417,7 +421,7 @@ public:
|
||||||
or structuring the scene graph.
|
or structuring the scene graph.
|
||||||
\return Pointer to the created scene node.
|
\return Pointer to the created scene node.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneNode *addEmptySceneNode(ISceneNode *parent = 0, s32 id = -1) = 0;
|
virtual ISceneNode* addEmptySceneNode(ISceneNode* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Adds a dummy transformation scene node to the scene graph.
|
//! Adds a dummy transformation scene node to the scene graph.
|
||||||
/** This scene node does not render itself, and does not respond to set/getPosition,
|
/** This scene node does not render itself, and does not respond to set/getPosition,
|
||||||
|
@ -426,8 +430,8 @@ public:
|
||||||
anywhere into the scene graph.
|
anywhere into the scene graph.
|
||||||
\return Pointer to the created scene node.
|
\return Pointer to the created scene node.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IDummyTransformationSceneNode *addDummyTransformationSceneNode(
|
virtual IDummyTransformationSceneNode* addDummyTransformationSceneNode(
|
||||||
ISceneNode *parent = 0, s32 id = -1) = 0;
|
ISceneNode* parent=0, s32 id=-1) = 0;
|
||||||
|
|
||||||
//! Gets the root scene node.
|
//! Gets the root scene node.
|
||||||
/** This is the scene node which is parent
|
/** This is the scene node which is parent
|
||||||
|
@ -436,7 +440,7 @@ public:
|
||||||
be removed from the scene.
|
be removed from the scene.
|
||||||
\return Pointer to the root scene node.
|
\return Pointer to the root scene node.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneNode *getRootSceneNode() = 0;
|
virtual ISceneNode* getRootSceneNode() = 0;
|
||||||
|
|
||||||
//! Get the first scene node with the specified id.
|
//! Get the first scene node with the specified id.
|
||||||
/** \param id: The id to search for
|
/** \param id: The id to search for
|
||||||
|
@ -446,7 +450,7 @@ public:
|
||||||
\return Pointer to the first scene node with this id,
|
\return Pointer to the first scene node with this id,
|
||||||
and null if no scene node could be found.
|
and null if no scene node could be found.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneNode *getSceneNodeFromId(s32 id, ISceneNode *start = 0) = 0;
|
virtual ISceneNode* getSceneNodeFromId(s32 id, ISceneNode* start=0) = 0;
|
||||||
|
|
||||||
//! Get the first scene node with the specified name.
|
//! Get the first scene node with the specified name.
|
||||||
/** \param name: The name to search for
|
/** \param name: The name to search for
|
||||||
|
@ -456,7 +460,7 @@ public:
|
||||||
\return Pointer to the first scene node with this id,
|
\return Pointer to the first scene node with this id,
|
||||||
and null if no scene node could be found.
|
and null if no scene node could be found.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneNode *getSceneNodeFromName(const c8 *name, ISceneNode *start = 0) = 0;
|
virtual ISceneNode* getSceneNodeFromName(const c8* name, ISceneNode* start=0) = 0;
|
||||||
|
|
||||||
//! Get the first scene node with the specified type.
|
//! Get the first scene node with the specified type.
|
||||||
/** \param type: The type to search for
|
/** \param type: The type to search for
|
||||||
|
@ -466,7 +470,7 @@ public:
|
||||||
\return Pointer to the first scene node with this type,
|
\return Pointer to the first scene node with this type,
|
||||||
and null if no scene node could be found.
|
and null if no scene node could be found.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneNode *getSceneNodeFromType(scene::ESCENE_NODE_TYPE type, ISceneNode *start = 0) = 0;
|
virtual ISceneNode* getSceneNodeFromType(scene::ESCENE_NODE_TYPE type, ISceneNode* start=0) = 0;
|
||||||
|
|
||||||
//! Get scene nodes by type.
|
//! Get scene nodes by type.
|
||||||
/** \param type: Type of scene node to find (ESNT_ANY will return all child nodes).
|
/** \param type: Type of scene node to find (ESNT_ANY will return all child nodes).
|
||||||
|
@ -475,19 +479,19 @@ public:
|
||||||
node are checked (recursively, so also children of children, etc). If null is specified,
|
node are checked (recursively, so also children of children, etc). If null is specified,
|
||||||
the root scene node is taken as start-node. */
|
the root scene node is taken as start-node. */
|
||||||
virtual void getSceneNodesFromType(ESCENE_NODE_TYPE type,
|
virtual void getSceneNodesFromType(ESCENE_NODE_TYPE type,
|
||||||
core::array<scene::ISceneNode *> &outNodes,
|
core::array<scene::ISceneNode*>& outNodes,
|
||||||
ISceneNode *start = 0) = 0;
|
ISceneNode* start=0) = 0;
|
||||||
|
|
||||||
//! Get the current active camera.
|
//! Get the current active camera.
|
||||||
/** \return The active camera is returned. Note that this can
|
/** \return The active camera is returned. Note that this can
|
||||||
be NULL, if there was no camera created yet.
|
be NULL, if there was no camera created yet.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ICameraSceneNode *getActiveCamera() const = 0;
|
virtual ICameraSceneNode* getActiveCamera() const =0;
|
||||||
|
|
||||||
//! Sets the currently active camera.
|
//! Sets the currently active camera.
|
||||||
/** The previous active camera will be deactivated.
|
/** The previous active camera will be deactivated.
|
||||||
\param camera: The new camera which should be active. */
|
\param camera: The new camera which should be active. */
|
||||||
virtual void setActiveCamera(ICameraSceneNode *camera) = 0;
|
virtual void setActiveCamera(ICameraSceneNode* camera) = 0;
|
||||||
|
|
||||||
//! Registers a node for rendering it at a specific time.
|
//! Registers a node for rendering it at a specific time.
|
||||||
/** This method should only be used by SceneNodes when they get a
|
/** This method should only be used by SceneNodes when they get a
|
||||||
|
@ -500,7 +504,7 @@ public:
|
||||||
Note: This is _not_ a bitfield. If you want to register a note for several render passes, then
|
Note: This is _not_ a bitfield. If you want to register a note for several render passes, then
|
||||||
call this function once for each pass.
|
call this function once for each pass.
|
||||||
\return scene will be rendered ( passed culling ) */
|
\return scene will be rendered ( passed culling ) */
|
||||||
virtual u32 registerNodeForRendering(ISceneNode *node,
|
virtual u32 registerNodeForRendering(ISceneNode* node,
|
||||||
E_SCENE_NODE_RENDER_PASS pass = ESNRP_AUTOMATIC) = 0;
|
E_SCENE_NODE_RENDER_PASS pass = ESNRP_AUTOMATIC) = 0;
|
||||||
|
|
||||||
//! Clear all nodes which are currently registered for rendering
|
//! Clear all nodes which are currently registered for rendering
|
||||||
|
@ -523,7 +527,7 @@ public:
|
||||||
Using this method it is also possible to override built-in mesh loaders with
|
Using this method it is also possible to override built-in mesh loaders with
|
||||||
newer or updated versions without the need to recompile the engine.
|
newer or updated versions without the need to recompile the engine.
|
||||||
\param externalLoader: Implementation of a new mesh loader. */
|
\param externalLoader: Implementation of a new mesh loader. */
|
||||||
virtual void addExternalMeshLoader(IMeshLoader *externalLoader) = 0;
|
virtual void addExternalMeshLoader(IMeshLoader* externalLoader) = 0;
|
||||||
|
|
||||||
//! Returns the number of mesh loaders supported by Irrlicht at this time
|
//! Returns the number of mesh loaders supported by Irrlicht at this time
|
||||||
virtual u32 getMeshLoaderCount() const = 0;
|
virtual u32 getMeshLoaderCount() const = 0;
|
||||||
|
@ -532,17 +536,17 @@ public:
|
||||||
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
||||||
array index.
|
array index.
|
||||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||||
virtual IMeshLoader *getMeshLoader(u32 index) const = 0;
|
virtual IMeshLoader* getMeshLoader(u32 index) const = 0;
|
||||||
|
|
||||||
//! Get pointer to the scene collision manager.
|
//! Get pointer to the scene collision manager.
|
||||||
/** \return Pointer to the collision manager
|
/** \return Pointer to the collision manager
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ISceneCollisionManager *getSceneCollisionManager() = 0;
|
virtual ISceneCollisionManager* getSceneCollisionManager() = 0;
|
||||||
|
|
||||||
//! Get pointer to the mesh manipulator.
|
//! Get pointer to the mesh manipulator.
|
||||||
/** \return Pointer to the mesh manipulator
|
/** \return Pointer to the mesh manipulator
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual IMeshManipulator *getMeshManipulator() = 0;
|
virtual IMeshManipulator* getMeshManipulator() = 0;
|
||||||
|
|
||||||
//! Adds a scene node to the deletion queue.
|
//! Adds a scene node to the deletion queue.
|
||||||
/** The scene node is immediately
|
/** The scene node is immediately
|
||||||
|
@ -553,12 +557,12 @@ public:
|
||||||
deletion queue is not necessary.
|
deletion queue is not necessary.
|
||||||
See ISceneManager::createDeleteAnimator() for details.
|
See ISceneManager::createDeleteAnimator() for details.
|
||||||
\param node: Node to delete. */
|
\param node: Node to delete. */
|
||||||
virtual void addToDeletionQueue(ISceneNode *node) = 0;
|
virtual void addToDeletionQueue(ISceneNode* node) = 0;
|
||||||
|
|
||||||
//! Posts an input event to the environment.
|
//! Posts an input event to the environment.
|
||||||
/** Usually you do not have to
|
/** Usually you do not have to
|
||||||
use this method, it is used by the internal engine. */
|
use this method, it is used by the internal engine. */
|
||||||
virtual bool postEventFromUser(const SEvent &event) = 0;
|
virtual bool postEventFromUser(const SEvent& event) = 0;
|
||||||
|
|
||||||
//! Clears the whole scene.
|
//! Clears the whole scene.
|
||||||
/** All scene nodes are removed. */
|
/** All scene nodes are removed. */
|
||||||
|
@ -567,7 +571,7 @@ public:
|
||||||
//! Get interface to the parameters set in this scene.
|
//! Get interface to the parameters set in this scene.
|
||||||
/** String parameters can be used by plugins and mesh loaders.
|
/** String parameters can be used by plugins and mesh loaders.
|
||||||
See COLLADA_CREATE_SCENE_INSTANCES and DMF_USE_MATERIALS_DIRS */
|
See COLLADA_CREATE_SCENE_INSTANCES and DMF_USE_MATERIALS_DIRS */
|
||||||
virtual io::IAttributes *getParameters() = 0;
|
virtual io::IAttributes* getParameters() = 0;
|
||||||
|
|
||||||
//! Get current render pass.
|
//! Get current render pass.
|
||||||
/** All scene nodes are being rendered in a specific order.
|
/** All scene nodes are being rendered in a specific order.
|
||||||
|
@ -597,24 +601,29 @@ public:
|
||||||
If you no longer need the new scene manager, you should call
|
If you no longer need the new scene manager, you should call
|
||||||
ISceneManager::drop().
|
ISceneManager::drop().
|
||||||
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. */
|
||||||
virtual ISkinnedMesh *createSkinnedMesh() = 0;
|
virtual ISkinnedMesh* createSkinnedMesh() = 0;
|
||||||
|
|
||||||
//! Sets ambient color of the scene
|
//! Sets ambient color of the scene
|
||||||
virtual void setAmbientLight(const video::SColorf &ambientColor) = 0;
|
virtual void setAmbientLight(const video::SColorf &ambientColor) = 0;
|
||||||
|
|
||||||
//! Get ambient color of the scene
|
//! Get ambient color of the scene
|
||||||
virtual const video::SColorf &getAmbientLight() const = 0;
|
virtual const video::SColorf& getAmbientLight() const = 0;
|
||||||
|
|
||||||
//! Get current render pass.
|
//! Get current render pass.
|
||||||
virtual E_SCENE_NODE_RENDER_PASS getCurrentRenderPass() const = 0;
|
virtual E_SCENE_NODE_RENDER_PASS getCurrentRenderPass() const =0;
|
||||||
|
|
||||||
//! Set current render pass.
|
//! Set current render pass.
|
||||||
virtual void setCurrentRenderPass(E_SCENE_NODE_RENDER_PASS nextPass) = 0;
|
virtual void setCurrentRenderPass(E_SCENE_NODE_RENDER_PASS nextPass) =0;
|
||||||
|
|
||||||
//! Check if node is culled in current view frustum
|
//! Check if node is culled in current view frustum
|
||||||
/** Please note that depending on the used culling method this
|
/** Please note that depending on the used culling method this
|
||||||
|
@ -625,8 +634,12 @@ public:
|
||||||
\param node The scene node which is checked for culling.
|
\param node The scene node which is checked for culling.
|
||||||
\return True if node is not visible in the current scene, else
|
\return True if node is not visible in the current scene, else
|
||||||
false. */
|
false. */
|
||||||
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,7 +14,6 @@
|
||||||
#include "aabbox3d.h"
|
#include "aabbox3d.h"
|
||||||
#include "matrix4.h"
|
#include "matrix4.h"
|
||||||
#include "IAttributes.h"
|
#include "IAttributes.h"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
|
@ -21,30 +21,30 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class ISceneNode;
|
class ISceneNode;
|
||||||
class ISceneManager;
|
class ISceneManager;
|
||||||
|
|
||||||
//! Typedef for list of scene nodes
|
//! Typedef for list of scene nodes
|
||||||
typedef std::list<ISceneNode *> ISceneNodeList;
|
typedef std::list<ISceneNode*> ISceneNodeList;
|
||||||
|
|
||||||
|
//! Scene node interface.
|
||||||
|
/** A scene node is a node in the hierarchical scene graph. Every scene
|
||||||
|
node may have children, which are also scene nodes. Children move
|
||||||
|
relative to their parent's position. If the parent of a node is not
|
||||||
|
visible, its children won't be visible either. In this way, it is for
|
||||||
|
example easily possible to attach a light to a moving car, or to place
|
||||||
|
a walking character on a moving platform on a moving ship.
|
||||||
|
*/
|
||||||
|
class ISceneNode : virtual public IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Scene node interface.
|
|
||||||
/** A scene node is a node in the hierarchical scene graph. Every scene
|
|
||||||
node may have children, which are also scene nodes. Children move
|
|
||||||
relative to their parent's position. If the parent of a node is not
|
|
||||||
visible, its children won't be visible either. In this way, it is for
|
|
||||||
example easily possible to attach a light to a moving car, or to place
|
|
||||||
a walking character on a moving platform on a moving ship.
|
|
||||||
*/
|
|
||||||
class ISceneNode : virtual public IReferenceCounted
|
|
||||||
{
|
|
||||||
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 +55,7 @@ public:
|
||||||
updateAbsolutePosition();
|
updateAbsolutePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~ISceneNode()
|
virtual ~ISceneNode()
|
||||||
{
|
{
|
||||||
|
@ -62,6 +63,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 +80,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 +97,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 +110,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
|
||||||
|
@ -130,7 +147,8 @@ public:
|
||||||
getAbsoluteTransformation() or simply use
|
getAbsoluteTransformation() or simply use
|
||||||
getTransformedBoundingBox(), which does the same.
|
getTransformedBoundingBox(), which does the same.
|
||||||
\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
|
||||||
|
@ -148,12 +166,12 @@ public:
|
||||||
/** Note: The result is _not_ identical to getTransformedBoundingBox().getEdges(),
|
/** Note: The result is _not_ identical to getTransformedBoundingBox().getEdges(),
|
||||||
but getting an aabbox3d of these edges would then be identical.
|
but getting an aabbox3d of these edges would then be identical.
|
||||||
\param edges Receives an array with the transformed edges */
|
\param edges Receives an array with the transformed edges */
|
||||||
virtual void getTransformedBoundingBoxEdges(core::array<core::vector3d<f32>> &edges) const
|
virtual void getTransformedBoundingBoxEdges(core::array< core::vector3d<f32> >& edges) const
|
||||||
{
|
{
|
||||||
edges.set_used(8);
|
edges.set_used(8);
|
||||||
getBoundingBox().getEdges(edges.pointer());
|
getBoundingBox().getEdges( edges.pointer() );
|
||||||
for (u32 i = 0; i < 8; ++i)
|
for ( u32 i=0; i<8; ++i )
|
||||||
AbsoluteTransformation.transformVect(edges[i]);
|
AbsoluteTransformation.transformVect( edges[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get the absolute transformation of the node. Is recalculated every OnAnimate()-call.
|
//! Get the absolute transformation of the node. Is recalculated every OnAnimate()-call.
|
||||||
|
@ -163,11 +181,12 @@ public:
|
||||||
update usually happens once per frame in OnAnimate. You can enforce
|
update usually happens once per frame in OnAnimate. You can enforce
|
||||||
an update with updateAbsolutePosition().
|
an update with updateAbsolutePosition().
|
||||||
\return The absolute transformation matrix. */
|
\return The absolute transformation matrix. */
|
||||||
virtual const core::matrix4 &getAbsoluteTransformation() const
|
virtual const core::matrix4& getAbsoluteTransformation() const
|
||||||
{
|
{
|
||||||
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 +198,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 +208,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
|
||||||
|
@ -203,10 +224,10 @@ public:
|
||||||
false if this or any parent node is invisible. */
|
false if this or any parent node is invisible. */
|
||||||
virtual bool isTrulyVisible() const
|
virtual bool isTrulyVisible() const
|
||||||
{
|
{
|
||||||
if (!IsVisible)
|
if(!IsVisible)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Parent)
|
if(!Parent)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Parent->isTrulyVisible();
|
return Parent->isTrulyVisible();
|
||||||
|
@ -222,6 +243,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 +252,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,13 +261,15 @@ 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);
|
||||||
|
@ -257,12 +282,13 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Removes a child from this scene node.
|
//! Removes a child from this scene node.
|
||||||
/**
|
/**
|
||||||
\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 belongs to a different parent or no parent. */
|
||||||
virtual bool removeChild(ISceneNode *child)
|
virtual bool removeChild(ISceneNode* child)
|
||||||
{
|
{
|
||||||
if (child->Parent != this)
|
if (child->Parent != this)
|
||||||
return false;
|
return false;
|
||||||
|
@ -277,6 +303,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! 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.
|
||||||
|
@ -291,6 +318,7 @@ public:
|
||||||
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 +328,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
|
||||||
|
@ -308,11 +337,12 @@ public:
|
||||||
directly modify the material of a scene node.
|
directly modify the material of a scene node.
|
||||||
\param num Zero based index. The maximal value is getMaterialCount() - 1.
|
\param num Zero based index. The maximal value is getMaterialCount() - 1.
|
||||||
\return The material at that index. */
|
\return The material at that index. */
|
||||||
virtual video::SMaterial &getMaterial(u32 num)
|
virtual video::SMaterial& getMaterial(u32 num)
|
||||||
{
|
{
|
||||||
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,69 +350,76 @@ 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
|
||||||
getAbsoluteTransformation().getScale()
|
getAbsoluteTransformation().getScale()
|
||||||
\return The scale of the scene node. */
|
\return The scale of the scene node. */
|
||||||
virtual const core::vector3df &getScale() const
|
virtual const core::vector3df& getScale() const
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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
|
||||||
getAbsoluteTransformation().getRotation()
|
getAbsoluteTransformation().getRotation()
|
||||||
\return Current relative rotation of the scene node. */
|
\return Current relative rotation of the scene node. */
|
||||||
virtual const core::vector3df &getRotation() const
|
virtual const core::vector3df& getRotation() const
|
||||||
{
|
{
|
||||||
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. */
|
||||||
virtual void setRotation(const core::vector3df &rotation)
|
virtual void setRotation(const core::vector3df& rotation)
|
||||||
{
|
{
|
||||||
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.
|
||||||
\return The current position of the node relative to the parent. */
|
\return The current position of the node relative to the parent. */
|
||||||
virtual const core::vector3df &getPosition() const
|
virtual const core::vector3df& getPosition() const
|
||||||
{
|
{
|
||||||
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. */
|
||||||
virtual void setPosition(const core::vector3df &newpos)
|
virtual void setPosition(const core::vector3df& newpos)
|
||||||
{
|
{
|
||||||
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,17 +434,19 @@ 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
|
||||||
their geometry because it is their only reason for existence,
|
their geometry because it is their only reason for existence,
|
||||||
for example the OctreeSceneNode.
|
for example the OctreeSceneNode.
|
||||||
\param state The culling state to be used. Check E_CULLING_TYPE for possible values.*/
|
\param state The culling state to be used. Check E_CULLING_TYPE for possible values.*/
|
||||||
void setAutomaticCulling(u32 state)
|
void setAutomaticCulling( u32 state)
|
||||||
{
|
{
|
||||||
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 +454,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 +472,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 +481,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,16 +491,18 @@ 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
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
grab();
|
grab();
|
||||||
remove();
|
remove();
|
||||||
|
@ -469,25 +513,30 @@ public:
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
|
@ -499,22 +548,23 @@ public:
|
||||||
/** \param newParent An optional new parent.
|
/** \param newParent An optional new parent.
|
||||||
\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)
|
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0)
|
||||||
{
|
{
|
||||||
return 0; // to be implemented by derived classes
|
return 0; // to be implemented by derived classes
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Retrieve the scene manager for this node.
|
//! Retrieve the scene manager for this node.
|
||||||
/** \return The node's scene manager. */
|
/** \return The node's scene manager. */
|
||||||
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
|
||||||
\param toCopyFrom The node from which the values are copied
|
\param toCopyFrom The node from which the values are copied
|
||||||
\param newManager The new scene manager. */
|
\param newManager The new scene manager. */
|
||||||
void cloneMembers(ISceneNode *toCopyFrom, ISceneManager *newManager)
|
void cloneMembers(ISceneNode* toCopyFrom, ISceneManager* newManager)
|
||||||
{
|
{
|
||||||
Name = toCopyFrom->Name;
|
Name = toCopyFrom->Name;
|
||||||
AbsoluteTransformation = toCopyFrom->AbsoluteTransformation;
|
AbsoluteTransformation = toCopyFrom->AbsoluteTransformation;
|
||||||
|
@ -541,7 +591,7 @@ protected:
|
||||||
|
|
||||||
//! Sets the new scene manager for this node and all children.
|
//! Sets the new scene manager for this node and all children.
|
||||||
//! Called by addChild when moving nodes between scene managers
|
//! Called by addChild when moving nodes between scene managers
|
||||||
void setSceneManager(ISceneManager *newManager)
|
void setSceneManager(ISceneManager* newManager)
|
||||||
{
|
{
|
||||||
SceneManager = newManager;
|
SceneManager = newManager;
|
||||||
|
|
||||||
|
@ -551,7 +601,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;
|
||||||
|
@ -566,16 +616,16 @@ protected:
|
||||||
core::vector3df RelativeScale;
|
core::vector3df RelativeScale;
|
||||||
|
|
||||||
//! List of all children of this node
|
//! List of all children of this node
|
||||||
std::list<ISceneNode *> Children;
|
std::list<ISceneNode*> Children;
|
||||||
|
|
||||||
//! Iterator pointing to this node in the parent's child list.
|
//! Iterator pointing to this node in the parent's child list.
|
||||||
std::optional<ISceneNodeList::iterator> ThisIterator;
|
std::optional<ISceneNodeList::iterator> ThisIterator;
|
||||||
|
|
||||||
//! Pointer to the parent
|
//! Pointer to the parent
|
||||||
ISceneNode *Parent;
|
ISceneNode* Parent;
|
||||||
|
|
||||||
//! Pointer to the scene manager
|
//! Pointer to the scene manager
|
||||||
ISceneManager *SceneManager;
|
ISceneManager* SceneManager;
|
||||||
|
|
||||||
//! ID of the node.
|
//! ID of the node.
|
||||||
s32 ID;
|
s32 ID;
|
||||||
|
@ -591,7 +641,11 @@ protected:
|
||||||
|
|
||||||
//! Is debug object?
|
//! Is debug object?
|
||||||
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"
|
||||||
|
|
||||||
|
@ -10,8 +11,8 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class IMaterialRendererServices;
|
class IMaterialRendererServices;
|
||||||
class SMaterial;
|
class SMaterial;
|
||||||
|
|
||||||
//! Interface making it possible to set constants for gpu programs every frame.
|
//! Interface making it possible to set constants for gpu programs every frame.
|
||||||
/** Implement this interface in an own class and pass a pointer to it to one of
|
/** Implement this interface in an own class and pass a pointer to it to one of
|
||||||
|
@ -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
|
||||||
|
@ -39,7 +41,7 @@ public:
|
||||||
}
|
}
|
||||||
\endcode
|
\endcode
|
||||||
*/
|
*/
|
||||||
virtual void OnSetMaterial(const SMaterial &material) {}
|
virtual void OnSetMaterial(const SMaterial& material) { }
|
||||||
|
|
||||||
//! Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set.
|
//! Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set.
|
||||||
/**
|
/**
|
||||||
|
@ -72,8 +74,12 @@ public:
|
||||||
\param services: Pointer to an interface providing methods to set the constants for the shader.
|
\param services: Pointer to an interface providing methods to set the constants for the shader.
|
||||||
\param userData: Userdata int which can be specified when creating the shader.
|
\param userData: Userdata int which can be specified when creating the shader.
|
||||||
*/
|
*/
|
||||||
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,22 +2,21 @@
|
||||||
// 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
|
||||||
{
|
{
|
||||||
|
|
||||||
enum E_INTERPOLATION_MODE
|
enum E_INTERPOLATION_MODE
|
||||||
{
|
{
|
||||||
// constant does use the current key-values without interpolation
|
// constant does use the current key-values without interpolation
|
||||||
EIM_CONSTANT = 0,
|
EIM_CONSTANT = 0,
|
||||||
|
|
||||||
|
@ -26,12 +25,14 @@ enum E_INTERPOLATION_MODE
|
||||||
|
|
||||||
//! count of all available interpolation modes
|
//! count of all available interpolation modes
|
||||||
EIM_COUNT
|
EIM_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Interface for using some special functions of Skinned meshes
|
||||||
|
class ISkinnedMesh : public IAnimatedMesh
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! Interface for using some special functions of Skinned meshes
|
|
||||||
class ISkinnedMesh : public IAnimatedMesh
|
|
||||||
{
|
|
||||||
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
|
||||||
|
@ -65,7 +66,7 @@ public:
|
||||||
virtual void setInterpolationMode(E_INTERPOLATION_MODE mode) = 0;
|
virtual void setInterpolationMode(E_INTERPOLATION_MODE mode) = 0;
|
||||||
|
|
||||||
//! Animates this mesh's joints based on frame input
|
//! Animates this mesh's joints based on frame input
|
||||||
virtual void animateMesh(f32 frame, f32 blend) = 0;
|
virtual void animateMesh(f32 frame, f32 blend)=0;
|
||||||
|
|
||||||
//! Preforms a software skin on this mesh based of joint positions
|
//! Preforms a software skin on this mesh based of joint positions
|
||||||
virtual void skinMesh() = 0;
|
virtual void skinMesh() = 0;
|
||||||
|
@ -88,10 +89,10 @@ public:
|
||||||
struct SWeight
|
struct SWeight
|
||||||
{
|
{
|
||||||
//! Index of the mesh buffer
|
//! Index of the mesh buffer
|
||||||
u16 buffer_id; // I doubt 32bits is needed
|
u16 buffer_id; //I doubt 32bits is needed
|
||||||
|
|
||||||
//! Index of the vertex
|
//! Index of the vertex
|
||||||
u32 vertex_id; // Store global ID here
|
u32 vertex_id; //Store global ID here
|
||||||
|
|
||||||
//! Weight Strength/Percentage (0-1)
|
//! Weight Strength/Percentage (0-1)
|
||||||
f32 strength;
|
f32 strength;
|
||||||
|
@ -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,20 +130,19 @@ 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;
|
||||||
|
|
||||||
//! List of child joints
|
//! List of child joints
|
||||||
core::array<SJoint *> Children;
|
core::array<SJoint*> Children;
|
||||||
|
|
||||||
//! List of attached meshes
|
//! List of attached meshes
|
||||||
core::array<u32> AttachedMeshes;
|
core::array<u32> AttachedMeshes;
|
||||||
|
@ -166,7 +167,7 @@ public:
|
||||||
core::vector3df Animatedscale;
|
core::vector3df Animatedscale;
|
||||||
core::quaternion Animatedrotation;
|
core::quaternion Animatedrotation;
|
||||||
|
|
||||||
core::matrix4 GlobalInversedMatrix; // the x format pre-calculates this
|
core::matrix4 GlobalInversedMatrix; //the x format pre-calculates this
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Internal members used by CSkinnedMesh
|
//! Internal members used by CSkinnedMesh
|
||||||
|
@ -180,41 +181,45 @@ public:
|
||||||
s32 rotationHint;
|
s32 rotationHint;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 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
|
//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
|
||||||
|
|
||||||
//! exposed for loaders: to add mesh buffers
|
//! exposed for loaders: to add mesh buffers
|
||||||
virtual core::array<SSkinMeshBuffer *> &getMeshBuffers() = 0;
|
virtual core::array<SSkinMeshBuffer*>& getMeshBuffers() = 0;
|
||||||
|
|
||||||
//! exposed for loaders: joints list
|
//! exposed for loaders: joints list
|
||||||
virtual core::array<SJoint *> &getAllJoints() = 0;
|
virtual core::array<SJoint*>& getAllJoints() = 0;
|
||||||
|
|
||||||
//! exposed for loaders: joints list
|
//! exposed for loaders: joints list
|
||||||
virtual const core::array<SJoint *> &getAllJoints() const = 0;
|
virtual const core::array<SJoint*>& getAllJoints() const = 0;
|
||||||
|
|
||||||
//! loaders should call this after populating the mesh
|
//! loaders should call this after populating the mesh
|
||||||
virtual void finalize() = 0;
|
virtual void finalize() = 0;
|
||||||
|
|
||||||
//! Adds a new meshbuffer to the mesh, access it as last one
|
//! Adds a new meshbuffer to the mesh, access it as last one
|
||||||
virtual SSkinMeshBuffer *addMeshBuffer() = 0;
|
virtual SSkinMeshBuffer* addMeshBuffer() = 0;
|
||||||
|
|
||||||
//! Adds a new joint to the mesh, access it as last one
|
//! Adds a new joint to the mesh, access it as last one
|
||||||
virtual SJoint *addJoint(SJoint *parent = 0) = 0;
|
virtual SJoint* addJoint(SJoint *parent=0) = 0;
|
||||||
|
|
||||||
//! Adds a new weight to the mesh, access it as last one
|
//! Adds a new weight to the mesh, access it as last one
|
||||||
virtual SWeight *addWeight(SJoint *joint) = 0;
|
virtual SWeight* addWeight(SJoint *joint) = 0;
|
||||||
|
|
||||||
//! Adds a new position key to the mesh, access it as last one
|
//! Adds a new position key to the mesh, access it as last one
|
||||||
virtual SPositionKey *addPositionKey(SJoint *joint) = 0;
|
virtual SPositionKey* addPositionKey(SJoint *joint) = 0;
|
||||||
//! Adds a new scale key to the mesh, access it as last one
|
//! Adds a new scale key to the mesh, access it as last one
|
||||||
virtual SScaleKey *addScaleKey(SJoint *joint) = 0;
|
virtual SScaleKey* addScaleKey(SJoint *joint) = 0;
|
||||||
//! Adds a new rotation key to the mesh, access it as last one
|
//! Adds a new rotation key to the mesh, access it as last one
|
||||||
virtual SRotationKey *addRotationKey(SJoint *joint) = 0;
|
virtual SRotationKey* addRotationKey(SJoint *joint) = 0;
|
||||||
|
|
||||||
//! Check if the mesh is non-animated
|
//! Check if the mesh is non-animated
|
||||||
virtual bool isStatic() = 0;
|
virtual bool isStatic()=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_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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -205,7 +207,7 @@ public:
|
||||||
\return Returns a pointer to the pixel data. The format of the pixel can
|
\return Returns a pointer to the pixel data. The format of the pixel can
|
||||||
be determined by using getColorFormat(). 0 is returned, if
|
be determined by using getColorFormat(). 0 is returned, if
|
||||||
the texture cannot be locked. */
|
the texture cannot be locked. */
|
||||||
virtual void *lock(E_TEXTURE_LOCK_MODE mode = ETLM_READ_WRITE, u32 mipmapLevel = 0, u32 layer = 0, E_TEXTURE_LOCK_FLAGS lockFlags = ETLF_FLIP_Y_UP_RTT) = 0;
|
virtual void* lock(E_TEXTURE_LOCK_MODE mode = ETLM_READ_WRITE, u32 mipmapLevel=0, u32 layer = 0, E_TEXTURE_LOCK_FLAGS lockFlags = ETLF_FLIP_Y_UP_RTT) = 0;
|
||||||
|
|
||||||
//! Unlock function. Must be called after a lock() to the texture.
|
//! Unlock function. Must be called after a lock() to the texture.
|
||||||
/** One should avoid to call unlock more than once before another lock.
|
/** One should avoid to call unlock more than once before another lock.
|
||||||
|
@ -222,7 +224,7 @@ public:
|
||||||
level. At least one pixel will be always kept.
|
level. At least one pixel will be always kept.
|
||||||
\param layer It informs a texture about which cubemap or texture array layer
|
\param layer It informs a texture about which cubemap or texture array layer
|
||||||
needs mipmap regeneration. */
|
needs mipmap regeneration. */
|
||||||
virtual void regenerateMipMapLevels(void *data = 0, u32 layer = 0) = 0;
|
virtual void regenerateMipMapLevels(void* data = 0, u32 layer = 0) = 0;
|
||||||
|
|
||||||
//! Get original size of the texture.
|
//! Get original size of the texture.
|
||||||
/** The texture is usually scaled, if it was created with an unoptimal
|
/** The texture is usually scaled, if it was created with an unoptimal
|
||||||
|
@ -232,11 +234,11 @@ public:
|
||||||
exact size of the original texture. Use ITexture::getSize() if you want
|
exact size of the original texture. Use ITexture::getSize() if you want
|
||||||
to know the real size it has now stored in the system.
|
to know the real size it has now stored in the system.
|
||||||
\return The original size of the texture. */
|
\return The original size of the texture. */
|
||||||
const core::dimension2d<u32> &getOriginalSize() const { return OriginalSize; };
|
const core::dimension2d<u32>& getOriginalSize() const { return OriginalSize; };
|
||||||
|
|
||||||
//! Get dimension (=size) of the texture.
|
//! Get dimension (=size) of the texture.
|
||||||
/** \return The size of the texture. */
|
/** \return The size of the texture. */
|
||||||
const core::dimension2d<u32> &getSize() const { return Size; };
|
const core::dimension2d<u32>& getSize() const { return Size; };
|
||||||
|
|
||||||
//! Get driver type of texture.
|
//! Get driver type of texture.
|
||||||
/** This is the driver, which created the texture. This method is used
|
/** This is the driver, which created the texture. This method is used
|
||||||
|
@ -273,7 +275,7 @@ public:
|
||||||
bool isRenderTarget() const { return IsRenderTarget; }
|
bool isRenderTarget() const { return IsRenderTarget; }
|
||||||
|
|
||||||
//! Get name of texture (in most cases this is the filename)
|
//! Get name of texture (in most cases this is the filename)
|
||||||
const io::SNamedPath &getName() const { return NamedPath; }
|
const io::SNamedPath& getName() const { return NamedPath; }
|
||||||
|
|
||||||
//! Check where the last IVideoDriver::getTexture found this texture
|
//! Check where the last IVideoDriver::getTexture found this texture
|
||||||
E_TEXTURE_SOURCE getSource() const { return Source; }
|
E_TEXTURE_SOURCE getSource() const { return Source; }
|
||||||
|
@ -286,7 +288,8 @@ 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_A16B16G16R16F:
|
case ECF_A16B16G16R16F:
|
||||||
|
@ -304,6 +307,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 +337,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"
|
||||||
|
@ -14,35 +15,39 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
class IVertexBuffer : public virtual IReferenceCounted
|
class IVertexBuffer : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void *getData() = 0;
|
virtual void* getData() =0;
|
||||||
virtual video::E_VERTEX_TYPE getType() const = 0;
|
virtual video::E_VERTEX_TYPE getType() const =0;
|
||||||
virtual void setType(video::E_VERTEX_TYPE vertexType) = 0;
|
virtual void setType(video::E_VERTEX_TYPE vertexType) =0;
|
||||||
virtual u32 stride() const = 0;
|
virtual u32 stride() const =0;
|
||||||
virtual u32 size() const = 0;
|
virtual u32 size() const =0;
|
||||||
virtual void push_back(const video::S3DVertex &element) = 0;
|
virtual void push_back(const video::S3DVertex &element) =0;
|
||||||
virtual video::S3DVertex &operator[](const u32 index) const = 0;
|
virtual video::S3DVertex& operator [](const u32 index) const =0;
|
||||||
virtual video::S3DVertex &getLast() = 0;
|
virtual video::S3DVertex& getLast() =0;
|
||||||
virtual void set_used(u32 usedNow) = 0;
|
virtual void set_used(u32 usedNow) =0;
|
||||||
virtual void reallocate(u32 new_size) = 0;
|
virtual void reallocate(u32 new_size) =0;
|
||||||
virtual u32 allocated_size() const = 0;
|
virtual u32 allocated_size() const =0;
|
||||||
virtual video::S3DVertex *pointer() = 0;
|
virtual video::S3DVertex* pointer() =0;
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
//! get the current hardware mapping hint
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0;
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) = 0;
|
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0;
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
virtual void setDirty() = 0;
|
virtual void setDirty() =0;
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! Get the currently used ID for identification of changes.
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
virtual u32 getChangedID() 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"
|
||||||
|
@ -22,32 +23,32 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
class IAttributes;
|
class IAttributes;
|
||||||
class IReadFile;
|
class IReadFile;
|
||||||
class IWriteFile;
|
class IWriteFile;
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
class IMeshBuffer;
|
class IMeshBuffer;
|
||||||
class IMesh;
|
class IMesh;
|
||||||
class IMeshManipulator;
|
class IMeshManipulator;
|
||||||
class ISceneNode;
|
class ISceneNode;
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
|
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
struct S3DVertex;
|
struct S3DVertex;
|
||||||
struct S3DVertex2TCoords;
|
struct S3DVertex2TCoords;
|
||||||
struct S3DVertexTangents;
|
struct S3DVertexTangents;
|
||||||
class IImageLoader;
|
class IImageLoader;
|
||||||
class IImageWriter;
|
class IImageWriter;
|
||||||
class IMaterialRenderer;
|
class IMaterialRenderer;
|
||||||
class IGPUProgrammingServices;
|
class IGPUProgrammingServices;
|
||||||
class IRenderTarget;
|
class IRenderTarget;
|
||||||
|
|
||||||
//! enumeration for geometry transformation states
|
//! enumeration for geometry transformation states
|
||||||
enum E_TRANSFORMATION_STATE
|
enum E_TRANSFORMATION_STATE
|
||||||
{
|
{
|
||||||
//! View transformation
|
//! View transformation
|
||||||
ETS_VIEW = 0,
|
ETS_VIEW = 0,
|
||||||
//! World transformation
|
//! World transformation
|
||||||
|
@ -59,14 +60,14 @@ enum E_TRANSFORMATION_STATE
|
||||||
ETS_TEXTURE_0,
|
ETS_TEXTURE_0,
|
||||||
//! Only used internally
|
//! Only used internally
|
||||||
ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES
|
ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Special render targets, which usually map to dedicated hardware
|
//! Special render targets, which usually map to dedicated hardware
|
||||||
/** These render targets (besides 0 and 1) need not be supported by gfx cards */
|
/** These render targets (besides 0 and 1) need not be supported by gfx cards */
|
||||||
enum E_RENDER_TARGET
|
enum E_RENDER_TARGET
|
||||||
{
|
{
|
||||||
//! Render target is the main color frame buffer
|
//! Render target is the main color frame buffer
|
||||||
ERT_FRAME_BUFFER = 0,
|
ERT_FRAME_BUFFER=0,
|
||||||
//! Render target is a render texture
|
//! Render target is a render texture
|
||||||
ERT_RENDER_TEXTURE,
|
ERT_RENDER_TEXTURE,
|
||||||
//! Multi-Render target textures
|
//! Multi-Render target textures
|
||||||
|
@ -87,44 +88,46 @@ enum E_RENDER_TARGET
|
||||||
ERT_AUX_BUFFER3,
|
ERT_AUX_BUFFER3,
|
||||||
//! Auxiliary buffer 4
|
//! Auxiliary buffer 4
|
||||||
ERT_AUX_BUFFER4
|
ERT_AUX_BUFFER4
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enum for the flags of clear buffer
|
//! Enum for the flags of clear buffer
|
||||||
enum E_CLEAR_BUFFER_FLAG
|
enum E_CLEAR_BUFFER_FLAG
|
||||||
{
|
{
|
||||||
ECBF_NONE = 0,
|
ECBF_NONE = 0,
|
||||||
ECBF_COLOR = 1,
|
ECBF_COLOR = 1,
|
||||||
ECBF_DEPTH = 2,
|
ECBF_DEPTH = 2,
|
||||||
ECBF_STENCIL = 4,
|
ECBF_STENCIL = 4,
|
||||||
ECBF_ALL = ECBF_COLOR | ECBF_DEPTH | ECBF_STENCIL
|
ECBF_ALL = ECBF_COLOR|ECBF_DEPTH|ECBF_STENCIL
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enum for the types of fog distributions to choose from
|
//! Enum for the types of fog distributions to choose from
|
||||||
enum E_FOG_TYPE
|
enum E_FOG_TYPE
|
||||||
{
|
{
|
||||||
EFT_FOG_EXP = 0,
|
EFT_FOG_EXP=0,
|
||||||
EFT_FOG_LINEAR,
|
EFT_FOG_LINEAR,
|
||||||
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.
|
||||||
/** This interface is one of the most important interfaces of
|
/** This interface is one of the most important interfaces of
|
||||||
the Irrlicht Engine: All rendering and texture manipulation is done with
|
the Irrlicht Engine: All rendering and texture manipulation is done with
|
||||||
this interface. You are able to use the Irrlicht Engine by only
|
this interface. You are able to use the Irrlicht Engine by only
|
||||||
invoking methods of this interface if you like to, although the
|
invoking methods of this interface if you like to, although the
|
||||||
irr::scene::ISceneManager interface provides a lot of powerful classes
|
irr::scene::ISceneManager interface provides a lot of powerful classes
|
||||||
and methods to make the programmer's life easier.
|
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.
|
||||||
|
@ -139,12 +142,12 @@ public:
|
||||||
rectangle of the area to be presented. Set to null to present
|
rectangle of the area to be presented. Set to null to present
|
||||||
everything. Note: not implemented in all devices.
|
everything. Note: not implemented in all devices.
|
||||||
\return False if failed. */
|
\return False if failed. */
|
||||||
virtual bool beginScene(u16 clearFlag = (u16)(ECBF_COLOR | ECBF_DEPTH), SColor clearColor = SColor(255, 0, 0, 0), f32 clearDepth = 1.f, u8 clearStencil = 0,
|
virtual bool beginScene(u16 clearFlag=(u16)(ECBF_COLOR|ECBF_DEPTH), SColor clearColor = SColor(255,0,0,0), f32 clearDepth = 1.f, u8 clearStencil = 0,
|
||||||
const SExposedVideoData &videoData = SExposedVideoData(), core::rect<s32> *sourceRect = 0) = 0;
|
const SExposedVideoData& videoData=SExposedVideoData(), core::rect<s32>* sourceRect = 0) = 0;
|
||||||
|
|
||||||
//! Alternative beginScene implementation. Can't clear stencil buffer, but otherwise identical to other beginScene
|
//! Alternative beginScene implementation. Can't clear stencil buffer, but otherwise identical to other beginScene
|
||||||
bool beginScene(bool backBuffer, bool zBuffer, SColor color = SColor(255, 0, 0, 0),
|
bool beginScene(bool backBuffer, bool zBuffer, SColor color = SColor(255,0,0,0),
|
||||||
const SExposedVideoData &videoData = SExposedVideoData(), core::rect<s32> *sourceRect = 0)
|
const SExposedVideoData& videoData = SExposedVideoData(), core::rect<s32>* sourceRect = 0)
|
||||||
{
|
{
|
||||||
u16 flag = 0;
|
u16 flag = 0;
|
||||||
|
|
||||||
|
@ -167,14 +170,14 @@ public:
|
||||||
/** Returns true if a feature is available
|
/** Returns true if a feature is available
|
||||||
\param feature Feature to query.
|
\param feature Feature to query.
|
||||||
\return True if the feature is available, false if not. */
|
\return True if the feature is available, false if not. */
|
||||||
virtual bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const = 0;
|
virtual bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const =0;
|
||||||
|
|
||||||
//! Disable a feature of the driver.
|
//! Disable a feature of the driver.
|
||||||
/** Can also be used to enable the features again. It is not
|
/** Can also be used to enable the features again. It is not
|
||||||
possible to enable unsupported features this way, though.
|
possible to enable unsupported features this way, though.
|
||||||
\param feature Feature to disable.
|
\param feature Feature to disable.
|
||||||
\param flag When true the feature is disabled, otherwise it is enabled. */
|
\param flag When true the feature is disabled, otherwise it is enabled. */
|
||||||
virtual void disableFeature(E_VIDEO_DRIVER_FEATURE feature, bool flag = true) = 0;
|
virtual void disableFeature(E_VIDEO_DRIVER_FEATURE feature, bool flag=true) =0;
|
||||||
|
|
||||||
//! Get attributes of the actual video driver
|
//! Get attributes of the actual video driver
|
||||||
/** The following names can be queried for the given types:
|
/** The following names can be queried for the given types:
|
||||||
|
@ -193,24 +196,24 @@ public:
|
||||||
ShaderLanguageVersion (int) Version of the high level shader language. Should be Major*100+Minor.
|
ShaderLanguageVersion (int) Version of the high level shader language. Should be Major*100+Minor.
|
||||||
AntiAlias (int) Number of Samples the driver uses for each pixel. 0 and 1 means anti aliasing is off, typical values are 2,4,8,16,32
|
AntiAlias (int) Number of Samples the driver uses for each pixel. 0 and 1 means anti aliasing is off, typical values are 2,4,8,16,32
|
||||||
*/
|
*/
|
||||||
virtual const io::IAttributes &getDriverAttributes() const = 0;
|
virtual const io::IAttributes& getDriverAttributes() const=0;
|
||||||
|
|
||||||
//! Check if the driver was recently reset.
|
//! Check if the driver was recently reset.
|
||||||
/** For d3d devices you will need to recreate the RTTs if the
|
/** For d3d devices you will need to recreate the RTTs if the
|
||||||
driver was reset. Should be queried right after beginScene().
|
driver was reset. Should be queried right after beginScene().
|
||||||
*/
|
*/
|
||||||
virtual bool checkDriverReset() = 0;
|
virtual bool checkDriverReset() =0;
|
||||||
|
|
||||||
//! Sets transformation matrices.
|
//! Sets transformation matrices.
|
||||||
/** \param state Transformation type to be set, e.g. view,
|
/** \param state Transformation type to be set, e.g. view,
|
||||||
world, or projection.
|
world, or projection.
|
||||||
\param mat Matrix describing the transformation. */
|
\param mat Matrix describing the transformation. */
|
||||||
virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4 &mat) = 0;
|
virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat) =0;
|
||||||
|
|
||||||
//! Returns the transformation set by setTransform
|
//! Returns the transformation set by setTransform
|
||||||
/** \param state Transformation type to query
|
/** \param state Transformation type to query
|
||||||
\return Matrix describing the transformation. */
|
\return Matrix describing the transformation. */
|
||||||
virtual const core::matrix4 &getTransform(E_TRANSFORMATION_STATE state) const = 0;
|
virtual const core::matrix4& getTransform(E_TRANSFORMATION_STATE state) const =0;
|
||||||
|
|
||||||
//! Retrieve the number of image loaders
|
//! Retrieve the number of image loaders
|
||||||
/** \return Number of image loaders */
|
/** \return Number of image loaders */
|
||||||
|
@ -220,7 +223,7 @@ public:
|
||||||
/** \param n The index of the loader to retrieve. This parameter is an 0-based
|
/** \param n The index of the loader to retrieve. This parameter is an 0-based
|
||||||
array index.
|
array index.
|
||||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||||
virtual IImageLoader *getImageLoader(u32 n) = 0;
|
virtual IImageLoader* getImageLoader(u32 n) = 0;
|
||||||
|
|
||||||
//! Retrieve the number of image writers
|
//! Retrieve the number of image writers
|
||||||
/** \return Number of image writers */
|
/** \return Number of image writers */
|
||||||
|
@ -230,12 +233,12 @@ public:
|
||||||
/** \param n The index of the writer to retrieve. This parameter is an 0-based
|
/** \param n The index of the writer to retrieve. This parameter is an 0-based
|
||||||
array index.
|
array index.
|
||||||
\return A pointer to the specified writer, 0 if the index is incorrect. */
|
\return A pointer to the specified writer, 0 if the index is incorrect. */
|
||||||
virtual IImageWriter *getImageWriter(u32 n) = 0;
|
virtual IImageWriter* getImageWriter(u32 n) = 0;
|
||||||
|
|
||||||
//! Sets a material.
|
//! Sets a material.
|
||||||
/** All 3d drawing functions will draw geometry using this material thereafter.
|
/** All 3d drawing functions will draw geometry using this material thereafter.
|
||||||
\param material: Material to be used from now on. */
|
\param material: Material to be used from now on. */
|
||||||
virtual void setMaterial(const SMaterial &material) = 0;
|
virtual void setMaterial(const SMaterial& material) =0;
|
||||||
|
|
||||||
//! Get access to a named texture.
|
//! Get access to a named texture.
|
||||||
/** Loads the texture from disk if it is not
|
/** Loads the texture from disk if it is not
|
||||||
|
@ -247,7 +250,7 @@ public:
|
||||||
\return Pointer to the texture, or 0 if the texture
|
\return Pointer to the texture, or 0 if the texture
|
||||||
could not be loaded. This pointer should not be dropped. See
|
could not be loaded. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual ITexture *getTexture(const io::path &filename) = 0;
|
virtual ITexture* getTexture(const io::path& filename) = 0;
|
||||||
|
|
||||||
//! Get access to a named texture.
|
//! Get access to a named texture.
|
||||||
/** Loads the texture from disk if it is not
|
/** Loads the texture from disk if it is not
|
||||||
|
@ -259,7 +262,7 @@ public:
|
||||||
\return Pointer to the texture, or 0 if the texture
|
\return Pointer to the texture, or 0 if the texture
|
||||||
could not be loaded. This pointer should not be dropped. See
|
could not be loaded. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual ITexture *getTexture(io::IReadFile *file) = 0;
|
virtual ITexture* getTexture(io::IReadFile* file) =0;
|
||||||
|
|
||||||
//! Returns amount of textures currently loaded
|
//! Returns amount of textures currently loaded
|
||||||
/** \return Amount of textures currently loaded */
|
/** \return Amount of textures currently loaded */
|
||||||
|
@ -276,8 +279,8 @@ public:
|
||||||
\return Pointer to the newly created texture. This pointer
|
\return Pointer to the newly created texture. This pointer
|
||||||
should not be dropped. See IReferenceCounted::drop() for more
|
should not be dropped. See IReferenceCounted::drop() for more
|
||||||
information. */
|
information. */
|
||||||
virtual ITexture *addTexture(const core::dimension2d<u32> &size,
|
virtual ITexture* addTexture(const core::dimension2d<u32>& size,
|
||||||
const io::path &name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
|
const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
|
||||||
|
|
||||||
//! Creates a texture from an IImage.
|
//! Creates a texture from an IImage.
|
||||||
/** \param name A name for the texture. Later calls of
|
/** \param name A name for the texture. Later calls of
|
||||||
|
@ -287,7 +290,7 @@ public:
|
||||||
\return Pointer to the newly created texture. This pointer
|
\return Pointer to the newly created texture. This pointer
|
||||||
should not be dropped. See IReferenceCounted::drop() for more
|
should not be dropped. See IReferenceCounted::drop() for more
|
||||||
information. */
|
information. */
|
||||||
virtual ITexture *addTexture(const io::path &name, IImage *image) = 0;
|
virtual ITexture* addTexture(const io::path& name, IImage* image) = 0;
|
||||||
|
|
||||||
//! Creates a cubemap texture from loaded IImages.
|
//! Creates a cubemap texture from loaded IImages.
|
||||||
/** \param name A name for the texture. Later calls of getTexture() with this name will return this texture.
|
/** \param name A name for the texture. Later calls of getTexture() with this name will return this texture.
|
||||||
|
@ -299,8 +302,8 @@ public:
|
||||||
\param imagePosZ Image (positive Z) the texture is created from.
|
\param imagePosZ Image (positive Z) the texture is created from.
|
||||||
\param imageNegZ Image (negative Z) the texture is created from.
|
\param imageNegZ Image (negative Z) the texture is created from.
|
||||||
\return Pointer to the newly created texture. This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
\return Pointer to the newly created texture. This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual ITexture *addTextureCubemap(const io::path &name, IImage *imagePosX, IImage *imageNegX, IImage *imagePosY,
|
virtual ITexture* addTextureCubemap(const io::path& name, IImage* imagePosX, IImage* imageNegX, IImage* imagePosY,
|
||||||
IImage *imageNegY, IImage *imagePosZ, IImage *imageNegZ) = 0;
|
IImage* imageNegY, IImage* imagePosZ, IImage* imageNegZ) = 0;
|
||||||
|
|
||||||
//! Creates an empty cubemap texture of specified size.
|
//! Creates an empty cubemap texture of specified size.
|
||||||
/** \param sideLen diameter of one side of the cube
|
/** \param sideLen diameter of one side of the cube
|
||||||
|
@ -311,7 +314,7 @@ public:
|
||||||
that the driver may choose to create the texture in another
|
that the driver may choose to create the texture in another
|
||||||
color format.
|
color format.
|
||||||
\return Pointer to the newly created texture. */
|
\return Pointer to the newly created texture. */
|
||||||
virtual ITexture *addTextureCubemap(const irr::u32 sideLen, const io::path &name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
|
virtual ITexture* addTextureCubemap(const irr::u32 sideLen, const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
|
||||||
|
|
||||||
//! Adds a new render target texture to the texture cache.
|
//! Adds a new render target texture to the texture cache.
|
||||||
/** \param size Size of the texture, in pixels. Width and
|
/** \param size Size of the texture, in pixels. Width and
|
||||||
|
@ -326,8 +329,8 @@ public:
|
||||||
IReferenceCounted::drop() for more information.
|
IReferenceCounted::drop() for more information.
|
||||||
You may want to remove it from driver texture cache with removeTexture if you no longer need it.
|
You may want to remove it from driver texture cache with removeTexture if you no longer need it.
|
||||||
*/
|
*/
|
||||||
virtual ITexture *addRenderTargetTexture(const core::dimension2d<u32> &size,
|
virtual ITexture* addRenderTargetTexture(const core::dimension2d<u32>& size,
|
||||||
const io::path &name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) = 0;
|
const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0;
|
||||||
|
|
||||||
//! Adds a new render target texture with 6 sides for a cubemap map to the texture cache.
|
//! Adds a new render target texture with 6 sides for a cubemap map to the texture cache.
|
||||||
/** \param sideLen Length of one cubemap side.
|
/** \param sideLen Length of one cubemap side.
|
||||||
|
@ -337,8 +340,8 @@ public:
|
||||||
\return Pointer to the created texture or 0 if the texture
|
\return Pointer to the created texture or 0 if the texture
|
||||||
could not be created. This pointer should not be dropped. See
|
could not be created. This pointer should not be dropped. See
|
||||||
IReferenceCounted::drop() for more information. */
|
IReferenceCounted::drop() for more information. */
|
||||||
virtual ITexture *addRenderTargetTextureCubemap(const irr::u32 sideLen,
|
virtual ITexture* addRenderTargetTextureCubemap(const irr::u32 sideLen,
|
||||||
const io::path &name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) = 0;
|
const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0;
|
||||||
|
|
||||||
//! Removes a texture from the texture cache and deletes it.
|
//! Removes a texture from the texture cache and deletes it.
|
||||||
/** This method can free a lot of memory!
|
/** This method can free a lot of memory!
|
||||||
|
@ -348,7 +351,7 @@ public:
|
||||||
good idea to set all materials which are using this texture to
|
good idea to set all materials which are using this texture to
|
||||||
0 or another texture first.
|
0 or another texture first.
|
||||||
\param texture Texture to delete from the engine cache. */
|
\param texture Texture to delete from the engine cache. */
|
||||||
virtual void removeTexture(ITexture *texture) = 0;
|
virtual void removeTexture(ITexture* texture) =0;
|
||||||
|
|
||||||
//! Removes all textures from the texture cache and deletes them.
|
//! Removes all textures from the texture cache and deletes them.
|
||||||
/** This method can free a lot of memory!
|
/** This method can free a lot of memory!
|
||||||
|
@ -357,56 +360,56 @@ public:
|
||||||
by other parts of the engine for storing it longer. So it is a
|
by other parts of the engine for storing it longer. So it is a
|
||||||
good idea to set all materials which are using this texture to
|
good idea to set all materials which are using this texture to
|
||||||
0 or another texture first. */
|
0 or another texture first. */
|
||||||
virtual void removeAllTextures() = 0;
|
virtual void removeAllTextures() =0;
|
||||||
|
|
||||||
//! Remove hardware buffer
|
//! Remove hardware buffer
|
||||||
virtual void removeHardwareBuffer(const scene::IMeshBuffer *mb) = 0;
|
virtual void removeHardwareBuffer(const scene::IMeshBuffer* mb) =0;
|
||||||
|
|
||||||
//! Remove all hardware buffers
|
//! Remove all hardware buffers
|
||||||
virtual void removeAllHardwareBuffers() = 0;
|
virtual void removeAllHardwareBuffers() =0;
|
||||||
|
|
||||||
//! Create occlusion query.
|
//! Create occlusion query.
|
||||||
/** Use node for identification and mesh for occlusion test. */
|
/** Use node for identification and mesh for occlusion test. */
|
||||||
virtual void addOcclusionQuery(scene::ISceneNode *node,
|
virtual void addOcclusionQuery(scene::ISceneNode* node,
|
||||||
const scene::IMesh *mesh = 0) = 0;
|
const scene::IMesh* mesh=0) =0;
|
||||||
|
|
||||||
//! Remove occlusion query.
|
//! Remove occlusion query.
|
||||||
virtual void removeOcclusionQuery(scene::ISceneNode *node) = 0;
|
virtual void removeOcclusionQuery(scene::ISceneNode* node) =0;
|
||||||
|
|
||||||
//! Remove all occlusion queries.
|
//! Remove all occlusion queries.
|
||||||
virtual void removeAllOcclusionQueries() = 0;
|
virtual void removeAllOcclusionQueries() =0;
|
||||||
|
|
||||||
//! Run occlusion query. Draws mesh stored in query.
|
//! Run occlusion query. Draws mesh stored in query.
|
||||||
/** If the mesh shall not be rendered visible, use
|
/** If the mesh shall not be rendered visible, use
|
||||||
overrideMaterial to disable the color and depth buffer. */
|
overrideMaterial to disable the color and depth buffer. */
|
||||||
virtual void runOcclusionQuery(scene::ISceneNode *node, bool visible = false) = 0;
|
virtual void runOcclusionQuery(scene::ISceneNode* node, bool visible=false) =0;
|
||||||
|
|
||||||
//! Run all occlusion queries. Draws all meshes stored in queries.
|
//! Run all occlusion queries. Draws all meshes stored in queries.
|
||||||
/** If the meshes shall not be rendered visible, use
|
/** If the meshes shall not be rendered visible, use
|
||||||
overrideMaterial to disable the color and depth buffer. */
|
overrideMaterial to disable the color and depth buffer. */
|
||||||
virtual void runAllOcclusionQueries(bool visible = false) = 0;
|
virtual void runAllOcclusionQueries(bool visible=false) =0;
|
||||||
|
|
||||||
//! Update occlusion query. Retrieves results from GPU.
|
//! Update occlusion query. Retrieves results from GPU.
|
||||||
/** If the query shall not block, set the flag to false.
|
/** If the query shall not block, set the flag to false.
|
||||||
Update might not occur in this case, though */
|
Update might not occur in this case, though */
|
||||||
virtual void updateOcclusionQuery(scene::ISceneNode *node, bool block = true) = 0;
|
virtual void updateOcclusionQuery(scene::ISceneNode* node, bool block=true) =0;
|
||||||
|
|
||||||
//! Update all occlusion queries. Retrieves results from GPU.
|
//! Update all occlusion queries. Retrieves results from GPU.
|
||||||
/** If the query shall not block, set the flag to false.
|
/** If the query shall not block, set the flag to false.
|
||||||
Update might not occur in this case, though */
|
Update might not occur in this case, though */
|
||||||
virtual void updateAllOcclusionQueries(bool block = true) = 0;
|
virtual void updateAllOcclusionQueries(bool block=true) =0;
|
||||||
|
|
||||||
//! Return query result.
|
//! Return query result.
|
||||||
/** Return value is the number of visible pixels/fragments.
|
/** Return value is the number of visible pixels/fragments.
|
||||||
The value is a safe approximation, i.e. can be larger than the
|
The value is a safe approximation, i.e. can be larger than the
|
||||||
actual value of pixels. */
|
actual value of pixels. */
|
||||||
virtual u32 getOcclusionQueryResult(scene::ISceneNode *node) const = 0;
|
virtual u32 getOcclusionQueryResult(scene::ISceneNode* node) const =0;
|
||||||
|
|
||||||
//! Create render target.
|
//! Create render target.
|
||||||
virtual IRenderTarget *addRenderTarget() = 0;
|
virtual IRenderTarget* addRenderTarget() = 0;
|
||||||
|
|
||||||
//! Remove render target.
|
//! Remove render target.
|
||||||
virtual void removeRenderTarget(IRenderTarget *renderTarget) = 0;
|
virtual void removeRenderTarget(IRenderTarget* renderTarget) = 0;
|
||||||
|
|
||||||
//! Remove all render targets.
|
//! Remove all render targets.
|
||||||
virtual void removeAllRenderTargets() = 0;
|
virtual void removeAllRenderTargets() = 0;
|
||||||
|
@ -423,8 +426,8 @@ public:
|
||||||
example in picture edit programs. To avoid this problem, you
|
example in picture edit programs. To avoid this problem, you
|
||||||
could use the makeColorKeyTexture method, which takes the
|
could use the makeColorKeyTexture method, which takes the
|
||||||
position of a pixel instead a color value. */
|
position of a pixel instead a color value. */
|
||||||
virtual void makeColorKeyTexture(video::ITexture *texture,
|
virtual void makeColorKeyTexture(video::ITexture* texture,
|
||||||
video::SColor color) const = 0;
|
video::SColor color) const =0;
|
||||||
|
|
||||||
//! Sets a boolean alpha channel on the texture based on the color at a position.
|
//! Sets a boolean alpha channel on the texture based on the color at a position.
|
||||||
/** This makes the texture fully transparent at the texels where
|
/** This makes the texture fully transparent at the texels where
|
||||||
|
@ -434,8 +437,8 @@ public:
|
||||||
\param colorKeyPixelPos Position of a pixel with the color key
|
\param colorKeyPixelPos Position of a pixel with the color key
|
||||||
color. Every texel with this color will become fully transparent as
|
color. Every texel with this color will become fully transparent as
|
||||||
described above. */
|
described above. */
|
||||||
virtual void makeColorKeyTexture(video::ITexture *texture,
|
virtual void makeColorKeyTexture(video::ITexture* texture,
|
||||||
core::position2d<s32> colorKeyPixelPos) const = 0;
|
core::position2d<s32> colorKeyPixelPos) const =0;
|
||||||
|
|
||||||
//! Set a render target.
|
//! Set a render target.
|
||||||
/** This will only work if the driver supports the
|
/** This will only work if the driver supports the
|
||||||
|
@ -453,7 +456,7 @@ public:
|
||||||
\param clearDepth The clear value for the depth buffer.
|
\param clearDepth The clear value for the depth buffer.
|
||||||
\param clearStencil The clear value for the stencil buffer.
|
\param clearStencil The clear value for the stencil buffer.
|
||||||
\return True if successful and false if not. */
|
\return True if successful and false if not. */
|
||||||
virtual bool setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor = SColor(255, 0, 0, 0),
|
virtual bool setRenderTargetEx(IRenderTarget* target, u16 clearFlag, SColor clearColor = SColor(255,0,0,0),
|
||||||
f32 clearDepth = 1.f, u8 clearStencil = 0) = 0;
|
f32 clearDepth = 1.f, u8 clearStencil = 0) = 0;
|
||||||
|
|
||||||
//! Sets a new render target.
|
//! Sets a new render target.
|
||||||
|
@ -484,13 +487,13 @@ public:
|
||||||
\param clearDepth The clear value for the depth buffer.
|
\param clearDepth The clear value for the depth buffer.
|
||||||
\param clearStencil The clear value for the stencil buffer.
|
\param clearStencil The clear value for the stencil buffer.
|
||||||
\return True if successful and false if not. */
|
\return True if successful and false if not. */
|
||||||
virtual bool setRenderTarget(ITexture *texture, u16 clearFlag = ECBF_COLOR | ECBF_DEPTH, SColor clearColor = SColor(255, 0, 0, 0),
|
virtual bool setRenderTarget(ITexture* texture, u16 clearFlag=ECBF_COLOR|ECBF_DEPTH, SColor clearColor = SColor(255,0,0,0),
|
||||||
f32 clearDepth = 1.f, u8 clearStencil = 0) = 0;
|
f32 clearDepth = 1.f, u8 clearStencil = 0) = 0;
|
||||||
|
|
||||||
//! Sets a new render target.
|
//! Sets a new render target.
|
||||||
//! Prefer to use the setRenderTarget function taking flags as parameter as this one can't clear the stencil buffer.
|
//! Prefer to use the setRenderTarget function taking flags as parameter as this one can't clear the stencil buffer.
|
||||||
//! It's still offered for backward compatibility.
|
//! It's still offered for backward compatibility.
|
||||||
bool setRenderTarget(ITexture *texture, bool clearBackBuffer, bool clearZBuffer, SColor color = SColor(255, 0, 0, 0))
|
bool setRenderTarget(ITexture* texture, bool clearBackBuffer, bool clearZBuffer, SColor color = SColor(255,0,0,0))
|
||||||
{
|
{
|
||||||
u16 flag = 0;
|
u16 flag = 0;
|
||||||
|
|
||||||
|
@ -507,11 +510,11 @@ public:
|
||||||
/** Every rendering operation is done into this new area.
|
/** Every rendering operation is done into this new area.
|
||||||
\param area: Rectangle defining the new area of rendering
|
\param area: Rectangle defining the new area of rendering
|
||||||
operations. */
|
operations. */
|
||||||
virtual void setViewPort(const core::rect<s32> &area) = 0;
|
virtual void setViewPort(const core::rect<s32>& area) =0;
|
||||||
|
|
||||||
//! Gets the area of the current viewport.
|
//! Gets the area of the current viewport.
|
||||||
/** \return Rectangle of the current viewport. */
|
/** \return Rectangle of the current viewport. */
|
||||||
virtual const core::rect<s32> &getViewPort() const = 0;
|
virtual const core::rect<s32>& getViewPort() const =0;
|
||||||
|
|
||||||
//! Draws a vertex primitive list
|
//! Draws a vertex primitive list
|
||||||
/** Note that, depending on the index type, some vertices might be not
|
/** Note that, depending on the index type, some vertices might be not
|
||||||
|
@ -528,11 +531,11 @@ public:
|
||||||
\param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex.
|
\param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex.
|
||||||
\param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan.
|
\param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan.
|
||||||
\param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */
|
\param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */
|
||||||
virtual void drawVertexPrimitiveList(const void *vertices, u32 vertexCount,
|
virtual void drawVertexPrimitiveList(const void* vertices, u32 vertexCount,
|
||||||
const void *indexList, u32 primCount,
|
const void* indexList, u32 primCount,
|
||||||
E_VERTEX_TYPE vType = EVT_STANDARD,
|
E_VERTEX_TYPE vType=EVT_STANDARD,
|
||||||
scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES,
|
||||||
E_INDEX_TYPE iType = EIT_16BIT) = 0;
|
E_INDEX_TYPE iType=EIT_16BIT) =0;
|
||||||
|
|
||||||
//! Draws a vertex primitive list in 2d
|
//! Draws a vertex primitive list in 2d
|
||||||
/** Compared to the general (3d) version of this method, this
|
/** Compared to the general (3d) version of this method, this
|
||||||
|
@ -554,11 +557,11 @@ public:
|
||||||
\param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex.
|
\param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex.
|
||||||
\param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan.
|
\param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan.
|
||||||
\param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */
|
\param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */
|
||||||
virtual void draw2DVertexPrimitiveList(const void *vertices, u32 vertexCount,
|
virtual void draw2DVertexPrimitiveList(const void* vertices, u32 vertexCount,
|
||||||
const void *indexList, u32 primCount,
|
const void* indexList, u32 primCount,
|
||||||
E_VERTEX_TYPE vType = EVT_STANDARD,
|
E_VERTEX_TYPE vType=EVT_STANDARD,
|
||||||
scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES,
|
scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES,
|
||||||
E_INDEX_TYPE iType = EIT_16BIT) = 0;
|
E_INDEX_TYPE iType=EIT_16BIT) =0;
|
||||||
|
|
||||||
//! Draws an indexed triangle list.
|
//! Draws an indexed triangle list.
|
||||||
/** Note that there may be at maximum 65536 vertices, because
|
/** Note that there may be at maximum 65536 vertices, because
|
||||||
|
@ -569,8 +572,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
||||||
void drawIndexedTriangleList(const S3DVertex *vertices,
|
void drawIndexedTriangleList(const S3DVertex* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -584,8 +587,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
||||||
void drawIndexedTriangleList(const S3DVertex2TCoords *vertices,
|
void drawIndexedTriangleList(const S3DVertex2TCoords* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLES, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLES, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -599,8 +602,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
\param triangleCount Amount of Triangles. Usually amount of indices / 3. */
|
||||||
void drawIndexedTriangleList(const S3DVertexTangents *vertices,
|
void drawIndexedTriangleList(const S3DVertexTangents* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLES, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLES, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -614,8 +617,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
||||||
void drawIndexedTriangleFan(const S3DVertex *vertices,
|
void drawIndexedTriangleFan(const S3DVertex* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -629,8 +632,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
||||||
void drawIndexedTriangleFan(const S3DVertex2TCoords *vertices,
|
void drawIndexedTriangleFan(const S3DVertex2TCoords* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -644,8 +647,8 @@ public:
|
||||||
\param vertexCount Amount of vertices in the array.
|
\param vertexCount Amount of vertices in the array.
|
||||||
\param indexList Pointer to array of indices.
|
\param indexList Pointer to array of indices.
|
||||||
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
\param triangleCount Amount of Triangles. Usually amount of indices - 2. */
|
||||||
void drawIndexedTriangleFan(const S3DVertexTangents *vertices,
|
void drawIndexedTriangleFan(const S3DVertexTangents* vertices,
|
||||||
u32 vertexCount, const u16 *indexList, u32 triangleCount)
|
u32 vertexCount, const u16* indexList, u32 triangleCount)
|
||||||
{
|
{
|
||||||
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
@ -665,8 +668,8 @@ public:
|
||||||
\param start Start of the 3d line.
|
\param start Start of the 3d line.
|
||||||
\param end End of the 3d line.
|
\param end End of the 3d line.
|
||||||
\param color Color of the line. */
|
\param color Color of the line. */
|
||||||
virtual void draw3DLine(const core::vector3df &start,
|
virtual void draw3DLine(const core::vector3df& start,
|
||||||
const core::vector3df &end, SColor color = SColor(255, 255, 255, 255)) = 0;
|
const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
|
||||||
|
|
||||||
//! Draws a 3d axis aligned box.
|
//! Draws a 3d axis aligned box.
|
||||||
/** This method simply calls draw3DLine for the edges of the
|
/** This method simply calls draw3DLine for the edges of the
|
||||||
|
@ -680,8 +683,8 @@ public:
|
||||||
for some properly set up material before drawing the box.
|
for some properly set up material before drawing the box.
|
||||||
\param box The axis aligned box to draw
|
\param box The axis aligned box to draw
|
||||||
\param color Color to use while drawing the box. */
|
\param color Color to use while drawing the box. */
|
||||||
virtual void draw3DBox(const core::aabbox3d<f32> &box,
|
virtual void draw3DBox(const core::aabbox3d<f32>& box,
|
||||||
SColor color = SColor(255, 255, 255, 255)) = 0;
|
SColor color = SColor(255,255,255,255)) =0;
|
||||||
|
|
||||||
//! Draws a 2d image without any special effects
|
//! Draws a 2d image without any special effects
|
||||||
/** \param texture Pointer to texture to use.
|
/** \param texture Pointer to texture to use.
|
||||||
|
@ -689,8 +692,8 @@ public:
|
||||||
image will be drawn.
|
image will be drawn.
|
||||||
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
||||||
the texture is used to draw the image.*/
|
the texture is used to draw the image.*/
|
||||||
virtual void draw2DImage(const video::ITexture *texture,
|
virtual void draw2DImage(const video::ITexture* texture,
|
||||||
const core::position2d<s32> &destPos, bool useAlphaChannelOfTexture = false) = 0;
|
const core::position2d<s32>& destPos, bool useAlphaChannelOfTexture=false) =0;
|
||||||
|
|
||||||
//! Draws a 2d image using a color
|
//! Draws a 2d image using a color
|
||||||
/** (if color is other than
|
/** (if color is other than
|
||||||
|
@ -708,9 +711,9 @@ public:
|
||||||
will be transparent.
|
will be transparent.
|
||||||
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
||||||
the texture is used to draw the image.*/
|
the texture is used to draw the image.*/
|
||||||
virtual void draw2DImage(const video::ITexture *texture, const core::position2d<s32> &destPos,
|
virtual void draw2DImage(const video::ITexture* texture, const core::position2d<s32>& destPos,
|
||||||
const core::rect<s32> &sourceRect, const core::rect<s32> *clipRect = 0,
|
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
|
||||||
SColor color = SColor(255, 255, 255, 255), bool useAlphaChannelOfTexture = false) = 0;
|
SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
|
||||||
|
|
||||||
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
||||||
/** All drawings are clipped against clipRect (if != 0).
|
/** All drawings are clipped against clipRect (if != 0).
|
||||||
|
@ -728,12 +731,12 @@ public:
|
||||||
255, the image will be transparent.
|
255, the image will be transparent.
|
||||||
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
||||||
the texture is used to draw the image. */
|
the texture is used to draw the image. */
|
||||||
virtual void draw2DImageBatch(const video::ITexture *texture,
|
virtual void draw2DImageBatch(const video::ITexture* texture,
|
||||||
const core::array<core::position2d<s32>> &positions,
|
const core::array<core::position2d<s32> >& positions,
|
||||||
const core::array<core::rect<s32>> &sourceRects,
|
const core::array<core::rect<s32> >& sourceRects,
|
||||||
const core::rect<s32> *clipRect = 0,
|
const core::rect<s32>* clipRect=0,
|
||||||
SColor color = SColor(255, 255, 255, 255),
|
SColor color=SColor(255,255,255,255),
|
||||||
bool useAlphaChannelOfTexture = false) = 0;
|
bool useAlphaChannelOfTexture=false) =0;
|
||||||
|
|
||||||
//! Draws a part of the texture into the rectangle. Note that colors must be an array of 4 colors if used.
|
//! Draws a part of the texture into the rectangle. Note that colors must be an array of 4 colors if used.
|
||||||
/** Suggested and first implemented by zola.
|
/** Suggested and first implemented by zola.
|
||||||
|
@ -745,9 +748,9 @@ public:
|
||||||
the corners of the destRect
|
the corners of the destRect
|
||||||
\param useAlphaChannelOfTexture True if alpha channel will be
|
\param useAlphaChannelOfTexture True if alpha channel will be
|
||||||
blended. */
|
blended. */
|
||||||
virtual void draw2DImage(const video::ITexture *texture, const core::rect<s32> &destRect,
|
virtual void draw2DImage(const video::ITexture* texture, const core::rect<s32>& destRect,
|
||||||
const core::rect<s32> &sourceRect, const core::rect<s32> *clipRect = 0,
|
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
|
||||||
const video::SColor *const colors = 0, bool useAlphaChannelOfTexture = false) = 0;
|
const video::SColor * const colors=0, bool useAlphaChannelOfTexture=false) =0;
|
||||||
|
|
||||||
//! Draws a 2d rectangle.
|
//! Draws a 2d rectangle.
|
||||||
/** \param color Color of the rectangle to draw. The alpha
|
/** \param color Color of the rectangle to draw. The alpha
|
||||||
|
@ -757,8 +760,8 @@ public:
|
||||||
\param clip Pointer to rectangle against which the rectangle
|
\param clip Pointer to rectangle against which the rectangle
|
||||||
will be clipped. If the pointer is null, no clipping will be
|
will be clipped. If the pointer is null, no clipping will be
|
||||||
performed. */
|
performed. */
|
||||||
virtual void draw2DRectangle(SColor color, const core::rect<s32> &pos,
|
virtual void draw2DRectangle(SColor color, const core::rect<s32>& pos,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip =0) =0;
|
||||||
|
|
||||||
//! Draws a 2d rectangle with a gradient.
|
//! Draws a 2d rectangle with a gradient.
|
||||||
/** \param colorLeftUp Color of the upper left corner to draw.
|
/** \param colorLeftUp Color of the upper left corner to draw.
|
||||||
|
@ -777,10 +780,10 @@ public:
|
||||||
\param clip Pointer to rectangle against which the rectangle
|
\param clip Pointer to rectangle against which the rectangle
|
||||||
will be clipped. If the pointer is null, no clipping will be
|
will be clipped. If the pointer is null, no clipping will be
|
||||||
performed. */
|
performed. */
|
||||||
virtual void draw2DRectangle(const core::rect<s32> &pos,
|
virtual void draw2DRectangle(const core::rect<s32>& pos,
|
||||||
SColor colorLeftUp, SColor colorRightUp,
|
SColor colorLeftUp, SColor colorRightUp,
|
||||||
SColor colorLeftDown, SColor colorRightDown,
|
SColor colorLeftDown, SColor colorRightDown,
|
||||||
const core::rect<s32> *clip = 0) = 0;
|
const core::rect<s32>* clip =0) =0;
|
||||||
|
|
||||||
//! Draws a 2d line.
|
//! Draws a 2d line.
|
||||||
/** In theory both start and end will be included in coloring.
|
/** In theory both start and end will be included in coloring.
|
||||||
|
@ -791,20 +794,20 @@ public:
|
||||||
\param end Screen coordinates of the start of the line in
|
\param end Screen coordinates of the start of the line in
|
||||||
pixels.
|
pixels.
|
||||||
\param color Color of the line to draw. */
|
\param color Color of the line to draw. */
|
||||||
virtual void draw2DLine(const core::position2d<s32> &start,
|
virtual void draw2DLine(const core::position2d<s32>& start,
|
||||||
const core::position2d<s32> &end,
|
const core::position2d<s32>& end,
|
||||||
SColor color = SColor(255, 255, 255, 255)) = 0;
|
SColor color=SColor(255,255,255,255)) =0;
|
||||||
|
|
||||||
//! Draws a mesh buffer
|
//! Draws a mesh buffer
|
||||||
/** \param mb Buffer to draw */
|
/** \param mb Buffer to draw */
|
||||||
virtual void drawMeshBuffer(const scene::IMeshBuffer *mb) = 0;
|
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
|
||||||
|
|
||||||
//! Draws normals of a mesh buffer
|
//! Draws normals of a mesh buffer
|
||||||
/** \param mb Buffer to draw the normals of
|
/** \param mb Buffer to draw the normals of
|
||||||
\param length length scale factor of the normals
|
\param length length scale factor of the normals
|
||||||
\param color Color the normals are rendered with
|
\param color Color the normals are rendered with
|
||||||
*/
|
*/
|
||||||
virtual void drawMeshBufferNormals(const scene::IMeshBuffer *mb, f32 length = 10.f, SColor color = 0xffffffff) = 0;
|
virtual void drawMeshBufferNormals(const scene::IMeshBuffer* mb, f32 length=10.f, SColor color=0xffffffff) =0;
|
||||||
|
|
||||||
//! Sets the fog mode.
|
//! Sets the fog mode.
|
||||||
/** These are global values attached to each 3d object rendered,
|
/** These are global values attached to each 3d object rendered,
|
||||||
|
@ -823,30 +826,30 @@ public:
|
||||||
fog. The distance from the viewer is used to compute the fog,
|
fog. The distance from the viewer is used to compute the fog,
|
||||||
not the z-coordinate. This is better, but slower. This might not
|
not the z-coordinate. This is better, but slower. This might not
|
||||||
be available with all drivers and fog settings. */
|
be available with all drivers and fog settings. */
|
||||||
virtual void setFog(SColor color = SColor(0, 255, 255, 255),
|
virtual void setFog(SColor color=SColor(0,255,255,255),
|
||||||
E_FOG_TYPE fogType = EFT_FOG_LINEAR,
|
E_FOG_TYPE fogType=EFT_FOG_LINEAR,
|
||||||
f32 start = 50.0f, f32 end = 100.0f, f32 density = 0.01f,
|
f32 start=50.0f, f32 end=100.0f, f32 density=0.01f,
|
||||||
bool pixelFog = false, bool rangeFog = false) = 0;
|
bool pixelFog=false, bool rangeFog=false) =0;
|
||||||
|
|
||||||
//! Gets the fog mode.
|
//! Gets the fog mode.
|
||||||
virtual void getFog(SColor &color, E_FOG_TYPE &fogType,
|
virtual void getFog(SColor& color, E_FOG_TYPE& fogType,
|
||||||
f32 &start, f32 &end, f32 &density,
|
f32& start, f32& end, f32& density,
|
||||||
bool &pixelFog, bool &rangeFog) = 0;
|
bool& pixelFog, bool& rangeFog) = 0;
|
||||||
|
|
||||||
//! Get the current color format of the color buffer
|
//! Get the current color format of the color buffer
|
||||||
/** \return Color format of the color buffer. */
|
/** \return Color format of the color buffer. */
|
||||||
virtual ECOLOR_FORMAT getColorFormat() const = 0;
|
virtual ECOLOR_FORMAT getColorFormat() const =0;
|
||||||
|
|
||||||
//! Get the size of the screen or render window.
|
//! Get the size of the screen or render window.
|
||||||
/** \return Size of screen or render window. */
|
/** \return Size of screen or render window. */
|
||||||
virtual const core::dimension2d<u32> &getScreenSize() const = 0;
|
virtual const core::dimension2d<u32>& getScreenSize() const =0;
|
||||||
|
|
||||||
//! Get the size of the current render target
|
//! Get the size of the current render target
|
||||||
/** This method will return the screen size if the driver
|
/** This method will return the screen size if the driver
|
||||||
doesn't support render to texture, or if the current render
|
doesn't support render to texture, or if the current render
|
||||||
target is the screen.
|
target is the screen.
|
||||||
\return Size of render target or screen/window */
|
\return Size of render target or screen/window */
|
||||||
virtual const core::dimension2d<u32> &getCurrentRenderTargetSize() const = 0;
|
virtual const core::dimension2d<u32>& getCurrentRenderTargetSize() const =0;
|
||||||
|
|
||||||
//! Returns current frames per second value.
|
//! Returns current frames per second value.
|
||||||
/** This value is updated approximately every 1.5 seconds and
|
/** This value is updated approximately every 1.5 seconds and
|
||||||
|
@ -854,19 +857,19 @@ public:
|
||||||
rate. It is not suitable for use in performing timing
|
rate. It is not suitable for use in performing timing
|
||||||
calculations or framerate independent movement.
|
calculations or framerate independent movement.
|
||||||
\return Approximate amount of frames per second drawn. */
|
\return Approximate amount of frames per second drawn. */
|
||||||
virtual s32 getFPS() const = 0;
|
virtual s32 getFPS() const =0;
|
||||||
|
|
||||||
//! Returns amount of primitives (mostly triangles) which were drawn in the last frame.
|
//! Returns amount of primitives (mostly triangles) which were drawn in the last frame.
|
||||||
/** Together with getFPS() very useful method for statistics.
|
/** Together with getFPS() very useful method for statistics.
|
||||||
\param mode Defines if the primitives drawn are accumulated or
|
\param mode Defines if the primitives drawn are accumulated or
|
||||||
counted per frame.
|
counted per frame.
|
||||||
\return Amount of primitives drawn in the last frame. */
|
\return Amount of primitives drawn in the last frame. */
|
||||||
virtual u32 getPrimitiveCountDrawn(u32 mode = 0) const = 0;
|
virtual u32 getPrimitiveCountDrawn( u32 mode =0 ) const =0;
|
||||||
|
|
||||||
//! 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
|
||||||
|
@ -875,7 +878,7 @@ public:
|
||||||
format. A pointer to the implementation can be passed to the
|
format. A pointer to the implementation can be passed to the
|
||||||
engine using this method.
|
engine using this method.
|
||||||
\param loader Pointer to the external loader created. */
|
\param loader Pointer to the external loader created. */
|
||||||
virtual void addExternalImageLoader(IImageLoader *loader) = 0;
|
virtual void addExternalImageLoader(IImageLoader* loader) =0;
|
||||||
|
|
||||||
//! Adds an external image writer to the engine.
|
//! Adds an external image writer to the engine.
|
||||||
/** This is useful if the Irrlicht Engine should be able to
|
/** This is useful if the Irrlicht Engine should be able to
|
||||||
|
@ -884,13 +887,13 @@ public:
|
||||||
writing this file format. A pointer to the implementation can
|
writing this file format. A pointer to the implementation can
|
||||||
be passed to the engine using this method.
|
be passed to the engine using this method.
|
||||||
\param writer: Pointer to the external writer created. */
|
\param writer: Pointer to the external writer created. */
|
||||||
virtual void addExternalImageWriter(IImageWriter *writer) = 0;
|
virtual void addExternalImageWriter(IImageWriter* writer) =0;
|
||||||
|
|
||||||
//! Returns the maximum amount of primitives
|
//! Returns the maximum amount of primitives
|
||||||
/** (mostly vertices) which the device is able to render with
|
/** (mostly vertices) which the device is able to render with
|
||||||
one drawVertexPrimitiveList call.
|
one drawVertexPrimitiveList call.
|
||||||
\return Maximum amount of primitives. */
|
\return Maximum amount of primitives. */
|
||||||
virtual u32 getMaximalPrimitiveCount() const = 0;
|
virtual u32 getMaximalPrimitiveCount() const =0;
|
||||||
|
|
||||||
//! Enables or disables a texture creation flag.
|
//! Enables or disables a texture creation flag.
|
||||||
/** These flags define how textures should be created. By
|
/** These flags define how textures should be created. By
|
||||||
|
@ -902,13 +905,13 @@ public:
|
||||||
\param flag Texture creation flag.
|
\param flag Texture creation flag.
|
||||||
\param enabled Specifies if the given flag should be enabled or
|
\param enabled Specifies if the given flag should be enabled or
|
||||||
disabled. */
|
disabled. */
|
||||||
virtual void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled = true) = 0;
|
virtual void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled=true) =0;
|
||||||
|
|
||||||
//! Returns if a texture creation flag is enabled or disabled.
|
//! Returns if a texture creation flag is enabled or disabled.
|
||||||
/** You can change this value using setTextureCreationFlag().
|
/** You can change this value using setTextureCreationFlag().
|
||||||
\param flag Texture creation flag.
|
\param flag Texture creation flag.
|
||||||
\return The current texture creation flag enabled mode. */
|
\return The current texture creation flag enabled mode. */
|
||||||
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const = 0;
|
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
|
||||||
|
|
||||||
//! Creates a software image from a file.
|
//! Creates a software image from a file.
|
||||||
/** No hardware texture will be created for this image. This
|
/** No hardware texture will be created for this image. This
|
||||||
|
@ -919,7 +922,7 @@ public:
|
||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IImage *createImageFromFile(const io::path &filename) = 0;
|
virtual IImage* createImageFromFile(const io::path& filename) = 0;
|
||||||
|
|
||||||
//! Creates a software image from a file.
|
//! Creates a software image from a file.
|
||||||
/** No hardware texture will be created for this image. This
|
/** No hardware texture will be created for this image. This
|
||||||
|
@ -929,7 +932,7 @@ public:
|
||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IImage *createImageFromFile(io::IReadFile *file) = 0;
|
virtual IImage* createImageFromFile(io::IReadFile* file) = 0;
|
||||||
|
|
||||||
//! Writes the provided image to a file.
|
//! Writes the provided image to a file.
|
||||||
/** Requires that there is a suitable image writer registered
|
/** Requires that there is a suitable image writer registered
|
||||||
|
@ -939,7 +942,7 @@ public:
|
||||||
\param param Control parameter for the backend (e.g. compression
|
\param param Control parameter for the backend (e.g. compression
|
||||||
level).
|
level).
|
||||||
\return True on successful write. */
|
\return True on successful write. */
|
||||||
virtual bool writeImageToFile(IImage *image, const io::path &filename, u32 param = 0) = 0;
|
virtual bool writeImageToFile(IImage* image, const io::path& filename, u32 param = 0) = 0;
|
||||||
|
|
||||||
//! Writes the provided image to a file.
|
//! Writes the provided image to a file.
|
||||||
/** Requires that there is a suitable image writer registered
|
/** Requires that there is a suitable image writer registered
|
||||||
|
@ -950,7 +953,7 @@ public:
|
||||||
\param param Control parameter for the backend (e.g. compression
|
\param param Control parameter for the backend (e.g. compression
|
||||||
level).
|
level).
|
||||||
\return True on successful write. */
|
\return True on successful write. */
|
||||||
virtual bool writeImageToFile(IImage *image, io::IWriteFile *file, u32 param = 0) = 0;
|
virtual bool writeImageToFile(IImage* image, io::IWriteFile* file, u32 param =0) =0;
|
||||||
|
|
||||||
//! Creates a software image from a byte array.
|
//! Creates a software image from a byte array.
|
||||||
/** No hardware texture will be created for this image. This
|
/** No hardware texture will be created for this image. This
|
||||||
|
@ -970,8 +973,8 @@ public:
|
||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IImage *createImageFromData(ECOLOR_FORMAT format,
|
virtual IImage* createImageFromData(ECOLOR_FORMAT format,
|
||||||
const core::dimension2d<u32> &size, void *data, bool ownForeignMemory = false,
|
const core::dimension2d<u32>& size, void *data, bool ownForeignMemory = false,
|
||||||
bool deleteMemory = true) = 0;
|
bool deleteMemory = true) = 0;
|
||||||
|
|
||||||
//! Creates an empty software image.
|
//! Creates an empty software image.
|
||||||
|
@ -981,7 +984,7 @@ public:
|
||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IImage *createImage(ECOLOR_FORMAT format, const core::dimension2d<u32> &size) = 0;
|
virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) =0;
|
||||||
|
|
||||||
//! Creates a software image from a part of a texture.
|
//! Creates a software image from a part of a texture.
|
||||||
/**
|
/**
|
||||||
|
@ -991,14 +994,14 @@ public:
|
||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
virtual IImage *createImage(ITexture *texture,
|
virtual IImage* createImage(ITexture* texture,
|
||||||
const core::position2d<s32> &pos,
|
const core::position2d<s32>& pos,
|
||||||
const core::dimension2d<u32> &size) = 0;
|
const core::dimension2d<u32>& size) =0;
|
||||||
|
|
||||||
//! Event handler for resize events. Only used by the engine internally.
|
//! Event handler for resize events. Only used by the engine internally.
|
||||||
/** Used to notify the driver that the window was resized.
|
/** Used to notify the driver that the window was resized.
|
||||||
Usually, there is no need to call this method. */
|
Usually, there is no need to call this method. */
|
||||||
virtual void OnResize(const core::dimension2d<u32> &size) = 0;
|
virtual void OnResize(const core::dimension2d<u32>& size) =0;
|
||||||
|
|
||||||
//! Adds a new material renderer to the video device.
|
//! Adds a new material renderer to the video device.
|
||||||
/** Use this method to extend the VideoDriver with new material
|
/** Use this method to extend the VideoDriver with new material
|
||||||
|
@ -1021,18 +1024,18 @@ public:
|
||||||
an error occurred. For example if you tried to add an material
|
an error occurred. For example if you tried to add an material
|
||||||
renderer to the software renderer or the null device, which do
|
renderer to the software renderer or the null device, which do
|
||||||
not accept material renderers. */
|
not accept material renderers. */
|
||||||
virtual s32 addMaterialRenderer(IMaterialRenderer *renderer, const c8 *name = 0) = 0;
|
virtual s32 addMaterialRenderer(IMaterialRenderer* renderer, const c8* name =0) =0;
|
||||||
|
|
||||||
//! Get access to a material renderer by index.
|
//! Get access to a material renderer by index.
|
||||||
/** \param idx Id of the material renderer. Can be a value of
|
/** \param idx Id of the material renderer. Can be a value of
|
||||||
the E_MATERIAL_TYPE enum or a value which was returned by
|
the E_MATERIAL_TYPE enum or a value which was returned by
|
||||||
addMaterialRenderer().
|
addMaterialRenderer().
|
||||||
\return Pointer to material renderer or null if not existing. */
|
\return Pointer to material renderer or null if not existing. */
|
||||||
virtual IMaterialRenderer *getMaterialRenderer(u32 idx) const = 0;
|
virtual IMaterialRenderer* getMaterialRenderer(u32 idx) const = 0;
|
||||||
|
|
||||||
//! Get amount of currently available material renderers.
|
//! Get amount of currently available material renderers.
|
||||||
/** \return Amount of currently available material renderers. */
|
/** \return Amount of currently available material renderers. */
|
||||||
virtual u32 getMaterialRendererCount() const = 0;
|
virtual u32 getMaterialRendererCount() const =0;
|
||||||
|
|
||||||
//! Get name of a material renderer
|
//! Get name of a material renderer
|
||||||
/** This string can, e.g., be used to test if a specific
|
/** This string can, e.g., be used to test if a specific
|
||||||
|
@ -1044,7 +1047,7 @@ public:
|
||||||
addMaterialRenderer().
|
addMaterialRenderer().
|
||||||
\return String with the name of the renderer, or 0 if not
|
\return String with the name of the renderer, or 0 if not
|
||||||
existing */
|
existing */
|
||||||
virtual const c8 *getMaterialRendererName(u32 idx) const = 0;
|
virtual const c8* getMaterialRendererName(u32 idx) const =0;
|
||||||
|
|
||||||
//! Sets the name of a material renderer.
|
//! Sets the name of a material renderer.
|
||||||
/** Will have no effect on built-in material renderers.
|
/** Will have no effect on built-in material renderers.
|
||||||
|
@ -1052,7 +1055,7 @@ public:
|
||||||
E_MATERIAL_TYPE enum or a value which was returned by
|
E_MATERIAL_TYPE enum or a value which was returned by
|
||||||
addMaterialRenderer().
|
addMaterialRenderer().
|
||||||
\param name: New name of the material renderer. */
|
\param name: New name of the material renderer. */
|
||||||
virtual void setMaterialRendererName(u32 idx, const c8 *name) = 0;
|
virtual void setMaterialRendererName(u32 idx, const c8* name) =0;
|
||||||
|
|
||||||
//! Swap the material renderers used for certain id's
|
//! Swap the material renderers used for certain id's
|
||||||
/** Swap the IMaterialRenderers responsible for rendering specific
|
/** Swap the IMaterialRenderers responsible for rendering specific
|
||||||
|
@ -1062,29 +1065,29 @@ public:
|
||||||
\param idx2 Second material index to swap. It must already exist or nothing happens.
|
\param idx2 Second material index to swap. It must already exist or nothing happens.
|
||||||
\param swapNames When true the renderer names also swap
|
\param swapNames When true the renderer names also swap
|
||||||
When false the names will stay at the original index */
|
When false the names will stay at the original index */
|
||||||
virtual void swapMaterialRenderers(u32 idx1, u32 idx2, bool swapNames = true) = 0;
|
virtual void swapMaterialRenderers(u32 idx1, u32 idx2, bool swapNames=true) = 0;
|
||||||
|
|
||||||
//! Returns driver and operating system specific data about the IVideoDriver.
|
//! Returns driver and operating system specific data about the IVideoDriver.
|
||||||
/** This method should only be used if the engine should be
|
/** This method should only be used if the engine should be
|
||||||
extended without having to modify the source of the engine.
|
extended without having to modify the source of the engine.
|
||||||
\return Collection of device dependent pointers. */
|
\return Collection of device dependent pointers. */
|
||||||
virtual const SExposedVideoData &getExposedVideoData() = 0;
|
virtual const SExposedVideoData& getExposedVideoData() =0;
|
||||||
|
|
||||||
//! Get type of video driver
|
//! Get type of video driver
|
||||||
/** \return Type of driver. */
|
/** \return Type of driver. */
|
||||||
virtual E_DRIVER_TYPE getDriverType() const = 0;
|
virtual E_DRIVER_TYPE getDriverType() const =0;
|
||||||
|
|
||||||
//! Gets the IGPUProgrammingServices interface.
|
//! Gets the IGPUProgrammingServices interface.
|
||||||
/** \return Pointer to the IGPUProgrammingServices. Returns 0
|
/** \return Pointer to the IGPUProgrammingServices. Returns 0
|
||||||
if the video driver does not support this. For example the
|
if the video driver does not support this. For example the
|
||||||
Software driver and the Null driver will always return 0. */
|
Software driver and the Null driver will always return 0. */
|
||||||
virtual IGPUProgrammingServices *getGPUProgrammingServices() = 0;
|
virtual IGPUProgrammingServices* getGPUProgrammingServices() =0;
|
||||||
|
|
||||||
//! Returns a pointer to the mesh manipulator.
|
//! Returns a pointer to the mesh manipulator.
|
||||||
virtual scene::IMeshManipulator *getMeshManipulator() = 0;
|
virtual scene::IMeshManipulator* getMeshManipulator() =0;
|
||||||
|
|
||||||
//! Clear the color, depth and/or stencil buffers.
|
//! Clear the color, depth and/or stencil buffers.
|
||||||
virtual void clearBuffers(u16 flag, SColor color = SColor(255, 0, 0, 0), f32 depth = 1.f, u8 stencil = 0) = 0;
|
virtual void clearBuffers(u16 flag, SColor color = SColor(255,0,0,0), f32 depth = 1.f, u8 stencil = 0) = 0;
|
||||||
|
|
||||||
//! Clears the ZBuffer.
|
//! Clears the ZBuffer.
|
||||||
/** Note that you usually need not to call this method, as it
|
/** Note that you usually need not to call this method, as it
|
||||||
|
@ -1095,19 +1098,19 @@ public:
|
||||||
*/
|
*/
|
||||||
void clearZBuffer()
|
void clearZBuffer()
|
||||||
{
|
{
|
||||||
clearBuffers(ECBF_DEPTH, SColor(255, 0, 0, 0), 1.f, 0);
|
clearBuffers(ECBF_DEPTH, SColor(255,0,0,0), 1.f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Make a screenshot of the last rendered frame.
|
//! Make a screenshot of the last rendered frame.
|
||||||
/** \return An image created from the last rendered frame. */
|
/** \return An image created from the last rendered frame. */
|
||||||
virtual IImage *createScreenShot(video::ECOLOR_FORMAT format = video::ECF_UNKNOWN, video::E_RENDER_TARGET target = video::ERT_FRAME_BUFFER) = 0;
|
virtual IImage* createScreenShot(video::ECOLOR_FORMAT format=video::ECF_UNKNOWN, video::E_RENDER_TARGET target=video::ERT_FRAME_BUFFER) =0;
|
||||||
|
|
||||||
//! Check if the image is already loaded.
|
//! Check if the image is already loaded.
|
||||||
/** Works similar to getTexture(), but does not load the texture
|
/** Works similar to getTexture(), but does not load the texture
|
||||||
if it is not currently loaded.
|
if it is not currently loaded.
|
||||||
\param filename Name of the texture.
|
\param filename Name of the texture.
|
||||||
\return Pointer to loaded texture, or 0 if not found. */
|
\return Pointer to loaded texture, or 0 if not found. */
|
||||||
virtual video::ITexture *findTexture(const io::path &filename) = 0;
|
virtual video::ITexture* findTexture(const io::path& filename) = 0;
|
||||||
|
|
||||||
//! Set or unset a clipping plane.
|
//! Set or unset a clipping plane.
|
||||||
/** There are at least 6 clipping planes available for the user
|
/** There are at least 6 clipping planes available for the user
|
||||||
|
@ -1118,7 +1121,7 @@ public:
|
||||||
\param enable If true, enable the clipping plane else disable
|
\param enable If true, enable the clipping plane else disable
|
||||||
it.
|
it.
|
||||||
\return True if the clipping plane is usable. */
|
\return True if the clipping plane is usable. */
|
||||||
virtual bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) = 0;
|
virtual bool setClipPlane(u32 index, const core::plane3df& plane, bool enable=false) =0;
|
||||||
|
|
||||||
//! Enable or disable a clipping plane.
|
//! Enable or disable a clipping plane.
|
||||||
/** There are at least 6 clipping planes available for the user
|
/** There are at least 6 clipping planes available for the user
|
||||||
|
@ -1127,18 +1130,18 @@ public:
|
||||||
MaxUserClipPlanes.
|
MaxUserClipPlanes.
|
||||||
\param enable If true, enable the clipping plane else disable
|
\param enable If true, enable the clipping plane else disable
|
||||||
it. */
|
it. */
|
||||||
virtual void enableClipPlane(u32 index, bool enable) = 0;
|
virtual void enableClipPlane(u32 index, bool enable) =0;
|
||||||
|
|
||||||
//! Set the minimum number of vertices for which a hw buffer will be created
|
//! Set the minimum number of vertices for which a hw buffer will be created
|
||||||
/** \param count Number of vertices to set as minimum. */
|
/** \param count Number of vertices to set as minimum. */
|
||||||
virtual void setMinHardwareBufferVertexCount(u32 count) = 0;
|
virtual void setMinHardwareBufferVertexCount(u32 count) =0;
|
||||||
|
|
||||||
//! Get the global Material, which might override local materials.
|
//! Get the global Material, which might override local materials.
|
||||||
/** Depending on the enable flags, values from this Material
|
/** Depending on the enable flags, values from this Material
|
||||||
are used to override those of local materials of some
|
are used to override those of local materials of some
|
||||||
meshbuffer being rendered.
|
meshbuffer being rendered.
|
||||||
\return Reference to the Override Material. */
|
\return Reference to the Override Material. */
|
||||||
virtual SOverrideMaterial &getOverrideMaterial() = 0;
|
virtual SOverrideMaterial& getOverrideMaterial() =0;
|
||||||
|
|
||||||
//! Get the 2d override material for altering its values
|
//! Get the 2d override material for altering its values
|
||||||
/** The 2d override material allows to alter certain render
|
/** The 2d override material allows to alter certain render
|
||||||
|
@ -1154,33 +1157,33 @@ public:
|
||||||
\return Material reference which should be altered to reflect
|
\return Material reference which should be altered to reflect
|
||||||
the new settings.
|
the new settings.
|
||||||
*/
|
*/
|
||||||
virtual SMaterial &getMaterial2D() = 0;
|
virtual SMaterial& getMaterial2D() =0;
|
||||||
|
|
||||||
//! Enable the 2d override material
|
//! Enable the 2d override material
|
||||||
/** \param enable Flag which tells whether the material shall be
|
/** \param enable Flag which tells whether the material shall be
|
||||||
enabled or disabled. */
|
enabled or disabled. */
|
||||||
virtual void enableMaterial2D(bool enable = true) = 0;
|
virtual void enableMaterial2D(bool enable=true) =0;
|
||||||
|
|
||||||
//! Get the graphics card vendor name.
|
//! Get the graphics card vendor name.
|
||||||
virtual core::stringc getVendorInfo() = 0;
|
virtual core::stringc getVendorInfo() =0;
|
||||||
|
|
||||||
//! Only used by the engine internally.
|
//! Only used by the engine internally.
|
||||||
/** The ambient color is set in the scene manager, see
|
/** The ambient color is set in the scene manager, see
|
||||||
scene::ISceneManager::setAmbientLight().
|
scene::ISceneManager::setAmbientLight().
|
||||||
\param color New color of the ambient light. */
|
\param color New color of the ambient light. */
|
||||||
virtual void setAmbientLight(const SColorf &color) = 0;
|
virtual void setAmbientLight(const SColorf& color) =0;
|
||||||
|
|
||||||
//! Get the global ambient light currently used by the driver
|
//! Get the global ambient light currently used by the driver
|
||||||
virtual const SColorf &getAmbientLight() const = 0;
|
virtual const SColorf& getAmbientLight() const = 0;
|
||||||
|
|
||||||
//! Only used by the engine internally.
|
//! Only used by the engine internally.
|
||||||
/** Passes the global material flag AllowZWriteOnTransparent.
|
/** Passes the global material flag AllowZWriteOnTransparent.
|
||||||
Use the SceneManager attribute to set this value from your app.
|
Use the SceneManager attribute to set this value from your app.
|
||||||
\param flag Default behavior is to disable ZWrite, i.e. false. */
|
\param flag Default behavior is to disable ZWrite, i.e. false. */
|
||||||
virtual void setAllowZWriteOnTransparent(bool flag) = 0;
|
virtual void setAllowZWriteOnTransparent(bool flag) =0;
|
||||||
|
|
||||||
//! Get the maximum texture size supported.
|
//! Get the maximum texture size supported.
|
||||||
virtual core::dimension2du getMaxTextureSize() const = 0;
|
virtual core::dimension2du getMaxTextureSize() const =0;
|
||||||
|
|
||||||
//! Color conversion convenience function
|
//! Color conversion convenience function
|
||||||
/** Convert an image (as array of pixels) from source to destination
|
/** Convert an image (as array of pixels) from source to destination
|
||||||
|
@ -1192,16 +1195,18 @@ public:
|
||||||
\param dP Pointer to destination
|
\param dP Pointer to destination
|
||||||
\param dF Color format of destination
|
\param dF Color format of destination
|
||||||
*/
|
*/
|
||||||
virtual void convertColor(const void *sP, ECOLOR_FORMAT sF, s32 sN,
|
virtual void convertColor(const void* sP, ECOLOR_FORMAT sF, s32 sN,
|
||||||
void *dP, ECOLOR_FORMAT dF) const = 0;
|
void* dP, ECOLOR_FORMAT dF) const =0;
|
||||||
|
|
||||||
//! Check if the driver supports creating textures with the given color format
|
//! Check if the driver supports creating textures with the given color format
|
||||||
/** \return True if the format is available, false if not. */
|
/** \return True if the format is available, false if not. */
|
||||||
virtual bool queryTextureFormat(ECOLOR_FORMAT format) const = 0;
|
virtual bool queryTextureFormat(ECOLOR_FORMAT format) const = 0;
|
||||||
|
|
||||||
//! Used by some SceneNodes to check if a material should be rendered in the transparent render pass
|
//! Used by some SceneNodes to check if a material should be rendered in the transparent render pass
|
||||||
virtual bool needsTransparentRenderPass(const irr::video::SMaterial &material) const = 0;
|
virtual bool needsTransparentRenderPass(const irr::video::SMaterial& material) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -12,15 +13,15 @@ namespace irr
|
||||||
namespace io
|
namespace io
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Interface providing write access to a file.
|
//! Interface providing write access to a file.
|
||||||
class IWriteFile : public virtual IReferenceCounted
|
class IWriteFile : public virtual IReferenceCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Writes an amount of bytes to the file.
|
//! Writes an amount of bytes to the file.
|
||||||
/** \param buffer Pointer to buffer of bytes to write.
|
/** \param buffer Pointer to buffer of bytes to write.
|
||||||
\param sizeToWrite Amount of bytes to write to the file.
|
\param sizeToWrite Amount of bytes to write to the file.
|
||||||
\return How much bytes were written. */
|
\return How much bytes were written. */
|
||||||
virtual size_t write(const void *buffer, size_t sizeToWrite) = 0;
|
virtual size_t write(const void* buffer, size_t sizeToWrite) = 0;
|
||||||
|
|
||||||
//! Changes position in file
|
//! Changes position in file
|
||||||
/** \param finalPos Destination position in the file.
|
/** \param finalPos Destination position in the file.
|
||||||
|
@ -36,12 +37,15 @@ public:
|
||||||
|
|
||||||
//! Get name of file.
|
//! Get name of file.
|
||||||
/** \return File name as zero terminated character string. */
|
/** \return File name as zero terminated character string. */
|
||||||
virtual const path &getFileName() const = 0;
|
virtual const path& getFileName() const = 0;
|
||||||
|
|
||||||
//! Flush the content of the buffer in the file
|
//! Flush the content of the buffer in the file
|
||||||
/** \return True if successful, otherwise false. */
|
/** \return True if successful, otherwise false. */
|
||||||
virtual bool flush() = 0;
|
virtual bool flush() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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 14
|
||||||
#define IRRLICHT_VERSION_MT "mt15"
|
#define IRRLICHT_VERSION_MT "mt14"
|
||||||
|
|
||||||
//! 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"
|
||||||
|
@ -17,39 +18,36 @@
|
||||||
|
|
||||||
namespace irr
|
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
|
|
||||||
|
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
|
||||||
|
/** This is the most important class of the Irrlicht Engine. You can
|
||||||
|
access everything in the engine if you have a pointer to an instance of
|
||||||
|
this class. There should be only one instance of this class at any
|
||||||
|
time.
|
||||||
|
*/
|
||||||
|
class IrrlichtDevice : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
|
|
||||||
/** This is the most important class of the Irrlicht Engine. You can
|
|
||||||
access everything in the engine if you have a pointer to an instance of
|
|
||||||
this class. There should be only one instance of this class at any
|
|
||||||
time.
|
|
||||||
*/
|
|
||||||
class IrrlichtDevice : public virtual IReferenceCounted
|
|
||||||
{
|
|
||||||
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
|
||||||
|
@ -91,34 +89,34 @@ public:
|
||||||
On most Linux systems it's relatively exact, but also no guarantee.
|
On most Linux systems it's relatively exact, but also no guarantee.
|
||||||
\param pauseTimer: If true, pauses the device timer while sleeping
|
\param pauseTimer: If true, pauses the device timer while sleeping
|
||||||
*/
|
*/
|
||||||
virtual void sleep(u32 timeMs, bool pauseTimer = false) = 0;
|
virtual void sleep(u32 timeMs, bool pauseTimer=false) = 0;
|
||||||
|
|
||||||
//! Provides access to the video driver for drawing 3d and 2d geometry.
|
//! Provides access to the video driver for drawing 3d and 2d geometry.
|
||||||
/** \return Pointer the video driver. */
|
/** \return Pointer the video driver. */
|
||||||
virtual video::IVideoDriver *getVideoDriver() = 0;
|
virtual video::IVideoDriver* getVideoDriver() = 0;
|
||||||
|
|
||||||
//! Provides access to the virtual file system.
|
//! Provides access to the virtual file system.
|
||||||
/** \return Pointer to the file system. */
|
/** \return Pointer to the file system. */
|
||||||
virtual io::IFileSystem *getFileSystem() = 0;
|
virtual io::IFileSystem* getFileSystem() = 0;
|
||||||
|
|
||||||
//! Provides access to the 2d user interface environment.
|
//! Provides access to the 2d user interface environment.
|
||||||
/** \return Pointer to the gui environment. */
|
/** \return Pointer to the gui environment. */
|
||||||
virtual gui::IGUIEnvironment *getGUIEnvironment() = 0;
|
virtual gui::IGUIEnvironment* getGUIEnvironment() = 0;
|
||||||
|
|
||||||
//! Provides access to the scene manager.
|
//! Provides access to the scene manager.
|
||||||
/** \return Pointer to the scene manager. */
|
/** \return Pointer to the scene manager. */
|
||||||
virtual scene::ISceneManager *getSceneManager() = 0;
|
virtual scene::ISceneManager* getSceneManager() = 0;
|
||||||
|
|
||||||
//! Provides access to the cursor control.
|
//! Provides access to the cursor control.
|
||||||
/** \return Pointer to the mouse cursor control interface. */
|
/** \return Pointer to the mouse cursor control interface. */
|
||||||
virtual gui::ICursorControl *getCursorControl() = 0;
|
virtual gui::ICursorControl* getCursorControl() = 0;
|
||||||
|
|
||||||
//! Provides access to the message logger.
|
//! Provides access to the message logger.
|
||||||
/** \return Pointer to the logger. */
|
/** \return Pointer to the logger. */
|
||||||
virtual ILogger *getLogger() = 0;
|
virtual ILogger* getLogger() = 0;
|
||||||
|
|
||||||
//! Get context manager
|
//! Get context manager
|
||||||
virtual video::IContextManager *getContextManager() = 0;
|
virtual video::IContextManager* getContextManager() = 0;
|
||||||
|
|
||||||
//! Provides access to the operation system operator object.
|
//! Provides access to the operation system operator object.
|
||||||
/** The OS operator provides methods for
|
/** The OS operator provides methods for
|
||||||
|
@ -126,17 +124,17 @@ public:
|
||||||
specific operations, such as exchanging data with the clipboard
|
specific operations, such as exchanging data with the clipboard
|
||||||
or reading the operation system version.
|
or reading the operation system version.
|
||||||
\return Pointer to the OS operator. */
|
\return Pointer to the OS operator. */
|
||||||
virtual IOSOperator *getOSOperator() = 0;
|
virtual IOSOperator* getOSOperator() = 0;
|
||||||
|
|
||||||
//! Provides access to the engine's timer.
|
//! Provides access to the engine's timer.
|
||||||
/** The system time can be retrieved by it as
|
/** The system time can be retrieved by it as
|
||||||
well as the virtual time, which also can be manipulated.
|
well as the virtual time, which also can be manipulated.
|
||||||
\return Pointer to the ITimer object. */
|
\return Pointer to the ITimer object. */
|
||||||
virtual ITimer *getTimer() = 0;
|
virtual ITimer* getTimer() = 0;
|
||||||
|
|
||||||
//! Sets the caption of the window.
|
//! Sets the caption of the window.
|
||||||
/** \param text: New text of the window caption. */
|
/** \param text: New text of the window caption. */
|
||||||
virtual void setWindowCaption(const wchar_t *text) = 0;
|
virtual void setWindowCaption(const wchar_t* text) = 0;
|
||||||
|
|
||||||
//! Sets the window icon.
|
//! Sets the window icon.
|
||||||
/** \param img The icon texture.
|
/** \param img The icon texture.
|
||||||
|
@ -180,10 +178,7 @@ public:
|
||||||
virtual bool isFullscreen() const = 0;
|
virtual bool isFullscreen() const = 0;
|
||||||
|
|
||||||
//! Checks if the window could possibly be visible.
|
//! Checks if the window could possibly be visible.
|
||||||
//! Currently, this only returns false when the activity is stopped on
|
//! Currently, this only returns false when the app is paused on Android.
|
||||||
//! 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; };
|
virtual bool isWindowVisible() const { return true; };
|
||||||
|
|
||||||
//! Get the current color format of the window
|
//! Get the current color format of the window
|
||||||
|
@ -198,18 +193,18 @@ public:
|
||||||
/** The returned string
|
/** The returned string
|
||||||
will look like this: "1.2.3" or this: "1.2".
|
will look like this: "1.2.3" or this: "1.2".
|
||||||
\return String which contains the version. */
|
\return String which contains the version. */
|
||||||
virtual const c8 *getVersion() const = 0;
|
virtual const c8* getVersion() const = 0;
|
||||||
|
|
||||||
//! Sets a new user event receiver which will receive events from the engine.
|
//! Sets a new user event receiver which will receive events from the engine.
|
||||||
/** Return true in IEventReceiver::OnEvent to prevent the event from continuing along
|
/** Return true in IEventReceiver::OnEvent to prevent the event from continuing along
|
||||||
the chain of event receivers. The path that an event takes through the system depends
|
the chain of event receivers. The path that an event takes through the system depends
|
||||||
on its type. See irr::EEVENT_TYPE for details.
|
on its type. See irr::EEVENT_TYPE for details.
|
||||||
\param receiver New receiver to be used. */
|
\param receiver New receiver to be used. */
|
||||||
virtual void setEventReceiver(IEventReceiver *receiver) = 0;
|
virtual void setEventReceiver(IEventReceiver* receiver) = 0;
|
||||||
|
|
||||||
//! Provides access to the current event receiver.
|
//! Provides access to the current event receiver.
|
||||||
/** \return Pointer to the current event receiver. Returns 0 if there is none. */
|
/** \return Pointer to the current event receiver. Returns 0 if there is none. */
|
||||||
virtual IEventReceiver *getEventReceiver() = 0;
|
virtual IEventReceiver* getEventReceiver() = 0;
|
||||||
|
|
||||||
//! Sends a user created event to the engine.
|
//! Sends a user created event to the engine.
|
||||||
/** Is is usually not necessary to use this. However, if you
|
/** Is is usually not necessary to use this. However, if you
|
||||||
|
@ -217,35 +212,35 @@ public:
|
||||||
input, you can use this to post key or mouse input events to
|
input, you can use this to post key or mouse input events to
|
||||||
the engine. Internally, this method only delegates the events
|
the engine. Internally, this method only delegates the events
|
||||||
further to the scene manager and the GUI environment. */
|
further to the scene manager and the GUI environment. */
|
||||||
virtual bool postEventFromUser(const SEvent &event) = 0;
|
virtual bool postEventFromUser(const SEvent& event) = 0;
|
||||||
|
|
||||||
//! Sets the input receiving scene manager.
|
//! Sets the input receiving scene manager.
|
||||||
/** If set to null, the main scene manager (returned by
|
/** If set to null, the main scene manager (returned by
|
||||||
GetSceneManager()) will receive the input
|
GetSceneManager()) will receive the input
|
||||||
\param sceneManager New scene manager to be used. */
|
\param sceneManager New scene manager to be used. */
|
||||||
virtual void setInputReceivingSceneManager(scene::ISceneManager *sceneManager) = 0;
|
virtual void setInputReceivingSceneManager(scene::ISceneManager* sceneManager) = 0;
|
||||||
|
|
||||||
//! Sets if the window should be resizable in windowed mode.
|
//! Sets if the window should be resizable in windowed mode.
|
||||||
/** The default is false. This method only works in windowed
|
/** The default is false. This method only works in windowed
|
||||||
mode.
|
mode.
|
||||||
\param resize Flag whether the window should be resizable. */
|
\param resize Flag whether the window should be resizable. */
|
||||||
virtual void setResizable(bool resize = false) = 0;
|
virtual void setResizable(bool resize=false) = 0;
|
||||||
|
|
||||||
//! Resize the render window.
|
//! Resize the render window.
|
||||||
/** This will only work in windowed mode and is not yet supported on all systems.
|
/** This will only work in windowed mode and is not yet supported on all systems.
|
||||||
It does set the drawing/clientDC size of the window, the window decorations are added to that.
|
It does set the drawing/clientDC size of the window, the window decorations are added to that.
|
||||||
You get the current window size with IVideoDriver::getScreenSize() (might be unified in future)
|
You get the current window size with IVideoDriver::getScreenSize() (might be unified in future)
|
||||||
*/
|
*/
|
||||||
virtual void setWindowSize(const irr::core::dimension2d<u32> &size) = 0;
|
virtual void setWindowSize(const irr::core::dimension2d<u32>& size) = 0;
|
||||||
|
|
||||||
//! Minimizes the window if possible.
|
//! Minimizes the window if possible.
|
||||||
virtual void minimizeWindow() = 0;
|
virtual void minimizeWindow() =0;
|
||||||
|
|
||||||
//! Maximizes the window if possible.
|
//! Maximizes the window if possible.
|
||||||
virtual void maximizeWindow() = 0;
|
virtual void maximizeWindow() =0;
|
||||||
|
|
||||||
//! Restore the window to normal size if possible.
|
//! Restore the window to normal size if possible.
|
||||||
virtual void restoreWindow() = 0;
|
virtual void restoreWindow() =0;
|
||||||
|
|
||||||
//! Get the position of the frame on-screen
|
//! Get the position of the frame on-screen
|
||||||
virtual core::position2di getWindowPosition() = 0;
|
virtual core::position2di getWindowPosition() = 0;
|
||||||
|
@ -258,7 +253,7 @@ public:
|
||||||
\return true if joysticks are supported on this device, false if joysticks are not
|
\return true if joysticks are supported on this device, false if joysticks are not
|
||||||
supported or support is compiled out.
|
supported or support is compiled out.
|
||||||
*/
|
*/
|
||||||
virtual bool activateJoysticks(core::array<SJoystickInfo> &joystickInfo) = 0;
|
virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0;
|
||||||
|
|
||||||
//! Activate accelerometer.
|
//! Activate accelerometer.
|
||||||
virtual bool activateAccelerometer(float updateInterval = 0.016666f) = 0;
|
virtual bool activateAccelerometer(float updateInterval = 0.016666f) = 0;
|
||||||
|
@ -300,13 +295,13 @@ public:
|
||||||
/** When set to 0 no double- and tripleclicks will be generated.
|
/** When set to 0 no double- and tripleclicks will be generated.
|
||||||
\param timeMs maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
\param timeMs maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
||||||
*/
|
*/
|
||||||
virtual void setDoubleClickTime(u32 timeMs) = 0;
|
virtual void setDoubleClickTime(u32 timeMs) =0;
|
||||||
|
|
||||||
//! Get the maximal elapsed time between 2 clicks to generate double- and tripleclicks for the mouse.
|
//! Get the maximal elapsed time between 2 clicks to generate double- and tripleclicks for the mouse.
|
||||||
/** When return value is 0 no double- and tripleclicks will be generated.
|
/** When return value is 0 no double- and tripleclicks will be generated.
|
||||||
\return maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
\return maximal time in milliseconds for two consecutive clicks to be recognized as double click
|
||||||
*/
|
*/
|
||||||
virtual u32 getDoubleClickTime() const = 0;
|
virtual u32 getDoubleClickTime() const =0;
|
||||||
|
|
||||||
//! Remove messages pending in the system message loop
|
//! Remove messages pending in the system message loop
|
||||||
/** This function is usually used after messages have been buffered for a longer time, for example
|
/** This function is usually used after messages have been buffered for a longer time, for example
|
||||||
|
@ -336,6 +331,9 @@ public:
|
||||||
{
|
{
|
||||||
return video::isDriverSupported(driver);
|
return video::isDriverSupported(driver);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
|
||||||
enum EKEY_CODE
|
enum EKEY_CODE
|
||||||
{
|
{
|
||||||
KEY_UNKNOWN = 0x0,
|
KEY_UNKNOWN = 0x0,
|
||||||
KEY_LBUTTON = 0x01, // Left mouse button
|
KEY_LBUTTON = 0x01, // Left mouse button
|
||||||
KEY_RBUTTON = 0x02, // Right mouse button
|
KEY_RBUTTON = 0x02, // Right mouse button
|
||||||
|
@ -146,7 +146,7 @@ enum EKEY_CODE
|
||||||
KEY_BROWSER_REFRESH = 0xA8, // Browser Refresh key
|
KEY_BROWSER_REFRESH = 0xA8, // Browser Refresh key
|
||||||
KEY_BROWSER_STOP = 0xA9, // Browser Stop key
|
KEY_BROWSER_STOP = 0xA9, // Browser Stop key
|
||||||
KEY_BROWSER_SEARCH = 0xAA, // Browser Search key
|
KEY_BROWSER_SEARCH = 0xAA, // Browser Search key
|
||||||
KEY_BROWSER_FAVORITES = 0xAB, // Browser Favorites key
|
KEY_BROWSER_FAVORITES =0xAB, // Browser Favorites key
|
||||||
KEY_BROWSER_HOME = 0xAC, // Browser Start and Home key
|
KEY_BROWSER_HOME = 0xAC, // Browser Start and Home key
|
||||||
KEY_VOLUME_MUTE = 0xAD, // Volume Mute key
|
KEY_VOLUME_MUTE = 0xAD, // Volume Mute key
|
||||||
KEY_VOLUME_DOWN = 0xAE, // Volume Down key
|
KEY_VOLUME_DOWN = 0xAE, // Volume Down key
|
||||||
|
@ -180,6 +180,8 @@ enum EKEY_CODE
|
||||||
KEY_NONE = 0xFF, // usually no key mapping, but some laptops use it for fn key
|
KEY_NONE = 0xFF, // usually no key mapping, but some laptops use it for fn key
|
||||||
|
|
||||||
KEY_KEY_CODES_COUNT = 0x100 // this is not a key, but the amount of keycodes there are.
|
KEY_KEY_CODES_COUNT = 0x100 // this is not a key, but the amount of keycodes there are.
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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)) ||
|
||||||
|
@ -94,7 +94,7 @@ struct S3DVertex
|
||||||
}
|
}
|
||||||
|
|
||||||
//\param d d=0 returns other, d=1 returns this, values between interpolate.
|
//\param d d=0 returns other, d=1 returns this, values between interpolate.
|
||||||
S3DVertex getInterpolated(const S3DVertex &other, f32 d)
|
S3DVertex getInterpolated(const S3DVertex& other, f32 d)
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.0f, 1.0f);
|
d = core::clamp(d, 0.0f, 1.0f);
|
||||||
return S3DVertex(Pos.getInterpolated(other.Pos, d),
|
return S3DVertex(Pos.getInterpolated(other.Pos, d),
|
||||||
|
@ -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,68 +112,59 @@ 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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static E_VERTEX_TYPE getType()
|
static E_VERTEX_TYPE getType()
|
||||||
|
@ -181,7 +173,7 @@ struct S3DVertex2TCoords : public S3DVertex
|
||||||
}
|
}
|
||||||
|
|
||||||
//\param d d=0 returns other, d=1 returns this, values between interpolate.
|
//\param d d=0 returns other, d=1 returns this, values between interpolate.
|
||||||
S3DVertex2TCoords getInterpolated(const S3DVertex2TCoords &other, f32 d)
|
S3DVertex2TCoords getInterpolated(const S3DVertex2TCoords& other, f32 d)
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.0f, 1.0f);
|
d = core::clamp(d, 0.0f, 1.0f);
|
||||||
return S3DVertex2TCoords(Pos.getInterpolated(other.Pos, d),
|
return S3DVertex2TCoords(Pos.getInterpolated(other.Pos, d),
|
||||||
|
@ -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,25 +223,25 @@ 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)) ||
|
||||||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static E_VERTEX_TYPE getType()
|
static E_VERTEX_TYPE getType()
|
||||||
|
@ -260,7 +249,7 @@ struct S3DVertexTangents : public S3DVertex
|
||||||
return EVT_TANGENTS;
|
return EVT_TANGENTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
S3DVertexTangents getInterpolated(const S3DVertexTangents &other, f32 d)
|
S3DVertexTangents getInterpolated(const S3DVertexTangents& other, f32 d)
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.0f, 1.0f);
|
d = core::clamp(d, 0.0f, 1.0f);
|
||||||
return S3DVertexTangents(Pos.getInterpolated(other.Pos, d),
|
return S3DVertexTangents(Pos.getInterpolated(other.Pos, d),
|
||||||
|
@ -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"
|
||||||
|
@ -14,16 +15,15 @@ namespace irr
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
|
|
||||||
//! Simple implementation of the IAnimatedMesh interface.
|
//! Simple implementation of the IAnimatedMesh interface.
|
||||||
struct SAnimatedMesh : public IAnimatedMesh
|
struct SAnimatedMesh : public IAnimatedMesh
|
||||||
{
|
|
||||||
//! constructor
|
|
||||||
SAnimatedMesh(scene::IMesh *mesh = 0, scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) :
|
|
||||||
IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
|
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
//! constructor
|
||||||
|
SAnimatedMesh(scene::IMesh* mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) : IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
setDebugName("SAnimatedMesh");
|
setDebugName("SAnimatedMesh");
|
||||||
#endif
|
#endif
|
||||||
addMesh(mesh);
|
addMesh(mesh);
|
||||||
recalculateBoundingBox();
|
recalculateBoundingBox();
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
virtual ~SAnimatedMesh()
|
virtual ~SAnimatedMesh()
|
||||||
{
|
{
|
||||||
// drop meshes
|
// drop meshes
|
||||||
for (u32 i = 0; i < Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->drop();
|
Meshes[i]->drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
The actual speed is set in the scene node the mesh is instantiated in.*/
|
The actual speed is set in the scene node the mesh is instantiated in.*/
|
||||||
void setAnimationSpeed(f32 fps) override
|
void setAnimationSpeed(f32 fps) override
|
||||||
{
|
{
|
||||||
FramesPerSecond = fps;
|
FramesPerSecond=fps;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the IMesh interface for a frame.
|
//! Returns the IMesh interface for a frame.
|
||||||
|
@ -66,7 +66,7 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
\param startFrameLoop: start frame
|
\param startFrameLoop: start frame
|
||||||
\param endFrameLoop: end frame
|
\param endFrameLoop: end frame
|
||||||
\return The animated mesh based on a detail level. */
|
\return The animated mesh based on a detail level. */
|
||||||
IMesh *getMesh(s32 frame, s32 detailLevel = 255, s32 startFrameLoop = -1, s32 endFrameLoop = -1) override
|
IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -75,9 +75,10 @@ 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);
|
||||||
}
|
}
|
||||||
|
@ -85,13 +86,13 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
|
|
||||||
//! Returns an axis aligned bounding box of the mesh.
|
//! Returns an axis aligned bounding box of the mesh.
|
||||||
/** \return A bounding box of this mesh is returned. */
|
/** \return A bounding box of this mesh is returned. */
|
||||||
const core::aabbox3d<f32> &getBoundingBox() const override
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return Box;
|
return Box;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
void setBoundingBox(const core::aabbox3df &box) override
|
void setBoundingBox(const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
Box = box;
|
Box = box;
|
||||||
}
|
}
|
||||||
|
@ -99,14 +100,14 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
//! Recalculates the bounding box.
|
//! Recalculates the bounding box.
|
||||||
void recalculateBoundingBox()
|
void recalculateBoundingBox()
|
||||||
{
|
{
|
||||||
Box.reset(0, 0, 0);
|
Box.reset(0,0,0);
|
||||||
|
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Box = Meshes[0]->getBoundingBox();
|
Box = Meshes[0]->getBoundingBox();
|
||||||
|
|
||||||
for (u32 i = 1; i < Meshes.size(); ++i)
|
for (u32 i=1; i<Meshes.size(); ++i)
|
||||||
Box.addInternalBox(Meshes[i]->getBoundingBox());
|
Box.addInternalBox(Meshes[i]->getBoundingBox());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +127,7 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns pointer to a mesh buffer
|
//! returns pointer to a mesh buffer
|
||||||
IMeshBuffer *getMeshBuffer(u32 nr) const override
|
IMeshBuffer* getMeshBuffer(u32 nr) const override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -138,7 +139,7 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
/** \param material: material to search for
|
/** \param material: material to search for
|
||||||
\return Returns the pointer to the mesh buffer or
|
\return Returns the pointer to the mesh buffer or
|
||||||
NULL if there is no such mesh buffer. */
|
NULL if there is no such mesh buffer. */
|
||||||
IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const override
|
IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const override
|
||||||
{
|
{
|
||||||
if (Meshes.empty())
|
if (Meshes.empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -147,21 +148,21 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
|
Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override
|
void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < Meshes.size(); ++i)
|
for (u32 i=0; i<Meshes.size(); ++i)
|
||||||
Meshes[i]->setDirty(buffer);
|
Meshes[i]->setDirty(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! All meshes defining the animated mesh
|
//! All meshes defining the animated mesh
|
||||||
core::array<IMesh *> Meshes;
|
core::array<IMesh*> Meshes;
|
||||||
|
|
||||||
//! The bounding box of this mesh
|
//! The bounding box of this mesh
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box;
|
||||||
|
@ -171,7 +172,11 @@ struct SAnimatedMesh : public IAnimatedMesh
|
||||||
|
|
||||||
//! The type of the mesh.
|
//! The type of the mesh.
|
||||||
E_ANIMATED_MESH_TYPE Type;
|
E_ANIMATED_MESH_TYPE Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
554
include/SColor.h
554
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"
|
||||||
|
@ -11,13 +12,13 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
//! An enum for the color format of textures used by the Irrlicht Engine.
|
//! An enum for the color format of textures used by the Irrlicht Engine.
|
||||||
/** A color format specifies how color information is stored.
|
/** A color format specifies how color information is stored.
|
||||||
NOTE: Byte order in memory is usually flipped (it's probably correct in bitmap files, but flipped on reading).
|
NOTE: Byte order in memory is usually flipped (it's probably correct in bitmap files, but flipped on reading).
|
||||||
So for example ECF_A8R8G8B8 is BGRA in memory same as in DX9's D3DFMT_A8R8G8B8 format.
|
So for example ECF_A8R8G8B8 is BGRA in memory same as in DX9's D3DFMT_A8R8G8B8 format.
|
||||||
*/
|
*/
|
||||||
enum ECOLOR_FORMAT
|
enum ECOLOR_FORMAT
|
||||||
{
|
{
|
||||||
//! 16 bit color format used by the software driver.
|
//! 16 bit color format used by the software driver.
|
||||||
/** It is thus preferred by all other irrlicht engine video drivers.
|
/** It is thus preferred by all other irrlicht engine video drivers.
|
||||||
There are 5 bits for every color component, and a single bit is left
|
There are 5 bits for every color component, and a single bit is left
|
||||||
|
@ -85,10 +86,11 @@ enum ECOLOR_FORMAT
|
||||||
|
|
||||||
//! Unknown color format:
|
//! Unknown color format:
|
||||||
ECF_UNKNOWN
|
ECF_UNKNOWN
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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",
|
||||||
|
@ -107,164 +109,183 @@ const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = {
|
||||||
"D32",
|
"D32",
|
||||||
"D24S8",
|
"D24S8",
|
||||||
"UNKNOWN",
|
"UNKNOWN",
|
||||||
0,
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Creates a 16 bit A1R5G5B5 color
|
|
||||||
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF)
|
//! Creates a 16 bit A1R5G5B5 color
|
||||||
{
|
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a=0xFF)
|
||||||
|
{
|
||||||
return (u16)((a & 0x80) << 8 |
|
return (u16)((a & 0x80) << 8 |
|
||||||
(r & 0xF8) << 7 |
|
(r & 0xF8) << 7 |
|
||||||
(g & 0xF8) << 2 |
|
(g & 0xF8) << 2 |
|
||||||
(b & 0xF8) >> 3);
|
(b & 0xF8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Creates a 16 bit A1R5G5B5 color
|
|
||||||
inline u16 RGB16(u32 r, u32 g, u32 b)
|
|
||||||
{
|
|
||||||
return RGBA16(r, g, b);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values
|
//! Creates a 16 bit A1R5G5B5 color
|
||||||
inline u16 RGB16from16(u16 r, u16 g, u16 b)
|
inline u16 RGB16(u32 r, u32 g, u32 b)
|
||||||
{
|
{
|
||||||
|
return RGBA16(r,g,b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values
|
||||||
|
inline u16 RGB16from16(u16 r, u16 g, u16 b)
|
||||||
|
{
|
||||||
return (0x8000 |
|
return (0x8000 |
|
||||||
(r & 0x1F) << 10 |
|
(r & 0x1F) << 10 |
|
||||||
(g & 0x1F) << 5 |
|
(g & 0x1F) << 5 |
|
||||||
(b & 0x1F));
|
(b & 0x1F));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
|
|
||||||
inline u16 X8R8G8B8toA1R5G5B5(u32 color)
|
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
|
||||||
{
|
inline u16 X8R8G8B8toA1R5G5B5(u32 color)
|
||||||
|
{
|
||||||
return (u16)(0x8000 |
|
return (u16)(0x8000 |
|
||||||
(color & 0x00F80000) >> 9 |
|
( color & 0x00F80000) >> 9 |
|
||||||
(color & 0x0000F800) >> 6 |
|
( color & 0x0000F800) >> 6 |
|
||||||
(color & 0x000000F8) >> 3);
|
( color & 0x000000F8) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
|
|
||||||
inline u16 A8R8G8B8toA1R5G5B5(u32 color)
|
|
||||||
{
|
|
||||||
return (u16)((color & 0x80000000) >> 16 |
|
|
||||||
(color & 0x00F80000) >> 9 |
|
|
||||||
(color & 0x0000F800) >> 6 |
|
|
||||||
(color & 0x000000F8) >> 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
|
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
|
||||||
inline u16 A8R8G8B8toR5G6B5(u32 color)
|
inline u16 A8R8G8B8toA1R5G5B5(u32 color)
|
||||||
{
|
{
|
||||||
return (u16)((color & 0x00F80000) >> 8 |
|
return (u16)(( color & 0x80000000) >> 16|
|
||||||
(color & 0x0000FC00) >> 5 |
|
( color & 0x00F80000) >> 9 |
|
||||||
(color & 0x000000F8) >> 3);
|
( color & 0x0000F800) >> 6 |
|
||||||
}
|
( color & 0x000000F8) >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
//! Convert A8R8G8B8 Color from A1R5G5B5 color
|
|
||||||
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */
|
|
||||||
inline u32 A1R5G5B5toA8R8G8B8(u16 color)
|
|
||||||
{
|
|
||||||
return (((-((s32)color & 0x00008000) >> (s32)31) & 0xFF000000) |
|
|
||||||
((color & 0x00007C00) << 9) | ((color & 0x00007000) << 4) |
|
|
||||||
((color & 0x000003E0) << 6) | ((color & 0x00000380) << 1) |
|
|
||||||
((color & 0x0000001F) << 3) | ((color & 0x0000001C) >> 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns A8R8G8B8 Color from R5G6B5 color
|
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
|
||||||
inline u32 R5G6B5toA8R8G8B8(u16 color)
|
inline u16 A8R8G8B8toR5G6B5(u32 color)
|
||||||
{
|
{
|
||||||
|
return (u16)(( color & 0x00F80000) >> 8 |
|
||||||
|
( color & 0x0000FC00) >> 5 |
|
||||||
|
( color & 0x000000F8) >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Convert A8R8G8B8 Color from A1R5G5B5 color
|
||||||
|
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */
|
||||||
|
inline u32 A1R5G5B5toA8R8G8B8(u16 color)
|
||||||
|
{
|
||||||
|
return ( (( -( (s32) color & 0x00008000 ) >> (s32) 31 ) & 0xFF000000 ) |
|
||||||
|
(( color & 0x00007C00 ) << 9) | (( color & 0x00007000 ) << 4) |
|
||||||
|
(( color & 0x000003E0 ) << 6) | (( color & 0x00000380 ) << 1) |
|
||||||
|
(( color & 0x0000001F ) << 3) | (( color & 0x0000001C ) >> 2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Returns A8R8G8B8 Color from R5G6B5 color
|
||||||
|
inline u32 R5G6B5toA8R8G8B8(u16 color)
|
||||||
|
{
|
||||||
return 0xFF000000 |
|
return 0xFF000000 |
|
||||||
((color & 0xF800) << 8) |
|
((color & 0xF800) << 8)|
|
||||||
((color & 0x07E0) << 5) |
|
((color & 0x07E0) << 5)|
|
||||||
((color & 0x001F) << 3);
|
((color & 0x001F) << 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns A1R5G5B5 Color from R5G6B5 color
|
|
||||||
inline u16 R5G6B5toA1R5G5B5(u16 color)
|
//! Returns A1R5G5B5 Color from R5G6B5 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
|
|
||||||
inline u16 A1R5G5B5toR5G6B5(u16 color)
|
//! Returns R5G6B5 Color from A1R5G5B5 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
|
|
||||||
/** In Irrlicht, alpha refers to opacity.
|
|
||||||
\return The alpha value of the color. 0 is transparent, 1 is opaque. */
|
|
||||||
inline u32 getAlpha(u16 color)
|
|
||||||
{
|
|
||||||
return ((color >> 15) & 0x1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns the red component from A1R5G5B5 color.
|
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
|
||||||
inline u32 getRed(u16 color)
|
|
||||||
{
|
|
||||||
return ((color >> 10) & 0x1F);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns the green component from A1R5G5B5 color
|
//! Returns the alpha component from A1R5G5B5 color
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
/** In Irrlicht, alpha refers to opacity.
|
||||||
inline u32 getGreen(u16 color)
|
\return The alpha value of the color. 0 is transparent, 1 is opaque. */
|
||||||
{
|
inline u32 getAlpha(u16 color)
|
||||||
return ((color >> 5) & 0x1F);
|
{
|
||||||
}
|
return ((color >> 15)&0x1);
|
||||||
|
}
|
||||||
|
|
||||||
//! Returns the blue component from A1R5G5B5 color
|
|
||||||
/** Shift left by 3 to get 8 bit value. */
|
//! Returns the red component from A1R5G5B5 color.
|
||||||
inline u32 getBlue(u16 color)
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
{
|
inline u32 getRed(u16 color)
|
||||||
|
{
|
||||||
|
return ((color >> 10)&0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Returns the green component from A1R5G5B5 color
|
||||||
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
|
inline u32 getGreen(u16 color)
|
||||||
|
{
|
||||||
|
return ((color >> 5)&0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Returns the blue component from A1R5G5B5 color
|
||||||
|
/** Shift left by 3 to get 8 bit value. */
|
||||||
|
inline u32 getBlue(u16 color)
|
||||||
|
{
|
||||||
return (color & 0x1F);
|
return (color & 0x1F);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns the average from a 16 bit A1R5G5B5 color
|
|
||||||
inline s32 getAverage(s16 color)
|
|
||||||
{
|
|
||||||
return ((getRed(color) << 3) + (getGreen(color) << 3) + (getBlue(color) << 3)) / 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Class representing a 32 bit ARGB color.
|
//! Returns the average from a 16 bit A1R5G5B5 color
|
||||||
/** The color values for alpha, red, green, and blue are
|
inline s32 getAverage(s16 color)
|
||||||
stored in a single u32. So all four values may be between 0 and 255.
|
{
|
||||||
Alpha in Irrlicht is opacity, so 0 is fully transparent, 255 is fully opaque (solid).
|
return ((getRed(color)<<3) + (getGreen(color)<<3) + (getBlue(color)<<3)) / 3;
|
||||||
This class is used by most parts of the Irrlicht Engine
|
}
|
||||||
to specify a color. Another way is using the class SColorf, which
|
|
||||||
stores the color values in 4 floats.
|
|
||||||
This class must consist of only one u32 and must not use virtual functions.
|
//! Class representing a 32 bit ARGB color.
|
||||||
*/
|
/** The color values for alpha, red, green, and blue are
|
||||||
class SColor
|
stored in a single u32. So all four values may be between 0 and 255.
|
||||||
{
|
Alpha in Irrlicht is opacity, so 0 is fully transparent, 255 is fully opaque (solid).
|
||||||
public:
|
This class is used by most parts of the Irrlicht Engine
|
||||||
|
to specify a color. Another way is using the class SColorf, which
|
||||||
|
stores the color values in 4 floats.
|
||||||
|
This class must consist of only one u32 and must not use virtual functions.
|
||||||
|
*/
|
||||||
|
class SColor
|
||||||
|
{
|
||||||
|
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.
|
||||||
\return The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */
|
\return The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */
|
||||||
u32 getAlpha() const { return color >> 24; }
|
u32 getAlpha() const { return color>>24; }
|
||||||
|
|
||||||
//! Returns the red component of the color.
|
//! Returns the red component of the color.
|
||||||
/** \return Value between 0 and 255, specifying how red the color is.
|
/** \return Value between 0 and 255, specifying how red the color is.
|
||||||
0 means no red, 255 means full red. */
|
0 means no red, 255 means full red. */
|
||||||
u32 getRed() const { return (color >> 16) & 0xff; }
|
u32 getRed() const { return (color>>16) & 0xff; }
|
||||||
|
|
||||||
//! Returns the green component of the color.
|
//! Returns the green component of the color.
|
||||||
/** \return Value between 0 and 255, specifying how green the color is.
|
/** \return Value between 0 and 255, specifying how green the color is.
|
||||||
0 means no green, 255 means full green. */
|
0 means no green, 255 means full green. */
|
||||||
u32 getGreen() const { return (color >> 8) & 0xff; }
|
u32 getGreen() const { return (color>>8) & 0xff; }
|
||||||
|
|
||||||
//! Returns the blue component of the color.
|
//! Returns the blue component of the color.
|
||||||
/** \return Value between 0 and 255, specifying how blue the color is.
|
/** \return Value between 0 and 255, specifying how blue the color is.
|
||||||
|
@ -274,35 +295,35 @@ public:
|
||||||
//! Get lightness of the color in the range [0,255]
|
//! Get lightness of the color in the range [0,255]
|
||||||
f32 getLightness() const
|
f32 getLightness() const
|
||||||
{
|
{
|
||||||
return 0.5f * (core::max_(core::max_(getRed(), getGreen()), getBlue()) + core::min_(core::min_(getRed(), getGreen()), getBlue()));
|
return 0.5f*(core::max_(core::max_(getRed(),getGreen()),getBlue())+core::min_(core::min_(getRed(),getGreen()),getBlue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get luminance of the color in the range [0,255].
|
//! Get luminance of the color in the range [0,255].
|
||||||
f32 getLuminance() const
|
f32 getLuminance() const
|
||||||
{
|
{
|
||||||
return 0.3f * getRed() + 0.59f * getGreen() + 0.11f * getBlue();
|
return 0.3f*getRed() + 0.59f*getGreen() + 0.11f*getBlue();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Get average intensity of the color in the range [0,255].
|
//! Get average intensity of the color in the range [0,255].
|
||||||
u32 getAverage() const
|
u32 getAverage() const
|
||||||
{
|
{
|
||||||
return (getRed() + getGreen() + getBlue()) / 3;
|
return ( getRed() + getGreen() + getBlue() ) / 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets the alpha component of the Color.
|
//! Sets the alpha component of the Color.
|
||||||
/** The alpha component defines how transparent a color should be.
|
/** The alpha component defines how transparent a color should be.
|
||||||
\param a The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */
|
\param a The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */
|
||||||
void setAlpha(u32 a) { color = ((a & 0xff) << 24) | (color & 0x00ffffff); }
|
void setAlpha(u32 a) { color = ((a & 0xff)<<24) | (color & 0x00ffffff); }
|
||||||
|
|
||||||
//! Sets the red component of the Color.
|
//! Sets the red component of the Color.
|
||||||
/** \param r: Has to be a value between 0 and 255.
|
/** \param r: Has to be a value between 0 and 255.
|
||||||
0 means no red, 255 means full red. */
|
0 means no red, 255 means full red. */
|
||||||
void setRed(u32 r) { color = ((r & 0xff) << 16) | (color & 0xff00ffff); }
|
void setRed(u32 r) { color = ((r & 0xff)<<16) | (color & 0xff00ffff); }
|
||||||
|
|
||||||
//! Sets the green component of the Color.
|
//! Sets the green component of the Color.
|
||||||
/** \param g: Has to be a value between 0 and 255.
|
/** \param g: Has to be a value between 0 and 255.
|
||||||
0 means no green, 255 means full green. */
|
0 means no green, 255 means full green. */
|
||||||
void setGreen(u32 g) { color = ((g & 0xff) << 8) | (color & 0xffff00ff); }
|
void setGreen(u32 g) { color = ((g & 0xff)<<8) | (color & 0xffff00ff); }
|
||||||
|
|
||||||
//! Sets the blue component of the Color.
|
//! Sets the blue component of the Color.
|
||||||
/** \param b: Has to be a value between 0 and 255.
|
/** \param b: Has to be a value between 0 and 255.
|
||||||
|
@ -317,7 +338,7 @@ public:
|
||||||
/** From ARGB to RGBA in 4 byte components for endian aware
|
/** From ARGB to RGBA in 4 byte components for endian aware
|
||||||
passing to OpenGL
|
passing to OpenGL
|
||||||
\param dest: address where the 4x8 bit OpenGL color is stored. */
|
\param dest: address where the 4x8 bit OpenGL color is stored. */
|
||||||
void toOpenGLColor(u8 *dest) const
|
void toOpenGLColor(u8* dest) const
|
||||||
{
|
{
|
||||||
*dest = (u8)getRed();
|
*dest = (u8)getRed();
|
||||||
*++dest = (u8)getGreen();
|
*++dest = (u8)getGreen();
|
||||||
|
@ -342,26 +363,26 @@ public:
|
||||||
value between 0 and 255. 0 means no blue, 255 means full blue. */
|
value between 0 and 255. 0 means no blue, 255 means full blue. */
|
||||||
void set(u32 a, u32 r, u32 g, u32 b)
|
void set(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));
|
||||||
}
|
}
|
||||||
void set(u32 col) { color = col; }
|
void set(u32 col) { color = col; }
|
||||||
|
|
||||||
//! Compares the color to another color.
|
//! Compares the color to another color.
|
||||||
/** \return True if the colors are the same, and false if not. */
|
/** \return True if the colors are the same, and false if not. */
|
||||||
bool operator==(const SColor &other) const { return other.color == color; }
|
bool operator==(const SColor& other) const { return other.color == color; }
|
||||||
|
|
||||||
//! Compares the color to another color.
|
//! Compares the color to another color.
|
||||||
/** \return True if the colors are different, and false if they are the same. */
|
/** \return True if the colors are different, and false if they are the same. */
|
||||||
bool operator!=(const SColor &other) const { return other.color != color; }
|
bool operator!=(const SColor& other) const { return other.color != color; }
|
||||||
|
|
||||||
//! comparison operator
|
//! comparison operator
|
||||||
/** \return True if this color is smaller than the other one */
|
/** \return True if this color is smaller than the other one */
|
||||||
bool operator<(const SColor &other) const { return (color < other.color); }
|
bool operator<(const SColor& other) const { return (color < other.color); }
|
||||||
|
|
||||||
//! Adds two colors, result is clamped to 0..255 values
|
//! Adds two colors, result is clamped to 0..255 values
|
||||||
/** \param other Color to add to this color
|
/** \param other Color to add to this color
|
||||||
\return Addition of the two colors, clamped to 0..255 values */
|
\return Addition of the two colors, clamped to 0..255 values */
|
||||||
SColor operator+(const SColor &other) const
|
SColor operator+(const SColor& other) const
|
||||||
{
|
{
|
||||||
return SColor(core::min_(getAlpha() + other.getAlpha(), 255u),
|
return SColor(core::min_(getAlpha() + other.getAlpha(), 255u),
|
||||||
core::min_(getRed() + other.getRed(), 255u),
|
core::min_(getRed() + other.getRed(), 255u),
|
||||||
|
@ -377,17 +398,17 @@ public:
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.f, 1.f);
|
d = core::clamp(d, 0.f, 1.f);
|
||||||
const f32 inv = 1.0f - d;
|
const f32 inv = 1.0f - d;
|
||||||
return SColor((u32)core::round32(other.getAlpha() * inv + getAlpha() * d),
|
return SColor((u32)core::round32(other.getAlpha()*inv + getAlpha()*d),
|
||||||
(u32)core::round32(other.getRed() * inv + getRed() * d),
|
(u32)core::round32(other.getRed()*inv + getRed()*d),
|
||||||
(u32)core::round32(other.getGreen() * inv + getGreen() * d),
|
(u32)core::round32(other.getGreen()*inv + getGreen()*d),
|
||||||
(u32)core::round32(other.getBlue() * inv + getBlue() * d));
|
(u32)core::round32(other.getBlue()*inv + getBlue()*d));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns interpolated color. ( quadratic )
|
//! Returns interpolated color. ( quadratic )
|
||||||
/** \param c1: first color to interpolate with
|
/** \param c1: first color to interpolate with
|
||||||
\param c2: second color to interpolate with
|
\param c2: second color to interpolate with
|
||||||
\param d: value between 0.0f and 1.0f. */
|
\param d: value between 0.0f and 1.0f. */
|
||||||
SColor getInterpolated_quadratic(const SColor &c1, const SColor &c2, f32 d) const
|
SColor getInterpolated_quadratic(const SColor& c1, const SColor& c2, f32 d) const
|
||||||
{
|
{
|
||||||
// this*(1-d)*(1-d) + 2 * c1 * (1-d) + c2 * d * d;
|
// this*(1-d)*(1-d) + 2 * c1 * (1-d) + c2 * d * d;
|
||||||
d = core::clamp(d, 0.f, 1.f);
|
d = core::clamp(d, 0.f, 1.f);
|
||||||
|
@ -397,18 +418,14 @@ public:
|
||||||
const f32 mul2 = d * d;
|
const f32 mul2 = d * d;
|
||||||
|
|
||||||
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 ), 0, 255 ),
|
||||||
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2),
|
core::clamp ( core::floor32(
|
||||||
0, 255),
|
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2 ), 0, 255 ),
|
||||||
core::clamp(core::floor32(
|
core::clamp ( core::floor32(
|
||||||
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2),
|
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2 ), 0, 255 ));
|
||||||
0, 255),
|
|
||||||
core::clamp(core::floor32(
|
|
||||||
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2),
|
|
||||||
0, 255));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the color by expecting data in the given format
|
//! set the color by expecting data in the given format
|
||||||
|
@ -417,20 +434,23 @@ 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;
|
||||||
case ECF_R5G6B5:
|
case ECF_R5G6B5:
|
||||||
color = R5G6B5toA8R8G8B8(*(u16 *)data);
|
color = R5G6B5toA8R8G8B8(*(u16*)data);
|
||||||
break;
|
break;
|
||||||
case ECF_A8R8G8B8:
|
case ECF_A8R8G8B8:
|
||||||
color = *(u32 *)data;
|
color = *(u32*)data;
|
||||||
|
break;
|
||||||
|
case ECF_R8G8B8:
|
||||||
|
{
|
||||||
|
const u8* p = (u8*)data;
|
||||||
|
set(255, p[0],p[1],p[2]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ECF_R8G8B8: {
|
|
||||||
const u8 *p = (u8 *)data;
|
|
||||||
set(255, p[0], p[1], p[2]);
|
|
||||||
} break;
|
|
||||||
default:
|
default:
|
||||||
color = 0xffffffff;
|
color = 0xffffffff;
|
||||||
break;
|
break;
|
||||||
|
@ -443,28 +463,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: {
|
{
|
||||||
u16 *dest = (u16 *)data;
|
case ECF_A1R5G5B5:
|
||||||
*dest = video::A8R8G8B8toA1R5G5B5(color);
|
{
|
||||||
} break;
|
u16 * dest = (u16*)data;
|
||||||
|
*dest = video::A8R8G8B8toA1R5G5B5( color );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ECF_R5G6B5: {
|
case ECF_R5G6B5:
|
||||||
u16 *dest = (u16 *)data;
|
{
|
||||||
*dest = video::A8R8G8B8toR5G6B5(color);
|
u16 * dest = (u16*)data;
|
||||||
} break;
|
*dest = video::A8R8G8B8toR5G6B5( color );
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
@ -473,22 +502,22 @@ public:
|
||||||
|
|
||||||
//! color in A8R8G8B8 Format
|
//! color in A8R8G8B8 Format
|
||||||
u32 color;
|
u32 color;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Class representing a color with four floats.
|
|
||||||
/** The color values for red, green, blue
|
//! Class representing a color with four floats.
|
||||||
and alpha are each stored in a 32 bit floating point variable.
|
/** The color values for red, green, blue
|
||||||
So all four values may be between 0.0f and 1.0f.
|
and alpha are each stored in a 32 bit floating point variable.
|
||||||
Another, faster way to define colors is using the class SColor, which
|
So all four values may be between 0.0f and 1.0f.
|
||||||
stores the color values in a single 32 bit integer.
|
Another, faster way to define colors is using the class SColor, which
|
||||||
*/
|
stores the color values in a single 32 bit integer.
|
||||||
class SColorf
|
*/
|
||||||
{
|
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 +530,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
|
||||||
|
@ -519,7 +547,7 @@ public:
|
||||||
//! Converts this color to a SColor without floats.
|
//! Converts this color to a SColor without floats.
|
||||||
SColor toSColor() const
|
SColor toSColor() const
|
||||||
{
|
{
|
||||||
return SColor((u32)core::round32(a * 255.0f), (u32)core::round32(r * 255.0f), (u32)core::round32(g * 255.0f), (u32)core::round32(b * 255.0f));
|
return SColor((u32)core::round32(a*255.0f), (u32)core::round32(r*255.0f), (u32)core::round32(g*255.0f), (u32)core::round32(b*255.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets three color components to new values at once.
|
//! Sets three color components to new values at once.
|
||||||
|
@ -529,12 +557,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 +568,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
|
||||||
|
@ -561,15 +578,15 @@ public:
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.f, 1.f);
|
d = core::clamp(d, 0.f, 1.f);
|
||||||
const f32 inv = 1.0f - d;
|
const f32 inv = 1.0f - d;
|
||||||
return SColorf(other.r * inv + r * d,
|
return SColorf(other.r*inv + r*d,
|
||||||
other.g * inv + g * d, other.b * inv + b * d, other.a * inv + a * d);
|
other.g*inv + g*d, other.b*inv + b*d, other.a*inv + a*d);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns interpolated color. ( quadratic )
|
//! Returns interpolated color. ( quadratic )
|
||||||
/** \param c1: first color to interpolate with
|
/** \param c1: first color to interpolate with
|
||||||
\param c2: second color to interpolate with
|
\param c2: second color to interpolate with
|
||||||
\param d: value between 0.0f and 1.0f. */
|
\param d: value between 0.0f and 1.0f. */
|
||||||
inline SColorf getInterpolated_quadratic(const SColorf &c1, const SColorf &c2,
|
inline SColorf getInterpolated_quadratic(const SColorf& c1, const SColorf& c2,
|
||||||
f32 d) const
|
f32 d) const
|
||||||
{
|
{
|
||||||
d = core::clamp(d, 0.f, 1.f);
|
d = core::clamp(d, 0.f, 1.f);
|
||||||
|
@ -579,28 +596,22 @@ public:
|
||||||
const f32 mul1 = 2.f * d * inv;
|
const f32 mul1 = 2.f * d * inv;
|
||||||
const f32 mul2 = d * d;
|
const f32 mul2 = d * d;
|
||||||
|
|
||||||
return SColorf(r * mul0 + c1.r * mul1 + c2.r * mul2,
|
return SColorf (r * mul0 + c1.r * mul1 + c2.r * mul2,
|
||||||
g * mul0 + c1.g * mul1 + c2.g * mul2,
|
g * mul0 + c1.g * mul1 + c2.g * mul2,
|
||||||
b * mul0 + c1.b * mul1 + c2.b * mul2,
|
b * mul0 + c1.b * mul1 + c2.b * mul2,
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -627,18 +638,19 @@ public:
|
||||||
|
|
||||||
//! alpha color component
|
//! alpha color component
|
||||||
f32 a;
|
f32 a;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Class representing a color in HSL format
|
|
||||||
/** The color values for hue, saturation, luminance
|
//! Class representing a color in HSL format
|
||||||
are stored in 32bit floating point variables. Hue is in range [0,360],
|
/** The color values for hue, saturation, luminance
|
||||||
Luminance and Saturation are in percent [0,100]
|
are stored in 32bit floating point variables. Hue is in range [0,360],
|
||||||
*/
|
Luminance and Saturation are in percent [0,100]
|
||||||
class SColorHSL
|
*/
|
||||||
{
|
class SColorHSL
|
||||||
public:
|
{
|
||||||
constexpr SColorHSL(f32 h = 0.f, f32 s = 0.f, f32 l = 0.f) :
|
public:
|
||||||
Hue(h), Saturation(s), Luminance(l) {}
|
SColorHSL ( f32 h = 0.f, f32 s = 0.f, f32 l = 0.f )
|
||||||
|
: 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;
|
||||||
|
@ -647,82 +659,96 @@ public:
|
||||||
f32 Saturation;
|
f32 Saturation;
|
||||||
f32 Luminance;
|
f32 Luminance;
|
||||||
|
|
||||||
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)
|
||||||
|
{
|
||||||
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;
|
{
|
||||||
Saturation = 0.f;
|
Hue=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);
|
{
|
||||||
} else {
|
Saturation = (delta)/(maxVal+minVal);
|
||||||
Saturation = (delta) / (2 - maxVal - minVal);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Saturation = (delta)/(2-maxVal-minVal);
|
||||||
}
|
}
|
||||||
Saturation *= 100;
|
Saturation *= 100;
|
||||||
|
|
||||||
if (core::equals(maxVal, color.getRed()))
|
if (core::equals(maxVal, color.getRed()))
|
||||||
Hue = (color.getGreen() - color.getBlue()) / delta;
|
Hue = (color.getGreen()-color.getBlue())/delta;
|
||||||
else if (core::equals(maxVal, color.getGreen()))
|
else if (core::equals(maxVal, color.getGreen()))
|
||||||
Hue = 2 + ((color.getBlue() - color.getRed()) / delta);
|
Hue = 2+((color.getBlue()-color.getRed())/delta);
|
||||||
else // blue is max
|
else // blue is max
|
||||||
Hue = 4 + ((color.getRed() - color.getGreen()) / delta);
|
Hue = 4+((color.getRed()-color.getGreen())/delta);
|
||||||
|
|
||||||
Hue *= 60.0f;
|
Hue *= 60.0f;
|
||||||
while (Hue < 0.f)
|
while ( Hue < 0.f )
|
||||||
Hue += 360;
|
Hue += 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void SColorHSL::toRGB(SColorf &color) const
|
|
||||||
{
|
inline void SColorHSL::toRGB(SColorf &color) const
|
||||||
const f32 l = Luminance / 100;
|
{
|
||||||
if (core::iszero(Saturation)) { // grey
|
const f32 l = Luminance/100;
|
||||||
|
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);
|
{
|
||||||
} else {
|
rm2 = l + l * (Saturation/100);
|
||||||
rm2 = l + (1 - l) * (Saturation / 100);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rm2 = l + (1 - l) * (Saturation/100);
|
||||||
}
|
}
|
||||||
|
|
||||||
const f32 rm1 = 2.0f * l - rm2;
|
const f32 rm1 = 2.0f * l - rm2;
|
||||||
|
|
||||||
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
|
|
||||||
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
|
// algorithm from Foley/Van-Dam
|
||||||
{
|
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
|
||||||
if (rh < 0)
|
{
|
||||||
|
if (rh<0)
|
||||||
rh += 1;
|
rh += 1;
|
||||||
if (rh > 1)
|
if (rh>1)
|
||||||
rh -= 1;
|
rh -= 1;
|
||||||
|
|
||||||
if (rh < 1.f / 6.f)
|
if (rh < 1.f/6.f)
|
||||||
rm1 = rm1 + (rm2 - rm1) * rh * 6.f;
|
rm1 = rm1 + (rm2 - rm1) * rh*6.f;
|
||||||
else if (rh < 0.5f)
|
else if (rh < 0.5f)
|
||||||
rm1 = rm2;
|
rm1 = rm2;
|
||||||
else if (rh < 2.f / 3.f)
|
else if (rh < 2.f/3.f)
|
||||||
rm1 = rm1 + (rm2 - rm1) * ((2.f / 3.f) - rh) * 6.f;
|
rm1 = rm1 + (rm2 - rm1) * ((2.f/3.f)-rh)*6.f;
|
||||||
|
|
||||||
return rm1;
|
return rm1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // 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,39 +18,29 @@ 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
|
||||||
{
|
{
|
||||||
//! Private GDI Device Context.
|
//! Private GDI Device Context.
|
||||||
/** Get if for example with: HDC h = reinterpret_cast<HDC>(exposedData.OpenGLWin32.HDc) */
|
/** Get if for example with: HDC h = reinterpret_cast<HDC>(exposedData.OpenGLWin32.HDc) */
|
||||||
void *HDc;
|
void* HDc;
|
||||||
|
|
||||||
//! Permanent Rendering Context.
|
//! Permanent Rendering Context.
|
||||||
/** Get if for example with: HGLRC h = reinterpret_cast<HGLRC>(exposedData.OpenGLWin32.HRc) */
|
/** Get if for example with: HGLRC h = reinterpret_cast<HGLRC>(exposedData.OpenGLWin32.HRc) */
|
||||||
void *HRc;
|
void* HRc;
|
||||||
|
|
||||||
//! Window handle.
|
//! Window handle.
|
||||||
/** Get with for example with: HWND h = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd) */
|
/** Get with for example with: HWND h = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd) */
|
||||||
void *HWnd;
|
void* HWnd;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SOpenGLLinux
|
struct SOpenGLLinux
|
||||||
{
|
{
|
||||||
// XWindow handles
|
// XWindow handles
|
||||||
void *X11Display;
|
void* X11Display;
|
||||||
void *X11Context;
|
void* X11Context;
|
||||||
unsigned long X11Window;
|
unsigned long X11Window;
|
||||||
unsigned long GLXWindow;
|
unsigned long GLXWindow;
|
||||||
};
|
};
|
||||||
|
@ -57,22 +48,22 @@ struct SExposedVideoData
|
||||||
struct SOpenGLOSX
|
struct SOpenGLOSX
|
||||||
{
|
{
|
||||||
//! The NSOpenGLContext object.
|
//! The NSOpenGLContext object.
|
||||||
void *Context;
|
void* Context;
|
||||||
|
|
||||||
//! The NSWindow object.
|
//! The NSWindow object.
|
||||||
void *Window;
|
void* Window;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SOpenGLFB
|
struct SOpenGLFB
|
||||||
{
|
{
|
||||||
//! The EGLNativeWindowType object.
|
//! The EGLNativeWindowType object.
|
||||||
void *Window;
|
void* Window;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SOGLESAndroid
|
struct SOGLESAndroid
|
||||||
{
|
{
|
||||||
//! The ANativeWindow object.
|
//! The ANativeWindow object.
|
||||||
void *Window;
|
void* Window;
|
||||||
};
|
};
|
||||||
|
|
||||||
union
|
union
|
||||||
|
@ -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"
|
||||||
|
@ -14,18 +15,18 @@
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
class IEventReceiver;
|
class IEventReceiver;
|
||||||
|
|
||||||
//! Structure for holding Irrlicht Device creation parameters.
|
//! Structure for holding Irrlicht Device creation parameters.
|
||||||
/** This structure is used in the createDeviceEx() function. */
|
/** This structure is used in the createDeviceEx() function. */
|
||||||
struct SIrrlichtCreationParameters
|
struct SIrrlichtCreationParameters
|
||||||
{
|
{
|
||||||
//! Constructs a SIrrlichtCreationParameters structure with default values.
|
//! Constructs a SIrrlichtCreationParameters structure with default values.
|
||||||
SIrrlichtCreationParameters() :
|
SIrrlichtCreationParameters() :
|
||||||
DeviceType(EIDT_BEST),
|
DeviceType(EIDT_BEST),
|
||||||
DriverType(video::EDT_OPENGL),
|
DriverType(video::EDT_OPENGL),
|
||||||
WindowSize(core::dimension2d<u32>(800, 600)),
|
WindowSize(core::dimension2d<u32>(800, 600)),
|
||||||
WindowPosition(core::position2di(-1, -1)),
|
WindowPosition(core::position2di(-1,-1)),
|
||||||
Bits(32),
|
Bits(32),
|
||||||
ZBufferBits(24),
|
ZBufferBits(24),
|
||||||
Fullscreen(false),
|
Fullscreen(false),
|
||||||
|
@ -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),
|
||||||
|
@ -54,13 +57,11 @@ 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)
|
||||||
{
|
{
|
||||||
DeviceType = other.DeviceType;
|
DeviceType = other.DeviceType;
|
||||||
DriverType = other.DriverType;
|
DriverType = other.DriverType;
|
||||||
|
@ -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
|
||||||
|
@ -184,7 +209,7 @@ struct SIrrlichtCreationParameters
|
||||||
bool Stereobuffer;
|
bool Stereobuffer;
|
||||||
|
|
||||||
//! A user created event receiver.
|
//! A user created event receiver.
|
||||||
IEventReceiver *EventReceiver;
|
IEventReceiver* EventReceiver;
|
||||||
|
|
||||||
//! Window Id.
|
//! Window Id.
|
||||||
/** If this is set to a value other than 0, the Irrlicht Engine
|
/** If this is set to a value other than 0, the Irrlicht Engine
|
||||||
|
@ -237,7 +262,7 @@ struct SIrrlichtCreationParameters
|
||||||
\endcode
|
\endcode
|
||||||
However, there is no need to draw the picture this often. Just
|
However, there is no need to draw the picture this often. Just
|
||||||
do it how you like. */
|
do it how you like. */
|
||||||
void *WindowId;
|
void* WindowId;
|
||||||
|
|
||||||
//! Specifies the logging level used in the logging interface.
|
//! Specifies the logging level used in the logging interface.
|
||||||
/** The default value is ELL_INFORMATION. You can access the ILogger interface
|
/** The default value is ELL_INFORMATION. You can access the ILogger interface
|
||||||
|
@ -250,11 +275,11 @@ struct SIrrlichtCreationParameters
|
||||||
//! Don't use or change this parameter.
|
//! Don't use or change this parameter.
|
||||||
/** Always set it to IRRLICHT_SDK_VERSION, which is done by default.
|
/** Always set it to IRRLICHT_SDK_VERSION, which is done by default.
|
||||||
This is needed for sdk version checks. */
|
This is needed for sdk version checks. */
|
||||||
const c8 *const SDK_version_do_not_use;
|
const c8* const SDK_version_do_not_use;
|
||||||
|
|
||||||
//! Define some private data storage.
|
//! Define some private data storage.
|
||||||
/** Used when platform devices need access to OS specific data structures etc.
|
/** Used when platform devices need access to OS specific data structures etc.
|
||||||
This is only used for Android at the moment in order to access the native
|
This is only used for Android at th emoment in order to access the native
|
||||||
Java RE. */
|
Java RE. */
|
||||||
void *PrivateData;
|
void *PrivateData;
|
||||||
|
|
||||||
|
@ -262,6 +287,10 @@ struct SIrrlichtCreationParameters
|
||||||
/** This is about the shaders which can be found in media/Shaders by default. It's only necessary
|
/** This is about the shaders which can be found in media/Shaders by default. It's only necessary
|
||||||
to set when using OGL-ES 2.0 */
|
to set when using OGL-ES 2.0 */
|
||||||
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"
|
||||||
|
@ -17,12 +18,12 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
|
|
||||||
//! Flag for MaterialTypeParam (in combination with EMT_ONETEXTURE_BLEND) or for BlendFactor
|
//! Flag for MaterialTypeParam (in combination with EMT_ONETEXTURE_BLEND) or for BlendFactor
|
||||||
//! BlendFunc = source * sourceFactor + dest * destFactor
|
//! BlendFunc = source * sourceFactor + dest * destFactor
|
||||||
enum E_BLEND_FACTOR
|
enum E_BLEND_FACTOR
|
||||||
{
|
{
|
||||||
EBF_ZERO = 0, //!< src & dest (0, 0, 0, 0)
|
EBF_ZERO = 0, //!< src & dest (0, 0, 0, 0)
|
||||||
EBF_ONE, //!< src & dest (1, 1, 1, 1)
|
EBF_ONE, //!< src & dest (1, 1, 1, 1)
|
||||||
EBF_DST_COLOR, //!< src (destR, destG, destB, destA)
|
EBF_DST_COLOR, //!< src (destR, destG, destB, destA)
|
||||||
|
@ -34,40 +35,40 @@ enum E_BLEND_FACTOR
|
||||||
EBF_DST_ALPHA, //!< src & dest (destA, destA, destA, destA)
|
EBF_DST_ALPHA, //!< src & dest (destA, destA, destA, destA)
|
||||||
EBF_ONE_MINUS_DST_ALPHA, //!< src & dest (1-destA, 1-destA, 1-destA, 1-destA)
|
EBF_ONE_MINUS_DST_ALPHA, //!< src & dest (1-destA, 1-destA, 1-destA, 1-destA)
|
||||||
EBF_SRC_ALPHA_SATURATE //!< src (min(srcA, 1-destA), idem, ...)
|
EBF_SRC_ALPHA_SATURATE //!< src (min(srcA, 1-destA), idem, ...)
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Values defining the blend operation
|
//! Values defining the blend operation
|
||||||
enum E_BLEND_OPERATION
|
enum E_BLEND_OPERATION
|
||||||
{
|
{
|
||||||
EBO_NONE = 0, //!< No blending happens
|
EBO_NONE = 0, //!< No blending happens
|
||||||
EBO_ADD, //!< Default blending adds the color values
|
EBO_ADD, //!< Default blending adds the color values
|
||||||
EBO_SUBTRACT, //!< This mode subtracts the color values
|
EBO_SUBTRACT, //!< This mode subtracts the color values
|
||||||
EBO_REVSUBTRACT, //!< This modes subtracts destination from source
|
EBO_REVSUBTRACT,//!< This modes subtracts destination from source
|
||||||
EBO_MIN, //!< Choose minimum value of each color channel
|
EBO_MIN, //!< Choose minimum value of each color channel
|
||||||
EBO_MAX, //!< Choose maximum value of each color channel
|
EBO_MAX, //!< Choose maximum value of each color channel
|
||||||
EBO_MIN_FACTOR, //!< Choose minimum value of each color channel after applying blend factors, not widely supported
|
EBO_MIN_FACTOR, //!< Choose minimum value of each color channel after applying blend factors, not widely supported
|
||||||
EBO_MAX_FACTOR, //!< Choose maximum value of each color channel after applying blend factors, not widely supported
|
EBO_MAX_FACTOR, //!< Choose maximum value of each color channel after applying blend factors, not widely supported
|
||||||
EBO_MIN_ALPHA, //!< Choose minimum value of each color channel based on alpha value, not widely supported
|
EBO_MIN_ALPHA, //!< Choose minimum value of each color channel based on alpha value, not widely supported
|
||||||
EBO_MAX_ALPHA //!< Choose maximum value of each color channel based on alpha value, not widely supported
|
EBO_MAX_ALPHA //!< Choose maximum value of each color channel based on alpha value, not widely supported
|
||||||
};
|
};
|
||||||
|
|
||||||
//! MaterialTypeParam: e.g. DirectX: D3DTOP_MODULATE, D3DTOP_MODULATE2X, D3DTOP_MODULATE4X
|
//! MaterialTypeParam: e.g. DirectX: D3DTOP_MODULATE, D3DTOP_MODULATE2X, D3DTOP_MODULATE4X
|
||||||
enum E_MODULATE_FUNC
|
enum E_MODULATE_FUNC
|
||||||
{
|
{
|
||||||
EMFN_MODULATE_1X = 1,
|
EMFN_MODULATE_1X = 1,
|
||||||
EMFN_MODULATE_2X = 2,
|
EMFN_MODULATE_2X = 2,
|
||||||
EMFN_MODULATE_4X = 4
|
EMFN_MODULATE_4X = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Comparison function, e.g. for depth buffer test
|
//! Comparison function, e.g. for depth buffer test
|
||||||
enum E_COMPARISON_FUNC
|
enum E_COMPARISON_FUNC
|
||||||
{
|
{
|
||||||
//! Depth test disabled (disable also write to depth buffer)
|
//! Depth test disabled (disable also write to depth buffer)
|
||||||
ECFN_DISABLED = 0,
|
ECFN_DISABLED=0,
|
||||||
//! <= test, default for e.g. depth test
|
//! <= test, default for e.g. depth test
|
||||||
ECFN_LESSEQUAL = 1,
|
ECFN_LESSEQUAL=1,
|
||||||
//! Exact equality
|
//! Exact equality
|
||||||
ECFN_EQUAL = 2,
|
ECFN_EQUAL=2,
|
||||||
//! exclusive less comparison, i.e. <
|
//! exclusive less comparison, i.e. <
|
||||||
ECFN_LESS,
|
ECFN_LESS,
|
||||||
//! Succeeds almost always, except for exact equality
|
//! Succeeds almost always, except for exact equality
|
||||||
|
@ -80,90 +81,91 @@ enum E_COMPARISON_FUNC
|
||||||
ECFN_ALWAYS,
|
ECFN_ALWAYS,
|
||||||
//! Test never succeeds
|
//! Test never succeeds
|
||||||
ECFN_NEVER
|
ECFN_NEVER
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Enum values for enabling/disabling color planes for rendering
|
//! Enum values for enabling/disabling color planes for rendering
|
||||||
enum E_COLOR_PLANE
|
enum E_COLOR_PLANE
|
||||||
{
|
{
|
||||||
//! No color enabled
|
//! No color enabled
|
||||||
ECP_NONE = 0,
|
ECP_NONE=0,
|
||||||
//! Alpha enabled
|
//! Alpha enabled
|
||||||
ECP_ALPHA = 1,
|
ECP_ALPHA=1,
|
||||||
//! Red enabled
|
//! Red enabled
|
||||||
ECP_RED = 2,
|
ECP_RED=2,
|
||||||
//! Green enabled
|
//! Green enabled
|
||||||
ECP_GREEN = 4,
|
ECP_GREEN=4,
|
||||||
//! Blue enabled
|
//! Blue enabled
|
||||||
ECP_BLUE = 8,
|
ECP_BLUE=8,
|
||||||
//! All colors, no alpha
|
//! All colors, no alpha
|
||||||
ECP_RGB = 14,
|
ECP_RGB=14,
|
||||||
//! All planes enabled
|
//! All planes enabled
|
||||||
ECP_ALL = 15
|
ECP_ALL=15
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Source of the alpha value to take
|
//! Source of the alpha value to take
|
||||||
/** This is currently only supported in EMT_ONETEXTURE_BLEND. You can use an
|
/** This is currently only supported in EMT_ONETEXTURE_BLEND. You can use an
|
||||||
or'ed combination of values. Alpha values are modulated (multiplied). */
|
or'ed combination of values. Alpha values are modulated (multiplied). */
|
||||||
enum E_ALPHA_SOURCE
|
enum E_ALPHA_SOURCE
|
||||||
{
|
{
|
||||||
//! Use no alpha, somewhat redundant with other settings
|
//! Use no alpha, somewhat redundant with other settings
|
||||||
EAS_NONE = 0,
|
EAS_NONE=0,
|
||||||
//! Use vertex color alpha
|
//! Use vertex color alpha
|
||||||
EAS_VERTEX_COLOR,
|
EAS_VERTEX_COLOR,
|
||||||
//! Use texture alpha channel
|
//! Use texture alpha channel
|
||||||
EAS_TEXTURE
|
EAS_TEXTURE
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Pack srcFact, dstFact, Modulate and alpha source to MaterialTypeParam or BlendFactor
|
//! Pack srcFact, dstFact, Modulate and alpha source to MaterialTypeParam or BlendFactor
|
||||||
/** alpha source can be an OR'ed combination of E_ALPHA_SOURCE values. */
|
/** alpha source can be an OR'ed combination of E_ALPHA_SOURCE values. */
|
||||||
inline f32 pack_textureBlendFunc(const E_BLEND_FACTOR srcFact, const E_BLEND_FACTOR dstFact,
|
inline f32 pack_textureBlendFunc(const E_BLEND_FACTOR srcFact, const E_BLEND_FACTOR dstFact,
|
||||||
const E_MODULATE_FUNC modulate = EMFN_MODULATE_1X, const u32 alphaSource = EAS_TEXTURE)
|
const E_MODULATE_FUNC modulate=EMFN_MODULATE_1X, const u32 alphaSource=EAS_TEXTURE)
|
||||||
{
|
{
|
||||||
const u32 tmp = (alphaSource << 20) | (modulate << 16) | (srcFact << 12) | (dstFact << 8) | (srcFact << 4) | dstFact;
|
const u32 tmp = (alphaSource << 20) | (modulate << 16) | (srcFact << 12) | (dstFact << 8) | (srcFact << 4) | dstFact;
|
||||||
return FR(tmp);
|
return FR(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Pack srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, Modulate and alpha source to MaterialTypeParam or BlendFactor
|
//! Pack srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, Modulate and alpha source to MaterialTypeParam or BlendFactor
|
||||||
/** alpha source can be an OR'ed combination of E_ALPHA_SOURCE values. */
|
/** alpha source can be an OR'ed combination of E_ALPHA_SOURCE values. */
|
||||||
inline f32 pack_textureBlendFuncSeparate(const E_BLEND_FACTOR srcRGBFact, const E_BLEND_FACTOR dstRGBFact,
|
inline f32 pack_textureBlendFuncSeparate(const E_BLEND_FACTOR srcRGBFact, const E_BLEND_FACTOR dstRGBFact,
|
||||||
const E_BLEND_FACTOR srcAlphaFact, const E_BLEND_FACTOR dstAlphaFact,
|
const E_BLEND_FACTOR srcAlphaFact, const E_BLEND_FACTOR dstAlphaFact,
|
||||||
const E_MODULATE_FUNC modulate = EMFN_MODULATE_1X, const u32 alphaSource = EAS_TEXTURE)
|
const E_MODULATE_FUNC modulate=EMFN_MODULATE_1X, const u32 alphaSource=EAS_TEXTURE)
|
||||||
{
|
{
|
||||||
const u32 tmp = (alphaSource << 20) | (modulate << 16) | (srcAlphaFact << 12) | (dstAlphaFact << 8) | (srcRGBFact << 4) | dstRGBFact;
|
const u32 tmp = (alphaSource << 20) | (modulate << 16) | (srcAlphaFact << 12) | (dstAlphaFact << 8) | (srcRGBFact << 4) | dstRGBFact;
|
||||||
return FR(tmp);
|
return FR(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Unpack srcFact, dstFact, modulo and alphaSource factors
|
//! Unpack srcFact, dstFact, modulo and alphaSource factors
|
||||||
/** The fields don't use the full byte range, so we could pack even more... */
|
/** The fields don't use the full byte range, so we could pack even more... */
|
||||||
inline void unpack_textureBlendFunc(E_BLEND_FACTOR &srcFact, E_BLEND_FACTOR &dstFact,
|
inline void unpack_textureBlendFunc(E_BLEND_FACTOR &srcFact, E_BLEND_FACTOR &dstFact,
|
||||||
E_MODULATE_FUNC &modulo, u32 &alphaSource, const f32 param)
|
E_MODULATE_FUNC &modulo, u32& alphaSource, const f32 param)
|
||||||
{
|
{
|
||||||
const u32 state = IR(param);
|
const u32 state = IR(param);
|
||||||
alphaSource = (state & 0x00F00000) >> 20;
|
alphaSource = (state & 0x00F00000) >> 20;
|
||||||
modulo = E_MODULATE_FUNC((state & 0x000F0000) >> 16);
|
modulo = E_MODULATE_FUNC( ( state & 0x000F0000 ) >> 16 );
|
||||||
srcFact = E_BLEND_FACTOR((state & 0x000000F0) >> 4);
|
srcFact = E_BLEND_FACTOR ( ( state & 0x000000F0 ) >> 4 );
|
||||||
dstFact = E_BLEND_FACTOR((state & 0x0000000F));
|
dstFact = E_BLEND_FACTOR ( ( state & 0x0000000F ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Unpack srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo and alphaSource factors
|
//! Unpack srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo and alphaSource factors
|
||||||
/** The fields don't use the full byte range, so we could pack even more... */
|
/** The fields don't use the full byte range, so we could pack even more... */
|
||||||
inline void unpack_textureBlendFuncSeparate(E_BLEND_FACTOR &srcRGBFact, E_BLEND_FACTOR &dstRGBFact,
|
inline void unpack_textureBlendFuncSeparate(E_BLEND_FACTOR &srcRGBFact, E_BLEND_FACTOR &dstRGBFact,
|
||||||
E_BLEND_FACTOR &srcAlphaFact, E_BLEND_FACTOR &dstAlphaFact,
|
E_BLEND_FACTOR &srcAlphaFact, E_BLEND_FACTOR &dstAlphaFact,
|
||||||
E_MODULATE_FUNC &modulo, u32 &alphaSource, const f32 param)
|
E_MODULATE_FUNC &modulo, u32& alphaSource, const f32 param)
|
||||||
{
|
{
|
||||||
const u32 state = IR(param);
|
const u32 state = IR(param);
|
||||||
alphaSource = (state & 0x00F00000) >> 20;
|
alphaSource = (state & 0x00F00000) >> 20;
|
||||||
modulo = E_MODULATE_FUNC((state & 0x000F0000) >> 16);
|
modulo = E_MODULATE_FUNC( ( state & 0x000F0000 ) >> 16 );
|
||||||
srcAlphaFact = E_BLEND_FACTOR((state & 0x0000F000) >> 12);
|
srcAlphaFact = E_BLEND_FACTOR ( ( state & 0x0000F000 ) >> 12 );
|
||||||
dstAlphaFact = E_BLEND_FACTOR((state & 0x00000F00) >> 8);
|
dstAlphaFact = E_BLEND_FACTOR ( ( state & 0x00000F00 ) >> 8 );
|
||||||
srcRGBFact = E_BLEND_FACTOR((state & 0x000000F0) >> 4);
|
srcRGBFact = E_BLEND_FACTOR ( ( state & 0x000000F0 ) >> 4 );
|
||||||
dstRGBFact = E_BLEND_FACTOR((state & 0x0000000F));
|
dstRGBFact = E_BLEND_FACTOR ( ( state & 0x0000000F ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! 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:
|
||||||
|
@ -173,39 +175,47 @@ inline bool textureBlendFunc_hasAlpha(const E_BLEND_FACTOR factor)
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! These flags are used to specify the anti-aliasing and smoothing modes
|
|
||||||
/** Techniques supported are multisampling, geometry smoothing, and alpha
|
//! These flags are used to specify the anti-aliasing and smoothing modes
|
||||||
to coverage.
|
/** Techniques supported are multisampling, geometry smoothing, and alpha
|
||||||
Some drivers don't support a per-material setting of the anti-aliasing
|
to coverage.
|
||||||
modes. In those cases, FSAA/multisampling is defined by the device mode
|
Some drivers don't support a per-material setting of the anti-aliasing
|
||||||
chosen upon creation via irr::SIrrCreationParameters.
|
modes. In those cases, FSAA/multisampling is defined by the device mode
|
||||||
*/
|
chosen upon creation via irr::SIrrCreationParameters.
|
||||||
enum E_ANTI_ALIASING_MODE
|
*/
|
||||||
{
|
enum E_ANTI_ALIASING_MODE
|
||||||
|
{
|
||||||
//! Use to turn off anti-aliasing for this material
|
//! Use to turn off anti-aliasing for this material
|
||||||
EAAM_OFF = 0,
|
EAAM_OFF=0,
|
||||||
//! Default anti-aliasing mode
|
//! Default 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
|
||||||
/** Without lighting being enabled the vertex color is the only value defining the fragment color.
|
/** Without lighting being enabled the vertex color is the only value defining the fragment color.
|
||||||
Once lighting is enabled, the four values for diffuse, ambient, emissive, and specular take over.
|
Once lighting is enabled, the four values for diffuse, ambient, emissive, and specular take over.
|
||||||
With these flags it is possible to define which lighting factor shall be defined by the vertex color
|
With these flags it is possible to define which lighting factor shall be defined by the vertex color
|
||||||
instead of the lighting factor which is the same for all faces of that material.
|
instead of the lighting factor which is the same for all faces of that material.
|
||||||
The default is to use vertex color for the diffuse value, another pretty common value is to use
|
The default is to use vertex color for the diffuse value, another pretty common value is to use
|
||||||
vertex color for both diffuse and ambient factor. */
|
vertex color for both diffuse and ambient factor. */
|
||||||
enum E_COLOR_MATERIAL
|
enum E_COLOR_MATERIAL
|
||||||
{
|
{
|
||||||
//! Don't use vertex color for lighting
|
//! Don't use vertex color for lighting
|
||||||
ECM_NONE = 0,
|
ECM_NONE=0,
|
||||||
//! Use vertex color for diffuse light, this is default
|
//! Use vertex color for diffuse light, this is default
|
||||||
ECM_DIFFUSE,
|
ECM_DIFFUSE,
|
||||||
//! Use vertex color for ambient light
|
//! Use vertex color for ambient light
|
||||||
|
@ -216,18 +226,19 @@ enum E_COLOR_MATERIAL
|
||||||
ECM_SPECULAR,
|
ECM_SPECULAR,
|
||||||
//! Use vertex color for both diffuse and ambient light
|
//! Use vertex color for both diffuse and ambient light
|
||||||
ECM_DIFFUSE_AND_AMBIENT
|
ECM_DIFFUSE_AND_AMBIENT
|
||||||
};
|
|
||||||
|
|
||||||
//! Names for polygon offset direction
|
|
||||||
const c8 *const PolygonOffsetDirectionNames[] = {
|
|
||||||
"Back",
|
|
||||||
"Front",
|
|
||||||
0,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! For SMaterial.ZWriteEnable
|
//! Names for polygon offset direction
|
||||||
enum E_ZWRITE
|
const c8* const PolygonOffsetDirectionNames[] =
|
||||||
{
|
{
|
||||||
|
"Back",
|
||||||
|
"Front",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
//! For SMaterial.ZWriteEnable
|
||||||
|
enum E_ZWRITE
|
||||||
|
{
|
||||||
//! zwrite always disabled for this material
|
//! zwrite always disabled for this material
|
||||||
EZW_OFF = 0,
|
EZW_OFF = 0,
|
||||||
|
|
||||||
|
@ -240,27 +251,30 @@ enum E_ZWRITE
|
||||||
|
|
||||||
//! zwrite always enabled for this material
|
//! zwrite always enabled for this material
|
||||||
EZW_ON
|
EZW_ON
|
||||||
};
|
};
|
||||||
|
|
||||||
//! 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.
|
|
||||||
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
|
||||||
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
|
||||||
*/
|
|
||||||
const u32 MATERIAL_MAX_TEXTURES = 4;
|
|
||||||
|
|
||||||
//! Struct for holding parameters for a material renderer
|
|
||||||
// Note for implementors: Serialization is in CNullDriver
|
//! Maximum number of texture an SMaterial can have.
|
||||||
class SMaterial
|
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
||||||
{
|
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
||||||
public:
|
*/
|
||||||
|
const u32 MATERIAL_MAX_TEXTURES = 4;
|
||||||
|
|
||||||
|
//! Struct for holding parameters for a material renderer
|
||||||
|
// Note for implementors: Serialization is in CNullDriver
|
||||||
|
class SMaterial
|
||||||
|
{
|
||||||
|
public:
|
||||||
//! Default constructor. Creates a solid, lit material with white colors
|
//! Default constructor. Creates a solid, lit material with white colors
|
||||||
SMaterial() :
|
SMaterial() :
|
||||||
MaterialType(EMT_SOLID), AmbientColor(255, 255, 255, 255),
|
MaterialType(EMT_SOLID), AmbientColor(255, 255, 255, 255),
|
||||||
|
@ -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];
|
||||||
|
@ -343,7 +356,7 @@ public:
|
||||||
Only enabled color planes will be rendered to the current render
|
Only enabled color planes will be rendered to the current render
|
||||||
target. Typical use is to disable all colors when rendering only to
|
target. Typical use is to disable all colors when rendering only to
|
||||||
depth or stencil buffer, or using Red and Green for Stereo rendering. */
|
depth or stencil buffer, or using Red and Green for Stereo rendering. */
|
||||||
u8 ColorMask : 4;
|
u8 ColorMask:4;
|
||||||
|
|
||||||
//! Defines the interpretation of vertex color in the lighting equation
|
//! Defines the interpretation of vertex color in the lighting equation
|
||||||
/** Values should be chosen from E_COLOR_MATERIAL.
|
/** Values should be chosen from E_COLOR_MATERIAL.
|
||||||
|
@ -351,11 +364,11 @@ public:
|
||||||
material values for light modulation. This allows to easily change e.g. the
|
material values for light modulation. This allows to easily change e.g. the
|
||||||
diffuse light behavior of each face. The default, ECM_DIFFUSE, will result in
|
diffuse light behavior of each face. The default, ECM_DIFFUSE, will result in
|
||||||
a very similar rendering as with lighting turned off, just with light shading. */
|
a very similar rendering as with lighting turned off, just with light shading. */
|
||||||
u8 ColorMaterial : 3;
|
u8 ColorMaterial:3;
|
||||||
|
|
||||||
//! Store the blend operation of choice
|
//! Store the blend operation of choice
|
||||||
/** Values to be chosen from E_BLEND_OPERATION. */
|
/** Values to be chosen from E_BLEND_OPERATION. */
|
||||||
E_BLEND_OPERATION BlendOperation : 4;
|
E_BLEND_OPERATION BlendOperation:4;
|
||||||
|
|
||||||
//! Store the blend factors
|
//! Store the blend factors
|
||||||
/** textureBlendFunc/textureBlendFuncSeparate functions should be used to write
|
/** textureBlendFunc/textureBlendFuncSeparate functions should be used to write
|
||||||
|
@ -388,45 +401,44 @@ public:
|
||||||
f32 PolygonOffsetSlopeScale;
|
f32 PolygonOffsetSlopeScale;
|
||||||
|
|
||||||
//! Draw as wireframe or filled triangles? Default: false
|
//! Draw as wireframe or filled triangles? Default: false
|
||||||
bool Wireframe : 1;
|
bool Wireframe:1;
|
||||||
|
|
||||||
//! Draw as point cloud or filled triangles? Default: false
|
//! Draw as point cloud or filled triangles? Default: false
|
||||||
bool PointCloud : 1;
|
bool PointCloud:1;
|
||||||
|
|
||||||
//! Flat or Gouraud shading? Default: true
|
//! Flat or Gouraud shading? Default: true
|
||||||
bool GouraudShading : 1;
|
bool GouraudShading:1;
|
||||||
|
|
||||||
//! Will this material be lighted? Default: true
|
//! Will this material be lighted? Default: true
|
||||||
bool Lighting : 1;
|
bool Lighting:1;
|
||||||
|
|
||||||
//! Is the zbuffer writable or is it read-only. Default: EZW_AUTO.
|
//! Is the zbuffer writable or is it read-only. Default: EZW_AUTO.
|
||||||
/** If this parameter is not EZW_OFF, you probably also want to set ZBuffer
|
/** If this parameter is not EZW_OFF, you probably also want to set ZBuffer
|
||||||
to values other than ECFN_DISABLED */
|
to values other than ECFN_DISABLED */
|
||||||
E_ZWRITE ZWriteEnable : 2;
|
E_ZWRITE ZWriteEnable:2;
|
||||||
|
|
||||||
//! Is backface culling enabled? Default: true
|
//! Is backface culling enabled? Default: true
|
||||||
bool BackfaceCulling : 1;
|
bool BackfaceCulling:1;
|
||||||
|
|
||||||
//! Is frontface culling enabled? Default: false
|
//! Is frontface culling enabled? Default: false
|
||||||
bool FrontfaceCulling : 1;
|
bool FrontfaceCulling:1;
|
||||||
|
|
||||||
//! Is fog enabled? Default: false
|
//! Is fog enabled? Default: false
|
||||||
bool FogEnable : 1;
|
bool FogEnable:1;
|
||||||
|
|
||||||
//! Should normals be normalized?
|
//! Should normals be normalized?
|
||||||
/** Always use this if the mesh lit and scaled. Default: false */
|
/** Always use this if the mesh lit and scaled. Default: false */
|
||||||
bool NormalizeNormals : 1;
|
bool NormalizeNormals:1;
|
||||||
|
|
||||||
//! Shall mipmaps be used if available
|
//! Shall mipmaps be used if available
|
||||||
/** Sometimes, disabling mipmap usage can be useful. Default: true */
|
/** Sometimes, disabling mipmap usage can be useful. Default: true */
|
||||||
bool UseMipMaps : 1;
|
bool UseMipMaps:1;
|
||||||
|
|
||||||
//! Execute a function on all texture layers.
|
//! Execute a function on all texture layers.
|
||||||
/** 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]);
|
||||||
}
|
}
|
||||||
|
@ -435,7 +447,7 @@ public:
|
||||||
//! Gets the texture transformation matrix for level i
|
//! Gets the texture transformation matrix for level i
|
||||||
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
|
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
|
||||||
\return Texture matrix for texture level i. */
|
\return Texture matrix for texture level i. */
|
||||||
core::matrix4 &getTextureMatrix(u32 i)
|
core::matrix4& getTextureMatrix(u32 i)
|
||||||
{
|
{
|
||||||
return TextureLayers[i].getTextureMatrix();
|
return TextureLayers[i].getTextureMatrix();
|
||||||
}
|
}
|
||||||
|
@ -443,9 +455,9 @@ public:
|
||||||
//! Gets the immutable texture transformation matrix for level i
|
//! Gets the immutable texture transformation matrix for level i
|
||||||
/** \param i The desired level.
|
/** \param i The desired level.
|
||||||
\return Texture matrix for texture level i, or identity matrix for levels larger than MATERIAL_MAX_TEXTURES. */
|
\return Texture matrix for texture level i, or identity matrix for levels larger than MATERIAL_MAX_TEXTURES. */
|
||||||
const core::matrix4 &getTextureMatrix(u32 i) const
|
const core::matrix4& getTextureMatrix(u32 i) const
|
||||||
{
|
{
|
||||||
if (i < MATERIAL_MAX_TEXTURES)
|
if (i<MATERIAL_MAX_TEXTURES)
|
||||||
return TextureLayers[i].getTextureMatrix();
|
return TextureLayers[i].getTextureMatrix();
|
||||||
else
|
else
|
||||||
return core::IdentityMatrix;
|
return core::IdentityMatrix;
|
||||||
|
@ -454,9 +466,9 @@ public:
|
||||||
//! Sets the i-th texture transformation matrix
|
//! Sets the i-th texture transformation matrix
|
||||||
/** \param i The desired level.
|
/** \param i The desired level.
|
||||||
\param mat Texture matrix for texture level i. */
|
\param mat Texture matrix for texture level i. */
|
||||||
void setTextureMatrix(u32 i, const core::matrix4 &mat)
|
void setTextureMatrix(u32 i, const core::matrix4& mat)
|
||||||
{
|
{
|
||||||
if (i >= MATERIAL_MAX_TEXTURES)
|
if (i>=MATERIAL_MAX_TEXTURES)
|
||||||
return;
|
return;
|
||||||
TextureLayers[i].setTextureMatrix(mat);
|
TextureLayers[i].setTextureMatrix(mat);
|
||||||
}
|
}
|
||||||
|
@ -464,7 +476,7 @@ public:
|
||||||
//! Gets the i-th texture
|
//! Gets the i-th texture
|
||||||
/** \param i The desired level.
|
/** \param i The desired level.
|
||||||
\return Texture for texture level i, if defined, else 0. */
|
\return Texture for texture level i, if defined, else 0. */
|
||||||
ITexture *getTexture(u32 i) const
|
ITexture* getTexture(u32 i) const
|
||||||
{
|
{
|
||||||
return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
|
return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
|
||||||
}
|
}
|
||||||
|
@ -473,9 +485,9 @@ public:
|
||||||
/** If i>=MATERIAL_MAX_TEXTURES this setting will be ignored.
|
/** If i>=MATERIAL_MAX_TEXTURES this setting will be ignored.
|
||||||
\param i The desired level.
|
\param i The desired level.
|
||||||
\param tex Texture for texture level i. */
|
\param tex Texture for texture level i. */
|
||||||
void setTexture(u32 i, ITexture *tex)
|
void setTexture(u32 i, ITexture* tex)
|
||||||
{
|
{
|
||||||
if (i >= MATERIAL_MAX_TEXTURES)
|
if (i>=MATERIAL_MAX_TEXTURES)
|
||||||
return;
|
return;
|
||||||
TextureLayers[i].Texture = tex;
|
TextureLayers[i].Texture = tex;
|
||||||
}
|
}
|
||||||
|
@ -483,7 +495,7 @@ public:
|
||||||
//! Inequality operator
|
//! Inequality operator
|
||||||
/** \param b Material to compare to.
|
/** \param b Material to compare to.
|
||||||
\return True if the materials differ, else false. */
|
\return True if the materials differ, else false. */
|
||||||
inline bool operator!=(const SMaterial &b) const
|
inline bool operator!=(const SMaterial& b) const
|
||||||
{
|
{
|
||||||
bool different =
|
bool different =
|
||||||
MaterialType != b.MaterialType ||
|
MaterialType != b.MaterialType ||
|
||||||
|
@ -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;
|
||||||
|
@ -521,15 +535,14 @@ public:
|
||||||
//! Equality operator
|
//! Equality operator
|
||||||
/** \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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -552,15 +566,17 @@ public:
|
||||||
//! as it asks the material renders directly what they do with the material.
|
//! as it asks the material renders directly what they do with the material.
|
||||||
bool isTransparent() const
|
bool isTransparent() const
|
||||||
{
|
{
|
||||||
if (MaterialType == EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
if ( MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
||||||
MaterialType == EMT_TRANSPARENT_VERTEX_ALPHA)
|
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//! global const identity Material
|
//! global const identity Material
|
||||||
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"
|
||||||
|
|
||||||
|
@ -10,11 +11,11 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace video
|
namespace video
|
||||||
{
|
{
|
||||||
class ITexture;
|
class ITexture;
|
||||||
|
|
||||||
//! Texture coord clamp mode outside [0.0, 1.0]
|
//! Texture coord clamp mode outside [0.0, 1.0]
|
||||||
enum E_TEXTURE_CLAMP
|
enum E_TEXTURE_CLAMP
|
||||||
{
|
{
|
||||||
//! Texture repeats
|
//! Texture repeats
|
||||||
ETC_REPEAT = 0,
|
ETC_REPEAT = 0,
|
||||||
//! Texture is clamped to the last pixel
|
//! Texture is clamped to the last pixel
|
||||||
|
@ -31,8 +32,8 @@ enum E_TEXTURE_CLAMP
|
||||||
ETC_MIRROR_CLAMP_TO_EDGE,
|
ETC_MIRROR_CLAMP_TO_EDGE,
|
||||||
//! Texture is mirrored once and then clamped to border
|
//! Texture is mirrored once and then clamped to border
|
||||||
ETC_MIRROR_CLAMP_TO_BORDER
|
ETC_MIRROR_CLAMP_TO_BORDER
|
||||||
};
|
};
|
||||||
static const char *const aTextureClampNames[] = {
|
static const char* const aTextureClampNames[] = {
|
||||||
"texture_clamp_repeat",
|
"texture_clamp_repeat",
|
||||||
"texture_clamp_clamp",
|
"texture_clamp_clamp",
|
||||||
"texture_clamp_clamp_to_edge",
|
"texture_clamp_clamp_to_edge",
|
||||||
|
@ -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.
|
|
||||||
/** Used when scaling textures down. See the documentation on OpenGL's
|
//! Texture minification filter.
|
||||||
`GL_TEXTURE_MIN_FILTER` for more information. */
|
/** Used when scaling textures down. See the documentation on OpenGL's
|
||||||
enum E_TEXTURE_MIN_FILTER
|
`GL_TEXTURE_MIN_FILTER` for more information. */
|
||||||
{
|
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.
|
||||||
|
@ -55,35 +56,33 @@ enum E_TEXTURE_MIN_FILTER
|
||||||
ETMINF_NEAREST_MIPMAP_LINEAR,
|
ETMINF_NEAREST_MIPMAP_LINEAR,
|
||||||
//! Aka trilinear.
|
//! Aka trilinear.
|
||||||
ETMINF_LINEAR_MIPMAP_LINEAR,
|
ETMINF_LINEAR_MIPMAP_LINEAR,
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Texture magnification filter.
|
//! Texture magnification 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.
|
||||||
ETMAGF_LINEAR,
|
ETMAGF_LINEAR,
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Struct for holding material parameters which exist per texture layer
|
//! Struct for holding material parameters which exist per texture layer
|
||||||
// Note for implementors: Serialization is in CNullDriver
|
// Note for implementors: Serialization is in CNullDriver
|
||||||
class SMaterialLayer
|
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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Copy constructor
|
//! Copy constructor
|
||||||
/** \param other Material layer to copy from. */
|
/** \param other Material layer to copy from. */
|
||||||
SMaterialLayer(const SMaterialLayer &other)
|
SMaterialLayer(const SMaterialLayer& other)
|
||||||
{
|
{
|
||||||
// This pointer is checked during assignment
|
// This pointer is checked during assignment
|
||||||
TextureMatrix = 0;
|
TextureMatrix = 0;
|
||||||
|
@ -93,7 +92,8 @@ public:
|
||||||
//! Destructor
|
//! Destructor
|
||||||
~SMaterialLayer()
|
~SMaterialLayer()
|
||||||
{
|
{
|
||||||
if (TextureMatrix) {
|
if ( TextureMatrix )
|
||||||
|
{
|
||||||
delete TextureMatrix;
|
delete TextureMatrix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,24 +101,30 @@ public:
|
||||||
//! Assignment operator
|
//! Assignment operator
|
||||||
/** \param other Material layer to copy from.
|
/** \param other Material layer to copy from.
|
||||||
\return This material layer, updated. */
|
\return This material layer, updated. */
|
||||||
SMaterialLayer &operator=(const SMaterialLayer &other)
|
SMaterialLayer& operator=(const SMaterialLayer& other)
|
||||||
{
|
{
|
||||||
// Check for self-assignment!
|
// Check for self-assignment!
|
||||||
if (this == &other)
|
if (this == &other)
|
||||||
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;
|
||||||
|
@ -134,9 +140,10 @@ public:
|
||||||
|
|
||||||
//! Gets the texture transformation matrix
|
//! Gets the texture transformation matrix
|
||||||
/** \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;
|
||||||
|
@ -144,7 +151,7 @@ public:
|
||||||
|
|
||||||
//! Gets the immutable texture transformation matrix
|
//! Gets the immutable texture transformation matrix
|
||||||
/** \return Texture matrix of this layer. */
|
/** \return Texture matrix of this layer. */
|
||||||
const core::matrix4 &getTextureMatrix() const
|
const core::matrix4& getTextureMatrix() const
|
||||||
{
|
{
|
||||||
if (TextureMatrix)
|
if (TextureMatrix)
|
||||||
return *TextureMatrix;
|
return *TextureMatrix;
|
||||||
|
@ -156,18 +163,20 @@ public:
|
||||||
/** NOTE: Pipelines can ignore this matrix when the
|
/** NOTE: Pipelines can ignore this matrix when the
|
||||||
texture is 0.
|
texture is 0.
|
||||||
\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;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Inequality operator
|
//! Inequality operator
|
||||||
/** \param b Layer to compare to.
|
/** \param b Layer to compare to.
|
||||||
\return True if layers are different, else false. */
|
\return True if layers are different, else false. */
|
||||||
inline bool operator!=(const SMaterialLayer &b) const
|
inline bool operator!=(const SMaterialLayer& b) const
|
||||||
{
|
{
|
||||||
bool different =
|
bool different =
|
||||||
Texture != b.Texture ||
|
Texture != b.Texture ||
|
||||||
|
@ -189,19 +198,17 @@ public:
|
||||||
//! Equality operator
|
//! Equality operator
|
||||||
/** \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;
|
||||||
|
|
||||||
//! Texture Clamp Mode
|
//! Texture Clamp Mode
|
||||||
/** Values are taken from E_TEXTURE_CLAMP. */
|
/** Values are taken from E_TEXTURE_CLAMP. */
|
||||||
u8 TextureWrapU : 4;
|
u8 TextureWrapU:4;
|
||||||
u8 TextureWrapV : 4;
|
u8 TextureWrapV:4;
|
||||||
u8 TextureWrapW : 4;
|
u8 TextureWrapW:4;
|
||||||
|
|
||||||
//! Minification (downscaling) filter
|
//! Minification (downscaling) filter
|
||||||
E_TEXTURE_MIN_FILTER MinFilter;
|
E_TEXTURE_MIN_FILTER MinFilter;
|
||||||
|
@ -225,14 +232,16 @@ public:
|
||||||
if the value is positive. */
|
if the value is positive. */
|
||||||
s8 LODBias;
|
s8 LODBias;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class SMaterial;
|
friend class SMaterial;
|
||||||
|
|
||||||
//! Texture Matrix
|
//! Texture Matrix
|
||||||
/** Do not access this element directly as the internal
|
/** Do not access this element directly as the internal
|
||||||
resource management has to cope with Null pointers etc. */
|
resource management has to cope with Null pointers etc. */
|
||||||
core::matrix4 *TextureMatrix;
|
core::matrix4* TextureMatrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // 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"
|
||||||
|
@ -13,34 +14,35 @@ namespace irr
|
||||||
{
|
{
|
||||||
namespace scene
|
namespace scene
|
||||||
{
|
{
|
||||||
//! Simple implementation of the IMesh interface.
|
//! Simple implementation of the IMesh interface.
|
||||||
struct SMesh : public IMesh
|
struct SMesh : public IMesh
|
||||||
{
|
{
|
||||||
//! constructor
|
//! constructor
|
||||||
SMesh()
|
SMesh()
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("SMesh");
|
setDebugName("SMesh");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//! destructor
|
//! destructor
|
||||||
virtual ~SMesh()
|
virtual ~SMesh()
|
||||||
{
|
{
|
||||||
// drop buffers
|
// drop buffers
|
||||||
for (u32 i = 0; i < MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->drop();
|
MeshBuffers[i]->drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! clean mesh
|
//! clean mesh
|
||||||
virtual void clear()
|
virtual void clear()
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->drop();
|
MeshBuffers[i]->drop();
|
||||||
MeshBuffers.clear();
|
MeshBuffers.clear();
|
||||||
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
|
||||||
{
|
{
|
||||||
|
@ -48,17 +50,18 @@ struct SMesh : public IMesh
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns pointer to a mesh buffer
|
//! returns pointer to a mesh buffer
|
||||||
IMeshBuffer *getMeshBuffer(u32 nr) const override
|
IMeshBuffer* getMeshBuffer(u32 nr) const override
|
||||||
{
|
{
|
||||||
return MeshBuffers[nr];
|
return MeshBuffers[nr];
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns a meshbuffer which fits a material
|
//! returns a meshbuffer which fits a material
|
||||||
/** 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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,13 +69,13 @@ struct SMesh : public IMesh
|
||||||
}
|
}
|
||||||
|
|
||||||
//! returns an axis aligned bounding box
|
//! returns an axis aligned bounding box
|
||||||
const core::aabbox3d<f32> &getBoundingBox() const override
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
{
|
{
|
||||||
return BoundingBox;
|
return BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set user axis aligned bounding box
|
//! set user axis aligned bounding box
|
||||||
void setBoundingBox(const core::aabbox3df &box) override
|
void setBoundingBox( const core::aabbox3df& box) override
|
||||||
{
|
{
|
||||||
BoundingBox = box;
|
BoundingBox = box;
|
||||||
}
|
}
|
||||||
|
@ -81,52 +84,63 @@ 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();
|
{
|
||||||
if (!bb.isEmpty()) {
|
const core::aabbox3df& bb = MeshBuffers[i]->getBoundingBox();
|
||||||
if (!hasMeshBufferBBox) {
|
if ( !bb.isEmpty() )
|
||||||
|
{
|
||||||
|
if ( !hasMeshBufferBBox )
|
||||||
|
{
|
||||||
hasMeshBufferBBox = true;
|
hasMeshBufferBBox = true;
|
||||||
BoundingBox = bb;
|
BoundingBox = bb;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
BoundingBox.addInternalBox(bb);
|
BoundingBox.addInternalBox(bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasMeshBufferBBox)
|
if ( !hasMeshBufferBBox )
|
||||||
BoundingBox.reset(0.0f, 0.0f, 0.0f);
|
BoundingBox.reset(0.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! adds a MeshBuffer
|
//! adds a MeshBuffer
|
||||||
/** 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
|
MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override
|
void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < MeshBuffers.size(); ++i)
|
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
||||||
MeshBuffers[i]->setDirty(buffer);
|
MeshBuffers[i]->setDirty(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! The meshbuffers of this mesh
|
//! The meshbuffers of this mesh
|
||||||
core::array<IMeshBuffer *> MeshBuffers;
|
core::array<IMeshBuffer*> MeshBuffers;
|
||||||
|
|
||||||
//! The bounding box of this mesh
|
//! The bounding box of this mesh
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -4,3 +4,4 @@
|
||||||
|
|
||||||
// replaced by template
|
// replaced by template
|
||||||
#include "CMeshBuffer.h"
|
#include "CMeshBuffer.h"
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user