00001
00002
00003
00004 #ifndef NV_SAMPLE_APP_H
00005 #define NV_SAMPLE_APP_H
00006
00007 #include <NvFoundation.h>
00008
00009 #include "NvAppBase.h"
00010 #include "NvAppBase/NvStopWatch.h"
00011 #include "NvGLAppContext.h"
00012 #include "NvPlatformContext.h"
00013 #include "NvGamepad/NvGamepad.h"
00014 #include "NvUI/NvUI.h"
00015 #include "NvUI/NvTweakVar.h"
00016 #include <map>
00017
00020
00021 class NvFramerateCounter;
00022 class NvInputTransformer;
00023 class NvTweakBar;
00024
00027 class NvSampleApp : public NvAppBase
00028 {
00029 public:
00036 NvSampleApp(NvPlatformContext* platform, const char* appTitle=NULL);
00037
00039 virtual ~NvSampleApp();
00040
00044 virtual void initUI(void) { }
00045
00048 virtual void drawUI(void) { }
00049
00057 virtual void mainLoop();
00058
00061 NvUIWindow *getUIWindow() { return mUIWindow; }
00062
00068 NvFramerateCounter *getFramerate() { return mFramerate; }
00069
00077 bool requireExtension(const char* ext, bool exitOnFailure = true);
00078
00085 bool requireMinAPIVersion(const NvGfxAPIVersion& minApi, bool exitOnFailure = true);
00086
00091 void errorExit(const char* errorString);
00092
00095 float getFrameDeltaTime() { return mFrameDelta; }
00096
00102 void addTweakKeyBind(NvTweakVarBase *var, uint32_t incKey, uint32_t decKey=0);
00103
00109 void addTweakButtonBind(NvTweakVarBase *var, uint32_t incBtn, uint32_t decBtn=0);
00110
00127 virtual bool getRequestedWindowSize(int32_t& width, int32_t& height);
00128
00129 virtual NvUIEventResponse handleReaction(const NvUIReaction& react) { return nvuiEventNotHandled; }
00130
00131 protected:
00134 bool isTestMode() { return mTestMode; }
00135
00136
00137 bool pointerInput(NvInputDeviceType::Enum device, NvPointerActionType::Enum action,
00138 uint32_t modifiers, int32_t count, NvPointerEvent* points);
00139 bool keyInput(uint32_t code, NvKeyActionType::Enum action);
00140 bool characterInput(uint8_t c);
00141 bool gamepadChanged(uint32_t changedPadFlags);
00142 bool gamepadButtonChanged(uint32_t button, bool down);
00143
00144 NvFramerateCounter *mFramerate;
00145 float mFrameDelta;
00146 NvStopWatch* mFrameTimer;
00147
00148 NvUIWindow *mUIWindow;
00149 NvUIText *mFPSText;
00150 NvTweakBar *mTweakBar;
00151 NvUIButton *mTweakTab;
00152
00153 NvInputTransformer* m_transformer;
00154
00155 typedef std::map<uint32_t, NvTweakBind> NvAppKeyBind;
00156 NvAppKeyBind mKeyBinds;
00157 typedef std::map<uint32_t, NvTweakBind> NvAppButtonBind;
00158 NvAppButtonBind mButtonBinds;
00159
00160 NvGamepad::State mLastPadState[NvGamepad::MAX_GAMEPADS];
00161
00163 void baseInitRendering(void);
00164 void baseShutdownRendering(void);
00165 void baseInitUI(void);
00166 void baseReshape(int32_t w, int32_t h);
00167 void baseUpdate(void);
00168 void baseDraw(void);
00169 void baseDrawUI(void);
00170 void baseFocusChanged(bool focused);
00171 void baseHandleReaction(void);
00172 void logTestResults(float frameRate, int32_t frames);
00173
00174 private:
00175 int32_t m_desiredWidth;
00176 int32_t m_desiredHeight;
00177 bool mTestMode;
00178 float mTestDuration;
00179 int32_t mTestRepeatFrames;
00180 std::string mTestName;
00181
00182 const static int32_t TESTMODE_WARMUP_FRAMES = 10;
00183 };
00184
00185 #endif