mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-20 12:39:41 +00:00
Avoid manually updating render targets from within frameRenderingQueued
This commit is contained in:
parent
2486ec6cb9
commit
fe7b2732d8
9 changed files with 34 additions and 3 deletions
|
@ -62,6 +62,13 @@ void OMW::Engine::setAnimationVerbose(bool animverbose)
|
|||
{
|
||||
}
|
||||
|
||||
bool OMW::Engine::frameStarted (const Ogre::FrameEvent& evt)
|
||||
{
|
||||
if (!MWBase::Environment::get().getWindowManager()->isGuiMode())
|
||||
MWBase::Environment::get().getWorld()->frameStarted(evt.timeSinceLastFrame);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
|
||||
{
|
||||
try
|
||||
|
|
|
@ -105,6 +105,7 @@ namespace OMW
|
|||
void executeLocalScripts();
|
||||
|
||||
virtual bool frameRenderingQueued (const Ogre::FrameEvent& evt);
|
||||
virtual bool frameStarted (const Ogre::FrameEvent& evt);
|
||||
|
||||
/// Load settings from various files, returns the path to the user settings file
|
||||
std::string loadSettings (Settings::Manager & settings);
|
||||
|
|
|
@ -314,6 +314,7 @@ namespace MWBase
|
|||
/// \todo this does not belong here
|
||||
virtual void playVideo(const std::string& name, bool allowSkipping) = 0;
|
||||
virtual void stopVideo() = 0;
|
||||
virtual void frameStarted (float dt) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -939,4 +939,9 @@ void RenderingManager::updateWaterRippleEmitterPtr (const MWWorld::Ptr& old, con
|
|||
mWater->updateEmitterPtr(old, ptr);
|
||||
}
|
||||
|
||||
void RenderingManager::frameStarted(float dt)
|
||||
{
|
||||
mWater->frameStarted(dt);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -196,6 +196,7 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList
|
|||
|
||||
void playVideo(const std::string& name, bool allowSkipping);
|
||||
void stopVideo();
|
||||
void frameStarted(float dt);
|
||||
|
||||
protected:
|
||||
virtual void windowResized(Ogre::RenderWindow* rw);
|
||||
|
|
|
@ -191,7 +191,8 @@ Water::Water (Ogre::Camera *camera, RenderingManager* rend) :
|
|||
mWaterTimer(0.f),
|
||||
mReflection(NULL),
|
||||
mRefraction(NULL),
|
||||
mSimulation(NULL)
|
||||
mSimulation(NULL),
|
||||
mPlayer(0,0)
|
||||
{
|
||||
mSimulation = new RippleSimulation(mSceneMgr);
|
||||
|
||||
|
@ -371,7 +372,12 @@ void Water::update(float dt, Ogre::Vector3 player)
|
|||
|
||||
mRendering->getSkyManager ()->setGlareEnabled (!mIsUnderwater);
|
||||
|
||||
mSimulation->update(dt, Ogre::Vector2(player.x, player.y));
|
||||
mPlayer = Ogre::Vector2(player.x, player.y);
|
||||
}
|
||||
|
||||
void Water::frameStarted(float dt)
|
||||
{
|
||||
mSimulation->update(dt, mPlayer);
|
||||
|
||||
if (mReflection)
|
||||
mReflection->update();
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <OgreRenderTargetListener.h>
|
||||
#include <OgreMaterial.h>
|
||||
#include <OgreTexture.h>
|
||||
#include <OgreVector2.h>
|
||||
|
||||
#include <components/esm/loadcell.hpp>
|
||||
#include <components/settings/settings.hpp>
|
||||
|
@ -98,7 +99,7 @@ namespace MWRender {
|
|||
};
|
||||
|
||||
/// Water rendering
|
||||
class Water : public Ogre::RenderTargetListener, public Ogre::RenderQueueListener, public sh::MaterialInstanceListener
|
||||
class Water : public sh::MaterialInstanceListener
|
||||
{
|
||||
static const int CELL_SIZE = 8192;
|
||||
Ogre::Camera *mCamera;
|
||||
|
@ -139,6 +140,8 @@ namespace MWRender {
|
|||
Refraction* mRefraction;
|
||||
RippleSimulation* mSimulation;
|
||||
|
||||
Ogre::Vector2 mPlayer;
|
||||
|
||||
public:
|
||||
Water (Ogre::Camera *camera, RenderingManager* rend);
|
||||
~Water();
|
||||
|
@ -147,6 +150,7 @@ namespace MWRender {
|
|||
|
||||
void toggle();
|
||||
void update(float dt, Ogre::Vector3 player);
|
||||
void frameStarted(float dt);
|
||||
|
||||
/// adds an emitter, position will be tracked automatically using its scene node
|
||||
void addEmitter (const MWWorld::Ptr& ptr, float scale = 1.f, float force = 1.f);
|
||||
|
|
|
@ -1469,4 +1469,9 @@ namespace MWWorld
|
|||
{
|
||||
mRendering->stopVideo();
|
||||
}
|
||||
|
||||
void World::frameStarted (float dt)
|
||||
{
|
||||
mRendering->frameStarted(dt);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -356,6 +356,7 @@ namespace MWWorld
|
|||
/// \todo this does not belong here
|
||||
virtual void playVideo(const std::string& name, bool allowSkipping);
|
||||
virtual void stopVideo();
|
||||
virtual void frameStarted (float dt);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue