Compare commits

...

69 Commits

Author SHA1 Message Date
celeron55 7173c2c629
Update README.md: Add notice about IrrlichtMt having been moved into the main repo 2024-05-13 15:29:27 +03:00
sfan5 124708784f Restore buildability with SDL 2.0.10 2024-03-21 22:48:22 +01:00
Desour bcb952c3ca Move source/Irrlicht/ to src/ 2024-03-21 22:08:26 +01:00
Desour 594e88bf3b Remove the tab removal script again 2024-03-21 22:08:26 +01:00
Desour dd1043c4c0 Replace non-leading tabs with spaces, using:
find -type f |  # list all regular files
  grep -E '\.(h|cpp|mm)$' |  # filter for source files
  grep -v '/mt_' |  # filter out generated files
  grep -v '/vendor/' | # and vendored GL
  xargs -n 1 -P $(nproc) ./replace_non_leading_tabs.lua  # reformat everything
2024-03-21 22:08:26 +01:00
Desour 72e303238e Add a small script for tab removal 2024-03-21 22:08:26 +01:00
Desour adc96072cd Fix ugly formatted arrays
Found via: `rg --multiline "=\n\t*\{\n"`
2024-03-21 22:08:26 +01:00
Desour 7cf801244c Reformat test/image_loader_test.cpp manually 2024-03-21 22:08:26 +01:00
numzero b01a3ea781 Fix ifs clang-format didn’t get 2024-03-21 22:08:26 +01:00
Desour e5b97d440a Remove .clang-format again 2024-03-21 22:08:26 +01:00
Desour f5c6d3e945 Reformat the code, using:
find -type f |  # list all regular files
  grep -E '\.(h|cpp|mm)$' |  # filter for source files
  grep -v '/mt_' |  # filter out generated files
  grep -v '/vendor/' | # and vendored GL
  grep -v '/test/image_loader_test.cpp' |  # and this file (has giant literals arrays)
  xargs -n 1 -P $(nproc) clang-format -i  # reformat everything

Co-authored-by: numzero <numzer0@yandex.ru>
2024-03-21 22:08:26 +01:00
numzero 9814510b1b Add clang-format file, based on that from Minetest 2024-03-21 22:08:26 +01:00
sfan5 05c8bc8314 Try to fix macOS CI 2024-03-20 20:37:22 +01:00
sfan5 a9c4683b18 Do not include core::string in matrix4.h 2024-03-17 23:25:45 +01:00
sfan5 26c4f4e63d Ensure enough alignment for IImages 2024-03-10 13:58:24 +01:00
sfan5 9d07f906a7 Delete mesh writing support entirely
CB3DMeshWriter.cpp was not even being compiled
2024-03-10 10:11:27 +01:00
sfan5 d26c0aeaaf Remove more dead code 2024-03-09 23:00:33 +01:00
sfan5 70b0b46d50 Delete deprecated video driver methods 2024-03-09 23:00:33 +01:00
sfan5 a7dd075dec Mark some common constructors and other stuff as constexpr 2024-03-09 22:05:06 +01:00
sfan5 1e89db1b80 Consistently include C headers by their C++ wrapper 2024-02-25 22:10:04 +01:00
sfan5 44a368ef0e Migrate public headers to `#pragma once` 2024-02-25 22:10:04 +01:00
sfan5 7ddf740f9b Remove unused includes in public headers 2024-02-25 22:10:04 +01:00
ROllerozxa 2bbfa178ea
Don't link against SDL2main (#265) 2024-02-23 22:44:16 +01:00
sfan5 61682104df COpenGLCoreTexture: fix abort when format not supported 2024-02-23 21:31:33 +01:00
sfan5 46542793d6 OpenGL: Fix BGRA format mapping 2024-02-23 21:31:33 +01:00
sfan5 9f2d13a2b6 OpenGL: Print more debug info at init time 2024-02-23 21:31:33 +01:00
sfan5 602a4050b5 Adjust CI vcpkg run package installation 2024-02-23 21:31:33 +01:00
sfan5 54de743641 Workaround for too old GL header on older SDL versions
Problem: Since the removal of !_IRR_OPENGL_USE_EXTPOINTER_ we require some quite recent
symbols to compile the legacy GL driver. (*) Since the previous commit we prefer including
them via SDL but those are sometimes too old.

(*) This was in fact always a problem since USE_EXTPOINTER is the default.
    I guess people just had recent enough headers usually.
