/*!****************************************************************************
|
|
@file PVRTMisc.h
|
@copyright Copyright (c) Imagination Technologies Limited.
|
@brief Miscellaneous functions used in 3D rendering.
|
|
******************************************************************************/
|
#ifndef _PVRTMISC_H_
|
#define _PVRTMISC_H_
|
|
#include "PVRTMatrix.h"
|
#include "PVRTFixedPoint.h"
|
|
/****************************************************************************
|
** Functions
|
****************************************************************************/
|
|
/*!***************************************************************************
|
@brief Calculates coords of the intersection of a line and an
|
infinite plane
|
@param[out] pvIntersection The point of intersection
|
@param[in] pfPlane Length 4 [A,B,C,D], values for plane equation
|
@param[in] pv0 A point on the line
|
@param[in] pv1 Another point on the line
|
*****************************************************************************/
|
void PVRTMiscCalculateIntersectionLinePlane(
|
PVRTVECTOR3 * const pvIntersection,
|
const VERTTYPE pfPlane[4],
|
const PVRTVECTOR3 * const pv0,
|
const PVRTVECTOR3 * const pv1);
|
|
/*!***************************************************************************
|
@brief Calculates world-space coords of a screen-filling
|
representation of an infinite plane The resulting vertices run
|
counter-clockwise around the screen, and can be simply drawn using
|
non-indexed TRIANGLEFAN
|
@param[out] pfVtx Position of the first of 3 floats to receive
|
the position of vertex 0; up to 5 vertex positions
|
will be written (5 is the maximum number of vertices
|
required to draw an infinite polygon clipped to screen
|
and far clip plane).
|
@param[in] nStride Size of each vertex structure containing pfVtx
|
@param[in] pvPlane Length 4 [A,B,C,D], values for plane equation
|
@param[in] pmViewProjInv The inverse of the View Projection matrix
|
@param[in] pFrom Position of the camera
|
@param[in] fFar Far clipping distance
|
@return Number of vertices in the polygon fan (Can be 0, 3, 4 or 5)
|
*****************************************************************************/
|
int PVRTMiscCalculateInfinitePlane(
|
VERTTYPE * const pfVtx,
|
const int nStride,
|
const PVRTVECTOR4 * const pvPlane,
|
const PVRTMATRIX * const pmViewProjInv,
|
const PVRTVECTOR3 * const pFrom,
|
const VERTTYPE fFar);
|
|
/*!***************************************************************************
|
@brief Creates the vertices and texture coordinates for a skybox
|
@param[in] scale Scale the skybox
|
@param[in] adjustUV Adjust or not UVs for PVRT compression
|
@param[in] textureSize Texture size in pixels
|
@param[out] Vertices Array of vertices
|
@param[out] UVs Array of UVs
|
*****************************************************************************/
|
void PVRTCreateSkybox(float scale, bool adjustUV, int textureSize, VERTTYPE** Vertices, VERTTYPE** UVs);
|
|
/*!***************************************************************************
|
@brief Destroy the memory allocated for a skybox
|
@param[in] Vertices Vertices array to destroy
|
@param[in] UVs UVs array to destroy
|
*****************************************************************************/
|
void PVRTDestroySkybox(VERTTYPE* Vertices, VERTTYPE* UVs);
|
|
/*!***************************************************************************
|
@brief When iTimesHigher is one, this function will return the closest
|
power-of-two value above the base value.
|
For every increment beyond one for the iTimesHigher value,
|
the next highest power-of-two value will be calculated.
|
@param[in] uiOriginalValue Base value
|
@param[in] iTimesHigher Multiplier
|
*****************************************************************************/
|
unsigned int PVRTGetPOTHigher(unsigned int uiOriginalValue, int iTimesHigher);
|
|
/*!***************************************************************************
|
@brief When iTimesLower is one, this function will return the closest
|
power-of-two value below the base value.
|
For every increment beyond one for the iTimesLower value,
|
the next lowest power-of-two value will be calculated. The lowest
|
value that can be reached is 1.
|
@param[in] uiOriginalValue Base value
|
@param[in] iTimesLower Multiplier
|
*****************************************************************************/
|
unsigned int PVRTGetPOTLower(unsigned int uiOriginalValue, int iTimesLower);
|
|
#endif /* _PVRTMISC_H_ */
|
|
|
/*****************************************************************************
|
End of file (PVRTMisc.h)
|
*****************************************************************************/
|