mirror of
https://github.com/minetest/irrlicht.git
synced 2025-07-03 00:30:26 +02:00
Compare commits
151 Commits
Author | SHA1 | Date | |
---|---|---|---|
c311d01c07 | |||
d7f75ae882 | |||
e0d4d7d8b4 | |||
fb7a0e4298 | |||
a994c31ccf | |||
c40045a40a | |||
c0ef1092c0 | |||
5ececc7d29 | |||
9e0189019e | |||
b249e4523d | |||
041377c24c | |||
83699a835d | |||
98589d2fd2 | |||
8c856408f5 | |||
cbc7aeb302 | |||
09af5ac00d | |||
2c6efbdf06 | |||
510976f130 | |||
b958fdc271 | |||
1387370260 | |||
49b6ccde72 | |||
acbc90a000 | |||
6a2a569233 | |||
1f15fd0805 | |||
81ad195aa3 | |||
13680ef42d | |||
44f7c22bbf | |||
2e477a07d1 | |||
78d0819a2c | |||
df07b3bf99 | |||
523590e16c | |||
8cf02ea27f | |||
efb660e7ed | |||
5f88555ed3 | |||
4ee1ab261e | |||
ab628e641c | |||
1d782702e1 | |||
c4ab49201b | |||
896c825b9e | |||
7a3fc62ada | |||
09043e3da7 | |||
2d81374b34 | |||
aa1696a7e6 | |||
e01f285c8f | |||
5eb607f86f | |||
fc0440ff89 | |||
462657960d | |||
6a152e8629 | |||
718ba69e1b | |||
54314691ec | |||
36a3a7f349 | |||
ca5f005b74 | |||
e850bd102a | |||
a677f5a01a | |||
f5d3448b17 | |||
3a074e4124 | |||
70ee4b05aa | |||
58a96b7d23 | |||
ba1cd19983 | |||
a67f3003de | |||
4dda28450f | |||
219b7fd7d2 | |||
28d0e0644c | |||
d97d1708d6 | |||
799c8b936f | |||
8da1bcf58b | |||
d86abb40c1 | |||
53b9eaa831 | |||
1967d71cfb | |||
c5373262ca | |||
939b3f7bfb | |||
9c2c91776e | |||
6f3435f349 | |||
9f9d22ca33 | |||
edb381bd50 | |||
8ffa7eafea | |||
2bff147904 | |||
3cf75cdce4 | |||
a7f9afd289 | |||
98df6eae77 | |||
3ce4b2b5dc | |||
424eb85f4d | |||
6a9e0f109c | |||
15e3f15b48 | |||
263f243523 | |||
c5ee8c8397 | |||
b0c03b6f3b | |||
679d3a8ba7 | |||
d1f441787a | |||
739a9eaf7c | |||
0acf0de2db | |||
52a0b9d8e5 | |||
0160cdc51d | |||
5a1565072a | |||
25a7074c9a | |||
df8881898d | |||
ba77d01c91 | |||
f641500d01 | |||
02c6449f0d | |||
2331083837 | |||
d84dc18e13 | |||
ea0ca7f917 | |||
82d1feb933 | |||
d81db9dd6d | |||
6c68217426 | |||
21c61e9973 | |||
5a5a7d04b7 | |||
b279810437 | |||
e484698ba2 | |||
5f76be9380 | |||
6de0afa8b3 | |||
1d43ea17ca | |||
a6d062ebd9 | |||
2e9ed529b1 | |||
ceb53be9e3 | |||
df28a4cc46 | |||
8dd8652f5f | |||
2932065346 | |||
1326dfbcb1 | |||
1bbe341daa | |||
d6716ec31b | |||
620f4869a1 | |||
05384fdc5e | |||
48270029cd | |||
c5ce853148 | |||
4fba496917 | |||
79fdab0551 | |||
608aa150ff | |||
1f750cd7b2 | |||
8c521939b9 | |||
cfa8dd7845 | |||
01295c9ce6 | |||
5a95b40a0e | |||
8efd4527f6 | |||
a0e1e39ea7 | |||
d8e09f14bd | |||
67f852be57 | |||
5a2b807890 | |||
06db7b7ab7 | |||
09e6eeb65b | |||
839bdc1a65 | |||
ea297196b7 | |||
38f18eec56 | |||
5527b9f373 | |||
cd3e784534 | |||
51dffc416a | |||
8f13ae81e5 | |||
3de3ff524a | |||
7d3142b969 | |||
a9230e5f49 | |||
b5a6dc0a15 |
@ -1,3 +1,5 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
|
|
||||||
|
76
.github/workflows/build.yml
vendored
76
.github/workflows/build.yml
vendored
@ -48,9 +48,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
sed '/#define _IRR_COMPILE_WITH_OGLES2_/ s|^//||g' -i include/IrrCompileConfig.h
|
cmake . -DBUILD_EXAMPLES=1 -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
sed '/#define _IRR_COMPILE_WITH_OPENGL_/ s|^|//|g' -i include/IrrCompileConfig.h
|
|
||||||
cmake . -DBUILD_EXAMPLES=1
|
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
@ -61,7 +59,7 @@ jobs:
|
|||||||
- name: Test (Xvfb)
|
- name: Test (Xvfb)
|
||||||
run: |
|
run: |
|
||||||
cd bin/Linux
|
cd bin/Linux
|
||||||
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
linux-sdl:
|
linux-sdl:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -77,8 +75,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
sed '/#define _IRR_COMPILE_WITH_SDL_DEVICE_/ s|^//||g' -i include/IrrCompileConfig.h
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON
|
||||||
cmake . -DBUILD_EXAMPLES=1
|
|
||||||
make -j2
|
make -j2
|
||||||
|
|
||||||
- name: Test (headless)
|
- name: Test (headless)
|
||||||
@ -86,6 +83,60 @@ jobs:
|
|||||||
cd bin/Linux
|
cd bin/Linux
|
||||||
./AutomatedTest null
|
./AutomatedTest null
|
||||||
|
|
||||||
|
linux-sdl-gl3:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
|
- name: Test (Xvfb)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3
|
||||||
|
|
||||||
|
linux-sdl-gles2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:jammy
|
||||||
|
env: { LANG: "C.UTF-8" }
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
- name: Test (headless)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
./AutomatedTest null
|
||||||
|
|
||||||
|
- name: Test (Xvfb)
|
||||||
|
run: |
|
||||||
|
cd bin/Linux
|
||||||
|
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2
|
||||||
|
|
||||||
win32:
|
win32:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
@ -149,7 +200,7 @@ jobs:
|
|||||||
./bin/OSX/AutomatedTest null
|
./bin/OSX/AutomatedTest null
|
||||||
|
|
||||||
msvc:
|
msvc:
|
||||||
name: VS 2019 ${{ matrix.config.arch }}
|
name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
|
||||||
runs-on: windows-2019
|
runs-on: windows-2019
|
||||||
env:
|
env:
|
||||||
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
VCPKG_VERSION: 14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44
|
||||||
@ -167,6 +218,14 @@ jobs:
|
|||||||
arch: x64
|
arch: x64
|
||||||
generator: "-G'Visual Studio 16 2019' -A x64"
|
generator: "-G'Visual Studio 16 2019' -A x64"
|
||||||
vcpkg_triplet: x64-windows
|
vcpkg_triplet: x64-windows
|
||||||
|
sdl:
|
||||||
|
-
|
||||||
|
use: FALSE
|
||||||
|
label: '(no SDL)'
|
||||||
|
-
|
||||||
|
use: TRUE
|
||||||
|
label: '(with SDL)'
|
||||||
|
vcpkg_packages: sdl2
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@ -175,7 +234,7 @@ jobs:
|
|||||||
- name: Restore from cache and run vcpkg
|
- name: Restore from cache and run vcpkg
|
||||||
uses: lukka/run-vcpkg@v7
|
uses: lukka/run-vcpkg@v7
|
||||||
with:
|
with:
|
||||||
vcpkgArguments: ${{env.vcpkg_packages}}
|
vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
|
||||||
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
|
||||||
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
|
||||||
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
|
||||||
@ -184,6 +243,7 @@ jobs:
|
|||||||
- name: CMake
|
- name: CMake
|
||||||
run: |
|
run: |
|
||||||
cmake ${{matrix.config.generator}} `
|
cmake ${{matrix.config.generator}} `
|
||||||
|
-DUSE_SDL2=${{matrix.sdl.use}} `
|
||||||
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
|
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
|
||||||
-DCMAKE_BUILD_TYPE=Release .
|
-DCMAKE_BUILD_TYPE=Release .
|
||||||
|
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -19,3 +19,6 @@ scripts/glext.h
|
|||||||
*.dir/
|
*.dir/
|
||||||
*.sln
|
*.sln
|
||||||
*visualstudio/
|
*visualstudio/
|
||||||
|
|
||||||
|
# vscode cmake plugin
|
||||||
|
build/*
|
@ -1,13 +1,13 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
# Set policies up to 3.9 since we want to enable the IPO option
|
# >=3.9 enables IPO; >=3.11 prefers GLVND
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 3.9)
|
if(${CMAKE_VERSION} VERSION_LESS 3.11)
|
||||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||||
else()
|
else()
|
||||||
cmake_policy(VERSION 3.9)
|
cmake_policy(VERSION 3.11)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(IRRLICHTMT_REVISION 9)
|
set(IRRLICHTMT_REVISION 12)
|
||||||
|
|
||||||
project(Irrlicht
|
project(Irrlicht
|
||||||
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
VERSION 1.9.0.${IRRLICHTMT_REVISION}
|
||||||
|
@ -20,6 +20,11 @@ The following libraries are required to be installed:
|
|||||||
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
|
Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available:
|
||||||
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
|
* `BUILD_SHARED_LIBS` (default: `ON`) - Build IrrlichtMt as a shared library
|
||||||
* `BUILD_EXAMPLES` (default: `OFF`) - Build example applications
|
* `BUILD_EXAMPLES` (default: `OFF`) - Build example applications
|
||||||
|
* `ENABLE_OPENGL` - Enable OpenGL driver
|
||||||
|
* `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver
|
||||||
|
* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy
|
||||||
|
* `ENABLE_GLES2` - Enable OpenGL ES 2+ driver
|
||||||
|
* `USE_SDL2` (default: `OFF`) - Use SDL2 instead of native platform device
|
||||||
|
|
||||||
e.g. on a Linux system you might want to build for local use like this:
|
e.g. on a Linux system you might want to build for local use like this:
|
||||||
|
|
||||||
|
5527
changes.txt
5527
changes.txt
File diff suppressed because it is too large
Load Diff
@ -10,15 +10,19 @@ static int test_fail = 0;
|
|||||||
void test_irr_array();
|
void test_irr_array();
|
||||||
void test_irr_string();
|
void test_irr_string();
|
||||||
|
|
||||||
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_)
|
||||||
{
|
{
|
||||||
if (core::stringc(arg_) == "null")
|
if (arg_ == "null")
|
||||||
return video::EDT_NULL;
|
return video::EDT_NULL;
|
||||||
|
if (arg_ == "ogles1")
|
||||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
|
|
||||||
return video::EDT_OGLES1;
|
return video::EDT_OGLES1;
|
||||||
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))
|
if (arg_ == "ogles2")
|
||||||
return video::EDT_OGLES2;
|
return video::EDT_OGLES2;
|
||||||
|
if (arg_ == "opengl")
|
||||||
|
return video::EDT_OPENGL;
|
||||||
|
if (arg_ == "opengl3")
|
||||||
|
return video::EDT_OPENGL3;
|
||||||
|
std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl;
|
||||||
return video::EDT_OPENGL;
|
return video::EDT_OPENGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,8 +87,12 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
const io::path mediaPath = getExampleMediaPath();
|
const io::path mediaPath = getExampleMediaPath();
|
||||||
|
|
||||||
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
|
auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x");
|
||||||
|
check(mesh_file, "mesh file loading");
|
||||||
|
scene::IAnimatedMesh* mesh = smgr->getMesh(mesh_file);
|
||||||
check(mesh, "mesh loading");
|
check(mesh, "mesh loading");
|
||||||
|
if (mesh_file)
|
||||||
|
mesh_file->drop();
|
||||||
if (mesh)
|
if (mesh)
|
||||||
{
|
{
|
||||||
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
|
||||||
@ -92,10 +100,12 @@ int main(int argc, char *argv[])
|
|||||||
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
node->setMaterialFlag(video::EMF_LIGHTING, false);
|
node->forEachMaterial([tex] (video::SMaterial &mat) {
|
||||||
|
mat.Lighting = false;
|
||||||
|
mat.setTexture(0, tex);
|
||||||
|
});
|
||||||
node->setFrameLoop(0, 29);
|
node->setFrameLoop(0, 29);
|
||||||
node->setAnimationSpeed(30);
|
node->setAnimationSpeed(30);
|
||||||
node->setMaterialTexture(0, tex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
set(IRREXAMPLES
|
set(IRREXAMPLES
|
||||||
|
@ -75,18 +75,18 @@ namespace scene
|
|||||||
CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0),
|
CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0),
|
||||||
MappingHint(EHM_NEVER), ChangedID(1)
|
MappingHint(EHM_NEVER), ChangedID(1)
|
||||||
{
|
{
|
||||||
setType(vertexType);
|
CVertexBuffer::setType(vertexType);
|
||||||
}
|
}
|
||||||
|
|
||||||
CVertexBuffer(const IVertexBuffer &VertexBufferCopy) :
|
CVertexBuffer(const IVertexBuffer &VertexBufferCopy) :
|
||||||
Vertices(0), MappingHint(EHM_NEVER),
|
Vertices(0), MappingHint(EHM_NEVER),
|
||||||
ChangedID(1)
|
ChangedID(1)
|
||||||
{
|
{
|
||||||
setType(VertexBufferCopy.getType());
|
CVertexBuffer::setType(VertexBufferCopy.getType());
|
||||||
reallocate(VertexBufferCopy.size());
|
CVertexBuffer::reallocate(VertexBufferCopy.size());
|
||||||
|
|
||||||
for (u32 n=0;n<VertexBufferCopy.size();++n)
|
for (u32 n=0;n<VertexBufferCopy.size();++n)
|
||||||
push_back(VertexBufferCopy[n]);
|
CVertexBuffer::push_back(VertexBufferCopy[n]);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~CVertexBuffer()
|
virtual ~CVertexBuffer()
|
||||||
@ -97,6 +97,9 @@ namespace scene
|
|||||||
|
|
||||||
void setType(video::E_VERTEX_TYPE vertexType) override
|
void setType(video::E_VERTEX_TYPE vertexType) override
|
||||||
{
|
{
|
||||||
|
if ( Vertices && Vertices->getType() == vertexType )
|
||||||
|
return;
|
||||||
|
|
||||||
IVertexList *NewVertices=0;
|
IVertexList *NewVertices=0;
|
||||||
|
|
||||||
switch (vertexType)
|
switch (vertexType)
|
||||||
|
@ -28,9 +28,6 @@ namespace scene
|
|||||||
//! Overlays Mesh Wireframe
|
//! Overlays Mesh Wireframe
|
||||||
EDS_MESH_WIRE_OVERLAY = 8,
|
EDS_MESH_WIRE_OVERLAY = 8,
|
||||||
|
|
||||||
//! Temporary use transparency Material Type
|
|
||||||
EDS_HALF_TRANSPARENCY = 16,
|
|
||||||
|
|
||||||
//! Show Bounding Boxes of all MeshBuffers
|
//! Show Bounding Boxes of all MeshBuffers
|
||||||
EDS_BBOX_BUFFERS = 32,
|
EDS_BBOX_BUFFERS = 32,
|
||||||
|
|
||||||
|
@ -24,14 +24,10 @@ namespace irr
|
|||||||
//! A device native to Mac OSX
|
//! A device native to Mac OSX
|
||||||
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
/** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */
|
||||||
EIDT_OSX,
|
EIDT_OSX,
|
||||||
|
|
||||||
//! A device native to the iOS
|
|
||||||
/** This device should be used with the OpenGL-ES driver. */
|
|
||||||
EIDT_IOS,
|
|
||||||
|
|
||||||
//! A device which uses Simple DirectMedia Layer
|
//! A device which uses Simple DirectMedia Layer
|
||||||
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
/** The SDL device works under all platforms supported by SDL but first must be compiled
|
||||||
in by defining the _IRR_COMPILE_WITH_SDL_DEVICE_ macro in IrrCompileConfig.h */
|
in by setting the USE_SDL2 CMake option to ON */
|
||||||
EIDT_SDL,
|
EIDT_SDL,
|
||||||
|
|
||||||
//! This selection allows Irrlicht to choose the best device from the ones available.
|
//! This selection allows Irrlicht to choose the best device from the ones available.
|
||||||
|
@ -20,31 +20,11 @@ namespace video
|
|||||||
render and display any graphics. */
|
render and display any graphics. */
|
||||||
EDT_NULL,
|
EDT_NULL,
|
||||||
|
|
||||||
//! The Irrlicht Engine Software renderer.
|
// obsolete constants to make some code happy
|
||||||
/** Runs on all platforms, with every hardware. It should only
|
// TODO delete
|
||||||
be used for 2d graphics, but it can also perform some primitive
|
|
||||||
3d functions. These 3d drawing functions are quite fast, but
|
|
||||||
very inaccurate, and don't even support clipping in 3D mode. */
|
|
||||||
EDT_SOFTWARE,
|
EDT_SOFTWARE,
|
||||||
|
|
||||||
//! The Burning's Software Renderer, an alternative software renderer
|
|
||||||
/** Basically it can be described as the Irrlicht Software
|
|
||||||
renderer on steroids. It rasterizes 3D geometry perfectly: It
|
|
||||||
is able to perform correct 3d clipping, perspective correct
|
|
||||||
texture mapping, perspective correct color mapping, and renders
|
|
||||||
sub pixel correct, sub texel correct primitives. In addition,
|
|
||||||
it does bilinear texel filtering and supports more materials
|
|
||||||
than the EDT_SOFTWARE driver. This renderer has been written
|
|
||||||
entirely by Thomas Alten, thanks a lot for this huge
|
|
||||||
contribution. */
|
|
||||||
EDT_BURNINGSVIDEO,
|
EDT_BURNINGSVIDEO,
|
||||||
|
DEPRECATED_EDT_DIRECT3D8_NO_LONGER_EXISTS,
|
||||||
//! Direct3D8 device is longer supported in Irrlicht. You have to go back to Irrlicht 1.8 if you still need that.
|
|
||||||
DEPRECATED_EDT_DIRECT3D8_NO_LONGER_EXISTS, // keep enum to avoid breaking enumeration order (might be used in ini-files, serialization, etc)
|
|
||||||
|
|
||||||
//! Direct3D 9 device, only available on Win32 platforms.
|
|
||||||
/** Performs hardware accelerated rendering of 3D and 2D
|
|
||||||
primitives. */
|
|
||||||
EDT_DIRECT3D9,
|
EDT_DIRECT3D9,
|
||||||
|
|
||||||
//! OpenGL device, available on most platforms.
|
//! OpenGL device, available on most platforms.
|
||||||
@ -52,7 +32,7 @@ namespace video
|
|||||||
primitives. */
|
primitives. */
|
||||||
EDT_OPENGL,
|
EDT_OPENGL,
|
||||||
|
|
||||||
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
//! OpenGL-ES 1.x driver, for embedded and mobile systems
|
||||||
EDT_OGLES1,
|
EDT_OGLES1,
|
||||||
|
|
||||||
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
//! OpenGL-ES 2.x driver, for embedded and mobile systems
|
||||||
@ -62,38 +42,12 @@ namespace video
|
|||||||
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
//! WebGL1 friendly subset of OpenGL-ES 2.x driver for Emscripten
|
||||||
EDT_WEBGL1,
|
EDT_WEBGL1,
|
||||||
|
|
||||||
|
EDT_OPENGL3,
|
||||||
|
|
||||||
//! No driver, just for counting the elements
|
//! No driver, just for counting the elements
|
||||||
EDT_COUNT
|
EDT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
const c8* const DRIVER_TYPE_NAMES[] =
|
|
||||||
{
|
|
||||||
"NullDriver",
|
|
||||||
"Software Renderer",
|
|
||||||
"Burning's Video",
|
|
||||||
"Direct3D 8.1",
|
|
||||||
"Direct3D 9.0c",
|
|
||||||
"OpenGL 1.x/2.x/3.x",
|
|
||||||
"OpenGL ES1",
|
|
||||||
"OpenGL ES2",
|
|
||||||
"WebGL 1",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
const c8* const DRIVER_TYPE_NAMES_SHORT[] =
|
|
||||||
{
|
|
||||||
"null",
|
|
||||||
"software",
|
|
||||||
"burning",
|
|
||||||
"d3d8",
|
|
||||||
"d3d9",
|
|
||||||
"opengl",
|
|
||||||
"ogles1",
|
|
||||||
"ogles2",
|
|
||||||
"webgl1",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
@ -91,9 +91,6 @@ enum EGUI_ELEMENT_TYPE
|
|||||||
//! The root of the GUI
|
//! The root of the GUI
|
||||||
EGUIET_ROOT,
|
EGUIET_ROOT,
|
||||||
|
|
||||||
//! IGUIProfiler
|
|
||||||
EGUIET_PROFILER,
|
|
||||||
|
|
||||||
//! Not an element, amount of elements in there
|
//! Not an element, amount of elements in there
|
||||||
EGUIET_COUNT,
|
EGUIET_COUNT,
|
||||||
|
|
||||||
|
@ -1,101 +0,0 @@
|
|||||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
#define __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Material flags
|
|
||||||
enum E_MATERIAL_FLAG
|
|
||||||
{
|
|
||||||
//! Draw as wireframe or filled triangles? Default: false
|
|
||||||
EMF_WIREFRAME = 0x1,
|
|
||||||
|
|
||||||
//! Draw as point cloud or filled triangles? Default: false
|
|
||||||
EMF_POINTCLOUD = 0x2,
|
|
||||||
|
|
||||||
//! Flat or Gouraud shading? Default: true
|
|
||||||
EMF_GOURAUD_SHADING = 0x4,
|
|
||||||
|
|
||||||
//! Will this material be lighted? Default: true
|
|
||||||
EMF_LIGHTING = 0x8,
|
|
||||||
|
|
||||||
//! Is the ZBuffer enabled? Default: true
|
|
||||||
EMF_ZBUFFER = 0x10,
|
|
||||||
|
|
||||||
//! May be written to the zbuffer or is it readonly. Default: true
|
|
||||||
/** This flag is ignored, if the material type is a transparent type. */
|
|
||||||
EMF_ZWRITE_ENABLE = 0x20,
|
|
||||||
|
|
||||||
//! Is backface culling enabled? Default: true
|
|
||||||
EMF_BACK_FACE_CULLING = 0x40,
|
|
||||||
|
|
||||||
//! Is frontface culling enabled? Default: false
|
|
||||||
/** Overrides EMF_BACK_FACE_CULLING if both are enabled. */
|
|
||||||
EMF_FRONT_FACE_CULLING = 0x80,
|
|
||||||
|
|
||||||
//! Is bilinear filtering enabled? Default: true
|
|
||||||
EMF_BILINEAR_FILTER = 0x100,
|
|
||||||
|
|
||||||
//! Is trilinear filtering enabled? Default: false
|
|
||||||
/** If the trilinear filter flag is enabled,
|
|
||||||
the bilinear filtering flag is ignored. */
|
|
||||||
EMF_TRILINEAR_FILTER = 0x200,
|
|
||||||
|
|
||||||
//! Is anisotropic filtering? Default: false
|
|
||||||
/** In Irrlicht you can use anisotropic texture filtering in
|
|
||||||
conjunction with bilinear or trilinear texture filtering
|
|
||||||
to improve rendering results. Primitives will look less
|
|
||||||
blurry with this flag switched on. */
|
|
||||||
EMF_ANISOTROPIC_FILTER = 0x400,
|
|
||||||
|
|
||||||
//! Is fog enabled? Default: false
|
|
||||||
EMF_FOG_ENABLE = 0x800,
|
|
||||||
|
|
||||||
//! Normalizes normals. Default: false
|
|
||||||
/** You can enable this if you need to scale a dynamic lighted
|
|
||||||
model. Usually, its normals will get scaled too then and it
|
|
||||||
will get darker. If you enable the EMF_NORMALIZE_NORMALS flag,
|
|
||||||
the normals will be normalized again, and the model will look
|
|
||||||
as bright as it should. */
|
|
||||||
EMF_NORMALIZE_NORMALS = 0x1000,
|
|
||||||
|
|
||||||
//! Access to all layers texture wrap settings. Overwrites separate layer settings.
|
|
||||||
/** Note that if you want to change TextureWrapU, TextureWrapV, TextureWrapW
|
|
||||||
independently, then you can't work with this flag, but will have to set the variables
|
|
||||||
directly. */
|
|
||||||
EMF_TEXTURE_WRAP = 0x2000,
|
|
||||||
|
|
||||||
//! AntiAliasing mode
|
|
||||||
EMF_ANTI_ALIASING = 0x4000,
|
|
||||||
|
|
||||||
//! ColorMask bits, for enabling the color planes
|
|
||||||
EMF_COLOR_MASK = 0x8000,
|
|
||||||
|
|
||||||
//! ColorMaterial enum for vertex color interpretation
|
|
||||||
EMF_COLOR_MATERIAL = 0x10000,
|
|
||||||
|
|
||||||
//! Flag for enabling/disabling mipmap usage
|
|
||||||
EMF_USE_MIP_MAPS = 0x20000,
|
|
||||||
|
|
||||||
//! Flag for blend operation
|
|
||||||
EMF_BLEND_OPERATION = 0x40000,
|
|
||||||
|
|
||||||
//! Flag for polygon offset
|
|
||||||
EMF_POLYGON_OFFSET = 0x80000,
|
|
||||||
|
|
||||||
//! Flag for blend factor
|
|
||||||
EMF_BLEND_FACTOR = 0x160000
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace video
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
|
|
||||||
#endif // __E_MATERIAL_FLAGS_H_INCLUDED__
|
|
||||||
|
|
87
include/EMaterialProps.h
Normal file
87
include/EMaterialProps.h
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||||||
|
// This file is part of the "Irrlicht Engine".
|
||||||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
|
#ifndef __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
#define __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
||||||
|
namespace irr
|
||||||
|
{
|
||||||
|
namespace video
|
||||||
|
{
|
||||||
|
|
||||||
|
//! Material properties
|
||||||
|
enum E_MATERIAL_PROP
|
||||||
|
{
|
||||||
|
//! Corresponds to SMaterial::Wireframe.
|
||||||
|
EMP_WIREFRAME = 0x1,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::PointCloud.
|
||||||
|
EMP_POINTCLOUD = 0x2,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::GouraudShading.
|
||||||
|
EMP_GOURAUD_SHADING = 0x4,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::Lighting.
|
||||||
|
EMP_LIGHTING = 0x8,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ZBuffer.
|
||||||
|
EMP_ZBUFFER = 0x10,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ZWriteEnable.
|
||||||
|
EMP_ZWRITE_ENABLE = 0x20,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BackfaceCulling.
|
||||||
|
EMP_BACK_FACE_CULLING = 0x40,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::FrontfaceCulling.
|
||||||
|
EMP_FRONT_FACE_CULLING = 0x80,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::MinFilter.
|
||||||
|
EMP_MIN_FILTER = 0x100,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::MagFilter.
|
||||||
|
EMP_MAG_FILTER = 0x200,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::AnisotropicFilter.
|
||||||
|
EMP_ANISOTROPIC_FILTER = 0x400,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::FogEnable.
|
||||||
|
EMP_FOG_ENABLE = 0x800,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::NormalizeNormals.
|
||||||
|
EMP_NORMALIZE_NORMALS = 0x1000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and
|
||||||
|
//! TextureWrapW.
|
||||||
|
EMP_TEXTURE_WRAP = 0x2000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::AntiAliasing.
|
||||||
|
EMP_ANTI_ALIASING = 0x4000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ColorMask.
|
||||||
|
EMP_COLOR_MASK = 0x8000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::ColorMaterial.
|
||||||
|
EMP_COLOR_MATERIAL = 0x10000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::UseMipMaps.
|
||||||
|
EMP_USE_MIP_MAPS = 0x20000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BlendOperation.
|
||||||
|
EMP_BLEND_OPERATION = 0x40000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::PolygonOffsetFactor, PolygonOffsetDirection,
|
||||||
|
//! PolygonOffsetDepthBias and PolygonOffsetSlopeScale.
|
||||||
|
EMP_POLYGON_OFFSET = 0x80000,
|
||||||
|
|
||||||
|
//! Corresponds to SMaterial::BlendFactor.
|
||||||
|
EMP_BLEND_FACTOR = 0x100000,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace video
|
||||||
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __E_MATERIAL_PROPS_H_INCLUDED__
|
||||||
|
|
@ -18,75 +18,6 @@ namespace video
|
|||||||
diffuse material. */
|
diffuse material. */
|
||||||
EMT_SOLID = 0,
|
EMT_SOLID = 0,
|
||||||
|
|
||||||
//! Solid material with 2 texture layers.
|
|
||||||
/** The second is blended onto the first using the alpha value
|
|
||||||
of the vertex colors. This material is currently not implemented in OpenGL.
|
|
||||||
*/
|
|
||||||
EMT_SOLID_2_LAYER,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. */
|
|
||||||
EMT_LIGHTMAP,
|
|
||||||
|
|
||||||
//! Material type with lightmap technique like EMT_LIGHTMAP.
|
|
||||||
/** But lightmap and diffuse texture are added instead of modulated. */
|
|
||||||
EMT_LIGHTMAP_ADD,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. The texture colors are effectively multiplied by 2
|
|
||||||
for brightening. Like known in DirectX as D3DTOP_MODULATE2X. */
|
|
||||||
EMT_LIGHTMAP_M2,
|
|
||||||
|
|
||||||
//! Material type with standard lightmap technique
|
|
||||||
/** There should be 2 textures: The first texture layer is a
|
|
||||||
diffuse map, the second is a light map. Dynamic light is
|
|
||||||
ignored. The texture colors are effectively multiplied by 4
|
|
||||||
for brightening. Like known in DirectX as D3DTOP_MODULATE4X. */
|
|
||||||
EMT_LIGHTMAP_M4,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP_M2, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING_M2,
|
|
||||||
|
|
||||||
//! Like EMT_LIGHTMAP_M4, but also supports dynamic lighting.
|
|
||||||
EMT_LIGHTMAP_LIGHTING_M4,
|
|
||||||
|
|
||||||
//! Detail mapped material.
|
|
||||||
/** The first texture is diffuse color map, the second is added
|
|
||||||
to this and usually displayed with a bigger scale value so that
|
|
||||||
it adds more detail. The detail map is added to the diffuse map
|
|
||||||
using ADD_SIGNED, so that it is possible to add and subtract
|
|
||||||
color from the diffuse map. For example a value of
|
|
||||||
(127,127,127) will not change the appearance of the diffuse map
|
|
||||||
at all. Often used for terrain rendering. */
|
|
||||||
EMT_DETAIL_MAP,
|
|
||||||
|
|
||||||
//! Look like a reflection of the environment around it.
|
|
||||||
/** To make this possible, a texture called 'sphere map' is
|
|
||||||
used, which must be set as the first texture. */
|
|
||||||
EMT_SPHERE_MAP,
|
|
||||||
|
|
||||||
//! A reflecting material with an optional non reflecting texture layer.
|
|
||||||
/** The reflection map should be set as first texture. */
|
|
||||||
EMT_REFLECTION_2_LAYER,
|
|
||||||
|
|
||||||
//! A transparent material.
|
|
||||||
/** Only the first texture is used. The new color is calculated
|
|
||||||
by simply adding the source color and the dest color. This
|
|
||||||
means if for example a billboard using a texture with black
|
|
||||||
background and a red circle on it is drawn with this material,
|
|
||||||
the result is that only the red circle will be drawn a little
|
|
||||||
bit transparent, and everything which was black is 100%
|
|
||||||
transparent and not visible. This material type is useful for
|
|
||||||
particle effects. */
|
|
||||||
EMT_TRANSPARENT_ADD_COLOR,
|
|
||||||
|
|
||||||
//! Makes the material transparent based on the texture alpha channel.
|
//! Makes the material transparent based on the texture alpha channel.
|
||||||
/** The final color is blended together from the destination
|
/** The final color is blended together from the destination
|
||||||
color and the texture color, using the alpha channel value as
|
color and the texture color, using the alpha channel value as
|
||||||
@ -115,12 +46,6 @@ namespace video
|
|||||||
//! Makes the material transparent based on the vertex alpha value.
|
//! Makes the material transparent based on the vertex alpha value.
|
||||||
EMT_TRANSPARENT_VERTEX_ALPHA,
|
EMT_TRANSPARENT_VERTEX_ALPHA,
|
||||||
|
|
||||||
//! A transparent reflecting material with an optional additional non reflecting texture layer.
|
|
||||||
/** The reflection map should be set as first texture. The
|
|
||||||
transparency depends on the alpha value in the vertex colors. A
|
|
||||||
texture which will not reflect can be set as second texture.*/
|
|
||||||
EMT_TRANSPARENT_REFLECTION_2_LAYER,
|
|
||||||
|
|
||||||
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
|
||||||
/** Using only first texture. Generic blending method.
|
/** Using only first texture. Generic blending method.
|
||||||
The blend function is set to SMaterial::MaterialTypeParam with
|
The blend function is set to SMaterial::MaterialTypeParam with
|
||||||
@ -135,22 +60,9 @@ namespace video
|
|||||||
const char* const sBuiltInMaterialTypeNames[] =
|
const char* const sBuiltInMaterialTypeNames[] =
|
||||||
{
|
{
|
||||||
"solid",
|
"solid",
|
||||||
"solid_2layer",
|
|
||||||
"lightmap",
|
|
||||||
"lightmap_add",
|
|
||||||
"lightmap_m2",
|
|
||||||
"lightmap_m4",
|
|
||||||
"lightmap_light",
|
|
||||||
"lightmap_light_m2",
|
|
||||||
"lightmap_light_m4",
|
|
||||||
"detail_map",
|
|
||||||
"sphere_map",
|
|
||||||
"reflection_2layer",
|
|
||||||
"trans_add",
|
|
||||||
"trans_alphach",
|
"trans_alphach",
|
||||||
"trans_alphach_ref",
|
"trans_alphach_ref",
|
||||||
"trans_vertex_alpha",
|
"trans_vertex_alpha",
|
||||||
"trans_reflection_2layer",
|
|
||||||
"onetexture_blend",
|
"onetexture_blend",
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
@ -452,10 +452,10 @@ struct SEvent
|
|||||||
/** Unlike other events, joystick events represent the result of polling
|
/** Unlike other events, joystick events represent the result of polling
|
||||||
* each connected joystick once per run() of the device. Joystick events will
|
* each connected joystick once per run() of the device. Joystick events will
|
||||||
* not be generated by default. If joystick support is available for the
|
* not be generated by default. If joystick support is available for the
|
||||||
* active device, _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ is defined, and
|
* active device, and @ref irr::IrrlichtDevice::activateJoysticks() has been
|
||||||
* @ref irr::IrrlichtDevice::activateJoysticks() has been called, an event of
|
* called, an event of this type will be generated once per joystick per
|
||||||
* this type will be generated once per joystick per @ref IrrlichtDevice::run()
|
* @ref IrrlichtDevice::run() regardless of whether the state of the joystick
|
||||||
* regardless of whether the state of the joystick has actually changed. */
|
* has actually changed. */
|
||||||
struct SJoystickEvent
|
struct SJoystickEvent
|
||||||
{
|
{
|
||||||
enum
|
enum
|
||||||
|
@ -54,9 +54,9 @@ namespace gui
|
|||||||
|
|
||||||
//! Sets text justification of the text area
|
//! Sets text justification of the text area
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
\param vertical: EGUIA_UPPERLEFT to align with top edge,
|
||||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
|
|
||||||
//! Set the maximal number of rows for the selection listbox
|
//! Set the maximal number of rows for the selection listbox
|
||||||
|
@ -433,7 +433,7 @@ public:
|
|||||||
if (el)
|
if (el)
|
||||||
{
|
{
|
||||||
// find the highest element number
|
// find the highest element number
|
||||||
el->getNextElement(-1, true, IsTabGroup, first, closest, true);
|
el->getNextElement(-1, true, IsTabGroup, first, closest, true, true);
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
TabOrder = first->getTabOrder() + 1;
|
TabOrder = first->getTabOrder() + 1;
|
||||||
@ -706,7 +706,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// search within children
|
// search within children
|
||||||
if ((*it)->getNextElement(startOrder, reverse, group, first, closest))
|
if ((*it)->getNextElement(startOrder, reverse, group, first, closest, includeInvisible, includeDisabled))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -88,9 +88,9 @@ namespace gui
|
|||||||
|
|
||||||
//! Sets text justification mode
|
//! Sets text justification mode
|
||||||
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
/** \param horizontal: EGUIA_UPPERLEFT for left justified (default),
|
||||||
EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text.
|
||||||
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
\param vertical: EGUIA_UPPERLEFT to align with top edge (default),
|
||||||
EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text. */
|
||||||
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0;
|
||||||
|
|
||||||
//! Enables or disables word wrap for using the static text as multiline text control.
|
//! Enables or disables word wrap for using the static text as multiline text control.
|
||||||
|
@ -329,6 +329,12 @@ public:
|
|||||||
//! Sets a pixel
|
//! Sets a pixel
|
||||||
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
|
virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
|
||||||
|
|
||||||
|
//! Copies this surface into another, if it has the exact same size and format.
|
||||||
|
/** NOTE: mipmaps are ignored
|
||||||
|
\return True if it was copied, false otherwise.
|
||||||
|
*/
|
||||||
|
virtual bool copyToNoScaling(void *target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) const = 0;
|
||||||
|
|
||||||
//! Copies the image into the target, scaling the image to fit
|
//! Copies the image into the target, scaling the image to fit
|
||||||
/** NOTE: mipmaps are ignored */
|
/** NOTE: mipmaps are ignored */
|
||||||
virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
|
virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
|
||||||
|
@ -45,17 +45,6 @@ public:
|
|||||||
/** \param file File handle to check.
|
/** \param file File handle to check.
|
||||||
\return Pointer to newly created image, or 0 upon error. */
|
\return Pointer to newly created image, or 0 upon error. */
|
||||||
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
virtual IImage* loadImage(io::IReadFile* file) const = 0;
|
||||||
|
|
||||||
//! Creates a multiple surfaces from the file eg. whole cube map.
|
|
||||||
/** \param file File handle to check.
|
|
||||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
|
||||||
\return Array of pointers to newly created images. */
|
|
||||||
virtual core::array<IImage*> loadImages(io::IReadFile* file, E_TEXTURE_TYPE* type) const
|
|
||||||
{
|
|
||||||
core::array<IImage*> image;
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,11 +97,6 @@ namespace scene
|
|||||||
/** \param box New bounding box to use for the mesh. */
|
/** \param box New bounding box to use for the mesh. */
|
||||||
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
virtual void setBoundingBox( const core::aabbox3df& box) = 0;
|
||||||
|
|
||||||
//! Sets a flag of all contained materials to a new value.
|
|
||||||
/** \param flag: Flag to set in all materials.
|
|
||||||
\param newvalue: New value to set in all materials. */
|
|
||||||
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) = 0;
|
|
||||||
|
|
||||||
//! Set the hardware mapping hint
|
//! Set the hardware mapping hint
|
||||||
/** This methods allows to define optimization hints for the
|
/** This methods allows to define optimization hints for the
|
||||||
hardware. This enables, e.g., the use of hardware buffers on
|
hardware. This enables, e.g., the use of hardware buffers on
|
||||||
|
@ -26,12 +26,23 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Copies text to the clipboard
|
//! Copies text to the clipboard
|
||||||
|
//! \param text: text in utf-8
|
||||||
virtual void copyToClipboard(const c8* text) const = 0;
|
virtual void copyToClipboard(const c8* text) const = 0;
|
||||||
|
|
||||||
|
//! Copies text to the primary selection
|
||||||
|
//! This is a no-op on some platforms.
|
||||||
|
//! \param text: text in utf-8
|
||||||
|
virtual void copyToPrimarySelection(const c8* text) const = 0;
|
||||||
|
|
||||||
//! Get text from the clipboard
|
//! Get text from the clipboard
|
||||||
/** \return Returns 0 if no string is in there. */
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
virtual const c8* getTextFromClipboard() const = 0;
|
virtual const c8* getTextFromClipboard() const = 0;
|
||||||
|
|
||||||
|
//! Get text from the primary selection
|
||||||
|
//! This is a no-op on some platforms.
|
||||||
|
//! \return Returns 0 if no string is in there, otherwise an utf-8 string.
|
||||||
|
virtual const c8* getTextFromPrimarySelection() const = 0;
|
||||||
|
|
||||||
//! Get the total and available system RAM
|
//! Get the total and available system RAM
|
||||||
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
|
||||||
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
|
||||||
|
@ -1,480 +0,0 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
// Written by Michael Zeilfelder
|
|
||||||
|
|
||||||
#ifndef __I_PROFILER_H_INCLUDED__
|
|
||||||
#define __I_PROFILER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include "irrString.h"
|
|
||||||
#include "irrArray.h"
|
|
||||||
#include "ITimer.h"
|
|
||||||
#include <limits.h> // for INT_MAX (we should have a S32_MAX...)
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
|
|
||||||
class ITimer;
|
|
||||||
|
|
||||||
//! Used to store the profile data (and also used for profile group data).
|
|
||||||
struct SProfileData
|
|
||||||
{
|
|
||||||
friend class IProfiler;
|
|
||||||
|
|
||||||
SProfileData()
|
|
||||||
{
|
|
||||||
GroupIndex = 0;
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator<(const SProfileData& pd) const
|
|
||||||
{
|
|
||||||
return Id < pd.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const SProfileData& pd) const
|
|
||||||
{
|
|
||||||
return Id == pd.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 getGroupIndex() const
|
|
||||||
{
|
|
||||||
return GroupIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
const core::stringw& getName() const
|
|
||||||
{
|
|
||||||
return Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Each time profiling for this data is stopped it increases the counter by 1.
|
|
||||||
u32 getCallsCounter() const
|
|
||||||
{
|
|
||||||
return CountCalls;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Longest time a profile call for this id took from start until it was stopped again.
|
|
||||||
u32 getLongestTime() const
|
|
||||||
{
|
|
||||||
return LongestTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Time spend between start/stop
|
|
||||||
u32 getTimeSum() const
|
|
||||||
{
|
|
||||||
return TimeSum;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
// just to be used for searching as it does no initialization besides id
|
|
||||||
SProfileData(u32 id) : Id(id) {}
|
|
||||||
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
CountCalls = 0;
|
|
||||||
LongestTime = 0;
|
|
||||||
TimeSum = 0;
|
|
||||||
LastTimeStarted = 0;
|
|
||||||
StartStopCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 Id;
|
|
||||||
u32 GroupIndex;
|
|
||||||
core::stringw Name;
|
|
||||||
|
|
||||||
s32 StartStopCounter; // 0 means stopped > 0 means it runs.
|
|
||||||
u32 CountCalls;
|
|
||||||
u32 LongestTime;
|
|
||||||
u32 TimeSum;
|
|
||||||
|
|
||||||
u32 LastTimeStarted;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Code-profiler. Please check the example in the Irrlicht examples folder about how to use it.
|
|
||||||
// Implementer notes:
|
|
||||||
// The design is all about allowing to use the central start/stop mechanism with minimal time overhead.
|
|
||||||
// This is why the class works without a virtual functions interface contrary to the usual Irrlicht design.
|
|
||||||
// And also why it works with id's instead of strings in the start/stop functions even if it makes using
|
|
||||||
// the class slightly harder.
|
|
||||||
// The class comes without reference-counting because the profiler instance is never released (TBD).
|
|
||||||
class IProfiler
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Constructor. You could use this to create a new profiler, but usually getProfiler() is used to access the global instance.
|
|
||||||
IProfiler() : Timer(0), NextAutoId(INT_MAX)
|
|
||||||
{}
|
|
||||||
|
|
||||||
virtual ~IProfiler()
|
|
||||||
{}
|
|
||||||
|
|
||||||
//! Add an id with given name and group which can be used for profiling with start/stop
|
|
||||||
/** After calling this once you can start/stop profiling for the given id.
|
|
||||||
\param id: Should be >= 0 as negative id's are reserved for Irrlicht. Also very large numbers (near INT_MAX) might
|
|
||||||
have been added automatically by the other add function.
|
|
||||||
\param name: Name for displaying profile data.
|
|
||||||
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
|
|
||||||
inline void add(s32 id, const core::stringw &name, const core::stringw &groupName);
|
|
||||||
|
|
||||||
//! Add an automatically generated for the given name and group which can be used for profiling with start/stop.
|
|
||||||
/** After calling this once you can start/stop profiling with the returned id.
|
|
||||||
\param name: Name for displaying profile data.
|
|
||||||
\param groupName: Each id belongs into a group - this helps on displaying profile data.
|
|
||||||
\return Automatic id's start at INT_MAX and count down for each new id. If the name already has an id then that id will be returned. */
|
|
||||||
inline s32 add(const core::stringw &name, const core::stringw &groupName);
|
|
||||||
|
|
||||||
//! Return the number of profile data blocks. There is one for each id.
|
|
||||||
u32 getProfileDataCount() const
|
|
||||||
{
|
|
||||||
return ProfileDatas.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Search for the index of the profile data by name
|
|
||||||
/** \param result Receives the resulting data index when one was found.
|
|
||||||
\param name String with name to search for
|
|
||||||
\return true when found, false when not found */
|
|
||||||
inline bool findDataIndex(u32 & result, const core::stringw &name) const;
|
|
||||||
|
|
||||||
//! Get the profile data
|
|
||||||
/** \param index A value between 0 and getProfileDataCount()-1. Indices can change when new id's are added.*/
|
|
||||||
const SProfileData& getProfileDataByIndex(u32 index) const
|
|
||||||
{
|
|
||||||
return ProfileDatas[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get the profile data
|
|
||||||
/** \param id Same value as used in ::add
|
|
||||||
\return Profile data for the given id or 0 when it does not exist. */
|
|
||||||
inline const SProfileData* getProfileDataById(u32 id);
|
|
||||||
|
|
||||||
//! Get the number of profile groups. Will be at least 1.
|
|
||||||
/** NOTE: The first groups is always L"overview" which is an overview for all existing groups */
|
|
||||||
inline u32 getGroupCount() const
|
|
||||||
{
|
|
||||||
return ProfileGroups.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Get profile data for a group.
|
|
||||||
/** NOTE: The first groups is always L"overview" which is an overview for all existing groups */
|
|
||||||
inline const SProfileData& getGroupData(u32 index) const
|
|
||||||
{
|
|
||||||
return ProfileGroups[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Find the group index by the group-name
|
|
||||||
/** \param result Receives the resulting group index when one was found.
|
|
||||||
\param name String with name to search for
|
|
||||||
\return true when found, false when not found */
|
|
||||||
inline bool findGroupIndex(u32 & result, const core::stringw &name) const;
|
|
||||||
|
|
||||||
|
|
||||||
//! Start profile-timing for the given id
|
|
||||||
/** This increases an internal run-counter for the given id. It will profile as long as that counter is > 0.
|
|
||||||
NOTE: you have to add the id first with one of the ::add functions
|
|
||||||
*/
|
|
||||||
inline void start(s32 id);
|
|
||||||
|
|
||||||
//! Stop profile-timing for the given id
|
|
||||||
/** This increases an internal run-counter for the given id. If it reaches 0 the time since start is recorded.
|
|
||||||
You should have the same amount of start and stop calls. If stop is called more often than start
|
|
||||||
then the additional stop calls will be ignored (counter never goes below 0)
|
|
||||||
*/
|
|
||||||
inline void stop(s32 id);
|
|
||||||
|
|
||||||
//! Reset profile data for the given id
|
|
||||||
inline void resetDataById(s32 id);
|
|
||||||
|
|
||||||
//! Reset profile data for the given index
|
|
||||||
inline void resetDataByIndex(u32 index);
|
|
||||||
|
|
||||||
//! Reset profile data for a whole group
|
|
||||||
inline void resetGroup(u32 index);
|
|
||||||
|
|
||||||
//! Reset all profile data
|
|
||||||
/** NOTE: This is not deleting id's or groups, just resetting all timers to 0. */
|
|
||||||
inline void resetAll();
|
|
||||||
|
|
||||||
//! Write all profile-data into a string
|
|
||||||
/** \param result Receives the result string.
|
|
||||||
\param includeOverview When true a group-overview is attached first
|
|
||||||
\param suppressUncalled When true elements which got never called are not printed */
|
|
||||||
virtual void printAll(core::stringw &result, bool includeOverview=false,bool suppressUncalled=true) const = 0;
|
|
||||||
|
|
||||||
//! Write the profile data of one group into a string
|
|
||||||
/** \param result Receives the result string.
|
|
||||||
\param groupIndex_ */
|
|
||||||
virtual void printGroup(core::stringw &result, u32 groupIndex, bool suppressUncalled) const = 0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
inline u32 addGroup(const core::stringw &name);
|
|
||||||
|
|
||||||
// I would prefer using os::Timer, but os.h is not in the public interface so far.
|
|
||||||
// Timer must be initialized by the implementation.
|
|
||||||
ITimer * Timer;
|
|
||||||
core::array<SProfileData> ProfileDatas;
|
|
||||||
core::array<SProfileData> ProfileGroups;
|
|
||||||
|
|
||||||
private:
|
|
||||||
s32 NextAutoId; // for giving out id's automatically
|
|
||||||
};
|
|
||||||
|
|
||||||
//! Access the Irrlicht profiler object.
|
|
||||||
/** Profiler is always accessible, except in destruction of global objects.
|
|
||||||
If you want to get internal profiling information about the engine itself
|
|
||||||
you will have to re-compile the engine with _IRR_COMPILE_WITH_PROFILING_ enabled.
|
|
||||||
But you can use the profiler for profiling your own projects without that. */
|
|
||||||
IRRLICHT_API IProfiler& IRRCALLCONV getProfiler();
|
|
||||||
|
|
||||||
//! Class where the objects profile their own life-time.
|
|
||||||
/** This is a comfort wrapper around the IProfiler start/stop mechanism which is easier to use
|
|
||||||
when you want to profile a scope. You only have to create an object and it will profile it's own lifetime
|
|
||||||
for the given id. */
|
|
||||||
class CProfileScope
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Construct with an known id.
|
|
||||||
/** This is the fastest scope constructor, but the id must have been added before.
|
|
||||||
\param id Any id which you did add to the profiler before. */
|
|
||||||
CProfileScope(s32 id)
|
|
||||||
: Id(id), Profiler(getProfiler())
|
|
||||||
{
|
|
||||||
Profiler.start(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Object will create the given name, groupName combination for the id if it doesn't exist already
|
|
||||||
/** \param id: Should be >= 0 as negative id's are reserved for Irrlicht. Also very large numbers (near INT_MAX) might
|
|
||||||
have been created already by the automatic add function of ::IProfiler.
|
|
||||||
\param name: Name for displaying profile data.
|
|
||||||
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
|
|
||||||
CProfileScope(s32 id, const core::stringw &name, const core::stringw &groupName)
|
|
||||||
: Id(id), Profiler(getProfiler())
|
|
||||||
{
|
|
||||||
Profiler.add(Id, name, groupName);
|
|
||||||
Profiler.start(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Object will create an id for the given name, groupName combination if they don't exist already
|
|
||||||
/** Slowest scope constructor, but usually still fine unless speed is very critical.
|
|
||||||
\param name: Name for displaying profile data.
|
|
||||||
\param groupName: Each id belongs into a group - this helps on displaying profile data. */
|
|
||||||
CProfileScope(const core::stringw &name, const core::stringw &groupName)
|
|
||||||
: Profiler(getProfiler())
|
|
||||||
{
|
|
||||||
Id = Profiler.add(name, groupName);
|
|
||||||
Profiler.start(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CProfileScope()
|
|
||||||
{
|
|
||||||
Profiler.stop(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
s32 Id;
|
|
||||||
IProfiler& Profiler;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// IMPLEMENTATION for in-line stuff
|
|
||||||
|
|
||||||
void IProfiler::start(s32 id)
|
|
||||||
{
|
|
||||||
s32 idx = ProfileDatas.binary_search(SProfileData(id));
|
|
||||||
if ( idx >= 0 && Timer )
|
|
||||||
{
|
|
||||||
++ProfileDatas[idx].StartStopCounter;
|
|
||||||
if (ProfileDatas[idx].StartStopCounter == 1 )
|
|
||||||
ProfileDatas[idx].LastTimeStarted = Timer->getRealTime();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IProfiler::stop(s32 id)
|
|
||||||
{
|
|
||||||
if ( Timer )
|
|
||||||
{
|
|
||||||
u32 timeNow = Timer->getRealTime();
|
|
||||||
s32 idx = ProfileDatas.binary_search(SProfileData(id));
|
|
||||||
if ( idx >= 0 )
|
|
||||||
{
|
|
||||||
SProfileData &data = ProfileDatas[idx];
|
|
||||||
--ProfileDatas[idx].StartStopCounter;
|
|
||||||
if ( data.LastTimeStarted != 0 && ProfileDatas[idx].StartStopCounter == 0)
|
|
||||||
{
|
|
||||||
// update data for this id
|
|
||||||
++data.CountCalls;
|
|
||||||
u32 diffTime = timeNow - data.LastTimeStarted;
|
|
||||||
data.TimeSum += diffTime;
|
|
||||||
if ( diffTime > data.LongestTime )
|
|
||||||
data.LongestTime = diffTime;
|
|
||||||
data.LastTimeStarted = 0;
|
|
||||||
|
|
||||||
// update data of it's group
|
|
||||||
SProfileData & group = ProfileGroups[data.GroupIndex];
|
|
||||||
++group.CountCalls;
|
|
||||||
group.TimeSum += diffTime;
|
|
||||||
if ( diffTime > group.LongestTime )
|
|
||||||
group.LongestTime = diffTime;
|
|
||||||
group.LastTimeStarted = 0;
|
|
||||||
}
|
|
||||||
else if ( ProfileDatas[idx].StartStopCounter < 0 )
|
|
||||||
{
|
|
||||||
// ignore additional stop calls
|
|
||||||
ProfileDatas[idx].StartStopCounter = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 IProfiler::add(const core::stringw &name, const core::stringw &groupName)
|
|
||||||
{
|
|
||||||
u32 index;
|
|
||||||
if ( findDataIndex(index, name) )
|
|
||||||
{
|
|
||||||
add( ProfileDatas[index].Id, name, groupName );
|
|
||||||
return ProfileDatas[index].Id;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s32 id = NextAutoId;
|
|
||||||
--NextAutoId;
|
|
||||||
add( id, name, groupName );
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IProfiler::add(s32 id, const core::stringw &name, const core::stringw &groupName)
|
|
||||||
{
|
|
||||||
u32 groupIdx;
|
|
||||||
if ( !findGroupIndex(groupIdx, groupName) )
|
|
||||||
{
|
|
||||||
groupIdx = addGroup(groupName);
|
|
||||||
}
|
|
||||||
|
|
||||||
SProfileData data(id);
|
|
||||||
s32 idx = ProfileDatas.binary_search(data);
|
|
||||||
if ( idx < 0 )
|
|
||||||
{
|
|
||||||
data.reset();
|
|
||||||
data.GroupIndex = groupIdx;
|
|
||||||
data.Name = name;
|
|
||||||
|
|
||||||
ProfileDatas.push_back(data);
|
|
||||||
ProfileDatas.sort();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// only reset on group changes, otherwise we want to keep the data or coding CProfileScope would become tricky.
|
|
||||||
if ( groupIdx != ProfileDatas[idx].GroupIndex )
|
|
||||||
{
|
|
||||||
resetDataByIndex((u32)idx);
|
|
||||||
ProfileDatas[idx].GroupIndex = groupIdx;
|
|
||||||
}
|
|
||||||
ProfileDatas[idx].Name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 IProfiler::addGroup(const core::stringw &name)
|
|
||||||
{
|
|
||||||
SProfileData group;
|
|
||||||
group.Id = -1; // Id for groups doesn't matter so far
|
|
||||||
group.Name = name;
|
|
||||||
ProfileGroups.push_back(group);
|
|
||||||
return ProfileGroups.size()-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IProfiler::findDataIndex(u32 & result, const core::stringw &name) const
|
|
||||||
{
|
|
||||||
for ( u32 i=0; i < ProfileDatas.size(); ++i )
|
|
||||||
{
|
|
||||||
if ( ProfileDatas[i].Name == name )
|
|
||||||
{
|
|
||||||
result = i;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const SProfileData* IProfiler::getProfileDataById(u32 id)
|
|
||||||
{
|
|
||||||
SProfileData data(id);
|
|
||||||
s32 idx = ProfileDatas.binary_search(data);
|
|
||||||
if ( idx >= 0 )
|
|
||||||
return &ProfileDatas[idx];
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IProfiler::findGroupIndex(u32 & result, const core::stringw &name) const
|
|
||||||
{
|
|
||||||
for ( u32 i=0; i < ProfileGroups.size(); ++i )
|
|
||||||
{
|
|
||||||
if ( ProfileGroups[i].Name == name )
|
|
||||||
{
|
|
||||||
result = i;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IProfiler::resetDataById(s32 id)
|
|
||||||
{
|
|
||||||
s32 idx = ProfileDatas.binary_search(SProfileData(id));
|
|
||||||
if ( idx >= 0 )
|
|
||||||
{
|
|
||||||
resetDataByIndex((u32)idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IProfiler::resetDataByIndex(u32 index)
|
|
||||||
{
|
|
||||||
SProfileData &data = ProfileDatas[index];
|
|
||||||
|
|
||||||
SProfileData & group = ProfileGroups[data.GroupIndex];
|
|
||||||
group.CountCalls -= data.CountCalls;
|
|
||||||
group.TimeSum -= data.TimeSum;
|
|
||||||
|
|
||||||
data.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Reset profile data for a whole group
|
|
||||||
void IProfiler::resetGroup(u32 index)
|
|
||||||
{
|
|
||||||
for ( u32 i=0; i<ProfileDatas.size(); ++i )
|
|
||||||
{
|
|
||||||
if ( ProfileDatas[i].GroupIndex == index )
|
|
||||||
ProfileDatas[i].reset();
|
|
||||||
}
|
|
||||||
if ( index < ProfileGroups.size() )
|
|
||||||
ProfileGroups[index].reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IProfiler::resetAll()
|
|
||||||
{
|
|
||||||
for ( u32 i=0; i<ProfileDatas.size(); ++i )
|
|
||||||
{
|
|
||||||
ProfileDatas[i].reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( u32 i=0; i<ProfileGroups.size(); ++i )
|
|
||||||
{
|
|
||||||
ProfileGroups[i].reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! For internal engine use:
|
|
||||||
//! Code inside IRR_PROFILE is only executed when _IRR_COMPILE_WITH_PROFILING_ is set
|
|
||||||
//! This allows disabling all profiler code completely by changing that define.
|
|
||||||
//! It's generally useful to wrap profiler-calls in application code with a similar macro.
|
|
||||||
#ifdef _IRR_COMPILE_WITH_PROFILING_
|
|
||||||
#define IRR_PROFILE(X) X
|
|
||||||
#else
|
|
||||||
#define IRR_PROFILE(X)
|
|
||||||
#endif // IRR_PROFILE
|
|
||||||
|
|
||||||
} // namespace irr
|
|
||||||
|
|
||||||
#endif // __I_PROFILER_H_INCLUDED__
|
|
@ -7,10 +7,6 @@
|
|||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
#include "leakHunter.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -50,17 +46,11 @@ namespace irr
|
|||||||
IReferenceCounted()
|
IReferenceCounted()
|
||||||
: DebugName(0), ReferenceCounter(1)
|
: DebugName(0), ReferenceCounter(1)
|
||||||
{
|
{
|
||||||
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
LeakHunter::addObject(this);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Destructor.
|
//! Destructor.
|
||||||
virtual ~IReferenceCounted()
|
virtual ~IReferenceCounted()
|
||||||
{
|
{
|
||||||
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
LeakHunter::removeObject(this);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Grabs the object. Increments the reference counter by one.
|
//! Grabs the object. Increments the reference counter by one.
|
||||||
|
@ -318,20 +318,10 @@ namespace scene
|
|||||||
* \endcode
|
* \endcode
|
||||||
* If you would like to implement and add your own file format loader to Irrlicht,
|
* If you would like to implement and add your own file format loader to Irrlicht,
|
||||||
* see addExternalMeshLoader().
|
* see addExternalMeshLoader().
|
||||||
* \param filename: Filename of the mesh to load.
|
* \param file File handle of the mesh to load.
|
||||||
* \param alternativeCacheName: In case you want to have the mesh under another name in the cache (to create real copies)
|
|
||||||
* \return Null if failed, otherwise pointer to the mesh.
|
* \return Null if failed, otherwise pointer to the mesh.
|
||||||
* This pointer should not be dropped. See IReferenceCounted::drop() for more information.
|
* This pointer should not be dropped. See IReferenceCounted::drop() for more information.
|
||||||
**/
|
**/
|
||||||
virtual IAnimatedMesh* getMesh(const io::path& filename, const io::path& alternativeCacheName=io::path("")) = 0;
|
|
||||||
|
|
||||||
//! Get pointer to an animateable mesh. Loads the file if not loaded already.
|
|
||||||
/** Works just as getMesh(const char* filename). If you want to
|
|
||||||
remove a loaded mesh from the cache again, use removeMesh().
|
|
||||||
\param file File handle of the mesh to load.
|
|
||||||
\return NULL if failed and pointer to the mesh if successful.
|
|
||||||
This pointer should not be dropped. See
|
|
||||||
IReferenceCounted::drop() for more information. */
|
|
||||||
virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
|
virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
|
||||||
|
|
||||||
//! Get interface to the mesh cache which is shared between all existing scene managers.
|
//! Get interface to the mesh cache which is shared between all existing scene managers.
|
||||||
@ -345,16 +335,6 @@ namespace scene
|
|||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
||||||
virtual video::IVideoDriver* getVideoDriver() = 0;
|
virtual video::IVideoDriver* getVideoDriver() = 0;
|
||||||
|
|
||||||
//! Get the active GUIEnvironment
|
|
||||||
/** \return Pointer to the GUIEnvironment
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual gui::IGUIEnvironment* getGUIEnvironment() = 0;
|
|
||||||
|
|
||||||
//! Get the active FileSystem
|
|
||||||
/** \return Pointer to the FileSystem
|
|
||||||
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual io::IFileSystem* getFileSystem() = 0;
|
|
||||||
|
|
||||||
//! Adds a scene node for rendering an animated mesh model.
|
//! Adds a scene node for rendering an animated mesh model.
|
||||||
/** \param mesh: Pointer to the loaded animated mesh to be displayed.
|
/** \param mesh: Pointer to the loaded animated mesh to be displayed.
|
||||||
\param parent: Parent of the scene node. Can be NULL if no parent.
|
\param parent: Parent of the scene node. Can be NULL if no parent.
|
||||||
|
@ -352,38 +352,14 @@ namespace scene
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Sets all material flags at once to a new value.
|
//! Execute a function on all materials of this scene node.
|
||||||
/** Useful, for example, if you want the whole mesh to be
|
/** Useful for setting material properties, e.g. if you want the whole
|
||||||
affected by light.
|
mesh to be affected by light. */
|
||||||
\param flag Which flag of all materials to be set.
|
template <typename F>
|
||||||
\param newvalue New value of that flag. */
|
void forEachMaterial(F &&fn) {
|
||||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
|
for (u32 i = 0; i < getMaterialCount(); i++) {
|
||||||
{
|
fn(getMaterial(i));
|
||||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
}
|
||||||
getMaterial(i).setFlag(flag, newvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets the texture of the specified layer in all materials of this scene node to the new texture.
|
|
||||||
/** \param textureLayer Layer of texture to be set. Must be a
|
|
||||||
value smaller than MATERIAL_MAX_TEXTURES.
|
|
||||||
\param texture New texture to be used. */
|
|
||||||
void setMaterialTexture(u32 textureLayer, video::ITexture* texture)
|
|
||||||
{
|
|
||||||
if (textureLayer >= video::MATERIAL_MAX_TEXTURES)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
|
||||||
getMaterial(i).setTexture(textureLayer, texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! Sets the material type of all materials in this scene node to a new material type.
|
|
||||||
/** \param newType New type of material to be set. */
|
|
||||||
void setMaterialType(video::E_MATERIAL_TYPE newType)
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<getMaterialCount(); ++i)
|
|
||||||
getMaterial(i).MaterialType = newType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,32 +56,11 @@ namespace video
|
|||||||
ETS_WORLD,
|
ETS_WORLD,
|
||||||
//! Projection transformation
|
//! Projection transformation
|
||||||
ETS_PROJECTION,
|
ETS_PROJECTION,
|
||||||
//! Texture transformation
|
//! Texture 0 transformation
|
||||||
|
//! Use E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + texture_number) to access other texture transformations
|
||||||
ETS_TEXTURE_0,
|
ETS_TEXTURE_0,
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_1,
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_2,
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_3,
|
|
||||||
#if _IRR_MATERIAL_MAX_TEXTURES_>4
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_4,
|
|
||||||
#if _IRR_MATERIAL_MAX_TEXTURES_>5
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_5,
|
|
||||||
#if _IRR_MATERIAL_MAX_TEXTURES_>6
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_6,
|
|
||||||
#if _IRR_MATERIAL_MAX_TEXTURES_>7
|
|
||||||
//! Texture transformation
|
|
||||||
ETS_TEXTURE_7,
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
//! Only used internally
|
//! Only used internally
|
||||||
ETS_COUNT = ETS_TEXTURE_0 + _IRR_MATERIAL_MAX_TEXTURES_
|
ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Special render targets, which usually map to dedicated hardware
|
//! Special render targets, which usually map to dedicated hardware
|
||||||
@ -738,23 +717,6 @@ namespace video
|
|||||||
virtual void draw3DLine(const core::vector3df& start,
|
virtual void draw3DLine(const core::vector3df& start,
|
||||||
const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
|
const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
|
||||||
|
|
||||||
//! Draws a 3d triangle.
|
|
||||||
/** This method calls drawVertexPrimitiveList for some triangles.
|
|
||||||
This method works with all drivers because it simply calls
|
|
||||||
drawVertexPrimitiveList, but it is hence not very fast.
|
|
||||||
Note that the triangle is drawn using the current
|
|
||||||
transformation matrix and material. So if you need to draw it
|
|
||||||
independently of the current transformation, use
|
|
||||||
\code
|
|
||||||
driver->setMaterial(someMaterial);
|
|
||||||
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
|
|
||||||
\endcode
|
|
||||||
for some properly set up material before drawing the triangle.
|
|
||||||
\param triangle The triangle to draw.
|
|
||||||
\param color Color of the line. */
|
|
||||||
virtual void draw3DTriangle(const core::triangle3df& triangle,
|
|
||||||
SColor color = SColor(255,255,255,255)) =0;
|
|
||||||
|
|
||||||
//! Draws a 3d axis aligned box.
|
//! Draws a 3d axis aligned box.
|
||||||
/** This method simply calls draw3DLine for the edges of the
|
/** This method simply calls draw3DLine for the edges of the
|
||||||
box. Note that the box is drawn using the current transformation
|
box. Note that the box is drawn using the current transformation
|
||||||
@ -785,7 +747,7 @@ namespace video
|
|||||||
\param texture Texture to be drawn.
|
\param texture Texture to be drawn.
|
||||||
\param destPos Upper left 2d destination position where the
|
\param destPos Upper left 2d destination position where the
|
||||||
image will be drawn.
|
image will be drawn.
|
||||||
\param sourceRect Source rectangle in the image.
|
\param sourceRect Source rectangle in the texture (based on it's OriginalSize)
|
||||||
\param clipRect Pointer to rectangle on the screen where the
|
\param clipRect Pointer to rectangle on the screen where the
|
||||||
image is clipped to.
|
image is clipped to.
|
||||||
If this pointer is NULL the image is not clipped.
|
If this pointer is NULL the image is not clipped.
|
||||||
@ -799,35 +761,6 @@ namespace video
|
|||||||
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
|
const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
|
||||||
SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
|
SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
|
||||||
|
|
||||||
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
|
||||||
/** The images are drawn beginning at pos and concatenated in
|
|
||||||
one line. All drawings are clipped against clipRect (if != 0).
|
|
||||||
The subtextures are defined by the array of sourceRects and are
|
|
||||||
chosen by the indices given.
|
|
||||||
\param texture Texture to be drawn.
|
|
||||||
\param pos Upper left 2d destination position where the image
|
|
||||||
will be drawn.
|
|
||||||
\param sourceRects Source rectangles of the image.
|
|
||||||
\param indices List of indices which choose the actual
|
|
||||||
rectangle used each time.
|
|
||||||
\param kerningWidth Offset to Position on X
|
|
||||||
\param clipRect Pointer to rectangle on the screen where the
|
|
||||||
image is clipped to.
|
|
||||||
If this pointer is 0 then the image is not clipped.
|
|
||||||
\param color Color with which the image is drawn.
|
|
||||||
Note that the alpha component is used. If alpha is other than
|
|
||||||
255, the image will be transparent.
|
|
||||||
\param useAlphaChannelOfTexture: If true, the alpha channel of
|
|
||||||
the texture is used to draw the image. */
|
|
||||||
virtual void draw2DImageBatch(const video::ITexture* texture,
|
|
||||||
const core::position2d<s32>& pos,
|
|
||||||
const core::array<core::rect<s32> >& sourceRects,
|
|
||||||
const core::array<s32>& indices,
|
|
||||||
s32 kerningWidth=0,
|
|
||||||
const core::rect<s32>* clipRect=0,
|
|
||||||
SColor color=SColor(255,255,255,255),
|
|
||||||
bool useAlphaChannelOfTexture=false) =0;
|
|
||||||
|
|
||||||
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
//! Draws a set of 2d images, using a color and the alpha channel of the texture.
|
||||||
/** All drawings are clipped against clipRect (if != 0).
|
/** All drawings are clipped against clipRect (if != 0).
|
||||||
The subtextures are defined by the array of sourceRects and are
|
The subtextures are defined by the array of sourceRects and are
|
||||||
@ -835,7 +768,7 @@ namespace video
|
|||||||
\param texture Texture to be drawn.
|
\param texture Texture to be drawn.
|
||||||
\param positions Array of upper left 2d destinations where the
|
\param positions Array of upper left 2d destinations where the
|
||||||
images will be drawn.
|
images will be drawn.
|
||||||
\param sourceRects Source rectangles of the image.
|
\param sourceRects Source rectangles of the texture (based on it's OriginalSize)
|
||||||
\param clipRect Pointer to rectangle on the screen where the
|
\param clipRect Pointer to rectangle on the screen where the
|
||||||
images are clipped to.
|
images are clipped to.
|
||||||
If this pointer is 0 then the image is not clipped.
|
If this pointer is 0 then the image is not clipped.
|
||||||
@ -855,7 +788,7 @@ namespace video
|
|||||||
/** Suggested and first implemented by zola.
|
/** Suggested and first implemented by zola.
|
||||||
\param texture The texture to draw from
|
\param texture The texture to draw from
|
||||||
\param destRect The rectangle to draw into
|
\param destRect The rectangle to draw into
|
||||||
\param sourceRect The rectangle denoting a part of the texture
|
\param sourceRect The rectangle denoting a part of the texture (based on it's OriginalSize)
|
||||||
\param clipRect Clips the destination rectangle (may be 0)
|
\param clipRect Clips the destination rectangle (may be 0)
|
||||||
\param colors Array of 4 colors denoting the color values of
|
\param colors Array of 4 colors denoting the color values of
|
||||||
the corners of the destRect
|
the corners of the destRect
|
||||||
@ -898,13 +831,6 @@ namespace video
|
|||||||
SColor colorLeftDown, SColor colorRightDown,
|
SColor colorLeftDown, SColor colorRightDown,
|
||||||
const core::rect<s32>* clip =0) =0;
|
const core::rect<s32>* clip =0) =0;
|
||||||
|
|
||||||
//! Draws the outline of a 2D rectangle.
|
|
||||||
/** \param pos Position of the rectangle.
|
|
||||||
\param color Color of the rectangle to draw. The alpha component
|
|
||||||
specifies how transparent the rectangle outline will be. */
|
|
||||||
virtual void draw2DRectangleOutline(const core::recti& pos,
|
|
||||||
SColor color=SColor(255,255,255,255)) =0;
|
|
||||||
|
|
||||||
//! Draws a 2d line.
|
//! Draws a 2d line.
|
||||||
/** In theory both start and end will be included in coloring.
|
/** In theory both start and end will be included in coloring.
|
||||||
BUG: Currently d3d ignores the last pixel
|
BUG: Currently d3d ignores the last pixel
|
||||||
@ -918,72 +844,6 @@ namespace video
|
|||||||
const core::position2d<s32>& end,
|
const core::position2d<s32>& end,
|
||||||
SColor color=SColor(255,255,255,255)) =0;
|
SColor color=SColor(255,255,255,255)) =0;
|
||||||
|
|
||||||
//! Draws a pixel.
|
|
||||||
/** \param x The x-position of the pixel.
|
|
||||||
\param y The y-position of the pixel.
|
|
||||||
\param color Color of the pixel to draw. */
|
|
||||||
virtual void drawPixel(u32 x, u32 y, const SColor& color) =0;
|
|
||||||
|
|
||||||
//! Draws a non filled concyclic regular 2d polygon.
|
|
||||||
/** This method can be used to draw circles, but also
|
|
||||||
triangles, tetragons, pentagons, hexagons, heptagons, octagons,
|
|
||||||
enneagons, decagons, hendecagons, dodecagon, triskaidecagons,
|
|
||||||
etc. I think you'll got it now. And all this by simply
|
|
||||||
specifying the vertex count. Welcome to the wonders of
|
|
||||||
geometry.
|
|
||||||
\param center Position of center of circle (pixels).
|
|
||||||
\param radius Radius of circle in pixels.
|
|
||||||
\param color Color of the circle.
|
|
||||||
\param vertexCount Amount of vertices of the polygon. Specify 2
|
|
||||||
to draw a line, 3 to draw a triangle, 4 for tetragons and a lot
|
|
||||||
(>10) for nearly a circle. */
|
|
||||||
virtual void draw2DPolygon(core::position2d<s32> center,
|
|
||||||
f32 radius,
|
|
||||||
video::SColor color=SColor(100,255,255,255),
|
|
||||||
s32 vertexCount=10) =0;
|
|
||||||
|
|
||||||
//! Draws a shadow volume into the stencil buffer.
|
|
||||||
/** To draw a stencil shadow, do this: First, draw all geometry.
|
|
||||||
Then use this method, to draw the shadow volume. Then, use
|
|
||||||
IVideoDriver::drawStencilShadow() to visualize the shadow.
|
|
||||||
Please note that the code for the opengl version of the method
|
|
||||||
is based on free code sent in by Philipp Dortmann, lots of
|
|
||||||
thanks go to him!
|
|
||||||
\param triangles Array of 3d vectors, specifying the shadow
|
|
||||||
volume.
|
|
||||||
\param zfail If set to true, zfail method is used, otherwise
|
|
||||||
zpass.
|
|
||||||
\param debugDataVisible The debug data that is enabled for this
|
|
||||||
shadow node
|
|
||||||
*/
|
|
||||||
virtual void drawStencilShadowVolume(const core::array<core::vector3df>& triangles, bool zfail=true, u32 debugDataVisible=0) =0;
|
|
||||||
|
|
||||||
//! Fills the stencil shadow with color.
|
|
||||||
/** After the shadow volume has been drawn into the stencil
|
|
||||||
buffer using IVideoDriver::drawStencilShadowVolume(), use this
|
|
||||||
to draw the color of the shadow.
|
|
||||||
Please note that the code for the opengl version of the method
|
|
||||||
is based on free code sent in by Philipp Dortmann, lots of
|
|
||||||
thanks go to him!
|
|
||||||
\param clearStencilBuffer Set this to false, if you want to
|
|
||||||
draw every shadow with the same color, and only want to call
|
|
||||||
drawStencilShadow() once after all shadow volumes have been
|
|
||||||
drawn. Set this to true, if you want to paint every shadow with
|
|
||||||
its own color.
|
|
||||||
\param leftUpEdge Color of the shadow in the upper left corner
|
|
||||||
of screen.
|
|
||||||
\param rightUpEdge Color of the shadow in the upper right
|
|
||||||
corner of screen.
|
|
||||||
\param leftDownEdge Color of the shadow in the lower left
|
|
||||||
corner of screen.
|
|
||||||
\param rightDownEdge Color of the shadow in the lower right
|
|
||||||
corner of screen. */
|
|
||||||
virtual void drawStencilShadow(bool clearStencilBuffer=false,
|
|
||||||
video::SColor leftUpEdge = video::SColor(255,0,0,0),
|
|
||||||
video::SColor rightUpEdge = video::SColor(255,0,0,0),
|
|
||||||
video::SColor leftDownEdge = video::SColor(255,0,0,0),
|
|
||||||
video::SColor rightDownEdge = video::SColor(255,0,0,0)) =0;
|
|
||||||
|
|
||||||
//! Draws a mesh buffer
|
//! Draws a mesh buffer
|
||||||
/** \param mb Buffer to draw */
|
/** \param mb Buffer to draw */
|
||||||
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
|
virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
|
||||||
@ -1099,28 +959,6 @@ namespace video
|
|||||||
\return The current texture creation flag enabled mode. */
|
\return The current texture creation flag enabled mode. */
|
||||||
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
|
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
|
||||||
|
|
||||||
//! Creates a software images from a file.
|
|
||||||
/** No hardware texture will be created for those images. This
|
|
||||||
method is useful for example if you want to read a heightmap
|
|
||||||
for a terrain renderer.
|
|
||||||
\param filename Name of the file from which the images are created.
|
|
||||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
|
||||||
\return The array of created images.
|
|
||||||
If you no longer need those images, you should call IImage::drop() on each of them.
|
|
||||||
See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual core::array<IImage*> createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type = 0) = 0;
|
|
||||||
|
|
||||||
//! Creates a software images from a file.
|
|
||||||
/** No hardware texture will be created for those images. This
|
|
||||||
method is useful for example if you want to read a heightmap
|
|
||||||
for a terrain renderer.
|
|
||||||
\param file File from which the image is created.
|
|
||||||
\param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.
|
|
||||||
\return The array of created images.
|
|
||||||
If you no longer need those images, you should call IImage::drop() on each of them.
|
|
||||||
See IReferenceCounted::drop() for more information. */
|
|
||||||
virtual core::array<IImage*> createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type = 0) = 0;
|
|
||||||
|
|
||||||
//! Creates a software image from a file.
|
//! Creates a software image from a file.
|
||||||
/** No hardware texture will be created for this image. This
|
/** No hardware texture will be created for this image. This
|
||||||
method is useful for example if you want to read a heightmap
|
method is useful for example if you want to read a heightmap
|
||||||
@ -1130,15 +968,7 @@ namespace video
|
|||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
IImage* createImageFromFile(const io::path& filename)
|
virtual IImage* createImageFromFile(const io::path& filename) = 0;
|
||||||
{
|
|
||||||
core::array<IImage*> imageArray = createImagesFromFile(filename);
|
|
||||||
|
|
||||||
for (u32 i = 1; i < imageArray.size(); ++i)
|
|
||||||
imageArray[i]->drop();
|
|
||||||
|
|
||||||
return (imageArray.size() > 0) ? imageArray[0] : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Creates a software image from a file.
|
//! Creates a software image from a file.
|
||||||
/** No hardware texture will be created for this image. This
|
/** No hardware texture will be created for this image. This
|
||||||
@ -1148,15 +978,7 @@ namespace video
|
|||||||
\return The created image.
|
\return The created image.
|
||||||
If you no longer need the image, you should call IImage::drop().
|
If you no longer need the image, you should call IImage::drop().
|
||||||
See IReferenceCounted::drop() for more information. */
|
See IReferenceCounted::drop() for more information. */
|
||||||
IImage* createImageFromFile(io::IReadFile* file)
|
virtual IImage* createImageFromFile(io::IReadFile* file) = 0;
|
||||||
{
|
|
||||||
core::array<IImage*> imageArray = createImagesFromFile(file);
|
|
||||||
|
|
||||||
for (u32 i = 1; i < imageArray.size(); ++i)
|
|
||||||
imageArray[i]->drop();
|
|
||||||
|
|
||||||
return (imageArray.size() > 0) ? imageArray[0] : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Writes the provided image to a file.
|
//! Writes the provided image to a file.
|
||||||
/** Requires that there is a suitable image writer registered
|
/** Requires that there is a suitable image writer registered
|
||||||
@ -1300,7 +1122,7 @@ namespace video
|
|||||||
E_MATERIAL_TYPE enum or a value which was returned by
|
E_MATERIAL_TYPE enum or a value which was returned by
|
||||||
addMaterialRenderer().
|
addMaterialRenderer().
|
||||||
\param name: New name of the material renderer. */
|
\param name: New name of the material renderer. */
|
||||||
virtual void setMaterialRendererName(s32 idx, const c8* name) =0;
|
virtual void setMaterialRendererName(u32 idx, const c8* name) =0;
|
||||||
|
|
||||||
//! Swap the material renderers used for certain id's
|
//! Swap the material renderers used for certain id's
|
||||||
/** Swap the IMaterialRenderers responsible for rendering specific
|
/** Swap the IMaterialRenderers responsible for rendering specific
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
|
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||||
|
|
||||||
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
//! Identifies the IrrlichtMt fork customized for the Minetest engine
|
||||||
#define IRRLICHT_VERSION_MT_REVISION 9
|
#define IRRLICHT_VERSION_MT_REVISION 12
|
||||||
#define IRRLICHT_VERSION_MT "mt9"
|
#define IRRLICHT_VERSION_MT "mt12"
|
||||||
|
|
||||||
//! Irrlicht SDK Version
|
//! Irrlicht SDK Version
|
||||||
#define IRRLICHT_VERSION_MAJOR 1
|
#define IRRLICHT_VERSION_MAJOR 1
|
||||||
@ -20,454 +20,14 @@
|
|||||||
|
|
||||||
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
|
#include <stdio.h> // TODO: Although included elsewhere this is required at least for mingw
|
||||||
|
|
||||||
//! The defines for different operating system are:
|
#ifdef _WIN32
|
||||||
//! _IRR_WINDOWS_ for all irrlicht supported Windows versions
|
|
||||||
//! _IRR_WINDOWS_API_ for Windows or XBox
|
|
||||||
//! _IRR_LINUX_PLATFORM_ for Linux (it is defined here if no other os is defined)
|
|
||||||
//! _IRR_SOLARIS_PLATFORM_ for Solaris
|
|
||||||
//! _IRR_OSX_PLATFORM_ for Apple systems running OSX
|
|
||||||
//! _IRR_IOS_PLATFORM_ for Apple devices running iOS
|
|
||||||
//! _IRR_ANDROID_PLATFORM_ for devices running Android
|
|
||||||
//! _IRR_POSIX_API_ for Posix compatible systems
|
|
||||||
//! Note: PLATFORM defines the OS specific layer, API can group several platforms
|
|
||||||
|
|
||||||
//! DEVICE is the windowing system used, several PLATFORMs support more than one DEVICE
|
|
||||||
//! Irrlicht can be compiled with more than one device
|
|
||||||
//! _IRR_COMPILE_WITH_WINDOWS_DEVICE_ for Windows API based device
|
|
||||||
//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX
|
|
||||||
//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device
|
|
||||||
//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework
|
|
||||||
|
|
||||||
//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative
|
|
||||||
//! way which can be used to disable defines (instead of outcommenting them in this header).
|
|
||||||
//! So defines can be controlled from Makefiles or Projectfiles which allows building
|
|
||||||
//! different library versions without having to change the sources.
|
|
||||||
//! Example: NO_IRR_COMPILE_WITH_X11_ would disable X11
|
|
||||||
|
|
||||||
//! Uncomment this line to compile with the SDL device
|
|
||||||
//#define _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#undef _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! WIN32 for Windows32
|
|
||||||
//! WIN64 for Windows64
|
|
||||||
// The windows platform and API support SDL and WINDOW device
|
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
|
||||||
#define _IRR_WINDOWS_
|
|
||||||
#define _IRR_WINDOWS_API_
|
|
||||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
|
|
||||||
#define _IRR_IOS_PLATFORM_
|
|
||||||
#define _IRR_COMPILE_WITH_IOS_DEVICE_
|
|
||||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
|
||||||
// The application state events and following methods: IrrlichtDevice::isWindowActive, IrrlichtDevice::isWindowFocused,
|
|
||||||
// IrrlichtDevice::isWindowMinimized works out of box only if you'll use built-in CIrrDelegateiOS,
|
|
||||||
// so _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ must be enabled in this case. If you need a custom UIApplicationDelegate
|
|
||||||
// you must disable _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_ definition and handle all application events yourself.
|
|
||||||
#define _IRR_COMPILE_WITH_IOS_BUILTIN_MAIN_
|
|
||||||
#else
|
|
||||||
#define _IRR_OSX_PLATFORM_
|
|
||||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#define _IRR_COMPILE_WITH_OSX_DEVICE_
|
|
||||||
#endif
|
|
||||||
#define NO_IRR_COMPILE_WITH_OGLES1_
|
|
||||||
#define NO_IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#define NO_IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__EMSCRIPTEN__)
|
|
||||||
#define _IRR_EMSCRIPTEN_PLATFORM_
|
|
||||||
#define NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
|
||||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
|
||||||
#define NO_IRR_COMPILE_WITH_OGLES1_
|
|
||||||
#define _IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#define _IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
|
||||||
#define _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#define NO_IRR_COMPILE_WITH_X11_DEVICE_
|
|
||||||
#define _IRR_LINUX_PLATFORM_ // emscripten basically working like a unix
|
|
||||||
#endif // __EMSCRIPTEN__
|
|
||||||
|
|
||||||
#if defined(__ANDROID__)
|
|
||||||
#define _IRR_ANDROID_PLATFORM_
|
|
||||||
#define _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
|
||||||
#define _IRR_COMPILE_ANDROID_ASSET_READER_
|
|
||||||
#define NO_IRR_COMPILE_WITH_OPENGL_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__SVR4) && defined(__sun)
|
|
||||||
#define _IRR_SOLARIS_PLATFORM_
|
|
||||||
#if defined(__sparc)
|
|
||||||
#define __BIG_ENDIAN__
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(_IRR_WINDOWS_API_) && !defined(_IRR_OSX_PLATFORM_) && !defined(_IRR_IOS_PLATFORM_) && !defined(_IRR_ANDROID_PLATFORM_) && !defined(_IRR_EMSCRIPTEN_PLATFORM_)
|
|
||||||
#ifndef _IRR_SOLARIS_PLATFORM_
|
|
||||||
#define _IRR_LINUX_PLATFORM_
|
|
||||||
#endif
|
|
||||||
#define _IRR_POSIX_API_
|
|
||||||
#ifndef _IRR_COMPILE_WITH_SDL_DEVICE_
|
|
||||||
#define _IRR_COMPILE_WITH_X11_DEVICE_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_JOYSTICK_SUPPORT_ if you want joystick events.
|
|
||||||
#if !(defined(__FreeBSD__) || defined(__OpenBSD__))
|
|
||||||
#define _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
|
||||||
#endif
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
|
||||||
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht.
|
|
||||||
#define _IRR_MATERIAL_MAX_TEXTURES_ 4
|
|
||||||
|
|
||||||
//! Add a leak-hunter to Irrlicht which helps finding unreleased reference counted objects.
|
|
||||||
//! NOTE: This is slow and should only be used for debugging
|
|
||||||
//#define _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
#undef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Enable profiling information in the engine
|
|
||||||
/** NOTE: The profiler itself always exists and can be used by applications.
|
|
||||||
This define is about the engine creating profile data
|
|
||||||
while it runs and enabling it will slow down the engine. */
|
|
||||||
//#define _IRR_COMPILE_WITH_PROFILING_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_PROFILING_
|
|
||||||
#undef _IRR_COMPILE_WITH_PROFILING_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_DIRECT3D_9_ to compile the Irrlicht engine with DIRECT3D9.
|
|
||||||
/** If you only want to use the software device or opengl you can disable those defines.
|
|
||||||
This switch is mostly disabled because people do not get the g++ compiler compile
|
|
||||||
directX header files, and directX is only available on Windows platforms. If you
|
|
||||||
are using Dev-Cpp, and want to compile this using a DX dev pack, you can define
|
|
||||||
_IRR_COMPILE_WITH_DX9_DEV_PACK_. So you simply need to add something like this
|
|
||||||
to the compiler settings: -DIRR_COMPILE_WITH_DX9_DEV_PACK
|
|
||||||
and this to the linker settings: -ld3dx9
|
|
||||||
*/
|
|
||||||
#if defined(_IRR_WINDOWS_API_) && defined(IRR_COMPILE_WITH_DX9_DEV_PACK)
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ if you want to use DirectInput for joystick handling.
|
|
||||||
/** This only applies to Windows devices, currently only supported under Win32 device.
|
|
||||||
If not defined, Windows Multimedia library is used, which offers also broad support for joystick devices. */
|
|
||||||
#define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
|
||||||
#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_OPENGL_ to compile the Irrlicht engine with OpenGL.
|
|
||||||
/** If you do not wish the engine to be compiled with OpenGL, comment this
|
|
||||||
define out. */
|
|
||||||
#define _IRR_COMPILE_WITH_OPENGL_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_OPENGL_
|
|
||||||
#undef _IRR_COMPILE_WITH_OPENGL_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define required options for OpenGL drivers.
|
|
||||||
#if defined(_IRR_COMPILE_WITH_OPENGL_)
|
|
||||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
|
|
||||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
|
||||||
#define _IRR_COMPILE_WITH_WGL_MANAGER_
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
|
|
||||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
|
||||||
#define _IRR_COMPILE_WITH_GLX_MANAGER_
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
|
|
||||||
#define _IRR_COMPILE_WITH_NSOGL_MANAGER_
|
|
||||||
#elif defined(_IRR_SOLARIS_PLATFORM_)
|
|
||||||
#define _IRR_COMPILE_WITH_GLX_MANAGER_
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_)
|
|
||||||
#define _IRR_OPENGL_USE_EXTPOINTER_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_OGLES1_ to compile the Irrlicht engine with OpenGL ES 1.1.
|
|
||||||
/** If you do not wish the engine to be compiled with OpenGL ES 1.1, comment this
|
|
||||||
define out.
|
|
||||||
Depending on platform you may have to enable _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ as well when using it.
|
|
||||||
*/
|
|
||||||
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
|
|
||||||
#define _IRR_COMPILE_WITH_OGLES1_
|
|
||||||
#endif
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_OGLES1_
|
|
||||||
#undef _IRR_COMPILE_WITH_OGLES1_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_OGLES1_
|
|
||||||
//! Define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_ to use the OpenGL ES headers from the Debian Khronos-api package
|
|
||||||
//#define _IRR_OGLES1_USE_KHRONOS_API_HEADERS_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define required options for OpenGL ES 1.1 drivers.
|
|
||||||
#if defined(_IRR_COMPILE_WITH_OGLES1_)
|
|
||||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
|
|
||||||
#define _IRR_OGLES1_USE_EXTPOINTER_
|
|
||||||
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
|
|
||||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
|
||||||
#endif
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
|
|
||||||
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_OGLES2_ to compile the Irrlicht engine with OpenGL ES 2.0.
|
|
||||||
/** If you do not wish the engine to be compiled with OpenGL ES 2.0, comment this
|
|
||||||
define out. */
|
|
||||||
#if defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)
|
|
||||||
#define _IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#else
|
|
||||||
//#define _IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#endif
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#undef _IRR_COMPILE_WITH_OGLES2_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_WEBGL1_ to compile Irrlicht engine with a WebGL friendly
|
|
||||||
//! subset of the OpenGL ES 2.0 driver.
|
|
||||||
//#define _IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#undef _IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#endif
|
|
||||||
#ifdef _IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
#define _IRR_COMPILE_WITH_OGLES2_ // it's a subset of OGL ES2, so always needed when using WebGL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define required options for OpenGL ES 2.0 drivers.
|
|
||||||
#if defined(_IRR_COMPILE_WITH_OGLES2_)
|
|
||||||
#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) || defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(__EMSCRIPTEN__)
|
|
||||||
#define _IRR_OGLES2_USE_EXTPOINTER_
|
|
||||||
#ifndef _IRR_COMPILE_WITH_EGL_MANAGER_
|
|
||||||
#define _IRR_COMPILE_WITH_EGL_MANAGER_
|
|
||||||
#endif
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_IOS_DEVICE_)
|
|
||||||
#ifndef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
#define _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_X11_ to compile the Irrlicht engine with X11 support.
|
|
||||||
/** If you do not wish the engine to be compiled with X11, comment this
|
|
||||||
define out. */
|
|
||||||
// Only used in LinuxDevice.
|
|
||||||
#define _IRR_COMPILE_WITH_X11_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_X11_
|
|
||||||
#undef _IRR_COMPILE_WITH_X11_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_)
|
|
||||||
//! XInput2 (library called Xi) is currently only used to support touch-input.
|
|
||||||
#define _IRR_LINUX_X11_XINPUT2_
|
|
||||||
#ifdef NO_IRR_LINUX_X11_XINPUT2_
|
|
||||||
#undef _IRR_LINUX_X11_XINPUT2_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! X11 has by default only monochrome cursors, but using the Xcursor library we can also get color cursor support.
|
|
||||||
//! If you have the need for custom color cursors on X11 then enable this and make sure you also link
|
|
||||||
//! to the Xcursor library in your Makefile/Projectfile.
|
|
||||||
//#define _IRR_LINUX_XCURSOR_
|
|
||||||
#ifdef NO_IRR_LINUX_XCURSOR_
|
|
||||||
#undef _IRR_LINUX_XCURSOR_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_GUI_ to compile the engine with the built-in GUI
|
|
||||||
/** Disable this if you are using an external library to draw the GUI. If you disable this then
|
|
||||||
you will not be able to use anything provided by the GUI Environment, including loading fonts. */
|
|
||||||
#define _IRR_COMPILE_WITH_GUI_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_GUI_
|
|
||||||
#undef _IRR_COMPILE_WITH_GUI_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_LIBJPEG_ to enable compiling the engine using libjpeg.
|
|
||||||
/** This enables the engine to read jpeg images. If you comment this out,
|
|
||||||
the engine will no longer read .jpeg images. */
|
|
||||||
#define _IRR_COMPILE_WITH_LIBJPEG_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_LIBJPEG_
|
|
||||||
#undef _IRR_COMPILE_WITH_LIBJPEG_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_LIBPNG_ to enable compiling the engine using libpng.
|
|
||||||
/** This enables the engine to read png images. If you comment this out,
|
|
||||||
the engine will no longer read .png images. */
|
|
||||||
#define _IRR_COMPILE_WITH_LIBPNG_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_LIBPNG_
|
|
||||||
#undef _IRR_COMPILE_WITH_LIBPNG_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Uncomment the following line if you want to ignore the deprecated warnings
|
|
||||||
//#define IGNORE_DEPRECATED_WARNING
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_ to support BillboardSceneNodes
|
|
||||||
#define _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
|
||||||
#undef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ if you want to use bone based
|
|
||||||
/** animated meshes. If you compile without this, you will be unable to load
|
|
||||||
B3D, MS3D or X meshes */
|
|
||||||
#define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
#undef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
//! Define _IRR_COMPILE_WITH_B3D_LOADER_ if you want to use Blitz3D files
|
|
||||||
#define _IRR_COMPILE_WITH_B3D_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_B3D_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_B3D_LOADER_
|
|
||||||
#endif
|
|
||||||
//! Define _IRR_COMPILE_WITH_X_LOADER_ if you want to use Microsoft X files
|
|
||||||
#define _IRR_COMPILE_WITH_X_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_X_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_X_LOADER_
|
|
||||||
#endif
|
|
||||||
#endif // _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_OBJ_LOADER_ if you want to load Wavefront OBJ files
|
|
||||||
#define _IRR_COMPILE_WITH_OBJ_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_OBJ_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_OBJ_LOADER_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files
|
|
||||||
//! Disabling this loader will also disable the built-in font
|
|
||||||
#define _IRR_COMPILE_WITH_BMP_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_BMP_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_BMP_LOADER_
|
|
||||||
#endif
|
|
||||||
//! Define _IRR_COMPILE_WITH_JPG_LOADER_ if you want to load .jpg files
|
|
||||||
#define _IRR_COMPILE_WITH_JPG_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_JPG_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_JPG_LOADER_
|
|
||||||
#endif
|
|
||||||
//! Define _IRR_COMPILE_WITH_PNG_LOADER_ if you want to load .png files
|
|
||||||
#define _IRR_COMPILE_WITH_PNG_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_PNG_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_PNG_LOADER_
|
|
||||||
#endif
|
|
||||||
//! Define _IRR_COMPILE_WITH_TGA_LOADER_ if you want to load .tga files
|
|
||||||
#define _IRR_COMPILE_WITH_TGA_LOADER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_TGA_LOADER_
|
|
||||||
#undef _IRR_COMPILE_WITH_TGA_LOADER_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define _IRR_COMPILE_WITH_JPG_WRITER_ if you want to write .jpg files
|
|
||||||
#define _IRR_COMPILE_WITH_JPG_WRITER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_JPG_WRITER_
|
|
||||||
#undef _IRR_COMPILE_WITH_JPG_WRITER_
|
|
||||||
#endif
|
|
||||||
//! Define _IRR_COMPILE_WITH_PNG_WRITER_ if you want to write .png files
|
|
||||||
#define _IRR_COMPILE_WITH_PNG_WRITER_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_PNG_WRITER_
|
|
||||||
#undef _IRR_COMPILE_WITH_PNG_WRITER_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ if you want to open ZIP and GZIP archives
|
|
||||||
/** ZIP reading has several more options below to configure. */
|
|
||||||
#define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
|
||||||
#ifdef NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
|
||||||
#undef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
|
||||||
#endif
|
|
||||||
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
|
||||||
//! Define _IRR_COMPILE_WITH_ZLIB_ to enable compiling the engine using zlib.
|
|
||||||
/** This enables the engine to read from compressed .zip archives. If you
|
|
||||||
disable this feature, the engine can still read archives, but only uncompressed
|
|
||||||
ones. */
|
|
||||||
#define _IRR_COMPILE_WITH_ZLIB_
|
|
||||||
#ifdef NO_IRR_COMPILE_WITH_ZLIB_
|
|
||||||
#undef _IRR_COMPILE_WITH_ZLIB_
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//! Define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ if you want to mount folders as archives
|
|
||||||
#define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
|
||||||
#ifdef NO__IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
|
||||||
#undef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Some cleanup and standard stuff
|
|
||||||
|
|
||||||
#ifdef _IRR_WINDOWS_API_
|
|
||||||
|
|
||||||
// To build Irrlicht as a static library, you must define _IRR_STATIC_LIB_ in both the
|
|
||||||
// Irrlicht build, *and* in the user application, before #including <irrlicht.h>
|
|
||||||
#ifndef _IRR_STATIC_LIB_
|
|
||||||
#ifdef IRRLICHT_EXPORTS
|
|
||||||
#define IRRLICHT_API __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define IRRLICHT_API __declspec(dllimport)
|
|
||||||
#endif // IRRLICHT_EXPORT
|
|
||||||
#else
|
|
||||||
#define IRRLICHT_API
|
|
||||||
#endif // _IRR_STATIC_LIB_
|
|
||||||
|
|
||||||
// Declare the calling convention.
|
|
||||||
#if defined(_STDCALL_SUPPORTED)
|
|
||||||
#define IRRCALLCONV __stdcall
|
#define IRRCALLCONV __stdcall
|
||||||
#else
|
#else
|
||||||
#define IRRCALLCONV __cdecl
|
|
||||||
#endif // STDCALL_SUPPORTED
|
|
||||||
|
|
||||||
#else // _IRR_WINDOWS_API_
|
|
||||||
|
|
||||||
// Force symbol export in shared libraries built with gcc.
|
|
||||||
#if defined(__GNUC__) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS)
|
|
||||||
#define IRRLICHT_API __attribute__ ((visibility("default")))
|
|
||||||
#else
|
|
||||||
#define IRRLICHT_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define IRRCALLCONV
|
#define IRRCALLCONV
|
||||||
|
|
||||||
#endif // _IRR_WINDOWS_API_
|
|
||||||
|
|
||||||
#if defined(_IRR_SOLARIS_PLATFORM_)
|
|
||||||
#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Define __IRR_HAS_S64 if the irr::s64 type should be enable (needs long long, available on most platforms, but not part of ISO C++ 98)
|
#ifndef IRRLICHT_API
|
||||||
#define __IRR_HAS_S64
|
#define IRRLICHT_API
|
||||||
#ifdef NO__IRR_HAS_S64
|
|
||||||
#undef __IRR_HAS_S64
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __has_feature
|
|
||||||
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
//! A few attributes are written in CSceneManager when _IRR_SCENEMANAGER_DEBUG is enabled
|
|
||||||
// NOTE: Those attributes were used always until 1.8.0 and became a global define for 1.8.1
|
|
||||||
// which is only enabled in debug because it had a large (sometimes >5%) impact on speed.
|
|
||||||
// A better solution in the long run is to break the interface and remove _all_ attribute
|
|
||||||
// access in functions like CSceneManager::drawAll and instead put that information in some
|
|
||||||
// own struct/class or in CSceneManager.
|
|
||||||
// See http://irrlicht.sourceforge.net/forum/viewtopic.php?f=2&t=48211 for the discussion.
|
|
||||||
#define _IRR_SCENEMANAGER_DEBUG
|
|
||||||
#ifdef NO_IRR_SCENEMANAGER_DEBUG
|
|
||||||
#undef _IRR_SCENEMANAGER_DEBUG
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // __IRR_COMPILE_CONFIG_H_INCLUDED__
|
#endif // __IRR_COMPILE_CONFIG_H_INCLUDED__
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "ICursorControl.h"
|
#include "ICursorControl.h"
|
||||||
#include "ITimer.h"
|
#include "ITimer.h"
|
||||||
#include "IOSOperator.h"
|
#include "IOSOperator.h"
|
||||||
|
#include "IrrCompileConfig.h"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
@ -34,6 +35,7 @@ namespace irr
|
|||||||
|
|
||||||
namespace video {
|
namespace video {
|
||||||
class IContextManager;
|
class IContextManager;
|
||||||
|
extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver);
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
||||||
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
|
//! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
|
||||||
@ -130,6 +132,11 @@ namespace irr
|
|||||||
/** \param text: New text of the window caption. */
|
/** \param text: New text of the window caption. */
|
||||||
virtual void setWindowCaption(const wchar_t* text) = 0;
|
virtual void setWindowCaption(const wchar_t* text) = 0;
|
||||||
|
|
||||||
|
//! Sets the window icon.
|
||||||
|
/** \param img The icon texture.
|
||||||
|
\return False if no icon was set. */
|
||||||
|
virtual bool setWindowIcon(const video::IImage *img) = 0;
|
||||||
|
|
||||||
//! Returns if the window is active.
|
//! Returns if the window is active.
|
||||||
/** If the window is inactive,
|
/** If the window is inactive,
|
||||||
nothing needs to be drawn. So if you don't want to draw anything
|
nothing needs to be drawn. So if you don't want to draw anything
|
||||||
@ -156,6 +163,12 @@ namespace irr
|
|||||||
/** \return True if window is minimized. */
|
/** \return True if window is minimized. */
|
||||||
virtual bool isWindowMinimized() const = 0;
|
virtual bool isWindowMinimized() const = 0;
|
||||||
|
|
||||||
|
//! Checks if the Irrlicht window is maximized
|
||||||
|
//! Only fully works on SDL. Returns false, or the last value set via
|
||||||
|
//! maximizeWindow() and restoreWindow(), on other backends.
|
||||||
|
/** \return True if window is maximized. */
|
||||||
|
virtual bool isWindowMaximized() const = 0;
|
||||||
|
|
||||||
//! Checks if the Irrlicht window is running in fullscreen mode
|
//! Checks if the Irrlicht window is running in fullscreen mode
|
||||||
/** \return True if window is fullscreen. */
|
/** \return True if window is fullscreen. */
|
||||||
virtual bool isFullscreen() const = 0;
|
virtual bool isFullscreen() const = 0;
|
||||||
@ -229,8 +242,8 @@ namespace irr
|
|||||||
as this would consume joystick info that 3rd party libraries might rely on. Call this method to
|
as this would consume joystick info that 3rd party libraries might rely on. Call this method to
|
||||||
activate joystick support in Irrlicht and to receive irr::SJoystickEvent events.
|
activate joystick support in Irrlicht and to receive irr::SJoystickEvent events.
|
||||||
\param joystickInfo On return, this will contain an array of each joystick that was found and activated.
|
\param joystickInfo On return, this will contain an array of each joystick that was found and activated.
|
||||||
\return true if joysticks are supported on this device and _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
|
\return true if joysticks are supported on this device, false if joysticks are not
|
||||||
is defined, false if joysticks are not supported or support is compiled out.
|
supported or support is compiled out.
|
||||||
*/
|
*/
|
||||||
virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0;
|
virtual bool activateJoysticks(core::array<SJoystickInfo>& joystickInfo) =0;
|
||||||
|
|
||||||
@ -299,42 +312,16 @@ namespace irr
|
|||||||
used. */
|
used. */
|
||||||
virtual E_DEVICE_TYPE getType() const = 0;
|
virtual E_DEVICE_TYPE getType() const = 0;
|
||||||
|
|
||||||
|
//! Get the display density in dots per inch.
|
||||||
|
//! Returns 0.0f on failure.
|
||||||
|
virtual float getDisplayDensity() const = 0;
|
||||||
|
|
||||||
//! Check if a driver type is supported by the engine.
|
//! Check if a driver type is supported by the engine.
|
||||||
/** Even if true is returned the driver may not be available
|
/** Even if true is returned the driver may not be available
|
||||||
for a configuration requested when creating the device. */
|
for a configuration requested when creating the device. */
|
||||||
static bool isDriverSupported(video::E_DRIVER_TYPE driver)
|
static bool isDriverSupported(video::E_DRIVER_TYPE driver)
|
||||||
{
|
{
|
||||||
switch (driver)
|
return video::isDriverSupported(driver);
|
||||||
{
|
|
||||||
case video::EDT_NULL:
|
|
||||||
return true;
|
|
||||||
case video::EDT_OPENGL:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_OGLES1:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_OGLES1_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_OGLES2:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_OGLES2_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case video::EDT_WEBGL1:
|
|
||||||
#ifdef _IRR_COMPILE_WITH_WEBGL1_
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ enum E_VERTEX_TYPE
|
|||||||
EVT_2TCOORDS,
|
EVT_2TCOORDS,
|
||||||
|
|
||||||
//! Vertex with a tangent and binormal vector, video::S3DVertexTangents.
|
//! Vertex with a tangent and binormal vector, video::S3DVertexTangents.
|
||||||
/** Usually used for tangent space normal mapping.
|
/** Usually used for tangent space normal mapping.
|
||||||
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
||||||
*/
|
*/
|
||||||
EVT_TANGENTS
|
EVT_TANGENTS
|
||||||
@ -44,7 +44,7 @@ const char* const sBuiltInVertexTypeNames[] =
|
|||||||
struct S3DVertex
|
struct S3DVertex
|
||||||
{
|
{
|
||||||
//! default constructor
|
//! default constructor
|
||||||
S3DVertex() {}
|
S3DVertex() : Color(0xffffffff) {}
|
||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
|
S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv)
|
||||||
@ -142,7 +142,7 @@ struct S3DVertex2TCoords : public S3DVertex
|
|||||||
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
|
: S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {}
|
||||||
|
|
||||||
//! constructor from S3DVertex
|
//! constructor from S3DVertex
|
||||||
S3DVertex2TCoords(S3DVertex& o) : S3DVertex(o) {}
|
S3DVertex2TCoords(const S3DVertex& o) : S3DVertex(o) {}
|
||||||
|
|
||||||
//! Second set of texture coordinates
|
//! Second set of texture coordinates
|
||||||
core::vector2d<f32> TCoords2;
|
core::vector2d<f32> TCoords2;
|
||||||
@ -150,21 +150,21 @@ struct S3DVertex2TCoords : public S3DVertex
|
|||||||
//! Equality operator
|
//! Equality operator
|
||||||
bool operator==(const S3DVertex2TCoords& other) const
|
bool operator==(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)==other) &&
|
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||||
(TCoords2 == other.TCoords2));
|
(TCoords2 == other.TCoords2));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Inequality operator
|
//! Inequality operator
|
||||||
bool operator!=(const S3DVertex2TCoords& other) const
|
bool operator!=(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)!=other) ||
|
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||||
(TCoords2 != other.TCoords2));
|
(TCoords2 != other.TCoords2));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator<(const S3DVertex2TCoords& other) const
|
bool operator<(const S3DVertex2TCoords& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||||
((static_cast<S3DVertex>(*this) == other) && (TCoords2 < other.TCoords2)));
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (TCoords2 < other.TCoords2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static E_VERTEX_TYPE getType()
|
static E_VERTEX_TYPE getType()
|
||||||
@ -186,7 +186,7 @@ struct S3DVertex2TCoords : public S3DVertex
|
|||||||
|
|
||||||
|
|
||||||
//! Vertex with a tangent and binormal vector.
|
//! Vertex with a tangent and binormal vector.
|
||||||
/** Usually used for tangent space normal mapping.
|
/** Usually used for tangent space normal mapping.
|
||||||
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
Usually tangent and binormal get send to shaders as texture coordinate sets 1 and 2.
|
||||||
*/
|
*/
|
||||||
struct S3DVertexTangents : public S3DVertex
|
struct S3DVertexTangents : public S3DVertex
|
||||||
@ -214,6 +214,9 @@ struct S3DVertexTangents : public S3DVertex
|
|||||||
const core::vector3df& binormal=core::vector3df())
|
const core::vector3df& binormal=core::vector3df())
|
||||||
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
|
: S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { }
|
||||||
|
|
||||||
|
//! constructor from S3DVertex
|
||||||
|
S3DVertexTangents(const S3DVertex& o) : S3DVertex(o) {}
|
||||||
|
|
||||||
//! Tangent vector along the x-axis of the texture
|
//! Tangent vector along the x-axis of the texture
|
||||||
core::vector3df Tangent;
|
core::vector3df Tangent;
|
||||||
|
|
||||||
@ -222,14 +225,14 @@ struct S3DVertexTangents : public S3DVertex
|
|||||||
|
|
||||||
bool operator==(const S3DVertexTangents& other) const
|
bool operator==(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)==other) &&
|
return ((static_cast<S3DVertex>(*this)==static_cast<const S3DVertex&>(other)) &&
|
||||||
(Tangent == other.Tangent) &&
|
(Tangent == other.Tangent) &&
|
||||||
(Binormal == other.Binormal));
|
(Binormal == other.Binormal));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const S3DVertexTangents& other) const
|
bool operator!=(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this)!=other) ||
|
return ((static_cast<S3DVertex>(*this)!=static_cast<const S3DVertex&>(other)) ||
|
||||||
(Tangent != other.Tangent) ||
|
(Tangent != other.Tangent) ||
|
||||||
(Binormal != other.Binormal));
|
(Binormal != other.Binormal));
|
||||||
}
|
}
|
||||||
@ -237,8 +240,8 @@ struct S3DVertexTangents : public S3DVertex
|
|||||||
bool operator<(const S3DVertexTangents& other) const
|
bool operator<(const S3DVertexTangents& other) const
|
||||||
{
|
{
|
||||||
return ((static_cast<S3DVertex>(*this) < other) ||
|
return ((static_cast<S3DVertex>(*this) < other) ||
|
||||||
((static_cast<S3DVertex>(*this) == other) && (Tangent < other.Tangent)) ||
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent < other.Tangent)) ||
|
||||||
((static_cast<S3DVertex>(*this) == other) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
((static_cast<S3DVertex>(*this) == static_cast<const S3DVertex&>(other)) && (Tangent == other.Tangent) && (Binormal < other.Binormal)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static E_VERTEX_TYPE getType()
|
static E_VERTEX_TYPE getType()
|
||||||
|
@ -147,13 +147,6 @@ namespace scene
|
|||||||
return Meshes[0]->getMeshBuffer(material);
|
return Meshes[0]->getMeshBuffer(material);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Set a material flag for all meshbuffers of this mesh.
|
|
||||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<Meshes.size(); ++i)
|
|
||||||
Meshes[i]->setMaterialFlag(flag, newvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
|
@ -78,21 +78,6 @@ struct SExposedVideoData
|
|||||||
//! The EGLNativeWindowType object.
|
//! The EGLNativeWindowType object.
|
||||||
void* Window;
|
void* Window;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SOpenGLiOS
|
|
||||||
{
|
|
||||||
//! The EAGLContext object.
|
|
||||||
void* Context;
|
|
||||||
|
|
||||||
//! The subview UIView object where the drawing happens.
|
|
||||||
void* View;
|
|
||||||
|
|
||||||
//! The UIViewController object.
|
|
||||||
void* ViewController;
|
|
||||||
|
|
||||||
//! The UIWindow object.
|
|
||||||
void* Window;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SOGLESAndroid
|
struct SOGLESAndroid
|
||||||
{
|
{
|
||||||
@ -107,7 +92,6 @@ struct SExposedVideoData
|
|||||||
SOpenGLLinux OpenGLLinux;
|
SOpenGLLinux OpenGLLinux;
|
||||||
SOpenGLOSX OpenGLOSX;
|
SOpenGLOSX OpenGLOSX;
|
||||||
SOpenGLFB OpenGLFB;
|
SOpenGLFB OpenGLFB;
|
||||||
SOpenGLiOS OpenGLiOS;
|
|
||||||
SOGLESAndroid OGLESAndroid;
|
SOGLESAndroid OGLESAndroid;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "ILogger.h"
|
#include "ILogger.h"
|
||||||
#include "position2d.h"
|
#include "position2d.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "IrrCompileConfig.h"
|
#include "IrrCompileConfig.h" // for IRRLICHT_SDK_VERSION
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
@ -24,12 +24,13 @@ namespace irr
|
|||||||
//! Constructs a SIrrlichtCreationParameters structure with default values.
|
//! Constructs a SIrrlichtCreationParameters structure with default values.
|
||||||
SIrrlichtCreationParameters() :
|
SIrrlichtCreationParameters() :
|
||||||
DeviceType(EIDT_BEST),
|
DeviceType(EIDT_BEST),
|
||||||
DriverType(video::EDT_BURNINGSVIDEO),
|
DriverType(video::EDT_OPENGL),
|
||||||
WindowSize(core::dimension2d<u32>(800, 600)),
|
WindowSize(core::dimension2d<u32>(800, 600)),
|
||||||
WindowPosition(core::position2di(-1,-1)),
|
WindowPosition(core::position2di(-1,-1)),
|
||||||
Bits(32),
|
Bits(32),
|
||||||
ZBufferBits(24),
|
ZBufferBits(24),
|
||||||
Fullscreen(false),
|
Fullscreen(false),
|
||||||
|
WindowMaximized(false),
|
||||||
WindowResizable(2),
|
WindowResizable(2),
|
||||||
Stencilbuffer(true),
|
Stencilbuffer(true),
|
||||||
Vsync(false),
|
Vsync(false),
|
||||||
@ -52,7 +53,7 @@ namespace irr
|
|||||||
UsePerformanceTimer(true),
|
UsePerformanceTimer(true),
|
||||||
SDK_version_do_not_use(IRRLICHT_SDK_VERSION),
|
SDK_version_do_not_use(IRRLICHT_SDK_VERSION),
|
||||||
PrivateData(0),
|
PrivateData(0),
|
||||||
#if defined(_IRR_COMPILE_WITH_IOS_DEVICE_) || defined(_IRR_ANDROID_PLATFORM_) || defined(_IRR_EMSCRIPTEN_PLATFORM_)
|
#ifdef IRR_MOBILE_PATHS
|
||||||
OGLES2ShaderPath("media/Shaders/")
|
OGLES2ShaderPath("media/Shaders/")
|
||||||
#else
|
#else
|
||||||
OGLES2ShaderPath("../../media/Shaders/")
|
OGLES2ShaderPath("../../media/Shaders/")
|
||||||
@ -73,6 +74,7 @@ namespace irr
|
|||||||
Bits = other.Bits;
|
Bits = other.Bits;
|
||||||
ZBufferBits = other.ZBufferBits;
|
ZBufferBits = other.ZBufferBits;
|
||||||
Fullscreen = other.Fullscreen;
|
Fullscreen = other.Fullscreen;
|
||||||
|
WindowMaximized = other.WindowMaximized;
|
||||||
WindowResizable = other.WindowResizable;
|
WindowResizable = other.WindowResizable;
|
||||||
Stencilbuffer = other.Stencilbuffer;
|
Stencilbuffer = other.Stencilbuffer;
|
||||||
Vsync = other.Vsync;
|
Vsync = other.Vsync;
|
||||||
@ -127,6 +129,9 @@ namespace irr
|
|||||||
/** Otherwise the device runs in windowed mode. Default: false. */
|
/** Otherwise the device runs in windowed mode. Default: false. */
|
||||||
bool Fullscreen;
|
bool Fullscreen;
|
||||||
|
|
||||||
|
//! Maximised window. (Only supported on SDL.) Default: false
|
||||||
|
bool WindowMaximized;
|
||||||
|
|
||||||
//! Should a non-fullscreen window be resizable.
|
//! Should a non-fullscreen window be resizable.
|
||||||
/** Might not be supported by all devices. Ignored when Fullscreen is true.
|
/** Might not be supported by all devices. Ignored when Fullscreen is true.
|
||||||
Values: 0 = not resizable, 1 = resizable, 2 = system decides default itself
|
Values: 0 = not resizable, 1 = resizable, 2 = system decides default itself
|
||||||
@ -230,7 +235,6 @@ namespace irr
|
|||||||
/** If this is set to a value other than 0, the Irrlicht Engine
|
/** If this is set to a value other than 0, the Irrlicht Engine
|
||||||
will be created in an already existing window.
|
will be created in an already existing window.
|
||||||
For Windows, set this to the HWND of the window you want.
|
For Windows, set this to the HWND of the window you want.
|
||||||
For iOS, assign UIView to this variable.
|
|
||||||
The windowSize and FullScreen options will be ignored when using
|
The windowSize and FullScreen options will be ignored when using
|
||||||
the WindowId parameter. Default this is set to 0.
|
the WindowId parameter. Default this is set to 0.
|
||||||
To make Irrlicht run inside the custom window, you still will
|
To make Irrlicht run inside the custom window, you still will
|
||||||
|
@ -10,8 +10,9 @@
|
|||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "irrMath.h"
|
#include "irrMath.h"
|
||||||
#include "EMaterialTypes.h"
|
#include "EMaterialTypes.h"
|
||||||
#include "EMaterialFlags.h"
|
#include "EMaterialProps.h"
|
||||||
#include "SMaterialLayer.h"
|
#include "SMaterialLayer.h"
|
||||||
|
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
@ -255,7 +256,7 @@ namespace video
|
|||||||
EZW_OFF = 0,
|
EZW_OFF = 0,
|
||||||
|
|
||||||
//! This is the default setting for SMaterial and tries to handle things automatically.
|
//! This is the default setting for SMaterial and tries to handle things automatically.
|
||||||
//! This is also the value which is set when SMaterial::setFlag(EMF_ZWRITE_ENABLE) is enabled.
|
//! This is what you want to set to enable zwriting.
|
||||||
//! Usually zwriting is enabled non-transparent materials - as far as Irrlicht can recognize those.
|
//! Usually zwriting is enabled non-transparent materials - as far as Irrlicht can recognize those.
|
||||||
//! Basically Irrlicht tries to handle the zwriting for you and assumes transparent materials don't need it.
|
//! Basically Irrlicht tries to handle the zwriting for you and assumes transparent materials don't need it.
|
||||||
//! This is addionally affected by IVideoDriver::setAllowZWriteOnTransparent
|
//! This is addionally affected by IVideoDriver::setAllowZWriteOnTransparent
|
||||||
@ -280,7 +281,7 @@ namespace video
|
|||||||
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
/** SMaterial might ignore some textures in most function, like assignment and comparison,
|
||||||
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
when SIrrlichtCreationParameters::MaxTextureUnits is set to a lower number.
|
||||||
*/
|
*/
|
||||||
const u32 MATERIAL_MAX_TEXTURES = _IRR_MATERIAL_MAX_TEXTURES_;
|
const u32 MATERIAL_MAX_TEXTURES = 4;
|
||||||
|
|
||||||
//! Struct for holding parameters for a material renderer
|
//! Struct for holding parameters for a material renderer
|
||||||
// Note for implementors: Serialization is in CNullDriver
|
// Note for implementors: Serialization is in CNullDriver
|
||||||
@ -291,7 +292,7 @@ namespace video
|
|||||||
SMaterial()
|
SMaterial()
|
||||||
: MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255),
|
: MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255),
|
||||||
EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255),
|
EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255),
|
||||||
Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f),
|
Shininess(0.0f), MaterialTypeParam(0.0f), Thickness(1.0f),
|
||||||
ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL),
|
ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL),
|
||||||
ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), BlendFactor(0.0f),
|
ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), BlendFactor(0.0f),
|
||||||
PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT),
|
PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT),
|
||||||
@ -302,7 +303,7 @@ namespace video
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
//! Texture layer array.
|
//! Texture layer array.
|
||||||
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES];
|
SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
|
||||||
|
|
||||||
//! Type of the material. Specifies how everything is blended together
|
//! Type of the material. Specifies how everything is blended together
|
||||||
E_MATERIAL_TYPE MaterialType;
|
E_MATERIAL_TYPE MaterialType;
|
||||||
@ -349,10 +350,6 @@ namespace video
|
|||||||
EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */
|
EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */
|
||||||
f32 MaterialTypeParam;
|
f32 MaterialTypeParam;
|
||||||
|
|
||||||
//! Second free parameter, dependent on the material type.
|
|
||||||
/** Mostly ignored. */
|
|
||||||
f32 MaterialTypeParam2;
|
|
||||||
|
|
||||||
//! Thickness of non-3dimensional elements such as lines and points.
|
//! Thickness of non-3dimensional elements such as lines and points.
|
||||||
f32 Thickness;
|
f32 Thickness;
|
||||||
|
|
||||||
@ -429,9 +426,6 @@ namespace video
|
|||||||
f32 PolygonOffsetSlopeScale;
|
f32 PolygonOffsetSlopeScale;
|
||||||
|
|
||||||
//! Draw as wireframe or filled triangles? Default: false
|
//! Draw as wireframe or filled triangles? Default: false
|
||||||
/** The user can access a material flag using
|
|
||||||
\code material.Wireframe=true \endcode
|
|
||||||
or \code material.setFlag(EMF_WIREFRAME, true); \endcode */
|
|
||||||
bool Wireframe:1;
|
bool Wireframe:1;
|
||||||
|
|
||||||
//! Draw as point cloud or filled triangles? Default: false
|
//! Draw as point cloud or filled triangles? Default: false
|
||||||
@ -465,12 +459,22 @@ namespace video
|
|||||||
/** Sometimes, disabling mipmap usage can be useful. Default: true */
|
/** Sometimes, disabling mipmap usage can be useful. Default: true */
|
||||||
bool UseMipMaps:1;
|
bool UseMipMaps:1;
|
||||||
|
|
||||||
|
//! Execute a function on all texture layers.
|
||||||
|
/** Useful for setting properties which are not per material, but per
|
||||||
|
texture layer, e.g. bilinear filtering. */
|
||||||
|
template <typename F>
|
||||||
|
void forEachTexture(F &&fn) {
|
||||||
|
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
|
||||||
|
fn(TextureLayers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! Gets the texture transformation matrix for level i
|
//! Gets the texture transformation matrix for level i
|
||||||
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
|
/** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES
|
||||||
\return Texture matrix for texture level i. */
|
\return Texture matrix for texture level i. */
|
||||||
core::matrix4& getTextureMatrix(u32 i)
|
core::matrix4& getTextureMatrix(u32 i)
|
||||||
{
|
{
|
||||||
return TextureLayer[i].getTextureMatrix();
|
return TextureLayers[i].getTextureMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the immutable texture transformation matrix for level i
|
//! Gets the immutable texture transformation matrix for level i
|
||||||
@ -479,7 +483,7 @@ namespace video
|
|||||||
const core::matrix4& getTextureMatrix(u32 i) const
|
const core::matrix4& getTextureMatrix(u32 i) const
|
||||||
{
|
{
|
||||||
if (i<MATERIAL_MAX_TEXTURES)
|
if (i<MATERIAL_MAX_TEXTURES)
|
||||||
return TextureLayer[i].getTextureMatrix();
|
return TextureLayers[i].getTextureMatrix();
|
||||||
else
|
else
|
||||||
return core::IdentityMatrix;
|
return core::IdentityMatrix;
|
||||||
}
|
}
|
||||||
@ -491,7 +495,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if (i>=MATERIAL_MAX_TEXTURES)
|
if (i>=MATERIAL_MAX_TEXTURES)
|
||||||
return;
|
return;
|
||||||
TextureLayer[i].setTextureMatrix(mat);
|
TextureLayers[i].setTextureMatrix(mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the i-th texture
|
//! Gets the i-th texture
|
||||||
@ -499,7 +503,7 @@ namespace video
|
|||||||
\return Texture for texture level i, if defined, else 0. */
|
\return Texture for texture level i, if defined, else 0. */
|
||||||
ITexture* getTexture(u32 i) const
|
ITexture* getTexture(u32 i) const
|
||||||
{
|
{
|
||||||
return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0;
|
return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Sets the i-th texture
|
//! Sets the i-th texture
|
||||||
@ -510,144 +514,7 @@ namespace video
|
|||||||
{
|
{
|
||||||
if (i>=MATERIAL_MAX_TEXTURES)
|
if (i>=MATERIAL_MAX_TEXTURES)
|
||||||
return;
|
return;
|
||||||
TextureLayer[i].Texture = tex;
|
TextureLayers[i].Texture = tex;
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets the Material flag to the given value
|
|
||||||
/** \param flag The flag to be set.
|
|
||||||
\param value The new value for the flag. */
|
|
||||||
void setFlag(E_MATERIAL_FLAG flag, bool value)
|
|
||||||
{
|
|
||||||
switch (flag)
|
|
||||||
{
|
|
||||||
case EMF_WIREFRAME:
|
|
||||||
Wireframe = value; break;
|
|
||||||
case EMF_POINTCLOUD:
|
|
||||||
PointCloud = value; break;
|
|
||||||
case EMF_GOURAUD_SHADING:
|
|
||||||
GouraudShading = value; break;
|
|
||||||
case EMF_LIGHTING:
|
|
||||||
Lighting = value; break;
|
|
||||||
case EMF_ZBUFFER:
|
|
||||||
ZBuffer = value; break;
|
|
||||||
case EMF_ZWRITE_ENABLE:
|
|
||||||
ZWriteEnable = value ? EZW_AUTO : EZW_OFF; break;
|
|
||||||
case EMF_BACK_FACE_CULLING:
|
|
||||||
BackfaceCulling = value; break;
|
|
||||||
case EMF_FRONT_FACE_CULLING:
|
|
||||||
FrontfaceCulling = value; break;
|
|
||||||
case EMF_BILINEAR_FILTER:
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
|
||||||
TextureLayer[i].BilinearFilter = value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EMF_TRILINEAR_FILTER:
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
|
||||||
TextureLayer[i].TrilinearFilter = value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EMF_ANISOTROPIC_FILTER:
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
|
||||||
TextureLayer[i].AnisotropicFilter = 0xFF;
|
|
||||||
else
|
|
||||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
|
||||||
TextureLayer[i].AnisotropicFilter = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EMF_FOG_ENABLE:
|
|
||||||
FogEnable = value; break;
|
|
||||||
case EMF_NORMALIZE_NORMALS:
|
|
||||||
NormalizeNormals = value; break;
|
|
||||||
case EMF_TEXTURE_WRAP:
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
|
||||||
{
|
|
||||||
TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)value;
|
|
||||||
TextureLayer[i].TextureWrapV = (E_TEXTURE_CLAMP)value;
|
|
||||||
TextureLayer[i].TextureWrapW = (E_TEXTURE_CLAMP)value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EMF_ANTI_ALIASING:
|
|
||||||
AntiAliasing = value?EAAM_SIMPLE:EAAM_OFF; break;
|
|
||||||
case EMF_COLOR_MASK:
|
|
||||||
ColorMask = value?ECP_ALL:ECP_NONE; break;
|
|
||||||
case EMF_COLOR_MATERIAL:
|
|
||||||
ColorMaterial = value?ECM_DIFFUSE:ECM_NONE; break;
|
|
||||||
case EMF_USE_MIP_MAPS:
|
|
||||||
UseMipMaps = value; break;
|
|
||||||
case EMF_BLEND_OPERATION:
|
|
||||||
BlendOperation = value?EBO_ADD:EBO_NONE; break;
|
|
||||||
case EMF_BLEND_FACTOR:
|
|
||||||
break;
|
|
||||||
case EMF_POLYGON_OFFSET:
|
|
||||||
PolygonOffsetFactor = value?1:0;
|
|
||||||
PolygonOffsetDirection = EPO_BACK;
|
|
||||||
PolygonOffsetSlopeScale = value?1.f:0.f;
|
|
||||||
PolygonOffsetDepthBias = value?1.f:0.f;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Gets the Material flag
|
|
||||||
/** \param flag The flag to query.
|
|
||||||
\return The current value of the flag. */
|
|
||||||
bool getFlag(E_MATERIAL_FLAG flag) const
|
|
||||||
{
|
|
||||||
switch (flag)
|
|
||||||
{
|
|
||||||
case EMF_WIREFRAME:
|
|
||||||
return Wireframe;
|
|
||||||
case EMF_POINTCLOUD:
|
|
||||||
return PointCloud;
|
|
||||||
case EMF_GOURAUD_SHADING:
|
|
||||||
return GouraudShading;
|
|
||||||
case EMF_LIGHTING:
|
|
||||||
return Lighting;
|
|
||||||
case EMF_ZBUFFER:
|
|
||||||
return ZBuffer!=ECFN_DISABLED;
|
|
||||||
case EMF_ZWRITE_ENABLE:
|
|
||||||
return ZWriteEnable != EZW_OFF;
|
|
||||||
case EMF_BACK_FACE_CULLING:
|
|
||||||
return BackfaceCulling;
|
|
||||||
case EMF_FRONT_FACE_CULLING:
|
|
||||||
return FrontfaceCulling;
|
|
||||||
case EMF_BILINEAR_FILTER:
|
|
||||||
return TextureLayer[0].BilinearFilter;
|
|
||||||
case EMF_TRILINEAR_FILTER:
|
|
||||||
return TextureLayer[0].TrilinearFilter;
|
|
||||||
case EMF_ANISOTROPIC_FILTER:
|
|
||||||
return TextureLayer[0].AnisotropicFilter!=0;
|
|
||||||
case EMF_FOG_ENABLE:
|
|
||||||
return FogEnable;
|
|
||||||
case EMF_NORMALIZE_NORMALS:
|
|
||||||
return NormalizeNormals;
|
|
||||||
case EMF_TEXTURE_WRAP:
|
|
||||||
return !(TextureLayer[0].TextureWrapU ||
|
|
||||||
TextureLayer[0].TextureWrapV ||
|
|
||||||
TextureLayer[0].TextureWrapW);
|
|
||||||
case EMF_ANTI_ALIASING:
|
|
||||||
return (AntiAliasing==1);
|
|
||||||
case EMF_COLOR_MASK:
|
|
||||||
return (ColorMask!=ECP_NONE);
|
|
||||||
case EMF_COLOR_MATERIAL:
|
|
||||||
return (ColorMaterial != ECM_NONE);
|
|
||||||
case EMF_USE_MIP_MAPS:
|
|
||||||
return UseMipMaps;
|
|
||||||
case EMF_BLEND_OPERATION:
|
|
||||||
return BlendOperation != EBO_NONE;
|
|
||||||
case EMF_BLEND_FACTOR:
|
|
||||||
return BlendFactor != 0.f;
|
|
||||||
case EMF_POLYGON_OFFSET:
|
|
||||||
return PolygonOffsetFactor != 0 || PolygonOffsetDepthBias != 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Inequality operator
|
//! Inequality operator
|
||||||
@ -663,7 +530,6 @@ namespace video
|
|||||||
SpecularColor != b.SpecularColor ||
|
SpecularColor != b.SpecularColor ||
|
||||||
Shininess != b.Shininess ||
|
Shininess != b.Shininess ||
|
||||||
MaterialTypeParam != b.MaterialTypeParam ||
|
MaterialTypeParam != b.MaterialTypeParam ||
|
||||||
MaterialTypeParam2 != b.MaterialTypeParam2 ||
|
|
||||||
Thickness != b.Thickness ||
|
Thickness != b.Thickness ||
|
||||||
Wireframe != b.Wireframe ||
|
Wireframe != b.Wireframe ||
|
||||||
PointCloud != b.PointCloud ||
|
PointCloud != b.PointCloud ||
|
||||||
@ -688,7 +554,7 @@ namespace video
|
|||||||
;
|
;
|
||||||
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
|
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
|
||||||
{
|
{
|
||||||
different |= (TextureLayer[i] != b.TextureLayer[i]);
|
different |= (TextureLayers[i] != b.TextureLayers[i]);
|
||||||
}
|
}
|
||||||
return different;
|
return different;
|
||||||
}
|
}
|
||||||
@ -727,10 +593,8 @@ namespace video
|
|||||||
//! as it asks the material renders directly what they do with the material.
|
//! as it asks the material renders directly what they do with the material.
|
||||||
bool isTransparent() const
|
bool isTransparent() const
|
||||||
{
|
{
|
||||||
if ( MaterialType==EMT_TRANSPARENT_ADD_COLOR ||
|
if ( MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
||||||
MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL ||
|
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA )
|
||||||
MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA ||
|
|
||||||
MaterialType==EMT_TRANSPARENT_REFLECTION_2_LAYER )
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,6 +43,32 @@ namespace video
|
|||||||
"texture_clamp_mirror_clamp_to_edge",
|
"texture_clamp_mirror_clamp_to_edge",
|
||||||
"texture_clamp_mirror_clamp_to_border", 0};
|
"texture_clamp_mirror_clamp_to_border", 0};
|
||||||
|
|
||||||
|
|
||||||
|
//! Texture minification filter.
|
||||||
|
/** Used when scaling textures down. See the documentation on OpenGL's
|
||||||
|
`GL_TEXTURE_MIN_FILTER` for more information. */
|
||||||
|
enum E_TEXTURE_MIN_FILTER {
|
||||||
|
//! Aka nearest-neighbor.
|
||||||
|
ETMINF_NEAREST_MIPMAP_NEAREST = 0,
|
||||||
|
//! Aka bilinear.
|
||||||
|
ETMINF_LINEAR_MIPMAP_NEAREST,
|
||||||
|
//! Isn't known by any other name.
|
||||||
|
ETMINF_NEAREST_MIPMAP_LINEAR,
|
||||||
|
//! Aka trilinear.
|
||||||
|
ETMINF_LINEAR_MIPMAP_LINEAR,
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Texture magnification filter.
|
||||||
|
/** Used when scaling textures up. See the documentation on OpenGL's
|
||||||
|
`GL_TEXTURE_MAG_FILTER` for more information.
|
||||||
|
Note that mipmaps are only used for minification, not for magnification. */
|
||||||
|
enum E_TEXTURE_MAG_FILTER {
|
||||||
|
//! Aka nearest-neighbor.
|
||||||
|
ETMAGF_NEAREST = 0,
|
||||||
|
//! Aka bilinear.
|
||||||
|
ETMAGF_LINEAR,
|
||||||
|
};
|
||||||
|
|
||||||
//! Struct for holding material parameters which exist per texture layer
|
//! Struct for holding material parameters which exist per texture layer
|
||||||
// Note for implementors: Serialization is in CNullDriver
|
// Note for implementors: Serialization is in CNullDriver
|
||||||
class SMaterialLayer
|
class SMaterialLayer
|
||||||
@ -50,7 +76,7 @@ namespace video
|
|||||||
public:
|
public:
|
||||||
//! Default constructor
|
//! 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),
|
||||||
BilinearFilter(true), TrilinearFilter(false), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
MinFilter(ETMINF_LINEAR_MIPMAP_NEAREST), MagFilter(ETMAGF_LINEAR), AnisotropicFilter(0), LODBias(0), TextureMatrix(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,8 +130,8 @@ namespace video
|
|||||||
TextureWrapU = other.TextureWrapU;
|
TextureWrapU = other.TextureWrapU;
|
||||||
TextureWrapV = other.TextureWrapV;
|
TextureWrapV = other.TextureWrapV;
|
||||||
TextureWrapW = other.TextureWrapW;
|
TextureWrapW = other.TextureWrapW;
|
||||||
BilinearFilter = other.BilinearFilter;
|
MinFilter = other.MinFilter;
|
||||||
TrilinearFilter = other.TrilinearFilter;
|
MagFilter = other.MagFilter;
|
||||||
AnisotropicFilter = other.AnisotropicFilter;
|
AnisotropicFilter = other.AnisotropicFilter;
|
||||||
LODBias = other.LODBias;
|
LODBias = other.LODBias;
|
||||||
|
|
||||||
@ -157,8 +183,8 @@ namespace video
|
|||||||
TextureWrapU != b.TextureWrapU ||
|
TextureWrapU != b.TextureWrapU ||
|
||||||
TextureWrapV != b.TextureWrapV ||
|
TextureWrapV != b.TextureWrapV ||
|
||||||
TextureWrapW != b.TextureWrapW ||
|
TextureWrapW != b.TextureWrapW ||
|
||||||
BilinearFilter != b.BilinearFilter ||
|
MinFilter != b.MinFilter ||
|
||||||
TrilinearFilter != b.TrilinearFilter ||
|
MagFilter != b.MagFilter ||
|
||||||
AnisotropicFilter != b.AnisotropicFilter ||
|
AnisotropicFilter != b.AnisotropicFilter ||
|
||||||
LODBias != b.LODBias;
|
LODBias != b.LODBias;
|
||||||
if (different)
|
if (different)
|
||||||
@ -184,13 +210,11 @@ namespace video
|
|||||||
u8 TextureWrapV:4;
|
u8 TextureWrapV:4;
|
||||||
u8 TextureWrapW:4;
|
u8 TextureWrapW:4;
|
||||||
|
|
||||||
//! Is bilinear filtering enabled? Default: true
|
//! Minification (downscaling) filter
|
||||||
bool BilinearFilter:1;
|
E_TEXTURE_MIN_FILTER MinFilter;
|
||||||
|
|
||||||
//! Is trilinear filtering enabled? Default: false
|
//! Magnification (upscaling) filter
|
||||||
/** If the trilinear filter flag is enabled,
|
E_TEXTURE_MAG_FILTER MagFilter;
|
||||||
the bilinear filtering flag is ignored. */
|
|
||||||
bool TrilinearFilter:1;
|
|
||||||
|
|
||||||
//! Is anisotropic filtering enabled? Default: 0, disabled
|
//! Is anisotropic filtering enabled? Default: 0, disabled
|
||||||
/** In Irrlicht you can use anisotropic texture filtering
|
/** In Irrlicht you can use anisotropic texture filtering
|
||||||
@ -208,6 +232,16 @@ namespace video
|
|||||||
if the value is positive. */
|
if the value is positive. */
|
||||||
s8 LODBias;
|
s8 LODBias;
|
||||||
|
|
||||||
|
//! Sets the MinFilter, MagFilter and AnisotropicFilter properties according
|
||||||
|
//! to the three relevant boolean values found in the Minetest settings.
|
||||||
|
/** The value of `trilinear` takes precedence over the value of `bilinear`. */
|
||||||
|
void setFiltersMinetest(bool bilinear, bool trilinear, bool anisotropic) {
|
||||||
|
MinFilter = trilinear ? ETMINF_LINEAR_MIPMAP_LINEAR :
|
||||||
|
(bilinear ? ETMINF_LINEAR_MIPMAP_NEAREST : ETMINF_NEAREST_MIPMAP_NEAREST);
|
||||||
|
MagFilter = (trilinear || bilinear) ? ETMAGF_LINEAR : ETMAGF_NEAREST;
|
||||||
|
AnisotropicFilter = anisotropic ? 0xFF : 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class SMaterial;
|
friend class SMaterial;
|
||||||
|
|
||||||
|
@ -117,13 +117,6 @@ namespace scene
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! sets a flag of all contained materials to a new value
|
|
||||||
void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) override
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<MeshBuffers.size(); ++i)
|
|
||||||
MeshBuffers[i]->getMaterial().setFlag(flag, newvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! set the hardware mapping hint, for driver
|
//! set the hardware mapping hint, for driver
|
||||||
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) override
|
||||||
{
|
{
|
||||||
|
@ -18,16 +18,16 @@ namespace video
|
|||||||
SMaterial Material;
|
SMaterial Material;
|
||||||
|
|
||||||
//! Which values are overridden
|
//! Which values are overridden
|
||||||
/** OR'ed values from E_MATERIAL_FLAGS. */
|
/** OR'ed values from E_MATERIAL_PROPS. */
|
||||||
u32 EnableFlags;
|
u32 EnableProps;
|
||||||
|
|
||||||
//! For those flags in EnableFlags which affect layers, set which of the layers are affected
|
//! For those properties in EnableProps which affect layers, set which of the layers are affected
|
||||||
bool EnableLayerFlags[MATERIAL_MAX_TEXTURES];
|
bool EnableLayerProps[MATERIAL_MAX_TEXTURES];
|
||||||
|
|
||||||
//! Which textures are overridden
|
//! Which textures are overridden
|
||||||
bool EnableTextures[MATERIAL_MAX_TEXTURES];
|
bool EnableTextures[MATERIAL_MAX_TEXTURES];
|
||||||
|
|
||||||
//! Overwrite complete layers (settings of EnableLayerFlags and EnableTextures don't matter then for layer data)
|
//! Overwrite complete layers (settings of EnableLayerProps and EnableTextures don't matter then for layer data)
|
||||||
bool EnableLayers[MATERIAL_MAX_TEXTURES];
|
bool EnableLayers[MATERIAL_MAX_TEXTURES];
|
||||||
|
|
||||||
//! Set in which render passes the material override is active.
|
//! Set in which render passes the material override is active.
|
||||||
@ -59,19 +59,19 @@ namespace video
|
|||||||
core::array<SMaterialTypeReplacement> MaterialTypes;
|
core::array<SMaterialTypeReplacement> MaterialTypes;
|
||||||
|
|
||||||
//! Default constructor
|
//! Default constructor
|
||||||
SOverrideMaterial() : EnableFlags(0), EnablePasses(0), Enabled(false)
|
SOverrideMaterial() : EnableProps(0), EnablePasses(0), Enabled(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//! disable overrides and reset all flags
|
//! disable overrides and reset all properties
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
EnableFlags = 0;
|
EnableProps = 0;
|
||||||
EnablePasses = 0;
|
EnablePasses = 0;
|
||||||
Enabled = false;
|
Enabled = false;
|
||||||
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
|
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
EnableLayerFlags[i] = true; // doesn't do anything unless EnableFlags is set, just saying by default all texture layers are affected by flags
|
EnableLayerProps[i] = true; // doesn't do anything unless EnableProps is set, just saying by default all texture layers are affected by properties
|
||||||
EnableTextures[i] = false;
|
EnableTextures[i] = false;
|
||||||
EnableLayers[i] = false;
|
EnableLayers[i] = false;
|
||||||
}
|
}
|
||||||
@ -92,65 +92,65 @@ namespace video
|
|||||||
for (u32 f=0; f<32; ++f)
|
for (u32 f=0; f<32; ++f)
|
||||||
{
|
{
|
||||||
const u32 num=(1<<f);
|
const u32 num=(1<<f);
|
||||||
if (EnableFlags & num)
|
if (EnableProps & num)
|
||||||
{
|
{
|
||||||
switch (num)
|
switch (num)
|
||||||
{
|
{
|
||||||
case EMF_WIREFRAME: material.Wireframe = Material.Wireframe; break;
|
case EMP_WIREFRAME: material.Wireframe = Material.Wireframe; break;
|
||||||
case EMF_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
|
case EMP_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
|
||||||
case EMF_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
|
case EMP_GOURAUD_SHADING: material.GouraudShading = Material.GouraudShading; break;
|
||||||
case EMF_LIGHTING: material.Lighting = Material.Lighting; break;
|
case EMP_LIGHTING: material.Lighting = Material.Lighting; break;
|
||||||
case EMF_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
|
case EMP_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
|
||||||
case EMF_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
|
case EMP_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
|
||||||
case EMF_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
|
case EMP_BACK_FACE_CULLING: material.BackfaceCulling = Material.BackfaceCulling; break;
|
||||||
case EMF_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
|
case EMP_FRONT_FACE_CULLING: material.FrontfaceCulling = Material.FrontfaceCulling; break;
|
||||||
case EMF_BILINEAR_FILTER:
|
case EMP_MIN_FILTER:
|
||||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
if ( EnableLayerFlags[i] )
|
if ( EnableLayerProps[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i].BilinearFilter = Material.TextureLayer[i].BilinearFilter;
|
material.TextureLayers[i].MinFilter = Material.TextureLayers[i].MinFilter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EMF_TRILINEAR_FILTER:
|
case EMP_MAG_FILTER:
|
||||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
if ( EnableLayerFlags[i] )
|
if ( EnableLayerProps[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i].TrilinearFilter = Material.TextureLayer[i].TrilinearFilter;
|
material.TextureLayers[i].MagFilter = Material.TextureLayers[i].MagFilter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EMF_ANISOTROPIC_FILTER:
|
case EMP_ANISOTROPIC_FILTER:
|
||||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
if ( EnableLayerFlags[i] )
|
if ( EnableLayerProps[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i].AnisotropicFilter = Material.TextureLayer[i].AnisotropicFilter;
|
material.TextureLayers[i].AnisotropicFilter = Material.TextureLayers[i].AnisotropicFilter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EMF_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
|
case EMP_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
|
||||||
case EMF_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
|
case EMP_NORMALIZE_NORMALS: material.NormalizeNormals = Material.NormalizeNormals; break;
|
||||||
case EMF_TEXTURE_WRAP:
|
case EMP_TEXTURE_WRAP:
|
||||||
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
for ( u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||||
{
|
{
|
||||||
if ( EnableLayerFlags[i] )
|
if ( EnableLayerProps[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i].TextureWrapU = Material.TextureLayer[i].TextureWrapU;
|
material.TextureLayers[i].TextureWrapU = Material.TextureLayers[i].TextureWrapU;
|
||||||
material.TextureLayer[i].TextureWrapV = Material.TextureLayer[i].TextureWrapV;
|
material.TextureLayers[i].TextureWrapV = Material.TextureLayers[i].TextureWrapV;
|
||||||
material.TextureLayer[i].TextureWrapW = Material.TextureLayer[i].TextureWrapW;
|
material.TextureLayers[i].TextureWrapW = Material.TextureLayers[i].TextureWrapW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EMF_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
|
case EMP_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
|
||||||
case EMF_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
|
case EMP_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
|
||||||
case EMF_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
|
case EMP_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
|
||||||
case EMF_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
|
case EMP_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
|
||||||
case EMF_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
|
case EMP_BLEND_OPERATION: material.BlendOperation = Material.BlendOperation; break;
|
||||||
case EMF_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
|
case EMP_BLEND_FACTOR: material.BlendFactor = Material.BlendFactor; break;
|
||||||
case EMF_POLYGON_OFFSET:
|
case EMP_POLYGON_OFFSET:
|
||||||
material.PolygonOffsetDirection = Material.PolygonOffsetDirection;
|
material.PolygonOffsetDirection = Material.PolygonOffsetDirection;
|
||||||
material.PolygonOffsetFactor = Material.PolygonOffsetFactor;
|
material.PolygonOffsetFactor = Material.PolygonOffsetFactor;
|
||||||
material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias;
|
material.PolygonOffsetDepthBias = Material.PolygonOffsetDepthBias;
|
||||||
@ -163,11 +163,11 @@ namespace video
|
|||||||
{
|
{
|
||||||
if ( EnableLayers[i] )
|
if ( EnableLayers[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i] = Material.TextureLayer[i];
|
material.TextureLayers[i] = Material.TextureLayers[i];
|
||||||
}
|
}
|
||||||
else if ( EnableTextures[i] )
|
else if ( EnableTextures[i] )
|
||||||
{
|
{
|
||||||
material.TextureLayer[i].Texture = Material.TextureLayer[i].Texture;
|
material.TextureLayers[i].Texture = Material.TextureLayers[i].Texture;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#ifndef __EXAMPLE_HELPER_H_INCLUDED__
|
#ifndef __EXAMPLE_HELPER_H_INCLUDED__
|
||||||
#define __EXAMPLE_HELPER_H_INCLUDED__
|
#define __EXAMPLE_HELPER_H_INCLUDED__
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
@ -13,7 +12,7 @@ namespace irr
|
|||||||
|
|
||||||
static io::path getExampleMediaPath()
|
static io::path getExampleMediaPath()
|
||||||
{
|
{
|
||||||
#if defined (_IRR_IOS_PLATFORM_) || defined (_IRR_ANDROID_PLATFORM_) || defined (_IRR_OSX_PLATFORM_) || defined (_IRR_EMSCRIPTEN_PLATFORM_)
|
#ifdef IRR_MOBILE_PATHS
|
||||||
return io::path("media/");
|
return io::path("media/");
|
||||||
#else
|
#else
|
||||||
return io::path("../../media/");
|
return io::path("../../media/");
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#ifndef __IRR_MATH_H_INCLUDED__
|
#ifndef __IRR_MATH_H_INCLUDED__
|
||||||
#define __IRR_MATH_H_INCLUDED__
|
#define __IRR_MATH_H_INCLUDED__
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
@ -21,9 +20,7 @@ namespace core
|
|||||||
|
|
||||||
const s32 ROUNDING_ERROR_S32 = 0;
|
const s32 ROUNDING_ERROR_S32 = 0;
|
||||||
|
|
||||||
#ifdef __IRR_HAS_S64
|
|
||||||
const s64 ROUNDING_ERROR_S64 = 0;
|
const s64 ROUNDING_ERROR_S64 = 0;
|
||||||
#endif
|
|
||||||
const f32 ROUNDING_ERROR_f32 = 0.000001f;
|
const f32 ROUNDING_ERROR_f32 = 0.000001f;
|
||||||
const f64 ROUNDING_ERROR_f64 = 0.00000001;
|
const f64 ROUNDING_ERROR_f64 = 0.00000001;
|
||||||
|
|
||||||
@ -186,7 +183,6 @@ namespace core
|
|||||||
return ROUNDING_ERROR_S32;
|
return ROUNDING_ERROR_S32;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __IRR_HAS_S64
|
|
||||||
template <>
|
template <>
|
||||||
inline s64 roundingError()
|
inline s64 roundingError()
|
||||||
{
|
{
|
||||||
@ -198,7 +194,6 @@ namespace core
|
|||||||
{
|
{
|
||||||
return ROUNDING_ERROR_S64;
|
return ROUNDING_ERROR_S64;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline T relativeErrorFactor()
|
inline T relativeErrorFactor()
|
||||||
@ -310,13 +305,11 @@ namespace core
|
|||||||
return a <= tolerance;
|
return a <= tolerance;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __IRR_HAS_S64
|
|
||||||
//! returns if a equals zero, taking rounding errors into account
|
//! returns if a equals zero, taking rounding errors into account
|
||||||
inline bool iszero(const s64 a, const s64 tolerance = 0)
|
inline bool iszero(const s64 a, const s64 tolerance = 0)
|
||||||
{
|
{
|
||||||
return abs_(a) <= tolerance;
|
return abs_(a) <= tolerance;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
inline s32 s32_min(s32 a, s32 b)
|
inline s32 s32_min(s32 a, s32 b)
|
||||||
{
|
{
|
||||||
@ -406,13 +399,11 @@ namespace core
|
|||||||
return static_cast<s32>(squareroot(static_cast<f32>(f)));
|
return static_cast<s32>(squareroot(static_cast<f32>(f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __IRR_HAS_S64
|
|
||||||
// calculate: sqrt ( x )
|
// calculate: sqrt ( x )
|
||||||
REALINLINE s64 squareroot(const s64 f)
|
REALINLINE s64 squareroot(const s64 f)
|
||||||
{
|
{
|
||||||
return static_cast<s64>(squareroot(static_cast<f64>(f)));
|
return static_cast<s64>(squareroot(static_cast<f64>(f)));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// calculate: 1 / sqrt ( x )
|
// calculate: 1 / sqrt ( x )
|
||||||
REALINLINE f64 reciprocal_squareroot(const f64 x)
|
REALINLINE f64 reciprocal_squareroot(const f64 x)
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#ifndef __IRR_TYPES_H_INCLUDED__
|
#ifndef __IRR_TYPES_H_INCLUDED__
|
||||||
#define __IRR_TYPES_H_INCLUDED__
|
#define __IRR_TYPES_H_INCLUDED__
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
@ -38,13 +37,11 @@ typedef uint32_t u32;
|
|||||||
typedef int32_t s32;
|
typedef int32_t s32;
|
||||||
|
|
||||||
|
|
||||||
#ifdef __IRR_HAS_S64
|
|
||||||
//! 64 bit unsigned variable.
|
//! 64 bit unsigned variable.
|
||||||
typedef uint64_t u64;
|
typedef uint64_t u64;
|
||||||
|
|
||||||
//! 64 bit signed variable.
|
//! 64 bit signed variable.
|
||||||
typedef int64_t s64;
|
typedef int64_t s64;
|
||||||
#endif // __IRR_HAS_S64
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ inline core::array<u8> getUnicodeBOM(EUTF_ENCODE mode)
|
|||||||
COPY_ARRAY(BOM_ENCODE_UTF8, BOM_ENCODE_UTF8_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF8, BOM_ENCODE_UTF8_LEN);
|
||||||
break;
|
break;
|
||||||
case EUTFE_UTF16:
|
case EUTFE_UTF16:
|
||||||
#ifdef __BIG_ENDIAN__
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
COPY_ARRAY(BOM_ENCODE_UTF16_BE, BOM_ENCODE_UTF16_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF16_BE, BOM_ENCODE_UTF16_LEN);
|
||||||
#else
|
#else
|
||||||
COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
|
||||||
@ -187,7 +187,7 @@ inline core::array<u8> getUnicodeBOM(EUTF_ENCODE mode)
|
|||||||
COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
|
||||||
break;
|
break;
|
||||||
case EUTFE_UTF32:
|
case EUTFE_UTF32:
|
||||||
#ifdef __BIG_ENDIAN__
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
COPY_ARRAY(BOM_ENCODE_UTF32_BE, BOM_ENCODE_UTF32_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF32_BE, BOM_ENCODE_UTF32_LEN);
|
||||||
#else
|
#else
|
||||||
COPY_ARRAY(BOM_ENCODE_UTF32_LE, BOM_ENCODE_UTF32_LEN);
|
COPY_ARRAY(BOM_ENCODE_UTF32_LE, BOM_ENCODE_UTF32_LEN);
|
||||||
@ -429,24 +429,19 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Iterator to iterate through a UTF-16 string.
|
//! Iterator to iterate through a UTF-16 string.
|
||||||
class _ustring16_const_iterator : public std::iterator<
|
class _ustring16_const_iterator
|
||||||
std::bidirectional_iterator_tag, // iterator_category
|
|
||||||
access, // value_type
|
|
||||||
ptrdiff_t, // difference_type
|
|
||||||
const access, // pointer
|
|
||||||
const access // reference
|
|
||||||
>
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef _ustring16_const_iterator _Iter;
|
typedef _ustring16_const_iterator _Iter;
|
||||||
typedef std::iterator<std::bidirectional_iterator_tag, access, ptrdiff_t, const access, const access> _Base;
|
|
||||||
typedef const access const_pointer;
|
typedef const access const_pointer;
|
||||||
typedef const access const_reference;
|
typedef const access const_reference;
|
||||||
|
typedef ptrdiff_t distance_type;
|
||||||
|
|
||||||
typedef typename _Base::value_type value_type;
|
// stuff for std::iterator_traits
|
||||||
typedef typename _Base::difference_type difference_type;
|
typedef std::bidirectional_iterator_tag iterator_category;
|
||||||
typedef typename _Base::difference_type distance_type;
|
typedef access value_type;
|
||||||
typedef typename _Base::pointer pointer;
|
typedef distance_type difference_type;
|
||||||
|
typedef const access pointer;
|
||||||
typedef const_reference reference;
|
typedef const_reference reference;
|
||||||
|
|
||||||
//! Constructors.
|
//! Constructors.
|
||||||
@ -963,11 +958,11 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (sizeof(wchar_t) == 4)
|
if (sizeof(wchar_t) == 4)
|
||||||
append(reinterpret_cast<const uchar32_t* const>(c));
|
append(reinterpret_cast<const uchar32_t*>(c));
|
||||||
else if (sizeof(wchar_t) == 2)
|
else if (sizeof(wchar_t) == 2)
|
||||||
append(reinterpret_cast<const uchar16_t* const>(c));
|
append(reinterpret_cast<const uchar16_t*>(c));
|
||||||
else if (sizeof(wchar_t) == 1)
|
else if (sizeof(wchar_t) == 1)
|
||||||
append(reinterpret_cast<const uchar8_t* const>(c));
|
append(reinterpret_cast<const uchar8_t*>(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -982,11 +977,11 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (sizeof(wchar_t) == 4)
|
if (sizeof(wchar_t) == 4)
|
||||||
append(reinterpret_cast<const uchar32_t* const>(c), length);
|
append(reinterpret_cast<const uchar32_t*>(c), length);
|
||||||
else if (sizeof(wchar_t) == 2)
|
else if (sizeof(wchar_t) == 2)
|
||||||
append(reinterpret_cast<const uchar16_t* const>(c), length);
|
append(reinterpret_cast<const uchar16_t*>(c), length);
|
||||||
else if (sizeof(wchar_t) == 1)
|
else if (sizeof(wchar_t) == 1)
|
||||||
append(reinterpret_cast<const uchar8_t* const>(c), length);
|
append(reinterpret_cast<const uchar8_t*>(c), length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1116,11 +1111,11 @@ public:
|
|||||||
ustring16& operator=(const wchar_t* const c)
|
ustring16& operator=(const wchar_t* const c)
|
||||||
{
|
{
|
||||||
if (sizeof(wchar_t) == 4)
|
if (sizeof(wchar_t) == 4)
|
||||||
*this = reinterpret_cast<const uchar32_t* const>(c);
|
*this = reinterpret_cast<const uchar32_t*>(c);
|
||||||
else if (sizeof(wchar_t) == 2)
|
else if (sizeof(wchar_t) == 2)
|
||||||
*this = reinterpret_cast<const uchar16_t* const>(c);
|
*this = reinterpret_cast<const uchar16_t*>(c);
|
||||||
else if (sizeof(wchar_t) == 1)
|
else if (sizeof(wchar_t) == 1)
|
||||||
*this = reinterpret_cast<const uchar8_t* const>(c);
|
*this = reinterpret_cast<const uchar8_t*>(c);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -1323,7 +1318,7 @@ public:
|
|||||||
|
|
||||||
// Determine if the string is long enough for a BOM.
|
// Determine if the string is long enough for a BOM.
|
||||||
u32 len = 0;
|
u32 len = 0;
|
||||||
const uchar8_t* p = other;
|
const u8* p = reinterpret_cast<const u8*>(other);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
++len;
|
++len;
|
||||||
@ -1338,10 +1333,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If a BOM was found, don't include it in the string.
|
// If a BOM was found, don't include it in the string.
|
||||||
const uchar8_t* c2 = other;
|
const u8* c2 = reinterpret_cast<const u8*>(other);
|
||||||
if (c_bom != unicode::EUTFE_NONE)
|
if (c_bom != unicode::EUTFE_NONE)
|
||||||
{
|
{
|
||||||
c2 = other + unicode::BOM_UTF8_LEN;
|
c2 += unicode::BOM_UTF8_LEN;
|
||||||
length -= unicode::BOM_UTF8_LEN;
|
length -= unicode::BOM_UTF8_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3049,14 +3044,14 @@ public:
|
|||||||
|
|
||||||
//! Gets the encoding of the Unicode string this class contains.
|
//! Gets the encoding of the Unicode string this class contains.
|
||||||
//! \return An enum describing the current encoding of this string.
|
//! \return An enum describing the current encoding of this string.
|
||||||
const unicode::EUTF_ENCODE getEncoding() const
|
unicode::EUTF_ENCODE getEncoding() const
|
||||||
{
|
{
|
||||||
return encoding;
|
return encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the endianness of the Unicode string this class contains.
|
//! Gets the endianness of the Unicode string this class contains.
|
||||||
//! \return An enum describing the endianness of this string.
|
//! \return An enum describing the endianness of this string.
|
||||||
const unicode::EUTF_ENDIAN getEndianness() const
|
unicode::EUTF_ENDIAN getEndianness() const
|
||||||
{
|
{
|
||||||
if (encoding == unicode::EUTFE_UTF16_LE ||
|
if (encoding == unicode::EUTFE_UTF16_LE ||
|
||||||
encoding == unicode::EUTFE_UTF32_LE)
|
encoding == unicode::EUTFE_UTF32_LE)
|
||||||
@ -3612,33 +3607,5 @@ inline std::wostream& operator<<(std::wostream& out, const ustring16& in)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace unicode
|
|
||||||
{
|
|
||||||
|
|
||||||
//! Hashing algorithm for hashing a ustring. Used for things like unordered_maps.
|
|
||||||
//! Algorithm taken from std::hash<std::string>.
|
|
||||||
class hash : public std::unary_function<core::ustring, size_t>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
size_t operator()(const core::ustring& s) const
|
|
||||||
{
|
|
||||||
size_t ret = 2166136261U;
|
|
||||||
size_t index = 0;
|
|
||||||
size_t stride = 1 + s.size_raw() / 10;
|
|
||||||
|
|
||||||
core::ustring::const_iterator i = s.begin();
|
|
||||||
while (i != s.end())
|
|
||||||
{
|
|
||||||
// TODO: Don't force u32 on an x64 OS. Make it agnostic.
|
|
||||||
ret = 16777619U * ret ^ (size_t)s[(u32)index];
|
|
||||||
index += stride;
|
|
||||||
i += stride;
|
|
||||||
}
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace unicode
|
|
||||||
|
|
||||||
} // end namespace core
|
} // end namespace core
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
@ -29,13 +29,11 @@
|
|||||||
#ifndef __IRRLICHT_H_INCLUDED__
|
#ifndef __IRRLICHT_H_INCLUDED__
|
||||||
#define __IRRLICHT_H_INCLUDED__
|
#define __IRRLICHT_H_INCLUDED__
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include "aabbox3d.h"
|
#include "aabbox3d.h"
|
||||||
#include "CIndexBuffer.h"
|
#include "CIndexBuffer.h"
|
||||||
#include "CMeshBuffer.h"
|
#include "CMeshBuffer.h"
|
||||||
#include "coreutil.h"
|
#include "coreutil.h"
|
||||||
#include "CVertexBuffer.h"
|
#include "CVertexBuffer.h"
|
||||||
#include "IProfiler.h"
|
|
||||||
#include "dimension2d.h"
|
#include "dimension2d.h"
|
||||||
#include "ECullingTypes.h"
|
#include "ECullingTypes.h"
|
||||||
#include "EDebugSceneTypes.h"
|
#include "EDebugSceneTypes.h"
|
||||||
@ -44,7 +42,7 @@
|
|||||||
#include "EGUIAlignment.h"
|
#include "EGUIAlignment.h"
|
||||||
#include "EGUIElementTypes.h"
|
#include "EGUIElementTypes.h"
|
||||||
#include "EHardwareBufferFlags.h"
|
#include "EHardwareBufferFlags.h"
|
||||||
#include "EMaterialFlags.h"
|
#include "EMaterialProps.h"
|
||||||
#include "EMaterialTypes.h"
|
#include "EMaterialTypes.h"
|
||||||
#include "EMeshWriterEnums.h"
|
#include "EMeshWriterEnums.h"
|
||||||
#include "ESceneNodeTypes.h"
|
#include "ESceneNodeTypes.h"
|
||||||
@ -136,6 +134,7 @@
|
|||||||
#include "triangle3d.h"
|
#include "triangle3d.h"
|
||||||
#include "vector2d.h"
|
#include "vector2d.h"
|
||||||
#include "vector3d.h"
|
#include "vector3d.h"
|
||||||
|
#include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV
|
||||||
|
|
||||||
/*! \mainpage Irrlicht Engine 1.9 API documentation
|
/*! \mainpage Irrlicht Engine 1.9 API documentation
|
||||||
*
|
*
|
||||||
@ -272,7 +271,7 @@ namespace irr
|
|||||||
device could not be created.
|
device could not be created.
|
||||||
*/
|
*/
|
||||||
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice(
|
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice(
|
||||||
video::E_DRIVER_TYPE driverType = video::EDT_SOFTWARE,
|
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL,
|
||||||
// parentheses are necessary for some compilers
|
// parentheses are necessary for some compilers
|
||||||
const core::dimension2d<u32>& windowSize = (core::dimension2d<u32>(640,480)),
|
const core::dimension2d<u32>& windowSize = (core::dimension2d<u32>(640,480)),
|
||||||
u32 bits = 32,
|
u32 bits = 32,
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
// Copyright (C) 2013 Michael Zeilfelder
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __LEAK_HUNTER_INCLUDED__
|
|
||||||
#define __LEAK_HUNTER_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
|
|
||||||
#include "irrArray.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
class IReferenceCounted;
|
|
||||||
|
|
||||||
//! A class helping to find unreleased objects of type IReferenceCounted.
|
|
||||||
/** To use this you have recompile Irrlicht with _IRR_COMPILE_WITH_LEAK_HUNTER_.
|
|
||||||
Note that this will slow down your application and should only be used for debugging.
|
|
||||||
The way to use is that you can check after you closed and dropped your last Irrlicht device
|
|
||||||
if there are still any IReferenceCounted left over which have not been deleted.
|
|
||||||
*/
|
|
||||||
class LeakHunter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
friend class IReferenceCounted;
|
|
||||||
|
|
||||||
//! Clear all IReferenceCounted objects inside LeakHunter
|
|
||||||
/** This does not affect the IReferenceCounted themselves only the
|
|
||||||
counting of them. Usually you don't ever need to clear, but
|
|
||||||
sometimes it helps when for example you want to ignore
|
|
||||||
certain leaks.
|
|
||||||
*/
|
|
||||||
static void clearReferenceCountedObjects()
|
|
||||||
{
|
|
||||||
ReferenceCountedObjects.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Access all objects which are currently reference counted.
|
|
||||||
static inline irr::core::array<const IReferenceCounted*> getReferenceCountedObjects()
|
|
||||||
{
|
|
||||||
return ReferenceCountedObjects;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static inline void addObject(const IReferenceCounted* object)
|
|
||||||
{
|
|
||||||
ReferenceCountedObjects.push_back(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void removeObject(const IReferenceCounted* object)
|
|
||||||
{
|
|
||||||
irr::s32 idx = ReferenceCountedObjects.linear_search(object );
|
|
||||||
if ( idx >= 0 )
|
|
||||||
{
|
|
||||||
irr::core::swap( ReferenceCountedObjects[idx], ReferenceCountedObjects.getLast() );
|
|
||||||
ReferenceCountedObjects.erase( ReferenceCountedObjects.size()-1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// NOTE: We don't do additional grab()/drop()'s here as we want to supervise reference counted objects and not affect them otherwise.
|
|
||||||
IRRLICHT_API static irr::core::array<const IReferenceCounted*> ReferenceCountedObjects;
|
|
||||||
};
|
|
||||||
} // end namespace irr
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_LEAK_HUNTER_
|
|
||||||
|
|
||||||
#endif
|
|
@ -12,6 +12,7 @@
|
|||||||
#include "aabbox3d.h"
|
#include "aabbox3d.h"
|
||||||
#include "rect.h"
|
#include "rect.h"
|
||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
|
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||||
|
|
||||||
// enable this to keep track of changes to the matrix
|
// enable this to keep track of changes to the matrix
|
||||||
// and make simpler identity check for seldom changing matrices
|
// and make simpler identity check for seldom changing matrices
|
||||||
@ -142,7 +143,7 @@ namespace core
|
|||||||
|
|
||||||
//! Set this matrix to the product of two matrices
|
//! Set this matrix to the product of two matrices
|
||||||
/** Calculate b*a, no optimization used,
|
/** Calculate b*a, no optimization used,
|
||||||
use it if you know you never have a identity matrix */
|
use it if you know you never have an identity matrix */
|
||||||
CMatrix4<T>& setbyproduct_nocheck(const CMatrix4<T>& other_a,const CMatrix4<T>& other_b );
|
CMatrix4<T>& setbyproduct_nocheck(const CMatrix4<T>& other_a,const CMatrix4<T>& other_b );
|
||||||
|
|
||||||
//! Multiply by another matrix.
|
//! Multiply by another matrix.
|
||||||
@ -150,7 +151,8 @@ namespace core
|
|||||||
CMatrix4<T> operator*(const CMatrix4<T>& other) const;
|
CMatrix4<T> operator*(const CMatrix4<T>& other) const;
|
||||||
|
|
||||||
//! Multiply by another matrix.
|
//! Multiply by another matrix.
|
||||||
/** Calculate and return other*this */
|
/** Like calling: (*this) = (*this) * other
|
||||||
|
*/
|
||||||
CMatrix4<T>& operator*=(const CMatrix4<T>& other);
|
CMatrix4<T>& operator*=(const CMatrix4<T>& other);
|
||||||
|
|
||||||
//! Multiply by scalar.
|
//! Multiply by scalar.
|
||||||
@ -186,14 +188,25 @@ namespace core
|
|||||||
//! Make a rotation matrix from Euler angles. The 4th row and column are unmodified.
|
//! Make a rotation matrix from Euler angles. The 4th row and column are unmodified.
|
||||||
CMatrix4<T>& setRotationDegrees( const vector3d<T>& rotation );
|
CMatrix4<T>& setRotationDegrees( const vector3d<T>& rotation );
|
||||||
|
|
||||||
//! Get the rotation, as set by setRotation() when you already know the scale.
|
//! Get the rotation, as set by setRotation() when you already know the scale used to create the matrix
|
||||||
/** If you already know the scale then this function is faster than the other getRotationDegrees overload.
|
/** NOTE: The scale needs to be the correct one used to create this matrix.
|
||||||
NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
|
You can _not_ use the result of getScale(), but have to save your scale
|
||||||
|
variable in another place (like ISceneNode does).
|
||||||
|
NOTE: No scale value can be 0 or the result is undefined.
|
||||||
|
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
|
||||||
|
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||||
|
NOTE: It will (usually) give wrong results when further transformations have been added in the matrix (like shear).
|
||||||
|
WARNING: There have been troubles with this function over the years and we may still have missed some corner cases.
|
||||||
|
It's generally safer to keep the rotation and scale you used to create the matrix around and work with those.
|
||||||
*/
|
*/
|
||||||
core::vector3d<T> getRotationDegrees(const vector3d<T>& scale) const;
|
core::vector3d<T> getRotationDegrees(const vector3d<T>& scale) const;
|
||||||
|
|
||||||
//! Returns the rotation, as set by setRotation().
|
//! Returns the rotation, as set by setRotation().
|
||||||
/** NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
|
/** NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.
|
||||||
|
NOTE: This only works correct if no other matrix operations have been done on the inner 3x3 matrix besides
|
||||||
|
setting rotation (so no scale/shear). Thought it (probably) works as long as scale doesn't flip handedness.
|
||||||
|
NOTE: It does not necessarily return the *same* Euler angles as those set by setRotationDegrees(),
|
||||||
|
but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
||||||
*/
|
*/
|
||||||
core::vector3d<T> getRotationDegrees() const;
|
core::vector3d<T> getRotationDegrees() const;
|
||||||
|
|
||||||
@ -827,11 +840,9 @@ namespace core
|
|||||||
|
|
||||||
//! Returns the absolute values of the scales of the matrix.
|
//! Returns the absolute values of the scales of the matrix.
|
||||||
/**
|
/**
|
||||||
Note that this returns the absolute (positive) values unless only scale is set.
|
Note: You only get back original values if the matrix only set the scale.
|
||||||
Unfortunately it does not appear to be possible to extract any original negative
|
Otherwise the result is a scale you can use to normalize the matrix axes,
|
||||||
values. The best that we could do would be to arbitrarily make one scale
|
but it's usually no longer what you did set with setScale.
|
||||||
negative if one or three of them were negative.
|
|
||||||
FIXME - return the original values.
|
|
||||||
*/
|
*/
|
||||||
template <class T>
|
template <class T>
|
||||||
inline vector3d<T> CMatrix4<T>::getScale() const
|
inline vector3d<T> CMatrix4<T>::getScale() const
|
||||||
@ -894,33 +905,16 @@ namespace core
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Returns a rotation that is equivalent to that set by setRotationDegrees().
|
//! Returns a rotation which (mostly) works in combination with the given scale
|
||||||
/** This code was sent in by Chev. Note that it does not necessarily return
|
/**
|
||||||
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will
|
This code was originally written by by Chev (assuming no scaling back then,
|
||||||
be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
we can be blamed for all problems added by regarding scale)
|
||||||
This code was originally written by by Chev.
|
|
||||||
*/
|
*/
|
||||||
template <class T>
|
template <class T>
|
||||||
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees(const vector3d<T>& scale_) const
|
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees(const vector3d<T>& scale_) const
|
||||||
{
|
{
|
||||||
const CMatrix4<T> &mat = *this;
|
const CMatrix4<T> &mat = *this;
|
||||||
core::vector3d<T> scale(scale_);
|
const core::vector3d<f64> scale(core::iszero(scale_.X) ? FLT_MAX : scale_.X , core::iszero(scale_.Y) ? FLT_MAX : scale_.Y, core::iszero(scale_.Z) ? FLT_MAX : scale_.Z);
|
||||||
// we need to check for negative scale on to axes, which would bring up wrong results
|
|
||||||
if (scale.Y<0 && scale.Z<0)
|
|
||||||
{
|
|
||||||
scale.Y =-scale.Y;
|
|
||||||
scale.Z =-scale.Z;
|
|
||||||
}
|
|
||||||
else if (scale.X<0 && scale.Z<0)
|
|
||||||
{
|
|
||||||
scale.X =-scale.X;
|
|
||||||
scale.Z =-scale.Z;
|
|
||||||
}
|
|
||||||
else if (scale.X<0 && scale.Y<0)
|
|
||||||
{
|
|
||||||
scale.X =-scale.X;
|
|
||||||
scale.Y =-scale.Y;
|
|
||||||
}
|
|
||||||
const core::vector3d<f64> invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z));
|
const core::vector3d<f64> invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z));
|
||||||
|
|
||||||
f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0));
|
f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0));
|
||||||
@ -929,7 +923,7 @@ namespace core
|
|||||||
|
|
||||||
f64 rotx, roty, X, Z;
|
f64 rotx, roty, X, Z;
|
||||||
|
|
||||||
if (!core::iszero(C))
|
if (!core::iszero((T)C))
|
||||||
{
|
{
|
||||||
const f64 invC = core::reciprocal(C);
|
const f64 invC = core::reciprocal(C);
|
||||||
rotx = mat[10] * invC * invScale.Z;
|
rotx = mat[10] * invC * invScale.Z;
|
||||||
@ -956,14 +950,37 @@ namespace core
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Returns a rotation that is equivalent to that set by setRotationDegrees().
|
//! Returns a rotation that is equivalent to that set by setRotationDegrees().
|
||||||
/** This code was sent in by Chev. Note that it does not necessarily return
|
|
||||||
the *same* Euler angles as those set by setRotationDegrees(), but the rotation will
|
|
||||||
be equivalent, i.e. will have the same result when used to rotate a vector or node.
|
|
||||||
This code was originally written by by Chev. */
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees() const
|
inline core::vector3d<T> CMatrix4<T>::getRotationDegrees() const
|
||||||
{
|
{
|
||||||
return getRotationDegrees(getScale());
|
// Note: Using getScale() here make it look like it could do matrix decomposition.
|
||||||
|
// It can't! It works (or should work) as long as rotation doesn't flip the handedness
|
||||||
|
// aka scale swapping 1 or 3 axes. (I think we could catch that as well by comparing
|
||||||
|
// crossproduct of first 2 axes to direction of third axis, but TODO)
|
||||||
|
// And maybe it should also offer the solution for the simple calculation
|
||||||
|
// without regarding scaling as Irrlicht did before 1.7
|
||||||
|
core::vector3d<T> scale(getScale());
|
||||||
|
|
||||||
|
// We assume the matrix uses rotations instead of negative scaling 2 axes.
|
||||||
|
// Otherwise it fails even for some simple cases, like rotating around
|
||||||
|
// 2 axes by 180<38> which getScale thinks is a negative scaling.
|
||||||
|
if (scale.Y<0 && scale.Z<0)
|
||||||
|
{
|
||||||
|
scale.Y =-scale.Y;
|
||||||
|
scale.Z =-scale.Z;
|
||||||
|
}
|
||||||
|
else if (scale.X<0 && scale.Z<0)
|
||||||
|
{
|
||||||
|
scale.X =-scale.X;
|
||||||
|
scale.Z =-scale.Z;
|
||||||
|
}
|
||||||
|
else if (scale.X<0 && scale.Y<0)
|
||||||
|
{
|
||||||
|
scale.X =-scale.X;
|
||||||
|
scale.Y =-scale.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getRotationDegrees(scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1155,10 +1172,10 @@ namespace core
|
|||||||
template <class T>
|
template <class T>
|
||||||
inline void CMatrix4<T>::rotateVect( vector3df& vect ) const
|
inline void CMatrix4<T>::rotateVect( vector3df& vect ) const
|
||||||
{
|
{
|
||||||
vector3df tmp = vect;
|
vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
|
||||||
vect.X = tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8];
|
vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8]);
|
||||||
vect.Y = tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9];
|
vect.Y = static_cast<f32>(tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9]);
|
||||||
vect.Z = tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10];
|
vect.Z = static_cast<f32>(tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! An alternate transform vector method, writing into a second vector
|
//! An alternate transform vector method, writing into a second vector
|
||||||
@ -1182,24 +1199,24 @@ namespace core
|
|||||||
template <class T>
|
template <class T>
|
||||||
inline void CMatrix4<T>::inverseRotateVect( vector3df& vect ) const
|
inline void CMatrix4<T>::inverseRotateVect( vector3df& vect ) const
|
||||||
{
|
{
|
||||||
vector3df tmp = vect;
|
vector3d<T> tmp(static_cast<T>(vect.X), static_cast<T>(vect.Y), static_cast<T>(vect.Z));
|
||||||
vect.X = tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2];
|
vect.X = static_cast<f32>(tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2]);
|
||||||
vect.Y = tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6];
|
vect.Y = static_cast<f32>(tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6]);
|
||||||
vect.Z = tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10];
|
vect.Z = static_cast<f32>(tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10]);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void CMatrix4<T>::transformVect( vector3df& vect) const
|
inline void CMatrix4<T>::transformVect( vector3df& vect) const
|
||||||
{
|
{
|
||||||
f32 vector[3];
|
T vector[3];
|
||||||
|
|
||||||
vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12];
|
vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12];
|
||||||
vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13];
|
vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13];
|
||||||
vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14];
|
vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14];
|
||||||
|
|
||||||
vect.X = vector[0];
|
vect.X = static_cast<f32>(vector[0]);
|
||||||
vect.Y = vector[1];
|
vect.Y = static_cast<f32>(vector[1]);
|
||||||
vect.Z = vector[2];
|
vect.Z = static_cast<f32>(vector[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include "IrrCompileConfig.h"
|
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
#include "IContextManager.h"
|
#include "IContextManager.h"
|
||||||
#include <KHR/khrplatform.h>
|
#include <KHR/khrplatform.h>
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
precision mediump float;
|
|
||||||
|
|
||||||
/* Uniforms */
|
|
||||||
|
|
||||||
uniform float uModulate;
|
|
||||||
uniform int uTextureUsage0;
|
|
||||||
uniform int uTextureUsage1;
|
|
||||||
uniform sampler2D uTextureUnit0;
|
|
||||||
uniform sampler2D uTextureUnit1;
|
|
||||||
uniform int uFogEnable;
|
|
||||||
uniform int uFogType;
|
|
||||||
uniform vec4 uFogColor;
|
|
||||||
uniform float uFogStart;
|
|
||||||
uniform float uFogEnd;
|
|
||||||
uniform float uFogDensity;
|
|
||||||
|
|
||||||
/* Varyings */
|
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
|
||||||
|
|
||||||
float computeFog()
|
|
||||||
{
|
|
||||||
const float LOG2 = 1.442695;
|
|
||||||
float FogFactor = 0.0;
|
|
||||||
|
|
||||||
if (uFogType == 0) // Exp
|
|
||||||
{
|
|
||||||
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
|
|
||||||
}
|
|
||||||
else if (uFogType == 1) // Linear
|
|
||||||
{
|
|
||||||
float Scale = 1.0 / (uFogEnd - uFogStart);
|
|
||||||
FogFactor = (uFogEnd - vFogCoord) * Scale;
|
|
||||||
}
|
|
||||||
else if (uFogType == 2) // Exp2
|
|
||||||
{
|
|
||||||
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
|
|
||||||
}
|
|
||||||
|
|
||||||
FogFactor = clamp(FogFactor, 0.0, 1.0);
|
|
||||||
|
|
||||||
return FogFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage0))
|
|
||||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage1))
|
|
||||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
|
||||||
|
|
||||||
vec4 FinalColor = (Color0 * Color1 * uModulate) * vVertexColor;
|
|
||||||
FinalColor += vSpecularColor;
|
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
|
||||||
{
|
|
||||||
float FogFactor = computeFog();
|
|
||||||
vec4 FogColor = uFogColor;
|
|
||||||
FogColor.a = 1.0;
|
|
||||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
gl_FragColor = FinalColor;
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
/* Attributes */
|
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
|
||||||
attribute vec3 inVertexNormal;
|
|
||||||
attribute vec4 inVertexColor;
|
|
||||||
attribute vec2 inTexCoord0;
|
|
||||||
attribute vec2 inTexCoord1;
|
|
||||||
|
|
||||||
/* Uniforms */
|
|
||||||
|
|
||||||
uniform mat4 uWVPMatrix;
|
|
||||||
uniform mat4 uWVMatrix;
|
|
||||||
uniform mat4 uNMatrix;
|
|
||||||
uniform mat4 uTMatrix0;
|
|
||||||
|
|
||||||
uniform vec4 uGlobalAmbient;
|
|
||||||
uniform vec4 uMaterialAmbient;
|
|
||||||
uniform vec4 uMaterialDiffuse;
|
|
||||||
uniform vec4 uMaterialEmissive;
|
|
||||||
uniform vec4 uMaterialSpecular;
|
|
||||||
uniform float uMaterialShininess;
|
|
||||||
|
|
||||||
uniform float uThickness;
|
|
||||||
|
|
||||||
/* Varyings */
|
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
|
||||||
gl_PointSize = uThickness;
|
|
||||||
|
|
||||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
|
|
||||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
|
||||||
|
|
||||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
|
||||||
vec3 P = normalize(Position);
|
|
||||||
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
vec3 R = reflect(P, N);
|
|
||||||
|
|
||||||
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
|
|
||||||
vTextureCoord1 = vec2(R.x/V + 0.5, R.y/V + 0.5);
|
|
||||||
|
|
||||||
vVertexColor = inVertexColor.bgra;
|
|
||||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
precision mediump float;
|
|
||||||
|
|
||||||
/* Uniforms */
|
|
||||||
|
|
||||||
uniform int uTextureUsage0;
|
|
||||||
uniform int uTextureUsage1;
|
|
||||||
uniform sampler2D uTextureUnit0;
|
|
||||||
uniform sampler2D uTextureUnit1;
|
|
||||||
uniform int uFogEnable;
|
|
||||||
uniform int uFogType;
|
|
||||||
uniform vec4 uFogColor;
|
|
||||||
uniform float uFogStart;
|
|
||||||
uniform float uFogEnd;
|
|
||||||
uniform float uFogDensity;
|
|
||||||
|
|
||||||
/* Varyings */
|
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
|
||||||
|
|
||||||
float computeFog()
|
|
||||||
{
|
|
||||||
const float LOG2 = 1.442695;
|
|
||||||
float FogFactor = 0.0;
|
|
||||||
|
|
||||||
if (uFogType == 0) // Exp
|
|
||||||
{
|
|
||||||
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
|
|
||||||
}
|
|
||||||
else if (uFogType == 1) // Linear
|
|
||||||
{
|
|
||||||
float Scale = 1.0 / (uFogEnd - uFogStart);
|
|
||||||
FogFactor = (uFogEnd - vFogCoord) * Scale;
|
|
||||||
}
|
|
||||||
else if (uFogType == 2) // Exp2
|
|
||||||
{
|
|
||||||
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
|
|
||||||
}
|
|
||||||
|
|
||||||
FogFactor = clamp(FogFactor, 0.0, 1.0);
|
|
||||||
|
|
||||||
return FogFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage0))
|
|
||||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage1))
|
|
||||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
|
||||||
|
|
||||||
vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor;
|
|
||||||
FinalColor += vSpecularColor;
|
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
|
||||||
{
|
|
||||||
float FogFactor = computeFog();
|
|
||||||
vec4 FogColor = uFogColor;
|
|
||||||
FogColor.a = 1.0;
|
|
||||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
gl_FragColor = FinalColor;
|
|
||||||
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
/* Attributes */
|
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
|
||||||
attribute vec3 inVertexNormal;
|
|
||||||
attribute vec4 inVertexColor;
|
|
||||||
attribute vec2 inTexCoord0;
|
|
||||||
attribute vec2 inTexCoord1;
|
|
||||||
|
|
||||||
/* Uniforms */
|
|
||||||
|
|
||||||
uniform mat4 uWVPMatrix;
|
|
||||||
uniform mat4 uWVMatrix;
|
|
||||||
uniform mat4 uNMatrix;
|
|
||||||
|
|
||||||
uniform vec4 uGlobalAmbient;
|
|
||||||
uniform vec4 uMaterialAmbient;
|
|
||||||
uniform vec4 uMaterialDiffuse;
|
|
||||||
uniform vec4 uMaterialEmissive;
|
|
||||||
uniform vec4 uMaterialSpecular;
|
|
||||||
uniform float uMaterialShininess;
|
|
||||||
|
|
||||||
uniform float uThickness;
|
|
||||||
|
|
||||||
/* Varyings */
|
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
|
||||||
varying vec4 vVertexColor;
|
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
|
||||||
gl_PointSize = uThickness;
|
|
||||||
|
|
||||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
|
||||||
vec3 P = normalize(Position);
|
|
||||||
vec3 N = normalize(vec4(uNMatrix * vec4(inVertexNormal, 0.0)).xyz);
|
|
||||||
vec3 R = reflect(P, N);
|
|
||||||
|
|
||||||
float V = 2.0 * sqrt(R.x*R.x + R.y*R.y + (R.z+1.0)*(R.z+1.0));
|
|
||||||
vTextureCoord0 = vec2(R.x/V + 0.5, R.y/V + 0.5);
|
|
||||||
|
|
||||||
vVertexColor = inVertexColor.bgra;
|
|
||||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
|
||||||
}
|
|
@ -1,11 +1,12 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
/* Uniforms */
|
/* Uniforms */
|
||||||
|
|
||||||
uniform int uTextureUsage0;
|
uniform int uTextureUsage0;
|
||||||
uniform int uTextureUsage1;
|
|
||||||
uniform sampler2D uTextureUnit0;
|
uniform sampler2D uTextureUnit0;
|
||||||
uniform sampler2D uTextureUnit1;
|
uniform int uBlendType;
|
||||||
uniform int uFogEnable;
|
uniform int uFogEnable;
|
||||||
uniform int uFogType;
|
uniform int uFogType;
|
||||||
uniform vec4 uFogColor;
|
uniform vec4 uFogColor;
|
||||||
@ -16,9 +17,7 @@ uniform float uFogDensity;
|
|||||||
/* Varyings */
|
/* Varyings */
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
varying vec2 vTextureCoord0;
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
varying vec4 vVertexColor;
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
float computeFog()
|
float computeFog()
|
||||||
@ -47,16 +46,22 @@ float computeFog()
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
vec4 Color0 = vVertexColor;
|
||||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
|
|
||||||
if (bool(uTextureUsage0))
|
if (bool(uTextureUsage0))
|
||||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
Color1 = texture2D(uTextureUnit0, vTextureCoord0);
|
||||||
|
|
||||||
if (bool(uTextureUsage1))
|
vec4 FinalColor = Color0 * Color1;
|
||||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
|
||||||
|
|
||||||
vec4 FinalColor = (Color0 * Color1) * vVertexColor + vSpecularColor;
|
if (uBlendType == 1)
|
||||||
|
{
|
||||||
|
FinalColor.w = Color0.w;
|
||||||
|
}
|
||||||
|
else if (uBlendType == 2)
|
||||||
|
{
|
||||||
|
FinalColor.w = Color1.w;
|
||||||
|
}
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
if (bool(uFogEnable))
|
||||||
{
|
{
|
23
media/Shaders/Renderer2D.fsh
Normal file
23
media/Shaders/Renderer2D.fsh
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
/* Uniforms */
|
||||||
|
|
||||||
|
uniform int uTextureUsage;
|
||||||
|
uniform sampler2D uTextureUnit;
|
||||||
|
|
||||||
|
/* Varyings */
|
||||||
|
|
||||||
|
varying vec2 vTextureCoord;
|
||||||
|
varying vec4 vVertexColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 Color = vVertexColor;
|
||||||
|
|
||||||
|
if (bool(uTextureUsage))
|
||||||
|
Color *= texture2D(uTextureUnit, vTextureCoord);
|
||||||
|
|
||||||
|
gl_FragColor = Color;
|
||||||
|
}
|
24
media/Shaders/Renderer2D.vsh
Normal file
24
media/Shaders/Renderer2D.vsh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
|
/* Attributes */
|
||||||
|
|
||||||
|
attribute vec4 inVertexPosition;
|
||||||
|
attribute vec4 inVertexColor;
|
||||||
|
attribute vec2 inTexCoord0;
|
||||||
|
|
||||||
|
/* Uniforms */
|
||||||
|
|
||||||
|
uniform float uThickness;
|
||||||
|
|
||||||
|
/* Varyings */
|
||||||
|
|
||||||
|
varying vec2 vTextureCoord;
|
||||||
|
varying vec4 vVertexColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = inVertexPosition;
|
||||||
|
gl_PointSize = uThickness;
|
||||||
|
vTextureCoord = inTexCoord0;
|
||||||
|
vVertexColor = inVertexColor.bgra;
|
||||||
|
}
|
11
media/Shaders/Renderer2D_noTex.fsh
Normal file
11
media/Shaders/Renderer2D_noTex.fsh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
/* Varyings */
|
||||||
|
varying vec4 vVertexColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_FragColor = vVertexColor;
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
/* Uniforms */
|
/* Uniforms */
|
||||||
@ -15,7 +17,6 @@ uniform float uFogDensity;
|
|||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
varying vec2 vTextureCoord0;
|
||||||
varying vec4 vVertexColor;
|
varying vec4 vVertexColor;
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
float computeFog()
|
float computeFog()
|
||||||
@ -48,7 +49,6 @@ void main()
|
|||||||
|
|
||||||
if (bool(uTextureUsage0))
|
if (bool(uTextureUsage0))
|
||||||
Color *= texture2D(uTextureUnit0, vTextureCoord0);
|
Color *= texture2D(uTextureUnit0, vTextureCoord0);
|
||||||
Color += vSpecularColor;
|
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
if (bool(uFogEnable))
|
||||||
{
|
{
|
@ -1,51 +1,38 @@
|
|||||||
/* Attributes */
|
#version 100
|
||||||
|
|
||||||
attribute vec3 inVertexPosition;
|
/* Attributes */
|
||||||
attribute vec3 inVertexNormal;
|
|
||||||
attribute vec4 inVertexColor;
|
attribute vec3 inVertexPosition;
|
||||||
attribute vec2 inTexCoord0;
|
attribute vec3 inVertexNormal;
|
||||||
attribute vec2 inTexCoord1;
|
attribute vec4 inVertexColor;
|
||||||
|
attribute vec2 inTexCoord0;
|
||||||
/* Uniforms */
|
|
||||||
|
/* Uniforms */
|
||||||
uniform mat4 uWVPMatrix;
|
|
||||||
uniform mat4 uWVMatrix;
|
uniform mat4 uWVPMatrix;
|
||||||
uniform mat4 uNMatrix;
|
uniform mat4 uWVMatrix;
|
||||||
uniform mat4 uTMatrix0;
|
uniform mat4 uNMatrix;
|
||||||
uniform mat4 uTMatrix1;
|
uniform mat4 uTMatrix0;
|
||||||
|
|
||||||
uniform vec4 uGlobalAmbient;
|
uniform float uThickness;
|
||||||
uniform vec4 uMaterialAmbient;
|
|
||||||
uniform vec4 uMaterialDiffuse;
|
/* Varyings */
|
||||||
uniform vec4 uMaterialEmissive;
|
|
||||||
uniform vec4 uMaterialSpecular;
|
varying vec2 vTextureCoord0;
|
||||||
uniform float uMaterialShininess;
|
varying vec4 vVertexColor;
|
||||||
|
varying float vFogCoord;
|
||||||
uniform float uThickness;
|
|
||||||
|
void main()
|
||||||
/* Varyings */
|
{
|
||||||
|
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||||
varying vec2 vTextureCoord0;
|
gl_PointSize = uThickness;
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
|
||||||
varying vec4 vSpecularColor;
|
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
||||||
varying float vFogCoord;
|
|
||||||
|
vVertexColor = inVertexColor.bgra;
|
||||||
void main()
|
|
||||||
{
|
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
|
||||||
gl_PointSize = uThickness;
|
vFogCoord = length(Position);
|
||||||
|
}
|
||||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 1.0, 1.0);
|
|
||||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
|
||||||
|
|
||||||
vec4 TextureCoord1 = vec4(inTexCoord1.x, inTexCoord1.y, 1.0, 1.0);
|
|
||||||
vTextureCoord1 = vec4(uTMatrix1 * TextureCoord1).xy;
|
|
||||||
|
|
||||||
vVertexColor = inVertexColor.bgra;
|
|
||||||
vSpecularColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
|
||||||
|
|
||||||
vFogCoord = length(Position);
|
|
||||||
}
|
|
@ -1,11 +1,12 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
/* Uniforms */
|
/* Uniforms */
|
||||||
|
|
||||||
|
uniform float uAlphaRef;
|
||||||
uniform int uTextureUsage0;
|
uniform int uTextureUsage0;
|
||||||
uniform int uTextureUsage1;
|
|
||||||
uniform sampler2D uTextureUnit0;
|
uniform sampler2D uTextureUnit0;
|
||||||
uniform sampler2D uTextureUnit1;
|
|
||||||
uniform int uFogEnable;
|
uniform int uFogEnable;
|
||||||
uniform int uFogType;
|
uniform int uFogType;
|
||||||
uniform vec4 uFogColor;
|
uniform vec4 uFogColor;
|
||||||
@ -16,9 +17,7 @@ uniform float uFogDensity;
|
|||||||
/* Varyings */
|
/* Varyings */
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
varying vec2 vTextureCoord0;
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
varying vec4 vVertexColor;
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
float computeFog()
|
float computeFog()
|
||||||
@ -47,24 +46,24 @@ float computeFog()
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
vec4 Color = vVertexColor;
|
||||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage0))
|
if (bool(uTextureUsage0))
|
||||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
{
|
||||||
|
Color *= texture2D(uTextureUnit0, vTextureCoord0);
|
||||||
|
|
||||||
if (bool(uTextureUsage1))
|
// TODO: uAlphaRef should rather control sharpness of alpha, don't know how to do that right now and this works in most cases.
|
||||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
if (Color.a < uAlphaRef)
|
||||||
|
discard;
|
||||||
vec4 FinalColor = (Color0 + Color1) * vVertexColor + vSpecularColor;
|
}
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
if (bool(uFogEnable))
|
||||||
{
|
{
|
||||||
float FogFactor = computeFog();
|
float FogFactor = computeFog();
|
||||||
vec4 FogColor = uFogColor;
|
vec4 FogColor = uFogColor;
|
||||||
FogColor.a = 1.0;
|
FogColor.a = 1.0;
|
||||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
Color = mix(FogColor, Color, FogFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = FinalColor;
|
gl_FragColor = Color;
|
||||||
}
|
}
|
@ -1,11 +1,12 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
/* Uniforms */
|
/* Uniforms */
|
||||||
|
|
||||||
|
uniform float uAlphaRef;
|
||||||
uniform int uTextureUsage0;
|
uniform int uTextureUsage0;
|
||||||
uniform int uTextureUsage1;
|
|
||||||
uniform sampler2D uTextureUnit0;
|
uniform sampler2D uTextureUnit0;
|
||||||
uniform sampler2D uTextureUnit1;
|
|
||||||
uniform int uFogEnable;
|
uniform int uFogEnable;
|
||||||
uniform int uFogType;
|
uniform int uFogType;
|
||||||
uniform vec4 uFogColor;
|
uniform vec4 uFogColor;
|
||||||
@ -16,9 +17,7 @@ uniform float uFogDensity;
|
|||||||
/* Varyings */
|
/* Varyings */
|
||||||
|
|
||||||
varying vec2 vTextureCoord0;
|
varying vec2 vTextureCoord0;
|
||||||
varying vec2 vTextureCoord1;
|
|
||||||
varying vec4 vVertexColor;
|
varying vec4 vVertexColor;
|
||||||
varying vec4 vSpecularColor;
|
|
||||||
varying float vFogCoord;
|
varying float vFogCoord;
|
||||||
|
|
||||||
float computeFog()
|
float computeFog()
|
||||||
@ -47,24 +46,21 @@ float computeFog()
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
|
vec4 Color = vVertexColor;
|
||||||
vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
|
|
||||||
if (bool(uTextureUsage0))
|
if (bool(uTextureUsage0))
|
||||||
Color0 = texture2D(uTextureUnit0, vTextureCoord0);
|
Color *= texture2D(uTextureUnit0, vTextureCoord0);
|
||||||
|
|
||||||
if (bool(uTextureUsage1))
|
if (Color.a < uAlphaRef)
|
||||||
Color1 = texture2D(uTextureUnit1, vTextureCoord1);
|
discard;
|
||||||
|
|
||||||
vec4 FinalColor = vec4(Color0 + (Color1 - 0.5)) * vVertexColor + vSpecularColor;
|
|
||||||
|
|
||||||
if (bool(uFogEnable))
|
if (bool(uFogEnable))
|
||||||
{
|
{
|
||||||
float FogFactor = computeFog();
|
float FogFactor = computeFog();
|
||||||
vec4 FogColor = uFogColor;
|
vec4 FogColor = uFogColor;
|
||||||
FogColor.a = 1.0;
|
FogColor.a = 1.0;
|
||||||
FinalColor = mix(FogColor, FinalColor, FogFactor);
|
Color = mix(FogColor, Color, FogFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = FinalColor;
|
gl_FragColor = Color;
|
||||||
}
|
}
|
62
media/Shaders/TransparentVertexAlpha.fsh
Normal file
62
media/Shaders/TransparentVertexAlpha.fsh
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
/* Uniforms */
|
||||||
|
|
||||||
|
uniform int uTextureUsage0;
|
||||||
|
uniform sampler2D uTextureUnit0;
|
||||||
|
uniform int uFogEnable;
|
||||||
|
uniform int uFogType;
|
||||||
|
uniform vec4 uFogColor;
|
||||||
|
uniform float uFogStart;
|
||||||
|
uniform float uFogEnd;
|
||||||
|
uniform float uFogDensity;
|
||||||
|
|
||||||
|
/* Varyings */
|
||||||
|
|
||||||
|
varying vec2 vTextureCoord0;
|
||||||
|
varying vec4 vVertexColor;
|
||||||
|
varying float vFogCoord;
|
||||||
|
|
||||||
|
float computeFog()
|
||||||
|
{
|
||||||
|
const float LOG2 = 1.442695;
|
||||||
|
float FogFactor = 0.0;
|
||||||
|
|
||||||
|
if (uFogType == 0) // Exp
|
||||||
|
{
|
||||||
|
FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
|
||||||
|
}
|
||||||
|
else if (uFogType == 1) // Linear
|
||||||
|
{
|
||||||
|
float Scale = 1.0 / (uFogEnd - uFogStart);
|
||||||
|
FogFactor = (uFogEnd - vFogCoord) * Scale;
|
||||||
|
}
|
||||||
|
else if (uFogType == 2) // Exp2
|
||||||
|
{
|
||||||
|
FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
|
||||||
|
}
|
||||||
|
|
||||||
|
FogFactor = clamp(FogFactor, 0.0, 1.0);
|
||||||
|
|
||||||
|
return FogFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 Color = vVertexColor;
|
||||||
|
|
||||||
|
if (bool(uTextureUsage0))
|
||||||
|
Color *= texture2D(uTextureUnit0, vTextureCoord0);
|
||||||
|
|
||||||
|
if (bool(uFogEnable))
|
||||||
|
{
|
||||||
|
float FogFactor = computeFog();
|
||||||
|
vec4 FogColor = uFogColor;
|
||||||
|
FogColor.a = 1.0;
|
||||||
|
Color = mix(FogColor, Color, FogFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
gl_FragColor = Color;
|
||||||
|
}
|
@ -349,7 +349,7 @@ f:write[[
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include "IrrCompileConfig.h"
|
#include "IrrCompileConfig.h" // for IRRLICHT_API
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
#include "IContextManager.h"
|
#include "IContextManager.h"
|
||||||
#include <KHR/khrplatform.h>
|
#include <KHR/khrplatform.h>
|
||||||
|
@ -5,21 +5,19 @@
|
|||||||
variant=win32
|
variant=win32
|
||||||
[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64
|
[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64
|
||||||
|
|
||||||
libjpeg_version=2.1.2
|
libjpeg_version=2.1.5.1
|
||||||
libpng_version=1.6.37
|
libpng_version=1.6.39
|
||||||
zlib_version=1.2.11
|
zlib_version=1.2.13
|
||||||
|
|
||||||
mkdir -p libs
|
mkdir -p libs
|
||||||
pushd libs
|
pushd libs
|
||||||
libs=$PWD
|
libs=$PWD
|
||||||
tmp=
|
|
||||||
[ "$variant" = win32 ] && tmp=dw2/
|
|
||||||
[ -e libjpeg.zip ] || \
|
[ -e libjpeg.zip ] || \
|
||||||
wget "http://minetest.kitsunemimi.pw/libjpeg-$libjpeg_version-$variant.zip" -O libjpeg.zip
|
wget "http://minetest.kitsunemimi.pw/libjpeg-$libjpeg_version-$variant.zip" -O libjpeg.zip
|
||||||
[ -e libpng.zip ] || \
|
[ -e libpng.zip ] || \
|
||||||
wget "http://minetest.kitsunemimi.pw/${tmp}libpng-$libpng_version-$variant.zip" -O libpng.zip
|
wget "http://minetest.kitsunemimi.pw/libpng-$libpng_version-$variant.zip" -O libpng.zip
|
||||||
[ -e zlib.zip ] || \
|
[ -e zlib.zip ] || \
|
||||||
wget "http://minetest.kitsunemimi.pw/${tmp}zlib-$zlib_version-$variant.zip" -O zlib.zip
|
wget "http://minetest.kitsunemimi.pw/zlib-$zlib_version-$variant.zip" -O zlib.zip
|
||||||
[ -d libjpeg ] || unzip -o libjpeg.zip -d libjpeg
|
[ -d libjpeg ] || unzip -o libjpeg.zip -d libjpeg
|
||||||
[ -d libpng ] || unzip -o libpng.zip -d libpng
|
[ -d libpng ] || unzip -o libpng.zip -d libpng
|
||||||
[ -d zlib ] || unzip -o zlib.zip -d zlib
|
[ -d zlib ] || unzip -o zlib.zip -d zlib
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
|
|
||||||
|
@ -2,11 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_ANDROID_ASSET_FILE_ARCHIVE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_ANDROID_ASSET_FILE_ARCHIVE_H_INCLUDED__
|
|
||||||
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
|
|
||||||
@ -48,7 +44,7 @@ namespace io
|
|||||||
//! get the archive type
|
//! get the archive type
|
||||||
virtual E_FILE_ARCHIVE_TYPE getType() const;
|
virtual E_FILE_ARCHIVE_TYPE getType() const;
|
||||||
|
|
||||||
//! Add a directory to read files from. Since the Android
|
//! Add a directory to read files from. Since the Android
|
||||||
//! API does not return names of directories, they need to
|
//! API does not return names of directories, they need to
|
||||||
//! be added manually.
|
//! be added manually.
|
||||||
virtual void addDirectoryToFileList(const io::path &filename);
|
virtual void addDirectoryToFileList(const io::path &filename);
|
||||||
@ -66,5 +62,3 @@ namespace io
|
|||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_
|
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
#endif // __C_ANDROID_ASSET_READER_H_INCLUDED__
|
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
|
|
||||||
|
@ -2,11 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_ANDROID_ASSET_READER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_ANDROID_ASSET_READER_H_INCLUDED__
|
|
||||||
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
#ifdef _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
|
|
||||||
@ -71,5 +67,3 @@ namespace io
|
|||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_
|
#endif // _IRR_COMPILE_ANDROID_ASSET_READER_
|
||||||
#endif // __C_ANDROID_ASSET_READER_H_INCLUDED__
|
|
||||||
|
|
||||||
|
@ -180,11 +180,6 @@ void CIrrDeviceAndroid::setWindowCaption(const wchar_t* text)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CIrrDeviceAndroid::present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CIrrDeviceAndroid::isWindowActive() const
|
bool CIrrDeviceAndroid::isWindowActive() const
|
||||||
{
|
{
|
||||||
return (Focused && !Paused);
|
return (Focused && !Paused);
|
||||||
|
@ -2,16 +2,13 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_IRR_DEVICE_ANDROID_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_IRR_DEVICE_ANDROID_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
||||||
|
|
||||||
#include "CIrrDeviceStub.h"
|
#include "CIrrDeviceStub.h"
|
||||||
#include "IrrlichtDevice.h"
|
#include "IrrlichtDevice.h"
|
||||||
#include "IImagePresenter.h"
|
|
||||||
#include "ICursorControl.h"
|
#include "ICursorControl.h"
|
||||||
|
|
||||||
#include <android/sensor.h>
|
#include <android/sensor.h>
|
||||||
@ -19,7 +16,7 @@
|
|||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
{
|
{
|
||||||
class CIrrDeviceAndroid : public CIrrDeviceStub, video::IImagePresenter
|
class CIrrDeviceAndroid : public CIrrDeviceStub
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CIrrDeviceAndroid(const SIrrlichtCreationParameters& param);
|
CIrrDeviceAndroid(const SIrrlichtCreationParameters& param);
|
||||||
@ -34,8 +31,6 @@ namespace irr
|
|||||||
|
|
||||||
virtual void setWindowCaption(const wchar_t* text);
|
virtual void setWindowCaption(const wchar_t* text);
|
||||||
|
|
||||||
virtual bool present(video::IImage* surface, void* windowId, core::rect<s32>* srcClip);
|
|
||||||
|
|
||||||
virtual bool isWindowActive() const;
|
virtual bool isWindowActive() const;
|
||||||
|
|
||||||
virtual bool isWindowFocused() const;
|
virtual bool isWindowFocused() const;
|
||||||
@ -104,4 +99,3 @@ namespace irr
|
|||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
||||||
#endif // __C_IRR_DEVICE_ANDROID_H_INCLUDED__
|
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
#ifdef _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
||||||
|
|
||||||
@ -29,7 +26,7 @@ public:
|
|||||||
int getUnicodeChar(int metaState);
|
int getUnicodeChar(int metaState);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static jclass Class_KeyEvent;
|
static jclass Class_KeyEvent;
|
||||||
static jmethodID Method_getUnicodeChar;
|
static jmethodID Method_getUnicodeChar;
|
||||||
static jmethodID Method_constructor;
|
static jmethodID Method_constructor;
|
||||||
JNIEnv* JniEnv;
|
JNIEnv* JniEnv;
|
||||||
@ -40,4 +37,3 @@ private:
|
|||||||
} // namespace irr
|
} // namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
#endif // _IRR_COMPILE_WITH_ANDROID_DEVICE_
|
||||||
#endif // __C_IRR_KEY_EVENT_WRAPPER_H_INCLUDED__
|
|
||||||
|
@ -2,11 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __BUILD_IN_FONT_H_INCLUDED__
|
#pragma once
|
||||||
#define __BUILD_IN_FONT_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
// header file generated by Bin2H, copyright 2002 by N.Gebhardt.
|
// header file generated by Bin2H, copyright 2002 by N.Gebhardt.
|
||||||
// Bin2H is Freeware. Download it freely from www.code3d.com.
|
// Bin2H is Freeware. Download it freely from www.code3d.com.
|
||||||
@ -16,7 +12,6 @@ namespace irr
|
|||||||
{
|
{
|
||||||
namespace gui
|
namespace gui
|
||||||
{
|
{
|
||||||
#ifdef _IRR_COMPILE_WITH_BMP_LOADER_
|
|
||||||
const u8 BuiltInFontData[] =
|
const u8 BuiltInFontData[] =
|
||||||
{
|
{
|
||||||
0x42, 0x4d, 0x4a, 0x20, 0x00, 0x00, 0x00, 0x00,
|
0x42, 0x4d, 0x4a, 0x20, 0x00, 0x00, 0x00, 0x00,
|
||||||
@ -1056,20 +1051,5 @@ const u8 BuiltInFontData[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
const u32 BuiltInFontDataSize = sizeof(BuiltInFontData);
|
const u32 BuiltInFontDataSize = sizeof(BuiltInFontData);
|
||||||
|
|
||||||
#else // !defined(_IRR_COMPILE_WITH_BMP_LOADER_)
|
|
||||||
|
|
||||||
// built-in font cannot be loaded if there is no BMP loader
|
|
||||||
|
|
||||||
const u8 * const BuiltInFontData=0;
|
|
||||||
|
|
||||||
const u32 BuiltInFontDataSize = 0;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
#include "ISceneManager.h"
|
#include "ISceneManager.h"
|
||||||
#include "S3DVertex.h"
|
#include "S3DVertex.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
||||||
#include "CSkinnedMesh.h"
|
#include "CSkinnedMesh.h"
|
||||||
|
#endif
|
||||||
#include "IDummyTransformationSceneNode.h"
|
#include "IDummyTransformationSceneNode.h"
|
||||||
#include "IBoneSceneNode.h"
|
#include "IBoneSceneNode.h"
|
||||||
#include "IMaterialRenderer.h"
|
#include "IMaterialRenderer.h"
|
||||||
@ -236,15 +238,6 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs)
|
|||||||
|
|
||||||
// set CurrentFrameNr
|
// set CurrentFrameNr
|
||||||
buildFrameNr(timeMs-LastTimeMs);
|
buildFrameNr(timeMs-LastTimeMs);
|
||||||
|
|
||||||
// update bbox
|
|
||||||
if (Mesh)
|
|
||||||
{
|
|
||||||
scene::IMesh * mesh = getMeshForCurrentFrame();
|
|
||||||
|
|
||||||
if (mesh)
|
|
||||||
Box = mesh->getBoundingBox();
|
|
||||||
}
|
|
||||||
LastTimeMs = timeMs;
|
LastTimeMs = timeMs;
|
||||||
|
|
||||||
IAnimatedMeshSceneNode::OnAnimate(timeMs);
|
IAnimatedMeshSceneNode::OnAnimate(timeMs);
|
||||||
@ -281,54 +274,23 @@ void CAnimatedMeshSceneNode::render()
|
|||||||
|
|
||||||
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
|
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
|
||||||
|
|
||||||
// for debug purposes only:
|
for (u32 i=0; i<m->getMeshBufferCount(); ++i)
|
||||||
|
|
||||||
bool renderMeshes = true;
|
|
||||||
video::SMaterial mat;
|
|
||||||
if (DebugDataVisible && PassCount==1)
|
|
||||||
{
|
{
|
||||||
// overwrite half transparency
|
const bool transparent = driver->needsTransparentRenderPass(Materials[i]);
|
||||||
if (DebugDataVisible & scene::EDS_HALF_TRANSPARENCY)
|
|
||||||
|
// only render transparent buffer if this is the transparent render pass
|
||||||
|
// and solid only in solid pass
|
||||||
|
if (transparent == isTransparentPass)
|
||||||
{
|
{
|
||||||
|
scene::IMeshBuffer* mb = m->getMeshBuffer(i);
|
||||||
|
const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i];
|
||||||
|
if (RenderFromIdentity)
|
||||||
|
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix );
|
||||||
|
else if (Mesh->getMeshType() == EAMT_SKINNED)
|
||||||
|
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation);
|
||||||
|
|
||||||
for (u32 i=0; i<m->getMeshBufferCount(); ++i)
|
driver->setMaterial(material);
|
||||||
{
|
driver->drawMeshBuffer(mb);
|
||||||
scene::IMeshBuffer* mb = m->getMeshBuffer(i);
|
|
||||||
mat = ReadOnlyMaterials ? mb->getMaterial() : Materials[i];
|
|
||||||
mat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
|
|
||||||
if (RenderFromIdentity)
|
|
||||||
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix );
|
|
||||||
else if (Mesh->getMeshType() == EAMT_SKINNED)
|
|
||||||
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation);
|
|
||||||
|
|
||||||
driver->setMaterial(mat);
|
|
||||||
driver->drawMeshBuffer(mb);
|
|
||||||
}
|
|
||||||
renderMeshes = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// render original meshes
|
|
||||||
if (renderMeshes)
|
|
||||||
{
|
|
||||||
for (u32 i=0; i<m->getMeshBufferCount(); ++i)
|
|
||||||
{
|
|
||||||
const bool transparent = driver->needsTransparentRenderPass(Materials[i]);
|
|
||||||
|
|
||||||
// only render transparent buffer if this is the transparent render pass
|
|
||||||
// and solid only in solid pass
|
|
||||||
if (transparent == isTransparentPass)
|
|
||||||
{
|
|
||||||
scene::IMeshBuffer* mb = m->getMeshBuffer(i);
|
|
||||||
const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i];
|
|
||||||
if (RenderFromIdentity)
|
|
||||||
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix );
|
|
||||||
else if (Mesh->getMeshType() == EAMT_SKINNED)
|
|
||||||
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation * ((SSkinMeshBuffer*)mb)->Transformation);
|
|
||||||
|
|
||||||
driver->setMaterial(material);
|
|
||||||
driver->drawMeshBuffer(mb);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IAnimatedMeshSceneNode.h"
|
#include "IAnimatedMeshSceneNode.h"
|
||||||
#include "IAnimatedMesh.h"
|
#include "IAnimatedMesh.h"
|
||||||
@ -180,6 +179,3 @@ namespace scene
|
|||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,10 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_ATTRIBUTES_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_ATTRIBUTES_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#include "IAttributes.h"
|
#include "IAttributes.h"
|
||||||
#include "IAttribute.h"
|
#include "IAttribute.h"
|
||||||
@ -149,5 +146,3 @@ protected:
|
|||||||
} // end namespace io
|
} // end namespace io
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
// File format designed by Mark Sibly for the Blitz3D engine and has been
|
// File format designed by Mark Sibly for the Blitz3D engine and has been
|
||||||
// declared public domain
|
// declared public domain
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_B3D_LOADER_
|
|
||||||
|
|
||||||
#include "CB3DMeshFileLoader.h"
|
#include "CB3DMeshFileLoader.h"
|
||||||
|
|
||||||
#include "IVideoDriver.h"
|
#include "IVideoDriver.h"
|
||||||
@ -946,19 +943,8 @@ bool CB3DMeshFileLoader::readChunkBRUS()
|
|||||||
//Two textures:
|
//Two textures:
|
||||||
if (B3dMaterial.Textures[1])
|
if (B3dMaterial.Textures[1])
|
||||||
{
|
{
|
||||||
if (B3dMaterial.alpha==1.f)
|
B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
|
||||||
{
|
B3dMaterial.Material.ZWriteEnable = video::EZW_OFF;
|
||||||
if (B3dMaterial.Textures[1]->Blend == 5) //(Multiply 2)
|
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_LIGHTMAP_M2;
|
|
||||||
else
|
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_LIGHTMAP;
|
|
||||||
B3dMaterial.Material.Lighting = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
|
|
||||||
B3dMaterial.Material.ZWriteEnable = video::EZW_OFF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (B3dMaterial.Textures[0]) //One texture:
|
else if (B3dMaterial.Textures[0]) //One texture:
|
||||||
{
|
{
|
||||||
@ -970,10 +956,6 @@ bool CB3DMeshFileLoader::readChunkBRUS()
|
|||||||
}
|
}
|
||||||
else if (B3dMaterial.Textures[0]->Flags & 0x4) //(Masked)
|
else if (B3dMaterial.Textures[0]->Flags & 0x4) //(Masked)
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; // TODO: create color key texture
|
B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; // TODO: create color key texture
|
||||||
else if (B3dMaterial.Textures[0]->Flags & 0x40)
|
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_SPHERE_MAP;
|
|
||||||
else if (B3dMaterial.Textures[0]->Flags & 0x80)
|
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_SPHERE_MAP; // TODO: Should be cube map
|
|
||||||
else if (B3dMaterial.alpha == 1.f)
|
else if (B3dMaterial.alpha == 1.f)
|
||||||
B3dMaterial.Material.MaterialType = video::EMT_SOLID;
|
B3dMaterial.Material.MaterialType = video::EMT_SOLID;
|
||||||
else
|
else
|
||||||
@ -1055,7 +1037,3 @@ void CB3DMeshFileLoader::readFloats(f32* vec, u32 count)
|
|||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_B3D_LOADER_
|
|
||||||
|
|
||||||
|
@ -6,10 +6,8 @@
|
|||||||
// File format designed by Mark Sibly for the Blitz3D engine and has been
|
// File format designed by Mark Sibly for the Blitz3D engine and has been
|
||||||
// declared public domain
|
// declared public domain
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifndef __C_B3D_MESH_LOADER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_B3D_MESH_LOADER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IMeshLoader.h"
|
#include "IMeshLoader.h"
|
||||||
#include "ISceneManager.h"
|
#include "ISceneManager.h"
|
||||||
@ -83,6 +81,3 @@ private:
|
|||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // __C_B3D_MESH_LOADER_H_INCLUDED__
|
|
||||||
|
|
||||||
|
@ -4,9 +4,6 @@
|
|||||||
|
|
||||||
// TODO: replace printf's by logging messages
|
// TODO: replace printf's by logging messages
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_B3D_WRITER_
|
|
||||||
|
|
||||||
#include "CB3DMeshWriter.h"
|
#include "CB3DMeshWriter.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
@ -97,7 +94,7 @@ bool CB3DMeshWriter::writeMesh(io::IWriteFile* file, IMesh* const mesh, s32 flag
|
|||||||
u32 numTexture = texs.size();
|
u32 numTexture = texs.size();
|
||||||
for (u32 i = 0; i < numTexture; i++)
|
for (u32 i = 0; i < numTexture; i++)
|
||||||
{
|
{
|
||||||
file->write(texs[i].TextureName.c_str(), texs[i].TextureName.size() + 1);
|
file->write(texs[i].TextureName.c_str(), (size_t)texs[i].TextureName.size() + 1);
|
||||||
file->write(&texs[i].Flags, 7*4);
|
file->write(&texs[i].Flags, 7*4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -479,7 +476,7 @@ core::array<ISkinnedMesh::SJoint*> CB3DMeshWriter::getRootJoints(const ISkinnedM
|
|||||||
return roots;
|
return roots;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CB3DMeshWriter::getUVlayerCount(IMesh* mesh)
|
u32 CB3DMeshWriter::getUVlayerCount(const IMesh* mesh)
|
||||||
{
|
{
|
||||||
const u32 numBeshBuffers = mesh->getMeshBufferCount();
|
const u32 numBeshBuffers = mesh->getMeshBufferCount();
|
||||||
for (u32 i = 0; i < numBeshBuffers; i++)
|
for (u32 i = 0; i < numBeshBuffers; i++)
|
||||||
@ -531,6 +528,3 @@ void CB3DMeshWriter::writeSizeFrom(io::IWriteFile* file, const u32 from, const u
|
|||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_B3D_WRITER_
|
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
// Modified version with rigging/skinning support
|
// Modified version with rigging/skinning support
|
||||||
|
|
||||||
#ifndef __IRR_B3D_MESH_WRITER_H_INCLUDED__
|
#pragma once
|
||||||
#define __IRR_B3D_MESH_WRITER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IMeshWriter.h"
|
#include "IMeshWriter.h"
|
||||||
#include "IWriteFile.h"
|
#include "IWriteFile.h"
|
||||||
@ -37,7 +36,7 @@ private:
|
|||||||
u32 getJointChunkSize(const ISkinnedMesh* mesh, ISkinnedMesh::SJoint* joint);
|
u32 getJointChunkSize(const ISkinnedMesh* mesh, ISkinnedMesh::SJoint* joint);
|
||||||
core::array<ISkinnedMesh::SJoint*> getRootJoints(const ISkinnedMesh* mesh);
|
core::array<ISkinnedMesh::SJoint*> getRootJoints(const ISkinnedMesh* mesh);
|
||||||
|
|
||||||
u32 getUVlayerCount(IMesh *mesh);
|
u32 getUVlayerCount(const IMesh *mesh);
|
||||||
ISkinnedMesh* getSkinned (IMesh *mesh);
|
ISkinnedMesh* getSkinned (IMesh *mesh);
|
||||||
|
|
||||||
inline void writeVector2(io::IWriteFile* file, const core::vector2df& vec);
|
inline void writeVector2(io::IWriteFile* file, const core::vector2df& vec);
|
||||||
@ -50,4 +49,3 @@ private:
|
|||||||
} // end namespace
|
} // end namespace
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
|
||||||
#include "CBillboardSceneNode.h"
|
#include "CBillboardSceneNode.h"
|
||||||
#include "IVideoDriver.h"
|
#include "IVideoDriver.h"
|
||||||
#include "ISceneManager.h"
|
#include "ISceneManager.h"
|
||||||
@ -143,7 +141,7 @@ void CBillboardSceneNode::updateMesh(const irr::scene::ICameraSceneNode* camera)
|
|||||||
//! returns the axis aligned bounding box of this node
|
//! returns the axis aligned bounding box of this node
|
||||||
const core::aabbox3d<f32>& CBillboardSceneNode::getBoundingBox() const
|
const core::aabbox3d<f32>& CBillboardSceneNode::getBoundingBox() const
|
||||||
{
|
{
|
||||||
// Really wrong when scaled.
|
// Really wrong when scaled (as the node does not scale it's vertices - maybe it should?)
|
||||||
return BBoxSafe;
|
return BBoxSafe;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,9 +162,9 @@ void CBillboardSceneNode::setSize(const core::dimension2d<f32>& size)
|
|||||||
if (core::equals(Size.Height, 0.0f))
|
if (core::equals(Size.Height, 0.0f))
|
||||||
Size.Height = 1.0f;
|
Size.Height = 1.0f;
|
||||||
|
|
||||||
const f32 avg = (Size.Width + Size.Height)/6;
|
const f32 extent = 0.5f*sqrtf(Size.Width*Size.Width + Size.Height*Size.Height);
|
||||||
BBoxSafe.MinEdge.set(-avg,-avg,-avg);
|
BBoxSafe.MinEdge.set(-extent,-extent,-extent);
|
||||||
BBoxSafe.MaxEdge.set(avg,avg,avg);
|
BBoxSafe.MaxEdge.set(extent,extent,extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -184,9 +182,9 @@ void CBillboardSceneNode::setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWi
|
|||||||
TopEdgeWidth = 1.0f;
|
TopEdgeWidth = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
const f32 avg = (core::max_(Size.Width,TopEdgeWidth) + Size.Height)/6;
|
const f32 extent = 0.5f*sqrtf(Size.Width*Size.Width + Size.Height*Size.Height);
|
||||||
BBoxSafe.MinEdge.set(-avg,-avg,-avg);
|
BBoxSafe.MinEdge.set(-extent,-extent,-extent);
|
||||||
BBoxSafe.MaxEdge.set(avg,avg,avg);
|
BBoxSafe.MaxEdge.set(extent,extent,extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -281,5 +279,3 @@ ISceneNode* CBillboardSceneNode::clone(ISceneNode* newParent, ISceneManager* new
|
|||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_BILLBOARD_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IBillboardSceneNode.h"
|
#include "IBillboardSceneNode.h"
|
||||||
#include "SMeshBuffer.h"
|
#include "SMeshBuffer.h"
|
||||||
@ -116,5 +115,3 @@ private:
|
|||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef _C_BLIT_H_INCLUDED_
|
#pragma once
|
||||||
#define _C_BLIT_H_INCLUDED_
|
|
||||||
|
|
||||||
#include "SoftwareDriver2_helper.h"
|
#include "SoftwareDriver2_helper.h"
|
||||||
|
|
||||||
@ -1058,6 +1057,3 @@ static s32 Blit(eBlitter operation,
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
|
|
||||||
|
|
||||||
#include "CBoneSceneNode.h"
|
#include "CBoneSceneNode.h"
|
||||||
|
|
||||||
namespace irr
|
namespace irr
|
||||||
@ -98,6 +95,3 @@ void CBoneSceneNode::updateAbsolutePositionOfAllChildren()
|
|||||||
|
|
||||||
} // namespace scene
|
} // namespace scene
|
||||||
} // namespace irr
|
} // namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_BONE_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_BONE_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
// Used with SkinnedMesh and IAnimatedMeshSceneNode, for boned meshes
|
// Used with SkinnedMesh and IAnimatedMeshSceneNode, for boned meshes
|
||||||
|
|
||||||
@ -69,5 +68,3 @@ namespace scene
|
|||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -28,16 +28,16 @@ CCameraSceneNode::CCameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 i
|
|||||||
|
|
||||||
// set default projection
|
// set default projection
|
||||||
Fovy = core::PI / 2.5f; // Field of view, in radians.
|
Fovy = core::PI / 2.5f; // Field of view, in radians.
|
||||||
|
Aspect = 4.0f / 3.0f; // Aspect ratio.
|
||||||
|
|
||||||
const video::IVideoDriver* const d = mgr?mgr->getVideoDriver():0;
|
const video::IVideoDriver* const d = mgr?mgr->getVideoDriver():0;
|
||||||
if (d)
|
if (d)
|
||||||
{
|
{
|
||||||
Aspect = (f32)d->getCurrentRenderTargetSize().Width /
|
if ( d->getCurrentRenderTargetSize().Height )
|
||||||
(f32)d->getCurrentRenderTargetSize().Height;
|
Aspect = (f32)d->getCurrentRenderTargetSize().Width /
|
||||||
|
(f32)d->getCurrentRenderTargetSize().Height;
|
||||||
HasD3DStyleProjectionMatrix = d->getDriverType() != video::EDT_OPENGL;
|
HasD3DStyleProjectionMatrix = d->getDriverType() != video::EDT_OPENGL;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
Aspect = 4.0f / 3.0f; // Aspect ratio.
|
|
||||||
|
|
||||||
ViewArea.setFarNearDistance(ZFar - ZNear);
|
ViewArea.setFarNearDistance(ZFar - ZNear);
|
||||||
recalculateProjectionMatrix();
|
recalculateProjectionMatrix();
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_CAMERA_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_CAMERA_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "ICameraSceneNode.h"
|
#include "ICameraSceneNode.h"
|
||||||
#include "SViewFrustum.h"
|
#include "SViewFrustum.h"
|
||||||
@ -168,6 +167,3 @@ namespace scene
|
|||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_COLOR_CONVERTER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_COLOR_CONVERTER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
#include "IImage.h"
|
#include "IImage.h"
|
||||||
@ -97,5 +96,3 @@ public:
|
|||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IDummyTransformationSceneNode.h"
|
#include "IDummyTransformationSceneNode.h"
|
||||||
|
|
||||||
@ -58,5 +57,3 @@ namespace scene
|
|||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
// Copyright (C) 2015 Patryk Nadrowski
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
|
||||||
|
|
||||||
#ifndef __C_EAGL_MANAGER_H_INCLUDED__
|
|
||||||
#define __C_EAGL_MANAGER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
|
|
||||||
#include "SIrrCreationParameters.h"
|
|
||||||
#include "SExposedVideoData.h"
|
|
||||||
#include "IContextManager.h"
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
// EAGL manager.
|
|
||||||
class CEAGLManager : public IContextManager
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Constructor.
|
|
||||||
CEAGLManager();
|
|
||||||
|
|
||||||
//! Destructor.
|
|
||||||
virtual ~CEAGLManager();
|
|
||||||
|
|
||||||
// Initialize EAGL.
|
|
||||||
/* This method checks if a view has CAEAGLLayer and grabs it if it does, anyway surface and context
|
|
||||||
aren't create. */
|
|
||||||
bool initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data);
|
|
||||||
|
|
||||||
// Terminate EAGL.
|
|
||||||
/* Terminate EAGL context. This method break both existed surface and context. */
|
|
||||||
void terminate();
|
|
||||||
|
|
||||||
// Create EAGL surface.
|
|
||||||
/* This method configure CAEAGLLayer. */
|
|
||||||
bool generateSurface();
|
|
||||||
|
|
||||||
// Destroy EAGL surface.
|
|
||||||
/* This method reset CAEAGLLayer states. */
|
|
||||||
void destroySurface();
|
|
||||||
|
|
||||||
// Create EAGL context.
|
|
||||||
/* This method create and activate EAGL context. */
|
|
||||||
bool generateContext();
|
|
||||||
|
|
||||||
// Destroy EAGL context.
|
|
||||||
/* This method destroy EAGL context. */
|
|
||||||
void destroyContext();
|
|
||||||
|
|
||||||
const SExposedVideoData& getContext() const;
|
|
||||||
|
|
||||||
bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero);
|
|
||||||
|
|
||||||
// Swap buffers.
|
|
||||||
bool swapBuffers();
|
|
||||||
|
|
||||||
private:
|
|
||||||
SIrrlichtCreationParameters Params;
|
|
||||||
SExposedVideoData Data;
|
|
||||||
|
|
||||||
bool Configured;
|
|
||||||
|
|
||||||
void* DataStorage;
|
|
||||||
|
|
||||||
struct SFrameBuffer
|
|
||||||
{
|
|
||||||
SFrameBuffer() : BufferID(0), ColorBuffer(0), DepthBuffer(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 BufferID;
|
|
||||||
u32 ColorBuffer;
|
|
||||||
u32 DepthBuffer;
|
|
||||||
};
|
|
||||||
|
|
||||||
SFrameBuffer FrameBuffer;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,273 +0,0 @@
|
|||||||
// Copyright (C) 2015 Patryk Nadrowski
|
|
||||||
// This file is part of the "Irrlicht Engine".
|
|
||||||
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
|
||||||
|
|
||||||
#include "CEAGLManager.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_EAGL_MANAGER_
|
|
||||||
|
|
||||||
#include "irrString.h"
|
|
||||||
#include "os.h"
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
#import <OpenGLES/EAGL.h>
|
|
||||||
|
|
||||||
#if defined(_IRR_COMPILE_WITH_OGLES1_)
|
|
||||||
#include <OpenGLES/ES1/gl.h>
|
|
||||||
#include <OpenGLES/ES1/glext.h>
|
|
||||||
#elif defined(_IRR_COMPILE_WITH_OGLES2_)
|
|
||||||
#include <OpenGLES/ES2/gl.h>
|
|
||||||
#include <OpenGLES/ES2/glext.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace irr
|
|
||||||
{
|
|
||||||
namespace video
|
|
||||||
{
|
|
||||||
|
|
||||||
struct SEAGLManagerDataStorage
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage() : Layer(0), Context(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CAEAGLLayer* Layer;
|
|
||||||
EAGLContext* Context;
|
|
||||||
};
|
|
||||||
|
|
||||||
CEAGLManager::CEAGLManager() : IContextManager(), Configured(false), DataStorage(0)
|
|
||||||
{
|
|
||||||
#ifdef _DEBUG
|
|
||||||
setDebugName("CEAGLManager");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DataStorage = new SEAGLManagerDataStorage();
|
|
||||||
}
|
|
||||||
|
|
||||||
CEAGLManager::~CEAGLManager()
|
|
||||||
{
|
|
||||||
destroyContext();
|
|
||||||
destroySurface();
|
|
||||||
terminate();
|
|
||||||
|
|
||||||
delete static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CEAGLManager::initialize(const SIrrlichtCreationParameters& params, const SExposedVideoData& data)
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
|
|
||||||
if (dataStorage->Layer != nil)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
Params = params;
|
|
||||||
Data = data;
|
|
||||||
|
|
||||||
UIView* view = (__bridge UIView*)data.OpenGLiOS.View;
|
|
||||||
|
|
||||||
if (view == nil || ![[view layer] isKindOfClass:[CAEAGLLayer class]])
|
|
||||||
{
|
|
||||||
os::Printer::log("Could not get EAGL display.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
dataStorage->Layer = (CAEAGLLayer*)[view layer];
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CEAGLManager::terminate()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
|
|
||||||
[EAGLContext setCurrentContext:0];
|
|
||||||
|
|
||||||
destroySurface();
|
|
||||||
|
|
||||||
if (dataStorage->Layer != nil)
|
|
||||||
dataStorage->Layer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CEAGLManager::generateSurface()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
CAEAGLLayer* layer = dataStorage->Layer;
|
|
||||||
|
|
||||||
if (layer == nil)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (Configured)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
NSDictionary* attribs = [NSDictionary dictionaryWithObjectsAndKeys:
|
|
||||||
[NSNumber numberWithBool:NO],
|
|
||||||
kEAGLDrawablePropertyRetainedBacking,
|
|
||||||
(Params.Bits > 16) ? kEAGLColorFormatRGBA8 : kEAGLColorFormatRGB565,
|
|
||||||
kEAGLDrawablePropertyColorFormat,
|
|
||||||
nil];
|
|
||||||
|
|
||||||
[layer setOpaque:(Params.WithAlphaChannel) ? YES : NO];
|
|
||||||
[layer setDrawableProperties:attribs];
|
|
||||||
|
|
||||||
Configured = true;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CEAGLManager::destroySurface()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
CAEAGLLayer* layer = dataStorage->Layer;
|
|
||||||
|
|
||||||
if (layer == nil)
|
|
||||||
return;
|
|
||||||
|
|
||||||
[layer setOpaque:NO];
|
|
||||||
[layer setDrawableProperties:nil];
|
|
||||||
|
|
||||||
Configured = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CEAGLManager::generateContext()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
|
|
||||||
if (dataStorage->Context != nil || !Configured)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
EAGLRenderingAPI OpenGLESVersion = kEAGLRenderingAPIOpenGLES2;
|
|
||||||
|
|
||||||
switch (Params.DriverType)
|
|
||||||
{
|
|
||||||
case EDT_OGLES1:
|
|
||||||
OpenGLESVersion = kEAGLRenderingAPIOpenGLES1;
|
|
||||||
break;
|
|
||||||
case EDT_OGLES2:
|
|
||||||
OpenGLESVersion = kEAGLRenderingAPIOpenGLES2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dataStorage->Context = [[EAGLContext alloc] initWithAPI:OpenGLESVersion];
|
|
||||||
|
|
||||||
if (dataStorage->Context == nil)
|
|
||||||
{
|
|
||||||
os::Printer::log("Could not create EAGL context.", ELL_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Data.OpenGLiOS.Context = (__bridge void*)dataStorage->Context;
|
|
||||||
|
|
||||||
os::Printer::log("EAGL context created with OpenGLESVersion: ", core::stringc(static_cast<int>(OpenGLESVersion)), ELL_DEBUG);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CEAGLManager::destroyContext()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
|
|
||||||
[dataStorage->Context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:nil];
|
|
||||||
|
|
||||||
if (FrameBuffer.BufferID != 0)
|
|
||||||
{
|
|
||||||
glDeleteFramebuffersOES(1, &FrameBuffer.BufferID);
|
|
||||||
FrameBuffer.BufferID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FrameBuffer.ColorBuffer != 0)
|
|
||||||
{
|
|
||||||
glDeleteRenderbuffersOES(1, &FrameBuffer.ColorBuffer);
|
|
||||||
FrameBuffer.ColorBuffer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FrameBuffer.DepthBuffer != 0)
|
|
||||||
{
|
|
||||||
glDeleteRenderbuffersOES(1, &FrameBuffer.DepthBuffer);
|
|
||||||
FrameBuffer.DepthBuffer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
[EAGLContext setCurrentContext:0];
|
|
||||||
|
|
||||||
if (dataStorage->Context != nil)
|
|
||||||
dataStorage->Context = 0;
|
|
||||||
|
|
||||||
Data.OpenGLiOS.Context = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CEAGLManager::activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero)
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
EAGLContext* context = dataStorage->Context;
|
|
||||||
|
|
||||||
bool status = false;
|
|
||||||
|
|
||||||
if (context != nil)
|
|
||||||
{
|
|
||||||
status = ([EAGLContext currentContext] == context || [EAGLContext setCurrentContext:context]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status)
|
|
||||||
{
|
|
||||||
if (FrameBuffer.ColorBuffer == 0)
|
|
||||||
{
|
|
||||||
glGenRenderbuffersOES(1, &FrameBuffer.ColorBuffer);
|
|
||||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
|
|
||||||
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:dataStorage->Layer];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FrameBuffer.DepthBuffer == 0)
|
|
||||||
{
|
|
||||||
GLenum depth = (Params.ZBufferBits >= 24) ? GL_DEPTH_COMPONENT24_OES : GL_DEPTH_COMPONENT16_OES;
|
|
||||||
|
|
||||||
glGenRenderbuffersOES(1, &FrameBuffer.DepthBuffer);
|
|
||||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer);
|
|
||||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depth, Params.WindowSize.Width, Params.WindowSize.Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FrameBuffer.BufferID == 0)
|
|
||||||
{
|
|
||||||
glGenFramebuffersOES(1, &FrameBuffer.BufferID);
|
|
||||||
glBindFramebufferOES(GL_FRAMEBUFFER_OES, FrameBuffer.BufferID);
|
|
||||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
|
|
||||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
glBindFramebufferOES(GL_FRAMEBUFFER_OES, FrameBuffer.BufferID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
os::Printer::log("Could not make EGL context current.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
const SExposedVideoData& CEAGLManager::getContext() const
|
|
||||||
{
|
|
||||||
return Data;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CEAGLManager::swapBuffers()
|
|
||||||
{
|
|
||||||
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
|
|
||||||
EAGLContext* context = dataStorage->Context;
|
|
||||||
|
|
||||||
bool status = false;
|
|
||||||
|
|
||||||
if (context != nil && context == [EAGLContext currentContext])
|
|
||||||
{
|
|
||||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
|
|
||||||
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
|
|
||||||
|
|
||||||
status = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -2,10 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_EGL_MANAGER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_EGL_MANAGER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_EGL_MANAGER_
|
#ifdef _IRR_COMPILE_WITH_EGL_MANAGER_
|
||||||
|
|
||||||
@ -115,4 +112,3 @@ namespace video
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_EMPTY_SCENE_NODE_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_EMPTY_SCENE_NODE_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "ISceneNode.h"
|
#include "ISceneNode.h"
|
||||||
|
|
||||||
@ -41,6 +40,3 @@ namespace scene
|
|||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_FPSCOUNTER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_FPSCOUNTER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "irrTypes.h"
|
#include "irrTypes.h"
|
||||||
|
|
||||||
@ -48,7 +47,3 @@ private:
|
|||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "CFileList.h"
|
#include "CFileList.h"
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
#include "coreutil.h"
|
#include "coreutil.h"
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_FILE_LIST_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_FILE_LIST_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IFileList.h"
|
#include "IFileList.h"
|
||||||
#include "irrString.h"
|
#include "irrString.h"
|
||||||
@ -132,7 +131,3 @@ protected:
|
|||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#include "CFileSystem.h"
|
#include "CFileSystem.h"
|
||||||
#include "IReadFile.h"
|
#include "IReadFile.h"
|
||||||
@ -25,7 +24,7 @@
|
|||||||
#include <direct.h> // for _chdir
|
#include <direct.h> // for _chdir
|
||||||
#include <io.h> // for _access
|
#include <io.h> // for _access
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#elif (defined(_IRR_POSIX_API_) || defined(_IRR_OSX_PLATFORM_) || defined(_IRR_IOS_PLATFORM_) || defined(_IRR_ANDROID_PLATFORM_))
|
#elif (defined(_IRR_POSIX_API_) || defined(_IRR_OSX_PLATFORM_) || defined(_IRR_ANDROID_PLATFORM_))
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -54,9 +53,7 @@ CFileSystem::CFileSystem()
|
|||||||
//! reset current working directory
|
//! reset current working directory
|
||||||
getWorkingDirectory();
|
getWorkingDirectory();
|
||||||
|
|
||||||
#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_
|
|
||||||
ArchiveLoader.push_back(new CArchiveLoaderZIP(this));
|
ArchiveLoader.push_back(new CArchiveLoaderZIP(this));
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -799,7 +796,7 @@ IFileList* CFileSystem::createFileList()
|
|||||||
size = buf.st_size;
|
size = buf.st_size;
|
||||||
isDirectory = S_ISDIR(buf.st_mode);
|
isDirectory = S_ISDIR(buf.st_mode);
|
||||||
}
|
}
|
||||||
#if !defined(_IRR_SOLARIS_PLATFORM_) && !defined(__CYGWIN__)
|
#if !defined(_IRR_SOLARIS_PLATFORM_) && !defined(__CYGWIN__) && !defined(__HAIKU__)
|
||||||
// only available on some systems
|
// only available on some systems
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_FILE_SYSTEM_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_FILE_SYSTEM_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IFileSystem.h"
|
#include "IFileSystem.h"
|
||||||
#include "irrArray.h"
|
#include "irrArray.h"
|
||||||
@ -140,6 +139,3 @@ private:
|
|||||||
|
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
} // end namespace io
|
} // end namespace io
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -2,10 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_GLX_MANAGER_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_GLX_MANAGER_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_
|
#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_
|
||||||
|
|
||||||
@ -77,6 +74,3 @@ namespace video
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#include "CGUIButton.h"
|
#include "CGUIButton.h"
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUISkin.h"
|
#include "IGUISkin.h"
|
||||||
#include "IGUIEnvironment.h"
|
#include "IGUIEnvironment.h"
|
||||||
@ -558,6 +557,3 @@ bool CGUIButton::isDrawingBorder() const
|
|||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
|
@ -2,11 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_GUI_BUTTON_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_GUI_BUTTON_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUIButton.h"
|
#include "IGUIButton.h"
|
||||||
#include "IGUISpriteBank.h"
|
#include "IGUISpriteBank.h"
|
||||||
@ -243,8 +239,3 @@ namespace gui
|
|||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#endif // __C_GUI_BUTTON_H_INCLUDED__
|
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
#include "CGUICheckBox.h"
|
#include "CGUICheckBox.h"
|
||||||
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUISkin.h"
|
#include "IGUISkin.h"
|
||||||
#include "IGUIEnvironment.h"
|
#include "IGUIEnvironment.h"
|
||||||
#include "IVideoDriver.h"
|
#include "IVideoDriver.h"
|
||||||
@ -227,6 +225,3 @@ bool CGUICheckBox::isDrawBorderEnabled() const
|
|||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
|
@ -2,11 +2,7 @@
|
|||||||
// This file is part of the "Irrlicht Engine".
|
// This file is part of the "Irrlicht Engine".
|
||||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||||||
|
|
||||||
#ifndef __C_GUI_CHECKBOX_H_INCLUDED__
|
#pragma once
|
||||||
#define __C_GUI_CHECKBOX_H_INCLUDED__
|
|
||||||
|
|
||||||
#include "IrrCompileConfig.h"
|
|
||||||
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
|
||||||
#include "IGUICheckBox.h"
|
#include "IGUICheckBox.h"
|
||||||
|
|
||||||
@ -59,7 +55,3 @@ namespace gui
|
|||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
} // end namespace irr
|
} // end namespace irr
|
||||||
|
|
||||||
#endif // __C_GUI_CHECKBOX_H_INCLUDED__
|
|
||||||
|
|
||||||
#endif // _IRR_COMPILE_WITH_GUI_
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user