OpenMW
|
00001 #ifndef OENGINE_OGRE_RENDERER_H 00002 #define OENGINE_OGRE_RENDERER_H 00003 00004 /* 00005 Ogre renderer class 00006 */ 00007 00008 #include <string> 00009 00010 #include <OgreTexture.h> 00011 00012 00013 struct SDL_Window; 00014 struct SDL_Surface; 00015 00016 namespace Ogre 00017 { 00018 class Root; 00019 class RenderWindow; 00020 class SceneManager; 00021 class Camera; 00022 class Viewport; 00023 class ParticleEmitterFactory; 00024 class ParticleAffectorFactory; 00025 } 00026 00027 namespace OgreInit 00028 { 00029 class OgreInit; 00030 } 00031 00032 namespace OEngine 00033 { 00034 namespace Render 00035 { 00036 struct WindowSettings 00037 { 00038 bool vsync; 00039 bool fullscreen; 00040 int window_x, window_y; 00041 int screen; 00042 std::string fsaa; 00043 std::string icon; 00044 }; 00045 00046 class Fader; 00047 00048 class WindowSizeListener 00049 { 00050 public: 00051 virtual void windowResized (int x, int y) = 0; 00052 }; 00053 00054 class OgreRenderer 00055 { 00056 Ogre::Root *mRoot; 00057 Ogre::RenderWindow *mWindow; 00058 SDL_Window *mSDLWindow; 00059 Ogre::SceneManager *mScene; 00060 Ogre::Camera *mCamera; 00061 Ogre::Viewport *mView; 00062 00063 OgreInit::OgreInit* mOgreInit; 00064 00065 Fader* mFader; 00066 00067 WindowSizeListener* mWindowListener; 00068 00069 public: 00070 OgreRenderer() 00071 : mRoot(NULL) 00072 , mWindow(NULL) 00073 , mSDLWindow(NULL) 00074 , mScene(NULL) 00075 , mCamera(NULL) 00076 , mView(NULL) 00077 , mOgreInit(NULL) 00078 , mFader(NULL) 00079 , mWindowListener(NULL) 00080 { 00081 } 00082 00083 ~OgreRenderer() { cleanup(); } 00084 00087 void configure( 00088 const std::string &logPath, // Path to directory where to store log files 00089 const std::string &renderSystem, 00090 const std::string &rttMode); // Enable or disable logging 00091 00093 void createWindow(const std::string &title, const WindowSettings& settings); 00094 00096 void adjustCamera( 00097 float fov=55, // Field of view angle 00098 float nearClip=5 // Near clip distance 00099 ); 00100 00101 void setFov(float fov); 00102 00104 void cleanup(); 00105 00106 void update(float dt); 00107 00109 void screenshot(const std::string &file); 00110 00111 float getFPS(); 00112 00113 void windowResized(int x, int y); 00114 00116 Ogre::Root *getRoot() { return mRoot; } 00117 00119 Ogre::RenderWindow *getWindow() { return mWindow; } 00120 00122 SDL_Window *getSDLWindow() { return mSDLWindow; } 00123 00125 Ogre::SceneManager *getScene() { return mScene; } 00126 00128 Fader *getFader() { return mFader; } 00129 00131 Ogre::Camera *getCamera() { return mCamera; } 00132 00134 Ogre::Viewport *getViewport() { return mView; } 00135 00136 void setWindowListener(WindowSizeListener* listener) { mWindowListener = listener; } 00137 00138 void adjustViewport(); 00139 }; 00140 } 00141 } 00142 #endif