From 40e23fe26fd09bff2aff7d40d6cd7ba02d4aa710 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 18 Feb 2012 16:06:03 +0100 Subject: [PATCH 1/5] added twf console command --- apps/openmw/mwrender/renderingmanager.cpp | 20 ++++++++++++++++++-- apps/openmw/mwscript/docs/vmformat.txt | 3 ++- apps/openmw/mwscript/miscextensions.cpp | 22 +++++++++++++++++++++- apps/openmw/mwworld/world.hpp | 3 ++- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 3b495dd3cd..2b670f3f29 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -157,8 +157,24 @@ void RenderingManager::skySetMoonColour (bool red) { mSkyManager->setMoonColour(red); } -bool RenderingManager::toggleRenderMode(int mode){ - return mDebugging.toggleRenderMode(mode); + +bool RenderingManager::toggleRenderMode(int mode) +{ + if (mode == MWWorld::World::Render_CollisionDebug) + return mDebugging.toggleRenderMode(mode); + else // if (mode == MWWorld::World::Render_Wireframe) + { + if (mRendering.getCamera()->getPolygonMode() == PM_SOLID) + { + mRendering.getCamera()->setPolygonMode(PM_WIREFRAME); + return true; + } + else + { + mRendering.getCamera()->setPolygonMode(PM_SOLID); + return false; + } + } } void RenderingManager::configureFog(ESMS::CellStore &mCell) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 1836053286..dd63ce7759 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -115,4 +115,5 @@ op 0x2000136: GetPCCell op 0x2000137: GetButtonPressed op 0x2000138: SkipAnim op 0x2000139: SkipAnim, expplicit reference -opcodes 0x200013a-0x3ffffff unused +op 0x200013b: twf +opcodes 0x200013c-0x3ffffff unused diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index d8dfbdde47..64491e912c 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -103,7 +103,24 @@ namespace MWScript context.getWorld().toggleRenderMode (MWWorld::World::Render_CollisionDebug); context.report (enabled ? - "Collsion Mesh Rendering -> On" : "Collision Mesh Rendering -> Off"); + "Collision Mesh Rendering -> On" : "Collision Mesh Rendering -> Off"); + } + }; + + class OpToggleWireframe : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + bool enabled = + context.getWorld().toggleRenderMode (MWWorld::World::Render_Wireframe); + + context.report (enabled ? + "Wireframe Rendering -> On" : "Wireframe Rendering -> Off"); } }; @@ -115,6 +132,7 @@ namespace MWScript const int opcodeUnlock = 0x200008c; const int opcodeUnlockExplicit = 0x200008d; const int opcodeToggleCollisionDebug = 0x2000132; + const int opcodeToggleWireframe = 0x200013b; void registerExtensions (Compiler::Extensions& extensions) { @@ -127,6 +145,7 @@ namespace MWScript extensions.registerInstruction ("togglecollisiongrid", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("tcb", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("tcg", "", opcodeToggleCollisionDebug); + extensions.registerInstruction ("twf", "", opcodeToggleWireframe); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -139,6 +158,7 @@ namespace MWScript interpreter.installSegment5 (opcodeUnlock, new OpUnlock); interpreter.installSegment5 (opcodeUnlockExplicit, new OpUnlock); interpreter.installSegment5 (opcodeToggleCollisionDebug, new OpToggleCollisionDebug); + interpreter.installSegment5 (opcodeToggleWireframe, new OpToggleWireframe); } } } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 8939804562..68c09ce14e 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -60,7 +60,8 @@ namespace MWWorld enum RenderMode { - Render_CollisionDebug + Render_CollisionDebug, + Render_Wireframe }; private: From 899aa5b870346bcf60d4fea214b4755c4f4fed8b Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 18 Feb 2012 16:36:54 +0100 Subject: [PATCH 2/5] fix last commit, also reacts to ToggleWireframe and not only twf --- apps/openmw/mwscript/miscextensions.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 64491e912c..baa13e6851 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -146,6 +146,7 @@ namespace MWScript extensions.registerInstruction ("tcb", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("tcg", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("twf", "", opcodeToggleWireframe); + extensions.registerInstruction ("togglewireframe", "", opcodeToggleWireframe); } void installOpcodes (Interpreter::Interpreter& interpreter) From f81b615976b69dd7c768ffb1a4fc671e0c02ce38 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 18 Feb 2012 18:25:28 +0100 Subject: [PATCH 3/5] implemented script functions FadeIn, FadeOut, FadeTo --- CMakeLists.txt | 1 + apps/openmw/engine.cpp | 3 ++ apps/openmw/mwrender/renderingmanager.cpp | 5 ++ apps/openmw/mwrender/renderingmanager.hpp | 3 ++ apps/openmw/mwscript/miscextensions.cpp | 60 +++++++++++++++++++++++ apps/openmw/mwworld/world.cpp | 5 ++ apps/openmw/mwworld/world.hpp | 3 ++ libs/openengine | 2 +- 8 files changed, 81 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 723d10b347..aa69790284 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,7 @@ source_group(libs\\mangle FILES ${MANGLE_ALL}) set(OENGINE_OGRE ${LIBDIR}/openengine/ogre/renderer.cpp ${LIBDIR}/openengine/ogre/mouselook.cpp + ${LIBDIR}/openengine/ogre/fader.cpp ) set(OENGINE_GUI ${LIBDIR}/openengine/gui/events.cpp diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index c8dca2d3aa..89a3f00fb4 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -162,6 +162,9 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // report focus object (for debugging) if (mReportFocus) updateFocusReport (mEnvironment.mFrameDuration); + + // update ogre renderer + mOgre->update(evt.timeSinceLastFrame); } catch (const std::exception& e) { diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 2b670f3f29..2d31cded9b 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -72,6 +72,11 @@ MWRender::Player& RenderingManager::getPlayer(){ return (*mPlayer); } +OEngine::Render::Fader* RenderingManager::getFader() +{ + return mRendering.getFader(); +} + void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ mObjects.removeCell(store); mActors.removeCell(store); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 084f89cb09..3ba60486b3 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -63,6 +64,8 @@ class RenderingManager: private RenderingInterface { void toggleLight(); bool toggleRenderMode(int mode); + + OEngine::Render::Fader* getFader(); void removeCell (MWWorld::Ptr::CellStore *store); diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index baa13e6851..5bfffd3a26 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -123,6 +123,57 @@ namespace MWScript "Wireframe Rendering -> On" : "Wireframe Rendering -> Off"); } }; + + class OpFadeIn : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeIn(time); + } + }; + + class OpFadeOut : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeOut(time); + } + }; + + class OpFadeTo : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + Interpreter::Type_Float alpha = runtime[0].mFloat; + runtime.pop(); + + Interpreter::Type_Float time = runtime[0].mFloat; + runtime.pop(); + + context.getWorld().getFader()->fadeTo(alpha, time); + } + }; const int opcodeXBox = 0x200000c; const int opcodeOnActivate = 0x200000d; @@ -133,6 +184,9 @@ namespace MWScript const int opcodeUnlockExplicit = 0x200008d; const int opcodeToggleCollisionDebug = 0x2000132; const int opcodeToggleWireframe = 0x200013b; + const int opcodeFadeIn = 0x200013c; + const int opcodeFadeOut = 0x200013d; + const int opcodeFadeTo = 0x200013e; void registerExtensions (Compiler::Extensions& extensions) { @@ -147,6 +201,9 @@ namespace MWScript extensions.registerInstruction ("tcg", "", opcodeToggleCollisionDebug); extensions.registerInstruction ("twf", "", opcodeToggleWireframe); extensions.registerInstruction ("togglewireframe", "", opcodeToggleWireframe); + extensions.registerInstruction ("fadein", "f", opcodeFadeIn); + extensions.registerInstruction ("fadeout", "f", opcodeFadeOut); + extensions.registerInstruction ("fadeto", "ff", opcodeFadeTo); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -160,6 +217,9 @@ namespace MWScript interpreter.installSegment5 (opcodeUnlockExplicit, new OpUnlock); interpreter.installSegment5 (opcodeToggleCollisionDebug, new OpToggleCollisionDebug); interpreter.installSegment5 (opcodeToggleWireframe, new OpToggleWireframe); + interpreter.installSegment5 (opcodeFadeIn, new OpFadeIn); + interpreter.installSegment5 (opcodeFadeOut, new OpFadeOut); + interpreter.installSegment5 (opcodeFadeTo, new OpFadeTo); } } } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 17c2279536..a79f8ac222 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -688,4 +688,9 @@ namespace MWWorld { mWorldScene->update (duration); } + + OEngine::Render::Fader* World::getFader() + { + return mRendering->getFader(); + } } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 68c09ce14e..31e0163089 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -20,6 +20,7 @@ #include "localscripts.hpp" #include +#include namespace Ogre { @@ -102,6 +103,8 @@ namespace MWWorld Environment& environment, const std::string& encoding); ~World(); + + OEngine::Render::Fader* getFader(); Ptr::CellStore *getExterior (int x, int y); diff --git a/libs/openengine b/libs/openengine index 6c7e5d00e4..b77f5c06cc 160000 --- a/libs/openengine +++ b/libs/openengine @@ -1 +1 @@ -Subproject commit 6c7e5d00e4f5bf954afe15f10e56f03520abfee4 +Subproject commit b77f5c06cc3fd818a5efbbb42d6c2a079fa91143 From 457d9fd9f8a7164a15018eb91ab5be85e528195c Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 18 Feb 2012 18:30:01 +0100 Subject: [PATCH 4/5] updated vmformat.txt --- apps/openmw/mwscript/docs/vmformat.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index dd63ce7759..b1c5acb96e 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -116,4 +116,7 @@ op 0x2000137: GetButtonPressed op 0x2000138: SkipAnim op 0x2000139: SkipAnim, expplicit reference op 0x200013b: twf -opcodes 0x200013c-0x3ffffff unused +op 0x200013c: FadeIn +op 0x200013d: FadeOut +op 0x200013e: FadeTo +opcodes 0x200013f-0x3ffffff unused From 60856b46e691d1b4386d0a86051656f762eaa29d Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 19 Feb 2012 23:22:29 +0100 Subject: [PATCH 5/5] moved the renderer update call from OMW::Engine to RenderingManager --- apps/openmw/engine.cpp | 3 --- apps/openmw/mwrender/renderingmanager.cpp | 2 ++ libs/openengine | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 89a3f00fb4..c8dca2d3aa 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -162,9 +162,6 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // report focus object (for debugging) if (mReportFocus) updateFocusReport (mEnvironment.mFrameDuration); - - // update ogre renderer - mOgre->update(evt.timeSinceLastFrame); } catch (const std::exception& e) { diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 2d31cded9b..382bc2a3c7 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -125,6 +125,8 @@ void RenderingManager::moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Ve void RenderingManager::update (float duration){ mActors.update (duration); + + mRendering.update(duration); } void RenderingManager::skyEnable () diff --git a/libs/openengine b/libs/openengine index b77f5c06cc..eb61ba59e6 160000 --- a/libs/openengine +++ b/libs/openengine @@ -1 +1 @@ -Subproject commit b77f5c06cc3fd818a5efbbb42d6c2a079fa91143 +Subproject commit eb61ba59e64c332931c12251cac40de5836ff9cd