OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
renderingmanager.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_MWRENDER_RENDERINGMANAGER_H
2 #define OPENMW_MWRENDER_RENDERINGMANAGER_H
3 
4 #include <osg/ref_ptr>
5 #include <osg/Light>
6 #include <osg/Camera>
7 
9 
10 #include "objects.hpp"
11 
12 #include "renderinginterface.hpp"
13 #include "rendermode.hpp"
14 
15 namespace osg
16 {
17  class Group;
18  class PositionAttitudeTransform;
19 }
20 
21 namespace osgUtil
22 {
23  class IntersectionVisitor;
24  class Intersector;
25 }
26 
27 namespace Resource
28 {
29  class ResourceSystem;
30 }
31 
32 namespace osgViewer
33 {
34  class Viewer;
35 }
36 
37 namespace ESM
38 {
39  struct Cell;
40 }
41 
42 namespace Terrain
43 {
44  class World;
45 }
46 
47 namespace Fallback
48 {
49  class Map;
50 }
51 
52 namespace SceneUtil
53 {
54  class WorkQueue;
55  class UnrefQueue;
56 }
57 
58 namespace MWRender
59 {
60 
61  class StateUpdater;
62 
63  class EffectManager;
64  class SkyManager;
65  class NpcAnimation;
66  class Pathgrid;
67  class Camera;
68  class Water;
69  class TerrainStorage;
70  class LandManager;
71 
73  {
74  public:
75  RenderingManager(osgViewer::Viewer* viewer, osg::ref_ptr<osg::Group> rootNode, Resource::ResourceSystem* resourceSystem, SceneUtil::WorkQueue* workQueue,
76  const Fallback::Map* fallback, const std::string& resourcePath);
78 
80 
82 
86 
87  osg::Uniform* mUniformNear;
88  osg::Uniform* mUniformFar;
89 
90  void preloadCommonAssets();
91 
92  double getReferenceTime() const;
93 
94  osg::Group* getLightRoot();
95 
96  void setNightEyeFactor(float factor);
97 
98  void setAmbientColour(const osg::Vec4f& colour);
99 
100  void skySetDate(int day, int month);
101  int skyGetMasserPhase() const;
102  int skyGetSecundaPhase() const;
103  void skySetMoonColour(bool red);
104 
105  void setSunDirection(const osg::Vec3f& direction);
106  void setSunColour(const osg::Vec4f& diffuse, const osg::Vec4f& specular);
107 
108  void configureAmbient(const ESM::Cell* cell);
109  void configureFog(const ESM::Cell* cell);
110  void configureFog(float fogDepth, float underwaterFog, float dlFactor, float dlOffset, const osg::Vec4f& colour);
111 
112  void addCell(const MWWorld::CellStore* store);
113  void removeCell(const MWWorld::CellStore* store);
114 
115  void enableTerrain(bool enable);
116 
117  void updatePtr(const MWWorld::Ptr& old, const MWWorld::Ptr& updated);
118 
119  void rotateObject(const MWWorld::Ptr& ptr, const osg::Quat& rot);
120  void moveObject(const MWWorld::Ptr& ptr, const osg::Vec3f& pos);
121  void scaleObject(const MWWorld::Ptr& ptr, const osg::Vec3f& scale);
122 
123  void removeObject(const MWWorld::Ptr& ptr);
124 
125  void setWaterEnabled(bool enabled);
126  void setWaterHeight(float level);
127 
129  void screenshot(osg::Image* image, int w, int h, osg::Matrixd cameraTransform=osg::Matrixd());
130  bool screenshot360(osg::Image* image, std::string settingStr);
131 
132  struct RayResult
133  {
134  bool mHit;
135  osg::Vec3f mHitNormalWorld;
136  osg::Vec3f mHitPointWorld;
138  float mRatio;
139  };
140 
141  RayResult castRay(const osg::Vec3f& origin, const osg::Vec3f& dest, bool ignorePlayer, bool ignoreActors=false);
142 
145  RayResult castCameraToViewportRay(const float nX, const float nY, float maxDistance, bool ignorePlayer, bool ignoreActors=false);
146 
148  osg::Vec4f getScreenBounds(const MWWorld::Ptr& ptr);
149 
150  void setSkyEnabled(bool enabled);
151 
152  bool toggleRenderMode(RenderMode mode);
153 
155 
156  void spawnEffect(const std::string &model, const std::string &texture, const osg::Vec3f &worldPosition, float scale = 1.f, bool isMagicVFX = true);
157 
159  void clear();
160 
163 
164  void update(float dt, bool paused);
165 
166  Animation* getAnimation(const MWWorld::Ptr& ptr);
167  const Animation* getAnimation(const MWWorld::ConstPtr& ptr) const;
168 
169  void addWaterRippleEmitter(const MWWorld::Ptr& ptr);
170  void removeWaterRippleEmitter(const MWWorld::Ptr& ptr);
171  void emitWaterRipple(const osg::Vec3f& pos);
172 
173  void updatePlayerPtr(const MWWorld::Ptr &ptr);
174 
175  void removePlayer(const MWWorld::Ptr& player);
176  void setupPlayer(const MWWorld::Ptr& player);
177  void renderPlayer(const MWWorld::Ptr& player);
178 
179  void rebuildPtr(const MWWorld::Ptr& ptr);
180 
182 
183  float getNearClipDistance() const;
184 
185  float getTerrainHeightAt(const osg::Vec3f& pos);
186 
187  // camera stuff
188  bool vanityRotateCamera(const float *rot);
189  void setCameraDistance(float dist, bool adjust, bool override);
190  void resetCamera();
191  float getCameraDistance() const;
192  Camera* getCamera();
193  const osg::Vec3f& getCameraPosition() const;
194  void togglePOV();
195  void togglePreviewMode(bool enable);
196  bool toggleVanityMode(bool enable);
197  void allowVanityMode(bool allow);
198  void togglePlayerLooking(bool enable);
199  void changeVanityModeScale(float factor);
200 
202  void overrideFieldOfView(float val);
204  void resetFieldOfView();
205 
206  osg::Vec3f getHalfExtents(const MWWorld::ConstPtr& object) const;
207 
208  void exportSceneGraph(const MWWorld::Ptr& ptr, const std::string& filename, const std::string& format);
209 
210  LandManager* getLandManager() const;
211 
212  bool toggleBorders();
213 
214  private:
215  void updateProjectionMatrix();
216  void updateTextureFiltering();
217  void updateAmbient();
218  void setFogColor(const osg::Vec4f& color);
219 
220  void reportStats() const;
221 
222  void renderCameraToImage(osg::Camera *camera, osg::Image *image, int w, int h);
223 
224  osg::ref_ptr<osgUtil::IntersectionVisitor> getIntersectionVisitor(osgUtil::Intersector* intersector, bool ignorePlayer, bool ignoreActors);
225 
226  osg::ref_ptr<osgUtil::IntersectionVisitor> mIntersectionVisitor;
227 
228  osg::ref_ptr<osgViewer::Viewer> mViewer;
229  osg::ref_ptr<osg::Group> mRootNode;
230  osg::ref_ptr<osg::Group> mSceneRoot;
232 
233  osg::ref_ptr<SceneUtil::WorkQueue> mWorkQueue;
234  osg::ref_ptr<SceneUtil::UnrefQueue> mUnrefQueue;
235 
236  osg::ref_ptr<osg::Light> mSunLight;
237 
238  std::unique_ptr<Pathgrid> mPathgrid;
239  std::unique_ptr<Objects> mObjects;
240  std::unique_ptr<Water> mWater;
241  std::unique_ptr<Terrain::World> mTerrain;
243  std::unique_ptr<SkyManager> mSky;
244  std::unique_ptr<EffectManager> mEffectManager;
245  osg::ref_ptr<NpcAnimation> mPlayerAnimation;
246  osg::ref_ptr<SceneUtil::PositionAttitudeTransform> mPlayerNode;
247  std::unique_ptr<Camera> mCamera;
248  osg::Vec3f mCurrentCameraPos;
249 
250  osg::ref_ptr<StateUpdater> mStateUpdater;
251 
253  float mLandFogEnd;
256  osg::Vec4f mUnderwaterColor;
259  osg::Vec4f mFogColor;
260 
261  osg::Vec4f mAmbientColor;
263 
264  float mNearClip;
266  bool mDistantFog : 1;
267  bool mDistantTerrain : 1;
272  bool mBorders;
273 
274  void operator = (const RenderingManager&);
276  };
277 
278 }
279 
280 #endif
bool toggleRenderMode(RenderMode mode)
Definition: renderingmanager.cpp:493
const osg::Vec3f & getCameraPosition() const
Definition: renderingmanager.cpp:1279
std::unique_ptr< SkyManager > mSky
Definition: renderingmanager.hpp:243
Wrapper class that constructs and provides access to the most commonly used resource subsystems...
Definition: resourcesystem.hpp:30
RenderingManager(osgViewer::Viewer *viewer, osg::ref_ptr< osg::Group > rootNode, Resource::ResourceSystem *resourceSystem, SceneUtil::WorkQueue *workQueue, const Fallback::Map *fallback, const std::string &resourcePath)
Definition: renderingmanager.cpp:192
void removePlayer(const MWWorld::Ptr &player)
Definition: renderingmanager.cpp:614
float mViewDistance
Definition: renderingmanager.hpp:265
RayResult castCameraToViewportRay(const float nX, const float nY, float maxDistance, bool ignorePlayer, bool ignoreActors=false)
Definition: renderingmanager.cpp:1029
osg::ref_ptr< osgUtil::IntersectionVisitor > mIntersectionVisitor
Definition: renderingmanager.hpp:226
osg::ref_ptr< SceneUtil::UnrefQueue > mUnrefQueue
Definition: renderingmanager.hpp:234
RayResult castRay(const osg::Vec3f &origin, const osg::Vec3f &dest, bool ignorePlayer, bool ignoreActors=false)
Definition: renderingmanager.cpp:1018
osg::Vec4f mUnderwaterColor
Definition: renderingmanager.hpp:256
bool toggleVanityMode(bool enable)
Definition: renderingmanager.cpp:1294
void renderPlayer(const MWWorld::Ptr &player)
Definition: renderingmanager.cpp:1105
Definition: animation.hpp:85
The basic interface for a terrain world. How the terrain chunks are paged and displayed is up to the ...
Definition: world.hpp:52
Definition: renderingmanager.hpp:72
A work queue that users can push work items onto, to be completed by one or more background threads...
Definition: workqueue.hpp:48
void emitWaterRipple(const osg::Vec3f &pos)
Definition: renderingmanager.cpp:1142
osg::Vec3f mHitNormalWorld
Definition: renderingmanager.hpp:135
osg::Uniform * mUniformNear
Definition: renderingmanager.hpp:87
float mNearClip
Definition: renderingmanager.hpp:264
void scaleObject(const MWWorld::Ptr &ptr, const osg::Vec3f &scale)
Definition: renderingmanager.cpp:635
float getNearClipDistance() const
Definition: renderingmanager.cpp:1229
float mFieldOfView
Definition: renderingmanager.hpp:270
void togglePlayerLooking(bool enable)
Definition: renderingmanager.cpp:1304
contains settings imported from the Morrowind INI file.
Definition: fallback.hpp:12
float getCameraDistance() const
Definition: renderingmanager.cpp:1269
osg::ref_ptr< osgUtil::IntersectionVisitor > getIntersectionVisitor(osgUtil::Intersector *intersector, bool ignorePlayer, bool ignoreActors)
Definition: renderingmanager.cpp:999
Animation * getAnimation(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:1070
void reportStats() const
Definition: renderingmanager.cpp:1192
osg::ref_ptr< osg::Light > mSunLight
Definition: renderingmanager.hpp:236
Definition: renderinginterface.hpp:9
osg::Vec3f mCurrentCameraPos
Definition: renderingmanager.hpp:248
osg::ref_ptr< osg::Group > mSceneRoot
Definition: renderingmanager.hpp:230
TerrainStorage * mTerrainStorage
Definition: renderingmanager.hpp:242
int skyGetSecundaPhase() const
Definition: renderingmanager.cpp:420
float getTerrainHeightAt(const osg::Vec3f &pos)
Definition: renderingmanager.cpp:1234
~RenderingManager()
Definition: renderingmanager.cpp:336
The SkyManager handles rendering of the sky domes, celestial bodies as well as other objects that nee...
Definition: sky.hpp:117
void skySetMoonColour(bool red)
Definition: renderingmanager.cpp:425
void resetCamera()
Definition: renderingmanager.cpp:1264
void moveObject(const MWWorld::Ptr &ptr, const osg::Vec3f &pos)
Definition: renderingmanager.cpp:630
void enableTerrain(bool enable)
Definition: renderingmanager.cpp:476
Definition: landmanager.hpp:17
float mLandFogStart
Definition: renderingmanager.hpp:252
bool screenshot360(osg::Image *image, std::string settingStr)
Definition: renderingmanager.cpp:691
void updatePtr(const MWWorld::Ptr &old, const MWWorld::Ptr &updated)
Definition: renderingmanager.cpp:1048
void configureFog(const ESM::Cell *cell)
Definition: renderingmanager.cpp:522
void clear()
Clear all savegame-specific data.
Definition: renderingmanager.cpp:1063
void setFogColor(const osg::Vec4f &color)
Definition: renderingmanager.cpp:1185
LandManager * getLandManager() const
Definition: renderingmanager.cpp:1366
Definition: renderingmanager.hpp:132
std::set< std::pair< std::string, std::string > > CategorySettingVector
Definition: settings.hpp:11
Connects the ESM Store used in OpenMW with the ESMTerrain storage.
Definition: terrainstorage.hpp:16
bool mBorders
Definition: renderingmanager.hpp:272
void changeVanityModeScale(float factor)
Definition: renderingmanager.cpp:1309
float mFirstPersonFieldOfView
Definition: renderingmanager.hpp:271
void removeWaterRippleEmitter(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:1137
void updateProjectionMatrix()
Definition: renderingmanager.cpp:1147
osg::Vec4f mFogColor
Definition: renderingmanager.hpp:259
osg::ref_ptr< SceneUtil::PositionAttitudeTransform > mPlayerNode
Definition: renderingmanager.hpp:246
void setSunColour(const osg::Vec4f &diffuse, const osg::Vec4f &specular)
Definition: renderingmanager.cpp:440
void addWaterRippleEmitter(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:1132
void rebuildPtr(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:1114
float mUnderwaterWeight
Definition: renderingmanager.hpp:257
void preloadCommonAssets()
Definition: renderingmanager.cpp:367
bool mHit
Definition: renderingmanager.hpp:134
float mUnderwaterFogEnd
Definition: renderingmanager.hpp:255
float mFieldOfViewOverride
Definition: renderingmanager.hpp:269
void operator=(const RenderingManager &)
void screenshot(osg::Image *image, int w, int h, osg::Matrixd cameraTransform=osg::Matrixd())
Take a screenshot of w*h onto the given image, not including the GUI.
Definition: renderingmanager.cpp:887
void removeObject(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:643
osg::Group * getLightRoot()
Definition: renderingmanager.cpp:390
void skySetDate(int day, int month)
Definition: renderingmanager.cpp:410
osg::ref_ptr< NpcAnimation > mPlayerAnimation
Definition: renderingmanager.hpp:245
void exportSceneGraph(const MWWorld::Ptr &ptr, const std::string &filename, const std::string &format)
Definition: renderingmanager.cpp:1357
float mRatio
Definition: renderingmanager.hpp:138
void togglePOV()
Definition: renderingmanager.cpp:1284
osg::ref_ptr< SceneUtil::WorkQueue > mWorkQueue
Definition: renderingmanager.hpp:233
void removeCell(const MWWorld::CellStore *store)
Definition: renderingmanager.cpp:465
Mutable state of a cell.
Definition: cellstore.hpp:51
void resetFieldOfView()
reset a previous overrideFieldOfView() call, i.e. revert to field of view specified in the settings f...
Definition: renderingmanager.cpp:1348
void setWaterHeight(float level)
Definition: renderingmanager.cpp:655
void setSunDirection(const osg::Vec3f &direction)
Definition: renderingmanager.cpp:447
void addCell(const MWWorld::CellStore *store)
Definition: renderingmanager.cpp:456
float mUnderwaterIndoorFog
Definition: renderingmanager.hpp:258
MWRender::Objects & getObjects()
Definition: renderingmanager.cpp:342
void configureAmbient(const ESM::Cell *cell)
Definition: renderingmanager.cpp:430
std::unique_ptr< EffectManager > mEffectManager
Definition: renderingmanager.hpp:244
Pointer to a const LiveCellRef.
Definition: ptr.hpp:90
SkyManager * getSkyManager()
Definition: renderingmanager.cpp:566
osg::Vec3f mHitPointWorld
Definition: renderingmanager.hpp:136
std::unique_ptr< Pathgrid > mPathgrid
Definition: renderingmanager.hpp:238
Definition: loadcell.hpp:64
SceneUtil::WorkQueue * getWorkQueue()
Definition: renderingmanager.cpp:352
void setupPlayer(const MWWorld::Ptr &player)
Definition: renderingmanager.cpp:1086
osg::ref_ptr< StateUpdater > mStateUpdater
Definition: renderingmanager.hpp:250
osg::ref_ptr< osg::Group > mRootNode
Definition: renderingmanager.hpp:229
void processChangedSettings(const Settings::CategorySettingVector &settings)
Definition: renderingmanager.cpp:1204
void setNightEyeFactor(float factor)
Definition: renderingmanager.cpp:395
void spawnEffect(const std::string &model, const std::string &texture, const osg::Vec3f &worldPosition, float scale=1.f, bool isMagicVFX=true)
Definition: renderingmanager.cpp:1053
double getReferenceTime() const
Definition: renderingmanager.cpp:385
Camera control.
Definition: camera.hpp:24
Resource::ResourceSystem * getResourceSystem()
Definition: renderingmanager.cpp:347
osg::Vec3f getHalfExtents(const MWWorld::ConstPtr &object) const
Definition: renderingmanager.cpp:1325
std::unique_ptr< Water > mWater
Definition: renderingmanager.hpp:240
void notifyWorldSpaceChanged()
Clear all worldspace-specific data.
Definition: renderingmanager.cpp:1058
osg::ref_ptr< osgViewer::Viewer > mViewer
Definition: renderingmanager.hpp:228
void rotateObject(const MWWorld::Ptr &ptr, const osg::Quat &rot)
Definition: renderingmanager.cpp:619
bool mFieldOfViewOverridden
Definition: renderingmanager.hpp:268
bool toggleBorders()
Definition: renderingmanager.cpp:486
MWWorld::Ptr mHitObject
Definition: renderingmanager.hpp:137
bool vanityRotateCamera(const float *rot)
Definition: renderingmanager.cpp:1239
Camera * getCamera()
Definition: renderingmanager.cpp:1274
void allowVanityMode(bool allow)
Definition: renderingmanager.cpp:1299
void updateTextureFiltering()
Definition: renderingmanager.cpp:1159
osg::Vec4f mAmbientColor
Definition: renderingmanager.hpp:261
float mLandFogEnd
Definition: renderingmanager.hpp:253
Handles unreferencing of objects through the WorkQueue. Typical use scenario would be the main thread...
Definition: unrefqueue.hpp:24
osg::Vec4f getScreenBounds(const MWWorld::Ptr &ptr)
Get the bounding box of the given object in screen coordinates as (minX, minY, maxX, maxY), with (0,0) being the top left corner.
Definition: renderingmanager.cpp:929
float mNightEyeFactor
Definition: renderingmanager.hpp:262
void setSkyEnabled(bool enabled)
Definition: renderingmanager.cpp:481
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
std::unique_ptr< Terrain::World > mTerrain
Definition: renderingmanager.hpp:241
void update(float dt, bool paused)
Definition: renderingmanager.cpp:571
float mUnderwaterFogStart
Definition: renderingmanager.hpp:254
void enable(CodeContainer &code, Literals &literals, const std::string &id)
Definition: generator.cpp:870
Terrain::World * getTerrain()
Definition: renderingmanager.cpp:362
void setAmbientColour(const osg::Vec4f &colour)
Definition: renderingmanager.cpp:404
bool mDistantFog
Definition: renderingmanager.hpp:266
Resource::ResourceSystem * mResourceSystem
Definition: renderingmanager.hpp:231
void setCameraDistance(float dist, bool adjust, bool override)
Definition: renderingmanager.cpp:1248
void updateAmbient()
Definition: renderingmanager.cpp:1175
void renderCameraToImage(osg::Camera *camera, osg::Image *image, int w, int h)
Definition: renderingmanager.cpp:849
osg::Uniform * mUniformFar
Definition: renderingmanager.hpp:88
RenderMode
Definition: rendermode.hpp:7
void updatePlayerPtr(const MWWorld::Ptr &ptr)
Definition: renderingmanager.cpp:604
SceneUtil::UnrefQueue * getUnrefQueue()
Definition: renderingmanager.cpp:357
bool mDistantTerrain
Definition: renderingmanager.hpp:267
void overrideFieldOfView(float val)
temporarily override the field of view with given value.
Definition: renderingmanager.cpp:1315
void togglePreviewMode(bool enable)
Definition: renderingmanager.cpp:1289
std::unique_ptr< Objects > mObjects
Definition: renderingmanager.hpp:239
Definition: objects.hpp:59
int skyGetMasserPhase() const
Definition: renderingmanager.cpp:415
void setWaterEnabled(bool enabled)
Definition: renderingmanager.cpp:649
std::unique_ptr< Camera > mCamera
Definition: renderingmanager.hpp:247