mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 06:26:39 +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