43 Commits

Author SHA1 Message Date
128cf1696c Remove core::list and replace uses with std::list (#105) 2022-05-22 00:00:32 +02:00
3e81f38098 Make irrArray backed by std::vector (#101) 2022-05-21 23:56:36 +02:00
593103a261 Refactor SDL device to use the same abstraction as other devices
In particular this makes the OpenGL procedure stuff work.
fixes https://github.com/minetest/minetest/issues/12265
2022-05-21 15:26:38 +02:00
0732807cc8 Improve IrrCompileConfig handling in cmake 2022-05-21 15:26:38 +02:00
00a7741cd4 Remove irrMap and use std::map instead 2022-05-18 13:12:47 +02:00
51ae495c4a Remove extra memcpy in ogles2 driver 2022-05-11 13:25:50 +02:00
6928c7eb6f Add hash for vector2d and vector3d (#93) 2022-05-10 19:26:24 +02:00
372b3642bf Bump revision 2022-05-07 11:24:47 +02:00
51dad49d8b Unit tests for irrArray (#103) 2022-05-07 11:21:41 +02:00
fc4eda0f44 Properly strip windows binaries produced by CI 2022-05-06 14:08:45 +02:00
401e769114 Enable GL_ALPHA_TEST in OpenGL driver for custom transparent alpha shaders 2022-05-04 17:35:31 +02:00
24594ce226 Add missing overrides to fix compiler warnings 2022-04-30 16:53:53 +02:00
ba0396e93d Replace HWBufferMap with a list and back pointers (#99) 2022-04-29 12:04:22 +02:00
c9b66c8c58 Sort out two -Wdeprecated-copy warnings
- SMaterial copy constructor is removed entirely
  (same change in upstream trunk r6362)
- CMatrix4 gets an explicit, but default copy constructor readded
2022-04-28 21:20:42 +02:00
8b1d0db8e2 AutomatedTest: improve and run under macOS CI too 2022-03-09 22:52:11 +01:00
e469c54f76 Fix COSOperator::getSystemMemory
The values it returns are in Kilobytes and it was broken on macOS.
2022-03-09 22:52:11 +01:00
df908ef4ea Get rid of various old compiler and platform checks 2022-02-26 12:11:27 +01:00
01586f584a Delete more old files 2022-02-26 12:11:27 +01:00
95af6d7c08 Get rid of all sprintf calls 2022-02-26 12:11:27 +01:00
00dd274510 Fix uninitialized variable in previous commit 2022-02-26 12:11:27 +01:00
d59bcdbd07 Create OpenGL context using CreateContextAttribsARB 2022-02-20 23:18:17 +01:00
09b8837ef9 Fix SDL2 include paths
closes #96
2022-02-14 18:26:59 +01:00
4fb1c55ec5 IBillboardSceneNode got functions to access meshbuffers.
So uv-coordinates can now be modified directly (previously only possible via texture matrix).

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6299 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-02-09 19:09:04 +01:00
7fb36849c7 vector3d scalar operator/ and operator/= no longer multiply by the inverse but use the expected division.
That was a bad case of premature optimization.
Multiplication is indeed faster, but when working with floats this can introduce some rather unexpected inaccuracies.
Like x/x suddenly no longer being 1.0 (something guaranteed by division).
If someone really needs this back, then please add some new function which makes it clear we don't just have a typical division here.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6298 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-02-09 19:07:05 +01:00
8c0ee7d9ab Avoid some warnings from static code analysis.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6296 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-02-09 19:06:19 +01:00
684293f527 Prefer static_cast to reinterpret_cast where possible.
Just safer. Could probably do in a lot more places... another time.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6293 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-02-09 19:05:49 +01:00
1b8be72ccb de-deprecate clearZBuffer
Lets just keep this one around. Easy to use, downward compatible and generally works as expected.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6259 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-02-09 19:02:36 +01:00
d3132e0731 Update MinGW CI setup to match MT's 2022-02-04 21:12:49 +01:00
e5f69157db Bump revision 2022-02-03 21:50:14 +01:00
fa2a7dc236 Gracefully handle lack of bundle on macOS
should fix https://github.com/minetest/minetest/issues/10170
2022-01-31 21:03:21 +01:00
7d1dc8b2d5 Get rid of ancient workaround
...that probably negatively impacted performance or something else
2022-01-22 21:01:17 +01:00
53db262bd2 Update CIrrDeviceSDL to support SDL2 (#85) 2022-01-16 12:16:15 +01:00
195759100f CB3DMeshFileLoader: abort if offsets point outside of file
fixes #70
2022-01-15 16:06:30 +01:00
2fec5e5dd3 Reset mesh animation state before recalculating normals (#90) 2022-01-02 20:41:03 +01:00
52e03a8485 Remove unused attribute saving and loading (#86) 2021-12-29 23:00:56 +01:00
dd09fdcb4e Remove more unused code (#87) 2021-12-29 13:12:09 +01:00
4bdecbc6b7 Automatically use SSE registers for FP operations on i386 (#83) 2021-12-15 16:33:20 +01:00
6d133e1bcc Fix various GCC warnings
- fix overload hiding
- handle missing enumeration values in switch
- remove extraenous semicolons
- always have defaults in color converter switch
- fix root cause of stringop warning
2021-11-24 22:07:26 +01:00
d4119ba664 Remove unused functions
renderLine16_Blend(), renderLine16_Decal(), renderLine32_Blend(), renderLine32_Decal()
clipLine()
frand()
drawRectangle() and drawLine()

remove unused private fields
2021-11-24 22:06:12 +01:00
2f2d37dce6 Reduce _IRR_MATERIAL_MAX_TEXTURES_ to 4
We don't use any more and reducing this is free memory savings.
2021-11-19 20:27:51 +01:00
d322b73e4c Get rid of MATERIAL_MAX_TEXTURES_USED
Another configurable knob of questionable usefulness,
especially since this inhibits certain optimizations
by making loop length dependent on a global variable.
2021-11-19 20:16:57 +01:00
6779cb7254 Unconditionally load first texture matrix in OpenGL driver
This used to work in Irrlicht 1.8 and I tried to figure out
why it no longer did, but failed.
fixes minetest/minetest#11206
2021-11-19 19:34:53 +01:00
39cad3e618 Fix updating of vertex normals for animated meshes (#77)
Updates cached positions and normals of animated vertices
from the mesh. Useful when using meshManipulator to update
the normals.
2021-11-16 12:30:31 +01:00
280 changed files with 1494 additions and 34600 deletions

View File

@ -58,37 +58,49 @@ jobs:
LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest
win32:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Install deps
- name: Install compiler
run: |
sudo apt-get update
sudo apt-get install cmake g++-mingw-w64-i686 -qyy
sudo apt-get update && sudo apt-get install cmake -qyy
wget http://minetest.kitsunemimi.pw/mingw-w64-i686_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr
- name: Build
run: |
./scripts/ci-build-mingw.sh
./scripts/ci-build-mingw.sh package
env:
CC: i686-w64-mingw32-gcc
CXX: i686-w64-mingw32-g++
- uses: actions/upload-artifact@v2
with:
name: irrlicht-win32
path: ./irrlicht-win32.zip
win64:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Install deps
- name: Install compiler
run: |
sudo apt-get update
sudo apt-get install cmake g++-mingw-w64-x86-64 -qyy
sudo apt-get update && sudo apt-get install cmake -qyy
wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr
- name: Build
run: |
./scripts/ci-build-mingw.sh
./scripts/ci-build-mingw.sh package
env:
CC: x86_64-w64-mingw32-gcc
CXX: x86_64-w64-mingw32-g++
- uses: actions/upload-artifact@v2
with:
name: irrlicht-win64
path: ./irrlicht-win64.zip
macos:
runs-on: macos-10.15
steps:
@ -100,5 +112,9 @@ jobs:
- name: Build
run: |
cmake . -DCMAKE_FIND_FRAMEWORK=LAST
cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1
make -j3
- name: Test (headless)
run: |
./bin/OSX/AutomatedTest null

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,24 +0,0 @@
The Win64-VisualStudio version is currently (Irrlicht 1.8) compiled with VS 2010 using the Windows 7.1 SDK as platform toolset.
You might get the necessary Windows Platform SDK here: http://msdn.microsoft.com/en-us/windows/bb980924.aspx
To link to that Irrlicht.dll you need to set platform toolset in your VS version to the same target or re-compile the Irrlicht.dll using another platform toolset.
To re-compile Irrlicht for Win32-VisualStudio:
There are several project files for different VS versions in source/Irrlicht.
Irrlicht10.0.sln is for VS 2010
Irrlicht11.0.sln is for VS 2012
Irrlicht12.0.sln is for VS 2013
To compile Irrlicht + all examples and all tools check the BuildAllExamples_*.sln files in the examples folder.
For newer VS versions you have update one of those projects (VS usually can do that automatically when you open an older solution file).
Currently each of those solutions does set the platform toolset "Windows 7.1 SDK" (to be compatible to each other).
You might want to change that in the project settings and set it to your current version.
Make sure you use the same platform toolset in your application and in the engine.
Also when compiling examples each example has to use the same platform toolset as was used for the engine.
Platform should be Win64
Configuration is by default "Release"
But you can also chose "Debug" if you want Irrlicht with Debug information.
Static builds are possible but you have to additionally set the _IRR_STATIC_LIB_ define in the application when linking to a static Irrlicht.lib

View File

@ -9,6 +9,9 @@ Changes in ogl-es (not yet released - will be merged with trunk at some point)
--------------------------
Changes in 1.9 (not yet released)
- IBillboardSceneNode got functions to access meshbuffers. So uv-coordinates can now be modified directly (previously only possible via texture matrix).
- vector3d scalar operator/ and operator/= no longer multiply by the inverse but use the expected division.
Costs some speed, but fixes floating point troubles caused by this optimization (like x/x no longer being 1.0).
- Add equals and set_data functions to core::array for easier working with blocks of data.
- SIrrlichtCreationParameters::IgnoreInput set to false works again on X11.
Thanks @ Victor Gaydov for report + patch + very good test cases! (bug #401)

View File

@ -1,34 +0,0 @@
The Irrlicht Engine may be compiled to provide support for AES encrypted files. The implementation used by Irrlicht is provided by Dr Brian Gladman. The license for these files (including AES, a PRNG, SHA, and other algorithms) is as follows
/*
---------------------------------------------------------------------------
Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK.
All rights reserved.
LICENSE TERMS
The free distribution and use of this software in both source and binary
form is allowed (with or without changes) provided that:
1. distributions of this source code include the above copyright
notice, this list of conditions and the following disclaimer;
2. distributions in binary form include the above copyright
notice, this list of conditions and the following disclaimer
in the documentation and/or other associated materials;
3. the copyright holder's name is not used to endorse products
built using this software without specific written permission.
ALTERNATIVELY, provided that this notice is retained in full, this product
may be distributed under the terms of the GNU General Public License (GPL),
in which case the provisions of the GPL apply INSTEAD OF those given above.
DISCLAIMER
This software is provided 'as is' with no explicit or implied warranties
in respect of its properties, including, but not limited to, correctness
and/or fitness for purpose.
---------------------------------------------------------------------------
*/

View File

@ -1,42 +0,0 @@
--------------------------------------------------------------------------
This program, "bzip2", the associated library "libbzip2", and all
documentation, are copyright (C) 1996-2007 Julian R Seward. All
rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
3. Altered source versions must be plainly marked as such, and must
not be misrepresented as being the original software.
4. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Julian Seward, jseward@bzip.org
bzip2/libbzip2 version 1.0.5 of 10 December 2007
--------------------------------------------------------------------------

View File

@ -1,351 +0,0 @@
The Independent JPEG Group's JPEG software
==========================================
README for release 8d of 15-Jan-2012
====================================
This distribution contains the eighth public release of the Independent JPEG
Group's free JPEG software. You are welcome to redistribute this software and
to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,
Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
and other members of the Independent JPEG Group.
IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
(also known as JPEG, together with ITU-T SG16).
DOCUMENTATION ROADMAP
=====================
This file contains the following sections:
OVERVIEW General description of JPEG and the IJG software.
LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
REFERENCES Where to learn more about JPEG.
ARCHIVE LOCATIONS Where to find newer versions of this software.
ACKNOWLEDGMENTS Special thanks.
FILE FORMAT WARS Software *not* to get.
TO DO Plans for future IJG releases.
Other documentation files in the distribution are:
User documentation:
install.txt How to configure and install the IJG software.
usage.txt Usage instructions for cjpeg, djpeg, jpegtran,
rdjpgcom, and wrjpgcom.
*.1 Unix-style man pages for programs (same info as usage.txt).
wizard.txt Advanced usage instructions for JPEG wizards only.
change.log Version-to-version change highlights.
Programmer and internal documentation:
libjpeg.txt How to use the JPEG library in your own programs.
example.c Sample code for calling the JPEG library.
structure.txt Overview of the JPEG library's internal structure.
filelist.txt Road map of IJG files.
coderules.txt Coding style rules --- please read if you contribute code.
Please read at least the files install.txt and usage.txt. Some information
can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
If you want to understand how the JPEG code works, we suggest reading one or
more of the REFERENCES, then looking at the documentation files (in roughly
the order listed) before diving into the code.
OVERVIEW
========
This package contains C software to implement JPEG image encoding, decoding,
and transcoding. JPEG (pronounced "jay-peg") is a standardized compression
method for full-color and gray-scale images.
This software implements JPEG baseline, extended-sequential, and progressive
compression processes. Provision is made for supporting all variants of these
processes, although some uncommon parameter settings aren't implemented yet.
We have made no provision for supporting the hierarchical or lossless
processes defined in the standard.
We provide a set of library routines for reading and writing JPEG image files,
plus two sample applications "cjpeg" and "djpeg", which use the library to
perform conversion between JPEG and some other popular image file formats.
The library is intended to be reused in other applications.
In order to support file conversion and viewing software, we have included
considerable functionality beyond the bare JPEG coding/decoding capability;
for example, the color quantization modules are not strictly part of JPEG
decoding, but they are essential for output to colormapped file formats or
colormapped displays. These extra functions can be compiled out of the
library if not required for a particular application.
We have also included "jpegtran", a utility for lossless transcoding between
different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
applications for inserting and extracting textual comments in JFIF files.
The emphasis in designing this software has been on achieving portability and
flexibility, while also making it fast enough to be useful. In particular,
the software is not intended to be read as a tutorial on JPEG. (See the
REFERENCES section for introductory material.) Rather, it is intended to
be reliable, portable, industrial-strength code. We do not claim to have
achieved that goal in every aspect of the software, but we strive for it.
We welcome the use of this software as a component of commercial products.
No royalty is required, but we do ask for an acknowledgement in product
documentation, as described under LEGAL ISSUES.
LEGAL ISSUES
============
In plain English:
1. We don't promise that this software works. (But if you find any bugs,
please let us know!)
2. You can use this software for whatever you want. You don't have to pay us.
3. You may not pretend that you wrote this software. If you use it in a
program, you must acknowledge somewhere in your documentation that
you've used the IJG code.
In legalese:
The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose. This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.
This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
All Rights Reserved except as specified below.
Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.
These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library. If you use our work, you ought to
acknowledge us.
Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it. This software may be referred to only as "the Independent JPEG Group's
software".
We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.
ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
by the usual distribution terms of the Free Software Foundation; principally,
that you must include source code if you redistribute it. (See the file
ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
of any program generated from the IJG code, this does not limit you more than
the foregoing paragraphs do.
The Unix configuration script "configure" was produced with GNU Autoconf.
It is copyright by the Free Software Foundation but is freely distributable.
The same holds for its supporting scripts (config.guess, config.sub,
ltmain.sh). Another support script, install-sh, is copyright by X Consortium
but is also freely distributable.
The IJG distribution formerly included code to read and write GIF files.
To avoid entanglement with the Unisys LZW patent, GIF reading support has
been removed altogether, and the GIF writer has been simplified to produce
"uncompressed GIFs". This technique does not use the LZW algorithm; the
resulting GIF files are larger than usual, but are readable by all standard
GIF decoders.
We are required to state that
"The Graphics Interchange Format(c) is the Copyright property of
CompuServe Incorporated. GIF(sm) is a Service Mark property of
CompuServe Incorporated."
REFERENCES
==========
We recommend reading one or more of these references before trying to
understand the innards of the JPEG software.
The best short technical introduction to the JPEG compression algorithm is
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
(Adjacent articles in that issue discuss MPEG motion picture compression,
applications of JPEG, and related topics.) If you don't have the CACM issue
handy, a PostScript file containing a revised version of Wallace's article is
available at http://www.ijg.org/files/wallace.ps.gz. The file (actually
a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
omits the sample images that appeared in CACM, but it includes corrections
and some added material. Note: the Wallace article is copyright ACM and IEEE,
and it may not be used for commercial purposes.
A somewhat less technical, more leisurely introduction to JPEG can be found in
"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides
good explanations and example C code for a multitude of compression methods
including JPEG. It is an excellent source if you are comfortable reading C
code but don't know much about data compression in general. The book's JPEG
sample code is far from industrial-strength, but when you are ready to look
at a full implementation, you've got one here...
The best currently available description of JPEG is the textbook "JPEG Still
Image Data Compression Standard" by William B. Pennebaker and Joan L.
Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG
standards (DIS 10918-1 and draft DIS 10918-2).
Although this is by far the most detailed and comprehensive exposition of
JPEG publicly available, we point out that it is still missing an explanation
of the most essential properties and algorithms of the underlying DCT
technology.
If you think that you know about DCT-based JPEG after reading this book,
then you are in delusion. The real fundamentals and corresponding potential
of DCT-based JPEG are not publicly known so far, and that is the reason for
all the mistaken developments taking place in the image coding domain.
The original JPEG standard is divided into two parts, Part 1 being the actual
specification, while Part 2 covers compliance testing methods. Part 1 is
titled "Digital Compression and Coding of Continuous-tone Still Images,
Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
Continuous-tone Still Images, Part 2: Compliance testing" and has document
numbers ISO/IEC IS 10918-2, ITU-T T.83.
IJG JPEG 8 introduces an implementation of the JPEG SmartScale extension
which is specified in two documents: A contributed document at ITU and ISO
with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced
Image Coding", April 2006, Geneva, Switzerland. The latest version of this
document is Revision 3. And a contributed document ISO/IEC JTC1/SC29/WG1 N
5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany.
The JPEG standard does not specify all details of an interchangeable file
format. For the omitted details we follow the "JFIF" conventions, revision
1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report
and thus received a formal publication status. It is available as a free
download in PDF format from
http://www.ecma-international.org/publications/techreports/E-TR-098.htm.
A PostScript version of the JFIF document is available at
http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at
http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.
The TIFF 6.0 file format specification can be obtained by FTP from
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
(Compression tag 7). Copies of this Note can be obtained from
http://www.ijg.org/files/. It is expected that the next revision
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
uses our library to implement TIFF/JPEG per the Note.
ARCHIVE LOCATIONS
=================
The "official" archive site for this software is www.ijg.org.
The most recent released version can always be found there in
directory "files". This particular version will be archived as
http://www.ijg.org/files/jpegsrc.v8d.tar.gz, and in Windows-compatible
"zip" archive format as http://www.ijg.org/files/jpegsr8d.zip.
The JPEG FAQ (Frequently Asked Questions) article is a source of some
general information about JPEG.
It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
and other news.answers archive sites, including the official news.answers
archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
with body
send usenet/news.answers/jpeg-faq/part1
send usenet/news.answers/jpeg-faq/part2
ACKNOWLEDGMENTS
===============
Thank to Juergen Bruder for providing me with a copy of the common DCT
algorithm article, only to find out that I had come to the same result
in a more direct and comprehensible way with a more generative approach.
Thank to Istvan Sebestyen and Joan L. Mitchell for inviting me to the
ITU JPEG (Study Group 16) meeting in Geneva, Switzerland.
Thank to Thomas Wiegand and Gary Sullivan for inviting me to the
Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland.
Thank to Thomas Richter and Daniel Lee for inviting me to the
ISO/IEC JTC1/SC29/WG1 (also known as JPEG, together with ITU-T SG16)
meeting in Berlin, Germany.
Thank to John Korejwa and Massimo Ballerini for inviting me to
fruitful consultations in Boston, MA and Milan, Italy.
Thank to Hendrik Elstner, Roland Fassauer, Simone Zuck, Guenther
Maier-Gerber, Walter Stoeber, Fred Schmitz, and Norbert Braunagel
for corresponding business development.
Thank to Nico Zschach and Dirk Stelling of the technical support team
at the Digital Images company in Halle for providing me with extra
equipment for configuration tests.
Thank to Richard F. Lyon (then of Foveon Inc.) for fruitful
communication about JPEG configuration in Sigma Photo Pro software.
Thank to Andrew Finkenstadt for hosting the ijg.org site.
Last but not least special thank to Thomas G. Lane for the original
design and development of this singular software package.
FILE FORMAT WARS
================
The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
with ITU-T SG16) currently promotes different formats containing the name
"JPEG" which is misleading because these formats are incompatible with
original DCT-based JPEG and are based on faulty technologies.
IJG therefore does not and will not support such momentary mistakes
(see REFERENCES).
There exist also distributions under the name "OpenJPEG" promoting such
kind of formats which is misleading because they don't support original
JPEG images.
We have no sympathy for the promotion of inferior formats. Indeed, one of
the original reasons for developing this free software was to help force
convergence on common, interoperable format standards for JPEG files.
Don't use an incompatible file format!
(In any case, our decoder will remain capable of reading existing JPEG
image files indefinitely.)
Furthermore, the ISO committee pretends to be "responsible for the popular
JPEG" in their public reports which is not true because they don't respond to
actual requirements for the maintenance of the original JPEG specification.
There are currently distributions in circulation containing the name
"libjpeg" which claim to be a "derivative" or "fork" of the original
libjpeg, but don't have the features and are incompatible with formats
supported by actual IJG libjpeg distributions. Furthermore, they
violate the license conditions as described under LEGAL ISSUES above.
We have no sympathy for the release of misleading and illegal
distributions derived from obsolete code bases.
Don't use an obsolete code base!
TO DO
=====
Version 8 is the first release of a new generation JPEG standard
to overcome the limitations of the original JPEG specification.
More features are being prepared for coming releases...
Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.

View File

@ -1,111 +0,0 @@
This copy of the libpng notices is provided for your convenience. In case of
any discrepancy between this copy and the notices in the file png.h that is
included in the libpng distribution, the latter shall prevail.
COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
If you modify libpng you may insert additional notices immediately following
this sentence.
This code is released under the libpng license.
libpng versions 1.2.6, August 15, 2004, through 1.5.9, February 18, 2012, are
Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.2.5
with the following individual added to the list of Contributing Authors
Cosmin Truta
libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.0.6
with the following individuals added to the list of Contributing Authors
Simon-Pierre Cadieux
Eric S. Raymond
Gilles Vollant
and with the following additions to the disclaimer:
There is no warranty against interference with your enjoyment of the
library or against infringement. There is no warranty that our
efforts or the library will fulfill any of your particular purposes
or needs. This library is provided with all faults, and the entire
risk of satisfactory quality, performance, accuracy, and effort is with
the user.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-0.96,
with the following individuals added to the list of Contributing Authors:
Tom Lane
Glenn Randers-Pehrson
Willem van Schaik
libpng versions 0.89, June 1996, through 0.96, May 1997, are
Copyright (c) 1996, 1997 Andreas Dilger
Distributed according to the same disclaimer and license as libpng-0.88,
with the following individuals added to the list of Contributing Authors:
John Bowler
Kevin Bracey
Sam Bushell
Magnus Holmgren
Greg Roelofs
Tom Tanner
libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals:
Andreas Dilger
Dave Martindale
Guy Eric Schalnat
Paul Schmidt
Tim Wegner
The PNG Reference Library is supplied "AS IS". The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
including, without limitation, the warranties of merchantability and of
fitness for any purpose. The Contributing Authors and Group 42, Inc.
assume no liability for direct, indirect, incidental, special, exemplary,
or consequential damages, which may result from the use of the PNG
Reference Library, even if advised of the possibility of such damage.
Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions:
1. The origin of this source code must not be misrepresented.
2. Altered versions must be plainly marked as such and must not
be misrepresented as being the original source.
3. This Copyright notice may not be removed or altered from any
source or altered source distribution.
The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to
supporting the PNG file format in commercial products. If you use this
source code in a product, acknowledgment is not required but would be
appreciated.
A "png_get_copyright" function is available, for convenient use in "about"
boxes and the like:
printf("%s",png_get_copyright(NULL));
Also, the PNG logo (in PNG format, of course) is supplied in the
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
certification mark of the Open Source Initiative.
Glenn Randers-Pehrson
glennrp at users.sourceforge.net
February 18, 2012

View File

@ -1,2 +0,0 @@
Linux Users: There are some tools at the web for reading .chm files (try http://xchm.sourceforge.net/).
You can find a html version of this documentation at http://irrlicht.sourceforge.net/docu/index.html

View File

@ -1,8 +1,14 @@
#include <iostream>
#include <irrlicht.h>
#include "exampleHelper.h"
using namespace irr;
static IrrlichtDevice *device = nullptr;
static int test_fail = 0;
extern void test_irr_array();
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
{
if (core::stringc(arg_) == "null")
@ -15,18 +21,42 @@ static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
return video::EDT_OPENGL;
}
static inline void check(bool ok, const char *msg)
{
if (!ok)
{
test_fail++;
device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR);
}
}
void run_unit_tests() {
std::cout << "Running unit tests:" << std::endl;
test_irr_array();
}
int main(int argc, char *argv[])
{
run_unit_tests();
SIrrlichtCreationParameters p;
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
p.WindowSize = core::dimension2du(640, 480);
p.Vsync = true;
p.LoggingLevel = ELL_DEBUG;
IrrlichtDevice *device = createDeviceEx(p);
device = createDeviceEx(p);
if (!device)
return 1;
{
u32 total = 0;
device->getOSOperator()->getSystemMemory(&total, nullptr);
core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10);
device->getLogger()->log(message.c_str(), ELL_INFORMATION);
check(total > 130 * 1024, "RAM amount");
}
device->setWindowCaption(L"Hello World!");
device->setResizable(true);
@ -46,15 +76,19 @@ int main(int argc, char *argv[])
const io::path mediaPath = getExampleMediaPath();
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
if (!mesh)
return 1;
check(mesh, "mesh loading");
if (mesh)
{
video::ITexture* tex = driver->getTexture(mediaPath + "cooltexture.png");
check(tex, "texture loading");
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
if (node)
{
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setFrameLoop(0, 29);
node->setAnimationSpeed(30);
node->setMaterialTexture(0, driver->getTexture(mediaPath + "cooltexture.png"));
node->setMaterialTexture(0, tex);
}
}
smgr->addCameraSceneNode(0, core::vector3df(0,4,5), core::vector3df(0,2,0));
@ -102,12 +136,9 @@ int main(int argc, char *argv[])
driver->endScene();
}
if (core::stringw(L"a") != editbox->getText()) {
device->getLogger()->log("EditBox text mismatch", ELL_INFORMATION);
return 1;
}
check(core::stringw(L"a") == editbox->getText(), "EditBox text");
device->getLogger()->log("Done.", ELL_INFORMATION);
device->drop();
return 0;
return test_fail > 0 ? 1 : 0;
}

View File

@ -0,0 +1,135 @@
#include "irrArray.h"
#include "test_helper.h"
using namespace irr;
using core::array;
static void test_basics() {
array<int> v;
v.push_back(1); // 1
v.push_front(2); // 2, 1
v.insert(4, 0); // 4, 2, 1
v.insert(3, 1); // 4, 3, 2, 1
v.insert(0, 4); // 4, 3, 2, 1, 0
UASSERTEQ(v.size(), 5);
UASSERTEQ(v[0], 4);
UASSERTEQ(v[1], 3);
UASSERTEQ(v[2], 2);
UASSERTEQ(v[3], 1);
UASSERTEQ(v[4], 0);
array<int> w = v;
UASSERTEQ(w.size(), 5);
UASSERT(w == v);
w.clear();
UASSERTEQ(w.size(), 0);
UASSERTEQ(w.allocated_size(), 0);
UASSERT(w.empty());
w = v;
UASSERTEQ(w.size(), 5);
w.set_used(3);
UASSERTEQ(w.size(), 3);
UASSERTEQ(w[0], 4);
UASSERTEQ(w[1], 3);
UASSERTEQ(w[2], 2);
UASSERTEQ(w.getLast(), 2);
w.set_used(20);
UASSERTEQ(w.size(), 20);
w = v;
w.sort();
UASSERTEQ(w.size(), 5);
UASSERTEQ(w[0], 0);
UASSERTEQ(w[1], 1);
UASSERTEQ(w[2], 2);
UASSERTEQ(w[3], 3);
UASSERTEQ(w[4], 4);
w.erase(0);
UASSERTEQ(w.size(), 4);
UASSERTEQ(w[0], 1);
UASSERTEQ(w[1], 2);
UASSERTEQ(w[2], 3);
UASSERTEQ(w[3], 4);
w.erase(1, 2);
UASSERTEQ(w.size(), 2);
UASSERTEQ(w[0], 1);
UASSERTEQ(w[1], 4);
w.swap(v);
UASSERTEQ(w.size(), 5);
UASSERTEQ(v.size(), 2);
}
static void test_linear_searches() {
// Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0
array<int> arr;
for (int i = 0; i <= 100; i++)
arr.push_back(i);
for (int i = 100; i >= 0; i--)
arr.push_back(i);
s32 end = arr.size() - 1;
for (int i = 0; i <= 100; i++) {
s32 index = arr.linear_reverse_search(i);
UASSERTEQ(index, end - i);
}
for (int i = 0; i <= 100; i++) {
s32 index = arr.linear_search(i);
UASSERTEQ(index, i);
}
}
static void test_binary_searches() {
const auto& values = { 3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15 };
array<int> arr;
for (int value : values) {
arr.push_back(value);
}
// Test the const form first, it uses a linear search without sorting
const array<int> & carr = arr;
UASSERTEQ(carr.binary_search(20), -1);
UASSERTEQ(carr.binary_search(0), -1);
UASSERTEQ(carr.binary_search(1), 2);
// Sorted: 1, 1, 2, 2, 3, 5, 5, 5, 7, 8, 9, 10, 15, 19
UASSERTEQ(arr.binary_search(20), -1);
UASSERTEQ(arr.binary_search(0), -1);
for (int value : values) {
s32 i = arr.binary_search(value);
UASSERTNE(i, -1);
UASSERTEQ(arr[i], value);
}
s32 first, last;
first = arr.binary_search_multi(1, last);
UASSERTEQ(first, 0);
UASSERTEQ(last, 1);
first = arr.binary_search_multi(2, last);
UASSERTEQ(first, 2);
UASSERTEQ(last, 3);
first = arr.binary_search_multi(3, last);
UASSERTEQ(first, 4);
UASSERTEQ(last, 4);
first = arr.binary_search_multi(4, last);
UASSERTEQ(first, -1);
first = arr.binary_search_multi(5, last);
UASSERTEQ(first, 5);
UASSERTEQ(last, 7);
first = arr.binary_search_multi(7, last);
UASSERTEQ(first, 8);
UASSERTEQ(last, 8);
first = arr.binary_search_multi(19, last);
UASSERTEQ(first, 13);
UASSERTEQ(last, 13);
}
void test_irr_array()
{
test_basics();
test_linear_searches();
test_binary_searches();
std::cout << " test_irr_array PASSED" << std::endl;
}

View File

@ -0,0 +1,30 @@
#pragma once
#include <exception>
#include <iostream>
class TestFailedException : public std::exception {
};
// Asserts the comparison specified by CMP is true, or fails the current unit test
#define UASSERTCMP(CMP, actual, expected) do { \
const auto &a = (actual); \
const auto &e = (expected); \
if (!CMP(a, e)) { \
std::cout \
<< "Test assertion failed: " << #actual << " " << #CMP << " " \
<< #expected << std::endl \
<< " at " << __FILE__ << ":" << __LINE__ << std::endl \
<< " actual: " << a << std::endl << " expected: " \
<< e << std::endl; \
throw TestFailedException(); \
} \
} while (0)
#define CMPEQ(a, e) (a == e)
#define CMPTRUE(a, e) (a)
#define CMPNE(a, e) (a != e)
#define UASSERTEQ(actual, expected) UASSERTCMP(CMPEQ, actual, expected)
#define UASSERTNE(actual, nexpected) UASSERTCMP(CMPNE, actual, nexpected)
#define UASSERT(actual) UASSERTCMP(CMPTRUE, actual, true)

View File

@ -1,3 +1,5 @@
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(IRREXAMPLES
# removed

View File

@ -1,133 +0,0 @@
// Copyright (C) 2008-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
#define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__
#include "IDynamicMeshBuffer.h"
#include "CVertexBuffer.h"
#include "CIndexBuffer.h"
namespace irr
{
namespace scene
{
class CDynamicMeshBuffer: public IDynamicMeshBuffer
{
public:
//! constructor
CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType)
: PrimitiveType(EPT_TRIANGLES)
{
VertexBuffer=new CVertexBuffer(vertexType);
IndexBuffer=new CIndexBuffer(indexType);
}
//! destructor
virtual ~CDynamicMeshBuffer()
{
if (VertexBuffer)
VertexBuffer->drop();
if (IndexBuffer)
IndexBuffer->drop();
}
virtual IVertexBuffer& getVertexBuffer() const _IRR_OVERRIDE_
{
return *VertexBuffer;
}
virtual IIndexBuffer& getIndexBuffer() const _IRR_OVERRIDE_
{
return *IndexBuffer;
}
virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer) _IRR_OVERRIDE_
{
if (newVertexBuffer)
newVertexBuffer->grab();
if (VertexBuffer)
VertexBuffer->drop();
VertexBuffer=newVertexBuffer;
}
virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer) _IRR_OVERRIDE_
{
if (newIndexBuffer)
newIndexBuffer->grab();
if (IndexBuffer)
IndexBuffer->drop();
IndexBuffer=newIndexBuffer;
}
//! Get Material of this buffer.
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
{
return Material;
}
//! Get Material of this buffer.
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
{
return Material;
}
//! Get bounding box
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
{
return BoundingBox;
}
//! Set bounding box
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
{
BoundingBox = box;
}
//! Recalculate bounding box
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
{
if (!getVertexBuffer().size())
BoundingBox.reset(0,0,0);
else
{
BoundingBox.reset(getVertexBuffer()[0].Pos);
for (u32 i=1; i<getVertexBuffer().size(); ++i)
BoundingBox.addInternalPoint(getVertexBuffer()[i].Pos);
}
}
//! Describe what kind of primitive geometry is used by the meshbuffer
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
{
PrimitiveType = type;
}
//! Get the kind of primitive geometry which is used by the meshbuffer
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
{
return PrimitiveType;
}
video::SMaterial Material;
core::aabbox3d<f32> BoundingBox;
//! Primitive type used for rendering (triangles, lines, ...)
E_PRIMITIVE_TYPE PrimitiveType;
private:
CDynamicMeshBuffer(const CDynamicMeshBuffer&); // = delete in c++11, prevent copying
IVertexBuffer *VertexBuffer;
IIndexBuffer *IndexBuffer;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -21,6 +21,7 @@ namespace scene
CMeshBuffer()
: ChangedID_Vertex(1), ChangedID_Index(1)
, MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER)
, HWBuffer(NULL)
, PrimitiveType(EPT_TRIANGLES)
{
#ifdef _DEBUG
@ -193,8 +194,8 @@ namespace scene
Vertices.reallocate(vertexCount+numVertices);
for (i=0; i<numVertices; ++i)
{
Vertices.push_back(reinterpret_cast<const T*>(vertices)[i]);
BoundingBox.addInternalPoint(reinterpret_cast<const T*>(vertices)[i].Pos);
Vertices.push_back(static_cast<const T*>(vertices)[i]);
BoundingBox.addInternalPoint(static_cast<const T*>(vertices)[i].Pos);
}
Indices.reallocate(getIndexCount()+numIndices);
@ -286,12 +287,22 @@ namespace scene
/** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ {
HWBuffer = ptr;
}
virtual void *getHWBuffer() const _IRR_OVERRIDE_ {
return HWBuffer;
}
u32 ChangedID_Vertex;
u32 ChangedID_Index;
//! hardware mapping hint
E_HARDWARE_MAPPING MappingHint_Vertex;
E_HARDWARE_MAPPING MappingHint_Index;
mutable void *HWBuffer;
//! Material for this meshbuffer.
video::SMaterial Material;

View File

@ -121,71 +121,6 @@ namespace video
texture which will not reflect can be set as second texture.*/
EMT_TRANSPARENT_REFLECTION_2_LAYER,
//! A solid normal map renderer.
/** First texture is the color map, the second should be the
normal map. Note that you should use this material only when
drawing geometry consisting of vertices of type
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
this format using IMeshManipulator::createMeshWithTangents()
(See SpecialFX2 Tutorial). This shader runs on vertex shader
1.1 and pixel shader 1.1 capable hardware and falls back to a
fixed function lighted material if this hardware is not
available. Only two lights are supported by this shader, if
there are more, the nearest two are chosen. */
EMT_NORMAL_MAP_SOLID,
//! A transparent normal map renderer.
/** First texture is the color map, the second should be the
normal map. Note that you should use this material only when
drawing geometry consisting of vertices of type
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
this format using IMeshManipulator::createMeshWithTangents()
(See SpecialFX2 Tutorial). This shader runs on vertex shader
1.1 and pixel shader 1.1 capable hardware and falls back to a
fixed function lighted material if this hardware is not
available. Only two lights are supported by this shader, if
there are more, the nearest two are chosen. */
EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR,
//! A transparent (based on the vertex alpha value) normal map renderer.
/** First texture is the color map, the second should be the
normal map. Note that you should use this material only when
drawing geometry consisting of vertices of type
S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into
this format using IMeshManipulator::createMeshWithTangents()
(See SpecialFX2 Tutorial). This shader runs on vertex shader
1.1 and pixel shader 1.1 capable hardware and falls back to a
fixed function lighted material if this hardware is not
available. Only two lights are supported by this shader, if
there are more, the nearest two are chosen. */
EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA,
//! Just like EMT_NORMAL_MAP_SOLID, but uses parallax mapping.
/** Looks a lot more realistic. This only works when the
hardware supports at least vertex shader 1.1 and pixel shader
1.4. First texture is the color map, the second should be the
normal map. The normal map texture should contain the height
value in the alpha component. The
IVideoDriver::makeNormalMapTexture() method writes this value
automatically when creating normal maps from a heightmap when
using a 32 bit texture. The height scale of the material
(affecting the bumpiness) is being controlled by the
SMaterial::MaterialTypeParam member. If set to zero, the
default value (0.02f) will be applied. Otherwise the value set
in SMaterial::MaterialTypeParam is taken. This value depends on
with which scale the texture is mapped on the material. Too
high or low values of MaterialTypeParam can result in strange
artifacts. */
EMT_PARALLAX_MAP_SOLID,
//! A material like EMT_PARALLAX_MAP_SOLID, but transparent.
/** Using EMT_TRANSPARENT_ADD_COLOR as base material. */
EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR,
//! A material like EMT_PARALLAX_MAP_SOLID, but transparent.
/** Using EMT_TRANSPARENT_VERTEX_ALPHA as base material. */
EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA,
//! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC )
/** Using only first texture. Generic blending method.
The blend function is set to SMaterial::MaterialTypeParam with
@ -216,12 +151,6 @@ namespace video
"trans_alphach_ref",
"trans_vertex_alpha",
"trans_reflection_2layer",
"normalmap_solid",
"normalmap_trans_add",
"normalmap_trans_vertexalpha",
"parallaxmap_solid",
"parallaxmap_trans_add",
"parallaxmap_trans_vertexalpha",
"onetexture_blend",
0
};

View File

@ -1,36 +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_TERRAIN_ELEMENTS_H__
#define __E_TERRAIN_ELEMENTS_H__
namespace irr
{
namespace scene
{
//! enumeration for patch sizes specifying the size of patches in the TerrainSceneNode
enum E_TERRAIN_PATCH_SIZE
{
//! patch size of 9, at most, use 4 levels of detail with this patch size.
ETPS_9 = 9,
//! patch size of 17, at most, use 5 levels of detail with this patch size.
ETPS_17 = 17,
//! patch size of 33, at most, use 6 levels of detail with this patch size.
ETPS_33 = 33,
//! patch size of 65, at most, use 7 levels of detail with this patch size.
ETPS_65 = 65,
//! patch size of 129, at most, use 8 levels of detail with this patch size.
ETPS_129 = 129
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -1,71 +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 __I_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__
#define __I_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__
#include "IReferenceCounted.h"
namespace irr
{
namespace io
{
class IAttributes;
//! Enumeration flags passed through SAttributeReadWriteOptions to the IAttributeExchangingObject object
enum E_ATTRIBUTE_READ_WRITE_FLAGS
{
//! Serialization/Deserializion is done for an xml file
EARWF_FOR_FILE = 0x00000001,
//! Serialization/Deserializion is done for an editor property box
EARWF_FOR_EDITOR = 0x00000002,
//! When writing filenames, relative paths should be used
EARWF_USE_RELATIVE_PATHS = 0x00000004
};
//! struct holding data describing options
struct SAttributeReadWriteOptions
{
//! Constructor
SAttributeReadWriteOptions()
: Flags(0), Filename(0)
{
}
//! Combination of E_ATTRIBUTE_READ_WRITE_FLAGS or other, custom ones
s32 Flags;
//! Optional filename
const fschar_t* Filename;
};
//! An object which is able to serialize and deserialize its attributes into an attributes object
class IAttributeExchangingObject : virtual public IReferenceCounted
{
public:
//! Writes attributes of the object.
/** Implement this to expose the attributes of your scene node animator for
scripting languages, editors, debuggers or xml serialization purposes. */
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const {}
//! Reads attributes of the object.
/** Implement this to set the attributes of your scene node animator for
scripting languages, editors, debuggers or xml deserialization purposes. */
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) {}
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -125,133 +125,9 @@ public:
//! Sets an attribute as float value
virtual void setAttribute(s32 index, f32 value) = 0;
/*
String Attribute
*/
//! Adds an attribute as string
virtual void addString(const c8* attributeName, const c8* value) = 0;
//! Sets an attribute value as string.
//! \param attributeName: Name for the attribute
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
virtual void setAttribute(const c8* attributeName, const c8* value) = 0;
//! Gets an attribute as string.
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
//! or defaultNotFound if attribute is not set.
virtual core::stringc getAttributeAsString(const c8* attributeName, const core::stringc& defaultNotFound=core::stringc()) const = 0;
//! Gets an attribute as string.
//! \param attributeName Name of the attribute to get.
//! \param target Buffer where the string is copied to.
virtual void getAttributeAsString(const c8* attributeName, c8* target) const = 0;
//! Returns attribute value as string by index.
//! \param index Index value, must be between 0 and getAttributeCount()-1.
virtual core::stringc getAttributeAsString(s32 index) const = 0;
//! Sets an attribute value as string.
//! \param index Index value, must be between 0 and getAttributeCount()-1.
//! \param value String to which the attribute is set.
virtual void setAttribute(s32 index, const c8* value) = 0;
// wide strings
//! Adds an attribute as string
virtual void addString(const c8* attributeName, const wchar_t* value) = 0;
//! Sets an attribute value as string.
//! \param attributeName: Name for the attribute
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
virtual void setAttribute(const c8* attributeName, const wchar_t* value) = 0;
//! Gets an attribute as string.
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
//! or defaultNotFound if attribute is not set.
virtual core::stringw getAttributeAsStringW(const c8* attributeName, const core::stringw& defaultNotFound = core::stringw()) const = 0;
//! Gets an attribute as string.
//! \param attributeName: Name of the attribute to get.
//! \param target: Buffer where the string is copied to.
virtual void getAttributeAsStringW(const c8* attributeName, wchar_t* target) const = 0;
//! Returns attribute value as string by index.
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::stringw getAttributeAsStringW(s32 index) const = 0;
//! Sets an attribute value as string.
//! \param index Index value, must be between 0 and getAttributeCount()-1.
//! \param value String to which the attribute is set.
virtual void setAttribute(s32 index, const wchar_t* value) = 0;
/*
Binary Data Attribute
*/
//! Adds an attribute as binary data
virtual void addBinary(const c8* attributeName, void* data, s32 dataSizeInBytes) = 0;
//! Sets an attribute as binary data
virtual void setAttribute(const c8* attributeName, void* data, s32 dataSizeInBytes ) = 0;
//! Gets an attribute as binary data
/** \param attributeName: Name of the attribute to get.
\param outData Pointer to buffer where data shall be stored.
\param maxSizeInBytes Maximum number of bytes to write into outData.
*/
virtual void getAttributeAsBinaryData(const c8* attributeName, void* outData, s32 maxSizeInBytes) const = 0;
//! Gets an attribute as binary data
/** \param index: Index value, must be between 0 and getAttributeCount()-1.
\param outData Pointer to buffer where data shall be stored.
\param maxSizeInBytes Maximum number of bytes to write into outData.
*/
virtual void getAttributeAsBinaryData(s32 index, void* outData, s32 maxSizeInBytes) const = 0;
//! Sets an attribute as binary data
virtual void setAttribute(s32 index, void* data, s32 dataSizeInBytes ) = 0;
/*
Array Attribute
*/
//! Adds an attribute as wide string array
virtual void addArray(const c8* attributeName, const core::array<core::stringw>& value) = 0;
//! Sets an attribute value as a wide string array.
//! \param attributeName: Name for the attribute
//! \param value: Value for the attribute. Set this to 0 to delete the attribute
virtual void setAttribute(const c8* attributeName, const core::array<core::stringw>& value) = 0;
//! Gets an attribute as an array of wide strings.
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
//! or defaultNotFound if attribute is not set.
virtual core::array<core::stringw> getAttributeAsArray(const c8* attributeName, const core::array<core::stringw>& defaultNotFound = core::array<core::stringw>()) const = 0;
//! Returns attribute value as an array of wide strings by index.
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::array<core::stringw> getAttributeAsArray(s32 index) const = 0;
//! Sets an attribute as an array of wide strings
virtual void setAttribute(s32 index, const core::array<core::stringw>& value) = 0;
/*
Bool Attribute
*/
//! Adds an attribute as bool
@ -273,476 +149,9 @@ public:
//! Sets an attribute as boolean value
virtual void setAttribute(s32 index, bool value) = 0;
/*
Enumeration Attribute
*/
//! Adds an attribute as enum
virtual void addEnum(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
//! Adds an attribute as enum
virtual void addEnum(const c8* attributeName, s32 enumValue, const c8* const* enumerationLiterals) = 0;
//! Sets an attribute as enumeration
virtual void setAttribute(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
//! Gets an attribute as enumeration
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual const c8* getAttributeAsEnumeration(const c8* attributeName, const c8* defaultNotFound = 0) const = 0;
//! Gets an attribute as enumeration
/** \param attributeName: Name of the attribute to get.
\param enumerationLiteralsToUse: Use these enumeration literals to get
the index value instead of the set ones. This is useful when the
attribute list maybe was read from an xml file, and only contains the
enumeration string, but no information about its index.
\return Returns value of the attribute previously set by setAttribute()
*/
virtual s32 getAttributeAsEnumeration(const c8* attributeName, const c8* const* enumerationLiteralsToUse, s32 defaultNotFound = -1) const = 0;
//! Gets an attribute as enumeration
/** \param index: Index value, must be between 0 and getAttributeCount()-1.
\param enumerationLiteralsToUse: Use these enumeration literals to get
the index value instead of the set ones. This is useful when the
attribute list maybe was read from an xml file, and only contains the
enumeration string, but no information about its index.
\param defaultNotFound Value returned when the attribute referenced by the index was not found.
\return Returns value of the attribute previously set by setAttribute()
*/
virtual s32 getAttributeAsEnumeration(s32 index, const c8* const* enumerationLiteralsToUse, s32 defaultNotFound = -1) const = 0;
//! Gets an attribute as enumeration
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual const c8* getAttributeAsEnumeration(s32 index) const = 0;
//! Gets the list of enumeration literals of an enumeration attribute
//! \param attributeName Name of the attribute to get.
//! \param outLiterals Set of strings to choose the enum name from.
virtual void getAttributeEnumerationLiteralsOfEnumeration(const c8* attributeName, core::array<core::stringc>& outLiterals) const = 0;
//! Gets the list of enumeration literals of an enumeration attribute
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
//! \param outLiterals Set of strings to choose the enum name from.
virtual void getAttributeEnumerationLiteralsOfEnumeration(s32 index, core::array<core::stringc>& outLiterals) const = 0;
//! Sets an attribute as enumeration
virtual void setAttribute(s32 index, const c8* enumValue, const c8* const* enumerationLiterals) = 0;
/*
SColor Attribute
*/
//! Adds an attribute as color
virtual void addColor(const c8* attributeName, video::SColor value) = 0;
//! Sets a attribute as color
virtual void setAttribute(const c8* attributeName, video::SColor color) = 0;
//! Gets an attribute as color
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual video::SColor getAttributeAsColor(const c8* attributeName, const video::SColor& defaultNotFound = video::SColor(0)) const = 0;
//! Gets an attribute as color
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual video::SColor getAttributeAsColor(s32 index) const = 0;
//! Sets an attribute as color
virtual void setAttribute(s32 index, video::SColor color) = 0;
/*
SColorf Attribute
*/
//! Adds an attribute as floating point color
virtual void addColorf(const c8* attributeName, video::SColorf value) = 0;
//! Sets a attribute as floating point color
virtual void setAttribute(const c8* attributeName, video::SColorf color) = 0;
//! Gets an attribute as floating point color
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual video::SColorf getAttributeAsColorf(const c8* attributeName, const video::SColorf& defaultNotFound = video::SColorf(0)) const = 0;
//! Gets an attribute as floating point color
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual video::SColorf getAttributeAsColorf(s32 index) const = 0;
//! Sets an attribute as floating point color
virtual void setAttribute(s32 index, video::SColorf color) = 0;
/*
Vector3d Attribute
*/
//! Adds an attribute as 3d vector
virtual void addVector3d(const c8* attributeName, const core::vector3df& value) = 0;
//! Sets a attribute as 3d vector
virtual void setAttribute(const c8* attributeName, const core::vector3df& v) = 0;
//! Gets an attribute as 3d vector
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::vector3df getAttributeAsVector3d(const c8* attributeName, const core::vector3df& defaultNotFound=core::vector3df(0,0,0)) const = 0;
//! Gets an attribute as 3d vector
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::vector3df getAttributeAsVector3d(s32 index) const = 0;
//! Sets an attribute as vector
virtual void setAttribute(s32 index, const core::vector3df& v) = 0;
/*
Vector2d Attribute
*/
//! Adds an attribute as 2d vector
virtual void addVector2d(const c8* attributeName, const core::vector2df& value) = 0;
//! Sets a attribute as 2d vector
virtual void setAttribute(const c8* attributeName, const core::vector2df& v) = 0;
//! Gets an attribute as vector
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::vector2df getAttributeAsVector2d(const c8* attributeName, const core::vector2df& defaultNotFound=core::vector2df(0,0)) const = 0;
//! Gets an attribute as position
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::vector2df getAttributeAsVector2d(s32 index) const = 0;
//! Sets an attribute as 2d vector
virtual void setAttribute(s32 index, const core::vector2df& v) = 0;
/*
Position2d Attribute
*/
//! Adds an attribute as 2d position
virtual void addPosition2d(const c8* attributeName, const core::position2di& value) = 0;
//! Sets a attribute as 2d position
virtual void setAttribute(const c8* attributeName, const core::position2di& v) = 0;
//! Gets an attribute as position
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::position2di getAttributeAsPosition2d(const c8* attributeName, const core::position2di& defaultNotFound=core::position2di(0,0)) const = 0;
//! Gets an attribute as position
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::position2di getAttributeAsPosition2d(s32 index) const = 0;
//! Sets an attribute as 2d position
virtual void setAttribute(s32 index, const core::position2di& v) = 0;
/*
Rectangle Attribute
*/
//! Adds an attribute as rectangle
virtual void addRect(const c8* attributeName, const core::rect<s32>& value) = 0;
//! Sets an attribute as rectangle
virtual void setAttribute(const c8* attributeName, const core::rect<s32>& v) = 0;
//! Gets an attribute as rectangle
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::rect<s32> getAttributeAsRect(const c8* attributeName, const core::rect<s32>& defaultNotFound = core::rect<s32>()) const = 0;
//! Gets an attribute as rectangle
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::rect<s32> getAttributeAsRect(s32 index) const = 0;
//! Sets an attribute as rectangle
virtual void setAttribute(s32 index, const core::rect<s32>& v) = 0;
/*
Dimension2d Attribute
*/
//! Adds an attribute as dimension2d
virtual void addDimension2d(const c8* attributeName, const core::dimension2d<u32>& value) = 0;
//! Sets an attribute as dimension2d
virtual void setAttribute(const c8* attributeName, const core::dimension2d<u32>& v) = 0;
//! Gets an attribute as dimension2d
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::dimension2d<u32> getAttributeAsDimension2d(const c8* attributeName, const core::dimension2d<u32>& defaultNotFound = core::dimension2d<u32>()) const = 0;
//! Gets an attribute as dimension2d
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::dimension2d<u32> getAttributeAsDimension2d(s32 index) const = 0;
//! Sets an attribute as dimension2d
virtual void setAttribute(s32 index, const core::dimension2d<u32>& v) = 0;
/*
matrix attribute
*/
//! Adds an attribute as matrix
virtual void addMatrix(const c8* attributeName, const core::matrix4& v) = 0;
//! Sets an attribute as matrix
virtual void setAttribute(const c8* attributeName, const core::matrix4& v) = 0;
//! Gets an attribute as a matrix4
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::matrix4 getAttributeAsMatrix(const c8* attributeName, const core::matrix4& defaultNotFound=core::matrix4()) const = 0;
//! Gets an attribute as matrix
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::matrix4 getAttributeAsMatrix(s32 index) const = 0;
//! Sets an attribute as matrix
virtual void setAttribute(s32 index, const core::matrix4& v) = 0;
/*
quaternion attribute
*/
//! Adds an attribute as quaternion
virtual void addQuaternion(const c8* attributeName, const core::quaternion& v) = 0;
//! Sets an attribute as quaternion
virtual void setAttribute(const c8* attributeName, const core::quaternion& v) = 0;
//! Gets an attribute as a quaternion
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::quaternion getAttributeAsQuaternion(const c8* attributeName, const core::quaternion& defaultNotFound=core::quaternion(0,1,0, 0)) const = 0;
//! Gets an attribute as quaternion
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::quaternion getAttributeAsQuaternion(s32 index) const = 0;
//! Sets an attribute as quaternion
virtual void setAttribute(s32 index, const core::quaternion& v) = 0;
/*
3d bounding box
*/
//! Adds an attribute as axis aligned bounding box
virtual void addBox3d(const c8* attributeName, const core::aabbox3df& v) = 0;
//! Sets an attribute as axis aligned bounding box
virtual void setAttribute(const c8* attributeName, const core::aabbox3df& v) = 0;
//! Gets an attribute as a axis aligned bounding box
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::aabbox3df getAttributeAsBox3d(const c8* attributeName, const core::aabbox3df& defaultNotFound=core::aabbox3df(0,0,0, 0,0,0)) const = 0;
//! Gets an attribute as axis aligned bounding box
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::aabbox3df getAttributeAsBox3d(s32 index) const = 0;
//! Sets an attribute as axis aligned bounding box
virtual void setAttribute(s32 index, const core::aabbox3df& v) = 0;
/*
plane
*/
//! Adds an attribute as 3d plane
virtual void addPlane3d(const c8* attributeName, const core::plane3df& v) = 0;
//! Sets an attribute as 3d plane
virtual void setAttribute(const c8* attributeName, const core::plane3df& v) = 0;
//! Gets an attribute as a 3d plane
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::plane3df getAttributeAsPlane3d(const c8* attributeName, const core::plane3df& defaultNotFound=core::plane3df(0,0,0, 0,1,0)) const = 0;
//! Gets an attribute as 3d plane
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::plane3df getAttributeAsPlane3d(s32 index) const = 0;
//! Sets an attribute as 3d plane
virtual void setAttribute(s32 index, const core::plane3df& v) = 0;
/*
3d triangle
*/
//! Adds an attribute as 3d triangle
virtual void addTriangle3d(const c8* attributeName, const core::triangle3df& v) = 0;
//! Sets an attribute as 3d trianle
virtual void setAttribute(const c8* attributeName, const core::triangle3df& v) = 0;
//! Gets an attribute as a 3d triangle
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::triangle3df getAttributeAsTriangle3d(const c8* attributeName, const core::triangle3df& defaultNotFound = core::triangle3df(core::vector3df(0,0,0), core::vector3df(0,0,0), core::vector3df(0,0,0))) const = 0;
//! Gets an attribute as 3d triangle
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::triangle3df getAttributeAsTriangle3d(s32 index) const = 0;
//! Sets an attribute as 3d triangle
virtual void setAttribute(s32 index, const core::triangle3df& v) = 0;
/*
line 2d
*/
//! Adds an attribute as a 2d line
virtual void addLine2d(const c8* attributeName, const core::line2df& v) = 0;
//! Sets an attribute as a 2d line
virtual void setAttribute(const c8* attributeName, const core::line2df& v) = 0;
//! Gets an attribute as a 2d line
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::line2df getAttributeAsLine2d(const c8* attributeName, const core::line2df& defaultNotFound = core::line2df(0,0, 0,0)) const = 0;
//! Gets an attribute as a 2d line
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::line2df getAttributeAsLine2d(s32 index) const = 0;
//! Sets an attribute as a 2d line
virtual void setAttribute(s32 index, const core::line2df& v) = 0;
/*
line 3d
*/
//! Adds an attribute as a 3d line
virtual void addLine3d(const c8* attributeName, const core::line3df& v) = 0;
//! Sets an attribute as a 3d line
virtual void setAttribute(const c8* attributeName, const core::line3df& v) = 0;
//! Gets an attribute as a 3d line
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
//! \return Returns value of the attribute previously set by setAttribute()
virtual core::line3df getAttributeAsLine3d(const c8* attributeName, const core::line3df& defaultNotFound=core::line3df(0,0,0, 0,0,0)) const = 0;
//! Gets an attribute as a 3d line
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual core::line3df getAttributeAsLine3d(s32 index) const = 0;
//! Sets an attribute as a 3d line
virtual void setAttribute(s32 index, const core::line3df& v) = 0;
/*
Texture Attribute
*/
//! Adds an attribute as texture reference
virtual void addTexture(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0;
//! Sets an attribute as texture reference
virtual void setAttribute(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0;
//! Gets an attribute as texture reference
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
virtual video::ITexture* getAttributeAsTexture(const c8* attributeName, video::ITexture* defaultNotFound=0) const = 0;
//! Gets an attribute as texture reference
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual video::ITexture* getAttributeAsTexture(s32 index) const = 0;
//! Sets an attribute as texture reference
virtual void setAttribute(s32 index, video::ITexture* texture, const io::path& filename = "") = 0;
/*
User Pointer Attribute
*/
//! Adds an attribute as user pointer
virtual void addUserPointer(const c8* attributeName, void* userPointer) = 0;
//! Sets an attribute as user pointer
virtual void setAttribute(const c8* attributeName, void* userPointer) = 0;
//! Gets an attribute as user pointer
//! \param attributeName: Name of the attribute to get.
//! \param defaultNotFound Value returned when attributeName was not found
virtual void* getAttributeAsUserPointer(const c8* attributeName, void* defaultNotFound = 0) const = 0;
//! Gets an attribute as user pointer
//! \param index: Index value, must be between 0 and getAttributeCount()-1.
virtual void* getAttributeAsUserPointer(s32 index) const = 0;
//! Sets an attribute as user pointer
virtual void setAttribute(s32 index, void* userPointer) = 0;
};
} // end namespace io
} // end namespace irr
#endif

View File

@ -12,6 +12,7 @@ namespace irr
namespace scene
{
class ICameraSceneNode;
class IMeshBuffer;
//! A billboard scene node.
/** A billboard is like a 3d sprite: A 2d element,
@ -74,6 +75,17 @@ public:
That is why the usual getBoundingBox will return a "safe" boundingbox which is guaranteed
to contain the billboard. While this function can return the real one. */
virtual const core::aabbox3d<f32>& getTransformedBillboardBoundingBox(const irr::scene::ICameraSceneNode* camera) = 0;
//! Get the amount of mesh buffers.
/** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */
virtual u32 getMeshBufferCount() const = 0;
//! Get pointer to a mesh buffer.
/** NOTE: Positions and normals of this meshbuffers are re-calculated before rendering.
So this is mainly useful to access/modify the uv-coordinates.
\param nr: Zero based index of the mesh buffer.
\return Pointer to the mesh buffer or 0 if there is no such mesh buffer. */
virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0;
};
} // end namespace scene

View File

@ -172,27 +172,6 @@ namespace scene
/** @see bindTargetAndRotation() */
virtual bool getTargetAndRotationBinding(void) const =0;
//! Writes attributes of the camera node
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_
{
ISceneNode::serializeAttributes(out, options);
if (!out)
return;
out->addBool("IsOrthogonal", IsOrthogonal);
}
//! Reads attributes of the camera node
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_
{
ISceneNode::deserializeAttributes(in, options);
if (!in)
return;
if ( in->findAttribute("IsOrthogonal") )
IsOrthogonal = in->getAttributeAsBool("IsOrthogonal");
}
protected:
void cloneMembers(const ICameraSceneNode* toCopyFrom)

View File

@ -1,211 +0,0 @@
// Copyright (C) 2008-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
#define __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__
#include "IMeshBuffer.h"
#include "IVertexBuffer.h"
#include "IIndexBuffer.h"
namespace irr
{
namespace scene
{
/** a dynamic meshBuffer */
class IDynamicMeshBuffer : public IMeshBuffer
{
public:
virtual IVertexBuffer &getVertexBuffer() const =0;
virtual IIndexBuffer &getIndexBuffer() const =0;
virtual void setVertexBuffer(IVertexBuffer *vertexBuffer) =0;
virtual void setIndexBuffer(IIndexBuffer *indexBuffer) =0;
//! Get the material of this meshbuffer
/** \return Material of this buffer. */
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_ =0;
//! Get the material of this meshbuffer
/** \return Material of this buffer. */
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_ =0;
//! Get the axis aligned bounding box of this meshbuffer.
/** \return Axis aligned bounding box of this buffer. */
virtual const core::aabbox3df& getBoundingBox() const _IRR_OVERRIDE_ =0;
//! Set axis aligned bounding box
/** \param box User defined axis aligned bounding box to use
for this buffer. */
virtual void setBoundingBox(const core::aabbox3df& box) _IRR_OVERRIDE_ =0;
//! Recalculates the bounding box. Should be called if the mesh changed.
virtual void recalculateBoundingBox() _IRR_OVERRIDE_ =0;
//! Append the vertices and indices to the current buffer
/** Only works for compatible vertex types.
\param vertices Pointer to a vertex array.
\param numVertices Number of vertices in the array.
\param indices Pointer to index array.
\param numIndices Number of indices in array. */
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_
{
}
//! Append the meshbuffer to the current buffer
/** Only works for compatible vertex types
\param other Buffer to append to this one. */
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_
{
}
// ------------------- To be removed? ------------------- //
//! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
{
return getVertexBuffer().getHardwareMappingHint();
}
//! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
{
return getIndexBuffer().getHardwareMappingHint();
}
//! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
{
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
getVertexBuffer().setHardwareMappingHint(NewMappingHint);
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
getIndexBuffer().setHardwareMappingHint(NewMappingHint);
}
//! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
{
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX)
getVertexBuffer().setDirty();
if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
getIndexBuffer().setDirty();
}
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_
{
return getVertexBuffer().getChangedID();
}
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_
{
return getIndexBuffer().getChangedID();
}
// ------------------- Old interface ------------------- //
//! Get type of vertex data which is stored in this meshbuffer.
/** \return Vertex type of this buffer. */
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
{
return getVertexBuffer().getType();
}
//! Get access to vertex data. The data is an array of vertices.
/** Which vertex type is used can be determined by getVertexType().
\return Pointer to array of vertices. */
virtual const void* getVertices() const _IRR_OVERRIDE_
{
return getVertexBuffer().getData();
}
//! Get access to vertex data. The data is an array of vertices.
/** Which vertex type is used can be determined by getVertexType().
\return Pointer to array of vertices. */
virtual void* getVertices() _IRR_OVERRIDE_
{
return getVertexBuffer().getData();
}
//! Get amount of vertices in meshbuffer.
/** \return Number of vertices in this buffer. */
virtual u32 getVertexCount() const _IRR_OVERRIDE_
{
return getVertexBuffer().size();
}
//! Get type of index data which is stored in this meshbuffer.
/** \return Index type of this buffer. */
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
{
return getIndexBuffer().getType();
}
//! Get access to indices.
/** \return Pointer to indices array. */
virtual const u16* getIndices() const _IRR_OVERRIDE_
{
return (u16*)getIndexBuffer().getData();
}
//! Get access to indices.
/** \return Pointer to indices array. */
virtual u16* getIndices() _IRR_OVERRIDE_
{
return (u16*)getIndexBuffer().getData();
}
//! Get amount of indices in this meshbuffer.
/** \return Number of indices in this buffer. */
virtual u32 getIndexCount() const _IRR_OVERRIDE_
{
return getIndexBuffer().size();
}
//! returns position of vertex i
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
{
return getVertexBuffer()[i].Pos;
}
//! returns position of vertex i
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
{
return getVertexBuffer()[i].Pos;
}
//! returns texture coords of vertex i
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
{
return getVertexBuffer()[i].TCoords;
}
//! returns texture coords of vertex i
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
{
return getVertexBuffer()[i].TCoords;
}
//! returns normal of vertex i
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
{
return getVertexBuffer()[i].Normal;
}
//! returns normal of vertex i
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
{
return getVertexBuffer()[i].Normal;
}
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -315,14 +315,6 @@ public:
/** \param filename is the string identifying the file which should be tested for existence.
\return True if file exists, and false if it does not exist or an error occurred. */
virtual bool existFile(const path& filename) const =0;
//! Creates a new empty collection of attributes, usable for serialization and more.
/** \param driver: Video driver to be used to load textures when specified as attribute values.
Can be null to prevent automatic texture loading by attributes.
\return Pointer to the created object.
If you no longer need the object, you should call IAttributes::drop().
See IReferenceCounted::drop() for more information. */
virtual IAttributes* createEmptyAttributes(video::IVideoDriver* driver=0) =0;
};

View File

@ -5,8 +5,7 @@
#ifndef __I_GUI_ELEMENT_H_INCLUDED__
#define __I_GUI_ELEMENT_H_INCLUDED__
#include "IAttributeExchangingObject.h"
#include "irrList.h"
#include "IReferenceCounted.h"
#include "rect.h"
#include "irrString.h"
#include "IEventReceiver.h"
@ -14,13 +13,17 @@
#include "EGUIAlignment.h"
#include "IAttributes.h"
#include "IGUIEnvironment.h"
#include <cassert>
#include <algorithm>
#include <list>
#include <vector>
namespace irr
{
namespace gui
{
//! Base class of all GUI elements.
class IGUIElement : public virtual io::IAttributeExchangingObject, public IEventReceiver
class IGUIElement : virtual public IReferenceCounted, public IEventReceiver
{
public:
@ -50,12 +53,9 @@ public:
//! Destructor
virtual ~IGUIElement()
{
// delete all children
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
{
(*it)->Parent = 0;
(*it)->drop();
for (auto child : Children) {
child->Parent = nullptr;
child->drop();
}
}
@ -239,10 +239,9 @@ public:
recalculateAbsolutePosition(false);
// update all children
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
for (auto child : Children)
{
(*it)->updateAbsolutePosition();
child->updateAbsolutePosition();
}
}
@ -263,20 +262,19 @@ public:
{
IGUIElement* target = 0;
// we have to search from back to front, because later children
// might be drawn over the top of earlier ones.
core::list<IGUIElement*>::ConstIterator it = Children.getLast();
if (isVisible())
{
while(it != Children.end())
// we have to search from back to front, because later children
// might be drawn over the top of earlier ones.
auto it = Children.rbegin();
auto ie = Children.rend();
while (it != ie)
{
target = (*it)->getElementFromPoint(point);
if (target)
return target;
--it;
++it;
}
}
@ -308,17 +306,19 @@ public:
//! Removes a child.
virtual void removeChild(IGUIElement* child)
{
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
if ((*it) == child)
{
(*it)->Parent = 0;
(*it)->drop();
Children.erase(it);
return;
}
assert(child->Parent == this);
Children.erase(child->ParentPos);
child->Parent = nullptr;
child->drop();
}
//! Removes all children.
virtual void removeAllChildren() {
while (!Children.empty()) {
auto child = Children.back();
child->remove();
}
}
//! Removes this element from its parent.
virtual void remove()
@ -333,9 +333,8 @@ public:
{
if ( isVisible() )
{
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->draw();
for (auto child : Children)
child->draw();
}
}
@ -345,9 +344,8 @@ public:
{
if ( isVisible() )
{
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->OnPostRender( timeMs );
for (auto child : Children)
child->OnPostRender( timeMs );
}
}
@ -555,20 +553,15 @@ public:
//! Brings a child to front
/** \return True if successful, false if not. */
virtual bool bringToFront(IGUIElement* element)
virtual bool bringToFront(IGUIElement* child)
{
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
{
if (element == (*it))
{
Children.erase(it);
Children.push_back(element);
return true;
}
}
if (child->Parent != this)
return false;
if (std::next(child->ParentPos) == Children.end()) // already there
return true;
Children.erase(child->ParentPos);
child->ParentPos = Children.insert(Children.end(), child);
return true;
}
@ -576,24 +569,17 @@ public:
/** \return True if successful, false if not. */
virtual bool sendToBack(IGUIElement* child)
{
core::list<IGUIElement*>::Iterator it = Children.begin();
if (child == (*it)) // already there
return true;
for (; it != Children.end(); ++it)
{
if (child == (*it))
{
Children.erase(it);
Children.push_front(child);
return true;
}
}
if (child->Parent != this)
return false;
if (child->ParentPos == Children.begin()) // already there
return true;
Children.erase(child->ParentPos);
child->ParentPos = Children.insert(Children.begin(), child);
return true;
}
//! Returns list with children of this element
virtual const core::list<IGUIElement*>& getChildren() const
virtual const std::list<IGUIElement*>& getChildren() const
{
return Children;
}
@ -610,14 +596,13 @@ public:
{
IGUIElement* e = 0;
core::list<IGUIElement*>::ConstIterator it = Children.begin();
for (; it != Children.end(); ++it)
for (auto child : Children)
{
if ((*it)->getID() == id)
return (*it);
if (child->getID() == id)
return child;
if (searchchildren)
e = (*it)->getElementFromId(id, true);
e = child->getElementFromId(id, true);
if (e)
return e;
@ -663,7 +648,7 @@ public:
if (wanted==-2)
wanted = 1073741824; // maximum s32
core::list<IGUIElement*>::ConstIterator it = Children.begin();
auto it = Children.begin();
s32 closestOrder, currentOrder;
@ -796,62 +781,6 @@ public:
}
//! Writes attributes of the scene node.
/** Implement this to expose the attributes of your scene node for
scripting languages, editors, debuggers or xml serialization purposes. */
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_
{
out->addString("Name", Name.c_str());
out->addInt("Id", ID );
out->addString("Caption", getText());
out->addString("ToolTip", getToolTipText().c_str());
out->addRect("Rect", DesiredRect);
out->addPosition2d("MinSize", core::position2di(MinSize.Width, MinSize.Height));
out->addPosition2d("MaxSize", core::position2di(MaxSize.Width, MaxSize.Height));
out->addEnum("LeftAlign", AlignLeft, GUIAlignmentNames);
out->addEnum("RightAlign", AlignRight, GUIAlignmentNames);
out->addEnum("TopAlign", AlignTop, GUIAlignmentNames);
out->addEnum("BottomAlign", AlignBottom, GUIAlignmentNames);
out->addBool("Visible", IsVisible);
out->addBool("Enabled", IsEnabled);
out->addBool("TabStop", IsTabStop);
out->addBool("TabGroup", IsTabGroup);
out->addInt("TabOrder", TabOrder);
out->addBool("NoClip", NoClip);
}
//! Reads attributes of the scene node.
/** Implement this to set the attributes of your scene node for
scripting languages, editors, debuggers or xml deserialization purposes. */
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_
{
setName(in->getAttributeAsString("Name", Name));
setID(in->getAttributeAsInt("Id", ID));
setText(in->getAttributeAsStringW("Caption", Text).c_str());
setToolTipText(in->getAttributeAsStringW("ToolTip").c_str());
setVisible(in->getAttributeAsBool("Visible", IsVisible));
setEnabled(in->getAttributeAsBool("Enabled", IsEnabled));
IsTabStop = in->getAttributeAsBool("TabStop", IsTabStop);
IsTabGroup = in->getAttributeAsBool("TabGroup", IsTabGroup);
TabOrder = in->getAttributeAsInt("TabOrder", TabOrder);
core::position2di p = in->getAttributeAsPosition2d("MaxSize", core::position2di(MaxSize.Width, MaxSize.Height));
setMaxSize(core::dimension2du(p.X,p.Y));
p = in->getAttributeAsPosition2d("MinSize", core::position2di(MinSize.Width, MinSize.Height));
setMinSize(core::dimension2du(p.X,p.Y));
setAlignment((EGUI_ALIGNMENT) in->getAttributeAsEnumeration("LeftAlign", GUIAlignmentNames, AlignLeft),
(EGUI_ALIGNMENT)in->getAttributeAsEnumeration("RightAlign", GUIAlignmentNames, AlignRight),
(EGUI_ALIGNMENT)in->getAttributeAsEnumeration("TopAlign", GUIAlignmentNames, AlignTop),
(EGUI_ALIGNMENT)in->getAttributeAsEnumeration("BottomAlign", GUIAlignmentNames, AlignBottom));
setRelativePosition(in->getAttributeAsRect("Rect", DesiredRect));
setNotClipped(in->getAttributeAsBool("NoClip", NoClip));
}
protected:
// not virtual because needed in constructor
void addChildToEnd(IGUIElement* child)
@ -862,10 +791,40 @@ protected:
child->remove(); // remove from old parent
child->LastParentRect = getAbsolutePosition();
child->Parent = this;
Children.push_back(child);
child->ParentPos = Children.insert(Children.end(), child);
}
}
#ifndef NDEBUG
template<typename Iterator>
static size_t _fastSetChecksum(Iterator begin, Iterator end) {
std::hash<typename Iterator::value_type> hasher;
size_t checksum = 0;
for (Iterator it = begin; it != end; ++it) {
size_t h = hasher(*it);
checksum ^= 966073049 + (h * 3432918353) + ((h >> 16) * 461845907);
}
return checksum;
}
#endif
// Reorder children [from, to) to the order given by `neworder`
void reorderChildren(
std::list<IGUIElement*>::iterator from,
std::list<IGUIElement*>::iterator to,
const std::vector<IGUIElement*> &neworder)
{
assert(_fastSetChecksum(from, to) == _fastSetChecksum(neworder.begin(), neworder.end()));
for (auto e : neworder)
{
*from = e;
e->ParentPos = from;
++from;
}
assert(from == to);
}
// not virtual because needed in constructor
void recalculateAbsolutePosition(bool recursive)
{
@ -987,10 +946,9 @@ protected:
if ( recursive )
{
// update all children
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
for (auto child : Children)
{
(*it)->recalculateAbsolutePosition(recursive);
child->recalculateAbsolutePosition(recursive);
}
}
}
@ -998,11 +956,14 @@ protected:
protected:
//! List of all children of this element
core::list<IGUIElement*> Children;
std::list<IGUIElement*> Children;
//! Pointer to the parent
IGUIElement* Parent;
//! Our position in the parent list. Only valid when Parent != nullptr
std::list<IGUIElement*>::iterator ParentPos;
//! relative rect of element
core::rect<s32> RelativeRect;

View File

@ -618,12 +618,6 @@ public:
\return True if loading succeeded, else false. */
virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0;
//! Writes attributes of the gui environment
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const =0;
//! Reads attributes of the gui environment
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)=0;
//! Find the next element which would be selected when pressing the tab-key
/** If you set the focus for the result you can manually force focus-changes like they
would happen otherwise by the tab-keys.

View File

@ -5,7 +5,7 @@
#ifndef __I_GUI_SKIN_H_INCLUDED__
#define __I_GUI_SKIN_H_INCLUDED__
#include "IAttributeExchangingObject.h"
#include "IReferenceCounted.h"
#include "EGUIAlignment.h"
#include "SColor.h"
#include "rect.h"
@ -381,7 +381,7 @@ namespace gui
};
//! A skin modifies the look of the GUI elements.
class IGUISkin : public virtual io::IAttributeExchangingObject
class IGUISkin : virtual public IReferenceCounted
{
public:

View File

@ -145,6 +145,10 @@ namespace scene
/** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Index() const = 0;
//! Used by the VideoDriver to remember the buffer link.
virtual void setHWBuffer(void *ptr) const = 0;
virtual void *getHWBuffer() const = 0;
//! Describe what kind of primitive geometry is used by the meshbuffer
/** Note: Default is EPT_TRIANGLES. Using other types is fine for rendering.
But meshbuffer manipulation functions might expect type EPT_TRIANGLES

View File

@ -33,8 +33,8 @@ public:
virtual const c8* getTextFromClipboard() const = 0;
//! Get the total and available system RAM
/** \param totalBytes: will contain the total system memory in bytes
\param availableBytes: will contain the available memory in bytes
/** \param totalBytes: will contain the total system memory in Kilobytes (1024 B)
\param availableBytes: will contain the available memory in Kilobytes (1024 B)
\return True if successful, false if not */
virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0;

View File

@ -21,9 +21,6 @@ public:
//! generates a pseudo random number in the range 0..randMax()
virtual s32 rand() const =0;
//! generates a pseudo random number in the range 0..1
virtual f32 frand() const =0;
//! get maxmimum number generated by rand()
virtual s32 randMax() const =0;
};

View File

@ -1,62 +0,0 @@
// Copyright (C) 2010-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __I_SCENE_LOADER_H_INCLUDED__
#define __I_SCENE_LOADER_H_INCLUDED__
#include "IReferenceCounted.h"
#include "path.h"
namespace irr
{
namespace io
{
class IReadFile;
} // end namespace io
namespace scene
{
class ISceneNode;
class ISceneUserDataSerializer;
//! Class which can load a scene into the scene manager.
/** If you want Irrlicht to be able to load currently unsupported
scene file formats (e.g. .vrml), then implement this and add your
new Sceneloader to the engine with ISceneManager::addExternalSceneLoader(). */
class ISceneLoader : public virtual IReferenceCounted
{
public:
//! Returns true if the class might be able to load this file.
/** This decision should be based on the file extension (e.g. ".vrml")
only.
\param filename Name of the file to test.
\return True if the extension is a recognised type. */
virtual bool isALoadableFileExtension(const io::path& filename) const = 0;
//! Returns true if the class might be able to load this file.
/** This decision will be based on a quick look at the contents of the file.
\param file The file to test.
\return True if the extension is a recognised type. */
virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0;
//! Loads the scene into the scene manager.
/** \param file File which contains the scene.
\param userDataSerializer: If you want to load user data which may be attached
to some some scene nodes in the file, implement the ISceneUserDataSerializer
interface and provide it as parameter here. Otherwise, simply specify 0 as this
parameter.
\param rootNode The node to load the scene into, if none is provided then the
scene will be loaded into the root node.
\return Returns true on success, false on failure. Returns 0 if loading failed. */
virtual bool loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer=0,
ISceneNode* rootNode=0) = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -12,7 +12,6 @@
#include "vector3d.h"
#include "dimension2d.h"
#include "SColor.h"
#include "ETerrainElements.h"
#include "ESceneNodeTypes.h"
#include "EMeshWriterEnums.h"
#include "SceneParameters.h"
@ -111,10 +110,8 @@ namespace scene
class IMeshManipulator;
class IMeshSceneNode;
class IMeshWriter;
class ISceneLoader;
class ISceneNode;
class ISceneNodeFactory;
class ISceneUserDataSerializer;
//! The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff.
/** All Scene nodes can be created only here.
@ -561,24 +558,6 @@ namespace scene
\return A pointer to the specified loader, 0 if the index is incorrect. */
virtual IMeshLoader* getMeshLoader(u32 index) const = 0;
//! Adds an external scene loader for extending the engine with new file formats.
/** If you want the engine to be extended with
file formats it currently is not able to load (e.g. .vrml), just implement
the ISceneLoader interface in your loading class and add it with this method.
Using this method it is also possible to override the built-in scene loaders
with newer or updated versions without the need to recompile the engine.
\param externalLoader: Implementation of a new mesh loader. */
virtual void addExternalSceneLoader(ISceneLoader* externalLoader) = 0;
//! Returns the number of scene loaders supported by Irrlicht at this time
virtual u32 getSceneLoaderCount() const = 0;
//! Retrieve the given scene loader
/** \param index The index of the loader to retrieve. This parameter is an 0-based
array index.
\return A pointer to the specified loader, 0 if the index is incorrect. */
virtual ISceneLoader* getSceneLoader(u32 index) const = 0;
//! Get pointer to the scene collision manager.
/** \return Pointer to the collision manager
This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
@ -670,80 +649,6 @@ namespace scene
See IReferenceCounted::drop() for more information. */
virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0;
//! Saves the current scene into a file.
/** Scene nodes with the option isDebugObject set to true are
not being saved. The scene is usually written to an .irr file,
an xml based format. .irr files can Be edited with the Irrlicht
Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To
load .irr files again, see ISceneManager::loadScene().
\param filename Name of the file.
\param userDataSerializer If you want to save some user data
for every scene node into the file, implement the
ISceneUserDataSerializer interface and provide it as parameter
here. Otherwise, simply specify 0 as this parameter.
\param node Node which is taken as the top node of the scene.
This node and all of its descendants are saved into the scene
file. Pass 0 or the scene manager to save the full scene (which
is also the default).
\return True if successful. */
virtual bool saveScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
//! Saves the current scene into a file.
/** Scene nodes with the option isDebugObject set to true are
not being saved. The scene is usually written to an .irr file,
an xml based format. .irr files can Be edited with the Irrlicht
Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To
load .irr files again, see ISceneManager::loadScene().
\param file File where the scene is saved into.
\param userDataSerializer If you want to save some user data
for every scene node into the file, implement the
ISceneUserDataSerializer interface and provide it as parameter
here. Otherwise, simply specify 0 as this parameter.
\param node Node which is taken as the top node of the scene.
This node and all of its descendants are saved into the scene
file. Pass 0 or the scene manager to save the full scene (which
is also the default).
\return True if successful. */
virtual bool saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
//! Loads a scene. Note that the current scene is not cleared before.
/** The scene is usually loaded from an .irr file, an xml based
format, but other scene formats can be added to the engine via
ISceneManager::addExternalSceneLoader. .irr files can Be edited
with the Irrlicht Engine Editor, irrEdit
(http://www.ambiera.com/irredit/) or saved directly by the engine
using ISceneManager::saveScene().
\param filename Name of the file to load from.
\param userDataSerializer If you want to load user data
possibily saved in that file for some scene nodes in the file,
implement the ISceneUserDataSerializer interface and provide it
as parameter here. Otherwise, simply specify 0 as this
parameter.
\param rootNode Node which is taken as the root node of the
scene. Pass 0 to add the scene directly to the scene manager
(which is also the default).
\return True if successful. */
virtual bool loadScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0;
//! Loads a scene. Note that the current scene is not cleared before.
/** The scene is usually loaded from an .irr file, an xml based
format, but other scene formats can be added to the engine via
ISceneManager::addExternalSceneLoader. .irr files can Be edited
with the Irrlicht Engine Editor, irrEdit
(http://www.ambiera.com/irredit/) or saved directly by the engine
using ISceneManager::saveScene().
\param file File where the scene is loaded from.
\param userDataSerializer If you want to load user data
saved in that file for some scene nodes in the file,
implement the ISceneUserDataSerializer interface and provide it
as parameter here. Otherwise, simply specify 0 as this
parameter.
\param rootNode Node which is taken as the root node of the
scene. Pass 0 to add the scene directly to the scene manager
(which is also the default).
\return True if successful. */
virtual bool loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0;
//! Get a mesh writer implementation if available
/** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop()
for details. */

View File

@ -5,7 +5,7 @@
#ifndef __I_SCENE_NODE_H_INCLUDED__
#define __I_SCENE_NODE_H_INCLUDED__
#include "IAttributeExchangingObject.h"
#include "IReferenceCounted.h"
#include "ESceneNodeTypes.h"
#include "ECullingTypes.h"
#include "EDebugSceneTypes.h"
@ -13,8 +13,8 @@
#include "irrString.h"
#include "aabbox3d.h"
#include "matrix4.h"
#include "irrList.h"
#include "IAttributes.h"
#include <list>
namespace irr
{
@ -24,7 +24,7 @@ namespace scene
class ISceneManager;
//! Typedef for list of scene nodes
typedef core::list<ISceneNode*> ISceneNodeList;
typedef std::list<ISceneNode*> ISceneNodeList;
//! Scene node interface.
/** A scene node is a node in the hierarchical scene graph. Every scene
@ -34,7 +34,7 @@ namespace scene
example easily possible to attach a light to a moving car, or to place
a walking character on a moving platform on a moving ship.
*/
class ISceneNode : virtual public io::IAttributeExchangingObject
class ISceneNode : virtual public IReferenceCounted
{
public:
@ -81,7 +81,7 @@ namespace scene
{
if (IsVisible)
{
ISceneNodeList::Iterator it = Children.begin();
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->OnRegisterSceneNode();
}
@ -103,7 +103,7 @@ namespace scene
// perform the post render process on all children
ISceneNodeList::Iterator it = Children.begin();
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->OnAnimate(timeMs);
}
@ -289,7 +289,7 @@ namespace scene
e.g. because it couldn't be found in the children list. */
virtual bool removeChild(ISceneNode* child)
{
ISceneNodeList::Iterator it = Children.begin();
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
if ((*it) == child)
{
@ -309,7 +309,7 @@ namespace scene
*/
virtual void removeAll()
{
ISceneNodeList::Iterator it = Children.begin();
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
{
(*it)->Parent = 0;
@ -519,7 +519,7 @@ namespace scene
//! Returns a const reference to the list of all children.
/** \return The list of all children of this node. */
const core::list<ISceneNode*>& getChildren() const
const std::list<ISceneNode*>& getChildren() const
{
return Children;
}
@ -571,67 +571,6 @@ namespace scene
return ESNT_UNKNOWN;
}
//! Writes attributes of the scene node.
/** Implement this to expose the attributes of your scene node
for scripting languages, editors, debuggers or xml
serialization purposes.
\param out The attribute container to write into.
\param options Additional options which might influence the
serialization. */
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_
{
if (!out)
return;
out->addString("Name", Name.c_str());
out->addInt("Id", ID );
out->addVector3d("Position", getPosition() );
out->addVector3d("Rotation", getRotation() );
out->addVector3d("Scale", getScale() );
out->addBool("Visible", IsVisible );
out->addInt("AutomaticCulling", AutomaticCullingState);
out->addInt("DebugDataVisible", DebugDataVisible );
out->addBool("IsDebugObject", IsDebugObject );
}
//! Reads attributes of the scene node.
/** Implement this to set the attributes of your scene node for
scripting languages, editors, debuggers or xml deserialization
purposes.
\param in The attribute container to read from.
\param options Additional options which might influence the
deserialization. */
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_
{
if (!in)
return;
Name = in->getAttributeAsString("Name", Name);
ID = in->getAttributeAsInt("Id", ID);
setPosition(in->getAttributeAsVector3d("Position", RelativeTranslation));
setRotation(in->getAttributeAsVector3d("Rotation", RelativeRotation));
setScale(in->getAttributeAsVector3d("Scale", RelativeScale));
IsVisible = in->getAttributeAsBool("Visible", IsVisible);
if (in->existsAttribute("AutomaticCulling"))
{
s32 tmpState = in->getAttributeAsEnumeration("AutomaticCulling",
scene::AutomaticCullingNames);
if (tmpState != -1)
AutomaticCullingState = (u32)tmpState;
else
AutomaticCullingState = in->getAttributeAsInt("AutomaticCulling");
}
DebugDataVisible = in->getAttributeAsInt("DebugDataVisible", DebugDataVisible);
IsDebugObject = in->getAttributeAsBool("IsDebugObject", IsDebugObject);
updateAbsolutePosition();
}
//! Creates a clone of this scene node and its children.
/** \param newParent An optional new parent.
\param newManager An optional new scene manager.
@ -672,7 +611,7 @@ namespace scene
// clone children
ISceneNodeList::Iterator it = toCopyFrom->Children.begin();
ISceneNodeList::iterator it = toCopyFrom->Children.begin();
for (; it != toCopyFrom->Children.end(); ++it)
(*it)->clone(this, newManager);
}
@ -683,7 +622,7 @@ namespace scene
{
SceneManager = newManager;
ISceneNodeList::Iterator it = Children.begin();
ISceneNodeList::iterator it = Children.begin();
for (; it != Children.end(); ++it)
(*it)->setSceneManager(newManager);
}
@ -707,7 +646,7 @@ namespace scene
ISceneNode* Parent;
//! List of all children of this node
core::list<ISceneNode*> Children;
std::list<ISceneNode*> Children;
//! Pointer to the scene manager
ISceneManager* SceneManager;

View File

@ -1,51 +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 __I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED__
#define __I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED__
#include "IReferenceCounted.h"
namespace irr
{
namespace io
{
class IAttributes;
} // end namespace io
namespace scene
{
class ISceneNode;
//! Interface to read and write user data to and from .irr files.
/** This interface is to be implemented by the user, to make it possible to read
and write user data when reading or writing .irr files via ISceneManager.
To be used with ISceneManager::loadScene() and ISceneManager::saveScene() */
class ISceneUserDataSerializer
{
public:
virtual ~ISceneUserDataSerializer() {}
//! Called when the scene manager create a scene node while loading a file.
virtual void OnCreateNode(ISceneNode* node) = 0;
//! Called when the scene manager read a scene node while loading a file.
/** The userData pointer contains a list of attributes with userData which
were attached to the scene node in the read scene file.*/
virtual void OnReadUserData(ISceneNode* forSceneNode, io::IAttributes* userData) = 0;
//! Called when the scene manager is writing a scene node to an xml file for example.
/** Implement this method and return a list of attributes containing the user data
you want to be saved together with the scene node. Return 0 if no user data should
be added. Please note that the scene manager will call drop() to the returned pointer
after it no longer needs it, so if you didn't create a new object for the return value
and returning a longer existing IAttributes object, simply call grab() before returning it. */
virtual io::IAttributes* createUserData(ISceneNode* forSceneNode) = 0;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -79,6 +79,12 @@ namespace scene
/* This feature is not implemented in Irrlicht yet */
virtual bool setHardwareSkinning(bool on) = 0;
//! Refreshes vertex data cached in joints such as positions and normals
virtual void refreshJointCache() = 0;
//! Moves the mesh into static position.
virtual void resetAnimation() = 0;
//! A vertex weight
struct SWeight
{
@ -94,7 +100,7 @@ namespace scene
private:
//! Internal members used by CSkinnedMesh
friend class CSkinnedMesh;
bool *Moved;
char *Moved;
core::vector3df StaticPos;
core::vector3df StaticNormal;
};

View File

@ -25,7 +25,6 @@ namespace irr
namespace io
{
class IAttributes;
struct SAttributeReadWriteOptions;
class IReadFile;
class IWriteFile;
} // end namespace io
@ -509,20 +508,6 @@ namespace video
core::position2d<s32> colorKeyPixelPos,
bool zeroTexels = false) const =0;
//! Creates a normal map from a height map texture.
/** As input is considered to be a height map the texture is read like:
- For a 32-bit texture only the red channel is regarded
- For a 16-bit texture the rgb-values are averaged.
Output channels red/green for X/Y and blue for up (Z).
For a 32-bit texture we store additionally the height value in the
alpha channel. This value is used by the video::EMT_PARALLAX_MAP_SOLID
material and similar materials.
On the borders the texture is considered to repeat.
\param texture Height map texture which is converted to a normal map.
\param amplitude Constant value by which the height
information is multiplied.*/
virtual void makeNormalMapTexture(video::ITexture* texture, f32 amplitude=1.0f) const =0;
//! Set a render target.
/** This will only work if the driver supports the
EVDF_RENDER_TO_TARGET feature, which can be queried with
@ -1355,28 +1340,6 @@ namespace video
When false the names will stay at the original index */
virtual void swapMaterialRenderers(u32 idx1, u32 idx2, bool swapNames=true) = 0;
//! Creates material attributes list from a material
/** This method is useful for serialization and more.
Please note that the video driver will use the material
renderer names from getMaterialRendererName() to write out the
material type name, so they should be set before.
\param material The material to serialize.
\param options Additional options which might influence the
serialization.
\return The io::IAttributes container holding the material
properties. */
virtual io::IAttributes* createAttributesFromMaterial(const video::SMaterial& material,
io::SAttributeReadWriteOptions* options=0) =0;
//! Fills an SMaterial structure from attributes.
/** Please note that for setting material types of the
material, the video driver will need to query the material
renderers for their names, so all non built-in materials must
have been created before calling this method.
\param outMaterial The material to set the properties for.
\param attributes The attributes to read from. */
virtual void fillMaterialStructureFromAttributes(video::SMaterial& outMaterial, io::IAttributes* attributes) =0;
//! Returns driver and operating system specific data about the IVideoDriver.
/** This method should only be used if the engine should be
extended without having to modify the source of the engine.
@ -1423,7 +1386,7 @@ namespace video
you have to render some special things, you can clear the
zbuffer during the rendering process with this method any time.
*/
_IRR_DEPRECATED_ void clearZBuffer()
void clearZBuffer()
{
clearBuffers(ECBF_DEPTH, SColor(255,0,0,0), 1.f, 0);
}

View File

@ -6,8 +6,8 @@
#define __IRR_COMPILE_CONFIG_H_INCLUDED__
//! Identifies the IrrlichtMt fork customized for the Minetest engine
#define IRRLICHT_VERSION_MT_REVISION 4
#define IRRLICHT_VERSION_MT "mt4"
#define IRRLICHT_VERSION_MT_REVISION 6
#define IRRLICHT_VERSION_MT "mt6"
//! Irrlicht SDK Version
#define IRRLICHT_VERSION_MAJOR 1
@ -61,32 +61,15 @@
//! WIN32 for Windows32
//! WIN64 for Windows64
// The windows platform and API support SDL and WINDOW device
#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64)
#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
#if defined(_MSC_VER) && (_MSC_VER < 1500)
# error "Only Microsoft Visual Studio 9.0 and later are supported."
#endif
// XBox is deprecated (as DX8 is removed). Use Irrlicht 1.8 if you still want to work on this.
#if defined(_XBOX)
#undef _IRR_WINDOWS_
#define _IRR_XBOX_PLATFORM_ // deprecated
#define _IRR_WINDOWS_API_
//#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_
#undef _IRR_COMPILE_WITH_WINDOWS_DEVICE_
//#define _IRR_COMPILE_WITH_SDL_DEVICE_
#include <xtl.h>
#endif
#if defined(__APPLE__) || defined(MACOSX)
#if !defined(MACOSX)
#define MACOSX // legacy support
#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_
@ -98,7 +81,9 @@
#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_
@ -137,8 +122,10 @@
#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.
@ -151,7 +138,7 @@
//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht.
#define _IRR_MATERIAL_MAX_TEXTURES_ 8
#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
@ -187,10 +174,6 @@ If not defined, Windows Multimedia library is used, which offers also broad supp
#ifdef NO_IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#endif
// can't get this to compile currently under borland, can be removed if someone has a better solution
#if defined(__BORLANDC__)
#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
#endif
#endif
@ -466,7 +449,7 @@ ones. */
#else // _IRR_WINDOWS_API_
// Force symbol export in shared libraries built with gcc.
#if (__GNUC__ >= 4) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS)
#if defined(__GNUC__) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS)
#define IRRLICHT_API __attribute__ ((visibility("default")))
#else
#define IRRLICHT_API
@ -486,22 +469,6 @@ ones. */
#undef __IRR_HAS_S64
#endif
#if defined(__BORLANDC__)
#include <tchar.h>
// Borland 5.5.1
#if __BORLANDC__ == 0x551
#undef _tfinddata_t
#undef _tfindfirst
#undef _tfindnext
#define _tfinddata_t __tfinddata_t
#define _tfindfirst __tfindfirst
#define _tfindnext __tfindnext
typedef long intptr_t;
#endif
#endif
#ifndef __has_feature
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif

View File

@ -1,43 +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 __S_KEY_MAP_H_INCLUDED__
#define __S_KEY_MAP_H_INCLUDED__
#include "Keycodes.h"
namespace irr
{
//! enumeration for key actions. Used for example in the FPS Camera.
enum EKEY_ACTION
{
EKA_MOVE_FORWARD = 0,
EKA_MOVE_BACKWARD,
EKA_STRAFE_LEFT,
EKA_STRAFE_RIGHT,
EKA_JUMP_UP,
EKA_CROUCH,
EKA_ROTATE_LEFT,
EKA_ROTATE_RIGHT,
EKA_COUNT,
//! This value is not used. It only forces this enumeration to compile in 32 bit.
EKA_FORCE_32BIT = 0x7fffffff
};
//! Struct storing which key belongs to which action.
struct SKeyMap
{
SKeyMap() {}
SKeyMap(EKEY_ACTION action, EKEY_CODE keyCode) : Action(action), KeyCode(keyCode) {}
EKEY_ACTION Action;
EKEY_CODE KeyCode;
};
} // end namespace irr
#endif

View File

@ -282,23 +282,6 @@ namespace video
*/
const u32 MATERIAL_MAX_TEXTURES = _IRR_MATERIAL_MAX_TEXTURES_;
//! By default this is identical to MATERIAL_MAX_TEXTURES
/** Users can modify this value if they are certain they don't need all
available textures per material in their application. For example if you
never need more than 2 textures per material you can set this to 2.
We (mostly) avoid dynamic memory in SMaterial, so the extra memory
will still be allocated. But by lowering MATERIAL_MAX_TEXTURES_USED the
material comparisons and assignments can be faster. Also several other
places in the engine can be faster when reducing this value to the limit
you need.
NOTE: This should only be changed once and before any call to createDevice.
NOTE: Do not set it below 1 or above the value of _IRR_MATERIAL_MAX_TEXTURES_.
NOTE: Going below 4 is usually not worth it.
*/
IRRLICHT_API extern u32 MATERIAL_MAX_TEXTURES_USED;
//! Struct for holding parameters for a material renderer
// Note for implementors: Serialization is in CNullDriver
class SMaterial
@ -318,16 +301,6 @@ namespace video
FogEnable(false), NormalizeNormals(false), UseMipMaps(true)
{ }
//! Copy constructor
/** \param other Material to copy from. */
SMaterial(const SMaterial& other)
{
// These pointers are checked during assignment
for (u32 i=0; i<MATERIAL_MAX_TEXTURES_USED; ++i)
TextureLayer[i].TextureMatrix = 0;
*this = other;
}
//! Texture layer array.
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES];
@ -372,7 +345,7 @@ namespace video
f32 Shininess;
//! Free parameter, dependent on the material type.
/** Mostly ignored, used for example in EMT_PARALLAX_MAP_SOLID,
/** Mostly ignored, used for example in
EMT_TRANSPARENT_ALPHA_CHANNEL and EMT_ONETEXTURE_BLEND. */
f32 MaterialTypeParam;
@ -565,23 +538,23 @@ namespace video
FrontfaceCulling = value; break;
case EMF_BILINEAR_FILTER:
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES_USED; ++i)
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_USED; ++i)
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_USED; ++i)
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].AnisotropicFilter = 0xFF;
else
for (u32 i=0; i<MATERIAL_MAX_TEXTURES_USED; ++i)
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureLayer[i].AnisotropicFilter = 0;
}
break;
@ -591,7 +564,7 @@ namespace video
NormalizeNormals = value; break;
case EMF_TEXTURE_WRAP:
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES_USED; ++i)
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
{
TextureLayer[i].TextureWrapU = (E_TEXTURE_CLAMP)value;
TextureLayer[i].TextureWrapV = (E_TEXTURE_CLAMP)value;
@ -713,7 +686,7 @@ namespace video
PolygonOffsetSlopeScale != b.PolygonOffsetSlopeScale ||
UseMipMaps != b.UseMipMaps
;
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES_USED) && !different; ++i)
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
{
different |= (TextureLayer[i] != b.TextureLayer[i]);
}

View File

@ -1,260 +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 __S_SHARED_MESH_BUFFER_H_INCLUDED__
#define __S_SHARED_MESH_BUFFER_H_INCLUDED__
#include "irrArray.h"
#include "IMeshBuffer.h"
namespace irr
{
namespace scene
{
//! Implementation of the IMeshBuffer interface with shared vertex list
struct SSharedMeshBuffer : public IMeshBuffer
{
//! constructor
SSharedMeshBuffer()
: IMeshBuffer()
, Vertices(0), ChangedID_Vertex(1), ChangedID_Index(1)
, MappingHintVertex(EHM_NEVER), MappingHintIndex(EHM_NEVER)
, PrimitiveType(EPT_TRIANGLES)
{
#ifdef _DEBUG
setDebugName("SSharedMeshBuffer");
#endif
}
//! constructor
SSharedMeshBuffer(core::array<video::S3DVertex> *vertices) : IMeshBuffer(), Vertices(vertices), ChangedID_Vertex(1), ChangedID_Index(1), MappingHintVertex(EHM_NEVER), MappingHintIndex(EHM_NEVER)
{
#ifdef _DEBUG
setDebugName("SSharedMeshBuffer");
#endif
}
//! returns the material of this meshbuffer
virtual const video::SMaterial& getMaterial() const _IRR_OVERRIDE_
{
return Material;
}
//! returns the material of this meshbuffer
virtual video::SMaterial& getMaterial() _IRR_OVERRIDE_
{
return Material;
}
//! returns pointer to vertices
virtual const void* getVertices() const _IRR_OVERRIDE_
{
if (Vertices)
return Vertices->const_pointer();
else
return 0;
}
//! returns pointer to vertices
virtual void* getVertices() _IRR_OVERRIDE_
{
if (Vertices)
return Vertices->pointer();
else
return 0;
}
//! returns amount of vertices
virtual u32 getVertexCount() const _IRR_OVERRIDE_
{
if (Vertices)
return Vertices->size();
else
return 0;
}
//! returns pointer to indices
virtual const u16* getIndices() const _IRR_OVERRIDE_
{
return Indices.const_pointer();
}
//! returns pointer to indices
virtual u16* getIndices() _IRR_OVERRIDE_
{
return Indices.pointer();
}
//! returns amount of indices
virtual u32 getIndexCount() const _IRR_OVERRIDE_
{
return Indices.size();
}
//! Get type of index data which is stored in this meshbuffer.
virtual video::E_INDEX_TYPE getIndexType() const _IRR_OVERRIDE_
{
return video::EIT_16BIT;
}
//! returns an axis aligned bounding box
virtual const core::aabbox3d<f32>& getBoundingBox() const _IRR_OVERRIDE_
{
return BoundingBox;
}
//! set user axis aligned bounding box
virtual void setBoundingBox( const core::aabbox3df& box) _IRR_OVERRIDE_
{
BoundingBox = box;
}
//! returns which type of vertex data is stored.
virtual video::E_VERTEX_TYPE getVertexType() const _IRR_OVERRIDE_
{
return video::EVT_STANDARD;
}
//! recalculates the bounding box. should be called if the mesh changed.
virtual void recalculateBoundingBox() _IRR_OVERRIDE_
{
if (!Vertices || Vertices->empty() || Indices.empty())
BoundingBox.reset(0,0,0);
else
{
BoundingBox.reset((*Vertices)[Indices[0]].Pos);
for (u32 i=1; i<Indices.size(); ++i)
BoundingBox.addInternalPoint((*Vertices)[Indices[i]].Pos);
}
}
//! returns position of vertex i
virtual const core::vector3df& getPosition(u32 i) const _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].Pos;
}
//! returns position of vertex i
virtual core::vector3df& getPosition(u32 i) _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].Pos;
}
//! returns normal of vertex i
virtual const core::vector3df& getNormal(u32 i) const _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].Normal;
}
//! returns normal of vertex i
virtual core::vector3df& getNormal(u32 i) _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].Normal;
}
//! returns texture coord of vertex i
virtual const core::vector2df& getTCoords(u32 i) const _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].TCoords;
}
//! returns texture coord of vertex i
virtual core::vector2df& getTCoords(u32 i) _IRR_OVERRIDE_
{
_IRR_DEBUG_BREAK_IF(!Vertices);
return (*Vertices)[Indices[i]].TCoords;
}
//! append the vertices and indices to the current buffer
virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) _IRR_OVERRIDE_ {}
//! append the meshbuffer to the current buffer
virtual void append(const IMeshBuffer* const other) _IRR_OVERRIDE_ {}
//! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const _IRR_OVERRIDE_
{
return MappingHintVertex;
}
//! get the current hardware mapping hint
virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const _IRR_OVERRIDE_
{
return MappingHintIndex;
}
//! set the hardware mapping hint, for driver
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) _IRR_OVERRIDE_
{
if (buffer==EBT_VERTEX_AND_INDEX || buffer==EBT_VERTEX)
MappingHintVertex=NewMappingHint;
if (buffer==EBT_VERTEX_AND_INDEX || buffer==EBT_INDEX)
MappingHintIndex=NewMappingHint;
}
//! Describe what kind of primitive geometry is used by the meshbuffer
virtual void setPrimitiveType(E_PRIMITIVE_TYPE type) _IRR_OVERRIDE_
{
PrimitiveType = type;
}
//! Get the kind of primitive geometry which is used by the meshbuffer
virtual E_PRIMITIVE_TYPE getPrimitiveType() const _IRR_OVERRIDE_
{
return PrimitiveType;
}
//! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) _IRR_OVERRIDE_
{
if (buffer==EBT_VERTEX_AND_INDEX || buffer==EBT_VERTEX)
++ChangedID_Vertex;
if (buffer==EBT_VERTEX_AND_INDEX || buffer==EBT_INDEX)
++ChangedID_Index;
}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Vertex() const _IRR_OVERRIDE_ {return ChangedID_Vertex;}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
//! Material of this meshBuffer
video::SMaterial Material;
//! Shared Array of vertices
core::array<video::S3DVertex> *Vertices;
//! Array of indices
core::array<u16> Indices;
//! ID used for hardware buffer management
u32 ChangedID_Vertex;
//! ID used for hardware buffer management
u32 ChangedID_Index;
//! Bounding box
core::aabbox3df BoundingBox;
//! hardware mapping hint
E_HARDWARE_MAPPING MappingHintVertex;
E_HARDWARE_MAPPING MappingHintIndex;
//! Primitive type used for rendering (triangles, lines, ...)
E_PRIMITIVE_TYPE PrimitiveType;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -23,6 +23,7 @@ struct SSkinMeshBuffer : public IMeshBuffer
ChangedID_Vertex(1), ChangedID_Index(1), VertexType(vt),
PrimitiveType(EPT_TRIANGLES),
MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER),
HWBuffer(NULL),
BoundingBoxNeedsRecalculated(true)
{
#ifdef _DEBUG
@ -383,6 +384,15 @@ struct SSkinMeshBuffer : public IMeshBuffer
virtual u32 getChangedID_Index() const _IRR_OVERRIDE_ {return ChangedID_Index;}
virtual void setHWBuffer(void *ptr) const _IRR_OVERRIDE_ {
HWBuffer = ptr;
}
virtual void *getHWBuffer() const _IRR_OVERRIDE_ {
return HWBuffer;
}
//! Call this after changing the positions of any vertex.
void boundingBoxNeedsRecalculated(void) { BoundingBoxNeedsRecalculated = true; }
@ -409,6 +419,8 @@ struct SSkinMeshBuffer : public IMeshBuffer
E_HARDWARE_MAPPING MappingHint_Vertex:3;
E_HARDWARE_MAPPING MappingHint_Index:3;
mutable void *HWBuffer;
bool BoundingBoxNeedsRecalculated:1;
};

