OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
scenemanager.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_COMPONENTS_RESOURCE_SCENEMANAGER_H
2 #define OPENMW_COMPONENTS_RESOURCE_SCENEMANAGER_H
3 
4 #include <string>
5 #include <map>
6 #include <memory>
7 
8 #include <osg/ref_ptr>
9 #include <osg/Node>
10 #include <osg/Texture>
11 
12 #include "resourcemanager.hpp"
13 
14 namespace Resource
15 {
16  class ImageManager;
17  class NifFileManager;
18  class SharedStateManager;
19 }
20 
21 namespace osgUtil
22 {
23  class IncrementalCompileOperation;
24 }
25 
26 namespace osgDB
27 {
28  class SharedStateManager;
29 }
30 
31 namespace Shader
32 {
33  class ShaderManager;
34  class ShaderVisitor;
35 }
36 
37 namespace Resource
38 {
39 
40  class MultiObjectCache;
41 
45  {
46  public:
47  SceneManager(const VFS::Manager* vfs, Resource::ImageManager* imageManager, Resource::NifFileManager* nifFileManager);
48  ~SceneManager();
49 
51 
53  void recreateShaders(osg::ref_ptr<osg::Node> node);
54 
56  void setForceShaders(bool force);
57  bool getForceShaders() const;
58 
60  void setClampLighting(bool clamp);
61  bool getClampLighting() const;
62 
64  void setForcePerPixelLighting(bool force);
65  bool getForcePerPixelLighting() const;
66 
68  void setAutoUseNormalMaps(bool use);
69 
71  void setNormalMapPattern(const std::string& pattern);
72 
74  void setNormalHeightMapPattern(const std::string& pattern);
75 
76  void setAutoUseSpecularMaps(bool use);
77 
78  void setSpecularMapPattern(const std::string& pattern);
79 
80  void setShaderPath(const std::string& path);
81 
83  bool checkLoaded(const std::string& name, double referenceTime);
84 
89  osg::ref_ptr<const osg::Node> getTemplate(const std::string& name);
90 
95  osg::ref_ptr<osg::Node> cacheInstance(const std::string& name);
96 
97  osg::ref_ptr<osg::Node> createInstance(const std::string& name);
98 
99  osg::ref_ptr<osg::Node> createInstance(const osg::Node* base);
100 
104  osg::ref_ptr<osg::Node> getInstance(const std::string& name);
105 
109  osg::ref_ptr<osg::Node> getInstance(const std::string& name, osg::Group* parentNode);
110 
116  void attachTo(osg::Node* instance, osg::Group* parentNode) const;
117 
120  void releaseGLObjects(osg::State* state) override;
121 
123  void setIncrementalCompileOperation(osgUtil::IncrementalCompileOperation* ico);
124 
125  osgUtil::IncrementalCompileOperation* getIncrementalCompileOperation();
126 
128 
130  void setParticleSystemMask(unsigned int mask);
131 
133  void setFilterSettings(const std::string &magfilter, const std::string &minfilter,
134  const std::string &mipmap, int maxAnisotropy);
135 
138  void applyFilterSettings (osg::Texture* tex);
139 
142  void setUnRefImageDataAfterApply(bool unref);
143 
145  void updateCache(double referenceTime) override;
146 
147  void clearCache() override;
148 
149  void reportStats(unsigned int frameNumber, osg::Stats* stats) const override;
150 
151  private:
152 
154 
155  std::unique_ptr<Shader::ShaderManager> mShaderManager;
160  std::string mNormalMapPattern;
163  std::string mSpecularMapPattern;
164 
165  osg::ref_ptr<MultiObjectCache> mInstanceCache;
166 
167  osg::ref_ptr<Resource::SharedStateManager> mSharedStateManager;
168  mutable OpenThreads::Mutex mSharedStateMutex;
169 
172 
173  osg::Texture::FilterMode mMinFilter;
174  osg::Texture::FilterMode mMagFilter;
177 
178  osg::ref_ptr<osgUtil::IncrementalCompileOperation> mIncrementalCompileOperation;
179 
180  unsigned int mParticleSystemMask;
181 
182  SceneManager(const SceneManager&);
183  void operator = (const SceneManager&);
184  };
185 
186 }
187 
188 #endif
void reportStats(unsigned int frameNumber, osg::Stats *stats) const override
Definition: scenemanager.cpp:729
Shader::ShaderManager & getShaderManager()
Definition: scenemanager.cpp:303
std::string mNormalMapPattern
Definition: scenemanager.hpp:160
void setIncrementalCompileOperation(osgUtil::IncrementalCompileOperation *ico)
Set up an IncrementalCompileOperation for background compiling of loaded scenes.
Definition: scenemanager.cpp:633
Resource::ImageManager * mImageManager
Definition: scenemanager.hpp:170
bool mAutoUseNormalMaps
Definition: scenemanager.hpp:159
void setClampLighting(bool clamp)
Definition: scenemanager.cpp:253
Handles loading and caching of scenes, e.g. .nif files or .osg files.
Definition: scenemanager.hpp:44
void operator=(const SceneManager &)
void setAutoUseNormalMaps(bool use)
Definition: scenemanager.cpp:273
void setSpecularMapPattern(const std::string &pattern)
Definition: scenemanager.cpp:293
void setFilterSettings(const std::string &magfilter, const std::string &minfilter, const std::string &mipmap, int maxAnisotropy)
Definition: scenemanager.cpp:653
osg::ref_ptr< MultiObjectCache > mInstanceCache
Definition: scenemanager.hpp:165
~SceneManager()
Definition: scenemanager.cpp:298
void setAutoUseSpecularMaps(bool use)
Definition: scenemanager.cpp:288
void setShaderPath(const std::string &path)
Definition: scenemanager.cpp:308
void applyFilterSettings(osg::Texture *tex)
Definition: scenemanager.cpp:697
void setNormalMapPattern(const std::string &pattern)
Definition: scenemanager.cpp:278
Adjusts the given subgraph to render using shaders.
Definition: shadervisitor.hpp:17
bool getForceShaders() const
Definition: scenemanager.cpp:241
void setParticleSystemMask(unsigned int mask)
Definition: scenemanager.cpp:648
std::string mNormalHeightMapPattern
Definition: scenemanager.hpp:161
osg::ref_ptr< const osg::Node > getTemplate(const std::string &name)
Definition: scenemanager.cpp:479
Handles loading/caching of Images.
Definition: imagemanager.hpp:23
osg::ref_ptr< osg::Node > getInstance(const std::string &name)
Definition: scenemanager.cpp:597
SceneManager(const VFS::Manager *vfs, Resource::ImageManager *imageManager, Resource::NifFileManager *nifFileManager)
Definition: scenemanager.cpp:216
osg::ref_ptr< osgUtil::IncrementalCompileOperation > mIncrementalCompileOperation
Definition: scenemanager.hpp:178
osgUtil::IncrementalCompileOperation * getIncrementalCompileOperation()
Definition: scenemanager.cpp:638
bool getClampLighting() const
Definition: scenemanager.cpp:258
bool mForceShaders
Definition: scenemanager.hpp:156
osg::ref_ptr< osg::Node > cacheInstance(const std::string &name)
Definition: scenemanager.cpp:550
bool mForcePerPixelLighting
Definition: scenemanager.hpp:158
unsigned int mParticleSystemMask
Definition: scenemanager.hpp:180
osg::ref_ptr< Resource::SharedStateManager > mSharedStateManager
Definition: scenemanager.hpp:167
std::unique_ptr< Shader::ShaderManager > mShaderManager
Definition: scenemanager.hpp:155
bool checkLoaded(const std::string &name, double referenceTime)
Check if a given scene is loaded and if so, update its usage timestamp to prevent it from being unloa...
Definition: scenemanager.cpp:313
Reads shader template files and turns them into a concrete shader, based on a list of define's...
Definition: shadermanager.hpp:18
bool mUnRefImageDataAfterApply
Definition: scenemanager.hpp:176
Resource::ImageManager * getImageManager()
Definition: scenemanager.cpp:643
bool mClampLighting
Definition: scenemanager.hpp:157
void setUnRefImageDataAfterApply(bool unref)
Definition: scenemanager.cpp:704
bool getForcePerPixelLighting() const
Definition: scenemanager.cpp:268
std::string mSpecularMapPattern
Definition: scenemanager.hpp:163
Handles caching of NIFFiles.
Definition: niffilemanager.hpp:15
osg::Texture::FilterMode mMinFilter
Definition: scenemanager.hpp:173
State
Definition: state.hpp:6
osg::ref_ptr< osg::Node > createInstance(const std::string &name)
Definition: scenemanager.cpp:574
void recreateShaders(osg::ref_ptr< osg::Node > node)
Re-create shaders for this node, need to call this if texture stages or vertex color mode have change...
Definition: scenemanager.cpp:246
void updateCache(double referenceTime) override
Definition: scenemanager.cpp:709
The main class responsible for loading files from a virtual file system.
Definition: manager.hpp:20
osg::Texture::FilterMode mMagFilter
Definition: scenemanager.hpp:174
void setNormalHeightMapPattern(const std::string &pattern)
Definition: scenemanager.cpp:283
OpenThreads::Mutex mSharedStateMutex
Definition: scenemanager.hpp:168
Base class for managers that require a virtual file system and object cache.
Definition: resourcemanager.hpp:23
Shader::ShaderVisitor * createShaderVisitor()
Definition: scenemanager.cpp:746
Resource::NifFileManager * mNifFileManager
Definition: scenemanager.hpp:171
void attachTo(osg::Node *instance, osg::Group *parentNode) const
Definition: scenemanager.cpp:617
void setForcePerPixelLighting(bool force)
Definition: scenemanager.cpp:263
void clearCache() override
Clear all cache entries.
Definition: scenemanager.cpp:720
void setForceShaders(bool force)
Definition: scenemanager.cpp:236
void releaseGLObjects(osg::State *state) override
Definition: scenemanager.cpp:622
int mMaxAnisotropy
Definition: scenemanager.hpp:175
bool mAutoUseSpecularMaps
Definition: scenemanager.hpp:162
const char * name
Definition: crashcatcher.cpp:67