OpenMW
libs/openengine/ogre/renderer.hpp
Go to the documentation of this file.
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