View File

@ -48,32 +48,6 @@ namespace scene
**/
const c8* const OBJ_LOADER_IGNORE_MATERIAL_FILES = "OBJ_IgnoreMaterialFiles";
//! Flag to ignore the b3d file's mipmapping flag
/** Instead Irrlicht's texture creation flag is used. Use it like this:
\code
SceneManager->getParameters()->setAttribute(scene::B3D_LOADER_IGNORE_MIPMAP_FLAG, true);
\endcode
**/
const c8* const B3D_LOADER_IGNORE_MIPMAP_FLAG = "B3D_IgnoreMipmapFlag";
//! Name of the parameter for setting the length of debug normals.
/** Use it like this:
\code
SceneManager->getParameters()->setAttribute(scene::DEBUG_NORMAL_LENGTH, 1.5f);
\endcode
**/
const c8* const DEBUG_NORMAL_LENGTH = "DEBUG_Normal_Length";
//! Name of the parameter for setting the color of debug normals.
/** Use it like this:
\code
SceneManager->getParameters()->setAttributeAsColor(scene::DEBUG_NORMAL_COLOR, video::SColor(255, 255, 255, 255));
\endcode
**/
const c8* const DEBUG_NORMAL_COLOR = "DEBUG_Normal_Color";
} // end namespace scene
} // end namespace irr

View File

@ -1,70 +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 __IRR_HEAPSORT_H_INCLUDED__
#define __IRR_HEAPSORT_H_INCLUDED__
#include "irrTypes.h"
namespace irr
{
namespace core
{
//! Sinks an element into the heap.
template<class T>
inline void heapsink(T*array, s32 element, s32 max)
{
while ((element<<1) < max) // there is a left child
{
s32 j = (element<<1);
if (j+1 < max && array[j] < array[j+1])
j = j+1; // take right child
if (array[element] < array[j])
{
T t = array[j]; // swap elements
array[j] = array[element];
array[element] = t;
element = j;
}
else
return;
}
}
//! Sorts an array with size 'size' using heapsort.
template<class T>
inline void heapsort(T* array_, s32 size)
{
// for heapsink we pretend this is not c++, where
// arrays start with index 0. So we decrease the array pointer,
// the maximum always +2 and the element always +1
T* virtualArray = array_ - 1;
s32 virtualSize = size + 2;
s32 i;
// build heap
for (i=((size-1)/2); i>=0; --i)
heapsink(virtualArray, i+1, virtualSize-1);
// sort array, leave out the last element (0)
for (i=size-1; i>0; --i)
{
T t = array_[0];
array_[0] = array_[i];
array_[i] = t;
heapsink(virtualArray, 1, i + 1);
}
}
} // end namespace core
} // end namespace irr
#endif

View File

@ -15,11 +15,6 @@ namespace irr
namespace core
{
#ifdef DEBUG_CLIENTBLOCK
#undef DEBUG_CLIENTBLOCK
#define DEBUG_CLIENTBLOCK new
#endif
//! Very simple allocator implementation, containers using it can be used across dll boundaries
template<typename T>
class irrAllocator
@ -102,12 +97,6 @@ public:
};
#ifdef DEBUG_CLIENTBLOCK
#undef DEBUG_CLIENTBLOCK
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#endif
//! defines an allocation strategy (used only by irr::array so far)
enum eAllocStrategy
{

View File

@ -5,9 +5,11 @@
#ifndef __IRR_ARRAY_H_INCLUDED__
#define __IRR_ARRAY_H_INCLUDED__
#include <algorithm>
#include <iterator>
#include <vector>
#include "irrTypes.h"
#include "heapsort.h"
#include "irrAllocator.h"
#include "irrMath.h"
namespace irr
@ -18,44 +20,27 @@ namespace core
//! Self reallocating template array (like stl vector) with additional features.
/** Some features are: Heap sorting, binary search methods, easier debugging.
*/
template <class T, typename TAlloc = irrAllocator<T> >
template <class T>
class array
{
public:
static_assert(!std::is_same<T, bool>::value,
"irr::core::array<T> with T = bool not supported. Use std::vector instead.");
//! Default constructor for empty array.
array() : data(0), allocated(0), used(0),
strategy(ALLOC_STRATEGY_DOUBLE), free_when_destroyed(true), is_sorted(true)
{
}
array() : m_data(), is_sorted(true)
{ }
//! Constructs an array and allocates an initial chunk of memory.
/** \param start_count Amount of elements to pre-allocate. */
explicit array(u32 start_count) : data(0), allocated(0), used(0),
strategy(ALLOC_STRATEGY_DOUBLE),
free_when_destroyed(true), is_sorted(true)
explicit array(u32 start_count) : m_data(), is_sorted(true)
{
reallocate(start_count);
m_data.reserve(start_count);
}
//! Copy constructor
array(const array<T, TAlloc>& other) : data(0)
{
*this = other;
}
//! Destructor.
/** Frees allocated memory, if set_free_when_destroyed was not set to
false by the user before. */
~array()
{
clear();
}
array(const array<T>& other) : m_data(other.m_data), is_sorted(other.is_sorted)
{ }
//! Reallocates the array, make it bigger or smaller.
/** \param new_size New size of array.
@ -65,52 +50,28 @@ public:
*/
void reallocate(u32 new_size, bool canShrink=true)
{
if (allocated==new_size)
return;
if (!canShrink && (new_size < allocated))
return;
T* old_data = data;
data = allocator.allocate(new_size); //new T[new_size];
allocated = new_size;
// copy old data
const s32 end = used < new_size ? used : new_size;
for (s32 i=0; i<end; ++i)
{
// data[i] = old_data[i];
allocator.construct(&data[i], old_data[i]);
size_t allocated = m_data.capacity();
if (new_size < allocated) {
if (canShrink)
m_data.resize(new_size);
} else {
m_data.reserve(new_size);
}
// destruct old data
for (u32 j=0; j<used; ++j)
allocator.destruct(&old_data[j]);
if (allocated < used)
used = allocated;
allocator.deallocate(old_data); //delete [] old_data;
}
//! set a new allocation strategy
/** if the maximum size of the array is unknown, you can define how big the
allocation should happen.
\param newStrategy New strategy to apply to this array. */
void setAllocStrategy ( eAllocStrategy newStrategy = ALLOC_STRATEGY_DOUBLE )
{
strategy = newStrategy;
}
//! Adds an element at back of array.
/** If the array is too small to add this new element it is made bigger.
\param element: Element to add at the back of the array. */
void push_back(const T& element)
{
insert(element, used);
m_data.push_back(element);
is_sorted = false;
}
void push_back(T&& element)
{
m_data.push_back(std::move(element));
is_sorted = false;
}
@ -121,7 +82,14 @@ public:
\param element Element to add at the back of the array. */
void push_front(const T& element)
{
insert(element);
m_data.insert(m_data.begin(), element);
is_sorted = false;
}
void push_front(T&& element)
{
m_data.insert(m_data.begin(), std::move(element));
is_sorted = false;
}
@ -131,106 +99,21 @@ public:
\param index: Where position to insert the new element. */
void insert(const T& element, u32 index=0)
{
_IRR_DEBUG_BREAK_IF(index>used) // access violation
if (used + 1 > allocated)
{
// this doesn't work if the element is in the same
// array. So we'll copy the element first to be sure
// we'll get no data corruption
const T e(element);
// increase data block
u32 newAlloc;
switch ( strategy )
{
case ALLOC_STRATEGY_DOUBLE:
newAlloc = used + 5 + (allocated < 500 ? used : used >> 2);
break;
default:
case ALLOC_STRATEGY_SAFE:
newAlloc = used + 1;
break;
}
reallocate( newAlloc);
// move array content and construct new element
// first move end one up
for (u32 i=used; i>index; --i)
{
if (i<used)
allocator.destruct(&data[i]);
allocator.construct(&data[i], data[i-1]); // data[i] = data[i-1];
}
// then add new element
if (used > index)
allocator.destruct(&data[index]);
allocator.construct(&data[index], e); // data[index] = e;
}
else
{
// element inserted not at end
if ( used > index )
{
// create one new element at the end
allocator.construct(&data[used], data[used-1]);
// move the rest of the array content
for (u32 i=used-1; i>index; --i)
{
data[i] = data[i-1];
}
// insert the new element
data[index] = element;
}
else
{
// insert the new element to the end
allocator.construct(&data[index], element);
}
}
// set to false as we don't know if we have the comparison operators
_IRR_DEBUG_BREAK_IF(index > m_data.size()) // access violation
auto pos = std::next(m_data.begin(), index);
m_data.insert(pos, element);
is_sorted = false;
++used;
}
//! Clears the array and deletes all allocated memory.
void clear()
{
if (free_when_destroyed)
{
for (u32 i=0; i<used; ++i)
allocator.destruct(&data[i]);
allocator.deallocate(data); // delete [] data;
}
data = 0;
used = 0;
allocated = 0;
// vector::clear() reduces the size to 0, but doesn't free memory.
// This swap is guaranteed to delete the allocated memory.
std::vector<T>().swap(m_data);
is_sorted = true;
}
//! Sets pointer to new array, using this as new workspace.
/** Make sure that set_free_when_destroyed is used properly.
\param newPointer: Pointer to new array of elements.
\param size: Size of the new array.
\param _is_sorted Flag which tells whether the new array is already
sorted.
\param _free_when_destroyed Sets whether the new memory area shall be
freed by the array upon destruction, or if this will be up to the user
application. */
void set_pointer(T* newPointer, u32 size, bool _is_sorted=false, bool _free_when_destroyed=true)
{
clear();
data = newPointer;
allocated = size;
used = size;
is_sorted = _is_sorted;
free_when_destroyed=_free_when_destroyed;
}
//! Set (copy) data from given memory block
/** \param newData data to set, must have newSize elements
\param newSize Amount of elements in newData
@ -240,12 +123,11 @@ public:
*/
void set_data(const T* newData, u32 newSize, bool newDataIsSorted=false, bool canShrink=false)
{
reallocate(newSize, canShrink);
set_used(newSize);
for ( u32 i=0; i<newSize; ++i)
{
data[i] = newData[i];
m_data.resize(newSize);
if (canShrink) {
m_data.shrink_to_fit();
}
std::copy(newData, newData + newSize, m_data.begin());
is_sorted = newDataIsSorted;
}
@ -255,80 +137,51 @@ public:
\param size Amount of elements in otherData */
bool equals(const T* otherData, u32 size) const
{
if (used != size)
if (m_data.size() != size)
return false;
for (u32 i=0; i<size; ++i)
if (data[i] != otherData[i])
return false;
return true;
return std::equal(m_data.begin(), m_data.end(), otherData);
}
//! Sets if the array should delete the memory it uses upon destruction.
/** Also clear and set_pointer will only delete the (original) memory
area if this flag is set to true, which is also the default. The
methods reallocate, set_used, push_back, push_front, insert, and erase
will still try to deallocate the original memory, which might cause
troubles depending on the intended use of the memory area.
\param f If true, the array frees the allocated memory in its
destructor, otherwise not. The default is true. */
void set_free_when_destroyed(bool f)
{
free_when_destroyed = f;
}
//! Sets the size of the array and allocates new elements if necessary.
/** Please note: This is only secure when using it with simple types,
because no default constructor will be called for the added elements.
\param usedNow Amount of elements now used. */
/** \param usedNow Amount of elements now used. */
void set_used(u32 usedNow)
{
if (allocated < usedNow)
reallocate(usedNow);
used = usedNow;
m_data.resize(usedNow);
}
//! Assignment operator
const array<T, TAlloc>& operator=(const array<T, TAlloc>& other)
const array<T>& operator=(const array<T>& other)
{
if (this == &other)
return *this;
strategy = other.strategy;
if (data)
clear();
//if (allocated < other.allocated)
if (other.allocated == 0)
data = 0;
else
data = allocator.allocate(other.allocated); // new T[other.allocated];
used = other.used;
free_when_destroyed = true;
m_data = other.m_data;
is_sorted = other.is_sorted;
allocated = other.allocated;
for (u32 i=0; i<other.used; ++i)
allocator.construct(&data[i], other.data[i]); // data[i] = other.data[i];
return *this;
}
array<T>& operator=(const std::vector<T> &other)
{
m_data = other;
is_sorted = false;
return *this;
}
array<T>& operator=(std::vector<T> &&other)
{
m_data = std::move(other);
is_sorted = false;
return *this;
}
//! Equality operator
bool operator == (const array<T, TAlloc>& other) const
bool operator == (const array<T>& other) const
{
return equals(other.const_pointer(), other.size());
}
//! Inequality operator
bool operator != (const array<T, TAlloc>& other) const
bool operator != (const array<T>& other) const
{
return !(*this==other);
}
@ -337,36 +190,36 @@ public:
//! Direct access operator
T& operator [](u32 index)
{
_IRR_DEBUG_BREAK_IF(index>=used) // access violation
_IRR_DEBUG_BREAK_IF(index >= m_data.size()) // access violation
return data[index];
return m_data[index];
}
//! Direct const access operator
const T& operator [](u32 index) const
{
_IRR_DEBUG_BREAK_IF(index>=used) // access violation
_IRR_DEBUG_BREAK_IF(index >= m_data.size()) // access violation
return data[index];
return m_data[index];
}
//! Gets last element.
T& getLast()
{
_IRR_DEBUG_BREAK_IF(!used) // access violation
_IRR_DEBUG_BREAK_IF(m_data.empty()) // access violation
return data[used-1];
return m_data.back();
}
//! Gets last element
const T& getLast() const
{
_IRR_DEBUG_BREAK_IF(!used) // access violation
_IRR_DEBUG_BREAK_IF(m_data.empty()) // access violation
return data[used-1];
return m_data.back();
}
@ -374,7 +227,7 @@ public:
/** \return Pointer to the array. */
T* pointer()
{
return data;
return &m_data[0];
}
@ -382,7 +235,7 @@ public:
/** \return Pointer to the array. */
const T* const_pointer() const
{
return data;
return &m_data[0];
}
@ -390,7 +243,7 @@ public:
/** \return Size of elements in the array which are actually occupied. */
u32 size() const
{
return used;
return m_data.size();
}
@ -399,7 +252,7 @@ public:
allocated would be allocated_size() * sizeof(ElementTypeUsed); */
u32 allocated_size() const
{
return allocated;
return m_data.capacity();
}
@ -407,7 +260,7 @@ public:
/** \return True if the array is empty false if not. */
bool empty() const
{
return used == 0;
return m_data.empty();
}
@ -416,10 +269,11 @@ public:
O(n*log n) in worst case. */
void sort()
{
if (!is_sorted && used>1)
heapsort(data, used);
if (!is_sorted) {
std::sort(m_data.begin(), m_data.end());
is_sorted = true;
}
}
//! Performs a binary search for an element, returns -1 if not found.
@ -432,10 +286,9 @@ public:
s32 binary_search(const T& element)
{
sort();
return binary_search(element, 0, used-1);
return binary_search(element, 0, (s32)m_data.size() - 1);
}
//! Performs a binary search for an element if possible, returns -1 if not found.
/** This method is for const arrays and so cannot call sort(), if the array is
not sorted then linear_search will be used instead. Potentially very slow!
@ -445,12 +298,11 @@ public:
s32 binary_search(const T& element) const
{
if (is_sorted)
return binary_search(element, 0, used-1);
return binary_search(element, 0, (s32)m_data.size() - 1);
else
return linear_search(element);
}
//! Performs a binary search for an element, returns -1 if not found.
/** \param element: Element to search for.
\param left First left index
@ -459,31 +311,15 @@ public:
is returned. */
s32 binary_search(const T& element, s32 left, s32 right) const
{
if (!used)
if (left > right)
return -1;
s32 m;
do
{
m = (left+right)>>1;
if (element < data[m])
right = m - 1;
else
left = m + 1;
} while((element < data[m] || data[m] < element) && left<=right);
// this last line equals to:
// " while((element != array[m]) && left<=right);"
// but we only want to use the '<' operator.
// the same in next line, it is "(element == array[m])"
if (!(element < data[m]) && !(data[m] < element))
return m;
auto lpos = std::next(m_data.begin(), left);
auto rpos = std::next(m_data.begin(), right);
auto it = std::lower_bound(lpos, rpos, element);
// *it = first element in [first, last) that is >= element, or last if not found.
if (*it < element || element < *it)
return -1;
return it - m_data.begin();
}
@ -498,25 +334,11 @@ public:
s32 binary_search_multi(const T& element, s32 &last)
{
sort();
s32 index = binary_search(element, 0, used-1);
if ( index < 0 )
return index;
// The search can be somewhere in the middle of the set
// look linear previous and past the index
last = index;
while ( index > 0 && !(element < data[index - 1]) && !(data[index - 1] < element) )
{
index -= 1;
}
// look linear up
while ( last < (s32) used - 1 && !(element < data[last + 1]) && !(data[last + 1] < element) )
{
last += 1;
}
return index;
auto iters = std::equal_range(m_data.begin(), m_data.end(), element);
if (iters.first == iters.second)
return -1;
last = (iters.second - m_data.begin()) - 1;
return iters.first - m_data.begin();
}
@ -528,11 +350,10 @@ public:
is returned. */
s32 linear_search(const T& element) const
{
for (u32 i=0; i<used; ++i)
if (element == data[i])
return (s32)i;
auto it = std::find(m_data.begin(), m_data.end(), element);
if (it == m_data.end())
return -1;
return it - m_data.begin();
}
@ -544,11 +365,11 @@ public:
is returned. */
s32 linear_reverse_search(const T& element) const
{
for (s32 i=used-1; i>=0; --i)
if (data[i] == element)
return i;
auto it = std::find(m_data.rbegin(), m_data.rend(), element);
if (it == m_data.rend())
return -1;
size_t offset = it - m_data.rbegin();
return m_data.size() - offset - 1;
}
@ -558,17 +379,9 @@ public:
\param index: Index of element to be erased. */
void erase(u32 index)
{
_IRR_DEBUG_BREAK_IF(index>=used) // access violation
for (u32 i=index+1; i<used; ++i)
{
allocator.destruct(&data[i-1]);
allocator.construct(&data[i-1], data[i]); // data[i-1] = data[i];
}
allocator.destruct(&data[used-1]);
--used;
_IRR_DEBUG_BREAK_IF(index >= m_data.size()) // access violation
auto it = std::next(m_data.begin(), index);
m_data.erase(it);
}
@ -579,30 +392,14 @@ public:
\param count: Amount of elements to be erased. */
void erase(u32 index, s32 count)
{
if (index>=used || count<1)
if (index >= m_data.size() || count < 1)
return;
if (index+count>used)
count = used-index;
u32 i;
for (i=index; i<index+count; ++i)
allocator.destruct(&data[i]);
for (i=index+count; i<used; ++i)
{
if (i-count >= index+count) // not already destructed before loop
allocator.destruct(&data[i-count]);
allocator.construct(&data[i-count], data[i]); // data[i-count] = data[i];
if (i >= used-count) // those which are not overwritten
allocator.destruct(&data[i]);
count = std::min(count, (s32)m_data.size() - (s32)index);
auto first = std::next(m_data.begin(), index);
auto last = std::next(first, count);
m_data.erase(first, last);
}
used-= count;
}
//! Sets if the array is sorted
void set_sorted(bool _is_sorted)
{
@ -614,38 +411,30 @@ public:
/** Afterward this object will contain the content of the other object and the other
object will contain the content of this object.
\param other Swap content with this object */
void swap(array<T, TAlloc>& other)
void swap(array<T>& other)
{
core::swap(data, other.data);
core::swap(allocated, other.allocated);
core::swap(used, other.used);
core::swap(allocator, other.allocator); // memory is still released by the same allocator used for allocation
eAllocStrategy helper_strategy(strategy); // can't use core::swap with bitfields
strategy = other.strategy;
other.strategy = helper_strategy;
bool helper_free_when_destroyed(free_when_destroyed);
free_when_destroyed = other.free_when_destroyed;
other.free_when_destroyed = helper_free_when_destroyed;
bool helper_is_sorted(is_sorted);
is_sorted = other.is_sorted;
other.is_sorted = helper_is_sorted;
m_data.swap(other.m_data);
std::swap(is_sorted, other.is_sorted);
}
//! Pull the contents of this array as a vector.
// The array is left empty.
std::vector<T> steal()
{
std::vector<T> ret = std::move(m_data);
m_data.clear();
is_sorted = true;
return ret;
}
typedef TAlloc allocator_type;
typedef T value_type;
typedef u32 size_type;
private:
T* data;
u32 allocated;
u32 used;
TAlloc allocator;
eAllocStrategy strategy:4;
bool free_when_destroyed:1;
bool is_sorted:1;
std::vector<T> m_data;
bool is_sorted;
};
} // end namespace core
} // end namespace irr

View File

@ -1,414 +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 __IRR_LIST_H_INCLUDED__
#define __IRR_LIST_H_INCLUDED__
#include "irrTypes.h"
#include "irrAllocator.h"
#include "irrMath.h"
namespace irr
{
namespace core
{
//! Doubly linked list template.
template <class T>
class list
{
private:
//! List element node with pointer to previous and next element in the list.
struct SKListNode
{
SKListNode(const T& e) : Next(0), Prev(0), Element(e) {}
SKListNode* Next;
SKListNode* Prev;
T Element;
};
public:
class ConstIterator;
//! List iterator.
class Iterator
{
public:
Iterator() : Current(0) {}
Iterator& operator ++() { Current = Current->Next; return *this; }
Iterator& operator --() { Current = Current->Prev; return *this; }
Iterator operator ++(s32) { Iterator tmp = *this; Current = Current->Next; return tmp; }
Iterator operator --(s32) { Iterator tmp = *this; Current = Current->Prev; return tmp; }
Iterator& operator +=(s32 num)
{
if(num > 0)
{
while (num-- && this->Current != 0) ++(*this);
}
else
{
while(num++ && this->Current != 0) --(*this);
}
return *this;
}
Iterator operator + (s32 num) const { Iterator tmp = *this; return tmp += num; }
Iterator& operator -=(s32 num) { return (*this)+=(-num); }
Iterator operator - (s32 num) const { return (*this)+ (-num); }
bool operator ==(const Iterator& other) const { return Current == other.Current; }
bool operator !=(const Iterator& other) const { return Current != other.Current; }
bool operator ==(const ConstIterator& other) const { return Current == other.Current; }
bool operator !=(const ConstIterator& other) const { return Current != other.Current; }
T & operator * () { return Current->Element; }
T * operator ->() { return &Current->Element; }
private:
explicit Iterator(SKListNode* begin) : Current(begin) {}
SKListNode* Current;
friend class list<T>;
friend class ConstIterator;
};
//! List iterator for const access.
class ConstIterator
{
public:
ConstIterator() : Current(0) {}
ConstIterator(const Iterator& iter) : Current(iter.Current) {}
ConstIterator& operator ++() { Current = Current->Next; return *this; }
ConstIterator& operator --() { Current = Current->Prev; return *this; }
ConstIterator operator ++(s32) { ConstIterator tmp = *this; Current = Current->Next; return tmp; }
ConstIterator operator --(s32) { ConstIterator tmp = *this; Current = Current->Prev; return tmp; }
ConstIterator& operator +=(s32 num)
{
if(num > 0)
{
while(num-- && this->Current != 0) ++(*this);
}
else
{
while(num++ && this->Current != 0) --(*this);
}
return *this;
}
ConstIterator operator + (s32 num) const { ConstIterator tmp = *this; return tmp += num; }
ConstIterator& operator -=(s32 num) { return (*this)+=(-num); }
ConstIterator operator - (s32 num) const { return (*this)+ (-num); }
bool operator ==(const ConstIterator& other) const { return Current == other.Current; }
bool operator !=(const ConstIterator& other) const { return Current != other.Current; }
bool operator ==(const Iterator& other) const { return Current == other.Current; }
bool operator !=(const Iterator& other) const { return Current != other.Current; }
const T & operator * () { return Current->Element; }
const T * operator ->() { return &Current->Element; }
ConstIterator & operator =(const Iterator & iterator) { Current = iterator.Current; return *this; }
private:
explicit ConstIterator(SKListNode* begin) : Current(begin) {}
SKListNode* Current;
friend class Iterator;
friend class list<T>;
};
//! Default constructor for empty list.
list()
: First(0), Last(0), Size(0) {}
//! Copy constructor.
list(const list<T>& other) : First(0), Last(0), Size(0)
{
*this = other;
}
//! Destructor
~list()
{
clear();
}
//! Assignment operator
void operator=(const list<T>& other)
{
if(&other == this)
{
return;
}
clear();
SKListNode* node = other.First;
while(node)
{
push_back(node->Element);
node = node->Next;
}
}
//! Returns amount of elements in list.
/** \return Amount of elements in the list. */
u32 size() const
{
return Size;
}
u32 getSize() const
{
return Size;
}
//! Clears the list, deletes all elements in the list.
/** All existing iterators of this list will be invalid. */
void clear()
{
while(First)
{
SKListNode * next = First->Next;
allocator.destruct(First);
allocator.deallocate(First);
First = next;
}
//First = 0; handled by loop
Last = 0;
Size = 0;
}
//! Checks for empty list.
/** \return True if the list is empty and false if not. */
bool empty() const
{
return (First == 0);
}
//! Adds an element at the end of the list.
/** \param element Element to add to the list. */
void push_back(const T& element)
{
SKListNode* node = allocator.allocate(1);
allocator.construct(node, element);
++Size;
if (First == 0)
First = node;
node->Prev = Last;
if (Last != 0)
Last->Next = node;
Last = node;
}
//! Adds an element at the begin of the list.
/** \param element: Element to add to the list. */
void push_front(const T& element)
{
SKListNode* node = allocator.allocate(1);
allocator.construct(node, element);
++Size;
if (First == 0)
{
Last = node;
First = node;
}
else
{
node->Next = First;
First->Prev = node;
First = node;
}
}
//! Gets first node.
/** \return A list iterator pointing to the beginning of the list. */
Iterator begin()
{
return Iterator(First);
}
//! Gets first node.
/** \return A const list iterator pointing to the beginning of the list. */
ConstIterator begin() const
{
return ConstIterator(First);
}
//! Gets end node.
/** \return List iterator pointing to null. */
Iterator end()
{
return Iterator(0);
}
//! Gets end node.
/** \return Const list iterator pointing to null. */
ConstIterator end() const
{
return ConstIterator(0);
}
//! Gets last element.
/** \return List iterator pointing to the last element of the list. */
Iterator getLast()
{
return Iterator(Last);
}
//! Gets last element.
/** \return Const list iterator pointing to the last element of the list. */
ConstIterator getLast() const
{
return ConstIterator(Last);
}
//! Inserts an element after an element.
/** \param it Iterator pointing to element after which the new element
should be inserted.
\param element The new element to be inserted into the list.
*/
void insert_after(const Iterator& it, const T& element)
{
SKListNode* node = allocator.allocate(1);
allocator.construct(node, element);
node->Next = it.Current->Next;
if (it.Current->Next)
it.Current->Next->Prev = node;
node->Prev = it.Current;
it.Current->Next = node;
++Size;
if (it.Current == Last)
Last = node;
}
//! Inserts an element before an element.
/** \param it Iterator pointing to element before which the new element
should be inserted.
\param element The new element to be inserted into the list.
*/
void insert_before(const Iterator& it, const T& element)
{
SKListNode* node = allocator.allocate(1);
allocator.construct(node, element);
node->Prev = it.Current->Prev;
if (it.Current->Prev)
it.Current->Prev->Next = node;
node->Next = it.Current;
it.Current->Prev = node;
++Size;
if (it.Current == First)
First = node;
}
//! Erases an element.
/** \param it Iterator pointing to the element which shall be erased.
\return Iterator pointing to next element. */
Iterator erase(Iterator& it)
{
// suggest changing this to a const Iterator& and
// working around line: it.Current = 0 (possibly with a mutable, or just let it be garbage?)
Iterator returnIterator(it);
++returnIterator;
if(it.Current == First)
{
First = it.Current->Next;
}
else
{
it.Current->Prev->Next = it.Current->Next;
}
if(it.Current == Last)
{
Last = it.Current->Prev;
}
else
{
it.Current->Next->Prev = it.Current->Prev;
}
allocator.destruct(it.Current);
allocator.deallocate(it.Current);
it.Current = 0;
--Size;
return returnIterator;
}
//! Swap the content of this list container with the content of another list
/** Afterward this object will contain the content of the other object and the other
object will contain the content of this object. Iterators will afterward be valid for
the swapped object.
\param other Swap content with this object */
void swap(list<T>& other)
{
core::swap(First, other.First);
core::swap(Last, other.Last);
core::swap(Size, other.Size);
core::swap(allocator, other.allocator); // memory is still released by the same allocator used for allocation
}
typedef T value_type;
typedef u32 size_type;
private:
SKListNode* First;
SKListNode* Last;
u32 Size;
irrAllocator<SKListNode> allocator;
};
} // end namespace core
}// end namespace irr
#endif

File diff suppressed because it is too large Load Diff

View File

@ -920,8 +920,10 @@ public:
if ((length+begin) > size())
length = size()-begin;
// accounting for null terminator.
s32 substrAllocLength = length + 1;
string<T> o;
o.reserve(length+1);
o.reserve(substrAllocLength);
if ( !make_lower )
{
@ -934,7 +936,7 @@ public:
o.array[i] = locale_lower ( array[i+begin] );
}
o.array[length] = 0;
o.array[substrAllocLength - 1] = 0;
o.used = length + 1;
return o;

View File

@ -61,22 +61,17 @@ typedef double f64;
#include <wchar.h>
#ifdef _IRR_WINDOWS_API_
//! Defines for s{w,n}printf_irr because s{w,n}printf methods do not match the ISO C
//! standard on Windows platforms.
//! We want int snprintf_irr(char *str, size_t size, const char *format, ...);
//! and int swprintf_irr(wchar_t *wcs, size_t maxlen, const wchar_t *format, ...);
#if defined(_MSC_VER) && _MSC_VER > 1310 && !defined (_WIN32_WCE)
#if defined(_MSC_VER)
#define swprintf_irr swprintf_s
#define snprintf_irr sprintf_s
#elif !defined(__CYGWIN__)
#define swprintf_irr _snwprintf
#define snprintf_irr _snprintf
#endif
#else
#define swprintf_irr swprintf
#define snprintf_irr snprintf
#endif // _IRR_WINDOWS_API_
#endif // _MSC_VER
namespace irr
{
@ -89,15 +84,11 @@ namespace irr
//! define a break macro for debugging.
#if defined(_DEBUG)
#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && !defined (_WIN32_WCE)
#if defined(WIN64) || defined(_WIN64) // using portable common solution for x64 configuration
#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER)
#include <crtdbg.h>
#define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) if (_CONDITION_) {_CrtDbgBreak();}
#else
#define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) if (_CONDITION_) {_asm int 3}
#endif
#else
#include "assert.h"
#include <assert.h>
#define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) assert( !(_CONDITION_) );
#endif
#else
@ -113,9 +104,9 @@ For functions: template<class T> _IRR_DEPRECATED_ void test4(void) {}
**/
#if defined(IGNORE_DEPRECATED_WARNING)
#define _IRR_DEPRECATED_
#elif _MSC_VER >= 1310 //vs 2003 or higher
#elif defined(_MSC_VER)
#define _IRR_DEPRECATED_ __declspec(deprecated)
#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) // all versions above 3.0 should support this feature
#elif defined(__GNUC__)
#define _IRR_DEPRECATED_ __attribute__ ((deprecated))
#else
#define _IRR_DEPRECATED_
@ -125,35 +116,7 @@ For functions: template<class T> _IRR_DEPRECATED_ void test4(void) {}
/** Usage in a derived class:
virtual void somefunc() _IRR_OVERRIDE_;
*/
#if ( ((__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7))) && (defined(__GXX_EXPERIMENTAL_CXX0X) || __cplusplus >= 201103L) )
#define _IRR_OVERRIDE_ override
#elif (_MSC_VER >= 1600 ) /* supported since MSVC 2010 */
#define _IRR_OVERRIDE_ override
#elif (__clang_major__ >= 3 && __has_feature(cxx_override_control))
#define _IRR_OVERRIDE_ override
#else
#define _IRR_OVERRIDE_
#endif
// memory debugging
#if defined(_DEBUG) && defined(IRRLICHT_EXPORTS) && defined(_MSC_VER) && \
(_MSC_VER > 1299) && !defined(_IRR_DONT_DO_MEMORY_DEBUGGING_HERE) && !defined(_WIN32_WCE)
#define CRTDBG_MAP_ALLOC
#define _CRTDBG_MAP_ALLOC
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#include <stdlib.h>
#include <crtdbg.h>
#define new DEBUG_CLIENTBLOCK
#endif
//! ignore VC8 warning deprecated
/** The Microsoft compiler */
#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && (_MSC_VER >= 1400)
//#pragma warning( disable: 4996)
//#define _CRT_SECURE_NO_DEPRECATE 1
//#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
//! creates four CC codes used in Irrlicht for simple ids

View File

@ -31,7 +31,6 @@
#include "IrrCompileConfig.h"
#include "aabbox3d.h"
#include "CDynamicMeshBuffer.h"
#include "CIndexBuffer.h"
#include "CMeshBuffer.h"
#include "coreutil.h"
@ -50,12 +49,9 @@
#include "EMeshWriterEnums.h"
#include "EMessageBoxFlags.h"
#include "ESceneNodeTypes.h"
#include "ETerrainElements.h"
#include "fast_atof.h"
#include "heapsort.h"
#include "IAnimatedMesh.h"
#include "IAnimatedMeshSceneNode.h"
#include "IAttributeExchangingObject.h"
#include "IAttributes.h"
#include "IBillboardSceneNode.h"
#include "IBoneSceneNode.h"
@ -63,7 +59,6 @@
#include "IContextManager.h"
#include "ICursorControl.h"
#include "IDummyTransformationSceneNode.h"
#include "IDynamicMeshBuffer.h"
#include "IEventReceiver.h"
#include "IFileList.h"
#include "IFileSystem.h"
@ -116,18 +111,14 @@
#include "IRandomizer.h"
#include "IRenderTarget.h"
#include "IrrlichtDevice.h"
#include "irrList.h"
#include "irrMap.h"
#include "irrMath.h"
#include "irrString.h"
#include "irrTypes.h"
#include "path.h"
#include "ISceneCollisionManager.h"
#include "ISceneLoader.h"
#include "ISceneManager.h"
#include "ISceneNode.h"
#include "ISceneNodeFactory.h"
#include "ISceneUserDataSerializer.h"
#include "IShaderConstantSetCallBack.h"
#include "ISkinnedMesh.h"
#include "ITexture.h"
@ -150,12 +141,10 @@
#include "SColor.h"
#include "SExposedVideoData.h"
#include "SIrrCreationParameters.h"
#include "SKeyMap.h"
#include "SLight.h"
#include "SMaterial.h"
#include "SMesh.h"
#include "SMeshBuffer.h"
#include "SSharedMeshBuffer.h"
#include "SSkinMeshBuffer.h"
#include "SVertexIndex.h"
#include "SViewFrustum.h"

View File

@ -13,26 +13,13 @@
// in between!
// byte-align structures
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
#if defined(_MSC_VER)
# pragma warning(disable: 4103)
# pragma pack( push, packing )
# pragma pack( 1 )
# define PACK_STRUCT
#elif defined( __DMC__ )
# pragma pack( push, 1 )
# define PACK_STRUCT
#elif defined( __GNUC__ )
// Using pragma pack might work with earlier gcc versions already, but
// it started to be necessary with gcc 4.7 on mingw unless compiled with -mno-ms-bitfields.
// And I found some hints on the web that older gcc versions on the other hand had sometimes
// trouble with pragma pack while they worked with __attribute__((packed)).
# if (__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7))
# pragma pack( push, packing )
# pragma pack( 1 )
# define PACK_STRUCT
# else
# define PACK_STRUCT __attribute__((packed))
#endif
#else
# error compiler not supported
#endif

View File

@ -6,14 +6,8 @@
// file belongs to irrpack.h, see there for more info
// Default alignment
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
#if defined(_MSC_VER)
# pragma pack( pop, packing )
#elif defined (__DMC__)
# pragma pack( pop )
#elif defined( __GNUC__ )
# if (__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7))
# pragma pack( pop, packing )
# endif
#endif
#undef PACK_STRUCT

View File

@ -102,6 +102,9 @@ namespace core
//! Simple operator for linearly accessing every element of the matrix.
const T& operator[](u32 index) const { return M[index]; }
//! Sets this matrix equal to the other matrix.
CMatrix4<T>& operator=(const CMatrix4<T> &other) = default;
//! Sets all elements of this matrix to the value.
inline CMatrix4<T>& operator=(const T& scalar);

View File

@ -8,6 +8,8 @@
#include "irrMath.h"
#include "dimension2d.h"
#include <functional>
namespace irr
{
namespace core
@ -414,5 +416,21 @@ public:
} // end namespace core
} // end namespace irr
namespace std
{
template<class T>
struct hash<irr::core::vector2d<T> >
{
size_t operator()(const irr::core::vector2d<T>& vec) const
{
size_t h1 = hash<T>()(vec.X);
size_t h2 = hash<T>()(vec.Y);
return (h1 << (4 * sizeof(h1)) | h1 >> (4 * sizeof(h1))) ^ h2;
}
};
}
#endif

View File

@ -7,6 +7,8 @@
#include "irrMath.h"
#include <functional>
namespace irr
{
namespace core
@ -50,8 +52,8 @@ namespace core
vector3d<T> operator/(const vector3d<T>& other) const { return vector3d<T>(X / other.X, Y / other.Y, Z / other.Z); }
vector3d<T>& operator/=(const vector3d<T>& other) { X/=other.X; Y/=other.Y; Z/=other.Z; return *this; }
vector3d<T> operator/(const T v) const { T i=(T)1.0/v; return vector3d<T>(X * i, Y * i, Z * i); }
vector3d<T>& operator/=(const T v) { T i=(T)1.0/v; X*=i; Y*=i; Z*=i; return *this; }
vector3d<T> operator/(const T v) const { return vector3d<T>(X/v, Y/v, Z/v); }
vector3d<T>& operator/=(const T v) { X/=v; Y/=v; Z/=v; return *this; }
T& operator [](u32 index)
{
@ -466,5 +468,22 @@ namespace core
} // end namespace core
} // end namespace irr
namespace std
{
template<class T>
struct hash<irr::core::vector3d<T> >
{
size_t operator()(const irr::core::vector3d<T>& vec) const
{
size_t h1 = hash<T>()(vec.X);
size_t h2 = hash<T>()(vec.Y);
size_t h3 = hash<T>()(vec.Z);
return (h1 << (5 * sizeof(h1)) | h1 >> (3 * sizeof(h1))) ^ (h2 << (2 * sizeof(h2)) | h2 >> (6 * sizeof(h2))) ^ h3;
}
};
}
#endif

View File

@ -1,2 +0,0 @@
You might have to recompile the engine to get library files in here.
Check the readme.txt in the corresponding bin folders for more information.

View File

@ -1,74 +0,0 @@
#define MAX_LIGHTS 2
precision mediump float;
/* Uniforms */
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 vTexCoord;
varying vec3 vLightVector[MAX_LIGHTS];
varying vec4 vLightColor[MAX_LIGHTS];
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 = texture2D(uTextureUnit0, vTexCoord);
vec3 Normal = texture2D(uTextureUnit1, vTexCoord).xyz * 2.0 - 1.0;
vec4 FinalColor = vec4(0.0, 0.0, 0.0, 0.0);
for (int i = 0; i < int(MAX_LIGHTS); i++)
{
vec3 LightVector = normalize(vLightVector[i]);
float Lambert = max(dot(LightVector, Normal), 0.0);
FinalColor += vec4(Lambert) * vLightColor[i];
}
FinalColor *= Color;
FinalColor.w = vLightColor[0].w;
if (bool(uFogEnable))
{
float FogFactor = computeFog();
vec4 FogColor = uFogColor;
FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor);
}
gl_FragColor = FinalColor;
}

View File

@ -1,52 +0,0 @@
#define MAX_LIGHTS 2
/* Attributes */
attribute vec3 inVertexPosition;
attribute vec3 inVertexNormal;
attribute vec3 inVertexTangent;
attribute vec3 inVertexBinormal;
attribute vec4 inVertexColor;
attribute vec2 inTexCoord0;
/* Uniforms */
uniform mat4 uWVPMatrix;
uniform mat4 uWVMatrix;
uniform vec3 uLightPosition[MAX_LIGHTS];
uniform vec4 uLightColor[MAX_LIGHTS];
/* Varyings */
varying vec2 vTexCoord;
varying vec3 vLightVector[MAX_LIGHTS];
varying vec4 vLightColor[MAX_LIGHTS];
varying float vFogCoord;
void main()
{
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
vTexCoord = inTexCoord0;
for (int i = 0; i < int(MAX_LIGHTS); i++)
{
vec3 LightVector = uLightPosition[i] - inVertexPosition;
vLightVector[i].x = dot(inVertexTangent, LightVector);
vLightVector[i].y = dot(inVertexBinormal, LightVector);
vLightVector[i].z = dot(inVertexNormal, LightVector);
vLightColor[i].x = dot(LightVector, LightVector);
vLightColor[i].x *= uLightColor[i].a;
vLightColor[i] = vec4(inversesqrt(vLightColor[i].x));
vLightColor[i] *= uLightColor[i];
vLightColor[i].a = inVertexColor.a;
vLightColor[i].x = clamp(vLightColor[i].x, 0.0, 1.0);
vLightColor[i].y = clamp(vLightColor[i].y, 0.0, 1.0);
vLightColor[i].z = clamp(vLightColor[i].z, 0.0, 1.0);
}
vFogCoord = length((uWVMatrix * vec4(inVertexPosition, 1.0)).xyz);
}

