|  | /*!**************************************************************************** | 
|  |  | 
|  | @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) | 
|  | *****************************************************************************/ | 
|  |  |