/*!****************************************************************************

 @file         PVRTools.h
 @copyright    Copyright (c) Imagination Technologies Limited.
 @brief        Header file to include a particular API tools header

******************************************************************************/
#ifndef PVRTOOLS_H
#define PVRTOOLS_H

/*****************************************************************************/
/*! @mainpage PVRTools
******************************************************************************

 \tableofcontents 
 
 @section overview Overview
*****************************

PVRTools is a collection of source code to help developers with some common
tasks which are frequently used in 3D programming.
PVRTools supplies code for mathematical operations, matrix handling,
loading 3D models and to optimise geometry.
Sections which are specific to certain APIs contain code for displaying text and loading textures.


 @section fileformats File formats
*****************************
The following file formats are used in PVRTools:

 @subsection PFX_format PFX format
*****************************
PFX (PowerVR Effects) files are used to store graphics effects. As a minimum, a correctly formatted PFX consists of:
 \li One EFFECT block
 \li One VERTEXSHADER block
 \li One FRAGMENTSHADER block
 
It is also possible for PFXs to contain the following:
 \li One TARGET block
 \li Zero or more TEXTURE blocks

By default PFXs are stored in .pfx files. It is possible for multiple PFXs to exist within a single .pfx file, 
each described by a separate effect block; in this instance multiple PFXs may share blocks.
Finally, it is possible for a PFX to reference a TARGET block as an input as if it were a TEXTURE block, 
enabling the simple creation of complex post-processing effects.  For this to function correctly the TARGET 
block render should be completed prior to being read as an input.  If the TARGET block render has not been 
completed prior to being read as an input, the behaviour will vary based on the render target implementation of the platform.

For more information see the <em>PFX File Format Specification</em>.

 @subsection POD_format POD format
*****************************
POD files store data for representing 3D scenes; including geometry information, animations, matrices, materials, skinning data, lights, cameras, and in some instances custom meta-data.  
These files are output by the PVRGeoPOD tool, and are designed for deployment through optimistions such as triangle/vertex sorting and data stripping.

The format is designed to be easily read, for information on the required algorithm and the overall structure of the format see the <em>POD File Format Specification</em>. 

 @subsection PVR_format PVR format
*****************************
PVR files are used as a container to store texture data. PVR files can be exported from PVRTexTool and a number of third party applications.

For more information see the <em>PVR File Format Specification</em>.

 @section files Header files
*****************************

Here is a list of common header files present in PVRTools:

 \li PVRTArray.h: A dynamic, resizable template class.

 \li PVRTBackground.h: Create a textured background.

 \li PVRTBoneBatch.h: Group vertices per bones to allow skinning when the maximum number of bones is limited.

 \li PVRTDecompress.h: Descompress PVRTC texture format.

 \li PVRTError.h: Error codes and tools output debug.

 \li PVRTFixedPoint.h: Fast fixed point mathematical functions.
 
 \li PVRTGlobal.h: Global defines and typedefs.
 
 \li PVRTHash.h: A simple hash class which uses TEA to hash a string or given data into a 32-bit unsigned int.

 \li PVRTMap.h: A dynamic, expanding templated map class.

 \li PVRTMatrix.h: Vector and Matrix functions.
 
 \li PVRTMemoryFileSystem.h: Memory file system for resource files.

 \li PVRTMisc.h: Skybox, line plane intersection code, etc...

 \li PVRTModelPOD.h: Load geometry and animation from a POD file.

 \li PVRTPFXParser.h: Code to parse our PFX file format. Note, not used in fixed function APIs, such as @ref API_OGLES "OpenGL ES 1.x".

 \li PVRTPrint3D.h: Display text/logos on the screen.

 \li PVRTQuaternion.h: Quaternion functions.

 \li PVRTResourceFile.h: The tools code for loading files included using FileWrap.

 \li PVRTShadowVol.h: Tools code for creating shadow volumes.
 
 \li PVRTSkipGraph.h: A "tree-like" structure for storing data which, unlike a tree, can reference any other node.

 \li PVRTString.h: A string class.

 \li PVRTTexture.h: Load textures from resources, BMP or PVR files.

 \li PVRTTrans.h: Transformation and projection functions.

 \li PVRTTriStrip.h: Geometry optimization using strips.

 \li PVRTVector.h: Vector and Matrix functions that are gradually replacing PVRTMatrix.

 \li PVRTVertex.h: Vertex order optimisation for 3D acceleration.

 @section APIs APIs
*****************************
 For information specific to each 3D API, see the list of supported APIs on the <a href="modules.html">Modules</a> page.
 
*/

#if defined(BUILD_OGLES3)
	#include "OGLES3Tools.h"
#elif defined(BUILD_OGLES2)
	#include "OGLES2Tools.h"
#elif defined(BUILD_OGLES)
	#include "OGLESTools.h"
#elif defined(BUILD_OGL)
	#include "OGLTools.h"
#elif defined(BUILD_DX11)
	#include "DX11Tools.h"
#endif

#endif /* PVRTOOLS_H*/

/*****************************************************************************
 End of file (Tools.h)
*****************************************************************************/