View File

@ -1,82 +0,0 @@
#define MAX_LIGHTS 2
precision mediump float;
/* Uniforms */
uniform float uFactor;
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 vTexCoord;
varying vec3 vEyeVector;
varying vec3 vLightVector[MAX_LIGHTS];
varying vec4 vLightColor[MAX_LIGHTS];
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 TempFetch = texture2D(uTextureUnit1, vTexCoord) * 2.0 - 1.0;
TempFetch *= uFactor;
vec3 EyeVector = normalize(vEyeVector);
vec2 TexCoord = EyeVector.xy * TempFetch.w + vTexCoord;
vec4 Color = texture2D(uTextureUnit0, TexCoord);
vec3 Normal = texture2D(uTextureUnit1, TexCoord).xyz * 2.0 - 1.0;
vec4 FinalColor = vec4(0.0, 0.0, 0.0, 0.0);
for (int i = 0; i < int(MAX_LIGHTS); i++)
{
vec3 LightVector = normalize(vLightVector[i]);
float Lambert = max(dot(LightVector, Normal), 0.0);
FinalColor += vec4(Lambert) * vLightColor[i];
}
FinalColor *= Color;
FinalColor.w = vLightColor[0].w;
if (bool(uFogEnable))
{
float FogFactor = computeFog();
vec4 FogColor = uFogColor;
FogColor.a = 1.0;
FinalColor = mix(FogColor, FinalColor, FogFactor);
}
gl_FragColor = FinalColor;
}

