mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
#ifndef OPENMW_COMPONENTS_TERRAIN_COMPOSITEMAPRENDERER_H
|
|
#define OPENMW_COMPONENTS_TERRAIN_COMPOSITEMAPRENDERER_H
|
|
|
|
#include <osg/Drawable>
|
|
|
|
#include <mutex>
|
|
#include <set>
|
|
|
|
namespace osg
|
|
{
|
|
class FrameBufferObject;
|
|
class RenderInfo;
|
|
class Texture2D;
|
|
}
|
|
|
|
namespace Terrain
|
|
{
|
|
|
|
class CompositeMap : public osg::Referenced
|
|
{
|
|
public:
|
|
CompositeMap();
|
|
~CompositeMap();
|
|
std::vector<osg::ref_ptr<osg::Drawable>> mDrawables;
|
|
osg::ref_ptr<osg::Texture2D> mTexture;
|
|
unsigned int mCompiled;
|
|
};
|
|
|
|
/**
|
|
* @brief The CompositeMapRenderer is responsible for updating composite map textures in a blocking or non-blocking
|
|
* way.
|
|
*/
|
|
class CompositeMapRenderer : public osg::Drawable
|
|
{
|
|
public:
|
|
CompositeMapRenderer();
|
|
~CompositeMapRenderer();
|
|
|
|
void drawImplementation(osg::RenderInfo& renderInfo) const override;
|
|
|
|
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo) const;
|
|
|
|
/// Set the available time in seconds for compiling (non-immediate) composite maps each frame
|
|
void setMinimumTimeAvailableForCompile(double time);
|
|
|
|
/// If current frame rate is higher than this, the extra time will be set aside to do more compiling
|
|
void setTargetFrameRate(float framerate);
|
|
|
|
/// Add a composite map to be rendered
|
|
void addCompositeMap(CompositeMap* map, bool immediate = false);
|
|
|
|
/// Mark this composite map to be required for the current frame
|
|
void setImmediate(CompositeMap* map);
|
|
|
|
unsigned int getCompileSetSize() const;
|
|
|
|
private:
|
|
float mTargetFrameRate;
|
|
double mMinimumTimeAvailable;
|
|
mutable osg::Timer mTimer;
|
|
|
|
typedef std::set<osg::ref_ptr<CompositeMap>> CompileSet;
|
|
|
|
mutable CompileSet mCompileSet;
|
|
mutable CompileSet mImmediateCompileSet;
|
|
|
|
mutable std::mutex mMutex;
|
|
|
|
osg::ref_ptr<osg::FrameBufferObject> mFBO;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|