| /*!**************************************************************************** | |
| @file Shell/PVRShell.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 __PVRSHELL_H_ | |
| #define __PVRSHELL_H_ | |
| /*****************************************************************************/ | |
| /*! @mainpage PVRShell | |
| ****************************************************************************** | |
| @tableofcontents | |
| @section overview Overview | |
| ***************************** | |
| PVRShell is a C++ class used to make programming for PowerVR platforms easier and more portable. | |
| PVRShell takes care of all API and OS initialisation for the user and handles adapters, devices, screen/windows modes, | |
| resolution, buffering, depth-buffer, viewport creation & clearing, etc... | |
| PVRShell consists of 3 files: PVRShell.cpp, PVRShellOS.cpp and PVRShellAPI.cpp. | |
| PVRShellOS.cpp and PVRShellAPI.cpp are supplied per platform and contain all the code to initialise the specific | |
| API (OpenGL ES, Direct3D Mobile, etc.) and the OS (Windows, Linux, WinCE, etc.). | |
| PVRShell.cpp is where the common code resides and it interacts with the user application through an abstraction layer. | |
| A new application must link to these three files and must create a class that will inherit the PVRShell class. | |
| This class will provide five virtual functions to interface with the user. | |
| The user also needs to register his application class through the NewDemo function: | |
| @code | |
| class MyApplication: public PVRShell | |
| { | |
| public: | |
| virtual bool InitApplication(); | |
| virtual bool InitView(); | |
| virtual bool ReleaseView(); | |
| virtual bool QuitApplication(); | |
| virtual bool RenderScene(); | |
| }; | |
| PVRShell* NewDemo() | |
| { | |
| return new MyApplication(); | |
| } | |
| @endcode | |
| @section interface Interface | |
| ****************************** | |
| There are two functions for initialisation, two functions to release allocated resources and a render function: | |
| InitApplication() will be called by PVRShell once per run, before the graphic context is created. | |
| It is used to initialise variables that are not dependant on the rendering context (e.g. external modules, loading user data, etc.). | |
| QuitApplication() will be called by PVRShell once per run, just before exiting the program. | |
| If the graphic context is lost, QuitApplication() will not be called. | |
| InitView() will be called by PVRShell upon creation or change in the rendering context. | |
| It is used to initialise variables that are dependant on the rendering context (e.g. textures, vertex buffers, etc.). | |
| ReleaseView() will be called by PVRShell before changing to a new rendering context or | |
| when finalising the application (before calling QuitApplication). | |
| RenderScene() is the main rendering loop function of the program. This function must return FALSE when the user wants to terminate the application. | |
| PVRShell will call this function every frame and will manage relevant OS events. | |
| There are other PVRShell functions which allow the user to set his/her preferences and get data back from the devices: | |
| PVRShellSet() and PVRShellGet() are used to pass data to and from PVRShell. PVRShellSet() is recommended to be used | |
| in InitApplication() so the user preferences are applied at the API initialisation. | |
| There is a definition of these functions per type of data passed or returned. Please check the prefNameBoolEnum, prefNameFloatEnum, | |
| prefNameIntEnum, prefNamePtrEnum and prefNameConstPtrEnum enumerations for a full list of the data available. | |
| This is an example: | |
| @code | |
| bool MyApplication::InitApplication() | |
| { | |
| PVRShellSet (prefFullScreen, true); | |
| } | |
| bool MyApplication::RenderScene() | |
| { | |
| int dwCurrentWidth = PVRShellGet (prefHeight); | |
| int dwCurrentHeight = PVRShellGet (prefWidth); | |
| return true; | |
| } | |
| @endcode | |
| @section helper Helper functions | |
| ************************************* | |
| The user input is abstracted with the PVRShellIsKeyPressed() function. It will not work in all devices, but we have tried to map the most | |
| relevant keys when possible. See PVRShellKeyName enumeration for the list of keys supported. This function will return true or false depending on | |
| the specified key being pressed. | |
| There are a few other helper functions supplied by PVRShell as well. These functions allow you to read the timer, to output debug information and to | |
| save a screen-shot of the current frame: | |
| PVRShellGetTime() returns time in milliseconds. | |
| PVRShellOutputDebug() will write a debug string (same format as printf) to the platform debug output. | |
| PVRShellScreenCaptureBuffer() and PVRShellWriteBMPFile() will be used to save the current frame as a BMP file. PVRShellScreenCaptureBuffer() | |
| receives a pointer to an area of memory containing the screen buffer. The memory should be freed with free() when not needed any longer. | |
| Example of screenshot: | |
| @code | |
| bool MyApplication::RenderScene() | |
| { | |
| [...] | |
| unsigned char *pLines; | |
| PVRShellScreenCaptureBuffer(PVRShellGet (prefWidth), PVRShellGet (prefHeight), &pLines); | |
| PVRShellScreenSave("myfile", pLines, NULL); | |
| free (pLines); | |
| return true; | |
| } | |
| @endcode | |
| @section cmd Command-line | |
| ************************************* | |
| Across all platforms, PVRShell takes a set of command-line arguments which allow things like the position and size of the demo | |
| to be controlled. The list below shows these options. | |
| \b -width=N Sets the horizontal viewport width to N. | |
| \b -height=N Sets the vertical viewport height to N. | |
| \b -posx=N Sets the x coordinate of the viewport. | |
| \b -posy=N Sets the y coordinate of the viewport. | |
| \b -aasamples=N Sets the number of samples to use for full screen anti-aliasing. e.g 0, 2, 4, 8 | |
| \b -fullscreen=N Enable/Disable fullscreen mode. N can be: 0=Windowed 1=Fullscreen. | |
| \b -qat=N Quits after N seconds. | |
| \b -qaf=N Quits after N frames. | |
| \b -powersaving=N Where available enable/disable power saving. N can be: 0=Disable power saving 1=Enable power saving. | |
| \b -vsync=N Where available modify the apps vsync parameters. | |
| \b -version Output the SDK version to the debug output. | |
| \b -info Output setup information (e.g. window width) to the debug output. | |
| \b -rotatekeys=N Sets the orientation of the keyboard input. N can be: 0-3, 0 is no rotation. | |
| \b -c=N Save a single screenshot or a range. e.g. -c=1-10, -c=14. | |
| \b -priority=N EGL only. Sets the priority of the EGL context. | |
| \b -colourbpp=N EGL only. When choosing an EGL config N will be used as the value for EGL_BUFFER_SIZE. | |
| \b -depthbpp=N EGL only. When choosing an EGL config N will be used as the value for EGL_DEPTH_SIZE. | |
| \b -config=N EGL only. Force the shell to use the EGL config with ID N. | |
| \b -forceframetime=N Alter the behaviour of PVRShellGetTime so its returned value is frame based (N denotes how many ms a frame should pretend to last). You can also use the shortened version of -fft and the command can be used without N being defined, e.g. just -forceframetime. This option is provided to aid in debugging time-based applications. | |
| Example: | |
| @code | |
| Demo -width=160 -height=120 -qaf=300 | |
| @endcode | |
| @section APIsOSs APIs and Operating Systems | |
| ***************************** | |
| For information specific to each 3D API and Operating System, see the list of supported APIs and OSs on the <a href="modules.html">Modules</a> page. | |
| ******************************************************************************/ | |
| // Uncomment to enable the -fps command-line option | |
| // #define PVRSHELL_FPS_OUTPUT | |
| /***************************************************************************** | |
| ** Includes | |
| *****************************************************************************/ | |
| #include <stdlib.h> | |
| #define EXIT_NOERR_CODE 0 | |
| #define EXIT_ERR_CODE (!EXIT_NOERR_CODE) | |
| // avoid warning about unused parameter | |
| #define PVRSHELL_UNREFERENCED_PARAMETER(x) ((void) x) | |
| // Keyboard mapping. // | |
| /*!*********************************************************************** | |
| @enum PVRShellKeyName | |
| @brief Key name. | |
| ************************************************************************/ | |
| enum PVRShellKeyName | |
| { | |
| PVRShellKeyNameNull, /*!< Null key value */ | |
| PVRShellKeyNameQUIT, /*!< QUIT key value */ | |
| PVRShellKeyNameSELECT, /*!< SELECT key value */ | |
| PVRShellKeyNameACTION1, /*!< ACTION1 key value */ | |
| PVRShellKeyNameACTION2, /*!< ACTION2 key value */ | |
| PVRShellKeyNameUP, /*!< UP key */ | |
| PVRShellKeyNameDOWN, /*!< DOWN key */ | |
| PVRShellKeyNameLEFT, /*!< LEFT key */ | |
| PVRShellKeyNameRIGHT, /*!< RIGHT key */ | |
| PVRShellKeyNameScreenshot /*!< SCREENSHOT key */ | |
| }; | |
| /*!*********************************************************************** | |
| @enum PVRShellKeyRotate | |
| @brief Key rotate. | |
| ************************************************************************/ | |
| enum PVRShellKeyRotate | |
| { | |
| PVRShellKeyRotateNone=0, /*!< Rotate key none = 0. */ | |
| PVRShellKeyRotate90, /*!< Rotate key 90 */ | |
| PVRShellKeyRotate180, /*!< Rotate key 180 */ | |
| PVRShellKeyRotate270 /*!< Rotate key 270 */ | |
| }; | |
| // Pointer button mapping. // | |
| /*!*********************************************************************** | |
| @enum EPVRShellButtonState | |
| @brief Pointer button mapping. | |
| ************************************************************************/ | |
| enum EPVRShellButtonState | |
| { | |
| ePVRShellButtonLeft = 0x1, /*!< Left button */ | |
| ePVRShellButtonRight = 0x2, /*!< Right button */ | |
| ePVRShellButtonMiddle = 0x4 /*!< Middle button */ | |
| }; | |
| /*!*********************************************************************** | |
| @enum prefNameBoolEnum | |
| @brief Boolean Shell preferences. | |
| ************************************************************************/ | |
| enum prefNameBoolEnum | |
| { | |
| prefFullScreen, /*!< Set to: 1 for full-screen rendering; 0 for windowed */ | |
| prefIsRotated, /*!< Query this to learn whether screen is rotated */ | |
| prefPBufferContext, /*!< 1 if you need pbuffer support (default is pbuffer not needed) */ | |
| prefPixmapContext, /*!< 1 to use a pixmap as a render-target (default off) */ | |
| prefPixmapDisableCopy, /*!< 1 to disable the copy if pixmaps are used */ | |
| prefZbufferContext, /*!< 1 if you wish to have zbuffer support (default to on) */ | |
| prefLockableBackBuffer, /*!< DX9 only: true to use D3DPRESENTFLAG_LOCKABLE_BACKBUFFER (default: false) */ | |
| prefSoftwareRendering, /*!< 1 to select software rendering (default: off, i.e. use hardware) */ | |
| prefStencilBufferContext, /*!< 1 if you wish to have stencil support (default: off) */ | |
| prefAlphaFormatPre, /*!< EGL only: 1 to create the EGL surface with EGL_ALPHA_FORMAT_PRE (default: 0) */ | |
| prefPowerSaving, /*!< If true then the app will go into powersaving mode (if available) when not in use. */ | |
| #ifdef PVRSHELL_FPS_OUTPUT | |
| prefOutputFPS, /*!< If true then the FPS are output using PVRShellOutputdebug */ | |
| #endif | |
| prefOutputInfo, /*!< If true then the app will output helpful information such as colour buffer format via PVRShellOutputDebug. */ | |
| prefNoShellSwapBuffer, /*!< EGL: If true then the shell won't call eglswapbuffers at the end of each frame. */ | |
| prefShowCursor, /*!< Set to: 1 to show the cursor; 0 to hide it. */ | |
| prefForceFrameTime, /*!< If true will alter PVRShellGetTime behaviour to be frame based. This is for debugging purposes. */ | |
| prefDiscardColor, /*!< GLES: Whether or not to discard color data at the end of a render, to save bandwidth. Requires specific functionality. (default: false) */ | |
| prefDiscardDepth, /*!< GLES: Whether or not to discard depth data at the end of a render, to save bandwidth. Requires specific functionality. (default: true) */ | |
| prefDiscardStencil /*!< GLES: Whether or not to discard stencil data at the end of a render, to save bandwidth. Requires specific functionality. (default: true) */ | |
| }; | |
| /*!*********************************************************************** | |
| @enum prefNameFloatEnum | |
| @brief Float Shell preferences. | |
| ************************************************************************/ | |
| enum prefNameFloatEnum | |
| { | |
| prefQuitAfterTime /*!< Shell will quit after this number of seconds (-1 to disable) */ | |
| }; | |
| /*!*********************************************************************** | |
| @enum prefNameIntEnum | |
| @brief Integer Shell preferences. | |
| ************************************************************************/ | |
| enum prefNameIntEnum | |
| { | |
| prefEGLMajorVersion, /*!< EGL: returns the major version as returned by eglInitialize() */ | |
| prefEGLMinorVersion, /*!< EGL: returns the minor version as returned by eglInitialize() */ | |
| prefWidth, /*!< Width of render target */ | |
| prefHeight, /*!< Height of render target */ | |
| prefPositionX, /*!< X position of the window */ | |
| prefPositionY, /*!< Y position of the window */ | |
| prefQuitAfterFrame, /*!< Shell will quit after this number of frames (-1 to disable) */ | |
| prefSwapInterval, /*!< 0 to preventing waiting for monitor vertical syncs */ | |
| prefInitRepeats, /*!< Number of times to reinitialise (if >0 when app returns false from RenderScene(), shell will ReleaseView(), InitView() then re-enter RenderScene() loop). Decrements on each initialisation. */ | |
| prefAASamples, /*!< Set to: 0 to disable full-screen anti-aliasing; 2 for 2x; 4 for 4x; 8 for 8x. */ | |
| prefCommandLineOptNum, /*!< Returns the length of the array returned by prefCommandLineOpts */ | |
| prefColorBPP, /*!< Allows you to specify a desired color buffer size e.g. 16, 32. */ | |
| prefDepthBPP, /*!< Allows you to specify a desired depth buffer size e.g. 16, 24. */ | |
| prefRotateKeys, /*!< Allows you to specify and retrieve how the keyboard input is transformed */ | |
| prefButtonState, /*!< pointer button state */ | |
| prefCaptureFrameStart, /*!< The frame to start capturing screenshots from */ | |
| prefCaptureFrameStop, /*!< The frame to stop capturing screenshots at */ | |
| prefCaptureFrameScale, /*!< Pixel-replicate saved screenshots this many times; default 1 for no scale */ | |
| prefPriority, /*!< EGL: If supported will set the egl context priority; 0 for low, 1 for med and 2 for high. */ | |
| prefConfig, /*!< EGL: Get the chosen EGL config. */ | |
| prefRequestedConfig, /*!< EGL: Force the shell to use a particular EGL config. */ | |
| prefNativeDisplay, /*!< EGL: Allows you to specify the native display to use if the device has more that one. */ | |
| prefFrameTimeValue /*!< An integer value to say how long you wish one frame to last for (in ms) when force frame time is enabled. */ | |
| }; | |
| /*!*********************************************************************** | |
| @enum prefNamePtrEnum | |
| @brief Pointers/Handlers Shell preferences. | |
| ************************************************************************/ | |
| enum prefNamePtrEnum | |
| { | |
| prefD3DDevice, /*!< D3D: returns the device pointer */ | |
| prefEGLDisplay, /*!< EGL: returns the EGLDisplay */ | |
| prefEGLSurface, /*!< EGL: returns the EGLSurface */ | |
| prefHINSTANCE, /*!< Windows: returns the application instance handle */ | |
| prefNativeWindowType, /*!< Returns the window handle */ | |
| prefAccelerometer, /*!< Accelerometer values */ | |
| prefPointerLocation, /*!< Mouse pointer/touch location values */ | |
| prefPVR2DContext, /*!< PVR2D: returns the PVR2D context */ | |
| prefLoadFileFunc, /*!< A pointer to a function that can be used to load external files on platforms that don't allow the use of fopen. | |
| The ptr returned is of the type PFNLoadFileFunc defined below. */ | |
| prefReleaseFileFunc, /*!< A pointer to a function that is used to release any data allocated by the load file function. | |
| The ptr returned is of the type PFNReleaseFileFunc defined below. */ | |
| prefAndroidNativeActivity /*!< Android: A pointer to the ANativeActivity struct for the application. Your application will need to include android_native_app_glue.h to cast the pointer to ANativeActivity. */ | |
| }; | |
| /*!*********************************************************************** | |
| @typedef PFNLoadFileFunc | |
| @brief The LoadFileFunc function pointer template. | |
| ************************************************************************/ | |
| typedef void* (*PFNLoadFileFunc)(const char*, char** pData, size_t &size); | |
| /*!*********************************************************************** | |
| @typedef PFNReleaseFileFunc | |
| @brief The ReleaseFileFunc function pointer template. | |
| ************************************************************************/ | |
| typedef bool (*PFNReleaseFileFunc)(void* handle); | |
| /*!*********************************************************************** | |
| @enum prefNameConstPtrEnum | |
| @brief Constant pointers Shell preferences. | |
| ************************************************************************/ | |
| enum prefNameConstPtrEnum | |
| { | |
| prefAppName, /*!< ptrValue is char* */ | |
| prefReadPath, /*!< ptrValue is char*; will include a trailing slash */ | |
| prefWritePath, /*!< ptrValue is char*; will include a trailing slash */ | |
| prefCommandLine, /*!< used to retrieve the entire application command line */ | |
| prefCommandLineOpts, /*!< ptrValue is SCmdLineOpt*; retrieves an array of arg/value pairs (parsed from the command line) */ | |
| prefExitMessage, /*!< ptrValue is char*; gives the shell a message to show on exit, typically an error */ | |
| prefVersion /*!< ptrValue is char* */ | |
| }; | |
| /*!************************************************************************** | |
| @struct PVRShellData | |
| @brief PVRShell implementation Prototypes and definitions | |
| *****************************************************************************/ | |
| struct PVRShellData; | |
| /*!*************************************************************************** | |
| @class PVRShellInit | |
| *****************************************************************************/ | |
| class PVRShellInit; | |
| /*!*********************************************************************** | |
| @struct SCmdLineOpt | |
| @brief Stores a variable name/value pair for an individual command-line option. | |
| ************************************************************************/ | |
| struct SCmdLineOpt | |
| { | |
| const char *pArg, *pVal; | |
| }; | |
| /*!*************************************************************************** | |
| @class PVRShell | |
| @brief Inherited by the application; responsible for abstracting the OS and API. | |
| @details PVRShell is the main Shell class that an application uses. An | |
| application should supply a class which inherits PVRShell and supplies | |
| implementations of the virtual functions of PVRShell (InitApplication(), | |
| QuitApplication(), InitView(), ReleaseView(), RenderScene()). Default stub | |
| functions are supplied; this means that an application is not | |
| required to supply a particular function if it does not need to do anything | |
| in it. | |
| The other, non-virtual, functions of PVRShell are utility functions that the | |
| application may call. | |
| *****************************************************************************/ | |
| class PVRShell | |
| { | |
| private: | |
| friend class PVRShellInitOS; | |
| friend class PVRShellInit; | |
| PVRShellData *m_pShellData; | |
| PVRShellInit *m_pShellInit; | |
| public: | |
| /*!*********************************************************************** | |
| @brief Constructor | |
| *************************************************************************/ | |
| PVRShell(); | |
| /*!*********************************************************************** | |
| @brief Destructor | |
| *************************************************************************/ | |
| virtual ~PVRShell(); | |
| /* | |
| PVRShell functions that the application should implement. | |
| */ | |
| /*!*********************************************************************** | |
| @brief Initialise the application. | |
| @details This function can be overloaded by the application. It | |
| will be called by PVRShell once, only at the beginning of | |
| the PVRShell WinMain()/main() function. This function | |
| enables the user to perform any initialisation before the | |
| render API is initialised. From this function the user can | |
| call PVRShellSet() to change default values, e.g. | |
| requesting a particular resolution or device setting. | |
| @return true for success, false to exit the application | |
| *************************************************************************/ | |
| virtual bool InitApplication() { return true; }; | |
| /*!*********************************************************************** | |
| @brief Quit the application. | |
| @details This function can be overloaded by the application. It | |
| will be called by PVRShell just before finishing the | |
| program. It enables the application to release any | |
| memory/resources acquired in InitApplication(). | |
| @return true for success, false to exit the application | |
| *************************************************************************/ | |
| virtual bool QuitApplication() { return true; }; | |
| /*!*********************************************************************** | |
| @brief Initialise the view. | |
| @details This function can be overloaded by the application. It | |
| will be called by PVRShell after the OS and rendering API | |
| are initialised, before entering the RenderScene() loop. | |
| It is called any time the rendering API is initialised, | |
| i.e. once at the beginning, and possibly again if the | |
| resolution changes, or a power management even occurs, or | |
| if the app requests a re-initialisation. | |
| The application should check here the configuration of | |
| the rendering API; it is possible that requests made in | |
| InitApplication() were not successful. | |
| Since everything is initialised when this function is | |
| called, you can load textures and perform rendering API functions. | |
| @return true for success, false to exit the application | |
| *************************************************************************/ | |
| virtual bool InitView() { return true; }; | |
| /*!*********************************************************************** | |
| @brief Release the view. | |
| @details This function can be overloaded by the application. It | |
| will be called after the RenderScene() loop, before | |
| shutting down the render API. It enables the application | |
| to release any memory/resources acquired in InitView(). | |
| @return true for success, false to exit the application | |
| *************************************************************************/ | |
| virtual bool ReleaseView() { return true; }; | |
| /*!*********************************************************************** | |
| @brief Render the scene | |
| @details This function can be overloaded by the application. | |
| It is main application function in which you have to do your own rendering. Will be | |
| called repeatedly until the application exits. | |
| @return true for success, false to exit the application | |
| *************************************************************************/ | |
| virtual bool RenderScene() { return true; }; | |
| /* | |
| PVRShell functions available for the application to use. | |
| */ | |
| /*!*********************************************************************** | |
| @brief This function is used to pass preferences to the PVRShell. | |
| If used, this function must be called from InitApplication(). | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] value Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellSet(const prefNameBoolEnum prefName, const bool value); | |
| /*!*********************************************************************** | |
| @brief This function is used to pass preferences to the PVRShell. | |
| If used, this function must be called from InitApplication(). | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] value Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellSet(const prefNameFloatEnum prefName, const float value); | |
| /*!*********************************************************************** | |
| @brief This function is used to pass preferences to the PVRShell. | |
| If used, this function must be called from InitApplication(). | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] value Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellSet(const prefNameIntEnum prefName, const int value); | |
| /*!*********************************************************************** | |
| @brief This function is used to pass preferences to the PVRShell. | |
| If used, this funciton must be called from InitApplication(). | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] ptrValue Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellSet(const prefNamePtrEnum prefName, const void * const ptrValue); | |
| /*!*********************************************************************** | |
| @brief This function is used to pass preferences to the PVRShell. | |
| If used, this function must be called from InitApplication(). | |
| @param[in] prefName Name of preference to set to value | |
| @param[in] ptrValue Value | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellSet(const prefNameConstPtrEnum prefName, const void * const ptrValue); | |
| /*!*********************************************************************** | |
| @brief This function is used to get parameters from the PVRShell. | |
| It can be called from anywhere in the program. | |
| @param[in] prefName Name of preference to set to value | |
| @return The requested value. | |
| *************************************************************************/ | |
| bool PVRShellGet(const prefNameBoolEnum prefName) const; | |
| /*!*********************************************************************** | |
| @brief This function is used to get parameters from the PVRShell. | |
| It can be called from anywhere in the program. | |
| @param[in] prefName Name of preference to set to value | |
| @return The requested value. | |
| *************************************************************************/ | |
| float PVRShellGet(const prefNameFloatEnum prefName) const; | |
| /*!*********************************************************************** | |
| @brief This function is used to get parameters from the PVRShell. | |
| It can be called from anywhere in the program. | |
| @param[in] prefName Name of preference to set to value | |
| @return The requested value. | |
| *************************************************************************/ | |
| int PVRShellGet(const prefNameIntEnum prefName) const; | |
| /*!*********************************************************************** | |
| @brief This function is used to get parameters from the PVRShell. | |
| It can be called from anywhere in the program. | |
| @param[in] prefName Name of preference to set to value | |
| @return The requested value. | |
| *************************************************************************/ | |
| void *PVRShellGet(const prefNamePtrEnum prefName) const; | |
| /*!*********************************************************************** | |
| @brief This function is used to get parameters from the PVRShell | |
| It can be called from anywhere in the program. | |
| @param[in] prefName Name of preference to set to value | |
| @return The requested value. | |
| *************************************************************************/ | |
| const void *PVRShellGet(const prefNameConstPtrEnum prefName) const; | |
| /*!*********************************************************************** | |
| @brief It will be stored as 24-bit per pixel, 8-bit per chanel RGB. | |
| The memory should be freed using the free() function when no longer needed. | |
| @param[in] Width size of image to capture (relative to 0,0) | |
| @param[in] Height size of image to capture (relative to 0,0) | |
| @param[out] pLines receives a pointer to an area of memory containing the screen buffer. | |
| @return true for success | |
| *************************************************************************/ | |
| bool PVRShellScreenCaptureBuffer(const int Width, const int Height, unsigned char **pLines); | |
| /*!*********************************************************************** | |
| @brief Writes out the image data to a BMP file with basename fname. | |
| @details The file written will be fname suffixed with a | |
| number to make the file unique. | |
| For example, if fname is "abc", this function will attempt | |
| to save to "abc0000.bmp"; if that file already exists, it | |
| will try "abc0001.bmp", repeating until a new filename is | |
| found. The final filename used is returned in ofname. | |
| @param[in] fname base of file to save screen to | |
| @param[in] Width size of image | |
| @param[in] Height size of image | |
| @param[in] pLines image data to write out (24bpp, 8-bit per channel RGB) | |
| @param[in] ui32PixelReplicate expand pixels through replication (1 = no scale) | |
| @param[out] ofname If non-NULL, receives the filename actually used | |
| @return true for success | |
| *************************************************************************/ | |
| int PVRShellScreenSave( | |
| const char * const fname, | |
| const int Width, | |
| const int Height, | |
| const unsigned char * const pLines, | |
| const unsigned int ui32PixelReplicate = 1, | |
| char * const ofname = NULL); | |
| /*!*********************************************************************** | |
| @brief Writes out the image data to a BMP file with name fname. | |
| @param[in] pszFilename file to save screen to | |
| @param[in] ui32Width the width of the data | |
| @param[in] ui32Height the height of the data | |
| @param[in] pImageData image data to write out (24bpp, 8-bit per channel RGB) | |
| @param[in] ui32PixelReplicate expand pixels through replication (1 = no scale) | |
| @return 0 on success | |
| *************************************************************************/ | |
| int PVRShellWriteBMPFile( | |
| const char * const pszFilename, | |
| const unsigned int ui32Width, | |
| const unsigned int ui32Height, | |
| const void * const pImageData, | |
| const unsigned int ui32PixelReplicate = 1); | |
| /*!*********************************************************************** | |
| @brief Writes the resultant string to the debug output (e.g. using | |
| printf(), OutputDebugString(), ...). Check the SDK release notes for | |
| details on how the string is output. | |
| @param[in] format printf style format followed by arguments it requires | |
| *************************************************************************/ | |
| void PVRShellOutputDebug(char const * const format, ...) const; | |
| /*!*********************************************************************** | |
| @brief The number itself should be considered meaningless; an | |
| application should use this function to determine how much | |
| time has passed between two points (e.g. between each frame). | |
| @return A value which increments once per millisecond. | |
| *************************************************************************/ | |
| unsigned long PVRShellGetTime(); | |
| /*!*********************************************************************** | |
| @brief Check if a key was pressed. | |
| @details The keys on various devices | |
| are mapped to the PVRShell-supported keys (listed in @a PVRShellKeyName) in | |
| a platform-dependent manner, since most platforms have different input | |
| devices. Check the <a href="modules.html">Modules page</a> for your OS | |
| for details on how the enum values map to your device's key code input. | |
| @param[in] key Code of the key to test | |
| @return true if key was pressed | |
| *************************************************************************/ | |
| bool PVRShellIsKeyPressed(const PVRShellKeyName key); | |
| }; | |
| /**************************************************************************** | |
| ** Declarations for functions that the scene file must supply | |
| ****************************************************************************/ | |
| /*!*************************************************************************** | |
| @brief This function must be implemented by the user of the shell. | |
| @details The user should return its PVRShell object defining the | |
| behaviour of the application. | |
| @return The demo supplied by the user | |
| *****************************************************************************/ | |
| PVRShell* NewDemo(); | |
| #endif /* __PVRSHELL_H_ */ | |
| /***************************************************************************** | |
| End of file (PVRShell.h) | |
| *****************************************************************************/ | |