View File

@ -1,61 +0,0 @@
#define MAX_LIGHTS 2
/* Attributes */
attribute vec3 inVertexPosition;
attribute vec3 inVertexNormal;
attribute vec3 inVertexTangent;
attribute vec3 inVertexBinormal;
attribute vec4 inVertexColor;
attribute vec2 inTexCoord0;
/* Uniforms */
uniform mat4 uWVPMatrix;
uniform mat4 uWVMatrix;
uniform vec3 uEyePosition;
uniform vec3 uLightPosition[MAX_LIGHTS];
uniform vec4 uLightColor[MAX_LIGHTS];
/* Varyings */
varying vec2 vTexCoord;
varying vec3 vEyeVector;
varying vec3 vLightVector[MAX_LIGHTS];
varying vec4 vLightColor[MAX_LIGHTS];
varying float vFogCoord;
void main()
{
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
vTexCoord = inTexCoord0;
vec3 EyeVector = uEyePosition - inVertexPosition;
vEyeVector.x = dot(inVertexTangent, EyeVector);
vEyeVector.y = dot(inVertexBinormal, EyeVector);
vEyeVector.z = dot(inVertexNormal, EyeVector);
vEyeVector *= vec3(1.0, -1.0, -1.0);
for (int i = 0; i < int(MAX_LIGHTS); i++)
{
vec3 LightVector = uLightPosition[i] - inVertexPosition;
vLightVector[i].x = dot(inVertexTangent, LightVector);
vLightVector[i].y = dot(inVertexBinormal, LightVector);
vLightVector[i].z = dot(inVertexNormal, LightVector);
vLightColor[i].x = dot(LightVector, LightVector);
vLightColor[i].x *= uLightColor[i].a;
vLightColor[i] = vec4(inversesqrt(vLightColor[i].x));
vLightColor[i] *= uLightColor[i];
vLightColor[i].a = inVertexColor.a;
vLightColor[i].x = clamp(vLightColor[i].x, 0.0, 1.0);
vLightColor[i].y = clamp(vLightColor[i].y, 0.0, 1.0);
vLightColor[i].z = clamp(vLightColor[i].z, 0.0, 1.0);
}
vFogCoord = length((uWVMatrix * vec4(inVertexPosition, 1.0)).xyz);
}

View File

@ -5,25 +5,27 @@
variant=win32
[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64
libjpeg_version=2.0.6
libjpeg_version=2.1.2
libpng_version=1.6.37
zlib_version=1.2.11
mkdir -p libs
pushd libs
libs=$PWD
tmp=
[ "$variant" = win32 ] && tmp=dw2/
[ -e libjpeg.zip ] || \
wget "http://minetest.kitsunemimi.pw/libjpeg-$libjpeg_version-$variant.zip" -O libjpeg.zip
[ -e libpng.zip ] || \
wget "http://minetest.kitsunemimi.pw/libpng-$libpng_version-$variant.zip" -O libpng.zip
wget "http://minetest.kitsunemimi.pw/${tmp}libpng-$libpng_version-$variant.zip" -O libpng.zip
[ -e zlib.zip ] || \
wget "http://minetest.kitsunemimi.pw/zlib-$zlib_version-$variant.zip" -O zlib.zip
wget "http://minetest.kitsunemimi.pw/${tmp}zlib-$zlib_version-$variant.zip" -O zlib.zip
[ -d libjpeg ] || unzip -o libjpeg.zip -d libjpeg
[ -d libpng ] || unzip -o libpng.zip -d libpng
[ -d zlib ] || unzip -o zlib.zip -d zlib
popd
cmake . \
tmp=(
-DCMAKE_SYSTEM_NAME=Windows \
-DPNG_LIBRARY=$libs/libpng/lib/libpng.dll.a \
-DPNG_PNG_INCLUDE_DIR=$libs/libpng/include \
@ -31,6 +33,18 @@ cmake . \
-DJPEG_INCLUDE_DIR=$libs/libjpeg/include \
-DZLIB_LIBRARY=$libs/zlib/lib/libz.dll.a \
-DZLIB_INCLUDE_DIR=$libs/zlib/include
)
cmake . "${tmp[@]}"
make -j$(nproc)
if [ "$1" = "package" ]; then
make DESTDIR=$PWD/_install install
# strip library
"${CXX%-*}-strip" --strip-unneeded _install/usr/local/lib/*.dll
# bundle the DLLs that are specific to Irrlicht (kind of a hack)
cp -p $libs/*/bin/lib{jpeg,png}*.dll _install/usr/local/lib/
# create a ZIP
(cd _install/usr/local; zip -9r "$OLDPWD"/irrlicht-$variant.zip -- *)
fi
exit 0

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
<!--BEGIN GENERATE_TREEVIEW-->
<li class="footer">
<a href="http://irrlicht.sourceforge.net" target="_blank">Irrlicht
Engine</a> Documentation &copy; 2003-2019 by Nikolaus Gebhardt. $generatedby
<a href="http://www.doxygen.org/index.html" target="_blank">Doxygen</a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
<a href="http://irrlicht.sourceforge.net" target="_blank">Irrlicht
Engine</a> Documentation &copy; 2003-2019 by Nikolaus Gebhardt. $generatedby
<a href="http://www.doxygen.org/index.html" target="_blank">Doxygen
</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,44 +0,0 @@
mkdir ..\..\..\doctemp
mkdir ..\..\..\doctemp\html
copy doxygen.css ..\..\..\doctemp\html
copy irrlicht.png ..\..\..\doctemp\html
copy logobig.png ..\..\..\doctemp\html
rem enable following line for skipping tutorial generation (can be used for faster testing documentation layout)
rem goto SKIP_TUTS
rem for /F %%i in ('dir ..\..\..\examples\[01]*\main.cpp') DO ..\sed.exe -f tutorials.sed %i >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\01.HelloWorld\main.cpp >tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\02.Quake3Map\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\03.CustomSceneNode\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\04.Movement\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\05.UserInterface\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\06.2DGraphics\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\07.Collision\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\08.SpecialFX\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\09.MeshViewer\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\10.Shaders\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\11.PerPixelLighting\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\12.TerrainRendering\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\13.RenderToTexture\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\14.Win32Window\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\15.LoadIrrFile\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\16.Quake3MapShader\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\17.HelloWorld_Mobile\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\18.SplitScreen\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\19.MouseAndJoystick\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\20.ManagedLights\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\21.Quake3Explorer\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\22.MaterialViewer\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\23.SMeshHandling\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\24.CursorControl\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\25.XmlHandling\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\26.OcclusionQuery\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\27.PostProcessing\main.cpp >>tut.txt
..\sed.exe -f tutorials.sed ..\..\..\examples\28.CubeMapping\main.cpp >>tut.txt
:SKIP_TUTS
..\doxygen.exe doxygen.cfg
pause

View File

@ -1,20 +0,0 @@
mkdir -p ../../../doctemp/html
rm tut.txt || true;
mkdir ../../../doctemp
mkdir ../../../doctemp/html
cp doxygen.css irrlicht.png logobig.png ../../../doctemp/html
for i in ../../../examples/[012]*/main.cpp; do
sed -f tutorials.sed $i >>tut.txt;
done
# Enable for latex docs
#doxygen doxygen-pdf.cfg
# Enable for html docs
doxygen doxygen.cfg
#cp doxygen.css ../../../doctemp/html
cp irrlicht.png logobig.png ../../../doctemp/html

View File

@ -1,7 +0,0 @@
# run on single_tut.txt which is created in maketutorial.sh (or .bat)
# replace image links as we don't copy the images into example folders but keep them below media folder
# most images should be in media
s/img src="/img src="..\/..\/media\//g
# ???shots.jpg files are in media/example_screenshots another subfolder (earlier replacement already moved them to ../../media/)
s/img src="..\/..\/media\/\([0-9]\{3\}shot\)/img src="..\/..\/media\/example_screenshots\/\1/

View File

@ -1,4 +0,0 @@
REM OUTDATED - don't use this anymore. For now only maketutorial.sh works, this one still has to be updated.
REM type tut_head.html >%2
REM ..\sed.exe -f maketut.sed %1 >>%2
REM type tut_end.html >>%2

View File

@ -1,34 +0,0 @@
# Create the tutorial.html files in each example folder
# for every folder below examples
for i in ../../../examples/[0123]*; do
#for i in ../../../examples/01.*; do # if you want to run/update a single example use this loop
echo NOW doing $i
if ! [ -f "$i/main.cpp" ]; then
continue
fi
# uses the main.cpp files to create some file to use as doxygen input
sed -f tutorials.sed $i/main.cpp >single_tut.txt
# echo tutorials.sed has run
# create the html file
doxygen doxygen_tutorial.cfg
# echo doxygen has run
# Fix the image links
sed -f maketut.sed html/example???.html >tutorial.html
# echo maketut.sed has run
#move to example folder
mv tutorial.html $i/tutorial.html
# echo copied
#cleanup
rm -r html
# echo cleaned
done
#cleanup
rm single_tut.txt

View File

@ -1,5 +0,0 @@
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<p>&nbsp;</p>
</body>
</html>

View File

@ -1,228 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- Wanted to avoid copying .css to each folder, so copied default .css from doxyen in here, kicked out most stuff we don't need for examples and modified some a little bit.
Target was having a single html in each example folder which is created from the main.cpp files and needs no files besides some images below media folder.
Feel free to improve :)
-->
<style>
body, table, div, p, dl {
font: 400 14px/22px;
}
body {
background-color: #F0F0F0;
color: black;
margin-left: 5%;
margin-right: 5%;
}
p.reference, p.definition {
font: 400 14px/22px;
}
.title {
font: 400 14px/28px;
font-size: 150%;
font-weight: bold;
margin: 10px 2px;
}
h1, h2, h3, h4, h5, h6 {
-webkit-transition: text-shadow 0.5s linear;
-moz-transition: text-shadow 0.5s linear;
-ms-transition: text-shadow 0.5s linear;
-o-transition: text-shadow 0.5s linear;
transition: text-shadow 0.5s linear;
margin-right: 15px;
}
caption {
font-weight: bold;
}
h3.version {
font-size: 90%;
text-align: center;
}
a {
color: #3D578C;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
color: #4665A2;
}
a:hover {
text-decoration: underline;
}
a.el {
font-weight: bold;
}
a.code, a.code:visited, a.line, a.line:visited {
color: #4665A2;
}
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
color: #4665A2;
}
pre.fragment {
border: 1px solid #C4CFE5;
background-color: #FBFCFD;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
font-family: monospace, fixed;
font-size: 105%;
}
div.fragment {
padding: 0px;
margin: 4px 8px 4px 2px;
background-color: #FBFCFD;
border: 1px solid #C4CFE5;
}
div.line {
font-family: monospace, fixed;
font-size: 13px;
min-height: 13px;
line-height: 1.0;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
-webkit-transition-property: background-color, box-shadow;
-webkit-transition-duration: 0.5s;
-moz-transition-property: background-color, box-shadow;
-moz-transition-duration: 0.5s;
-ms-transition-property: background-color, box-shadow;
-ms-transition-duration: 0.5s;
-o-transition-property: background-color, box-shadow;
-o-transition-duration: 0.5s;
transition-property: background-color, box-shadow;
transition-duration: 0.5s;
}
div.contents {
margin-top: 10px;
margin-left: 12px;
margin-right: 8px;
}
div.center {
text-align: center;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px;
}
div.center img {
border: 0px;
}
span.keyword {
color: #008000
}
span.keywordtype {
color: #604020
}
span.keywordflow {
color: #e08000
}
span.comment {
color: #800000
}
span.preprocessor {
color: #806020
}
span.stringliteral {
color: #002080
}
span.charliteral {
color: #008080
}
blockquote {
background-color: #F7F8FB;
border-left: 2px solid #9CAFD4;
margin: 0 24px 0 4px;
padding: 0 12px 0 16px;
}
hr {
height: 0px;
border: none;
border-top: 1px solid #4A6AAA;
}
address {
font-style: normal;
color: #2A3D61;
}
div.header {
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #F9FAFC;
margin: 0px;
border-bottom: 1px solid #C4CFE5;
}
div.headertitle {
padding: 5px 5px 5px 10px;
}
.image {
text-align: center;
}
.caption {
font-weight: bold;
}
div.zoom {
border: 1px solid #90A5CE;
}
tr.heading h2 {
margin-top: 12px;
margin-bottom: 4px;
}
</style>
</head>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,13 +0,0 @@
# Page start and end are delimited by /** and **/
# we keep the end unchanged, the header is extended
s/\/\*\* Example \(0*\)\([0-9]*\) \(.*\)$/\/\*\* \\page example\1\2 Tutorial \2: \3\n \\image html \"\1\2shot.jpg\"\n \\image latex \"\1\2shot.jpg\"/
# All other comments start and end code sections
s/\([^\*]\)\*\//\1\\code/
s/^\*\//\\code/
s/\/\*\([^\*]\)/\\endcode \1/
s/\/\*$/\\endcode\n/
#remove DOS line endings
s/\r//g

Binary file not shown.

View File

@ -1,9 +0,0 @@
GNU sed version 4.0.7 - compiled for Win32.
Native executable requires only the Microsoft
C runtime MSVCRT.DLL, not an emulation layer
like Cygwin. This .EXE file was obtained from
http://unxutils.sourceforge.net on 2003-10-21.
For documentation, GPL license, source code,
etc., visit http://unxutils.sourceforge.net.
Downloaded from http://www.student.northpark.edu/pemente/sed/

View File

