#ifndef _SCENE_CONTEXT_H
#define _SCENE_CONTEXT_H
#include "GlFunctions.h"
class DrawText;
class SceneContext
{
public:
enum Status
{
UNLOADED,
MUST_BE_LOADED,
MUST_BE_REFRESHED,
REFRESHED
};
Status GetStatus() const { return mStatus; }
SceneContext(const char * pFileName, int pWindowWidth, int pWindowHeight, bool pSupportVBO);
~SceneContext();
const FbxScene * GetScene()
const {
return mScene; }
bool LoadFile();
const FbxTime GetFrameTime()
const {
return mFrameTime; }
bool OnDisplay();
void OnReshape(int pWidth, int pHeight);
void OnKeyboard(unsigned char pKey);
void OnMouse(int pButton, int pState, int pX, int pY);
void OnMouseMotion(int pX, int pY);
void OnTimerClick() const;
bool SetCurrentAnimStack(int pIndex);
bool SetCurrentCamera(const char * pCameraName);
bool SetCurrentPoseIndex(int pPoseIndex);
void SetSelectedNode(
FbxNode * pSelectedNode);
void SetShadingMode(ShadingMode pMode);
void SetPause(bool pPause) { mPause = pPause; }
bool GetPause() const { return mPause; }
enum CameraZoomMode
{
ZOOM_FOCAL_LENGTH,
ZOOM_POSITION
};
CameraZoomMode GetZoomMode() { return mCameraZoomMode; }
void SetZoomMode( CameraZoomMode pZoomMode);
private:
void DisplayWindowMessage();
enum CameraStatus
{
CAMERA_NOTHING,
CAMERA_ORBIT,
CAMERA_ZOOM,
CAMERA_PAN
};
const char * mFileName;
mutable Status mStatus;
int mPoseIndex;
mutable FbxTime mFrameTime, mStart, mStop, mCurrentTime;
mutable FbxTime mCache_Start, mCache_Stop;
mutable int mLastX, mLastY;
mutable double mRoll;
mutable CameraStatus mCameraStatus;
bool mPause;
ShadingMode mShadingMode;
bool mSupportVBO;
CameraZoomMode mCameraZoomMode;
int mWindowWidth, mWindowHeight;
DrawText * mDrawText;
};
bool InitializeOpenGL();
#endif // _SCENE_CONTEXT_H