17b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!****************************************************************************
27b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
37b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @file       Shell/PVRShellImpl.h
47b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @copyright  Copyright (c) Imagination Technologies Limited.
57b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief      Makes programming for 3D APIs easier by wrapping surface
67b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens             initialization, texture allocation and other functions for use by a demo.
77b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
87b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens******************************************************************************/
97b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifndef __PVRSHELLIMPL_H_
117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define __PVRSHELLIMPL_H_
127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*****************************************************************************
147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens** Build options
157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*****************************************************************************
197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens** Macros
207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define FREE(X) { if(X) { free(X); (X)=0; } }
227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifndef _ASSERT
247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define _ASSERT(X) /**/
257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif
267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*****************************************************************************
287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens** Defines
297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define STR_WNDTITLE (" - Build ")
317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!***************************************************************************
337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @struct PVRShellData
347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Holds PVRShell internal data.
357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensstruct PVRShellData
377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{
387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    // Shell Interface Data
397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    char        *pszAppName;                /*!< Application name string. */
407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    char        *pszExitMessage;            /*!< Exit message string. */
417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nShellDimX;                 /*!< Width in pixels. */
427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nShellDimY;                 /*!< Height in pixels. */
437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nShellPosX;                 /*!< X position of the window. */
447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nShellPosY;                 /*!< Y position of the window. */
457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bFullScreen;                /*!< Fullscreen boolean. */
467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bLandscape;                 /*!< Landscape orientation boolean. false = portrait orientation. */
477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedPbuffer;               /*!< True if pixel buffer is needed. */
487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedZbuffer;               /*!< True if Z buffer is needed. */
497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedStencilBuffer;         /*!< True if stencil buffer is needed. */
507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedPixmap;                /*!< True if pixmap is needed. */
517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedPixmapDisableCopy;     /*!< Disables copy if true, because pixmaps are used. */
527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bLockableBackBuffer;        /*!< DX9 only. Enable the use of D3DPRESENTFLAG_LOCKABLE_BACKBUFFER. */
537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bSoftwareRender;            /*!< Enable the use of software rendering. */
547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNeedAlphaFormatPre;        /*!< EGL only: If true, creates the EGL surface with EGL_ALPHA_FORMAT_PRE. */
557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bUsingPowerSaving;          /*!< Use power saving mode when device is not in use. */
567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bOutputInfo;                /*!< Enable information to be output via PVRShellOutputDebug. For example,
577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens                                                 the depth of the colour surface created, extenstions supported and
587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens                                                 dimensions of the surface created. */
597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bNoShellSwapBuffer;         /*!< Disable eglswapbuffers at the end of each frame. */
607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nSwapInterval;              /*!< Interval to wait for monitor vertical sync. */
617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nInitRepeats;               /*!< Number of times to reinitialise. */
627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nDieAfterFrames;            /*!< Set shell to quit after this number of frames (-1 to disable) */
637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    float       fDieAfterTime;              /*!< Set shell to quit after this number of seconds (-1 to disable). */
647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nAASamples;                 /*!< Number of anti-aliasing samples to have. 0 disables anti-aliasing. */
657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nColorBPP;                  /*!< Color buffer size. */
667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nDepthBPP;                  /*!< Depth buffer size. */
677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nCaptureFrameStart;         /*!< The frame to start capturing screenshots from. */
687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nCaptureFrameStop;          /*!< The frame to stop capturing screenshots from. */
697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nCaptureFrameScale;         /*!< Save screenshots scale factor. 1 for no scaling. */
707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nPriority;                  /*!< EGL: If supported sets the egl context priority;
717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens                                                 0 for low, 1 for med and 2 for high. */
727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bForceFrameTime;            /*!< Overrides PVRShellGetTime to force specified frame time. May cause
737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens                                                 problems if PVRShellGetTime is called multiple times in a frame. */
747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nFrameTime;                 /*!< How long for each frame time to last (in ms). */
757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bDiscardFrameColor;         /*!< Discard color data at the end of a render. */
767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bDiscardFrameDepth;         /*!< Discard depth data at the end of a render. */
777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bDiscardFrameStencil;       /*!< Discard stencil data at the end of a render. */
787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    // Internal Data
807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bShellPosWasDefault;        /*!< Internal. Default position for the shell was used. */
817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    int         nShellCurFrameNum;          /*!< Internal. Current frame number. */
827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifdef PVRSHELL_FPS_OUTPUT
837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    bool        bOutputFPS;                 /*!< Output frames per second. */
847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif
857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens};
867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!***************************************************************************
887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @class PVRShellCommandLine
897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Command-line interpreter
907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensclass PVRShellCommandLine
927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{
937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	char		*m_psOrig, *m_psSplit;
957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	SCmdLineOpt	*m_pOpt;
967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	int			m_nOptLen, m_nOptMax;
977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief		Constructor
1017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellCommandLine();
1037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      Destructor
1067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	~PVRShellCommandLine();
1087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief	    Set command-line options to pStr
1117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  pStr Input string
1127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void Set(const char *pStr);
1147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief	    Prepend command-line options to m_psOrig
1177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  pStr Input string
1187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void Prefix(const char *pStr);
1207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      Prepend command-line options to m_psOrig from a file
1237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  pFileName Input string
1247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool PrefixFromFile(const char *pFileName);
1267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      Parse m_psOrig for command-line options and store them in m_pOpt
1297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void Parse();
1317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
1337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      Apply the command-line options to shell
1347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  shell
1357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
1367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void Apply(PVRShell &shell);
1377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens};
1387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!****************************************************************************
1407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @enum  EPVRShellState
1417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Current Shell state
1427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
1437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensenum EPVRShellState {
1447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellInitApp,		/*!< Initialise app */
1457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellInitInstance,	/*!< Initialise instance */
1467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellRender,		/*!< Render */
1477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellReleaseView,	/*!< Release View */
1487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellReleaseAPI,	/*!< Release API */
1497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellReleaseOS,		/*!< Release Operating System */
1507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellQuitApp,		/*!< Quit App */
1517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	ePVRShellExit		    /*!< Exit */
1527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens};
1537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!***************************************************************************
1557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @class  PVRShellInit
1567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief  The PVRShell initialisation class
1577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens ****************************************************************************/
1587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensclass PVRShellInit : public PVRShellInitAPI, public PVRShellInitOS
1597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{
1607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
1617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	friend class PVRShell;
1627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	friend class PVRShellInitOS;
1637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	friend class PVRShellInitAPI;
1647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShell			*m_pShell;		/*!< Our PVRShell class */
1667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellCommandLine	m_CommandLine;	/*!< Our Command-line class */
1677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		gShellDone;				/*!< Indicates that the application has finished */
1697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	EPVRShellState	m_eState;			/*!< Current PVRShell state */
1707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	// Key handling
1727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellKeyName	nLastKeyPressed;	/*!< Holds the last key pressed */
1737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellKeyName m_eKeyMapLEFT;		/*!< Holds the value to be returned when PVRShellKeyNameLEFT is requested */
1747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellKeyName m_eKeyMapUP;		/*!< Holds the value to be returned when PVRShellKeyNameUP is requested */
1757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellKeyName m_eKeyMapRIGHT;		/*!< Holds the value to be returned when PVRShellKeyNameRIGHT is requested */
1767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellKeyName m_eKeyMapDOWN;		/*!< Holds the value to be returned when PVRShellKeyNameDOWN is requested */
1777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	// Read and Write path
1797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	char	*m_pReadPath;				/*!<Holds the path where the application will read the data from */
1807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	char	*m_pWritePath;				/*!<Holds the path where the application will write the data to */
1817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifdef PVRSHELL_FPS_OUTPUT
1837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	// Frames per second (FPS)
1847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	int		m_i32FpsFrameCnt, m_i32FpsTimePrev;
1857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif
1867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
1887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensprotected:
1907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	float m_vec2PointerLocation[2];
1917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	float m_vec2PointerLocationStart[2];
1927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	float m_vec2PointerLocationEnd[2];
1937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	// Touch handling
1957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool m_bTouching;
1967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
1977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
1987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    /*!***********************************************************************
1997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Constructor
2007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	PVRShellInit();
2027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Destructor
2057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	~PVRShellInit();
2077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     PVRShell Initialisation.
2107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return    True on success and false on failure
2117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool Init();
2137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     PVRShell Deinitialisation.
2167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void Deinit();
2187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] str   A string containing the command-line
2217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Receives the command-line from the application.
2227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void CommandLine(const char *str);
2247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Receives the command-line from the application.
2277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] argc   Number of strings in argv
2287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] argv   An array of strings
2297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void CommandLine(int argc, char **argv);
2317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Return 'true' if the specific key has been pressed.
2347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] key The key we're querying for
2357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool DoIsKeyPressed(const PVRShellKeyName key);
2377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] key   The key that has been pressed
2407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell that a key has been pressed.
2417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void KeyPressed(PVRShellKeyName key);
2437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell that a touch has began at a location.
2467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] vec2Location   The position of a click/touch on the screen when it first touches.
2477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void TouchBegan(const float vec2Location[2]);
2497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell that a touch has began at a location.
2527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] vec2Location The position of the pointer/touch pressed on the screen.
2537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void TouchMoved(const float vec2Location[2]);
2557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell that the current touch has ended at a location.
2587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] vec2Location   The position of the pointer/touch on the screen when it is released.
2597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void TouchEnded(const float vec2Location[2]);
2617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell where to read external files from.
2647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return    A path the application is capable of reading from.
2657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	const char	*GetReadPath() const;
2677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Used by the OS-specific code to tell the Shell where to write to.
2707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return    A path the applications is capable of writing to
2717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	const char	*GetWritePath() const;
2737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!******************************************************************************
2757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Sets the default app name (to be displayed by the OS)
2767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] str The application name
2777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*******************************************************************************/
2787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void SetAppName(const char * const str);
2797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Set the path to where the application expects to read from.
2827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] str The read path
2837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void SetReadPath(const char * const str);
2857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Set the path to where the application expects to write to.
2887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] str The write path
2897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void SetWritePath(const char * const str);
2917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Called from the OS-specific code to perform the render.
2947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	           When this function fails the application will quit.
2957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
2967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool Run();
2977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
2987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
2997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     When prefOutputInfo is set to true this function outputs
3007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   various pieces of non-API dependent information via
3017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   PVRShellOutputDebug.
3027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void OutputInfo();
3047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     When prefOutputInfo is set to true this function outputs
3077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   various pieces of API dependent information via
3087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   PVRShellOutputDebug.
3097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void OutputAPIInfo();
3117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifdef PVRSHELL_FPS_OUTPUT
3137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!****************************************************************************
3147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Calculates a value for frames-per-second (FPS).
3157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*****************************************************************************/
3167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void FpsUpdate();
3177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif
3187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*
3207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens		OS functionality
3217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*/
3227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Initialisation for OS-specific code.
3257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		OsInit();
3277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Saves instance handle and creates main window
3307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   In this function, we save the instance handle in a global variable and
3317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens			   create and display the main program window.
3327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsInitOS();
3347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Destroys main window
3377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		OsReleaseOS();
3397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Destroys main window
3427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		OsExit();
3447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Perform API initialization and bring up window / fullscreen
3477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsDoInitAPI();
3497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Clean up after we're done
3527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		OsDoReleaseAPI();
3547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Main message loop / render loop
3577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		OsRenderComplete();
3597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     When using pixmaps, copy the render to the display
3627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsPixmapCopy();
3647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Called from InitAPI() to get the NativeDisplayType
3677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		*OsGetNativeDisplayType();
3697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Called from InitAPI() to get the NativePixmapType
3727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		*OsGetNativePixmapType();
3747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief 	   Called from InitAPI() to get the NativeWindowType
3777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void		*OsGetNativeWindowType();
3797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief    	Retrieves OS-specific data
3827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  prefName	Name of preference to get
3837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out] pn   A pointer set to the preference.
3847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return 	true on success
3857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsGet(const prefNameIntEnum prefName, int *pn);
3877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      Retrieves OS-specific data
3907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  prefName	Name of value to get
3917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out]	pp A pointer set to the value asked for
3927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return 	true on success
3937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
3947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsGet(const prefNamePtrEnum prefName, void **pp);
3957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
3967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
3977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Sets OS-specific data
3987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] prefName		Name of preference to set to value
3997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] value		Value
4007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return	   true for success
4017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsSet(const prefNameBoolEnum prefName, const bool value);
4037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Sets OS-specific data
4067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] prefName	Name of value to set
4077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] i32Value 	The value to set our named value to
4087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return    true on success
4097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool		OsSet(const prefNameIntEnum prefName, const int i32Value);
4117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Prints a debug string
4147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] str The debug string to display
4157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void OsDisplayDebugString(char const * const str);
4177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Gets the time in milliseconds
4207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	unsigned long OsGetTime();
4227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*
4247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens		API functionality
4257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*/
4267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Initialisation for API-specific code.
4287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool ApiInitAPI();
4307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Releases all resources allocated by the API.
4337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void ApiReleaseAPI();
4357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief      API-specific function to store the current content of the
4387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens				FrameBuffer into the memory allocated by the user.
4397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] 	Width  Width of the region to capture
4407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] 	Height Height of the region to capture
4417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out]	pBuf   A buffer to put the screen capture into
4427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@return     true on success
4437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool ApiScreenCaptureBuffer(int Width,int Height,unsigned char *pBuf);
4457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief    	Perform API operations required after a frame has finished (e.g., flipping).
4487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void ApiRenderComplete();
4507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief    	Set preferences which are specific to the API.
4537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in] 	prefName	Name of preference to set
4547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out]	i32Value	Value to set it to
4557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool ApiSet(const prefNameIntEnum prefName, const int i32Value);
4577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief    	Get parameters which are specific to the API.
4607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  prefName	Name of value to get
4617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out] pn   A pointer set to the value asked for
4627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool ApiGet(const prefNameIntEnum prefName, int *pn);
4647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    /*!***********************************************************************
4667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief    	 Get parameters which are specific to the API.
4677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[in]  prefName	Name of value to get
4687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@param[out] pp   A pointer set to the value asked for
4697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	bool ApiGet(const prefNamePtrEnum prefName, void **pp);
4717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	/*!***********************************************************************
4747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	@brief     Run specific API code to perform the operations requested in preferences.
4757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	*************************************************************************/
4767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	void ApiActivatePreferences();
4777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens};
4787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif /* __PVRSHELLIMPL_H_ */
4807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
4817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*****************************************************************************
4827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens End of file (PVRShellImpl.h)
4837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
4847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
485