@ -1,324 +0,0 @@
# Copyright (c) 2007-2011 oc2pus
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments to toni@links2linux.de
# Packmangroup: Libraries
# Packmanpackagename: Irrlicht
# Packman: Toni Graffy
# norootforbuild
Name: libIrrlicht1
Version: 1.9.0
Release: 0.pm.1
Summary: The Irrlicht Engine SDK
License: see readme.txt
Group: System/Libraries
URL: http://irrlicht.sourceforge.net/
Source: irrlicht-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: freeglut-devel
BuildRequires: ImageMagick
BuildRequires: gcc-c++
%if %suse_version >= 1020
BuildRequires: Mesa-devel
%else
BuildRequires: xorg-x11-devel
%endif
BuildRequires: update-desktop-files
%description
The Irrlicht Engine is an open source high performance realtime 3d engine
written and usable in C++. It is completely cross-platform, using D3D, OpenGL
and its own software renderer, and has all of the state-of-the-art features
which can be found in commercial 3d engines.
We've got a huge active community, and there are lots of projects in
development that use the engine. You can find enhancements for Irrlicht all
over the web, like alternative terrain renderers, portal renderers, exporters,
world layers, tutorials, editors, language bindings for .NET, Java, Perl, Ruby,
Basic, Python, Lua, and so on. And best of all: It's completely free.
%package -n libIrrlicht-devel
Summary: Development package for the Irrlicht library
Group: Development/Languages/C and C++
Requires: libIrrlicht1 = %{version}
# Packmandepends: libIrrlicht1
%description -n libIrrlicht-devel
The Irrlicht Engine is an open source high performance realtime 3d engine
written and usable in C++. It is completely cross-platform, using D3D, OpenGL
and its own software renderer, and has all of the state-of-the-art features
which can be found in commercial 3d engines.
We've got a huge active community, and there are lots of projects in
development that use the engine. You can find enhancements for Irrlicht all
over the web, like alternative terrain renderers, portal renderers, exporters,
world layers, tutorials, editors, language bindings for .NET, Java, Perl, Ruby,
Basic, Python, Lua, and so on. And best of all: It's completely free.
%package -n Irrlicht-examples
Summary: Demos and examples for the Irrlicht-SDK
Group: Development/Tools/GUI Builders
Requires: libIrrlicht1 = %{version}
# Packmandepends: Irrlicht-media libIrrlicht1
%description -n Irrlicht-examples
The Irrlicht Engine is an open source high performance realtime 3d engine
written and usable in C++. It is completely cross-platform, using D3D, OpenGL
and its own software renderer, and has all of the state-of-the-art features
which can be found in commercial 3d engines.
We've got a huge active community, and there are lots of projects in
development that use the engine. You can find enhancements for Irrlicht all
over the web, like alternative terrain renderers, portal renderers, exporters,
world layers, tutorials, editors, language bindings for .NET, Java, Perl, Ruby,
Basic, Python, Lua, and so on. And best of all: It's completely free.
This package contains some demos and examples for the Irrlicht-SDK.
%package -n Irrlicht-doc
Summary: User documentation for the Irrlicht SDK.
Group: Documentation/Other
%description -n Irrlicht-doc
User documentation for the Irrlicht SDK.
You need a chm-viewer to read the docs (e.g. kchmviewer).
%package -n Irrlicht-tools
Summary: Some tools for the Irrlicht-SDK
Group: Development/Tools/GUI Builders
Requires: libIrrlicht1 = %{version}
Requires: Irrlicht-media
# Packmandepends: Irrlicht-media libIrrlicht1
%description -n Irrlicht-tools
Some tools for the Irrlicht-SDK.
GUIEditor, FontTool and Meshviewer.
%package -n Irrlicht-media
Summary: Some media files for Irrlicht SDK
Group: Development/Languages/C and C++
%description -n Irrlicht-media
Some media files for Irrlicht tools and demos.
%debug_package
%prep
%setup -q -n irrlicht-%{version}
# only for windows-platform
%__rm -r examples/14.Win32Window
# avoid irrKlang
%__sed -i -e 's|^#define USE_IRRKLANG|//#define USE_IRRKLANG|g' \
examples/Demo/CDemo.h
# adjust media path in examples
find ./examples -name *.cpp | xargs %__sed -i -e 's|../../media/|%{_datadir}/irrlicht/|g'
# adjust media path in tools
%__sed -i -e 's|../../media/|%{_datadir}/irrlicht/|g' \
tools/GUIEditor/main.cpp
# pack example-sources
tar cj \
--exclude *.cbp \
--exclude *.dev \
--exclude *.dsp \
--exclude *.dsw \
--exclude *.html \
--exclude *.sln \
--exclude *.vcproj \
-f irrlicht-examples-src.tar.bz2 examples/*
%build
# create shared-lib first
pushd source/Irrlicht
%__make sharedlib %{?_smp_mflags}
popd
# create necessary links to avoid linker-error for tools/examples
pushd lib/Linux
ln -s libIrrlicht.so.%{version} libIrrlicht.so.1
ln -s libIrrlicht.so.%{version} libIrrlicht.so
popd
# tools
pushd tools
cd GUIEditor
%__make %{?_smp_mflags}
cd ..
cd IrrFontTool/newFontTool
%__make %{?_smp_mflags}
cd ../..
popd
# examples
pushd examples
sh buildAllExamples.sh
popd
# build static lib
pushd source/Irrlicht
%__make %{?_smp_mflags}
popd
%install
%__install -dm 755 %{buildroot}%{_libdir}
%__install -m 644 lib/Linux/libIrrlicht.a \
%{buildroot}%{_libdir}
%__install -m 644 lib/Linux/libIrrlicht.so.%{version} \
%{buildroot}%{_libdir}
pushd %{buildroot}%{_libdir}
ln -s libIrrlicht.so.%{version} libIrrlicht.so.1
ln -s libIrrlicht.so.%{version} libIrrlicht.so
popd
# includes
%__install -dm 755 %{buildroot}%{_includedir}/irrlicht
%__install -m 644 include/*.h \
%{buildroot}%{_includedir}/irrlicht
# tools
%__install -dm 755 %{buildroot}%{_bindir}
%__install -m 755 tools/GUIEditor/GUIEditor \
%{buildroot}%{_bindir}/irrlicht-GUIEditor
%__install -m 755 bin/Linux/FontTool \
%{buildroot}%{_bindir}/irrlicht-FontTool
# examples
%__install -dm 755 %{buildroot}%{_bindir}
ex_list=`ls -1 bin/Linux/??.*`
for i in $ex_list; do
FE=`echo $i | awk 'BEGIN { FS="." }{ print $2 }'`
%__install -m 755 $i \
%{buildroot}%{_bindir}/irrlicht-$FE
done
# examples-docs
pushd examples
%__install -dm 755 %{buildroot}%{_docdir}/Irrlicht-examples
ex_dir=`find . -name tutorial.html`
for i in $ex_dir; do
dir_name=`dirname $i`
%__install -dm 755 %{buildroot}%{_docdir}/Irrlicht-examples/$dir_name
%__install -m 644 $i \
%{buildroot}%{_docdir}/Irrlicht-examples/$dir_name
done
%__rm -r %{buildroot}%{_docdir}/Irrlicht-examples/09.Meshviewer
popd
# examples sources
%__install -m 644 irrlicht-examples-src.tar.bz2 \
%{buildroot}%{_docdir}/Irrlicht-examples
# media
%__install -dm 755 %{buildroot}%{_datadir}/irrlicht
%__install -m 755 media/* \
%{buildroot}%{_datadir}/irrlicht
# icons
%__install -dm 755 %{buildroot}%{_datadir}/pixmaps
convert examples/09.Meshviewer/icon.ico -resize 48x48! \
irrlicht-Meshviewer.png
convert bin/Win32-gcc/irrlicht.ico -resize 48x48! \
irrlicht.png
%__install -m 644 irrlicht*.png \
%{buildroot}%{_datadir}/pixmaps
# menu-entries
%__cat > irrlicht-GUIEditor.desktop << EOF
[Desktop Entry]
Comment=Irrlicht GUI Editor
Name=Irrlicht GUI Editor
GenericName=
Type=Application
Exec=irrlicht-GUIEditor
Icon=irrlicht.png
DocPath=
Terminal=0
EOF
%suse_update_desktop_file -i irrlicht-GUIEditor Development GUIDesigner
%__cat > irrlicht-FontTool.desktop << EOF
[Desktop Entry]
Comment=Irrlicht-FontTool
Name=Irrlicht-FontTool
GenericName=
Type=Application
Exec=irrlicht-IrrFontTool
Icon=irrlicht.png
DocPath=
Terminal=0
EOF
%suse_update_desktop_file -i irrlicht-FontTool Development GUIDesigner
%__cat > irrlicht-Meshviewer.desktop << EOF
[Desktop Entry]
Comment=Irrlicht-Meshviewer
Name=Irrlicht-Meshviewer
GenericName=
Type=Application
Exec=irrlicht-Meshviewer
Icon=irrlicht-Meshviewer.png
DocPath=
Terminal=1
EOF
%suse_update_desktop_file -i irrlicht-Meshviewer Graphics Viewer
%clean
[ -d %{buildroot} -a "%{buildroot}" != "" ] && %__rm -rf %{buildroot}
%files
%defattr(-, root, root)
%doc *.txt
%{_libdir}/lib*.so.*
%files -n libIrrlicht-devel
%defattr(-, root, root)
%{_libdir}/lib*.so
%{_libdir}/lib*.a
%dir %{_includedir}/irrlicht
%{_includedir}/irrlicht/*.h
%files -n Irrlicht-examples
%defattr(-, root, root)
%dir %{_docdir}/Irrlicht-examples
%{_docdir}/Irrlicht-examples/*
%exclude %{_bindir}/irrlicht-GUIEditor
%exclude %{_bindir}/irrlicht-FontTool
%exclude %{_bindir}/irrlicht-Meshviewer
%{_bindir}/irrlicht-*
%files -n Irrlicht-tools
%defattr(-, root, root)
%doc examples/09.Meshviewer/tutorial.html
%{_bindir}/irrlicht-GUIEditor
%{_bindir}/irrlicht-FontTool
%{_bindir}/irrlicht-Meshviewer
%{_datadir}/applications/irrlicht-GUIEditor.desktop
%{_datadir}/applications/irrlicht-FontTool.desktop
%{_datadir}/applications/irrlicht-Meshviewer.desktop
%{_datadir}/pixmaps/irrlicht*.png
%files -n Irrlicht-doc
%defattr(-, root, root)
%doc doc/irrlicht.chm
%doc doc/*.txt
%files -n Irrlicht-media
%defattr(-, root, root)
%dir %{_datadir}/irrlicht
%{_datadir}/irrlicht/*
%changelog
* Wed Jun 20 2007 Toni Graffy <toni@links2linux.de> - 1.3.1-0.pm.1
- update to 1.3.1
* Sat Jun 16 2007 Toni Graffy <toni@links2linux.de> - 1.3-0.pm.1
- initial build 1.3

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="2386F932-20DF-4969-AC74-D8E599723083"><config><identifier>org.irrlichtengine.irrlichtEngineV151.irrlicht.pkg</identifier><version>1</version><description></description><post-install type="none"/><requireAuthorization/><installFrom includeRoot="true">/Library/Frameworks/Irrlicht.framework</installFrom><installTo>/Library/Frameworks</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>parent</mod><mod>requireAuthorization</mod><mod>extraFiles</mod><mod>version</mod><mod>installTo</mod><mod>identifier</mod></config><contents><file-list>01irrlicht-contents.xml</file-list><component id="org.irrlichtengine.Irrlicht" path="/Library/Frameworks/Irrlicht.framework" version="1.6"><component id="org.irrlichtengine.Irrlicht" path="/Library/Frameworks/Irrlicht.framework/Versions/1.5" version="1.6"/></component><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents><extra-files/></pkgref>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="39601D70-59FA-4C66-9AFF-A8523FAD4C7D"><config><identifier>com.irrlicht.irrlichtEngineV151.html.pkg</identifier><version>1</version><description></description><post-install type="none"/><installFrom relative="true">../../../doctemp/html</installFrom><installTo mod="true">/private/tmp/Irrlicht1.5.1-install/doc/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>parent</mod><mod>scripts.postinstall.path</mod><mod>requireAuthorization</mod><mod>installTo.isAbsoluteType</mod><mod>scripts.postinstall.isRelativeType</mod><mod>installFrom.isRelativeType</mod><mod>installTo.path</mod><mod>version</mod><mod>installTo</mod></config><contents><file-list>02html-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="C29A053C-0445-485A-8194-7261BB730C44"><config><identifier>com.irrlicht.irrlichtEngineV151.media.pkg</identifier><version>1</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/gazdavidson/svn/irr1.5/media</installFrom><installTo mod="true">/private/tmp/Irrlicht1.5.1-install/media/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>parent</mod><mod>installTo.path</mod><mod>installTo</mod></config><contents><file-list>03media-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="90910AF1-E4E6-4A7B-BE2C-D5651EB803FD"><config><identifier>com.irrlicht.irrlichtEngineV151.tools.pkg</identifier><version>1</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/gazdavidson/svn/irr1.5/tools</installFrom><installTo mod="true">/private/tmp/Irrlicht1.5.1-install/tools/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>parent</mod><mod>installTo.path</mod><mod>installTo</mod></config><contents><file-list>05tools-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pkg-contents spec="1.12"><f n="changes.txt" o="gazdavidson" g="staff" p="33188" pt="/Users/gazdavidson/svn/irr1.5/changes.txt" m="false" t="file"/></pkg-contents>

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="6023EA57-F1C6-45DA-B563-D72F5E02D7EA"><config><identifier>com.irrlicht.irrlichtEngineV151.changes.pkg</identifier><version>1</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/gazdavidson/svn/irr1.5/changes.txt</installFrom><installTo mod="true">/private/tmp/Irrlicht1.5.1-install/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>parent</mod><mod>installTo.path</mod><mod>installTo</mod></config><contents><file-list>07changes-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>

View File

@ -1 +0,0 @@
<pkg-contents spec="1.12"><f n="readme.txt" o="gazdavidson" g="staff" p="33188" pt="/Users/gazdavidson/svn/irr1.5/readme.txt" m="false" t="file"/></pkg-contents>

View File

@ -1 +0,0 @@
<pkgref spec="1.12" uuid="C1B685D8-ECDF-4CE4-A672-82B0F1C0EC80"><config><identifier>com.irrlicht.irrlichtEngineV151.readme.pkg</identifier><version>1</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/gazdavidson/svn/irr1.5/readme.txt</installFrom><installTo mod="true">/private/tmp/Irrlicht1.5.1-install/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>parent</mod><mod>scripts.postinstall.path</mod><mod>scripts.postupgrade.isRelativeType</mod><mod>scripts.postupgrade.path</mod><mod>installTo.path</mod><mod>installTo</mod></config><scripts><postinstall relative="true" mod="true">moveAll.sh</postinstall><postupgrade relative="true" mod="true">moveAll.sh</postupgrade></scripts><contents><file-list>08readme-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>

View File

@ -1,47 +0,0 @@
<pkmkdoc spec="1.12"><properties><title>Irrlicht Engine v1.5.1</title><build>/Users/gazdavidson/Desktop/installer/Irrlicht v1.5.1.mpkg</build><organization>com.irrlicht</organization><userSees ui="easy"/><min-target os="2"/><domain system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="Irrlicht.framework" id="installframework" description="This is required, unless you want to build from source." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="org.irrlichtengine.irrlichtEngineV151.irrlicht.pkg"/></choice><choice title="Documentation" id="installdocs" description="This will install the documentation" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.irrlicht.irrlichtEngineV151.html.pkg"/></choice><choice title="Example media" id="installmedia" description="The media for the examples, without this the examples will not run." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.irrlicht.irrlichtEngineV151.media.pkg"/></choice><choice title="Examples" id="installexamples" description="The examples, which you'll need if you want to get started." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.irrlicht.irrlichtEngineV151.examples.pkg"/></choice><choice title="Tools" id="installtools" description="Some useful tools; GUI editor, mesh converter and bitmap font generator" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.irrlicht.irrlichtEngineV151.tools.pkg"/></choice><choice title="Source code" id="installsource" description="The complete source code to the Irrlicht Engine, this allows you to make changes to the core and make your own custom versions of Irrlicht." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.irrlicht.irrlichtEngineV151.source.pkg"/></choice><choice title="changes" id="installchangelog" starts_selected="true" starts_enabled="true" starts_hidden="true"><pkgref id="com.irrlicht.irrlichtEngineV151.changes.pkg"/></choice><choice title="readme" id="installreadme" starts_selected="true" starts_enabled="true" starts_hidden="true"><pkgref id="com.irrlicht.irrlichtEngineV151.readme.pkg"/></choice></contents><resources bg-scale="none" bg-align="topleft"><locale lang="en"><resource mime-type="text/rtf" kind="embedded" type="license"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
{\fonttbl\f0\fnil\fcharset0 Verdana;}
{\colortbl;\red255\green255\blue255;}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
\deftab720
\pard\pardeftab720\sl320\sa220\ql\qnatural
\f0\fs22 \cf0 The Irrlicht Engine License\
Copyright \'a9 2002-2009 Nikolaus Gebhardt\
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.\
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\
\pard\tx220\tx720\pardeftab720\li720\fi-720\sl320\ql\qnatural
\ls1\ilvl0\cf0 {\listtext 1. }The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\
{\listtext 2. }Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\
{\listtext 3. }This notice may not be removed or altered from any source distribution.}]]></resource><resource mime-type="text/rtf" kind="embedded" type="readme"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\f0\fs26 \cf0 The Irrlicht Engine is a cross platform, high performance 3D scene graph API for C++ programmers.\
\
This package contains:\
\
* The library runtime. This installs to /Library/Frameworks/Irrlicht.framework and allows you to create and run Irrlicht 3D applications.\
\
* The examples and project files, which will allow you to get started developing Irrlicht applications.\
\
* The documentation, which is also available online at http://irrlicht.sourceforge.net/\
\
* The source to the engine, so that you can modify the engine itself.}]]></resource></locale><locale lang="fr"><resource mime-type="text/rtf" kind="embedded" type="readme"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;}
\deftab720
\pard\pardeftab720\ql\qnatural
\f0\fs24 \cf0 Le moteur Irrlicht est une API de rendu 3D tr\'e8s performante pour les programmeurs C++.\
\
Ce paquet contient:\
\
* La biblioth\'e8que de runtime. Ceci s'installe vers /Library/Frameworks/Irrlicht.framework et vous permet de cr\'e9er et de lancer des applications Irrlicht, notamment en 3d.\
\
* Les exemples et les projets, qui vous permettront de commencer \'e0 d\'e9velopper des applications Irrlicht.\
\
* La documentation, qui est aussi disponible sur http://irrlicht.sourceforge.net/\
\
* Les sources du moteur, afin que vous puissiez modifier le moteur vous-m\'eame.}]]></resource></locale></resources><flags/><extra-files/><item type="file">01irrlicht.xml</item><item type="file">02html.xml</item><item type="file">03media.xml</item><item type="file">04examples.xml</item><item type="file">05tools.xml</item><item type="file">06source.xml</item><item type="file">07changes.xml</item><item type="file">08readme.xml</item><mod>properties.userDomain</mod><mod>properties.systemDomain</mod><mod>properties.anywhereDomain</mod><mod>properties.customizeOption</mod><mod>extraFiles</mod><mod>properties.title</mod></pkmkdoc>

View File

@ -1,6 +0,0 @@
#!/bin/sh
mkdir -p $HOME/Irrlicht1.6.0/
chmod a+rw $HOME/Irrlicht1.6.0
find /private/tmp/Irrlicht1.6.0-install -exec chmod a+rw {} \;
cp -rfp /private/tmp/Irrlicht1.6.0-install/ $HOME/Irrlicht1.6.0/
rm -Rf /private/tmp/Irrlicht1.6.0-install

View File

@ -1,28 +0,0 @@
This is the source package for the Irrlicht framework installer.
Build steps are as follows-
1) Remove the framework so you don't accidentally package more than one version, if you use the GUI to do this empty the trash so XCode doesn't build to the trash! It's best to run this command from the console:
rm -Rf /Library/Frameworks/Irrlicht.framework
2) Build the library and the binaries.
* Navigate to source/Irrlicht/MacOSX and open the XCode project
* Choose release mode and build Irrlicht.framework
** For the moment it's not worth installing the sample binaries, they can't be launched due to console input
3) Build the documentation
* Open the console and navigate to scripts/doc/irrlicht
* Make sure you have doxygen installed. If you have Aptitude for OSX then type:
sudo apt-get install doxygen
* Now run the makedocumentation bash script:
./makedocumentation.sh
4) Now double click the package file and build it.

View File

@ -192,7 +192,7 @@ IMesh * CAnimatedMeshSceneNode::getMeshForCurrentFrame()
// As multiple scene nodes may be sharing the same skinned mesh, we have to
// re-animate it every frame to ensure that this node gets the mesh that it needs.
CSkinnedMesh* skinnedMesh = reinterpret_cast<CSkinnedMesh*>(Mesh);
CSkinnedMesh* skinnedMesh = static_cast<CSkinnedMesh*>(Mesh);
if (JointMode == EJUOR_CONTROL)//write to mesh
skinnedMesh->transferJointsToMesh(JointChildSceneNodes);
@ -343,8 +343,8 @@ void CAnimatedMeshSceneNode::render()
// show normals
if (DebugDataVisible & scene::EDS_NORMALS)
{
const f32 debugNormalLength = SceneManager->getParameters()->getAttributeAsFloat(DEBUG_NORMAL_LENGTH);
const video::SColor debugNormalColor = SceneManager->getParameters()->getAttributeAsColor(DEBUG_NORMAL_COLOR);
const f32 debugNormalLength = 1.f;
const video::SColor debugNormalColor = video::SColor(255, 34, 221, 221);
const u32 count = m->getMeshBufferCount();
// draw normals
@ -652,54 +652,6 @@ bool CAnimatedMeshSceneNode::isReadOnlyMaterials() const
}
//! Writes attributes of the scene node.
void CAnimatedMeshSceneNode::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
{
IAnimatedMeshSceneNode::serializeAttributes(out, options);
if (options && (options->Flags&io::EARWF_USE_RELATIVE_PATHS) && options->Filename)
{
const io::path path = SceneManager->getFileSystem()->getRelativeFilename(
SceneManager->getFileSystem()->getAbsolutePath(SceneManager->getMeshCache()->getMeshName(Mesh).getPath()),
options->Filename);
out->addString("Mesh", path.c_str());
}
else
out->addString("Mesh", SceneManager->getMeshCache()->getMeshName(Mesh).getPath().c_str());
out->addBool("Looping", Looping);
out->addBool("ReadOnlyMaterials", ReadOnlyMaterials);
out->addFloat("FramesPerSecond", FramesPerSecond);
out->addInt("StartFrame", StartFrame);
out->addInt("EndFrame", EndFrame);
}
//! Reads attributes of the scene node.
void CAnimatedMeshSceneNode::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
IAnimatedMeshSceneNode::deserializeAttributes(in, options);
io::path oldMeshStr = SceneManager->getMeshCache()->getMeshName(Mesh);
io::path newMeshStr = in->getAttributeAsString("Mesh");
Looping = in->getAttributeAsBool("Looping");
ReadOnlyMaterials = in->getAttributeAsBool("ReadOnlyMaterials");
FramesPerSecond = in->getAttributeAsFloat("FramesPerSecond");
StartFrame = in->getAttributeAsInt("StartFrame");
EndFrame = in->getAttributeAsInt("EndFrame");
if (newMeshStr != "" && oldMeshStr != newMeshStr)
{
IAnimatedMesh* newAnimatedMesh = SceneManager->getMesh(newMeshStr.c_str());
if (newAnimatedMesh)
setMesh(newAnimatedMesh);
}
// TODO: read animation names instead of frame begin and ends
}
//! Sets a new mesh
void CAnimatedMeshSceneNode::setMesh(IAnimatedMesh* mesh)
{
@ -795,7 +747,7 @@ void CAnimatedMeshSceneNode::animateJoints(bool CalculateAbsolutePositions)
checkJoints();
const f32 frame = getFrameNr(); //old?
CSkinnedMesh* skinnedMesh=reinterpret_cast<CSkinnedMesh*>(Mesh);
CSkinnedMesh* skinnedMesh=static_cast<CSkinnedMesh*>(Mesh);
skinnedMesh->transferOnlyJointsHintsToMesh( JointChildSceneNodes );
skinnedMesh->animateMesh(frame, 1.0f);

View File

@ -114,12 +114,6 @@ namespace scene
//! Returns the current mesh
virtual IAnimatedMesh* getMesh(void) _IRR_OVERRIDE_ { return Mesh; }
//! Writes attributes of the scene node.
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_;
//! Reads attributes of the scene node.
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_;
//! Returns type of the scene node
virtual ESCENE_NODE_TYPE getType() const _IRR_OVERRIDE_ { return ESNT_ANIMATED_MESH; }

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