2024-02-23 21:31:33 +01:00
sfan5 3e8d8440e3 Vendor GL headers again
primary reason:
The unified GLES2 driver requires OpenGL headers (really), which Android does not provide.
2024-02-23 21:31:33 +01:00
sfan5 8189b2338a Remove now unused legacy OGLES2 driver 2024-02-23 21:31:33 +01:00
sfan5 0a77ef5dc2 Enable unified driver with all devices 2024-02-23 21:31:33 +01:00
sfan5 19f0f707a6 Use ContextManager to resolve symbols in GL driver 2024-02-23 21:31:33 +01:00
sfan5 83998f7471 Reduce OGLES extension array to ones actually used 2024-02-23 21:31:33 +01:00
sfan5 b7bb4b5958 Remove all !_IRR_OGLES1_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5 f28e442bfa Drop all !_IRR_OGLES2_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5 4cd5c3489e Drop all !_IRR_OPENGL_USE_EXTPOINTER_ code 2024-02-23 21:31:33 +01:00
sfan5 52e4d72ae2 Migrate OpenGL cache and texture handler to GL pointers
this makes the OpenGL 3 driver free of GL symbol references!
2024-02-23 21:31:33 +01:00
sfan5 7241a49566 Compile at least one CI build as debug 2024-02-23 13:19:23 +01:00
Muhammad Rifqi Priyo Susanto 2db8c8728e Missing value_or() when printing std::optional 2024-02-23 13:17:41 +01:00
paradust7 270b2bec6e Ensure that std::abs is used and not integer abs 2024-02-21 23:25:52 +01:00
sfan5 c83f28431b Add API to delete shader materials 2024-02-21 21:53:38 +01:00
sfan5 e60921f0cb Drop old shader material functions
I'm not sure what these actually are, but the situation is the same as the last commit.
2024-02-21 21:53:38 +01:00
sfan5 92252f70d2 Drop low-level shader constant setters
These don't work on the modern drivers and are unused anyway.
2024-02-21 21:53:38 +01:00
sfan5 4e9d0db4be Delete a broken method
implementation commented out, lol?
2024-02-19 21:22:54 +01:00
SmallJoker 2bb2d3fe01
CFileSystem: Fix signed integer conversion on MinGW 2024-02-18 23:45:39 +01:00
sfan5 45ace61007 OpenGL: support scene::EHM_STREAM
the relevant enum value is defined in both gl3 and gles2
2024-02-18 22:43:25 +01:00
sfan5 89d0717779 Delete some dead code 2024-02-18 17:12:51 +01:00
sfan5 19819bd23a Reduce needless use of wchar / stringw 2024-02-18 17:12:51 +01:00
sfan5 2894d9ab03 Add debug output to GL shader loading 2024-02-18 17:12:51 +01:00
sfan5 e56605d7ce
Update README for new SDL status 2024-02-17 22:15:02 +01:00
HybridDog f91be59811 Remove support for GL_POINT_SMOOTH and GL_LINE_SMOOTH antialiasing
These antialiasing techniques have been removed in OpenGL 3.1, they were often executed by the CPU, and Minetest does not use them.
The OpenGL wiki recommends that we do not use this functionality in our program.
https://www.khronos.org/opengl/wiki/Multisampling#Smooth_antialiasing
2024-02-17 22:04:01 +01:00
wsor4035 0069837920
Upgrade CI actions (#290)
* update ci package versions to resolve warnings
* fix bug with duplicate package names under msvc
2024-02-17 21:07:25 +01:00
sfan5 ad96fabe4a Remove mistaken code block from OGLES1 driver
Version can never be 200 here, this was probably mistakenly copy-pasted from the OpenGL driver.
2024-02-17 21:01:15 +01:00
sfan5 6ba6118b8c Upgrade SDL CI to 22.04 everywhere
fed up with stuff not working for random reasons.
2024-02-16 22:42:49 +01:00
sfan5 7f11d2f950 Switch to llvm-mingw 2024-02-16 21:30:07 +01:00
sfan5 fe3e41e7ea Set minimum SDL version
It was determined that the touch/mouse hints only exist in this version.
Since it's from 2019 this should be a reasonable minimum.
2024-02-15 10:37:24 +01:00
sfan5 4478b1f1ec Remove old SDL Windows workaround
suggested by @waxtatect
2024-02-15 10:35:21 +01:00
sfan5 3992129735 Bind keypad enter on SDL
fixes https://github.com/minetest/minetest/issues/14170
2024-02-15 10:34:23 +01:00
Fatih Uzunoglu 0dab737d60 Do not use `core::max_()` with variable that can not be addressed
header struct is packed, and `core::max_()` takes the input as reference.
2024-02-12 16:31:10 +01:00
Fatih Uzunoglu 330150854b SDL: set default for ActiveIcon
getActiveIcon() may be called before ActiveIcon
is initialized, leading to undefined behavior.
2024-02-12 16:31:10 +01:00
y5nw 6779ac83f9
SDL: Improve handling of IMEs (#285)
* Set text input rectangle for IMEs
* Avoid unnecessarily "restarting" text input
2024-02-09 00:08:03 +01:00
Lars Müller f1504093d1
Ensure that absent bone names work (#284) 2024-02-06 20:22:44 +01:00
sfan5 8482cc3db8 Adjust package config dependency again
Predictably, this broke dynamic linking setups where
SDL is not available at build-time (it doesn't need to be).
2024-01-30 14:23:33 +01:00
sfan5 a4f94b7656 Add missing dependency find to package config
refer to <https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html#creating-a-package-configuration-file>
2024-01-28 01:06:17 +01:00
SmallJoker 4299ee21d8
CMake: Move generator conditional expressions (#281) 2024-01-22 09:50:29 +01:00
Vitaliy 5b81694b1d
CI: Android support (#197) 2024-01-21 15:51:11 +01:00
grorp 66786d0059
Make IrrlichtDevice::isWindowVisible do what it says on the tin (#279) 2024-01-19 18:17:26 +01:00
David Heidelberg 9df2f0b944 Undefine SDL2 DirectFB video driver
1. we don't need it
2. it's dropped in SDL 3
3. it breaks compilation on Alpine and postmarketOS with SDL2 enabled
   (and the bug never going to get fixed on SDL2 side)

Signed-off-by: David Heidelberg <david@ixit.cz>
2024-01-18 23:28:45 +01:00
sfan5 c3571261ca Fix build with OpenGL ES 1 2024-01-17 17:55:19 +01:00
424 changed files with 62122 additions and 63314 deletions

View File

@ -10,7 +10,7 @@ jobs:
linux-gl:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
sudo apt-get update
@ -30,7 +30,7 @@ jobs:
make DESTDIR=$PWD/_install install
tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: irrlicht-linux
path: ./irrlicht-linux.tar.gz
@ -39,7 +39,7 @@ jobs:
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
sudo apt-get update
@ -63,7 +63,7 @@ jobs:
linux-sdl:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
sudo apt-get update
@ -71,7 +71,7 @@ jobs:
- name: Build
run: |
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
make -j2
- name: Test (headless)
@ -83,7 +83,7 @@ jobs:
# Xvfb test is broken on 20.04 for unknown reasons (not our bug)
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
sudo apt-get update
@ -107,7 +107,7 @@ jobs:
linux-sdl-gles2:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
sudo apt-get update
@ -140,21 +140,21 @@ jobs:
- {variant: win32, arch: i686, extras: "-sdl"}
- {variant: win64, arch: x86_64, extras: "-sdl"}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install compiler
run: |
sudo apt-get update && sudo apt-get install cmake -qyy
./scripts/ci-get-mingw.sh ${{matrix.config.arch}}
./scripts/ci-get-mingw.sh
- name: Build
run: |
./scripts/ci-build-mingw.sh package
env:
CC: ${{matrix.config.arch}}-w64-mingw32-gcc
CXX: ${{matrix.config.arch}}-w64-mingw32-g++
CC: ${{matrix.config.arch}}-w64-mingw32-clang
CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
extras: ${{matrix.config.extras}}
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip
@ -162,11 +162,14 @@ jobs:
macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
brew update
brew update --auto-update
brew install cmake libpng jpeg
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- name: Build
run: |
@ -180,11 +183,14 @@ jobs:
macos-sdl:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install deps
run: |
brew update
brew update --auto-update
brew install cmake libpng jpeg sdl2
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- name: Build
run: |
@ -197,7 +203,7 @@ jobs:
env:
VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
# 2023.10.19
vcpkg_packages: zlib libpng libjpeg-turbo opengl-registry
vcpkg_packages: zlib libpng libjpeg-turbo
strategy:
fail-fast: false
matrix:
@ -214,6 +220,7 @@ jobs:
-
use: FALSE
label: '(no SDL)'
vcpkg_packages: opengl-registry
-
use: TRUE
label: '(with SDL)'
@ -221,7 +228,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Restore from cache and run vcpkg
uses: lukka/run-vcpkg@v7
@ -254,7 +261,50 @@ jobs:
run: move include artifact/
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: msvc-${{ matrix.config.arch }}
name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
path: artifact/
android:
name: Android ${{ matrix.arch }}
runs-on: ubuntu-20.04
env:
ndk_version: "r25c"
ANDROID_NDK: ${{ github.workspace }}/android-ndk
strategy:
matrix:
arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install deps
run: |
sudo rm /var/lib/man-db/auto-update
sudo apt-get update
sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake
- name: Cache NDK
id: cache-ndk
uses: actions/cache@v4
with:
key: android-ndk-${{ env.ndk_version }}-linux
path: ${{ env.ANDROID_NDK }}
- name: Install NDK
run: |
wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
unzip -q "android-ndk-${ndk_version}-linux.zip"
rm "android-ndk-${ndk_version}-linux.zip"
mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}
- name: Build
run: ./scripts/ci-build-android.sh ${{ matrix.arch }}
#- name: Upload Artifact
# uses: actions/upload-artifact@v4
# with:
# name: irrlicht-android-${{ matrix.arch }}
# path: ${{ runner.temp }}/pkg/${{ matrix.arch }}

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.12)
set(IRRLICHTMT_REVISION 14)
set(IRRLICHTMT_REVISION 15)
project(Irrlicht
VERSION 1.9.0.${IRRLICHTMT_REVISION}
@ -35,7 +35,7 @@ endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
enable_testing()
add_subdirectory(source/Irrlicht)
add_subdirectory(src)
add_subdirectory(test)
option(BUILD_EXAMPLES "Build example applications" FALSE)

View File

@ -1,5 +1,11 @@
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
if(NOT TARGET IrrlichtMt::IrrlichtMt)
# private dependency only explicitly needed with static libs
if(@USE_SDL2@ AND NOT @BUILD_SHARED_LIBS@)
find_dependency(SDL2)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/IrrlichtMtTargets.cmake")
endif()

View File

@ -1,6 +1,14 @@
IrrlichtMt version 1.9
======================
Notice
------
IrrlichtMt has been moved into the [main Minetest repository](https://github.com/minetest) during Minetest 5.9 development. This repository is an archive useful for building older versions of Minetest.
About
-----
IrrlichtMt is the 3D engine of [Minetest](https://github.com/minetest).
It is based on the [Irrlicht Engine](https://irrlicht.sourceforge.io/) but is now developed independently.
It is intentionally not compatible to upstream and is planned to be eventually absorbed into Minetest.
@ -15,6 +23,7 @@ The following libraries are required to be installed:
* OpenGL
* or on mobile: OpenGL ES (can be optionally enabled on desktop too)
* on Unix: X11
* SDL2 (see below)
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
@ -23,7 +32,7 @@ Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
* `USE_SDL2` (default: `OFF`) - Use SDL2 instead of native platform device
* `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code
e.g. on a Linux system you might want to build for local use like this:
@ -40,7 +49,7 @@ It is highly recommended to use vcpkg as package manager.
After you successfully built vcpkg you can easily install the required libraries:
vcpkg install zlib libjpeg-turbo libpng opengl-registry --triplet x64-windows
vcpkg install zlib libjpeg-turbo libpng sdl2 --triplet x64-windows
Run the following script in PowerShell:

View File

@ -28,14 +28,14 @@ static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
static inline void check(bool ok, const char *msg)
{
if (!ok)
{
if (!ok) {
test_fail++;
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;
try {
test_irr_array();
@ -93,13 +93,11 @@ int main(int argc, char *argv[])
check(mesh, "mesh loading");
if (mesh_file)
mesh_file->drop();
if (mesh)
{
if (mesh) {
video::ITexture *tex = driver->getTexture(mediaPath + "cooltexture.png");
check(tex, "texture loading");
scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh);
if (node)
{
if (node) {
node->forEachMaterial([tex](video::SMaterial &mat) {
mat.Lighting = false;
mat.setTexture(0, tex);
@ -115,25 +113,20 @@ int main(int argc, char *argv[])
SEvent event;
device->getTimer()->start();
while (device->run())
{
if (device->getTimer()->getTime() >= 1000)
{
while (device->run()) {
if (device->getTimer()->getTime() >= 1000) {
device->getTimer()->setTime(0);
++n;
if (n == 1) // Tooltip display
{
if (n == 1) { // Tooltip display
bzero(&event, sizeof(SEvent));
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
device->postEventFromUser(event);
}
else if (n == 2) // Text input focus
} else if (n == 2) // Text input focus
guienv->setFocus(editbox);
else if (n == 3) // Keypress for Text input
{
else if (n == 3) { // Keypress for Text input
bzero(&event, sizeof(SEvent));
event.EventType = irr::EET_KEY_INPUT_EVENT;
event.KeyInput.Char = L'a';
@ -142,8 +135,7 @@ int main(int argc, char *argv[])
device->postEventFromUser(event);
event.KeyInput.PressedDown = false;
device->postEventFromUser(event);
}
else
} else
device->closeDevice();
}

View File

@ -4,7 +4,8 @@
using namespace irr;
using core::array;
static void test_basics() {
static void test_basics()
{
array<int> v;
v.push_back(1); // 1
v.push_front(2); // 2, 1
@ -57,7 +58,8 @@ static void test_basics() {
UASSERTEQ(v.size(), 2);
}
static void test_linear_searches() {
static void test_linear_searches()
{
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
array<int> arr;
for (int i = 0; i <= 100; i++)
@ -75,7 +77,8 @@ static void test_linear_searches() {
}
}
static void test_binary_searches() {
static void test_binary_searches()
{
const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15};
array<int> arr;
for (int value : values) {

View File

@ -3,11 +3,13 @@
#include <exception>
#include <iostream>
class TestFailedException : public std::exception {
class TestFailedException : public std::exception
{
};
// Asserts the comparison specified by CMP is true, or fails the current unit test
#define UASSERTCMP(CMP, actual, expected) do { \
#define UASSERTCMP(CMP, actual, expected) \
do { \
const auto &a = (actual); \
const auto &e = (expected); \
if (!CMP(a, e)) { \
@ -15,7 +17,8 @@ class TestFailedException : public std::exception {
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
<< #expected << std::endl \
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
<< " actual: " << a << std::endl << " expected: " \
<< " actual: " << a << std::endl \
<< " expected: " \
<< e << std::endl; \
throw TestFailedException(); \
} \

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __T_MESH_BUFFER_H_INCLUDED__
#define __T_MESH_BUFFER_H_INCLUDED__
#pragma once
#include "irrArray.h"
#include "IMeshBuffer.h"
@ -18,18 +17,14 @@ namespace scene
{
public:
//! Default constructor for empty meshbuffer
CMeshBuffer()
: ChangedID_Vertex(1), ChangedID_Index(1)
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
, HWBuffer(NULL)
, PrimitiveType(EPT_TRIANGLES)
CMeshBuffer() :
ChangedID_Vertex(1), ChangedID_Index(1), MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), HWBuffer(NULL), PrimitiveType(EPT_TRIANGLES)
{
#ifdef _DEBUG
setDebugName("CMeshBuffer");
#endif
}
//! Get material of this meshbuffer
/** \return Material of this buffer */
const video::SMaterial &getMaterial() const override
@ -37,7 +32,6 @@ namespace scene
return Material;
}
//! Get material of this meshbuffer
/** \return Material of this buffer */
video::SMaterial &getMaterial() override
@ -45,7 +39,6 @@ namespace scene
return Material;
}
//! Get pointer to vertices
/** \return Pointer to vertices. */
const void *getVertices() const override
@ -53,7 +46,6 @@ namespace scene
return Vertices.const_pointer();
}
//! Get pointer to vertices
/** \return Pointer to vertices. */
void *getVertices() override
@ -61,7 +53,6 @@ namespace scene
return Vertices.pointer();
}
//! Get number of vertices
/** \return Number of vertices. */
u32 getVertexCount() const override
@ -83,7 +74,6 @@ namespace scene
return Indices.const_pointer();
}
//! Get pointer to indices
/** \return Pointer to indices. */
u16 *getIndices() override
@ -91,7 +81,6 @@ namespace scene
return Indices.pointer();
}
//! Get number of indices
/** \return Number of indices. */
u32 getIndexCount() const override
@ -99,7 +88,6 @@ namespace scene
return Indices.size();
}
//! Get the axis aligned bounding box
/** \return Axis aligned bounding box of this buffer. */
const core::aabbox3d<f32> &getBoundingBox() const override
@ -107,7 +95,6 @@ namespace scene
return BoundingBox;
}
//! Set the axis aligned bounding box
/** \param box New axis aligned bounding box for this buffer. */
//! set user axis aligned bounding box
@ -116,24 +103,19 @@ namespace scene
BoundingBox = box;
}
//! Recalculate the bounding box.
/** 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();
for (u32 i = 1; i < vsize; ++i)
BoundingBox.addInternalPoint(Vertices[i].Pos);
}
else
} else
BoundingBox.reset(0, 0, 0);
}
//! Get type of vertex data stored in this buffer.
/** \return Type of vertex data. */
video::E_VERTEX_TYPE getVertexType() const override
@ -177,7 +159,6 @@ namespace scene
return Vertices[i].TCoords;
}
//! Append the vertices and indices to the current buffer
/** Only works for compatible types, i.e. either the same type
or the main buffer is of standard type. Otherwise, behavior is
@ -192,51 +173,17 @@ namespace scene
u32 i;
Vertices.reallocate(vertexCount + numVertices);
for (i=0; i<numVertices; ++i)
{
for (i = 0; i < numVertices; ++i) {
Vertices.push_back(static_cast<const T *>(vertices)[i]);
BoundingBox.addInternalPoint(static_cast<const T *>(vertices)[i].Pos);
}
Indices.reallocate(getIndexCount() + numIndices);
for (i=0; i<numIndices; ++i)
{
for (i = 0; i < numIndices; ++i) {
Indices.push_back(indices[i] + vertexCount);
}
}
//! Append the meshbuffer to the current buffer
/** Only works for compatible types, i.e. either the same type
or the main buffer is of standard type. Otherwise, behavior is
undefined.
\param other Meshbuffer to be appended to this one.
*/
void append(const IMeshBuffer* const other) override
{
/*
if (this==other)
return;
const u32 vertexCount = getVertexCount();
u32 i;
Vertices.reallocate(vertexCount+other->getVertexCount());
for (i=0; i<other->getVertexCount(); ++i)
{
Vertices.push_back(reinterpret_cast<const T*>(other->getVertices())[i]);
}
Indices.reallocate(getIndexCount()+other->getIndexCount());
for (i=0; i<other->getIndexCount(); ++i)
{
Indices.push_back(other->getIndices()[i]+vertexCount);
}
BoundingBox.addInternalBox(other->getBoundingBox());
*/
}
//! get the current hardware mapping hint
E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override
{
@ -287,15 +234,16 @@ namespace scene
/** This shouldn't be used for anything outside the VideoDriver. */
u32 getChangedID_Index() const override { return ChangedID_Index; }
void setHWBuffer(void *ptr) const override {
void setHWBuffer(void *ptr) const override
{
HWBuffer = ptr;
}
void *getHWBuffer() const override {
void *getHWBuffer() const override
{
return HWBuffer;
}
u32 ChangedID_Vertex;
u32 ChangedID_Index;
@ -324,7 +272,3 @@ namespace scene
typedef CMeshBuffer<video::S3DVertexTangents> SMeshBufferTangents;
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_ATTRIBUTES_H_INCLUDED__
#define __E_ATTRIBUTES_H_INCLUDED__
#pragma once
namespace irr
{
@ -19,75 +18,9 @@ enum E_ATTRIBUTE_TYPE
// float attribute
EAT_FLOAT,
// string attribute
EAT_STRING,
// boolean attribute
EAT_BOOL,
// enumeration attribute
EAT_ENUM,
// color attribute
EAT_COLOR,
// floating point color attribute
EAT_COLORF,
// 3d vector attribute
EAT_VECTOR3D,
// 2d position attribute
EAT_POSITION2D,
// vector 2d attribute
EAT_VECTOR2D,
// rectangle attribute
EAT_RECT,
// matrix attribute
EAT_MATRIX,
// quaternion attribute
EAT_QUATERNION,
// 3d bounding box
EAT_BBOX,
// plane
EAT_PLANE,
// 3d triangle
EAT_TRIANGLE3D,
// line 2d
EAT_LINE2D,
// line 3d
EAT_LINE3D,
// array of stringws attribute
EAT_STRINGWARRAY,
// array of float
EAT_FLOATARRAY,
// array of int
EAT_INTARRAY,
// binary data attribute
EAT_BINARY,
// texture reference attribute
EAT_TEXTURE,
// user pointer void*
EAT_USER_POINTER,
// dimension attribute
EAT_DIMENSION2D,
// known attribute type count
EAT_COUNT,
@ -97,5 +30,3 @@ enum E_ATTRIBUTE_TYPE
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_CULLING_TYPES_H_INCLUDED__
#define __E_CULLING_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -23,19 +22,14 @@ namespace scene
};
//! Names for culling type
const c8* const AutomaticCullingNames[] =
{
const c8 *const AutomaticCullingNames[] = {
"false",
"box", // camera box against node box
"frustum_box", // camera frustum against node box
"frustum_sphere", // camera frustum against node sphere
"occ_query", // occlusion query
0
0,
};
} // end namespace scene
} // end namespace irr
#endif // __E_CULLING_TYPES_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_DEBUG_SCENE_TYPES_H_INCLUDED__
#define __E_DEBUG_SCENE_TYPES_H_INCLUDED__
#pragma once
namespace irr
{
@ -38,10 +37,5 @@ namespace scene
EDS_FULL = 0xffffffff
};
} // end namespace scene
} // end namespace irr
#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_DEVICE_TYPES_H_INCLUDED__
#define __E_DEVICE_TYPES_H_INCLUDED__
#pragma once
namespace irr
{
@ -45,6 +44,3 @@ namespace irr
};
} // end namespace irr
#endif // __E_DEVICE_TYPES_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_DRIVER_FEATURES_H_INCLUDED__
#define __E_DRIVER_FEATURES_H_INCLUDED__
#pragma once
namespace irr
{
@ -136,7 +135,3 @@ namespace video
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_DRIVER_TYPES_H_INCLUDED__
#define __E_DRIVER_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -43,6 +42,3 @@ namespace video
} // end namespace video
} // end namespace irr
#endif

View File

@ -1,8 +1,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef E_FOCUS_FLAGS_H_INCLUDED__
#define E_FOCUS_FLAGS_H_INCLUDED__
#pragma once
namespace irr
{
@ -33,6 +32,3 @@ enum EFOCUS_FLAG
} // namespace gui
} // namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_GUI_ALIGNMENT_H_INCLUDED__
#define __E_GUI_ALIGNMENT_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -24,16 +23,13 @@ enum EGUI_ALIGNMENT
};
//! Names for alignments
const c8* const GUIAlignmentNames[] =
{
const c8 *const GUIAlignmentNames[] = {
"upperLeft",
"lowerRight",
"center",
"scale",
0
0,
};
} // namespace gui
} // namespace irr
#endif // __E_GUI_ALIGNMENT_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_GUI_ELEMENT_TYPES_H_INCLUDED__
#define __E_GUI_ELEMENT_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -100,8 +99,7 @@ enum EGUI_ELEMENT_TYPE
};
//! Names for built-in element types
const c8* const GUIElementTypeNames[] =
{
const c8 *const GUIElementTypeNames[] = {
"button",
"checkBox",
"comboBox",
@ -128,14 +126,8 @@ const c8* const GUIElementTypeNames[] =
"element",
"root",
"profiler",
0
0,
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
#define __E_HARDWARE_BUFFER_FLAGS_INCLUDED__
#pragma once
namespace irr
{
@ -39,6 +38,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_MATERIAL_PROPS_H_INCLUDED__
#define __E_MATERIAL_PROPS_H_INCLUDED__
#pragma once
namespace irr
{
@ -81,7 +80,3 @@ namespace video
} // end namespace video
} // end namespace irr
#endif // __E_MATERIAL_PROPS_H_INCLUDED__

View File

@ -2,8 +2,9 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_MATERIAL_TYPES_H_INCLUDED__
#define __E_MATERIAL_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
namespace irr
{
@ -57,19 +58,17 @@ namespace video
};
//! Array holding the built in material type names
const char* const sBuiltInMaterialTypeNames[] =
{
const char *const sBuiltInMaterialTypeNames[] = {
"solid",
"trans_alphach",
"trans_alphach_ref",
"trans_vertex_alpha",
"onetexture_blend",
0
0,
};
constexpr u32 numBuiltInMaterials =
sizeof(sBuiltInMaterialTypeNames) / sizeof(char *) - 1;
} // end namespace video
} // end namespace irr
#endif // __E_MATERIAL_TYPES_H_INCLUDED__

View File

@ -1,65 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_MESH_WRITER_ENUMS_H_INCLUDED__
#define __E_MESH_WRITER_ENUMS_H_INCLUDED__
#include "irrTypes.h"
namespace irr
{
namespace scene
{
//! An enumeration for all supported types of built-in mesh writers
/** A scene mesh writers is represented by a four character code
such as 'irrm' or 'coll' instead of simple numbers, to avoid
name clashes with external mesh writers.*/
enum EMESH_WRITER_TYPE
{
//! Irrlicht native mesh writer, for static .irrmesh files.
EMWT_IRR_MESH = MAKE_IRR_ID('i','r','r','m'),
//! COLLADA mesh writer for .dae and .xml files
EMWT_COLLADA = MAKE_IRR_ID('c','o','l','l'),
//! STL mesh writer for .stl files
EMWT_STL = MAKE_IRR_ID('s','t','l',0),
//! OBJ mesh writer for .obj files
EMWT_OBJ = MAKE_IRR_ID('o','b','j',0),
//! PLY mesh writer for .ply files
EMWT_PLY = MAKE_IRR_ID('p','l','y',0),
//! B3D mesh writer, for static .b3d files
EMWT_B3D = MAKE_IRR_ID('b', '3', 'd', 0)
};
//! flags configuring mesh writing
enum E_MESH_WRITER_FLAGS
{
//! no writer flags
EMWF_NONE = 0,
//! write lightmap textures out if possible
//! Currently not used by any Irrlicht mesh-writer
// (Note: User meshwriters can still use it)
EMWF_WRITE_LIGHTMAPS = 0x1,
//! write in a way that consumes less disk space
// (Note: Mainly there for user meshwriters)
EMWF_WRITE_COMPRESSED = 0x2,
//! write in binary format rather than text
EMWF_WRITE_BINARY = 0x4
};
} // end namespace scene
} // end namespace irr
#endif // __E_MESH_WRITER_ENUMS_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_PRIMITIVE_TYPES_H_INCLUDED__
#define __E_PRIMITIVE_TYPES_H_INCLUDED__
#pragma once
namespace irr
{
@ -42,6 +41,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_READ_FILE_TYPES_H_INCLUDED__
#define __E_READ_FILE_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -29,6 +28,3 @@ namespace io
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __E_SCENE_NODE_TYPES_H_INCLUDED__
#define __E_SCENE_NODE_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -46,11 +45,5 @@ namespace scene
ESNT_ANY = MAKE_IRR_ID('a', 'n', 'y', '_')
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -1,5 +1,4 @@
#ifndef __E_SHADER_TYPES_H_INCLUDED__
#define __E_SHADER_TYPES_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -82,9 +81,5 @@ const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = {
"gs_4_0",
0};
} // end namespace video
} // end namespace irr
#endif // __E_SHADER_TYPES_H_INCLUDED__

View File

@ -1,5 +1,4 @@
#ifndef __E_VERTEX_ATTRIBUTES_H_INCLUDED__
#define __E_VERTEX_ATTRIBUTES_H_INCLUDED__
#pragma once
namespace irr
{
@ -20,8 +19,7 @@ enum E_VERTEX_ATTRIBUTES
};
//! Array holding the built in vertex attribute names
const char* const sBuiltInVertexAttributeNames[] =
{
const char *const sBuiltInVertexAttributeNames[] = {
"inVertexPosition",
"inVertexNormal",
"inVertexColor",
@ -29,10 +27,8 @@ const char* const sBuiltInVertexAttributeNames[] =
"inTexCoord1",
"inVertexTangent",
"inVertexBinormal",
0
0,
};
} // end namespace video
} // end namespace irr
#endif //__E_VERTEX_ATTRIBUTES_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_ANIMATED_MESH_H_INCLUDED__
#define __I_ANIMATED_MESH_H_INCLUDED__
#pragma once
#include "aabbox3d.h"
#include "IMesh.h"
@ -20,7 +19,6 @@ namespace scene
class IAnimatedMesh : public IMesh
{
public:
//! Gets the frame count of the animated mesh.
/** Note that the play-time is usually getFrameCount()-1 as it stops as soon as the last frame-key is reached.
\return The amount of frames. If the amount is 1,
@ -69,6 +67,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
#define __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
#include "IBoneSceneNode.h"
@ -25,7 +24,6 @@ namespace scene
EJUOR_CONTROL
};
class IAnimatedMeshSceneNode;
//! Callback interface for catching events of ended animations.
@ -36,7 +34,6 @@ namespace scene
class IAnimationEndCallBack : public virtual IReferenceCounted
{
public:
//! Will be called when the animation playback has ended.
/** See IAnimatedMeshSceneNode::setAnimationEndCallback for
more information.
@ -48,13 +45,12 @@ namespace scene
class IAnimatedMeshSceneNode : public ISceneNode
{
public:
//! Constructor
IAnimatedMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
: ISceneNode(parent, mgr, id, position, rotation, scale) {}
const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
ISceneNode(parent, mgr, id, position, rotation, scale) {}
//! Destructor
virtual ~IAnimatedMeshSceneNode() {}
@ -167,11 +163,7 @@ namespace scene
\param newManager An optional new scene manager.
\return The newly created clone of this node. */
virtual ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,29 +2,13 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_ATTRIBUTES_H_INCLUDED__
#define __I_ATTRIBUTES_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "SColor.h"
#include "vector3d.h"
#include "vector2d.h"
#include "line2d.h"
#include "line3d.h"
#include "triangle3d.h"
#include "position2d.h"
#include "rect.h"
#include "dimension2d.h"
#include "matrix4.h"
#include "quaternion.h"
#include "plane3d.h"
#include "triangle3d.h"
#include "line2d.h"
#include "line3d.h"
#include "irrString.h"
#include "irrArray.h"
#include "EAttributes.h"
#include "path.h"
// not needed here but I can't be bothered to clean the transitive includes up.
#include "quaternion.h"
namespace irr
{
@ -39,7 +23,6 @@ namespace io
class IAttributes : public virtual IReferenceCounted
{
public:
//! Returns amount of attributes in this collection of attributes.
virtual u32 getAttributeCount() const = 0;
@ -55,16 +38,6 @@ public:
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0;
//! Returns the type string of the attribute
//! \param attributeName: String for the attribute type
//! \param defaultNotFound Value returned when attributeName was not found
virtual const wchar_t* getAttributeTypeString(const c8* attributeName, const wchar_t* defaultNotFound = L"unknown") const = 0;
//! Returns the type string of the attribute by index.
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
//! \param defaultNotFound Value returned for an invalid index
virtual const wchar_t* getAttributeTypeString(s32 index, const wchar_t* defaultNotFound = L"unknown") const = 0;
//! Returns if an attribute with a name exists
virtual bool existsAttribute(const c8 *attributeName) const = 0;
@ -74,7 +47,6 @@ public:
//! Removes all attributes
virtual void clear() = 0;
/*
Integer Attribute
@ -125,7 +97,6 @@ public:
//! Sets an attribute as float value
virtual void setAttribute(s32 index, f32 value) = 0;
/*
Bool Attribute
*/
@ -148,10 +119,7 @@ public:
//! Sets an attribute as boolean value
virtual void setAttribute(s32 index, bool value) = 0;
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
#define __I_BILLBOARD_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
@ -22,11 +21,10 @@ lensflares, particles and things like that.
class IBillboardSceneNode : public ISceneNode
{
public:
//! Constructor
IBillboardSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df& position = core::vector3df(0,0,0))
: ISceneNode(parent, mgr, id, position) {}
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;
@ -90,7 +88,3 @@ public:
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_BONE_SCENE_NODE_H_INCLUDED__
#define __I_BONE_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
@ -41,21 +40,18 @@ namespace scene
};
//! Names for bone animation modes
const c8* const BoneAnimationModeNames[] =
{
const c8 *const BoneAnimationModeNames[] = {
"automatic",
"animated",
"unanimated",
0,
};
//! Interface for bones used for skeletal animation.
/** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */
class IBoneSceneNode : public ISceneNode
{
public:
IBoneSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id = -1) :
ISceneNode(parent, mgr, id), positionHint(-1), scaleHint(-1), rotationHint(-1) {}
@ -96,9 +92,5 @@ namespace scene
s32 rotationHint;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_CAMERA_SCENE_NODE_H_INCLUDED__
#define __I_CAMERA_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
#include "IEventReceiver.h"
@ -23,13 +22,13 @@ namespace scene
class ICameraSceneNode : public ISceneNode, public IEventReceiver
{
public:
//! Constructor
ICameraSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id,
const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f))
: ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {}
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
@ -173,7 +172,6 @@ namespace scene
virtual bool getTargetAndRotationBinding(void) const = 0;
protected:
void cloneMembers(const ICameraSceneNode *toCopyFrom)
{
IsOrthogonal = toCopyFrom->IsOrthogonal;
@ -184,6 +182,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -57,5 +57,3 @@ namespace video
} // end namespace video
} // end namespace irr

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_CURSOR_CONTROL_H_INCLUDED__
#define __I_CURSOR_CONTROL_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "position2d.h"
@ -42,8 +41,7 @@ namespace gui
};
//! Names for ECURSOR_ICON
const c8* const GUICursorIconNames[ECI_COUNT+1] =
{
const c8 *const GUICursorIconNames[ECI_COUNT + 1] = {
"normal",
"cross",
"hand",
@ -57,19 +55,19 @@ namespace gui
"sizens",
"sizewe",
"sizeup",
0
0,
};
//! 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)
{
}
@ -97,7 +95,6 @@ namespace gui
class ICursorControl : public virtual IReferenceCounted
{
public:
//! Changes the visible state of the mouse cursor.
/** \param visible: The new visible state. If true, the cursor will be visible,
if false, it will be invisible. */
@ -194,9 +191,5 @@ namespace gui
virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; }
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
#define __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
@ -23,10 +22,9 @@ joint scene nodes when playing skeletal animations.
class IDummyTransformationSceneNode : public ISceneNode
{
public:
//! Constructor
IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
: 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
@ -36,7 +34,3 @@ public:
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_EVENT_RECEIVER_H_INCLUDED__
#define __I_EVENT_RECEIVER_H_INCLUDED__
#pragma once
#include "ILogger.h"
#include "Keycodes.h"
@ -309,7 +308,6 @@ namespace irr
};
} // end namespace gui
//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling.
struct SEvent
{
@ -324,7 +322,6 @@ struct SEvent
//! Type of GUI Event
gui::EGUI_EVENT_TYPE EventType;
};
//! Any kind of mouse event.
@ -573,7 +570,6 @@ struct SEvent
struct SSystemEvent SystemEvent;
struct SApplicationEvent ApplicationEvent;
};
};
//! Interface of an object which can receive events.
@ -585,7 +581,6 @@ path it takes through the system. */
class IEventReceiver
{
public:
//! Destructor
virtual ~IEventReceiver() {}
@ -598,7 +593,6 @@ public:
virtual bool OnEvent(const SEvent &event) = 0;
};
//! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks()
struct SJoystickInfo
{
@ -635,8 +629,4 @@ struct SJoystickInfo
} PovHat;
}; // struct SJoystickInfo
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_FILE_ARCHIVE_H_INCLUDED__
#define __I_FILE_ARCHIVE_H_INCLUDED__
#pragma once
#include "IReadFile.h"
#include "IFileList.h"
@ -30,21 +29,6 @@ enum E_FILE_ARCHIVE_TYPE
//! A gzip archive
EFAT_GZIP = MAKE_IRR_ID('g', 'z', 'i', 'p'),
//! A virtual directory
EFAT_FOLDER = MAKE_IRR_ID('f','l','d','r'),
//! An ID Software PAK archive
EFAT_PAK = MAKE_IRR_ID('P','A','K', 0),
//! A Nebula Device archive
EFAT_NPK = MAKE_IRR_ID('N','P','K', 0),
//! A Tape ARchive
EFAT_TAR = MAKE_IRR_ID('T','A','R', 0),
//! A wad Archive, Quake2, Halflife
EFAT_WAD = MAKE_IRR_ID('W','A','D', 0),
//! An Android asset file archive
EFAT_ANDROID_ASSET = MAKE_IRR_ID('A', 'S', 'S', 'E'),
@ -56,7 +40,6 @@ enum E_FILE_ARCHIVE_TYPE
class IFileArchive : public virtual IReferenceCounted
{
public:
//! Opens a file based on its name
/** Creates and returns a new IReadFile for a file in the archive.
\param filename The file to open
@ -140,9 +123,5 @@ public:
virtual IFileArchive *createArchive(io::IReadFile *file, bool ignoreCase, bool ignorePaths) const = 0;
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_FILE_LIST_H_INCLUDED__
#define __I_FILE_LIST_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "path.h"
@ -88,7 +87,3 @@ public:
} // end namespace irr
} // end namespace io
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_FILE_SYSTEM_H_INCLUDED__
#define __I_FILE_SYSTEM_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "IFileArchive.h"
@ -22,7 +21,6 @@ class IWriteFile;
class IFileList;
class IAttributes;
//! The FileSystem manages files and archives and provides access to them.
/** It manages where files are, so that modules which use the the IO do not
need to know where every file is located. A file could be in a .zip-Archive or
@ -30,7 +28,6 @@ as file on disk, using the IFileSystem makes no difference to this. */
class IFileSystem : public virtual IReferenceCounted
{
public:
//! Opens a file for read access.
/** \param filename: Name of file to open.
\return Pointer to the created file interface.
@ -78,7 +75,6 @@ public:
*/
virtual IWriteFile *createMemoryWriteFile(void *memory, s32 len, const path &fileName, bool deleteMemoryWhenDropped = false) = 0;
//! Opens a file for write access.
/** \param filename: Name of file to open.
\param append: If the file already exist, all write operations are
@ -265,9 +261,5 @@ public:
virtual bool existFile(const path &filename) const = 0;
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
#define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
#pragma once
#include "EShaderTypes.h"
#include "EMaterialTypes.h"
@ -28,7 +27,6 @@ class IShaderConstantSetCallBack;
class IGPUProgrammingServices
{
public:
//! Destructor
virtual ~IGPUProgrammingServices() {}
@ -155,7 +153,7 @@ public:
callback, baseMaterial, userData);
}
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
//! Like addHighLevelShaderMaterial(), but loads from files.
/** \param vertexShaderProgramFileName Text file containing the source
of the vertex shader program. Set to empty string if no vertex shader
shall be created.
@ -279,7 +277,7 @@ public:
callback, baseMaterial, userData);
}
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
//! Like addHighLevelShaderMaterial(), but loads from files.
/** \param vertexShaderProgram Text file handle containing the source
of the vertex shader program. Set to 0 if no vertex shader shall be
created.
@ -357,99 +355,15 @@ public:
callback, baseMaterial, userData);
}
//! Adds a new ASM shader material renderer to the VideoDriver
/** Note that it is a good idea to call IVideoDriver::queryFeature() in
advance to check if the IVideoDriver supports the vertex and/or pixel
shader version your are using.
The material is added to the VideoDriver like with
IVideoDriver::addMaterialRenderer() and can be used like it had been
added with that method.
\param vertexShaderProgram String containing the source of the vertex
shader program. This can be 0 if no vertex program shall be used.
For DX8 programs, the will always input registers look like this: v0:
position, v1: normal, v2: color, v3: texture coordinates, v4: texture
coordinates 2 if available.
For DX9 programs, you can manually set the registers using the dcl_
statements.
\param pixelShaderProgram String containing the source of the pixel
shader program. This can be 0 if you don't want to use a pixel shader.
\param callback Pointer to an implementation of
IShaderConstantSetCallBack in which you can set the needed vertex and
pixel shader program constants. Set this to 0 if you don't need this.
\param baseMaterial Base material which renderstates will be used to
shade the material.
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
const c8* pixelShaderProgram = 0,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
/** \param vertexShaderProgram Text file containing the source of the
vertex shader program. Set to 0 if no shader shall be created.
\param pixelShaderProgram Text file containing the source of the pixel
shader program. Set to 0 if no shader shall be created.
\param callback Pointer to an IShaderConstantSetCallback object to
which the OnSetConstants function is called.
\param baseMaterial baseMaterial
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
io::IReadFile* pixelShaderProgram,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
//! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files.
/** \param vertexShaderProgramFileName Text file name containing the
source of the vertex shader program. Set to 0 if no shader shall be
created.
\param pixelShaderProgramFileName Text file name containing the source
of the pixel shader program. Set to 0 if no shader shall be created.
\param callback Pointer to an IShaderConstantSetCallback object on
which the OnSetConstants function is called.
\param baseMaterial baseMaterial
\param userData a user data int. This int can be set to any value and
will be set as parameter in the callback method when calling
OnSetConstants(). In this way it is easily possible to use the same
callback method for multiple materials and distinguish between them
during the call.
\return Returns the number of the material type which can be set in
SMaterial::MaterialType to use the renderer. -1 is returned if an
error occurred. -1 is returned for example if a vertex or pixel shader
program could not be compiled, the error strings are then printed out
into the error log, and can be caught with a custom event receiver. */
virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
const io::path& pixelShaderProgramFileName,
IShaderConstantSetCallBack* callback = 0,
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
s32 userData = 0) = 0;
//! Delete a shader material and associated data.
/**
After you have deleted a material it is invalid to still use and doing
so might result in a crash. The ID may be reused in the future when new
materials are added.
\param material Number of the material type. Must not be a built-in
material. */
virtual void deleteShaderMaterial(s32 material) = 0;
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_BUTTON_H_INCLUDED__
#define __I_GUI_BUTTON_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -46,8 +45,7 @@ namespace gui
};
//! Names for gui button state icons
const c8* const GUIButtonStateNames[EGBS_COUNT+1] =
{
const c8 *const GUIButtonStateNames[EGBS_COUNT + 1] = {
"buttonUp",
"buttonDown",
"buttonMouseOver",
@ -55,7 +53,7 @@ namespace gui
"buttonFocused",
"buttonNotFocused",
"buttonDisabled",
0 // count
0, // count
};
//! State of buttons used for drawing texture images.
@ -88,8 +86,7 @@ namespace gui
};
//! Names for gui button image states
const c8* const GUIButtonImageStateNames[EGBIS_COUNT+1] =
{
const c8 *const GUIButtonImageStateNames[EGBIS_COUNT + 1] = {
"Image", // not "ImageUp" as it otherwise breaks serialization of old files
"ImageUpOver",
"ImageUpFocused",
@ -99,7 +96,7 @@ namespace gui
"ImageDownFocused",
"ImageDownFocusedOver",
"ImageDisabled",
0 // count
0, // count
};
//! GUI Button interface.
@ -109,10 +106,9 @@ namespace gui
class IGUIButton : public IGUIElement
{
public:
//! constructor
IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: 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.
@ -188,7 +184,6 @@ namespace gui
\param sourceRect: Position in the texture, where the image is located */
virtual void setPressedImage(video::ITexture *image, const core::rect<s32> &sourceRect) = 0;
//! Sets the sprite bank used by the button
/** NOTE: The spritebank itself is _not_ serialized so far. The sprites are serialized.
Which means after loading the gui you still have to set the spritebank manually. */
@ -260,9 +255,5 @@ namespace gui
virtual bool getClickControlState() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_CHECKBOX_H_INCLUDED__
#define __I_GUI_CHECKBOX_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUICheckBox : public IGUIElement
{
public:
//! constructor
IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {}
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;
@ -43,11 +41,7 @@ namespace gui
//! Checks if border drawing is enabled
/** \return true if border drawing is enabled, false otherwise */
virtual bool isDrawBorderEnabled() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_COMBO_BOX_H_INCLUDED__
#define __I_GUI_COMBO_BOX_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIComboBox : public IGUIElement
{
public:
//! constructor
IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {}
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;
@ -70,9 +68,5 @@ namespace gui
virtual u32 getMaxSelectionRows() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_EDIT_BOX_H_INCLUDED__
#define __I_GUI_EDIT_BOX_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "SColor.h"
@ -23,10 +22,9 @@ namespace gui
class IGUIEditBox : public IGUIElement
{
public:
//! constructor
IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {}
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.
@ -149,9 +147,5 @@ namespace gui
virtual irr::u32 getCursorBlinkTime() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_ELEMENT_H_INCLUDED__
#define __I_GUI_ELEMENT_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "rect.h"
@ -26,11 +25,11 @@ namespace gui
class IGUIElement : virtual public IReferenceCounted, public IEventReceiver
{
public:
//! Constructor
IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment *environment, IGUIElement *parent,
s32 id, const core::rect<s32>& rectangle)
: Parent(0), RelativeRect(rectangle), AbsoluteRect(rectangle),
s32 id, const core::rect<s32> &rectangle) :
Parent(0),
RelativeRect(rectangle), AbsoluteRect(rectangle),
AbsoluteClippingRect(rectangle), DesiredRect(rectangle),
MaxSize(0, 0), MinSize(1, 1), IsVisible(true), IsEnabled(true),
IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false),
@ -42,14 +41,12 @@ public:
#endif
// if we were given a parent to attach to
if (parent)
{
if (parent) {
parent->addChildToEnd(this);
recalculateAbsolutePosition(true);
}
}
//! Destructor
virtual ~IGUIElement()
{
@ -59,7 +56,6 @@ public:
}
}
//! Returns parent of this element.
IGUIElement *getParent() const
{
@ -72,13 +68,11 @@ public:
return RelativeRect;
}
//! Sets the relative rectangle of this element.
/** \param r The absolute position to set */
void setRelativePosition(const core::rect<s32> &r)
{
if (Parent)
{
if (Parent) {
const core::rect<s32> &r2 = Parent->getAbsolutePosition();
core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height));
@ -107,7 +101,6 @@ public:
setRelativePosition(rectangle);
}
//! Sets the relative rectangle of this element as a proportion of its parent's area.
/** \note This method used to be 'void setRelativePosition(const core::rect<f32>& r)'
\param r The rectangle to set, interpreted as a proportion of the parent's area.
@ -131,21 +124,18 @@ public:
updateAbsolutePosition();
}
//! Gets the absolute rectangle of this element
core::rect<s32> getAbsolutePosition() const
{
return AbsoluteRect;
}
//! Returns the visible area of the element.
core::rect<s32> getAbsoluteClippingRect() const
{
return AbsoluteClippingRect;
}
//! Sets whether the element will ignore its parent's clipping rectangle
/** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */
void setNotClipped(bool noClip)
@ -154,7 +144,6 @@ public:
updateAbsolutePosition();
}
//! Gets whether the element will ignore its parent's clipping rectangle
/** \return true if the element is not clipped by its parent's clipping rectangle. */
bool isNotClipped() const
@ -162,7 +151,6 @@ public:
return NoClip;
}
//! Sets the maximum size allowed for this element
/** If set to 0,0, there is no maximum size */
void setMaxSize(core::dimension2du size)
@ -171,7 +159,6 @@ public:
updateAbsolutePosition();
}
//! Sets the minimum size allowed for this element
void setMinSize(core::dimension2du size)
{
@ -183,7 +170,6 @@ public:
updateAbsolutePosition();
}
//! The alignment defines how the borders of this element will be positioned when the parent element is resized.
void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom)
{
@ -192,8 +178,7 @@ public:
AlignTop = top;
AlignBottom = bottom;
if (Parent)
{
if (Parent) {
core::rect<s32> r(Parent->getAbsolutePosition());
core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height);
@ -239,13 +224,11 @@ public:
recalculateAbsolutePosition(false);
// update all children
for (auto child : Children)
{
for (auto child : Children) {
child->updateAbsolutePosition();
}
}
//! Returns the topmost GUI element at the specific position.
/**
This will check this GUI element and all of its descendants, so it
@ -262,14 +245,12 @@ public:
{
IGUIElement *target = 0;
if (isVisible())
{
if (isVisible()) {
// we have to search from back to front, because later children
// might be drawn over the top of earlier ones.
auto it = Children.rbegin();
auto ie = Children.rend();
while (it != ie)
{
while (it != ie) {
target = (*it)->getElementFromPoint(point);
if (target)
return target;
@ -284,7 +265,6 @@ public:
return target;
}
//! Returns true if a point is within this element.
/** Elements with a shape other than a rectangle should override this method */
virtual bool isPointInside(const core::position2d<s32> &point) const
@ -292,12 +272,10 @@ public:
return AbsoluteClippingRect.isPointInside(point);
}
//! Adds a GUI element as new child of this element.
virtual void addChild(IGUIElement *child)
{
if ( child && child != this )
{
if (child && child != this) {
addChildToEnd(child);
child->updateAbsolutePosition();
}
@ -313,7 +291,8 @@ public:
}
//! Removes all children.
virtual void removeAllChildren() {
virtual void removeAllChildren()
{
while (!Children.empty()) {
auto child = Children.back();
child->remove();
@ -327,36 +306,30 @@ public:
Parent->removeChild(this);
}
//! Draws the element and its children.
virtual void draw()
{
if ( isVisible() )
{
if (isVisible()) {
for (auto child : Children)
child->draw();
}
}
//! animate the element and its children.
virtual void OnPostRender(u32 timeMs)
{
if ( isVisible() )
{
if (isVisible()) {
for (auto child : Children)
child->OnPostRender(timeMs);
}
}
//! Moves this element.
virtual void move(core::position2d<s32> absoluteMovement)
{
setRelativePosition(DesiredRect + absoluteMovement);
}
//! Returns true if element is visible.
virtual bool isVisible() const
{
@ -383,14 +356,12 @@ public:
IsVisible = visible;
}
//! Returns true if this element was created as part of its parent control
virtual bool isSubElement() const
{
return IsSubElement;
}
//! Sets whether this control was created as part of its parent.
/** For example, it is true when a scrollbar is part of a listbox.
SubElements are not saved to disk when calling guiEnvironment->saveGUI() */
@ -399,7 +370,6 @@ public:
IsSubElement = subElement;
}
//! If set to true, the focus will visit this element when using the tab key to cycle through elements.
/** If this element is a tab group (see isTabGroup/setTabGroup) then
ctrl+tab will be used instead. */
@ -408,51 +378,43 @@ public:
IsTabStop = enable;
}
//! Returns true if this element can be focused by navigating with the tab key
bool isTabStop() const
{
return IsTabStop;
}
//! Sets the priority of focus when using the tab key to navigate between a group of elements.
/** See setTabGroup, isTabGroup and getTabGroup for information on tab groups.
Elements with a lower number are focused first */
void setTabOrder(s32 index)
{
// negative = autonumber
if (index < 0)
{
if (index < 0) {
TabOrder = 0;
IGUIElement *el = getTabGroup();
while (IsTabGroup && el && el->Parent)
el = el->Parent;
IGUIElement *first = 0, *closest = 0;
if (el)
{
if (el) {
// find the highest element number
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
if (first)
{
if (first) {
TabOrder = first->getTabOrder() + 1;
}
}
}
else
} else
TabOrder = index;
}
//! Returns the number in the tab order sequence
s32 getTabOrder() const
{
return TabOrder;
}
//! Sets whether this element is a container for a group of elements which can be navigated using the tab key.
/** For example, windows are tab groups.
Groups can be navigated using ctrl+tab, providing isTabStop is true. */
@ -461,14 +423,12 @@ public:
IsTabGroup = isGroup;
}
//! Returns true if this element is a tab group.
bool isTabGroup() const
{
return IsTabGroup;
}
//! Returns the container element which holds all elements in this element's tab group.
IGUIElement *getTabGroup()
{
@ -480,7 +440,6 @@ public:
return ret;
}
//! Returns true if element is enabled
/** Currently elements do _not_ care about parent-states.
So if you want to affect children you have to enable/disable them all.
@ -494,63 +453,54 @@ public:
return IsEnabled;
}
//! Sets the enabled state of this element.
virtual void setEnabled(bool enabled)
{
IsEnabled = enabled;
}
//! Sets the new caption of this element.
virtual void setText(const wchar_t *text)
{
Text = text;
}
//! Returns caption of this element.
virtual const wchar_t *getText() const
{
return Text.c_str();
}
//! Sets the new caption of this element.
virtual void setToolTipText(const wchar_t *text)
{
ToolTipText = text;
}
//! Returns caption of this element.
virtual const core::stringw &getToolTipText() const
{
return ToolTipText;
}
//! Returns id. Can be used to identify the element.
virtual s32 getID() const
{
return ID;
}
//! Sets the id of this element
virtual void setID(s32 id)
{
ID = id;
}
//! Called if an event happened.
bool OnEvent(const SEvent &event) override
{
return Parent ? Parent->OnEvent(event) : false;
}
//! Brings a child to front
/** \return True if successful, false if not. */
virtual bool bringToFront(IGUIElement *child)
@ -564,7 +514,6 @@ public:
return true;
}
//! Moves a child to the back, so it's siblings are drawn on top of it
/** \return True if successful, false if not. */
virtual bool sendToBack(IGUIElement *child)
@ -584,7 +533,6 @@ public:
return Children;
}
//! Finds the first element with the given id.
/** \param id: Id to search for.
\param searchchildren: Set this to true, if also children of this
@ -596,8 +544,7 @@ public:
{
IGUIElement *e = 0;
for (auto child : Children)
{
for (auto child : Children) {
if (child->getID() == id)
return child;
@ -611,25 +558,21 @@ public:
return e;
}
//! returns true if the given element is a child of this one.
//! \param child: The child element to check
bool isMyChild(IGUIElement *child) const
{
if (!child)
return false;
do
{
do {
if (child->Parent)
child = child->Parent;
} while (child->Parent && child != this);
return child == this;
}
//! searches elements to find the closest next element to tab to
/** \param startOrder: The TabOrder of the current element, -1 if none
\param reverse: true if searching for a lower number
@ -652,62 +595,46 @@ public:
s32 closestOrder, currentOrder;
while(it != Children.end())
{
while (it != Children.end()) {
// ignore invisible elements and their children
if (((*it)->isVisible() || includeInvisible) &&
(group == true || (*it)->isTabGroup() == false) )
{
(group == true || (*it)->isTabGroup() == false)) {
// ignore disabled, but children are checked (disabled is currently per element ignoring parent states)
if ( (*it)->isEnabled() || includeDisabled )
{
if ((*it)->isEnabled() || includeDisabled) {
// only check tab stops and those with the same group status
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group))
{
if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) {
currentOrder = (*it)->getTabOrder();
// is this what we're looking for?
if (currentOrder == wanted)
{
if (currentOrder == wanted) {
closest = *it;
return true;
}
// is it closer than the current closest?
if (closest)
{
if (closest) {
closestOrder = closest->getTabOrder();
if ( ( reverse && currentOrder > closestOrder && currentOrder < startOrder)
||(!reverse && currentOrder < closestOrder && currentOrder > startOrder))
{
if ((reverse && currentOrder > closestOrder && currentOrder < startOrder) || (!reverse && currentOrder < closestOrder && currentOrder > startOrder)) {
closest = *it;
}
}
else
if ( (reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder) )
{
} else if ((reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder)) {
closest = *it;
}
// is it before the current first?
if (first)
{
if (first) {
closestOrder = first->getTabOrder();
if ( (reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder) )
{
if ((reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder)) {
first = *it;
}
}
else
{
} else {
first = *it;
}
}
}
// search within children
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled))
{
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled)) {
return true;
}
}
@ -716,7 +643,6 @@ public:
return false;
}
//! Returns the type of the gui element.
/** This is needed for the .NET wrapper but will be used
later for serializing and deserializing.
@ -741,7 +667,6 @@ public:
return type == Type;
}
//! Returns the type name of the gui element.
/** This is needed serializing elements. */
virtual const c8 *getTypeName() const
@ -756,7 +681,6 @@ public:
return Name.c_str();
}
//! Sets the name of the element.
/** \param name New name of the gui element. */
virtual void setName(const c8 *name)
@ -764,7 +688,6 @@ public:
Name = name;
}
//! Sets the name of the element.
/** \param name New name of the gui element. */
virtual void setName(const core::stringc &name)
@ -772,20 +695,17 @@ public:
Name = name;
}
//! Returns whether the element takes input from the IME
virtual bool acceptsIME()
{
return false;
}
protected:
// not virtual because needed in constructor
void addChildToEnd(IGUIElement *child)
{
if (child)
{
if (child) {
child->grab(); // prevent destruction when removed
child->remove(); // remove from old parent
child->LastParentRect = getAbsolutePosition();
@ -796,7 +716,8 @@ protected:
#ifndef NDEBUG
template <typename Iterator>
static size_t _fastSetChecksum(Iterator begin, Iterator end) {
static size_t _fastSetChecksum(Iterator begin, Iterator end)
{
std::hash<typename Iterator::value_type> hasher;
size_t checksum = 0;
for (Iterator it = begin; it != end; ++it) {
@ -814,8 +735,7 @@ protected:
const std::vector<IGUIElement *> &neworder)
{
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
for (auto e : neworder)
{
for (auto e : neworder) {
*from = e;
e->ParentPos = from;
++from;
@ -823,7 +743,6 @@ protected:
assert(from == to);
}
// not virtual because needed in constructor
void recalculateAbsolutePosition(bool recursive)
{
@ -831,18 +750,15 @@ protected:
core::rect<s32> parentAbsoluteClip;
f32 fw = 0.f, fh = 0.f;
if (Parent)
{
if (Parent) {
parentAbsolute = Parent->AbsoluteRect;
if (NoClip)
{
if (NoClip) {
IGUIElement *p = this;
while (p->Parent)
p = p->Parent;
parentAbsoluteClip = p->AbsoluteClippingRect;
}
else
} else
parentAbsoluteClip = Parent->AbsoluteClippingRect;
}
@ -855,8 +771,7 @@ protected:
if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE)
fh = (f32)parentAbsolute.getHeight();
switch (AlignLeft)
{
switch (AlignLeft) {
case EGUIA_UPPERLEFT:
break;
case EGUIA_LOWERRIGHT:
@ -870,8 +785,7 @@ protected:
break;
}
switch (AlignRight)
{
switch (AlignRight) {
case EGUIA_UPPERLEFT:
break;
case EGUIA_LOWERRIGHT:
@ -885,8 +799,7 @@ protected:
break;
}
switch (AlignTop)
{
switch (AlignTop) {
case EGUIA_UPPERLEFT:
break;
case EGUIA_LOWERRIGHT:
@ -900,8 +813,7 @@ protected:
break;
}
switch (AlignBottom)
{
switch (AlignBottom) {
case EGUIA_UPPERLEFT:
break;
case EGUIA_LOWERRIGHT:
@ -942,18 +854,15 @@ protected:
LastParentRect = parentAbsolute;
if ( recursive )
{
if (recursive) {
// update all children
for (auto child : Children)
{
for (auto child : Children) {
child->recalculateAbsolutePosition(recursive);
}
}
}
protected:
//! List of all children of this element
std::list<IGUIElement *> Children;
@ -1028,9 +937,5 @@ protected:
EGUI_ELEMENT_TYPE Type;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_ENVIRONMENT_H_INCLUDED__
#define __I_GUI_ENVIRONMENT_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "IGUISkin.h"
@ -59,7 +58,6 @@ class IGUIWindow;
class IGUIEnvironment : public virtual IReferenceCounted
{
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.
Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
@ -153,7 +151,6 @@ public:
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
\param imageSize Dimension of each image
@ -413,9 +410,5 @@ public:
virtual void addToDeletionQueue(IGUIElement *element) = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
#define __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "path.h"
@ -24,10 +23,9 @@ namespace gui
class IGUIFileOpenDialog : public IGUIElement
{
public:
//! constructor
IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {}
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;
@ -42,9 +40,5 @@ namespace gui
virtual const wchar_t *getDirectoryNameW() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_FONT_H_INCLUDED__
#define __I_GUI_FONT_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "SColor.h"
@ -39,7 +38,6 @@ enum EGUI_FONT_TYPE
class IGUIFont : public virtual IReferenceCounted
{
public:
//! Draws some text and clips it to the specified rectangle if wanted.
/** \param text: Text to draw
\param position: Rectangle specifying position where to draw the text.
@ -99,6 +97,3 @@ public:
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_FONT_BITMAP_H_INCLUDED__
#define __I_GUI_FONT_BITMAP_H_INCLUDED__
#pragma once
#include "IGUIFont.h"
@ -17,7 +16,6 @@ namespace gui
class IGUIFontBitmap : public IGUIFont
{
public:
//! Returns the type of this font
EGUI_FONT_TYPE getType() const override { return EGFT_BITMAP; }
@ -41,6 +39,3 @@ public:
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_IMAGE_H_INCLUDED__
#define __I_GUI_IMAGE_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIImage : public IGUIElement
{
public:
//! constructor
IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: 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;
@ -80,8 +78,5 @@ namespace gui
virtual bool isDrawBackgroundEnabled() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -1,8 +1,7 @@
// This file is part of the "Irrlicht Engine".
// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de
#ifndef __I_GUI_IMAGE_LIST_H_INCLUDED__
#define __I_GUI_IMAGE_LIST_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "rect.h"
@ -17,7 +16,6 @@ namespace gui
class IGUIImageList : public virtual IReferenceCounted
{
public:
//! Destructor
virtual ~IGUIImageList(){};
@ -40,6 +38,3 @@ public:
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_LIST_BOX_H_INCLUDED__
#define __I_GUI_LIST_BOX_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "SColor.h"
@ -30,7 +29,6 @@ namespace gui
EGUI_LBC_COUNT
};
//! Default list box GUI element.
/** \par This element can create the following events of type EGUI_EVENT_TYPE:
\li EGET_LISTBOX_CHANGED
@ -40,8 +38,8 @@ namespace gui
{
public:
//! constructor
IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: 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;
@ -134,9 +132,5 @@ namespace gui
virtual IGUIScrollBar *getVerticalScrollBar() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_SCROLL_BAR_H_INCLUDED__
#define __I_GUI_SCROLL_BAR_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -19,10 +18,9 @@ namespace gui
class IGUIScrollBar : public IGUIElement
{
public:
//! constructor
IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {}
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;
@ -57,9 +55,5 @@ namespace gui
virtual void setPos(s32 pos) = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_SKIN_H_INCLUDED__
#define __I_GUI_SKIN_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "EGUIAlignment.h"
@ -46,8 +45,7 @@ namespace gui
};
//! Names for gui element types
const c8* const GUISkinTypeNames[EGST_COUNT+1] =
{
const c8 *const GUISkinTypeNames[EGST_COUNT + 1] = {
"windowsClassic",
"windowsMetallic",
"burning",
@ -55,7 +53,6 @@ namespace gui
0,
};
//! Enumeration for skin colors
enum EGUI_DEFAULT_COLOR
{
@ -116,8 +113,7 @@ namespace gui
};
//! Names for default skin colors
const c8* const GUISkinColorNames[EGDC_COUNT+1] =
{
const c8 *const GUISkinColorNames[EGDC_COUNT + 1] = {
"3DDarkShadow",
"3DShadow",
"3DFace",
@ -201,10 +197,8 @@ namespace gui
EGDS_COUNT
};
//! Names for default skin sizes
const c8* const GUISkinSizeNames[EGDS_COUNT+1] =
{
const c8 *const GUISkinSizeNames[EGDS_COUNT + 1] = {
"ScrollBarSize",
"MenuHeight",
"WindowButtonWidth",
@ -228,10 +222,9 @@ namespace gui
"ButtonPressedTextOffsetY",
"ButtonPressedSpriteOffsetX",
"ButtonPressedSpriteOffsetY",
0
0,
};
enum EGUI_DEFAULT_TEXT
{
//! Text for the OK button on a message box
@ -256,8 +249,7 @@ namespace gui
};
//! Names for default skin sizes
const c8* const GUISkinTextNames[EGDT_COUNT+1] =
{
const c8 *const GUISkinTextNames[EGDT_COUNT + 1] = {
"MessageBoxOkay",
"MessageBoxCancel",
"MessageBoxYes",
@ -266,7 +258,7 @@ namespace gui
"WindowButtonMaximize",
"WindowButtonMinimize",
"WindowButtonRestore",
0
0,
};
//! Customizable symbols for GUI
@ -324,8 +316,7 @@ namespace gui
EGDI_COUNT
};
const c8* const GUISkinIconNames[EGDI_COUNT+1] =
{
const c8 *const GUISkinIconNames[EGDI_COUNT + 1] = {
"windowMaximize",
"windowRestore",
"windowClose",
@ -349,7 +340,7 @@ namespace gui
"collapse",
"file",
"directory",
0
0,
};
// Customizable fonts
@ -370,21 +361,19 @@ namespace gui
EGDF_COUNT
};
const c8* const GUISkinFontNames[EGDF_COUNT+1] =
{
const c8 *const GUISkinFontNames[EGDF_COUNT + 1] = {
"defaultFont",
"buttonFont",
"windowFont",
"menuFont",
"tooltipFont",
0
0,
};
//! A skin modifies the look of the GUI elements.
class IGUISkin : virtual public IReferenceCounted
{
public:
//! returns default color
virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
@ -572,9 +561,5 @@ namespace gui
virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_SPRITE_BANK_H_INCLUDED__
#define __I_GUI_SPRITE_BANK_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrArray.h"
@ -25,12 +24,13 @@ namespace gui
// 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)
{
}
@ -45,8 +45,10 @@ struct SGUISpriteFrame
// 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);
}
@ -55,7 +57,6 @@ struct SGUISprite
u32 frameTime;
};
//! Sprite bank interface.
/** See http://http://irrlicht.sourceforge.net/forum//viewtopic.php?f=9&t=25742
* for more information how to use the spritebank.
@ -63,7 +64,6 @@ struct SGUISprite
class IGUISpriteBank : public virtual IReferenceCounted
{
public:
//! Returns the list of rectangles held by the sprite bank
virtual core::array<core::rect<s32>> &getPositions() = 0;
@ -134,9 +134,5 @@ public:
bool loop = true, bool center = false) = 0;
};
} // end namespace gui
} // end namespace irr
#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_STATIC_TEXT_H_INCLUDED__
#define __I_GUI_STATIC_TEXT_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "SColor.h"
@ -18,10 +17,9 @@ namespace gui
class IGUIStaticText : public IGUIElement
{
public:
//! constructor
IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {}
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.
@ -131,9 +129,5 @@ namespace gui
virtual bool isRightToLeft() const = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_TAB_CONTROL_H_INCLUDED__
#define __I_GUI_TAB_CONTROL_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
#include "SColor.h"
@ -22,10 +21,9 @@ namespace gui
class IGUITabControl : public IGUIElement
{
public:
//! constructor
IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {}
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;
@ -124,10 +122,9 @@ namespace gui
class IGUITab : public IGUIElement
{
public:
//! constructor
IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: 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;
@ -150,6 +147,3 @@ namespace gui
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_GUI_TOOL_BAR_H_INCLUDED__
#define __I_GUI_TOOL_BAR_H_INCLUDED__
#pragma once
#include "IGUIElement.h"
@ -21,10 +20,9 @@ namespace gui
class IGUIToolBar : public IGUIElement
{
public:
//! constructor
IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect<s32> rectangle)
: IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {}
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,
@ -32,9 +30,5 @@ namespace gui
bool isPushButton = false, bool useAlphaChannel = false) = 0;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -2,14 +2,13 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_IMAGE_H_INCLUDED__
#define __I_IMAGE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "position2d.h"
#include "rect.h"
#include "SColor.h"
#include <string.h>
#include <cstring>
namespace irr
{
@ -24,13 +23,9 @@ NOTE: Floating point formats are not well supported yet. Basically only getData(
class IImage : public virtual IReferenceCounted
{
public:
//! constructor
IImage(ECOLOR_FORMAT format, const core::dimension2d<u32> &size, bool deleteMemory) :
Format(format), Size(size), Data(0), MipMapsData(0), BytesPerPixel(0), Pitch(0), DeleteMemory(deleteMemory), DeleteMipMapsMemory(false)
#if defined(IRRLICHT_sRGB)
,Format_sRGB(1)
#endif
{
BytesPerPixel = getBitsPerPixelFromFormat(Format) / 8;
Pitch = BytesPerPixel * Size.Width;
@ -52,18 +47,6 @@ public:
return Format;
}
#if defined(IRRLICHT_sRGB)
//! Texture is linear/sRGB (should be part of ColorFormat: default yes)
int get_sRGB() const
{
return Format_sRGB;
}
void set_sRGB(int val)
{
Format_sRGB = val;
}
#endif
//! Returns width and height of image data.
const core::dimension2d<u32> &getDimension() const
{
@ -104,8 +87,7 @@ public:
//! Returns mask for red value of a pixel
u32 getRedMask() const
{
switch (Format)
{
switch (Format) {
case ECF_A1R5G5B5:
return 0x1F << 10;
case ECF_R5G6B5:
@ -122,8 +104,7 @@ public:
//! Returns mask for green value of a pixel
u32 getGreenMask() const
{
switch (Format)
{
switch (Format) {
case ECF_A1R5G5B5:
return 0x1F << 5;
case ECF_R5G6B5:
@ -140,8 +121,7 @@ public:
//! Returns mask for blue value of a pixel
u32 getBlueMask() const
{
switch (Format)
{
switch (Format) {
case ECF_A1R5G5B5:
return 0x1F;
case ECF_R5G6B5:
@ -158,8 +138,7 @@ public:
//! Returns mask for alpha value of a pixel
u32 getAlphaMask() const
{
switch (Format)
{
switch (Format) {
case ECF_A1R5G5B5:
return 0x1 << 15;
case ECF_R5G6B5:
@ -191,15 +170,13 @@ public:
return getMipMapsSize(Size, mipmapLevel);
}
//! Calculate mipmap size for a certain level
/** level 0 will be full image size. Every further level is half the size. */
static core::dimension2du getMipMapsSize(const core::dimension2du &sizeLevel0, u32 mipmapLevel)
{
core::dimension2du result(sizeLevel0);
u32 i = 0;
while (i != mipmapLevel)
{
while (i != mipmapLevel) {
if (result.Width > 1)
result.Width >>= 1;
if (result.Height > 1)
@ -212,7 +189,6 @@ public:
return result;
}
//! Get mipmaps data.
/** Note that different mip levels are just behind each other in memory block.
So if you just get level 1 you also have the data for all other levels.
@ -220,14 +196,12 @@ public:
*/
void *getMipMapsData(irr::u32 mipLevel = 1) const
{
if ( MipMapsData && mipLevel > 0)
{
if (MipMapsData && mipLevel > 0) {
size_t dataSize = 0;
core::dimension2du mipSize(Size);
u32 i = 1; // We want the start of data for this level, not end.
while (i != mipLevel)
{
while (i != mipLevel) {
if (mipSize.Width > 1)
mipSize.Width >>= 1;
@ -258,31 +232,24 @@ public:
destruction. */
void setMipMapsData(void *data, bool ownForeignMemory)
{
if (data != MipMapsData)
{
if (DeleteMipMapsMemory)
{
if (data != MipMapsData) {
if (DeleteMipMapsMemory) {
delete[] MipMapsData;
DeleteMipMapsMemory = false;
}
if (data)
{
if (ownForeignMemory)
{
if (data) {
if (ownForeignMemory) {
MipMapsData = static_cast<u8 *>(data);
DeleteMipMapsMemory = false;
}
else
{
} else {
u32 dataSize = 0;
u32 width = Size.Width;
u32 height = Size.Height;
do
{
do {
if (width > 1)
width >>= 1;
@ -297,9 +264,7 @@ public:
DeleteMipMapsMemory = true;
}
}
else
{
} else {
MipMapsData = 0;
}
}
@ -352,8 +317,7 @@ public:
//! get the amount of Bits per Pixel of the given color format
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
{
switch(format)
{
switch (format) {
case ECF_A1R5G5B5:
return 16;
case ECF_R5G6B5:
@ -412,8 +376,7 @@ public:
//! check if the color format is only viable for depth/stencil textures
static bool isDepthFormat(const ECOLOR_FORMAT format)
{
switch(format)
{
switch (format) {
case ECF_D16:
case ECF_D32:
case ECF_D24S8:
@ -429,8 +392,7 @@ public:
if (isCompressedFormat(format))
return false;
switch(format)
{
switch (format) {
case ECF_R16F:
case ECF_G16R16F:
case ECF_A16B16G16R16F:
@ -456,15 +418,7 @@ protected:
bool DeleteMemory;
bool DeleteMipMapsMemory;
#if defined(IRRLICHT_sRGB)
int Format_sRGB;
#endif
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SURFACE_LOADER_H_INCLUDED__
#define __I_SURFACE_LOADER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "IImage.h"
@ -28,7 +27,6 @@ IVideoDriver::addExternalImageLoader() to the engine. */
class IImageLoader : public virtual IReferenceCounted
{
public:
//! Check if the file might be loaded by this class
/** Check is based on the file extension (e.g. ".tga")
\param filename Name of file to check.
@ -47,9 +45,5 @@ public:
virtual IImage *loadImage(io::IReadFile *file) const = 0;
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef _I_IMAGE_WRITER_H_INCLUDED__
#define _I_IMAGE_WRITER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrString.h"
@ -20,7 +19,6 @@ namespace video
{
class IImage;
//! Interface for writing software image data.
class IImageWriter : public IReferenceCounted
{
@ -40,6 +38,3 @@ public:
} // namespace video
} // namespace irr
#endif // _I_IMAGE_WRITER_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_INDEX_BUFFER_H_INCLUDED__
#define __I_INDEX_BUFFER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrArray.h"
@ -24,7 +23,6 @@ namespace scene
class IIndexBuffer : public virtual IReferenceCounted
{
public:
virtual void *getData() = 0;
virtual video::E_INDEX_TYPE getType() const = 0;
@ -57,9 +55,5 @@ namespace scene
virtual u32 getChangedID() const = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_LOGGER_H_INCLUDED__
#define __I_LOGGER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
@ -33,12 +32,10 @@ enum ELOG_LEVEL
ELL_NONE
};
//! Interface for logging messages, warnings and errors
class ILogger : public virtual IReferenceCounted
{
public:
//! Destructor
virtual ~ILogger() {}
@ -73,30 +70,6 @@ public:
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 c8 *text, const c8 *hint, ELOG_LEVEL ll = ELL_INFORMATION) = 0;
virtual void log(const c8* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
//! Prints out a text into the log
/** \param text: Text to print out.
\param hint: Additional info. This string is added after a " :" to the
string.
\param ll: Log level of the text. If the text is an error, set
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
is just an informational text, set it to ELL_INFORMATION. Texts are
filtered with these levels. If you want to be a text displayed,
independent on what level filter is set, use ELL_NONE. */
virtual void log(const wchar_t* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
//! Prints out a text into the log
/** \param text: Text to print out.
\param ll: Log level of the text. If the text is an error, set
it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it
is just an informational text, set it to ELL_INFORMATION. Texts are
filtered with these levels. If you want to be a text displayed,
independent on what level filter is set, use ELL_NONE. */
virtual void log(const wchar_t* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0;
};
} // end namespace
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MATERIAL_RENDERER_H_INCLUDED__
#define __I_MATERIAL_RENDERER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "SMaterial.h"
@ -25,7 +24,6 @@ engine with new materials. */
class IMaterialRenderer : public virtual IReferenceCounted
{
public:
//! Called by the IVideoDriver implementation the let the renderer set its needed render states.
/** This is called during the IVideoDriver::setMaterial() call.
When overriding this, you can set some renderstates or for example a
@ -99,9 +97,5 @@ public:
virtual IShaderConstantSetCallBack *getShaderConstantSetCallBack() const { return 0; }
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__
#define __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__
#pragma once
#include "SMaterial.h"
#include "S3DVertex.h"
@ -15,12 +14,10 @@ namespace video
class IVideoDriver;
//! Interface providing some methods for changing advanced, internal states of a IVideoDriver.
class IMaterialRendererServices
{
public:
//! Destructor
virtual ~IMaterialRendererServices() {}
@ -53,19 +50,8 @@ public:
virtual bool setVertexShaderConstant(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 setVertexShaderConstant(s32 index, const u32 *ints, int count) = 0;
//! Sets a vertex shader constant.
/** Can be used if you created a shader using pixel/vertex shader
assembler or ARB_fragment_program or ARB_vertex_program.
\param data: Data to be set in the constants
\param startRegister: First register to be set
\param constantAmount: Amount of registers to be set. One register consists of 4 floats. */
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0;
//! Return an index constant for the pixel shader for the given uniform variable name
virtual s32 getPixelShaderConstantID(const c8 *name) = 0;
@ -83,19 +69,8 @@ public:
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;
@ -103,6 +78,3 @@ public:
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MEMORY_READ_FILE_H_INCLUDED__
#define __I_MEMORY_READ_FILE_H_INCLUDED__
#pragma once
#include "IReadFile.h"
@ -26,6 +25,3 @@ namespace io
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_H_INCLUDED__
#define __I_MESH_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "SMaterial.h"
@ -60,7 +59,6 @@ namespace scene
EAMT_STATIC
};
class IMeshBuffer;
//! Class which holds the geometry of an object.
@ -71,7 +69,6 @@ namespace scene
class IMesh : public virtual IReferenceCounted
{
public:
//! Get the amount of mesh buffers.
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
virtual u32 getMeshBufferCount() const = 0;
@ -124,6 +121,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_BUFFER_H_INCLUDED__
#define __I_MESH_BUFFER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "SMaterial.h"
@ -39,7 +38,6 @@ namespace scene
class IMeshBuffer : public virtual IReferenceCounted
{
public:
//! Get the material of this meshbuffer
/** \return Material of this buffer. */
virtual video::SMaterial &getMaterial() = 0;
@ -120,11 +118,6 @@ namespace scene
\param numIndices Number of indices in array. */
virtual void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) = 0;
//! Append the meshbuffer to the current buffer
/** Only works for compatible vertex types
\param other Buffer to append to this one. */
virtual void append(const IMeshBuffer* const other) = 0;
//! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0;
@ -163,23 +156,27 @@ namespace scene
virtual u32 getPrimitiveCount() const
{
const u32 indexCount = getIndexCount();
switch (getPrimitiveType())
{
case scene::EPT_POINTS: return indexCount;
case scene::EPT_LINE_STRIP: return indexCount-1;
case scene::EPT_LINE_LOOP: return indexCount;
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;
switch (getPrimitiveType()) {
case scene::EPT_POINTS:
return indexCount;
case scene::EPT_LINE_STRIP:
return indexCount - 1;
case scene::EPT_LINE_LOOP:
return indexCount;
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;
}
return 0;
}
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_CACHE_H_INCLUDED__
#define __I_MESH_CACHE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "path.h"
@ -27,7 +26,6 @@ namespace scene
class IMeshCache : public virtual IReferenceCounted
{
public:
//! Destructor
virtual ~IMeshCache() {}
@ -129,9 +127,5 @@ namespace scene
virtual void clearUnusedMeshes() = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_LOADER_H_INCLUDED__
#define __I_MESH_LOADER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "path.h"
@ -26,7 +25,6 @@ ISceneManager::addExternalMeshLoader() to the engine. */
class IMeshLoader : public virtual IReferenceCounted
{
public:
//! Constructor
IMeshLoader() {}
@ -48,8 +46,5 @@ public:
virtual IAnimatedMesh *createMesh(io::IReadFile *file) = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_MANIPULATOR_H_INCLUDED__
#define __I_MESH_MANIPULATOR_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "vector3d.h"
@ -29,7 +28,6 @@ namespace scene
class IMeshManipulator : public virtual IReferenceCounted
{
public:
//! Recalculates all normals of the mesh.
/** \param mesh: Mesh on which the operation is performed.
\param smooth: If the normals shall be smoothed.
@ -100,7 +98,6 @@ namespace scene
return apply_(func, buffer, boundingBoxUpdate, func);
}
//! Apply a manipulator on the Mesh
/** \param func A functor defining the mesh manipulation.
\param mesh The Mesh to apply the manipulator to.
@ -113,11 +110,9 @@ namespace scene
return true;
bool result = true;
core::aabbox3df bufferbox;
for (u32 i=0; i<mesh->getMeshBufferCount(); ++i)
{
for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
if (boundingBoxUpdate)
{
if (boundingBoxUpdate) {
if (0 == i)
bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox());
else
@ -143,31 +138,22 @@ protected:
return true;
core::aabbox3df bufferbox;
for (u32 i=0; i<buffer->getVertexCount(); ++i)
{
switch (buffer->getVertexType())
{
case video::EVT_STANDARD:
{
for (u32 i = 0; i < buffer->getVertexCount(); ++i) {
switch (buffer->getVertexType()) {
case video::EVT_STANDARD: {
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]);
}
break;
case video::EVT_TANGENTS:
{
} break;
case video::EVT_TANGENTS: {
video::S3DVertexTangents *verts = (video::S3DVertexTangents *)buffer->getVertices();
func(verts[i]);
} break;
}
break;
}
if (boundingBoxUpdate)
{
if (boundingBoxUpdate) {
if (0 == i)
bufferbox.reset(buffer->getPosition(0));
else
@ -182,6 +168,3 @@ protected:
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_MESH_SCENE_NODE_H_INCLUDED__
#define __I_MESH_SCENE_NODE_H_INCLUDED__
#pragma once
#include "ISceneNode.h"
@ -14,20 +13,18 @@ namespace scene
class IMesh;
//! A scene node displaying a static mesh
class IMeshSceneNode : public ISceneNode
{
public:
//! 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),
const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1,1,1))
: 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. */
@ -51,7 +48,3 @@ public:
} // end namespace scene
} // end namespace irr
#endif

View File

@ -1,55 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#pragma once
#include "IReferenceCounted.h"
#include "EMeshWriterEnums.h"
namespace irr
{
namespace io
{
class IWriteFile;
} // end namespace io
namespace scene
{
class IMesh;
//! Interface for writing meshes
class IMeshWriter : public virtual IReferenceCounted
{
public:
//! Destructor
virtual ~IMeshWriter() {}
//! Get the type of the mesh writer
/** For own implementations, use MAKE_IRR_ID as shown in the
EMESH_WRITER_TYPE enumeration to return your own unique mesh
type id.
\return Type of the mesh writer. */
virtual EMESH_WRITER_TYPE getType() const = 0;
//! Write a static mesh.
/** \param file File handle to write the mesh to.
\param mesh Pointer to mesh to be written.
\param flags Optional flags to set properties of the writer.
\return True if successful */
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh,
s32 flags=EMWF_NONE) = 0;
// Writes an animated mesh
// for future use, only b3d writer is able to write animated meshes currently and that was implemented using the writeMesh above.
/* \return Returns true if successful */
//virtual bool writeAnimatedMesh(io::IWriteFile* file,
// scene::IAnimatedMesh* mesh,
// s32 flags=EMWF_NONE) = 0;
};
} // end namespace
} // end namespace

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_OS_OPERATOR_H_INCLUDED__
#define __I_OS_OPERATOR_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrString.h"
@ -41,9 +40,6 @@ public:
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
\return True if successful, false if not */
virtual bool getSystemMemory(u32 *totalBytes, u32 *availableBytes) const = 0;
};
} // end namespace
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_READ_FILE_H_INCLUDED__
#define __I_READ_FILE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "coreutil.h"
@ -56,6 +55,3 @@ namespace io
} // end namespace io
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_IREFERENCE_COUNTED_H_INCLUDED__
#define __I_IREFERENCE_COUNTED_H_INCLUDED__
#pragma once
#include "irrTypes.h"
@ -41,10 +40,9 @@ namespace irr
class IReferenceCounted
{
public:
//! Constructor.
IReferenceCounted()
: DebugName(0), ReferenceCounter(1)
IReferenceCounted() :
DebugName(0), ReferenceCounter(1)
{
}
@ -119,8 +117,7 @@ namespace irr
_IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0)
--ReferenceCounter;
if (!ReferenceCounter)
{
if (!ReferenceCounter) {
delete this;
return true;
}
@ -145,7 +142,6 @@ namespace irr
}
protected:
//! Sets the debug name of the object.
/** The Debugname may only be set and changed by the object
itself. This method should only be used in Debug mode.
@ -156,7 +152,6 @@ namespace irr
}
private:
//! The debug name.
const c8 *DebugName;
@ -165,6 +160,3 @@ namespace irr
};
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_RENDER_TARGET_H_INCLUDED__
#define __I_RENDER_TARGET_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "EDriverTypes.h"
@ -30,9 +29,9 @@ namespace video
class IRenderTarget : public virtual IReferenceCounted
{
public:
//! constructor
IRenderTarget() : DepthStencil(0), DriverType(EDT_NULL)
IRenderTarget() :
DepthStencil(0), DriverType(EDT_NULL)
{
}
@ -70,12 +69,9 @@ namespace video
//! 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);
}
else
{
} else {
setTextures(0, 0, depthStencil);
}
}
@ -83,12 +79,9 @@ namespace video
//! 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);
}
else
{
} else {
setTextures(0, 0, depthStencil, &cubeSurface, 1);
}
}
@ -100,7 +93,6 @@ namespace video
}
protected:
//! Set multiple textures.
// 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;
@ -125,5 +117,3 @@ namespace video
}
}
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SCENE_COLLISION_MANAGER_H_INCLUDED__
#define __I_SCENE_COLLISION_MANAGER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "position2d.h"
@ -19,7 +18,6 @@ namespace scene
class ISceneCollisionManager : public virtual IReferenceCounted
{
public:
//! Returns a 3d ray which would go through the 2d screen coordinates.
/** \param pos: Screen coordinates in pixels.
\param camera: Camera from which the ray starts. If null, the
@ -29,10 +27,7 @@ namespace scene
would be behind the 2d screen coordinates. */
virtual core::line3d<f32> getRayFromScreenCoordinates(
const core::position2d<s32> &pos, const ICameraSceneNode *camera = 0) = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SCENE_MANAGER_H_INCLUDED__
#define __I_SCENE_MANAGER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrArray.h"
@ -13,7 +12,6 @@
#include "dimension2d.h"
#include "SColor.h"
#include "ESceneNodeTypes.h"
#include "EMeshWriterEnums.h"
#include "SceneParameters.h"
#include "ISkinnedMesh.h"
@ -109,7 +107,6 @@ namespace scene
class IMeshLoader;
class IMeshManipulator;
class IMeshSceneNode;
class IMeshWriter;
class ISceneNode;
class ISceneNodeFactory;
@ -129,7 +126,6 @@ namespace scene
class ISceneManager : public virtual IReferenceCounted
{
public:
//! Get pointer to an animatable mesh. Loads the file if not loaded already.
/**
* If you want to remove a loaded mesh from the cache again, use removeMesh().
@ -603,11 +599,6 @@ namespace scene
See IReferenceCounted::drop() for more information. */
virtual ISceneManager *createNewSceneManager(bool cloneContent = false) = 0;
//! Get a mesh writer implementation if available
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
for details. */
virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0;
//! Get a skinned mesh, which is not available as header-only code
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
for details. */
@ -637,9 +628,5 @@ namespace scene
virtual bool isCulled(const ISceneNode *node) const = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SCENE_NODE_H_INCLUDED__
#define __I_SCENE_NODE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "ESceneNodeTypes.h"
@ -14,6 +13,7 @@
#include "aabbox3d.h"
#include "matrix4.h"
#include "IAttributes.h"
#include <list>
#include <optional>
@ -38,13 +38,13 @@ namespace scene
class ISceneNode : virtual public IReferenceCounted
{
public:
//! Constructor
ISceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id = -1,
const core::vector3df &position = core::vector3df(0, 0, 0),
const core::vector3df &rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f))
: RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale),
const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) :
RelativeTranslation(position),
RelativeRotation(rotation), RelativeScale(scale),
Parent(0), SceneManager(mgr), ID(id),
AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF),
IsVisible(true), IsDebugObject(false)
@ -55,7 +55,6 @@ namespace scene
updateAbsolutePosition();
}
//! Destructor
virtual ~ISceneNode()
{
@ -63,7 +62,6 @@ namespace scene
removeAll();
}
//! This method is called just before the rendering process of the whole scene.
/** Nodes may register themselves in the render pipeline during this call,
precalculate the geometry which should be rendered, and prevent their
@ -80,15 +78,13 @@ namespace scene
*/
virtual void OnRegisterSceneNode()
{
if (IsVisible)
{
if (IsVisible) {
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->OnRegisterSceneNode();
}
}
//! OnAnimate() is called just before rendering the whole scene.
/** Nodes may calculate or store animations here, and may do other useful things,
depending on what they are. Also, OnAnimate() should be called for all
@ -97,8 +93,7 @@ namespace scene
\param timeMs Current time in milliseconds. */
virtual void OnAnimate(u32 timeMs)
{
if (IsVisible)
{
if (IsVisible) {
// update absolute position
updateAbsolutePosition();
@ -110,35 +105,23 @@ namespace scene
}
}
//! Renders the node.
virtual void render() = 0;
//! Returns the name of the node.
/** \return Name as character string. */
virtual const c8* getName() const
virtual const std::optional<std::string> &getName() const
{
return Name.c_str();
return Name;
}
//! Sets the name of the node.
/** \param name New name of the scene node. */
virtual void setName(const c8* name)
virtual void setName(const std::optional<std::string> &name)
{
Name = name;
}
//! Sets the name of the node.
/** \param name New name of the scene node. */
virtual void setName(const core::stringc& name)
{
Name = name;
}
//! Get the axis aligned, not transformed bounding box of this node.
/** This means that if this node is an animated 3d character,
moving in a room, the bounding box will always be around the
@ -149,7 +132,6 @@ namespace scene
\return The non-transformed bounding box. */
virtual const core::aabbox3d<f32> &getBoundingBox() const = 0;
//! Get the axis aligned, transformed and animated absolute bounding box of this node.
/** Note: The result is still an axis-aligned bounding box, so it's size
changes with rotation.
@ -186,7 +168,6 @@ namespace scene
return AbsoluteTransformation;
}
//! Returns the relative transformation of the scene node.
/** The relative transformation is stored internally as 3
vectors: translation, rotation and scale. To get the relative
@ -198,8 +179,7 @@ namespace scene
mat.setRotationDegrees(RelativeRotation);
mat.setTranslation(RelativeTranslation);
if (RelativeScale != core::vector3df(1.f,1.f,1.f))
{
if (RelativeScale != core::vector3df(1.f, 1.f, 1.f)) {
core::matrix4 smat;
smat.setScale(RelativeScale);
mat *= smat;
@ -208,7 +188,6 @@ namespace scene
return mat;
}
//! Returns whether the node should be visible (if all of its parents are visible).
/** This is only an option set by the user, but has nothing to
do with geometry culling
@ -243,7 +222,6 @@ namespace scene
IsVisible = isVisible;
}
//! Get the id of the scene node.
/** This id can be used to identify the node.
\return The id. */
@ -252,7 +230,6 @@ namespace scene
return ID;
}
//! Sets the id of the scene node.
/** This id can be used to identify the node.
\param id The new id. */
@ -261,15 +238,13 @@ namespace scene
ID = id;
}
//! Adds a child to this scene node.
/** If the scene node already has a parent it is first removed
from the other parent.
\param child A pointer to the new child. */
virtual void addChild(ISceneNode *child)
{
if (child && (child != this))
{
if (child && (child != this)) {
// Change scene manager?
if (SceneManager != child->SceneManager)
child->setSceneManager(SceneManager);
@ -282,7 +257,6 @@ namespace scene
}
}
//! Removes a child from this scene node.
/**
\param child A pointer to the child which shall be removed.
@ -303,7 +277,6 @@ namespace scene
return true;
}
//! Removes all children of this scene node
/** The scene nodes found in the children list are also dropped
and might be deleted if no other grab exists on them.
@ -318,7 +291,6 @@ namespace scene
Children.clear();
}
//! Removes this scene node from the scene
/** If no other grab exists for this node, it will be deleted.
*/
@ -328,7 +300,6 @@ namespace scene
Parent->removeChild(this);
}
//! Returns the material based on the zero based index i.
/** To get the amount of materials used by this scene node, use
getMaterialCount(). This function is needed for inserting the
@ -342,7 +313,6 @@ namespace scene
return video::IdentityMaterial;
}
//! Get amount of materials used by this scene node.
/** \return Current amount of materials of this scene node. */
virtual u32 getMaterialCount() const
@ -350,18 +320,17 @@ namespace scene
return 0;
}
//! Execute a function on all materials of this scene node.
/** Useful for setting material properties, e.g. if you want the whole
mesh to be affected by light. */
template <typename F>
void forEachMaterial(F &&fn) {
void forEachMaterial(F &&fn)
{
for (u32 i = 0; i < getMaterialCount(); i++) {
fn(getMaterial(i));
}
}
//! Gets the scale of the scene node relative to its parent.
/** This is the scale of this node relative to its parent.
If you want the absolute scale, use
@ -372,7 +341,6 @@ namespace scene
return RelativeScale;
}
//! Sets the relative scale of the scene node.
/** \param scale New scale of the node, relative to its parent. */
virtual void setScale(const core::vector3df &scale)
@ -380,7 +348,6 @@ namespace scene
RelativeScale = scale;
}
//! Gets the rotation of the node relative to its parent.
/** Note that this is the relative rotation of the node.
If you want the absolute rotation, use
@ -391,7 +358,6 @@ namespace scene
return RelativeRotation;
}
//! Sets the rotation of the node relative to its parent.
/** This only modifies the relative rotation of the node.
\param rotation New rotation of the node in degrees. */
@ -400,7 +366,6 @@ namespace scene
RelativeRotation = rotation;
}
//! Gets the position of the node relative to its parent.
/** Note that the position is relative to the parent. If you want
the position in world coordinates, use getAbsolutePosition() instead.
@ -410,7 +375,6 @@ namespace scene
return RelativeTranslation;
}
//! Sets the position of the node relative to its parent.
/** Note that the position is relative to the parent.
\param newpos New relative position of the scene node. */
@ -419,7 +383,6 @@ namespace scene
RelativeTranslation = newpos;
}
//! Gets the absolute position of the node in world coordinates.
/** If you want the position of the node relative to its parent,
use getPosition() instead.
@ -434,7 +397,6 @@ namespace scene
return AbsoluteTransformation.getTranslation();
}
//! Set a culling style or disable culling completely.
/** Box cullling (EAC_BOX) is set by default. Note that not
all SceneNodes support culling and that some nodes always cull
@ -446,7 +408,6 @@ namespace scene
AutomaticCullingState = state;
}
//! Gets the automatic culling state.
/** \return The automatic culling state. */
u32 getAutomaticCulling() const
@ -454,7 +415,6 @@ namespace scene
return AutomaticCullingState;
}
//! Sets if debug data like bounding boxes should be drawn.
/** A bitwise OR of the types from @ref irr::scene::E_DEBUG_SCENE_TYPE.
Please note that not all scene nodes support all debug data types.
@ -472,7 +432,6 @@ namespace scene
return DebugDataVisible;
}
//! Sets if this scene node is a debug object.
/** Debug objects have some special properties, for example they can be easily
excluded from collision detection or from serialization, etc. */
@ -481,7 +440,6 @@ namespace scene
IsDebugObject = debugObject;
}
//! Returns if this scene node is a debug object.
/** Debug objects have some special properties, for example they can be easily
excluded from collision detection or from serialization, etc.
@ -491,7 +449,6 @@ namespace scene
return IsDebugObject;
}
//! Returns a const reference to the list of all children.
/** \return The list of all children of this node. */
const std::list<ISceneNode *> &getChildren() const
@ -499,7 +456,6 @@ namespace scene
return Children;
}
//! Changes the parent of the scene node.
/** \param newParent The new parent to be used. */
virtual void setParent(ISceneNode *newParent)
@ -513,22 +469,18 @@ namespace scene
drop();
}
//! Updates the absolute position based on the relative and the parents position
/** Note: This does not recursively update the parents absolute positions, so if you have a deeper
hierarchy you might want to update the parents first.*/
virtual void updateAbsolutePosition()
{
if (Parent)
{
if (Parent) {
AbsoluteTransformation =
Parent->getAbsoluteTransformation() * getRelativeTransformation();
}
else
} else
AbsoluteTransformation = getRelativeTransformation();
}
//! Returns the parent of this scene node
/** \return A pointer to the parent. */
scene::ISceneNode *getParent() const
@ -536,7 +488,6 @@ namespace scene
return Parent;
}
//! Returns type of the scene node
/** \return The type of this node. */
virtual ESCENE_NODE_TYPE getType() const
@ -558,7 +509,6 @@ namespace scene
virtual ISceneManager *getSceneManager(void) const { return SceneManager; }
protected:
//! A clone function for the ISceneNode members.
/** This method can be used by clone() implementations of
derived classes
@ -601,7 +551,7 @@ namespace scene
}
//! Name of the scene node.
core::stringc Name;
std::optional<std::string> Name;
//! Absolute transformation of the node.
core::matrix4 AbsoluteTransformation;
@ -643,9 +593,5 @@ namespace scene
bool IsDebugObject;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
#define __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
@ -21,7 +20,6 @@ OnSetConstants method will be called every frame now. */
class IShaderConstantSetCallBack : public virtual IReferenceCounted
{
public:
//! Called to let the callBack know the used material (optional method)
/**
\code
@ -77,9 +75,5 @@ public:
virtual void OnSetConstants(IMaterialRendererServices *services, s32 userData) = 0;
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,14 +2,15 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SKINNED_MESH_H_INCLUDED__
#define __I_SKINNED_MESH_H_INCLUDED__
#pragma once
#include "irrArray.h"
#include "IBoneSceneNode.h"
#include "IAnimatedMesh.h"
#include "SSkinMeshBuffer.h"
#include <optional>
namespace irr
{
namespace scene
@ -27,12 +28,10 @@ namespace scene
EIM_COUNT
};
//! Interface for using some special functions of Skinned meshes
class ISkinnedMesh : public IAnimatedMesh
{
public:
//! Gets joint count.
/** \return Amount of joints in the skeletal animated mesh. */
virtual u32 getJointCount() const = 0;
@ -41,12 +40,12 @@ namespace scene
/** \param number: Zero based index of joint. The last joint
has the number getJointCount()-1;
\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
/** \param name: Name of the joint.
\return Number of the joint or -1 if not found. */
virtual s32 getJointNumber(const c8* name) const = 0;
\return Number of the joint or std::nullopt if not found. */
virtual std::optional<u32> getJointNumber(const std::string &name) const = 0;
//! Use animation from another mesh
/** The animation is linked (not copied) based on joint names
@ -105,7 +104,6 @@ namespace scene
core::vector3df StaticNormal;
};
//! Animation keyframe which describes a new position
struct SPositionKey
{
@ -130,13 +128,14 @@ namespace scene
//! Joints
struct SJoint
{
SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false),
SJoint() :
UseAnimationFrom(0), GlobalSkinningSpace(false),
positionHint(-1), scaleHint(-1), rotationHint(-1)
{
}
//! The name of this joint
core::stringc Name;
std::optional<std::string> Name;
//! Local matrix of this joint
core::matrix4 LocalMatrix;
@ -181,7 +180,6 @@ namespace scene
s32 rotationHint;
};
// Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_
// these functions will use the needed arrays, set values, etc to help the loaders
@ -220,6 +218,3 @@ namespace scene
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_TEXTURE_H_INCLUDED__
#define __I_TEXTURE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "IImage.h"
@ -17,7 +16,6 @@ namespace irr
namespace video
{
//! Enumeration flags used to tell the video driver with setTextureCreationFlag in which format textures should be created.
enum E_TEXTURE_CREATION_FLAG
{
@ -177,9 +175,9 @@ and write a warning or an error message to the output buffer.
class ITexture : public virtual IReferenceCounted
{
public:
//! constructor
ITexture(const io::path& name, E_TEXTURE_TYPE type) : NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN),
ITexture(const io::path &name, E_TEXTURE_TYPE type) :
NamedPath(name), DriverType(EDT_NULL), OriginalColorFormat(ECF_UNKNOWN),
ColorFormat(ECF_UNKNOWN), Pitch(0), HasMipMaps(false), IsRenderTarget(false), Source(ETS_UNKNOWN), Type(type)
{
}
@ -288,8 +286,7 @@ public:
{
bool status = false;
switch (ColorFormat)
{
switch (ColorFormat) {
case ECF_A8R8G8B8:
case ECF_A1R5G5B5:
case ECF_A16B16G16R16F:
@ -307,7 +304,6 @@ public:
E_TEXTURE_TYPE getType() const { return Type; }
protected:
//! Helper function, helps to get the desired texture creation format from the flags.
/** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT,
ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */
@ -337,9 +333,5 @@ protected:
E_TEXTURE_TYPE Type;
};
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_TIMER_H_INCLUDED__
#define __I_TIMER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
@ -64,5 +63,3 @@ public:
};
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_VERTEX_BUFFER_H_INCLUDED__
#define __I_VERTEX_BUFFER_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "irrArray.h"
@ -45,9 +44,5 @@ namespace scene
virtual u32 getChangedID() const = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -13,7 +13,6 @@
#include "dimension2d.h"
#include "position2d.h"
#include "IMeshBuffer.h"
#include "triangle3d.h"
#include "EDriverTypes.h"
#include "EDriverFeatures.h"
#include "SExposedVideoData.h"
@ -108,12 +107,11 @@ namespace video
EFT_FOG_EXP2
};
const c8* const FogTypeNames[] =
{
const c8 *const FogTypeNames[] = {
"FogExp",
"FogLinear",
"FogExp2",
0
0,
};
//! Interface to driver which is able to perform 2d and 3d graphics functions.
@ -127,7 +125,6 @@ namespace video
class IVideoDriver : public virtual IReferenceCounted
{
public:
//! Applications must call this method before performing any rendering.
/** This method can clear the back- and the z-buffer.
\param clearFlag A combination of the E_CLEAR_BUFFER_FLAG bit-flags.
@ -869,7 +866,7 @@ namespace video
//! Gets name of this video driver.
/** \return Returns the name of the video driver, e.g. in case
of the Direct3D8 driver, it would return "Direct3D 8.1". */
virtual const wchar_t* getName() const =0;
virtual const char *getName() const = 0;
//! Adds an external image loader to the engine.
/** This is useful if the Irrlicht Engine should be able to load
@ -1208,5 +1205,3 @@ namespace video
} // end namespace video
} // end namespace irr

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_WRITE_FILE_H_INCLUDED__
#define __I_WRITE_FILE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "path.h"
@ -46,6 +45,3 @@ namespace io
} // end namespace io
} // end namespace irr
#endif

View File

@ -5,8 +5,8 @@
#pragma once
//! Identifies the IrrlichtMt fork customized for the Minetest engine
#define IRRLICHT_VERSION_MT_REVISION 14
#define IRRLICHT_VERSION_MT "mt14"
#define IRRLICHT_VERSION_MT_REVISION 15
#define IRRLICHT_VERSION_MT "mt15"
//! Irrlicht SDK Version
#define IRRLICHT_VERSION_MAJOR 1
@ -17,8 +17,6 @@
#define IRRLICHT_VERSION_SVN alpha
#define IRRLICHT_SDK_VERSION "1.9.0" IRRLICHT_VERSION_MT
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
#ifdef _WIN32
#define IRRCALLCONV __stdcall
#else

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_IRRLICHT_DEVICE_H_INCLUDED__
#define __I_IRRLICHT_DEVICE_H_INCLUDED__
#pragma once
#include "IReferenceCounted.h"
#include "dimension2d.h"
@ -21,19 +20,23 @@ namespace irr
class ILogger;
class IEventReceiver;
namespace io {
namespace io
{
class IFileSystem;
} // end namespace io
namespace gui {
namespace gui
{
class IGUIEnvironment;
} // end namespace gui
namespace scene {
namespace scene
{
class ISceneManager;
} // end namespace scene
namespace video {
namespace video
{
class IContextManager;
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
} // end namespace video
@ -47,7 +50,6 @@ namespace irr
class IrrlichtDevice : public virtual IReferenceCounted
{
public:
//! Runs the device.
/** Also increments the virtual timer by calling
ITimer::tick();. You can prevent this
@ -178,7 +180,10 @@ namespace irr
virtual bool isFullscreen() const = 0;
//! Checks if the window could possibly be visible.
//! Currently, this only returns false when the app is paused on Android.
//! Currently, this only returns false when the activity is stopped on
//! Android. Note that for Android activities, "stopped" means something
//! different than you might expect (and also something different than
//! "paused"). Read the Android lifecycle documentation.
virtual bool isWindowVisible() const { return true; };
//! Get the current color format of the window
@ -334,6 +339,3 @@ namespace irr
};
} // end namespace irr
#endif

View File

@ -183,5 +183,3 @@ namespace irr
};
} // end namespace irr

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_3D_VERTEX_H_INCLUDED__
#define __S_3D_VERTEX_H_INCLUDED__
#pragma once
#include "vector3d.h"
#include "vector2d.h"
@ -32,28 +31,29 @@ enum E_VERTEX_TYPE
};
//! Array holding the built in vertex type names
const char* const sBuiltInVertexTypeNames[] =
{
const char *const sBuiltInVertexTypeNames[] = {
"standard",
"2tcoords",
"tangents",
0
0,
};
//! standard vertex used by the Irrlicht engine.
struct S3DVertex
{
//! default constructor
S3DVertex() : Color(0xffffffff) {}
constexpr S3DVertex() :
Color(0xffffffff) {}
//! constructor
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
: Pos(x,y,z), Normal(nx,ny,nz), Color(c), TCoords(tu,tv) {}
constexpr S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) :
Pos(x, y, z), Normal(nx, ny, nz), Color(c), TCoords(tu, tv) {}
//! constructor
S3DVertex(const core::vector3df& pos, const core::vector3df& normal,
SColor color, const core::vector2d<f32>& tcoords)
: Pos(pos), Normal(normal), Color(color), TCoords(tcoords) {}
constexpr S3DVertex(const core::vector3df &pos, const core::vector3df &normal,
SColor color, const core::vector2df &tcoords) :
Pos(pos),
Normal(normal), Color(color), TCoords(tcoords) {}
//! Position
core::vector3df Pos;
@ -65,21 +65,21 @@ struct S3DVertex
SColor Color;
//! Texture coordinates
core::vector2d<f32> TCoords;
core::vector2df TCoords;
bool operator==(const S3DVertex& other) const
constexpr bool operator==(const S3DVertex &other) const
{
return ((Pos == other.Pos) && (Normal == other.Normal) &&
(Color == other.Color) && (TCoords == other.TCoords));
}
bool operator!=(const S3DVertex& other) const
constexpr bool operator!=(const S3DVertex &other) const
{
return ((Pos != other.Pos) || (Normal != other.Normal) ||
(Color != other.Color) || (TCoords != other.TCoords));
}
bool operator<(const S3DVertex& other) const
constexpr bool operator<(const S3DVertex &other) const
{
return ((Pos < other.Pos) ||
((Pos == other.Pos) && (Normal < other.Normal)) ||
@ -104,7 +104,6 @@ struct S3DVertex
}
};
//! Vertex with two texture coordinates.
/** Usually used for geometry with lightmaps
or other special materials.
@ -112,56 +111,65 @@ or other special materials.
struct S3DVertex2TCoords : public S3DVertex
{
//! default constructor
S3DVertex2TCoords() : S3DVertex() {}
constexpr S3DVertex2TCoords() :
S3DVertex() {}
//! constructor with two different texture coords, but no normal
S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2)
: S3DVertex(x,y,z, 0.0f, 0.0f, 0.0f, c, tu,tv), TCoords2(tu2,tv2) {}
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
S3DVertex(x, y, z, 0.0f, 0.0f, 0.0f, c, tu, tv), TCoords2(tu2, tv2) {}
//! constructor with two different texture coords, but no normal
S3DVertex2TCoords(const core::vector3df& pos, SColor color,
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2)
: S3DVertex(pos, core::vector3df(), color, tcoords), TCoords2(tcoords2) {}
constexpr S3DVertex2TCoords(const core::vector3df &pos, SColor color,
const core::vector2df &tcoords, const core::vector2df &tcoords2) :
S3DVertex(pos, core::vector3df(), color, tcoords),
TCoords2(tcoords2) {}
//! constructor with all values
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, const SColor& color,
const core::vector2d<f32>& tcoords, const core::vector2d<f32>& tcoords2)
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords2) {}
constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal, const SColor &color,
const core::vector2df &tcoords, const core::vector2df &tcoords2) :
S3DVertex(pos, normal, color, tcoords),
TCoords2(tcoords2) {}
//! constructor with all values
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2)
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu2,tv2) {}
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) :
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
TCoords2(tu2, tv2) {}
//! constructor with the same texture coords and normal
S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu,tv) {}
constexpr S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz,
SColor c, f32 tu, f32 tv) :
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
TCoords2(tu, tv) {}
//! constructor with the same texture coords and normal
S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal,
SColor color, const core::vector2d<f32>& tcoords)
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
constexpr S3DVertex2TCoords(const core::vector3df &pos, const core::vector3df &normal,
SColor color, const core::vector2df &tcoords) :
S3DVertex(pos, normal, color, tcoords),
TCoords2(tcoords) {}
//! constructor from S3DVertex
S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {}
constexpr S3DVertex2TCoords(const S3DVertex &o) :
S3DVertex(o) {}
//! Second set of texture coordinates
core::vector2d<f32> TCoords2;
core::vector2df TCoords2;
//! Equality operator
bool operator==(const S3DVertex2TCoords& other) const
constexpr bool operator==(const S3DVertex2TCoords &other) const
{
return ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) &&
(TCoords2 == other.TCoords2));
}
//! Inequality operator
bool operator!=(const S3DVertex2TCoords& other) const
constexpr bool operator!=(const S3DVertex2TCoords &other) const
{
return ((static_cast<S3DVertex>(*this) != static_cast<const S3DVertex &>(other)) ||
(TCoords2 != other.TCoords2));
}
bool operator<(const S3DVertex2TCoords& other) const
constexpr bool operator<(const S3DVertex2TCoords &other) const
{
return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (TCoords2 < other.TCoords2)));
@ -184,7 +192,6 @@ struct S3DVertex2TCoords : public S3DVertex
}
};
//! Vertex with a tangent and binormal vector.
/** Usually used for tangent space normal mapping.
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
@ -192,30 +199,34 @@ struct S3DVertex2TCoords : public S3DVertex
struct S3DVertexTangents : public S3DVertex
{
//! default constructor
S3DVertexTangents() : S3DVertex() { }
S3DVertexTangents() :
S3DVertex() {}
//! constructor
S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx=0.0f, f32 ny=0.0f, f32 nz=0.0f,
constexpr S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx = 0.0f, f32 ny = 0.0f, f32 nz = 0.0f,
SColor c = 0xFFFFFFFF, f32 tu = 0.0f, f32 tv = 0.0f,
f32 tanx = 0.0f, f32 tany = 0.0f, f32 tanz = 0.0f,
f32 bx=0.0f, f32 by=0.0f, f32 bz=0.0f)
: S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), Tangent(tanx,tany,tanz), Binormal(bx,by,bz) { }
f32 bx = 0.0f, f32 by = 0.0f, f32 bz = 0.0f) :
S3DVertex(x, y, z, nx, ny, nz, c, tu, tv),
Tangent(tanx, tany, tanz), Binormal(bx, by, bz) {}
//! constructor
S3DVertexTangents(const core::vector3df& pos, SColor c,
const core::vector2df& tcoords)
: S3DVertex(pos, core::vector3df(), c, tcoords) { }
constexpr S3DVertexTangents(const core::vector3df &pos, SColor c,
const core::vector2df &tcoords) :
S3DVertex(pos, core::vector3df(), c, tcoords) {}
//! constructor
S3DVertexTangents(const core::vector3df& pos,
constexpr S3DVertexTangents(const core::vector3df &pos,
const core::vector3df &normal, SColor c,
const core::vector2df &tcoords,
const core::vector3df &tangent = core::vector3df(),
const core::vector3df& binormal=core::vector3df())
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
const core::vector3df &binormal = core::vector3df()) :
S3DVertex(pos, normal, c, tcoords),
Tangent(tangent), Binormal(binormal) {}
//! constructor from S3DVertex
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {}
constexpr S3DVertexTangents(const S3DVertex &o) :
S3DVertex(o) {}
//! Tangent vector along the x-axis of the texture
core::vector3df Tangent;
@ -223,21 +234,21 @@ struct S3DVertexTangents : public S3DVertex
//! Binormal vector (tangent x normal)
core::vector3df Binormal;
bool operator==(const S3DVertexTangents& other) const
constexpr bool operator==(const S3DVertexTangents &other) const
{
return ((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) &&
(Tangent == other.Tangent) &&
(Binormal == other.Binormal));
}
bool operator!=(const S3DVertexTangents& other) const
constexpr bool operator!=(const S3DVertexTangents &other) const
{
return ((static_cast<S3DVertex>(*this) != static_cast<const S3DVertex &>(other)) ||
(Tangent != other.Tangent) ||
(Binormal != other.Binormal));
}
bool operator<(const S3DVertexTangents& other) const
constexpr bool operator<(const S3DVertexTangents &other) const
{
return ((static_cast<S3DVertex>(*this) < other) ||
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex &>(other)) && (Tangent < other.Tangent)) ||
@ -261,12 +272,9 @@ struct S3DVertexTangents : public S3DVertex
}
};
inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
{
switch (vertexType)
{
switch (vertexType) {
case video::EVT_2TCOORDS:
return sizeof(video::S3DVertex2TCoords);
case video::EVT_TANGENTS:
@ -276,9 +284,5 @@ inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType)
}
}
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_ANIMATED_MESH_H_INCLUDED__
#define __S_ANIMATED_MESH_H_INCLUDED__
#pragma once
#include "IAnimatedMesh.h"
#include "IMesh.h"
@ -19,7 +18,8 @@ namespace scene
struct SAnimatedMesh : public IAnimatedMesh
{
//! constructor
SAnimatedMesh(scene::IMesh* mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) : IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
SAnimatedMesh(scene::IMesh *mesh = 0, scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) :
IAnimatedMesh(), FramesPerSecond(25.f), Type(type)
{
#ifdef _DEBUG
setDebugName("SAnimatedMesh");
@ -77,8 +77,7 @@ namespace scene
//! adds a Mesh
void addMesh(IMesh *mesh)
{
if (mesh)
{
if (mesh) {
mesh->grab();
Meshes.push_back(mesh);
}
@ -174,9 +173,5 @@ namespace scene
E_ANIMATED_MESH_TYPE Type;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __COLOR_H_INCLUDED__
#define __COLOR_H_INCLUDED__
#pragma once
#include "irrTypes.h"
#include "irrMath.h"
@ -89,8 +88,7 @@ namespace video
};
//! Names for ECOLOR_FORMAT types
const c8* const ColorFormatNames[ECF_UNKNOWN+2] =
{
const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = {
"A1R5G5B5",
"R5G6B5",
"R8G8B8",
@ -109,10 +107,9 @@ namespace video
"D32",
"D24S8",
"UNKNOWN",
0
0,
};
//! Creates a 16 bit A1R5G5B5 color
inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a = 0xFF)
{
@ -122,14 +119,12 @@ namespace video
(b & 0xF8) >> 3);
}
//! Creates a 16 bit A1R5G5B5 color
inline u16 RGB16(u32 r, u32 g, u32 b)
{
return RGBA16(r, g, b);
}
//! Creates a 16bit A1R5G5B5 color, based on 16bit input values
inline u16 RGB16from16(u16 r, u16 g, u16 b)
{
@ -139,7 +134,6 @@ namespace video
(b & 0x1F));
}
//! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color
inline u16 X8R8G8B8toA1R5G5B5(u32 color)
{
@ -149,7 +143,6 @@ namespace video
(color & 0x000000F8) >> 3);
}
//! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color
inline u16 A8R8G8B8toA1R5G5B5(u32 color)
{
@ -159,7 +152,6 @@ namespace video
(color & 0x000000F8) >> 3);
}
//! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color
inline u16 A8R8G8B8toR5G6B5(u32 color)
{
@ -168,7 +160,6 @@ namespace video
(color & 0x000000F8) >> 3);
}
//! Convert A8R8G8B8 Color from A1R5G5B5 color
/** build a nicer 32bit Color by extending dest lower bits with source high bits. */
inline u32 A1R5G5B5toA8R8G8B8(u16 color)
@ -176,11 +167,9 @@ namespace video
return (((-((s32)color & 0x00008000) >> (s32)31) & 0xFF000000) |
((color & 0x00007C00) << 9) | ((color & 0x00007000) << 4) |
((color & 0x000003E0) << 6) | ((color & 0x00000380) << 1) |
(( color & 0x0000001F ) << 3) | (( color & 0x0000001C ) >> 2)
);
((color & 0x0000001F) << 3) | ((color & 0x0000001C) >> 2));
}
//! Returns A8R8G8B8 Color from R5G6B5 color
inline u32 R5G6B5toA8R8G8B8(u16 color)
{
@ -190,22 +179,18 @@ namespace video
((color & 0x001F) << 3);
}
//! Returns A1R5G5B5 Color from R5G6B5 color
inline u16 R5G6B5toA1R5G5B5(u16 color)
{
return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F));
}
//! Returns R5G6B5 Color from A1R5G5B5 color
inline u16 A1R5G5B5toR5G6B5(u16 color)
{
return (((color & 0x7FE0) << 1) | (color & 0x1F));
}
//! Returns the alpha component from A1R5G5B5 color
/** In Irrlicht, alpha refers to opacity.
\return The alpha value of the color. 0 is transparent, 1 is opaque. */
@ -214,7 +199,6 @@ namespace video
return ((color >> 15) & 0x1);
}
//! Returns the red component from A1R5G5B5 color.
/** Shift left by 3 to get 8 bit value. */
inline u32 getRed(u16 color)
@ -222,7 +206,6 @@ namespace video
return ((color >> 10) & 0x1F);
}
//! Returns the green component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */
inline u32 getGreen(u16 color)
@ -230,7 +213,6 @@ namespace video
return ((color >> 5) & 0x1F);
}
//! Returns the blue component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */
inline u32 getBlue(u16 color)
@ -238,14 +220,12 @@ namespace video
return (color & 0x1F);
}
//! Returns the average from a 16 bit A1R5G5B5 color
inline s32 getAverage(s16 color)
{
return ((getRed(color) << 3) + (getGreen(color) << 3) + (getBlue(color) << 3)) / 3;
}
//! Class representing a 32 bit ARGB color.
/** The color values for alpha, red, green, and blue are
stored in a single u32. So all four values may be between 0 and 255.
@ -258,19 +238,18 @@ namespace video
class SColor
{
public:
//! Constructor of the Color. Does nothing.
/** The color value is not initialized to save time. */
SColor() {}
//! Constructs the color from 4 values representing the alpha, red, green and blue component.
/** Must be values between 0 and 255. */
SColor (u32 a, u32 r, u32 g, u32 b)
: color(((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff)) {}
constexpr SColor(u32 a, u32 r, u32 g, u32 b) :
color(((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)) {}
//! Constructs the color from a 32 bit value. Could be another color.
SColor(u32 clr)
: color(clr) {}
constexpr SColor(u32 clr) :
color(clr) {}
//! Returns the alpha component of the color.
/** The alpha component defines how opaque a color is.
@ -419,13 +398,17 @@ namespace video
return SColor(
core::clamp(core::floor32(
getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2 ), 0, 255 ),
getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2),
0, 255),
core::clamp(core::floor32(
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2 ), 0, 255 ),
getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2),
0, 255),
core::clamp(core::floor32(
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2 ), 0, 255 ),
getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2),
0, 255),
core::clamp(core::floor32(
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2 ), 0, 255 ));
getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2),
0, 255));
}
//! set the color by expecting data in the given format
@ -434,8 +417,7 @@ namespace video
*/
void setData(const void *data, ECOLOR_FORMAT format)
{
switch (format)
{
switch (format) {
case ECF_A1R5G5B5:
color = A1R5G5B5toA8R8G8B8(*(u16 *)data);
break;
@ -445,12 +427,10 @@ namespace video
case ECF_A8R8G8B8:
color = *(u32 *)data;
break;
case ECF_R8G8B8:
{
case ECF_R8G8B8: {
const u8 *p = (u8 *)data;
set(255, p[0], p[1], p[2]);
}
break;
} break;
default:
color = 0xffffffff;
break;
@ -463,37 +443,28 @@ namespace video
*/
void getData(void *data, ECOLOR_FORMAT format) const
{
switch(format)
{
case ECF_A1R5G5B5:
{
switch (format) {
case ECF_A1R5G5B5: {
u16 *dest = (u16 *)data;
*dest = video::A8R8G8B8toA1R5G5B5(color);
}
break;
} break;
case ECF_R5G6B5:
{
case ECF_R5G6B5: {
u16 *dest = (u16 *)data;
*dest = video::A8R8G8B8toR5G6B5(color);
}
break;
} break;
case ECF_R8G8B8:
{
case ECF_R8G8B8: {
u8 *dest = (u8 *)data;
dest[0] = (u8)getRed();
dest[1] = (u8)getGreen();
dest[2] = (u8)getBlue();
}
break;
} break;
case ECF_A8R8G8B8:
{
case ECF_A8R8G8B8: {
u32 *dest = (u32 *)data;
*dest = color;
}
break;
} break;
default:
break;
@ -504,7 +475,6 @@ namespace video
u32 color;
};
//! Class representing a color with four floats.
/** The color values for red, green, blue
and alpha are each stored in a 32 bit floating point variable.
@ -517,7 +487,8 @@ namespace video
public:
//! Default constructor for SColorf.
/** Sets red, green and blue to 0.0f and alpha to 1.0f. */
SColorf() : r(0.0f), g(0.0f), b(0.0f), a(1.0f) {}
SColorf() :
r(0.0f), g(0.0f), b(0.0f), a(1.0f) {}
//! Constructs a color from up to four color values: red, green, blue, and alpha.
/** \param r: Red color component. Should be a value between
@ -530,7 +501,8 @@ namespace video
component defines how transparent a color should be. Has to be
a value between 0.0f and 1.0f, 1.0f means not transparent
(opaque), 0.0f means fully transparent. */
SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) : r(r), g(g), b(b), a(a) {}
SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) :
r(r), g(g), b(b), a(a) {}
//! Constructs a color from 32 bit Color.
/** \param c: 32 bit color from which this SColorf class is
@ -557,7 +529,12 @@ namespace video
no green (=black) and 1.0f, meaning full green.
\param bb: Blue color component. Should be a value between 0.0f meaning
no blue (=black) and 1.0f, meaning full blue. */
void set(f32 rr, f32 gg, f32 bb) {r = rr; g =gg; b = bb; }
void set(f32 rr, f32 gg, f32 bb)
{
r = rr;
g = gg;
b = bb;
}
//! Sets all four color components to new values at once.
/** \param aa: Alpha component. Should be a value between 0.0f meaning
@ -568,7 +545,13 @@ namespace video
no green and 1.0f, meaning full green.
\param bb: Blue color component. Should be a value between 0.0f meaning
no blue and 1.0f, meaning full blue. */
void set(f32 aa, f32 rr, f32 gg, f32 bb) {a = aa; r = rr; g =gg; b = bb; }
void set(f32 aa, f32 rr, f32 gg, f32 bb)
{
a = aa;
r = rr;
g = gg;
b = bb;
}
//! Interpolates the color with a f32 value to another color
/** \param other: Other color
@ -602,16 +585,22 @@ namespace video
a * mul0 + c1.a * mul1 + c2.a * mul2);
}
//! Sets a color component by index. R=0, G=1, B=2, A=3
void setColorComponentValue(s32 index, f32 value)
{
switch(index)
{
case 0: r = value; break;
case 1: g = value; break;
case 2: b = value; break;
case 3: a = value; break;
switch (index) {
case 0:
r = value;
break;
case 1:
g = value;
break;
case 2:
b = value;
break;
case 3:
a = value;
break;
}
}
@ -640,7 +629,6 @@ namespace video
f32 a;
};
//! Class representing a color in HSL format
/** The color values for hue, saturation, luminance
are stored in 32bit floating point variables. Hue is in range [0,360],
@ -649,8 +637,8 @@ namespace video
class SColorHSL
{
public:
SColorHSL ( f32 h = 0.f, f32 s = 0.f, f32 l = 0.f )
: Hue ( h ), Saturation ( s ), Luminance ( l ) {}
constexpr SColorHSL(f32 h = 0.f, f32 s = 0.f, f32 l = 0.f) :
Hue(h), Saturation(s), Luminance(l) {}
void fromRGB(const SColorf &color);
void toRGB(SColorf &color) const;
@ -661,7 +649,6 @@ namespace video
private:
inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const;
};
inline void SColorHSL::fromRGB(const SColorf &color)
@ -669,20 +656,16 @@ namespace video
const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue());
const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue());
Luminance = (maxVal + minVal) * 50;
if (core::equals(maxVal, minVal))
{
if (core::equals(maxVal, minVal)) {
Hue = 0.f;
Saturation = 0.f;
return;
}
const f32 delta = maxVal - minVal;
if ( Luminance <= 50 )
{
if (Luminance <= 50) {
Saturation = (delta) / (maxVal + minVal);
}
else
{
} else {
Saturation = (delta) / (2 - maxVal - minVal);
}
Saturation *= 100;
@ -699,24 +682,19 @@ namespace video
Hue += 360;
}
inline void SColorHSL::toRGB(SColorf &color) const
{
const f32 l = Luminance / 100;
if (core::iszero(Saturation)) // grey
{
if (core::iszero(Saturation)) { // grey
color.set(l, l, l);
return;
}
f32 rm2;
if ( Luminance <= 50 )
{
if (Luminance <= 50) {
rm2 = l + l * (Saturation / 100);
}
else
{
} else {
rm2 = l + (1 - l) * (Saturation / 100);
}
@ -725,11 +703,9 @@ namespace video
const f32 h = Hue / 360.0f;
color.set(toRGB1(rm1, rm2, h + 1.f / 3.f),
toRGB1(rm1, rm2, h),
toRGB1(rm1, rm2, h - 1.f/3.f)
);
toRGB1(rm1, rm2, h - 1.f / 3.f));
}
// algorithm from Foley/Van-Dam
inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const
{
@ -750,5 +726,3 @@ namespace video
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__
#pragma once
namespace irr
{
@ -18,8 +17,18 @@ you are using the software or the null device.
*/
struct SExposedVideoData
{
SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;}
explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;}
SExposedVideoData()
{
OpenGLWin32.HDc = 0;
OpenGLWin32.HRc = 0;
OpenGLWin32.HWnd = 0;
}
explicit SExposedVideoData(void *Window)
{
OpenGLWin32.HDc = 0;
OpenGLWin32.HRc = 0;
OpenGLWin32.HWnd = Window;
}
struct SOpenGLWin32
{
@ -78,7 +87,3 @@ struct SExposedVideoData
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__
#define __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__
#pragma once
#include "EDriverTypes.h"
#include "EDeviceTypes.h"
@ -35,10 +34,8 @@ namespace irr
Stencilbuffer(true),
Vsync(false),
AntiAlias(0),
HandleSRGB(false),
WithAlphaChannel(false),
Doublebuffer(true),
IgnoreInput(false),
Stereobuffer(false),
EventReceiver(0),
WindowId(0),
@ -59,7 +56,9 @@ namespace irr
SIrrlichtCreationParameters(const SIrrlichtCreationParameters &other) :
SDK_version_do_not_use(IRRLICHT_SDK_VERSION)
{*this = other;}
{
*this = other;
}
SIrrlichtCreationParameters &operator=(const SIrrlichtCreationParameters &other)
{
@ -75,10 +74,8 @@ namespace irr
Stencilbuffer = other.Stencilbuffer;
Vsync = other.Vsync;
AntiAlias = other.AntiAlias;
HandleSRGB = other.HandleSRGB;
WithAlphaChannel = other.WithAlphaChannel;
Doublebuffer = other.Doublebuffer;
IgnoreInput = other.IgnoreInput;
Stereobuffer = other.Stereobuffer;
EventReceiver = other.EventReceiver;
WindowId = other.WindowId;
@ -159,21 +156,6 @@ namespace irr
Default value: 0 - disabled */
u8 AntiAlias;
//! Flag to enable proper sRGB and linear color handling
/** In most situations, it is desirable to have the color handling in
non-linear sRGB color space, and only do the intermediate color
calculations in linear RGB space. If this flag is enabled, the device and
driver try to assure that all color input and output are color corrected
and only the internal color representation is linear. This means, that
the color output is properly gamma-adjusted to provide the brighter
colors for monitor display. And that blending and lighting give a more
natural look, due to proper conversion from non-linear colors into linear
color space for blend operations. If this flag is enabled, all texture colors
(which are usually in sRGB space) are correctly displayed. However vertex colors
and other explicitly set values have to be manually encoded in linear color space.
Default value: false. */
bool HandleSRGB;
//! Whether the main framebuffer uses an alpha channel.
/** In some situations it might be desirable to get a color
buffer with an alpha channel, e.g. when rendering into a
@ -193,13 +175,6 @@ namespace irr
single buffers. Default value: true */
bool Doublebuffer;
//! Specifies if the device should ignore input events
/** This is only relevant when using external I/O handlers.
External windows need to take care of this themselves.
Currently only supported by X11.
Default value: false */
bool IgnoreInput;
//! Specifies if the device should use stereo buffers
/** Some high-end gfx cards support two framebuffers for direct
support of stereoscopic output devices. If this flag is set the
@ -289,8 +264,4 @@ namespace irr
irr::io::path OGLES2ShaderPath;
};
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_MATERIAL_H_INCLUDED__
#define __S_MATERIAL_H_INCLUDED__
#pragma once
#include "SColor.h"
#include "matrix4.h"
@ -164,8 +163,7 @@ namespace video
//! has blend factor alphablending
inline bool textureBlendFunc_hasAlpha(const E_BLEND_FACTOR factor)
{
switch ( factor )
{
switch (factor) {
case EBF_SRC_ALPHA:
case EBF_ONE_MINUS_SRC_ALPHA:
case EBF_DST_ALPHA:
@ -177,7 +175,6 @@ namespace video
}
}
//! These flags are used to specify the anti-aliasing and smoothing modes
/** Techniques supported are multisampling, geometry smoothing, and alpha
to coverage.
@ -193,16 +190,9 @@ namespace video
EAAM_SIMPLE = 1,
//! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode
EAAM_QUALITY = 3,
//! Line smoothing
//! Careful, enabling this can lead to software emulation under OpenGL
EAAM_LINE_SMOOTH=4,
//! point smoothing, often in software and slow, only with OpenGL
EAAM_POINT_SMOOTH=8,
//! All typical anti-alias and smooth modes
EAAM_FULL_BASIC=15,
//! Enhanced anti-aliasing for transparent materials
/** Usually used with EMT_TRANSPARENT_ALPHA_CHANNEL_REF and multisampling. */
EAAM_ALPHA_TO_COVERAGE=16
EAAM_ALPHA_TO_COVERAGE = 4
};
//! These flags allow to define the interpretation of vertex color when lighting is enabled
@ -229,11 +219,10 @@ namespace video
};
//! Names for polygon offset direction
const c8* const PolygonOffsetDirectionNames[] =
{
const c8 *const PolygonOffsetDirectionNames[] = {
"Back",
"Front",
0
0,
};
//! For SMaterial.ZWriteEnable
@ -254,16 +243,13 @@ namespace video
};
//! Names for E_ZWRITE
const c8* const ZWriteNames[] =
{
const c8 *const ZWriteNames[] = {
"Off",
"Auto",
"On",
0
0,
};
//! Maximum number of texture an SMaterial can have.
/** SMaterial might ignore some textures in most function, like assignment and comparison,
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
@ -287,7 +273,8 @@ namespace video
GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO),
BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false),
NormalizeNormals(false), UseMipMaps(true)
{ }
{
}
//! Texture layer array.
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
@ -438,7 +425,8 @@ namespace video
/** Useful for setting properties which are not per material, but per
texture layer, e.g. bilinear filtering. */
template <typename F>
void forEachTexture(F &&fn) {
void forEachTexture(F &&fn)
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
fn(TextureLayers[i]);
}
@ -523,10 +511,8 @@ namespace video
BlendFactor != b.BlendFactor ||
PolygonOffsetDepthBias != b.PolygonOffsetDepthBias ||
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
UseMipMaps != b.UseMipMaps
;
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
{
UseMipMaps != b.UseMipMaps;
for (u32 i = 0; (i < MATERIAL_MAX_TEXTURES) && !different; ++i) {
different |= (TextureLayers[i] != b.TextureLayers[i]);
}
return different;
@ -536,13 +522,14 @@ namespace video
/** \param b Material to compare to.
\return True if the materials are equal, else false. */
inline bool operator==(const SMaterial &b) const
{ return !(b!=*this); }
{
return !(b != *this);
}
//! Check if material needs alpha blending
bool isAlphaBlendOperation() const
{
if (BlendOperation != EBO_NONE && BlendFactor != 0.f)
{
if (BlendOperation != EBO_NONE && BlendFactor != 0.f) {
E_BLEND_FACTOR srcRGBFact = EBF_ZERO;
E_BLEND_FACTOR dstRGBFact = EBF_ZERO;
E_BLEND_FACTOR srcAlphaFact = EBF_ZERO;
@ -553,8 +540,7 @@ namespace video
unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, BlendFactor);
if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) ||
textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact))
{
textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact)) {
return true;
}
}
@ -578,5 +564,3 @@ namespace video
IRRLICHT_API extern SMaterial IdentityMaterial;
} // end namespace video
} // end namespace irr
#endif

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_MATERIAL_LAYER_H_INCLUDED__
#define __S_MATERIAL_LAYER_H_INCLUDED__
#pragma once
#include "matrix4.h"
@ -43,11 +42,11 @@ namespace video
"texture_clamp_mirror_clamp_to_edge",
"texture_clamp_mirror_clamp_to_border", 0};
//! Texture minification filter.
/** Used when scaling textures down. See the documentation on OpenGL's
`GL_TEXTURE_MIN_FILTER` for more information. */
enum E_TEXTURE_MIN_FILTER {
enum E_TEXTURE_MIN_FILTER
{
//! Aka nearest-neighbor.
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
//! Aka bilinear.
@ -62,7 +61,8 @@ namespace video
/** Used when scaling textures up. See the documentation on OpenGL's
`GL_TEXTURE_MAG_FILTER` for more information.
Note that mipmaps are only used for minification, not for magnification. */
enum E_TEXTURE_MAG_FILTER {
enum E_TEXTURE_MAG_FILTER
{
//! Aka nearest-neighbor.
ETMAGF_NEAREST = 0,
//! Aka bilinear.
@ -75,7 +75,8 @@ namespace video
{
public:
//! Default constructor
SMaterialLayer() : Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
SMaterialLayer() :
Texture(0), TextureWrapU(ETC_REPEAT), TextureWrapV(ETC_REPEAT), TextureWrapW(ETC_REPEAT),
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
{
}
@ -92,8 +93,7 @@ namespace video
//! Destructor
~SMaterialLayer()
{
if ( TextureMatrix )
{
if (TextureMatrix) {
delete TextureMatrix;
}
}
@ -108,23 +108,17 @@ namespace video
return *this;
Texture = other.Texture;
if (TextureMatrix)
{
if (TextureMatrix) {
if (other.TextureMatrix)
*TextureMatrix = *other.TextureMatrix;
else
{
else {
delete TextureMatrix;
TextureMatrix = 0;
}
}
else
{
if (other.TextureMatrix)
{
} else {
if (other.TextureMatrix) {
TextureMatrix = new core::matrix4(*other.TextureMatrix);
}
else
} else
TextureMatrix = 0;
}
TextureWrapU = other.TextureWrapU;
@ -142,8 +136,7 @@ namespace video
/** \return Texture matrix of this layer. */
core::matrix4 &getTextureMatrix()
{
if (!TextureMatrix)
{
if (!TextureMatrix) {
TextureMatrix = new core::matrix4();
}
return *TextureMatrix;
@ -165,11 +158,9 @@ namespace video
\param mat New texture matrix for this layer. */
void setTextureMatrix(const core::matrix4 &mat)
{
if (!TextureMatrix)
{
if (!TextureMatrix) {
TextureMatrix = new core::matrix4(mat);
}
else
} else
*TextureMatrix = mat;
}
@ -199,7 +190,9 @@ namespace video
/** \param b Layer to compare to.
\return True if layers are equal, else false. */
inline bool operator==(const SMaterialLayer &b) const
{ return !(b!=*this); }
{
return !(b != *this);
}
//! Texture
ITexture *Texture;
@ -243,5 +236,3 @@ namespace video
} // end namespace video
} // end namespace irr
#endif // __S_MATERIAL_LAYER_H_INCLUDED__

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_MESH_H_INCLUDED__
#define __S_MESH_H_INCLUDED__
#pragma once
#include "IMesh.h"
#include "IMeshBuffer.h"
@ -42,7 +41,6 @@ namespace scene
BoundingBox.reset(0.f, 0.f, 0.f);
}
//! returns amount of mesh buffers.
u32 getMeshBufferCount() const override
{
@ -59,8 +57,7 @@ namespace scene
/** reverse search */
IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const override
{
for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i)
{
for (s32 i = (s32)MeshBuffers.size() - 1; i >= 0; --i) {
if (material == MeshBuffers[i]->getMaterial())
return MeshBuffers[i];
}
@ -84,21 +81,15 @@ namespace scene
void recalculateBoundingBox()
{
bool hasMeshBufferBBox = false;
for (u32 i=0; i<MeshBuffers.size(); ++i)
{
for (u32 i = 0; i < MeshBuffers.size(); ++i) {
const core::aabbox3df &bb = MeshBuffers[i]->getBoundingBox();
if ( !bb.isEmpty() )
{
if ( !hasMeshBufferBBox )
{
if (!bb.isEmpty()) {
if (!hasMeshBufferBBox) {
hasMeshBufferBBox = true;
BoundingBox = bb;
}
else
{
} else {
BoundingBox.addInternalBox(bb);
}
}
}
@ -110,8 +101,7 @@ namespace scene
/** The bounding box is not updated automatically. */
void addMeshBuffer(IMeshBuffer *buf)
{
if (buf)
{
if (buf) {
buf->grab();
MeshBuffers.push_back(buf);
}
@ -138,9 +128,5 @@ namespace scene
core::aabbox3d<f32> BoundingBox;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -4,4 +4,3 @@
// replaced by template
#include "CMeshBuffer.h"

View File

@ -2,8 +2,7 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __S_OVERRIDE_MATERIAL_H_INCLUDED__
#define __S_OVERRIDE_MATERIAL_H_INCLUDED__
#pragma once
#include "SMaterial.h"
@ -44,8 +43,10 @@ namespace video
struct SMaterialTypeReplacement
{
SMaterialTypeReplacement(s32 original, u32 replacement) : Original(original), Replacement(replacement) {}
SMaterialTypeReplacement(u32 replacement) : Original(-1), Replacement(replacement) {}
SMaterialTypeReplacement(s32 original, u32 replacement) :
Original(original), Replacement(replacement) {}
SMaterialTypeReplacement(u32 replacement) :
Original(-1), Replacement(replacement) {}
//! SMaterial.MaterialType to replace.
//! -1 for all types or a specific value to only replace that one (which is either one of E_MATERIAL_TYPE or a shader material id)
@ -59,7 +60,8 @@ namespace video
core::array<SMaterialTypeReplacement> MaterialTypes;
//! Default constructor
SOverrideMaterial() : EnableProps(0), EnablePasses(0), Enabled(false)
SOverrideMaterial() :
EnableProps(0), EnablePasses(0), Enabled(false)
{
}
@ -69,8 +71,7 @@ namespace video
EnableProps = 0;
EnablePasses = 0;
Enabled = false;
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
EnableLayerProps[i] = true; // doesn't do anything unless EnableProps is set, just saying by default all texture layers are affected by properties
EnableTextures[i] = false;
EnableLayers[i] = false;
@ -81,75 +82,94 @@ namespace video
//! Apply the enabled overrides
void apply(SMaterial &material)
{
if (Enabled)
{
for (u32 i = 0; i < MaterialTypes.size(); ++i)
{
if (Enabled) {
for (u32 i = 0; i < MaterialTypes.size(); ++i) {
const SMaterialTypeReplacement &mtr = MaterialTypes[i];
if (mtr.Original < 0 || (s32)mtr.Original == material.MaterialType)
material.MaterialType = (E_MATERIAL_TYPE)mtr.Replacement;
}
for (u32 f=0; f<32; ++f)
{
for (u32 f = 0; f < 32; ++f) {
const u32 num = (1 << f);
if (EnableProps & num)
{
switch (num)
{
case EMP_WIREFRAME: material.Wireframe = Material.Wireframe; break;
case EMP_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
case EMP_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
case EMP_LIGHTING: material.Lighting = Material.Lighting; break;
case EMP_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
case EMP_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
case EMP_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
case EMP_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
if (EnableProps & num) {
switch (num) {
case EMP_WIREFRAME:
material.Wireframe = Material.Wireframe;
break;
case EMP_POINTCLOUD:
material.PointCloud = Material.PointCloud;
break;
case EMP_GOURAUD_SHADING:
material.GouraudShading = Material.GouraudShading;
break;
case EMP_LIGHTING:
material.Lighting = Material.Lighting;
break;
case EMP_ZBUFFER:
material.ZBuffer = Material.ZBuffer;
break;
case EMP_ZWRITE_ENABLE:
material.ZWriteEnable = Material.ZWriteEnable;
break;
case EMP_BACK_FACE_CULLING:
material.BackfaceCulling = Material.BackfaceCulling;
break;
case EMP_FRONT_FACE_CULLING:
material.FrontfaceCulling = Material.FrontfaceCulling;
break;
case EMP_MIN_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
if ( EnableLayerProps[i] )
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
if (EnableLayerProps[i]) {
material.TextureLayers[i].MinFilter = Material.TextureLayers[i].MinFilter;
}
}
break;
case EMP_MAG_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
if ( EnableLayerProps[i] )
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
if (EnableLayerProps[i]) {
material.TextureLayers[i].MagFilter = Material.TextureLayers[i].MagFilter;
}
}
break;
case EMP_ANISOTROPIC_FILTER:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
if ( EnableLayerProps[i] )
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
if (EnableLayerProps[i]) {
material.TextureLayers[i].AnisotropicFilter = Material.TextureLayers[i].AnisotropicFilter;
}
}
break;
case EMP_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
case EMP_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
case EMP_FOG_ENABLE:
material.FogEnable = Material.FogEnable;
break;
case EMP_NORMALIZE_NORMALS:
material.NormalizeNormals = Material.NormalizeNormals;
break;
case EMP_TEXTURE_WRAP:
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
if ( EnableLayerProps[i] )
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
if (EnableLayerProps[i]) {
material.TextureLayers[i].TextureWrapU = Material.TextureLayers[i].TextureWrapU;
material.TextureLayers[i].TextureWrapV = Material.TextureLayers[i].TextureWrapV;
material.TextureLayers[i].TextureWrapW = Material.TextureLayers[i].TextureWrapW;
}
}
break;
case EMP_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
case EMP_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
case EMP_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
case EMP_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
case EMP_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
case EMP_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
case EMP_ANTI_ALIASING:
material.AntiAliasing = Material.AntiAliasing;
break;
case EMP_COLOR_MASK:
material.ColorMask = Material.ColorMask;
break;
case EMP_COLOR_MATERIAL:
material.ColorMaterial = Material.ColorMaterial;
break;
case EMP_USE_MIP_MAPS:
material.UseMipMaps = Material.UseMipMaps;
break;
case EMP_BLEND_OPERATION:
material.BlendOperation = Material.BlendOperation;
break;
case EMP_BLEND_FACTOR:
material.BlendFactor = Material.BlendFactor;
break;
case EMP_POLYGON_OFFSET:
material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias;
material.PolygonOffsetSlopeScale = Material.PolygonOffsetSlopeScale;
@ -157,24 +177,16 @@ namespace video
}
}
}
for(u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i )
{
if ( EnableLayers[i] )
{
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) {
if (EnableLayers[i]) {
material.TextureLayers[i] = Material.TextureLayers[i];
}
else if ( EnableTextures[i] )
{
} else if (EnableTextures[i]) {
material.TextureLayers[i].Texture = Material.TextureLayers[i].Texture;
}
}
}
}
};
} // end namespace video
} // end namespace irr
#endif // __S_OVERRIDE_MATERIAL_H_INCLUDED__

Some files were not shown because too many files have changed in this diff Show More