NVidia Gameworks
  • Main Page
  • Classes
  • Files
  • File List
  • File Members

NvAppBase.h

Go to the documentation of this file.
00001 // TAGRELEASE: PUBLIC
00002 
00003 // simple SDK app interface
00004 // abstract base class
00005 #ifndef NV_APP_BASE_H
00006 #define NV_APP_BASE_H
00007 
00008 #include <NvFoundation.h>
00009 #include <string>
00010 #include "NvGLAppContext.h"
00011 #include "NvPlatformContext.h"
00012 #include "NvGamepad/NvGamepad.h"
00013 
00016 
00017 class NvStopWatch;
00018 
00020 class NvAppBase : public NvInputCallbacks 
00021 {
00022 public:
00029     NvAppBase(NvPlatformContext* platform, const char* appTitle);
00030 
00032     virtual ~NvAppBase();
00033 
00037 
00042     virtual void initRendering(void) { }
00043 
00056     virtual void shutdownRendering(void) { }
00057 
00062     virtual void update(void) { }
00063 
00067     virtual void draw(void) { }
00068 
00074     virtual void reshape(int32_t width, int32_t height) { }
00075 
00079     virtual void focusChanged(bool focused) { }
00080 
00082 
00085     // The following functions are implementations of the inherited #InputCallbacks
00086     // interface.  Apps can cause these to be used for input-handling by overriding
00087     // these functions in their own app and passing the App to the pollEvents function
00088     // as getPlatformContext()->pollEvents(this);.  This is how the App::mainLoop
00089     // function connects them
00090     // Return true if the app has handled the action, or false if the system
00091     // should process further as a fallback.  Calls are optional
00092     virtual bool handlePointerInput(NvInputDeviceType::Enum device, NvPointerActionType::Enum action, 
00093         uint32_t modifiers, int32_t count, NvPointerEvent* points) { return false; }
00094     virtual bool handleKeyInput(uint32_t code, NvKeyActionType::Enum action) { return false; }
00095     virtual bool handleCharacterInput(uint8_t c) { return false; }
00096     virtual bool handleGamepadChanged(uint32_t changedPadFlags) { return false; }
00097     virtual bool handleGamepadButtonChanged(uint32_t button, bool down) { return false; }
00099 
00109     virtual void configurationCallback(NvEGLConfiguration& config) { }
00110 
00114     NvGLAppContext* getGLContext() { return mContext; }
00115 
00118     void setGLContext(NvGLAppContext* context) { mContext = context; }
00119 
00122     NvPlatformContext* getPlatformContext() { return mPlatform; }
00123 
00127     bool isMobilePlatform() { return getGLContext()->getPlatformInfo().mCategory 
00128         == NvGLPlatformCategory::PLAT_MOBILE;
00129     }
00130 
00133     NvStopWatch* createStopWatch();
00134 
00137     uint64_t queryPerformanceCounter();
00138 
00141     uint64_t queryPerformanceCounterFrequency();
00142 
00149     bool showDialog(const char* title, const char *contents, bool exitApp);
00150 
00160     bool writeScreenShot(int32_t width, int32_t height, const uint8_t* data, const std::string& path);
00161 
00169     bool writeLogFile(const std::string& path, bool append, const char* fmt, ...);
00170 
00173     // Function must be called in the concrete app subclass constructor to avoid link issues
00174     void forceLinkHack();
00175 
00185     virtual void mainLoop();
00186 
00198     virtual bool getRequestedWindowSize(int32_t& width, int32_t& height) { return false; }
00199 
00200 protected:
00203     void appRequestExit();
00204 
00207     bool isExiting() { return m_requestedExit; }
00208 
00209     int32_t m_width; 
00210     int32_t m_height; 
00211 
00213     NvPlatformContext* mPlatform;
00214     NvGLAppContext* mContext;
00215     std::string mAppTitle;
00216 
00217     bool m_requestedExit;
00218 };
00219 
00224 extern NvAppBase* NvAppFactory(NvPlatformContext* platform);
00225 
00226 #endif
Generated on Sat Mar 8 14:58:35 2014 for NVIDIA GameWorks OpenGL App Framework and Libraries by Doxygen
©2014 NVIDIA Corporation.