| /*!**************************************************************************** | |
| @file Shell/PVRShellImpl.h | |
| @copyright Copyright (c) Imagination Technologies Limited. | |
| @brief Makes programming for 3D APIs easier by wrapping surface | |
| initialization, texture allocation and other functions for use by a demo. | |
| ******************************************************************************/ | |
| #ifndef __PVRSHELLIMPL_H_ | |
| #define __PVRSHELLIMPL_H_ | |
| /***************************************************************************** | |
| ** Build options | |
| *****************************************************************************/ | |
| /***************************************************************************** | |
| ** Macros | |
| *****************************************************************************/ | |
| #define FREE(X) { if(X) { free(X); (X)=0; } } | |
| #ifndef _ASSERT | |
| #define _ASSERT(X) /**/ | |
| #endif | |
| /***************************************************************************** | |
| ** Defines | |
| *****************************************************************************/ | |
| #define STR_WNDTITLE (" - Build ") | |
| /*!*************************************************************************** | |
| @struct PVRShellData | |
| @brief Holds PVRShell internal data. | |
| *****************************************************************************/ | |
| struct PVRShellData | |
| { | |
| // Shell Interface Data | |
| char *pszAppName; /*!< Application name string. */ | |
| char *pszExitMessage; /*!< Exit message string. */ | |
| int nShellDimX; /*!< Width in pixels. */ | |
| int nShellDimY; /*!< Height in pixels. */ | |
| int nShellPosX; /*!< X position of the window. */ | |
| int nShellPosY; /*!< Y position of the window. */ | |
| bool bFullScreen; /*!< Fullscreen boolean. */ | |
| bool bLandscape; /*!< Landscape orientation boolean. false = portrait orientation. */ | |
| bool bNeedPbuffer; /*!< True if pixel buffer is needed. */ | |
| bool bNeedZbuffer; /*!< True if Z buffer is needed. */ | |
| bool bNeedStencilBuffer; /*!< True if stencil buffer is needed. */ | |
| bool bNeedPixmap; /*!< True if pixmap is needed. */ | |
| bool bNeedPixmapDisableCopy; /*!< Disables copy if true, because pixmaps are used. */ | |
| bool bLockableBackBuffer; /*!< DX9 only. Enable the use of D3DPRESENTFLAG_LOCKABLE_BACKBUFFER. */ | |
| bool bSoftwareRender; /*!< Enable the use of software rendering. */ | |
| bool bNeedAlphaFormatPre; /*!< EGL only: If true, creates the EGL surface with EGL_ALPHA_FORMAT_PRE. */ | |
| bool bUsingPowerSaving; /*!< Use power saving mode when device is not in use. */ | |
| bool bOutputInfo; /*!< Enable information to be output via PVRShellOutputDebug. For example, | |
| the depth of the colour surface created, extenstions supported and | |
| dimensions of the surface created. */ | |
| bool bNoShellSwapBuffer; /*!< Disable eglswapbuffers at the end of each frame. */ | |
| int nSwapInterval; /*!< Interval to wait for monitor vertical sync. */ | |
| int nInitRepeats; /*!< Number of times to reinitialise. */ | |
| int nDieAfterFrames; /*!< Set shell to quit after this number of frames (-1 to disable) */ | |
| float fDieAfterTime; /*!< Set shell to quit after this number of seconds (-1 to disable). */ | |
| int nAASamples; /*!< Number of anti-aliasing samples to have. 0 disables anti-aliasing. */ | |
| int nColorBPP; /*!< Color buffer size. */ | |
| int nDepthBPP; /*!< Depth buffer size. */ | |
| int nCaptureFrameStart; /*!< The frame to start capturing screenshots from. */ | |
| int nCaptureFrameStop; /*!< The frame to stop capturing screenshots from. */ | |
| int nCaptureFrameScale; /*!< Save screenshots scale factor. 1 for no scaling. */ | |
| int nPriority; /*!< EGL: If supported sets the egl context priority; | |
| 0 for low, 1 for med and 2 for high. */ | |
| bool bForceFrameTime; /*!< Overrides PVRShellGetTime to force specified frame time. May cause | |
| problems if PVRShellGetTime is called multiple times in a frame. */ | |
| int nFrameTime; /*!< How long for each frame time to last (in ms). */ | |
| bool bDiscardFrameColor; /*!< Discard color data at the end of a render. */ | |
| bool bDiscardFrameDepth; /*!< Discard depth data at the end of a render. */ | |
| bool bDiscardFrameStencil; /*!< Discard stencil data at the end of a render. */ | |
| // Internal Data | |
| bool bShellPosWasDefault; /*!< Internal. Default position for the shell was used. */ | |
| int nShellCurFrameNum; /*!< Internal. Current frame number. */ | |
| #ifdef PVRSHELL_FPS_OUTPUT | |
| bool bOutputFPS; /*!< Output frames per second. */ | |
| #endif | |
| }; | |
| /*!*************************************************************************** | |
| @class PVRShellCommandLine | |
| @brief Command-line interpreter | |
| *****************************************************************************/ | |
| class PVRShellCommandLine | |
| { | |
| public: | |
| char *m_psOrig, *m_psSplit; | |
| SCmdLineOpt *m_pOpt; | |
| int m_nOptLen, m_nOptMax; | |
| public: | |
| /*!*********************************************************************** | |
| @brief Constructor | |
| *************************************************************************/ | |
| PVRShellCommandLine(); | |
| /*!*********************************************************************** | |
| @brief Destructor | |
| *************************************************************************/ | |
| ~PVRShellCommandLine(); | |
| /*!*********************************************************************** | |
| @brief Set command-line options to pStr | |
| @param[in] pStr Input string | |
| *************************************************************************/ | |
| void Set(const char *pStr); | |
| /*!*********************************************************************** | |
| @brief Prepend command-line options to m_psOrig | |
| @param[in] pStr Input string | |
| *************************************************************************/ | |
| void Prefix(const char *pStr); | |
| /*!*********************************************************************** | |
| @brief Prepend command-line options to m_psOrig from a file | |
| @param[in] pFileName Input string | |
| *************************************************************************/ | |
| bool PrefixFromFile(const char *pFileName); | |
| /*!*********************************************************************** | |
| @brief Parse m_psOrig for command-line options and store them in m_pOpt | |
| *************************************************************************/ | |
| void Parse(); | |
| /*!*********************************************************************** | |
| @brief Apply the command-line options to shell | |
| @param[in] shell | |
| *************************************************************************/ | |
| void Apply(PVRShell &shell); | |
| }; | |
| /*!**************************************************************************** | |
| @enum EPVRShellState | |
| @brief Current Shell state | |
| *****************************************************************************/ | |
| enum EPVRShellState { | |
| ePVRShellInitApp, /*!< Initialise app */ | |
| ePVRShellInitInstance, /*!< Initialise instance */ | |
| ePVRShellRender, /*!< Render */ | |
| ePVRShellReleaseView, /*!< Release View */ | |
| ePVRShellReleaseAPI, /*!< Release API */ | |
| ePVRShellReleaseOS, /*!< Release Operating System */ | |
| ePVRShellQuitApp, /*!< Quit App */ | |
| ePVRShellExit /*!< Exit */ | |
| }; | |
| /*!*************************************************************************** | |
| @class PVRShellInit | |
| @brief The PVRShell initialisation class | |
| ****************************************************************************/ | |
| class PVRShellInit : public PVRShellInitAPI, public PVRShellInitOS | |
| { | |
| public: | |
| friend class PVRShell; | |
| friend class PVRShellInitOS; | |
| friend class PVRShellInitAPI; | |
| PVRShell *m_pShell; /*!< Our PVRShell class */ | |
| PVRShellCommandLine m_CommandLine; /*!< Our Command-line class */ | |
| bool gShellDone; /*!< Indicates that the application has finished */ | |
| EPVRShellState m_eState; /*!< Current PVRShell state */ | |
| // Key handling | |
| PVRShellKeyName nLastKeyPressed; /*!< Holds the last key pressed */ | |
| PVRShellKeyName m_eKeyMapLEFT; /*!< Holds the value to be returned when PVRShellKeyNameLEFT is requested */ | |
| PVRShellKeyName m_eKeyMapUP; /*!< Holds the value to be returned when PVRShellKeyNameUP is requested */ | |
| PVRShellKeyName m_eKeyMapRIGHT; /*!< Holds the value to be returned when PVRShellKeyNameRIGHT is requested */ | |
| PVRShellKeyName m_eKeyMapDOWN; /*!< Holds the value to be returned when PVRShellKeyNameDOWN is requested */ | |
| // Read and Write path | |
| char *m_pReadPath; /*!<Holds the path where the application will read the data from */ | |
| char *m_pWritePath; /*!<Holds the path where the application will write the data to */ | |
| #ifdef PVRSHELL_FPS_OUTPUT | |
| // Frames per second (FPS) | |
| int m_i32FpsFrameCnt, m_i32FpsTimePrev; | |
| #endif | |
| public: | |
| protected: | |
| float m_vec2PointerLocation[2]; | |
| float m_vec2PointerLocationStart[2]; | |
| float m_vec2PointerLocationEnd[2]; | |
| // Touch handling | |
| bool m_bTouching; | |
| public: | |
| /*!*********************************************************************** | |
| @brief Constructor | |
| *************************************************************************/ | |
| PVRShellInit(); | |
| /*!*********************************************************************** | |
| @brief Destructor | |
| *************************************************************************/ | |
| ~PVRShellInit(); | |
| /*!*********************************************************************** | |
| @brief PVRShell Initialisation. | |
| @return True on success and false on failure | |
| *************************************************************************/ | |
| bool Init(); | |
| /*!*********************************************************************** | |
| @brief PVRShell Deinitialisation. | |
| *************************************************************************/ | |
| void Deinit(); | |
| /*!*********************************************************************** | |
| @param[in] str A string containing the command-line | |
| @brief Receives the command-line from the application. | |
| *************************************************************************/ | |
| void CommandLine(const char *str); | |
| /*!*********************************************************************** | |
| @brief Receives the command-line from the application. | |
| @param[in] argc Number of strings in argv | |
| @param[in] argv An array of strings | |
| *************************************************************************/ | |
| void CommandLine(int argc, char **argv); | |
| /*!*********************************************************************** | |
| @brief Return 'true' if the specific key has been pressed. | |
| @param[in] key The key we're querying for | |
| *************************************************************************/ | |
| bool DoIsKeyPressed(const PVRShellKeyName key); | |
| /*!*********************************************************************** | |
| @param[in] key The key that has been pressed | |
| @brief Used by the OS-specific code to tell the Shell that a key has been pressed. | |
| *************************************************************************/ | |
| void KeyPressed(PVRShellKeyName key); | |
| /*!*********************************************************************** | |
| @brief Used by the OS-specific code to tell the Shell that a touch has began at a location. | |
| @param[in] vec2Location The position of a click/touch on the screen when it first touches. | |
| *************************************************************************/ | |
| void TouchBegan(const float vec2Location[2]); | |
| /*!*********************************************************************** | |
| @brief Used by the OS-specific code to tell the Shell that a touch has began at a location. | |
| @param[in] vec2Location The position of the pointer/touch pressed on the screen. | |
| *************************************************************************/ | |
| void TouchMoved(const float vec2Location[2]); | |
| /*!*********************************************************************** | |
| @brief Used by the OS-specific code to tell the Shell that the current touch has ended at a location. | |
| @param[in] vec2Location The position of the pointer/touch on the screen when it is released. | |
| *************************************************************************/ | |
| void TouchEnded(const float vec2Location[2]); | |
| /*!*********************************************************************** | |
| @brief Used by the OS-specific code to tell the Shell where to read external files from. | |
| @return A path the application is capable of reading from. | |
| *************************************************************************/ | |
| const char *GetReadPath() const; | |
| /*!*********************************************************************** | |
| @brief Used by the OS-specific code to tell the Shell where to write to. | |
| @return A path the applications is capable of writing to | |
| *************************************************************************/ | |
| const char *GetWritePath() const; | |
| /*!****************************************************************************** | |
| @brief Sets the default app name (to be displayed by the OS) | |
| @param[in] str The application name | |
| *******************************************************************************/ | |
| void SetAppName(const char * const str); | |
| /*!*********************************************************************** | |
| @brief Set the path to where the application expects to read from. | |
| @param[in] str The read path | |
| *************************************************************************/ | |
| void SetReadPath(const char * const str); | |
| /*!*********************************************************************** | |
| @brief Set the path to where the application expects to write to. | |
| @param[in] str The write path | |
| *************************************************************************/ | |
| void SetWritePath(const char * const str); | |
| /*!*********************************************************************** | |
| @brief Called from the OS-specific code to perform the render. | |
| When this function fails the application will quit. | |
| *************************************************************************/ | |
| bool Run(); | |
| /*!*********************************************************************** | |
| @brief When prefOutputInfo is set to true this function outputs | |
| various pieces of non-API dependent information via | |
| PVRShellOutputDebug. | |
| *************************************************************************/ | |
| void OutputInfo(); | |
| /*!*********************************************************************** | |
| @brief When prefOutputInfo is set to true this function outputs | |
| various pieces of API dependent information via | |
| PVRShellOutputDebug. | |
| *************************************************************************/ | |
| void OutputAPIInfo(); | |
| #ifdef PVRSHELL_FPS_OUTPUT | |
| /*!**************************************************************************** | |
| @brief Calculates a value for frames-per-second (FPS). | |
| *****************************************************************************/ | |
| void FpsUpdate(); | |
| #endif | |
| /* | |
| OS functionality | |
| */ | |
| /*!*********************************************************************** | |
| @brief Initialisation for OS-specific code. | |
| *************************************************************************/ | |
| void OsInit(); | |
| /*!*********************************************************************** | |
| @brief Saves instance handle and creates main window | |
| In this function, we save the instance handle in a global variable and | |
| create and display the main program window. | |
| *************************************************************************/ | |
| bool OsInitOS(); | |
| /*!*********************************************************************** | |
| @brief Destroys main window | |
| *************************************************************************/ | |
| void OsReleaseOS(); | |
| /*!*********************************************************************** | |
| @brief Destroys main window | |
| *************************************************************************/ | |
| void OsExit(); | |
| /*!*********************************************************************** | |
| @brief Perform API initialization and bring up window / fullscreen | |
| *************************************************************************/ | |
| bool OsDoInitAPI(); | |
| /*!*********************************************************************** | |
| @brief Clean up after we're done | |
| *************************************************************************/ | |
| void OsDoReleaseAPI(); | |
| /*!*********************************************************************** | |
| @brief Main message loop / render loop | |
| *************************************************************************/ | |
| void OsRenderComplete(); | |
| /*!*********************************************************************** | |
| @brief When using pixmaps, copy the render to the display | |
| *************************************************************************/ | |
| bool OsPixmapCopy(); | |
| /*!*********************************************************************** | |
| @brief Called from InitAPI() to get the NativeDisplayType | |
| *************************************************************************/ | |
| void *OsGetNativeDisplayType(); | |
| /*!*********************************************************************** | |
| @brief Called from InitAPI() to get the NativePixmapType | |
| *************************************************************************/ | |
| void *OsGetNativePixmapType(); | |
| /*!*********************************************************************** | |
| @brief Called from InitAPI() to get the NativeWindowType | |
| *************************************************************************/ | |
| void *OsGetNativeWindowType(); | |
| /*!*********************************************************************** | |
| @brief Retrieves OS-specific data | |
| @param[in] prefName Name of preference to get | |
| @param[out] pn A pointer set to the preference. | |
| @return true on success | |
| *************************************************************************/ | |
| bool OsGet(const prefNameIntEnum prefName, int *pn); | |
| /*!*********************************************************************** | |
| @brief Retrieves OS-specific data | |
| @param[in] prefName Name of value to get | |
| @param[out] pp A pointer set to the value asked for | |
| @return true on success | |
| *************************************************************************/ | |
| bool OsGet(const prefNamePtrEnum prefName, void **pp); | |
| /*!*********************************************************************** | |
| @brief Sets OS-specific data | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] value Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool OsSet(const prefNameBoolEnum prefName, const bool value); | |
| /*!*********************************************************************** | |
| @brief Sets OS-specific data | |
| @param[in] prefName Name of value to set | |
| @param[in] i32Value The value to set our named value to | |
| @return true on success | |
| *************************************************************************/ | |
| bool OsSet(const prefNameIntEnum prefName, const int i32Value); | |
| /*!*********************************************************************** | |
| @brief Prints a debug string | |
| @param[in] str The debug string to display | |
| *************************************************************************/ | |
| void OsDisplayDebugString(char const * const str); | |
| /*!*********************************************************************** | |
| @brief Gets the time in milliseconds | |
| *************************************************************************/ | |
| unsigned long OsGetTime(); | |
| /* | |
| API functionality | |
| */ | |
| /*!*********************************************************************** | |
| @brief Initialisation for API-specific code. | |
| *************************************************************************/ | |
| bool ApiInitAPI(); | |
| /*!*********************************************************************** | |
| @brief Releases all resources allocated by the API. | |
| *************************************************************************/ | |
| void ApiReleaseAPI(); | |
| /*!*********************************************************************** | |
| @brief API-specific function to store the current content of the | |
| FrameBuffer into the memory allocated by the user. | |
| @param[in] Width Width of the region to capture | |
| @param[in] Height Height of the region to capture | |
| @param[out] pBuf A buffer to put the screen capture into | |
| @return true on success | |
| *************************************************************************/ | |
| bool ApiScreenCaptureBuffer(int Width,int Height,unsigned char *pBuf); | |
| /*!*********************************************************************** | |
| @brief Perform API operations required after a frame has finished (e.g., flipping). | |
| *************************************************************************/ | |
| void ApiRenderComplete(); | |
| /*!*********************************************************************** | |
| @brief Set preferences which are specific to the API. | |
| @param[in] prefName Name of preference to set | |
| @param[out] i32Value Value to set it to | |
| *************************************************************************/ | |
| bool ApiSet(const prefNameIntEnum prefName, const int i32Value); | |
| /*!*********************************************************************** | |
| @brief Get parameters which are specific to the API. | |
| @param[in] prefName Name of value to get | |
| @param[out] pn A pointer set to the value asked for | |
| *************************************************************************/ | |
| bool ApiGet(const prefNameIntEnum prefName, int *pn); | |
| /*!*********************************************************************** | |
| @brief Get parameters which are specific to the API. | |
| @param[in] prefName Name of value to get | |
| @param[out] pp A pointer set to the value asked for | |
| *************************************************************************/ | |
| bool ApiGet(const prefNamePtrEnum prefName, void **pp); | |
| /*!*********************************************************************** | |
| @brief Run specific API code to perform the operations requested in preferences. | |
| *************************************************************************/ | |
| void ApiActivatePreferences(); | |
| }; | |
| #endif /* __PVRSHELLIMPL_H_ */ | |
| /***************************************************************************** | |
| End of file (PVRShellImpl.h) | |
| *****************************************************************************/ | |