mirror of
https://github.com/minetest/minetest.git
synced 2024-08-20 13:34:17 +02:00
319 lines
11 KiB
C
319 lines
11 KiB
C
|
/* irrlicht.h -- interface of the 'Irrlicht Engine'
|
||
|
|
||
|
Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||
|
|
||
|
This software is provided 'as-is', without any express or implied
|
||
|
warranty. In no event will the authors be held liable for any damages
|
||
|
arising from the use of this software.
|
||
|
|
||
|
Permission is granted to anyone to use this software for any purpose,
|
||
|
including commercial applications, and to alter it and redistribute it
|
||
|
freely, subject to the following restrictions:
|
||
|
|
||
|
1. The origin of this software must not be misrepresented; you must not
|
||
|
claim that you wrote the original software. If you use this software
|
||
|
in a product, an acknowledgment in the product documentation would be
|
||
|
appreciated but is not required.
|
||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||
|
misrepresented as being the original software.
|
||
|
3. This notice may not be removed or altered from any source distribution.
|
||
|
|
||
|
Please note that the Irrlicht Engine is based in part on the work of the
|
||
|
Independent JPEG Group, the zlib and the libPng. This means that if you use
|
||
|
the Irrlicht Engine in your product, you must acknowledge somewhere in your
|
||
|
documentation that you've used the IJG code. It would also be nice to mention
|
||
|
that you use the Irrlicht Engine, the zlib and libPng. See the README files
|
||
|
in the jpeglib, the zlib and libPng for further information.
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "aabbox3d.h"
|
||
|
#include "CMeshBuffer.h"
|
||
|
#include "coreutil.h"
|
||
|
#include "dimension2d.h"
|
||
|
#include "ECullingTypes.h"
|
||
|
#include "EDebugSceneTypes.h"
|
||
|
#include "EDriverFeatures.h"
|
||
|
#include "EDriverTypes.h"
|
||
|
#include "EGUIAlignment.h"
|
||
|
#include "EGUIElementTypes.h"
|
||
|
#include "EHardwareBufferFlags.h"
|
||
|
#include "EMaterialProps.h"
|
||
|
#include "EMaterialTypes.h"
|
||
|
#include "ESceneNodeTypes.h"
|
||
|
#include "fast_atof.h"
|
||
|
#include "IAnimatedMesh.h"
|
||
|
#include "IAnimatedMeshSceneNode.h"
|
||
|
#include "IAttributes.h"
|
||
|
#include "IBillboardSceneNode.h"
|
||
|
#include "IBoneSceneNode.h"
|
||
|
#include "ICameraSceneNode.h"
|
||
|
#include "IContextManager.h"
|
||
|
#include "ICursorControl.h"
|
||
|
#include "IDummyTransformationSceneNode.h"
|
||
|
#include "IEventReceiver.h"
|
||
|
#include "IFileList.h"
|
||
|
#include "IFileSystem.h"
|
||
|
#include "IGPUProgrammingServices.h"
|
||
|
#include "IGUIButton.h"
|
||
|
#include "IGUICheckBox.h"
|
||
|
#include "IGUIComboBox.h"
|
||
|
#include "IGUIEditBox.h"
|
||
|
#include "IGUIElement.h"
|
||
|
#include "IGUIEnvironment.h"
|
||
|
#include "IGUIFileOpenDialog.h"
|
||
|
#include "IGUIFont.h"
|
||
|
#include "IGUIFontBitmap.h"
|
||
|
#include "IGUIImage.h"
|
||
|
#include "IGUIListBox.h"
|
||
|
#include "IGUIScrollBar.h"
|
||
|
#include "IGUISkin.h"
|
||
|
#include "IGUISpriteBank.h"
|
||
|
#include "IGUIStaticText.h"
|
||
|
#include "IGUITabControl.h"
|
||
|
#include "IGUIToolbar.h"
|
||
|
#include "IImage.h"
|
||
|
#include "IImageLoader.h"
|
||
|
#include "IImageWriter.h"
|
||
|
#include "IIndexBuffer.h"
|
||
|
#include "ILogger.h"
|
||
|
#include "IMaterialRenderer.h"
|
||
|
#include "IMaterialRendererServices.h"
|
||
|
#include "IMesh.h"
|
||
|
#include "IMeshBuffer.h"
|
||
|
#include "IMeshCache.h"
|
||
|
#include "IMeshLoader.h"
|
||
|
#include "IMeshManipulator.h"
|
||
|
#include "IMeshSceneNode.h"
|
||
|
#include "IOSOperator.h"
|
||
|
#include "IReadFile.h"
|
||
|
#include "IReferenceCounted.h"
|
||
|
#include "irrArray.h"
|
||
|
#include "IRenderTarget.h"
|
||
|
#include "IrrlichtDevice.h"
|
||
|
#include "irrMath.h"
|
||
|
#include "irrString.h"
|
||
|
#include "irrTypes.h"
|
||
|
#include "path.h"
|
||
|
#include "ISceneCollisionManager.h"
|
||
|
#include "ISceneManager.h"
|
||
|
#include "ISceneNode.h"
|
||
|
#include "IShaderConstantSetCallBack.h"
|
||
|
#include "ISkinnedMesh.h"
|
||
|
#include "ITexture.h"
|
||
|
#include "ITimer.h"
|
||
|
#include "IVertexBuffer.h"
|
||
|
#include "IVideoDriver.h"
|
||
|
#include "IWriteFile.h"
|
||
|
#include "Keycodes.h"
|
||
|
#include "line2d.h"
|
||
|
#include "line3d.h"
|
||
|
#include "matrix4.h"
|
||
|
#include "plane3d.h"
|
||
|
#include "position2d.h"
|
||
|
#include "quaternion.h"
|
||
|
#include "rect.h"
|
||
|
#include "S3DVertex.h"
|
||
|
#include "SAnimatedMesh.h"
|
||
|
#include "SceneParameters.h"
|
||
|
#include "SColor.h"
|
||
|
#include "SExposedVideoData.h"
|
||
|
#include "SIrrCreationParameters.h"
|
||
|
#include "SMaterial.h"
|
||
|
#include "SMesh.h"
|
||
|
#include "SMeshBuffer.h"
|
||
|
#include "SSkinMeshBuffer.h"
|
||
|
#include "SVertexIndex.h"
|
||
|
#include "SViewFrustum.h"
|
||
|
#include "vector2d.h"
|
||
|
#include "vector3d.h"
|
||
|
#include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV
|
||
|
|
||
|
/*! \mainpage Irrlicht Engine 1.9 API documentation
|
||
|
*
|
||
|
* <div align="center"><img src="logobig.png" ></div>
|
||
|
*
|
||
|
* \section intro Introduction
|
||
|
*
|
||
|
* Welcome to the Irrlicht Engine API documentation.
|
||
|
* Here you'll find any information you'll need to develop applications with
|
||
|
* the Irrlicht Engine. If you are looking for a tutorial on how to start, you'll
|
||
|
* find some on the homepage of the Irrlicht Engine at
|
||
|
* <A HREF="http://irrlicht.sourceforge.net" >irrlicht.sourceforge.net</A>
|
||
|
* or inside the SDK in the examples directory.
|
||
|
*
|
||
|
* The Irrlicht Engine is intended to be an easy-to-use 3d engine, so
|
||
|
* this documentation is an important part of it. If you have any questions or
|
||
|
* suggestions, just send a email to the author of the engine, Nikolaus Gebhardt
|
||
|
* (niko (at) irrlicht3d.org).
|
||
|
*
|
||
|
*
|
||
|
* \section links Links
|
||
|
*
|
||
|
* <A HREF="namespaces.html">Namespaces</A>: A very good place to start reading
|
||
|
* the documentation.<BR>
|
||
|
* <A HREF="annotated.html">Class list</A>: List of all classes with descriptions.<BR>
|
||
|
* <A HREF="functions.html">Class members</A>: Good place to find forgotten features.<BR>
|
||
|
*
|
||
|
* \section irrexample Short example
|
||
|
*
|
||
|
* A simple application, starting up the engine, loading a Quake 2 animated
|
||
|
* model file and the corresponding texture, animating and displaying it
|
||
|
* in front of a blue background and placing a user controlable 3d camera
|
||
|
* would look like the following code. I think this example shows the usage
|
||
|
* of the engine quite well:
|
||
|
*
|
||
|
* \code
|
||
|
* #include <irrlicht.h>
|
||
|
* using namespace irr;
|
||
|
*
|
||
|
* int main()
|
||
|
* {
|
||
|
* // start up the engine
|
||
|
* IrrlichtDevice *device = createDevice(video::EDT_OPENGL,
|
||
|
* core::dimension2d<u32>(640,480));
|
||
|
*
|
||
|
* video::IVideoDriver* driver = device->getVideoDriver();
|
||
|
* scene::ISceneManager* scenemgr = device->getSceneManager();
|
||
|
*
|
||
|
* device->setWindowCaption(L"Hello World!");
|
||
|
*
|
||
|
* // load and show quake2 .md2 model
|
||
|
* scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode(
|
||
|
* scenemgr->getMesh("quake2model.md2"));
|
||
|
*
|
||
|
* // if everything worked, add a texture and disable lighting
|
||
|
* if (node)
|
||
|
* {
|
||
|
* node->setMaterialTexture(0, driver->getTexture("texture.bmp"));
|
||
|
* node->setMaterialFlag(video::EMF_LIGHTING, false);
|
||
|
* }
|
||
|
*
|
||
|
* // add a first person shooter style user controlled camera
|
||
|
* scenemgr->addCameraSceneNodeFPS();
|
||
|
*
|
||
|
* // draw everything
|
||
|
* while(device->run() && driver)
|
||
|
* {
|
||
|
* driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,0,0,255));
|
||
|
* scenemgr->drawAll();
|
||
|
* driver->endScene();
|
||
|
* }
|
||
|
*
|
||
|
* // delete device
|
||
|
* device->drop();
|
||
|
* return 0;
|
||
|
* }
|
||
|
* \endcode
|
||
|
*
|
||
|
* Irrlicht can load a lot of file formats automatically, see irr::scene::ISceneManager::getMesh()
|
||
|
* for a detailed list. So if you would like to replace the simple blue screen background by
|
||
|
* a cool Quake 3 Map, optimized by an octree, just insert this code
|
||
|
* somewhere before the while loop:
|
||
|
*
|
||
|
* \code
|
||
|
* // add .pk3 archive to the file system
|
||
|
* device->getFileSystem()->addZipFileArchive("quake3map.pk3");
|
||
|
*
|
||
|
* // load .bsp file and show it using an octree
|
||
|
* scenemgr->addOctreeSceneNode(
|
||
|
* scenemgr->getMesh("quake3map.bsp"));
|
||
|
* \endcode
|
||
|
*
|
||
|
* As you can see, the engine uses namespaces. Everything in the engine is
|
||
|
* placed into the namespace 'irr', but there are also 5 sub namespaces.
|
||
|
* You can find a list of all namespaces with descriptions at the
|
||
|
* <A HREF="namespaces.html"> namespaces page</A>.
|
||
|
* This is also a good place to start reading the documentation. If you
|
||
|
* don't want to write the namespace names all the time, just use all namespaces like
|
||
|
* this:
|
||
|
* \code
|
||
|
* using namespace core;
|
||
|
* using namespace scene;
|
||
|
* using namespace video;
|
||
|
* using namespace io;
|
||
|
* using namespace gui;
|
||
|
* \endcode
|
||
|
*
|
||
|
* There is a lot more the engine can do, but I hope this gave a short
|
||
|
* overview over the basic features of the engine. For more examples, please take
|
||
|
* a look into the examples directory of the SDK.
|
||
|
*/
|
||
|
|
||
|
#include "SIrrCreationParameters.h"
|
||
|
|
||
|
//! Everything in the Irrlicht Engine can be found in this namespace.
|
||
|
namespace irr
|
||
|
{
|
||
|
//! Creates an Irrlicht device. The Irrlicht device is the root object for using the engine.
|
||
|
/** If you need more parameters to be passed to the creation of the Irrlicht Engine device,
|
||
|
use the createDeviceEx() function.
|
||
|
\param driverType: Type of the video driver to use.
|
||
|
\param windowSize: Size of the window or the video mode in fullscreen mode.
|
||
|
\param bits: Bits per pixel in fullscreen mode. Ignored if windowed mode.
|
||
|
\param fullscreen: Should be set to true if the device should run in fullscreen. Otherwise
|
||
|
the device runs in windowed mode.
|
||
|
\param stencilbuffer: Specifies if the stencil buffer should be enabled. Set this to true,
|
||
|
if you want the engine be able to draw stencil buffer shadows. Note that not all
|
||
|
devices are able to use the stencil buffer. If they don't no shadows will be drawn.
|
||
|
\param vsync: Specifies vertical synchronization: If set to true, the driver will wait
|
||
|
for the vertical retrace period, otherwise not.
|
||
|
\param receiver: A user created event receiver.
|
||
|
\return Returns pointer to the created IrrlichtDevice or null if the
|
||
|
device could not be created.
|
||
|
*/
|
||
|
extern "C" IRRLICHT_API IrrlichtDevice *IRRCALLCONV createDevice(
|
||
|
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL,
|
||
|
// parentheses are necessary for some compilers
|
||
|
const core::dimension2d<u32> &windowSize = (core::dimension2d<u32>(640, 480)),
|
||
|
u32 bits = 32,
|
||
|
bool fullscreen = false,
|
||
|
bool stencilbuffer = true,
|
||
|
bool vsync = false,
|
||
|
IEventReceiver *receiver = 0);
|
||
|
|
||
|
//! Creates an Irrlicht device with the option to specify advanced parameters.
|
||
|
/** Usually you should used createDevice() for creating an Irrlicht Engine device.
|
||
|
Use this function only if you wish to specify advanced parameters like a window
|
||
|
handle in which the device should be created.
|
||
|
\param parameters: Structure containing advanced parameters for the creation of the device.
|
||
|
See irr::SIrrlichtCreationParameters for details.
|
||
|
\return Returns pointer to the created IrrlichtDevice or null if the
|
||
|
device could not be created. */
|
||
|
extern "C" IRRLICHT_API IrrlichtDevice *IRRCALLCONV createDeviceEx(
|
||
|
const SIrrlichtCreationParameters ¶meters);
|
||
|
|
||
|
// THE FOLLOWING IS AN EMPTY LIST OF ALL SUB NAMESPACES
|
||
|
// EXISTING ONLY FOR THE DOCUMENTATION SOFTWARE DOXYGEN.
|
||
|
|
||
|
//! Basic classes such as vectors, planes, arrays, lists, and so on can be found in this namespace.
|
||
|
namespace core
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//! The gui namespace contains useful classes for easy creation of a graphical user interface.
|
||
|
namespace gui
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//! This namespace provides interfaces for input/output: Reading and writing files, accessing zip archives, ...
|
||
|
namespace io
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//! All scene management can be found in this namespace: Mesh loading, special scene nodes like octrees and billboards, ...
|
||
|
namespace scene
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//! The video namespace contains classes for accessing the video driver. All 2d and 3d rendering is done here.
|
||
|
namespace video
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*! \file irrlicht.h
|
||
|
\brief Main header file of the irrlicht, the only file needed to include.
|
||
|
*/
|