forked from Mirrorlandia_minetest/irrlicht
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
275e152523 | ||
|
4ca90e3dfd |
156
.github/workflows/build.yml
vendored
156
.github/workflows/build.yml
vendored
@ -8,46 +8,47 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
linux-gl:
|
linux-gl:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DUSE_SDL2=OFF
|
cmake .
|
||||||
make VERBOSE=1 -j2
|
make VERBOSE=1 -j2
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: |
|
|
||||||
ctest --output-on-failure
|
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
run: |
|
run: |
|
||||||
make DESTDIR=$PWD/_install install
|
make DESTDIR=$PWD/_install install
|
||||||
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-linux
|
name: irrlicht-linux
|
||||||
path: ./irrlicht-linux.tar.gz
|
path: ./irrlicht-linux.tar.gz
|
||||||
|
|
||||||
linux-gles:
|
linux-gles:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
cmake . -DBUILD_EXAMPLES=1 -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
@ -61,18 +62,20 @@ jobs:
|
|||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
linux-sdl:
|
linux-sdl:
|
||||||
# something is wrong with the SDL cmake files on 20.04
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
@ -81,14 +84,16 @@ jobs:
|
|||||||
./AutomatedTest null
|
./AutomatedTest null
|
||||||
|
|
||||||
linux-sdl-gl3:
|
linux-sdl-gl3:
|
||||||
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
@ -106,14 +111,16 @@ jobs:
|
|||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
||||||
|
|
||||||
linux-sdl-gles2:
|
linux-sdl-gles2:
|
||||||
# something is wrong with the SDL cmake files on 20.04
|
runs-on: ubuntu-latest
|
||||||
runs-on: ubuntu-22.04
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
@ -132,7 +139,7 @@ jobs:
|
|||||||
|
|
||||||
mingw:
|
mingw:
|
||||||
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@ -142,21 +149,22 @@ jobs:
|
|||||||
- {variant: win32, arch: i686, extras: "-sdl"}
|
- {variant: win32, arch: i686, extras: "-sdl"}
|
||||||
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
- {variant: win64, arch: x86_64, extras: "-sdl"}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- name: Install compiler
|
- name: Install compiler
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update && sudo apt-get install cmake -qyy
|
sudo apt-get update && sudo apt-get install cmake -qyy
|
||||||
./scripts/ci-get-mingw.sh
|
wget http://minetest.kitsunemimi.pw/mingw-w64-${{matrix.config.arch}}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
|
||||||
|
sudo tar -xaf mingw.tar.xz -C /usr
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
./scripts/ci-build-mingw.sh package
|
./scripts/ci-build-mingw.sh package
|
||||||
env:
|
env:
|
||||||
CC: ${{matrix.config.arch}}-w64-mingw32-clang
|
CC: ${{matrix.config.arch}}-w64-mingw32-gcc
|
||||||
CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
|
CXX: ${{matrix.config.arch}}-w64-mingw32-g++
|
||||||
extras: ${{matrix.config.extras}}
|
extras: ${{matrix.config.extras}}
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
|
||||||
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
|
||||||
@ -164,7 +172,7 @@ 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
|
brew update
|
||||||
@ -179,27 +187,13 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./bin/OSX/AutomatedTest null
|
./bin/OSX/AutomatedTest null
|
||||||
|
|
||||||
macos-sdl:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
brew update
|
|
||||||
brew install cmake libpng jpeg sdl2
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1
|
|
||||||
make -j3
|
|
||||||
|
|
||||||
msvc:
|
msvc:
|
||||||
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
||||||
runs-on: windows-2019
|
runs-on: windows-2019
|
||||||
env:
|
env:
|
||||||
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
|
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
||||||
# 2023.10.19
|
# 2022.05.10
|
||||||
vcpkg_packages: zlib libpng libjpeg-turbo
|
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@ -216,7 +210,6 @@ jobs:
|
|||||||
-
|
-
|
||||||
use: FALSE
|
use: FALSE
|
||||||
label: '(no SDL)'
|
label: '(no SDL)'
|
||||||
vcpkg_packages: opengl-registry
|
|
||||||
-
|
-
|
||||||
use: TRUE
|
use: TRUE
|
||||||
label: '(with SDL)'
|
label: '(with SDL)'
|
||||||
@ -224,7 +217,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Restore from cache and run vcpkg
|
- name: Restore from cache and run vcpkg
|
||||||
uses: lukka/run-vcpkg@v7
|
uses: lukka/run-vcpkg@v7
|
||||||
@ -257,50 +250,7 @@ jobs:
|
|||||||
run: move include artifact/
|
run: move include artifact/
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
|
name: msvc-${{ matrix.config.arch }}
|
||||||
path: artifact/
|
path: artifact/
|
||||||
|
|
||||||
android:
|
|
||||||
name: Android ${{ matrix.arch }}
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
ndk_version: "r25c"
|
|
||||||
ANDROID_NDK: ${{ github.workspace }}/android-ndk
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo rm /var/lib/man-db/auto-update
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake
|
|
||||||
|
|
||||||
- name: Cache NDK
|
|
||||||
id: cache-ndk
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
key: android-ndk-${{ env.ndk_version }}-linux
|
|
||||||
path: ${{ env.ANDROID_NDK }}
|
|
||||||
|
|
||||||
- name: Install NDK
|
|
||||||
run: |
|
|
||||||
wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
|
|
||||||
unzip -q "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
rm "android-ndk-${ndk_version}-linux.zip"
|
|
||||||
mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
|
|
||||||
if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ./scripts/ci-build-android.sh ${{ matrix.arch }}
|
|
||||||
|
|
||||||
#- name: Upload Artifact
|
|
||||||
# uses: actions/upload-artifact@v4
|
|
||||||
# with:
|
|
||||||
# name: irrlicht-android-${{ matrix.arch }}
|
|
||||||
# path: ${{ runner.temp }}/pkg/${{ matrix.arch }}
|
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -5,7 +5,6 @@ install_manifest.txt
|
|||||||
IrrlichtMtConfig.cmake
|
IrrlichtMtConfig.cmake
|
||||||
IrrlichtMtConfigVersion.cmake
|
IrrlichtMtConfigVersion.cmake
|
||||||
IrrlichtMtTargets.cmake
|
IrrlichtMtTargets.cmake
|
||||||
CTestTestfile.cmake
|
|
||||||
Makefile
|
Makefile
|
||||||
libs/*
|
libs/*
|
||||||
*.so*
|
*.so*
|
||||||
@ -22,4 +21,4 @@ scripts/glext.h
|
|||||||
*visualstudio/
|
*visualstudio/
|
||||||
|
|
||||||
# vscode cmake plugin
|
# vscode cmake plugin
|
||||||
build/*
|
build/*
|
@ -1,6 +1,13 @@
|
|||||||
cmake_minimum_required(VERSION 3.12)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
set(IRRLICHTMT_REVISION 15)
|
# >=3.9 enables IPO; >=3.11 prefers GLVND
|
||||||
|
if(${CMAKE_VERSION} VERSION_LESS 3.11)
|
||||||
|
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||||
|
else()
|
||||||
|
cmake_policy(VERSION 3.11)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(IRRLICHTMT_REVISION 12)
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
@ -9,9 +16,6 @@ project(Irrlicht
|
|||||||
|
|
||||||
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
message(STATUS "*** Building IrrlichtMt ${PROJECT_VERSION} ***")
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
@ -34,9 +38,7 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
enable_testing()
|
|
||||||
add_subdirectory(source/Irrlicht)
|
add_subdirectory(source/Irrlicht)
|
||||||
add_subdirectory(test)
|
|
||||||
|
|
||||||
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
option(BUILD_EXAMPLES "Build example applications" FALSE)
|
||||||
if(BUILD_EXAMPLES)
|
if(BUILD_EXAMPLES)
|
||||||
|
@ -1,11 +1,5 @@
|
|||||||
@PACKAGE_INIT@
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
include(CMakeFindDependencyMacro)
|
|
||||||
|
|
||||||
if(NOT TARGET IrrlichtMt::IrrlichtMt)
|
if(NOT TARGET IrrlichtMt::IrrlichtMt)
|
||||||
# private dependency only explicitly needed with static libs
|
|
||||||
if(@USE_SDL2@ AND NOT @BUILD_SHARED_LIBS@)
|
|
||||||
find_dependency(SDL2)
|
|
||||||
endif()
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
|
||||||
endif()
|
endif()
|
||||||
|
26
LICENSE
26
LICENSE
@ -1,26 +0,0 @@
|
|||||||
Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
|
|
||||||
Please note that the Irrlicht Engine is based in part on the work of the
|
|
||||||
Independent JPEG Group, the zlib, libPng and aesGladman. This means that if you use
|
|
||||||
the Irrlicht Engine in your product, you must acknowledge somewhere in your
|
|
||||||
documentation that you've used the IJPG code. It would also be nice to mention
|
|
||||||
that you use the Irrlicht Engine, the zlib, libPng and aesGladman. See the
|
|
||||||
corresponding license files for further informations. It is also possible to disable
|
|
||||||
usage of those additional libraries by defines in the IrrCompileConfig.h header and
|
|
||||||
recompiling the engine.
|
|
1
LICENSE
Symbolic link
1
LICENSE
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
doc/irrlicht-license.txt
|
10
README.md
10
README.md
@ -1,8 +1,9 @@
|
|||||||
IrrlichtMt version 1.9
|
IrrlichtMt version 1.9
|
||||||
======================
|
======================
|
||||||
|
|
||||||
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
|
The Irrlicht Engine is an open source realtime 3D engine written in C++.
|
||||||
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
|
|
||||||
|
This is a fork by the [Minetest](https://github.com/minetest) developers that was stripped-down and customized specifically for use in Minetest.
|
||||||
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.
|
||||||
|
|
||||||
Build
|
Build
|
||||||
@ -15,7 +16,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
|
||||||
@ -24,7 +24,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:
|
||||||
|
|
||||||
@ -41,7 +41,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:
|
||||||
|
|
||||||
|
4
bin/Linux/readme.txt
Normal file
4
bin/Linux/readme.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
If you wish to compile the engine in linux yourself,
|
||||||
|
goto the \source directory. Run a 'make' in the subfolder 'Irrlicht'.
|
||||||
|
After this, you should be able to make all example applications in \examples.
|
||||||
|
Then just start an X Server and run them, from the directory where they are.
|
1
bin/OSX/readme.txt
Normal file
1
bin/OSX/readme.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
If you want to compile only the Irrlicht Engine you should use XCode project available at source/Irrlicht/ directory. You can also use examples/BuildAllExamples.xcworkspace file to build the Irrlicht Engine + all examples.
|
BIN
bin/Win32-VisualStudio/irrlicht.ico
Normal file
BIN
bin/Win32-VisualStudio/irrlicht.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
25
bin/Win32-VisualStudio/readme.txt
Normal file
25
bin/Win32-VisualStudio/readme.txt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
The Win32-VisualStudio version is currently (Irrlicht 1.8) compiled with VS 2010 using the Windows 7.1 SDK as platform toolset.
|
||||||
|
You might get the necessary Windows Platform SDK here: http://msdn.microsoft.com/en-us/windows/bb980924.aspx
|
||||||
|
|
||||||
|
To link to that Irrlicht.dll you need to set platform toolset in your VS version to the same target or re-compile the Irrlicht.dll using another platform toolset.
|
||||||
|
|
||||||
|
To re-compile Irrlicht for Win32-VisualStudio:
|
||||||
|
There are several project files for different VS versions in source/Irrlicht.
|
||||||
|
Irrlicht10.0.sln is for VS 2010
|
||||||
|
Irrlicht11.0.sln is for VS 2012
|
||||||
|
Irrlicht12.0.sln is for VS 2013
|
||||||
|
|
||||||
|
To compile Irrlicht + all examples and all tools check the BuildAllExamples_*.sln files in the examples folder.
|
||||||
|
|
||||||
|
For newer VS versions you have update one of those projects (VS usually can do that automatically when you open an older solution file).
|
||||||
|
|
||||||
|
Currently each of those solutions does set the platform toolset "Windows 7.1 SDK" (to be compatible to each other).
|
||||||
|
You might want to change that in the project settings and set it to your current version.
|
||||||
|
Make sure you use the same platform toolset in your application and in the engine.
|
||||||
|
Also when compiling examples each example has to use the same platform toolset as was used for the engine.
|
||||||
|
|
||||||
|
Platform should be Win32
|
||||||
|
Configuration is by default "Release"
|
||||||
|
But you can also chose "Debug" if you want Irrlicht with Debug information.
|
||||||
|
Static builds are possible but you have to additionally set the _IRR_STATIC_LIB_ define in the application when linking to a static Irrlicht.lib
|
||||||
|
|
BIN
bin/Win32-gcc/irrlicht.ico
Normal file
BIN
bin/Win32-gcc/irrlicht.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
16
bin/Win32-gcc/readme.txt
Normal file
16
bin/Win32-gcc/readme.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
If you wish to compile Irrlicht for Win32-gcc you have several choices.
|
||||||
|
|
||||||
|
1. You can work from within a MinGW shell.
|
||||||
|
Go to the folder source/Irrlicht and run the Makefile with:
|
||||||
|
make win32
|
||||||
|
Examples can be build by going into the folder of the example (for example examples/01.HelloWorld) and running the Makefile with:
|
||||||
|
make all_win32
|
||||||
|
|
||||||
|
2. Use the Code::Blocks IDE
|
||||||
|
There is a project file called Irrlicht-gcc.cbp in source/Irrlicht to compile just the engine.
|
||||||
|
Be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
||||||
|
|
||||||
|
There is also Code::Blocks workspace file in the examples folder called BuildAllExamples.workspace
|
||||||
|
Again be sure to select a Windows target like "Win32 - release - accurate math - dll"
|
||||||
|
This workspace allows you to compile the engine together with all examples and tools.
|
||||||
|
|
1
bin/emscripten/readme.txt
Normal file
1
bin/emscripten/readme.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
If you wish to compile Irrlicht for emscripten please check the documenation in examples/01.HelloWorld_emscripten.
|
27
build.sh
Executable file
27
build.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
args=(-DBUILD_EXAMPLES=ON -DENABLE_OPENGL=OFF -DBUILD_SHARED_LIBS=OFF)
|
||||||
|
|
||||||
|
export CC=afl-clang-fast
|
||||||
|
export CXX=afl-clang-fast++
|
||||||
|
export LD=$CXX
|
||||||
|
unset AFL_USE_ASAN
|
||||||
|
if ! grep -Fq '/afl-' build2/CMakeCache.txt; then
|
||||||
|
rm -rf build2
|
||||||
|
cmake -S . -B build2 "${args[@]}"
|
||||||
|
fi
|
||||||
|
nice make -C build2 clean
|
||||||
|
nice make -C build2 -j10
|
||||||
|
for f in build2/bin/Linux/*; do
|
||||||
|
ln -snfv "../../$f" "bin/Linux/${f##*/}_noasan"
|
||||||
|
done
|
||||||
|
|
||||||
|
export CC=afl-clang-lto
|
||||||
|
export CXX=afl-clang-lto++
|
||||||
|
export LD=$CXX
|
||||||
|
export AFL_USE_ASAN=1
|
||||||
|
if ! grep -Fq '/afl-' CMakeCache.txt; then
|
||||||
|
rm -f CMakeCache.txt
|
||||||
|
cmake . "${args[@]}"
|
||||||
|
fi
|
||||||
|
nice make clean
|
||||||
|
nice make -j10
|
26
doc/irrlicht-license.txt
Normal file
26
doc/irrlicht-license.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
Please note that the Irrlicht Engine is based in part on the work of the
|
||||||
|
Independent JPEG Group, the zlib, libPng and aesGladman. This means that if you use
|
||||||
|
the Irrlicht Engine in your product, you must acknowledge somewhere in your
|
||||||
|
documentation that you've used the IJPG code. It would also be nice to mention
|
||||||
|
that you use the Irrlicht Engine, the zlib, libPng and aesGladman. See the
|
||||||
|
corresponding license files for further informations. It is also possible to disable
|
||||||
|
usage of those additional libraries by defines in the IrrCompileConfig.h header and
|
||||||
|
recompiling the engine.
|
63
doc/release_checklist.txt
Normal file
63
doc/release_checklist.txt
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
Checklist for Irrlicht developers doing releases.
|
||||||
|
|
||||||
|
Note: Generally the more platforms, compilers, settings you can test the better. Ask for help for platforms which you don't own.
|
||||||
|
|
||||||
|
- PRE-BUILD TESTS:
|
||||||
|
- - Run tests in the tests folder
|
||||||
|
- - Compile and run examples.
|
||||||
|
- - Compile and run the tools. Note that some tools are in the buildall-examples VS project files on Windows,
|
||||||
|
but on Linux command line you have to compile them individually.
|
||||||
|
|
||||||
|
- VERSION UPDATES:
|
||||||
|
- - check IRRLICHT_SDK_VERSION (in IrrCompileConfig.h)
|
||||||
|
- - check version number in the Makefile
|
||||||
|
- - update readme.txt (version number, supported compilers)
|
||||||
|
- - Add new release information (date+version-number) in changes.txt
|
||||||
|
- - go through folders if other .txt files still make sense (things change and updating those files tends to be forgotten)
|
||||||
|
|
||||||
|
- DOCUMENTATION UPDATES:
|
||||||
|
- - run makedocumentation.sh in scripts\doc\irrlicht
|
||||||
|
- - run maketutorial.sh in scripts\doc\irrlicht (commit changed tutorial.html's)
|
||||||
|
|
||||||
|
- BUILDING THE RELEASE
|
||||||
|
(TBD - should we still release dll's? Newer and older VS builds are no longer compatible anyway)
|
||||||
|
- - run a clean build for buildAllExamples in the examples folder with the
|
||||||
|
target compiler for 32-bit and for release (old VS compiler - so far VS2010)
|
||||||
|
- - when possible compile the dll for MinGW on Windows (in release and with -s for smaller size)
|
||||||
|
- - when possible compile the dll for 64 bit (again with Visual Studio and release)
|
||||||
|
- - create a target directory, like irrlicht-1.8.1 for example
|
||||||
|
- - svn export to the target directory
|
||||||
|
- - copy the subfolders of doctemp into the doc folder of the target directory
|
||||||
|
careful, this should only be one(!) subfolder (we ended up with copies before, maybe Windows/Linux builds use different names?)
|
||||||
|
- - copy all .exe files (except test.exe) from bin\Win32-VisualStudio (.pdb's are not necessary)
|
||||||
|
- - copy Irrlicht.dll from bin\Win32-visualstudio
|
||||||
|
- - copy the files in lib\Win32-visualstudio
|
||||||
|
- - copy Irrlicht.dll from bin\Win64-VisualStudio
|
||||||
|
- - copy the files in lib\Win64-visualstudio
|
||||||
|
- - copy Irrlicht.dll from bin\Win32-gcc
|
||||||
|
- - copy the files in lib\Win32-gcc
|
||||||
|
- - remove the tests folder
|
||||||
|
- - remove scripts folder (if the release comes with docs, if you do a release
|
||||||
|
without docs for smaller filesizes then the script folder has to stay in).
|
||||||
|
- - create a zip file
|
||||||
|
- - figure out how to fix unix access right for shell-scripts in the zip file (my
|
||||||
|
trick so far is: unzip in Linux, set +x for all .sh files, zip again)
|
||||||
|
|
||||||
|
RELEASING:
|
||||||
|
- - upload the zip-file somewhere, then download it again on all platforms and do
|
||||||
|
another quick test with that file (do examples still run, can you compile)
|
||||||
|
- - give the link to the zip out on the mailinglist for others to look at
|
||||||
|
- - Upload new documentation (the content of doc/html) to: web.sourceforge.net
|
||||||
|
(sftp protocol, user and passwd are your sourceforge account, the folder
|
||||||
|
might not be shown - but you can still cd into it!):
|
||||||
|
/home/project-web/i/ir/irrlicht/htdocs
|
||||||
|
Best create first a folder with a new name, copy stuff in there, test (just
|
||||||
|
check the website), rename old folder and give new folder the "docu" name.
|
||||||
|
Then you can delete the old folder if you want.
|
||||||
|
- - upload the zip by logging in to sourceforge and using the "Files" menu (needs
|
||||||
|
admin privileges and it's the 'Files' menu between 'Summary' and 'Reviews').
|
||||||
|
The target is in one of the Irrlicht SDK subfolders. Then click the "i" beside
|
||||||
|
the file and "select all" to make it the active download.
|
||||||
|
- - write a forum post, tell everyone in facebook, reddit, your friends...
|
||||||
|
- - login to wordpress at http://irrlicht.sourceforge.net/wp-login.php, update the
|
||||||
|
downloads section and write a release post.
|
2891
doc/upgrade-guide.txt
Normal file
2891
doc/upgrade-guide.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,162 +1,162 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <irrlicht.h>
|
#include <irrlicht.h>
|
||||||
#include "exampleHelper.h"
|
#include "exampleHelper.h"
|
||||||
|
|
||||||
using namespace irr;
|
using namespace irr;
|
||||||
|
|
||||||
static IrrlichtDevice *device = nullptr;
|
static IrrlichtDevice *device = nullptr;
|
||||||
static int test_fail = 0;
|
static int test_fail = 0;
|
||||||
|
|
||||||
void test_irr_array();
|
void test_irr_array();
|
||||||
void test_irr_string();
|
void test_irr_string();
|
||||||
|
|
||||||
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||||
{
|
{
|
||||||
if (arg_ == "null")
|
if (arg_ == "null")
|
||||||
return video::EDT_NULL;
|
return video::EDT_NULL;
|
||||||
if (arg_ == "ogles1")
|
if (arg_ == "ogles1")
|
||||||
return video::EDT_OGLES1;
|
return video::EDT_OGLES1;
|
||||||
if (arg_ == "ogles2")
|
if (arg_ == "ogles2")
|
||||||
return video::EDT_OGLES2;
|
return video::EDT_OGLES2;
|
||||||
if (arg_ == "opengl")
|
if (arg_ == "opengl")
|
||||||
return video::EDT_OPENGL;
|
return video::EDT_OPENGL;
|
||||||
if (arg_ == "opengl3")
|
if (arg_ == "opengl3")
|
||||||
return video::EDT_OPENGL3;
|
return video::EDT_OPENGL3;
|
||||||
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
|
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
|
||||||
return video::EDT_OPENGL;
|
return video::EDT_OPENGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void check(bool ok, const char *msg)
|
static inline void check(bool ok, const char *msg)
|
||||||
{
|
{
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
test_fail++;
|
test_fail++;
|
||||||
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
|
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_unit_tests() {
|
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();
|
||||||
test_irr_string();
|
test_irr_string();
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
std::cerr << e.what() << std::endl;
|
std::cerr << e.what() << std::endl;
|
||||||
test_fail++;
|
test_fail++;
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
run_unit_tests();
|
run_unit_tests();
|
||||||
|
|
||||||
SIrrlichtCreationParameters p;
|
SIrrlichtCreationParameters p;
|
||||||
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
||||||
p.WindowSize = core::dimension2du(640, 480);
|
p.WindowSize = core::dimension2du(640, 480);
|
||||||
p.Vsync = true;
|
p.Vsync = true;
|
||||||
p.LoggingLevel = ELL_DEBUG;
|
p.LoggingLevel = ELL_DEBUG;
|
||||||
|
|
||||||
device = createDeviceEx(p);
|
device = createDeviceEx(p);
|
||||||
if (!device)
|
if (!device)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
{
|
{
|
||||||
u32 total = 0;
|
u32 total = 0;
|
||||||
device->getOSOperator()->getSystemMemory(&total, nullptr);
|
device->getOSOperator()->getSystemMemory(&total, nullptr);
|
||||||
core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10);
|
core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10);
|
||||||
device->getLogger()->log(message.c_str(), ELL_INFORMATION);
|
device->getLogger()->log(message.c_str(), ELL_INFORMATION);
|
||||||
check(total > 130 * 1024, "RAM amount");
|
check(total > 130 * 1024, "RAM amount");
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
});
|
});
|
||||||
node->setFrameLoop(0, 29);
|
node->setFrameLoop(0, 29);
|
||||||
node->setAnimationSpeed(30);
|
node->setAnimationSpeed(30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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';
|
||||||
event.KeyInput.Key = KEY_KEY_A;
|
event.KeyInput.Key = KEY_KEY_A;
|
||||||
event.KeyInput.PressedDown = true;
|
event.KeyInput.PressedDown = true;
|
||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
check(core::stringw(L"a") == editbox->getText(), "EditBox text");
|
check(core::stringw(L"a") == editbox->getText(), "EditBox text");
|
||||||
|
|
||||||
device->getLogger()->log("Done.", ELL_INFORMATION);
|
device->getLogger()->log("Done.", ELL_INFORMATION);
|
||||||
device->drop();
|
device->drop();
|
||||||
return test_fail > 0 ? 1 : 0;
|
return test_fail > 0 ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
@ -168,32 +168,22 @@ static void test_methods()
|
|||||||
|
|
||||||
static void test_conv()
|
static void test_conv()
|
||||||
{
|
{
|
||||||
// locale-independent
|
// assumes Unicode and UTF-8 locale
|
||||||
|
setlocale(LC_CTYPE, "");
|
||||||
|
|
||||||
stringw out;
|
stringw out;
|
||||||
utf8ToWString(out, "†††");
|
multibyteToWString(out, "†††");
|
||||||
UASSERTEQ(out.size(), 3);
|
UASSERTEQ(out.size(), 3);
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
UASSERTEQ(static_cast<u16>(out[i]), 0x2020);
|
||||||
|
|
||||||
stringc out2;
|
stringc out2;
|
||||||
wStringToUTF8(out2, L"†††");
|
wStringToMultibyte(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
|
|
||||||
if (!setlocale(LC_CTYPE, "C.UTF-8"))
|
|
||||||
setlocale(LC_CTYPE, "UTF-8"); // macOS
|
|
||||||
|
|
||||||
stringw out3;
|
|
||||||
multibyteToWString(out3, "†††");
|
|
||||||
UASSERTEQ(out3.size(), 3);
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
UASSERTEQ(static_cast<u16>(out3[i]), 0x2020);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_irr_string()
|
void test_irr_string()
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
set(IRREXAMPLES
|
set(IRREXAMPLES
|
||||||
# removed
|
LoadTexture
|
||||||
|
LoadMesh
|
||||||
)
|
)
|
||||||
if(UNIX)
|
if(FALSE)
|
||||||
list(APPEND IRREXAMPLES AutomatedTest)
|
list(APPEND IRREXAMPLES AutomatedTest)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
44
examples/LoadMesh/main.cpp
Normal file
44
examples/LoadMesh/main.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include <irrlicht.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace irr;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
SIrrlichtCreationParameters p;
|
||||||
|
p.DriverType = video::EDT_NULL;
|
||||||
|
p.WindowSize = core::dimension2du(640, 480);
|
||||||
|
p.LoggingLevel = ELL_DEBUG;
|
||||||
|
|
||||||
|
auto *device = createDeviceEx(p);
|
||||||
|
if (!device)
|
||||||
|
return 1;
|
||||||
|
auto *smgr = device->getSceneManager();
|
||||||
|
|
||||||
|
while (__AFL_LOOP(10000)) {
|
||||||
|
auto *mfile = device->getFileSystem()->createAndOpenFile(argv[1]);
|
||||||
|
if (!mfile)
|
||||||
|
continue;
|
||||||
|
scene::IAnimatedMesh *mesh;
|
||||||
|
// Irrlicht matches on file extension so we have to do this by hand
|
||||||
|
for (u32 i = 0; i < smgr->getMeshLoaderCount(); i++) {
|
||||||
|
mfile->seek(0);
|
||||||
|
mesh = smgr->getMeshLoader(i)->createMesh(mfile);
|
||||||
|
if (mesh) {
|
||||||
|
core::stringc msg("Loaded using loader #");
|
||||||
|
msg += core::stringc(i);
|
||||||
|
device->getLogger()->log(msg.c_str(), ELL_DEBUG);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mesh)
|
||||||
|
mesh->drop();
|
||||||
|
mfile->drop();
|
||||||
|
}
|
||||||
|
|
||||||
|
device->drop();
|
||||||
|
return 0;
|
||||||
|
}
|
29
examples/LoadTexture/main.cpp
Normal file
29
examples/LoadTexture/main.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <irrlicht.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace irr;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
SIrrlichtCreationParameters p;
|
||||||
|
p.DriverType = video::EDT_NULL;
|
||||||
|
p.WindowSize = core::dimension2du(640, 480);
|
||||||
|
p.LoggingLevel = ELL_DEBUG;
|
||||||
|
|
||||||
|
auto *device = createDeviceEx(p);
|
||||||
|
if (!device)
|
||||||
|
return 1;
|
||||||
|
auto *driver = device->getVideoDriver();
|
||||||
|
|
||||||
|
while (__AFL_LOOP(10000)) {
|
||||||
|
auto *tex = driver->getTexture(argv[1]);
|
||||||
|
if (tex)
|
||||||
|
driver->removeTexture(tex);
|
||||||
|
}
|
||||||
|
|
||||||
|
device->drop();
|
||||||
|
return 0;
|
||||||
|
}
|
226
include/CIndexBuffer.h
Normal file
226
include/CIndexBuffer.h
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
||||||
|
// This file is part of the "Irrlicht Engine".
|
||||||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
|
#ifndef __C_INDEX_BUFFER_H_INCLUDED__
|
||||||
|
#define __C_INDEX_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
|
#include "IIndexBuffer.h"
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace scene
|
||||||
|
{
|
||||||
|
|
||||||
|
class CIndexBuffer : public IIndexBuffer
|
||||||
|
{
|
||||||
|
|
||||||
|
class IIndexList
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~IIndexList(){};
|
||||||
|
|
||||||
|
virtual u32 stride() const =0;
|
||||||
|
virtual u32 size() const =0;
|
||||||
|
virtual void push_back(const u32 &element) =0;
|
||||||
|
virtual u32 operator [](u32 index) const =0;
|
||||||
|
virtual u32 getLast() =0;
|
||||||
|
virtual void setValue(u32 index, u32 value) =0;
|
||||||
|
virtual void set_used(u32 usedNow) =0;
|
||||||
|
virtual void reallocate(u32 new_size) =0;
|
||||||
|
virtual u32 allocated_size() const =0;
|
||||||
|
virtual void* pointer() =0;
|
||||||
|
virtual video::E_INDEX_TYPE getType() const =0;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class CSpecificIndexList : public IIndexList
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
core::array<T> Indices;
|
||||||
|
|
||||||
|
u32 stride() const override {return sizeof(T);}
|
||||||
|
|
||||||
|
u32 size() const override {return Indices.size();}
|
||||||
|
|
||||||
|
void push_back(const u32 &element) override
|
||||||
|
{
|
||||||
|
// push const ref due to compiler problem with gcc 4.6, big endian
|
||||||
|
Indices.push_back((const T&)element);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 operator [](u32 index) const override
|
||||||
|
{
|
||||||
|
return (u32)(Indices[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 getLast() override {return (u32)Indices.getLast();}
|
||||||
|
|
||||||
|
void setValue(u32 index, u32 value) override
|
||||||
|
{
|
||||||
|
Indices[index]=(T)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_used(u32 usedNow) override
|
||||||
|
{
|
||||||
|
Indices.set_used(usedNow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reallocate(u32 new_size) override
|
||||||
|
{
|
||||||
|
Indices.reallocate(new_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 allocated_size() const override
|
||||||
|
{
|
||||||
|
return Indices.allocated_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void* pointer() override {return Indices.pointer();}
|
||||||
|
|
||||||
|
video::E_INDEX_TYPE getType() const override
|
||||||
|
{
|
||||||
|
if (sizeof(T)==sizeof(u16))
|
||||||
|
return video::EIT_16BIT;
|
||||||
|
else
|
||||||
|
return video::EIT_32BIT;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
IIndexList *Indices;
|
||||||
|
|
||||||
|
CIndexBuffer(video::E_INDEX_TYPE IndexType) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1)
|
||||||
|
{
|
||||||
|
setType(IndexType);
|
||||||
|
}
|
||||||
|
|
||||||
|
CIndexBuffer(const IIndexBuffer &IndexBufferCopy) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1)
|
||||||
|
{
|
||||||
|
setType(IndexBufferCopy.getType());
|
||||||
|
reallocate(IndexBufferCopy.size());
|
||||||
|
|
||||||
|
for (u32 n=0;n<IndexBufferCopy.size();++n)
|
||||||
|
push_back(IndexBufferCopy[n]);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~CIndexBuffer()
|
||||||
|
{
|
||||||
|
delete Indices;
|
||||||
|
}
|
||||||
|
|
||||||
|
//virtual void setType(video::E_INDEX_TYPE IndexType);
|
||||||
|
void setType(video::E_INDEX_TYPE IndexType) override
|
||||||
|
{
|
||||||
|
IIndexList *NewIndices=0;
|
||||||
|
|
||||||
|
switch (IndexType)
|
||||||
|
{
|
||||||
|
case video::EIT_16BIT:
|
||||||
|
{
|
||||||
|
NewIndices=new CSpecificIndexList<u16>;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case video::EIT_32BIT:
|
||||||
|
{
|
||||||
|
NewIndices=new CSpecificIndexList<u32>;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Indices)
|
||||||
|
{
|
||||||
|
NewIndices->reallocate( Indices->size() );
|
||||||
|
|
||||||
|
for(u32 n=0;n<Indices->size();++n)
|
||||||
|
NewIndices->push_back((*Indices)[n]);
|
||||||
|
|
||||||
|
delete Indices;
|
||||||
|
}
|
||||||
|
|
||||||
|
Indices=NewIndices;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* getData() override {return Indices->pointer();}
|
||||||
|
|
||||||
|
video::E_INDEX_TYPE getType() const override {return Indices->getType();}
|
||||||
|
|
||||||
|
u32 stride() const override {return Indices->stride();}
|
||||||
|
|
||||||
|
u32 size() const override
|
||||||
|
{
|
||||||
|
return Indices->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void push_back(const u32 &element) override
|
||||||
|
{
|
||||||
|
Indices->push_back(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 operator [](u32 index) const override
|
||||||
|
{
|
||||||
|
return (*Indices)[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 getLast() override
|
||||||
|
{
|
||||||
|
return Indices->getLast();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setValue(u32 index, u32 value) override
|
||||||
|
{
|
||||||
|
Indices->setValue(index, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_used(u32 usedNow) override
|
||||||
|
{
|
||||||
|
Indices->set_used(usedNow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reallocate(u32 new_size) override
|
||||||
|
{
|
||||||
|
Indices->reallocate(new_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 allocated_size() const override
|
||||||
|
{
|
||||||
|
return Indices->allocated_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void* pointer() override
|
||||||
|
{
|
||||||
|
return Indices->pointer();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! get the current hardware mapping hint
|
||||||
|
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||||
|
{
|
||||||
|
return MappingHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! set the hardware mapping hint, for driver
|
||||||
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||||
|
{
|
||||||
|
MappingHint=NewMappingHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
|
void setDirty() override
|
||||||
|
{
|
||||||
|
++ChangedID;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Get the currently used ID for identification of changes.
|
||||||
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
|
u32 getChangedID() const override {return ChangedID;}
|
||||||
|
|
||||||
|
E_HARDWARE_MAPPING MappingHint;
|
||||||
|
u32 ChangedID;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,294 +1,330 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IMeshBuffer.h"
|
#include "irrArray.h"
|
||||||
|
#include "IMeshBuffer.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
//! Template implementation of the IMeshBuffer interface
|
{
|
||||||
template <class T>
|
//! Template implementation of the IMeshBuffer interface
|
||||||
class CMeshBuffer : public IMeshBuffer
|
template <class T>
|
||||||
{
|
class CMeshBuffer : public IMeshBuffer
|
||||||
public:
|
{
|
||||||
//! Default constructor for empty meshbuffer
|
public:
|
||||||
CMeshBuffer()
|
//! Default constructor for empty meshbuffer
|
||||||
: ChangedID_Vertex(1), ChangedID_Index(1)
|
CMeshBuffer()
|
||||||
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
|
: ChangedID_Vertex(1), ChangedID_Index(1)
|
||||||
, HWBuffer(NULL)
|
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
|
||||||
, PrimitiveType(EPT_TRIANGLES)
|
, HWBuffer(NULL)
|
||||||
{
|
, PrimitiveType(EPT_TRIANGLES)
|
||||||
#ifdef _DEBUG
|
{
|
||||||
setDebugName("CMeshBuffer");
|
#ifdef _DEBUG
|
||||||
#endif
|
setDebugName("CMeshBuffer");
|
||||||
}
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
//! Get material of this meshbuffer
|
|
||||||
/** \return Material of this buffer */
|
//! Get material of this meshbuffer
|
||||||
const video::SMaterial& getMaterial() const override
|
/** \return Material of this buffer */
|
||||||
{
|
const video::SMaterial& getMaterial() const override
|
||||||
return Material;
|
{
|
||||||
}
|
return Material;
|
||||||
|
}
|
||||||
|
|
||||||
//! Get material of this meshbuffer
|
|
||||||
/** \return Material of this buffer */
|
//! Get material of this meshbuffer
|
||||||
video::SMaterial& getMaterial() override
|
/** \return Material of this buffer */
|
||||||
{
|
video::SMaterial& getMaterial() override
|
||||||
return Material;
|
{
|
||||||
}
|
return Material;
|
||||||
|
}
|
||||||
|
|
||||||
//! Get pointer to vertices
|
|
||||||
/** \return Pointer to vertices. */
|
//! Get pointer to vertices
|
||||||
const void* getVertices() const override
|
/** \return Pointer to vertices. */
|
||||||
{
|
const void* getVertices() const override
|
||||||
return Vertices.const_pointer();
|
{
|
||||||
}
|
return Vertices.const_pointer();
|
||||||
|
}
|
||||||
|
|
||||||
//! Get pointer to vertices
|
|
||||||
/** \return Pointer to vertices. */
|
//! Get pointer to vertices
|
||||||
void* getVertices() override
|
/** \return Pointer to vertices. */
|
||||||
{
|
void* getVertices() override
|
||||||
return Vertices.pointer();
|
{
|
||||||
}
|
return Vertices.pointer();
|
||||||
|
}
|
||||||
|
|
||||||
//! Get number of vertices
|
|
||||||
/** \return Number of vertices. */
|
//! Get number of vertices
|
||||||
u32 getVertexCount() const override
|
/** \return Number of vertices. */
|
||||||
{
|
u32 getVertexCount() const override
|
||||||
return Vertices.size();
|
{
|
||||||
}
|
return Vertices.size();
|
||||||
|
}
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
|
||||||
/** \return Index type of this buffer. */
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
video::E_INDEX_TYPE getIndexType() const override
|
/** \return Index type of this buffer. */
|
||||||
{
|
video::E_INDEX_TYPE getIndexType() const override
|
||||||
return video::EIT_16BIT;
|
{
|
||||||
}
|
return video::EIT_16BIT;
|
||||||
|
}
|
||||||
//! Get pointer to indices
|
|
||||||
/** \return Pointer to indices. */
|
//! Get pointer to indices
|
||||||
const u16* getIndices() const override
|
/** \return Pointer to indices. */
|
||||||
{
|
const u16* getIndices() const override
|
||||||
return Indices.const_pointer();
|
{
|
||||||
}
|
return Indices.const_pointer();
|
||||||
|
}
|
||||||
|
|
||||||
//! Get pointer to indices
|
|
||||||
/** \return Pointer to indices. */
|
//! Get pointer to indices
|
||||||
u16* getIndices() override
|
/** \return Pointer to indices. */
|
||||||
{
|
u16* getIndices() override
|
||||||
return Indices.pointer();
|
{
|
||||||
}
|
return Indices.pointer();
|
||||||
|
}
|
||||||
|
|
||||||
//! Get number of indices
|
|
||||||
/** \return Number of indices. */
|
//! Get number of indices
|
||||||
u32 getIndexCount() const override
|
/** \return Number of indices. */
|
||||||
{
|
u32 getIndexCount() const override
|
||||||
return Indices.size();
|
{
|
||||||
}
|
return Indices.size();
|
||||||
|
}
|
||||||
|
|
||||||
//! Get the axis aligned bounding box
|
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
//! Get the axis aligned bounding box
|
||||||
const core::aabbox3d<f32>& getBoundingBox() const override
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
{
|
const core::aabbox3d<f32>& getBoundingBox() const override
|
||||||
return BoundingBox;
|
{
|
||||||
}
|
return BoundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
//! Set the axis aligned bounding box
|
|
||||||
/** \param box New axis aligned bounding box for this buffer. */
|
//! Set the axis aligned bounding box
|
||||||
//! set user axis aligned bounding box
|
/** \param box New axis aligned bounding box for this buffer. */
|
||||||
void setBoundingBox(const core::aabbox3df& box) override
|
//! set user axis aligned bounding box
|
||||||
{
|
void setBoundingBox(const core::aabbox3df& box) override
|
||||||
BoundingBox = box;
|
{
|
||||||
}
|
BoundingBox = box;
|
||||||
|
}
|
||||||
|
|
||||||
//! Recalculate the bounding box.
|
|
||||||
/** should be called if the mesh changed. */
|
//! Recalculate the bounding box.
|
||||||
void recalculateBoundingBox() override
|
/** should be called if the mesh changed. */
|
||||||
{
|
void recalculateBoundingBox() override
|
||||||
if (!Vertices.empty())
|
{
|
||||||
{
|
if (!Vertices.empty())
|
||||||
BoundingBox.reset(Vertices[0].Pos);
|
{
|
||||||
const irr::u32 vsize = Vertices.size();
|
BoundingBox.reset(Vertices[0].Pos);
|
||||||
for (u32 i=1; i<vsize; ++i)
|
const irr::u32 vsize = Vertices.size();
|
||||||
BoundingBox.addInternalPoint(Vertices[i].Pos);
|
for (u32 i=1; i<vsize; ++i)
|
||||||
}
|
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.
|
|
||||||
/** \return Type of vertex data. */
|
//! Get type of vertex data stored in this buffer.
|
||||||
video::E_VERTEX_TYPE getVertexType() const override
|
/** \return Type of vertex data. */
|
||||||
{
|
video::E_VERTEX_TYPE getVertexType() const override
|
||||||
return T::getType();
|
{
|
||||||
}
|
return T::getType();
|
||||||
|
}
|
||||||
//! returns position of vertex i
|
|
||||||
const core::vector3df& getPosition(u32 i) const override
|
//! returns position of vertex i
|
||||||
{
|
const core::vector3df& getPosition(u32 i) const override
|
||||||
return Vertices[i].Pos;
|
{
|
||||||
}
|
return Vertices[i].Pos;
|
||||||
|
}
|
||||||
//! returns position of vertex i
|
|
||||||
core::vector3df& getPosition(u32 i) override
|
//! returns position of vertex i
|
||||||
{
|
core::vector3df& getPosition(u32 i) override
|
||||||
return Vertices[i].Pos;
|
{
|
||||||
}
|
return Vertices[i].Pos;
|
||||||
|
}
|
||||||
//! returns normal of vertex i
|
|
||||||
const core::vector3df& getNormal(u32 i) const override
|
//! returns normal of vertex i
|
||||||
{
|
const core::vector3df& getNormal(u32 i) const override
|
||||||
return Vertices[i].Normal;
|
{
|
||||||
}
|
return Vertices[i].Normal;
|
||||||
|
}
|
||||||
//! returns normal of vertex i
|
|
||||||
core::vector3df& getNormal(u32 i) override
|
//! returns normal of vertex i
|
||||||
{
|
core::vector3df& getNormal(u32 i) override
|
||||||
return Vertices[i].Normal;
|
{
|
||||||
}
|
return Vertices[i].Normal;
|
||||||
|
}
|
||||||
//! returns texture coord of vertex i
|
|
||||||
const core::vector2df& getTCoords(u32 i) const override
|
//! returns texture coord of vertex i
|
||||||
{
|
const core::vector2df& getTCoords(u32 i) const override
|
||||||
return Vertices[i].TCoords;
|
{
|
||||||
}
|
return Vertices[i].TCoords;
|
||||||
|
}
|
||||||
//! returns texture coord of vertex i
|
|
||||||
core::vector2df& getTCoords(u32 i) override
|
//! returns texture coord of vertex i
|
||||||
{
|
core::vector2df& getTCoords(u32 i) override
|
||||||
return Vertices[i].TCoords;
|
{
|
||||||
}
|
return Vertices[i].TCoords;
|
||||||
|
}
|
||||||
|
|
||||||
//! Append the vertices and indices to the current buffer
|
|
||||||
/** Only works for compatible types, i.e. either the same type
|
//! Append the vertices and indices to the current buffer
|
||||||
or the main buffer is of standard type. Otherwise, behavior is
|
/** Only works for compatible types, i.e. either the same type
|
||||||
undefined.
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
*/
|
undefined.
|
||||||
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
|
*/
|
||||||
{
|
void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) override
|
||||||
if (vertices == getVertices())
|
{
|
||||||
return;
|
if (vertices == getVertices())
|
||||||
|
return;
|
||||||
const u32 vertexCount = getVertexCount();
|
|
||||||
u32 i;
|
const u32 vertexCount = getVertexCount();
|
||||||
|
u32 i;
|
||||||
Vertices.reallocate(vertexCount+numVertices);
|
|
||||||
for (i=0; i<numVertices; ++i)
|
Vertices.reallocate(vertexCount+numVertices);
|
||||||
{
|
for (i=0; i<numVertices; ++i)
|
||||||
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
{
|
||||||
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
|
Vertices.push_back(static_cast<const T*>(vertices)[i]);
|
||||||
}
|
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
|
||||||
|
}
|
||||||
Indices.reallocate(getIndexCount()+numIndices);
|
|
||||||
for (i=0; i<numIndices; ++i)
|
Indices.reallocate(getIndexCount()+numIndices);
|
||||||
{
|
for (i=0; i<numIndices; ++i)
|
||||||
Indices.push_back(indices[i]+vertexCount);
|
{
|
||||||
}
|
Indices.push_back(indices[i]+vertexCount);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! get the current hardware mapping hint
|
|
||||||
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
//! Append the meshbuffer to the current buffer
|
||||||
{
|
/** Only works for compatible types, i.e. either the same type
|
||||||
return MappingHint_Vertex;
|
or the main buffer is of standard type. Otherwise, behavior is
|
||||||
}
|
undefined.
|
||||||
|
\param other Meshbuffer to be appended to this one.
|
||||||
//! get the current hardware mapping hint
|
*/
|
||||||
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
void append(const IMeshBuffer* const other) override
|
||||||
{
|
{
|
||||||
return MappingHint_Index;
|
/*
|
||||||
}
|
if (this==other)
|
||||||
|
return;
|
||||||
//! set the hardware mapping hint, for driver
|
|
||||||
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
const u32 vertexCount = getVertexCount();
|
||||||
{
|
u32 i;
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
|
||||||
MappingHint_Vertex=NewMappingHint;
|
Vertices.reallocate(vertexCount+other->getVertexCount());
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
for (i=0; i<other->getVertexCount(); ++i)
|
||||||
MappingHint_Index=NewMappingHint;
|
{
|
||||||
}
|
Vertices.push_back(reinterpret_cast<const T*>(other->getVertices())[i]);
|
||||||
|
}
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
|
||||||
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
Indices.reallocate(getIndexCount()+other->getIndexCount());
|
||||||
{
|
for (i=0; i<other->getIndexCount(); ++i)
|
||||||
PrimitiveType = type;
|
{
|
||||||
}
|
Indices.push_back(other->getIndices()[i]+vertexCount);
|
||||||
|
}
|
||||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
BoundingBox.addInternalBox(other->getBoundingBox());
|
||||||
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
*/
|
||||||
{
|
}
|
||||||
return PrimitiveType;
|
|
||||||
}
|
|
||||||
|
//! get the current hardware mapping hint
|
||||||
//! flags the mesh as changed, reloads hardware buffers
|
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
|
||||||
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
{
|
||||||
{
|
return MappingHint_Vertex;
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
}
|
||||||
++ChangedID_Vertex;
|
|
||||||
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
//! get the current hardware mapping hint
|
||||||
++ChangedID_Index;
|
E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override
|
||||||
}
|
{
|
||||||
|
return MappingHint_Index;
|
||||||
//! Get the currently used ID for identification of changes.
|
}
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
|
||||||
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
//! set the hardware mapping hint, for driver
|
||||||
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
//! Get the currently used ID for identification of changes.
|
{
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
|
||||||
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
MappingHint_Vertex=NewMappingHint;
|
||||||
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||||
void setHWBuffer(void *ptr) const override {
|
MappingHint_Index=NewMappingHint;
|
||||||
HWBuffer = ptr;
|
}
|
||||||
}
|
|
||||||
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
void *getHWBuffer() const override {
|
void setPrimitiveType(E_PRIMITIVE_TYPE type) override
|
||||||
return HWBuffer;
|
{
|
||||||
}
|
PrimitiveType = type;
|
||||||
|
}
|
||||||
|
|
||||||
u32 ChangedID_Vertex;
|
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||||
u32 ChangedID_Index;
|
E_PRIMITIVE_TYPE getPrimitiveType() const override
|
||||||
|
{
|
||||||
//! hardware mapping hint
|
return PrimitiveType;
|
||||||
E_HARDWARE_MAPPING MappingHint_Vertex;
|
}
|
||||||
E_HARDWARE_MAPPING MappingHint_Index;
|
|
||||||
mutable void *HWBuffer;
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
|
void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) override
|
||||||
//! Material for this meshbuffer.
|
{
|
||||||
video::SMaterial Material;
|
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
|
||||||
//! Vertices of this buffer
|
++ChangedID_Vertex;
|
||||||
core::array<T> Vertices;
|
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
|
||||||
//! Indices into the vertices of this buffer.
|
++ChangedID_Index;
|
||||||
core::array<u16> Indices;
|
}
|
||||||
//! Bounding box of this meshbuffer.
|
|
||||||
core::aabbox3d<f32> BoundingBox;
|
//! Get the currently used ID for identification of changes.
|
||||||
//! Primitive type used for rendering (triangles, lines, ...)
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
E_PRIMITIVE_TYPE PrimitiveType;
|
u32 getChangedID_Vertex() const override {return ChangedID_Vertex;}
|
||||||
};
|
|
||||||
|
//! Get the currently used ID for identification of changes.
|
||||||
//! Standard meshbuffer
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
u32 getChangedID_Index() const override {return ChangedID_Index;}
|
||||||
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
|
||||||
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
void setHWBuffer(void *ptr) const override {
|
||||||
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
HWBuffer = ptr;
|
||||||
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
}
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
void *getHWBuffer() const override {
|
||||||
|
return HWBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u32 ChangedID_Vertex;
|
||||||
|
u32 ChangedID_Index;
|
||||||
|
|
||||||
|
//! hardware mapping hint
|
||||||
|
E_HARDWARE_MAPPING MappingHint_Vertex;
|
||||||
|
E_HARDWARE_MAPPING MappingHint_Index;
|
||||||
|
mutable void *HWBuffer;
|
||||||
|
|
||||||
|
//! Material for this meshbuffer.
|
||||||
|
video::SMaterial Material;
|
||||||
|
//! Vertices of this buffer
|
||||||
|
core::array<T> Vertices;
|
||||||
|
//! Indices into the vertices of this buffer.
|
||||||
|
core::array<u16> Indices;
|
||||||
|
//! Bounding box of this meshbuffer.
|
||||||
|
core::aabbox3d<f32> BoundingBox;
|
||||||
|
//! Primitive type used for rendering (triangles, lines, ...)
|
||||||
|
E_PRIMITIVE_TYPE PrimitiveType;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Standard meshbuffer
|
||||||
|
typedef CMeshBuffer<video::S3DVertex> SMeshBuffer;
|
||||||
|
//! Meshbuffer with two texture coords per vertex, e.g. for lightmaps
|
||||||
|
typedef CMeshBuffer<video::S3DVertex2TCoords> SMeshBufferLightMap;
|
||||||
|
//! Meshbuffer with vertices having tangents stored, e.g. for normal mapping
|
||||||
|
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
|
||||||
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
213
include/CVertexBuffer.h
Normal file
213
include/CVertexBuffer.h
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
||||||
|
// This file is part of the "Irrlicht Engine".
|
||||||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
|
#ifndef __C_VERTEX_BUFFER_H_INCLUDED__
|
||||||
|
#define __C_VERTEX_BUFFER_H_INCLUDED__
|
||||||
|
|
||||||
|
#include "IVertexBuffer.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace scene
|
||||||
|
{
|
||||||
|
|
||||||
|
class CVertexBuffer : public IVertexBuffer
|
||||||
|
{
|
||||||
|
class IVertexList
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~IVertexList(){};
|
||||||
|
|
||||||
|
virtual u32 stride() const =0;
|
||||||
|
|
||||||
|
virtual u32 size() const =0;
|
||||||
|
|
||||||
|
virtual void push_back (const video::S3DVertex &element) =0;
|
||||||
|
virtual video::S3DVertex& operator [](const u32 index) const =0;
|
||||||
|
virtual video::S3DVertex& getLast() =0;
|
||||||
|
virtual void set_used(u32 usedNow) =0;
|
||||||
|
virtual void reallocate(u32 new_size) =0;
|
||||||
|
virtual u32 allocated_size() const =0;
|
||||||
|
virtual video::S3DVertex* pointer() =0;
|
||||||
|
virtual video::E_VERTEX_TYPE getType() const =0;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class CSpecificVertexList : public IVertexList
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
core::array<T> Vertices;
|
||||||
|
|
||||||
|
u32 stride() const override {return sizeof(T);}
|
||||||
|
|
||||||
|
u32 size() const override {return Vertices.size();}
|
||||||
|
|
||||||
|
void push_back (const video::S3DVertex &element) override
|
||||||
|
{Vertices.push_back((T&)element);}
|
||||||
|
|
||||||
|
video::S3DVertex& operator [](const u32 index) const override
|
||||||
|
{return (video::S3DVertex&)Vertices[index];}
|
||||||
|
|
||||||
|
video::S3DVertex& getLast() override
|
||||||
|
{return (video::S3DVertex&)Vertices.getLast();}
|
||||||
|
|
||||||
|
void set_used(u32 usedNow) override
|
||||||
|
{Vertices.set_used(usedNow);}
|
||||||
|
|
||||||
|
void reallocate(u32 new_size) override
|
||||||
|
{Vertices.reallocate(new_size);}
|
||||||
|
|
||||||
|
u32 allocated_size() const override
|
||||||
|
{
|
||||||
|
return Vertices.allocated_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
video::S3DVertex* pointer() override {return Vertices.pointer();}
|
||||||
|
|
||||||
|
video::E_VERTEX_TYPE getType() const override {return T::getType();}
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
IVertexList *Vertices;
|
||||||
|
|
||||||
|
CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0),
|
||||||
|
MappingHint(EHM_NEVER), ChangedID(1)
|
||||||
|
{
|
||||||
|
CVertexBuffer::setType(vertexType);
|
||||||
|
}
|
||||||
|
|
||||||
|
CVertexBuffer(const IVertexBuffer &VertexBufferCopy) :
|
||||||
|
Vertices(0), MappingHint(EHM_NEVER),
|
||||||
|
ChangedID(1)
|
||||||
|
{
|
||||||
|
CVertexBuffer::setType(VertexBufferCopy.getType());
|
||||||
|
CVertexBuffer::reallocate(VertexBufferCopy.size());
|
||||||
|
|
||||||
|
for (u32 n=0;n<VertexBufferCopy.size();++n)
|
||||||
|
CVertexBuffer::push_back(VertexBufferCopy[n]);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~CVertexBuffer()
|
||||||
|
{
|
||||||
|
delete Vertices;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setType(video::E_VERTEX_TYPE vertexType) override
|
||||||
|
{
|
||||||
|
if ( Vertices && Vertices->getType() == vertexType )
|
||||||
|
return;
|
||||||
|
|
||||||
|
IVertexList *NewVertices=0;
|
||||||
|
|
||||||
|
switch (vertexType)
|
||||||
|
{
|
||||||
|
case video::EVT_STANDARD:
|
||||||
|
{
|
||||||
|
NewVertices=new CSpecificVertexList<video::S3DVertex>;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case video::EVT_2TCOORDS:
|
||||||
|
{
|
||||||
|
NewVertices=new CSpecificVertexList<video::S3DVertex2TCoords>;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case video::EVT_TANGENTS:
|
||||||
|
{
|
||||||
|
NewVertices=new CSpecificVertexList<video::S3DVertexTangents>;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Vertices)
|
||||||
|
{
|
||||||
|
NewVertices->reallocate( Vertices->size() );
|
||||||
|
|
||||||
|
for(u32 n=0;n<Vertices->size();++n)
|
||||||
|
NewVertices->push_back((*Vertices)[n]);
|
||||||
|
|
||||||
|
delete Vertices;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vertices=NewVertices;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* getData() override {return Vertices->pointer();}
|
||||||
|
|
||||||
|
video::E_VERTEX_TYPE getType() const override {return Vertices->getType();}
|
||||||
|
|
||||||
|
u32 stride() const override {return Vertices->stride();}
|
||||||
|
|
||||||
|
u32 size() const override
|
||||||
|
{
|
||||||
|
return Vertices->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void push_back (const video::S3DVertex &element) override
|
||||||
|
{
|
||||||
|
Vertices->push_back(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
video::S3DVertex& operator [](const u32 index) const override
|
||||||
|
{
|
||||||
|
return (*Vertices)[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
video::S3DVertex& getLast() override
|
||||||
|
{
|
||||||
|
return Vertices->getLast();
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_used(u32 usedNow) override
|
||||||
|
{
|
||||||
|
Vertices->set_used(usedNow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reallocate(u32 new_size) override
|
||||||
|
{
|
||||||
|
Vertices->reallocate(new_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 allocated_size() const override
|
||||||
|
{
|
||||||
|
return Vertices->allocated_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
video::S3DVertex* pointer() override
|
||||||
|
{
|
||||||
|
return Vertices->pointer();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! get the current hardware mapping hint
|
||||||
|
E_HARDWARE_MAPPING getHardwareMappingHint() const override
|
||||||
|
{
|
||||||
|
return MappingHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! set the hardware mapping hint, for driver
|
||||||
|
void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) override
|
||||||
|
{
|
||||||
|
MappingHint=NewMappingHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! flags the mesh as changed, reloads hardware buffers
|
||||||
|
void setDirty() override
|
||||||
|
{
|
||||||
|
++ChangedID;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Get the currently used ID for identification of changes.
|
||||||
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
|
u32 getChangedID() const override {return ChangedID;}
|
||||||
|
|
||||||
|
E_HARDWARE_MAPPING MappingHint;
|
||||||
|
u32 ChangedID;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,32 +1,101 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! Types of attributes available for IAttributes
|
|
||||||
enum E_ATTRIBUTE_TYPE
|
//! Types of attributes available for IAttributes
|
||||||
{
|
enum E_ATTRIBUTE_TYPE
|
||||||
// integer attribute
|
{
|
||||||
EAT_INT = 0,
|
// integer attribute
|
||||||
|
EAT_INT = 0,
|
||||||
// float attribute
|
|
||||||
EAT_FLOAT,
|
// float attribute
|
||||||
|
EAT_FLOAT,
|
||||||
// boolean attribute
|
|
||||||
EAT_BOOL,
|
// string attribute
|
||||||
|
EAT_STRING,
|
||||||
// known attribute type count
|
|
||||||
EAT_COUNT,
|
// boolean attribute
|
||||||
|
EAT_BOOL,
|
||||||
// unknown attribute
|
|
||||||
EAT_UNKNOWN
|
// enumeration attribute
|
||||||
};
|
EAT_ENUM,
|
||||||
|
|
||||||
} // end namespace io
|
// color attribute
|
||||||
} // end namespace irr
|
EAT_COLOR,
|
||||||
|
|
||||||
|
// floating point color attribute
|
||||||
|
EAT_COLORF,
|
||||||
|
|
||||||
|
// 3d vector attribute
|
||||||
|
EAT_VECTOR3D,
|
||||||
|
|
||||||
|
// 2d position attribute
|
||||||
|
EAT_POSITION2D,
|
||||||
|
|
||||||
|
// vector 2d attribute
|
||||||
|
EAT_VECTOR2D,
|
||||||
|
|
||||||
|
// rectangle attribute
|
||||||
|
EAT_RECT,
|
||||||
|
|
||||||
|
// matrix attribute
|
||||||
|
EAT_MATRIX,
|
||||||
|
|
||||||
|
// quaternion attribute
|
||||||
|
EAT_QUATERNION,
|
||||||
|
|
||||||
|
// 3d bounding box
|
||||||
|
EAT_BBOX,
|
||||||
|
|
||||||
|
// plane
|
||||||
|
EAT_PLANE,
|
||||||
|
|
||||||
|
// 3d triangle
|
||||||
|
EAT_TRIANGLE3D,
|
||||||
|
|
||||||
|
// line 2d
|
||||||
|
EAT_LINE2D,
|
||||||
|
|
||||||
|
// line 3d
|
||||||
|
EAT_LINE3D,
|
||||||
|
|
||||||
|
// array of stringws attribute
|
||||||
|
EAT_STRINGWARRAY,
|
||||||
|
|
||||||
|
// array of float
|
||||||
|
EAT_FLOATARRAY,
|
||||||
|
|
||||||
|
// array of int
|
||||||
|
EAT_INTARRAY,
|
||||||
|
|
||||||
|
// binary data attribute
|
||||||
|
EAT_BINARY,
|
||||||
|
|
||||||
|
// texture reference attribute
|
||||||
|
EAT_TEXTURE,
|
||||||
|
|
||||||
|
// user pointer void*
|
||||||
|
EAT_USER_POINTER,
|
||||||
|
|
||||||
|
// dimension attribute
|
||||||
|
EAT_DIMENSION2D,
|
||||||
|
|
||||||
|
// known attribute type count
|
||||||
|
EAT_COUNT,
|
||||||
|
|
||||||
|
// unknown attribute
|
||||||
|
EAT_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,36 +1,41 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
//! An enumeration for all types of automatic culling for built-in scene nodes
|
|
||||||
enum E_CULLING_TYPE
|
//! An enumeration for all types of automatic culling for built-in scene nodes
|
||||||
{
|
enum E_CULLING_TYPE
|
||||||
EAC_OFF = 0,
|
{
|
||||||
EAC_BOX = 1,
|
EAC_OFF = 0,
|
||||||
EAC_FRUSTUM_BOX = 2,
|
EAC_BOX = 1,
|
||||||
EAC_FRUSTUM_SPHERE = 4,
|
EAC_FRUSTUM_BOX = 2,
|
||||||
EAC_OCC_QUERY = 8
|
EAC_FRUSTUM_SPHERE = 4,
|
||||||
};
|
EAC_OCC_QUERY = 8
|
||||||
|
};
|
||||||
//! Names for culling type
|
|
||||||
const c8* const AutomaticCullingNames[] =
|
//! Names for culling type
|
||||||
{
|
const c8* const AutomaticCullingNames[] =
|
||||||
"false",
|
{
|
||||||
"box", // camera box against node box
|
"false",
|
||||||
"frustum_box", // camera frustum against node box
|
"box", // camera box against node box
|
||||||
"frustum_sphere", // camera frustum against node sphere
|
"frustum_box", // camera frustum against node box
|
||||||
"occ_query", // occlusion query
|
"frustum_sphere", // camera frustum against node sphere
|
||||||
0
|
"occ_query", // occlusion query
|
||||||
};
|
0
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_CULLING_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,42 +1,47 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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)
|
|
||||||
enum E_DEBUG_SCENE_TYPE
|
//! An enumeration for all types of debug data for built-in scene nodes (flags)
|
||||||
{
|
enum E_DEBUG_SCENE_TYPE
|
||||||
//! No Debug Data ( Default )
|
{
|
||||||
EDS_OFF = 0,
|
//! No Debug Data ( Default )
|
||||||
|
EDS_OFF = 0,
|
||||||
//! Show Bounding Boxes of SceneNode
|
|
||||||
EDS_BBOX = 1,
|
//! Show Bounding Boxes of SceneNode
|
||||||
|
EDS_BBOX = 1,
|
||||||
//! Show Vertex Normals
|
|
||||||
EDS_NORMALS = 2,
|
//! Show Vertex Normals
|
||||||
|
EDS_NORMALS = 2,
|
||||||
//! Shows Skeleton/Tags
|
|
||||||
EDS_SKELETON = 4,
|
//! Shows Skeleton/Tags
|
||||||
|
EDS_SKELETON = 4,
|
||||||
//! Overlays Mesh Wireframe
|
|
||||||
EDS_MESH_WIRE_OVERLAY = 8,
|
//! Overlays Mesh Wireframe
|
||||||
|
EDS_MESH_WIRE_OVERLAY = 8,
|
||||||
//! Show Bounding Boxes of all MeshBuffers
|
|
||||||
EDS_BBOX_BUFFERS = 32,
|
//! Show Bounding Boxes of all MeshBuffers
|
||||||
|
EDS_BBOX_BUFFERS = 32,
|
||||||
//! EDS_BBOX | EDS_BBOX_BUFFERS
|
|
||||||
EDS_BBOX_ALL = EDS_BBOX | EDS_BBOX_BUFFERS,
|
//! EDS_BBOX | EDS_BBOX_BUFFERS
|
||||||
|
EDS_BBOX_ALL = EDS_BBOX | EDS_BBOX_BUFFERS,
|
||||||
//! Show all debug infos
|
|
||||||
EDS_FULL = 0xffffffff
|
//! Show all debug infos
|
||||||
};
|
EDS_FULL = 0xffffffff
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,46 +1,50 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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.
|
|
||||||
enum E_DEVICE_TYPE
|
//! An enum for the different device types supported by the Irrlicht Engine.
|
||||||
{
|
enum E_DEVICE_TYPE
|
||||||
|
{
|
||||||
//! A device native to Microsoft Windows
|
|
||||||
/** This device uses the Win32 API and works in all versions of Windows. */
|
//! A device native to Microsoft Windows
|
||||||
EIDT_WIN32,
|
/** This device uses the Win32 API and works in all versions of Windows. */
|
||||||
|
EIDT_WIN32,
|
||||||
//! A device native to Unix style operating systems.
|
|
||||||
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
//! A device native to Unix style operating systems.
|
||||||
other operating systems which support X11. */
|
/** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and
|
||||||
EIDT_X11,
|
other operating systems which support X11. */
|
||||||
|
EIDT_X11,
|
||||||
//! A device native to Mac OSX
|
|
||||||
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
//! A device native to Mac OSX
|
||||||
EIDT_OSX,
|
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
||||||
|
EIDT_OSX,
|
||||||
//! A device which uses Simple DirectMedia Layer
|
|
||||||
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
//! A device which uses Simple DirectMedia Layer
|
||||||
in by setting the USE_SDL2 CMake option to ON */
|
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
||||||
EIDT_SDL,
|
in by setting the USE_SDL2 CMake option to ON */
|
||||||
|
EIDT_SDL,
|
||||||
//! This selection allows Irrlicht to choose the best device from the ones available.
|
|
||||||
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
//! This selection allows Irrlicht to choose the best device from the ones available.
|
||||||
to your operating system. If this is unavailable then the X11, SDL and then console device
|
/** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native
|
||||||
will be tried. This ensures that Irrlicht will run even if your platform is unsupported,
|
to your operating system. If this is unavailable then the X11, SDL and then console device
|
||||||
although it may not be able to render anything. */
|
will be tried. This ensures that Irrlicht will run even if your platform is unsupported,
|
||||||
EIDT_BEST,
|
although it may not be able to render anything. */
|
||||||
|
EIDT_BEST,
|
||||||
//! A device for Android platforms
|
|
||||||
/** Best used with embedded devices and mobile systems.
|
//! A device for Android platforms
|
||||||
Does not need X11 or other graphical subsystems.
|
/** Best used with embedded devices and mobile systems.
|
||||||
May support hw-acceleration via OpenGL-ES */
|
Does not need X11 or other graphical subsystems.
|
||||||
EIDT_ANDROID,
|
May support hw-acceleration via OpenGL-ES */
|
||||||
};
|
EIDT_ANDROID,
|
||||||
|
};
|
||||||
} // end namespace irr
|
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __E_DEVICE_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,137 +1,157 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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.
|
|
||||||
enum E_VIDEO_DRIVER_FEATURE
|
//! enumeration for querying features of the video driver.
|
||||||
{
|
enum E_VIDEO_DRIVER_FEATURE
|
||||||
//! Is driver able to render to a surface?
|
{
|
||||||
EVDF_RENDER_TO_TARGET = 0,
|
//! Is driver able to render to a surface?
|
||||||
|
EVDF_RENDER_TO_TARGET = 0,
|
||||||
//! Is hardware transform and lighting supported?
|
|
||||||
EVDF_HARDWARE_TL,
|
//! Is hardware transform and lighting supported?
|
||||||
|
EVDF_HARDWARE_TL,
|
||||||
//! Are multiple textures per material possible?
|
|
||||||
EVDF_MULTITEXTURE,
|
//! Are multiple textures per material possible?
|
||||||
|
EVDF_MULTITEXTURE,
|
||||||
//! Is driver able to render with a bilinear filter applied?
|
|
||||||
EVDF_BILINEAR_FILTER,
|
//! Is driver able to render with a bilinear filter applied?
|
||||||
|
EVDF_BILINEAR_FILTER,
|
||||||
//! Can the driver handle mip maps?
|
|
||||||
EVDF_MIP_MAP,
|
//! Can the driver handle mip maps?
|
||||||
|
EVDF_MIP_MAP,
|
||||||
//! Can the driver update mip maps automatically?
|
|
||||||
EVDF_MIP_MAP_AUTO_UPDATE,
|
//! Can the driver update mip maps automatically?
|
||||||
|
EVDF_MIP_MAP_AUTO_UPDATE,
|
||||||
//! Are stencilbuffers switched on and does the device support stencil buffers?
|
|
||||||
EVDF_STENCIL_BUFFER,
|
//! Are stencilbuffers switched on and does the device support stencil buffers?
|
||||||
|
EVDF_STENCIL_BUFFER,
|
||||||
//! Is Vertex Shader 1.1 supported?
|
|
||||||
EVDF_VERTEX_SHADER_1_1,
|
//! Is Vertex Shader 1.1 supported?
|
||||||
|
EVDF_VERTEX_SHADER_1_1,
|
||||||
//! Is Vertex Shader 2.0 supported?
|
|
||||||
EVDF_VERTEX_SHADER_2_0,
|
//! Is Vertex Shader 2.0 supported?
|
||||||
|
EVDF_VERTEX_SHADER_2_0,
|
||||||
//! Is Vertex Shader 3.0 supported?
|
|
||||||
EVDF_VERTEX_SHADER_3_0,
|
//! Is Vertex Shader 3.0 supported?
|
||||||
|
EVDF_VERTEX_SHADER_3_0,
|
||||||
//! Is Pixel Shader 1.1 supported?
|
|
||||||
EVDF_PIXEL_SHADER_1_1,
|
//! Is Pixel Shader 1.1 supported?
|
||||||
|
EVDF_PIXEL_SHADER_1_1,
|
||||||
//! Is Pixel Shader 1.2 supported?
|
|
||||||
EVDF_PIXEL_SHADER_1_2,
|
//! Is Pixel Shader 1.2 supported?
|
||||||
|
EVDF_PIXEL_SHADER_1_2,
|
||||||
//! Is Pixel Shader 1.3 supported?
|
|
||||||
EVDF_PIXEL_SHADER_1_3,
|
//! Is Pixel Shader 1.3 supported?
|
||||||
|
EVDF_PIXEL_SHADER_1_3,
|
||||||
//! Is Pixel Shader 1.4 supported?
|
|
||||||
EVDF_PIXEL_SHADER_1_4,
|
//! Is Pixel Shader 1.4 supported?
|
||||||
|
EVDF_PIXEL_SHADER_1_4,
|
||||||
//! Is Pixel Shader 2.0 supported?
|
|
||||||
EVDF_PIXEL_SHADER_2_0,
|
//! Is Pixel Shader 2.0 supported?
|
||||||
|
EVDF_PIXEL_SHADER_2_0,
|
||||||
//! Is Pixel Shader 3.0 supported?
|
|
||||||
EVDF_PIXEL_SHADER_3_0,
|
//! Is Pixel Shader 3.0 supported?
|
||||||
|
EVDF_PIXEL_SHADER_3_0,
|
||||||
//! Are ARB vertex programs v1.0 supported?
|
|
||||||
EVDF_ARB_VERTEX_PROGRAM_1,
|
//! Are ARB vertex programs v1.0 supported?
|
||||||
|
EVDF_ARB_VERTEX_PROGRAM_1,
|
||||||
//! Are ARB fragment programs v1.0 supported?
|
|
||||||
EVDF_ARB_FRAGMENT_PROGRAM_1,
|
//! Are ARB fragment programs v1.0 supported?
|
||||||
|
EVDF_ARB_FRAGMENT_PROGRAM_1,
|
||||||
//! Is GLSL supported?
|
|
||||||
EVDF_ARB_GLSL,
|
//! Is GLSL supported?
|
||||||
|
EVDF_ARB_GLSL,
|
||||||
//! Is HLSL supported?
|
|
||||||
EVDF_HLSL,
|
//! Is HLSL supported?
|
||||||
|
EVDF_HLSL,
|
||||||
//! Are non-square textures supported?
|
|
||||||
EVDF_TEXTURE_NSQUARE,
|
//! Are non-square textures supported?
|
||||||
|
EVDF_TEXTURE_NSQUARE,
|
||||||
//! Are non-power-of-two textures supported?
|
|
||||||
EVDF_TEXTURE_NPOT,
|
//! Are non-power-of-two textures supported?
|
||||||
|
EVDF_TEXTURE_NPOT,
|
||||||
//! Are framebuffer objects supported?
|
|
||||||
EVDF_FRAMEBUFFER_OBJECT,
|
//! Are framebuffer objects supported?
|
||||||
|
EVDF_FRAMEBUFFER_OBJECT,
|
||||||
//! Are vertex buffer objects supported?
|
|
||||||
EVDF_VERTEX_BUFFER_OBJECT,
|
//! Are vertex buffer objects supported?
|
||||||
|
EVDF_VERTEX_BUFFER_OBJECT,
|
||||||
//! Supports Alpha To Coverage
|
|
||||||
EVDF_ALPHA_TO_COVERAGE,
|
//! Supports Alpha To Coverage
|
||||||
|
EVDF_ALPHA_TO_COVERAGE,
|
||||||
//! Supports Color masks (disabling color planes in output)
|
|
||||||
EVDF_COLOR_MASK,
|
//! Supports Color masks (disabling color planes in output)
|
||||||
|
EVDF_COLOR_MASK,
|
||||||
//! Supports multiple render targets at once
|
|
||||||
EVDF_MULTIPLE_RENDER_TARGETS,
|
//! Supports multiple render targets at once
|
||||||
|
EVDF_MULTIPLE_RENDER_TARGETS,
|
||||||
//! Supports separate blend settings for multiple render targets
|
|
||||||
EVDF_MRT_BLEND,
|
//! Supports separate blend settings for multiple render targets
|
||||||
|
EVDF_MRT_BLEND,
|
||||||
//! Supports separate color masks for multiple render targets
|
|
||||||
EVDF_MRT_COLOR_MASK,
|
//! Supports separate color masks for multiple render targets
|
||||||
|
EVDF_MRT_COLOR_MASK,
|
||||||
//! Supports separate blend functions for multiple render targets
|
|
||||||
EVDF_MRT_BLEND_FUNC,
|
//! Supports separate blend functions for multiple render targets
|
||||||
|
EVDF_MRT_BLEND_FUNC,
|
||||||
//! Supports geometry shaders
|
|
||||||
EVDF_GEOMETRY_SHADER,
|
//! Supports geometry shaders
|
||||||
|
EVDF_GEOMETRY_SHADER,
|
||||||
//! Supports occlusion queries
|
|
||||||
EVDF_OCCLUSION_QUERY,
|
//! Supports occlusion queries
|
||||||
|
EVDF_OCCLUSION_QUERY,
|
||||||
//! Supports polygon offset/depth bias for avoiding z-fighting
|
|
||||||
EVDF_POLYGON_OFFSET,
|
//! Supports polygon offset/depth bias for avoiding z-fighting
|
||||||
|
EVDF_POLYGON_OFFSET,
|
||||||
//! Support for different blend functions. Without, only ADD is available
|
|
||||||
EVDF_BLEND_OPERATIONS,
|
//! Support for different blend functions. Without, only ADD is available
|
||||||
|
EVDF_BLEND_OPERATIONS,
|
||||||
//! Support for separate blending for RGB and Alpha.
|
|
||||||
EVDF_BLEND_SEPARATE,
|
//! Support for separate blending for RGB and Alpha.
|
||||||
|
EVDF_BLEND_SEPARATE,
|
||||||
//! Support for texture coord transformation via texture matrix
|
|
||||||
EVDF_TEXTURE_MATRIX,
|
//! Support for texture coord transformation via texture matrix
|
||||||
|
EVDF_TEXTURE_MATRIX,
|
||||||
//! Support for cube map textures.
|
|
||||||
EVDF_TEXTURE_CUBEMAP,
|
//! Support for DXTn compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_DXT,
|
||||||
//! Support for filtering across different faces of the cubemap
|
|
||||||
EVDF_TEXTURE_CUBEMAP_SEAMLESS,
|
//! Support for PVRTC compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_PVRTC,
|
||||||
//! Support for clamping vertices beyond far-plane to depth instead of capping them.
|
|
||||||
EVDF_DEPTH_CLAMP,
|
//! Support for PVRTC2 compressed textures.
|
||||||
|
EVDF_TEXTURE_COMPRESSED_PVRTC2,
|
||||||
//! Only used for counting the elements of this enum
|
|
||||||
EVDF_COUNT
|
//! Support for ETC1 compressed textures.
|
||||||
};
|
EVDF_TEXTURE_COMPRESSED_ETC1,
|
||||||
|
|
||||||
} // end namespace video
|
//! Support for ETC2 compressed textures.
|
||||||
} // end namespace irr
|
EVDF_TEXTURE_COMPRESSED_ETC2,
|
||||||
|
|
||||||
|
//! Support for cube map textures.
|
||||||
|
EVDF_TEXTURE_CUBEMAP,
|
||||||
|
|
||||||
|
//! Support for filtering across different faces of the cubemap
|
||||||
|
EVDF_TEXTURE_CUBEMAP_SEAMLESS,
|
||||||
|
|
||||||
|
//! Support for clamping vertices beyond far-plane to depth instead of capping them.
|
||||||
|
EVDF_DEPTH_CLAMP,
|
||||||
|
|
||||||
|
//! Only used for counting the elements of this enum
|
||||||
|
EVDF_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,44 +1,48 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
//! An enum for all types of drivers the Irrlicht Engine supports.
|
|
||||||
enum E_DRIVER_TYPE
|
//! An enum for all types of drivers the Irrlicht Engine supports.
|
||||||
{
|
enum E_DRIVER_TYPE
|
||||||
//! Null driver, useful for applications to run the engine without visualization.
|
{
|
||||||
/** The null device is able to load textures, but does not
|
//! Null driver, useful for applications to run the engine without visualization.
|
||||||
render and display any graphics. */
|
/** The null device is able to load textures, but does not
|
||||||
EDT_NULL,
|
render and display any graphics. */
|
||||||
|
EDT_NULL,
|
||||||
//! OpenGL device, available on most platforms.
|
|
||||||
/** Performs hardware accelerated rendering of 3D and 2D
|
//! OpenGL device, available on most platforms.
|
||||||
primitives. */
|
/** Performs hardware accelerated rendering of 3D and 2D
|
||||||
EDT_OPENGL,
|
primitives. */
|
||||||
|
EDT_OPENGL,
|
||||||
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
|
||||||
EDT_OGLES1,
|
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
||||||
|
EDT_OGLES1,
|
||||||
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
|
||||||
/** Supports shaders etc. */
|
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
||||||
EDT_OGLES2,
|
/** Supports shaders etc. */
|
||||||
|
EDT_OGLES2,
|
||||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
|
||||||
EDT_WEBGL1,
|
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||||
|
EDT_WEBGL1,
|
||||||
EDT_OPENGL3,
|
|
||||||
|
EDT_OPENGL3,
|
||||||
//! No driver, just for counting the elements
|
|
||||||
EDT_COUNT
|
//! No driver, just for counting the elements
|
||||||
};
|
EDT_COUNT
|
||||||
|
};
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,34 +1,38 @@
|
|||||||
// 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
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! Bitflags for defining the the focus behavior of the gui
|
|
||||||
// (all names start with SET as we might add REMOVE flags later to control that behavior as well)
|
//! Bitflags for defining the the focus behavior of the gui
|
||||||
enum EFOCUS_FLAG
|
// (all names start with SET as we might add REMOVE flags later to control that behavior as well)
|
||||||
{
|
enum EFOCUS_FLAG
|
||||||
//! When set the focus changes when the left mouse-button got clicked while over an element
|
{
|
||||||
EFF_SET_ON_LMOUSE_DOWN = 0x1,
|
//! When set the focus changes when the left mouse-button got clicked while over an element
|
||||||
|
EFF_SET_ON_LMOUSE_DOWN = 0x1,
|
||||||
//! When set the focus changes when the right mouse-button got clicked while over an element
|
|
||||||
//! Note that elements usually don't care about right-click and that won't change with this flag
|
//! When set the focus changes when the right mouse-button got clicked while over an element
|
||||||
//! This is mostly to allow taking away focus from elements with right-mouse additionally.
|
//! Note that elements usually don't care about right-click and that won't change with this flag
|
||||||
EFF_SET_ON_RMOUSE_DOWN = 0x2,
|
//! This is mostly to allow taking away focus from elements with right-mouse additionally.
|
||||||
|
EFF_SET_ON_RMOUSE_DOWN = 0x2,
|
||||||
//! When set the focus changes when the mouse-cursor is over an element
|
|
||||||
EFF_SET_ON_MOUSE_OVER = 0x4,
|
//! When set the focus changes when the mouse-cursor is over an element
|
||||||
|
EFF_SET_ON_MOUSE_OVER = 0x4,
|
||||||
//! When set the focus can be changed with TAB-key combinations.
|
|
||||||
EFF_SET_ON_TAB = 0x8,
|
//! When set the focus can be changed with TAB-key combinations.
|
||||||
|
EFF_SET_ON_TAB = 0x8,
|
||||||
//! When set it's possible to set the focus to disabled elements.
|
|
||||||
EFF_CAN_FOCUS_DISABLED = 0x16
|
//! When set it's possible to set the focus to disabled elements.
|
||||||
};
|
EFF_CAN_FOCUS_DISABLED = 0x16
|
||||||
|
};
|
||||||
} // namespace gui
|
|
||||||
} // namespace irr
|
} // namespace gui
|
||||||
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,36 +1,39 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
enum EGUI_ALIGNMENT
|
{
|
||||||
{
|
enum EGUI_ALIGNMENT
|
||||||
//! Aligned to parent's top or left side (default)
|
{
|
||||||
EGUIA_UPPERLEFT=0,
|
//! Aligned to parent's top or left side (default)
|
||||||
//! Aligned to parent's bottom or right side
|
EGUIA_UPPERLEFT=0,
|
||||||
EGUIA_LOWERRIGHT,
|
//! Aligned to parent's bottom or right side
|
||||||
//! Aligned to the center of parent
|
EGUIA_LOWERRIGHT,
|
||||||
EGUIA_CENTER,
|
//! Aligned to the center of parent
|
||||||
//! Stretched to fit parent
|
EGUIA_CENTER,
|
||||||
EGUIA_SCALE
|
//! Stretched to fit parent
|
||||||
};
|
EGUIA_SCALE
|
||||||
|
};
|
||||||
//! Names for alignments
|
|
||||||
const c8* const GUIAlignmentNames[] =
|
//! Names for alignments
|
||||||
{
|
const c8* const GUIAlignmentNames[] =
|
||||||
"upperLeft",
|
{
|
||||||
"lowerRight",
|
"upperLeft",
|
||||||
"center",
|
"lowerRight",
|
||||||
"scale",
|
"center",
|
||||||
0
|
"scale",
|
||||||
};
|
0
|
||||||
|
};
|
||||||
} // namespace gui
|
|
||||||
} // namespace irr
|
} // namespace gui
|
||||||
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif // __E_GUI_ALIGNMENT_H_INCLUDED__
|
||||||
|
@ -1,134 +1,141 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! List of all basic Irrlicht GUI elements.
|
|
||||||
/** An IGUIElement returns this when calling IGUIElement::getType(); */
|
//! List of all basic Irrlicht GUI elements.
|
||||||
enum EGUI_ELEMENT_TYPE
|
/** An IGUIElement returns this when calling IGUIElement::getType(); */
|
||||||
{
|
enum EGUI_ELEMENT_TYPE
|
||||||
//! A button (IGUIButton)
|
{
|
||||||
EGUIET_BUTTON = 0,
|
//! A button (IGUIButton)
|
||||||
|
EGUIET_BUTTON = 0,
|
||||||
//! A check box (IGUICheckBox)
|
|
||||||
EGUIET_CHECK_BOX,
|
//! A check box (IGUICheckBox)
|
||||||
|
EGUIET_CHECK_BOX,
|
||||||
//! A combo box (IGUIComboBox)
|
|
||||||
EGUIET_COMBO_BOX,
|
//! A combo box (IGUIComboBox)
|
||||||
|
EGUIET_COMBO_BOX,
|
||||||
//! A context menu (IGUIContextMenu)
|
|
||||||
EGUIET_CONTEXT_MENU,
|
//! A context menu (IGUIContextMenu)
|
||||||
|
EGUIET_CONTEXT_MENU,
|
||||||
//! A menu (IGUIMenu)
|
|
||||||
EGUIET_MENU,
|
//! A menu (IGUIMenu)
|
||||||
|
EGUIET_MENU,
|
||||||
//! An edit box (IGUIEditBox)
|
|
||||||
EGUIET_EDIT_BOX,
|
//! An edit box (IGUIEditBox)
|
||||||
|
EGUIET_EDIT_BOX,
|
||||||
//! A file open dialog (IGUIFileOpenDialog)
|
|
||||||
EGUIET_FILE_OPEN_DIALOG,
|
//! A file open dialog (IGUIFileOpenDialog)
|
||||||
|
EGUIET_FILE_OPEN_DIALOG,
|
||||||
//! A color select open dialog (IGUIColorSelectDialog)
|
|
||||||
EGUIET_COLOR_SELECT_DIALOG,
|
//! A color select open dialog (IGUIColorSelectDialog)
|
||||||
|
EGUIET_COLOR_SELECT_DIALOG,
|
||||||
//! A in/out fader (IGUIInOutFader)
|
|
||||||
EGUIET_IN_OUT_FADER,
|
//! A in/out fader (IGUIInOutFader)
|
||||||
|
EGUIET_IN_OUT_FADER,
|
||||||
//! An image (IGUIImage)
|
|
||||||
EGUIET_IMAGE,
|
//! An image (IGUIImage)
|
||||||
|
EGUIET_IMAGE,
|
||||||
//! A list box (IGUIListBox)
|
|
||||||
EGUIET_LIST_BOX,
|
//! A list box (IGUIListBox)
|
||||||
|
EGUIET_LIST_BOX,
|
||||||
//! A mesh viewer (IGUIMeshViewer)
|
|
||||||
EGUIET_MESH_VIEWER,
|
//! A mesh viewer (IGUIMeshViewer)
|
||||||
|
EGUIET_MESH_VIEWER,
|
||||||
//! A message box (IGUIWindow)
|
|
||||||
EGUIET_MESSAGE_BOX,
|
//! A message box (IGUIWindow)
|
||||||
|
EGUIET_MESSAGE_BOX,
|
||||||
//! A modal screen
|
|
||||||
EGUIET_MODAL_SCREEN,
|
//! A modal screen
|
||||||
|
EGUIET_MODAL_SCREEN,
|
||||||
//! A scroll bar (IGUIScrollBar)
|
|
||||||
EGUIET_SCROLL_BAR,
|
//! A scroll bar (IGUIScrollBar)
|
||||||
|
EGUIET_SCROLL_BAR,
|
||||||
//! A spin box (IGUISpinBox)
|
|
||||||
EGUIET_SPIN_BOX,
|
//! A spin box (IGUISpinBox)
|
||||||
|
EGUIET_SPIN_BOX,
|
||||||
//! A static text (IGUIStaticText)
|
|
||||||
EGUIET_STATIC_TEXT,
|
//! A static text (IGUIStaticText)
|
||||||
|
EGUIET_STATIC_TEXT,
|
||||||
//! A tab (IGUITab)
|
|
||||||
EGUIET_TAB,
|
//! A tab (IGUITab)
|
||||||
|
EGUIET_TAB,
|
||||||
//! A tab control
|
|
||||||
EGUIET_TAB_CONTROL,
|
//! A tab control
|
||||||
|
EGUIET_TAB_CONTROL,
|
||||||
//! A Table
|
|
||||||
EGUIET_TABLE,
|
//! A Table
|
||||||
|
EGUIET_TABLE,
|
||||||
//! A tool bar (IGUIToolBar)
|
|
||||||
EGUIET_TOOL_BAR,
|
//! A tool bar (IGUIToolBar)
|
||||||
|
EGUIET_TOOL_BAR,
|
||||||
//! A Tree View
|
|
||||||
EGUIET_TREE_VIEW,
|
//! A Tree View
|
||||||
|
EGUIET_TREE_VIEW,
|
||||||
//! A window
|
|
||||||
EGUIET_WINDOW,
|
//! A window
|
||||||
|
EGUIET_WINDOW,
|
||||||
//! Unknown type.
|
|
||||||
EGUIET_ELEMENT,
|
//! Unknown type.
|
||||||
|
EGUIET_ELEMENT,
|
||||||
//! The root of the GUI
|
|
||||||
EGUIET_ROOT,
|
//! The root of the GUI
|
||||||
|
EGUIET_ROOT,
|
||||||
//! Not an element, amount of elements in there
|
|
||||||
EGUIET_COUNT,
|
//! Not an element, amount of elements in there
|
||||||
|
EGUIET_COUNT,
|
||||||
//! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit.
|
|
||||||
EGUIET_FORCE_32_BIT = 0x7fffffff
|
//! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit.
|
||||||
|
EGUIET_FORCE_32_BIT = 0x7fffffff
|
||||||
};
|
|
||||||
|
};
|
||||||
//! Names for built-in element types
|
|
||||||
const c8* const GUIElementTypeNames[] =
|
//! Names for built-in element types
|
||||||
{
|
const c8* const GUIElementTypeNames[] =
|
||||||
"button",
|
{
|
||||||
"checkBox",
|
"button",
|
||||||
"comboBox",
|
"checkBox",
|
||||||
"contextMenu",
|
"comboBox",
|
||||||
"menu",
|
"contextMenu",
|
||||||
"editBox",
|
"menu",
|
||||||
"fileOpenDialog",
|
"editBox",
|
||||||
"colorSelectDialog",
|
"fileOpenDialog",
|
||||||
"inOutFader",
|
"colorSelectDialog",
|
||||||
"image",
|
"inOutFader",
|
||||||
"listBox",
|
"image",
|
||||||
"meshViewer",
|
"listBox",
|
||||||
"messageBox",
|
"meshViewer",
|
||||||
"modalScreen",
|
"messageBox",
|
||||||
"scrollBar",
|
"modalScreen",
|
||||||
"spinBox",
|
"scrollBar",
|
||||||
"staticText",
|
"spinBox",
|
||||||
"tab",
|
"staticText",
|
||||||
"tabControl",
|
"tab",
|
||||||
"table",
|
"tabControl",
|
||||||
"toolBar",
|
"table",
|
||||||
"treeview",
|
"toolBar",
|
||||||
"window",
|
"treeview",
|
||||||
"element",
|
"window",
|
||||||
"root",
|
"element",
|
||||||
"profiler",
|
"root",
|
||||||
0
|
"profiler",
|
||||||
};
|
0
|
||||||
|
};
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,40 +1,44 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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
|
{
|
||||||
EHM_NEVER=0,
|
//! Don't store on the hardware
|
||||||
|
EHM_NEVER=0,
|
||||||
//! Rarely changed, usually stored completely on the hardware
|
|
||||||
EHM_STATIC,
|
//! Rarely changed, usually stored completely on the hardware
|
||||||
|
EHM_STATIC,
|
||||||
//! Sometimes changed, driver optimized placement
|
|
||||||
EHM_DYNAMIC,
|
//! Sometimes changed, driver optimized placement
|
||||||
|
EHM_DYNAMIC,
|
||||||
//! Always changed, cache optimizing on the GPU
|
|
||||||
EHM_STREAM
|
//! Always changed, cache optimizing on the GPU
|
||||||
};
|
EHM_STREAM
|
||||||
|
};
|
||||||
enum E_BUFFER_TYPE
|
|
||||||
{
|
enum E_BUFFER_TYPE
|
||||||
//! Does not change anything
|
{
|
||||||
EBT_NONE=0,
|
//! Does not change anything
|
||||||
//! Change the vertex mapping
|
EBT_NONE=0,
|
||||||
EBT_VERTEX,
|
//! Change the vertex mapping
|
||||||
//! Change the index mapping
|
EBT_VERTEX,
|
||||||
EBT_INDEX,
|
//! Change the index mapping
|
||||||
//! Change both vertex and index mapping to the same value
|
EBT_INDEX,
|
||||||
EBT_VERTEX_AND_INDEX
|
//! Change both vertex and index mapping to the same value
|
||||||
};
|
EBT_VERTEX_AND_INDEX
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,82 +1,87 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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
|
|
||||||
enum E_MATERIAL_PROP
|
//! Material properties
|
||||||
{
|
enum E_MATERIAL_PROP
|
||||||
//! Corresponds to SMaterial::Wireframe.
|
{
|
||||||
EMP_WIREFRAME = 0x1,
|
//! Corresponds to SMaterial::Wireframe.
|
||||||
|
EMP_WIREFRAME = 0x1,
|
||||||
//! Corresponds to SMaterial::PointCloud.
|
|
||||||
EMP_POINTCLOUD = 0x2,
|
//! Corresponds to SMaterial::PointCloud.
|
||||||
|
EMP_POINTCLOUD = 0x2,
|
||||||
//! Corresponds to SMaterial::GouraudShading.
|
|
||||||
EMP_GOURAUD_SHADING = 0x4,
|
//! Corresponds to SMaterial::GouraudShading.
|
||||||
|
EMP_GOURAUD_SHADING = 0x4,
|
||||||
//! Corresponds to SMaterial::Lighting.
|
|
||||||
EMP_LIGHTING = 0x8,
|
//! Corresponds to SMaterial::Lighting.
|
||||||
|
EMP_LIGHTING = 0x8,
|
||||||
//! Corresponds to SMaterial::ZBuffer.
|
|
||||||
EMP_ZBUFFER = 0x10,
|
//! Corresponds to SMaterial::ZBuffer.
|
||||||
|
EMP_ZBUFFER = 0x10,
|
||||||
//! Corresponds to SMaterial::ZWriteEnable.
|
|
||||||
EMP_ZWRITE_ENABLE = 0x20,
|
//! Corresponds to SMaterial::ZWriteEnable.
|
||||||
|
EMP_ZWRITE_ENABLE = 0x20,
|
||||||
//! Corresponds to SMaterial::BackfaceCulling.
|
|
||||||
EMP_BACK_FACE_CULLING = 0x40,
|
//! Corresponds to SMaterial::BackfaceCulling.
|
||||||
|
EMP_BACK_FACE_CULLING = 0x40,
|
||||||
//! Corresponds to SMaterial::FrontfaceCulling.
|
|
||||||
EMP_FRONT_FACE_CULLING = 0x80,
|
//! Corresponds to SMaterial::FrontfaceCulling.
|
||||||
|
EMP_FRONT_FACE_CULLING = 0x80,
|
||||||
//! Corresponds to SMaterialLayer::MinFilter.
|
|
||||||
EMP_MIN_FILTER = 0x100,
|
//! Corresponds to SMaterialLayer::MinFilter.
|
||||||
|
EMP_MIN_FILTER = 0x100,
|
||||||
//! Corresponds to SMaterialLayer::MagFilter.
|
|
||||||
EMP_MAG_FILTER = 0x200,
|
//! Corresponds to SMaterialLayer::MagFilter.
|
||||||
|
EMP_MAG_FILTER = 0x200,
|
||||||
//! Corresponds to SMaterialLayer::AnisotropicFilter.
|
|
||||||
EMP_ANISOTROPIC_FILTER = 0x400,
|
//! Corresponds to SMaterialLayer::AnisotropicFilter.
|
||||||
|
EMP_ANISOTROPIC_FILTER = 0x400,
|
||||||
//! Corresponds to SMaterial::FogEnable.
|
|
||||||
EMP_FOG_ENABLE = 0x800,
|
//! Corresponds to SMaterial::FogEnable.
|
||||||
|
EMP_FOG_ENABLE = 0x800,
|
||||||
//! Corresponds to SMaterial::NormalizeNormals.
|
|
||||||
EMP_NORMALIZE_NORMALS = 0x1000,
|
//! Corresponds to SMaterial::NormalizeNormals.
|
||||||
|
EMP_NORMALIZE_NORMALS = 0x1000,
|
||||||
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
|
|
||||||
//! TextureWrapW.
|
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
|
||||||
EMP_TEXTURE_WRAP = 0x2000,
|
//! TextureWrapW.
|
||||||
|
EMP_TEXTURE_WRAP = 0x2000,
|
||||||
//! Corresponds to SMaterial::AntiAliasing.
|
|
||||||
EMP_ANTI_ALIASING = 0x4000,
|
//! Corresponds to SMaterial::AntiAliasing.
|
||||||
|
EMP_ANTI_ALIASING = 0x4000,
|
||||||
//! Corresponds to SMaterial::ColorMask.
|
|
||||||
EMP_COLOR_MASK = 0x8000,
|
//! Corresponds to SMaterial::ColorMask.
|
||||||
|
EMP_COLOR_MASK = 0x8000,
|
||||||
//! Corresponds to SMaterial::ColorMaterial.
|
|
||||||
EMP_COLOR_MATERIAL = 0x10000,
|
//! Corresponds to SMaterial::ColorMaterial.
|
||||||
|
EMP_COLOR_MATERIAL = 0x10000,
|
||||||
//! Corresponds to SMaterial::UseMipMaps.
|
|
||||||
EMP_USE_MIP_MAPS = 0x20000,
|
//! Corresponds to SMaterial::UseMipMaps.
|
||||||
|
EMP_USE_MIP_MAPS = 0x20000,
|
||||||
//! Corresponds to SMaterial::BlendOperation.
|
|
||||||
EMP_BLEND_OPERATION = 0x40000,
|
//! Corresponds to SMaterial::BlendOperation.
|
||||||
|
EMP_BLEND_OPERATION = 0x40000,
|
||||||
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
|
|
||||||
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
|
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
|
||||||
EMP_POLYGON_OFFSET = 0x80000,
|
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
|
||||||
|
EMP_POLYGON_OFFSET = 0x80000,
|
||||||
//! Corresponds to SMaterial::BlendFactor.
|
|
||||||
EMP_BLEND_FACTOR = 0x100000,
|
//! Corresponds to SMaterial::BlendFactor.
|
||||||
};
|
EMP_BLEND_FACTOR = 0x100000,
|
||||||
|
};
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,75 +1,75 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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. */
|
EMT_SOLID = 0,
|
||||||
EMT_SOLID = 0,
|
|
||||||
|
//! Makes the material transparent based on the texture alpha channel.
|
||||||
//! Makes the material transparent based on the texture alpha channel.
|
/** The final color is blended together from the destination
|
||||||
/** The final color is blended together from the destination
|
color and the texture color, using the alpha channel value as
|
||||||
color and the texture color, using the alpha channel value as
|
blend factor. Only first texture is used. If you are using
|
||||||
blend factor. Only first texture is used. If you are using
|
this material with small textures, it is a good idea to load
|
||||||
this material with small textures, it is a good idea to load
|
the texture in 32 bit mode
|
||||||
the texture in 32 bit mode
|
(video::IVideoDriver::setTextureCreationFlag()). Also, an alpha
|
||||||
(video::IVideoDriver::setTextureCreationFlag()). Also, an alpha
|
ref is used, which can be manipulated using
|
||||||
ref is used, which can be manipulated using
|
SMaterial::MaterialTypeParam. This value controls how sharp the
|
||||||
SMaterial::MaterialTypeParam. This value controls how sharp the
|
edges become when going from a transparent to a solid spot on
|
||||||
edges become when going from a transparent to a solid spot on
|
the texture. */
|
||||||
the texture. */
|
EMT_TRANSPARENT_ALPHA_CHANNEL,
|
||||||
EMT_TRANSPARENT_ALPHA_CHANNEL,
|
|
||||||
|
//! Makes the material transparent based on the texture alpha channel.
|
||||||
//! Makes the material transparent based on the texture alpha channel.
|
/** If the alpha channel value is greater than 127, a
|
||||||
/** If the alpha channel value is greater than 127, a
|
pixel is written to the target, otherwise not. This
|
||||||
pixel is written to the target, otherwise not. This
|
material does not use alpha blending and is a lot faster
|
||||||
material does not use alpha blending and is a lot faster
|
than EMT_TRANSPARENT_ALPHA_CHANNEL. It is ideal for drawing
|
||||||
than EMT_TRANSPARENT_ALPHA_CHANNEL. It is ideal for drawing
|
stuff like leaves of plants, because the borders are not
|
||||||
stuff like leaves of plants, because the borders are not
|
blurry but sharp. Only first texture is used. If you are
|
||||||
blurry but sharp. Only first texture is used. If you are
|
using this material with small textures and 3d object, it
|
||||||
using this material with small textures and 3d object, it
|
is a good idea to load the texture in 32 bit mode
|
||||||
is a good idea to load the texture in 32 bit mode
|
(video::IVideoDriver::setTextureCreationFlag()). */
|
||||||
(video::IVideoDriver::setTextureCreationFlag()). */
|
EMT_TRANSPARENT_ALPHA_CHANNEL_REF,
|
||||||
EMT_TRANSPARENT_ALPHA_CHANNEL_REF,
|
|
||||||
|
//! Makes the material transparent based on the vertex alpha value.
|
||||||
//! Makes the material transparent based on the vertex alpha value.
|
EMT_TRANSPARENT_VERTEX_ALPHA,
|
||||||
EMT_TRANSPARENT_VERTEX_ALPHA,
|
|
||||||
|
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
/** Using only first texture. Generic blending method.
|
||||||
/** Using only first texture. Generic blending method.
|
The blend function is set to SMaterial::MaterialTypeParam with
|
||||||
The blend function is set to SMaterial::MaterialTypeParam with
|
pack_textureBlendFunc (for 2D) or pack_textureBlendFuncSeparate (for 3D). */
|
||||||
pack_textureBlendFunc (for 2D) or pack_textureBlendFuncSeparate (for 3D). */
|
EMT_ONETEXTURE_BLEND,
|
||||||
EMT_ONETEXTURE_BLEND,
|
|
||||||
|
//! 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
|
};
|
||||||
};
|
|
||||||
|
} // end namespace video
|
||||||
constexpr u32 numBuiltInMaterials =
|
} // end namespace irr
|
||||||
sizeof(sBuiltInMaterialTypeNames) / sizeof(char*) - 1;
|
|
||||||
|
|
||||||
} // end namespace video
|
#endif // __E_MATERIAL_TYPES_H_INCLUDED__
|
||||||
} // end namespace irr
|
|
||||||
|
@ -1,60 +1,65 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
|
#define __E_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
#include "irrTypes.h"
|
|
||||||
|
#include "irrTypes.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
//! An enumeration for all supported types of built-in mesh writers
|
|
||||||
/** A scene mesh writers is represented by a four character code
|
//! An enumeration for all supported types of built-in mesh writers
|
||||||
such as 'irrm' or 'coll' instead of simple numbers, to avoid
|
/** A scene mesh writers is represented by a four character code
|
||||||
name clashes with external mesh writers.*/
|
such as 'irrm' or 'coll' instead of simple numbers, to avoid
|
||||||
enum EMESH_WRITER_TYPE
|
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'),
|
//! 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'),
|
//! 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),
|
//! 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),
|
//! 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),
|
//! 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)
|
//! 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
|
//! flags configuring mesh writing
|
||||||
{
|
enum E_MESH_WRITER_FLAGS
|
||||||
//! no writer flags
|
{
|
||||||
EMWF_NONE = 0,
|
//! no writer flags
|
||||||
|
EMWF_NONE = 0,
|
||||||
//! write lightmap textures out if possible
|
|
||||||
//! Currently not used by any Irrlicht mesh-writer
|
//! write lightmap textures out if possible
|
||||||
// (Note: User meshwriters can still use it)
|
//! Currently not used by any Irrlicht mesh-writer
|
||||||
EMWF_WRITE_LIGHTMAPS = 0x1,
|
// (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)
|
//! write in a way that consumes less disk space
|
||||||
EMWF_WRITE_COMPRESSED = 0x2,
|
// (Note: Mainly there for user meshwriters)
|
||||||
|
EMWF_WRITE_COMPRESSED = 0x2,
|
||||||
//! write in binary format rather than text
|
|
||||||
EMWF_WRITE_BINARY = 0x4
|
//! write in binary format rather than text
|
||||||
};
|
EMWF_WRITE_BINARY = 0x4
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MESH_WRITER_ENUMS_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,43 +1,47 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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.
|
|
||||||
enum E_PRIMITIVE_TYPE
|
//! Enumeration for all primitive types there are.
|
||||||
{
|
enum E_PRIMITIVE_TYPE
|
||||||
//! All vertices are non-connected points.
|
{
|
||||||
EPT_POINTS=0,
|
//! All vertices are non-connected points.
|
||||||
|
EPT_POINTS=0,
|
||||||
//! All vertices form a single connected line.
|
|
||||||
EPT_LINE_STRIP,
|
//! All vertices form a single connected line.
|
||||||
|
EPT_LINE_STRIP,
|
||||||
//! Just as LINE_STRIP, but the last and the first vertex is also connected.
|
|
||||||
EPT_LINE_LOOP,
|
//! Just as LINE_STRIP, but the last and the first vertex is also connected.
|
||||||
|
EPT_LINE_LOOP,
|
||||||
//! Every two vertices are connected creating n/2 lines.
|
|
||||||
EPT_LINES,
|
//! Every two vertices are connected creating n/2 lines.
|
||||||
|
EPT_LINES,
|
||||||
//! After the first two vertices each vertex defines a new triangle.
|
|
||||||
//! Always the two last and the new one form a new triangle.
|
//! After the first two vertices each vertex defines a new triangle.
|
||||||
EPT_TRIANGLE_STRIP,
|
//! Always the two last and the new one form a new triangle.
|
||||||
|
EPT_TRIANGLE_STRIP,
|
||||||
//! After the first two vertices each vertex defines a new triangle.
|
|
||||||
//! All around the common first vertex.
|
//! After the first two vertices each vertex defines a new triangle.
|
||||||
EPT_TRIANGLE_FAN,
|
//! All around the common first vertex.
|
||||||
|
EPT_TRIANGLE_FAN,
|
||||||
//! Explicitly set all vertices for each triangle.
|
|
||||||
EPT_TRIANGLES,
|
//! Explicitly set all vertices for each triangle.
|
||||||
|
EPT_TRIANGLES,
|
||||||
//! The single vertices are expanded to quad billboards on the GPU.
|
|
||||||
EPT_POINT_SPRITES
|
//! The single vertices are expanded to quad billboards on the GPU.
|
||||||
};
|
EPT_POINT_SPRITES
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,30 +1,34 @@
|
|||||||
// Copyright (C) Michael Zeilfelder
|
// Copyright (C) Michael Zeilfelder
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! An enumeration for different class types implementing IReadFile
|
|
||||||
enum EREAD_FILE_TYPE
|
//! An enumeration for different class types implementing IReadFile
|
||||||
{
|
enum EREAD_FILE_TYPE
|
||||||
//! CReadFile
|
{
|
||||||
ERFT_READ_FILE = MAKE_IRR_ID('r','e','a','d'),
|
//! CReadFile
|
||||||
|
ERFT_READ_FILE = MAKE_IRR_ID('r','e','a','d'),
|
||||||
//! CMemoryReadFile
|
|
||||||
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r','m','e','m'),
|
//! CMemoryReadFile
|
||||||
|
ERFT_MEMORY_READ_FILE = MAKE_IRR_ID('r','m','e','m'),
|
||||||
//! CLimitReadFile
|
|
||||||
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r','l','i','m'),
|
//! CLimitReadFile
|
||||||
|
ERFT_LIMIT_READ_FILE = MAKE_IRR_ID('r','l','i','m'),
|
||||||
//! Unknown type
|
|
||||||
EFIT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
//! Unknown type
|
||||||
};
|
EFIT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||||
} // end namespace io
|
};
|
||||||
} // end namespace irr
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,51 +1,56 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
//! An enumeration for all types of built-in scene nodes
|
|
||||||
/** A scene node type is represented by a four character code
|
//! An enumeration for all types of built-in scene nodes
|
||||||
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
/** A scene node type is represented by a four character code
|
||||||
name clashes with external scene nodes.*/
|
such as 'cube' or 'mesh' instead of simple numbers, to avoid
|
||||||
enum ESCENE_NODE_TYPE
|
name clashes with external scene nodes.*/
|
||||||
{
|
enum ESCENE_NODE_TYPE
|
||||||
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
{
|
||||||
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'),
|
//! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode)
|
||||||
|
ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'),
|
||||||
//! Mesh Scene Node
|
|
||||||
ESNT_MESH = MAKE_IRR_ID('m','e','s','h'),
|
//! Mesh Scene Node
|
||||||
|
ESNT_MESH = MAKE_IRR_ID('m','e','s','h'),
|
||||||
//! Empty Scene Node
|
|
||||||
ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'),
|
//! Empty Scene Node
|
||||||
|
ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'),
|
||||||
//! Dummy Transformation Scene Node
|
|
||||||
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'),
|
//! Dummy Transformation Scene Node
|
||||||
|
ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'),
|
||||||
//! Camera Scene Node
|
|
||||||
ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'),
|
//! Camera Scene Node
|
||||||
|
ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'),
|
||||||
//! Billboard Scene Node
|
|
||||||
ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'),
|
//! Billboard Scene Node
|
||||||
|
ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'),
|
||||||
//! Animated Mesh Scene Node
|
|
||||||
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'),
|
//! Animated Mesh Scene Node
|
||||||
|
ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'),
|
||||||
//! Unknown scene node
|
|
||||||
ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'),
|
//! Unknown scene node
|
||||||
|
ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'),
|
||||||
//! Will match with any scene node when checking types
|
|
||||||
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
//! Will match with any scene node when checking types
|
||||||
};
|
ESNT_ANY = MAKE_IRR_ID('a','n','y','_')
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,86 +1,90 @@
|
|||||||
#pragma once
|
#ifndef __E_SHADER_TYPES_H_INCLUDED__
|
||||||
|
#define __E_SHADER_TYPES_H_INCLUDED__
|
||||||
#include "irrTypes.h"
|
|
||||||
|
#include "irrTypes.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
|
||||||
enum E_VERTEX_SHADER_TYPE
|
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||||
{
|
enum E_VERTEX_SHADER_TYPE
|
||||||
EVST_VS_1_1 = 0,
|
{
|
||||||
EVST_VS_2_0,
|
EVST_VS_1_1 = 0,
|
||||||
EVST_VS_2_a,
|
EVST_VS_2_0,
|
||||||
EVST_VS_3_0,
|
EVST_VS_2_a,
|
||||||
EVST_VS_4_0,
|
EVST_VS_3_0,
|
||||||
EVST_VS_4_1,
|
EVST_VS_4_0,
|
||||||
EVST_VS_5_0,
|
EVST_VS_4_1,
|
||||||
|
EVST_VS_5_0,
|
||||||
//! This is not a type, but a value indicating how much types there are.
|
|
||||||
EVST_COUNT
|
//! This is not a type, but a value indicating how much types there are.
|
||||||
};
|
EVST_COUNT
|
||||||
|
};
|
||||||
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
|
||||||
const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
|
//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry.
|
||||||
"vs_1_1",
|
const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
|
||||||
"vs_2_0",
|
"vs_1_1",
|
||||||
"vs_2_a",
|
"vs_2_0",
|
||||||
"vs_3_0",
|
"vs_2_a",
|
||||||
"vs_4_0",
|
"vs_3_0",
|
||||||
"vs_4_1",
|
"vs_4_0",
|
||||||
"vs_5_0",
|
"vs_4_1",
|
||||||
0 };
|
"vs_5_0",
|
||||||
|
0 };
|
||||||
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
|
||||||
enum E_PIXEL_SHADER_TYPE
|
//! Compile target enumeration for the addHighLevelShaderMaterial() method.
|
||||||
{
|
enum E_PIXEL_SHADER_TYPE
|
||||||
EPST_PS_1_1 = 0,
|
{
|
||||||
EPST_PS_1_2,
|
EPST_PS_1_1 = 0,
|
||||||
EPST_PS_1_3,
|
EPST_PS_1_2,
|
||||||
EPST_PS_1_4,
|
EPST_PS_1_3,
|
||||||
EPST_PS_2_0,
|
EPST_PS_1_4,
|
||||||
EPST_PS_2_a,
|
EPST_PS_2_0,
|
||||||
EPST_PS_2_b,
|
EPST_PS_2_a,
|
||||||
EPST_PS_3_0,
|
EPST_PS_2_b,
|
||||||
EPST_PS_4_0,
|
EPST_PS_3_0,
|
||||||
EPST_PS_4_1,
|
EPST_PS_4_0,
|
||||||
EPST_PS_5_0,
|
EPST_PS_4_1,
|
||||||
|
EPST_PS_5_0,
|
||||||
//! This is not a type, but a value indicating how much types there are.
|
|
||||||
EPST_COUNT
|
//! This is not a type, but a value indicating how much types there are.
|
||||||
};
|
EPST_COUNT
|
||||||
|
};
|
||||||
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
|
||||||
const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
|
//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry.
|
||||||
"ps_1_1",
|
const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
|
||||||
"ps_1_2",
|
"ps_1_1",
|
||||||
"ps_1_3",
|
"ps_1_2",
|
||||||
"ps_1_4",
|
"ps_1_3",
|
||||||
"ps_2_0",
|
"ps_1_4",
|
||||||
"ps_2_a",
|
"ps_2_0",
|
||||||
"ps_2_b",
|
"ps_2_a",
|
||||||
"ps_3_0",
|
"ps_2_b",
|
||||||
"ps_4_0",
|
"ps_3_0",
|
||||||
"ps_4_1",
|
"ps_4_0",
|
||||||
"ps_5_0",
|
"ps_4_1",
|
||||||
0 };
|
"ps_5_0",
|
||||||
|
0 };
|
||||||
//! Enum for supported geometry shader types
|
|
||||||
enum E_GEOMETRY_SHADER_TYPE
|
//! Enum for supported geometry shader types
|
||||||
{
|
enum E_GEOMETRY_SHADER_TYPE
|
||||||
EGST_GS_4_0 = 0,
|
{
|
||||||
|
EGST_GS_4_0 = 0,
|
||||||
//! This is not a type, but a value indicating how much types there are.
|
|
||||||
EGST_COUNT
|
//! This is not a type, but a value indicating how much types there are.
|
||||||
};
|
EGST_COUNT
|
||||||
|
};
|
||||||
//! String names for supported geometry shader types
|
|
||||||
const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
//! String names for supported geometry shader types
|
||||||
"gs_4_0",
|
const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
|
||||||
0 };
|
"gs_4_0",
|
||||||
|
0 };
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __E_SHADER_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,35 +1,38 @@
|
|||||||
#pragma once
|
#ifndef __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||||
|
#define __E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
//! Enumeration for all vertex attributes there are.
|
|
||||||
enum E_VERTEX_ATTRIBUTES
|
//! Enumeration for all vertex attributes there are.
|
||||||
{
|
enum E_VERTEX_ATTRIBUTES
|
||||||
EVA_POSITION = 0,
|
{
|
||||||
EVA_NORMAL,
|
EVA_POSITION = 0,
|
||||||
EVA_COLOR,
|
EVA_NORMAL,
|
||||||
EVA_TCOORD0,
|
EVA_COLOR,
|
||||||
EVA_TCOORD1,
|
EVA_TCOORD0,
|
||||||
EVA_TANGENT,
|
EVA_TCOORD1,
|
||||||
EVA_BINORMAL,
|
EVA_TANGENT,
|
||||||
EVA_COUNT
|
EVA_BINORMAL,
|
||||||
};
|
EVA_COUNT
|
||||||
|
};
|
||||||
//! Array holding the built in vertex attribute names
|
|
||||||
const char* const sBuiltInVertexAttributeNames[] =
|
//! Array holding the built in vertex attribute names
|
||||||
{
|
const char* const sBuiltInVertexAttributeNames[] =
|
||||||
"inVertexPosition",
|
{
|
||||||
"inVertexNormal",
|
"inVertexPosition",
|
||||||
"inVertexColor",
|
"inVertexNormal",
|
||||||
"inTexCoord0",
|
"inVertexColor",
|
||||||
"inTexCoord1",
|
"inTexCoord0",
|
||||||
"inVertexTangent",
|
"inTexCoord1",
|
||||||
"inVertexBinormal",
|
"inVertexTangent",
|
||||||
0
|
"inVertexBinormal",
|
||||||
};
|
0
|
||||||
|
};
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif //__E_VERTEX_ATTRIBUTES_H_INCLUDED__
|
@ -1,70 +1,74 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IMesh.h"
|
#include "aabbox3d.h"
|
||||||
|
#include "IMesh.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
//! Interface for an animated mesh.
|
{
|
||||||
/** There are already simple implementations of this interface available so
|
//! Interface for an animated mesh.
|
||||||
you don't have to implement this interface on your own if you need to:
|
/** There are already simple implementations of this interface available so
|
||||||
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
you don't have to implement this interface on your own if you need to:
|
||||||
irr::scene::SMeshBuffer etc. */
|
You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh,
|
||||||
class IAnimatedMesh : public IMesh
|
irr::scene::SMeshBuffer etc. */
|
||||||
{
|
class IAnimatedMesh : public IMesh
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Gets the frame count of the animated mesh.
|
|
||||||
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
|
//! Gets the frame count of the animated mesh.
|
||||||
\return The amount of frames. If the amount is 1,
|
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
|
||||||
it is a static, non animated mesh. */
|
\return The amount of frames. If the amount is 1,
|
||||||
virtual u32 getFrameCount() const = 0;
|
it is a static, non animated mesh. */
|
||||||
|
virtual u32 getFrameCount() const = 0;
|
||||||
//! Gets the animation speed of the animated mesh.
|
|
||||||
/** \return The number of frames per second to play the
|
//! Gets the animation speed of the animated mesh.
|
||||||
animation with by default. If the amount is 0,
|
/** \return The number of frames per second to play the
|
||||||
it is a static, non animated mesh. */
|
animation with by default. If the amount is 0,
|
||||||
virtual f32 getAnimationSpeed() const = 0;
|
it is a static, non animated mesh. */
|
||||||
|
virtual f32 getAnimationSpeed() const = 0;
|
||||||
//! Sets the animation speed of the animated mesh.
|
|
||||||
/** \param fps Number of frames per second to play the
|
//! Sets the animation speed of the animated mesh.
|
||||||
animation with by default. If the amount is 0,
|
/** \param fps Number of frames per second to play the
|
||||||
it is not animated. The actual speed is set in the
|
animation with by default. If the amount is 0,
|
||||||
scene node the mesh is instantiated in.*/
|
it is not animated. The actual speed is set in the
|
||||||
virtual void setAnimationSpeed(f32 fps) =0;
|
scene node the mesh is instantiated in.*/
|
||||||
|
virtual void setAnimationSpeed(f32 fps) =0;
|
||||||
//! Returns the IMesh interface for a frame.
|
|
||||||
/** \param frame: Frame number as zero based index. The maximum
|
//! Returns the IMesh interface for a frame.
|
||||||
frame number is getFrameCount() - 1;
|
/** \param frame: Frame number as zero based index. The maximum
|
||||||
\param detailLevel: Level of detail. 0 is the lowest, 255 the
|
frame number is getFrameCount() - 1;
|
||||||
highest level of detail. Most meshes will ignore the detail level.
|
\param detailLevel: Level of detail. 0 is the lowest, 255 the
|
||||||
\param startFrameLoop: Because some animated meshes (.MD2) are
|
highest level of detail. Most meshes will ignore the detail level.
|
||||||
blended between 2 static frames, and maybe animated in a loop,
|
\param startFrameLoop: Because some animated meshes (.MD2) are
|
||||||
the startFrameLoop and the endFrameLoop have to be defined, to
|
blended between 2 static frames, and maybe animated in a loop,
|
||||||
prevent the animation to be blended between frames which are
|
the startFrameLoop and the endFrameLoop have to be defined, to
|
||||||
outside of this loop.
|
prevent the animation to be blended between frames which are
|
||||||
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
outside of this loop.
|
||||||
\param endFrameLoop: see startFrameLoop.
|
If startFrameLoop and endFrameLoop are both -1, they are ignored.
|
||||||
\return Returns the animated mesh based on a detail level. */
|
\param endFrameLoop: see startFrameLoop.
|
||||||
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0;
|
\return Returns the animated mesh based on a detail level. */
|
||||||
|
virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0;
|
||||||
//! Returns the type of the animated mesh.
|
|
||||||
/** In most cases it is not necessary to use this method.
|
//! Returns the type of the animated mesh.
|
||||||
This is useful for making a safe downcast. For example,
|
/** In most cases it is not necessary to use this method.
|
||||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
This is useful for making a safe downcast. For example,
|
||||||
IAnimatedMesh to IAnimatedMeshMD2.
|
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||||
\returns Type of the mesh. */
|
IAnimatedMesh to IAnimatedMeshMD2.
|
||||||
E_ANIMATED_MESH_TYPE getMeshType() const override
|
\returns Type of the mesh. */
|
||||||
{
|
E_ANIMATED_MESH_TYPE getMeshType() const override
|
||||||
return EAMT_UNKNOWN;
|
{
|
||||||
}
|
return EAMT_UNKNOWN;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,173 +1,177 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IBoneSceneNode.h"
|
#include "ISceneNode.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "IBoneSceneNode.h"
|
||||||
|
#include "IAnimatedMesh.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
enum E_JOINT_UPDATE_ON_RENDER
|
{
|
||||||
{
|
enum E_JOINT_UPDATE_ON_RENDER
|
||||||
//! do nothing
|
{
|
||||||
EJUOR_NONE = 0,
|
//! do nothing
|
||||||
|
EJUOR_NONE = 0,
|
||||||
//! get joints positions from the mesh (for attached nodes, etc)
|
|
||||||
EJUOR_READ,
|
//! get joints positions from the mesh (for attached nodes, etc)
|
||||||
|
EJUOR_READ,
|
||||||
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
|
||||||
EJUOR_CONTROL
|
//! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() )
|
||||||
};
|
EJUOR_CONTROL
|
||||||
|
};
|
||||||
|
|
||||||
class IAnimatedMeshSceneNode;
|
|
||||||
|
class IAnimatedMeshSceneNode;
|
||||||
//! Callback interface for catching events of ended animations.
|
|
||||||
/** Implement this interface and use
|
//! Callback interface for catching events of ended animations.
|
||||||
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
/** Implement this interface and use
|
||||||
be notified if an animation playback has ended.
|
IAnimatedMeshSceneNode::setAnimationEndCallback to be able to
|
||||||
**/
|
be notified if an animation playback has ended.
|
||||||
class IAnimationEndCallBack : public virtual IReferenceCounted
|
**/
|
||||||
{
|
class IAnimationEndCallBack : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Will be called when the animation playback has ended.
|
|
||||||
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
//! Will be called when the animation playback has ended.
|
||||||
more information.
|
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
|
||||||
\param node: Node of which the animation has ended. */
|
more information.
|
||||||
virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0;
|
\param node: Node of which the animation has ended. */
|
||||||
};
|
virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0;
|
||||||
|
};
|
||||||
//! Scene node capable of displaying an animated mesh.
|
|
||||||
class IAnimatedMeshSceneNode : public ISceneNode
|
//! Scene node capable of displaying an animated mesh.
|
||||||
{
|
class IAnimatedMeshSceneNode : public ISceneNode
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
//! Constructor
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
|
||||||
|
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||||
//! Destructor
|
|
||||||
virtual ~IAnimatedMeshSceneNode() {}
|
//! Destructor
|
||||||
|
virtual ~IAnimatedMeshSceneNode() {}
|
||||||
//! Sets the current frame number.
|
|
||||||
/** From now on the animation is played from this frame.
|
//! Sets the current frame number.
|
||||||
\param frame: Number of the frame to let the animation be started from.
|
/** From now on the animation is played from this frame.
|
||||||
The frame number must be a valid frame number of the IMesh used by this
|
\param frame: Number of the frame to let the animation be started from.
|
||||||
scene node. Set IAnimatedMesh::getMesh() for details. */
|
The frame number must be a valid frame number of the IMesh used by this
|
||||||
virtual void setCurrentFrame(f32 frame) = 0;
|
scene node. Set IAnimatedMesh::getMesh() for details. */
|
||||||
|
virtual void setCurrentFrame(f32 frame) = 0;
|
||||||
//! Sets the frame numbers between the animation is looped.
|
|
||||||
/** The default is 0 to getFrameCount()-1 of the mesh.
|
//! Sets the frame numbers between the animation is looped.
|
||||||
Number of played frames is end-start.
|
/** The default is 0 to getFrameCount()-1 of the mesh.
|
||||||
It interpolates toward the last frame but stops when it is reached.
|
Number of played frames is end-start.
|
||||||
It does not interpolate back to start even when looping.
|
It interpolates toward the last frame but stops when it is reached.
|
||||||
Looping animations should ensure last and first frame-key are identical.
|
It does not interpolate back to start even when looping.
|
||||||
\param begin: Start frame number of the loop.
|
Looping animations should ensure last and first frame-key are identical.
|
||||||
\param end: End frame number of the loop.
|
\param begin: Start frame number of the loop.
|
||||||
\return True if successful, false if not. */
|
\param end: End frame number of the loop.
|
||||||
virtual bool setFrameLoop(s32 begin, s32 end) = 0;
|
\return True if successful, false if not. */
|
||||||
|
virtual bool setFrameLoop(s32 begin, s32 end) = 0;
|
||||||
//! Sets the speed with which the animation is played.
|
|
||||||
/** \param framesPerSecond: Frames per second played. */
|
//! Sets the speed with which the animation is played.
|
||||||
virtual void setAnimationSpeed(f32 framesPerSecond) = 0;
|
/** \param framesPerSecond: Frames per second played. */
|
||||||
|
virtual void setAnimationSpeed(f32 framesPerSecond) = 0;
|
||||||
//! Gets the speed with which the animation is played.
|
|
||||||
/** \return Frames per second played. */
|
//! Gets the speed with which the animation is played.
|
||||||
virtual f32 getAnimationSpeed() const =0;
|
/** \return Frames per second played. */
|
||||||
|
virtual f32 getAnimationSpeed() const =0;
|
||||||
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
|
||||||
/** With this method it is possible to attach scene nodes to
|
//! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh).
|
||||||
joints for example possible to attach a weapon to the left hand
|
/** With this method it is possible to attach scene nodes to
|
||||||
of an animated model. This example shows how:
|
joints for example possible to attach a weapon to the left hand
|
||||||
\code
|
of an animated model. This example shows how:
|
||||||
ISceneNode* hand =
|
\code
|
||||||
yourAnimatedMeshSceneNode->getJointNode("LeftHand");
|
ISceneNode* hand =
|
||||||
hand->addChild(weaponSceneNode);
|
yourAnimatedMeshSceneNode->getJointNode("LeftHand");
|
||||||
\endcode
|
hand->addChild(weaponSceneNode);
|
||||||
Please note that the joint returned by this method may not exist
|
\endcode
|
||||||
before this call and the joints in the node were created by it.
|
Please note that the joint returned by this method may not exist
|
||||||
\param jointName: Name of the joint.
|
before this call and the joints in the node were created by it.
|
||||||
\return Pointer to the scene node which represents the joint
|
\param jointName: Name of the joint.
|
||||||
with the specified name. Returns 0 if the contained mesh is not
|
\return Pointer to the scene node which represents the joint
|
||||||
an skinned mesh or the name of the joint could not be found. */
|
with the specified name. Returns 0 if the contained mesh is not
|
||||||
virtual IBoneSceneNode* getJointNode(const c8* jointName)=0;
|
an skinned mesh or the name of the joint could not be found. */
|
||||||
|
virtual IBoneSceneNode* getJointNode(const c8* jointName)=0;
|
||||||
//! same as getJointNode(const c8* jointName), but based on id
|
|
||||||
virtual IBoneSceneNode* getJointNode(u32 jointID) = 0;
|
//! same as getJointNode(const c8* jointName), but based on id
|
||||||
|
virtual IBoneSceneNode* getJointNode(u32 jointID) = 0;
|
||||||
//! Gets joint count.
|
|
||||||
/** \return Amount of joints in the mesh. */
|
//! Gets joint count.
|
||||||
virtual u32 getJointCount() const = 0;
|
/** \return Amount of joints in the mesh. */
|
||||||
|
virtual u32 getJointCount() const = 0;
|
||||||
//! Returns the currently displayed frame number.
|
|
||||||
virtual f32 getFrameNr() const = 0;
|
//! Returns the currently displayed frame number.
|
||||||
//! Returns the current start frame number.
|
virtual f32 getFrameNr() const = 0;
|
||||||
virtual s32 getStartFrame() const = 0;
|
//! Returns the current start frame number.
|
||||||
//! Returns the current end frame number.
|
virtual s32 getStartFrame() const = 0;
|
||||||
virtual s32 getEndFrame() const = 0;
|
//! Returns the current end frame number.
|
||||||
|
virtual s32 getEndFrame() const = 0;
|
||||||
//! Sets looping mode which is on by default.
|
|
||||||
/** If set to false, animations will not be played looped. */
|
//! Sets looping mode which is on by default.
|
||||||
virtual void setLoopMode(bool playAnimationLooped) = 0;
|
/** If set to false, animations will not be played looped. */
|
||||||
|
virtual void setLoopMode(bool playAnimationLooped) = 0;
|
||||||
//! returns the current loop mode
|
|
||||||
/** When true the animations are played looped */
|
//! returns the current loop mode
|
||||||
virtual bool getLoopMode() const = 0;
|
/** When true the animations are played looped */
|
||||||
|
virtual bool getLoopMode() const = 0;
|
||||||
//! Sets a callback interface which will be called if an animation playback has ended.
|
|
||||||
/** Set this to 0 to disable the callback again.
|
//! Sets a callback interface which will be called if an animation playback has ended.
|
||||||
Please note that this will only be called when in non looped
|
/** Set this to 0 to disable the callback again.
|
||||||
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
Please note that this will only be called when in non looped
|
||||||
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0;
|
mode, see IAnimatedMeshSceneNode::setLoopMode(). */
|
||||||
|
virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0;
|
||||||
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
|
||||||
/** In this way it is possible to change the materials a mesh
|
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||||
causing all mesh scene nodes referencing this mesh to change
|
/** In this way it is possible to change the materials a mesh
|
||||||
too. */
|
causing all mesh scene nodes referencing this mesh to change
|
||||||
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
too. */
|
||||||
|
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
||||||
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
|
||||||
virtual bool isReadOnlyMaterials() const = 0;
|
//! Returns if the scene node should not copy the materials of the mesh but use them in a read only style
|
||||||
|
virtual bool isReadOnlyMaterials() const = 0;
|
||||||
//! Sets a new mesh
|
|
||||||
virtual void setMesh(IAnimatedMesh* mesh) = 0;
|
//! Sets a new mesh
|
||||||
|
virtual void setMesh(IAnimatedMesh* mesh) = 0;
|
||||||
//! Returns the current mesh
|
|
||||||
virtual IAnimatedMesh* getMesh(void) = 0;
|
//! Returns the current mesh
|
||||||
|
virtual IAnimatedMesh* getMesh(void) = 0;
|
||||||
//! Set how the joints should be updated on render
|
|
||||||
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0;
|
//! Set how the joints should be updated on render
|
||||||
|
virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0;
|
||||||
//! Sets the transition time in seconds
|
|
||||||
/** Note: This needs to enable joints, and setJointmode set to
|
//! Sets the transition time in seconds
|
||||||
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
/** Note: This needs to enable joints, and setJointmode set to
|
||||||
not animate. */
|
EJUOR_CONTROL. You must call animateJoints(), or the mesh will
|
||||||
virtual void setTransitionTime(f32 Time) =0;
|
not animate. */
|
||||||
|
virtual void setTransitionTime(f32 Time) =0;
|
||||||
//! animates the joints in the mesh based on the current frame.
|
|
||||||
/** Also takes in to account transitions. */
|
//! animates the joints in the mesh based on the current frame.
|
||||||
virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0;
|
/** Also takes in to account transitions. */
|
||||||
|
virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0;
|
||||||
//! render mesh ignoring its transformation.
|
|
||||||
/** Culling is unaffected. */
|
//! render mesh ignoring its transformation.
|
||||||
virtual void setRenderFromIdentity( bool On )=0;
|
/** Culling is unaffected. */
|
||||||
|
virtual void setRenderFromIdentity( bool On )=0;
|
||||||
//! Creates a clone of this scene node and its children.
|
|
||||||
/** \param newParent An optional new parent.
|
//! Creates a clone of this scene node and its children.
|
||||||
\param newManager An optional new scene manager.
|
/** \param newParent An optional new parent.
|
||||||
\return The newly created clone of this node. */
|
\param newManager An optional new scene manager.
|
||||||
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
\return The newly created clone of this node. */
|
||||||
|
virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0;
|
||||||
};
|
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,129 +1,157 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "EAttributes.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "SColor.h"
|
||||||
// not needed here but I can't be bothered to clean the transitive includes up.
|
#include "vector3d.h"
|
||||||
#include "quaternion.h"
|
#include "vector2d.h"
|
||||||
|
#include "line2d.h"
|
||||||
namespace irr
|
#include "line3d.h"
|
||||||
{
|
#include "triangle3d.h"
|
||||||
namespace video
|
#include "position2d.h"
|
||||||
{
|
#include "rect.h"
|
||||||
class ITexture;
|
#include "dimension2d.h"
|
||||||
} // end namespace video
|
#include "matrix4.h"
|
||||||
namespace io
|
#include "quaternion.h"
|
||||||
{
|
#include "plane3d.h"
|
||||||
|
#include "triangle3d.h"
|
||||||
//! Provides a generic interface for attributes and their values and the possibility to serialize them
|
#include "line2d.h"
|
||||||
class IAttributes : public virtual IReferenceCounted
|
#include "line3d.h"
|
||||||
{
|
#include "irrString.h"
|
||||||
public:
|
#include "irrArray.h"
|
||||||
|
#include "EAttributes.h"
|
||||||
//! Returns amount of attributes in this collection of attributes.
|
#include "path.h"
|
||||||
virtual u32 getAttributeCount() const = 0;
|
|
||||||
|
namespace irr
|
||||||
//! Returns attribute name by index.
|
{
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
namespace video
|
||||||
virtual const c8* getAttributeName(s32 index) const = 0;
|
{
|
||||||
|
class ITexture;
|
||||||
//! Returns the type of an attribute
|
} // end namespace video
|
||||||
//! \param attributeName: Name for the attribute
|
namespace io
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const = 0;
|
{
|
||||||
|
|
||||||
//! Returns attribute type by index.
|
//! Provides a generic interface for attributes and their values and the possibility to serialize them
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
class IAttributes : public virtual IReferenceCounted
|
||||||
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
|
{
|
||||||
|
public:
|
||||||
//! Returns if an attribute with a name exists
|
|
||||||
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
//! Returns amount of attributes in this collection of attributes.
|
||||||
|
virtual u32 getAttributeCount() const = 0;
|
||||||
//! Returns attribute index from name, -1 if not found
|
|
||||||
virtual s32 findAttribute(const c8* attributeName) const = 0;
|
//! Returns attribute name by index.
|
||||||
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
//! Removes all attributes
|
virtual const c8* getAttributeName(s32 index) const = 0;
|
||||||
virtual void clear() = 0;
|
|
||||||
|
//! Returns the type of an attribute
|
||||||
|
//! \param attributeName: Name for the attribute
|
||||||
/*
|
virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) const = 0;
|
||||||
|
|
||||||
Integer Attribute
|
//! Returns attribute type by index.
|
||||||
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
*/
|
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
|
||||||
|
|
||||||
//! Adds an attribute as integer
|
//! Returns the type string of the attribute
|
||||||
virtual void addInt(const c8* attributeName, s32 value) = 0;
|
//! \param attributeName: String for the attribute type
|
||||||
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
//! Sets an attribute as integer value
|
virtual const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const = 0;
|
||||||
virtual void setAttribute(const c8* attributeName, s32 value) = 0;
|
|
||||||
|
//! Returns the type string of the attribute by index.
|
||||||
//! Gets an attribute as integer value
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! \param defaultNotFound Value returned for an invalid index
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
virtual const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const = 0;
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
|
||||||
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const = 0;
|
//! Returns if an attribute with a name exists
|
||||||
|
virtual bool existsAttribute(const c8* attributeName) const = 0;
|
||||||
//! Gets an attribute as integer value
|
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! Returns attribute index from name, -1 if not found
|
||||||
virtual s32 getAttributeAsInt(s32 index) const = 0;
|
virtual s32 findAttribute(const c8* attributeName) const = 0;
|
||||||
|
|
||||||
//! Sets an attribute as integer value
|
//! Removes all attributes
|
||||||
virtual void setAttribute(s32 index, s32 value) = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
/*
|
|
||||||
|
/*
|
||||||
Float Attribute
|
|
||||||
|
Integer Attribute
|
||||||
*/
|
|
||||||
|
*/
|
||||||
//! Adds an attribute as float
|
|
||||||
virtual void addFloat(const c8* attributeName, f32 value) = 0;
|
//! Adds an attribute as integer
|
||||||
|
virtual void addInt(const c8* attributeName, s32 value) = 0;
|
||||||
//! Sets a attribute as float value
|
|
||||||
virtual void setAttribute(const c8* attributeName, f32 value) = 0;
|
//! Sets an attribute as integer value
|
||||||
|
virtual void setAttribute(const c8* attributeName, s32 value) = 0;
|
||||||
//! Gets an attribute as float value
|
|
||||||
//! \param attributeName: Name of the attribute to get.
|
//! Gets an attribute as integer value
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! \param attributeName: Name of the attribute to get.
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const = 0;
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
|
virtual s32 getAttributeAsInt(const c8* attributeName, irr::s32 defaultNotFound=0) const = 0;
|
||||||
//! Gets an attribute as float value
|
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
//! Gets an attribute as integer value
|
||||||
virtual f32 getAttributeAsFloat(s32 index) const = 0;
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
virtual s32 getAttributeAsInt(s32 index) const = 0;
|
||||||
//! Sets an attribute as float value
|
|
||||||
virtual void setAttribute(s32 index, f32 value) = 0;
|
//! Sets an attribute as integer value
|
||||||
|
virtual void setAttribute(s32 index, s32 value) = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Bool Attribute
|
|
||||||
*/
|
Float Attribute
|
||||||
|
|
||||||
//! Adds an attribute as bool
|
*/
|
||||||
virtual void addBool(const c8* attributeName, bool value) = 0;
|
|
||||||
|
//! Adds an attribute as float
|
||||||
//! Sets an attribute as boolean value
|
virtual void addFloat(const c8* attributeName, f32 value) = 0;
|
||||||
virtual void setAttribute(const c8* attributeName, bool value) = 0;
|
|
||||||
|
//! Sets a attribute as float value
|
||||||
//! Gets an attribute as boolean value
|
virtual void setAttribute(const c8* attributeName, f32 value) = 0;
|
||||||
//! \param attributeName: Name of the attribute to get.
|
|
||||||
//! \param defaultNotFound Value returned when attributeName was not found
|
//! Gets an attribute as float value
|
||||||
//! \return Returns value of the attribute previously set by setAttribute()
|
//! \param attributeName: Name of the attribute to get.
|
||||||
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const = 0;
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
//! Gets an attribute as boolean value
|
virtual f32 getAttributeAsFloat(const c8* attributeName, irr::f32 defaultNotFound=0.f) const = 0;
|
||||||
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
|
||||||
virtual bool getAttributeAsBool(s32 index) const = 0;
|
//! Gets an attribute as float value
|
||||||
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
//! Sets an attribute as boolean value
|
virtual f32 getAttributeAsFloat(s32 index) const = 0;
|
||||||
virtual void setAttribute(s32 index, bool value) = 0;
|
|
||||||
|
//! Sets an attribute as float value
|
||||||
};
|
virtual void setAttribute(s32 index, f32 value) = 0;
|
||||||
|
|
||||||
} // end namespace io
|
|
||||||
} // end namespace irr
|
/*
|
||||||
|
Bool Attribute
|
||||||
|
*/
|
||||||
|
|
||||||
|
//! Adds an attribute as bool
|
||||||
|
virtual void addBool(const c8* attributeName, bool value) = 0;
|
||||||
|
|
||||||
|
//! Sets an attribute as boolean value
|
||||||
|
virtual void setAttribute(const c8* attributeName, bool value) = 0;
|
||||||
|
|
||||||
|
//! Gets an attribute as boolean value
|
||||||
|
//! \param attributeName: Name of the attribute to get.
|
||||||
|
//! \param defaultNotFound Value returned when attributeName was not found
|
||||||
|
//! \return Returns value of the attribute previously set by setAttribute()
|
||||||
|
virtual bool getAttributeAsBool(const c8* attributeName, bool defaultNotFound=false) const = 0;
|
||||||
|
|
||||||
|
//! Gets an attribute as boolean value
|
||||||
|
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
|
||||||
|
virtual bool getAttributeAsBool(s32 index) const = 0;
|
||||||
|
|
||||||
|
//! Sets an attribute as boolean value
|
||||||
|
virtual void setAttribute(s32 index, bool value) = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,91 +1,96 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
class ICameraSceneNode;
|
{
|
||||||
class IMeshBuffer;
|
class ICameraSceneNode;
|
||||||
|
class IMeshBuffer;
|
||||||
//! A billboard scene node.
|
|
||||||
/** A billboard is like a 3d sprite: A 2d element,
|
//! A billboard scene node.
|
||||||
which always looks to the camera. It is usually used for explosions, fire,
|
/** A billboard is like a 3d sprite: A 2d element,
|
||||||
lensflares, particles and things like that.
|
which always looks to the camera. It is usually used for explosions, fire,
|
||||||
*/
|
lensflares, particles and things like that.
|
||||||
class IBillboardSceneNode : public ISceneNode
|
*/
|
||||||
{
|
class IBillboardSceneNode : public ISceneNode
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
//! Constructor
|
||||||
const core::vector3df& position = core::vector3df(0,0,0))
|
IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
: ISceneNode(parent, mgr, id, position) {}
|
const core::vector3df& position = core::vector3df(0,0,0))
|
||||||
|
: ISceneNode(parent, mgr, id, position) {}
|
||||||
//! Sets the size of the billboard, making it rectangular.
|
|
||||||
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
//! Sets the size of the billboard, making it rectangular.
|
||||||
|
virtual void setSize(const core::dimension2d<f32>& size) = 0;
|
||||||
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
|
||||||
/** \param[in] height The height of the billboard.
|
//! Sets the size of the billboard with independent widths of the bottom and top edges.
|
||||||
\param[in] bottomEdgeWidth The width of the bottom edge of the billboard.
|
/** \param[in] height The height of the billboard.
|
||||||
\param[in] topEdgeWidth The width of the top edge of the billboard.
|
\param[in] bottomEdgeWidth The width of the bottom edge of the billboard.
|
||||||
*/
|
\param[in] topEdgeWidth The width of the top edge of the billboard.
|
||||||
virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) = 0;
|
*/
|
||||||
|
virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) = 0;
|
||||||
//! Returns the size of the billboard.
|
|
||||||
/** This will return the width of the bottom edge of the billboard.
|
//! Returns the size of the billboard.
|
||||||
Use getWidths() to retrieve the bottom and top edges independently.
|
/** This will return the width of the bottom edge of the billboard.
|
||||||
\return Size of the billboard.
|
Use getWidths() to retrieve the bottom and top edges independently.
|
||||||
*/
|
\return Size of the billboard.
|
||||||
virtual const core::dimension2d<f32>& getSize() const = 0;
|
*/
|
||||||
|
virtual const core::dimension2d<f32>& getSize() const = 0;
|
||||||
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
|
||||||
/** \param[out] height The height of the billboard.
|
//! Gets the size of the the billboard and handles independent top and bottom edge widths correctly.
|
||||||
\param[out] bottomEdgeWidth The width of the bottom edge of the billboard.
|
/** \param[out] height The height of the billboard.
|
||||||
\param[out] topEdgeWidth The width of the top 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.
|
||||||
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
|
|
||||||
/** \param[in] overallColor Color to set */
|
//! Set the color of all vertices of the billboard
|
||||||
virtual void setColor(const video::SColor& overallColor) = 0;
|
/** \param[in] overallColor Color to set */
|
||||||
|
virtual void setColor(const video::SColor& overallColor) = 0;
|
||||||
//! Set the color of the top and bottom vertices of the billboard
|
|
||||||
/** \param[in] topColor Color to set the top vertices
|
//! Set the color of the top and bottom vertices of the billboard
|
||||||
\param[in] bottomColor Color to set the bottom vertices */
|
/** \param[in] topColor Color to set the top vertices
|
||||||
virtual void setColor(const video::SColor& topColor,
|
\param[in] bottomColor Color to set the bottom vertices */
|
||||||
const video::SColor& bottomColor) = 0;
|
virtual void setColor(const video::SColor& topColor,
|
||||||
|
const video::SColor& bottomColor) = 0;
|
||||||
//! Gets the color of the top and bottom vertices of the billboard
|
|
||||||
/** \param[out] topColor Stores the color of the top vertices
|
//! Gets the color of the top and bottom vertices of the billboard
|
||||||
\param[out] bottomColor Stores the color of the bottom vertices */
|
/** \param[out] topColor Stores the color of the top vertices
|
||||||
virtual void getColor(video::SColor& topColor,
|
\param[out] bottomColor Stores the color of the bottom vertices */
|
||||||
video::SColor& bottomColor) const = 0;
|
virtual void getColor(video::SColor& topColor,
|
||||||
|
video::SColor& bottomColor) const = 0;
|
||||||
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
|
||||||
/** The boundingbox returned will use absolute coordinates.
|
//! Get the real boundingbox used by the billboard, which can depend on the active camera.
|
||||||
The billboard orients itself toward the camera and some only update in render().
|
/** The boundingbox returned will use absolute coordinates.
|
||||||
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
The billboard orients itself toward the camera and some only update in render().
|
||||||
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
So we don't know the real boundingboxes before that. Which would be too late for culling.
|
||||||
to contain the billboard. While this function can return the real one. */
|
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
|
||||||
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
|
to contain the billboard. While this function can return the real one. */
|
||||||
|
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
|
||||||
//! Get the amount of mesh buffers.
|
|
||||||
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
//! Get the amount of mesh buffers.
|
||||||
virtual u32 getMeshBufferCount() const = 0;
|
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
||||||
|
virtual u32 getMeshBufferCount() const = 0;
|
||||||
//! Get pointer to a mesh buffer.
|
|
||||||
/** NOTE: Positions and normals of this meshbuffers are re-calculated before rendering.
|
//! Get pointer to a mesh buffer.
|
||||||
So this is mainly useful to access/modify the uv-coordinates.
|
/** NOTE: Positions and normals of this meshbuffers are re-calculated before rendering.
|
||||||
\param nr: Zero based index of the mesh buffer.
|
So this is mainly useful to access/modify the uv-coordinates.
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
|
\param nr: Zero based index of the mesh buffer.
|
||||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
|
||||||
};
|
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,100 +1,104 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
//! Enumeration for different bone animation modes
|
|
||||||
enum E_BONE_ANIMATION_MODE
|
//! Enumeration for different bone animation modes
|
||||||
{
|
enum E_BONE_ANIMATION_MODE
|
||||||
//! The bone is usually animated, unless it's parent is not animated
|
{
|
||||||
EBAM_AUTOMATIC=0,
|
//! The bone is usually animated, unless it's parent is not animated
|
||||||
|
EBAM_AUTOMATIC=0,
|
||||||
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
|
||||||
EBAM_ANIMATED,
|
//! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward
|
||||||
|
EBAM_ANIMATED,
|
||||||
//! The bone is not animated by the skin
|
|
||||||
EBAM_UNANIMATED,
|
//! The bone is not animated by the skin
|
||||||
|
EBAM_UNANIMATED,
|
||||||
//! Not an animation mode, just here to count the available modes
|
|
||||||
EBAM_COUNT
|
//! Not an animation mode, just here to count the available modes
|
||||||
|
EBAM_COUNT
|
||||||
};
|
|
||||||
|
};
|
||||||
enum E_BONE_SKINNING_SPACE
|
|
||||||
{
|
enum E_BONE_SKINNING_SPACE
|
||||||
//! local skinning, standard
|
{
|
||||||
EBSS_LOCAL=0,
|
//! local skinning, standard
|
||||||
|
EBSS_LOCAL=0,
|
||||||
//! global skinning
|
|
||||||
EBSS_GLOBAL,
|
//! global skinning
|
||||||
|
EBSS_GLOBAL,
|
||||||
EBSS_COUNT
|
|
||||||
};
|
EBSS_COUNT
|
||||||
|
};
|
||||||
//! Names for bone animation modes
|
|
||||||
const c8* const BoneAnimationModeNames[] =
|
//! Names for bone animation modes
|
||||||
{
|
const c8* const BoneAnimationModeNames[] =
|
||||||
"automatic",
|
{
|
||||||
"animated",
|
"automatic",
|
||||||
"unanimated",
|
"animated",
|
||||||
0,
|
"unanimated",
|
||||||
};
|
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:
|
{
|
||||||
|
public:
|
||||||
IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) :
|
|
||||||
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
|
|
||||||
virtual u32 getBoneIndex() const = 0;
|
//! Get the index of the bone
|
||||||
|
virtual u32 getBoneIndex() const = 0;
|
||||||
//! Sets the animation mode of the bone.
|
|
||||||
/** \return True if successful. (Unused) */
|
//! Sets the animation mode of the bone.
|
||||||
virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) = 0;
|
/** \return True if successful. (Unused) */
|
||||||
|
virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) = 0;
|
||||||
//! Gets the current animation mode of the bone
|
|
||||||
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
//! Gets the current animation mode of the bone
|
||||||
|
virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0;
|
||||||
//! Get the axis aligned bounding box of this node
|
|
||||||
const core::aabbox3d<f32>& getBoundingBox() const override = 0;
|
//! Get the axis aligned bounding box of this node
|
||||||
|
const core::aabbox3d<f32>& getBoundingBox() const override = 0;
|
||||||
//! Returns the relative transformation of the scene node.
|
|
||||||
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
//! Returns the relative transformation of the scene node.
|
||||||
|
//virtual core::matrix4 getRelativeTransformation() const = 0;
|
||||||
//! The animation method.
|
|
||||||
void OnAnimate(u32 timeMs) override =0;
|
//! The animation method.
|
||||||
|
void OnAnimate(u32 timeMs) override =0;
|
||||||
//! The render method.
|
|
||||||
/** Does nothing as bones are not visible. */
|
//! The render method.
|
||||||
void render() override { }
|
/** Does nothing as bones are not visible. */
|
||||||
|
void render() override { }
|
||||||
//! How the relative transformation of the bone is used
|
|
||||||
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
//! How the relative transformation of the bone is used
|
||||||
|
virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0;
|
||||||
//! How the relative transformation of the bone is used
|
|
||||||
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0;
|
//! How the relative transformation of the bone is used
|
||||||
|
virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0;
|
||||||
//! Updates the absolute position based on the relative and the parents position
|
|
||||||
virtual void updateAbsolutePositionOfAllChildren()=0;
|
//! Updates the absolute position based on the relative and the parents position
|
||||||
|
virtual void updateAbsolutePositionOfAllChildren()=0;
|
||||||
s32 positionHint;
|
|
||||||
s32 scaleHint;
|
s32 positionHint;
|
||||||
s32 rotationHint;
|
s32 scaleHint;
|
||||||
};
|
s32 rotationHint;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,185 +1,189 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IEventReceiver.h"
|
#include "ISceneNode.h"
|
||||||
|
#include "IEventReceiver.h"
|
||||||
namespace irr
|
|
||||||
{
|
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.
|
//! Scene Node which is a (controllable) camera.
|
||||||
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
/** The whole scene will be rendered from the cameras point of view.
|
||||||
other scene node, and will follow its parents movement, rotation and so
|
Because the ICameraSceneNode is a SceneNode, it can be attached to any
|
||||||
on.
|
other scene node, and will follow its parents movement, rotation and so
|
||||||
*/
|
on.
|
||||||
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
*/
|
||||||
{
|
class ICameraSceneNode : public ISceneNode, public IEventReceiver
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
//! Constructor
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f))
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
|
const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f))
|
||||||
|
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
|
||||||
//! Sets the projection matrix of the camera.
|
|
||||||
/** The core::matrix4 class has some methods to build a
|
//! Sets the projection matrix of the camera.
|
||||||
projection matrix. e.g:
|
/** The core::matrix4 class has some methods to build a
|
||||||
core::matrix4::buildProjectionMatrixPerspectiveFovLH.
|
projection matrix. e.g:
|
||||||
Note that the matrix will only stay as set by this method until
|
core::matrix4::buildProjectionMatrixPerspectiveFovLH.
|
||||||
one of the following Methods are called: setNearValue,
|
Note that the matrix will only stay as set by this method until
|
||||||
setFarValue, setAspectRatio, setFOV.
|
one of the following Methods are called: setNearValue,
|
||||||
NOTE: The frustum is not updated before render() is called
|
setFarValue, setAspectRatio, setFOV.
|
||||||
unless you explicitly call updateMatrices()
|
NOTE: The frustum is not updated before render() is called
|
||||||
\param projection The new projection matrix of the camera.
|
unless you explicitly call updateMatrices()
|
||||||
\param isOrthogonal Set this to true if the matrix is an
|
\param projection The new projection matrix of the camera.
|
||||||
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
\param isOrthogonal Set this to true if the matrix is an
|
||||||
*/
|
orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho).
|
||||||
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0;
|
*/
|
||||||
|
virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0;
|
||||||
//! Gets the current projection matrix of the camera.
|
|
||||||
/** \return The current projection matrix of the camera. */
|
//! Gets the current projection matrix of the camera.
|
||||||
virtual const core::matrix4& getProjectionMatrix() const =0;
|
/** \return The current projection matrix of the camera. */
|
||||||
|
virtual const core::matrix4& getProjectionMatrix() const =0;
|
||||||
//! Gets the current view matrix of the camera.
|
|
||||||
/** \return The current view matrix of the camera. */
|
//! Gets the current view matrix of the camera.
|
||||||
virtual const core::matrix4& getViewMatrix() const =0;
|
/** \return The current view matrix of the camera. */
|
||||||
|
virtual const core::matrix4& getViewMatrix() const =0;
|
||||||
//! Sets a custom view matrix affector.
|
|
||||||
/** The matrix passed here, will be multiplied with the view
|
//! Sets a custom view matrix affector.
|
||||||
matrix when it gets updated. This allows for custom camera
|
/** The matrix passed here, will be multiplied with the view
|
||||||
setups like, for example, a reflection camera.
|
matrix when it gets updated. This allows for custom camera
|
||||||
\param affector The affector matrix. */
|
setups like, for example, a reflection camera.
|
||||||
virtual void setViewMatrixAffector(const core::matrix4& affector) =0;
|
\param affector The affector matrix. */
|
||||||
|
virtual void setViewMatrixAffector(const core::matrix4& affector) =0;
|
||||||
//! Get the custom view matrix affector.
|
|
||||||
/** \return The affector matrix. */
|
//! Get the custom view matrix affector.
|
||||||
virtual const core::matrix4& getViewMatrixAffector() const =0;
|
/** \return The affector matrix. */
|
||||||
|
virtual const core::matrix4& getViewMatrixAffector() const =0;
|
||||||
//! It is possible to send mouse and key events to the camera.
|
|
||||||
/** Most cameras may ignore this input, but camera scene nodes
|
//! It is possible to send mouse and key events to the camera.
|
||||||
which are created for example with
|
/** Most cameras may ignore this input, but camera scene nodes
|
||||||
ISceneManager::addCameraSceneNodeMaya or
|
which are created for example with
|
||||||
ISceneManager::addCameraSceneNodeFPS, may want to get
|
ISceneManager::addCameraSceneNodeMaya or
|
||||||
this input for changing their position, look at target or
|
ISceneManager::addCameraSceneNodeFPS, may want to get
|
||||||
whatever. */
|
this input for changing their position, look at target or
|
||||||
bool OnEvent(const SEvent& event) override =0;
|
whatever. */
|
||||||
|
bool OnEvent(const SEvent& event) override =0;
|
||||||
//! Sets the look at target of the camera
|
|
||||||
/** If the camera's target and rotation are bound ( @see
|
//! Sets the look at target of the camera
|
||||||
bindTargetAndRotation() ) then calling this will also change
|
/** If the camera's target and rotation are bound ( @see
|
||||||
the camera's scene node rotation to match the target.
|
bindTargetAndRotation() ) then calling this will also change
|
||||||
Note that setTarget uses the current absolute position
|
the camera's scene node rotation to match the target.
|
||||||
internally, so if you changed setPosition since last rendering you must
|
Note that setTarget uses the current absolute position
|
||||||
call updateAbsolutePosition before using this function.
|
internally, so if you changed setPosition since last rendering you must
|
||||||
\param pos Look at target of the camera, in world co-ordinates. */
|
call updateAbsolutePosition before using this function.
|
||||||
virtual void setTarget(const core::vector3df& pos) =0;
|
\param pos Look at target of the camera, in world co-ordinates. */
|
||||||
|
virtual void setTarget(const core::vector3df& pos) =0;
|
||||||
//! Sets the rotation of the node.
|
|
||||||
/** This only modifies the relative rotation of the node.
|
//! Sets the rotation of the node.
|
||||||
If the camera's target and rotation are bound ( @see
|
/** This only modifies the relative rotation of the node.
|
||||||
bindTargetAndRotation() ) then calling this will also change
|
If the camera's target and rotation are bound ( @see
|
||||||
the camera's target to match the rotation.
|
bindTargetAndRotation() ) then calling this will also change
|
||||||
\param rotation New rotation of the node in degrees. */
|
the camera's target to match the rotation.
|
||||||
void setRotation(const core::vector3df& rotation) override =0;
|
\param rotation New rotation of the node in degrees. */
|
||||||
|
void setRotation(const core::vector3df& rotation) override =0;
|
||||||
//! Gets the current look at target of the camera
|
|
||||||
/** \return The current look at target of the camera, in world co-ordinates */
|
//! Gets the current look at target of the camera
|
||||||
virtual const core::vector3df& getTarget() const =0;
|
/** \return The current look at target of the camera, in world co-ordinates */
|
||||||
|
virtual const core::vector3df& getTarget() const =0;
|
||||||
//! Sets the up vector of the camera.
|
|
||||||
/** \param pos: New upvector of the camera. */
|
//! Sets the up vector of the camera.
|
||||||
virtual void setUpVector(const core::vector3df& pos) =0;
|
/** \param pos: New upvector of the camera. */
|
||||||
|
virtual void setUpVector(const core::vector3df& pos) =0;
|
||||||
//! Gets the up vector of the camera.
|
|
||||||
/** \return The up vector of the camera, in world space. */
|
//! Gets the up vector of the camera.
|
||||||
virtual const core::vector3df& getUpVector() const =0;
|
/** \return The up vector of the camera, in world space. */
|
||||||
|
virtual const core::vector3df& getUpVector() const =0;
|
||||||
//! Gets the value of the near plane of the camera.
|
|
||||||
/** \return The value of the near plane of the camera. */
|
//! Gets the value of the near plane of the camera.
|
||||||
virtual f32 getNearValue() const =0;
|
/** \return The value of the near plane of the camera. */
|
||||||
|
virtual f32 getNearValue() const =0;
|
||||||
//! Gets the value of the far plane of the camera.
|
|
||||||
/** \return The value of the far plane of the camera. */
|
//! Gets the value of the far plane of the camera.
|
||||||
virtual f32 getFarValue() const =0;
|
/** \return The value of the far plane of the camera. */
|
||||||
|
virtual f32 getFarValue() const =0;
|
||||||
//! Gets the aspect ratio of the camera.
|
|
||||||
/** \return The aspect ratio of the camera. */
|
//! Gets the aspect ratio of the camera.
|
||||||
virtual f32 getAspectRatio() const =0;
|
/** \return The aspect ratio of the camera. */
|
||||||
|
virtual f32 getAspectRatio() const =0;
|
||||||
//! Gets the field of view of the camera.
|
|
||||||
/** \return The field of view of the camera in radians. */
|
//! Gets the field of view of the camera.
|
||||||
virtual f32 getFOV() const =0;
|
/** \return The field of view of the camera in radians. */
|
||||||
|
virtual f32 getFOV() const =0;
|
||||||
//! Sets the value of the near clipping plane. (default: 1.0f)
|
|
||||||
/** \param zn: New z near value. */
|
//! Sets the value of the near clipping plane. (default: 1.0f)
|
||||||
virtual void setNearValue(f32 zn) =0;
|
/** \param zn: New z near value. */
|
||||||
|
virtual void setNearValue(f32 zn) =0;
|
||||||
//! Sets the value of the far clipping plane (default: 2000.0f)
|
|
||||||
/** \param zf: New z far value. */
|
//! Sets the value of the far clipping plane (default: 2000.0f)
|
||||||
virtual void setFarValue(f32 zf) =0;
|
/** \param zf: New z far value. */
|
||||||
|
virtual void setFarValue(f32 zf) =0;
|
||||||
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
|
||||||
/** \param aspect: New aspect ratio. */
|
//! Sets the aspect ratio (default: 4.0f / 3.0f)
|
||||||
virtual void setAspectRatio(f32 aspect) =0;
|
/** \param aspect: New aspect ratio. */
|
||||||
|
virtual void setAspectRatio(f32 aspect) =0;
|
||||||
//! Sets the field of view (Default: PI / 2.5f)
|
|
||||||
/** \param fovy: New field of view in radians. */
|
//! Sets the field of view (Default: PI / 2.5f)
|
||||||
virtual void setFOV(f32 fovy) =0;
|
/** \param fovy: New field of view in radians. */
|
||||||
|
virtual void setFOV(f32 fovy) =0;
|
||||||
//! Get the view frustum.
|
|
||||||
/** \return The current view frustum. */
|
//! Get the view frustum.
|
||||||
virtual const SViewFrustum* getViewFrustum() const =0;
|
/** \return The current view frustum. */
|
||||||
|
virtual const SViewFrustum* getViewFrustum() const =0;
|
||||||
//! Disables or enables the camera to get key or mouse inputs.
|
|
||||||
/** If this is set to true, the camera will respond to key
|
//! Disables or enables the camera to get key or mouse inputs.
|
||||||
inputs otherwise not. */
|
/** If this is set to true, the camera will respond to key
|
||||||
virtual void setInputReceiverEnabled(bool enabled) =0;
|
inputs otherwise not. */
|
||||||
|
virtual void setInputReceiverEnabled(bool enabled) =0;
|
||||||
//! Checks if the input receiver of the camera is currently enabled.
|
|
||||||
virtual bool isInputReceiverEnabled() const =0;
|
//! Checks if the input receiver of the camera is currently enabled.
|
||||||
|
virtual bool isInputReceiverEnabled() const =0;
|
||||||
//! Checks if a camera is orthogonal.
|
|
||||||
virtual bool isOrthogonal() const
|
//! Checks if a camera is orthogonal.
|
||||||
{
|
virtual bool isOrthogonal() const
|
||||||
return IsOrthogonal;
|
{
|
||||||
}
|
return IsOrthogonal;
|
||||||
|
}
|
||||||
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
|
||||||
/** When bound, calling setRotation() will update the camera's
|
//! Binds the camera scene node's rotation to its target position and vice versa, or unbinds them.
|
||||||
target position to be along its +Z axis, and likewise calling
|
/** When bound, calling setRotation() will update the camera's
|
||||||
setTarget() will update its rotation so that its +Z axis will
|
target position to be along its +Z axis, and likewise calling
|
||||||
point at the target point. FPS camera use this binding by
|
setTarget() will update its rotation so that its +Z axis will
|
||||||
default; other cameras do not.
|
point at the target point. FPS camera use this binding by
|
||||||
\param bound True to bind the camera's scene node rotation
|
default; other cameras do not.
|
||||||
and targeting, false to unbind them.
|
\param bound True to bind the camera's scene node rotation
|
||||||
@see getTargetAndRotationBinding() */
|
and targeting, false to unbind them.
|
||||||
virtual void bindTargetAndRotation(bool bound) =0;
|
@see getTargetAndRotationBinding() */
|
||||||
|
virtual void bindTargetAndRotation(bool bound) =0;
|
||||||
//! Updates the matrices without uploading them to the driver
|
|
||||||
virtual void updateMatrices() = 0;
|
//! Updates the matrices without uploading them to the driver
|
||||||
|
virtual void updateMatrices() = 0;
|
||||||
//! Queries if the camera scene node's rotation and its target position are bound together.
|
|
||||||
/** @see bindTargetAndRotation() */
|
//! Queries if the camera scene node's rotation and its target position are bound together.
|
||||||
virtual bool getTargetAndRotationBinding(void) const =0;
|
/** @see bindTargetAndRotation() */
|
||||||
|
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 irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,61 +1,63 @@
|
|||||||
// Copyright (C) 2013-2015 Patryk Nadrowski
|
// Copyright (C) 2013-2015 Patryk Nadrowski
|
||||||
// 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 __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
||||||
|
#define __IRR_I_CONTEXT_MANAGER_H_INCLUDED__
|
||||||
#include "SExposedVideoData.h"
|
|
||||||
#include "SIrrCreationParameters.h"
|
#include "SExposedVideoData.h"
|
||||||
#include <string>
|
#include "SIrrCreationParameters.h"
|
||||||
|
#include <string>
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
// For system specific window contexts (used for OpenGL)
|
{
|
||||||
class IContextManager : public virtual IReferenceCounted
|
// For system specific window contexts (used for OpenGL)
|
||||||
{
|
class IContextManager : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
public:
|
||||||
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) =0;
|
//! Initialize manager with device creation parameters and device window (passed as exposed video data)
|
||||||
|
virtual bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data) =0;
|
||||||
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
|
||||||
virtual void terminate() =0;
|
//! Terminate manager, any cleanup that is left over. Manager needs a new initialize to be usable again
|
||||||
|
virtual void terminate() =0;
|
||||||
//! Create surface based on current window set
|
|
||||||
virtual bool generateSurface() =0;
|
//! Create surface based on current window set
|
||||||
|
virtual bool generateSurface() =0;
|
||||||
//! Destroy current surface
|
|
||||||
virtual void destroySurface() =0;
|
//! Destroy current surface
|
||||||
|
virtual void destroySurface() =0;
|
||||||
//! Create context based on current surface
|
|
||||||
virtual bool generateContext() =0;
|
//! Create context based on current surface
|
||||||
|
virtual bool generateContext() =0;
|
||||||
//! Destroy current context
|
|
||||||
virtual void destroyContext() =0;
|
//! Destroy current context
|
||||||
|
virtual void destroyContext() =0;
|
||||||
//! Get current context
|
|
||||||
virtual const SExposedVideoData& getContext() const =0;
|
//! Get current context
|
||||||
|
virtual const SExposedVideoData& getContext() const =0;
|
||||||
//! Change render context, disable old and activate new defined by videoData
|
|
||||||
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
//! Change render context, disable old and activate new defined by videoData
|
||||||
// When false: resets the context when videoData is set to 0 values.
|
//\param restorePrimaryOnZero When true: restore original driver context when videoData is set to 0 values.
|
||||||
/** This is mostly used internally by IVideoDriver::beginScene().
|
// When false: resets the context when videoData is set to 0 values.
|
||||||
But if you want to switch threads which access your OpenGL driver you will have to
|
/** This is mostly used internally by IVideoDriver::beginScene().
|
||||||
call this function as follows:
|
But if you want to switch threads which access your OpenGL driver you will have to
|
||||||
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
call this function as follows:
|
||||||
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
Old thread gives up context with: activateContext(irr::video::SExposedVideoData());
|
||||||
Note that only 1 thread at a time may access an OpenGL context. */
|
New thread takes over context with: activateContext(videoDriver->getExposedVideoData());
|
||||||
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) =0;
|
Note that only 1 thread at a time may access an OpenGL context. */
|
||||||
|
virtual bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero=false) =0;
|
||||||
//! Get the address of any OpenGL procedure (including core procedures).
|
|
||||||
virtual void* getProcAddress(const std::string &procName) =0;
|
//! Get the address of any OpenGL procedure (including core procedures).
|
||||||
|
virtual void* getProcAddress(const std::string &procName) =0;
|
||||||
//! Swap buffers.
|
|
||||||
virtual bool swapBuffers() =0;
|
//! Swap buffers.
|
||||||
};
|
virtual bool swapBuffers() =0;
|
||||||
|
};
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,198 +1,202 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "position2d.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "rect.h"
|
#include "position2d.h"
|
||||||
|
#include "rect.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
class IGUISpriteBank;
|
|
||||||
|
class IGUISpriteBank;
|
||||||
//! Default icons for cursors
|
|
||||||
enum ECURSOR_ICON
|
//! Default icons for cursors
|
||||||
{
|
enum ECURSOR_ICON
|
||||||
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
{
|
||||||
ECI_NORMAL, // arrow
|
// Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far.
|
||||||
ECI_CROSS, // Crosshair
|
ECI_NORMAL, // arrow
|
||||||
ECI_HAND, // Hand
|
ECI_CROSS, // Crosshair
|
||||||
ECI_HELP, // Arrow and question mark
|
ECI_HAND, // Hand
|
||||||
ECI_IBEAM, // typical text-selection cursor
|
ECI_HELP, // Arrow and question mark
|
||||||
ECI_NO, // should not click icon
|
ECI_IBEAM, // typical text-selection cursor
|
||||||
ECI_WAIT, // hourglass
|
ECI_NO, // should not click icon
|
||||||
ECI_SIZEALL, // arrow in all directions
|
ECI_WAIT, // hourclass
|
||||||
ECI_SIZENESW, // resizes in direction north-east or south-west
|
ECI_SIZEALL, // arrow in all directions
|
||||||
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
ECI_SIZENESW, // resizes in direction north-east or south-west
|
||||||
ECI_SIZENS, // resizes in direction north or south
|
ECI_SIZENWSE, // resizes in direction north-west or south-east
|
||||||
ECI_SIZEWE, // resizes in direction west or east
|
ECI_SIZENS, // resizes in direction north or south
|
||||||
ECI_UP, // up-arrow
|
ECI_SIZEWE, // resizes in direction west or east
|
||||||
|
ECI_UP, // up-arrow
|
||||||
// Implementer note: Should we add system specific cursors, which use guaranteed the system icons,
|
|
||||||
// then I would recommend using a naming scheme like ECI_W32_CROSS, ECI_X11_CROSSHAIR and adding those
|
// Implementer note: Should we add system specific cursors, which use guaranteed the system icons,
|
||||||
// additionally.
|
// then I would recommend using a naming scheme like ECI_W32_CROSS, ECI_X11_CROSSHAIR and adding those
|
||||||
|
// additionally.
|
||||||
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
|
||||||
};
|
ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime
|
||||||
|
};
|
||||||
//! Names for ECURSOR_ICON
|
|
||||||
const c8* const GUICursorIconNames[ECI_COUNT+1] =
|
//! Names for ECURSOR_ICON
|
||||||
{
|
const c8* const GUICursorIconNames[ECI_COUNT+1] =
|
||||||
"normal",
|
{
|
||||||
"cross",
|
"normal",
|
||||||
"hand",
|
"cross",
|
||||||
"help",
|
"hand",
|
||||||
"ibeam",
|
"help",
|
||||||
"no",
|
"ibeam",
|
||||||
"wait",
|
"no",
|
||||||
"sizeall",
|
"wait",
|
||||||
"sizenesw",
|
"sizeall",
|
||||||
"sizenwse",
|
"sizenesw",
|
||||||
"sizens",
|
"sizenwse",
|
||||||
"sizewe",
|
"sizens",
|
||||||
"sizeup",
|
"sizewe",
|
||||||
0
|
"sizeup",
|
||||||
};
|
0
|
||||||
|
};
|
||||||
//! structure used to set sprites as cursors.
|
|
||||||
struct SCursorSprite
|
//! structure used to set sprites as cursors.
|
||||||
{
|
struct SCursorSprite
|
||||||
SCursorSprite()
|
{
|
||||||
: SpriteBank(0), SpriteId(-1)
|
SCursorSprite()
|
||||||
{
|
: SpriteBank(0), SpriteId(-1)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) )
|
|
||||||
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d<s32> &hotspot=(core::position2d<s32>(0,0)) )
|
||||||
{
|
: SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
IGUISpriteBank * SpriteBank;
|
|
||||||
s32 SpriteId;
|
IGUISpriteBank * SpriteBank;
|
||||||
core::position2d<s32> HotSpot;
|
s32 SpriteId;
|
||||||
};
|
core::position2d<s32> HotSpot;
|
||||||
|
};
|
||||||
//! platform specific behavior flags for the cursor
|
|
||||||
enum ECURSOR_PLATFORM_BEHAVIOR
|
//! platform specific behavior flags for the cursor
|
||||||
{
|
enum ECURSOR_PLATFORM_BEHAVIOR
|
||||||
//! default - no platform specific behavior
|
{
|
||||||
ECPB_NONE = 0,
|
//! default - no platform specific behavior
|
||||||
|
ECPB_NONE = 0,
|
||||||
//! On X11 try caching cursor updates as XQueryPointer calls can be expensive.
|
|
||||||
/** Update cursor positions only when the irrlicht timer has been updated or the timer is stopped.
|
//! On X11 try caching cursor updates as XQueryPointer calls can be expensive.
|
||||||
This means you usually get one cursor update per device->run() which will be fine in most cases.
|
/** Update cursor positions only when the irrlicht timer has been updated or the timer is stopped.
|
||||||
See this forum-thread for a more detailed explanation:
|
This means you usually get one cursor update per device->run() which will be fine in most cases.
|
||||||
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
See this forum-thread for a more detailed explanation:
|
||||||
*/
|
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525
|
||||||
ECPB_X11_CACHE_UPDATES = 1
|
*/
|
||||||
};
|
ECPB_X11_CACHE_UPDATES = 1
|
||||||
|
};
|
||||||
//! Interface to manipulate the mouse cursor.
|
|
||||||
class ICursorControl : public virtual IReferenceCounted
|
//! Interface to manipulate the mouse cursor.
|
||||||
{
|
class ICursorControl : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Changes the visible state of the mouse cursor.
|
|
||||||
/** \param visible: The new visible state. If true, the cursor will be visible,
|
//! Changes the visible state of the mouse cursor.
|
||||||
if false, it will be invisible. */
|
/** \param visible: The new visible state. If true, the cursor will be visible,
|
||||||
virtual void setVisible(bool visible) = 0;
|
if false, it will be invisible. */
|
||||||
|
virtual void setVisible(bool visible) = 0;
|
||||||
//! Returns if the cursor is currently visible.
|
|
||||||
/** \return True if the cursor flag is set to visible, false if not. */
|
//! Returns if the cursor is currently visible.
|
||||||
virtual bool isVisible() const = 0;
|
/** \return True if the cursor flag is set to visible, false if not. */
|
||||||
|
virtual bool isVisible() const = 0;
|
||||||
//! Sets the new position of the cursor.
|
|
||||||
/** The position must be
|
//! Sets the new position of the cursor.
|
||||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
/** The position must be
|
||||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||||
render window.
|
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||||
\param pos New position of the cursor. */
|
render window.
|
||||||
virtual void setPosition(const core::position2d<f32> &pos) = 0;
|
\param pos New position of the cursor. */
|
||||||
|
virtual void setPosition(const core::position2d<f32> &pos) = 0;
|
||||||
//! Sets the new position of the cursor.
|
|
||||||
/** The position must be
|
//! Sets the new position of the cursor.
|
||||||
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
/** The position must be
|
||||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||||
render window.
|
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||||
\param x New x-coord of the cursor.
|
render window.
|
||||||
\param y New x-coord of the cursor. */
|
\param x New x-coord of the cursor.
|
||||||
virtual void setPosition(f32 x, f32 y) = 0;
|
\param y New x-coord of the cursor. */
|
||||||
|
virtual void setPosition(f32 x, f32 y) = 0;
|
||||||
//! Sets the new position of the cursor.
|
|
||||||
/** \param pos: New position of the cursor. The coordinates are pixel units. */
|
//! Sets the new position of the cursor.
|
||||||
virtual void setPosition(const core::position2d<s32> &pos) = 0;
|
/** \param pos: New position of the cursor. The coordinates are pixel units. */
|
||||||
|
virtual void setPosition(const core::position2d<s32> &pos) = 0;
|
||||||
//! Sets the new position of the cursor.
|
|
||||||
/** \param x New x-coord of the cursor. The coordinates are pixel units.
|
//! Sets the new position of the cursor.
|
||||||
\param y New y-coord of the cursor. The coordinates are pixel units. */
|
/** \param x New x-coord of the cursor. The coordinates are pixel units.
|
||||||
virtual void setPosition(s32 x, s32 y) = 0;
|
\param y New y-coord of the cursor. The coordinates are pixel units. */
|
||||||
|
virtual void setPosition(s32 x, s32 y) = 0;
|
||||||
//! Returns the current position of the mouse cursor.
|
|
||||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
//! Returns the current position of the mouse cursor.
|
||||||
When false return the last known (buffered) position ( this is useful to
|
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||||
check what has become of a setPosition call with float numbers).
|
When false return the last known (buffered) position ( this is useful to
|
||||||
\return Returns the current position of the cursor. The returned position
|
check what has become of a setPosition call with float numbers).
|
||||||
is the position of the mouse cursor in pixel units. */
|
\return Returns the current position of the cursor. The returned position
|
||||||
virtual const core::position2d<s32>& getPosition(bool updateCursor=true) = 0;
|
is the position of the mouse cursor in pixel units. */
|
||||||
|
virtual const core::position2d<s32>& getPosition(bool updateCursor=true) = 0;
|
||||||
//! Returns the current position of the mouse cursor.
|
|
||||||
/** \param updateCursor When true ask system/OS for current cursor position.
|
//! Returns the current position of the mouse cursor.
|
||||||
When false return the last known (buffered) position (this is
|
/** \param updateCursor When true ask system/OS for current cursor position.
|
||||||
useful to check what has become of a setPosition call with float numbers
|
When false return the last known (buffered) position (this is
|
||||||
and is often different from the values you passed in setPosition).
|
useful to check what has become of a setPosition call with float numbers
|
||||||
\return Returns the current position of the cursor. The returned position
|
and is often different from the values you passed in setPosition).
|
||||||
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
\return Returns the current position of the cursor. The returned position
|
||||||
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is
|
||||||
render window. */
|
the top left corner and (1.0f, 1.0f) is the bottom right corner of the
|
||||||
virtual core::position2d<f32> getRelativePosition(bool updateCursor=true) = 0;
|
render window. */
|
||||||
|
virtual core::position2d<f32> getRelativePosition(bool updateCursor=true) = 0;
|
||||||
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
|
||||||
/** If this rect is set, the cursor position is not being calculated relative to
|
//! Sets an absolute reference rect for setting and retrieving the cursor position.
|
||||||
the rendering window but to this rect. You can set the rect pointer to 0 to disable
|
/** If this rect is set, the cursor position is not being calculated relative to
|
||||||
this feature again. This feature is useful when rendering into parts of foreign windows
|
the rendering window but to this rect. You can set the rect pointer to 0 to disable
|
||||||
for example in an editor.
|
this feature again. This feature is useful when rendering into parts of foreign windows
|
||||||
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
for example in an editor.
|
||||||
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
|
||||||
|
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
|
||||||
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
|
||||||
/** Specific to SDL */
|
//! Internally fixes the mouse position, and reports relative mouse movement compared to the old position
|
||||||
virtual void setRelativeMode(bool relative) {};
|
/** Specific to SDL */
|
||||||
|
virtual void setRelativeMode(bool relative) {};
|
||||||
//! Sets the active cursor icon
|
|
||||||
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
//! Sets the active cursor icon
|
||||||
virtual void setActiveIcon(ECURSOR_ICON iconId) {}
|
/** Setting cursor icons is so far only supported on Win32 and Linux */
|
||||||
|
virtual void setActiveIcon(ECURSOR_ICON iconId) {}
|
||||||
//! Gets the currently active icon
|
|
||||||
virtual ECURSOR_ICON getActiveIcon() const { return gui::ECI_NORMAL; }
|
//! Gets the currently active icon
|
||||||
|
virtual ECURSOR_ICON getActiveIcon() const { return gui::ECI_NORMAL; }
|
||||||
//! Add a custom sprite as cursor icon.
|
|
||||||
/** \return Identification for the icon */
|
//! Add a custom sprite as cursor icon.
|
||||||
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; }
|
/** \return Identification for the icon */
|
||||||
|
virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; }
|
||||||
//! replace a cursor icon.
|
|
||||||
/** Changing cursor icons is so far only supported on Win32 and Linux
|
//! replace a cursor icon.
|
||||||
Note that this only changes the icons within your application, system cursors outside your
|
/** Changing cursor icons is so far only supported on Win32 and Linux
|
||||||
application will not be affected.
|
Note that this only changes the icons within your application, system cursors outside your
|
||||||
*/
|
application will not be affected.
|
||||||
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {}
|
*/
|
||||||
|
virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {}
|
||||||
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
|
||||||
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); }
|
//! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work.
|
||||||
|
virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); }
|
||||||
//! Set platform specific behavior flags.
|
|
||||||
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
//! Set platform specific behavior flags.
|
||||||
|
virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {}
|
||||||
//! Return platform specific behavior.
|
|
||||||
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
//! Return platform specific behavior.
|
||||||
*/
|
/** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors.
|
||||||
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
*/
|
||||||
};
|
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,37 +1,42 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
//! Dummy scene node for adding additional transformations to the scene graph.
|
|
||||||
/** This scene node does not render itself, and does not respond to set/getPosition,
|
//! Dummy scene node for adding additional transformations to the scene graph.
|
||||||
set/getRotation and set/getScale. Its just a simple scene node that takes a
|
/** This scene node does not render itself, and does not respond to set/getPosition,
|
||||||
matrix as relative transformation, making it possible to insert any transformation
|
set/getRotation and set/getScale. Its just a simple scene node that takes a
|
||||||
anywhere into the scene graph.
|
matrix as relative transformation, making it possible to insert any transformation
|
||||||
This scene node is for example used by the IAnimatedMeshSceneNode for emulating
|
anywhere into the scene graph.
|
||||||
joint scene nodes when playing skeletal animations.
|
This scene node is for example used by the IAnimatedMeshSceneNode for emulating
|
||||||
*/
|
joint scene nodes when playing skeletal animations.
|
||||||
class IDummyTransformationSceneNode : public ISceneNode
|
*/
|
||||||
{
|
class IDummyTransformationSceneNode : public ISceneNode
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
|
//! Constructor
|
||||||
: ISceneNode(parent, mgr, id) {}
|
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
|
||||||
|
: ISceneNode(parent, mgr, id) {}
|
||||||
//! Returns a reference to the current relative transformation matrix.
|
|
||||||
/** This is the matrix, this scene node uses instead of scale, translation
|
//! Returns a reference to the current relative transformation matrix.
|
||||||
and rotation. */
|
/** This is the matrix, this scene node uses instead of scale, translation
|
||||||
virtual core::matrix4& getRelativeTransformationMatrix() = 0;
|
and rotation. */
|
||||||
};
|
virtual core::matrix4& getRelativeTransformationMatrix() = 0;
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,144 +1,148 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt/ Thomas Alten
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt/ Thomas Alten
|
||||||
// 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 "IFileList.h"
|
#include "IReadFile.h"
|
||||||
|
#include "IFileList.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace io
|
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! FileSystemType: which filesystem should be used for e.g. browsing
|
|
||||||
enum EFileSystemType
|
//! FileSystemType: which filesystem should be used for e.g. browsing
|
||||||
{
|
enum EFileSystemType
|
||||||
FILESYSTEM_NATIVE = 0, // Native OS FileSystem
|
{
|
||||||
FILESYSTEM_VIRTUAL // Virtual FileSystem
|
FILESYSTEM_NATIVE = 0, // Native OS FileSystem
|
||||||
};
|
FILESYSTEM_VIRTUAL // Virtual FileSystem
|
||||||
|
};
|
||||||
//! Contains the different types of archives
|
|
||||||
enum E_FILE_ARCHIVE_TYPE
|
//! Contains the different types of archives
|
||||||
{
|
enum E_FILE_ARCHIVE_TYPE
|
||||||
//! A PKZIP archive
|
{
|
||||||
EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0),
|
//! A PKZIP archive
|
||||||
|
EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0),
|
||||||
//! A gzip archive
|
|
||||||
EFAT_GZIP = MAKE_IRR_ID('g','z','i','p'),
|
//! A gzip archive
|
||||||
|
EFAT_GZIP = MAKE_IRR_ID('g','z','i','p'),
|
||||||
//! A virtual directory
|
|
||||||
EFAT_FOLDER = MAKE_IRR_ID('f','l','d','r'),
|
//! 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),
|
//! 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 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 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),
|
//! A wad Archive, Quake2, Halflife
|
||||||
|
EFAT_WAD = MAKE_IRR_ID('W','A','D', 0),
|
||||||
//! An Android asset file archive
|
|
||||||
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
//! An Android asset file archive
|
||||||
|
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A','S','S','E'),
|
||||||
//! The type of this archive is unknown
|
|
||||||
EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
//! The type of this archive is unknown
|
||||||
};
|
EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n')
|
||||||
|
};
|
||||||
//! The FileArchive manages archives and provides access to files inside them.
|
|
||||||
class IFileArchive : public virtual IReferenceCounted
|
//! The FileArchive manages archives and provides access to files inside them.
|
||||||
{
|
class IFileArchive : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Opens a file based on its name
|
|
||||||
/** Creates and returns a new IReadFile for a file in the archive.
|
//! Opens a file based on its name
|
||||||
\param filename The file to open
|
/** Creates and returns a new IReadFile for a file in the archive.
|
||||||
\return Returns A pointer to the created file on success,
|
\param filename The file to open
|
||||||
or 0 on failure. */
|
\return Returns A pointer to the created file on success,
|
||||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
or 0 on failure. */
|
||||||
|
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||||
//! Opens a file based on its position in the file list.
|
|
||||||
/** Creates and returns
|
//! Opens a file based on its position in the file list.
|
||||||
\param index The zero based index of the file.
|
/** Creates and returns
|
||||||
\return Returns a pointer to the created file on success, or 0 on failure. */
|
\param index The zero based index of the file.
|
||||||
virtual IReadFile* createAndOpenFile(u32 index) =0;
|
\return Returns a pointer to the created file on success, or 0 on failure. */
|
||||||
|
virtual IReadFile* createAndOpenFile(u32 index) =0;
|
||||||
//! Returns the complete file tree
|
|
||||||
/** \return Returns the complete directory tree for the archive,
|
//! Returns the complete file tree
|
||||||
including all files and folders */
|
/** \return Returns the complete directory tree for the archive,
|
||||||
virtual const IFileList* getFileList() const =0;
|
including all files and folders */
|
||||||
|
virtual const IFileList* getFileList() const =0;
|
||||||
//! get the archive type
|
|
||||||
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
//! get the archive type
|
||||||
|
virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; }
|
||||||
//! return the name (id) of the file Archive
|
|
||||||
virtual const io::path& getArchiveName() const =0;
|
//! return the name (id) of the file Archive
|
||||||
|
virtual const io::path& getArchiveName() const =0;
|
||||||
//! Add a directory in the archive and all it's files to the FileList
|
|
||||||
/** Only needed for file-archives which have no information about their own
|
//! Add a directory in the archive and all it's files to the FileList
|
||||||
directory structure. In that case the user must add directories manually.
|
/** Only needed for file-archives which have no information about their own
|
||||||
Currently this is necessary for archives of type EFAT_ANDROID_ASSET.
|
directory structure. In that case the user must add directories manually.
|
||||||
The root-path itself is already set by the engine.
|
Currently this is necessary for archives of type EFAT_ANDROID_ASSET.
|
||||||
If directories are not added manually opening files might still work,
|
The root-path itself is already set by the engine.
|
||||||
but checks if file exists will fail.
|
If directories are not added manually opening files might still work,
|
||||||
*/
|
but checks if file exists will fail.
|
||||||
virtual void addDirectoryToFileList(const io::path &filename) {}
|
*/
|
||||||
|
virtual void addDirectoryToFileList(const io::path &filename) {}
|
||||||
//! An optionally used password string
|
|
||||||
/** This variable is publicly accessible from the interface in order to
|
//! An optionally used password string
|
||||||
avoid single access patterns to this place, and hence allow some more
|
/** This variable is publicly accessible from the interface in order to
|
||||||
obscurity.
|
avoid single access patterns to this place, and hence allow some more
|
||||||
*/
|
obscurity.
|
||||||
core::stringc Password;
|
*/
|
||||||
};
|
core::stringc Password;
|
||||||
|
};
|
||||||
//! Class which is able to create an archive from a file.
|
|
||||||
/** If you want the Irrlicht Engine be able to load archives of
|
//! Class which is able to create an archive from a file.
|
||||||
currently unsupported file formats (e.g .wad), then implement
|
/** If you want the Irrlicht Engine be able to load archives of
|
||||||
this and add your new Archive loader with
|
currently unsupported file formats (e.g .wad), then implement
|
||||||
IFileSystem::addArchiveLoader() to the engine. */
|
this and add your new Archive loader with
|
||||||
class IArchiveLoader : public virtual IReferenceCounted
|
IFileSystem::addArchiveLoader() to the engine. */
|
||||||
{
|
class IArchiveLoader : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Check if the file might be loaded by this class
|
public:
|
||||||
/** Check based on the file extension (e.g. ".zip")
|
//! Check if the file might be loaded by this class
|
||||||
\param filename Name of file to check.
|
/** Check based on the file extension (e.g. ".zip")
|
||||||
\return True if file seems to be loadable. */
|
\param filename Name of file to check.
|
||||||
virtual bool isALoadableFileFormat(const path& filename) const =0;
|
\return True if file seems to be loadable. */
|
||||||
|
virtual bool isALoadableFileFormat(const path& filename) const =0;
|
||||||
//! Check if the file might be loaded by this class
|
|
||||||
/** This check may look into the file.
|
//! Check if the file might be loaded by this class
|
||||||
\param file File handle to check.
|
/** This check may look into the file.
|
||||||
\return True if file seems to be loadable. */
|
\param file File handle to check.
|
||||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const =0;
|
\return True if file seems to be loadable. */
|
||||||
|
virtual bool isALoadableFileFormat(io::IReadFile* file) const =0;
|
||||||
//! Check to see if the loader can create archives of this type.
|
|
||||||
/** Check based on the archive type.
|
//! Check to see if the loader can create archives of this type.
|
||||||
\param fileType The archive type to check.
|
/** Check based on the archive type.
|
||||||
\return True if the archive loader supports this type, false if not */
|
\param fileType The archive type to check.
|
||||||
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0;
|
\return True if the archive loader supports this type, false if not */
|
||||||
|
virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0;
|
||||||
//! Creates an archive from the filename
|
|
||||||
/** \param filename File to use.
|
//! Creates an archive from the filename
|
||||||
\param ignoreCase Searching is performed without regarding the case
|
/** \param filename File to use.
|
||||||
\param ignorePaths Files are searched for without checking for the directories
|
\param ignoreCase Searching is performed without regarding the case
|
||||||
\return Pointer to newly created archive, or 0 upon error. */
|
\param ignorePaths Files are searched for without checking for the directories
|
||||||
virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0;
|
\return Pointer to newly created archive, or 0 upon error. */
|
||||||
|
virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0;
|
||||||
//! Creates an archive from the file
|
|
||||||
/** \param file File handle to use.
|
//! Creates an archive from the file
|
||||||
\param ignoreCase Searching is performed without regarding the case
|
/** \param file File handle to use.
|
||||||
\param ignorePaths Files are searched for without checking for the directories
|
\param ignoreCase Searching is performed without regarding the case
|
||||||
\return Pointer to newly created archive, or 0 upon error. */
|
\param ignorePaths Files are searched for without checking for the directories
|
||||||
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
\return Pointer to newly created archive, or 0 upon error. */
|
||||||
};
|
virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace io
|
|
||||||
} // end namespace irr
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,89 +1,94 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "path.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! Provides a list of files and folders.
|
|
||||||
/** File lists usually contain a list of all files in a given folder,
|
//! Provides a list of files and folders.
|
||||||
but can also contain a complete directory structure. */
|
/** File lists usually contain a list of all files in a given folder,
|
||||||
class IFileList : public virtual IReferenceCounted
|
but can also contain a complete directory structure. */
|
||||||
{
|
class IFileList : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Get the number of files in the filelist.
|
public:
|
||||||
/** \return Amount of files and directories in the file list. */
|
//! Get the number of files in the filelist.
|
||||||
virtual u32 getFileCount() const = 0;
|
/** \return Amount of files and directories in the file list. */
|
||||||
|
virtual u32 getFileCount() const = 0;
|
||||||
//! Gets the name of a file in the list, based on an index.
|
|
||||||
/** The path is not included in this name. Use getFullFileName for this.
|
//! Gets the name of a file in the list, based on an index.
|
||||||
\param index is the zero based index of the file which name should
|
/** The path is not included in this name. Use getFullFileName for this.
|
||||||
be returned. The index must be less than the amount getFileCount() returns.
|
\param index is the zero based index of the file which name should
|
||||||
\return File name of the file. Returns 0, if an error occurred. */
|
be returned. The index must be less than the amount getFileCount() returns.
|
||||||
virtual const io::path& getFileName(u32 index) const = 0;
|
\return File name of the file. Returns 0, if an error occurred. */
|
||||||
|
virtual const io::path& getFileName(u32 index) const = 0;
|
||||||
//! Gets the full name of a file in the list including the path, based on an index.
|
|
||||||
/** \param index is the zero based index of the file which name should
|
//! Gets the full name of a file in the list including the path, based on an index.
|
||||||
be returned. The index must be less than the amount getFileCount() returns.
|
/** \param index is the zero based index of the file which name should
|
||||||
\return File name of the file. Returns 0 if an error occurred. */
|
be returned. The index must be less than the amount getFileCount() returns.
|
||||||
virtual const io::path& getFullFileName(u32 index) const = 0;
|
\return File name of the file. Returns 0 if an error occurred. */
|
||||||
|
virtual const io::path& getFullFileName(u32 index) const = 0;
|
||||||
//! Returns the size of a file in the file list, based on an index.
|
|
||||||
/** \param index is the zero based index of the file which should be returned.
|
//! Returns the size of a file in the file list, based on an index.
|
||||||
The index must be less than the amount getFileCount() returns.
|
/** \param index is the zero based index of the file which should be returned.
|
||||||
\return The size of the file in bytes. */
|
The index must be less than the amount getFileCount() returns.
|
||||||
virtual u32 getFileSize(u32 index) const = 0;
|
\return The size of the file in bytes. */
|
||||||
|
virtual u32 getFileSize(u32 index) const = 0;
|
||||||
//! Returns the file offset of a file in the file list, based on an index.
|
|
||||||
/** \param index is the zero based index of the file which should be returned.
|
//! Returns the file offset of a file in the file list, based on an index.
|
||||||
The index must be less than the amount getFileCount() returns.
|
/** \param index is the zero based index of the file which should be returned.
|
||||||
\return The offset of the file in bytes. */
|
The index must be less than the amount getFileCount() returns.
|
||||||
virtual u32 getFileOffset(u32 index) const = 0;
|
\return The offset of the file in bytes. */
|
||||||
|
virtual u32 getFileOffset(u32 index) const = 0;
|
||||||
//! Returns the ID of a file in the file list, based on an index.
|
|
||||||
/** This optional ID can be used to link the file list entry to information held
|
//! Returns the ID of a file in the file list, based on an index.
|
||||||
elsewhere. For example this could be an index in an IFileArchive, linking the entry
|
/** This optional ID can be used to link the file list entry to information held
|
||||||
to its data offset, uncompressed size and CRC.
|
elsewhere. For example this could be an index in an IFileArchive, linking the entry
|
||||||
\param index is the zero based index of the file which should be returned.
|
to its data offset, uncompressed size and CRC.
|
||||||
The index must be less than the amount getFileCount() returns.
|
\param index is the zero based index of the file which should be returned.
|
||||||
\return The ID of the file. */
|
The index must be less than the amount getFileCount() returns.
|
||||||
virtual u32 getID(u32 index) const = 0;
|
\return The ID of the file. */
|
||||||
|
virtual u32 getID(u32 index) const = 0;
|
||||||
//! Check if the file is a directory
|
|
||||||
/** \param index The zero based index which will be checked. The index
|
//! Check if the file is a directory
|
||||||
must be less than the amount getFileCount() returns.
|
/** \param index The zero based index which will be checked. The index
|
||||||
\return True if the file is a directory, else false. */
|
must be less than the amount getFileCount() returns.
|
||||||
virtual bool isDirectory(u32 index) const = 0;
|
\return True if the file is a directory, else false. */
|
||||||
|
virtual bool isDirectory(u32 index) const = 0;
|
||||||
//! Searches for a file or folder in the list
|
|
||||||
/** Searches for a file by name
|
//! Searches for a file or folder in the list
|
||||||
\param filename The name of the file to search for.
|
/** Searches for a file by name
|
||||||
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
\param filename The name of the file to search for.
|
||||||
\return Returns the index of the file in the file list, or -1 if
|
\param isFolder True if you are searching for a directory path, false if you are searching for a file
|
||||||
no matching name name was found. */
|
\return Returns the index of the file in the file list, or -1 if
|
||||||
virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0;
|
no matching name name was found. */
|
||||||
|
virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0;
|
||||||
//! Returns the base path of the file list
|
|
||||||
virtual const io::path& getPath() const = 0;
|
//! Returns the base path of the file list
|
||||||
|
virtual const io::path& getPath() const = 0;
|
||||||
//! Add as a file or folder to the list
|
|
||||||
/** \param fullPath The file name including path, from the root of the file list.
|
//! Add as a file or folder to the list
|
||||||
\param isDirectory True if this is a directory rather than a file.
|
/** \param fullPath The file name including path, from the root of the file list.
|
||||||
\param offset The file offset inside an archive
|
\param isDirectory True if this is a directory rather than a file.
|
||||||
\param size The size of the file in bytes.
|
\param offset The file offset inside an archive
|
||||||
\param id The ID of the file in the archive which owns it */
|
\param size The size of the file in bytes.
|
||||||
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0;
|
\param id The ID of the file in the archive which owns it */
|
||||||
|
virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0;
|
||||||
//! Sorts the file list. You should call this after adding any items to the file list
|
|
||||||
virtual void sort() = 0;
|
//! Sorts the file list. You should call this after adding any items to the file list
|
||||||
};
|
virtual void sort() = 0;
|
||||||
|
};
|
||||||
} // end namespace irr
|
|
||||||
} // end namespace io
|
} // end namespace irr
|
||||||
|
} // end namespace io
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,269 +1,273 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IFileArchive.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "IFileArchive.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
class IVideoDriver;
|
{
|
||||||
} // end namespace video
|
class IVideoDriver;
|
||||||
namespace io
|
} // end namespace video
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
class IReadFile;
|
|
||||||
class IWriteFile;
|
class IReadFile;
|
||||||
class IFileList;
|
class IWriteFile;
|
||||||
class IAttributes;
|
class IFileList;
|
||||||
|
class IAttributes;
|
||||||
|
|
||||||
//! The FileSystem manages files and archives and provides access to them.
|
|
||||||
/** It manages where files are, so that modules which use the the IO do not
|
//! The FileSystem manages files and archives and provides access to them.
|
||||||
need to know where every file is located. A file could be in a .zip-Archive or
|
/** It manages where files are, so that modules which use the the IO do not
|
||||||
as file on disk, using the IFileSystem makes no difference to this. */
|
need to know where every file is located. A file could be in a .zip-Archive or
|
||||||
class IFileSystem : public virtual IReferenceCounted
|
as file on disk, using the IFileSystem makes no difference to this. */
|
||||||
{
|
class IFileSystem : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Opens a file for read access.
|
|
||||||
/** \param filename: Name of file to open.
|
//! Opens a file for read access.
|
||||||
\return Pointer to the created file interface.
|
/** \param filename: Name of file to open.
|
||||||
The returned pointer should be dropped when no longer needed.
|
\return Pointer to the created file interface.
|
||||||
See IReferenceCounted::drop() for more information. */
|
The returned pointer should be dropped when no longer needed.
|
||||||
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IReadFile* createAndOpenFile(const path& filename) =0;
|
||||||
//! Creates an IReadFile interface for accessing memory like a file.
|
|
||||||
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
//! Creates an IReadFile interface for accessing memory like a file.
|
||||||
\param memory: A pointer to the start of the file in memory
|
/** This allows you to use a pointer to memory where an IReadFile is requested.
|
||||||
\param len: The length of the memory in bytes
|
\param memory: A pointer to the start of the file in memory
|
||||||
\param fileName: The name given to this file
|
\param len: The length of the memory in bytes
|
||||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
\param fileName: The name given to this file
|
||||||
along with the IReadFile when it is dropped.
|
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||||
\return Pointer to the created file interface.
|
along with the IReadFile when it is dropped.
|
||||||
The returned pointer should be dropped when no longer needed.
|
\return Pointer to the created file interface.
|
||||||
See IReferenceCounted::drop() for more information.
|
The returned pointer should be dropped when no longer needed.
|
||||||
*/
|
See IReferenceCounted::drop() for more information.
|
||||||
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
*/
|
||||||
|
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||||
//! Creates an IReadFile interface for accessing files inside files.
|
|
||||||
/** This is useful e.g. for archives.
|
//! Creates an IReadFile interface for accessing files inside files.
|
||||||
\param fileName: The name given to this file
|
/** This is useful e.g. for archives.
|
||||||
\param alreadyOpenedFile: Pointer to the enclosing file
|
\param fileName: The name given to this file
|
||||||
\param pos: Start of the file inside alreadyOpenedFile
|
\param alreadyOpenedFile: Pointer to the enclosing file
|
||||||
\param areaSize: The length of the file
|
\param pos: Start of the file inside alreadyOpenedFile
|
||||||
\return A pointer to the created file interface.
|
\param areaSize: The length of the file
|
||||||
The returned pointer should be dropped when no longer needed.
|
\return A pointer to the created file interface.
|
||||||
See IReferenceCounted::drop() for more information.
|
The returned pointer should be dropped when no longer needed.
|
||||||
*/
|
See IReferenceCounted::drop() for more information.
|
||||||
virtual IReadFile* createLimitReadFile(const path& fileName,
|
*/
|
||||||
IReadFile* alreadyOpenedFile, long pos, long areaSize) =0;
|
virtual IReadFile* createLimitReadFile(const path& fileName,
|
||||||
|
IReadFile* alreadyOpenedFile, long pos, long areaSize) =0;
|
||||||
//! Creates an IWriteFile interface for accessing memory like a file.
|
|
||||||
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
//! Creates an IWriteFile interface for accessing memory like a file.
|
||||||
You are responsible for allocating enough memory.
|
/** This allows you to use a pointer to memory where an IWriteFile is requested.
|
||||||
\param memory: A pointer to the start of the file in memory (allocated by you)
|
You are responsible for allocating enough memory.
|
||||||
\param len: The length of the memory in bytes
|
\param memory: A pointer to the start of the file in memory (allocated by you)
|
||||||
\param fileName: The name given to this file
|
\param len: The length of the memory in bytes
|
||||||
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
\param fileName: The name given to this file
|
||||||
along with the IWriteFile when it is dropped.
|
\param deleteMemoryWhenDropped: True if the memory should be deleted
|
||||||
\return Pointer to the created file interface.
|
along with the IWriteFile when it is dropped.
|
||||||
The returned pointer should be dropped when no longer needed.
|
\return Pointer to the created file interface.
|
||||||
See IReferenceCounted::drop() for more information.
|
The returned pointer should be dropped when no longer needed.
|
||||||
*/
|
See IReferenceCounted::drop() for more information.
|
||||||
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
*/
|
||||||
|
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0;
|
||||||
|
|
||||||
//! Opens a file for write access.
|
|
||||||
/** \param filename: Name of file to open.
|
//! Opens a file for write access.
|
||||||
\param append: If the file already exist, all write operations are
|
/** \param filename: Name of file to open.
|
||||||
appended to the file.
|
\param append: If the file already exist, all write operations are
|
||||||
\return Pointer to the created file interface. 0 is returned, if the
|
appended to the file.
|
||||||
file could not created or opened for writing.
|
\return Pointer to the created file interface. 0 is returned, if the
|
||||||
The returned pointer should be dropped when no longer needed.
|
file could not created or opened for writing.
|
||||||
See IReferenceCounted::drop() for more information. */
|
The returned pointer should be dropped when no longer needed.
|
||||||
virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0;
|
||||||
//! Adds an archive to the file system.
|
|
||||||
/** After calling this, the Irrlicht Engine will also search and open
|
//! Adds an archive to the file system.
|
||||||
files directly from this archive. This is useful for hiding data from
|
/** After calling this, the Irrlicht Engine will also search and open
|
||||||
the end user, speeding up file access and making it possible to access
|
files directly from this archive. This is useful for hiding data from
|
||||||
for example Quake3 .pk3 files, which are just renamed .zip files. By
|
the end user, speeding up file access and making it possible to access
|
||||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
for example Quake3 .pk3 files, which are just renamed .zip files. By
|
||||||
archives. You can provide your own archive types by implementing
|
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
archives. You can provide your own archive types by implementing
|
||||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||||
techniques lzma and bzip2.
|
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||||
\param filename: Filename of the archive to add to the file system.
|
techniques lzma and bzip2.
|
||||||
\param ignoreCase: If set to true, files in the archive can be accessed without
|
\param filename: Filename of the archive to add to the file system.
|
||||||
writing all letters in the right case.
|
\param ignoreCase: If set to true, files in the archive can be accessed without
|
||||||
\param ignorePaths: If set to true, files in the added archive can be accessed
|
writing all letters in the right case.
|
||||||
without its complete path.
|
\param ignorePaths: If set to true, files in the added archive can be accessed
|
||||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
without its complete path.
|
||||||
the type of archive will depend on the extension of the file name. If
|
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||||
you use a different extension then you can use this parameter to force
|
the type of archive will depend on the extension of the file name. If
|
||||||
a specific type of archive.
|
you use a different extension then you can use this parameter to force
|
||||||
\param password An optional password, which is used in case of encrypted archives.
|
a specific type of archive.
|
||||||
\param retArchive A pointer that will be set to the archive that is added.
|
\param password An optional password, which is used in case of encrypted archives.
|
||||||
\return True if the archive was added successfully, false if not. */
|
\param retArchive A pointer that will be set to the archive that is added.
|
||||||
virtual bool addFileArchive(const path& filename, bool ignoreCase=true,
|
\return True if the archive was added successfully, false if not. */
|
||||||
bool ignorePaths=true,
|
virtual bool addFileArchive(const path& filename, bool ignoreCase=true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
bool ignorePaths=true,
|
||||||
const core::stringc& password="",
|
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||||
IFileArchive** retArchive=0) =0;
|
const core::stringc& password="",
|
||||||
|
IFileArchive** retArchive=0) =0;
|
||||||
//! Adds an archive to the file system.
|
|
||||||
/** After calling this, the Irrlicht Engine will also search and open
|
//! Adds an archive to the file system.
|
||||||
files directly from this archive. This is useful for hiding data from
|
/** After calling this, the Irrlicht Engine will also search and open
|
||||||
the end user, speeding up file access and making it possible to access
|
files directly from this archive. This is useful for hiding data from
|
||||||
for example Quake3 .pk3 files, which are just renamed .zip files. By
|
the end user, speeding up file access and making it possible to access
|
||||||
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
for example Quake3 .pk3 files, which are just renamed .zip files. By
|
||||||
archives. You can provide your own archive types by implementing
|
default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as
|
||||||
IArchiveLoader and passing an instance to addArchiveLoader.
|
archives. You can provide your own archive types by implementing
|
||||||
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
IArchiveLoader and passing an instance to addArchiveLoader.
|
||||||
techniques lzma and bzip2.
|
Irrlicht supports AES-encrypted zip files, and the advanced compression
|
||||||
If you want to add a directory as an archive, prefix its name with a
|
techniques lzma and bzip2.
|
||||||
slash in order to let Irrlicht recognize it as a folder mount (mypath/).
|
If you want to add a directory as an archive, prefix its name with a
|
||||||
Using this technique one can build up a search order, because archives
|
slash in order to let Irrlicht recognize it as a folder mount (mypath/).
|
||||||
are read first, and can be used more easily with relative filenames.
|
Using this technique one can build up a search order, because archives
|
||||||
\param file: Archive to add to the file system.
|
are read first, and can be used more easily with relative filenames.
|
||||||
\param ignoreCase: If set to true, files in the archive can be accessed without
|
\param file: Archive to add to the file system.
|
||||||
writing all letters in the right case.
|
\param ignoreCase: If set to true, files in the archive can be accessed without
|
||||||
\param ignorePaths: If set to true, files in the added archive can be accessed
|
writing all letters in the right case.
|
||||||
without its complete path.
|
\param ignorePaths: If set to true, files in the added archive can be accessed
|
||||||
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
without its complete path.
|
||||||
the type of archive will depend on the extension of the file name. If
|
\param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then
|
||||||
you use a different extension then you can use this parameter to force
|
the type of archive will depend on the extension of the file name. If
|
||||||
a specific type of archive.
|
you use a different extension then you can use this parameter to force
|
||||||
\param password An optional password, which is used in case of encrypted archives.
|
a specific type of archive.
|
||||||
\param retArchive A pointer that will be set to the archive that is added.
|
\param password An optional password, which is used in case of encrypted archives.
|
||||||
\return True if the archive was added successfully, false if not. */
|
\param retArchive A pointer that will be set to the archive that is added.
|
||||||
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
\return True if the archive was added successfully, false if not. */
|
||||||
bool ignorePaths=true,
|
virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true,
|
||||||
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
bool ignorePaths=true,
|
||||||
const core::stringc& password="",
|
E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN,
|
||||||
IFileArchive** retArchive=0) =0;
|
const core::stringc& password="",
|
||||||
|
IFileArchive** retArchive=0) =0;
|
||||||
//! Adds an archive to the file system.
|
|
||||||
/** \param archive: The archive to add to the file system.
|
//! Adds an archive to the file system.
|
||||||
\return True if the archive was added successfully, false if not. */
|
/** \param archive: The archive to add to the file system.
|
||||||
virtual bool addFileArchive(IFileArchive* archive) =0;
|
\return True if the archive was added successfully, false if not. */
|
||||||
|
virtual bool addFileArchive(IFileArchive* archive) =0;
|
||||||
//! Get the number of archives currently attached to the file system
|
|
||||||
virtual u32 getFileArchiveCount() const =0;
|
//! Get the number of archives currently attached to the file system
|
||||||
|
virtual u32 getFileArchiveCount() const =0;
|
||||||
//! Removes an archive from the file system.
|
|
||||||
/** This will close the archive and free any file handles, but will not
|
//! Removes an archive from the file system.
|
||||||
close resources which have already been loaded and are now cached, for
|
/** This will close the archive and free any file handles, but will not
|
||||||
example textures and meshes.
|
close resources which have already been loaded and are now cached, for
|
||||||
\param index: The index of the archive to remove
|
example textures and meshes.
|
||||||
\return True on success, false on failure */
|
\param index: The index of the archive to remove
|
||||||
virtual bool removeFileArchive(u32 index) =0;
|
\return True on success, false on failure */
|
||||||
|
virtual bool removeFileArchive(u32 index) =0;
|
||||||
//! Removes an archive from the file system.
|
|
||||||
/** This will close the archive and free any file handles, but will not
|
//! Removes an archive from the file system.
|
||||||
close resources which have already been loaded and are now cached, for
|
/** This will close the archive and free any file handles, but will not
|
||||||
example textures and meshes. Note that a relative filename might be
|
close resources which have already been loaded and are now cached, for
|
||||||
interpreted differently on each call, depending on the current working
|
example textures and meshes. Note that a relative filename might be
|
||||||
directory. In case you want to remove an archive that was added using
|
interpreted differently on each call, depending on the current working
|
||||||
a relative path name, you have to change to the same working directory
|
directory. In case you want to remove an archive that was added using
|
||||||
again. This means, that the filename given on creation is not an
|
a relative path name, you have to change to the same working directory
|
||||||
identifier for the archive, but just a usual filename that is used for
|
again. This means, that the filename given on creation is not an
|
||||||
locating the archive to work with.
|
identifier for the archive, but just a usual filename that is used for
|
||||||
\param filename The archive pointed to by the name will be removed
|
locating the archive to work with.
|
||||||
\return True on success, false on failure */
|
\param filename The archive pointed to by the name will be removed
|
||||||
virtual bool removeFileArchive(const path& filename) =0;
|
\return True on success, false on failure */
|
||||||
|
virtual bool removeFileArchive(const path& filename) =0;
|
||||||
//! Removes an archive from the file system.
|
|
||||||
/** This will close the archive and free any file handles, but will not
|
//! Removes an archive from the file system.
|
||||||
close resources which have already been loaded and are now cached, for
|
/** This will close the archive and free any file handles, but will not
|
||||||
example textures and meshes.
|
close resources which have already been loaded and are now cached, for
|
||||||
\param archive The archive to remove.
|
example textures and meshes.
|
||||||
\return True on success, false on failure */
|
\param archive The archive to remove.
|
||||||
virtual bool removeFileArchive(const IFileArchive* archive) =0;
|
\return True on success, false on failure */
|
||||||
|
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 relative: The relative change in position, archives with a lower index are searched first */
|
\param sourceIndex: The index of the archive to change
|
||||||
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0;
|
\param relative: The relative change in position, archives with a lower index are searched first */
|
||||||
|
virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0;
|
||||||
//! Get the archive at a given index.
|
|
||||||
virtual IFileArchive* getFileArchive(u32 index) =0;
|
//! Get the archive at a given index.
|
||||||
|
virtual IFileArchive* getFileArchive(u32 index) =0;
|
||||||
//! Adds an external archive loader to the engine.
|
|
||||||
/** Use this function to add support for new archive types to the
|
//! Adds an external archive loader to the engine.
|
||||||
engine, for example proprietary or encrypted file storage. */
|
/** Use this function to add support for new archive types to the
|
||||||
virtual void addArchiveLoader(IArchiveLoader* loader) =0;
|
engine, for example proprietary or encrypted file storage. */
|
||||||
|
virtual void addArchiveLoader(IArchiveLoader* loader) =0;
|
||||||
//! Gets the number of archive loaders currently added
|
|
||||||
virtual u32 getArchiveLoaderCount() const = 0;
|
//! Gets the number of archive loaders currently added
|
||||||
|
virtual u32 getArchiveLoaderCount() const = 0;
|
||||||
//! Retrieve the given archive loader
|
|
||||||
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
//! Retrieve the given archive loader
|
||||||
array index.
|
/** \param index The index of the loader to retrieve. This parameter is an 0-based
|
||||||
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
array index.
|
||||||
virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0;
|
\return A pointer to the specified loader, 0 if the index is incorrect. */
|
||||||
|
virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0;
|
||||||
//! Get the current working directory.
|
|
||||||
/** \return Current working directory as a string. */
|
//! Get the current working directory.
|
||||||
virtual const path& getWorkingDirectory() =0;
|
/** \return Current working directory as a string. */
|
||||||
|
virtual const path& getWorkingDirectory() =0;
|
||||||
//! Changes the current working directory.
|
|
||||||
/** \param newDirectory: A string specifying the new working directory.
|
//! Changes the current working directory.
|
||||||
The string is operating system dependent. Under Windows it has
|
/** \param newDirectory: A string specifying the new working directory.
|
||||||
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
The string is operating system dependent. Under Windows it has
|
||||||
\return True if successful, otherwise false. */
|
the form "<drive>:\<directory>\<sudirectory>\<..>". An example would be: "C:\Windows\"
|
||||||
virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0;
|
\return True if successful, otherwise false. */
|
||||||
|
virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0;
|
||||||
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
|
||||||
/** \param filename Possibly relative file or directory name to query.
|
//! Converts a relative path to an absolute (unique) path, resolving symbolic links if required
|
||||||
\result Absolute filename which points to the same file. */
|
/** \param filename Possibly relative file or directory name to query.
|
||||||
virtual path getAbsolutePath(const path& filename) const =0;
|
\result Absolute filename which points to the same file. */
|
||||||
|
virtual path getAbsolutePath(const path& filename) const =0;
|
||||||
//! Get the directory a file is located in.
|
|
||||||
/** \param filename: The file to get the directory from.
|
//! Get the directory a file is located in.
|
||||||
\return String containing the directory of the file. */
|
/** \param filename: The file to get the directory from.
|
||||||
virtual path getFileDir(const path& filename) const =0;
|
\return String containing the directory of the file. */
|
||||||
|
virtual path getFileDir(const path& filename) const =0;
|
||||||
//! Get the base part of a filename, i.e. the name without the directory part.
|
|
||||||
/** If no directory is prefixed, the full name is returned.
|
//! Get the base part of a filename, i.e. the name without the directory part.
|
||||||
\param filename: The file to get the basename from
|
/** If no directory is prefixed, the full name is returned.
|
||||||
\param keepExtension True if filename with extension is returned otherwise everything
|
\param filename: The file to get the basename from
|
||||||
after the final '.' is removed as well. */
|
\param keepExtension True if filename with extension is returned otherwise everything
|
||||||
virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0;
|
after the final '.' is removed as well. */
|
||||||
|
virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0;
|
||||||
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
|
||||||
virtual path& flattenFilename(path& directory, const path& root="/") const =0;
|
//! flatten a path and file name for example: "/you/me/../." becomes "/you"
|
||||||
|
virtual path& flattenFilename(path& directory, const path& root="/") const =0;
|
||||||
//! Get the relative filename, relative to the given directory
|
|
||||||
virtual path getRelativeFilename(const path& filename, const path& directory) const =0;
|
//! Get the relative filename, relative to the given directory
|
||||||
|
virtual path getRelativeFilename(const path& filename, const path& directory) const =0;
|
||||||
//! Creates a list of files and directories in the current working directory and returns it.
|
|
||||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
//! Creates a list of files and directories in the current working directory and returns it.
|
||||||
it has to be deleted using its IFileList::drop() method.
|
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||||
See IReferenceCounted::drop() for more information. */
|
it has to be deleted using its IFileList::drop() method.
|
||||||
virtual IFileList* createFileList() =0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IFileList* createFileList() =0;
|
||||||
//! Creates an empty filelist
|
|
||||||
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
//! Creates an empty filelist
|
||||||
it has to be deleted using its IFileList::drop() method.
|
/** \return a Pointer to the created IFileList is returned. After the list has been used
|
||||||
See IReferenceCounted::drop() for more information. */
|
it has to be deleted using its IFileList::drop() method.
|
||||||
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0;
|
||||||
//! Set the active type of file system.
|
|
||||||
virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0;
|
//! Set the active type of file system.
|
||||||
|
virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0;
|
||||||
//! Determines if a file exists and could be opened.
|
|
||||||
/** \param filename is the string identifying the file which should be tested for existence.
|
//! Determines if a file exists and could be opened.
|
||||||
\return True if file exists, and false if it does not exist or an error occurred. */
|
/** \param filename is the string identifying the file which should be tested for existence.
|
||||||
virtual bool existFile(const path& filename) const =0;
|
\return True if file exists, and false if it does not exist or an error occurred. */
|
||||||
};
|
virtual bool existFile(const path& filename) const =0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace io
|
|
||||||
} // end namespace irr
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,371 +1,455 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "EMaterialTypes.h"
|
#include "EShaderTypes.h"
|
||||||
#include "EPrimitiveTypes.h"
|
#include "EMaterialTypes.h"
|
||||||
#include "path.h"
|
#include "EPrimitiveTypes.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace io
|
|
||||||
{
|
namespace io
|
||||||
class IReadFile;
|
{
|
||||||
} // end namespace io
|
class IReadFile;
|
||||||
|
} // end namespace io
|
||||||
namespace video
|
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
class IVideoDriver;
|
|
||||||
class IShaderConstantSetCallBack;
|
class IVideoDriver;
|
||||||
|
class IShaderConstantSetCallBack;
|
||||||
//! Interface making it possible to create and use programs running on the GPU.
|
|
||||||
class IGPUProgrammingServices
|
//! Interface making it possible to create and use programs running on the GPU.
|
||||||
{
|
class IGPUProgrammingServices
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Destructor
|
|
||||||
virtual ~IGPUProgrammingServices() {}
|
//! Destructor
|
||||||
|
virtual ~IGPUProgrammingServices() {}
|
||||||
//! Adds a new high-level shading material renderer to the VideoDriver.
|
|
||||||
/** Currently only HLSL/D3D9 and GLSL/OpenGL are supported.
|
//! Adds a new high-level shading material renderer to the VideoDriver.
|
||||||
\param vertexShaderProgram String containing the source of the vertex
|
/** Currently only HLSL/D3D9 and GLSL/OpenGL are supported.
|
||||||
shader program. This can be 0 if no vertex program shall be used.
|
\param vertexShaderProgram String containing the source of the vertex
|
||||||
\param vertexShaderEntryPointName Name of the entry function of the
|
shader program. This can be 0 if no vertex program shall be used.
|
||||||
vertexShaderProgram (p.e. "main")
|
\param vertexShaderEntryPointName Name of the entry function of the
|
||||||
\param vsCompileTarget Vertex shader version the high level shader
|
vertexShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param vsCompileTarget Vertex shader version the high level shader
|
||||||
\param pixelShaderProgram String containing the source of the pixel
|
shall be compiled to.
|
||||||
shader program. This can be 0 if no pixel shader shall be used.
|
\param pixelShaderProgram String containing the source of the pixel
|
||||||
\param pixelShaderEntryPointName Entry name of the function of the
|
shader program. This can be 0 if no pixel shader shall be used.
|
||||||
pixelShaderProgram (p.e. "main")
|
\param pixelShaderEntryPointName Entry name of the function of the
|
||||||
\param psCompileTarget Pixel shader version the high level shader
|
pixelShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param psCompileTarget Pixel shader version the high level shader
|
||||||
\param geometryShaderProgram String containing the source of the
|
shall be compiled to.
|
||||||
geometry shader program. This can be 0 if no geometry shader shall be
|
\param geometryShaderProgram String containing the source of the
|
||||||
used.
|
geometry shader program. This can be 0 if no geometry shader shall be
|
||||||
\param geometryShaderEntryPointName Entry name of the function of the
|
used.
|
||||||
geometryShaderProgram (p.e. "main")
|
\param geometryShaderEntryPointName Entry name of the function of the
|
||||||
\param gsCompileTarget Geometry shader version the high level shader
|
geometryShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param gsCompileTarget Geometry shader version the high level shader
|
||||||
\param inType Type of vertices passed to geometry shader
|
shall be compiled to.
|
||||||
\param outType Type of vertices created by geometry shader
|
\param inType Type of vertices passed to geometry shader
|
||||||
\param verticesOut Maximal number of vertices created by geometry
|
\param outType Type of vertices created by geometry shader
|
||||||
shader. If 0, maximal number supported is assumed.
|
\param verticesOut Maximal number of vertices created by geometry
|
||||||
\param callback Pointer to an implementation of
|
shader. If 0, maximal number supported is assumed.
|
||||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
\param callback Pointer to an implementation of
|
||||||
pixel, and geometry shader program constants. Set this to 0 if you
|
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||||
don't need this.
|
pixel, and geometry shader program constants. Set this to 0 if you
|
||||||
\param baseMaterial Base material which renderstates will be used to
|
don't need this.
|
||||||
shade the material.
|
\param baseMaterial Base material which renderstates will be used to
|
||||||
\param userData a user data int. This int can be set to any value and
|
shade the material.
|
||||||
will be set as parameter in the callback method when calling
|
\param userData a user data int. This int can be set to any value and
|
||||||
OnSetConstants(). In this way it is easily possible to use the same
|
will be set as parameter in the callback method when calling
|
||||||
callback method for multiple materials and distinguish between them
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
during the call.
|
callback method for multiple materials and distinguish between them
|
||||||
\return Number of the material type which can be set in
|
during the call.
|
||||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
\return Number of the material type which can be set in
|
||||||
occurred, e.g. if a shader program could not be compiled or a compile
|
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||||
target is not reachable. The error strings are then printed to the
|
occurred, e.g. if a shader program could not be compiled or a compile
|
||||||
error log and can be caught with a custom event receiver. */
|
target is not reachable. The error strings are then printed to the
|
||||||
virtual s32 addHighLevelShaderMaterial(
|
error log and can be caught with a custom event receiver. */
|
||||||
const c8* vertexShaderProgram,
|
virtual s32 addHighLevelShaderMaterial(
|
||||||
const c8* vertexShaderEntryPointName,
|
const c8* vertexShaderProgram,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
const c8* vertexShaderEntryPointName,
|
||||||
const c8* pixelShaderProgram,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
const c8* pixelShaderEntryPointName,
|
const c8* pixelShaderProgram,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
const c8* pixelShaderEntryPointName,
|
||||||
const c8* geometryShaderProgram,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
const c8* geometryShaderEntryPointName = "main",
|
const c8* geometryShaderProgram,
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
u32 verticesOut = 0,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
u32 verticesOut = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0) = 0;
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
//! convenience function for use without geometry shaders
|
|
||||||
s32 addHighLevelShaderMaterial(
|
//! convenience function for use without geometry shaders
|
||||||
const c8* vertexShaderProgram,
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8* vertexShaderEntryPointName="main",
|
const c8* vertexShaderProgram,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
|
const c8* vertexShaderEntryPointName="main",
|
||||||
const c8* pixelShaderProgram=0,
|
E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
|
||||||
const c8* pixelShaderEntryPointName="main",
|
const c8* pixelShaderProgram=0,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
|
const c8* pixelShaderEntryPointName="main",
|
||||||
IShaderConstantSetCallBack* callback=0,
|
E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
|
||||||
E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback=0,
|
||||||
s32 userData=0)
|
E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
|
||||||
{
|
s32 userData=0)
|
||||||
return addHighLevelShaderMaterial(
|
{
|
||||||
vertexShaderProgram, vertexShaderEntryPointName,
|
return addHighLevelShaderMaterial(
|
||||||
vsCompileTarget, pixelShaderProgram,
|
vertexShaderProgram, vertexShaderEntryPointName,
|
||||||
pixelShaderEntryPointName, psCompileTarget,
|
vsCompileTarget, pixelShaderProgram,
|
||||||
0, "main", EGST_GS_4_0,
|
pixelShaderEntryPointName, psCompileTarget,
|
||||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
0, "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! convenience function for use with many defaults, without geometry shader
|
|
||||||
/** All shader names are set to "main" and compile targets are shader
|
//! convenience function for use with many defaults, without geometry shader
|
||||||
type 1.1.
|
/** All shader names are set to "main" and compile targets are shader
|
||||||
*/
|
type 1.1.
|
||||||
s32 addHighLevelShaderMaterial(
|
*/
|
||||||
const c8* vertexShaderProgram,
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8* pixelShaderProgram=0,
|
const c8* vertexShaderProgram,
|
||||||
IShaderConstantSetCallBack* callback=0,
|
const c8* pixelShaderProgram=0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback=0,
|
||||||
s32 userData=0)
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData=0)
|
||||||
return addHighLevelShaderMaterial(
|
{
|
||||||
vertexShaderProgram, "main",
|
return addHighLevelShaderMaterial(
|
||||||
EVST_VS_1_1, pixelShaderProgram,
|
vertexShaderProgram, "main",
|
||||||
"main", EPST_PS_1_1,
|
EVST_VS_1_1, pixelShaderProgram,
|
||||||
0, "main", EGST_GS_4_0,
|
"main", EPST_PS_1_1,
|
||||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
0, "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! convenience function for use with many defaults, with geometry shader
|
|
||||||
/** All shader names are set to "main" and compile targets are shader
|
//! convenience function for use with many defaults, with geometry shader
|
||||||
type 1.1 and geometry shader 4.0.
|
/** All shader names are set to "main" and compile targets are shader
|
||||||
*/
|
type 1.1 and geometry shader 4.0.
|
||||||
s32 addHighLevelShaderMaterial(
|
*/
|
||||||
const c8* vertexShaderProgram,
|
s32 addHighLevelShaderMaterial(
|
||||||
const c8* pixelShaderProgram = 0,
|
const c8* vertexShaderProgram,
|
||||||
const c8* geometryShaderProgram = 0,
|
const c8* pixelShaderProgram = 0,
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
const c8* geometryShaderProgram = 0,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
u32 verticesOut = 0,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
u32 verticesOut = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0 )
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData = 0 )
|
||||||
return addHighLevelShaderMaterial(
|
{
|
||||||
vertexShaderProgram, "main",
|
return addHighLevelShaderMaterial(
|
||||||
EVST_VS_1_1, pixelShaderProgram,
|
vertexShaderProgram, "main",
|
||||||
"main", EPST_PS_1_1,
|
EVST_VS_1_1, pixelShaderProgram,
|
||||||
geometryShaderProgram, "main", EGST_GS_4_0,
|
"main", EPST_PS_1_1,
|
||||||
inType, outType, verticesOut,
|
geometryShaderProgram, "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
inType, outType, verticesOut,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
|
||||||
/** \param vertexShaderProgramFileName Text file containing the source
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
of the vertex shader program. Set to empty string if no vertex shader
|
/** \param vertexShaderProgramFileName Text file containing the source
|
||||||
shall be created.
|
of the vertex shader program. Set to empty string if no vertex shader
|
||||||
\param vertexShaderEntryPointName Name of the entry function of the
|
shall be created.
|
||||||
vertexShaderProgram (p.e. "main")
|
\param vertexShaderEntryPointName Name of the entry function of the
|
||||||
\param vsCompileTarget Vertex shader version the high level shader
|
vertexShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param vsCompileTarget Vertex shader version the high level shader
|
||||||
\param pixelShaderProgramFileName Text file containing the source of
|
shall be compiled to.
|
||||||
the pixel shader program. Set to empty string if no pixel shader shall
|
\param pixelShaderProgramFileName Text file containing the source of
|
||||||
be created.
|
the pixel shader program. Set to empty string if no pixel shader shall
|
||||||
\param pixelShaderEntryPointName Entry name of the function of the
|
be created.
|
||||||
pixelShaderProgram (p.e. "main")
|
\param pixelShaderEntryPointName Entry name of the function of the
|
||||||
\param psCompileTarget Pixel shader version the high level shader
|
pixelShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param psCompileTarget Pixel shader version the high level shader
|
||||||
\param geometryShaderProgramFileName Name of the source of
|
shall be compiled to.
|
||||||
the geometry shader program. Set to empty string if no geometry shader
|
\param geometryShaderProgramFileName Name of the source of
|
||||||
shall be created.
|
the geometry shader program. Set to empty string if no geometry shader
|
||||||
\param geometryShaderEntryPointName Entry name of the function of the
|
shall be created.
|
||||||
geometryShaderProgram (p.e. "main")
|
\param geometryShaderEntryPointName Entry name of the function of the
|
||||||
\param gsCompileTarget Geometry shader version the high level shader
|
geometryShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param gsCompileTarget Geometry shader version the high level shader
|
||||||
\param inType Type of vertices passed to geometry shader
|
shall be compiled to.
|
||||||
\param outType Type of vertices created by geometry shader
|
\param inType Type of vertices passed to geometry shader
|
||||||
\param verticesOut Maximal number of vertices created by geometry
|
\param outType Type of vertices created by geometry shader
|
||||||
shader. If 0, maximal number supported is assumed.
|
\param verticesOut Maximal number of vertices created by geometry
|
||||||
\param callback Pointer to an implementation of
|
shader. If 0, maximal number supported is assumed.
|
||||||
IShaderConstantSetCallBack in which you can set the needed vertex,
|
\param callback Pointer to an implementation of
|
||||||
pixel, and geometry shader program constants. Set this to 0 if you
|
IShaderConstantSetCallBack in which you can set the needed vertex,
|
||||||
don't need this.
|
pixel, and geometry shader program constants. Set this to 0 if you
|
||||||
\param baseMaterial Base material which renderstates will be used to
|
don't need this.
|
||||||
shade the material.
|
\param baseMaterial Base material which renderstates will be used to
|
||||||
\param userData a user data int. This int can be set to any value and
|
shade the material.
|
||||||
will be set as parameter in the callback method when calling
|
\param userData a user data int. This int can be set to any value and
|
||||||
OnSetConstants(). In this way it is easily possible to use the same
|
will be set as parameter in the callback method when calling
|
||||||
callback method for multiple materials and distinguish between them
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
during the call.
|
callback method for multiple materials and distinguish between them
|
||||||
\return Number of the material type which can be set in
|
during the call.
|
||||||
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
\return Number of the material type which can be set in
|
||||||
occurred, e.g. if a shader program could not be compiled or a compile
|
SMaterial::MaterialType to use the renderer. -1 is returned if an error
|
||||||
target is not reachable. The error strings are then printed to the
|
occurred, e.g. if a shader program could not be compiled or a compile
|
||||||
error log and can be caught with a custom event receiver. */
|
target is not reachable. The error strings are then printed to the
|
||||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
error log and can be caught with a custom event receiver. */
|
||||||
const io::path& vertexShaderProgramFileName,
|
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const c8* vertexShaderEntryPointName,
|
const io::path& vertexShaderProgramFileName,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
const c8* vertexShaderEntryPointName,
|
||||||
const io::path& pixelShaderProgramFileName,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
const c8* pixelShaderEntryPointName,
|
const io::path& pixelShaderProgramFileName,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
const c8* pixelShaderEntryPointName,
|
||||||
const io::path& geometryShaderProgramFileName,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
const c8* geometryShaderEntryPointName = "main",
|
const io::path& geometryShaderProgramFileName,
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
u32 verticesOut = 0,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
u32 verticesOut = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0) = 0;
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
//! convenience function for use without geometry shaders
|
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
//! convenience function for use without geometry shaders
|
||||||
const io::path& vertexShaderProgramFileName,
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const c8* vertexShaderEntryPointName = "main",
|
const io::path& vertexShaderProgramFileName,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
const c8* vertexShaderEntryPointName = "main",
|
||||||
const io::path& pixelShaderProgramFileName = "",
|
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||||
const c8* pixelShaderEntryPointName = "main",
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
const c8* pixelShaderEntryPointName = "main",
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0)
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData = 0)
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
{
|
||||||
vertexShaderProgramFileName, vertexShaderEntryPointName,
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
vsCompileTarget, pixelShaderProgramFileName,
|
vertexShaderProgramFileName, vertexShaderEntryPointName,
|
||||||
pixelShaderEntryPointName, psCompileTarget,
|
vsCompileTarget, pixelShaderProgramFileName,
|
||||||
"", "main", EGST_GS_4_0,
|
pixelShaderEntryPointName, psCompileTarget,
|
||||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
"", "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! convenience function for use with many defaults, without geometry shader
|
|
||||||
/** All shader names are set to "main" and compile targets are shader
|
//! convenience function for use with many defaults, without geometry shader
|
||||||
type 1.1.
|
/** All shader names are set to "main" and compile targets are shader
|
||||||
*/
|
type 1.1.
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
*/
|
||||||
const io::path& vertexShaderProgramFileName,
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path& pixelShaderProgramFileName = "",
|
const io::path& vertexShaderProgramFileName,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0 )
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData = 0 )
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
{
|
||||||
vertexShaderProgramFileName, "main",
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
vertexShaderProgramFileName, "main",
|
||||||
"main", EPST_PS_1_1,
|
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||||
"", "main", EGST_GS_4_0,
|
"main", EPST_PS_1_1,
|
||||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
"", "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! convenience function for use with many defaults, with geometry shader
|
|
||||||
/** All shader names are set to "main" and compile targets are shader
|
//! convenience function for use with many defaults, with geometry shader
|
||||||
type 1.1 and geometry shader 4.0.
|
/** All shader names are set to "main" and compile targets are shader
|
||||||
*/
|
type 1.1 and geometry shader 4.0.
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
*/
|
||||||
const io::path& vertexShaderProgramFileName,
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const io::path& pixelShaderProgramFileName = "",
|
const io::path& vertexShaderProgramFileName,
|
||||||
const io::path& geometryShaderProgramFileName = "",
|
const io::path& pixelShaderProgramFileName = "",
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
const io::path& geometryShaderProgramFileName = "",
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
u32 verticesOut = 0,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
u32 verticesOut = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0 )
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData = 0 )
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
{
|
||||||
vertexShaderProgramFileName, "main",
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
EVST_VS_1_1, pixelShaderProgramFileName,
|
vertexShaderProgramFileName, "main",
|
||||||
"main", EPST_PS_1_1,
|
EVST_VS_1_1, pixelShaderProgramFileName,
|
||||||
geometryShaderProgramFileName, "main", EGST_GS_4_0,
|
"main", EPST_PS_1_1,
|
||||||
inType, outType, verticesOut,
|
geometryShaderProgramFileName, "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
inType, outType, verticesOut,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! Like addHighLevelShaderMaterial(), but loads from files.
|
|
||||||
/** \param vertexShaderProgram Text file handle containing the source
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
of the vertex shader program. Set to 0 if no vertex shader shall be
|
/** \param vertexShaderProgram Text file handle containing the source
|
||||||
created.
|
of the vertex shader program. Set to 0 if no vertex shader shall be
|
||||||
\param vertexShaderEntryPointName Name of the entry function of the
|
created.
|
||||||
vertexShaderProgram
|
\param vertexShaderEntryPointName Name of the entry function of the
|
||||||
\param vsCompileTarget Vertex shader version the high level shader
|
vertexShaderProgram
|
||||||
shall be compiled to.
|
\param vsCompileTarget Vertex shader version the high level shader
|
||||||
\param pixelShaderProgram Text file handle containing the source of
|
shall be compiled to.
|
||||||
the pixel shader program. Set to 0 if no pixel shader shall be created.
|
\param pixelShaderProgram Text file handle containing the source of
|
||||||
\param pixelShaderEntryPointName Entry name of the function of the
|
the pixel shader program. Set to 0 if no pixel shader shall be created.
|
||||||
pixelShaderProgram (p.e. "main")
|
\param pixelShaderEntryPointName Entry name of the function of the
|
||||||
\param psCompileTarget Pixel shader version the high level shader
|
pixelShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param psCompileTarget Pixel shader version the high level shader
|
||||||
\param geometryShaderProgram Text file handle containing the source of
|
shall be compiled to.
|
||||||
the geometry shader program. Set to 0 if no geometry shader shall be
|
\param geometryShaderProgram Text file handle containing the source of
|
||||||
created.
|
the geometry shader program. Set to 0 if no geometry shader shall be
|
||||||
\param geometryShaderEntryPointName Entry name of the function of the
|
created.
|
||||||
geometryShaderProgram (p.e. "main")
|
\param geometryShaderEntryPointName Entry name of the function of the
|
||||||
\param gsCompileTarget Geometry shader version the high level shader
|
geometryShaderProgram (p.e. "main")
|
||||||
shall be compiled to.
|
\param gsCompileTarget Geometry shader version the high level shader
|
||||||
\param inType Type of vertices passed to geometry shader
|
shall be compiled to.
|
||||||
\param outType Type of vertices created by geometry shader
|
\param inType Type of vertices passed to geometry shader
|
||||||
\param verticesOut Maximal number of vertices created by geometry
|
\param outType Type of vertices created by geometry shader
|
||||||
shader. If 0, maximal number supported is assumed.
|
\param verticesOut Maximal number of vertices created by geometry
|
||||||
\param callback Pointer to an implementation of
|
shader. If 0, maximal number supported is assumed.
|
||||||
IShaderConstantSetCallBack in which you can set the needed vertex and
|
\param callback Pointer to an implementation of
|
||||||
pixel shader program constants. Set this to 0 if you don't need this.
|
IShaderConstantSetCallBack in which you can set the needed vertex and
|
||||||
\param baseMaterial Base material which renderstates will be used to
|
pixel shader program constants. Set this to 0 if you don't need this.
|
||||||
shade the material.
|
\param baseMaterial Base material which renderstates will be used to
|
||||||
\param userData a user data int. This int can be set to any value and
|
shade the material.
|
||||||
will be set as parameter in the callback method when calling
|
\param userData a user data int. This int can be set to any value and
|
||||||
OnSetConstants(). In this way it is easily possible to use the same
|
will be set as parameter in the callback method when calling
|
||||||
callback method for multiple materials and distinguish between them
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
during the call.
|
callback method for multiple materials and distinguish between them
|
||||||
\return Number of the material type which can be set in
|
during the call.
|
||||||
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
\return Number of the material type which can be set in
|
||||||
error occurred, e.g. if a shader program could not be compiled or a
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
compile target is not reachable. The error strings are then printed to
|
error occurred, e.g. if a shader program could not be compiled or a
|
||||||
the error log and can be caught with a custom event receiver. */
|
compile target is not reachable. The error strings are then printed to
|
||||||
virtual s32 addHighLevelShaderMaterialFromFiles(
|
the error log and can be caught with a custom event receiver. */
|
||||||
io::IReadFile* vertexShaderProgram,
|
virtual s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const c8* vertexShaderEntryPointName,
|
io::IReadFile* vertexShaderProgram,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
const c8* vertexShaderEntryPointName,
|
||||||
io::IReadFile* pixelShaderProgram,
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
||||||
const c8* pixelShaderEntryPointName,
|
io::IReadFile* pixelShaderProgram,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget,
|
const c8* pixelShaderEntryPointName,
|
||||||
io::IReadFile* geometryShaderProgram,
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
||||||
const c8* geometryShaderEntryPointName = "main",
|
io::IReadFile* geometryShaderProgram,
|
||||||
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
const c8* geometryShaderEntryPointName = "main",
|
||||||
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
|
||||||
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
|
||||||
u32 verticesOut = 0,
|
scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
u32 verticesOut = 0,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0) = 0;
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
//! convenience function for use without geometry shaders
|
|
||||||
s32 addHighLevelShaderMaterialFromFiles(
|
//! convenience function for use without geometry shaders
|
||||||
io::IReadFile* vertexShaderProgram,
|
s32 addHighLevelShaderMaterialFromFiles(
|
||||||
const c8* vertexShaderEntryPointName = "main",
|
io::IReadFile* vertexShaderProgram,
|
||||||
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
const c8* vertexShaderEntryPointName = "main",
|
||||||
io::IReadFile* pixelShaderProgram = 0,
|
E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
|
||||||
const c8* pixelShaderEntryPointName = "main",
|
io::IReadFile* pixelShaderProgram = 0,
|
||||||
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
const c8* pixelShaderEntryPointName = "main",
|
||||||
IShaderConstantSetCallBack* callback = 0,
|
E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
|
||||||
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
s32 userData = 0)
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
{
|
s32 userData = 0)
|
||||||
return addHighLevelShaderMaterialFromFiles(
|
{
|
||||||
vertexShaderProgram, vertexShaderEntryPointName,
|
return addHighLevelShaderMaterialFromFiles(
|
||||||
vsCompileTarget, pixelShaderProgram,
|
vertexShaderProgram, vertexShaderEntryPointName,
|
||||||
pixelShaderEntryPointName, psCompileTarget,
|
vsCompileTarget, pixelShaderProgram,
|
||||||
0, "main", EGST_GS_4_0,
|
pixelShaderEntryPointName, psCompileTarget,
|
||||||
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
0, "main", EGST_GS_4_0,
|
||||||
callback, baseMaterial, userData);
|
scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
|
||||||
}
|
callback, baseMaterial, userData);
|
||||||
|
}
|
||||||
//! Delete a shader material and associated data.
|
|
||||||
/**
|
//! Adds a new ASM shader material renderer to the VideoDriver
|
||||||
After you have deleted a material it is invalid to still use and doing
|
/** Note that it is a good idea to call IVideoDriver::queryFeature() in
|
||||||
so might result in a crash. The ID may be reused in the future when new
|
advance to check if the IVideoDriver supports the vertex and/or pixel
|
||||||
materials are added.
|
shader version your are using.
|
||||||
\param material Number of the material type. Must not be a built-in
|
|
||||||
material. */
|
The material is added to the VideoDriver like with
|
||||||
virtual void deleteShaderMaterial(s32 material) = 0;
|
IVideoDriver::addMaterialRenderer() and can be used like it had been
|
||||||
};
|
added with that method.
|
||||||
|
\param vertexShaderProgram String containing the source of the vertex
|
||||||
|
shader program. This can be 0 if no vertex program shall be used.
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
For DX8 programs, the will always input registers look like this: v0:
|
||||||
|
position, v1: normal, v2: color, v3: texture coordinates, v4: texture
|
||||||
|
coordinates 2 if available.
|
||||||
|
|
||||||
|
For DX9 programs, you can manually set the registers using the dcl_
|
||||||
|
statements.
|
||||||
|
\param pixelShaderProgram String containing the source of the pixel
|
||||||
|
shader program. This can be 0 if you don't want to use a pixel shader.
|
||||||
|
\param callback Pointer to an implementation of
|
||||||
|
IShaderConstantSetCallBack in which you can set the needed vertex and
|
||||||
|
pixel shader program constants. Set this to 0 if you don't need this.
|
||||||
|
\param baseMaterial Base material which renderstates will be used to
|
||||||
|
shade the material.
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
|
||||||
|
const c8* pixelShaderProgram = 0,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
|
/** \param vertexShaderProgram Text file containing the source of the
|
||||||
|
vertex shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param pixelShaderProgram Text file containing the source of the pixel
|
||||||
|
shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param callback Pointer to an IShaderConstantSetCallback object to
|
||||||
|
which the OnSetConstants function is called.
|
||||||
|
\param baseMaterial baseMaterial
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
|
||||||
|
io::IReadFile* pixelShaderProgram,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
|
|
||||||
|
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
|
||||||
|
/** \param vertexShaderProgramFileName Text file name containing the
|
||||||
|
source of the vertex shader program. Set to 0 if no shader shall be
|
||||||
|
created.
|
||||||
|
\param pixelShaderProgramFileName Text file name containing the source
|
||||||
|
of the pixel shader program. Set to 0 if no shader shall be created.
|
||||||
|
\param callback Pointer to an IShaderConstantSetCallback object on
|
||||||
|
which the OnSetConstants function is called.
|
||||||
|
\param baseMaterial baseMaterial
|
||||||
|
\param userData a user data int. This int can be set to any value and
|
||||||
|
will be set as parameter in the callback method when calling
|
||||||
|
OnSetConstants(). In this way it is easily possible to use the same
|
||||||
|
callback method for multiple materials and distinguish between them
|
||||||
|
during the call.
|
||||||
|
\return Returns the number of the material type which can be set in
|
||||||
|
SMaterial::MaterialType to use the renderer. -1 is returned if an
|
||||||
|
error occurred. -1 is returned for example if a vertex or pixel shader
|
||||||
|
program could not be compiled, the error strings are then printed out
|
||||||
|
into the error log, and can be caught with a custom event receiver. */
|
||||||
|
virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
|
||||||
|
const io::path& pixelShaderProgramFileName,
|
||||||
|
IShaderConstantSetCallBack* callback = 0,
|
||||||
|
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
|
||||||
|
s32 userData = 0) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,264 +1,268 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace video
|
|
||||||
{
|
namespace video
|
||||||
class ITexture;
|
{
|
||||||
} // end namespace video
|
class ITexture;
|
||||||
|
} // end namespace video
|
||||||
namespace gui
|
|
||||||
{
|
namespace gui
|
||||||
class IGUIFont;
|
{
|
||||||
class IGUISpriteBank;
|
class IGUIFont;
|
||||||
|
class IGUISpriteBank;
|
||||||
//! Current state of buttons used for drawing sprites.
|
|
||||||
//! Note that up to 3 states can be active at the same time:
|
//! Current state of buttons used for drawing sprites.
|
||||||
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
//! Note that up to 3 states can be active at the same time:
|
||||||
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
//! EGBS_BUTTON_UP or EGBS_BUTTON_DOWN
|
||||||
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
//! EGBS_BUTTON_MOUSE_OVER or EGBS_BUTTON_MOUSE_OFF
|
||||||
enum EGUI_BUTTON_STATE
|
//! EGBS_BUTTON_FOCUSED or EGBS_BUTTON_NOT_FOCUSED
|
||||||
{
|
enum EGUI_BUTTON_STATE
|
||||||
//! The button is not pressed.
|
{
|
||||||
EGBS_BUTTON_UP=0,
|
//! The button is not pressed.
|
||||||
//! The button is currently pressed down.
|
EGBS_BUTTON_UP=0,
|
||||||
EGBS_BUTTON_DOWN,
|
//! The button is currently pressed down.
|
||||||
//! The mouse cursor is over the button
|
EGBS_BUTTON_DOWN,
|
||||||
EGBS_BUTTON_MOUSE_OVER,
|
//! The mouse cursor is over the button
|
||||||
//! The mouse cursor is not over the button
|
EGBS_BUTTON_MOUSE_OVER,
|
||||||
EGBS_BUTTON_MOUSE_OFF,
|
//! The mouse cursor is not over the button
|
||||||
//! The button has the focus
|
EGBS_BUTTON_MOUSE_OFF,
|
||||||
EGBS_BUTTON_FOCUSED,
|
//! The button has the focus
|
||||||
//! The button doesn't have the focus
|
EGBS_BUTTON_FOCUSED,
|
||||||
EGBS_BUTTON_NOT_FOCUSED,
|
//! The button doesn't have the focus
|
||||||
//! The button is disabled All other states are ignored in that case.
|
EGBS_BUTTON_NOT_FOCUSED,
|
||||||
EGBS_BUTTON_DISABLED,
|
//! The button is disabled All other states are ignored in that case.
|
||||||
//! not used, counts the number of enumerated items
|
EGBS_BUTTON_DISABLED,
|
||||||
EGBS_COUNT
|
//! not used, counts the number of enumerated items
|
||||||
};
|
EGBS_COUNT
|
||||||
|
};
|
||||||
//! Names for gui button state icons
|
|
||||||
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
|
//! Names for gui button state icons
|
||||||
{
|
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
|
||||||
"buttonUp",
|
{
|
||||||
"buttonDown",
|
"buttonUp",
|
||||||
"buttonMouseOver",
|
"buttonDown",
|
||||||
"buttonMouseOff",
|
"buttonMouseOver",
|
||||||
"buttonFocused",
|
"buttonMouseOff",
|
||||||
"buttonNotFocused",
|
"buttonFocused",
|
||||||
"buttonDisabled",
|
"buttonNotFocused",
|
||||||
0 // count
|
"buttonDisabled",
|
||||||
};
|
0 // count
|
||||||
|
};
|
||||||
//! State of buttons used for drawing texture images.
|
|
||||||
//! Note that only a single state is active at a time
|
//! State of buttons used for drawing texture images.
|
||||||
//! Also when no image is defined for a state it will use images from another state
|
//! Note that only a single state is active at a time
|
||||||
//! and if that state is not set from the replacement for that,etc.
|
//! Also when no image is defined for a state it will use images from another state
|
||||||
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
//! and if that state is not set from the replacement for that,etc.
|
||||||
enum EGUI_BUTTON_IMAGE_STATE
|
//! So in many cases setting EGBIS_IMAGE_UP and EGBIS_IMAGE_DOWN is sufficient.
|
||||||
{
|
enum EGUI_BUTTON_IMAGE_STATE
|
||||||
//! When no other states have images they will all use this one.
|
{
|
||||||
EGBIS_IMAGE_UP,
|
//! When no other states have images they will all use this one.
|
||||||
//! When not set EGBIS_IMAGE_UP is used.
|
EGBIS_IMAGE_UP,
|
||||||
EGBIS_IMAGE_UP_MOUSEOVER,
|
//! When not set EGBIS_IMAGE_UP is used.
|
||||||
//! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
|
EGBIS_IMAGE_UP_MOUSEOVER,
|
||||||
EGBIS_IMAGE_UP_FOCUSED,
|
//! When not set EGBIS_IMAGE_UP_MOUSEOVER is used.
|
||||||
//! When not set EGBIS_IMAGE_UP_FOCUSED is used.
|
EGBIS_IMAGE_UP_FOCUSED,
|
||||||
EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
|
//! When not set EGBIS_IMAGE_UP_FOCUSED is used.
|
||||||
//! When not set EGBIS_IMAGE_UP is used.
|
EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER,
|
||||||
EGBIS_IMAGE_DOWN,
|
//! When not set EGBIS_IMAGE_UP is used.
|
||||||
//! When not set EGBIS_IMAGE_DOWN is used.
|
EGBIS_IMAGE_DOWN,
|
||||||
EGBIS_IMAGE_DOWN_MOUSEOVER,
|
//! When not set EGBIS_IMAGE_DOWN is used.
|
||||||
//! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
|
EGBIS_IMAGE_DOWN_MOUSEOVER,
|
||||||
EGBIS_IMAGE_DOWN_FOCUSED,
|
//! When not set EGBIS_IMAGE_DOWN_MOUSEOVER is used.
|
||||||
//! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
|
EGBIS_IMAGE_DOWN_FOCUSED,
|
||||||
EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
|
//! When not set EGBIS_IMAGE_DOWN_FOCUSED is used.
|
||||||
//! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button state).
|
EGBIS_IMAGE_DOWN_FOCUSED_MOUSEOVER,
|
||||||
EGBIS_IMAGE_DISABLED,
|
//! When not set EGBIS_IMAGE_UP or EGBIS_IMAGE_DOWN are used (depending on button state).
|
||||||
//! not used, counts the number of enumerated items
|
EGBIS_IMAGE_DISABLED,
|
||||||
EGBIS_COUNT
|
//! not used, counts the number of enumerated items
|
||||||
};
|
EGBIS_COUNT
|
||||||
|
};
|
||||||
//! Names for gui button image states
|
|
||||||
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
|
//! Names for gui button image states
|
||||||
{
|
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
|
||||||
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
{
|
||||||
"ImageUpOver",
|
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
|
||||||
"ImageUpFocused",
|
"ImageUpOver",
|
||||||
"ImageUpFocusedOver",
|
"ImageUpFocused",
|
||||||
"PressedImage", // not "ImageDown" as it otherwise breaks serialization of old files
|
"ImageUpFocusedOver",
|
||||||
"ImageDownOver",
|
"PressedImage", // not "ImageDown" as it otherwise breaks serialization of old files
|
||||||
"ImageDownFocused",
|
"ImageDownOver",
|
||||||
"ImageDownFocusedOver",
|
"ImageDownFocused",
|
||||||
"ImageDisabled",
|
"ImageDownFocusedOver",
|
||||||
0 // count
|
"ImageDisabled",
|
||||||
};
|
0 // count
|
||||||
|
};
|
||||||
//! GUI Button interface.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! GUI Button interface.
|
||||||
\li EGET_BUTTON_CLICKED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
*/
|
\li EGET_BUTTON_CLICKED
|
||||||
class IGUIButton : public IGUIElement
|
*/
|
||||||
{
|
class IGUIButton : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {}
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
//! Sets another skin independent font.
|
||||||
\param font: New font to set. */
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
\param font: New font to set. */
|
||||||
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
//! Gets the override font (if any)
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
/** \return The override font (may be 0) */
|
||||||
|
virtual IGUIFont* getOverrideFont(void) const = 0;
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
//! Get the font which is used right now for drawing
|
||||||
font of the active skin otherwise */
|
/** Currently this is the override font when one is set and the
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
font of the active skin otherwise */
|
||||||
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
//! Sets another color for the button text.
|
|
||||||
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
//! Sets another color for the button text.
|
||||||
You don't need to call enableOverrideColor(true), that's done by this function.
|
/** When set, this color is used instead of EGDC_BUTTON_TEXT/EGDC_GRAY_TEXT.
|
||||||
If you want the the color of the skin back, call enableOverrideColor(false);
|
You don't need to call enableOverrideColor(true), that's done by this function.
|
||||||
\param color: New color of the text. */
|
If you want the the color of the skin back, call enableOverrideColor(false);
|
||||||
virtual void setOverrideColor(video::SColor color) = 0;
|
\param color: New color of the text. */
|
||||||
|
virtual void setOverrideColor(video::SColor color) = 0;
|
||||||
//! Gets the override color
|
|
||||||
/** \return: The override color */
|
//! Gets the override color
|
||||||
virtual video::SColor getOverrideColor(void) const = 0;
|
/** \return: The override color */
|
||||||
|
virtual video::SColor getOverrideColor(void) const = 0;
|
||||||
//! Gets the currently used text color
|
|
||||||
/** Either a skin-color for the current state or the override color */
|
//! Gets the currently used text color
|
||||||
virtual video::SColor getActiveColor() const = 0;
|
/** Either a skin-color for the current state or the override color */
|
||||||
|
virtual video::SColor getActiveColor() const = 0;
|
||||||
//! Sets if the button text should use the override color or the color in the gui skin.
|
|
||||||
/** \param enable: If set to true, the override color, which can be set
|
//! Sets if the button text should use the override color or the color in the gui skin.
|
||||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
/** \param enable: If set to true, the override color, which can be set
|
||||||
EGDC_BUTTON_TEXT or EGDC_GRAY_TEXT color of the skin. */
|
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||||
virtual void enableOverrideColor(bool enable) = 0;
|
EGDC_BUTTON_TEXT or EGDC_GRAY_TEXT color of the skin. */
|
||||||
|
virtual void enableOverrideColor(bool enable) = 0;
|
||||||
//! Checks if an override color is enabled
|
|
||||||
/** \return true if the override color is enabled, false otherwise */
|
//! Checks if an override color is enabled
|
||||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
/** \return true if the override color is enabled, false otherwise */
|
||||||
|
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||||
//! Sets an image which should be displayed on the button when it is in the given state.
|
|
||||||
/** Only one image-state can be active at a time. Images are drawn below sprites.
|
//! Sets an image which should be displayed on the button when it is in the given state.
|
||||||
If a state is without image it will try to use images from other states as described
|
/** Only one image-state can be active at a time. Images are drawn below sprites.
|
||||||
in ::EGUI_BUTTON_IMAGE_STATE.
|
If a state is without image it will try to use images from other states as described
|
||||||
Images are a little less flexible than sprites, but easier to use.
|
in ::EGUI_BUTTON_IMAGE_STATE.
|
||||||
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
Images are a little less flexible than sprites, but easier to use.
|
||||||
\param image: Image to be displayed or NULL to remove the image
|
\param state: One of ::EGUI_BUTTON_IMAGE_STATE
|
||||||
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
\param image: Image to be displayed or NULL to remove the image
|
||||||
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;
|
\param sourceRect: Source rectangle on the image texture. When width or height are 0 then the full texture-size is used (default). */
|
||||||
|
virtual void setImage(EGUI_BUTTON_IMAGE_STATE state, video::ITexture* image=0, const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) = 0;
|
||||||
//! Sets an image which should be displayed on the button when it is in normal state.
|
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
//! Sets an image which should be displayed on the button when it is in normal state.
|
||||||
\param image: Image to be displayed */
|
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image); and might be deprecated in future revisions.
|
||||||
virtual void setImage(video::ITexture* image=0) = 0;
|
\param image: Image to be displayed */
|
||||||
|
virtual void setImage(video::ITexture* image=0) = 0;
|
||||||
//! Sets a background image for the button when it is in normal state.
|
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
//! Sets a background image for the button when it is in normal state.
|
||||||
\param image: Texture containing the image to be displayed
|
/** This is identical to calling setImage(EGBIS_IMAGE_UP, image, sourceRect); and might be deprecated in future revisions.
|
||||||
\param sourceRect: Position in the texture, where the image is located.
|
\param image: Texture containing the image to be displayed
|
||||||
When width or height are 0 then the full texture-size is used */
|
\param sourceRect: Position in the texture, where the image is located.
|
||||||
virtual void setImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
When width or height are 0 then the full texture-size is used */
|
||||||
|
virtual void setImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||||
//! Sets a background image for the button when it is in pressed state.
|
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
//! Sets a background image for the button when it is in pressed state.
|
||||||
If no images is specified for the pressed state via
|
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image); and might be deprecated in future revisions.
|
||||||
setPressedImage(), this image is also drawn in pressed state.
|
If no images is specified for the pressed state via
|
||||||
\param image: Image to be displayed */
|
setPressedImage(), this image is also drawn in pressed state.
|
||||||
virtual void setPressedImage(video::ITexture* image=0) = 0;
|
\param image: Image to be displayed */
|
||||||
|
virtual void setPressedImage(video::ITexture* image=0) = 0;
|
||||||
//! Sets an image which should be displayed on the button when it is in pressed state.
|
|
||||||
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
//! Sets an image which should be displayed on the button when it is in pressed state.
|
||||||
\param image: Texture containing the image to be displayed
|
/** This is identical to calling setImage(EGBIS_IMAGE_DOWN, image, sourceRect); and might be deprecated in future revisions.
|
||||||
\param sourceRect: Position in the texture, where the image is located */
|
\param image: Texture containing the image to be displayed
|
||||||
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
\param sourceRect: Position in the texture, where the image is located */
|
||||||
|
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& sourceRect) = 0;
|
||||||
|
|
||||||
//! Sets the sprite bank used by the button
|
|
||||||
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
|
//! Sets the sprite bank used by the button
|
||||||
Which means after loading the gui you still have to set the spritebank manually. */
|
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
|
||||||
virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0;
|
Which means after loading the gui you still have to set the spritebank manually. */
|
||||||
|
virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0;
|
||||||
//! Sets the animated sprite for a specific button state
|
|
||||||
/** Several sprites can be drawn at the same time.
|
//! Sets the animated sprite for a specific button state
|
||||||
Sprites can be animated.
|
/** Several sprites can be drawn at the same time.
|
||||||
Sprites are drawn above the images.
|
Sprites can be animated.
|
||||||
\param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
Sprites are drawn above the images.
|
||||||
\param state: State of the button to set the sprite for
|
\param index: Number of the sprite within the sprite bank, use -1 for no sprite
|
||||||
\param index: The sprite number from the current sprite bank
|
\param state: State of the button to set the sprite for
|
||||||
\param color: The color of the sprite
|
\param index: The sprite number from the current sprite bank
|
||||||
\param loop: True if the animation should loop, false if not
|
\param color: The color of the sprite
|
||||||
\param scale: True if the sprite should scale to button size, false if not */
|
\param loop: True if the animation should loop, false if not
|
||||||
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
\param scale: True if the sprite should scale to button size, false if not */
|
||||||
video::SColor color=video::SColor(255,255,255,255), bool loop=false, bool scale=false) = 0;
|
virtual void setSprite(EGUI_BUTTON_STATE state, s32 index,
|
||||||
|
video::SColor color=video::SColor(255,255,255,255), bool loop=false, bool scale=false) = 0;
|
||||||
//! Get the sprite-index for the given state or -1 when no sprite is set
|
|
||||||
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
//! Get the sprite-index for the given state or -1 when no sprite is set
|
||||||
|
virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0;
|
||||||
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
|
||||||
virtual video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const = 0;
|
//! Get the sprite color for the given state. Color is only used when a sprite is set.
|
||||||
|
virtual video::SColor getSpriteColor(EGUI_BUTTON_STATE state) const = 0;
|
||||||
//! Returns if the sprite in the given state does loop
|
|
||||||
virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const = 0;
|
//! Returns if the sprite in the given state does loop
|
||||||
|
virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const = 0;
|
||||||
//! Returns if the sprite in the given state is scaled
|
|
||||||
virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const = 0;
|
//! Returns if the sprite in the given state is scaled
|
||||||
|
virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const = 0;
|
||||||
//! Sets if the button should behave like a push button.
|
|
||||||
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
//! Sets if the button should behave like a push button.
|
||||||
the user can change the state of the button. */
|
/** Which means it can be in two states: Normal or Pressed. With a click on the button,
|
||||||
virtual void setIsPushButton(bool isPushButton=true) = 0;
|
the user can change the state of the button. */
|
||||||
|
virtual void setIsPushButton(bool isPushButton=true) = 0;
|
||||||
//! Sets the pressed state of the button if this is a pushbutton
|
|
||||||
virtual void setPressed(bool pressed=true) = 0;
|
//! Sets the pressed state of the button if this is a pushbutton
|
||||||
|
virtual void setPressed(bool pressed=true) = 0;
|
||||||
//! Returns if the button is currently pressed
|
|
||||||
virtual bool isPressed() const = 0;
|
//! Returns if the button is currently pressed
|
||||||
|
virtual bool isPressed() const = 0;
|
||||||
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
|
||||||
virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0;
|
//! Sets if the alpha channel should be used for drawing background images on the button (default is false)
|
||||||
|
virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0;
|
||||||
//! Returns if the alpha channel should be used for drawing background images on the button
|
|
||||||
virtual bool isAlphaChannelUsed() const = 0;
|
//! Returns if the alpha channel should be used for drawing background images on the button
|
||||||
|
virtual bool isAlphaChannelUsed() const = 0;
|
||||||
//! Returns whether the button is a push button
|
|
||||||
virtual bool isPushButton() const = 0;
|
//! Returns whether the button is a push button
|
||||||
|
virtual bool isPushButton() const = 0;
|
||||||
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
|
||||||
virtual void setDrawBorder(bool border=true) = 0;
|
//! Sets if the button should use the skin to draw its border and button face (default is true)
|
||||||
|
virtual void setDrawBorder(bool border=true) = 0;
|
||||||
//! Returns if the border and button face are being drawn using the skin
|
|
||||||
virtual bool isDrawingBorder() const = 0;
|
//! Returns if the border and button face are being drawn using the skin
|
||||||
|
virtual bool isDrawingBorder() const = 0;
|
||||||
//! Sets if the button should scale the button images to fit
|
|
||||||
virtual void setScaleImage(bool scaleImage=true) = 0;
|
//! Sets if the button should scale the button images to fit
|
||||||
|
virtual void setScaleImage(bool scaleImage=true) = 0;
|
||||||
//! Checks whether the button scales the used images
|
|
||||||
virtual bool isScalingImage() const = 0;
|
//! Checks whether the button scales the used images
|
||||||
|
virtual bool isScalingImage() const = 0;
|
||||||
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
|
||||||
/** Generated together with event, so info is available in the event-receiver. */
|
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
|
||||||
virtual bool getClickShiftState() const = 0;
|
/** Generated together with event, so info is available in the event-receiver. */
|
||||||
|
virtual bool getClickShiftState() const = 0;
|
||||||
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
|
||||||
/** Generated together with event, so info is available in the event-receiver. */
|
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
|
||||||
virtual bool getClickControlState() const = 0;
|
/** Generated together with event, so info is available in the event-receiver. */
|
||||||
};
|
virtual bool getClickControlState() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,49 +1,53 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! GUI Check box interface.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! GUI Check box interface.
|
||||||
\li EGET_CHECKBOX_CHANGED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
*/
|
\li EGET_CHECKBOX_CHANGED
|
||||||
class IGUICheckBox : public IGUIElement
|
*/
|
||||||
{
|
class IGUICheckBox : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
|
||||||
//! Set if box is checked.
|
|
||||||
virtual void setChecked(bool checked) = 0;
|
//! Set if box is checked.
|
||||||
|
virtual void setChecked(bool checked) = 0;
|
||||||
//! Returns true if box is checked.
|
|
||||||
virtual bool isChecked() const = 0;
|
//! Returns true if box is checked.
|
||||||
|
virtual bool isChecked() const = 0;
|
||||||
//! Sets whether to draw the background
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
//! Sets whether to draw the background
|
||||||
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
//! Checks if background drawing is enabled
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||||
//! Sets whether to draw the border
|
|
||||||
virtual void setDrawBorder(bool draw) = 0;
|
//! Sets whether to draw the border
|
||||||
|
virtual void setDrawBorder(bool draw) = 0;
|
||||||
//! Checks if border drawing is enabled
|
|
||||||
/** \return true if border drawing is enabled, false otherwise */
|
//! Checks if border drawing is enabled
|
||||||
virtual bool isDrawBorderEnabled() const = 0;
|
/** \return true if border drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBorderEnabled() const = 0;
|
||||||
};
|
|
||||||
|
};
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,74 +1,74 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! Combobox widget
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! Combobox widget
|
||||||
\li EGET_COMBO_BOX_CHANGED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
*/
|
\li EGET_COMBO_BOX_CHANGED
|
||||||
class IGUIComboBox : public IGUIElement
|
*/
|
||||||
{
|
class IGUIComboBox : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
|
||||||
//! Returns amount of items in box
|
|
||||||
virtual u32 getItemCount() const = 0;
|
//! Returns amount of items in box
|
||||||
|
virtual u32 getItemCount() const = 0;
|
||||||
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
|
||||||
virtual const wchar_t* getItem(u32 idx) const = 0;
|
//! Returns string of an item. the idx may be a value from 0 to itemCount-1
|
||||||
|
virtual const wchar_t* getItem(u32 idx) const = 0;
|
||||||
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
|
||||||
virtual u32 getItemData(u32 idx) const = 0;
|
//! Returns item data of an item. the idx may be a value from 0 to itemCount-1
|
||||||
|
virtual u32 getItemData(u32 idx) const = 0;
|
||||||
//! Returns index based on item data
|
|
||||||
virtual s32 getIndexForItemData(u32 data ) const = 0;
|
//! Returns index based on item data
|
||||||
|
virtual s32 getIndexForItemData(u32 data ) const = 0;
|
||||||
//! Adds an item and returns the index of it
|
|
||||||
virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0;
|
//! Adds an item and returns the index of it
|
||||||
|
virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0;
|
||||||
//! Removes an item from the combo box.
|
|
||||||
/** Warning. This will change the index of all following items */
|
//! Removes an item from the combo box.
|
||||||
virtual void removeItem(u32 idx) = 0;
|
/** Warning. This will change the index of all following items */
|
||||||
|
virtual void removeItem(u32 idx) = 0;
|
||||||
//! Deletes all items in the combo box
|
|
||||||
virtual void clear() = 0;
|
//! Deletes all items in the combo box
|
||||||
|
virtual void clear() = 0;
|
||||||
//! Returns id of selected item. returns -1 if no item is selected.
|
|
||||||
virtual s32 getSelected() const = 0;
|
//! Returns id of selected item. returns -1 if no item is selected.
|
||||||
|
virtual s32 getSelected() const = 0;
|
||||||
//! Sets the selected item. Set this to -1 if no item should be selected
|
|
||||||
virtual void setSelected(s32 idx) = 0;
|
//! Sets the selected item. Set this to -1 if no item should be selected
|
||||||
|
virtual void setSelected(s32 idx) = 0;
|
||||||
//! Sets the selected item and emits a change event.
|
|
||||||
/** Set this to -1 if no item should be selected */
|
//! Sets text justification of the text area
|
||||||
virtual void setAndSendSelected(s32 idx) = 0;
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
//! Sets text justification of the text area
|
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
|
||||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
//! Set the maximal number of rows for the selection listbox
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
virtual void setMaxSelectionRows(u32 max) = 0;
|
||||||
|
|
||||||
//! Set the maximal number of rows for the selection listbox
|
//! Get the maximal number of rows for the selection listbox
|
||||||
virtual void setMaxSelectionRows(u32 max) = 0;
|
virtual u32 getMaxSelectionRows() const = 0;
|
||||||
|
};
|
||||||
//! Get the maximal number of rows for the selection listbox
|
|
||||||
virtual u32 getMaxSelectionRows() const = 0;
|
|
||||||
};
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
} // end namespace gui
|
#endif
|
||||||
} // end namespace irr
|
|
||||||
|
@ -1,153 +1,157 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SColor.h"
|
#include "IGUIElement.h"
|
||||||
|
#include "SColor.h"
|
||||||
namespace irr
|
|
||||||
{
|
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:
|
//! Single line edit box for editing simple text.
|
||||||
\li EGET_EDITBOX_ENTER
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
\li EGET_EDITBOX_CHANGED
|
\li EGET_EDITBOX_ENTER
|
||||||
\li EGET_EDITBOX_MARKING_CHANGED
|
\li EGET_EDITBOX_CHANGED
|
||||||
*/
|
\li EGET_EDITBOX_MARKING_CHANGED
|
||||||
class IGUIEditBox : public IGUIElement
|
*/
|
||||||
{
|
class IGUIEditBox : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
//! Sets another skin independent font.
|
||||||
\param font: New font to set. */
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
\param font: New font to set. */
|
||||||
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
//! Gets the override font (if any)
|
||||||
virtual IGUIFont* getOverrideFont() const = 0;
|
/** \return The override font (may be 0) */
|
||||||
|
virtual IGUIFont* getOverrideFont() const = 0;
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
//! Get the font which is used right now for drawing
|
||||||
font of the active skin otherwise */
|
/** Currently this is the override font when one is set and the
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
font of the active skin otherwise */
|
||||||
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
//! Sets another color for the text.
|
|
||||||
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
//! Sets another color for the text.
|
||||||
in the skin, but the set color instead. You don't need to call
|
/** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined
|
||||||
IGUIEditBox::enableOverrrideColor(true) after this, this is done
|
in the skin, but the set color instead. You don't need to call
|
||||||
by this function.
|
IGUIEditBox::enableOverrrideColor(true) after this, this is done
|
||||||
If you set a color, and you want the text displayed with the color
|
by this function.
|
||||||
of the skin again, call IGUIEditBox::enableOverrideColor(false);
|
If you set a color, and you want the text displayed with the color
|
||||||
\param color: New color of the text. */
|
of the skin again, call IGUIEditBox::enableOverrideColor(false);
|
||||||
virtual void setOverrideColor(video::SColor color) = 0;
|
\param color: New color of the text. */
|
||||||
|
virtual void setOverrideColor(video::SColor color) = 0;
|
||||||
//! Gets the override color
|
|
||||||
virtual video::SColor getOverrideColor() const = 0;
|
//! Gets the override color
|
||||||
|
virtual video::SColor getOverrideColor() const = 0;
|
||||||
//! Sets if the text should use the override color or the color in the gui skin.
|
|
||||||
/** \param enable: If set to true, the override color, which can be set
|
//! Sets if the text should use the override color or the color in the gui skin.
|
||||||
with IGUIEditBox::setOverrideColor is used, otherwise the
|
/** \param enable: If set to true, the override color, which can be set
|
||||||
EGDC_BUTTON_TEXT color of the skin. */
|
with IGUIEditBox::setOverrideColor is used, otherwise the
|
||||||
virtual void enableOverrideColor(bool enable) = 0;
|
EGDC_BUTTON_TEXT color of the skin. */
|
||||||
|
virtual void enableOverrideColor(bool enable) = 0;
|
||||||
//! Checks if an override color is enabled
|
|
||||||
/** \return true if the override color is enabled, false otherwise */
|
//! Checks if an override color is enabled
|
||||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
/** \return true if the override color is enabled, false otherwise */
|
||||||
|
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||||
//! Sets whether to draw the background
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
//! Sets whether to draw the background
|
||||||
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
//! Checks if background drawing is enabled
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||||
//! Turns the border on or off
|
|
||||||
/** \param border: true if you want the border to be drawn, false if not */
|
//! Turns the border on or off
|
||||||
virtual void setDrawBorder(bool border) = 0;
|
/** \param border: true if you want the border to be drawn, false if not */
|
||||||
|
virtual void setDrawBorder(bool border) = 0;
|
||||||
//! Checks if border drawing is enabled
|
|
||||||
/** \return true if border drawing is enabled, false otherwise */
|
//! Checks if border drawing is enabled
|
||||||
virtual bool isDrawBorderEnabled() const = 0;
|
/** \return true if border drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBorderEnabled() const = 0;
|
||||||
//! Sets text justification mode
|
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
//! Sets text justification mode
|
||||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||||
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
//! Enables or disables word wrap.
|
|
||||||
/** \param enable: If set to true, words going over one line are
|
//! Enables or disables word wrap.
|
||||||
broken to the next line. */
|
/** \param enable: If set to true, words going over one line are
|
||||||
virtual void setWordWrap(bool enable) = 0;
|
broken to the next line. */
|
||||||
|
virtual void setWordWrap(bool enable) = 0;
|
||||||
//! Checks if word wrap is enabled
|
|
||||||
/** \return true if word wrap is enabled, false otherwise */
|
//! Checks if word wrap is enabled
|
||||||
virtual bool isWordWrapEnabled() const = 0;
|
/** \return true if word wrap is enabled, false otherwise */
|
||||||
|
virtual bool isWordWrapEnabled() const = 0;
|
||||||
//! Enables or disables newlines.
|
|
||||||
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
//! Enables or disables newlines.
|
||||||
instead a newline character will be inserted. */
|
/** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired,
|
||||||
virtual void setMultiLine(bool enable) = 0;
|
instead a newline character will be inserted. */
|
||||||
|
virtual void setMultiLine(bool enable) = 0;
|
||||||
//! Checks if multi line editing is enabled
|
|
||||||
/** \return true if multi-line is enabled, false otherwise */
|
//! Checks if multi line editing is enabled
|
||||||
virtual bool isMultiLineEnabled() const = 0;
|
/** \return true if multi-line is enabled, false otherwise */
|
||||||
|
virtual bool isMultiLineEnabled() const = 0;
|
||||||
//! Enables or disables automatic scrolling with cursor position
|
|
||||||
/** \param enable: If set to true, the text will move around with the cursor position */
|
//! Enables or disables automatic scrolling with cursor position
|
||||||
virtual void setAutoScroll(bool enable) = 0;
|
/** \param enable: If set to true, the text will move around with the cursor position */
|
||||||
|
virtual void setAutoScroll(bool enable) = 0;
|
||||||
//! Checks to see if automatic scrolling is enabled
|
|
||||||
/** \return true if automatic scrolling is enabled, false if not */
|
//! Checks to see if automatic scrolling is enabled
|
||||||
virtual bool isAutoScrollEnabled() const = 0;
|
/** \return true if automatic scrolling is enabled, false if not */
|
||||||
|
virtual bool isAutoScrollEnabled() const = 0;
|
||||||
//! Sets whether the edit box is a password box. Setting this to true will
|
|
||||||
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
//! Sets whether the edit box is a password box. Setting this to true will
|
||||||
\param passwordBox: true to enable password, false to disable
|
/** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x
|
||||||
\param passwordChar: the character that is displayed instead of letters */
|
\param passwordBox: true to enable password, false to disable
|
||||||
virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') = 0;
|
\param passwordChar: the character that is displayed instead of letters */
|
||||||
|
virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') = 0;
|
||||||
//! Returns true if the edit box is currently a password box.
|
|
||||||
virtual bool isPasswordBox() const = 0;
|
//! Returns true if the edit box is currently a password box.
|
||||||
|
virtual bool isPasswordBox() const = 0;
|
||||||
//! Gets the size area of the text in the edit box
|
|
||||||
/** \return The size in pixels of the text */
|
//! Gets the size area of the text in the edit box
|
||||||
virtual core::dimension2du getTextDimension() = 0;
|
/** \return The size in pixels of the text */
|
||||||
|
virtual core::dimension2du getTextDimension() = 0;
|
||||||
//! Sets the maximum amount of characters which may be entered in the box.
|
|
||||||
/** \param max: Maximum amount of characters. If 0, the character amount is
|
//! Sets the maximum amount of characters which may be entered in the box.
|
||||||
infinity. */
|
/** \param max: Maximum amount of characters. If 0, the character amount is
|
||||||
virtual void setMax(u32 max) = 0;
|
infinity. */
|
||||||
|
virtual void setMax(u32 max) = 0;
|
||||||
//! Returns maximum amount of characters, previously set by setMax();
|
|
||||||
virtual u32 getMax() const = 0;
|
//! Returns maximum amount of characters, previously set by setMax();
|
||||||
|
virtual u32 getMax() const = 0;
|
||||||
//! Set the character used for the cursor.
|
|
||||||
/** By default it's "_" */
|
//! Set the character used for the cursor.
|
||||||
virtual void setCursorChar(const wchar_t cursorChar) = 0;
|
/** By default it's "_" */
|
||||||
|
virtual void setCursorChar(const wchar_t cursorChar) = 0;
|
||||||
//! Get the character used for the cursor.
|
|
||||||
virtual wchar_t getCursorChar() const = 0;
|
//! Get the character used for the cursor.
|
||||||
|
virtual wchar_t getCursorChar() const = 0;
|
||||||
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
|
||||||
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
//! Set the blinktime for the cursor. 2x blinktime is one full cycle.
|
||||||
virtual void setCursorBlinkTime(irr::u32 timeMs) = 0;
|
//** \param timeMs Blinktime in milliseconds. When set to 0 the cursor is constantly on without blinking */
|
||||||
|
virtual void setCursorBlinkTime(irr::u32 timeMs) = 0;
|
||||||
//! Get the cursor blinktime
|
|
||||||
virtual irr::u32 getCursorBlinkTime() const = 0;
|
//! Get the cursor blinktime
|
||||||
};
|
virtual irr::u32 getCursorBlinkTime() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,417 +1,421 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IGUISkin.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "rect.h"
|
#include "IGUISkin.h"
|
||||||
#include "EFocusFlags.h"
|
#include "rect.h"
|
||||||
#include "IEventReceiver.h"
|
#include "EFocusFlags.h"
|
||||||
#include "path.h"
|
#include "IEventReceiver.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
class IOSOperator;
|
{
|
||||||
class IEventReceiver;
|
class IOSOperator;
|
||||||
|
class IEventReceiver;
|
||||||
namespace io
|
|
||||||
{
|
namespace io
|
||||||
class IReadFile;
|
{
|
||||||
class IWriteFile;
|
class IReadFile;
|
||||||
class IFileSystem;
|
class IWriteFile;
|
||||||
} // end namespace io
|
class IFileSystem;
|
||||||
namespace video
|
} // end namespace io
|
||||||
{
|
namespace video
|
||||||
class IVideoDriver;
|
{
|
||||||
class ITexture;
|
class IVideoDriver;
|
||||||
} // end namespace video
|
class ITexture;
|
||||||
|
} // end namespace video
|
||||||
namespace gui
|
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
class IGUIElement;
|
|
||||||
class IGUIFont;
|
class IGUIElement;
|
||||||
class IGUISpriteBank;
|
class IGUIFont;
|
||||||
class IGUIScrollBar;
|
class IGUISpriteBank;
|
||||||
class IGUIImage;
|
class IGUIScrollBar;
|
||||||
class IGUICheckBox;
|
class IGUIImage;
|
||||||
class IGUIListBox;
|
class IGUICheckBox;
|
||||||
class IGUIImageList;
|
class IGUIListBox;
|
||||||
class IGUIFileOpenDialog;
|
class IGUIImageList;
|
||||||
class IGUIStaticText;
|
class IGUIFileOpenDialog;
|
||||||
class IGUIEditBox;
|
class IGUIStaticText;
|
||||||
class IGUITabControl;
|
class IGUIEditBox;
|
||||||
class IGUITab;
|
class IGUITabControl;
|
||||||
class IGUIComboBox;
|
class IGUITab;
|
||||||
class IGUIButton;
|
class IGUIComboBox;
|
||||||
class IGUIWindow;
|
class IGUIButton;
|
||||||
|
class IGUIWindow;
|
||||||
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
//! GUI Environment. Used as factory and manager of all other GUI elements.
|
||||||
\li EGET_ELEMENT_FOCUS_LOST
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
|
||||||
\li EGET_ELEMENT_FOCUSED
|
\li EGET_ELEMENT_FOCUS_LOST
|
||||||
\li EGET_ELEMENT_LEFT
|
\li EGET_ELEMENT_FOCUSED
|
||||||
\li EGET_ELEMENT_HOVERED
|
\li EGET_ELEMENT_LEFT
|
||||||
*/
|
\li EGET_ELEMENT_HOVERED
|
||||||
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.
|
|
||||||
/** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
|
//! Draws all gui elements by traversing the GUI environment starting at the root node.
|
||||||
Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
|
/** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
|
||||||
virtual void drawAll(bool useScreenSize=true) = 0;
|
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;
|
||||||
//! Sets the focus to an element.
|
|
||||||
/** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a
|
//! Sets the focus to an element.
|
||||||
EGET_ELEMENT_FOCUSED event. If someone absorbed either of the events,
|
/** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a
|
||||||
then the focus will not be changed.
|
EGET_ELEMENT_FOCUSED event. If someone absorbed either of the events,
|
||||||
\param element Pointer to the element which shall get the focus.
|
then the focus will not be changed.
|
||||||
\return True on success, false on failure */
|
\param element Pointer to the element which shall get the focus.
|
||||||
virtual bool setFocus(IGUIElement* element) = 0;
|
\return True on success, false on failure */
|
||||||
|
virtual bool setFocus(IGUIElement* element) = 0;
|
||||||
//! Returns the element which holds the focus.
|
|
||||||
/** \return Pointer to the element with focus. */
|
//! Returns the element which holds the focus.
|
||||||
virtual IGUIElement* getFocus() const = 0;
|
/** \return Pointer to the element with focus. */
|
||||||
|
virtual IGUIElement* getFocus() const = 0;
|
||||||
//! Returns the element which was last under the mouse cursor
|
|
||||||
/** NOTE: This information is updated _after_ the user-eventreceiver
|
//! Returns the element which was last under the mouse cursor
|
||||||
received it's mouse-events. To find the hovered element while catching
|
/** NOTE: This information is updated _after_ the user-eventreceiver
|
||||||
mouse events you have to use instead:
|
received it's mouse-events. To find the hovered element while catching
|
||||||
IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos);
|
mouse events you have to use instead:
|
||||||
\return Pointer to the element under the mouse. */
|
IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos);
|
||||||
virtual IGUIElement* getHovered() const = 0;
|
\return Pointer to the element under the mouse. */
|
||||||
|
virtual IGUIElement* getHovered() const = 0;
|
||||||
//! Removes the focus from an element.
|
|
||||||
/** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed
|
//! Removes the focus from an element.
|
||||||
then the focus will not be changed.
|
/** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed
|
||||||
\param element Pointer to the element which shall lose the focus.
|
then the focus will not be changed.
|
||||||
\return True on success, false on failure */
|
\param element Pointer to the element which shall lose the focus.
|
||||||
virtual bool removeFocus(IGUIElement* element) = 0;
|
\return True on success, false on failure */
|
||||||
|
virtual bool removeFocus(IGUIElement* element) = 0;
|
||||||
//! Returns whether the element has focus
|
|
||||||
/** \param element Pointer to the element which is tested.
|
//! Returns whether the element has focus
|
||||||
\param checkSubElements When true and focus is on a sub-element of element then it will still count as focused and return true
|
/** \param element Pointer to the element which is tested.
|
||||||
\return True if the element has focus, else false. */
|
\param checkSubElements When true and focus is on a sub-element of element then it will still count as focused and return true
|
||||||
virtual bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const = 0;
|
\return True if the element has focus, else false. */
|
||||||
|
virtual bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const = 0;
|
||||||
//! Returns the current video driver.
|
|
||||||
/** \return Pointer to the video driver. */
|
//! Returns the current video driver.
|
||||||
virtual video::IVideoDriver* getVideoDriver() const = 0;
|
/** \return Pointer to the video driver. */
|
||||||
|
virtual video::IVideoDriver* getVideoDriver() const = 0;
|
||||||
//! Returns the file system.
|
|
||||||
/** \return Pointer to the file system. */
|
//! Returns the file system.
|
||||||
virtual io::IFileSystem* getFileSystem() const = 0;
|
/** \return Pointer to the file system. */
|
||||||
|
virtual io::IFileSystem* getFileSystem() const = 0;
|
||||||
//! returns a pointer to the OS operator
|
|
||||||
/** \return Pointer to the OS operator. */
|
//! returns a pointer to the OS operator
|
||||||
virtual IOSOperator* getOSOperator() const = 0;
|
/** \return Pointer to the OS operator. */
|
||||||
|
virtual IOSOperator* getOSOperator() const = 0;
|
||||||
//! Removes all elements from the environment.
|
|
||||||
virtual void clear() = 0;
|
//! Removes all elements from the environment.
|
||||||
|
virtual void clear() = 0;
|
||||||
//! Posts an input event to the environment.
|
|
||||||
/** Usually you do not have to
|
//! Posts an input event to the environment.
|
||||||
use this method, it is used by the engine internally.
|
/** Usually you do not have to
|
||||||
\param event The event to post.
|
use this method, it is used by the engine internally.
|
||||||
\return True if succeeded, else false. */
|
\param event The event to post.
|
||||||
virtual bool postEventFromUser(const SEvent& event) = 0;
|
\return True if succeeded, else false. */
|
||||||
|
virtual bool postEventFromUser(const SEvent& event) = 0;
|
||||||
//! This sets a new event receiver for gui events.
|
|
||||||
/** Usually you do not have to
|
//! This sets a new event receiver for gui events.
|
||||||
use this method, it is used by the engine internally.
|
/** Usually you do not have to
|
||||||
\param evr Pointer to the new receiver. */
|
use this method, it is used by the engine internally.
|
||||||
virtual void setUserEventReceiver(IEventReceiver* evr) = 0;
|
\param evr Pointer to the new receiver. */
|
||||||
|
virtual void setUserEventReceiver(IEventReceiver* evr) = 0;
|
||||||
//! Returns pointer to the current gui skin.
|
|
||||||
/** \return Pointer to the GUI skin. */
|
//! Returns pointer to the current gui skin.
|
||||||
virtual IGUISkin* getSkin() const = 0;
|
/** \return Pointer to the GUI skin. */
|
||||||
|
virtual IGUISkin* getSkin() const = 0;
|
||||||
//! Sets a new GUI Skin
|
|
||||||
/** You can use this to change the appearance of the whole GUI
|
//! Sets a new GUI Skin
|
||||||
Environment. You can set one of the built-in skins or implement your
|
/** You can use this to change the appearance of the whole GUI
|
||||||
own class derived from IGUISkin and enable it using this method.
|
Environment. You can set one of the built-in skins or implement your
|
||||||
To set for example the built-in Windows classic skin, use the following
|
own class derived from IGUISkin and enable it using this method.
|
||||||
code:
|
To set for example the built-in Windows classic skin, use the following
|
||||||
\code
|
code:
|
||||||
gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC);
|
\code
|
||||||
environment->setSkin(newskin);
|
gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC);
|
||||||
newskin->drop();
|
environment->setSkin(newskin);
|
||||||
\endcode
|
newskin->drop();
|
||||||
\param skin New skin to use.
|
\endcode
|
||||||
*/
|
\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.
|
|
||||||
/** Use setSkin() to set the created skin.
|
//! Creates a new GUI Skin based on a template.
|
||||||
\param type The type of the new skin.
|
/** Use setSkin() to set the created skin.
|
||||||
\return Pointer to the created skin.
|
\param type The type of the new skin.
|
||||||
If you no longer need it, you should call IGUISkin::drop().
|
\return Pointer to the created skin.
|
||||||
See IReferenceCounted::drop() for more information. */
|
If you no longer need it, you should call IGUISkin::drop().
|
||||||
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0;
|
||||||
|
|
||||||
//! Creates the image list from the given texture.
|
|
||||||
/** \param texture Texture to split into images
|
//! Creates the image list from the given texture.
|
||||||
\param imageSize Dimension of each image
|
/** \param texture Texture to split into images
|
||||||
\param useAlphaChannel Flag whether alpha channel of the texture should be honored.
|
\param imageSize Dimension of each image
|
||||||
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
\param useAlphaChannel Flag whether alpha channel of the texture should be honored.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIImageList* createImageList( video::ITexture* texture,
|
more information. */
|
||||||
core::dimension2d<s32> imageSize,
|
virtual IGUIImageList* createImageList( video::ITexture* texture,
|
||||||
bool useAlphaChannel ) = 0;
|
core::dimension2d<s32> imageSize,
|
||||||
|
bool useAlphaChannel ) = 0;
|
||||||
//! Returns pointer to the font with the specified filename.
|
|
||||||
/** Loads the font if it was not loaded before.
|
//! Returns pointer to the font with the specified filename.
|
||||||
\param filename Filename of the Font.
|
/** Loads the font if it was not loaded before.
|
||||||
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
\param filename Filename of the Font.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
\return Pointer to the font. Returns 0 if the font could not be loaded.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIFont* getFont(const io::path& filename) = 0;
|
more information. */
|
||||||
|
virtual IGUIFont* getFont(const io::path& filename) = 0;
|
||||||
//! Adds an externally loaded font to the font list.
|
|
||||||
/** This method allows to attach an already loaded font to the list of
|
//! Adds an externally loaded font to the font list.
|
||||||
existing fonts. The font is grabbed if non-null and adding was successful.
|
/** This method allows to attach an already loaded font to the list of
|
||||||
\param name Name the font should be stored as.
|
existing fonts. The font is grabbed if non-null and adding was successful.
|
||||||
\param font Pointer to font to add.
|
\param name Name the font should be stored as.
|
||||||
\return Pointer to the font stored. This can differ from given parameter if the name previously existed. */
|
\param font Pointer to font to add.
|
||||||
virtual IGUIFont* addFont(const io::path& name, IGUIFont* font) = 0;
|
\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;
|
||||||
//! remove loaded font
|
|
||||||
virtual void removeFont(IGUIFont* font) = 0;
|
//! remove loaded font
|
||||||
|
virtual void removeFont(IGUIFont* font) = 0;
|
||||||
//! Returns the default built-in font.
|
|
||||||
/** \return Pointer to the default built-in font.
|
//! Returns the default built-in font.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
/** \return Pointer to the default built-in font.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIFont* getBuiltInFont() const = 0;
|
more information. */
|
||||||
|
virtual IGUIFont* getBuiltInFont() const = 0;
|
||||||
//! Returns pointer to the sprite bank which was added with addEmptySpriteBank
|
|
||||||
/** TODO: This should load files in the future, but not implemented so far.
|
//! Returns pointer to the sprite bank which was added with addEmptySpriteBank
|
||||||
\param filename Name of a spritebank added with addEmptySpriteBank
|
/** TODO: This should load files in the future, but not implemented so far.
|
||||||
\return Pointer to the sprite bank. Returns 0 if it could not be loaded.
|
\param filename Name of a spritebank added with addEmptySpriteBank
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
\return Pointer to the sprite bank. Returns 0 if it could not be loaded.
|
||||||
virtual IGUISpriteBank* getSpriteBank(const io::path& filename) = 0;
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IGUISpriteBank* getSpriteBank(const io::path& filename) = 0;
|
||||||
//! Adds an empty sprite bank to the manager
|
|
||||||
/** \param name Name of the new sprite bank.
|
//! Adds an empty sprite bank to the manager
|
||||||
\return Pointer to the sprite bank.
|
/** \param name Name of the new sprite bank.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
\return Pointer to the sprite bank.
|
||||||
virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) = 0;
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
|
virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) = 0;
|
||||||
//! Returns the root gui element.
|
|
||||||
/** This is the first gui element, the (direct or indirect) parent of all
|
//! Returns the root gui element.
|
||||||
other gui elements. It is a valid IGUIElement, with dimensions the same
|
/** This is the first gui element, the (direct or indirect) parent of all
|
||||||
size as the screen.
|
other gui elements. It is a valid IGUIElement, with dimensions the same
|
||||||
\return Pointer to the root element of the GUI. The returned pointer
|
size as the screen.
|
||||||
should not be dropped. See IReferenceCounted::drop() for more
|
\return Pointer to the root element of the GUI. The returned pointer
|
||||||
information. */
|
should not be dropped. See IReferenceCounted::drop() for more
|
||||||
virtual IGUIElement* getRootGUIElement() = 0;
|
information. */
|
||||||
|
virtual IGUIElement* getRootGUIElement() = 0;
|
||||||
//! Adds a button element.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the button.
|
//! Adds a button element.
|
||||||
\param parent Parent gui element of the button.
|
/** \param rectangle Rectangle specifying the borders of the button.
|
||||||
\param id Id with which the gui element can be identified.
|
\param parent Parent gui element of the button.
|
||||||
\param text Text displayed on the button.
|
\param id Id with which the gui element can be identified.
|
||||||
\param tooltiptext Text displayed in the tooltip.
|
\param text Text displayed on the button.
|
||||||
\return Pointer to the created button. Returns 0 if an error occurred.
|
\param tooltiptext Text displayed in the tooltip.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
\return Pointer to the created button. Returns 0 if an error occurred.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIButton* addButton(const core::rect<s32>& rectangle,
|
more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;
|
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;
|
||||||
//! Adds a scrollbar.
|
|
||||||
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
//! Adds a scrollbar.
|
||||||
or vertical.
|
/** \param horizontal Specifies if the scroll bar is drawn horizontal
|
||||||
\param rectangle Rectangle specifying the borders of the scrollbar.
|
or vertical.
|
||||||
\param parent Parent gui element of the scroll bar.
|
\param rectangle Rectangle specifying the borders of the scrollbar.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the scroll bar.
|
||||||
\return Pointer to the created scrollbar. Returns 0 if an error
|
\param id Id to identify the gui element.
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created scrollbar. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
//! Adds an image element.
|
|
||||||
/** \param image Image to be displayed.
|
//! Adds an image element.
|
||||||
\param pos Position of the image. The width and height of the image is
|
/** \param image Image to be displayed.
|
||||||
taken from the image.
|
\param pos Position of the image. The width and height of the image is
|
||||||
\param useAlphaChannel Sets if the image should use the alpha channel
|
taken from the image.
|
||||||
of the texture to draw itself.
|
\param useAlphaChannel Sets if the image should use the alpha channel
|
||||||
\param parent Parent gui element of the image.
|
of the texture to draw itself.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the image.
|
||||||
\param text Title text of the image (not displayed).
|
\param id Id to identify the gui element.
|
||||||
\return Pointer to the created image element. Returns 0 if an error
|
\param text Title text of the image (not displayed).
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created image element. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
|
IReferenceCounted::drop() for more information. */
|
||||||
bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
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;
|
||||||
//! Adds an image element.
|
|
||||||
/** Use IGUIImage::setImage later to set the image to be displayed.
|
//! Adds an image element.
|
||||||
\param rectangle Rectangle specifying the borders of the image.
|
/** Use IGUIImage::setImage later to set the image to be displayed.
|
||||||
\param parent Parent gui element of the image.
|
\param rectangle Rectangle specifying the borders of the image.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the image.
|
||||||
\param text Title text of the image (not displayed).
|
\param id Id to identify the gui element.
|
||||||
\param useAlphaChannel Sets if the image should use the alpha channel
|
\param text Title text of the image (not displayed).
|
||||||
of the texture to draw itself.
|
\param useAlphaChannel Sets if the image should use the alpha channel
|
||||||
\return Pointer to the created image element. Returns 0 if an error
|
of the texture to draw itself.
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created image element. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) = 0;
|
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) = 0;
|
||||||
//! Adds a checkbox element.
|
|
||||||
/** \param checked Define the initial state of the check box.
|
//! Adds a checkbox element.
|
||||||
\param rectangle Rectangle specifying the borders of the check box.
|
/** \param checked Define the initial state of the check box.
|
||||||
\param parent Parent gui element of the check box.
|
\param rectangle Rectangle specifying the borders of the check box.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the check box.
|
||||||
\param text Title text of the check box.
|
\param id Id to identify the gui element.
|
||||||
\return Pointer to the created check box. Returns 0 if an error
|
\param text Title text of the check box.
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created check box. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
|
||||||
//! Adds a list box element.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the list box.
|
//! Adds a list box element.
|
||||||
\param parent Parent gui element of the list box.
|
/** \param rectangle Rectangle specifying the borders of the list box.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the list box.
|
||||||
\param drawBackground Flag whether the background should be drawn.
|
\param id Id to identify the gui element.
|
||||||
\return Pointer to the created list box. Returns 0 if an error occurred.
|
\param drawBackground Flag whether the background should be drawn.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
\return Pointer to the created list box. Returns 0 if an error occurred.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
|
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
|
||||||
//! Adds a file open dialog.
|
|
||||||
/** \param title Text to be displayed as the title of the dialog.
|
//! Adds a file open dialog.
|
||||||
\param modal Defines if the dialog is modal. This means, that all other
|
/** \param title Text to be displayed as the title of the dialog.
|
||||||
gui elements which were created before the message box cannot be used
|
\param modal Defines if the dialog is modal. This means, that all other
|
||||||
until this messagebox is removed.
|
gui elements which were created before the message box cannot be used
|
||||||
\param parent Parent gui element of the dialog.
|
until this messagebox is removed.
|
||||||
\param id Id to identify the gui element.
|
\param parent Parent gui element of the dialog.
|
||||||
\param restoreCWD If set to true, the current working directory will be
|
\param id Id to identify the gui element.
|
||||||
restored after the dialog is closed in some way. Otherwise the working
|
\param restoreCWD If set to true, the current working directory will be
|
||||||
directory will be the one that the file dialog was last showing.
|
restored after the dialog is closed in some way. Otherwise the working
|
||||||
\param startDir Optional path for which the file dialog will be opened.
|
directory will be the one that the file dialog was last showing.
|
||||||
\return Pointer to the created file open dialog. Returns 0 if an error
|
\param startDir Optional path for which the file dialog will be opened.
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created file open dialog. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title=0,
|
IReferenceCounted::drop() for more information. */
|
||||||
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title=0,
|
||||||
bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
|
bool modal=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
|
bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
|
||||||
//! Adds a static text.
|
|
||||||
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
//! Adds a static text.
|
||||||
\param rectangle Rectangle specifying the borders of the static text
|
/** \param text Text to be displayed. Can be altered after creation by SetText().
|
||||||
\param border Set to true if the static text should have a 3d border.
|
\param rectangle Rectangle specifying the borders of the static text
|
||||||
\param wordWrap Enable if the text should wrap into multiple lines.
|
\param border Set to true if the static text should have a 3d border.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param wordWrap Enable if the text should wrap into multiple lines.
|
||||||
\param id The ID of the element.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
\param fillBackground Enable if the background shall be filled.
|
\param id The ID of the element.
|
||||||
Defaults to false.
|
\param fillBackground Enable if the background shall be filled.
|
||||||
\return Pointer to the created static text. Returns 0 if an error
|
Defaults to false.
|
||||||
occurred. This pointer should not be dropped. See
|
\return Pointer to the created static text. Returns 0 if an error
|
||||||
IReferenceCounted::drop() for more information. */
|
occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1,
|
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
bool fillBackground = false) = 0;
|
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1,
|
||||||
|
bool fillBackground = false) = 0;
|
||||||
//! Adds an edit box.
|
|
||||||
/** Supports Unicode input from every keyboard around the world,
|
//! Adds an edit box.
|
||||||
scrolling, copying and pasting (exchanging data with the clipboard
|
/** Supports Unicode input from every keyboard around the world,
|
||||||
directly), maximum character amount, marking, and all shortcuts like
|
scrolling, copying and pasting (exchanging data with the clipboard
|
||||||
ctrl+X, ctrl+V, ctrl+C, shift+Left, shift+Right, Home, End, and so on.
|
directly), maximum character amount, marking, and all shortcuts like
|
||||||
\param text Text to be displayed. Can be altered after creation
|
ctrl+X, ctrl+V, ctrl+C, shift+Left, shift+Right, Home, End, and so on.
|
||||||
by setText().
|
\param text Text to be displayed. Can be altered after creation
|
||||||
\param rectangle Rectangle specifying the borders of the edit box.
|
by setText().
|
||||||
\param border Set to true if the edit box should have a 3d border.
|
\param rectangle Rectangle specifying the borders of the edit box.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param border Set to true if the edit box should have a 3d border.
|
||||||
Set it to 0 to place the edit box directly in the environment.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
\param id The ID of the element.
|
Set it to 0 to place the edit box directly in the environment.
|
||||||
\return Pointer to the created edit box. Returns 0 if an error occurred.
|
\param id The ID of the element.
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for
|
\return Pointer to the created edit box. Returns 0 if an error occurred.
|
||||||
more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for
|
||||||
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
more information. */
|
||||||
bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
|
||||||
|
bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
//! Adds a tab control to the environment.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the tab control.
|
//! Adds a tab control to the environment.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
/** \param rectangle Rectangle specifying the borders of the tab control.
|
||||||
Set it to 0 to place the tab control directly in the environment.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
\param fillbackground Specifies if the background of the tab control
|
Set it to 0 to place the tab control directly in the environment.
|
||||||
should be drawn.
|
\param fillbackground Specifies if the background of the tab control
|
||||||
\param border Specifies if a flat 3d border should be drawn. This is
|
should be drawn.
|
||||||
usually not necessary unless you place the control directly into
|
\param border Specifies if a flat 3d border should be drawn. This is
|
||||||
the environment without a window as parent.
|
usually not necessary unless you place the control directly into
|
||||||
\param id An identifier for the tab control.
|
the environment without a window as parent.
|
||||||
\return Pointer to the created tab control element. Returns 0 if an
|
\param id An identifier for the tab control.
|
||||||
error occurred. This pointer should not be dropped. See
|
\return Pointer to the created tab control element. Returns 0 if an
|
||||||
IReferenceCounted::drop() for more information. */
|
error occurred. This pointer should not be dropped. See
|
||||||
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, bool fillbackground=false,
|
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
|
||||||
bool border=true, s32 id=-1) = 0;
|
IGUIElement* parent=0, bool fillbackground=false,
|
||||||
|
bool border=true, s32 id=-1) = 0;
|
||||||
//! Adds tab to the environment.
|
|
||||||
/** You can use this element to group other elements. This is not used
|
//! Adds tab to the environment.
|
||||||
for creating tabs on tab controls, please use IGUITabControl::addTab()
|
/** You can use this element to group other elements. This is not used
|
||||||
for this instead.
|
for creating tabs on tab controls, please use IGUITabControl::addTab()
|
||||||
\param rectangle Rectangle specifying the borders of the tab.
|
for this instead.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
\param rectangle Rectangle specifying the borders of the tab.
|
||||||
Set it to 0 to place the tab directly in the environment.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
\param id An identifier for the tab.
|
Set it to 0 to place the tab directly in the environment.
|
||||||
\return Pointer to the created tab. Returns 0 if an
|
\param id An identifier for the tab.
|
||||||
error occurred. This pointer should not be dropped. See
|
\return Pointer to the created tab. Returns 0 if an
|
||||||
IReferenceCounted::drop() for more information. */
|
error occurred. This pointer should not be dropped. See
|
||||||
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
//! Adds a combo box to the environment.
|
|
||||||
/** \param rectangle Rectangle specifying the borders of the combo box.
|
//! Adds a combo box to the environment.
|
||||||
\param parent Parent item of the element, e.g. a window.
|
/** \param rectangle Rectangle specifying the borders of the combo box.
|
||||||
Set it to 0 to place the combo box directly in the environment.
|
\param parent Parent item of the element, e.g. a window.
|
||||||
\param id An identifier for the combo box.
|
Set it to 0 to place the combo box directly in the environment.
|
||||||
\return Pointer to the created combo box. Returns 0 if an
|
\param id An identifier for the combo box.
|
||||||
error occurred. This pointer should not be dropped. See
|
\return Pointer to the created combo box. Returns 0 if an
|
||||||
IReferenceCounted::drop() for more information. */
|
error occurred. This pointer should not be dropped. See
|
||||||
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
IReferenceCounted::drop() for more information. */
|
||||||
IGUIElement* parent=0, s32 id=-1) = 0;
|
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
|
||||||
|
IGUIElement* parent=0, s32 id=-1) = 0;
|
||||||
//! 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
|
//! Find the next element which would be selected when pressing the tab-key
|
||||||
would happen otherwise by the tab-keys.
|
/** If you set the focus for the result you can manually force focus-changes like they
|
||||||
\param reverse When true it will search backward (toward lower TabOrder numbers, like shift+tab)
|
would happen otherwise by the tab-keys.
|
||||||
\param group When true it will search for the next tab-group (like ctrl+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)
|
||||||
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
|
|
||||||
/** The default is (EFF_SET_ON_LMOUSE_DOWN | EFF_SET_ON_TAB).
|
//! Set the way the gui will handle automatic focus changes
|
||||||
with the left mouse button.
|
/** The default is (EFF_SET_ON_LMOUSE_DOWN | EFF_SET_ON_TAB).
|
||||||
This does not affect the setFocus function itself - users can still call that whenever they want on any element.
|
with the left mouse button.
|
||||||
\param flags A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
|
This does not affect the setFocus function itself - users can still call that whenever they want on any element.
|
||||||
virtual void setFocusBehavior(u32 flags) = 0;
|
\param flags A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
|
||||||
|
virtual void setFocusBehavior(u32 flags) = 0;
|
||||||
//! Get the way the gui does handle focus changes
|
|
||||||
/** \returns A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
|
//! Get the way the gui does handle focus changes
|
||||||
virtual u32 getFocusBehavior() const = 0;
|
/** \returns A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
|
||||||
|
virtual u32 getFocusBehavior() const = 0;
|
||||||
//! Adds a IGUIElement to deletion queue.
|
|
||||||
/** Queued elements will be removed at the end of each drawAll call.
|
//! Adds a IGUIElement to deletion queue.
|
||||||
Or latest in the destructor of the GUIEnvironment.
|
/** Queued elements will be removed at the end of each drawAll call.
|
||||||
This can be used to allow an element removing itself safely in a function
|
Or latest in the destructor of the GUIEnvironment.
|
||||||
iterating over gui elements, like an overloaded IGUIElement::draw or
|
This can be used to allow an element removing itself safely in a function
|
||||||
IGUIElement::OnPostRender function.
|
iterating over gui elements, like an overloaded IGUIElement::draw or
|
||||||
Note that in general just calling IGUIElement::remove() is enough.
|
IGUIElement::OnPostRender function.
|
||||||
Unless you create your own GUI elements removing themselves you won't need it.
|
Note that in general just calling IGUIElement::remove() is enough.
|
||||||
\param element: Element to remove */
|
Unless you create your own GUI elements removing themselves you won't need it.
|
||||||
virtual void addToDeletionQueue(IGUIElement* element) = 0;
|
\param element: Element to remove */
|
||||||
};
|
virtual void addToDeletionQueue(IGUIElement* element) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,46 +1,50 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "path.h"
|
#include "IGUIElement.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! Standard file chooser dialog.
|
|
||||||
/** \warning When the user selects a folder this does change the current working directory
|
//! Standard file chooser dialog.
|
||||||
|
/** \warning When the user selects a folder this does change the current working directory
|
||||||
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
|
||||||
\li EGET_DIRECTORY_SELECTED
|
\par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
\li EGET_FILE_SELECTED
|
\li EGET_DIRECTORY_SELECTED
|
||||||
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
\li EGET_FILE_SELECTED
|
||||||
*/
|
\li EGET_FILE_CHOOSE_DIALOG_CANCELLED
|
||||||
class IGUIFileOpenDialog : public IGUIElement
|
*/
|
||||||
{
|
class IGUIFileOpenDialog : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
|
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
|
||||||
//! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected.
|
|
||||||
virtual const wchar_t* getFileName() const = 0;
|
//! Returns the filename of the selected file converted to wide characters. Returns NULL if no file was selected.
|
||||||
|
virtual const wchar_t* getFileName() const = 0;
|
||||||
//! Returns the filename of the selected file. Is empty if no file was selected.
|
|
||||||
virtual const io::path& getFileNameP() const = 0;
|
//! Returns the filename of the selected file. Is empty if no file was selected.
|
||||||
|
virtual const io::path& getFileNameP() const = 0;
|
||||||
//! Returns the directory of the selected file. Empty if no directory was selected.
|
|
||||||
virtual const io::path& getDirectoryName() const = 0;
|
//! Returns the directory of the selected file. Empty if no directory was selected.
|
||||||
|
virtual const io::path& getDirectoryName() const = 0;
|
||||||
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
|
||||||
virtual const wchar_t* getDirectoryNameW() const = 0;
|
//! Returns the directory of the selected file converted to wide characters. Returns NULL if no directory was selected.
|
||||||
};
|
virtual const wchar_t* getDirectoryNameW() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,100 +1,104 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SColor.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "rect.h"
|
#include "SColor.h"
|
||||||
#include "irrString.h"
|
#include "rect.h"
|
||||||
|
#include "irrString.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! An enum for the different types of GUI font.
|
|
||||||
enum EGUI_FONT_TYPE
|
//! An enum for the different types of GUI font.
|
||||||
{
|
enum EGUI_FONT_TYPE
|
||||||
//! Bitmap fonts loaded from an XML file or a texture.
|
{
|
||||||
EGFT_BITMAP = 0,
|
//! Bitmap fonts loaded from an XML file or a texture.
|
||||||
|
EGFT_BITMAP = 0,
|
||||||
//! Scalable vector fonts loaded from an XML file.
|
|
||||||
/** These fonts reside in system memory and use no video memory
|
//! Scalable vector fonts loaded from an XML file.
|
||||||
until they are displayed. These are slower than bitmap fonts
|
/** These fonts reside in system memory and use no video memory
|
||||||
but can be easily scaled and rotated. */
|
until they are displayed. These are slower than bitmap fonts
|
||||||
EGFT_VECTOR,
|
but can be easily scaled and rotated. */
|
||||||
|
EGFT_VECTOR,
|
||||||
//! A font which uses a the native API provided by the operating system.
|
|
||||||
/** Currently not used. */
|
//! A font which uses a the native API provided by the operating system.
|
||||||
EGFT_OS,
|
/** Currently not used. */
|
||||||
|
EGFT_OS,
|
||||||
//! An external font type provided by the user.
|
|
||||||
EGFT_CUSTOM
|
//! An external font type provided by the user.
|
||||||
};
|
EGFT_CUSTOM
|
||||||
|
};
|
||||||
//! Font interface.
|
|
||||||
class IGUIFont : public virtual IReferenceCounted
|
//! Font interface.
|
||||||
{
|
class IGUIFont : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Draws some text and clips it to the specified rectangle if wanted.
|
|
||||||
/** \param text: Text to draw
|
//! Draws some text and clips it to the specified rectangle if wanted.
|
||||||
\param position: Rectangle specifying position where to draw the text.
|
/** \param text: Text to draw
|
||||||
\param color: Color of the text
|
\param position: Rectangle specifying position where to draw the text.
|
||||||
\param hcenter: Specifies if the text should be centered horizontally into the rectangle.
|
\param color: Color of the text
|
||||||
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
\param hcenter: Specifies if the text should be centered horizontally into the rectangle.
|
||||||
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
\param vcenter: Specifies if the text should be centered vertically into the rectangle.
|
||||||
If the pointer is null, no clipping will be done. */
|
\param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||||
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
If the pointer is null, no clipping will be done. */
|
||||||
video::SColor color, bool hcenter=false, bool vcenter=false,
|
virtual void draw(const core::stringw& text, const core::rect<s32>& position,
|
||||||
const core::rect<s32>* clip=0) = 0;
|
video::SColor color, bool hcenter=false, bool vcenter=false,
|
||||||
|
const core::rect<s32>* clip=0) = 0;
|
||||||
//! Calculates the width and height of a given string of text.
|
|
||||||
/** \return Returns width and height of the area covered by the text if
|
//! Calculates the width and height of a given string of text.
|
||||||
it would be drawn. */
|
/** \return Returns width and height of the area covered by the text if
|
||||||
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const = 0;
|
it would be drawn. */
|
||||||
|
virtual core::dimension2d<u32> getDimension(const wchar_t* text) const = 0;
|
||||||
//! Calculates the index of the character in the text which is on a specific position.
|
|
||||||
/** \param text: Text string.
|
//! Calculates the index of the character in the text which is on a specific position.
|
||||||
\param pixel_x: X pixel position of which the index of the character will be returned.
|
/** \param text: Text string.
|
||||||
\return Returns zero based index of the character in the text, and -1 if no no character
|
\param pixel_x: X pixel position of which the index of the character will be returned.
|
||||||
is on this position. (=the text is too short). */
|
\return Returns zero based index of the character in the text, and -1 if no no character
|
||||||
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0;
|
is on this position. (=the text is too short). */
|
||||||
|
virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0;
|
||||||
//! Returns the type of this font
|
|
||||||
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
//! Returns the type of this font
|
||||||
|
virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; }
|
||||||
//! Sets global kerning width for the font.
|
|
||||||
virtual void setKerningWidth (s32 kerning) = 0;
|
//! Sets global kerning width for the font.
|
||||||
|
virtual void setKerningWidth (s32 kerning) = 0;
|
||||||
//! Sets global kerning height for the font.
|
|
||||||
virtual void setKerningHeight (s32 kerning) = 0;
|
//! Sets global kerning height for the font.
|
||||||
|
virtual void setKerningHeight (s32 kerning) = 0;
|
||||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
|
||||||
/** the global kerning distance is returned.
|
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||||
\param thisLetter: If this parameter is provided, the left side kerning
|
/** the global kerning distance is returned.
|
||||||
for this letter is added to the global kerning value. For example, a
|
\param thisLetter: If this parameter is provided, the left side kerning
|
||||||
space might only be one pixel wide, but it may be displayed as several
|
for this letter is added to the global kerning value. For example, a
|
||||||
pixels.
|
space might only be one pixel wide, but it may be displayed as several
|
||||||
\param previousLetter: If provided, kerning is calculated for both
|
pixels.
|
||||||
letters and added to the global kerning value. For example, in a font
|
\param previousLetter: If provided, kerning is calculated for both
|
||||||
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
letters and added to the global kerning value. For example, in a font
|
||||||
tucked neatly under the 'W'.
|
which supports kerning pairs a string such as 'Wo' may have the 'o'
|
||||||
*/
|
tucked neatly under the 'W'.
|
||||||
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0;
|
*/
|
||||||
|
virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0;
|
||||||
//! Returns the distance between letters
|
|
||||||
virtual s32 getKerningHeight() const = 0;
|
//! Returns the distance between letters
|
||||||
|
virtual s32 getKerningHeight() const = 0;
|
||||||
//! Define which characters should not be drawn by the font.
|
|
||||||
/** For example " " would not draw any space which is usually blank in
|
//! Define which characters should not be drawn by the font.
|
||||||
most fonts.
|
/** For example " " would not draw any space which is usually blank in
|
||||||
\param s String of symbols which are not send down to the videodriver
|
most fonts.
|
||||||
*/
|
\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 irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,42 +1,46 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
class IGUISpriteBank;
|
{
|
||||||
|
class IGUISpriteBank;
|
||||||
//! Font interface.
|
|
||||||
class IGUIFontBitmap : public IGUIFont
|
//! Font interface.
|
||||||
{
|
class IGUIFontBitmap : public IGUIFont
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Returns the type of this font
|
|
||||||
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
//! Returns the type of this font
|
||||||
|
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
|
||||||
//! returns the parsed Symbol Information
|
|
||||||
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
//! returns the parsed Symbol Information
|
||||||
|
virtual IGUISpriteBank* getSpriteBank() const = 0;
|
||||||
//! returns the sprite number from a given character
|
|
||||||
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
//! returns the sprite number from a given character
|
||||||
|
virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0;
|
||||||
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
|
||||||
/** the global kerning distance is returned.
|
//! Gets kerning values (distance between letters) for the font. If no parameters are provided,
|
||||||
\param thisLetter: If this parameter is provided, the left side kerning for this letter is added
|
/** the global kerning distance is returned.
|
||||||
to the global kerning value. For example, a space might only be one pixel wide, but it may
|
\param thisLetter: If this parameter is provided, the left side kerning for this letter is added
|
||||||
be displayed as several pixels.
|
to the global kerning value. For example, a space might only be one pixel wide, but it may
|
||||||
\param previousLetter: If provided, kerning is calculated for both letters and added to the global
|
be displayed as several pixels.
|
||||||
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
\param previousLetter: If provided, kerning is calculated for both letters and added to the global
|
||||||
left side kerning value of thisLetter, then add the global value.
|
kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the
|
||||||
*/
|
left side kerning value of thisLetter, then add the global value.
|
||||||
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
|
*/
|
||||||
};
|
s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const override = 0;
|
||||||
|
};
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,84 +1,87 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
class ITexture;
|
{
|
||||||
}
|
class ITexture;
|
||||||
namespace gui
|
}
|
||||||
{
|
namespace gui
|
||||||
//! GUI element displaying an image.
|
{
|
||||||
class IGUIImage : public IGUIElement
|
//! GUI element displaying an image.
|
||||||
{
|
class IGUIImage : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {}
|
||||||
//! Sets an image texture
|
|
||||||
virtual void setImage(video::ITexture* image) = 0;
|
//! Sets an image texture
|
||||||
|
virtual void setImage(video::ITexture* image) = 0;
|
||||||
//! Gets the image texture
|
|
||||||
virtual video::ITexture* getImage() const = 0;
|
//! Gets the image texture
|
||||||
|
virtual video::ITexture* getImage() const = 0;
|
||||||
//! Sets the color of the image
|
|
||||||
/** \param color Color with which the image is drawn. If the color
|
//! Sets the color of the image
|
||||||
equals Color(255,255,255,255) it is ignored. */
|
/** \param color Color with which the image is drawn. If the color
|
||||||
virtual void setColor(video::SColor color) = 0;
|
equals Color(255,255,255,255) it is ignored. */
|
||||||
|
virtual void setColor(video::SColor color) = 0;
|
||||||
//! Sets if the image should scale to fit the element
|
|
||||||
virtual void setScaleImage(bool scale) = 0;
|
//! Sets if the image should scale to fit the element
|
||||||
|
virtual void setScaleImage(bool scale) = 0;
|
||||||
//! Sets if the image should use its alpha channel to draw itself
|
|
||||||
virtual void setUseAlphaChannel(bool use) = 0;
|
//! Sets if the image should use its alpha channel to draw itself
|
||||||
|
virtual void setUseAlphaChannel(bool use) = 0;
|
||||||
//! Gets the color of the image
|
|
||||||
virtual video::SColor getColor() const = 0;
|
//! Gets the color of the image
|
||||||
|
virtual video::SColor getColor() const = 0;
|
||||||
//! Returns true if the image is scaled to fit, false if not
|
|
||||||
virtual bool isImageScaled() const = 0;
|
//! Returns true if the image is scaled to fit, false if not
|
||||||
|
virtual bool isImageScaled() const = 0;
|
||||||
//! Returns true if the image is using the alpha channel, false if not
|
|
||||||
virtual bool isAlphaChannelUsed() const = 0;
|
//! Returns true if the image is using the alpha channel, false if not
|
||||||
|
virtual bool isAlphaChannelUsed() const = 0;
|
||||||
//! Sets the source rectangle of the image. By default the full image is used.
|
|
||||||
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
//! Sets the source rectangle of the image. By default the full image is used.
|
||||||
virtual void setSourceRect(const core::rect<s32>& sourceRect) = 0;
|
/** \param sourceRect coordinates inside the image or an area with size 0 for using the full image (default). */
|
||||||
|
virtual void setSourceRect(const core::rect<s32>& sourceRect) = 0;
|
||||||
//! Returns the customized source rectangle of the image to be used.
|
|
||||||
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
//! Returns the customized source rectangle of the image to be used.
|
||||||
virtual core::rect<s32> getSourceRect() const = 0;
|
/** By default an empty rectangle of width and height 0 is returned which means the full image is used. */
|
||||||
|
virtual core::rect<s32> getSourceRect() const = 0;
|
||||||
//! Restrict drawing-area.
|
|
||||||
/** This allows for example to use the image as a progress bar.
|
//! Restrict drawing-area.
|
||||||
Base for area is the image, which means:
|
/** This allows for example to use the image as a progress bar.
|
||||||
- The original clipping area when the texture is scaled or there is no texture.
|
Base for area is the image, which means:
|
||||||
- The source-rect for an unscaled texture (but still restricted afterward by the clipping area)
|
- The original clipping area when the texture is scaled or there is no texture.
|
||||||
Unlike normal clipping this does not affect the gui-children.
|
- The source-rect for an unscaled texture (but still restricted afterward by the clipping area)
|
||||||
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
Unlike normal clipping this does not affect the gui-children.
|
||||||
*/
|
\param drawBoundUVs: Coordinates between 0 and 1 where 0 are for left+top and 1 for right+bottom
|
||||||
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
*/
|
||||||
|
virtual void setDrawBounds(const core::rect<f32>& drawBoundUVs = core::rect<f32>(0.f, 0.f, 1.f, 1.f)) = 0;
|
||||||
//! Get drawing-area restrictions.
|
|
||||||
virtual core::rect<f32> getDrawBounds() const = 0;
|
//! Get drawing-area restrictions.
|
||||||
|
virtual core::rect<f32> getDrawBounds() const = 0;
|
||||||
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
|
||||||
/** By default it's enabled */
|
//! Sets whether to draw a background color (EGDC_3D_DARK_SHADOW) when no texture is set
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
/** By default it's enabled */
|
||||||
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
//! Checks if a background is drawn when no texture is set
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
//! Checks if a background is drawn when no texture is set
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
};
|
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,41 +1,45 @@
|
|||||||
// 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 "rect.h"
|
#include "IGUIElement.h"
|
||||||
#include "irrTypes.h"
|
#include "rect.h"
|
||||||
|
#include "irrTypes.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! Font interface.
|
|
||||||
class IGUIImageList : public virtual IReferenceCounted
|
//! Font interface.
|
||||||
{
|
class IGUIImageList : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Destructor
|
|
||||||
virtual ~IGUIImageList() {};
|
//! Destructor
|
||||||
|
virtual ~IGUIImageList() {};
|
||||||
//! Draws an image and clips it to the specified rectangle if wanted
|
|
||||||
//! \param index: Index of the image
|
//! Draws an image and clips it to the specified rectangle if wanted
|
||||||
//! \param destPos: Position of the image to draw
|
//! \param index: Index of the image
|
||||||
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
//! \param destPos: Position of the image to draw
|
||||||
//! If the pointer is null, no clipping will be done.
|
//! \param clip: Optional pointer to a rectangle against which the text will be clipped.
|
||||||
virtual void draw(s32 index, const core::position2d<s32>& destPos,
|
//! If the pointer is null, no clipping will be done.
|
||||||
const core::rect<s32>* clip = 0) = 0;
|
virtual void draw(s32 index, const core::position2d<s32>& destPos,
|
||||||
|
const core::rect<s32>* clip = 0) = 0;
|
||||||
//! Returns the count of Images in the list.
|
|
||||||
//! \return Returns the count of Images in the list.
|
//! Returns the count of Images in the list.
|
||||||
virtual s32 getImageCount() const = 0;
|
//! \return Returns the count of Images in the list.
|
||||||
|
virtual s32 getImageCount() const = 0;
|
||||||
//! Returns the size of the images in the list.
|
|
||||||
//! \return Returns the size of the images in the list.
|
//! Returns the size of the images in the list.
|
||||||
virtual core::dimension2d<s32> getImageSize() const = 0;
|
//! \return Returns the size of the images in the list.
|
||||||
};
|
virtual core::dimension2d<s32> getImageSize() const = 0;
|
||||||
|
};
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,138 +1,142 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SColor.h"
|
#include "IGUIElement.h"
|
||||||
|
#include "SColor.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
class IGUISpriteBank;
|
{
|
||||||
class IGUIScrollBar;
|
class IGUISpriteBank;
|
||||||
|
class IGUIScrollBar;
|
||||||
//! Enumeration for listbox colors
|
|
||||||
enum EGUI_LISTBOX_COLOR
|
//! Enumeration for listbox colors
|
||||||
{
|
enum EGUI_LISTBOX_COLOR
|
||||||
//! Color of text
|
{
|
||||||
EGUI_LBC_TEXT=0,
|
//! Color of text
|
||||||
//! Color of selected text
|
EGUI_LBC_TEXT=0,
|
||||||
EGUI_LBC_TEXT_HIGHLIGHT,
|
//! Color of selected text
|
||||||
//! Color of icon
|
EGUI_LBC_TEXT_HIGHLIGHT,
|
||||||
EGUI_LBC_ICON,
|
//! Color of icon
|
||||||
//! Color of selected icon
|
EGUI_LBC_ICON,
|
||||||
EGUI_LBC_ICON_HIGHLIGHT,
|
//! Color of selected icon
|
||||||
//! Not used, just counts the number of available colors
|
EGUI_LBC_ICON_HIGHLIGHT,
|
||||||
EGUI_LBC_COUNT
|
//! Not used, just counts the number of available colors
|
||||||
};
|
EGUI_LBC_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
//! Default list box GUI element.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! 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:
|
{
|
||||||
//! constructor
|
public:
|
||||||
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {}
|
||||||
//! returns amount of list items
|
|
||||||
virtual u32 getItemCount() const = 0;
|
//! returns amount of list items
|
||||||
|
virtual u32 getItemCount() const = 0;
|
||||||
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
|
||||||
virtual const wchar_t* getListItem(u32 id) const = 0;
|
//! returns string of a list item. the may id be a value from 0 to itemCount-1
|
||||||
|
virtual const wchar_t* getListItem(u32 id) const = 0;
|
||||||
//! adds an list item, returns id of item
|
|
||||||
virtual u32 addItem(const wchar_t* text) = 0;
|
//! adds an list item, returns id of item
|
||||||
|
virtual u32 addItem(const wchar_t* text) = 0;
|
||||||
//! adds an list item with an icon
|
|
||||||
/** \param text Text of list entry
|
//! adds an list item with an icon
|
||||||
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
/** \param text Text of list entry
|
||||||
\return The id of the new created item */
|
\param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
||||||
virtual u32 addItem(const wchar_t* text, s32 icon) = 0;
|
\return The id of the new created item */
|
||||||
|
virtual u32 addItem(const wchar_t* text, s32 icon) = 0;
|
||||||
//! Removes an item from the list
|
|
||||||
virtual void removeItem(u32 index) = 0;
|
//! Removes an item from the list
|
||||||
|
virtual void removeItem(u32 index) = 0;
|
||||||
//! get the the id of the item at the given absolute coordinates
|
|
||||||
/** \return The id of the list item or -1 when no item is at those coordinates*/
|
//! get the the id of the item at the given absolute coordinates
|
||||||
virtual s32 getItemAt(s32 xpos, s32 ypos) const = 0;
|
/** \return The id of the list item or -1 when no item is at those coordinates*/
|
||||||
|
virtual s32 getItemAt(s32 xpos, s32 ypos) const = 0;
|
||||||
//! Returns the icon of an item
|
|
||||||
virtual s32 getIcon(u32 index) const = 0;
|
//! Returns the icon of an item
|
||||||
|
virtual s32 getIcon(u32 index) const = 0;
|
||||||
//! Sets the sprite bank which should be used to draw list icons.
|
|
||||||
/** This font is set to the sprite bank of the built-in-font by
|
//! Sets the sprite bank which should be used to draw list icons.
|
||||||
default. A sprite can be displayed in front of every list item.
|
/** This font is set to the sprite bank of the built-in-font by
|
||||||
An icon is an index within the icon sprite bank. Several
|
default. A sprite can be displayed in front of every list item.
|
||||||
default icons are available in the skin through getIcon. */
|
An icon is an index within the icon sprite bank. Several
|
||||||
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
default icons are available in the skin through getIcon. */
|
||||||
|
virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
|
||||||
//! clears the list, deletes all items in the listbox
|
|
||||||
virtual void clear() = 0;
|
//! clears the list, deletes all items in the listbox
|
||||||
|
virtual void clear() = 0;
|
||||||
//! returns id of selected item. returns -1 if no item is selected.
|
|
||||||
virtual s32 getSelected() const = 0;
|
//! returns id of selected item. returns -1 if no item is selected.
|
||||||
|
virtual s32 getSelected() const = 0;
|
||||||
//! sets the selected item. Set this to -1 if no item should be selected
|
|
||||||
virtual void setSelected(s32 index) = 0;
|
//! sets the selected item. Set this to -1 if no item should be selected
|
||||||
|
virtual void setSelected(s32 index) = 0;
|
||||||
//! sets the selected item. Set this to 0 if no item should be selected
|
|
||||||
virtual void setSelected(const wchar_t *item) = 0;
|
//! sets the selected item. Set this to 0 if no item should be selected
|
||||||
|
virtual void setSelected(const wchar_t *item) = 0;
|
||||||
//! set whether the listbox should scroll to newly selected items
|
|
||||||
virtual void setAutoScrollEnabled(bool scroll) = 0;
|
//! set whether the listbox should scroll to newly selected items
|
||||||
|
virtual void setAutoScrollEnabled(bool scroll) = 0;
|
||||||
//! returns true if automatic scrolling is enabled, false if not.
|
|
||||||
virtual bool isAutoScrollEnabled() const = 0;
|
//! returns true if automatic scrolling is enabled, false if not.
|
||||||
|
virtual bool isAutoScrollEnabled() const = 0;
|
||||||
//! set all item colors at given index to color
|
|
||||||
virtual void setItemOverrideColor(u32 index, video::SColor color) = 0;
|
//! set all item colors at given index to color
|
||||||
|
virtual void setItemOverrideColor(u32 index, video::SColor color) = 0;
|
||||||
//! set all item colors of specified type at given index to color
|
|
||||||
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) = 0;
|
//! set all item colors of specified type at given index to color
|
||||||
|
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) = 0;
|
||||||
//! clear all item colors at index
|
|
||||||
virtual void clearItemOverrideColor(u32 index) = 0;
|
//! clear all item colors at index
|
||||||
|
virtual void clearItemOverrideColor(u32 index) = 0;
|
||||||
//! clear item color at index for given colortype
|
|
||||||
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) = 0;
|
//! clear item color at index for given colortype
|
||||||
|
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) = 0;
|
||||||
//! has the item at index its color overwritten?
|
|
||||||
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
//! has the item at index its color overwritten?
|
||||||
|
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||||
//! return the overwrite color at given item index.
|
|
||||||
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
//! return the overwrite color at given item index.
|
||||||
|
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||||
//! return the default color which is used for the given colorType
|
|
||||||
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
//! return the default color which is used for the given colorType
|
||||||
|
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0;
|
||||||
//! set the item at the given index
|
|
||||||
virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
//! set the item at the given index
|
||||||
|
virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||||
//! Insert the item at the given index
|
|
||||||
/** \return The index on success or -1 on failure. */
|
//! Insert the item at the given index
|
||||||
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
/** \return The index on success or -1 on failure. */
|
||||||
|
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0;
|
||||||
//! Swap the items at the given indices
|
|
||||||
virtual void swapItems(u32 index1, u32 index2) = 0;
|
//! Swap the items at the given indices
|
||||||
|
virtual void swapItems(u32 index1, u32 index2) = 0;
|
||||||
//! set global itemHeight
|
|
||||||
virtual void setItemHeight( s32 height ) = 0;
|
//! set global itemHeight
|
||||||
|
virtual void setItemHeight( s32 height ) = 0;
|
||||||
//! Sets whether to draw the background
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
//! Sets whether to draw the background
|
||||||
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
//! Access the vertical scrollbar
|
|
||||||
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
//! Access the vertical scrollbar
|
||||||
};
|
virtual IGUIScrollBar* getVerticalScrollBar() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,61 +1,65 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! Default scroll bar GUI element.
|
|
||||||
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
//! Default scroll bar GUI element.
|
||||||
\li EGET_SCROLL_BAR_CHANGED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
*/
|
\li EGET_SCROLL_BAR_CHANGED
|
||||||
class IGUIScrollBar : public IGUIElement
|
*/
|
||||||
{
|
class IGUIScrollBar : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
|
||||||
//! sets the maximum value of the scrollbar.
|
|
||||||
virtual void setMax(s32 max) = 0;
|
//! sets the maximum value of the scrollbar.
|
||||||
//! gets the maximum value of the scrollbar.
|
virtual void setMax(s32 max) = 0;
|
||||||
virtual s32 getMax() const = 0;
|
//! gets the maximum value of the scrollbar.
|
||||||
|
virtual s32 getMax() const = 0;
|
||||||
//! sets the minimum value of the scrollbar.
|
|
||||||
virtual void setMin(s32 min) = 0;
|
//! sets the minimum value of the scrollbar.
|
||||||
//! gets the minimum value of the scrollbar.
|
virtual void setMin(s32 min) = 0;
|
||||||
virtual s32 getMin() const = 0;
|
//! gets the minimum value of the scrollbar.
|
||||||
|
virtual s32 getMin() const = 0;
|
||||||
//! gets the small step value
|
|
||||||
virtual s32 getSmallStep() const = 0;
|
//! gets the small step value
|
||||||
|
virtual s32 getSmallStep() const = 0;
|
||||||
//! Sets the small step
|
|
||||||
/** That is the amount that the value changes by when clicking
|
//! Sets the small step
|
||||||
on the buttons or using the cursor keys. */
|
/** That is the amount that the value changes by when clicking
|
||||||
virtual void setSmallStep(s32 step) = 0;
|
on the buttons or using the cursor keys. */
|
||||||
|
virtual void setSmallStep(s32 step) = 0;
|
||||||
//! gets the large step value
|
|
||||||
virtual s32 getLargeStep() const = 0;
|
//! gets the large step value
|
||||||
|
virtual s32 getLargeStep() const = 0;
|
||||||
//! Sets the large step
|
|
||||||
/** That is the amount that the value changes by when clicking
|
//! Sets the large step
|
||||||
in the tray, or using the page up and page down keys. */
|
/** That is the amount that the value changes by when clicking
|
||||||
virtual void setLargeStep(s32 step) = 0;
|
in the tray, or using the page up and page down keys. */
|
||||||
|
virtual void setLargeStep(s32 step) = 0;
|
||||||
//! gets the current position of the scrollbar
|
|
||||||
virtual s32 getPos() const = 0;
|
//! gets the current position of the scrollbar
|
||||||
|
virtual s32 getPos() const = 0;
|
||||||
//! sets the current position of the scrollbar
|
|
||||||
virtual void setPos(s32 pos) = 0;
|
//! sets the current position of the scrollbar
|
||||||
};
|
virtual void setPos(s32 pos) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
1156
include/IGUISkin.h
1156
include/IGUISkin.h
File diff suppressed because it is too large
Load Diff
@ -1,138 +1,142 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "irrArray.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "SColor.h"
|
#include "irrArray.h"
|
||||||
#include "rect.h"
|
#include "SColor.h"
|
||||||
|
#include "rect.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace video
|
|
||||||
{
|
namespace video
|
||||||
class ITexture;
|
{
|
||||||
} // end namespace video
|
class ITexture;
|
||||||
|
} // end namespace video
|
||||||
namespace gui
|
|
||||||
{
|
namespace gui
|
||||||
|
{
|
||||||
//! A single sprite frame.
|
|
||||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
//! A single sprite frame.
|
||||||
struct SGUISpriteFrame
|
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||||
{
|
struct SGUISpriteFrame
|
||||||
SGUISpriteFrame() : textureNumber(0), rectNumber(0)
|
{
|
||||||
{
|
SGUISpriteFrame() : textureNumber(0), rectNumber(0)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
SGUISpriteFrame(u32 textureIndex, u32 positionIndex)
|
|
||||||
: textureNumber(textureIndex), rectNumber(positionIndex)
|
SGUISpriteFrame(u32 textureIndex, u32 positionIndex)
|
||||||
{
|
: textureNumber(textureIndex), rectNumber(positionIndex)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
//! Texture index in IGUISpriteBank
|
|
||||||
u32 textureNumber;
|
//! Texture index in IGUISpriteBank
|
||||||
|
u32 textureNumber;
|
||||||
//! Index in IGUISpriteBank::getPositions()
|
|
||||||
u32 rectNumber;
|
//! Index in IGUISpriteBank::getPositions()
|
||||||
};
|
u32 rectNumber;
|
||||||
|
};
|
||||||
//! A sprite composed of several frames.
|
|
||||||
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
//! A sprite composed of several frames.
|
||||||
struct SGUISprite
|
// Note for implementer: Can't fix variable names to uppercase as this is a public interface used since a while
|
||||||
{
|
struct SGUISprite
|
||||||
SGUISprite() : frameTime(0) {}
|
{
|
||||||
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0)
|
SGUISprite() : frameTime(0) {}
|
||||||
{
|
SGUISprite(const SGUISpriteFrame& firstFrame) : frameTime(0)
|
||||||
Frames.push_back(firstFrame);
|
{
|
||||||
}
|
Frames.push_back(firstFrame);
|
||||||
|
}
|
||||||
core::array<SGUISpriteFrame> Frames;
|
|
||||||
u32 frameTime;
|
core::array<SGUISpriteFrame> Frames;
|
||||||
};
|
u32 frameTime;
|
||||||
|
};
|
||||||
|
|
||||||
//! Sprite bank interface.
|
|
||||||
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
//! Sprite bank interface.
|
||||||
* for more information how to use the spritebank.
|
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
|
||||||
*/
|
* for more information how to use the spritebank.
|
||||||
class IGUISpriteBank : public virtual IReferenceCounted
|
*/
|
||||||
{
|
class IGUISpriteBank : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Returns the list of rectangles held by the sprite bank
|
|
||||||
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
//! Returns the list of rectangles held by the sprite bank
|
||||||
|
virtual core::array< core::rect<s32> >& getPositions() = 0;
|
||||||
//! Returns the array of animated sprites within the sprite bank
|
|
||||||
virtual core::array< SGUISprite >& getSprites() = 0;
|
//! Returns the array of animated sprites within the sprite bank
|
||||||
|
virtual core::array< SGUISprite >& getSprites() = 0;
|
||||||
//! Returns the number of textures held by the sprite bank
|
|
||||||
virtual u32 getTextureCount() const = 0;
|
//! Returns the number of textures held by the sprite bank
|
||||||
|
virtual u32 getTextureCount() const = 0;
|
||||||
//! Gets the texture with the specified index
|
|
||||||
virtual video::ITexture* getTexture(u32 index) const = 0;
|
//! Gets the texture with the specified index
|
||||||
|
virtual video::ITexture* getTexture(u32 index) const = 0;
|
||||||
//! Adds a texture to the sprite bank
|
|
||||||
virtual void addTexture(video::ITexture* texture) = 0;
|
//! Adds a texture to the sprite bank
|
||||||
|
virtual void addTexture(video::ITexture* texture) = 0;
|
||||||
//! Changes one of the textures in the sprite bank
|
|
||||||
virtual void setTexture(u32 index, video::ITexture* texture) = 0;
|
//! Changes one of the textures in the sprite bank
|
||||||
|
virtual void setTexture(u32 index, video::ITexture* texture) = 0;
|
||||||
//! Add the texture and use it for a single non-animated sprite.
|
|
||||||
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
//! Add the texture and use it for a single non-animated sprite.
|
||||||
\returns The index of the sprite or -1 on failure */
|
/** The texture and the corresponding rectangle and sprite will all be added to the end of each array.
|
||||||
virtual s32 addTextureAsSprite(video::ITexture* texture) = 0;
|
\returns The index of the sprite or -1 on failure */
|
||||||
|
virtual s32 addTextureAsSprite(video::ITexture* texture) = 0;
|
||||||
//! Clears sprites, rectangles and textures
|
|
||||||
virtual void clear() = 0;
|
//! Clears sprites, rectangles and textures
|
||||||
|
virtual void clear() = 0;
|
||||||
//! Draws a sprite in 2d with position and color
|
|
||||||
/**
|
//! Draws a sprite in 2d with position and color
|
||||||
\param index Index of SGUISprite to draw
|
/**
|
||||||
\param pos Target position - depending on center value either the left-top or the sprite center is used as pivot
|
\param index Index of SGUISprite to draw
|
||||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
\param pos Target position - depending on center value either the left-top or the sprite center is used as pivot
|
||||||
\param color Color with which the image is drawn.
|
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||||
Note that the alpha component is used. If alpha is other than
|
\param color Color with which the image is drawn.
|
||||||
255, the image will be transparent.
|
Note that the alpha component is used. If alpha is other than
|
||||||
\param starttime Tick when the first frame was drawn (only difference currenttime-starttime matters).
|
255, the image will be transparent.
|
||||||
\param currenttime To calculate the frame of animated sprites
|
\param starttime Tick when the first frame was drawn (only difference currenttime-starttime matters).
|
||||||
\param loop When true animations are looped
|
\param currenttime To calculate the frame of animated sprites
|
||||||
\param center When true pivot is set to the sprite-center. So it affects pos.
|
\param loop When true animations are looped
|
||||||
*/
|
\param center When true pivot is set to the sprite-center. So it affects pos.
|
||||||
virtual void draw2DSprite(u32 index, const core::position2di& pos,
|
*/
|
||||||
const core::rect<s32>* clip=0,
|
virtual void draw2DSprite(u32 index, const core::position2di& pos,
|
||||||
const video::SColor& color= video::SColor(255,255,255,255),
|
const core::rect<s32>* clip=0,
|
||||||
u32 starttime=0, u32 currenttime=0,
|
const video::SColor& color= video::SColor(255,255,255,255),
|
||||||
bool loop=true, bool center=false) = 0;
|
u32 starttime=0, u32 currenttime=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
|
||||||
\param index Index of SGUISprite to draw
|
/**
|
||||||
\param destRect The sprite will be scaled to fit this target rectangle
|
\param index Index of SGUISprite to draw
|
||||||
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
\param destRect The sprite will be scaled to fit this target rectangle
|
||||||
\param colors Array of 4 colors denoting the color values of
|
\param clip Clipping rectangle, can be 0 when clipping is not wanted.
|
||||||
the corners of the destRect
|
\param colors Array of 4 colors denoting the color values of
|
||||||
\param timeTicks Current frame for animated sprites
|
the corners of the destRect
|
||||||
(same as currenttime-starttime in other draw2DSprite function)
|
\param timeTicks Current frame for animated sprites
|
||||||
\param loop When true animations are looped
|
(same as currenttime-starttime in other draw2DSprite function)
|
||||||
*/
|
\param loop When true animations are looped
|
||||||
virtual void draw2DSprite(u32 index, const core::rect<s32>& destRect,
|
*/
|
||||||
const core::rect<s32>* clip=0,
|
virtual void draw2DSprite(u32 index, const core::rect<s32>& destRect,
|
||||||
const video::SColor * const colors=0,
|
const core::rect<s32>* clip=0,
|
||||||
u32 timeTicks = 0,
|
const video::SColor * const colors=0,
|
||||||
bool loop=true) = 0;
|
u32 timeTicks = 0,
|
||||||
|
bool loop=true) = 0;
|
||||||
//! Draws a sprite batch in 2d using an array of positions and a color
|
|
||||||
virtual void draw2DSpriteBatch(const core::array<u32>& indices, const core::array<core::position2di>& pos,
|
//! Draws a sprite batch in 2d using an array of positions and a color
|
||||||
const core::rect<s32>* clip=0,
|
virtual void draw2DSpriteBatch(const core::array<u32>& indices, const core::array<core::position2di>& pos,
|
||||||
const video::SColor& color= video::SColor(255,255,255,255),
|
const core::rect<s32>* clip=0,
|
||||||
u32 starttime=0, u32 currenttime=0,
|
const video::SColor& color= video::SColor(255,255,255,255),
|
||||||
bool loop=true, bool center=false) = 0;
|
u32 starttime=0, u32 currenttime=0,
|
||||||
};
|
bool loop=true, bool center=false) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,135 +1,139 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SColor.h"
|
#include "IGUIElement.h"
|
||||||
|
#include "SColor.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace gui
|
{
|
||||||
{
|
namespace gui
|
||||||
class IGUIFont;
|
{
|
||||||
|
class IGUIFont;
|
||||||
//! Multi or single line text label.
|
|
||||||
class IGUIStaticText : public IGUIElement
|
//! Multi or single line text label.
|
||||||
{
|
class IGUIStaticText : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
|
||||||
//! Sets another skin independent font.
|
|
||||||
/** If this is set to zero, the button uses the font of the skin.
|
//! Sets another skin independent font.
|
||||||
\param font: New font to set. */
|
/** If this is set to zero, the button uses the font of the skin.
|
||||||
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
\param font: New font to set. */
|
||||||
|
virtual void setOverrideFont(IGUIFont* font=0) = 0;
|
||||||
//! Gets the override font (if any)
|
|
||||||
/** \return The override font (may be 0) */
|
//! Gets the override font (if any)
|
||||||
virtual IGUIFont* getOverrideFont(void) const = 0;
|
/** \return The override font (may be 0) */
|
||||||
|
virtual IGUIFont* getOverrideFont(void) const = 0;
|
||||||
//! Get the font which is used right now for drawing
|
|
||||||
/** Currently this is the override font when one is set and the
|
//! Get the font which is used right now for drawing
|
||||||
font of the active skin otherwise */
|
/** Currently this is the override font when one is set and the
|
||||||
virtual IGUIFont* getActiveFont() const = 0;
|
font of the active skin otherwise */
|
||||||
|
virtual IGUIFont* getActiveFont() const = 0;
|
||||||
//! Sets another color for the text.
|
|
||||||
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
//! Sets another color for the text.
|
||||||
in the skin, but the set color instead. You don't need to call
|
/** If set, the static text does not use the EGDC_BUTTON_TEXT color defined
|
||||||
IGUIStaticText::enableOverrrideColor(true) after this, this is done
|
in the skin, but the set color instead. You don't need to call
|
||||||
by this function.
|
IGUIStaticText::enableOverrrideColor(true) after this, this is done
|
||||||
If you set a color, and you want the text displayed with the color
|
by this function.
|
||||||
of the skin again, call IGUIStaticText::enableOverrideColor(false);
|
If you set a color, and you want the text displayed with the color
|
||||||
\param color: New color of the text. */
|
of the skin again, call IGUIStaticText::enableOverrideColor(false);
|
||||||
virtual void setOverrideColor(video::SColor color) = 0;
|
\param color: New color of the text. */
|
||||||
|
virtual void setOverrideColor(video::SColor color) = 0;
|
||||||
//! Gets the override color
|
|
||||||
/** \return: The override color */
|
//! Gets the override color
|
||||||
virtual video::SColor getOverrideColor(void) const = 0;
|
/** \return: The override color */
|
||||||
|
virtual video::SColor getOverrideColor(void) const = 0;
|
||||||
//! Gets the currently used text color
|
|
||||||
/** Either a skin-color for the current state or the override color */
|
//! Gets the currently used text color
|
||||||
virtual video::SColor getActiveColor() const = 0;
|
/** Either a skin-color for the current state or the override color */
|
||||||
|
virtual video::SColor getActiveColor() const = 0;
|
||||||
//! Sets if the static text should use the override color or the color in the gui skin.
|
|
||||||
/** \param enable: If set to true, the override color, which can be set
|
//! Sets if the static text should use the override color or the color in the gui skin.
|
||||||
with IGUIStaticText::setOverrideColor is used, otherwise the
|
/** \param enable: If set to true, the override color, which can be set
|
||||||
EGDC_BUTTON_TEXT color of the skin. */
|
with IGUIStaticText::setOverrideColor is used, otherwise the
|
||||||
virtual void enableOverrideColor(bool enable) = 0;
|
EGDC_BUTTON_TEXT color of the skin. */
|
||||||
|
virtual void enableOverrideColor(bool enable) = 0;
|
||||||
//! Checks if an override color is enabled
|
|
||||||
/** \return true if the override color is enabled, false otherwise */
|
//! Checks if an override color is enabled
|
||||||
virtual bool isOverrideColorEnabled(void) const = 0;
|
/** \return true if the override color is enabled, false otherwise */
|
||||||
|
virtual bool isOverrideColorEnabled(void) const = 0;
|
||||||
//! Sets another color for the background.
|
|
||||||
virtual void setBackgroundColor(video::SColor color) = 0;
|
//! Sets another color for the background.
|
||||||
|
virtual void setBackgroundColor(video::SColor color) = 0;
|
||||||
//! Sets whether to draw the background
|
|
||||||
virtual void setDrawBackground(bool draw) = 0;
|
//! Sets whether to draw the background
|
||||||
|
virtual void setDrawBackground(bool draw) = 0;
|
||||||
//! Checks if background drawing is enabled
|
|
||||||
/** \return true if background drawing is enabled, false otherwise */
|
//! Checks if background drawing is enabled
|
||||||
virtual bool isDrawBackgroundEnabled() const = 0;
|
/** \return true if background drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBackgroundEnabled() const = 0;
|
||||||
//! Gets the background color
|
|
||||||
/** \return: The background color */
|
//! Gets the background color
|
||||||
virtual video::SColor getBackgroundColor() const = 0;
|
/** \return: The background color */
|
||||||
|
virtual video::SColor getBackgroundColor() const = 0;
|
||||||
//! Sets whether to draw the border
|
|
||||||
virtual void setDrawBorder(bool draw) = 0;
|
//! Sets whether to draw the border
|
||||||
|
virtual void setDrawBorder(bool draw) = 0;
|
||||||
//! Checks if border drawing is enabled
|
|
||||||
/** \return true if border drawing is enabled, false otherwise */
|
//! Checks if border drawing is enabled
|
||||||
virtual bool isDrawBorderEnabled() const = 0;
|
/** \return true if border drawing is enabled, false otherwise */
|
||||||
|
virtual bool isDrawBorderEnabled() const = 0;
|
||||||
//! Sets text justification mode
|
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
//! Sets text justification mode
|
||||||
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||||
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
|
||||||
/** \param enable: If set to true, words going over one line are
|
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||||
broken on to the next line. */
|
/** \param enable: If set to true, words going over one line are
|
||||||
virtual void setWordWrap(bool enable) = 0;
|
broken on to the next line. */
|
||||||
|
virtual void setWordWrap(bool enable) = 0;
|
||||||
//! Checks if word wrap is enabled
|
|
||||||
/** \return true if word wrap is enabled, false otherwise */
|
//! Checks if word wrap is enabled
|
||||||
virtual bool isWordWrapEnabled(void) const = 0;
|
/** \return true if word wrap is enabled, false otherwise */
|
||||||
|
virtual bool isWordWrapEnabled(void) const = 0;
|
||||||
//! Returns the height of the text in pixels when it is drawn.
|
|
||||||
/** This is useful for adjusting the layout of gui elements based on the height
|
//! Returns the height of the text in pixels when it is drawn.
|
||||||
of the multiline text in this element.
|
/** This is useful for adjusting the layout of gui elements based on the height
|
||||||
\return Height of text in pixels. */
|
of the multiline text in this element.
|
||||||
virtual s32 getTextHeight() const = 0;
|
\return Height of text in pixels. */
|
||||||
|
virtual s32 getTextHeight() const = 0;
|
||||||
//! Returns the width of the current text, in the current font
|
|
||||||
/** If the text is broken, this returns the width of the widest line
|
//! Returns the width of the current text, in the current font
|
||||||
\return The width of the text, or the widest broken line. */
|
/** If the text is broken, this returns the width of the widest line
|
||||||
virtual s32 getTextWidth(void) const = 0;
|
\return The width of the text, or the widest broken line. */
|
||||||
|
virtual s32 getTextWidth(void) const = 0;
|
||||||
//! Set whether the text in this label should be clipped if it goes outside bounds
|
|
||||||
virtual void setTextRestrainedInside(bool restrainedInside) = 0;
|
//! Set whether the text in this label should be clipped if it goes outside bounds
|
||||||
|
virtual void setTextRestrainedInside(bool restrainedInside) = 0;
|
||||||
//! Checks if the text in this label should be clipped if it goes outside bounds
|
|
||||||
virtual bool isTextRestrainedInside() const = 0;
|
//! Checks if the text in this label should be clipped if it goes outside bounds
|
||||||
|
virtual bool isTextRestrainedInside() const = 0;
|
||||||
//! Set whether the string should be interpreted as right-to-left (RTL) text
|
|
||||||
/** \note This component does not implement the Unicode bidi standard, the
|
//! Set whether the string should be interpreted as right-to-left (RTL) text
|
||||||
text of the component should be already RTL if you call this. The
|
/** \note This component does not implement the Unicode bidi standard, the
|
||||||
main difference when RTL is enabled is that the linebreaks for multiline
|
text of the component should be already RTL if you call this. The
|
||||||
elements are performed starting from the end.
|
main difference when RTL is enabled is that the linebreaks for multiline
|
||||||
*/
|
elements are performed starting from the end.
|
||||||
virtual void setRightToLeft(bool rtl) = 0;
|
*/
|
||||||
|
virtual void setRightToLeft(bool rtl) = 0;
|
||||||
//! Checks whether the text in this element should be interpreted as right-to-left
|
|
||||||
virtual bool isRightToLeft() const = 0;
|
//! Checks whether the text in this element should be interpreted as right-to-left
|
||||||
};
|
virtual bool isRightToLeft() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,151 +1,155 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SColor.h"
|
#include "IGUIElement.h"
|
||||||
#include "IGUISkin.h"
|
#include "SColor.h"
|
||||||
|
#include "IGUISkin.h"
|
||||||
namespace irr
|
|
||||||
{
|
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:
|
//! A standard tab control
|
||||||
\li EGET_TAB_CHANGED
|
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
|
||||||
*/
|
\li EGET_TAB_CHANGED
|
||||||
class IGUITabControl : public IGUIElement
|
*/
|
||||||
{
|
class IGUITabControl : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
|
||||||
//! Adds a tab
|
|
||||||
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
//! Adds a tab
|
||||||
|
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0;
|
||||||
//! Adds an existing tab
|
|
||||||
/** Note that it will also add the tab as a child of this TabControl.
|
//! Adds an existing tab
|
||||||
\return Index of added tab or -1 for failure*/
|
/** Note that it will also add the tab as a child of this TabControl.
|
||||||
virtual s32 addTab(IGUITab* tab) = 0;
|
\return Index of added tab or -1 for failure*/
|
||||||
|
virtual s32 addTab(IGUITab* tab) = 0;
|
||||||
//! Insert the tab at the given index
|
|
||||||
/** \return The tab on success or NULL on failure. */
|
//! Insert the tab at the given index
|
||||||
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0;
|
/** \return The tab on success or NULL on failure. */
|
||||||
|
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0;
|
||||||
//! Insert an existing tab
|
|
||||||
/** Note that it will also add the tab as a child of this TabControl.
|
//! Insert an existing tab
|
||||||
\param idx Index at which tab will be inserted. Later tabs will be moved.
|
/** Note that it will also add the tab as a child of this TabControl.
|
||||||
Previous active tab will stay active unless this is the first
|
\param idx Index at which tab will be inserted. Later tabs will be moved.
|
||||||
element to be inserted in which case it becomes active.
|
Previous active tab will stay active unless this is the first
|
||||||
\param tab New tab to insert.
|
element to be inserted in which case it becomes active.
|
||||||
\param serializationMode Internally used for serialization. You should not need this.
|
\param tab New tab to insert.
|
||||||
When true it reserves space for the index, doesn't move but replaces tabs
|
\param serializationMode Internally used for serialization. You should not need this.
|
||||||
and it doesn't change the active tab.
|
When true it reserves space for the index, doesn't move but replaces tabs
|
||||||
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
and it doesn't change the active tab.
|
||||||
virtual s32 insertTab(s32 idx, IGUITab* tab, bool serializationMode=false) = 0;
|
\return Index of added tab (should be same as the one passed) or -1 for failure*/
|
||||||
|
virtual s32 insertTab(s32 idx, IGUITab* tab, bool serializationMode=false) = 0;
|
||||||
//! Removes a tab from the tabcontrol
|
|
||||||
virtual void removeTab(s32 idx) = 0;
|
//! Removes a tab from the tabcontrol
|
||||||
|
virtual void removeTab(s32 idx) = 0;
|
||||||
//! Clears the tabcontrol removing all tabs
|
|
||||||
virtual void clear() = 0;
|
//! Clears the tabcontrol removing all tabs
|
||||||
|
virtual void clear() = 0;
|
||||||
//! Returns amount of tabs in the tabcontrol
|
|
||||||
virtual s32 getTabCount() const = 0;
|
//! Returns amount of tabs in the tabcontrol
|
||||||
|
virtual s32 getTabCount() const = 0;
|
||||||
//! Returns a tab based on zero based index
|
|
||||||
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
//! Returns a tab based on zero based index
|
||||||
\return Returns pointer to the Tab. Returns 0 if no tab
|
/** \param idx: zero based index of tab. Is a value between 0 and getTabcount()-1;
|
||||||
is corresponding to this tab. */
|
\return Returns pointer to the Tab. Returns 0 if no tab
|
||||||
virtual IGUITab* getTab(s32 idx) const = 0;
|
is corresponding to this tab. */
|
||||||
|
virtual IGUITab* getTab(s32 idx) const = 0;
|
||||||
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
|
||||||
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
//! For given element find if it's a tab and return it's zero-based index (or -1 for not found)
|
||||||
those can be tabs, but we allow looking for any kind of IGUIElement* as there are some
|
/** \param tab Tab for which we are looking (usually you will look for an IGUITab* type as only
|
||||||
use-cases for that even if it just returns 0. For example this way you can check for
|
those can be tabs, but we allow looking for any kind of IGUIElement* as there are some
|
||||||
all children of this gui-element if they are tabs or some non-tab children.*/
|
use-cases for that even if it just returns 0. For example this way you can check for
|
||||||
virtual s32 getTabIndex(const IGUIElement *tab) const = 0;
|
all children of this gui-element if they are tabs or some non-tab children.*/
|
||||||
|
virtual s32 getTabIndex(const IGUIElement *tab) const = 0;
|
||||||
//! Brings a tab to front.
|
|
||||||
/** \param idx: number of the tab.
|
//! Brings a tab to front.
|
||||||
\return Returns true if successful. */
|
/** \param idx: number of the tab.
|
||||||
virtual bool setActiveTab(s32 idx) = 0;
|
\return Returns true if successful. */
|
||||||
|
virtual bool setActiveTab(s32 idx) = 0;
|
||||||
//! Brings a tab to front.
|
|
||||||
/** \param tab: pointer to the tab.
|
//! Brings a tab to front.
|
||||||
\return Returns true if successful. */
|
/** \param tab: pointer to the tab.
|
||||||
virtual bool setActiveTab(IGUITab *tab) = 0;
|
\return Returns true if successful. */
|
||||||
|
virtual bool setActiveTab(IGUITab *tab) = 0;
|
||||||
//! Returns which tab is currently active
|
|
||||||
virtual s32 getActiveTab() const = 0;
|
//! Returns which tab is currently active
|
||||||
|
virtual s32 getActiveTab() const = 0;
|
||||||
//! get the the id of the tab at the given absolute coordinates
|
|
||||||
/** \return The id of the tab or -1 when no tab is at those coordinates*/
|
//! get the the id of the tab at the given absolute coordinates
|
||||||
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
/** \return The id of the tab or -1 when no tab is at those coordinates*/
|
||||||
|
virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0;
|
||||||
//! Set the height of the tabs
|
|
||||||
virtual void setTabHeight( s32 height ) = 0;
|
//! Set the height of the tabs
|
||||||
|
virtual void setTabHeight( s32 height ) = 0;
|
||||||
//! Get the height of the tabs
|
|
||||||
/** return Returns the height of the tabs */
|
//! Get the height of the tabs
|
||||||
virtual s32 getTabHeight() const = 0;
|
/** return Returns the height of the tabs */
|
||||||
|
virtual s32 getTabHeight() const = 0;
|
||||||
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
|
||||||
virtual void setTabMaxWidth(s32 width ) = 0;
|
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
|
||||||
|
virtual void setTabMaxWidth(s32 width ) = 0;
|
||||||
//! get the maximal width of a tab
|
|
||||||
virtual s32 getTabMaxWidth() const = 0;
|
//! get the maximal width of a tab
|
||||||
|
virtual s32 getTabMaxWidth() const = 0;
|
||||||
//! Set the alignment of the tabs
|
|
||||||
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
//! Set the alignment of the tabs
|
||||||
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0;
|
/** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */
|
||||||
|
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0;
|
||||||
//! Get the alignment of the tabs
|
|
||||||
/** return Returns the alignment of the tabs */
|
//! Get the alignment of the tabs
|
||||||
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
/** return Returns the alignment of the tabs */
|
||||||
|
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0;
|
||||||
//! Set the extra width added to tabs on each side of the text
|
|
||||||
virtual void setTabExtraWidth( s32 extraWidth ) = 0;
|
//! Set the extra width added to tabs on each side of the text
|
||||||
|
virtual void setTabExtraWidth( s32 extraWidth ) = 0;
|
||||||
//! Get the extra width added to tabs on each side of the text
|
|
||||||
/** return Returns the extra width of the tabs */
|
//! Get the extra width added to tabs on each side of the text
|
||||||
virtual s32 getTabExtraWidth() const = 0;
|
/** return Returns the extra width of the tabs */
|
||||||
};
|
virtual s32 getTabExtraWidth() const = 0;
|
||||||
|
};
|
||||||
//! A tab-page, onto which other gui elements could be added.
|
|
||||||
/** IGUITab refers mostly to the page itself, but also carries some data about the tab in the tabbar of an IGUITabControl. */
|
//! A tab-page, onto which other gui elements could be added.
|
||||||
class IGUITab : public IGUIElement
|
/** 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:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
|
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {}
|
||||||
//! sets if the tab should draw its background
|
|
||||||
virtual void setDrawBackground(bool draw=true) = 0;
|
//! sets if the tab should draw its background
|
||||||
|
virtual void setDrawBackground(bool draw=true) = 0;
|
||||||
//! sets the color of the background, if it should be drawn.
|
|
||||||
virtual void setBackgroundColor(video::SColor c) = 0;
|
//! sets the color of the background, if it should be drawn.
|
||||||
|
virtual void setBackgroundColor(video::SColor c) = 0;
|
||||||
//! returns true if the tab is drawing its background, false if not
|
|
||||||
virtual bool isDrawingBackground() const = 0;
|
//! returns true if the tab is drawing its background, false if not
|
||||||
|
virtual bool isDrawingBackground() const = 0;
|
||||||
//! returns the color of the background
|
|
||||||
virtual video::SColor getBackgroundColor() const = 0;
|
//! returns the color of the background
|
||||||
|
virtual video::SColor getBackgroundColor() const = 0;
|
||||||
//! sets the color of it's text in the tab-bar
|
|
||||||
virtual void setTextColor(video::SColor c) = 0;
|
//! sets the color of it's text in the tab-bar
|
||||||
|
virtual void setTextColor(video::SColor c) = 0;
|
||||||
//! gets the color of the text
|
|
||||||
virtual video::SColor getTextColor() const = 0;
|
//! gets the color of the text
|
||||||
};
|
virtual video::SColor getTextColor() const = 0;
|
||||||
|
};
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,36 +1,40 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
class ITexture;
|
{
|
||||||
} // end namespace video
|
class ITexture;
|
||||||
namespace gui
|
} // end namespace video
|
||||||
{
|
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
|
//! Stays at the top of its parent like the menu bar and contains tool buttons
|
||||||
{
|
class IGUIToolBar : public IGUIElement
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
//! constructor
|
||||||
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
|
||||||
|
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
|
||||||
//! Adds a button to the tool bar
|
|
||||||
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
//! Adds a button to the tool bar
|
||||||
video::ITexture* img=0, video::ITexture* pressedimg=0,
|
virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0,
|
||||||
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
video::ITexture* img=0, video::ITexture* pressedimg=0,
|
||||||
};
|
bool isPushButton=false, bool useAlphaChannel=false) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace gui
|
|
||||||
} // end namespace irr
|
} // end namespace gui
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
1031
include/IImage.h
1031
include/IImage.h
File diff suppressed because it is too large
Load Diff
@ -1,51 +1,55 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IImage.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "ITexture.h"
|
#include "IImage.h"
|
||||||
#include "path.h"
|
#include "ITexture.h"
|
||||||
#include "irrArray.h"
|
#include "path.h"
|
||||||
|
#include "irrArray.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
class IReadFile;
|
{
|
||||||
} // end namespace io
|
class IReadFile;
|
||||||
namespace video
|
} // end namespace io
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
//! Class which is able to create a image from a file.
|
|
||||||
/** If you want the Irrlicht Engine be able to load textures of
|
//! Class which is able to create a image from a file.
|
||||||
currently unsupported file formats (e.g .gif), then implement
|
/** If you want the Irrlicht Engine be able to load textures of
|
||||||
this and add your new Surface loader with
|
currently unsupported file formats (e.g .gif), then implement
|
||||||
IVideoDriver::addExternalImageLoader() to the engine. */
|
this and add your new Surface loader with
|
||||||
class IImageLoader : public virtual IReferenceCounted
|
IVideoDriver::addExternalImageLoader() to the engine. */
|
||||||
{
|
class IImageLoader : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Check if the file might be loaded by this class
|
|
||||||
/** Check is based on the file extension (e.g. ".tga")
|
//! Check if the file might be loaded by this class
|
||||||
\param filename Name of file to check.
|
/** Check is based on the file extension (e.g. ".tga")
|
||||||
\return True if file seems to be loadable. */
|
\param filename Name of file to check.
|
||||||
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
\return True if file seems to be loadable. */
|
||||||
|
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||||
//! Check if the file might be loaded by this class
|
|
||||||
/** Check might look into the file.
|
//! Check if the file might be loaded by this class
|
||||||
\param file File handle to check.
|
/** Check might look into the file.
|
||||||
\return True if file seems to be loadable. */
|
\param file File handle to check.
|
||||||
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
|
\return True if file seems to be loadable. */
|
||||||
|
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
|
||||||
//! Creates a surface from the file
|
|
||||||
/** \param file File handle to check.
|
//! Creates a surface from the file
|
||||||
\return Pointer to newly created image, or 0 upon error. */
|
/** \param file File handle to check.
|
||||||
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
\return Pointer to newly created image, or 0 upon error. */
|
||||||
};
|
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,41 +1,45 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "irrString.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "coreutil.h"
|
#include "irrString.h"
|
||||||
|
#include "coreutil.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
class IWriteFile;
|
{
|
||||||
} // end namespace io
|
class IWriteFile;
|
||||||
|
} // end namespace io
|
||||||
namespace video
|
|
||||||
{
|
namespace video
|
||||||
class IImage;
|
{
|
||||||
|
class IImage;
|
||||||
|
|
||||||
//! Interface for writing software image data.
|
|
||||||
class IImageWriter : public IReferenceCounted
|
//! Interface for writing software image data.
|
||||||
{
|
class IImageWriter : public IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Check if this writer can write a file with the given extension
|
public:
|
||||||
/** \param filename Name of the file to check.
|
//! Check if this writer can write a file with the given extension
|
||||||
\return True if file extension specifies a writable type. */
|
/** \param filename Name of the file to check.
|
||||||
virtual bool isAWriteableFileExtension(const io::path& filename) const = 0;
|
\return True if file extension specifies a writable type. */
|
||||||
|
virtual bool isAWriteableFileExtension(const io::path& filename) const = 0;
|
||||||
//! Write image to file
|
|
||||||
/** \param file File handle to write to.
|
//! Write image to file
|
||||||
\param image Image to write into file.
|
/** \param file File handle to write to.
|
||||||
\param param Writer specific parameter, influencing e.g. quality.
|
\param image Image to write into file.
|
||||||
\return True if image was successfully written. */
|
\param param Writer specific parameter, influencing e.g. quality.
|
||||||
virtual bool writeImage(io::IWriteFile *file, IImage *image, u32 param = 0) const = 0;
|
\return True if image was successfully written. */
|
||||||
};
|
virtual bool writeImage(io::IWriteFile *file, IImage *image, u32 param = 0) const = 0;
|
||||||
|
};
|
||||||
} // namespace video
|
|
||||||
} // namespace irr
|
} // namespace video
|
||||||
|
} // namespace irr
|
||||||
|
|
||||||
|
#endif // _I_IMAGE_WRITER_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -1,61 +1,65 @@
|
|||||||
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
// Copyright (C) 2008-2012 Nikolaus Gebhardt
|
||||||
// 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 "irrArray.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EHardwareBufferFlags.h"
|
#include "irrArray.h"
|
||||||
#include "SVertexIndex.h"
|
#include "EHardwareBufferFlags.h"
|
||||||
|
#include "SVertexIndex.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace video
|
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
}
|
|
||||||
|
}
|
||||||
namespace scene
|
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
class IIndexBuffer : public virtual IReferenceCounted
|
|
||||||
{
|
class IIndexBuffer : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
virtual void* getData() =0;
|
|
||||||
|
virtual void* getData() =0;
|
||||||
virtual video::E_INDEX_TYPE getType() const =0;
|
|
||||||
virtual void setType(video::E_INDEX_TYPE IndexType) =0;
|
virtual video::E_INDEX_TYPE getType() const =0;
|
||||||
|
virtual void setType(video::E_INDEX_TYPE IndexType) =0;
|
||||||
virtual u32 stride() const =0;
|
|
||||||
|
virtual u32 stride() const =0;
|
||||||
virtual u32 size() const =0;
|
|
||||||
virtual void push_back (const u32 &element) =0;
|
virtual u32 size() const =0;
|
||||||
virtual u32 operator [](u32 index) const =0;
|
virtual void push_back (const u32 &element) =0;
|
||||||
virtual u32 getLast() =0;
|
virtual u32 operator [](u32 index) const =0;
|
||||||
virtual void setValue(u32 index, u32 value) =0;
|
virtual u32 getLast() =0;
|
||||||
virtual void set_used(u32 usedNow) =0;
|
virtual void setValue(u32 index, u32 value) =0;
|
||||||
virtual void reallocate(u32 new_size) =0;
|
virtual void set_used(u32 usedNow) =0;
|
||||||
virtual u32 allocated_size() const=0;
|
virtual void reallocate(u32 new_size) =0;
|
||||||
|
virtual u32 allocated_size() const=0;
|
||||||
virtual void* pointer() =0;
|
|
||||||
|
virtual void* pointer() =0;
|
||||||
//! get the current hardware mapping hint
|
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0;
|
//! get the current hardware mapping hint
|
||||||
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0;
|
||||||
//! set the hardware mapping hint, for driver
|
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0;
|
//! set the hardware mapping hint, for driver
|
||||||
|
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0;
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
|
||||||
virtual void setDirty() = 0;
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
|
virtual void setDirty() = 0;
|
||||||
//! Get the currently used ID for identification of changes.
|
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
//! Get the currently used ID for identification of changes.
|
||||||
virtual u32 getChangedID() const = 0;
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
};
|
virtual u32 getChangedID() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,77 +1,102 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
//! Possible log levels.
|
|
||||||
//! When used has filter ELL_DEBUG means => log everything and ELL_NONE means => log (nearly) nothing.
|
//! Possible log levels.
|
||||||
//! When used to print logging information ELL_DEBUG will have lowest priority while ELL_NONE
|
//! When used has filter ELL_DEBUG means => log everything and ELL_NONE means => log (nearly) nothing.
|
||||||
//! messages are never filtered and always printed.
|
//! When used to print logging information ELL_DEBUG will have lowest priority while ELL_NONE
|
||||||
enum ELOG_LEVEL
|
//! messages are never filtered and always printed.
|
||||||
{
|
enum ELOG_LEVEL
|
||||||
//! Used for printing information helpful in debugging
|
{
|
||||||
ELL_DEBUG,
|
//! Used for printing information helpful in debugging
|
||||||
|
ELL_DEBUG,
|
||||||
//! Useful information to print. For example hardware info or something started/stopped.
|
|
||||||
ELL_INFORMATION,
|
//! Useful information to print. For example hardware infos or something started/stopped.
|
||||||
|
ELL_INFORMATION,
|
||||||
//! Warnings that something isn't as expected and can cause oddities
|
|
||||||
ELL_WARNING,
|
//! Warnings that something isn't as expected and can cause oddities
|
||||||
|
ELL_WARNING,
|
||||||
//! Something did go wrong.
|
|
||||||
ELL_ERROR,
|
//! Something did go wrong.
|
||||||
|
ELL_ERROR,
|
||||||
//! Logs with ELL_NONE will never be filtered.
|
|
||||||
//! And used as filter it will remove all logging except ELL_NONE messages.
|
//! Logs with ELL_NONE will never be filtered.
|
||||||
ELL_NONE
|
//! And used as filter it will remove all logging except ELL_NONE messages.
|
||||||
};
|
ELL_NONE
|
||||||
|
};
|
||||||
|
|
||||||
//! Interface for logging messages, warnings and errors
|
|
||||||
class ILogger : public virtual IReferenceCounted
|
//! Interface for logging messages, warnings and errors
|
||||||
{
|
class ILogger : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Destructor
|
|
||||||
virtual ~ILogger() {}
|
//! Destructor
|
||||||
|
virtual ~ILogger() {}
|
||||||
//! Returns the current set log level.
|
|
||||||
virtual ELOG_LEVEL getLogLevel() const = 0;
|
//! Returns the current set log level.
|
||||||
|
virtual ELOG_LEVEL getLogLevel() const = 0;
|
||||||
//! Sets a new log level.
|
|
||||||
/** With this value, texts which are sent to the logger are filtered
|
//! Sets a new log level.
|
||||||
out. For example setting this value to ELL_WARNING, only warnings and
|
/** With this value, texts which are sent to the logger are filtered
|
||||||
errors are printed out. Setting it to ELL_INFORMATION, which is the
|
out. For example setting this value to ELL_WARNING, only warnings and
|
||||||
default setting, warnings, errors and informational texts are printed
|
errors are printed out. Setting it to ELL_INFORMATION, which is the
|
||||||
out.
|
default setting, warnings, errors and informational texts are printed
|
||||||
\param ll: new log level filter value. */
|
out.
|
||||||
virtual void setLogLevel(ELOG_LEVEL ll) = 0;
|
\param ll: new log level filter value. */
|
||||||
|
virtual void setLogLevel(ELOG_LEVEL ll) = 0;
|
||||||
//! Prints out a text into the log
|
|
||||||
/** \param text: Text to print out.
|
//! Prints out a text into the log
|
||||||
\param ll: Log level of the text. If the text is an error, set
|
/** \param text: Text to print out.
|
||||||
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
\param ll: Log level of the text. If the text is an error, set
|
||||||
is just an informational text, set it to ELL_INFORMATION. Texts are
|
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
||||||
filtered with these levels. If you want to be a text displayed,
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
independent on what level filter is set, use ELL_NONE. */
|
filtered with these levels. If you want to be a text displayed,
|
||||||
virtual void log(const c8* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
independent on what level filter is set, use ELL_NONE. */
|
||||||
|
virtual void log(const c8* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
//! Prints out a text into the log
|
|
||||||
/** \param text: Text to print out.
|
//! Prints out a text into the log
|
||||||
\param hint: Additional info. This string is added after a " :" to the
|
/** \param text: Text to print out.
|
||||||
string.
|
\param hint: Additional info. This string is added after a " :" to the
|
||||||
\param ll: Log level of the text. If the text is an error, set
|
string.
|
||||||
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
\param ll: Log level of the text. If the text is an error, set
|
||||||
is just an informational text, set it to ELL_INFORMATION. Texts are
|
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
|
||||||
filtered with these levels. If you want to be a text displayed,
|
is just an informational text, set it to ELL_INFORMATION. Texts are
|
||||||
independent on what level filter is set, use ELL_NONE. */
|
filtered with these levels. If you want to be a text displayed,
|
||||||
virtual void log(const c8* text, const c8* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
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 wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
|
||||||
} // end namespace
|
|
||||||
|
//! 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
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,103 +1,107 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SMaterial.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "S3DVertex.h"
|
#include "SMaterial.h"
|
||||||
|
#include "S3DVertex.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
class IVideoDriver;
|
|
||||||
class IMaterialRendererServices;
|
class IVideoDriver;
|
||||||
class IShaderConstantSetCallBack;
|
class IMaterialRendererServices;
|
||||||
|
class IShaderConstantSetCallBack;
|
||||||
//! Interface for material rendering.
|
|
||||||
/** Can be used to extend the engine with new materials. Refer to
|
//! Interface for material rendering.
|
||||||
IVideoDriver::addMaterialRenderer() for more information on how to extend the
|
/** Can be used to extend the engine with new materials. Refer to
|
||||||
engine with new materials. */
|
IVideoDriver::addMaterialRenderer() for more information on how to extend the
|
||||||
class IMaterialRenderer : public virtual IReferenceCounted
|
engine with new materials. */
|
||||||
{
|
class IMaterialRenderer : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Called by the IVideoDriver implementation the let the renderer set its needed render states.
|
|
||||||
/** This is called during the IVideoDriver::setMaterial() call.
|
//! Called by the IVideoDriver implementation the let the renderer set its needed render states.
|
||||||
When overriding this, you can set some renderstates or for example a
|
/** This is called during the IVideoDriver::setMaterial() call.
|
||||||
vertex or pixel shader if you like.
|
When overriding this, you can set some renderstates or for example a
|
||||||
\param material: The new material parameters to be set. The renderer
|
vertex or pixel shader if you like.
|
||||||
may change the material flags in this material. For example if this
|
\param material: The new material parameters to be set. The renderer
|
||||||
material does not accept the zbuffer = true, it can set it to false.
|
may change the material flags in this material. For example if this
|
||||||
This is useful, because in the next lastMaterial will be just the
|
material does not accept the zbuffer = true, it can set it to false.
|
||||||
material in this call.
|
This is useful, because in the next lastMaterial will be just the
|
||||||
\param lastMaterial: The material parameters which have been set before
|
material in this call.
|
||||||
this material.
|
\param lastMaterial: The material parameters which have been set before
|
||||||
\param resetAllRenderstates: True if all renderstates should really be
|
this material.
|
||||||
reset. This is usually true if the last rendering mode was not a usual
|
\param resetAllRenderstates: True if all renderstates should really be
|
||||||
3d rendering mode, but for example a 2d rendering mode.
|
reset. This is usually true if the last rendering mode was not a usual
|
||||||
You should reset really all renderstates if this is true, no matter if
|
3d rendering mode, but for example a 2d rendering mode.
|
||||||
the lastMaterial had some similar settings. This is used because in
|
You should reset really all renderstates if this is true, no matter if
|
||||||
most cases, some common renderstates are not changed if they are
|
the lastMaterial had some similar settings. This is used because in
|
||||||
already there, for example bilinear filtering, wireframe,
|
most cases, some common renderstates are not changed if they are
|
||||||
gouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and
|
already there, for example bilinear filtering, wireframe,
|
||||||
fogenable.
|
gouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and
|
||||||
\param services: Interface providing some methods for changing
|
fogenable.
|
||||||
advanced, internal states of a IVideoDriver. */
|
\param services: Interface providing some methods for changing
|
||||||
virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
|
advanced, internal states of a IVideoDriver. */
|
||||||
bool resetAllRenderstates, IMaterialRendererServices* services) {}
|
virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
|
||||||
|
bool resetAllRenderstates, IMaterialRendererServices* services) {}
|
||||||
//! 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
|
//! Called every time before a new bunch of geometry is being drawn using this material with for example drawIndexedTriangleList() call.
|
||||||
that the renderstates should be changed, it won't be called if for
|
/** OnSetMaterial should normally only be called if the renderer decides
|
||||||
example two drawIndexedTriangleList() will be called with the same
|
that the renderstates should be changed, it won't be called if for
|
||||||
material set. This method will be called every time. This is useful for
|
example two drawIndexedTriangleList() will be called with the same
|
||||||
example for materials with shaders, which don't only set new
|
material set. This method will be called every time. This is useful for
|
||||||
renderstates but also shader constants.
|
example for materials with shaders, which don't only set new
|
||||||
\param service: Pointer to interface providing methods for setting
|
renderstates but also shader constants.
|
||||||
constants and other things.
|
\param service: Pointer to interface providing methods for setting
|
||||||
\param vtxtype: Vertex type with which the next rendering will be done.
|
constants and other things.
|
||||||
This can be used by the material renderer to set some specific
|
\param vtxtype: Vertex type with which the next rendering will be done.
|
||||||
optimized shaders or if this is an incompatible vertex type for this
|
This can be used by the material renderer to set some specific
|
||||||
renderer, to refuse rendering for example.
|
optimized shaders or if this is an incompatible vertex type for this
|
||||||
\return Returns true if everything is OK, and false if nothing should
|
renderer, to refuse rendering for example.
|
||||||
be rendered. The material renderer can choose to return false for
|
\return Returns true if everything is OK, and false if nothing should
|
||||||
example if he doesn't support the specified vertex type. This is
|
be rendered. The material renderer can choose to return false for
|
||||||
actually done in D3D9 when using a normal mapped material with
|
example if he doesn't support the specified vertex type. This is
|
||||||
a vertex type other than EVT_TANGENTS. */
|
actually done in D3D9 when using a normal mapped material with
|
||||||
virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) { return true; }
|
a vertex type other than EVT_TANGENTS. */
|
||||||
|
virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) { return true; }
|
||||||
//! Called by the IVideoDriver to unset this material.
|
|
||||||
/** Called during the IVideoDriver::setMaterial() call before the new
|
//! Called by the IVideoDriver to unset this material.
|
||||||
material will get the OnSetMaterial() call. */
|
/** Called during the IVideoDriver::setMaterial() call before the new
|
||||||
virtual void OnUnsetMaterial() {}
|
material will get the OnSetMaterial() call. */
|
||||||
|
virtual void OnUnsetMaterial() {}
|
||||||
//! Returns if the material is transparent.
|
|
||||||
/** The scene management needs to know this
|
//! Returns if the material is transparent.
|
||||||
for being able to sort the materials by opaque and transparent. */
|
/** The scene management needs to know this
|
||||||
virtual bool isTransparent() const { return false; }
|
for being able to sort the materials by opaque and transparent. */
|
||||||
|
virtual bool isTransparent() const { return false; }
|
||||||
//! Returns the render capability of the material.
|
|
||||||
/** Because some more complex materials
|
//! Returns the render capability of the material.
|
||||||
are implemented in multiple ways and need special hardware capabilities, it is possible
|
/** Because some more complex materials
|
||||||
to query how the current material renderer is performing on the current hardware with this
|
are implemented in multiple ways and need special hardware capabilities, it is possible
|
||||||
function.
|
to query how the current material renderer is performing on the current hardware with this
|
||||||
\return Returns 0 if everything is running fine. Any other value is material renderer
|
function.
|
||||||
specific and means for example that the renderer switched back to a fall back material because
|
\return Returns 0 if everything is running fine. Any other value is material renderer
|
||||||
it cannot use the latest shaders. More specific examples:
|
specific and means for example that the renderer switched back to a fall back material because
|
||||||
Fixed function pipeline materials should return 0 in most cases, parallax mapped
|
it cannot use the latest shaders. More specific examples:
|
||||||
material will only return 0 when at least pixel shader 1.4 is available on that machine. */
|
Fixed function pipeline materials should return 0 in most cases, parallax mapped
|
||||||
virtual s32 getRenderCapability() const { return 0; }
|
material will only return 0 when at least pixel shader 1.4 is available on that machine. */
|
||||||
|
virtual s32 getRenderCapability() const { return 0; }
|
||||||
//! Access the callback provided by the users when creating shader materials
|
|
||||||
/** \returns Returns either the users provided callback or 0 when no such
|
//! Access the callback provided by the users when creating shader materials
|
||||||
callback exists. Non-shader materials will always return 0. */
|
/** \returns Returns either the users provided callback or 0 when no such
|
||||||
virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const { return 0; }
|
callback exists. Non-shader materials will always return 0. */
|
||||||
};
|
virtual IShaderConstantSetCallBack* getShaderConstantSetCallBack() const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,82 +1,127 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "S3DVertex.h"
|
#include "SMaterial.h"
|
||||||
|
#include "S3DVertex.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
|
{
|
||||||
class IVideoDriver;
|
|
||||||
|
class IVideoDriver;
|
||||||
|
|
||||||
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
|
|
||||||
class IMaterialRendererServices
|
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
|
||||||
{
|
class IMaterialRendererServices
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Destructor
|
|
||||||
virtual ~IMaterialRendererServices() {}
|
//! Destructor
|
||||||
|
virtual ~IMaterialRendererServices() {}
|
||||||
//! Can be called by an IMaterialRenderer to make its work easier.
|
|
||||||
/** Sets all basic renderstates if needed.
|
//! Can be called by an IMaterialRenderer to make its work easier.
|
||||||
Basic render states are diffuse, ambient, specular, and emissive color,
|
/** Sets all basic renderstates if needed.
|
||||||
specular power, bilinear and trilinear filtering, wireframe mode,
|
Basic render states are diffuse, ambient, specular, and emissive color,
|
||||||
grouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and
|
specular power, bilinear and trilinear filtering, wireframe mode,
|
||||||
fog enabling.
|
grouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and
|
||||||
\param material The new material to be used.
|
fog enabling.
|
||||||
\param lastMaterial The material used until now.
|
\param material The new material to be used.
|
||||||
\param resetAllRenderstates Set to true if all renderstates should be
|
\param lastMaterial The material used until now.
|
||||||
set, regardless of their current state. */
|
\param resetAllRenderstates Set to true if all renderstates should be
|
||||||
virtual void setBasicRenderStates(const SMaterial& material,
|
set, regardless of their current state. */
|
||||||
const SMaterial& lastMaterial,
|
virtual void setBasicRenderStates(const SMaterial& material,
|
||||||
bool resetAllRenderstates) = 0;
|
const SMaterial& lastMaterial,
|
||||||
|
bool resetAllRenderstates) = 0;
|
||||||
//! Return an index constant for the vertex shader based on a uniform variable name.
|
|
||||||
virtual s32 getVertexShaderConstantID(const c8* name) = 0;
|
//! Return an index constant for the vertex shader based on a name.
|
||||||
|
virtual s32 getVertexShaderConstantID(const c8* name) = 0;
|
||||||
//! Sets a value for a vertex shader uniform variable.
|
|
||||||
/** \param index Index of the variable (as received from getVertexShaderConstantID)
|
//! Sets a constant for the vertex shader based on a name.
|
||||||
\param floats Pointer to array of floats
|
/** This can be used if you used a high level shader language like GLSL
|
||||||
\param count Amount of floats in array.
|
or HLSL to create a shader. Example: If you created a shader which has
|
||||||
\return True if successful.
|
variables named 'mWorldViewProj' (containing the WorldViewProjection
|
||||||
*/
|
matrix) and another one named 'fTime' containing one float, you can set
|
||||||
virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) = 0;
|
them in your IShaderConstantSetCallBack derived class like this:
|
||||||
|
\code
|
||||||
//! Int interface for the above.
|
virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
|
||||||
virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) = 0;
|
{
|
||||||
|
video::IVideoDriver* driver = services->getVideoDriver();
|
||||||
//! Uint interface for the above.
|
|
||||||
virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) = 0;
|
f32 time = (f32)os::Timer::getTime()/100000.0f;
|
||||||
|
services->setVertexShaderConstant("fTime", &time, 1);
|
||||||
//! Return an index constant for the pixel shader for the given uniform variable name
|
|
||||||
virtual s32 getPixelShaderConstantID(const c8* name) = 0;
|
core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
|
||||||
|
worldViewProj *= driver->getTransform(video::ETS_VIEW);
|
||||||
//! Sets a value for the given pixel shader uniform variable
|
worldViewProj *= driver->getTransform(video::ETS_WORLD);
|
||||||
/** This can be used if you used a high level shader language like GLSL
|
services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
|
||||||
or HLSL to create a shader. See setVertexShaderConstant() for an
|
}
|
||||||
example on how to use this.
|
\endcode
|
||||||
\param index Index of the variable (as received from getPixelShaderConstantID)
|
\param index Index of the variable
|
||||||
\param floats Pointer to array of floats
|
\param floats Pointer to array of floats
|
||||||
\param count Amount of floats in array.
|
\param count Amount of floats in array.
|
||||||
\return True if successful. */
|
\return True if successful.
|
||||||
virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) = 0;
|
*/
|
||||||
|
virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) = 0;
|
||||||
//! Int interface for the above.
|
|
||||||
virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) = 0;
|
//! Int interface for the above.
|
||||||
|
virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) = 0;
|
||||||
//! Uint interface for the above.
|
|
||||||
virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) = 0;
|
//! Uint interface for the above.
|
||||||
|
/* NOTE: UINT only works with GLSL, not supported for other shaders.
|
||||||
//! Get pointer to the IVideoDriver interface
|
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
|
||||||
/** \return Pointer to the IVideoDriver interface */
|
*/
|
||||||
virtual IVideoDriver* getVideoDriver() = 0;
|
virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) = 0;
|
||||||
};
|
|
||||||
|
//! Sets a vertex shader constant.
|
||||||
} // end namespace video
|
/** Can be used if you created a shader using pixel/vertex shader
|
||||||
} // end namespace irr
|
assembler or ARB_fragment_program or ARB_vertex_program.
|
||||||
|
\param data: Data to be set in the constants
|
||||||
|
\param startRegister: First register to be set
|
||||||
|
\param constantAmount: Amount of registers to be set. One register consists of 4 floats. */
|
||||||
|
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
|
||||||
|
|
||||||
|
//! Return an index constant for the pixel shader based on a name.
|
||||||
|
virtual s32 getPixelShaderConstantID(const c8* name) = 0;
|
||||||
|
|
||||||
|
//! Sets a constant for the pixel shader based on a name.
|
||||||
|
/** This can be used if you used a high level shader language like GLSL
|
||||||
|
or HLSL to create a shader. See setVertexShaderConstant() for an
|
||||||
|
example on how to use this.
|
||||||
|
\param index Index of the variable
|
||||||
|
\param floats Pointer to array of floats
|
||||||
|
\param count Amount of floats in array.
|
||||||
|
\return True if successful. */
|
||||||
|
virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) = 0;
|
||||||
|
|
||||||
|
//! Int interface for the above.
|
||||||
|
virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) = 0;
|
||||||
|
|
||||||
|
//! Uint interface for the above.
|
||||||
|
/* NOTE: UINT only works with GLSL, not supported for other shaders.
|
||||||
|
Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.
|
||||||
|
*/
|
||||||
|
virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) = 0;
|
||||||
|
|
||||||
|
//! 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
|
||||||
|
/** \return Pointer to the IVideoDriver interface */
|
||||||
|
virtual IVideoDriver* getVideoDriver() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,27 +1,31 @@
|
|||||||
// Copyright Michael Zeilfelder
|
// Copyright Michael Zeilfelder
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! Interface providing read access to a memory read file.
|
|
||||||
class IMemoryReadFile : public IReadFile
|
//! Interface providing read access to a memory read file.
|
||||||
{
|
class IMemoryReadFile : public IReadFile
|
||||||
public:
|
{
|
||||||
//! Get direct access to internal buffer of memory block used as file.
|
public:
|
||||||
/** It's usually better to use the IReadFile functions to access
|
//! Get direct access to internal buffer of memory block used as file.
|
||||||
the file content. But as that buffer exist over the full life-time
|
/** It's usually better to use the IReadFile functions to access
|
||||||
of a CMemoryReadFile, it's sometimes nice to avoid the additional
|
the file content. But as that buffer exist over the full life-time
|
||||||
data-copy which read() needs.
|
of a CMemoryReadFile, it's sometimes nice to avoid the additional
|
||||||
*/
|
data-copy which read() needs.
|
||||||
virtual const void *getBuffer() const = 0;
|
*/
|
||||||
};
|
virtual const void *getBuffer() const = 0;
|
||||||
} // end namespace io
|
};
|
||||||
} // end namespace irr
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
254
include/IMesh.h
254
include/IMesh.h
@ -1,125 +1,129 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SMaterial.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EHardwareBufferFlags.h"
|
#include "SMaterial.h"
|
||||||
|
#include "EHardwareBufferFlags.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
//! Possible types of meshes.
|
{
|
||||||
// Note: Was previously only used in IAnimatedMesh so it still has the "animated" in the name.
|
//! Possible types of meshes.
|
||||||
// But can now be used for all mesh-types as we need those casts as well.
|
// Note: Was previously only used in IAnimatedMesh so it still has the "animated" in the name.
|
||||||
enum E_ANIMATED_MESH_TYPE
|
// But can now be used for all mesh-types as we need those casts as well.
|
||||||
{
|
enum E_ANIMATED_MESH_TYPE
|
||||||
//! Unknown animated mesh type.
|
{
|
||||||
EAMT_UNKNOWN = 0,
|
//! Unknown animated mesh type.
|
||||||
|
EAMT_UNKNOWN = 0,
|
||||||
//! Quake 2 MD2 model file
|
|
||||||
EAMT_MD2,
|
//! Quake 2 MD2 model file
|
||||||
|
EAMT_MD2,
|
||||||
//! Quake 3 MD3 model file
|
|
||||||
EAMT_MD3,
|
//! Quake 3 MD3 model file
|
||||||
|
EAMT_MD3,
|
||||||
//! Maya .obj static model
|
|
||||||
EAMT_OBJ,
|
//! Maya .obj static model
|
||||||
|
EAMT_OBJ,
|
||||||
//! Quake 3 .bsp static Map
|
|
||||||
EAMT_BSP,
|
//! Quake 3 .bsp static Map
|
||||||
|
EAMT_BSP,
|
||||||
//! 3D Studio .3ds file
|
|
||||||
EAMT_3DS,
|
//! 3D Studio .3ds file
|
||||||
|
EAMT_3DS,
|
||||||
//! My3D Mesh, the file format by Zhuck Dimitry
|
|
||||||
EAMT_MY3D,
|
//! My3D Mesh, the file format by Zhuck Dimitry
|
||||||
|
EAMT_MY3D,
|
||||||
//! Pulsar LMTools .lmts file. This Irrlicht loader was written by Jonas Petersen
|
|
||||||
EAMT_LMTS,
|
//! Pulsar LMTools .lmts file. This Irrlicht loader was written by Jonas Petersen
|
||||||
|
EAMT_LMTS,
|
||||||
//! Cartography Shop .csm file. This loader was created by Saurav Mohapatra.
|
|
||||||
EAMT_CSM,
|
//! Cartography Shop .csm file. This loader was created by Saurav Mohapatra.
|
||||||
|
EAMT_CSM,
|
||||||
//! .oct file for Paul Nette's FSRad or from Murphy McCauley's Blender .oct exporter.
|
|
||||||
/** The oct file format contains 3D geometry and lightmaps and
|
//! .oct file for Paul Nette's FSRad or from Murphy McCauley's Blender .oct exporter.
|
||||||
can be loaded directly by Irrlicht */
|
/** The oct file format contains 3D geometry and lightmaps and
|
||||||
EAMT_OCT,
|
can be loaded directly by Irrlicht */
|
||||||
|
EAMT_OCT,
|
||||||
//! Halflife MDL model file
|
|
||||||
EAMT_MDL_HALFLIFE,
|
//! Halflife MDL model file
|
||||||
|
EAMT_MDL_HALFLIFE,
|
||||||
//! generic skinned mesh
|
|
||||||
EAMT_SKINNED,
|
//! generic skinned mesh
|
||||||
|
EAMT_SKINNED,
|
||||||
//! generic non-animated mesh
|
|
||||||
EAMT_STATIC
|
//! generic non-animated mesh
|
||||||
};
|
EAMT_STATIC
|
||||||
|
};
|
||||||
|
|
||||||
class IMeshBuffer;
|
|
||||||
|
class IMeshBuffer;
|
||||||
//! Class which holds the geometry of an object.
|
|
||||||
/** An IMesh is nothing more than a collection of some mesh buffers
|
//! Class which holds the geometry of an object.
|
||||||
(IMeshBuffer). SMesh is a simple implementation of an IMesh.
|
/** An IMesh is nothing more than a collection of some mesh buffers
|
||||||
A mesh is usually added to an IMeshSceneNode in order to be rendered.
|
(IMeshBuffer). SMesh is a simple implementation of an IMesh.
|
||||||
*/
|
A mesh is usually added to an IMeshSceneNode in order to be rendered.
|
||||||
class IMesh : public virtual IReferenceCounted
|
*/
|
||||||
{
|
class IMesh : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Get the amount of mesh buffers.
|
|
||||||
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
//! Get the amount of mesh buffers.
|
||||||
virtual u32 getMeshBufferCount() const = 0;
|
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
|
||||||
|
virtual u32 getMeshBufferCount() const = 0;
|
||||||
//! Get pointer to a mesh buffer.
|
|
||||||
/** \param nr: Zero based index of the mesh buffer. The maximum value is
|
//! Get pointer to a mesh buffer.
|
||||||
getMeshBufferCount() - 1;
|
/** \param nr: Zero based index of the mesh buffer. The maximum value is
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such
|
getMeshBufferCount() - 1;
|
||||||
mesh buffer. */
|
\return Pointer to the mesh buffer or 0 if there is no such
|
||||||
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
mesh buffer. */
|
||||||
|
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
|
||||||
//! Get pointer to a mesh buffer which fits a material
|
|
||||||
/** \param material: material to search for
|
//! Get pointer to a mesh buffer which fits a material
|
||||||
\return Pointer to the mesh buffer or 0 if there is no such
|
/** \param material: material to search for
|
||||||
mesh buffer. */
|
\return Pointer to the mesh buffer or 0 if there is no such
|
||||||
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const = 0;
|
mesh buffer. */
|
||||||
|
virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const = 0;
|
||||||
//! Get an axis aligned bounding box of the mesh.
|
|
||||||
/** \return Bounding box of this mesh. */
|
//! Get an axis aligned bounding box of the mesh.
|
||||||
virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
|
/** \return Bounding box of this mesh. */
|
||||||
|
virtual const core::aabbox3d<f32>& getBoundingBox() const = 0;
|
||||||
//! Set user-defined axis aligned bounding box
|
|
||||||
/** \param box New bounding box to use for the mesh. */
|
//! Set user-defined axis aligned bounding box
|
||||||
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
/** \param box New bounding box to use for the mesh. */
|
||||||
|
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
||||||
//! Set the hardware mapping hint
|
|
||||||
/** This methods allows to define optimization hints for the
|
//! Set the hardware mapping hint
|
||||||
hardware. This enables, e.g., the use of hardware buffers on
|
/** This methods allows to define optimization hints for the
|
||||||
platforms that support this feature. This can lead to noticeable
|
hardware. This enables, e.g., the use of hardware buffers on
|
||||||
performance gains. */
|
platforms that support this feature. This can lead to noticeable
|
||||||
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
performance gains. */
|
||||||
|
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
//! Flag the meshbuffer as changed, reloads hardware buffers
|
|
||||||
/** This method has to be called every time the vertices or
|
//! Flag the meshbuffer as changed, reloads hardware buffers
|
||||||
indices have changed. Otherwise, changes won't be updated
|
/** This method has to be called every time the vertices or
|
||||||
on the GPU in the next render cycle. */
|
indices have changed. Otherwise, changes won't be updated
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
on the GPU in the next render cycle. */
|
||||||
|
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
//! Returns the type of the meshes.
|
|
||||||
/** This is useful for making a safe downcast. For example,
|
//! Returns the type of the meshes.
|
||||||
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
/** This is useful for making a safe downcast. For example,
|
||||||
IMesh to IAnimatedMeshMD2.
|
if getMeshType() returns EAMT_MD2 it's safe to cast the
|
||||||
Note: It's no longer just about animated meshes, that name has just historical reasons.
|
IMesh to IAnimatedMeshMD2.
|
||||||
\returns Type of the mesh */
|
Note: It's no longer just about animated meshes, that name has just historical reasons.
|
||||||
virtual E_ANIMATED_MESH_TYPE getMeshType() const
|
\returns Type of the mesh */
|
||||||
{
|
virtual E_ANIMATED_MESH_TYPE getMeshType() const
|
||||||
return EAMT_STATIC;
|
{
|
||||||
}
|
return EAMT_STATIC;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,177 +1,185 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "SMaterial.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "aabbox3d.h"
|
#include "SMaterial.h"
|
||||||
#include "S3DVertex.h"
|
#include "aabbox3d.h"
|
||||||
#include "SVertexIndex.h"
|
#include "S3DVertex.h"
|
||||||
#include "EHardwareBufferFlags.h"
|
#include "SVertexIndex.h"
|
||||||
#include "EPrimitiveTypes.h"
|
#include "EHardwareBufferFlags.h"
|
||||||
|
#include "EPrimitiveTypes.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
//! Struct for holding a mesh with a single material.
|
{
|
||||||
/** A part of an IMesh which has the same material on each face of that
|
//! Struct for holding a mesh with a single material.
|
||||||
group. Logical groups of an IMesh need not be put into separate mesh
|
/** A part of an IMesh which has the same material on each face of that
|
||||||
buffers, but can be. Separately animated parts of the mesh must be put
|
group. Logical groups of an IMesh need not be put into separate mesh
|
||||||
into separate mesh buffers.
|
buffers, but can be. Separately animated parts of the mesh must be put
|
||||||
Some mesh buffer implementations have limitations on the number of
|
into separate mesh buffers.
|
||||||
vertices the buffer can hold. In that case, logical grouping can help.
|
Some mesh buffer implementations have limitations on the number of
|
||||||
Moreover, the number of vertices should be optimized for the GPU upload,
|
vertices the buffer can hold. In that case, logical grouping can help.
|
||||||
which often depends on the type of gfx card. Typical figures are
|
Moreover, the number of vertices should be optimized for the GPU upload,
|
||||||
1000-10000 vertices per buffer.
|
which often depends on the type of gfx card. Typical figures are
|
||||||
SMeshBuffer is a simple implementation of a MeshBuffer, which supports
|
1000-10000 vertices per buffer.
|
||||||
up to 65535 vertices.
|
SMeshBuffer is a simple implementation of a MeshBuffer, which supports
|
||||||
|
up to 65535 vertices.
|
||||||
Since meshbuffers are used for drawing, and hence will be exposed
|
|
||||||
to the driver, chances are high that they are grab()'ed from somewhere.
|
Since meshbuffers are used for drawing, and hence will be exposed
|
||||||
It's therefore required to dynamically allocate meshbuffers which are
|
to the driver, chances are high that they are grab()'ed from somewhere.
|
||||||
passed to a video driver and only drop the buffer once it's not used in
|
It's therefore required to dynamically allocate meshbuffers which are
|
||||||
the current code block anymore.
|
passed to a video driver and only drop the buffer once it's not used in
|
||||||
*/
|
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. */
|
//! Get the material of this meshbuffer
|
||||||
virtual video::SMaterial& getMaterial() = 0;
|
/** \return Material of this buffer. */
|
||||||
|
virtual video::SMaterial& getMaterial() = 0;
|
||||||
//! Get the material of this meshbuffer
|
|
||||||
/** \return Material of this buffer. */
|
//! Get the material of this meshbuffer
|
||||||
virtual const video::SMaterial& getMaterial() const = 0;
|
/** \return Material of this buffer. */
|
||||||
|
virtual const video::SMaterial& getMaterial() const = 0;
|
||||||
//! Get type of vertex data which is stored in this meshbuffer.
|
|
||||||
/** \return Vertex type of this buffer. */
|
//! Get type of vertex data which is stored in this meshbuffer.
|
||||||
virtual video::E_VERTEX_TYPE getVertexType() const = 0;
|
/** \return Vertex type of this buffer. */
|
||||||
|
virtual video::E_VERTEX_TYPE getVertexType() const = 0;
|
||||||
//! Get access to vertex data. The data is an array of vertices.
|
|
||||||
/** Which vertex type is used can be determined by getVertexType().
|
//! Get access to vertex data. The data is an array of vertices.
|
||||||
\return Pointer to array of vertices. */
|
/** Which vertex type is used can be determined by getVertexType().
|
||||||
virtual const void* getVertices() const = 0;
|
\return Pointer to array of vertices. */
|
||||||
|
virtual const void* getVertices() const = 0;
|
||||||
//! Get access to vertex data. The data is an array of vertices.
|
|
||||||
/** Which vertex type is used can be determined by getVertexType().
|
//! Get access to vertex data. The data is an array of vertices.
|
||||||
\return Pointer to array of vertices. */
|
/** Which vertex type is used can be determined by getVertexType().
|
||||||
virtual void* getVertices() = 0;
|
\return Pointer to array of vertices. */
|
||||||
|
virtual void* getVertices() = 0;
|
||||||
//! Get amount of vertices in meshbuffer.
|
|
||||||
/** \return Number of vertices in this buffer. */
|
//! Get amount of vertices in meshbuffer.
|
||||||
virtual u32 getVertexCount() const = 0;
|
/** \return Number of vertices in this buffer. */
|
||||||
|
virtual u32 getVertexCount() const = 0;
|
||||||
//! Get type of index data which is stored in this meshbuffer.
|
|
||||||
/** \return Index type of this buffer. */
|
//! Get type of index data which is stored in this meshbuffer.
|
||||||
virtual video::E_INDEX_TYPE getIndexType() const =0;
|
/** \return Index type of this buffer. */
|
||||||
|
virtual video::E_INDEX_TYPE getIndexType() const =0;
|
||||||
//! Get access to indices.
|
|
||||||
/** \return Pointer to indices array. */
|
//! Get access to indices.
|
||||||
virtual const u16* getIndices() const = 0;
|
/** \return Pointer to indices array. */
|
||||||
|
virtual const u16* getIndices() const = 0;
|
||||||
//! Get access to indices.
|
|
||||||
/** \return Pointer to indices array. */
|
//! Get access to indices.
|
||||||
virtual u16* getIndices() = 0;
|
/** \return Pointer to indices array. */
|
||||||
|
virtual u16* getIndices() = 0;
|
||||||
//! Get amount of indices in this meshbuffer.
|
|
||||||
/** \return Number of indices in this buffer. */
|
//! Get amount of indices in this meshbuffer.
|
||||||
virtual u32 getIndexCount() const = 0;
|
/** \return Number of indices in this buffer. */
|
||||||
|
virtual u32 getIndexCount() const = 0;
|
||||||
//! Get the axis aligned bounding box of this meshbuffer.
|
|
||||||
/** \return Axis aligned bounding box of this buffer. */
|
//! Get the axis aligned bounding box of this meshbuffer.
|
||||||
virtual const core::aabbox3df& getBoundingBox() const = 0;
|
/** \return Axis aligned bounding box of this buffer. */
|
||||||
|
virtual const core::aabbox3df& getBoundingBox() const = 0;
|
||||||
//! Set axis aligned bounding box
|
|
||||||
/** \param box User defined axis aligned bounding box to use
|
//! Set axis aligned bounding box
|
||||||
for this buffer. */
|
/** \param box User defined axis aligned bounding box to use
|
||||||
virtual void setBoundingBox(const core::aabbox3df& box) = 0;
|
for this buffer. */
|
||||||
|
virtual void setBoundingBox(const core::aabbox3df& box) = 0;
|
||||||
//! Recalculates the bounding box. Should be called if the mesh changed.
|
|
||||||
virtual void recalculateBoundingBox() = 0;
|
//! Recalculates the bounding box. Should be called if the mesh changed.
|
||||||
|
virtual void recalculateBoundingBox() = 0;
|
||||||
//! returns position of vertex i
|
|
||||||
virtual const core::vector3df& getPosition(u32 i) const = 0;
|
//! returns position of vertex i
|
||||||
|
virtual const core::vector3df& getPosition(u32 i) const = 0;
|
||||||
//! returns position of vertex i
|
|
||||||
virtual core::vector3df& getPosition(u32 i) = 0;
|
//! returns position of vertex i
|
||||||
|
virtual core::vector3df& getPosition(u32 i) = 0;
|
||||||
//! returns normal of vertex i
|
|
||||||
virtual const core::vector3df& getNormal(u32 i) const = 0;
|
//! returns normal of vertex i
|
||||||
|
virtual const core::vector3df& getNormal(u32 i) const = 0;
|
||||||
//! returns normal of vertex i
|
|
||||||
virtual core::vector3df& getNormal(u32 i) = 0;
|
//! returns normal of vertex i
|
||||||
|
virtual core::vector3df& getNormal(u32 i) = 0;
|
||||||
//! returns texture coord of vertex i
|
|
||||||
virtual const core::vector2df& getTCoords(u32 i) const = 0;
|
//! returns texture coord of vertex i
|
||||||
|
virtual const core::vector2df& getTCoords(u32 i) const = 0;
|
||||||
//! returns texture coord of vertex i
|
|
||||||
virtual core::vector2df& getTCoords(u32 i) = 0;
|
//! returns texture coord of vertex i
|
||||||
|
virtual core::vector2df& getTCoords(u32 i) = 0;
|
||||||
//! Append the vertices and indices to the current buffer
|
|
||||||
/** Only works for compatible vertex types.
|
//! Append the vertices and indices to the current buffer
|
||||||
\param vertices Pointer to a vertex array.
|
/** Only works for compatible vertex types.
|
||||||
\param numVertices Number of vertices in the array.
|
\param vertices Pointer to a vertex array.
|
||||||
\param indices Pointer to index array.
|
\param numVertices Number of vertices in the array.
|
||||||
\param numIndices Number of indices in array. */
|
\param indices Pointer to index array.
|
||||||
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0;
|
\param numIndices Number of indices in array. */
|
||||||
|
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0;
|
||||||
//! get the current hardware mapping hint
|
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
|
//! Append the meshbuffer to the current buffer
|
||||||
|
/** Only works for compatible vertex types
|
||||||
//! get the current hardware mapping hint
|
\param other Buffer to append to this one. */
|
||||||
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0;
|
virtual void append(const IMeshBuffer* const other) = 0;
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! get the current hardware mapping hint
|
||||||
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
|
||||||
|
|
||||||
//! flags the meshbuffer as changed, reloads hardware buffers
|
//! get the current hardware mapping hint
|
||||||
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0;
|
||||||
|
|
||||||
//! Get the currently used ID for identification of changes.
|
//! set the hardware mapping hint, for driver
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) = 0;
|
||||||
virtual u32 getChangedID_Vertex() const = 0;
|
|
||||||
|
//! flags the meshbuffer as changed, reloads hardware buffers
|
||||||
//! Get the currently used ID for identification of changes.
|
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
|
||||||
/** This shouldn't be used for anything outside the VideoDriver. */
|
|
||||||
virtual u32 getChangedID_Index() const = 0;
|
//! Get the currently used ID for identification of changes.
|
||||||
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
//! Used by the VideoDriver to remember the buffer link.
|
virtual u32 getChangedID_Vertex() const = 0;
|
||||||
virtual void setHWBuffer(void *ptr) const = 0;
|
|
||||||
virtual void *getHWBuffer() const = 0;
|
//! Get the currently used ID for identification of changes.
|
||||||
|
/** This shouldn't be used for anything outside the VideoDriver. */
|
||||||
//! Describe what kind of primitive geometry is used by the meshbuffer
|
virtual u32 getChangedID_Index() const = 0;
|
||||||
/** Note: Default is EPT_TRIANGLES. Using other types is fine for rendering.
|
|
||||||
But meshbuffer manipulation functions might expect type EPT_TRIANGLES
|
//! Used by the VideoDriver to remember the buffer link.
|
||||||
to work correctly. Also mesh writers will generally fail (badly!) with other
|
virtual void setHWBuffer(void *ptr) const = 0;
|
||||||
types than EPT_TRIANGLES. */
|
virtual void *getHWBuffer() const = 0;
|
||||||
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) = 0;
|
|
||||||
|
//! Describe what kind of primitive geometry is used by the meshbuffer
|
||||||
//! Get the kind of primitive geometry which is used by the meshbuffer
|
/** Note: Default is EPT_TRIANGLES. Using other types is fine for rendering.
|
||||||
virtual E_PRIMITIVE_TYPE getPrimitiveType() const = 0;
|
But meshbuffer manipulation functions might expect type EPT_TRIANGLES
|
||||||
|
to work correctly. Also mesh writers will generally fail (badly!) with other
|
||||||
//! Calculate how many geometric primitives are used by this meshbuffer
|
types than EPT_TRIANGLES. */
|
||||||
virtual u32 getPrimitiveCount() const
|
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) = 0;
|
||||||
{
|
|
||||||
const u32 indexCount = getIndexCount();
|
//! Get the kind of primitive geometry which is used by the meshbuffer
|
||||||
switch (getPrimitiveType())
|
virtual E_PRIMITIVE_TYPE getPrimitiveType() const = 0;
|
||||||
{
|
|
||||||
case scene::EPT_POINTS: return indexCount;
|
//! Calculate how many geometric primitives are used by this meshbuffer
|
||||||
case scene::EPT_LINE_STRIP: return indexCount-1;
|
virtual u32 getPrimitiveCount() const
|
||||||
case scene::EPT_LINE_LOOP: return indexCount;
|
{
|
||||||
case scene::EPT_LINES: return indexCount/2;
|
const u32 indexCount = getIndexCount();
|
||||||
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2);
|
switch (getPrimitiveType())
|
||||||
case scene::EPT_TRIANGLE_FAN: return (indexCount-2);
|
{
|
||||||
case scene::EPT_TRIANGLES: return indexCount/3;
|
case scene::EPT_POINTS: return indexCount;
|
||||||
case scene::EPT_POINT_SPRITES: return indexCount;
|
case scene::EPT_LINE_STRIP: return indexCount-1;
|
||||||
}
|
case scene::EPT_LINE_LOOP: return indexCount;
|
||||||
return 0;
|
case scene::EPT_LINES: return indexCount/2;
|
||||||
}
|
case scene::EPT_TRIANGLE_STRIP: return (indexCount-2);
|
||||||
|
case scene::EPT_TRIANGLE_FAN: return (indexCount-2);
|
||||||
};
|
case scene::EPT_TRIANGLES: return indexCount/3;
|
||||||
|
case scene::EPT_POINT_SPRITES: return indexCount;
|
||||||
} // end namespace scene
|
}
|
||||||
} // end namespace irr
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,133 +1,137 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "path.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace scene
|
|
||||||
{
|
namespace scene
|
||||||
class IMesh;
|
{
|
||||||
class IAnimatedMesh;
|
class IMesh;
|
||||||
class IAnimatedMeshSceneNode;
|
class IAnimatedMesh;
|
||||||
class IMeshLoader;
|
class IAnimatedMeshSceneNode;
|
||||||
|
class IMeshLoader;
|
||||||
//! The mesh cache stores already loaded meshes and provides an interface to them.
|
|
||||||
/** You can access it using ISceneManager::getMeshCache(). All existing
|
//! The mesh cache stores already loaded meshes and provides an interface to them.
|
||||||
scene managers will return a pointer to the same mesh cache, because it
|
/** You can access it using ISceneManager::getMeshCache(). All existing
|
||||||
is shared between them. With this interface, it is possible to manually
|
scene managers will return a pointer to the same mesh cache, because it
|
||||||
add new loaded meshes (if ISceneManager::getMesh() is not sufficient),
|
is shared between them. With this interface, it is possible to manually
|
||||||
to remove them and to iterate through already loaded meshes. */
|
add new loaded meshes (if ISceneManager::getMesh() is not sufficient),
|
||||||
class IMeshCache : public virtual IReferenceCounted
|
to remove them and to iterate through already loaded meshes. */
|
||||||
{
|
class IMeshCache : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Destructor
|
|
||||||
virtual ~IMeshCache() {}
|
//! Destructor
|
||||||
|
virtual ~IMeshCache() {}
|
||||||
//! Adds a mesh to the internal list of loaded meshes.
|
|
||||||
/** Usually, ISceneManager::getMesh() is called to load a mesh
|
//! Adds a mesh to the internal list of loaded meshes.
|
||||||
from a file. That method searches the list of loaded meshes if
|
/** Usually, ISceneManager::getMesh() is called to load a mesh
|
||||||
a mesh has already been loaded and returns a pointer to if it
|
from a file. That method searches the list of loaded meshes if
|
||||||
is in that list and already in memory. Otherwise it loads the
|
a mesh has already been loaded and returns a pointer to if it
|
||||||
mesh. With IMeshCache::addMesh(), it is possible to pretend
|
is in that list and already in memory. Otherwise it loads the
|
||||||
that a mesh already has been loaded. This method can be used
|
mesh. With IMeshCache::addMesh(), it is possible to pretend
|
||||||
for example by mesh loaders who need to load more than one mesh
|
that a mesh already has been loaded. This method can be used
|
||||||
with one call. They can add additional meshes with this method
|
for example by mesh loaders who need to load more than one mesh
|
||||||
to the scene manager. The COLLADA loader for example uses this
|
with one call. They can add additional meshes with this method
|
||||||
method.
|
to the scene manager. The COLLADA loader for example uses this
|
||||||
\param name Name of the mesh. When calling
|
method.
|
||||||
ISceneManager::getMesh() with this name it will return the mesh
|
\param name Name of the mesh. When calling
|
||||||
set by this method.
|
ISceneManager::getMesh() with this name it will return the mesh
|
||||||
\param mesh Pointer to a mesh which will now be referenced by
|
set by this method.
|
||||||
this name. */
|
\param mesh Pointer to a mesh which will now be referenced by
|
||||||
virtual void addMesh(const io::path& name, IAnimatedMesh* mesh) = 0;
|
this name. */
|
||||||
|
virtual void addMesh(const io::path& name, IAnimatedMesh* mesh) = 0;
|
||||||
//! Removes the mesh from the cache.
|
|
||||||
/** After loading a mesh with getMesh(), the mesh can be
|
//! Removes the mesh from the cache.
|
||||||
removed from the cache using this method, freeing a lot of
|
/** After loading a mesh with getMesh(), the mesh can be
|
||||||
memory.
|
removed from the cache using this method, freeing a lot of
|
||||||
\param mesh Pointer to the mesh which shall be removed. */
|
memory.
|
||||||
virtual void removeMesh(const IMesh* const mesh) = 0;
|
\param mesh Pointer to the mesh which shall be removed. */
|
||||||
|
virtual void removeMesh(const IMesh* const mesh) = 0;
|
||||||
//! Returns amount of loaded meshes in the cache.
|
|
||||||
/** You can load new meshes into the cache using getMesh() and
|
//! Returns amount of loaded meshes in the cache.
|
||||||
addMesh(). If you ever need to access the internal mesh cache,
|
/** You can load new meshes into the cache using getMesh() and
|
||||||
you can do this using removeMesh(), getMeshNumber(),
|
addMesh(). If you ever need to access the internal mesh cache,
|
||||||
getMeshByIndex() and getMeshName().
|
you can do this using removeMesh(), getMeshNumber(),
|
||||||
\return Number of meshes in cache. */
|
getMeshByIndex() and getMeshName().
|
||||||
virtual u32 getMeshCount() const = 0;
|
\return Number of meshes in cache. */
|
||||||
|
virtual u32 getMeshCount() const = 0;
|
||||||
//! Returns current index number of the mesh or -1 when not found.
|
|
||||||
/** \param mesh Pointer to the mesh to search for.
|
//! Returns current index number of the mesh or -1 when not found.
|
||||||
\return Index of the mesh in the cache, or -1 if not found. */
|
/** \param mesh Pointer to the mesh to search for.
|
||||||
virtual s32 getMeshIndex(const IMesh* const mesh) const = 0;
|
\return Index of the mesh in the cache, or -1 if not found. */
|
||||||
|
virtual s32 getMeshIndex(const IMesh* const mesh) const = 0;
|
||||||
//! Returns a mesh based on its index number.
|
|
||||||
/** \param index: Index of the mesh, number between 0 and
|
//! Returns a mesh based on its index number.
|
||||||
getMeshCount()-1.
|
/** \param index: Index of the mesh, number between 0 and
|
||||||
Note that this number is only valid until a new mesh is loaded
|
getMeshCount()-1.
|
||||||
or removed.
|
Note that this number is only valid until a new mesh is loaded
|
||||||
\return Pointer to the mesh or 0 if there is none with this
|
or removed.
|
||||||
number. */
|
\return Pointer to the mesh or 0 if there is none with this
|
||||||
virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
|
number. */
|
||||||
|
virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0;
|
||||||
//! Returns a mesh based on its name.
|
|
||||||
/** \param name Name of the mesh. Usually a filename.
|
//! Returns a mesh based on its name.
|
||||||
\return Pointer to the mesh or 0 if there is none with this number. */
|
/** \param name Name of the mesh. Usually a filename.
|
||||||
virtual IAnimatedMesh* getMeshByName(const io::path& name) = 0;
|
\return Pointer to the mesh or 0 if there is none with this number. */
|
||||||
|
virtual IAnimatedMesh* getMeshByName(const io::path& name) = 0;
|
||||||
//! Get the name of a loaded mesh, based on its index.
|
|
||||||
/** \param index: Index of the mesh, number between 0 and getMeshCount()-1.
|
//! Get the name of a loaded mesh, based on its index.
|
||||||
\return The name if mesh was found and has a name, else the path is empty. */
|
/** \param index: Index of the mesh, number between 0 and getMeshCount()-1.
|
||||||
virtual const io::SNamedPath& getMeshName(u32 index) const = 0;
|
\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;
|
||||||
//! Get the name of the loaded mesh if there is any.
|
|
||||||
/** \param mesh Pointer to mesh to query.
|
//! Get the name of the loaded mesh if there is any.
|
||||||
\return The name if mesh was found and has a name, else the path is empty. */
|
/** \param mesh Pointer to mesh to query.
|
||||||
virtual const io::SNamedPath& getMeshName(const IMesh* const mesh) const = 0;
|
\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;
|
||||||
//! Renames a loaded mesh.
|
|
||||||
/** Note that renaming meshes might change the ordering of the
|
//! Renames a loaded mesh.
|
||||||
meshes, and so the index of the meshes as returned by
|
/** Note that renaming meshes might change the ordering of the
|
||||||
getMeshIndex() or taken by some methods will change.
|
meshes, and so the index of the meshes as returned by
|
||||||
\param index The index of the mesh in the cache.
|
getMeshIndex() or taken by some methods will change.
|
||||||
\param name New name for the mesh.
|
\param index The index of the mesh in the cache.
|
||||||
\return True if mesh was renamed. */
|
\param name New name for the mesh.
|
||||||
virtual bool renameMesh(u32 index, const io::path& name) = 0;
|
\return True if mesh was renamed. */
|
||||||
|
virtual bool renameMesh(u32 index, const io::path& name) = 0;
|
||||||
//! Renames the loaded mesh
|
|
||||||
/** Note that renaming meshes might change the ordering of the
|
//! Renames the loaded mesh
|
||||||
meshes, and so the index of the meshes as returned by
|
/** Note that renaming meshes might change the ordering of the
|
||||||
getMeshIndex() or taken by some methods will change.
|
meshes, and so the index of the meshes as returned by
|
||||||
\param mesh Mesh to be renamed.
|
getMeshIndex() or taken by some methods will change.
|
||||||
\param name New name for the mesh.
|
\param mesh Mesh to be renamed.
|
||||||
\return True if mesh was renamed. */
|
\param name New name for the mesh.
|
||||||
virtual bool renameMesh(const IMesh* const mesh, const io::path& name) = 0;
|
\return True if mesh was renamed. */
|
||||||
|
virtual bool renameMesh(const IMesh* const mesh, const io::path& name) = 0;
|
||||||
//! Check if a mesh was already loaded.
|
|
||||||
/** \param name Name of the mesh. Usually a filename.
|
//! Check if a mesh was already loaded.
|
||||||
\return True if the mesh has been loaded, else false. */
|
/** \param name Name of the mesh. Usually a filename.
|
||||||
virtual bool isMeshLoaded(const io::path& name) = 0;
|
\return True if the mesh has been loaded, else false. */
|
||||||
|
virtual bool isMeshLoaded(const io::path& name) = 0;
|
||||||
//! Clears the whole mesh cache, removing all meshes.
|
|
||||||
/** All meshes will be reloaded completely when using ISceneManager::getMesh()
|
//! Clears the whole mesh cache, removing all meshes.
|
||||||
after calling this method.
|
/** All meshes will be reloaded completely when using ISceneManager::getMesh()
|
||||||
Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
after calling this method.
|
||||||
and you did not grab them, then they may become invalid. */
|
Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
||||||
virtual void clear() = 0;
|
and you did not grab them, then they may become invalid. */
|
||||||
|
virtual void clear() = 0;
|
||||||
//! Clears all meshes that are held in the mesh cache but not used anywhere else.
|
|
||||||
/** Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
//! Clears all meshes that are held in the mesh cache but not used anywhere else.
|
||||||
and you did not grab them, then they may become invalid. */
|
/** Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh()
|
||||||
virtual void clearUnusedMeshes() = 0;
|
and you did not grab them, then they may become invalid. */
|
||||||
};
|
virtual void clearUnusedMeshes() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,52 +1,55 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "path.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "path.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
class IReadFile;
|
{
|
||||||
} // end namespace io
|
class IReadFile;
|
||||||
namespace scene
|
} // end namespace io
|
||||||
{
|
namespace scene
|
||||||
class IAnimatedMesh;
|
{
|
||||||
|
class IAnimatedMesh;
|
||||||
//! Class which is able to load an animated mesh from a file.
|
|
||||||
/** If you want Irrlicht be able to load meshes of
|
//! Class which is able to load an animated mesh from a file.
|
||||||
currently unsupported file formats (e.g. .cob), then implement
|
/** If you want Irrlicht be able to load meshes of
|
||||||
this and add your new Meshloader with
|
currently unsupported file formats (e.g. .cob), then implement
|
||||||
ISceneManager::addExternalMeshLoader() to the engine. */
|
this and add your new Meshloader with
|
||||||
class IMeshLoader : public virtual IReferenceCounted
|
ISceneManager::addExternalMeshLoader() to the engine. */
|
||||||
{
|
class IMeshLoader : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
IMeshLoader() {}
|
//! Constructor
|
||||||
|
IMeshLoader() {}
|
||||||
//! Destructor
|
|
||||||
virtual ~IMeshLoader() {}
|
//! Destructor
|
||||||
|
virtual ~IMeshLoader() {}
|
||||||
//! Returns true if the file might be loaded by this class.
|
|
||||||
/** This decision should be based on the file extension (e.g. ".cob")
|
//! Returns true if the file might be loaded by this class.
|
||||||
only.
|
/** This decision should be based on the file extension (e.g. ".cob")
|
||||||
\param filename Name of the file to test.
|
only.
|
||||||
\return True if the file might be loaded by this class. */
|
\param filename Name of the file to test.
|
||||||
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
\return True if the file might be loaded by this class. */
|
||||||
|
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
|
||||||
//! Creates/loads an animated mesh from the file.
|
|
||||||
/** \param file File handler to load the file from.
|
//! Creates/loads an animated mesh from the file.
|
||||||
\return Pointer to the created mesh. Returns 0 if loading failed.
|
/** \param file File handler to load the file from.
|
||||||
If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
\return Pointer to the created mesh. Returns 0 if loading failed.
|
||||||
See IReferenceCounted::drop() for more information. */
|
If you no longer need the mesh, you should call IAnimatedMesh::drop().
|
||||||
virtual IAnimatedMesh* createMesh(io::IReadFile* file) = 0;
|
See IReferenceCounted::drop() for more information. */
|
||||||
};
|
virtual IAnimatedMesh* createMesh(io::IReadFile* file) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,183 +1,187 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "vector3d.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "aabbox3d.h"
|
#include "vector3d.h"
|
||||||
#include "matrix4.h"
|
#include "aabbox3d.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "matrix4.h"
|
||||||
#include "IMeshBuffer.h"
|
#include "IAnimatedMesh.h"
|
||||||
#include "SVertexManipulator.h"
|
#include "IMeshBuffer.h"
|
||||||
|
#include "SVertexManipulator.h"
|
||||||
namespace irr
|
|
||||||
{
|
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
|
//! An interface for easy manipulation of meshes.
|
||||||
fixing problems with wrong imported or exported meshes quickly after
|
/** Scale, set alpha value, flip surfaces, and so on. This exists for
|
||||||
loading. It is not intended for doing mesh modifications and/or
|
fixing problems with wrong imported or exported meshes quickly after
|
||||||
animations during runtime.
|
loading. It is not intended for doing mesh modifications and/or
|
||||||
*/
|
animations during runtime.
|
||||||
class IMeshManipulator : public virtual IReferenceCounted
|
*/
|
||||||
{
|
class IMeshManipulator : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Recalculates all normals of the mesh.
|
|
||||||
/** \param mesh: Mesh on which the operation is performed.
|
//! Recalculates all normals of the mesh.
|
||||||
\param smooth: If the normals shall be smoothed.
|
/** \param mesh: Mesh on which the operation is performed.
|
||||||
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
\param smooth: If the normals shall be smoothed.
|
||||||
virtual void recalculateNormals(IMesh* mesh, bool smooth = false,
|
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
||||||
bool angleWeighted = false) const=0;
|
virtual void recalculateNormals(IMesh* mesh, bool smooth = false,
|
||||||
|
bool angleWeighted = false) const=0;
|
||||||
//! Recalculates all normals of the mesh buffer.
|
|
||||||
/** \param buffer: Mesh buffer on which the operation is performed.
|
//! Recalculates all normals of the mesh buffer.
|
||||||
\param smooth: If the normals shall be smoothed.
|
/** \param buffer: Mesh buffer on which the operation is performed.
|
||||||
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
\param smooth: If the normals shall be smoothed.
|
||||||
virtual void recalculateNormals(IMeshBuffer* buffer,
|
\param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */
|
||||||
bool smooth = false, bool angleWeighted = false) const=0;
|
virtual void recalculateNormals(IMeshBuffer* buffer,
|
||||||
|
bool smooth = false, bool angleWeighted = false) const=0;
|
||||||
//! Scales the actual mesh, not a scene node.
|
|
||||||
/** \param mesh Mesh on which the operation is performed.
|
//! Scales the actual mesh, not a scene node.
|
||||||
\param factor Scale factor for each axis. */
|
/** \param mesh Mesh on which the operation is performed.
|
||||||
void scale(IMesh* mesh, const core::vector3df& factor) const
|
\param factor Scale factor for each axis. */
|
||||||
{
|
void scale(IMesh* mesh, const core::vector3df& factor) const
|
||||||
apply(SVertexPositionScaleManipulator(factor), mesh, true);
|
{
|
||||||
}
|
apply(SVertexPositionScaleManipulator(factor), mesh, true);
|
||||||
|
}
|
||||||
//! Scales the actual meshbuffer, not a scene node.
|
|
||||||
/** \param buffer Meshbuffer on which the operation is performed.
|
//! Scales the actual meshbuffer, not a scene node.
|
||||||
\param factor Scale factor for each axis. */
|
/** \param buffer Meshbuffer on which the operation is performed.
|
||||||
void scale(IMeshBuffer* buffer, const core::vector3df& factor) const
|
\param factor Scale factor for each axis. */
|
||||||
{
|
void scale(IMeshBuffer* buffer, const core::vector3df& factor) const
|
||||||
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
{
|
||||||
}
|
apply(SVertexPositionScaleManipulator(factor), buffer, true);
|
||||||
|
}
|
||||||
//! Clones a static IMesh into a modifiable SMesh.
|
|
||||||
/** All meshbuffers in the returned SMesh
|
//! Clones a static IMesh into a modifiable SMesh.
|
||||||
are of type SMeshBuffer or SMeshBufferLightMap.
|
/** All meshbuffers in the returned SMesh
|
||||||
\param mesh Mesh to copy.
|
are of type SMeshBuffer or SMeshBufferLightMap.
|
||||||
\return Cloned mesh. If you no longer need the
|
\param mesh Mesh to copy.
|
||||||
cloned mesh, you should call SMesh::drop(). See
|
\return Cloned mesh. If you no longer need the
|
||||||
IReferenceCounted::drop() for more information. */
|
cloned mesh, you should call SMesh::drop(). See
|
||||||
virtual SMesh* createMeshCopy(IMesh* mesh) const = 0;
|
IReferenceCounted::drop() for more information. */
|
||||||
|
virtual SMesh* createMeshCopy(IMesh* mesh) const = 0;
|
||||||
//! Get amount of polygons in mesh.
|
|
||||||
/** \param mesh Input mesh
|
//! Get amount of polygons in mesh.
|
||||||
\return Number of polygons in mesh. */
|
/** \param mesh Input mesh
|
||||||
virtual s32 getPolyCount(IMesh* mesh) const = 0;
|
\return Number of polygons in mesh. */
|
||||||
|
virtual s32 getPolyCount(IMesh* mesh) const = 0;
|
||||||
//! Get amount of polygons in mesh.
|
|
||||||
/** \param mesh Input mesh
|
//! Get amount of polygons in mesh.
|
||||||
\return Number of polygons in mesh. */
|
/** \param mesh Input mesh
|
||||||
virtual s32 getPolyCount(IAnimatedMesh* mesh) const = 0;
|
\return Number of polygons in mesh. */
|
||||||
|
virtual s32 getPolyCount(IAnimatedMesh* mesh) const = 0;
|
||||||
//! Create a new AnimatedMesh and adds the mesh to it
|
|
||||||
/** \param mesh Input mesh
|
//! Create a new AnimatedMesh and adds the mesh to it
|
||||||
\param type The type of the animated mesh to create.
|
/** \param mesh Input mesh
|
||||||
\return Newly created animated mesh with mesh as its only
|
\param type The type of the animated mesh to create.
|
||||||
content. When you don't need the animated mesh anymore, you
|
\return Newly created animated mesh with mesh as its only
|
||||||
should call IAnimatedMesh::drop(). See
|
content. When you don't need the animated mesh anymore, you
|
||||||
IReferenceCounted::drop() for more information. */
|
should call IAnimatedMesh::drop(). See
|
||||||
virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh,
|
IReferenceCounted::drop() for more information. */
|
||||||
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh,
|
||||||
|
scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0;
|
||||||
//! Apply a manipulator on the Meshbuffer
|
|
||||||
/** \param func A functor defining the mesh manipulation.
|
//! Apply a manipulator on the Meshbuffer
|
||||||
\param buffer The Meshbuffer to apply the manipulator to.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
\param buffer The Meshbuffer to apply the manipulator to.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
||||||
template <typename Functor>
|
\return True if the functor was successfully applied, else false. */
|
||||||
bool apply(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate=false) const
|
template <typename Functor>
|
||||||
{
|
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
|
|
||||||
/** \param func A functor defining the mesh manipulation.
|
//! Apply a manipulator on the Mesh
|
||||||
\param mesh The Mesh to apply the manipulator to.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
\param mesh The Mesh to apply the manipulator to.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
||||||
template <typename Functor>
|
\return True if the functor was successfully applied, else false. */
|
||||||
bool apply(const Functor& func, IMesh* mesh, bool boundingBoxUpdate=false) const
|
template <typename Functor>
|
||||||
{
|
bool apply(const Functor& func, IMesh* mesh, bool boundingBoxUpdate=false) const
|
||||||
if (!mesh)
|
{
|
||||||
return true;
|
if (!mesh)
|
||||||
bool result = true;
|
return true;
|
||||||
core::aabbox3df bufferbox;
|
bool result = true;
|
||||||
for (u32 i=0; i<mesh->getMeshBufferCount(); ++i)
|
core::aabbox3df bufferbox;
|
||||||
{
|
for (u32 i=0; i<mesh->getMeshBufferCount(); ++i)
|
||||||
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
{
|
||||||
if (boundingBoxUpdate)
|
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
||||||
{
|
if (boundingBoxUpdate)
|
||||||
if (0==i)
|
{
|
||||||
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
|
if (0==i)
|
||||||
else
|
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
|
||||||
bufferbox.addInternalBox(mesh->getMeshBuffer(i)->getBoundingBox());
|
else
|
||||||
}
|
bufferbox.addInternalBox(mesh->getMeshBuffer(i)->getBoundingBox());
|
||||||
}
|
}
|
||||||
if (boundingBoxUpdate)
|
}
|
||||||
mesh->setBoundingBox(bufferbox);
|
if (boundingBoxUpdate)
|
||||||
return result;
|
mesh->setBoundingBox(bufferbox);
|
||||||
}
|
return result;
|
||||||
|
}
|
||||||
protected:
|
|
||||||
//! Apply a manipulator based on the type of the functor
|
protected:
|
||||||
/** \param func A functor defining the mesh manipulation.
|
//! Apply a manipulator based on the type of the functor
|
||||||
\param buffer The Meshbuffer to apply the manipulator to.
|
/** \param func A functor defining the mesh manipulation.
|
||||||
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
\param buffer The Meshbuffer to apply the manipulator to.
|
||||||
\param typeTest Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times.
|
\param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation.
|
||||||
\return True if the functor was successfully applied, else false. */
|
\param typeTest Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times.
|
||||||
template <typename Functor>
|
\return True if the functor was successfully applied, else false. */
|
||||||
bool apply_(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate, const IVertexManipulator& typeTest) const
|
template <typename Functor>
|
||||||
{
|
bool apply_(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate, const IVertexManipulator& typeTest) const
|
||||||
if (!buffer)
|
{
|
||||||
return true;
|
if (!buffer)
|
||||||
|
return true;
|
||||||
core::aabbox3df bufferbox;
|
|
||||||
for (u32 i=0; i<buffer->getVertexCount(); ++i)
|
core::aabbox3df bufferbox;
|
||||||
{
|
for (u32 i=0; i<buffer->getVertexCount(); ++i)
|
||||||
switch (buffer->getVertexType())
|
{
|
||||||
{
|
switch (buffer->getVertexType())
|
||||||
case video::EVT_STANDARD:
|
{
|
||||||
{
|
case video::EVT_STANDARD:
|
||||||
video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices();
|
{
|
||||||
func(verts[i]);
|
video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices();
|
||||||
}
|
func(verts[i]);
|
||||||
break;
|
}
|
||||||
case video::EVT_2TCOORDS:
|
break;
|
||||||
{
|
case video::EVT_2TCOORDS:
|
||||||
video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices();
|
{
|
||||||
func(verts[i]);
|
video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices();
|
||||||
}
|
func(verts[i]);
|
||||||
break;
|
}
|
||||||
case video::EVT_TANGENTS:
|
break;
|
||||||
{
|
case video::EVT_TANGENTS:
|
||||||
video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices();
|
{
|
||||||
func(verts[i]);
|
video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices();
|
||||||
}
|
func(verts[i]);
|
||||||
break;
|
}
|
||||||
}
|
break;
|
||||||
if (boundingBoxUpdate)
|
}
|
||||||
{
|
if (boundingBoxUpdate)
|
||||||
if (0==i)
|
{
|
||||||
bufferbox.reset(buffer->getPosition(0));
|
if (0==i)
|
||||||
else
|
bufferbox.reset(buffer->getPosition(0));
|
||||||
bufferbox.addInternalPoint(buffer->getPosition(i));
|
else
|
||||||
}
|
bufferbox.addInternalPoint(buffer->getPosition(i));
|
||||||
}
|
}
|
||||||
if (boundingBoxUpdate)
|
}
|
||||||
buffer->setBoundingBox(bufferbox);
|
if (boundingBoxUpdate)
|
||||||
return true;
|
buffer->setBoundingBox(bufferbox);
|
||||||
}
|
return true;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,52 +1,57 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace scene
|
{
|
||||||
{
|
namespace scene
|
||||||
|
{
|
||||||
class IMesh;
|
|
||||||
|
class IMesh;
|
||||||
|
|
||||||
//! A scene node displaying a static mesh
|
|
||||||
class IMeshSceneNode : public ISceneNode
|
//! A scene node displaying a static mesh
|
||||||
{
|
class IMeshSceneNode : public ISceneNode
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor
|
|
||||||
/** Use setMesh() to set the mesh to display.
|
//! Constructor
|
||||||
*/
|
/** Use setMesh() to set the mesh to display.
|
||||||
IMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
*/
|
||||||
const core::vector3df& position = core::vector3df(0,0,0),
|
IMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id,
|
||||||
const core::vector3df& rotation = core::vector3df(0,0,0),
|
const core::vector3df& position = core::vector3df(0,0,0),
|
||||||
const core::vector3df& scale = core::vector3df(1,1,1))
|
const core::vector3df& rotation = core::vector3df(0,0,0),
|
||||||
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
const core::vector3df& scale = core::vector3df(1,1,1))
|
||||||
|
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
|
||||||
//! Sets a new mesh to display
|
|
||||||
/** \param mesh Mesh to display. */
|
//! Sets a new mesh to display
|
||||||
virtual void setMesh(IMesh* mesh) = 0;
|
/** \param mesh Mesh to display. */
|
||||||
|
virtual void setMesh(IMesh* mesh) = 0;
|
||||||
//! Get the currently defined mesh for display.
|
|
||||||
/** \return Pointer to mesh which is displayed by this node. */
|
//! Get the currently defined mesh for display.
|
||||||
virtual IMesh* getMesh(void) = 0;
|
/** \return Pointer to mesh which is displayed by this node. */
|
||||||
|
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.
|
|
||||||
/** In this way it is possible to change the materials of a mesh
|
//! Sets if the scene node should not copy the materials of the mesh but use them in a read only style.
|
||||||
causing all mesh scene nodes referencing this mesh to change, too.
|
/** In this way it is possible to change the materials of a mesh
|
||||||
\param readonly Flag if the materials shall be read-only. */
|
causing all mesh scene nodes referencing this mesh to change, too.
|
||||||
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
\param readonly Flag if the materials shall be read-only. */
|
||||||
|
virtual void setReadOnlyMaterials(bool readonly) = 0;
|
||||||
//! Check if the scene node should not copy the materials of the mesh but use them in a read only style
|
|
||||||
/** This flag can be set by setReadOnlyMaterials().
|
//! Check if the scene node should not copy the materials of the mesh but use them in a read only style
|
||||||
\return Whether the materials are read-only. */
|
/** This flag can be set by setReadOnlyMaterials().
|
||||||
virtual bool isReadOnlyMaterials() const = 0;
|
\return Whether the materials are read-only. */
|
||||||
};
|
virtual bool isReadOnlyMaterials() const = 0;
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,55 +1,58 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 __IRR_I_MESH_WRITER_H_INCLUDED__
|
||||||
#include "IReferenceCounted.h"
|
#define __IRR_I_MESH_WRITER_H_INCLUDED__
|
||||||
#include "EMeshWriterEnums.h"
|
|
||||||
|
#include "IReferenceCounted.h"
|
||||||
namespace irr
|
#include "EMeshWriterEnums.h"
|
||||||
{
|
|
||||||
namespace io
|
namespace irr
|
||||||
{
|
{
|
||||||
class IWriteFile;
|
namespace io
|
||||||
} // end namespace io
|
{
|
||||||
|
class IWriteFile;
|
||||||
namespace scene
|
} // end namespace io
|
||||||
{
|
|
||||||
class IMesh;
|
namespace scene
|
||||||
|
{
|
||||||
//! Interface for writing meshes
|
class IMesh;
|
||||||
class IMeshWriter : public virtual IReferenceCounted
|
|
||||||
{
|
//! Interface for writing meshes
|
||||||
public:
|
class IMeshWriter : public virtual IReferenceCounted
|
||||||
|
{
|
||||||
//! Destructor
|
public:
|
||||||
virtual ~IMeshWriter() {}
|
|
||||||
|
//! Destructor
|
||||||
//! Get the type of the mesh writer
|
virtual ~IMeshWriter() {}
|
||||||
/** For own implementations, use MAKE_IRR_ID as shown in the
|
|
||||||
EMESH_WRITER_TYPE enumeration to return your own unique mesh
|
//! Get the type of the mesh writer
|
||||||
type id.
|
/** For own implementations, use MAKE_IRR_ID as shown in the
|
||||||
\return Type of the mesh writer. */
|
EMESH_WRITER_TYPE enumeration to return your own unique mesh
|
||||||
virtual EMESH_WRITER_TYPE getType() const = 0;
|
type id.
|
||||||
|
\return Type of the mesh writer. */
|
||||||
//! Write a static mesh.
|
virtual EMESH_WRITER_TYPE getType() const = 0;
|
||||||
/** \param file File handle to write the mesh to.
|
|
||||||
\param mesh Pointer to mesh to be written.
|
//! Write a static mesh.
|
||||||
\param flags Optional flags to set properties of the writer.
|
/** \param file File handle to write the mesh to.
|
||||||
\return True if successful */
|
\param mesh Pointer to mesh to be written.
|
||||||
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh,
|
\param flags Optional flags to set properties of the writer.
|
||||||
s32 flags=EMWF_NONE) = 0;
|
\return True if successful */
|
||||||
|
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh,
|
||||||
// Writes an animated mesh
|
s32 flags=EMWF_NONE) = 0;
|
||||||
// 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 */
|
// Writes an animated mesh
|
||||||
//virtual bool writeAnimatedMesh(io::IWriteFile* file,
|
// for future use, only b3d writer is able to write animated meshes currently and that was implemented using the writeMesh above.
|
||||||
// scene::IAnimatedMesh* mesh,
|
/* \return Returns true if successful */
|
||||||
// s32 flags=EMWF_NONE) = 0;
|
//virtual bool writeAnimatedMesh(io::IWriteFile* file,
|
||||||
};
|
// scene::IAnimatedMesh* mesh,
|
||||||
|
// s32 flags=EMWF_NONE) = 0;
|
||||||
|
};
|
||||||
} // end namespace
|
|
||||||
} // end namespace
|
|
||||||
|
} // end namespace
|
||||||
|
} // end namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,46 +1,49 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "irrString.h"
|
#include "IReferenceCounted.h"
|
||||||
|
#include "irrString.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
//! The OSOperator provides OS-specific methods and information.
|
|
||||||
class IOSOperator : public virtual IReferenceCounted
|
//! The Operating system operator provides operation system specific methods and information.
|
||||||
{
|
class IOSOperator : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Get the current OS version as string.
|
public:
|
||||||
virtual const core::stringc& getOperatingSystemVersion() const = 0;
|
//! Get the current operation system version as string.
|
||||||
|
virtual const core::stringc& getOperatingSystemVersion() const = 0;
|
||||||
//! Copies text to the clipboard
|
|
||||||
//! \param text: text in utf-8
|
//! Copies text to the clipboard
|
||||||
virtual void copyToClipboard(const c8* text) const = 0;
|
//! \param text: text in utf-8
|
||||||
|
virtual void copyToClipboard(const c8* text) const = 0;
|
||||||
//! Copies text to the primary selection
|
|
||||||
//! This is a no-op on some platforms.
|
//! Copies text to the primary selection
|
||||||
//! \param text: text in utf-8
|
//! This is a no-op on some platforms.
|
||||||
virtual void copyToPrimarySelection(const c8* text) const = 0;
|
//! \param text: text in utf-8
|
||||||
|
virtual void copyToPrimarySelection(const c8* text) const = 0;
|
||||||
//! Get text from the clipboard
|
|
||||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
//! Get text from the clipboard
|
||||||
virtual const c8* getTextFromClipboard() const = 0;
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
|
virtual const c8* getTextFromClipboard() const = 0;
|
||||||
//! Get text from the primary selection
|
|
||||||
//! This is a no-op on some platforms.
|
//! Get text from the primary selection
|
||||||
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
//! This is a no-op on some platforms.
|
||||||
virtual const c8* getTextFromPrimarySelection() const = 0;
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
|
virtual const c8* getTextFromPrimarySelection() const = 0;
|
||||||
//! Get the total and available system RAM
|
|
||||||
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
//! Get the total and available system RAM
|
||||||
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
||||||
\return True if successful, false if not */
|
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
||||||
virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0;
|
\return True if successful, false if not */
|
||||||
|
virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0;
|
||||||
};
|
|
||||||
|
};
|
||||||
} // end namespace
|
|
||||||
|
} // end namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,57 +1,61 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "coreutil.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "EReadFileType.h"
|
#include "coreutil.h"
|
||||||
|
#include "EReadFileType.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace io
|
{
|
||||||
{
|
namespace io
|
||||||
|
{
|
||||||
//! Interface providing read access to a file.
|
|
||||||
class IReadFile : public virtual IReferenceCounted
|
//! Interface providing read access to a file.
|
||||||
{
|
class IReadFile : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
//! Reads an amount of bytes from the file.
|
public:
|
||||||
/** \param buffer Pointer to buffer where read bytes are written to.
|
//! Reads an amount of bytes from the file.
|
||||||
\param sizeToRead Amount of bytes to read from the file.
|
/** \param buffer Pointer to buffer where read bytes are written to.
|
||||||
\return How many bytes were read. */
|
\param sizeToRead Amount of bytes to read from the file.
|
||||||
virtual size_t read(void* buffer, size_t sizeToRead) = 0;
|
\return How many bytes were read. */
|
||||||
|
virtual size_t read(void* buffer, size_t sizeToRead) = 0;
|
||||||
//! Changes position in file
|
|
||||||
/** \param finalPos Destination position in the file.
|
//! Changes position in file
|
||||||
\param relativeMovement If set to true, the position in the file is
|
/** \param finalPos Destination position in the file.
|
||||||
changed relative to current position. Otherwise the position is changed
|
\param relativeMovement If set to true, the position in the file is
|
||||||
from beginning of file.
|
changed relative to current position. Otherwise the position is changed
|
||||||
\return True if successful, otherwise false. */
|
from beginning of file.
|
||||||
virtual bool seek(long finalPos, bool relativeMovement = false) = 0;
|
\return True if successful, otherwise false. */
|
||||||
|
virtual bool seek(long finalPos, bool relativeMovement = false) = 0;
|
||||||
//! Get size of file.
|
|
||||||
/** \return Size of the file in bytes. */
|
//! Get size of file.
|
||||||
virtual long getSize() const = 0;
|
/** \return Size of the file in bytes. */
|
||||||
|
virtual long getSize() const = 0;
|
||||||
//! Get the current position in the file.
|
|
||||||
/** \return Current position in the file in bytes on success or -1L on failure. */
|
//! Get the current position in the file.
|
||||||
virtual long getPos() const = 0;
|
/** \return Current position in the file in bytes on success or -1L on failure. */
|
||||||
|
virtual long getPos() const = 0;
|
||||||
//! Get name of file.
|
|
||||||
/** \return File name as zero terminated character string. */
|
//! Get name of file.
|
||||||
virtual const io::path& getFileName() const = 0;
|
/** \return File name as zero terminated character string. */
|
||||||
|
virtual const io::path& getFileName() const = 0;
|
||||||
//! Get the type of the class implementing this interface
|
|
||||||
virtual EREAD_FILE_TYPE getType() const
|
//! Get the type of the class implementing this interface
|
||||||
{
|
virtual EREAD_FILE_TYPE getType() const
|
||||||
return EFIT_UNKNOWN;
|
{
|
||||||
}
|
return EFIT_UNKNOWN;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
//! Internal function, please do not use.
|
|
||||||
IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize);
|
//! Internal function, please do not use.
|
||||||
|
IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize);
|
||||||
} // end namespace io
|
|
||||||
} // end namespace irr
|
} // end namespace io
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,166 +1,170 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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.
|
|
||||||
/** This class provides reference counting through the methods grab() and drop().
|
//! Base class of most objects of the Irrlicht Engine.
|
||||||
It also is able to store a debug string for every instance of an object.
|
/** This class provides reference counting through the methods grab() and drop().
|
||||||
Most objects of the Irrlicht
|
It also is able to store a debug string for every instance of an object.
|
||||||
Engine are derived from IReferenceCounted, and so they are reference counted.
|
Most objects of the Irrlicht
|
||||||
|
Engine are derived from IReferenceCounted, and so they are reference counted.
|
||||||
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
|
When you create an object in the Irrlicht engine, calling a method
|
||||||
to the new object. If you no longer need the object, you have
|
which starts with 'create', an object is created, and you get a pointer
|
||||||
to call drop(). This will destroy the object, if grab() was not called
|
to the new object. If you no longer need the object, you have
|
||||||
in another part of you program, because this part still needs the object.
|
to call drop(). This will destroy the object, if grab() was not called
|
||||||
Note, that you only need to call drop() to the object, if you created it,
|
in another part of you program, because this part still needs the object.
|
||||||
and the method had a 'create' in it.
|
Note, that you only need to call drop() to the object, if you created 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
|
|
||||||
IDriver::createTexture. You call
|
If you want to create a texture, you may want to call an imaginable method
|
||||||
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
IDriver::createTexture. You call
|
||||||
If you no longer need the texture, call texture->drop().
|
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
||||||
|
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
|
If you want to load a texture, you may want to call imaginable method
|
||||||
ITexture* texture = driver->loadTexture("example.jpg");
|
IDriver::loadTexture. You do this like
|
||||||
You will not have to drop the pointer to the loaded texture, because
|
ITexture* texture = driver->loadTexture("example.jpg");
|
||||||
the name of the method does not start with 'create'. The texture
|
You will not have to drop the pointer to the loaded texture, because
|
||||||
is stored somewhere by the driver.
|
the name of the method does not start with 'create'. The texture
|
||||||
*/
|
is stored somewhere by the driver.
|
||||||
class IReferenceCounted
|
*/
|
||||||
{
|
class IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Constructor.
|
|
||||||
IReferenceCounted()
|
//! Constructor.
|
||||||
: DebugName(0), ReferenceCounter(1)
|
IReferenceCounted()
|
||||||
{
|
: DebugName(0), ReferenceCounter(1)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
//! Destructor.
|
|
||||||
virtual ~IReferenceCounted()
|
//! Destructor.
|
||||||
{
|
virtual ~IReferenceCounted()
|
||||||
}
|
{
|
||||||
|
}
|
||||||
//! Grabs the object. Increments the reference counter by one.
|
|
||||||
/** Someone who calls grab() to an object, should later also
|
//! Grabs the object. Increments the reference counter by one.
|
||||||
call drop() to it. If an object never gets as much drop() as
|
/** Someone who calls grab() to an object, should later also
|
||||||
grab() calls, it will never be destroyed. The
|
call drop() to it. If an object never gets as much drop() as
|
||||||
IReferenceCounted class provides a basic reference counting
|
grab() calls, it will never be destroyed. The
|
||||||
mechanism with its methods grab() and drop(). Most objects of
|
IReferenceCounted class provides a basic reference counting
|
||||||
the Irrlicht Engine are derived from IReferenceCounted, and so
|
mechanism with its methods grab() and drop(). Most objects of
|
||||||
they are reference counted.
|
the Irrlicht Engine are derived from IReferenceCounted, and so
|
||||||
|
they are reference counted.
|
||||||
When you create an object in the Irrlicht engine, calling a
|
|
||||||
method which starts with 'create', an object is created, and
|
When you create an object in the Irrlicht engine, calling a
|
||||||
you get a pointer to the new object. If you no longer need the
|
method which starts with 'create', an object is created, and
|
||||||
object, you have to call drop(). This will destroy the object,
|
you get a pointer to the new object. If you no longer need the
|
||||||
if grab() was not called in another part of you program,
|
object, you have to call drop(). This will destroy the object,
|
||||||
because this part still needs the object. Note, that you only
|
if grab() was not called in another part of you program,
|
||||||
need to call drop() to the object, if you created it, and the
|
because this part still needs the object. Note, that you only
|
||||||
method had a 'create' in it.
|
need to call drop() to the object, if you created 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 IDriver::createTexture. You call
|
If you want to create a texture, you may want to call an
|
||||||
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
imaginable method IDriver::createTexture. You call
|
||||||
If you no longer need the texture, call texture->drop().
|
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
||||||
If you want to load a texture, you may want to call imaginable
|
If you no longer need the texture, call texture->drop().
|
||||||
method IDriver::loadTexture. You do this like
|
If you want to load a texture, you may want to call imaginable
|
||||||
ITexture* texture = driver->loadTexture("example.jpg");
|
method IDriver::loadTexture. You do this like
|
||||||
You will not have to drop the pointer to the loaded texture,
|
ITexture* texture = driver->loadTexture("example.jpg");
|
||||||
because the name of the method does not start with 'create'.
|
You will not have to drop the pointer to the loaded texture,
|
||||||
The texture is stored somewhere by the driver. */
|
because the name of the method does not start with 'create'.
|
||||||
void grab() const { ++ReferenceCounter; }
|
The texture is stored somewhere by the driver. */
|
||||||
|
void grab() const { ++ReferenceCounter; }
|
||||||
//! Drops the object. Decrements the reference counter by one.
|
|
||||||
/** The IReferenceCounted class provides a basic reference
|
//! Drops the object. Decrements the reference counter by one.
|
||||||
counting mechanism with its methods grab() and drop(). Most
|
/** The IReferenceCounted class provides a basic reference
|
||||||
objects of the Irrlicht Engine are derived from
|
counting mechanism with its methods grab() and drop(). Most
|
||||||
IReferenceCounted, and so they are reference counted.
|
objects of the Irrlicht Engine are derived from
|
||||||
|
IReferenceCounted, and so they are reference counted.
|
||||||
When you create an object in the Irrlicht engine, calling a
|
|
||||||
method which starts with 'create', an object is created, and
|
When you create an object in the Irrlicht engine, calling a
|
||||||
you get a pointer to the new object. If you no longer need the
|
method which starts with 'create', an object is created, and
|
||||||
object, you have to call drop(). This will destroy the object,
|
you get a pointer to the new object. If you no longer need the
|
||||||
if grab() was not called in another part of you program,
|
object, you have to call drop(). This will destroy the object,
|
||||||
because this part still needs the object. Note, that you only
|
if grab() was not called in another part of you program,
|
||||||
need to call drop() to the object, if you created it, and the
|
because this part still needs the object. Note, that you only
|
||||||
method had a 'create' in it.
|
need to call drop() to the object, if you created 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 IDriver::createTexture. You call
|
If you want to create a texture, you may want to call an
|
||||||
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
imaginable method IDriver::createTexture. You call
|
||||||
If you no longer need the texture, call texture->drop().
|
ITexture* texture = driver->createTexture(dimension2d<u32>(128, 128));
|
||||||
If you want to load a texture, you may want to call imaginable
|
If you no longer need the texture, call texture->drop().
|
||||||
method IDriver::loadTexture. You do this like
|
If you want to load a texture, you may want to call imaginable
|
||||||
ITexture* texture = driver->loadTexture("example.jpg");
|
method IDriver::loadTexture. You do this like
|
||||||
You will not have to drop the pointer to the loaded texture,
|
ITexture* texture = driver->loadTexture("example.jpg");
|
||||||
because the name of the method does not start with 'create'.
|
You will not have to drop the pointer to the loaded texture,
|
||||||
The texture is stored somewhere by the driver.
|
because the name of the method does not start with 'create'.
|
||||||
\return True, if the object was deleted. */
|
The texture is stored somewhere by the driver.
|
||||||
bool drop() const
|
\return True, if the object was deleted. */
|
||||||
{
|
bool drop() const
|
||||||
// someone is doing bad reference counting.
|
{
|
||||||
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
|
// someone is doing bad reference counting.
|
||||||
|
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
|
||||||
--ReferenceCounter;
|
|
||||||
if (!ReferenceCounter)
|
--ReferenceCounter;
|
||||||
{
|
if (!ReferenceCounter)
|
||||||
delete this;
|
{
|
||||||
return true;
|
delete this;
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
return false;
|
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
//! Get the reference count.
|
|
||||||
/** \return Current value of the reference counter. */
|
//! Get the reference count.
|
||||||
s32 getReferenceCount() const
|
/** \return Current value of the reference counter. */
|
||||||
{
|
s32 getReferenceCount() const
|
||||||
return ReferenceCounter;
|
{
|
||||||
}
|
return ReferenceCounter;
|
||||||
|
}
|
||||||
//! Returns the debug name of the object.
|
|
||||||
/** The Debugname may only be set and changed by the object
|
//! Returns the debug name of the object.
|
||||||
itself. This method should only be used in Debug mode.
|
/** The Debugname may only be set and changed by the object
|
||||||
\return Returns a string, previously set by setDebugName(); */
|
itself. This method should only be used in Debug mode.
|
||||||
const c8* getDebugName() const
|
\return Returns a string, previously set by setDebugName(); */
|
||||||
{
|
const c8* getDebugName() const
|
||||||
return DebugName;
|
{
|
||||||
}
|
return DebugName;
|
||||||
|
}
|
||||||
protected:
|
|
||||||
|
protected:
|
||||||
//! Sets the debug name of the object.
|
|
||||||
/** The Debugname may only be set and changed by the object
|
//! Sets the debug name of the object.
|
||||||
itself. This method should only be used in Debug mode.
|
/** The Debugname may only be set and changed by the object
|
||||||
\param newName: New debug name to set. */
|
itself. This method should only be used in Debug mode.
|
||||||
void setDebugName(const c8* newName)
|
\param newName: New debug name to set. */
|
||||||
{
|
void setDebugName(const c8* newName)
|
||||||
DebugName = newName;
|
{
|
||||||
}
|
DebugName = newName;
|
||||||
|
}
|
||||||
private:
|
|
||||||
|
private:
|
||||||
//! The debug name.
|
|
||||||
const c8* DebugName;
|
//! The debug name.
|
||||||
|
const c8* DebugName;
|
||||||
//! The reference counter. Mutable to do reference counting on const objects.
|
|
||||||
mutable s32 ReferenceCounter;
|
//! The reference counter. Mutable to do reference counting on const objects.
|
||||||
};
|
mutable s32 ReferenceCounter;
|
||||||
|
};
|
||||||
} // end namespace irr
|
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,126 +1,129 @@
|
|||||||
// Copyright (C) 2015 Patryk Nadrowski
|
// Copyright (C) 2015 Patryk Nadrowski
|
||||||
// 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 "EDriverTypes.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "irrArray.h"
|
#include "EDriverTypes.h"
|
||||||
|
#include "irrArray.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
class ITexture;
|
{
|
||||||
|
class ITexture;
|
||||||
//! Enumeration of cube texture surfaces
|
|
||||||
enum E_CUBE_SURFACE
|
//! Enumeration of cube texture surfaces
|
||||||
{
|
enum E_CUBE_SURFACE
|
||||||
ECS_POSX = 0,
|
{
|
||||||
ECS_NEGX,
|
ECS_POSX = 0,
|
||||||
ECS_POSY,
|
ECS_NEGX,
|
||||||
ECS_NEGY,
|
ECS_POSY,
|
||||||
ECS_POSZ,
|
ECS_NEGY,
|
||||||
ECS_NEGZ
|
ECS_POSZ,
|
||||||
};
|
ECS_NEGZ
|
||||||
|
};
|
||||||
//! Interface of a Render Target.
|
|
||||||
class IRenderTarget : public virtual IReferenceCounted
|
//! Interface of a Render Target.
|
||||||
{
|
class IRenderTarget : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! constructor
|
|
||||||
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL)
|
//! constructor
|
||||||
{
|
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
//! Returns an array of previously set textures.
|
|
||||||
const core::array<ITexture*>& getTexture() const
|
//! Returns an array of previously set textures.
|
||||||
{
|
const core::array<ITexture*>& getTexture() const
|
||||||
return Textures;
|
{
|
||||||
}
|
return Textures;
|
||||||
|
}
|
||||||
//! Returns a of previously set depth / depth-stencil texture.
|
|
||||||
ITexture* getDepthStencil() const
|
//! Returns a of previously set depth / depth-stencil texture.
|
||||||
{
|
ITexture* getDepthStencil() const
|
||||||
return DepthStencil;
|
{
|
||||||
}
|
return DepthStencil;
|
||||||
|
}
|
||||||
//! Returns an array of active surface for cube textures
|
|
||||||
const core::array<E_CUBE_SURFACE>& getCubeSurfaces() const
|
//! Returns an array of active surface for cube textures
|
||||||
{
|
const core::array<E_CUBE_SURFACE>& getCubeSurfaces() const
|
||||||
return CubeSurfaces;
|
{
|
||||||
}
|
return CubeSurfaces;
|
||||||
|
}
|
||||||
//! Set multiple textures.
|
|
||||||
/** Set multiple textures for the render target.
|
//! Set multiple textures.
|
||||||
\param texture Array of texture objects. These textures are used for a color outputs.
|
/** Set multiple textures for the render target.
|
||||||
\param depthStencil Depth or packed depth-stencil texture. This texture is used as depth
|
\param texture Array of texture objects. These textures are used for a color outputs.
|
||||||
or depth-stencil buffer. You can pass getDepthStencil() if you don't want to change it.
|
\param depthStencil Depth or packed depth-stencil texture. This texture is used as depth
|
||||||
\param cubeSurfaces When rendering to cube textures, set the surface to be used for each texture. Can be empty otherwise.
|
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.
|
||||||
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
|
|
||||||
//! You can pass getDepthStencil() for depthStencil if you don't want to change that one
|
//! Sets one texture + depthStencil
|
||||||
void setTexture(ITexture* texture, ITexture* depthStencil)
|
//! You can pass getDepthStencil() for depthStencil if you don't want to change that one
|
||||||
{
|
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.
|
|
||||||
void setTexture(ITexture* texture, ITexture* depthStencil, E_CUBE_SURFACE cubeSurface)
|
//! Set one cube surface texture.
|
||||||
{
|
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);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//! Get driver type of render target.
|
|
||||||
E_DRIVER_TYPE getDriverType() const
|
//! Get driver type of render target.
|
||||||
{
|
E_DRIVER_TYPE getDriverType() const
|
||||||
return DriverType;
|
{
|
||||||
}
|
return DriverType;
|
||||||
|
}
|
||||||
protected:
|
|
||||||
|
protected:
|
||||||
//! Set multiple textures.
|
|
||||||
// NOTE: working with pointers instead of arrays to avoid unnecessary memory allocations for the single textures case
|
//! Set multiple textures.
|
||||||
virtual void setTextures(ITexture* const * textures, u32 numTextures, ITexture* depthStencil, const E_CUBE_SURFACE* cubeSurfaces=0, u32 numCubeSurfaces=0) = 0;
|
// 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;
|
||||||
//! Textures assigned to render target.
|
|
||||||
core::array<ITexture*> Textures;
|
//! Textures assigned to render target.
|
||||||
|
core::array<ITexture*> Textures;
|
||||||
//! Depth or packed depth-stencil texture assigned to render target.
|
|
||||||
ITexture* DepthStencil;
|
//! Depth or packed depth-stencil texture assigned to render target.
|
||||||
|
ITexture* DepthStencil;
|
||||||
//! Active surface of cube textures
|
|
||||||
core::array<E_CUBE_SURFACE> CubeSurfaces;
|
//! Active surface of cube textures
|
||||||
|
core::array<E_CUBE_SURFACE> CubeSurfaces;
|
||||||
//! Driver type of render target.
|
|
||||||
E_DRIVER_TYPE DriverType;
|
//! Driver type of render target.
|
||||||
|
E_DRIVER_TYPE DriverType;
|
||||||
private:
|
|
||||||
// no copying (IReferenceCounted still allows that for reasons which take some time to work around)
|
private:
|
||||||
IRenderTarget(const IRenderTarget&);
|
// no copying (IReferenceCounted still allows that for reasons which take some time to work around)
|
||||||
IRenderTarget& operator=(const IRenderTarget&);
|
IRenderTarget(const IRenderTarget&);
|
||||||
};
|
IRenderTarget& operator=(const IRenderTarget&);
|
||||||
|
};
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,35 +1,38 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "position2d.h"
|
#include "IReferenceCounted.h"
|
||||||
#include "line3d.h"
|
#include "position2d.h"
|
||||||
|
#include "line3d.h"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
|
{
|
||||||
namespace scene
|
|
||||||
{
|
namespace scene
|
||||||
class ICameraSceneNode;
|
{
|
||||||
|
class ICameraSceneNode;
|
||||||
class ISceneCollisionManager : public virtual IReferenceCounted
|
|
||||||
{
|
class ISceneCollisionManager : public virtual IReferenceCounted
|
||||||
public:
|
{
|
||||||
|
public:
|
||||||
//! Returns a 3d ray which would go through the 2d screen coordinates.
|
|
||||||
/** \param pos: Screen coordinates in pixels.
|
//! Returns a 3d ray which would go through the 2d screen coordinates.
|
||||||
\param camera: Camera from which the ray starts. If null, the
|
/** \param pos: Screen coordinates in pixels.
|
||||||
active camera is used.
|
\param camera: Camera from which the ray starts. If null, the
|
||||||
\return Ray starting from the position of the camera and ending
|
active camera is used.
|
||||||
at a length of the far value of the camera at a position which
|
\return Ray starting from the position of the camera and ending
|
||||||
would be behind the 2d screen coordinates. */
|
at a length of the far value of the camera at a position which
|
||||||
virtual core::line3d<f32> getRayFromScreenCoordinates(
|
would be behind the 2d screen coordinates. */
|
||||||
const core::position2d<s32>& pos, const ICameraSceneNode* camera = 0) = 0;
|
virtual core::line3d<f32> getRayFromScreenCoordinates(
|
||||||
|
const core::position2d<s32>& pos, const ICameraSceneNode* camera = 0) = 0;
|
||||||
};
|
|
||||||
|
};
|
||||||
} // end namespace scene
|
|
||||||
} // end namespace irr
|
} // end namespace scene
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
1290
include/ISceneNode.h
1290
include/ISceneNode.h
File diff suppressed because it is too large
Load Diff
@ -1,81 +1,85 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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"
|
||||||
namespace irr
|
|
||||||
{
|
namespace irr
|
||||||
namespace video
|
{
|
||||||
{
|
namespace video
|
||||||
class IMaterialRendererServices;
|
{
|
||||||
class SMaterial;
|
class IMaterialRendererServices;
|
||||||
|
class SMaterial;
|
||||||
//! 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
|
//! Interface making it possible to set constants for gpu programs every frame.
|
||||||
the methods in IGPUProgrammingServices when creating a shader. The
|
/** Implement this interface in an own class and pass a pointer to it to one of
|
||||||
OnSetConstants method will be called every frame now. */
|
the methods in IGPUProgrammingServices when creating a shader. The
|
||||||
class IShaderConstantSetCallBack : public virtual IReferenceCounted
|
OnSetConstants method will be called every frame now. */
|
||||||
{
|
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
|
/**
|
||||||
class MyCallBack : public IShaderConstantSetCallBack
|
\code
|
||||||
{
|
class MyCallBack : public IShaderConstantSetCallBack
|
||||||
const video::SMaterial *UsedMaterial;
|
{
|
||||||
|
const video::SMaterial *UsedMaterial;
|
||||||
OnSetMaterial(const video::SMaterial& material)
|
|
||||||
{
|
OnSetMaterial(const video::SMaterial& material)
|
||||||
UsedMaterial=&material;
|
{
|
||||||
}
|
UsedMaterial=&material;
|
||||||
|
}
|
||||||
OnSetConstants(IMaterialRendererServices* services, s32 userData)
|
|
||||||
{
|
OnSetConstants(IMaterialRendererServices* services, s32 userData)
|
||||||
services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&UsedMaterial->color), 4);
|
{
|
||||||
}
|
services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&UsedMaterial->color), 4);
|
||||||
}
|
}
|
||||||
\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.
|
||||||
Implement the IShaderConstantSetCallBack in an own class and implement your own
|
/**
|
||||||
OnSetConstants method using the given IMaterialRendererServices interface.
|
Implement the IShaderConstantSetCallBack in an own class and implement your own
|
||||||
Pass a pointer to this class to one of the methods in IGPUProgrammingServices
|
OnSetConstants method using the given IMaterialRendererServices interface.
|
||||||
when creating a shader. The OnSetConstants method will now be called every time
|
Pass a pointer to this class to one of the methods in IGPUProgrammingServices
|
||||||
before geometry is being drawn using your shader material. A sample implementation
|
when creating a shader. The OnSetConstants method will now be called every time
|
||||||
would look like this:
|
before geometry is being drawn using your shader material. A sample implementation
|
||||||
\code
|
would look like this:
|
||||||
virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
|
\code
|
||||||
{
|
virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
|
||||||
video::IVideoDriver* driver = services->getVideoDriver();
|
{
|
||||||
|
video::IVideoDriver* driver = services->getVideoDriver();
|
||||||
// set clip matrix at register 4
|
|
||||||
core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
|
// set clip matrix at register 4
|
||||||
worldViewProj *= driver->getTransform(video::ETS_VIEW);
|
core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
|
||||||
worldViewProj *= driver->getTransform(video::ETS_WORLD);
|
worldViewProj *= driver->getTransform(video::ETS_VIEW);
|
||||||
services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4);
|
worldViewProj *= driver->getTransform(video::ETS_WORLD);
|
||||||
// for high level shading languages, this would be another solution:
|
services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4);
|
||||||
//services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
|
// for high level shading languages, this would be another solution:
|
||||||
|
//services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
|
||||||
// set some light color at register 9
|
|
||||||
video::SColorf col(0.0f,1.0f,1.0f,0.0f);
|
// set some light color at register 9
|
||||||
services->setVertexShaderConstant(reinterpret_cast<const f32*>(&col), 9, 1);
|
video::SColorf col(0.0f,1.0f,1.0f,0.0f);
|
||||||
// for high level shading languages, this would be another solution:
|
services->setVertexShaderConstant(reinterpret_cast<const f32*>(&col), 9, 1);
|
||||||
//services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&col), 4);
|
// for high level shading languages, this would be another solution:
|
||||||
}
|
//services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&col), 4);
|
||||||
\endcode
|
}
|
||||||
\param services: Pointer to an interface providing methods to set the constants for the shader.
|
\endcode
|
||||||
\param userData: Userdata int which can be specified when creating 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.
|
||||||
virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0;
|
*/
|
||||||
};
|
virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,223 +1,225 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
// 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 "IBoneSceneNode.h"
|
#include "irrArray.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "IBoneSceneNode.h"
|
||||||
#include "SSkinMeshBuffer.h"
|
#include "IAnimatedMesh.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,
|
|
||||||
|
// linear interpolation
|
||||||
// linear interpolation
|
EIM_LINEAR,
|
||||||
EIM_LINEAR,
|
|
||||||
|
//! 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
|
||||||
//! Interface for using some special functions of Skinned meshes
|
class ISkinnedMesh : public IAnimatedMesh
|
||||||
class ISkinnedMesh : public IAnimatedMesh
|
{
|
||||||
{
|
public:
|
||||||
public:
|
|
||||||
|
//! Gets joint count.
|
||||||
//! Gets joint count.
|
/** \return Amount of joints in the skeletal animated mesh. */
|
||||||
/** \return Amount of joints in the skeletal animated mesh. */
|
virtual u32 getJointCount() const = 0;
|
||||||
virtual u32 getJointCount() const = 0;
|
|
||||||
|
//! Gets the name of a joint.
|
||||||
//! Gets the name of a joint.
|
/** \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 c8* getJointName(u32 number) const = 0;
|
||||||
virtual const std::optional<std::string> &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 -1 if not found. */
|
||||||
\return Number of the joint or std::nullopt if not found. */
|
virtual s32 getJointNumber(const c8* name) const = 0;
|
||||||
virtual std::optional<u32> getJointNumber(const std::string &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
|
so make sure they are unique.
|
||||||
so make sure they are unique.
|
\return True if all joints in this mesh were
|
||||||
\return True if all joints in this mesh were
|
matched up (empty names will not be matched, and it's case
|
||||||
matched up (empty names will not be matched, and it's case
|
sensitive). Unmatched joints will not be animated. */
|
||||||
sensitive). Unmatched joints will not be animated. */
|
virtual bool useAnimationFrom(const ISkinnedMesh *mesh) = 0;
|
||||||
virtual bool useAnimationFrom(const ISkinnedMesh *mesh) = 0;
|
|
||||||
|
//! Update Normals when Animating
|
||||||
//! Update Normals when Animating
|
/** \param on If false don't animate, which is faster.
|
||||||
/** \param on If false don't animate, which is faster.
|
Else update normals, which allows for proper lighting of
|
||||||
Else update normals, which allows for proper lighting of
|
animated meshes. */
|
||||||
animated meshes. */
|
virtual void updateNormalsWhenAnimating(bool on) = 0;
|
||||||
virtual void updateNormalsWhenAnimating(bool on) = 0;
|
|
||||||
|
//! Sets Interpolation Mode
|
||||||
//! Sets Interpolation Mode
|
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;
|
|
||||||
|
//! converts the vertex type of all meshbuffers to tangents.
|
||||||
//! converts the vertex type of all meshbuffers to tangents.
|
/** E.g. used for bump mapping. */
|
||||||
/** E.g. used for bump mapping. */
|
virtual void convertMeshToTangents() = 0;
|
||||||
virtual void convertMeshToTangents() = 0;
|
|
||||||
|
//! Allows to enable hardware skinning.
|
||||||
//! Allows to enable hardware skinning.
|
/* This feature is not implemented in Irrlicht yet */
|
||||||
/* This feature is not implemented in Irrlicht yet */
|
virtual bool setHardwareSkinning(bool on) = 0;
|
||||||
virtual bool setHardwareSkinning(bool on) = 0;
|
|
||||||
|
//! Refreshes vertex data cached in joints such as positions and normals
|
||||||
//! Refreshes vertex data cached in joints such as positions and normals
|
virtual void refreshJointCache() = 0;
|
||||||
virtual void refreshJointCache() = 0;
|
|
||||||
|
//! Moves the mesh into static position.
|
||||||
//! Moves the mesh into static position.
|
virtual void resetAnimation() = 0;
|
||||||
virtual void resetAnimation() = 0;
|
|
||||||
|
//! A vertex weight
|
||||||
//! A vertex weight
|
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;
|
|
||||||
|
private:
|
||||||
private:
|
//! Internal members used by CSkinnedMesh
|
||||||
//! Internal members used by CSkinnedMesh
|
friend class CSkinnedMesh;
|
||||||
friend class CSkinnedMesh;
|
char *Moved;
|
||||||
char *Moved;
|
core::vector3df StaticPos;
|
||||||
core::vector3df StaticPos;
|
core::vector3df StaticNormal;
|
||||||
core::vector3df StaticNormal;
|
};
|
||||||
};
|
|
||||||
|
|
||||||
|
//! Animation keyframe which describes a new position
|
||||||
//! Animation keyframe which describes a new position
|
struct SPositionKey
|
||||||
struct SPositionKey
|
{
|
||||||
{
|
f32 frame;
|
||||||
f32 frame;
|
core::vector3df position;
|
||||||
core::vector3df position;
|
};
|
||||||
};
|
|
||||||
|
//! Animation keyframe which describes a new scale
|
||||||
//! Animation keyframe which describes a new scale
|
struct SScaleKey
|
||||||
struct SScaleKey
|
{
|
||||||
{
|
f32 frame;
|
||||||
f32 frame;
|
core::vector3df scale;
|
||||||
core::vector3df scale;
|
};
|
||||||
};
|
|
||||||
|
//! Animation keyframe which describes a new rotation
|
||||||
//! Animation keyframe which describes a new rotation
|
struct SRotationKey
|
||||||
struct SRotationKey
|
{
|
||||||
{
|
f32 frame;
|
||||||
f32 frame;
|
core::quaternion rotation;
|
||||||
core::quaternion rotation;
|
};
|
||||||
};
|
|
||||||
|
//! Joints
|
||||||
//! Joints
|
struct SJoint
|
||||||
struct SJoint
|
{
|
||||||
{
|
SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false),
|
||||||
SJoint() : 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
|
core::stringc Name;
|
||||||
std::optional<std::string> 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;
|
|
||||||
|
//! Animation keys causing translation change
|
||||||
//! Animation keys causing translation change
|
core::array<SPositionKey> PositionKeys;
|
||||||
core::array<SPositionKey> PositionKeys;
|
|
||||||
|
//! Animation keys causing scale change
|
||||||
//! Animation keys causing scale change
|
core::array<SScaleKey> ScaleKeys;
|
||||||
core::array<SScaleKey> ScaleKeys;
|
|
||||||
|
//! Animation keys causing rotation change
|
||||||
//! Animation keys causing rotation change
|
core::array<SRotationKey> RotationKeys;
|
||||||
core::array<SRotationKey> RotationKeys;
|
|
||||||
|
//! Skin weights
|
||||||
//! Skin weights
|
core::array<SWeight> Weights;
|
||||||
core::array<SWeight> Weights;
|
|
||||||
|
//! Unnecessary for loaders, will be overwritten on finalize
|
||||||
//! Unnecessary for loaders, will be overwritten on finalize
|
core::matrix4 GlobalMatrix;
|
||||||
core::matrix4 GlobalMatrix;
|
core::matrix4 GlobalAnimatedMatrix;
|
||||||
core::matrix4 GlobalAnimatedMatrix;
|
core::matrix4 LocalAnimatedMatrix;
|
||||||
core::matrix4 LocalAnimatedMatrix;
|
core::vector3df Animatedposition;
|
||||||
core::vector3df Animatedposition;
|
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
|
friend class CSkinnedMesh;
|
||||||
friend class CSkinnedMesh;
|
|
||||||
|
SJoint *UseAnimationFrom;
|
||||||
SJoint *UseAnimationFrom;
|
bool GlobalSkinningSpace;
|
||||||
bool GlobalSkinningSpace;
|
|
||||||
|
s32 positionHint;
|
||||||
s32 positionHint;
|
s32 scaleHint;
|
||||||
s32 scaleHint;
|
s32 rotationHint;
|
||||||
s32 rotationHint;
|
};
|
||||||
};
|
|
||||||
|
|
||||||
|
//Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
|
||||||
//Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
|
|
||||||
|
//these functions will use the needed arrays, set values, etc to help the loaders
|
||||||
//these functions will use the needed arrays, set values, etc to help the loaders
|
|
||||||
|
//! 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
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user