From 8798f7dd40485bd905e36290169f02d1ecd442fe Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sat, 14 Jan 2012 18:34:14 -0500 Subject: [PATCH 001/488] Bringing in some of Azathoth's work --- CMakeLists.txt | 1 + apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwrender/water.cpp | 104 ++++++++++++++ apps/openmw/mwrender/water.hpp | 45 +++++++ apps/openmw/mwworld/scene.cpp | 122 +++++------------ files/CMakeLists.txt | 12 ++ files/plugins.cfg.linux | 2 +- files/water/Example_Fresnel.cg | 116 ++++++++++++++++ files/water/Example_FresnelPS.asm | 72 ++++++++++ files/water/GlassFP.cg | 15 +++ files/water/GlassVP.cg | 24 ++++ files/water/Water02.jpg | Bin 0 -> 185893 bytes files/water/caustic_0.png | Bin 0 -> 35147 bytes files/water/perlinvolume.dds | Bin 0 -> 2097280 bytes files/water/water.compositor | 21 +++ files/water/water.material | 217 ++++++++++++++++++++++++++++++ files/water/waves2.dds | Bin 0 -> 262272 bytes 17 files changed, 661 insertions(+), 92 deletions(-) create mode 100644 apps/openmw/mwrender/water.cpp create mode 100644 apps/openmw/mwrender/water.hpp create mode 100644 files/CMakeLists.txt create mode 100644 files/water/Example_Fresnel.cg create mode 100644 files/water/Example_FresnelPS.asm create mode 100644 files/water/GlassFP.cg create mode 100644 files/water/GlassVP.cg create mode 100644 files/water/Water02.jpg create mode 100644 files/water/caustic_0.png create mode 100644 files/water/perlinvolume.dds create mode 100644 files/water/water.compositor create mode 100644 files/water/water.material create mode 100644 files/water/waves2.dds diff --git a/CMakeLists.txt b/CMakeLists.txt index 723d10b347..b3439d1a53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,6 +202,7 @@ link_directories(${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR}) add_subdirectory( extern/caelum ) add_subdirectory( extern/mygui_3.0.1 ) +add_subdirectory( files/) # Make sure that certain libraries are used as static libraries # This is in effect turns off __declspec (dllexport) for windows diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index e17a2cb25f..f1d940253d 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -16,7 +16,7 @@ set(GAME_HEADER source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender - renderingmanager debugging sky player npcs creatures objects renderinginterface + renderingmanager debugging sky player npcs creatures objects renderinginterface water ) add_openmw_dir (mwinput diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp new file mode 100644 index 0000000000..acfda488bc --- /dev/null +++ b/apps/openmw/mwrender/water.cpp @@ -0,0 +1,104 @@ +#include "water.hpp" + +namespace MWRender { + Water::Water (Ogre::Camera *camera) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { + + try { + Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + } catch(...) { + } + mIsUnderwater = false; + + mCamera->addListener(this); + + + for (unsigned int i = 0; i < 2; i++) { + Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().createManual(i == 0 ? "refraction" : "reflection", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 512, 512, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET); + + Ogre::RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); + rtt->addViewport(mCamera)->setOverlaysEnabled(false); + rtt->addListener(this); + + if (i == 0) mRefractionTarget = rtt; + else mReflectionTarget = rtt; + } + + + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 7000, 7000, 10, 10, true, 1, 3, 5, Ogre::Vector3::UNIT_Z); + + + mWater = mSceneManager->createEntity("Water", "water"); + mWater->setMaterialName("Water/ReflectionRefraction"); + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mWaterNode->attachObject(mWater); + + } + + + Water::~Water() { + Ogre::MeshManager::getSingleton().remove("water"); + Ogre::TextureManager::getSingleton().remove("refraction"); + Ogre::TextureManager::getSingleton().remove("reflection"); + Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); + } + + + void Water::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) { + mWater->setVisible(false); + + if (evt.source == mReflectionTarget) { + mCamera->enableReflection(mWaterPlane); + } else { + } + } + + void Water::postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) { + mWater->setVisible(true); + + if (evt.source == mReflectionTarget) { + mCamera->disableReflection(); + } else { + } + } + + void Water::checkUnderwater() { + Ogre::Vector3 pos = mCamera->getPosition(); + if (mIsUnderwater && pos.y > 0) { + try { + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + } catch(...) { + } + std::cout << "Removing water compositor" << "\n"; + mIsUnderwater = false; + } + + if (!mIsUnderwater && pos.y < 0) { + try { + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); + } catch(...) { + } + mIsUnderwater = true; + std::cout << "Adding water compositor" << "\n"; + } + } + + + void Water::cameraPreRenderScene(Ogre::Camera *cam) { + Ogre::Vector3 pos = cam->getPosition(); + + if (pos != mOldCameraPos) { + mWaterNode->setPosition(pos.x, 0, pos.z); + + mOldCameraPos = pos; + } + } + + void Water::cameraPostRenderScene(Ogre::Camera *cam) { + } + + void Water::cameraDestroyed(Ogre::Camera *cam) { + } + +} diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp new file mode 100644 index 0000000000..8e04ca3c81 --- /dev/null +++ b/apps/openmw/mwrender/water.hpp @@ -0,0 +1,45 @@ +#ifndef GAME_MWRENDER_WATER_H +#define GAME_MWRENDER_WATER_H + +#include + + +namespace MWRender { + + /// Water rendering + class Water : Ogre::RenderTargetListener, Ogre::Camera::Listener { + Ogre::Camera *mCamera; + Ogre::SceneManager *mSceneManager; + Ogre::Viewport *mViewport; + + Ogre::RenderTarget *mRefractionTarget; + Ogre::RenderTarget *mReflectionTarget; + + Ogre::Plane mWaterPlane; + Ogre::SceneNode *mWaterNode; + Ogre::Entity *mWater; + + Ogre::Vector3 mOldCameraPos; + bool mIsUnderwater; + + + + void preRenderTargetUpdate(const Ogre::RenderTargetEvent&); + void postRenderTargetUpdate(const Ogre::RenderTargetEvent&); + + void cameraPreRenderScene(Ogre::Camera *cam); + void cameraPostRenderScene(Ogre::Camera *cam); + void cameraDestroyed(Ogre::Camera *cam); + + public: + + Water (Ogre::Camera *camera); + ~Water(); + + void checkUnderwater(); + + + }; +} + +#endif diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index c9d477833b..152e001302 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -15,30 +15,6 @@ namespace { - - -template -void insertCellRefList (T& cellRefList, ESMS::CellStore &cell) -{ - if (!cellRefList.list.empty()) - { - //const MWWorld::Class& class_ = MWWorld::Class::get (MWWorld::Ptr (&*cellRefList.list.begin(), &cell)); - - for (typename T::List::iterator it = cellRefList.list.begin(); - it != cellRefList.list.end(); it++) - { - if (it->mData.getCount() || it->mData.isEnabled()) - { - MWWorld::Ptr ptr (&*it, &cell); - /* TODO: call - * RenderingManager.insertObject - * class_.insertObjectPhysic - * class_.insertObjectMechanics - */ - } - } - } -} template void insertCellRefList(MWRender::RenderingManager& rendering, MWWorld::Environment& environment, T& cellRefList, ESMS::CellStore &cell, MWWorld::PhysicsSystem& physics) @@ -76,20 +52,22 @@ void insertCellRefList(MWRender::RenderingManager& rendering, MWWorld::Environme namespace MWWorld { - + void Scene::unloadCell (CellStoreCollection::iterator iter) { - + std::cout << "Unloading cell\n"; ListHandles functor; - + MWWorld::Ptr::CellStore* active = *iter; - mRendering.removeCell(active); + + + active->forEach(functor); - { + { + - // silence annoying g++ warning for (std::vector::const_iterator iter (functor.mHandles.begin()); iter!=functor.mHandles.end(); ++iter){ @@ -97,10 +75,13 @@ namespace MWWorld mPhysics->removeObject (node->getName()); } } + mRendering.removeCell(active); + //mPhysics->removeObject("Unnamed_43"); mWorld->getLocalScripts().clearCell (active); mEnvironment.mMechanicsManager->dropActors (active); mEnvironment.mSoundManager->stopSound (active); - mActiveCells.erase (iter); + mActiveCells.erase(active); + } void Scene::loadCell (Ptr::CellStore *cell) @@ -108,18 +89,18 @@ namespace MWWorld // register local scripts mWorld->getLocalScripts().addCell (cell); - + std::pair result = mActiveCells.insert(cell); if(result.second){ insertCell(*cell, mEnvironment); - mRendering.getObjects().buildStaticGeometry(*cell); + //mRendering.cellAdded (cell); mRendering.configureAmbient(*cell); - + } - - + + } void Scene::playerCellChange (Ptr::CellStore *cell, const ESM::Position& position, @@ -140,15 +121,13 @@ namespace MWWorld mEnvironment.mMechanicsManager->removeActor (mWorld->getPlayer().getPlayer()); CellStoreCollection::iterator active = mActiveCells.begin(); - Ptr::CellStore* cellstore = *active; - + while (active!=mActiveCells.end()) { - cellstore = *active; - if (!(cellstore->cell->data.flags & ESM::Cell::Interior)) + if (!((*active)->cell->data.flags & ESM::Cell::Interior)) { - if (std::abs (X-cellstore->cell->data.gridX)<=1 && - std::abs (Y-cellstore->cell->data.gridY)<=1) + if (std::abs (X-(*active)->cell->data.gridX)<=1 && + std::abs (Y-(*active)->cell->data.gridY)<=1) { // keep cells within the new 3x3 grid ++active; @@ -164,15 +143,13 @@ namespace MWWorld for (int y=Y-1; y<=Y+1; ++y) { CellStoreCollection::iterator iter = mActiveCells.begin(); - while (iter!=mActiveCells.end()) { - cellstore = *iter; - assert (!(cellstore->cell->data.flags & ESM::Cell::Interior)); + assert (!((*iter)->cell->data.flags & ESM::Cell::Interior)); - if (x==cellstore->cell->data.gridX && - y==cellstore->cell->data.gridY) + if (x==(*iter)->cell->data.gridX && + y==(*iter)->cell->data.gridY) break; ++iter; @@ -188,15 +165,13 @@ namespace MWWorld // find current cell CellStoreCollection::iterator iter = mActiveCells.begin(); - while (iter!=mActiveCells.end()) { - cellstore = *iter; - assert (!(iter->first->cell->data.flags & ESM::Cell::Interior)); + assert (!((*iter)->cell->data.flags & ESM::Cell::Interior)); - if (X==cellstore->cell->data.gridX && - Y==cellstore->cell->data.gridY) + if (X==(*iter)->cell->data.gridX && + Y==(*iter)->cell->data.gridY) break; ++iter; @@ -204,7 +179,7 @@ namespace MWWorld assert (iter!=mActiveCells.end()); - mCurrentCell = cellstore; + mCurrentCell = *iter; // adjust player playerCellChange (mWorld->getExterior(X, Y), position, adjustPlayerPos); @@ -215,10 +190,10 @@ namespace MWWorld mCellChanged = true; } - //We need the ogre renderer and a scene node. + //We need the ogre renderer and a scene node. Scene::Scene (Environment& environment, World *world, MWRender::RenderingManager& rendering, PhysicsSystem *physics) - : mRendering(rendering), mCurrentCell (0), - mCellChanged (false), mEnvironment (environment), mWorld(world), mPhysics(physics) + : mCurrentCell (0), mCellChanged (false), mEnvironment (environment), mWorld(world), + mPhysics(physics), mRendering(rendering) { } @@ -241,7 +216,7 @@ namespace MWWorld std::cout << "Changing to interior\n"; // remove active CellStoreCollection::iterator active = mActiveCells.begin(); - std::cout << "Size: " << mActiveCells.size() << "\n"; + while (active!=mActiveCells.end()) { unloadCell (active++); @@ -261,7 +236,6 @@ namespace MWWorld mWorld->adjustSky(); mCellChanged = true; - //currentRegion->name = ""; } void Scene::changeToExteriorCell (const ESM::Position& position) @@ -284,38 +258,6 @@ namespace MWWorld mCellChanged = false; } -/*#include -#include -#include - -#include "../mwworld/class.hpp" -#include "../mwworld/ptr.hpp"*/ - -void Scene::insertCell(ESMS::CellStore &cell) -{ - // Loop through all references in the cell - insertCellRefList (cell.activators, cell); - insertCellRefList (cell.potions, cell); - insertCellRefList (cell.appas, cell); - insertCellRefList (cell.armors, cell); - insertCellRefList (cell.books, cell); - insertCellRefList (cell.clothes, cell); - insertCellRefList (cell.containers, cell); - insertCellRefList (cell.creatures, cell); - insertCellRefList (cell.doors, cell); - insertCellRefList (cell.ingreds, cell); - insertCellRefList (cell.creatureLists, cell); - insertCellRefList (cell.itemLists, cell); - insertCellRefList (cell.lights, cell); - insertCellRefList (cell.lockpicks, cell); - insertCellRefList (cell.miscItems, cell); - insertCellRefList (cell.npcs, cell); - insertCellRefList (cell.probes, cell); - insertCellRefList (cell.repairs, cell); - insertCellRefList (cell.statics, cell); - insertCellRefList(cell.weapons, cell); -} - void Scene::insertCell(ESMS::CellStore &cell, MWWorld::Environment& environment) { diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt new file mode 100644 index 0000000000..720044df8d --- /dev/null +++ b/files/CMakeLists.txt @@ -0,0 +1,12 @@ +project(resources) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/caustic_0.png "${OpenMW_BINARY_DIR}/resources/water/caustic_0.png" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Example_Fresnel.cg "${OpenMW_BINARY_DIR}/resources/water/Example_Fresnel.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Example_FresnelPS.asm "${OpenMW_BINARY_DIR}/resources/water/Example_FresnelPS.asm" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassFP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassFP.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassVP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassVP.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINARY_DIR}/resources/water/perlinvolume.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Water02.jpg "${OpenMW_BINARY_DIR}/resources/water/Water02.jpg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/waves2.dds "${OpenMW_BINARY_DIR}/resources/water/waves2.dds" COPYONLY) diff --git a/files/plugins.cfg.linux b/files/plugins.cfg.linux index b6e104351d..2921153b4f 100644 --- a/files/plugins.cfg.linux +++ b/files/plugins.cfg.linux @@ -7,6 +7,6 @@ PluginFolder=${OGRE_PLUGIN_DIR} Plugin=RenderSystem_GL Plugin=Plugin_ParticleFX Plugin=Plugin_OctreeSceneManager -# Plugin=Plugin_CgProgramManager +Plugin=Plugin_CgProgramManager diff --git a/files/water/Example_Fresnel.cg b/files/water/Example_Fresnel.cg new file mode 100644 index 0000000000..e091fc5878 --- /dev/null +++ b/files/water/Example_Fresnel.cg @@ -0,0 +1,116 @@ +// Vertex program for fresnel reflections / refractions +void main_vp( + float4 pos : POSITION, + float4 normal : NORMAL, + float2 tex : TEXCOORD0, + + out float4 oPos : POSITION, + out float3 noiseCoord : TEXCOORD0, + out float4 projectionCoord : TEXCOORD1, + out float3 oEyeDir : TEXCOORD2, + out float3 oNormal : TEXCOORD3, + + uniform float4x4 worldViewProjMatrix, + uniform float3 eyePosition, // object space + uniform float timeVal, + uniform float scale, // the amount to scale the noise texture by + uniform float scroll, // the amount by which to scroll the noise + uniform float noise // the noise perturb as a factor of the time + ) +{ + oPos = mul(worldViewProjMatrix, pos); + // Projective texture coordinates, adjust for mapping + float4x4 scalemat = float4x4(0.5, 0, 0, 0.5, + 0,-0.5, 0, 0.5, + 0, 0, 0.5, 0.5, + 0, 0, 0, 1); + projectionCoord = mul(scalemat, oPos); + // Noise map coords + noiseCoord.xy = (tex + (timeVal * scroll)) * scale; + noiseCoord.z = noise * timeVal; + + oEyeDir = normalize(pos.xyz - eyePosition); + oNormal = normal.rgb; + +} + +// Fragment program for distorting a texture using a 3D noise texture +void main_fp( + float3 noiseCoord : TEXCOORD0, + float4 projectionCoord : TEXCOORD1, + float3 eyeDir : TEXCOORD2, + float3 normal : TEXCOORD3, + + out float4 col : COLOR, + + uniform float4 tintColour, + uniform float noiseScale, + uniform float fresnelBias, + uniform float fresnelScale, + uniform float fresnelPower, + uniform sampler2D waterTex : register(s0), + uniform sampler2D noiseMap : register(s1), + uniform sampler2D reflectMap : register(s2), + uniform sampler2D refractMap : register(s3) + ) +{ + // Do the tex projection manually so we can distort _after_ + float2 final = projectionCoord.xy / projectionCoord.w; + + // Noise + float3 noiseNormal = (tex2D(noiseMap, (noiseCoord.xy / 5)).rgb - 0.5).rbg * noiseScale; + final += noiseNormal.xz; + + // Fresnel + //normal = normalize(normal + noiseNormal.xz); + float fresnel = fresnelBias + fresnelScale * pow(1 + dot(eyeDir, normal), fresnelPower); + + // Reflection / refraction + float4 reflectionColour = tex2D(reflectMap, final); + float4 refractionColour = tex2D(refractMap, final) + tintColour; + + // Final colour + col = lerp(refractionColour, reflectionColour, fresnel) * tex2D(waterTex, noiseNormal) / 3 ; + + +} + + +// Old version to match ATI PS 1.3 implementation +void main_vp_old( + float4 pos : POSITION, + float4 normal : NORMAL, + float2 tex : TEXCOORD0, + + out float4 oPos : POSITION, + out float fresnel : COLOR, + out float3 noiseCoord : TEXCOORD0, + out float4 projectionCoord : TEXCOORD1, + + uniform float4x4 worldViewProjMatrix, + uniform float3 eyePosition, // object space + uniform float fresnelBias, + uniform float fresnelScale, + uniform float fresnelPower, + uniform float timeVal, + uniform float scale, // the amount to scale the noise texture by + uniform float scroll, // the amount by which to scroll the noise + uniform float noise // the noise perturb as a factor of the time + ) +{ + oPos = mul(worldViewProjMatrix, pos); + // Projective texture coordinates, adjust for mapping + float4x4 scalemat = float4x4(0.5, 0, 0, 0.5, + 0,-0.5, 0, 0.5, + 0, 0, 0.5, 0.5, + 0, 0, 0, 1); + projectionCoord = mul(scalemat, oPos); + // Noise map coords + noiseCoord.xy = (tex + (timeVal * scroll)) * scale; + noiseCoord.z = noise * timeVal; + + // calc fresnel factor (reflection coefficient) + float3 eyeDir = normalize(pos.xyz - eyePosition); + fresnel = fresnelBias + fresnelScale * pow(1 + dot(eyeDir, normal), fresnelPower); + +} diff --git a/files/water/Example_FresnelPS.asm b/files/water/Example_FresnelPS.asm new file mode 100644 index 0000000000..2de078ef5a --- /dev/null +++ b/files/water/Example_FresnelPS.asm @@ -0,0 +1,72 @@ +ps.1.4 + // conversion from Cg generated ARB_fragment_program to ps.1.4 by NFZ + // command line args: -profile arbfp1 -entry main_fp + // program main_fp + // c0 : distortionRange + // c1 : tintColour + // testure 0 : noiseMap + // texture 1 : reflectMap + // texture 2 : refractMap + // v0.x : fresnel + // t0.xyz : noiseCoord + // t1.xyw : projectionCoord + +def c2, 2, 1, 0, 0 + + // Cg: distort.x = tex3D(noiseMap, noiseCoord).x; + // arbfp1: TEX R0.x, fragment.texcoord[0], texture[0], 3D; + // sample noise map using noiseCoord in TEX unit 0 + +texld r0, t0.xyz + + // get projected texture coordinates from TEX coord 1 + // will be used in phase 2 + +texcrd r1.xy, t1_dw.xyw +mov r1.z, c2.y + + // Cg: distort.y = tex3D(noiseMap, noiseCoord + yoffset).x; + // arbfp1: ADD R1.xyz, fragment.texcoord[0], c1; + // arbfp1: TEX R1.x, R1, texture[0], 3D; + // arbfp1: MOV R0.y, R1.x; + + // Cg: distort = (distort * 2 - 1) * distortionRange; + // arbfp1: MAD R0.xy, R0, c0.x, -c0.y; + // arbfp1: MUL R0.xy, R0, u0.x; + // (distort * 2 - 1) same as 2*(distort -.5) so use _bx2 + + + // Cg: final = projectionCoord.xy / projectionCoord.w; + // Cg: final += distort; + // arbfp1: RCP R0.w, fragment.texcoord[1].w; + // arbfp1: MAD R0.xy, fragment.texcoord[1], R0.w, R0; + // final = (distort * projectionCoord.w) + projectionCoord.xy + // for ps.1.4 have to re-arrange things a bit to perturb projected texture coordinates + +mad r0.xyz, r0_bx2, c0.x, r1 + +phase + + // do dependant texture reads + // Cg: reflectionColour = tex2D(reflectMap, final); + // arbfp1: TEX R0, R0, texture[1], 2D; + // sampe reflectMap using dependant read : texunit 1 + +texld r1, r0.xyz + + // Cg: refractionColour = tex2D(refractMap, final) + tintColour; + // arbfp1: TEX R1, R0, texture[2], 2D; + // sample refractMap : texunit 2 + +texld r2, r0.xyz + + // adding tintColour that is in global c1 + // arbfp1: ADD R1, R1, u1; + +add r2, r2, c1 + + // Cg: col = lerp(refractionColour, reflectionColour, fresnel); + // arbfp1: ADD R0, R0, -R1; + // arbfp1: MAD result.color, fragment.color.primary.x, R0, R1; + +lrp r0, v0.x, r1, r2 diff --git a/files/water/GlassFP.cg b/files/water/GlassFP.cg new file mode 100644 index 0000000000..eb18885d25 --- /dev/null +++ b/files/water/GlassFP.cg @@ -0,0 +1,15 @@ +sampler RT : register(s0); +sampler NormalMap : register(s1); +sampler CausticMap : register(s2); + +float4 main_ps(float2 iTexCoord : TEXCOORD0, + float3 noiseCoord : TEXCOORD1, + uniform float4 tintColour) : COLOR +{ + float4 normal = tex2D(NormalMap, noiseCoord); + + + return tex2D(RT, iTexCoord + normal.xy * 0.05) + + (tex2D(CausticMap, noiseCoord) / 5) + + tintColour ; +} diff --git a/files/water/GlassVP.cg b/files/water/GlassVP.cg new file mode 100644 index 0000000000..71153769c2 --- /dev/null +++ b/files/water/GlassVP.cg @@ -0,0 +1,24 @@ +void glass_vp +( + in float4 inPos : POSITION, + + out float4 pos : POSITION, + out float2 uv0 : TEXCOORD0, + out float4 noiseCoord : TEXCOORD1, + + uniform float4x4 worldViewProj, + uniform float timeVal, + uniform float scale +) +{ + // Use standardise transform, so work accord with render system specific (RS depth, requires texture flipping, etc) + pos = mul(worldViewProj, inPos); + + // The input positions adjusted by texel offsets, so clean up inaccuracies + inPos.xy = sign(inPos.xy); + + // Convert to image-space + uv0 = (float2(inPos.x, -inPos.y) + 1.0f) * 0.5f; + noiseCoord = (pos + timeVal) * scale; +} + diff --git a/files/water/Water02.jpg b/files/water/Water02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3efda7b6a88488f34f83ef292e57466db09818d3 GIT binary patch literal 185893 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 literal 0 HcmV?d00001 diff --git a/files/water/caustic_0.png b/files/water/caustic_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fee464860ea42100b844a4d8dfaa101c3bb80a88 GIT binary patch literal 35147 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Ⓢ+p>caiAE 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�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⩔jXf~T)t@b>`XZ1}WXzmgvic~p|ZvqVA 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

3X6KRrMiKbQ@^|Ag;R0leCt%5#7~ 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%0A}9&@$#GffZoEiQ0$R6dA|3w27HBm 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 z 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

N+W*Q_>{H&2lwvZn*zEswczQ!I5ARL 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 AApigX literal 0 HcmV?d00001 diff --git a/files/water/water.compositor b/files/water/water.compositor new file mode 100644 index 0000000000..67bf908960 --- /dev/null +++ b/files/water/water.compositor @@ -0,0 +1,21 @@ +compositor Water +{ + technique + { + texture rt0 target_width target_height PF_R8G8B8 + + target rt0 { input previous } + + target_output + { + // Start with clear output + input none + + pass render_quad + { + material Water/Compositor + input 0 rt0 + } + } + } +} diff --git a/files/water/water.material b/files/water/water.material new file mode 100644 index 0000000000..9929feabc3 --- /dev/null +++ b/files/water/water.material @@ -0,0 +1,217 @@ +// Derived from ogre samples + + +vertex_program Water/GlassVP cg +{ + source GlassVP.cg + entry_point glass_vp + profiles vs_1_1 arbvp1 + + default_params + { + param_named_auto worldViewProj worldviewproj_matrix + } +} + + +fragment_program Water/GlassFP cg +{ + source GlassFP.cg + entry_point main_ps + profiles ps_2_0 arbfp1 +} + +material Water/Compositor +{ + technique + { + pass + { + depth_check off + + vertex_program_ref Water/GlassVP + { + param_named_auto timeVal time 0.25 + param_named scale float 0.1 + } + + fragment_program_ref Water/GlassFP + { + param_named tintColour float4 0 0.35 0.35 1 + } + + texture_unit RT + { + tex_coord_set 0 + tex_address_mode clamp + filtering linear linear linear + } + + texture_unit + { + texture WaterNormal1.tga 2d + tex_coord_set 1 + //tex_address_mode clamp + filtering linear linear linear + } + texture_unit + { + texture caustic_0.png 2d + tex_coord_set 2 + //tex_address_mode clamp + filtering linear linear linear + } + } + } +} + + + + + + + +vertex_program Water/RefractReflectVP cg +{ + source Example_Fresnel.cg + entry_point main_vp + profiles vs_1_1 arbvp1 +} +vertex_program Water/RefractReflectVPold cg +{ + source Example_Fresnel.cg + entry_point main_vp_old + profiles vs_1_1 arbvp1 +} + +fragment_program Water/RefractReflectFP cg +{ + source Example_Fresnel.cg + entry_point main_fp + // sorry, ps_1_1 and fp20 can't do this + profiles ps_2_0 arbfp1 +} + +fragment_program Water/RefractReflectPS asm +{ + source Example_FresnelPS.asm + // sorry, only for ps_1_4 :) + syntax ps_1_4 + +} + + +material Water/ReflectionRefraction +{ + // ps_2_0 / arbfp1 + technique + { + pass + { + + vertex_program_ref Water/RefractReflectVP + { + param_named_auto worldViewProjMatrix worldviewproj_matrix + param_named_auto eyePosition camera_position_object_space + param_named_auto timeVal time 0.15 + param_named scroll float 1 + param_named scale float 1 + param_named noise float 1 + // scroll and noisePos will need updating per frame + } + fragment_program_ref Water/RefractReflectFP + { + param_named fresnelBias float -0.1 + param_named fresnelScale float 0.8 + param_named fresnelPower float 20 + param_named tintColour float4 0 0.15 0.15 1 + param_named noiseScale float 0.05 + } + // Water + texture_unit + { + // Water texture + texture Water02.jpg + // min / mag filtering, no mip + filtering linear linear none + } + // Noise + texture_unit + { + // Perlin noise volume + texture waves2.dds + // min / mag filtering, no mip + filtering linear linear none + } + // Reflection + texture_unit + { + // Will be filled in at runtime + texture reflection + tex_address_mode clamp + } + // Refraction + texture_unit + { + // Will be filled in at runtime + texture refraction + tex_address_mode clamp + } + } + + + } + + // ATI 8500 + + technique + { + pass + { + vertex_program_ref Water/RefractReflectVPold + { + param_named_auto worldViewProjMatrix worldviewproj_matrix + param_named_auto eyePosition camera_position_object_space + param_named fresnelBias float -0.3 + param_named fresnelScale float 1.4 + param_named fresnelPower float 8 + param_named_auto timeVal time_0_1 20 + param_named scroll float 1 + param_named scale float 4 + param_named noise float 1 + // scroll and noisePos will need updating per frame + } + + // for ATI RADEON 8500 - 9200 + fragment_program_ref Water/RefractReflectPS + { + // distortionRange + param_indexed 0 float 0.025 + // tintColour + param_indexed 1 float4 0.05 0.12 0.15 1 + } + + // Noise + texture_unit + { + // Perlin noise volume + texture perlinvolume.dds 3d + // min / mag filtering, no mip + filtering linear linear none + } + // Reflection + texture_unit + { + // Will be filled in at runtime + texture Reflection + tex_address_mode clamp + } + // Refraction + texture_unit + { + // Will be filled in at runtime + texture Refraction + tex_address_mode clamp + } + } + } +} diff --git a/files/water/waves2.dds b/files/water/waves2.dds new file mode 100644 index 0000000000000000000000000000000000000000..c379886faec80aa3b6772a890e0f49822782b33d GIT binary patch literal 262272 zcma&POK_X_mG;T08f~;0ZM5Nr--0V{P&FT?deBKDNgM41jtn`1B}29Z(*|X|HVK0Q zm;$ ze(gtp`&E72)^_xt|9|`+dX4|j{~b)&*5TM_=xHXCJWO3J?qtr__EVQ?hpFED;b>o; z?-!ngGli$&l>SXVO_@jNshx;F&8E^%GGmd$SRr_rnh0(uD&CFw1JCBb{lJbjX&r{g z;!k6#+|yXB{G?BhOyR&9wfQ&wG!e6(W)k+(R3gXMg(tCa@kt_Fc$&zj_oFxC2YqAq z;nhs}pf_CIALyy@v(jPgYPB_Zc1Dl=XwUTF)kJ;&QmS-dg=>5LJ@u`Dv(xK|XQwwZ zp6RX3nW_EEr7C|{-iuwTug9OA-AH+6_7WGT4r0Bv{a8Gk)YFYeyx%{>{jttZ*6_0-M;53^%Fp2M*-a>v2doP2s(TZ9j+k{=umijKQulWLPWN8^rthhpjXX_dLx-tCKxcN4 z>8b3cF4lNIxhHlww_~5LY!08P@LuvyMl;ra_NIS3Q}G@oCakB?O#W#!m46b>=AQJ~ zg~O}nYg^~U_tN}4a+oOu_fnHyp5J$v9p^FT<@34sCdRwBOE;XG*FWpt9;&zwGB^EC z?6Kg1JrO#Lj)k74I8WQ0Dd%bD%-Kg%ao$tjT&q;rewt0BpV*@j-b?zRH(NaHO;rwh zGo?c-T0ZFOtMDG;8;J+bN2$M@d^Gfz)2-A!-_vNKp!4UfO1t*O(!r>edor3xKDARx zp3CC(Eo{cdK1&C^vEq|xG|zj<>1+2-Sg;Fc;(>19)O<;40XdYY7?`M0; z*n539b-sR>xLV)u@2#y}dvtIL&qBbBu+aB=8g2eGy_N06x!QrKLdA5e`J9aXkxcR>4V07HMH!-*m~`DWY;R?4zJop&bGSW+h66p%lkberJal8 z`0QvATP!^ZM=SVm6+bU=cEzWOO!1(1wA4B~R9}BKF|+<`e0t}6tU>&ck5@Mb&&=ZI z^V|Iw=C@zIGP~hPHMY;CX0|W9IkWxR<=LHq3$v}n+1ahcnFhX4JxKIccLy#uw&G{z z_}(nnb(+{wKM40$IP>b$6!v0g<^RsT>@AnB_mfy3aVZ<%`Z=1v`L&~U{ch*(#0?kM z)Wx-R^E+IxXq@x5_HO1qJCozi{hPLXuQcFWsa*~&{oyrh=gy!TKj)G0?36xmG=Ke@ zlk30!w0*ZU-rc&#_dbca_HM;|{JoclkLSZLdh+;kai?@8w{=nJeuFVI9T4fXz6*%#;#&Ev54H14d?d8d-B^KyjK(Kaurww%&t@jDL4>*ta`r`}QaLBlu5&=c^Kf8?DUQDeQ5I=bghg=ky-;E{_zq z2P+ZcDmfsm2j`i{lk18+Du-8NmAzi8g56f0jE3#QLdqidc=tw1F0M5(CKf!LNQKBP z@xwmOEIJ+_uQ<0x?sehk-Q+0e_Vqhm8|Cup^=h$wXENW3pF8*Mn_l9nhZy169iDV; zeQ?(yyTyk2Jox@-U*uq{FS$GMT5_}eN_w}{pXB?=y^+i5{d{kP-{ZaJgC;+QQ$=j3 zvUiblyO^l#_hgH$3m@dSUj8Vwb>(hwGju=Dir)(!L?_*%(w>f|>_g?@55Em|{YP%N)rnzpjyVm8I?ZI=?JF)ZAHX~7xZx6(;r)P_$PZT&#lt>uTr6DS+)LPcxpg*E=WH6-05LubhP3mCQLD7u ze|eg7o?Cl1S8tsiu84Zm;joHJm~Ir7yEHaoL7aCwS6%4?71xvrt@*Glmx(X3*W&1>qt zfL{`oy-R$?tHdWeVGAShT0!u+?;u0|w?_kDh6uQj_|canf7(1(WIg`Svz@9q!FewE zH~%^}h8}c*8@sT#uGYO_$IhLR?%nZ{1N_?6%HQo=f4|y69LN8Sy+?>~k^P&|$llF< zYvZ%mLuoP5oDC1zi;OT?kVUe9=L?bT|0 z_3bbG8-ou5ye|v;NiFYiS!%^ZgNu;&3{P_$02nA)>? zr)68@`I((Tu)viI^Xsp^u*hS+)$f}p4$R{J)4VToN}^=2VrtYP*9G?nz_hVZ;+`Gn z+PJ~&-CTD!IM08WDR`+50>lA7@xp`eyS6JM-T0Q*4^vmb#nFHEAHjmMc?CZ zED!$cSbsR&zVwG1r@;{?$o-wl8Th-G7=Z0$$Q#7-v9Nr|!j}A7_v7xhhu0j-U&lKh z{pFp`r9Z{HHXg*C*ntx}BksgPoKsve3hbm>irktiKDEh-HW(lqwaG(Ce#gImE8*Xn z?2iyvlGtz_TvG-|6~UT$a2EcNP44$kMEKkh@_mSWtC+1?E+j0l-G3**d3sjg`Kr4) zRCj_O-A^+qFsL1*F7i;15DQ}w;!lozb?p0nsWLdOLL8{>UW`@oOZ+=EO{`b$EAL($ z0Ru)G+izZ&+j{+_DPnhZ;#+`)AO0U zuzhZDiu1063F_q2M$7l+eCzC>azsUVb3b+yo5QdAY_LHLY}qgTH$`1Fi#;^R?PabN zwiqt*{VF-6L48==AL%J=-45h8i$2vERqU$5YY21Jblt#%5wLTB`0vLbz0^bC=Pc(q zfG=8k@O@FXNDP<;f6lGG?Os?5J-fhbE()t+a}DBA4h)e4Z>5zlc@UHBGJjLYmaE|8 z5-~JSj7UDoj)F1B3lk~dVIkw8M)ZIg{9u1-h6LEB&z22fpZ@j1hmQ5cL;1glGxBg9 zJ=EdOjno4N^;#D;db(N9bZy;xw`1$}?Gr1X+&igzAxe?vE^9u3M`Ye;eoQlAFF_ zVgFL5N`0r=PWUFzXXNW>o%~Z@_k^Z4&xB@o&!=P?H85#o{e@Q-HePtWx#1aHY(A5j zU4M3XYW>-vDRAQavg@6NW!KyD#DE2G)q-qj=kgWVLygy{k_#L7zrHuObLH~fddM^1 zeB;N>jlheG{C5)^rWi2GdC&aqJ(QmGQ3I#ORFlf~E$klrPi_S>gM+<%FM#i>MpwP7 z-00g)ed1|-a7Vu1xpi-(Yj<+QMLiET&-jVW;P!#Q@|Ra#i{C^#m%si+``W{IPlFRW zRBsW#sTu76HWc7o@%w0qn5r7mzjrI^+`2#1wfa>W-yb@S|FU7q{P}PG&%a6iE@v8)@9*X>r@_HV9;QaX1|!s+U|Ks!PVs@| zm0yD7d}}*iA;wMk!Fj^}{^nrav-tKmKJu|&b=^Ujn4TF6Q77nHfbU{?e7|&%>dAp2 zdHz_QJXa#e69*LcmCq7Y?4Us`uWxvCp7A-I^UiCp;S*rr=y+&*pc27mt>#<5^YU83 z^%sAgUVpxr-|~G>A}`c;U+bOaZ^#FO)7Z=O-sOR*z24sG?aQytC=XF<UWPOX}dyxwYVPt)JFjC>OC~lPDN#IEAxN3VIE^;?GG2mj0aew=l9yj%@ zbK^n6z4J-J*ZL?BTK(i)db1peQ|~4Z$D-oPsQ)rHc_g&)`e%Wr|2OgG&wiaF1{Al> zj;P**_pr;@fVdv@1+*08&yxuY=+KEbKPoiMDPX)aA#kIm_EA|czG7Pm?QTuf)!fie8q|d zzCVvG%z?#b_pF|VuoiYxF7&XdxZ=8A{DO}gOb0xU>*_+g>G3r)+o+Xcs zQ{UhDpqpIg0pBX-`E~~i^cib!ld|D9&A(* z*Q5L|UWi<*x=;B>Ik(2oYSe)8J2>E29*k68&pbQT9C~JoI$pIv5xh{q-{866rNK!% z{gVMOwhykz54RhKvnhe^r?IK|Rv<9f^#822RX{j;DlsTfXb%?F-i{n`cHUe7{0{1K*noQBMWPC2oA!;472=CrpiD?1i(n#i>$n zaK@uP>eJ5EPbzJT<%ey{ckZ8{#yq`wx7fZ_ET3$?|GN{9#{aEtu~ctctA2Rm@i*fq zzx}t#w#9m>ZS(%fDKI^JG%*Al+5GsWGkhi zgE#;lyCm(zXoG!jU zKJJDOa8V~asqNjuOuLhV!g1h6a{Z`9{g#pc6EkeXA#GQNx>vvWRr~VqZ=QrJII;T0 zdnbe&mcPE%1&;8pRbLG?KYT8|Qu;}bnhfrX8W4P_daZTcSHMnlJeLJ8W%wcD3_nwy zn(^~HUd}EczlRS9Y~33mwqNUBe-Lu*O=cW$k`DMi>cEsAY(gJm%uC)6h`TumPgvCC ze)uZ4;sBhEk5~}oe5uRf_wapu7(UJBJ!P>;;z6{hu$R3g{#gA8`BX_g7joe|xNc$n z+0+bJZdx&Y=kf>QAmASJ;va(4Ab#+xpEzLcTqz~tkaMkrq-W-eSw^?0LM24 zcQ{4ePYg*+i^m`?C*f}`#Q<_al6X|69;Nmeu90`AR1XUGDc>vi!}%7dVawu%iA~}I zs0X4YVnPGVXn10JU{&n91V>opbHEpZkE5eO@R6S$g^w5*dJ<0L;r8qFqg0a~EuHZl zEqZ)Mk6(Ds`2Nxb&k;4wJa#%``T)KCaFj7PvrHY|7YA0A|Em_*8z|9#n-I4cAg6n% zFMQMi@KN-TsQJki$2~V&*A;#`n+n3eh*xfZ{ORx77Vkc26UR*c@7%jN-nIEr`Q-9s zt?j#yzi#{Mhkt5Yx_7T_>G!2}a!eOC>LA9Dk5r2iM}&RGdvn-u5S-ezQoGqLUJBmN z-@5%;5-uRV{_7W$_`J>ca@bsXefZfboGBbhILCAG9HYEV8V(<0jZG5++ z8h{uFzE2p8&l%3Z2dO905KeFY_^pLw-+!Cjo}iw~keh9KHK~gFI^zGE-b+nvU~czv zzCd2)Ea>^znKX9GgBo_e8i@o~;!9CHkMl1}|7CPVNU|le1!Dan4-*W9sd& z;dZczGB!#b+gAZ+Pp`fD{KDepXBJg|k-y=LvT#S)Dn3x$da0Oi1wP8tH_~eb=~IQo zNe~mTpYc4gzO;QVjvreM>hT%kegk`eGk%kNny3*&z#EgQgCp>vHns-85mi5-vHHVz zOpk#WFa!RZRgYNxHS(3cZ}+HXsgZ*W9uPMNMrdrj39n2(C$Cq82k?LOFX;8g(!7R` zGj}U5a1GQ?DUoODaC{4o-*z5-=l{{s@|g=q>;4yy*4}t-Uz{`7pvJYR5Ca>$zG~Gf zb#Rq>7wkVQoKoHllvO*&$wA6R^mZpg*rWxf3vqq9wpsNb=$#~pvj*QKIcvW-{Egyg z%0;KhNhjfCIyk>>ct6zyUCV_pPdvKOX#4Jie`^B^oP_Uph)bY%U}{>^OU^`-@E3|H zIpRzlj?jfox~b*jU?ZDaGrfJ|a(eCKpXJs+e4$7`ps+oBuDDWgS9iwgJB`s#r6)-& z%+d2H;YS5H9?p!S=l{Mz~R&Gi@kO>qA_=Se(= zCj!5zC#7Bid;ziljoIdNuP*X;Q{;vu{z)z#1MkwaP9)%z!E<4&s$R=R!ZS<%zrp!d z=|H3)Hl5)*+rt{!|h0Ql!m(Wp;fI~r0eu1Lf*5$7dYfGDBd3ZR?gn21RhtPkNoxb zXOoK$e3Ad;7Psyv&>X}9!UOmlEDLJ5KtGssq3WHr!%H{Rp%M^p(gzT-PAInz;Jib>+nIA^<$2*u_2$VBjaK~Zl)i^gl<0@&g#q9P z;Nmk8@tttOPI~cPu0a}1kA5LMg`dy=NBF-U{WbEx9Dy|#z?S0trworc1_rXP7St2q zdtgrWxKrZ7%EW*Qz3@CZC%F;$G_v)2If?D1vCBApOmqR%qNxJ917ZNR26-CX2hTgo zYmdUgBqn{W!FyixHlB@Z51iyI=l%$Ns?iCz^3+P|YscgGpSzahUw6NqmXW8}t)@EMjBz_&njq;76#3N^m2Ut&y`8u8IC_&`+&Mqd*K5 z_sO-0QOnqz+px~ALXA_|zL1x1$=`*0hy(KP=oIlAJRfYX{y4a=+HUtU=hf%#jqHA!8V%}v;0MrAWdmR;`oQ@02e-RaSHq)tR%$(d zFuYej*SeP=9t?x8%tJlc?wt=x>dkZ!zq^PV@X8r-yST(ui1-^K2E-qI?$slxdH_z) zyY%p7A3bWYV!uVNFhE}Sp(ikX3E~Q|WxR9a{&nO3@R8m0BfZOC|J)6?*u8Q8O%Hf3 zK)nYx$)ZEZ!ZAgu-}=BP8R?QN@;Q9asGoYL3l6Ds=@)rN7riPay0-ZQ5I<)+-*2_uI;u(iv=Dzfb}P zif2bR2UhA$6v3Qn^#if%2stN$|A)jg$iCrNr1Odh15kUC@8Ef}vAFtwoPpwk1s@Sy zf1~PKdHYMx%C#@O()nPQemE;H_Uh#OuJ5k=oBs9j8Udb@{(-JN`I=q>c3&jdN`t5T zA0c)Gz}D2mm+7VT%*ba=zP5U%h>f%KP^YA!S%2gC1!CO{oT{`6C2$T8>ZBNaZeNzq zmMwwRk2y~AJ~4TU{12b6p5NdMT+aOFORp?a*EhG$4$O02@_)q&@_ClJ>ShkkpiKQ_ zdiUzZaNZ^Qrs;M6r%Cy$aOCb~YsPSeXG7EQ{xiI1VgCkaP^Y&$Ll0(-b7?(($JtuG z`lF_L2E?nnv_{|tbPPtnP!blv=W|;x-?qRQ(pKaZo0l)#k1t=W`H8VUdMxsPC)e50 zyjJhp9kzUVjIJgN*xz|fC#kKlXyjwkeaRc}rwL{ix z>VV-%>9wRUqK_b5nfg5R)xn+W^T5x99)0ynfWD%Cz503p4%SZ$2y8qU^eD#Q(`X5# z7aHzZdzfoq`~3Y*@Pq?A;)H*2Z{8pDHtW}Xt-Jl+?b2%jVu}Se2~Z#4|7e$P_IvqR zkl+7X&ne|27Im*q{`S<;-TQ58A68GJ`|FYpjqiKVB)R!rAHD%zpf4eOoHbaPn%=6x zv&^8+n!!fqs1xhz3xE@ayYu`Wcp5EGB9n*zDUl;8&F4O>e)snu)V}+>UrsN(elfN7 z-23I_vy}od!QSn?kta@o1BfeNc(8O${>kf_I*>Xu56@gZ?iVN2A3zr>Z75nNdg|n9 z=^oIUjMVuV{|-o#0Jo37qXp&tO(~`*mtY$W{8~MN0+`r780(8uPg#af0dpJP7OoB) zPtLJs)qldK8tbWNXPdca<~B#pG>9oRe1g6qbr28UZwW1030gC z&-jIp#if7;Jj(m@RJ&K+`qHNw3%q5tm*5s^5UxSrXp%ZFi0wwGubd2A{aqDsd`Xo=VE9{iB(ZM56-3*$Vi(t z3$HiZd}eS?eLdoVe07eRaAEU>H_-q{=OgR}-s_!E49QdH!Hry*=XYj|&xX;IaMtTD zeq6v_;Dv_j{O!DYN!#b>2PuYF{dLZ@0WUK{jGBd)S)>=+TKMPx`A9KZ{Q=IoLF@xl z(*KXe(5j#tv9bkXu`~=3#bRQS&3nj!Ed!6OZ@kNIf9=Nq9prr%J#puEk-s>>Ro&zR z>TLXg{vEmiKRlEhKFv*Ba7!mZ-R1)m;G;v*12|W|{JBF9ayI-xyc?bn4j}KLuIv`) zYx;6%X?SmFSd5<5@O^Lw5&Si@eE&jxz4&|xUM5IyAh7bqRkygj^#^Zx@o`u4cki7P z&%6BfP&+ZEQ~pmK;-+3u9pa-_@S_b>A0Y6zzwyF3OOxy)miXWY!4NTeJ+^D((~r7V zZ~g0u=7*oR@tHcLLq==nLL23U@9|@U=+HRxj5M_|8+=~|dsWE^HTZCPvBY6=Bz{!J z|It~6)AC!iDnv~`O$lo=8xa6H@&wi#Q4JcE1$-jmwp>3Cg+uh z;QSlpq6&3s0bC@`-sCa$aCwd*=dT)5+@dsL$9VG+x{_Y%O=>>!%+%U5scHI0(vztd zCv9$Bb-%EH@C*EBS7FzdqFb3yf~=fND(l+A)M zr-=b|=?STQs_=>USGcUWa(oTMmGz@7do2lvrhX&+lAB&MIWFNyVu6Kic{c~|``}b8 z<#+rZorn6FSzb4TUEu#w@^{7-J`2*jb<>Y>HZyexalo}3oAmAs-0{L)sRnSa4?T47 zGsOijwNgm_k55wfN{bvNjuryEzVyJtoNx`CBicBwNgb>;r9KHhC0sQl4qm%6BK#bEOu=mE-~ z)rVExKwUONKS2E7{$k(vkCsy3YZ2>bu*v#i9~u>S7_?Rm@&sBHo7seX0UVlJIr~YH z*GQwUjNcLvQVc7jS|D z+~Qc#{yM?o>g#*R!vUkoxijdY7I09DcRc=c3Vlzin_9ssZHasyT%vPED+$M$fdgWe zfZBrEJQ`=dKs-zwU!~?B@Zrb!?KRJO^$j074JSQ>wxvH7+Lr$GP6z$Rj`fE_9bkUy z0JMa}2yh7a;SDce`|)+f0&x@K0mT1FFBHJm(S!_(8|*-Ld#x&*Y>q zx^?C`435(52Iq_~OFL6Wb6?~k?u>ey{vUc>aDvggQD;hbOa506JDM}~qfP%3{T$Dm zBoD^Heo1QK$olKmB)mWpj%sFFy)haHbP(jBD78G=RN{bQ z0R1-U#^N(@zH{hI=ima!{Wg!0WBoJQbooB@ZXLU+;{U4mb8y-8YR1v^kMc-xeFh@v zD1`Zq=4j>Y`95vC((_s zcY-52sn?`e??MmIfo8LPy;yDM=bh98Zs7{}ssOJAZj!G?3)D0Lbi-csF7z`~@TfgS zu7U9(co6Alb$x2|P-ZrLug@v&iL>YXvtVpEbn(2z;wbpe%z%)$&|dQ}=YfyIv!T_x zd}W%tAAT<-EdZK_5#f)Sm7bq0lBZkZbm@asslSEy;^6VLG^^MT*AP7^wFM8j+OW>8 z4nC}+9YsSJujBjJ*(lf}l_S5DiRsdHHsJqe;QtrC3;*5z%2oG1+~5Meff+ta1OF%f z$D~03d&Jd`74A?yW|MzHIs-J69&)maSn4D$cjNz#RJIqZhvj zqIZbE2ZNvT==sOH;b6M(mu~W>t9AQE7y3XaIn__^gn1$9Erkbijz|AChSn$UBrl@{ zO!$bs#C&Eg$ffW-a6Rw|qvPuJftAsNMx*3d`Y(6ijEhsG=fLw^Q$NowZg2IgRQGai z^2AE5)W+8x)cfdl#@5< zRiiHj_iCPm$KQHtCMKk*i6eY|Y3em^18b6y}jONNz z7pcE!G>@t+WY6ICnz6Y{G1aZ;1QN64{Q1o@19QhZKiRHy(aMv|CdJ?r64Y)f@A|_8oNWw^X~st#7*OrbXAHsxsP{_kKMD?2 zj7!FK4cI(v^gj46aXB@;>VA7x+&|B|2*zj- z6N;R75)F~~55+#!67-PxdvHB*WQO=Nzj5YG>WJam>W}}Wifz>48Q=i(aLOsgu4&%e z6t6vt)_>t~?>{v0|0A^6E&f|GfYX}GAdXB46YBX)ZQ?7I(JQLwloVEa{LY^pOX)v# zVE5g`XUE3ygO0~Tf9_h1f90kou)w4tctLCF^6!1Z0Pq8T>SM2Xyv_2*9cbk{$o<{K zR|oxEc-L@9Iy^Wq-)8xvjz{$}xp~;Zd`Uq4m4mz`{grs3Bs@%z`oXW+9c&RUA_^Xg z;%n3^QD!l-DeP180fR2|!QJQt9B2)@(F;1HAKJS8Q9C_`uC;o~2?ju?u706(z&+9d zrs3d{%0I0eFGu(p_%@;1fmo7&KS)Wl;99SuLqd-ru9ElS5f>#4O3cJ}Vyc(u&*;HS zM>LTG>uDBJXKz#An;wzLm&}lX)xk&DJX|YV_tu!PaPT6#IqW)z8D;YG}f# z2L@;UhWXJAjxYnI`L%4ET32QJhkJV{$fgDrhhKnp0sW(@zh;B~8Ed{BX4GD}^uGO>Y{_ z-`dB&IRyvR4jy$dJ7nepi5HgoW;`c-GxX8S5Wy)(zbh`CdOJZ~0G`kEi4&=VpBwm- z`t%iXB=Q~2Gtf&xv&ZL4g@x~k|HNK+12nB%uLQWs$`M2Gd+Da5Mb5eiCsH9MQit_R zyCp3cJV1P&y4`561u?Ijh9|pr1vw8zgN^N z0;kug8*1y%zh9#ssA(n;o}vkF&|Eox*7RiI0FTK1Ei|ADs?*>w)#IJvoTj7)#J3bf za+|M|t*wE30qUjB$G`mZ2{`YQX0DRlM}O6^kzuA{aMA-l32eW4$660P@Cy$ZOb~zQ zM!)I;GdRFpnvLn^dN7M=bfV<7KIwHWo%z!JyQk1&buf47K~oXI4^;~)1`v~_1(aRn z!3^kw&{^*eUKGA2cQA8F&qn!Cnw^y|e}(VI9V=g6BNkj!9O%a1=^c)A(}Q%;M&1rD?#r=&w@-HVe4!}Ry)6JON~ zk$N;XvjlL`*rVoD@O^sI%m8NTgJ#2NaeQciio}{c`QOZzpes+SpT^HB#y04QF~61-L(^FKxk33N2K|g?=)45Dz^US*y`UQEgg?bS5*w6?we@dOM8Oj{?OI%3c^I&Y7 z+8g~MF{LIQ4}HvibPW6Alz6QfY{%%>h&v7Py5_2?vQ6bVa0RhCCC;M+M$rSkK7DfH zi76qV=Yzh2G={u`5x&w)u)z*S?`JSQ>`nGO+EVpeOO`)JwWmd z=c<07=4_`mM<*P>bu8-4m}#tSzI&#o`cAQpnynx%hJTa97Ooe4V6GkbuAo^e;wd#d zdhitb2mD`ik;D<{|1`5h9bo!1Q`7--~E@`G8|LV^t7q0*BZ7c76d5UZ8hEoaBqw(>+e7rxeI2O&o z6C1i#hrV*a13KVYo#F?V(_cH+QxBONVm2nr`7%Q){ABjC5DzB`_6weZ>^?0$nSWN*DOT%n)zic@y1c z6#hS9WI52#U*(#g4Hmk82cxeI5-^Bl$@Ktm0Vhv`ltIBJ{bz--b;~E#>{G~w` z53c@(@Dct*e2MiQ&zWiVnRrQDOH(h3+tb{nw1vcW@#Vth#6tZ}Oq!Ze&1YHIknp}A zy@iL`-a&0Coqq>^XOE1BXtp>nK(#uHWmQ%k)7!C}i zzG{IUnmBcE9leE=4Od|s{tr!K11`6&J|_OF8OS`d>03nc=R%cSr{rmmY!` zon$TyEs?ER{VDbGseOysqpe=`!OaxfMfzmu;q_eLI%Z1}i;w=^I(qaEuN|#D|LQ(? zVG#~mb3d(>%Rf0%&Gu)L%CJJYxR96k4A-&5Q_J;>SiqqS(Uqt0)Fg+iPyT0S*xNgywGC#i8a7W^_rGVnE8w7sD4+h%GZ<&erPrbBpxE=A;=`O;1eBp})|aWk_eUReUK= zU6bRpqv2;S#4WH4Gnv#D+H0eJhprLak7A2*E!v0P(K47DZhVklMT)uvJ!*6mejmG_ zrXqeM@n64mX4E9z+qc;xaqG95=V@Ddc)P9n`G=>;C7p2hZqCAu_Fnyem*&&p4g%-` z0>aVM(r~pYGpnIoDLs{5U!N5ow1n<0ul_eNKw3R~X+S-k3b?UIT+>_^wF0~jx^8qo zC3Jt{c+&hVi9f1_6DExiXF^~BcnVYVSHOE^v_eI4b`gHH%sB`{G_V2cZ_R_#7r4T# z?rWE);Ww%CC*b_^X>oAk0eN3VYCn2{=mM?&X@vcpedyadsqx$X z@wDvg+*x=p6O8CJAA=$6AX7I*_8{#~f zuP2t^JJ|X$ucz5?cJHWuR4<6HrTfZD%MFhfA-9?x3fO&3`v<6RG@p!Kh<-JCW9_AY zx1M8mWDYIU6kK-|pO%lux!w_KcQl^^^h_*^o=lDyo+E~Gt=S1R-k-!@#Mi3V!JHhJ z{}!CWc)zrV`rP2w7_)8Y2+oTWAC(pWT);dOa|Pf5`sKEJe7+L2)T+xi*}RTBRv zKCqwX68dan5%mi_R`$uT2ZdTuJ3!LJH(`Jx*iQbh-6#>AtL9MP-Xn%ni82#`_MV!- z=qbb8|MIFb{G0N?koh>O8dL`8;_%kN+2>?;%c?;cb}xO=!Qv z4DXLRO_&PJzGmIPCDMYBPiE;O94$P1=4j~$SC3YIm|kRVP_v><>9N22=}(XTdiI|* zhk1nVaGpA+f^EY)OV`1i{LL8iJLBET=h905b@acrq47OIp6}Rv_kI@~KKm1f(e>W! zTKv^FC%zs1KieLUf73=^>;$_p+Rw`gwx{{|tJb$)JZF9T)eC-R z1Qb)*@e|@>&-O)Fndt9Rs1JT#wL$>OF^4OGoml{wrIA!|MnzISe3zKd$ z!nG2osW~R~GMH0N)aW(PiyqWmF*An!s`JqVQp2l`nc!M7zoEFRISe=ypR`nKA3k5$ z{OF~;_((7p`LHjidI#)uyu)Y0>`G$K6m>BB>!>;4BL=BSm}8?JN3X*yq2`z1Ji_n> ziBWi)k{fNP+3kZpwxhx7B;R+C15U&Dw{zWuB{c_v_Ip(Jso!;OW$vr)_Y$Y2<%@vv zbK!idIjAg@#D&6X?&Usum7({k6(V~ zh`vlqS|aAE;Ce#yE9cG~DensdQ2V#gJka}R{~a^z_?&i{Fx#B!((KLS-+kKl=r_z# zP5e={e;fUi)A)4<`J4GzG;-{~(rLaO)=NCa__wK#R2Ave8d#(Hj)oA+jBKX+{TXS+l`0mTd}W%onOLys#WQs8LcE7 zk~Avpdk~Hd>)fRa$-{l{`l&SaauNQxvGmUOW|w~Py=n9>dDRHSBp*DMY9tTWNP7n( z%#KkP8%$w(+}J0xlG=R`(<~f#h8-u;vEQE3W>+@!SS|aHF#_d+fwRzyOevlY27+_ykgxSn|^VdI1vokD6tTr{7YGmG1gx@#XaMh~pt(ifOrkZq?_@a8G zNN**nctj75nL=V|f>{ImRuKE~@_jd$(gmN_CEW=*T|0idw=)$7zr*ZC79H6T^PKN> zF-Ioe*$M9_9gz5Q>T%Ul%;sjtL(~O+a27TLR z8opzWPh1rJ=J?tt=acLJ(d<7w^?(J(qxv-u)`M@Me-gFOgoMSn%}hOaPW=SVP%|U!5HdSKYSIUQ>!|DAE%A^pM>~e76VVJ@VrLMuBH%ar&k1HH zEY%K++OhE6>)$(C>ifYF|2Di)}HB)k23l5AQ_1&-^4@g?9Z(cMnh2 z#eR;A+mCUX9KSZby9q?Ymq0LvIjGp#|=U!~HPxhM$qA<#X7+=F?^WaJ_tn zDEYk)4xN3X)ZNVLpx?fj;+$gOaB>0r`N%K$axACbPc#0^)N1O7v*M7kn+W|z_{x-< zTFwnVA#RRKUjQ${E`u2PN%~f}FLPZI~JLwl^Q#P1e zJfr4g;S5vSVO89G{{`)|6n^3T@Z8MPi3>NqFYUHPUjtqNv%uB&VY_{Oh7&MY810IQ z3t%0tA9FM8ikis#*vlc^l*P8#kHo>Yj{NG@I>AvAjXUPN8Tu-$7;R<$L zrv{TYS94a4*6`UHbw!0bSbZApgF}~@V7@bhuJ5{f`_xFoaFw=pz!cT1(0mm0B5B^A zcE)P9dto*B<9*YY9eidV9XEScI773aFjHg4%%Wz{&@0u!WO@0Vus)oruH9*R@u%s< zwacgA(>sU>r`JFH?8M5ye9=a3?}X#_fXm#}RN8~tO?>SD^NZ_uFTM5$pY%WI6@v5y zRd2cBUp>U_fOOsJnR9+YW;;XZIl#*k*d9Euv~Sv9o5jY#*_?y&1Gty{A>=OJr}lZl z8KKc))?c_mF`M&q)6;dJ!*dCPifa<)CBJC~-Rw0sJwoR3i7~?c;^o=%AwQyDjDK;~ zhO4J$r2mwNh^r@0QNw9(Q9MpPm)1=2M$V&No#B2|%W6l7w6HwDkl_OLdj(uaod}kq zhBS3|IAP}cj9%Ryqo+si7nTh(TWejcbLP{Wd0qT5_&KP0hq)!q9!Y!1Tv0|ljm7`d z3mavRg4v~jKE}*7YA=TJKb!!X{F|0`C2B`1oGE)%#0AH=rr>VX*gT*31MNpH!daEs z0bCRZsai@oj{4E)%cL1mU95T>e>8KX%2kR3`*4%k8Cu{>l3eT7Y%FIWO_pN0_&qd; zRt{{VnfN^MGp^lF@T`6_U-9WH+R^EVY@sCv5Ee~?6%8`sVm z)d0MfpEyG-w1b-QWA4g{O}VHkU2yw8G$`sjonD&w!|COlzdt3N_VFA?44#BNG&c2{ z{+1aadIDY43=aCq=uC&ZG+S!sRmc&FNnklRi9Ed~?V~0)iR)*FqiW>iUV(I|rk6pD z$62y31uR(NTAH~=G*NZVbQ=4sYxYh&9r}Pd`Xw#tBEV8prY93+ze2)ji{$@x@dDt6 zD(6xoch$+$bJ7TcADP);wnbYz2AK6 z$1TlagMp_NgW!OK=gQ!ZhP3G7u)x;rHp@G;BW3lslWpWu?d0sjrycOCPOd>WJWB_8 zUs|fuU<4;N?A6)B@ps|(UGVQ{df;2xktIF#qVGZAul}!n%mlfZ33j2yaFMSxBM+xC zk>*^J=$RwTUc~jF_P{ULnWTLV*rDlfWmIQ#{gs=wGlyAh_5Jx*`AT(IoJWxQz>6Ny z%kyjI20x}AMQejSRhfCN;jd*do%*^4KjY)lWCZwZe)5TQW7PJ%MrurZ8WfAD9q^@F z?0uX}1(nOt?AdU%MeJF7%-OA?I&YA<#f%>t3y9N0KULH$tKv3!8vlp4W)Gp^^2psL z&M3B_WyZJI)dHW4jvJhE+{a;Gpz_9gyyLR%s zZgCfiKhyyDHM*Y(^;6@#uQ>h>2M3-Y=BZyGt#M9s3DTxwXC<(|xa_iOS<|Z&&J}-f zyl)TR&!AyJTaPAIeJbn+yvm+1dgAzg9Dn!0@i^G|=1?z!*GEGujR4qKI)fB_sZlFW zPE`ElIue`kcW^R0bu8X%I0Oz!Gc#XdKA=HOqS@dI=cSl~t}|=qOSNkSY%dnQ)H7St{}@ltSf;z_`E#CASEI1C)eb8JNnL~3gj&+uOM+?;3(ny(^eeL!lAA@zm6?D1NXeXw)_S(fVr9GajZ@K5` ztIqPg^aY7G+GU4bQP9)UL& zHOry%rjILK8hs_O?HK+<4aQCmFSgZz-=Dz$Pq5Saly;yI1Lga|_uceU<>wvb`)*>f ze9f(MhX>I7yBnBh7D+ezb==!13)r|9dCBf9+s*kz>)zpx5lR^XjcI%M#ZN zu{49k1K};rlZktv?;cano7r38ady2kA7lCg+Fx&W&qtG7_aMA@5FNK)J$Jn}d4n1) zA?#mf-(-#Yzb0KB=ZZ#%`acFopC6YdgL;oyZ{gu6IV(l2teSuwnZ#MH5gg$tF(!*{ zFV?I3KNQ&SmT9*`zL{297Sb_!FY+0?5cxF^M@ zfci$}^MI?dCGCByY8KAC7WY5E=FHA))f$`+vx#~3CA_P-W$b4qie#5YeuUQP;AYTRkZJTe@PtM@_4}L)^=PvscejJ^BK@s*++Q*Gw2!aY6kD zu)TKBqpON(|2};=cxtpR>;o9tHsbKqlPbT8~x1y@ps zD7L8Q5+R<&)f+_DSpZ)ZxCW|8^6T$;%1aafIJK60wzi!)C;u-fhI2l?|K#qlG41U| zJC^N+qm@>~DSf}NB{jX986W5JFTU=CgX(0a*R7nQUM7B_`R6jcn05oue`Kbc9i{Mu zZe~{e)TU@^$FUpnHhN9oyV?D%opqxjY>eHh+)IMlEpR$>i+yPA+0l?-hqvrmJs$SD zo4k#-R{b`#kBci8f7;T{Gijdbv&`Y!3#*rYI*&iLG~XwE1$7j4{D}Cy8W>?gS}N%> z$@hvA>dCjXH<8zb2h`qX!#{|dQ5{m${vh^7PA`7{mvfJuzhn>K(EOvnOY?R7Xyr$5 zAFclM(h;w@ul;`F_xOD5pJGQ^LbGY95WQpV)(zliF7|CmFLeqH%_;C@J9Y(+u4~1< z-y0?E+174*aVrk~?MD0F%?w;S`;;8S0-t&m^d$3WCh&zxKe)g_ukiF=Q~$jk9iUS? zY{-Yymgv%Wz>gizvb_3PM7t3=3-tp$*py;1nwrS)(O9=tFMHup~r%^gX0$GXz)KeHfglT5pck8YuYu( z9$>Dk_HSYLXhG0;N(W=O7<9Vo)nUK%x7jsaFg&1*enYXQPK~7=xbmI$K{1m;%%NtK zt-wohj|p}r+0?T14ynfrrUx9u|H!xW7QkWR@TgIVOZc?<=j8Gs%@lWPS1nvtJ2jbh zp>)6zutVV*H7xtpGP)MxnN zq&ce57oL-Dh*}e!FxqkTm6&7Gbx^;W*hSBd{dynVcA%y0q{rLA-Yo5V(|$bWx7gAC z(Mus}f9=dhJ3*gyjCsVYnb*#7T~rg4z{b-4f$73|uvPK#jUP6af90xy0dy}D(}QAW z#EoX#1-{e0RixwT#7-UXd7Z-T;B(z?#q{;iq;#S)aj=uc!+d0jyjUO~vNIuPw2jo8 zX}Bm$XRqEV{{}f@^#Jq433iTMm-YwUNhXia2>_Npn~jT&!(J=+V~^+q0^*X+QdW*_?!^!i6l zUzNC^9Xu_#y9IQ5i_{6?<&V%=&0v$7@fV+q_DZvZ^yi7moS`t}?CKBWi;wY7{8STQA2FqwwR9k~B!93$xug;TvewsS^G}pLO zc!)eCUMGkK#fJ@R|D6{*?uP4gzy);DZ!x}4pMu?>QT7hlIc9{D?8f!4roQS%6VRcW zjGn(&dxO~P#yqO#V(6!!BPAyWqy<>J_RzZ&|C5Wpf%a&z+fBF%{tga~+NemaqMg%d zQDW@2$il7hIm8uc{shf0m{8|XRDV{xmGEEo_xCik-;%#a>w@lre8;&eZ@JY!g8Nb5 zjQEXhYJU{ifY@TNu6!1bh@K1a%rdwSJkOqX>OFF04*$>N2b$T{`zuL%i9J`zWkvd6 zx<8EgHQh5pc$~TRap6}dv6J~=@^ivyfwd>n=s<|c=-_lVaBygaslkoT2i(todG;mV zx!wsMbCMYb@i7i+Z5Oz}L!aHhQGQ7|p8f;*o&D^(ZieSip;6GTL9i@%O8ZcgyvID8 z6nMZwD*{eJkHFvN;T@y}s^j~!Xv5h%^$N4QBX#BrwWAWgShb2~_1J?0Hp9=mn58+* zj>HapQ~AJ2ttcIb2aX|v4kiu9$NrU&&+J#^-VI<8^*_zMs^Ivl)ch53<9v4QU(PR< zo++8fe-S}ld z`>NP`B8^N%S}69V7MPioel|jF`v2y8@;H5(e40HU1@k?%;pPkETW-c{(tCr4$#b%QVSXF3fORbRJ<4S?WW%JNH<9> zcba&vd-^!ZCE#Ovmnml16JuWWp!EQUxzO^t)PoTZ3$8NycYKrh!ft|rJJO*C;Q+l$ zSO3_}e4vMz5R`Ta|1ZE@kW0q3GY$>z&4BhXY{l=pwcozUj%)TCS=4=L;)&UnE$nry z6U9f^r+{x7jV5t`8WD^x%|p~KkfRj~%is^rP_ryy=_j;HRdZ~bH4&b-upiAXN(0Os z6+J*=p>VJ9eR|{6y5h*y>rHdE(uIn11RoP86eEZg*sIy)$@?l(X9yQcf6ZPSaJ13m zhNbnTx8Kh!a-2GbeWUCWC*JvaUU(?@i9GxmIx_yoJc#A+AMhC&!)b_z6Au!kR`H;- zaDubii2t>DrC9$1)SFU$1m!>H0YNH;Yye(0^5T}73+zy=(m{7=RHN(vysNn z^YDWaxJCGZLDLI?pB4{TUrRkRzjXPZ7N{BL=|{1@!Zv#du^;?D!@Y*aZS`;TUZk%< zXL$nu)O}l=il?%TV?LGM9^9#Pe)LO?|Fb7kbNxm9z5*`O{6G3x{0WW_oI`EUZ>zR? z{MmEG?`qy8JE62ETDumc_ap|Gy}w=5?58$z4~&fxzjYre?Of4L83(U#>QdPQzH75T zu&91Hd|8p&GN=0{fD5!c84cZSo7_(=4IeD+zy76PBmNvcfH)g`3k^N@dlC1?=gCti zsjk<&Z-e~H{S(mSULHXwnQE|WL-RMn_KWP%nx_Vw!5*gJfv2&{8D<~Fz16{ARq7kf z2dd6jEK#3+Ztb}@7TNi=Pu}0>cU$Ow7twAm!qICtBN{;V{jx9Q_&uY;M3YGz&`iY? zvsZJ}oy=9J&K%L+WcItJ)H9gp=Vnh4*8&d8R^0*~J??XfPvRO1SdSE>*XAHEQw8NFMWW%jc+aV(94by?P8MtTYgACGA#WH zb*d%3wDfkuJbd<)W*Zc%^_ey6%uc0#_MPh<8>8r7^fT?gH+$-j=P<~R)P4cDYVD5= z8a)R0{Q^&Me>F1`$Gv~h$3@kf6ZXR&H8;!sGSr_GN6Ib$^mnPabji|tlQXp|Q#eCA zIGOoY9tW3b&kMUB(Hn!|`^DkmYv8Cv!3W1Eoq^GZf|0ckKyzT^X>eHz{z5S(q23es zA7Ivz_v@E-628kx@6;vC0*^&dRisS;kD2&% z{e>$1NogkK|K#mV87&0+{07m~u$TMdz$~$C+RQ-M>`NS?p92?+ZHPBzCXoFb+)I)B z?ajc)&uYe2*dCs~#jekNc6ovo`kV59@Ru;aJpVl_K0rMe&Ox8U7FJR3MH)eNe3<=> zT+eA?3Hk{Y-jm`r8mfU=?Iw{%0FHqjFh;|j1jqYSV@op)hU((lx_D^UjuYKfH#r%t z8TU`rUgs1Tm-{-w3Fv-_4#j!$j)y!SIN;t`%mkdlu15D;V-GSMYS^Ymx9M$AyI&NqGDx3_S*#4c#y#n%XYd*AaRFP0 zsk51{F>#!~Kj2cy$XGMaG30DAL$e(`u{so5JhF)p1w_cZO}J`~I*QNz;Xm9|Jd zM(Os|W1xR2%?x+~j!b=d;a+l_G=~<~2;DP#Cb-WCb+2ZA^2&?KFZ>>H2M#}@pN(1M zvjFD-_nASbKCbyopW(CVx$!&r44O&qt$<&nLu0Q1{fYH=Jr&_SfmGQ#G2`o|$7$ZwuYYJhr5{7R?C~kKhqU$Gp6Mf8vI>tU{-L^b;~%Ti$qI8Ea}igM z=cDaJ4u7dh`^e9vCyaAmE_Om{Pox9h^E9)eZQs>?YxKR+n-W7!{KHSF|HgdOjREv1 zrdKQsW@0dPCOMPcmA7-uMJ37q5pq+KJ((fqRJBtSJAjW#jQXh~bT1Lx*tNm^a~tf-n}P?f@cFP6YHxO_VQ0+f7%oq&>3K7Y zhuzU%K~u&(op@gGXomWbdwt|@I;j3%8PpOnvFICy+tGc(#V3-2sW(Qqyi zVk+@9Z)z((n|AqH+P_8~P+sP~VBBv=_wr(~kRhZ#M$ zdIH2h>Vbr2E8}R5ip(5Lu@`=NHU7g{c0te4-xOD*euVZw@xBY%W2`w1-7l-1+OVD4 zyOX^coz&ay(tuN+YcHDge&YQj__evWAhrX~iN<0qCY^MV*i@y)uW-MH61m=J`tPdZ)Y z>L7V1z%>`YD(-`rOB`T^1UoQ2X7Hu%!($Nxv`;k64(kZE=hqGw%?qI+)sDz+xCe0y zrtb_!L08L8RxPR`D{aj!h&000E z+gb9wdH|ZSrN*)hwx`Fpzz&|Kc6dk=!0$D+CxM*At_JE1?QCF>hg z%=+k_5CLLskbRZuNA6EcOaC}gWrWMvGt%<}t&X;Sg?~ zVvn-=*6i?w105R$=c5_m9_8S4gF~?qY7EWX@jO}enb5VM&j+iC&(J<_-Al8~dx4V| z2dKEK*H0ACduq>jk+ZkqN#o?OIDDMqmFaVUztrnEzV|1)bTo^|Tu}uZ#s8T-fk!2d z;Df?GW+$O|Reg4IFYe`>tFidY?@wzN^!m`Vv)sEv`qL?JtoHoT^S-I`?pEKIyy2if z(~b6{8~=AQPwzl; zbpgy`^hjVBy(hB+i5-l&t=ses&^?KR)_q~|#}0P2i}ySU_h9-!PnfIc8)GVd&BYYLu z?|2@-?1sdS%zXpM`P#L*fM#G3?qHsKht9+QY0ope+b46%sc>>$X7Rnu>3Yb!e&T_- zcPIHkv+eY4-i2p|S7yGIYsyZ(VY6!kU4V9PcT)RmH@A!0!SLAP@9`t$Ut?$V&#+nT zkd{`QUf`Q|;`nt?^*vm=MNXIfCV3wbdNjUm?jeE>%Y!ahd!6*VHv7Wt<)2LEm{9`P z^IWk}{OzWV&6nXYX*)PeID0y!~^kG!mY9i-mBu8*`HU!KFeTid`p^M z^{>Ev{S#nV>N$2OiDv*W7R1GYU#6GFelWc__Wh}q+>fS-0ga7ePYtfiCja^I!49+M z_|Ah<95iCc**qf64VvU&-V9 zMf&_j?wOINhoZVp???5Cd^JyAEujBHQypVQ@Rs^f=04r*TGBl_rSIe(K44a6Q{XQ( zYv31NA_oQN>ww+ivzg`Kzv-W%0Yw9W4=GP+Z-jONY1f}VgA3hIH~0GOVm|fMUw`r6 zP7wpdeL0C2Xe>3~Z8Q(qh;%)DHFTX-e7>rBkGZ-U@3jnvYjQib$y_AbNGsX^8|t2C z=H5!=qf)@E7F5Ws}F1N{NSAsy#foaU%P?4aD5))a6tFb6=tKZh*R^k zyY&6S@;}|ouX-nQ>=Vi9{o@1dxJ^{RRoY3ywM*c`^Z?j_s=YE`9qx~KP4~ReJ#5P0 zVd`&Y1=wLnU$;d6x2C<>EAB!=y%FtL;+|^kS|8H=b~HB)_lCAxn4k|`0euI2T^bjg zm}XHkp*`k)6X8BMaQH+kT2{aJ*e>8DN5ciqPJ4>zSN3SHh0cdvTWCd?10X(fj|^K{ zC3>XcqUtuqYp#=az0Imd1aPBQ?+VBrP$K4Jj<2%{-LH>5oj(n+TE`fx_NSBrWYaG~Lx;Vm;g_3g|#;g|WP zq3_Kxdo;uBSq&bcB)uN|a5s3{+@D=~a6W?v>|&8agK!ZM-jn9h)0}f$_oOgA8#q1u zx2TzGY)JP5C6C(Z0RA7I?k70zyG$3oHrZt5jW*tRqm?&0x316O>M&PBCOTmhhyrMU z4wGmM@{kU8BO^Jbp6aMnB~`f#YuZZMM9mnHp~GYp1`R<0LrvZlIY7~bC(jT!zkd$;7}g}(Hyi3ORDz%SZ8a4s>R5`0Q; za>n_TzhDFQ1LGgEM}9EpJO74Ol1{zi#JcS6EM>i^;I-pWgqh4rAN1EeE2J*N1u*%DtAA%_#SNU@ZP6B zy&oL_ZZ%$ha`J4vzSiJ~b}HbHuF3h|JZEpwM0BQA`)D#N!H?py_ju)unrH}r5^u_Q zRkigUMK65J9ZvBE{qw!-0J10OzMP-=smycg9qgeqJCPh4uReOG)2Y|ow{hoZ{LZsK z9ku^pFh1zf@Z=f0`?TZ}nPVG-@%E<%qqE4K-jkl+pgM~G5-sU0Jj;$ixG9{h)ciQP z29Cn(d2-f#c)M#(xyds)J$=ou*-J2!T)`i7Obsv^?LSO*E?>@h=9aQ^q!VAud*eS& zEzrr1R9HrQ7qTC9MV>C$i`wc~hwUDErtvG4m+`i0_G9h~U#CurKI-t%%lOsS=6jES zgI8wD4C|%bxm~ef6&5@vE`|S(HqJf5{n4(v|KghaYR8N|B|Z0C(exKxFHCWohADoe z(X?EnD{em9jrJ#AO!~ETI`56Vu5gv9_vPql#Ijo>zRlTnrAN7VgU_S;UO&7u_>~8l z#}4k}_0ex!#s~lP*4;nuuE+QL-q6=p?f(!vmX@Pq(ZkNDZR)wx-h1@k@r({8g-@r| zb@y?L;rY`C1TV}USGuwAKl0lAv&la<)TL!M^yZ&_&l(>+b<2eC%J#8 z#Th=ljc5{Jy|2uKUw?o2r8Tc><=&^h)1l)G-=-eZvqmEmjdAwrWG{E-(bdrS$4>TS z*`HmvtEp;d)0jQl#cMq}26cbI33JASQMk{;{N~O$vxD&0L3o^bzN;tsFFi~LrB1Jx zoxART(F)KBW$)~%qL)~mhe@{hyk=+g<$hkzC*hR6&T+4K*51SKzxoi5ik^4A^V1%& z?S#7G6ufmH{Q#_0|A*7co^~^O(L>?l(r2qX=>l*UV&tm4y#|lU%;JsA+57wPQOXXc z%vI;^AK>#3VS#%zBs+;C&PMuy+>^r5=uyN;{UQyQSVfE1NUooxnTYNq-t*Z%Q3=1} z*>z~yvo9^)!ge&CU03t->HO2|1ile20bj5whv|>)EP;&#%Qp`-X!a&vi2dreGl|J+ zt6}xeX}hbU&pQPZDEOXy5$p;#y%hX;$luGp#G*GhuVEIon)$Z)%IcxZJap>+V6D;3 ztT@}p9K`3Zm)%V?7r_80;Vg4@6STs==FfujNB8T`TRer^Fah( zgDw8|FVUeb!p~^4W{ZcyiW)0EmU1*bWAQ%rJk<$4H~q(K@EGx6BKOdK#cBP4eUhK} zdYPMq3vR&)vtzUEXU*t4)X?F{+~r06UiR}v1CZW%fq!}G?DP6Ay6N1l)Y*P6%>Yeu zr_A&(({x3@8L#~KLT-2t#YY{_Kv$4`+rjMYm9Se?4O6@~U_84tA_r=bgL{uWzb}3t zMk}JG;s0Yk>oZqYJcISye|T;4;192F96Ywt_57B_(XLpweEYG#>G&1*X)es(Pya6b zZs`-n@Mw=RkDk{YZ_QR-OY{t4cKoMPjpmGoC|jiO_O!_jfk z#;Tosc2iw_K_{LkycH_$e(mo1Gc{a)&i6R%uYT{fk!ETFGf<<^obx?74Zk^~R~(ST zveWaFyW2|>$vfJvroXF{eGO{VGjx%Ca#s3<)AW(2X{Gqc&iC_t!z0eyEAi4vyCm(8 zZS@@d;#$wGwY9SQ4?cXlU|f9ugIUOD^&uk1bBqUj5d4`*M&86WR zx%>G31K42kLCO6S+jsQ%(fb`{CqOWM=QXoEW%sUgnVQg9TL_f^=P^UmM?yvH8IhZ76n_wm`L3zPrMrsBck(J@3{ z?=rukPVp-pH7;&GJu;n4bkpX&#KmaZ)zV^*InsDh@mZU6&nM-J?5u5ue+lOAD={HH zhArngb-%lbqrC7+M_tg8^VIE^*WMrgT7Ex6Zvab+ws)c{j%J@cuCMGU>AG)aXRY%Y zuE4#ygzvnBm%+)LOAemSjC6KNFVi1IuaTYVywG3CZpmt96#X~O-QD0r57&>@hrZa1 zfca1POMiK+#R(1*%}V~iXXHLiNBg@PY#8sp4*Ook{}vxl-z&MFhFE`8`jrd88?sk7 zTA^S_;fHz1#xu6;oQU^2uSb}`S-dAK1-{`~-8^@IG1x`_I*>%U*BsnRCDOOEhFvd#9br_(J@TvH$Jp=I8&< z2hP&2=b0T~i5WcAE=03f%iaxKNPKbS_QmX}=M#7#&o{dSy7=fW&%jpVk)34Ayy?PA zwBV(|I&qig5gN~WUeP0|n;JZVXzR0YIs01fy#Dd{JGN7+$f=p3Z@&M%KdWXZOXl&^ z>L=y&lemWyJU&i2v+?ZigHhQLH9d0p<1db82fW-qpua!kHTOH)@dGO}y?TJmP{JnZ z$%7}FYvC32kR9F+r>2F0_eEPFPiDqE{{PNFw4gjv%<{yGDgB80j{bgX9lji`&wjYN z%<#eP_W7Rg$3scazpLiUE``0rPgWkl`r@g1LtPdP+Hq}&HxfhP!%Mt%u8zXjM`%2T z&2kL$giAb&pH*g~dCyVEoPe@mXz*NG9?Sz;G1oI-89=C#D{Jv)F_ zV9Bd^uvM{rMch=odtY{Nm#?xvWHGt6TW}ToFvY@+fBTQ!wO{||*H+b1t8{G3a&9-V zKp(zr&U(^W9xa*`dnWMcZM|ytQ|27QE2{XSCVuqtx;|t7?WYHh5(CVb?uilcjt%Ci z_Z2(37o%C2^z-8-8ox~%iN*#_Cfd^YQL9n%XNzL$%fVRlSx#nOpWd>jj-GUWf|+L5 zadzNkcB>^{$Q$&U{0G7b&;zWS`N^{g7f=uG9@$KLlPxt({e_wWZ}pl6Gz+z~G?LoZGl1FRv*R<1-+~DY(y*NLeNLKh?}cUAB|8tB zRAZZCg7H=}{~?Dootff$Ab%7dG(Eb{HG4CnkB(+%FJ4*E*NOr6vlkgAxFru{$7b&S zLFR7Mc6;uAW^UB_=i_(2obw~5RrDLY^P2RF_G6hzk}qkxCTeP*y7}mM&yUh+se$;? zExMn|VjaFjU%-LqJlFXv$6*4PM6FNHxFSXy|tGNBE*~vQKeh;am zqLJ>s``QnB_TPM~XK(!^Sq(<^^Booe<5tIImwczsJwj{fc*KGjYIfkm|jsz8@~2efY`0ZK}=b zsM{@kfgWOPb3ev>!=y)%59 zCL%q6&oT2dMT;1&0p79=%ZXNF5OE zfAN1#4WXtH1K^i@as8ZvWr!JN{$30)-`Uu@^GIj)*F!&CzV*afH&`i+dq*5?=HBU( z!>RBx;rB5`Q#bo;dVn^KQWrnDEXQVtPxKMnaK@usfAY~IdmoRyzD=(?KK$9CPb zB|ae!#|vG z|4(Ng?SJv4jJ800&3Waa_}qBr62eLQe`C&L_`dKq(eVt@5B2LCPKg1%(Jrd@&$xTp zEh9dt@8~g7Kc(JM2JT@sJWY6KSY;i?iszVC_stIm$5Z2+hUE{KAIozZ!r%Af zI!@kP`oDVim$!P}etk0@K0RuwUNwk&pZzj?v5R-Zw7K_S5%WCy#f4cs&m~^T!TTqI zjoX7DM@Dnz4(glr|5MS4##=MKdTOXeeL*}on{5u_vJ6@OLt8o7cElc(|W$w3b zE~u%#px>trcx-l+Kk0gQ4B!3oPpb##e=(ey0Oz|314s`Z%+2?9|IGud)pH*+Cy?B_ z?Ee){U$0MHBJbnf3+9C{bl&92s&m^|b8fRwrNuLU#-5Tfngcx6^%k5w=RZ0ey*(`+ z4PUf3YG(aVxONyo`m6=LEdEDMScSo4&R`=oW3YJ7BwkxIhf_0RcbC5Acnt9yg{kfZuf4_w%&3lM0 zXcC_?Mn^RqPYm@~>0kX?>J*sXnsXAKa^3j}Pkcjux*rdC`Ru;hl%9&ePvQ^Vu--Ry zjU1?Ux#qsoBLr7W4=m0`Z$>9Qj|*LB>(^?Tzn51AUs5U<*V#%d-J)W_urb;vtK=(*+;s=%%zpN6!!$b zN5jbj$!p`)F>l9nzKUN;C467>0Q#T`?NW4$r;CrxkG^&yGw%3qk$cznR_en$6H%+QZNA+h}H2;;ucKhw;edkz3|-@O|O&_wfR|V)PbXXy?80$ICvw z4|X7IIuGKV_i7({;bHl%=tpp!_)57Xvoo}`G&bfpuT4kCJQyzrcYhon63(>BJGq0S z-MDjkaQofA{LtpzZw#&AO;<8Iif7F%ddppogk^ zd|^6yvXiqeS4K+*12Bubl-X8!QXic&>+Gf{?}oREUd_)O;}0|tJSRPu&!;N4M@MXS zxM5z4N7mUTTC3F=JmL7kXWy!rBZ!7*GBtu20OvDrIaM?nWw)x@HTs#{nYQ?)E_XLC z;%29K&L<{>pR^kh7rTL%F-M8(Z**qjE15VX|Br|<(I{kZa)(YKnjc=??gHFe{FqS# zM7x~XML)yYHM6SE41uZ`1@jl$?h;=85S8+HFHu$trwT+g}8O$XcX ze)xDaU(IfhqG$H}oRfI}PQ({99%|9*sTrqvP+f?3NjzWAgpZ~}iQcF`8a-#!J}`Tb z__idk=f1%HczDGJOyB3m?B+NZ-Y;HSTb}75ubrdt z?|QuL=u@1%%yQ@*pFYVPFr3@xzaGvmIv#m78kRAhECboW!Y6PDFPXXBvU5pIo_!0M zy)hejeMY}QoB8d@yPtkz^6k%TR_z*}!!OYUr-m=y9PT>~&fKiptL$L$da_fdg|iJ8 z7ThmhCwhVO-*5r?tnz2^_~193^XoN@*kL+=`>lvAnfHrsX)b)b_!WQp#PAkQxG5Ls zH7=`Vf;lYXeA0uhip9&R7idiMUwpppBZY&+D`+M2B7Cj33n%{SG_G5pmpLNd0PfSW zoV%5~DR*SvGyZIJ3^ZGxo`z9W&30rLz=GFrw-C>6?}vx%Qg%S#Q~tK;`P9Y8ni;Ff zcPl@w!vtH|nZudFQ!Mb< zv+Gn{9RCoyS6HXLA973fs>OFD9F;i;nz2{hG1}1Z%W%~2InmO_*X?*8+60bPjV6ZF z-TQK;)V+4N$7eNX-Yx)sAhge!^G=Tz&ZTJe!b7V+hf>q4k!c9&()i6g+tH{-mp_vG z!V>`}NEcxCz~3F#Lkzw5mW4KN)Zqj4YTxWer<|`-a74cF{J=|Hr>0Togpbv~7p^X| zGT~C3lk6!fT)w-$ck`p4Ji7fypFiT6dqBT)19lp|ZC4C1mov5Lj2E2%JU8`u_M8Uq z&n#LzB_`><%4|XE6!$;*J{TJwZE;e}tfn@WZ|d|MscXbF+>2)&9F}IH`ObG9X}`Vp zXzSpu&(?4M!!y-)fAF!|J3sj2CLW~*_n3(fxqA@)3Vvk|&TOaf7>fP-&;O; z_l@uL9DMgjh4bL;(F@Cpci*_aykhny{{6>u6V3S%JnE@CZ@zwl-)FDdOP^$)$l{dx zVt&jS&;E=uOD?}fvyfUm^+4uw<@sqlB&u8LqCCUg!DwlC&Al>8FWQ$q0A|RF7l=Iu zG%cBD_PN`arygpD&(7?hTwi8`%xuoR`^lfwZ+`Ue!wIb7?28^IJ*o4On!YP9M)Q-} zKYlX7CgrJW(bkqcN~h}{xewFuFMEyc(}78p`!6Sr!Z=6N0Tp*F979tLUCaGfx9G>q z4i3CxynOKN=N5RYnlDbRnEhG2Ys~o0M298^WnLvSx$!D$yJH)NmmkeM+p>C~={%>_ z%wDbF7~RZ?nFHBB7#%L!u;dfZtmI3twP?G77wWBoyGQGk{I90L&0JW@{7OxYG-kfK zLN8HK7u4^5>@}R=*Vp3<4xur|L&I_$t-z#*X*d>g9q;7|F>|-n|Xez^_`o{ zafS0xk2YptJY}bVobeI&Bi^mqRh-=J^PJdp z|M$hjGH0LJxnRf6vKV@4hj!YYFlK0`iJdRCYfmn&favk%4}%nq7T0J zMC;~{KUur|=4j1-&+NbXSo6*spPKR9GFRR4cXJQZTgAV37*N z{on^Z_r9~*qy9PRyn1fU%yOP_A5UgaqR)6BTHl-B|6$L~pZr}9%p@~b>aA(7J9C_6 z5B9j%=Jg$GxBYj^dkt0;pVDw{!MfnX7wHi2z|;IW%&Dh$yYm{)@NfLEUvF4}C)M4f z>@jK5Be@UPijKga>$fw%D+XM6Wl|kbgB8vk4C4eJ|LbKsleROK^PfG7azS&Cs zhFM{?YQY7|e17w3xB#wA4ej$Tn%!_}_=aY_Z{`oojUM|CjQvd&HqnGxmpkBf*ac6= z%u87vD39Xr>6+Em$*t;u?E0HEXJ^;1U9riD>Qr?nuTY-}U0vqc!lifUx902>FFsu1 zD!uN)$C&}Wad7Srvp4T3Jh8LL=cN&E3795slh=vdl6X+~HZkY87C4@_9FJ$Uo_`dc zGJ+==fnnAQpE~+7Z#esZK7N_jsrWz~>Mi#5BD;8s?0DX#Q{SdN-wwY8CtT6DsGazg zn|IKs9p^@S7}POkb~2x#n2`O)@f3C68g`B>3`G};r{kR&ES=`AVejsR?s)O*&KwSZ zRs7bdT>by)ax3YPO0FupBsIT$XIB8PkW2D*a`|j#Z%U01N8)dW&w`oZva%06=Qgvd z!_MxAc$Hj-<7;MCI6jDpO}St8wq7}-=I@j5!h1!#JQ{pcO|x0_I8RSykI9amR|jyt z_-ye!xny>(xuqVpTjMMHbanCXxl!<)>7pqsytf?QQoH1yX1*YGb~6}Du%74x#j?8B zA%-msL_dYIuzQlfpg86E(Jk63`{r|*jgEg?bj$Hj&93oiO`MU5>;+pFo8!;E>>M@u z&(FB?bKy*H|IK3^UI|TliAmn-&1i;rQD!%NW;HXfGbD}94-~SH13K4~=(^*{5Fnu}|dhM(-()!6>I-s?FT}vV%7Di`q51vg~ij-OtY2 zmGr{F-;m|@RA;PGRLr@EXF|4CSc z9F+bb-v2pEc!SJtw&b|BS)#%>2Y+^#y5e~>KzKo)k6AugMA@a8`Zl~=Fh9Aw>`6b) zIoHN%ODp&5Z;XpQHD^A%I)Y8k$z9p^0zV55f(LHu_w8Q^|Lu$JSD$R&%KgGK!ivwD z&Cxe_&1QY^htqa~;IeSp=2*t&+JvoX=u&=#C;<8pUy)dvpjVc(TI zHpMYDXW~ut{4|f%bKBXYo7wVU|9T&>%wDQ$w}zJ)mn+8A+EvdaGgMWty{2wz(=|24 zPxVS(H|;~U%9E~o15dGsFV1eq?BU&Y2jamI{c<$WYOu^bHI{Lt!9l$znD}*bG(6V5 zx8TTf7eBt&8YAi%XTsUe{+HL8!;<~L**?2h;n#Kljt+J83NGw2A6`46>_Bpc0T6;WOl( zwwQ&BZ-nC?gg=IJIN^On!z@mfx#mH8>9cE6ztZZ1OAL6OULV}q4F7|(cCzveNe}JM zd`8oqa7kt-+nJxp9EE$|vY&2JUodv-XP+Ow_tWRS=h^JWrPsMOpie5^jM4a{@Any; z)JL6!13Y}N(S7LlFK2u2{QSj-ZvOc1d)&<)80o|DmdoB$by~l;mfkCUnA#t=um~G~ z{bhC=<{k}B>g?S8%pPvI|M8KJ$85elC*BP7M|g(bo8SIfubPBs@Uj207)0+~X5qsV zO**g1J-D1Dy-{{|EZU*TW7N(YwSI{YaJl%j;k>`G_U?z5H*bC9n{fQAna4@oIo?wn z{tSLDZm!d3?WygKwNb^#mSeL)AdlHvBmsz*?5UU5)aB$1v zff76Ke06Z==G=$&qPgYE6OOKMfcOS@<@9>|;Ih;Cw;#XA+i9N0=jxif-GZT(UCdr{ zIF&j3U~B6Csu)@IXZ6HOy;ORc;D#%5e|%>Tf?@mhethV1|J63;C2$Mz=nStKKe;J0 z(e&>)pQ^q!cQv0m{7Ubt#&>>-uHO5Dvt2ozd0FQwIav-~uv7htyL*{;+?DKL9nfa_(D9n&CO&VavcscD{rXrrtSYM@m)^fr4o&lJDEBlJE)q! zzs5^>`fST*+%ea*EGE$O7VJ&_UyLvH!|_PvmE`_6c%;t8a|^ycP2+#50=KZ&&F&a{ zEj+lZKFMyiO?|Z9uaP*J=@txtR``qKcYgY8g>E9;2^{p2 z-M0&Uycv4lS^q)LyWd~$$zDWt(8IU?@tZyW_R}Bq-2K68Jv7mMb|ajS^Lxxa_K4+~ zjp+9o54f8=m)gO2yoYI@e|F{324>$~_8-z6z>WBtoL@I{xaC=HB=5TO*?oX>faAV) zrT_i4<=)%hee=<66qV5=vR$d(ty)3-Jeq1_YF}d8Q=)&a$`n>otwBuvc%I+0^ z7uUlRo1eJzZf>(Wr#I`u0Jh+OJHZRpODo|H;BG5->Vr3K%?<3CdtZkSW(V}To?GuZ zt+u$h745hf5KVAqo7TP7<#44ml{Nb4$#^;>-@|Z&|Bv}~%rhK`-+|agyE7e6r0w|0 z@$`zP%wafdXZ{9$WGlS}Ji~h`x{c_m!~pSq{<@jrS28p0dxWb?zph7JEPE2NTQ>Ff zP-<&BTYJzO!QbM;l|0;^dzao@T`=ggPRrrm_ZiMRxgK_GXRJLJxU1-1SKMd1oZ|Oj2XQ0w+h=eH(Qx*O)r0DN{u>=T z(Cvt5;2IJ`qqDcyP2W>h(~jEXP!SXGhxmk9K5i4&v zQxni^*b`~zfnGmaSh4fMc4mdesa1I+e$L6`IJfLkyXx*2FV&8^e=a@{(IvW9E$_khDm*9HCVSZSi=i+ z;Xxa>XFt5lTW<%yzX2D_&h4%$0yTfscS?f539XUUGlxR_Rg3%;q zr{|Zyf?=px7D{Xs+vPd_hk5SNJLqdX`x&)F4ep+rtY~U{hQrR!h?+Lun|2Tc`?!?e zz@EM9@r*C|O@H9Lhlg@63?hbrFa5H zGgAu}Ca0>o)sB1y-2G!eCOth2a4@`}*EpJ7;`7a24F?mhntvTFSJ~y!;5SLPcG0et z&wYMNuYV)C!PnOB8Xv!r`qdd11EUwg`ApF&mHST%;ryvhqYI43f4B;t|5SDp9`iKk z&hhKduD;BxPsG!)uJ7ZqrU!ZRf_u^?`MdOz;YRJaUY(8JaqQOG6SdoKJUMxH{cP1vrFgl;D;n>7$={hjV~6d- zch+Ak`o7cw(LKT7vY)4~cz-PM@s4k!8BcdV_ylYvdhO^c$}U|;rAQC-aLzT!2ryAx?^H(;(WXyn#uF=V#vORv=wH0yO~LG z-h#W;;GZ>jvF6-`$4LJf4>y1Rs@gg;#?hV3rtgMpw^nH1TDiOF+oMC3m*c;%YaaMU zaIeg4$~o$7JHGhkdB(+$S{;)!1joFt1}UBqMW1;1XFsgN8msQru@1C&48&&*4<|SH z+0nfu@B920^cgU-vLloK*i%bw|Gq{CSBp-_eO*nSfh+HX|9|hL$2RF*?S3>Lh1Z9> zr6$B za(?PB{Z|zRQ-jmc^72QqH&2|d&~BKIch9mnGyDJIGfHdg4Cw_H;vEru(C$t9hZd*R z{pwx)fPO)*d&SpF+1Y!d?CSphtFWh+gCpYlrznTvDDk+>#!0S^=R z$Iq?Njf|Vut% zzFu8V`R~<*R%V*y<{7mG57vv@?+@1w%=O3T?S{Ob-BufN&4$`8yBYUz{tx&*9jQN~ zAwS6ehl0_`+49kzxRCn)AhVsRZ^D(}KEko{QGVIX7#d_{mCdSu!{fd z!~-_7P;il8Gh1r5HM!Ggbu~MIGGkg(qo#Juyok?SZ%e~j&OF^n@~pd@dv5;m8vm86 z`Re$*+KE9h6E(tO+xyOL!~BXryk0e5T7l0+bDMtM3<%%TYqO*3g+a47@$)fv(|Y*e z7k~MXy^=lYJ>UD`H(+B0Ly#lv(!BCy^lg09r{)r?{CBvpX6iV2Ogw3wvDxA|fJ1JH zgUy^BwNP}VH9g!2{M#;{X6}F4%`LXBii2C~)-Cn*rrN*UVfj4Xi%ojF8Fh6X7g>Cn z)9V%tE540po;@FRYCLE8O?-xb1Kp3|FVAS)~~+Wo4bGS2e0e#Z^9KRNyt5*7PbAiidb$J+HHmBFv z^tH{uXY=r*UrVelbMAP>uKD*FJI0!PMD0SK-^@(E{`S6J*DUmfRXkMve&db!!Uc26 zv!}~xhQH2!q133EY0~5Bf1~T2TBx~8;jrhNDRXtR(aG~;{8PS+&)Ij~&K=Z4n(3pj z7boL=Vkd*XnRW)JXr}Sob6$7+3byqOH_VFhWOy!k+ktuTeLPdNc=zvo>dB*9PdssS zd-UT++4Epe%u)76!~?*L*&e=mKl8cqhRZn%E+3B#@viFb(bp_as+Xdr9FC?+O*fGJ zDLB9}IA$$+MYUEu5|+iDF0FP`t(P;zqknoV+L6Qn+JzQ8H|Np&f@{fj>MmaW*D83s z;4^s8sV-i8RgaUsb3UJMx5Vh|&87h^cYh`xDdp~)6;A)8W`;k~e$T^uuD3^n0m1@L z$InMkc*5Nm176HNgWl*%X;|U=dVKl~+-Y#!5f6aP`Pmf_d*pfs8DRWY%azMW6; zoL%0@X)qjn8_c?jNq8w-^Mt!s9!nH!_yH7}!w4pu66!ph?@3rkg7 z#UF_W!lL>_4}Ia>O6ec7Uo@D7_o44f-IZP?UMZQ~tg8j)#OSjBNj)_vub)aDhuZ}k z9kh>j_?`8SRp0*ZAJ%v&RBruhw(p&P{>z7c{oiMM#DE?c|MA`byKg__8J~Fntt))g zS`Xj*@i(&H<8kT5PTZtl<%{Lt$eYQZbQTwJ zgV|3RZNPN!uJj@J5HSI^FNTQyW-IvFo5@>+ukPWq4#K#2F%)M^&58Q(J7agp>-|_FexBg&ho(M&*=BWz7;utCS0U`qhkhX(@vGW!$<2! zJUZgbnmr1c8RA>|EuLOW^iHsWPt|F2%ot5Aw8J6B52w7BbB%S+?M86--+cVJ!+5iV zV+z)MbL8=(cRx9Fbo23%qgx;SlcVVH^Jnk;@yCwt{_$BlvrG5$ZxRoJ|2cP=%Z-*~ z64p2>&Wz}JhxL@FgMHhx6#YhOyCIr}LG{)Ldx7D#MVn$~NxV)yt{*R0Gc8YcR?ozb zgHCBB`VH?Vct+-j<9i_f&$h+vN gsQ~eb`z73kNP2Y0|?iZ|j%iYiX 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

5=oc2ne{-j%I1pSA#|$qc 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 Cxy8Z& literal 0 HcmV?d00001 From ff2bbc9fc5c36f0418d1b28fea6f561e56f9f9d4 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Wed, 18 Jan 2012 22:42:07 -0500 Subject: [PATCH 002/488] Transparent water --- apps/openmw/engine.cpp | 6 + apps/openmw/mwrender/renderingmanager.cpp | 4 + apps/openmw/mwrender/renderingmanager.hpp | 3 + apps/openmw/mwrender/water.cpp | 24 +- apps/openmw/mwworld/world.cpp | 1 + files/water/Examples-Water.material | 321 ++++++++++++++++++++++ files/water/Water01.jpg | Bin 0 -> 295326 bytes files/water/water1.cg | 39 +++ 8 files changed, 380 insertions(+), 18 deletions(-) create mode 100644 files/water/Examples-Water.material create mode 100644 files/water/Water01.jpg create mode 100644 files/water/water1.cg diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index acff9c8be4..36d8013267 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -310,7 +310,13 @@ void OMW::Engine::go() // This has to be added BEFORE MyGUI is initialized, as it needs // to find core.xml here. + std::cout << "Before the water\n"; + + std::cout << "After the water" << mResDir << "\n"; + //addResourcesDirectory(mResDir); + addResourcesDirectory(mResDir / "mygui"); + addResourcesDirectory(mResDir / "water"); // Create the window mOgre->createWindow("OpenMW"); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index fffa6f3d66..54c1b55efb 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -57,6 +57,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const cameraPitchNode->attachObject(rend.getCamera()); mPlayer = new MWRender::Player (rend.getCamera(), playerNode); + mWater = new MWRender::Water(rend.getCamera()); //std::cout << "Three"; } @@ -220,6 +221,9 @@ void RenderingManager::toggleLight() setAmbientMode(); } +void RenderingManager::checkUnderwater(){ + mWater->checkUnderwater(); +} diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index e4dc5deb40..7130bdc2bb 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -24,6 +24,7 @@ #include "creatures.hpp" #include "objects.hpp" #include "player.hpp" +#include "water.hpp" namespace Ogre { @@ -69,6 +70,7 @@ class RenderingManager: private RenderingInterface { void moveObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& position); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); + void checkUnderwater(); /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); @@ -100,6 +102,7 @@ class RenderingManager: private RenderingInterface { Ogre::Camera* camera; MWRender::Npcs npcs; MWRender::Creatures creatures; + MWRender::Water *mWater; MWRender::Objects objects; // 0 normal, 1 more bright, 2 max diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index acfda488bc..2e4882b637 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -2,7 +2,7 @@ namespace MWRender { Water::Water (Ogre::Camera *camera) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { - + std::cout << "1\n"; try { Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); @@ -11,26 +11,14 @@ namespace MWRender { mIsUnderwater = false; mCamera->addListener(this); - - - for (unsigned int i = 0; i < 2; i++) { - Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().createManual(i == 0 ? "refraction" : "reflection", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 512, 512, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET); - - Ogre::RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); - rtt->addViewport(mCamera)->setOverlaysEnabled(false); - rtt->addListener(this); - - if (i == 0) mRefractionTarget = rtt; - else mReflectionTarget = rtt; - } mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 7000, 7000, 10, 10, true, 1, 3, 5, Ogre::Vector3::UNIT_Z); - + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 7000, 7000, 1, 1, true, 1, 3,5, Ogre::Vector3::UNIT_Z); mWater = mSceneManager->createEntity("Water", "water"); - mWater->setMaterialName("Water/ReflectionRefraction"); + mWater->setMaterialName("Examples/Water0"); + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode->attachObject(mWater); @@ -39,8 +27,8 @@ namespace MWRender { Water::~Water() { Ogre::MeshManager::getSingleton().remove("water"); - Ogre::TextureManager::getSingleton().remove("refraction"); - Ogre::TextureManager::getSingleton().remove("reflection"); + //Ogre::TextureManager::getSingleton().remove("refraction"); + //Ogre::TextureManager::getSingleton().remove("reflection"); Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 93cf19aef2..b32f0203f1 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -525,6 +525,7 @@ namespace MWWorld if (ptr==mPlayer->getPlayer()) { + mRendering.checkUnderwater(); Ptr::CellStore *currentCell = mWorldScene->getCurrentCell(); if (currentCell) { diff --git a/files/water/Examples-Water.material b/files/water/Examples-Water.material new file mode 100644 index 0000000000..285cb22ce8 --- /dev/null +++ b/files/water/Examples-Water.material @@ -0,0 +1,321 @@ +vertex_program Water/Test cg +{ + source water1.cg + entry_point main + profiles vs_1_1 arbvp1 + +} +vertex_program Water/GlassVP cg +{ + source GlassVP.cg + entry_point glass_vp + profiles vs_1_1 arbvp1 + + default_params + { + param_named_auto worldViewProj worldviewproj_matrix + } +} + + +fragment_program Water/GlassFP cg +{ + source GlassFP.cg + entry_point main_ps + profiles ps_2_0 arbfp1 +} + +material Water/Compositor +{ + technique + { + pass + { + depth_check off + + vertex_program_ref Water/GlassVP + { + param_named_auto timeVal time 0.25 + param_named scale float 0.1 + } + + fragment_program_ref Water/GlassFP + { + param_named tintColour float4 0 0.35 0.35 1 + } + + texture_unit RT + { + tex_coord_set 0 + tex_address_mode clamp + filtering linear linear linear + } + + texture_unit + { + texture WaterNormal1.tga 2d + tex_coord_set 1 + //tex_address_mode clamp + filtering linear linear linear + } + texture_unit + { + texture caustic_0.png 2d + tex_coord_set 2 + //tex_address_mode clamp + filtering linear linear linear + } + } + } +} +vertex_program Water/RefractReflectVP cg +{ + source Example_Fresnel.cg + entry_point main_vp + profiles vs_1_1 arbvp1 +} +vertex_program Water/RefractReflectVPold cg +{ + source Example_Fresnel.cg + entry_point main_vp_old + profiles vs_1_1 arbvp1 +} + +fragment_program Water/RefractReflectFP cg +{ + source Example_Fresnel.cg + entry_point main_fp + // sorry, ps_1_1 and fp20 can't do this + profiles ps_2_0 arbfp1 +} + +fragment_program Water/RefractReflectPS asm +{ + source Example_FresnelPS.asm + // sorry, only for ps_1_4 :) + syntax ps_1_4 + +} +material Examples/Water0 +{ + + technique + { + pass + { + // + + + vertex_program_ref Water/RefractReflectVP + { + param_named_auto worldViewProjMatrix worldviewproj_matrix + param_named_auto eyePosition camera_position_object_space + param_named_auto timeVal time 0.15 + param_named scroll float 1 + param_named scale float 1 + param_named noise float 1 + // scroll and noisePos will need updating per frame + } + fragment_program_ref Water/RefractReflectFP + { + param_named fresnelBias float -0.1 + param_named fresnelScale float 0.8 + param_named fresnelPower float 20 + param_named tintColour float4 1 1 1 1 + param_named noiseScale float 0.05 + } + // Water + scene_blend alpha_blend + texture_unit + { + + // Water texture + texture Water02.jpg + // min / mag filtering, no mip + filtering linear linear none + colour_op_ex source1 src_manual src_current 0 1 0 + alpha_op_ex source1 src_manual src_current 0.1 + + } + // Noise + texture_unit + { + colour_op_ex source1 src_manual src_current 0 1 0 + alpha_op_ex source1 src_manual src_current 0.1 + // Perlin noise volume + texture waves2.dds + // min / mag filtering, no mip + filtering linear linear none + } + + + } + + + } + +} +material Examples/Water1 +{ + technique + { + pass + { + scene_blend colour_blend + depth_write off + + texture_unit + { + texture BeachStones.jpg + scale 0.25 0.25 + } + + texture_unit + { + texture Water01.jpg + env_map spherical + scroll_anim 0.01 0.01 + } + } + } +} +material Examples/Water2 +{ + technique + { + pass + { + scene_blend colour_blend + depth_write off + + texture_unit + { + texture Water01.jpg + scroll_anim 0.01 0.01 + } + } + } +} +material Examples/Water3 +{ + technique + { + pass + { + scene_blend colour_blend + depth_write off + + texture_unit + { + texture Water02.jpg + env_map spherical + scroll_anim 0.01 0.01 + rotate_anim 0.03 + } + } + } +} +material Examples/Water4 +{ + technique + { + pass + { + cull_hardware none + cull_software none + + texture_unit + { + texture Water02.jpg + env_map spherical + scroll_anim 0.01 0.01 + } + } + } +} +material Examples/Water5 +{ + technique + { + pass + { + cull_hardware none + cull_software none + + texture_unit + { + texture BeachStones.jpg + scale 0.25 0.25 + } + + texture_unit + { + texture Water01.jpg + env_map spherical + scroll_anim 0.01 0.01 + } + } + } +} +material Examples/Water6 +{ + technique + { + pass + { + lighting off + + texture_unit + { + cubic_texture cubescene.jpg combinedUVW + tex_address_mode clamp + env_map cubic_reflection + } + } + } +} +material Examples/Water7 +{ + technique + { + pass + { + cull_hardware none + cull_software none + + texture_unit + { + texture BeachStones.jpg + scale 0.25 0.25 + } + + texture_unit + { + cubic_texture cubescene.jpg combinedUVW + tex_address_mode clamp + env_map cubic_reflection + } + } + } +} +material Examples/Water8 +{ + technique + { + pass + { + lighting off + scene_blend add + depth_write off + cull_hardware none + cull_software none + + texture_unit + { + cubic_texture cubescene.jpg combinedUVW + tex_address_mode clamp + env_map cubic_reflection + } + } + } +} diff --git a/files/water/Water01.jpg b/files/water/Water01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9c9b7feec540c35e7a1972cb78c5661912da77d GIT binary patch literal 295326 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

`a>RgL%!BnG?f)Wpv-@KTSGDlR)gOgC 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 WNj=oLu-pr?uYdqM{g?ay=Kl|rkHWS9 literal 0 HcmV?d00001 diff --git a/files/water/water1.cg b/files/water/water1.cg new file mode 100644 index 0000000000..f8fa18c1a6 --- /dev/null +++ b/files/water/water1.cg @@ -0,0 +1,39 @@ +void main( in float4 fresnel : COLOR0, + in float4 inTex0 : TEXCOORD0, + in float4 inTex1 : TEXCOORD1, + in float4 inTex2 : TEXCOORD2, + in float4 inTex3 : TEXCOORD3, + in float4 inTex4 : COLOR1, + in float4 inTex5 : BCOL1, + out float4 outCol : COLOR, + uniform float4 matrix, + uniform sampler2D offsetTexture : texunit0, + uniform sampler2D reflexTexture : texunit1, + uniform sampler2D refractTexture : texunit2, + uniform sampler2D depthTexture : texunit3) +{ + float4 norm = tex2D(offsetTexture, inTex0.xy); + float4 refr = tex2D(depthTexture, inTex3.xy); + + float4 norm2 = tex2D(offsetTexture, inTex0.xy/10.0f); + + float4 projCoord = inTex1 / inTex1.w; + projCoord = (projCoord + 1.0) * 0.5; + projCoord += norm * 0.02; + projCoord = clamp(projCoord, 0.001, 0.999); + + float4 reflexe = tex2D(reflexTexture, projCoord.xy); + float4 refrakce = tex2D(refractTexture, projCoord.xy); + + float4 odrazy = reflexe*(0.7+0.3*refr); + + reflexe = (float4(0,0.4,0.4,1.0) + reflexe*0.5); + + outCol = lerp(refrakce, reflexe, fresnel.r)-refr*0.08; + +//outCol = lerp(refrakce, reflexe, fresnel.r); + +// outCol = norm; + + outCol.a = 1; +} \ No newline at end of file From 2aad3a0bd8b5ec0875e781b3dfd8bc5f7b1e8402 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Thu, 19 Jan 2012 23:29:07 -0500 Subject: [PATCH 003/488] Correct water levels --- apps/openmw/mwrender/renderingmanager.cpp | 15 ++++++++++++-- apps/openmw/mwrender/renderingmanager.hpp | 1 + apps/openmw/mwrender/water.cpp | 25 +++++++++++++++-------- apps/openmw/mwrender/water.hpp | 2 +- apps/openmw/mwworld/scene.cpp | 2 +- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 54c1b55efb..312b2c4106 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -57,7 +57,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const cameraPitchNode->attachObject(rend.getCamera()); mPlayer = new MWRender::Player (rend.getCamera(), playerNode); - mWater = new MWRender::Water(rend.getCamera()); + mWater = 0; //std::cout << "Three"; } @@ -84,6 +84,10 @@ MWRender::Player& RenderingManager::getPlayer(){ void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ objects.removeCell(store); + if(mWater){ + delete mWater; + mWater = 0; + } } void RenderingManager::addObject (const MWWorld::Ptr& ptr){ const MWWorld::Class& class_ = @@ -114,6 +118,11 @@ bool RenderingManager::getPhysicsDebugRendering() const{ void RenderingManager::update (float duration){ +} +void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store){ + if(store->cell->data.flags & store->cell->HasWater) + mWater = new MWRender::Water(rend.getCamera(), store->cell->water); + } void RenderingManager::skyEnable () @@ -222,7 +231,9 @@ void RenderingManager::toggleLight() setAmbientMode(); } void RenderingManager::checkUnderwater(){ - mWater->checkUnderwater(); + if(mWater){ + mWater->checkUnderwater(); + } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 7130bdc2bb..f397d23e69 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -58,6 +58,7 @@ class RenderingManager: private RenderingInterface { virtual MWRender::Creatures& getCreatures(); virtual MWRender::Objects& getObjects(); virtual MWRender::Player& getPlayer(); + void cellAdded (MWWorld::Ptr::CellStore *store); void toggleLight(); bool toggleRenderMode(int mode); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 2e4882b637..86e9ad885f 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,23 +1,24 @@ #include "water.hpp" namespace MWRender { - Water::Water (Ogre::Camera *camera) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { - std::cout << "1\n"; + Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { try { Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) { } mIsUnderwater = false; - mCamera->addListener(this); - - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 7000, 7000, 1, 1, true, 1, 3,5, Ogre::Vector3::UNIT_Z); - - mWater = mSceneManager->createEntity("Water", "water"); - mWater->setMaterialName("Examples/Water0"); + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, top); + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 1, 1, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + + + mWater = mSceneManager->createEntity("water"); + mWater->setMaterialName("Examples/Water0"); + + + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode->attachObject(mWater); @@ -26,6 +27,12 @@ namespace MWRender { Water::~Water() { + mCamera->removeListener(this); + + mWaterNode->detachObject(mWater); + mSceneManager->destroyEntity(mWater); + mSceneManager->destroySceneNode(mWaterNode); + Ogre::MeshManager::getSingleton().remove("water"); //Ogre::TextureManager::getSingleton().remove("refraction"); //Ogre::TextureManager::getSingleton().remove("reflection"); diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 8e04ca3c81..b12a033579 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -33,7 +33,7 @@ namespace MWRender { public: - Water (Ogre::Camera *camera); + Water (Ogre::Camera *camera, int top); ~Water(); void checkUnderwater(); diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 152e001302..fde4d6394a 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -95,7 +95,7 @@ namespace MWWorld mActiveCells.insert(cell); if(result.second){ insertCell(*cell, mEnvironment); - //mRendering.cellAdded (cell); + mRendering.cellAdded (cell); mRendering.configureAmbient(*cell); } From 84f45b19720c62d76ab932e18af69d5152ab4599 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Fri, 20 Jan 2012 17:59:56 -0500 Subject: [PATCH 004/488] underwater view --- apps/openmw/engine.cpp | 4 +--- apps/openmw/mwrender/renderingmanager.cpp | 4 ++-- apps/openmw/mwrender/renderingmanager.hpp | 2 +- apps/openmw/mwrender/water.cpp | 18 +++++++++--------- apps/openmw/mwrender/water.hpp | 3 ++- apps/openmw/mwworld/world.cpp | 5 +++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 36d8013267..4535fd820b 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -310,9 +310,7 @@ void OMW::Engine::go() // This has to be added BEFORE MyGUI is initialized, as it needs // to find core.xml here. - std::cout << "Before the water\n"; - - std::cout << "After the water" << mResDir << "\n"; + //addResourcesDirectory(mResDir); addResourcesDirectory(mResDir / "mygui"); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 312b2c4106..b5fce4b447 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -230,9 +230,9 @@ void RenderingManager::toggleLight() setAmbientMode(); } -void RenderingManager::checkUnderwater(){ +void RenderingManager::checkUnderwater(float y){ if(mWater){ - mWater->checkUnderwater(); + mWater->checkUnderwater(y); } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index f397d23e69..99926e4005 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -71,7 +71,7 @@ class RenderingManager: private RenderingInterface { void moveObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& position); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); - void checkUnderwater(); + void checkUnderwater(float y); /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 86e9ad885f..2ab2fee385 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,7 +1,7 @@ #include "water.hpp" namespace MWRender { - Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { + Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mTop(top) { try { Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); @@ -10,11 +10,13 @@ namespace MWRender { mIsUnderwater = false; mCamera->addListener(this); - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, top); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 1, 1, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, mTop); + + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); + mWater->setMaterialName("Examples/Water0"); @@ -58,24 +60,22 @@ namespace MWRender { } } - void Water::checkUnderwater() { - Ogre::Vector3 pos = mCamera->getPosition(); - if (mIsUnderwater && pos.y > 0) { + void Water::checkUnderwater(float y) { + + if (mIsUnderwater && y > mTop) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) { } - std::cout << "Removing water compositor" << "\n"; mIsUnderwater = false; } - if (!mIsUnderwater && pos.y < 0) { + if (!mIsUnderwater && y < mTop) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); } catch(...) { } mIsUnderwater = true; - std::cout << "Adding water compositor" << "\n"; } } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index b12a033579..73057cc340 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -21,6 +21,7 @@ namespace MWRender { Ogre::Vector3 mOldCameraPos; bool mIsUnderwater; + int mTop; @@ -36,7 +37,7 @@ namespace MWRender { Water (Ogre::Camera *camera, int top); ~Water(); - void checkUnderwater(); + void checkUnderwater(float y); }; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index b32f0203f1..d290e093b1 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -522,10 +522,11 @@ namespace MWWorld ptr.getRefData().getPosition().pos[0] = x; ptr.getRefData().getPosition().pos[1] = y; ptr.getRefData().getPosition().pos[2] = z; - if (ptr==mPlayer->getPlayer()) { - mRendering.checkUnderwater(); + //std::cout << "Current pos" << ptr.getRefData().getPosition().pos[1]; + + mRendering.checkUnderwater( ptr.getRefData().getPosition().pos[2]); Ptr::CellStore *currentCell = mWorldScene->getCurrentCell(); if (currentCell) { From bf09762b6a467f3d6d8416c554580784d0814911 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Fri, 20 Jan 2012 19:50:42 -0500 Subject: [PATCH 005/488] Ground showing up --- files/water/Examples-Water.material | 9 +++------ files/water/WaterNormal1.tga | Bin 0 -> 196652 bytes 2 files changed, 3 insertions(+), 6 deletions(-) create mode 100644 files/water/WaterNormal1.tga diff --git a/files/water/Examples-Water.material b/files/water/Examples-Water.material index 285cb22ce8..c09447aa14 100644 --- a/files/water/Examples-Water.material +++ b/files/water/Examples-Water.material @@ -32,7 +32,6 @@ material Water/Compositor pass { depth_check off - vertex_program_ref Water/GlassVP { param_named_auto timeVal time 0.25 @@ -105,7 +104,7 @@ material Examples/Water0 { // - + depth_write off vertex_program_ref Water/RefractReflectVP { param_named_auto worldViewProjMatrix worldviewproj_matrix @@ -133,15 +132,13 @@ material Examples/Water0 texture Water02.jpg // min / mag filtering, no mip filtering linear linear none - colour_op_ex source1 src_manual src_current 0 1 0 - alpha_op_ex source1 src_manual src_current 0.1 + alpha_op_ex source1 src_manual src_current 0.9 } // Noise texture_unit { - colour_op_ex source1 src_manual src_current 0 1 0 - alpha_op_ex source1 src_manual src_current 0.1 + alpha_op_ex source1 src_manual src_current 0.9 // Perlin noise volume texture waves2.dds // min / mag filtering, no mip diff --git a/files/water/WaterNormal1.tga b/files/water/WaterNormal1.tga new file mode 100644 index 0000000000000000000000000000000000000000..a9ca11b7ed0a44ddbd9d1b5cd8d699ade928c4a6 GIT binary patch literal 196652 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%0A>`i> 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 literal 0 HcmV?d00001 From 18108c02a7e7a965252da74526536b3306ba1e8a Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Sat, 21 Jan 2012 16:59:08 +0000 Subject: [PATCH 006/488] Merge of corristo's terrain rendering and fixes so that the terrain is correctly positioned and rendered --- CMakeLists.txt | 11 +++ apps/openmw/CMakeLists.txt | 3 +- apps/openmw/mwrender/renderingmanager.cpp | 4 + apps/openmw/mwrender/renderingmanager.hpp | 2 + apps/openmw/mwrender/terrain.cpp | 62 ++++++++++++++++ apps/openmw/mwrender/terrain.hpp | 31 ++++++++ cmake/FindOGRE.cmake | 15 ++++ components/esm/loadcell.hpp | 15 ++++ components/esm/loadland.cpp | 89 +++++++++++++++++++++-- components/esm/loadland.hpp | 44 +++++++++++ components/esm_store/cell_store.hpp | 33 ++++++++- components/esm_store/reclists.hpp | 2 +- components/esm_store/store.hpp | 2 +- files/plugins.cfg.linux | 2 +- files/plugins.cfg.mac | 2 +- 15 files changed, 306 insertions(+), 11 deletions(-) create mode 100644 apps/openmw/mwrender/terrain.cpp create mode 100644 apps/openmw/mwrender/terrain.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 723d10b347..015ffd7cee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,6 +188,7 @@ find_package(OpenAL REQUIRED) find_package(Bullet REQUIRED) include_directories("." ${OGRE_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}/Ogre ${OGRE_INCLUDE_DIR}/OGRE + ${OGRE_Terrain_INCLUDE_DIR} ${OIS_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${PLATFORM_INCLUDE_DIR} ${CMAKE_HOME_DIRECTORY}/extern/caelum/include @@ -259,6 +260,16 @@ if (APPLE) configure_file(${OGRE_PLUGIN_DIR}/Plugin_ParticleFX.dylib "${APP_BUNDLE_DIR}/Contents/Plugins/Plugin_ParticleFX.dylib" COPYONLY) + # prepare components + configure_file(${OGRE_LIB_DIR}/libOgrePaging.dylib + "${APP_BUNDLE_DIR}/Contents/Components/libOgrePaging.dylib" COPYONLY) + + configure_file(${OGRE_LIB_DIR}/libOgreTerrain.dylib + "${APP_BUNDLE_DIR}/Contents/Components/libOgreTerrain.dylib" COPYONLY) + + configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg + "${APP_BUNDLE_DIR}/Contents/MacOS/openmw.cfg") + endif (APPLE) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index e17a2cb25f..663a10787d 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -16,7 +16,7 @@ set(GAME_HEADER source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender - renderingmanager debugging sky player npcs creatures objects renderinginterface + renderingmanager debugging sky terrain player npcs creatures objects renderinginterface ) add_openmw_dir (mwinput @@ -75,6 +75,7 @@ add_definitions(${SOUND_DEFINE}) target_link_libraries(openmw ${OGRE_LIBRARIES} + ${OGRE_Terrain_LIBRARY} ${OIS_LIBRARIES} ${Boost_LIBRARIES} ${OPENAL_LIBRARY} diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 06339cdd40..b0b7c88c4a 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -26,6 +26,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const { rend.createScene("PlayerCam", 55, 5); mSkyManager = MWRender::SkyManager::create(rend.getWindow(), rend.getCamera(), resDir); + mTerrainManager = new TerrainManager(rend.getScene()); // Set default mipmap level (NB some APIs ignore this) TextureManager::getSingleton().setDefaultNumMipmaps(5); @@ -59,6 +60,7 @@ RenderingManager::~RenderingManager () { delete mPlayer; delete mSkyManager; + delete mTerrainManager; } MWRender::Npcs& RenderingManager::getNPCs(){ @@ -76,11 +78,13 @@ MWRender::Player& RenderingManager::getPlayer(){ void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ objects.removeCell(store); + mTerrainManager->cellRemoved(store); } void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store) { objects.buildStaticGeometry (*store); + mTerrainManager->cellAdded(store); } void RenderingManager::addObject (const MWWorld::Ptr& ptr){ diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 8d8c982324..5afbd9b78b 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -3,6 +3,7 @@ #include "sky.hpp" +#include "terrain.hpp" #include "debugging.hpp" #include "../mwworld/class.hpp" @@ -97,6 +98,7 @@ class RenderingManager: private RenderingInterface { void setAmbientMode(); SkyManager* mSkyManager; + TerrainManager* mTerrainManager; OEngine::Render::OgreRenderer &rend; Ogre::Camera* camera; MWRender::Npcs npcs; diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp new file mode 100644 index 0000000000..44c4991309 --- /dev/null +++ b/apps/openmw/mwrender/terrain.cpp @@ -0,0 +1,62 @@ +#include +#include + +#include "terrain.hpp" + +#include "components/esm/loadland.hpp" + +namespace MWRender +{ + TerrainManager::TerrainManager(Ogre::SceneManager* mgr) + { + mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions(); + + mTerrainGlobals->setMaxPixelError(8); + + mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, + Ogre::Terrain::ALIGN_X_Z, ESM::Land::LAND_SIZE, + ESM::Land::REAL_SIZE); + + mTerrainGroup->setOrigin(Ogre::Vector3(ESM::Land::REAL_SIZE/2, + 0, + -ESM::Land::REAL_SIZE/2)); + + Ogre::Terrain::ImportData importSettings = + mTerrainGroup->getDefaultImportSettings(); + + importSettings.terrainSize = ESM::Land::LAND_SIZE; + importSettings.worldSize = ESM::Land::REAL_SIZE; + importSettings.minBatchSize = 9; + importSettings.maxBatchSize = 33; + + importSettings.deleteInputData = false; + } + + TerrainManager::~TerrainManager() + { + OGRE_DELETE mTerrainGroup; + OGRE_DELETE mTerrainGlobals; + } + + void TerrainManager::cellAdded(MWWorld::Ptr::CellStore *store) + { + int x = store->cell->getGridX(); + int y = store->cell->getGridY(); + + Ogre::Terrain::ImportData terrainData; + + terrainData.inputBias = 0; + terrainData.inputFloat = store->land->landData->heights; + + mTerrainGroup->defineTerrain(x, y, &terrainData); + + mTerrainGroup->loadTerrain(x, y, true); + } + + void TerrainManager::cellRemoved(MWWorld::Ptr::CellStore *store) + { + mTerrainGroup->removeTerrain(store->cell->getGridX(), + store->cell->getGridY()); + } + +} diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp new file mode 100644 index 0000000000..0a8b1ace0a --- /dev/null +++ b/apps/openmw/mwrender/terrain.hpp @@ -0,0 +1,31 @@ +#ifndef _GAME_RENDER_TERRAIN_H +#define _GAME_RENDER_TERRAIN_H + +#include "../mwworld/ptr.hpp" + +namespace Ogre{ + class SceneManager; + class TerrainGroup; + class TerrainGlobalOptions; +} + +namespace MWRender{ + + /** + * Implements the Morrowind terrain using the Ogre Terrain Component + */ + class TerrainManager{ + public: + TerrainManager(Ogre::SceneManager*); + virtual ~TerrainManager(); + + void cellAdded(MWWorld::Ptr::CellStore* store); + void cellRemoved(MWWorld::Ptr::CellStore* store); + private: + Ogre::TerrainGlobalOptions* mTerrainGlobals; + Ogre::TerrainGroup* mTerrainGroup; + }; + +} + +#endif // _GAME_RENDER_TERRAIN_H diff --git a/cmake/FindOGRE.cmake b/cmake/FindOGRE.cmake index ce3993805b..c3b471bb21 100644 --- a/cmake/FindOGRE.cmake +++ b/cmake/FindOGRE.cmake @@ -96,10 +96,25 @@ IF (OGRE_INCLUDE_DIR AND OGRE_LIBRARIES) ENDIF (OGRE_INCLUDE_DIR AND OGRE_LIBRARIES) IF (OGRE_FOUND) + # find terrain component + find_path(OGRE_Terrain_INCLUDE_DIR NAMES OgreTerrain.h HINTS ${OGRE_INCLUDE_DIR} PATH_SUFFIXES Terrain Components/Terrain/include) + set(OGRE_Terrain_LIBRARY_NAMES "OgreTerrain") + find_library(OGRE_Terrain_LIBRARY NAMES ${OGRE_Terrain_LIBRARY_NAMES} HINTS ${OGRE_LIB_DIR} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel") + if(OGRE_Terrain_INCLUDE_DIR AND OGRE_Terrain_LIBRARY) + SET(OGRE_Terrain_FOUND TRUE) + endif(OGRE_Terrain_INCLUDE_DIR AND OGRE_Terrain_LIBRARY) + IF (NOT OGRE_FIND_QUIETLY) MESSAGE(STATUS " libraries : ${OGRE_LIBRARIES} from ${OGRE_LIB_DIR}") MESSAGE(STATUS " includes : ${OGRE_INCLUDE_DIR}") MESSAGE(STATUS " plugins : ${OGRE_PLUGIN_DIR}") + IF (OGRE_Terrain_FOUND) + MESSAGE(STATUS "Ogre Terrain component found:") + MESSAGE(STATUS " include : ${OGRE_Terrain_INCLUDE_DIR}") + MESSAGE(STATUS " library : ${OGRE_Terrain_LIBRARY}") + ELSE (OGRE_Terrain_FOUND) + MESSAGE(FATAL_ERROR "Required Ogre terrain component not found") + ENDIF (OGRE_Terrain_FOUND) ENDIF (NOT OGRE_FIND_QUIETLY) ELSE (OGRE_FOUND) IF (OGRE_FIND_REQUIRED) diff --git a/components/esm/loadcell.hpp b/components/esm/loadcell.hpp index 671f702cab..a5d61f9304 100644 --- a/components/esm/loadcell.hpp +++ b/components/esm/loadcell.hpp @@ -119,6 +119,21 @@ struct Cell void load(ESMReader &esm); + bool isExterior() const + { + return !(data.flags & Interior); + } + + int getGridX() const + { + return data.gridX; + } + + int getGridY() const + { + return data.gridY; + } + // Restore the given reader to the stored position. Will try to open // the file matching the stored file name. If you want to read from // somewhere other than the file system, you need to pre-open the diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index 740d15a400..b8de98f0a6 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -19,14 +19,93 @@ void Land::load(ESMReader &esm) int cnt = 0; // Skip these here. Load the actual data when the cell is loaded. - if(esm.isNextSub("VNML")) {esm.skipHSubSize(12675);cnt++;} - if(esm.isNextSub("VHGT")) {esm.skipHSubSize(4232);cnt++;} - if(esm.isNextSub("WNAM")) esm.skipHSubSize(81); - if(esm.isNextSub("VCLR")) esm.skipHSubSize(12675); - if(esm.isNextSub("VTEX")) {esm.skipHSubSize(512);cnt++;} + if (esm.isNextSub("VNML")) + { + esm.skipHSubSize(12675); + cnt++; + } + if (esm.isNextSub("VHGT")) + { + esm.skipHSubSize(4232); + cnt++; + } + if (esm.isNextSub("WNAM")) + { + esm.skipHSubSize(81); + } + if (esm.isNextSub("VCLR")) + { + esm.skipHSubSize(12675); + } + if (esm.isNextSub("VTEX")) + { + esm.skipHSubSize(512); + cnt++; + } // We need all three of VNML, VHGT and VTEX in order to use the // landscape. hasData = (cnt == 3); + + dataLoaded = false; + landData = NULL; } + +void Land::loadData(ESMReader &esm) +{ + if (dataLoaded) + { + return; + } + + landData = new LandData; + + if (hasData) + { + esm.restoreContext(context); + + //esm.getHNExact(landData->normals, sizeof(VNML), "VNML"); + if (esm.isNextSub("VNML")) + { + esm.skipHSubSize(12675); + } + + VHGT rawHeights; + + esm.getHNExact(&rawHeights, sizeof(VHGT), "VHGT"); + int currentHeightOffset = rawHeights.heightOffset; + for (int y = 0; y < LAND_SIZE; y++) + { + currentHeightOffset += rawHeights.heightData[y * LAND_SIZE]; + landData->heights[y * LAND_SIZE] = currentHeightOffset * HEIGHT_SCALE; + + int tempOffset = currentHeightOffset; + for (int x = 1; x < LAND_SIZE; x++) + { + tempOffset += rawHeights.heightData[y * LAND_SIZE + x]; + landData->heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; + } + } + } + else + { + for (int i = 0; i < LAND_NUM_VERTS; i++) + { + landData->heights[i] = -256.0f * HEIGHT_SCALE; + } + } + + dataLoaded = true; +} + +void Land::unloadData() +{ + if (dataLoaded) + { + delete landData; + landData = NULL; + dataLoaded = false; + } +} + } diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index af91850ac0..898e7f529d 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -21,7 +21,51 @@ struct Land bool hasData; + bool dataLoaded; + + // number of vertices per side + static const int LAND_SIZE = 65; + + // cell terrain size in world coords + static const int REAL_SIZE = 8192; + + // total number of vertices + static const int LAND_NUM_VERTS = LAND_SIZE * LAND_SIZE; + + static const int HEIGHT_SCALE = 8; + +#pragma pack(push,1) + struct VHGT + { + float heightOffset; + int8_t heightData[LAND_NUM_VERTS]; + short unknown1; + char unknown2; + }; +#pragma pack(pop) + + typedef uint8_t VNML[LAND_NUM_VERTS * 3]; + + struct LandData + { + float heightOffset; + float heights[LAND_NUM_VERTS]; + //float normals[LAND_NUM_VERTS * 3]; + }; + + LandData *landData; + void load(ESMReader &esm); + + /** + * Actually loads data + */ + void loadData(ESMReader &esm); + + /** + * Frees memory allocated for land data + */ + void unloadData(); }; } #endif diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index d064312f10..7c2ee48fb4 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -96,7 +96,8 @@ namespace ESMS State_Unloaded, State_Preloaded, State_Loaded }; - CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded) {} + CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded), + land(NULL) {} const ESM::Cell *cell; State mState; @@ -124,6 +125,8 @@ namespace ESMS CellRefList statics; CellRefList weapons; + const Land* land; + void load (const ESMStore &store, ESMReader &esm) { if (mState!=State_Loaded) @@ -135,6 +138,11 @@ namespace ESMS loadRefs (store, esm); + if ( ! (cell->data.flags & ESM::Cell::Interior) ) + { + loadTerrain(cell->data.gridX, cell->data.gridY, store, esm); + } + mState = State_Loaded; } } @@ -180,6 +188,29 @@ namespace ESMS private: + void loadTerrain(int X, int Y, const ESMStore &store, ESMReader &esm) + { + // load terrain + Land *land = store.lands.search(X, Y); + if (land != NULL) + { + land->loadData(esm); + } + + this->land = land; + } + + void unloadTerrain(int X, int Y, const ESMStore &store) { + Land *land = store.lands.search(X,Y); + // unload terrain + if (land != NULL) + { + land->unloadData(); + } + + this->land = NULL; + } + template bool forEachImp (Functor& functor, List& list) { diff --git a/components/esm_store/reclists.hpp b/components/esm_store/reclists.hpp index 20a2e8ff95..e150f10854 100644 --- a/components/esm_store/reclists.hpp +++ b/components/esm_store/reclists.hpp @@ -235,7 +235,7 @@ namespace ESMS virtual void listIdentifier (std::vector& identifier) const {} // Find land for the given coordinates. Return null if no data. - const Land *search(int x, int y) const + Land *search(int x, int y) const { Lands::const_iterator it = lands.find(x); if(it==lands.end()) diff --git a/components/esm_store/store.hpp b/components/esm_store/store.hpp index e3bbf9e82c..83cd5ab16e 100644 --- a/components/esm_store/store.hpp +++ b/components/esm_store/store.hpp @@ -115,7 +115,7 @@ namespace ESMS recLists[REC_GLOB] = &globals; recLists[REC_GMST] = &gameSettings; recLists[REC_INGR] = &ingreds; - //recLists[REC_LAND] = &lands; + recLists[REC_LAND] = &lands; recLists[REC_LEVC] = &creatureLists; recLists[REC_LEVI] = &itemLists; recLists[REC_LIGH] = &lights; diff --git a/files/plugins.cfg.linux b/files/plugins.cfg.linux index b6e104351d..2921153b4f 100644 --- a/files/plugins.cfg.linux +++ b/files/plugins.cfg.linux @@ -7,6 +7,6 @@ PluginFolder=${OGRE_PLUGIN_DIR} Plugin=RenderSystem_GL Plugin=Plugin_ParticleFX Plugin=Plugin_OctreeSceneManager -# Plugin=Plugin_CgProgramManager +Plugin=Plugin_CgProgramManager diff --git a/files/plugins.cfg.mac b/files/plugins.cfg.mac index baaca44792..0c16bddaf7 100644 --- a/files/plugins.cfg.mac +++ b/files/plugins.cfg.mac @@ -7,6 +7,6 @@ PluginFolder= Plugin=RenderSystem_GL.dylib Plugin=Plugin_ParticleFX.dylib Plugin=Plugin_OctreeSceneManager.dylib -# Plugin=Plugin_CgProgramManager +Plugin=Plugin_CgProgramManager From 637302fc87a85fb3c67574861baef406734a7076 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Sat, 21 Jan 2012 17:59:12 +0000 Subject: [PATCH 007/488] Added blended textures to the terrain --- apps/openmw/mwrender/terrain.cpp | 150 ++++++++++++++++++++++++++++ apps/openmw/mwrender/terrain.hpp | 28 ++++++ components/esm/loadland.cpp | 19 ++++ components/esm/loadland.hpp | 8 ++ components/esm_store/cell_store.hpp | 2 + 5 files changed, 207 insertions(+) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 44c4991309..4d13b68893 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -48,9 +48,13 @@ namespace MWRender terrainData.inputBias = 0; terrainData.inputFloat = store->land->landData->heights; + std::map indexes; + initTerrainTextures(&terrainData, store, indexes); mTerrainGroup->defineTerrain(x, y, &terrainData); mTerrainGroup->loadTerrain(x, y, true); + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(x,y); + initTerrainBlendMaps(terrain, store, indexes); } void TerrainManager::cellRemoved(MWWorld::Ptr::CellStore *store) @@ -59,4 +63,150 @@ namespace MWRender store->cell->getGridY()); } + void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, + MWWorld::Ptr::CellStore* store, + std::map& indexes) + { + //have a base texture for now, but this is probably not needed on most cells + terrainData->layerList.resize(1); + terrainData->layerList[0].worldSize = 256; + terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); + terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); + + const uint16_t* const textures = store->land->landData->textures; + for ( int y = 0; y < ESM::Land::LAND_TEXTURE_SIZE; y++ ) + { + for ( int x = 0; x < ESM::Land::LAND_TEXTURE_SIZE; x++ ) + { + const uint16_t ltexIndex = textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + if ( ltexIndex == 0 ) + { + continue; + } + + const std::map::const_iterator it = indexes.find(ltexIndex); + + if ( it == indexes.end() ) + { + //NB: All vtex ids are +1 compared to the ltex ids + assert((int)ltexIndex - 1 > 0 && + store->landTextures->ltex.size() > (size_t)ltexIndex - 1 && + "LAND.VTEX must be within the bounds of the LTEX array"); + + std::string texture = store->landTextures->ltex[ltexIndex-1].texture; + //TODO this is needed due to MWs messed up texture handling + texture = texture.substr(0, texture.rfind(".")) + ".dds"; + + const size_t position = terrainData->layerList.size(); + terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); + + terrainData->layerList[position].worldSize = 256; + terrainData->layerList[position].textureNames.push_back("textures\\" + texture); + + //Normal map. This should be removed but it would require alterations to + //the material generator. Another option would be to use a 1x1 blank texture + terrainData->layerList[position].textureNames.push_back("textures\\" + texture); + + indexes[ltexIndex] = position; + } + } + } + + } + + void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, + MWWorld::Ptr::CellStore* store, + const std::map& indexes) + { + const int blendSize = terrain->getLayerBlendMapSize(); + const int blendDist = TERRAIN_SHADE_DISTANCE * + (blendSize / ESM::Land::LAND_TEXTURE_SIZE); + + //zero out every map + std::map::const_iterator iter; + for ( iter = indexes.begin(); iter != indexes.end(); ++iter ) + { + float* pBlend = terrain->getLayerBlendMap(iter->second) + ->getBlendPointer(); + memset(pBlend, 0, sizeof(float) * blendSize * blendSize); + } + + //covert the ltex data into a set of blend maps + const uint16_t* const textures = store->land->landData->textures; + for ( int texY = 0; texY < ESM::Land::LAND_TEXTURE_SIZE; texY++ ) + { + for ( int texX = 0; texX < ESM::Land::LAND_TEXTURE_SIZE; texX++ ) + { + const uint16_t ltexIndex = textures[texY * ESM::Land::LAND_TEXTURE_SIZE + texX]; + if ( ltexIndex == 0 ){ + continue; + } + const int layerIndex = indexes.find(ltexIndex)->second; + + float* const pBlend = terrain->getLayerBlendMap(layerIndex) + ->getBlendPointer(); + + const int splatSize = blendSize / ESM::Land::LAND_TEXTURE_SIZE; + + //setup the bounds for the shading of this texture splat + const int startX = std::max(0, texX*splatSize - blendDist); + const int endX = std::min(blendSize, (texX+1)*splatSize + blendDist); + + const int startY = std::max(0, texY*splatSize - blendDist); + const int endY = std::min(blendSize, (texY+1)*splatSize + blendDist); + + for ( int blendX = startX; blendX < endX; blendX++ ) + { + for ( int blendY = startY; blendY < endY; blendY++ ) + { + assert(blendX >= 0 && blendX < blendSize && + "index must be within texture bounds"); + + assert(blendY >= 0 && blendY < blendSize && + "index must be within texture bounds"); + + //calculate the distance from the edge of the square + // to the point we are shading + int distX = texX*splatSize - blendX; + if ( distX < 0 ) + { + distX = std::max(0, blendX - (texX+1)*splatSize); + } + + int distY = texY*splatSize - blendY; + if ( distY < 0 ) + { + distY = std::max(0, blendY - (texY+1)*splatSize); + } + + float blendAmount = blendDist - std::sqrt((float)distX*distX + distY*distY); + blendAmount /= blendDist; + + //this is required as blendDist < sqrt(blendDist*blendDist + blendDist*blendDist) + //this means that the corners are slightly the "wrong" shape but totaly smooth + //shading for the edges + blendAmount = std::max( (float) 0.0, blendAmount); + + assert(blendAmount >= 0 && "Blend should never be negative"); + + //flips the y + const int index = blendSize*(blendSize - 1 - blendY) + blendX; + pBlend[index] += blendAmount; + pBlend[index] = std::min((float)1, pBlend[index]); + } + } + + } + } + + //update the maps + for ( iter = indexes.begin(); iter != indexes.end(); ++iter ) + { + Ogre::TerrainLayerBlendMap* blend = terrain->getLayerBlendMap(iter->second); + blend->dirty(); + blend->update(); + } + + } + } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 0a8b1ace0a..127c3f5f2f 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -1,12 +1,15 @@ #ifndef _GAME_RENDER_TERRAIN_H #define _GAME_RENDER_TERRAIN_H +#include + #include "../mwworld/ptr.hpp" namespace Ogre{ class SceneManager; class TerrainGroup; class TerrainGlobalOptions; + class Terrain; } namespace MWRender{ @@ -24,6 +27,31 @@ namespace MWRender{ private: Ogre::TerrainGlobalOptions* mTerrainGlobals; Ogre::TerrainGroup* mTerrainGroup; + + /** + * The distance that the current cell should be shaded into the neighbouring + * texture. The distance is in terms of the splat size of a texture + */ + static const float TERRAIN_SHADE_DISTANCE = 0.5; + + /** + * Setups up the list of textures for the cell + * @param terrainData the terrain data to setup the textures for + * @param indexes a mapping of ltex index to the terrain texture layer that + * can be used by initTerrainBlendMaps + */ + void initTerrainTextures(Ogre::Terrain::ImportData* terrainData, + MWWorld::Ptr::CellStore* store, + std::map& indexes); + + /** + * Creates the blend (splatting maps) for the given terrain from the ltex data. + * @param terrain the terrain object for the current cell + * @param indexes the mapping of ltex to blend map produced by initTerrainTextures + */ + void initTerrainBlendMaps(Ogre::Terrain* terrain, + MWWorld::Ptr::CellStore* store, + const std::map& indexes); }; } diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index b8de98f0a6..1d670036e3 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -86,6 +86,25 @@ void Land::loadData(ESMReader &esm) landData->heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; } } + + if (esm.isNextSub("WNAM")) + { + esm.skipHSubSize(81); + } + if (esm.isNextSub("VCLR")) + { + esm.skipHSubSize(12675); + } + //TODO fix magic numbers + uint16_t vtex[512]; + esm.getHNExact(&vtex, 512, "VTEX"); + + int readPos = 0; //bit ugly, but it works + for ( int y1 = 0; y1 < 4; y1++ ) + for ( int x1 = 0; x1 < 4; x1++ ) + for ( int y2 = 0; y2 < 4; y2++) + for ( int x2 = 0; x2 < 4; x2++ ) + landData->textures[(y1*4+y2)*16+(x1*4+x2)] = vtex[readPos++]; } else { diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 898e7f529d..4219f3eb63 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -34,6 +34,12 @@ struct Land static const int HEIGHT_SCALE = 8; + //number of textures per side of land + static const int LAND_TEXTURE_SIZE = 16; + + //total number of textures per land + static const int LAND_NUM_TEXTURES = LAND_TEXTURE_SIZE * LAND_TEXTURE_SIZE; + #pragma pack(push,1) struct VHGT { @@ -51,6 +57,8 @@ struct Land float heightOffset; float heights[LAND_NUM_VERTS]; //float normals[LAND_NUM_VERTS * 3]; + uint16_t textures[LAND_NUM_TEXTURES]; + char colours[3 * LAND_NUM_VERTS]; }; LandData *landData; diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index 7c2ee48fb4..5310237fed 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -126,6 +126,7 @@ namespace ESMS CellRefList weapons; const Land* land; + const LTexList* landTextures; void load (const ESMStore &store, ESMReader &esm) { @@ -141,6 +142,7 @@ namespace ESMS if ( ! (cell->data.flags & ESM::Cell::Interior) ) { loadTerrain(cell->data.gridX, cell->data.gridY, store, esm); + landTextures = &store.landTexts; } mState = State_Loaded; From a0838369b2c11f98108845f685a67c7847c9f93b Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sat, 21 Jan 2012 20:05:08 -0500 Subject: [PATCH 008/488] Very basic exterior water --- apps/openmw/mwrender/renderingmanager.cpp | 11 +++++++++-- apps/openmw/mwrender/renderingmanager.hpp | 1 + apps/openmw/mwrender/water.cpp | 19 +++++++++++++++++-- apps/openmw/mwrender/water.hpp | 7 +++++-- apps/openmw/mwworld/scene.cpp | 9 +++++++-- apps/openmw/mwworld/world.cpp | 2 +- 6 files changed, 40 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index b5fce4b447..b86f73ba49 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -84,6 +84,9 @@ MWRender::Player& RenderingManager::getPlayer(){ void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ objects.removeCell(store); + +} +void RenderingManager::removeWater (){ if(mWater){ delete mWater; mWater = 0; @@ -120,8 +123,12 @@ void RenderingManager::update (float duration){ } void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store){ - if(store->cell->data.flags & store->cell->HasWater) - mWater = new MWRender::Water(rend.getCamera(), store->cell->water); + if(store->cell->data.flags & store->cell->HasWater){ + if(mWater == 0) + mWater = new MWRender::Water(rend.getCamera(), store->cell); + //else + + } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 99926e4005..e35a807516 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -64,6 +64,7 @@ class RenderingManager: private RenderingInterface { bool toggleRenderMode(int mode); void removeCell (MWWorld::Ptr::CellStore *store); // TODO do we want this? + void removeWater(); void addObject (const MWWorld::Ptr& ptr); void removeObject (const MWWorld::Ptr& ptr); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 2ab2fee385..98730922cb 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,18 +1,21 @@ #include "water.hpp" namespace MWRender { - Water::Water (Ogre::Camera *camera, int top) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mTop(top) { + Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { try { Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) { } + mTop = cell->water; + + std::cout << "Making water\n"; mIsUnderwater = false; mCamera->addListener(this); mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, mTop); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, 14000, 14000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*3 + 10000, CELL_SIZE * 3 + 10000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); @@ -23,6 +26,13 @@ namespace MWRender { mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + + //if(!(cell->data.flags & cell->Interior)) + //{ + mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); + //} + //else + // mWaterNode->setPosition(10000, 0, 10000); //Don't mess with y mWaterNode->attachObject(mWater); } @@ -95,5 +105,10 @@ namespace MWRender { void Water::cameraDestroyed(Ogre::Camera *cam) { } + Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ + Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), 0, -gridY * CELL_SIZE - (CELL_SIZE / 2)); + + return out; + } } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 73057cc340..e07e93eefa 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -2,12 +2,13 @@ #define GAME_MWRENDER_WATER_H #include - +#include namespace MWRender { /// Water rendering class Water : Ogre::RenderTargetListener, Ogre::Camera::Listener { + static const int CELL_SIZE = 8192; Ogre::Camera *mCamera; Ogre::SceneManager *mSceneManager; Ogre::Viewport *mViewport; @@ -31,13 +32,15 @@ namespace MWRender { void cameraPreRenderScene(Ogre::Camera *cam); void cameraPostRenderScene(Ogre::Camera *cam); void cameraDestroyed(Ogre::Camera *cam); + Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); public: - Water (Ogre::Camera *camera, int top); + Water (Ogre::Camera *camera, const ESM::Cell* cell); ~Water(); void checkUnderwater(float y); + void changeCell(float x, float y); }; diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index fde4d6394a..12264913e6 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -75,7 +75,7 @@ namespace MWWorld mPhysics->removeObject (node->getName()); } } - mRendering.removeCell(active); + //mPhysics->removeObject("Unnamed_43"); mWorld->getLocalScripts().clearCell (active); mEnvironment.mMechanicsManager->dropActors (active); @@ -95,7 +95,6 @@ namespace MWWorld mActiveCells.insert(cell); if(result.second){ insertCell(*cell, mEnvironment); - mRendering.cellAdded (cell); mRendering.configureAmbient(*cell); } @@ -180,6 +179,7 @@ namespace MWWorld assert (iter!=mActiveCells.end()); mCurrentCell = *iter; + std::cout << "GridX: " << mCurrentCell->cell->data.gridX << "GridY: " << mCurrentCell->cell->data.gridY << "\n"; // adjust player playerCellChange (mWorld->getExterior(X, Y), position, adjustPlayerPos); @@ -188,6 +188,7 @@ namespace MWWorld mWorld->adjustSky(); mCellChanged = true; + mRendering.cellAdded(mCurrentCell); } //We need the ogre renderer and a scene node. @@ -214,6 +215,7 @@ namespace MWWorld void Scene::changeToInteriorCell (const std::string& cellName, const ESM::Position& position) { std::cout << "Changing to interior\n"; + mRendering.removeWater(); // remove active CellStoreCollection::iterator active = mActiveCells.begin(); @@ -227,6 +229,7 @@ namespace MWWorld Ptr::CellStore *cell = mWorld->getInterior(cellName); loadCell (cell); + // adjust player mCurrentCell = cell; @@ -236,12 +239,14 @@ namespace MWWorld mWorld->adjustSky(); mCellChanged = true; + mRendering.cellAdded(cell); } void Scene::changeToExteriorCell (const ESM::Position& position) { int x = 0; int y = 0; + mRendering.removeWater(); mWorld->positionToIndex (position.pos[0], position.pos[1], x, y); diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index d290e093b1..f02c71ed64 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -524,7 +524,7 @@ namespace MWWorld ptr.getRefData().getPosition().pos[2] = z; if (ptr==mPlayer->getPlayer()) { - //std::cout << "Current pos" << ptr.getRefData().getPosition().pos[1]; + //std::cout << "X:" << ptr.getRefData().getPosition().pos[0] << " Z: " << ptr.getRefData().getPosition().pos[1] << "\n"; mRendering.checkUnderwater( ptr.getRefData().getPosition().pos[2]); Ptr::CellStore *currentCell = mWorldScene->getCurrentCell(); From 1b1ce485024ddca13ad354ff4ee38c349dc00222 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 22 Jan 2012 20:20:12 +0400 Subject: [PATCH 009/488] Now terrain manager donesn't try to load terrain for interiors --- apps/openmw/mwrender/renderingmanager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index b0b7c88c4a..471ce5c417 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -78,13 +78,15 @@ MWRender::Player& RenderingManager::getPlayer(){ void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ objects.removeCell(store); - mTerrainManager->cellRemoved(store); + if (store->cell->isExterior()) + mTerrainManager->cellRemoved(store); } void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store) { objects.buildStaticGeometry (*store); - mTerrainManager->cellAdded(store); + if (store->cell->isExterior()) + mTerrainManager->cellAdded(store); } void RenderingManager::addObject (const MWWorld::Ptr& ptr){ From e1aba44da643a1e776fa69873ebf8e59bdc5cd0f Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sun, 22 Jan 2012 16:38:10 -0500 Subject: [PATCH 010/488] Switching cells in exterior works --- apps/openmw/mwrender/renderingmanager.cpp | 4 ++++ apps/openmw/mwrender/water.cpp | 20 ++++++++++++++++---- apps/openmw/mwrender/water.hpp | 2 +- apps/openmw/mwworld/scene.cpp | 2 -- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index b18415e659..3adfa6929a 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -133,9 +133,13 @@ void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){ if(store->cell->data.flags & store->cell->HasWater){ if(mWater == 0) mWater = new MWRender::Water(rend.getCamera(), store->cell); + else + mWater->changeCell(store->cell); //else } + else + removeWater(); } diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 4ab809567c..5cf6df99e2 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -12,9 +12,9 @@ namespace MWRender { mIsUnderwater = false; - mCamera->addListener(this); + //mCamera->addListener(this); - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, mTop); + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*3 + 10000, CELL_SIZE * 3 + 10000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); @@ -27,6 +27,7 @@ namespace MWRender { mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mWaterNode->setPosition(0, mTop, 0); if(!(cell->data.flags & cell->Interior)) @@ -40,7 +41,7 @@ namespace MWRender { Water::~Water() { Ogre::MeshManager::getSingleton().remove("water"); - mCamera->removeListener(this); + //mCamera->removeListener(this); mWaterNode->detachObject(mWater); mSceneManager->destroyEntity(mWater); @@ -51,6 +52,17 @@ namespace MWRender { Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); } + void Water::changeCell(const ESM::Cell* cell){ + mTop = cell->water; + + + + if(!(cell->data.flags & cell->Interior)) + mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); + else + mWaterNode->setPosition(0, mTop, 0); + } + void Water::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) { mWater->setVisible(false); @@ -106,7 +118,7 @@ namespace MWRender { void Water::cameraDestroyed(Ogre::Camera *cam) { } Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ - Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), 0, -gridY * CELL_SIZE - (CELL_SIZE / 2)); + Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); return out; } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index e07e93eefa..bdc9895fd6 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -40,7 +40,7 @@ namespace MWRender { ~Water(); void checkUnderwater(float y); - void changeCell(float x, float y); + void changeCell(const ESM::Cell* cell); }; diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index b222d5aec9..0b02a867ee 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -218,7 +218,6 @@ namespace MWWorld void Scene::changeToInteriorCell (const std::string& cellName, const ESM::Position& position) { std::cout << "Changing to interior\n"; - mRendering.removeWater(); // remove active CellStoreCollection::iterator active = mActiveCells.begin(); @@ -250,7 +249,6 @@ namespace MWWorld { int x = 0; int y = 0; - mRendering.removeWater(); mWorld->positionToIndex (position.pos[0], position.pos[1], x, y); From 3a1d7b7864145a00a05ec716e215b327928119a6 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sun, 22 Jan 2012 19:24:35 -0500 Subject: [PATCH 011/488] Huge Water --- apps/openmw/mwrender/water.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 5cf6df99e2..06ab53734c 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -7,7 +7,6 @@ namespace MWRender { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) { } - std::cout << "Water Constructor\n"; mTop = cell->water; @@ -16,7 +15,7 @@ namespace MWRender { mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*3 + 10000, CELL_SIZE * 3 + 10000, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); From cd0df082df5c83cca1170651d7b74068e701d146 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Mon, 23 Jan 2012 17:19:54 +0000 Subject: [PATCH 012/488] Textures are now blended between cells and the texture blending functions are now more abstract --- apps/openmw/mwrender/terrain.cpp | 103 ++++++++++++++++++++++++---- apps/openmw/mwrender/terrain.hpp | 28 +++++++- components/esm_store/cell_store.hpp | 32 +++++---- 3 files changed, 133 insertions(+), 30 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 4d13b68893..90dc917313 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -46,15 +46,17 @@ namespace MWRender Ogre::Terrain::ImportData terrainData; terrainData.inputBias = 0; - terrainData.inputFloat = store->land->landData->heights; + terrainData.inputFloat = store->land[1][1]->landData->heights; std::map indexes; - initTerrainTextures(&terrainData, store, indexes); + initTerrainTextures(&terrainData, store, 0, 0, + ESM::Land::LAND_TEXTURE_SIZE, indexes); mTerrainGroup->defineTerrain(x, y, &terrainData); mTerrainGroup->loadTerrain(x, y, true); Ogre::Terrain* terrain = mTerrainGroup->getTerrain(x,y); - initTerrainBlendMaps(terrain, store, indexes); + initTerrainBlendMaps(terrain, store, 0, 0, + ESM::Land::LAND_TEXTURE_SIZE, indexes); } void TerrainManager::cellRemoved(MWWorld::Ptr::CellStore *store) @@ -65,20 +67,29 @@ namespace MWRender void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, + int fromX, int fromY, int size, std::map& indexes) { + assert(store != NULL && "store must be a valid pointer"); + assert(terrainData != NULL && "Must have valid terrain data"); + assert(fromX >= 0 && fromY >= 0 && + "Can't get a terrain texture on terrain outside the current cell"); + assert(fromX+size <= ESM::Land::LAND_TEXTURE_SIZE && + fromY+size <= ESM::Land::LAND_TEXTURE_SIZE && + "Can't get a terrain texture on terrain outside the current cell"); + //have a base texture for now, but this is probably not needed on most cells terrainData->layerList.resize(1); terrainData->layerList[0].worldSize = 256; terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); - const uint16_t* const textures = store->land->landData->textures; - for ( int y = 0; y < ESM::Land::LAND_TEXTURE_SIZE; y++ ) + for ( int y = fromY - 1; y < fromY + size + 1; y++ ) { - for ( int x = 0; x < ESM::Land::LAND_TEXTURE_SIZE; x++ ) + for ( int x = fromX - 1; x < fromX + size + 1; x++ ) { - const uint16_t ltexIndex = textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + const uint16_t ltexIndex = getLtexIndexAt(store, x, y); + //this is the base texture, so we can ignore this at present if ( ltexIndex == 0 ) { continue; @@ -89,7 +100,7 @@ namespace MWRender if ( it == indexes.end() ) { //NB: All vtex ids are +1 compared to the ltex ids - assert((int)ltexIndex - 1 > 0 && + assert((int)ltexIndex >= 0 && store->landTextures->ltex.size() > (size_t)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); @@ -116,11 +127,23 @@ namespace MWRender void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, + int fromX, int fromY, int size, const std::map& indexes) { + assert(store != NULL && "store must be a valid pointer"); + assert(terrain != NULL && "Must have valid terrain"); + assert(fromX >= 0 && fromY >= 0 && + "Can't get a terrain texture on terrain outside the current cell"); + assert(fromX+size <= ESM::Land::LAND_TEXTURE_SIZE && + fromY+size <= ESM::Land::LAND_TEXTURE_SIZE && + "Can't get a terrain texture on terrain outside the current cell"); + + //size must be a power of 2 as we do divisions with a power of 2 number + //that need to result in an integer for correct splatting + assert( (size & (size - 1)) == 0 && "Size must be a power of 2"); + const int blendSize = terrain->getLayerBlendMapSize(); - const int blendDist = TERRAIN_SHADE_DISTANCE * - (blendSize / ESM::Land::LAND_TEXTURE_SIZE); + const int blendDist = TERRAIN_SHADE_DISTANCE * (blendSize / size); //zero out every map std::map::const_iterator iter; @@ -132,21 +155,24 @@ namespace MWRender } //covert the ltex data into a set of blend maps - const uint16_t* const textures = store->land->landData->textures; - for ( int texY = 0; texY < ESM::Land::LAND_TEXTURE_SIZE; texY++ ) + for ( int texY = fromY - 1; texY < fromY + size + 1; texY++ ) { - for ( int texX = 0; texX < ESM::Land::LAND_TEXTURE_SIZE; texX++ ) + for ( int texX = fromY - 1; texX < fromY + size + 1; texX++ ) { - const uint16_t ltexIndex = textures[texY * ESM::Land::LAND_TEXTURE_SIZE + texX]; + const uint16_t ltexIndex = getLtexIndexAt(store, texX, texY); + + //this is the ground texture, which is currently the base texture + //so don't alter the splatting map if ( ltexIndex == 0 ){ continue; } + const int layerIndex = indexes.find(ltexIndex)->second; float* const pBlend = terrain->getLayerBlendMap(layerIndex) ->getBlendPointer(); - const int splatSize = blendSize / ESM::Land::LAND_TEXTURE_SIZE; + const int splatSize = blendSize / size; //setup the bounds for the shading of this texture splat const int startX = std::max(0, texX*splatSize - blendDist); @@ -209,4 +235,51 @@ namespace MWRender } + + int TerrainManager::getLtexIndexAt(MWWorld::Ptr::CellStore* store, + int x, int y) + { + //check texture index falls within the 9 cell bounds + //as this function can't cope with anything above that + assert(x >= -ESM::Land::LAND_TEXTURE_SIZE && + y >= -ESM::Land::LAND_TEXTURE_SIZE && + "Trying to get land textures that are out of bounds"); + + assert(x < 2*ESM::Land::LAND_TEXTURE_SIZE && + y < 2*ESM::Land::LAND_TEXTURE_SIZE && + "Trying to get land textures that are out of bounds"); + + assert(store != NULL && "Store pointer must be valid"); + + //default center cell is indexed at (1,1) + int cellX = 1; + int cellY = 1; + + if ( x < 0 ) + { + cellX--; + x += ESM::Land::LAND_TEXTURE_SIZE; + } + else if ( x >= ESM::Land::LAND_TEXTURE_SIZE ) + { + cellX++; + x -= ESM::Land::LAND_TEXTURE_SIZE; + } + + if ( y < 0 ) + { + cellY--; + y += ESM::Land::LAND_TEXTURE_SIZE; + } + else if ( y >= ESM::Land::LAND_TEXTURE_SIZE ) + { + cellY++; + y -= ESM::Land::LAND_TEXTURE_SIZE; + } + + return store->land[cellX][cellY] + ->landData + ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + } + } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 127c3f5f2f..c64b741d57 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -35,23 +35,49 @@ namespace MWRender{ static const float TERRAIN_SHADE_DISTANCE = 0.5; /** - * Setups up the list of textures for the cell + * Setups up the list of textures for part of a cell, using indexes as + * an output to create a mapping of MW LtexIndex to the relevant terrain + * layer + * * @param terrainData the terrain data to setup the textures for + * @param store the cell store for the given terrain cell + * @param fromX the ltex index in the current cell to start making the texture from + * @param fromY the ltex index in the current cell to start making the texture from + * @param size the size (number of splats) to get * @param indexes a mapping of ltex index to the terrain texture layer that * can be used by initTerrainBlendMaps */ void initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, + int fromX, int fromY, int size, std::map& indexes); /** * Creates the blend (splatting maps) for the given terrain from the ltex data. + * * @param terrain the terrain object for the current cell + * @param store the cell store for the given terrain cell + * @param fromX the ltex index in the current cell to start making the texture from + * @param fromY the ltex index in the current cell to start making the texture from + * @param size the size (number of splats) to get * @param indexes the mapping of ltex to blend map produced by initTerrainTextures */ void initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, + int fromX, int fromY, int size, const std::map& indexes); + + /** + * Gets a LTEX index at the given point, assuming the current cell + * starts at (0,0). This supports getting values from the surrounding + * cells so negative x, y is acceptable + * + * @param store the cell store for the current cell + * @param x, y the splat position of the ltex index to get relative to the + * first splat of the current cell + */ + int getLtexIndexAt(MWWorld::Ptr::CellStore* store, int x, int y); + }; } diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index 5310237fed..951b0736a9 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -96,8 +96,8 @@ namespace ESMS State_Unloaded, State_Preloaded, State_Loaded }; - CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded), - land(NULL) {} + CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded) + {} const ESM::Cell *cell; State mState; @@ -125,7 +125,7 @@ namespace ESMS CellRefList statics; CellRefList weapons; - const Land* land; + const Land* land[3][3]; const LTexList* landTextures; void load (const ESMStore &store, ESMReader &esm) @@ -141,7 +141,16 @@ namespace ESMS if ( ! (cell->data.flags & ESM::Cell::Interior) ) { - loadTerrain(cell->data.gridX, cell->data.gridY, store, esm); + for ( size_t x = 0; x < 3; x++ ) + { + for ( size_t y = 0; y < 3; y++ ) + { + land[x][y] = loadTerrain(cell->data.gridX + x - 1, + cell->data.gridY + y - 1, + store, + esm); + } + } landTextures = &store.landTexts; } @@ -190,7 +199,7 @@ namespace ESMS private: - void loadTerrain(int X, int Y, const ESMStore &store, ESMReader &esm) + Land* loadTerrain(int X, int Y, const ESMStore &store, ESMReader &esm) { // load terrain Land *land = store.lands.search(X, Y); @@ -199,18 +208,13 @@ namespace ESMS land->loadData(esm); } - this->land = land; + return land; } void unloadTerrain(int X, int Y, const ESMStore &store) { - Land *land = store.lands.search(X,Y); - // unload terrain - if (land != NULL) - { - land->unloadData(); - } - - this->land = NULL; + assert (false && + "This function is not implemented due to the fact that we now store overlapping land blocks so" && + "we cannot be sure that the land segment is not being used by another CellStore"); } template From 5e3e6f916562ddeb8a7e3928551a0a810718e232 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Tue, 24 Jan 2012 13:29:31 +0000 Subject: [PATCH 013/488] Fixed some minor bugs, a cells terrain can now be rendered as 4 Ogre::Terrain objects, possibly giving a speed increase --- apps/openmw/mwrender/terrain.cpp | 184 +++++++++++++++++++++++++------ apps/openmw/mwrender/terrain.hpp | 30 +++++ 2 files changed, 179 insertions(+), 35 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 90dc917313..70ecdee73d 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "terrain.hpp" @@ -7,64 +8,167 @@ namespace MWRender { + + //---------------------------------------------------------------------------------------------- + TerrainManager::TerrainManager(Ogre::SceneManager* mgr) { mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions(); mTerrainGlobals->setMaxPixelError(8); + mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 1024 : 256); + + Ogre::TerrainMaterialGenerator::Profile* const activeProfile = + mTerrainGlobals->getDefaultMaterialGenerator() + ->getActiveProfile(); + Ogre::TerrainMaterialGeneratorA::SM2Profile* matProfile = + static_cast(activeProfile); + + matProfile->setLightmapEnabled(false); + matProfile->setReceiveDynamicShadowsEnabled(false); + + mLandSize = ESM::Land::LAND_SIZE; + mRealSize = ESM::Land::REAL_SIZE; + if ( SPLIT_TERRAIN ) + { + mLandSize = (mLandSize - 1)/2 + 1; + mRealSize /= 2; + } mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, - Ogre::Terrain::ALIGN_X_Z, ESM::Land::LAND_SIZE, - ESM::Land::REAL_SIZE); + Ogre::Terrain::ALIGN_X_Z, + mLandSize, + mRealSize); - mTerrainGroup->setOrigin(Ogre::Vector3(ESM::Land::REAL_SIZE/2, - 0, - -ESM::Land::REAL_SIZE/2)); + mTerrainGroup->setOrigin(Ogre::Vector3(mRealSize/2, + 0, + -mRealSize/2)); - Ogre::Terrain::ImportData importSettings = + Ogre::Terrain::ImportData& importSettings = mTerrainGroup->getDefaultImportSettings(); - importSettings.terrainSize = ESM::Land::LAND_SIZE; - importSettings.worldSize = ESM::Land::REAL_SIZE; + importSettings.inputBias = 0; + importSettings.terrainSize = mLandSize; + importSettings.worldSize = mRealSize; importSettings.minBatchSize = 9; - importSettings.maxBatchSize = 33; + importSettings.maxBatchSize = mLandSize; - importSettings.deleteInputData = false; + importSettings.deleteInputData = true; } + //---------------------------------------------------------------------------------------------- + TerrainManager::~TerrainManager() { OGRE_DELETE mTerrainGroup; OGRE_DELETE mTerrainGlobals; } + //---------------------------------------------------------------------------------------------- + void TerrainManager::cellAdded(MWWorld::Ptr::CellStore *store) { - int x = store->cell->getGridX(); - int y = store->cell->getGridY(); + const int cellX = store->cell->getGridX(); + const int cellY = store->cell->getGridY(); - Ogre::Terrain::ImportData terrainData; + Ogre::Terrain::ImportData terrainData = + mTerrainGroup->getDefaultImportSettings(); - terrainData.inputBias = 0; - terrainData.inputFloat = store->land[1][1]->landData->heights; + if ( SPLIT_TERRAIN ) + { + //split the cell terrain into four segments + const int numTextures = ESM::Land::LAND_TEXTURE_SIZE/2; - std::map indexes; - initTerrainTextures(&terrainData, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, indexes); - mTerrainGroup->defineTerrain(x, y, &terrainData); + for ( int x = 0; x < 2; x++ ) + { + for ( int y = 0; y < 2; y++ ) + { + const int terrainX = cellX * 2 + x; + const int terrainY = cellY * 2 + y; + + terrainData.inputFloat = OGRE_ALLOC_T(float, + mLandSize*mLandSize, + Ogre::MEMCATEGORY_GEOMETRY); + + //copy the height data row by row + for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) + { + //the offset of the current segment + const size_t yOffset = y * (mLandSize-1) * ESM::Land::LAND_SIZE + + //offset of the row + terrainCopyY * ESM::Land::LAND_SIZE; + const size_t xOffset = x * (mLandSize-1); + + memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], + &store->land[1][1]->landData->heights[yOffset + xOffset], + mLandSize*sizeof(float)); + } + + std::map indexes; + initTerrainTextures(&terrainData, store, + x * numTextures, y * numTextures, + numTextures, indexes); + + mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); + + mTerrainGroup->loadTerrain(terrainX, terrainY, true); + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + initTerrainBlendMaps(terrain, store, + x * numTextures, y * numTextures, + numTextures, indexes); + + } + } + } + else + { + //one cell is one terrain segment + terrainData.inputFloat = OGRE_ALLOC_T(float, + mLandSize*mLandSize, + Ogre::MEMCATEGORY_GEOMETRY); + + memcpy(&terrainData.inputFloat[0], + &store->land[1][1]->landData->heights[0], + mLandSize*mLandSize*sizeof(float)); + + std::map indexes; + initTerrainTextures(&terrainData, store, 0, 0, + ESM::Land::LAND_TEXTURE_SIZE, indexes); + + mTerrainGroup->defineTerrain(cellX, cellY, &terrainData); + + mTerrainGroup->loadTerrain(cellX, cellY, true); + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(cellX, cellY); + initTerrainBlendMaps(terrain, store, 0, 0, + ESM::Land::LAND_TEXTURE_SIZE, indexes); + } - mTerrainGroup->loadTerrain(x, y, true); - Ogre::Terrain* terrain = mTerrainGroup->getTerrain(x,y); - initTerrainBlendMaps(terrain, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, indexes); } + //---------------------------------------------------------------------------------------------- + void TerrainManager::cellRemoved(MWWorld::Ptr::CellStore *store) { - mTerrainGroup->removeTerrain(store->cell->getGridX(), - store->cell->getGridY()); + if ( SPLIT_TERRAIN ) + { + for ( int x = 0; x < 2; x++ ) + { + for ( int y = 0; y < 2; y++ ) + { + mTerrainGroup->removeTerrain(store->cell->getGridX() * 2 + x, + store->cell->getGridY() * 2 + y); + } + } + } + else + { + mTerrainGroup->removeTerrain(store->cell->getGridX(), + store->cell->getGridY()); + } } + //---------------------------------------------------------------------------------------------- + void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, @@ -122,9 +226,10 @@ namespace MWRender } } } - } + //---------------------------------------------------------------------------------------------- + void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, @@ -157,16 +262,24 @@ namespace MWRender //covert the ltex data into a set of blend maps for ( int texY = fromY - 1; texY < fromY + size + 1; texY++ ) { - for ( int texX = fromY - 1; texX < fromY + size + 1; texX++ ) + for ( int texX = fromX - 1; texX < fromX + size + 1; texX++ ) { const uint16_t ltexIndex = getLtexIndexAt(store, texX, texY); + //whilte texX is the splat index relative to the entire cell, + //relX is relative to the current segment we are splatting + const int relX = texX - fromX; + const int relY = texY - fromY; + //this is the ground texture, which is currently the base texture //so don't alter the splatting map if ( ltexIndex == 0 ){ continue; } + assert (indexes.find(ltexIndex) != indexes.end() && + "Texture layer must exist"); + const int layerIndex = indexes.find(ltexIndex)->second; float* const pBlend = terrain->getLayerBlendMap(layerIndex) @@ -175,11 +288,11 @@ namespace MWRender const int splatSize = blendSize / size; //setup the bounds for the shading of this texture splat - const int startX = std::max(0, texX*splatSize - blendDist); - const int endX = std::min(blendSize, (texX+1)*splatSize + blendDist); + const int startX = std::max(0, relX*splatSize - blendDist); + const int endX = std::min(blendSize, (relX+1)*splatSize + blendDist); - const int startY = std::max(0, texY*splatSize - blendDist); - const int endY = std::min(blendSize, (texY+1)*splatSize + blendDist); + const int startY = std::max(0, relY*splatSize - blendDist); + const int endY = std::min(blendSize, (relY+1)*splatSize + blendDist); for ( int blendX = startX; blendX < endX; blendX++ ) { @@ -193,16 +306,16 @@ namespace MWRender //calculate the distance from the edge of the square // to the point we are shading - int distX = texX*splatSize - blendX; + int distX = relX*splatSize - blendX; if ( distX < 0 ) { - distX = std::max(0, blendX - (texX+1)*splatSize); + distX = std::max(0, blendX - (relX+1)*splatSize); } - int distY = texY*splatSize - blendY; + int distY = relY*splatSize - blendY; if ( distY < 0 ) { - distY = std::max(0, blendY - (texY+1)*splatSize); + distY = std::max(0, blendY - (relY+1)*splatSize); } float blendAmount = blendDist - std::sqrt((float)distX*distX + distY*distY); @@ -235,6 +348,7 @@ namespace MWRender } + //---------------------------------------------------------------------------------------------- int TerrainManager::getLtexIndexAt(MWWorld::Ptr::CellStore* store, int x, int y) diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index c64b741d57..195741b0f7 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -16,6 +16,15 @@ namespace MWRender{ /** * Implements the Morrowind terrain using the Ogre Terrain Component + * + * This currently has two options as to how the terrain is rendered, one + * is that one cell is rendered as one Ogre::Terrain and the other that + * it is rendered as 4 Ogre::Terrain segments + * + * Splitting it up into segments has the following advantages + * * Seems to be faster + * * Terrain can now be culled more aggressivly using view frustram culling + * * We don't hit splat limits as much */ class TerrainManager{ public: @@ -28,6 +37,27 @@ namespace MWRender{ Ogre::TerrainGlobalOptions* mTerrainGlobals; Ogre::TerrainGroup* mTerrainGroup; + /** + * Should each cell be split into a further four Ogre::Terrain objects + * + * This has the advantage that it is possible to cull more terrain and + * we are more likly to be able to be able to fit all the required splats + * in (Ogre's default material generator only works with about 6 textures) + */ + static const bool SPLIT_TERRAIN = true; + + /** + * The length in verticies of a single terrain block. + * This takes into account the SPLIT_TERRAIN option + */ + int mLandSize; + + /** + * The length in game units of a single terrain block. + * This takes into account the SPLIT_TERRAIN option + */ + int mRealSize; + /** * The distance that the current cell should be shaded into the neighbouring * texture. The distance is in terms of the splat size of a texture From 9cc3af34e5dc8ebd8b90cee9a3e1bd3da48321b0 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Tue, 7 Feb 2012 12:41:08 +0000 Subject: [PATCH 014/488] Removed composite maps, fixes to texture sizes and unloading --- apps/openmw/mwrender/terrain.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 70ecdee73d..a468a44069 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -16,7 +16,20 @@ namespace MWRender mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions(); mTerrainGlobals->setMaxPixelError(8); - mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 1024 : 256); + mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setLightMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setCompositeMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setDefaultGlobalColourMapSize(256); + + //10 (default) didn't seem to be quite enough + mTerrainGlobals->setSkirtSize(32); + + /* + * Here we are pushing the composite map distance beyond the edge + * of the rendered terrain due to light issues (the lighting differs + * so much that it is very noticable + */ + mTerrainGlobals->setCompositeMapDistance(ESM::Land::REAL_SIZE*4); Ogre::TerrainMaterialGenerator::Profile* const activeProfile = mTerrainGlobals->getDefaultMaterialGenerator() @@ -27,6 +40,7 @@ namespace MWRender matProfile->setLightmapEnabled(false); matProfile->setReceiveDynamicShadowsEnabled(false); + //scale the land size if required mLandSize = ESM::Land::LAND_SIZE; mRealSize = ESM::Land::REAL_SIZE; if ( SPLIT_TERRAIN ) @@ -109,6 +123,8 @@ namespace MWRender x * numTextures, y * numTextures, numTextures, indexes); + assert( mTerrainGroup->getTerrain(cellX, cellY) == NULL && + "The terrain for this cell already existed" ); mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); mTerrainGroup->loadTerrain(terrainX, terrainY, true); @@ -143,6 +159,7 @@ namespace MWRender ESM::Land::LAND_TEXTURE_SIZE, indexes); } + mTerrainGroup->freeTemporaryResources(); } //---------------------------------------------------------------------------------------------- @@ -155,14 +172,14 @@ namespace MWRender { for ( int y = 0; y < 2; y++ ) { - mTerrainGroup->removeTerrain(store->cell->getGridX() * 2 + x, + mTerrainGroup->unloadTerrain(store->cell->getGridX() * 2 + x, store->cell->getGridY() * 2 + y); } } } else { - mTerrainGroup->removeTerrain(store->cell->getGridX(), + mTerrainGroup->unloadTerrain(store->cell->getGridX(), store->cell->getGridY()); } } From 286701e3a5ace50f60d60e0f8dcd9078b043f893 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Sat, 11 Feb 2012 20:54:29 +0000 Subject: [PATCH 015/488] Removed the flawed shading, updated textures, removed the need for a unused base texture --- apps/openmw/mwrender/terrain.cpp | 152 +++++++++++++++++++------------ apps/openmw/mwrender/terrain.hpp | 13 ++- 2 files changed, 107 insertions(+), 58 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index a468a44069..710a3ad05e 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -22,12 +22,11 @@ namespace MWRender mTerrainGlobals->setDefaultGlobalColourMapSize(256); //10 (default) didn't seem to be quite enough - mTerrainGlobals->setSkirtSize(32); + mTerrainGlobals->setSkirtSize(128); /* * Here we are pushing the composite map distance beyond the edge - * of the rendered terrain due to light issues (the lighting differs - * so much that it is very noticable + * of the rendered terrain due to not having setup lighting */ mTerrainGlobals->setCompositeMapDistance(ESM::Land::REAL_SIZE*4); @@ -38,6 +37,10 @@ namespace MWRender static_cast(activeProfile); matProfile->setLightmapEnabled(false); + matProfile->setLayerSpecularMappingEnabled(false); + + matProfile->setLayerParallaxMappingEnabled(false); + matProfile->setReceiveDynamicShadowsEnabled(false); //scale the land size if required @@ -85,8 +88,6 @@ namespace MWRender const int cellX = store->cell->getGridX(); const int cellY = store->cell->getGridY(); - Ogre::Terrain::ImportData terrainData = - mTerrainGroup->getDefaultImportSettings(); if ( SPLIT_TERRAIN ) { @@ -97,6 +98,9 @@ namespace MWRender { for ( int y = 0; y < 2; y++ ) { + Ogre::Terrain::ImportData terrainData = + mTerrainGroup->getDefaultImportSettings(); + const int terrainX = cellX * 2 + x; const int terrainY = cellY * 2 + y; @@ -138,6 +142,9 @@ namespace MWRender } else { + Ogre::Terrain::ImportData terrainData = + mTerrainGroup->getDefaultImportSettings(); + //one cell is one terrain segment terrainData.inputFloat = OGRE_ALLOC_T(float, mLandSize*mLandSize, @@ -199,19 +206,17 @@ namespace MWRender fromY+size <= ESM::Land::LAND_TEXTURE_SIZE && "Can't get a terrain texture on terrain outside the current cell"); - //have a base texture for now, but this is probably not needed on most cells - terrainData->layerList.resize(1); - terrainData->layerList[0].worldSize = 256; - terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); - terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); - + //there is one texture that we want to use as a base (i.e. it won't have + //a blend map). This holds the ltex index of that base texture so that + //we know not to include it in the output map + int baseTexture = -1; for ( int y = fromY - 1; y < fromY + size + 1; y++ ) { for ( int x = fromX - 1; x < fromX + size + 1; x++ ) { const uint16_t ltexIndex = getLtexIndexAt(store, x, y); //this is the base texture, so we can ignore this at present - if ( ltexIndex == 0 ) + if ( ltexIndex == baseTexture ) { continue; } @@ -225,21 +230,35 @@ namespace MWRender store->landTextures->ltex.size() > (size_t)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); - std::string texture = store->landTextures->ltex[ltexIndex-1].texture; - //TODO this is needed due to MWs messed up texture handling - texture = texture.substr(0, texture.rfind(".")) + ".dds"; + std::string texture; + if ( ltexIndex == 0 ) + { + texture = "_land_default.dds"; + } + else + { + texture = store->landTextures->ltex[ltexIndex-1].texture; + //TODO this is needed due to MWs messed up texture handling + texture = texture.substr(0, texture.rfind(".")) + ".dds"; + } const size_t position = terrainData->layerList.size(); terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); + Ogre::TexturePtr normDisp = getNormalDisp("textures\\" + texture); + terrainData->layerList[position].worldSize = 256; terrainData->layerList[position].textureNames.push_back("textures\\" + texture); + terrainData->layerList[position].textureNames.push_back(normDisp->getName()); - //Normal map. This should be removed but it would require alterations to - //the material generator. Another option would be to use a 1x1 blank texture - terrainData->layerList[position].textureNames.push_back("textures\\" + texture); - - indexes[ltexIndex] = position; + if ( baseTexture == -1 ) + { + baseTexture = ltexIndex; + } + else + { + indexes[ltexIndex] = position; + } } } } @@ -271,9 +290,9 @@ namespace MWRender std::map::const_iterator iter; for ( iter = indexes.begin(); iter != indexes.end(); ++iter ) { - float* pBlend = terrain->getLayerBlendMap(iter->second) - ->getBlendPointer(); - memset(pBlend, 0, sizeof(float) * blendSize * blendSize); + float* pBlend = terrain->getLayerBlendMap(iter->second) + ->getBlendPointer(); + memset(pBlend, 0, sizeof(float) * blendSize * blendSize); } //covert the ltex data into a set of blend maps @@ -288,15 +307,13 @@ namespace MWRender const int relX = texX - fromX; const int relY = texY - fromY; - //this is the ground texture, which is currently the base texture - //so don't alter the splatting map - if ( ltexIndex == 0 ){ + //check if it is the base texture (which isn't in the map) and + //if it is don't bother altering the blend map for it + if ( indexes.find(ltexIndex) == indexes.end() ) + { continue; } - assert (indexes.find(ltexIndex) != indexes.end() && - "Texture layer must exist"); - const int layerIndex = indexes.find(ltexIndex)->second; float* const pBlend = terrain->getLayerBlendMap(layerIndex) @@ -310,7 +327,7 @@ namespace MWRender const int startY = std::max(0, relY*splatSize - blendDist); const int endY = std::min(blendSize, (relY+1)*splatSize + blendDist); - + for ( int blendX = startX; blendX < endX; blendX++ ) { for ( int blendY = startY; blendY < endY; blendY++ ) @@ -321,34 +338,16 @@ namespace MWRender assert(blendY >= 0 && blendY < blendSize && "index must be within texture bounds"); - //calculate the distance from the edge of the square - // to the point we are shading - int distX = relX*splatSize - blendX; - if ( distX < 0 ) - { - distX = std::max(0, blendX - (relX+1)*splatSize); - } - - int distY = relY*splatSize - blendY; - if ( distY < 0 ) - { - distY = std::max(0, blendY - (relY+1)*splatSize); - } - - float blendAmount = blendDist - std::sqrt((float)distX*distX + distY*distY); - blendAmount /= blendDist; - - //this is required as blendDist < sqrt(blendDist*blendDist + blendDist*blendDist) - //this means that the corners are slightly the "wrong" shape but totaly smooth - //shading for the edges - blendAmount = std::max( (float) 0.0, blendAmount); - - assert(blendAmount >= 0 && "Blend should never be negative"); - - //flips the y const int index = blendSize*(blendSize - 1 - blendY) + blendX; - pBlend[index] += blendAmount; - pBlend[index] = std::min((float)1, pBlend[index]); + if ( blendX >= relX*splatSize && blendX < (relX+1)*splatSize && + blendY >= relY*splatSize && blendY < (relY+1)*splatSize ) + { + pBlend[index] = 1; + } + else + { + pBlend[index] = std::max((float)pBlend[index], 0.5f); + } } } @@ -413,4 +412,43 @@ namespace MWRender ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; } + //---------------------------------------------------------------------------------------------- + + Ogre::TexturePtr TerrainManager::getNormalDisp(const std::string& fileName) + { + Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); + const std::string normalTextureName = fileName.substr(0, fileName.rfind(".")) + + "_n.dds"; + if ( !texMgr->getByName(normalTextureName).isNull() ) + { + return texMgr->getByName(normalTextureName); + } + + const std::string textureName = "default_terrain_normal"; + if ( !texMgr->getByName(textureName).isNull() ) + { + return texMgr->getByName(textureName); + } + + Ogre::TexturePtr tex = texMgr->createManual( + textureName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, 1, 1, 0, Ogre::PF_BYTE_BGRA); + + Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); + + pixelBuffer->lock(Ogre::HardwareBuffer::HBL_NORMAL); + const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); + + Ogre::uint8* pDest = static_cast(pixelBox.data); + + *pDest++ = 128; // B + *pDest++ = 128; // G + *pDest++ = 128; // R + *pDest++ = 0; // A + + pixelBuffer->unlock(); + + return tex; + } + } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 195741b0f7..548d00eab3 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -62,7 +62,7 @@ namespace MWRender{ * The distance that the current cell should be shaded into the neighbouring * texture. The distance is in terms of the splat size of a texture */ - static const float TERRAIN_SHADE_DISTANCE = 0.5; + static const float TERRAIN_SHADE_DISTANCE = 0.25f; /** * Setups up the list of textures for part of a cell, using indexes as @@ -107,6 +107,17 @@ namespace MWRender{ * first splat of the current cell */ int getLtexIndexAt(MWWorld::Ptr::CellStore* store, int x, int y); + + /** + * Retrives the texture that is the normal and parallax map for the + * terrain. If it doesn't exist a blank texture is used + * + * The file name of the texture should be the same as the file name of + * the base diffuse texture, but with _n appended before the extension + * + * @param fileName the name of the *diffuse* texture + */ + Ogre::TexturePtr getNormalDisp(const std::string& fileName); }; From f34b2c73c5f81f15a02ee9a4fe878ff005ff4e37 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 27 Feb 2012 19:44:52 +0100 Subject: [PATCH 016/488] committing the terrain material generator from ogre 1.7.4, it seems to be almost impossible to make a derived class of TerrainMaterialGeneratorA because of the many classes it contains and the inter-relationships between them; just adding the whole source makes it a lot easier to modify if we decide to update this source from OGRE upstream at any point (which seems unlikely), we can take the diff from this commit on to see the changes we did to the material generator --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwrender/terrain.cpp | 18 +- apps/openmw/mwrender/terrainmaterial.cpp | 1656 ++++++++++++++++++++++ apps/openmw/mwrender/terrainmaterial.hpp | 261 ++++ 4 files changed, 1932 insertions(+), 5 deletions(-) create mode 100644 apps/openmw/mwrender/terrainmaterial.cpp create mode 100644 apps/openmw/mwrender/terrainmaterial.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 663a10787d..8ee865a0bf 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -16,7 +16,7 @@ set(GAME_HEADER source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender - renderingmanager debugging sky terrain player npcs creatures objects renderinginterface + renderingmanager debugging sky terrain terrainmaterial player npcs creatures objects renderinginterface ) add_openmw_dir (mwinput diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 70ecdee73d..568ed37415 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -1,11 +1,13 @@ #include #include -#include +#include "terrainmaterial.hpp" #include "terrain.hpp" #include "components/esm/loadland.hpp" +using namespace Ogre; + namespace MWRender { @@ -18,15 +20,23 @@ namespace MWRender mTerrainGlobals->setMaxPixelError(8); mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 1024 : 256); + Ogre::TerrainMaterialGeneratorPtr matGen; + TerrainMaterialGeneratorB* matGenP = new TerrainMaterialGeneratorB(); + matGen.bind(matGenP); + mTerrainGlobals->setDefaultMaterialGenerator(matGen); + Ogre::TerrainMaterialGenerator::Profile* const activeProfile = mTerrainGlobals->getDefaultMaterialGenerator() ->getActiveProfile(); - Ogre::TerrainMaterialGeneratorA::SM2Profile* matProfile = - static_cast(activeProfile); + TerrainMaterialGeneratorB::SM2Profile* matProfile = + static_cast(activeProfile); matProfile->setLightmapEnabled(false); matProfile->setReceiveDynamicShadowsEnabled(false); - + matProfile->setLayerNormalMappingEnabled(false); + //matProfile->setLayerParallaxMappingEnabled(false); + matProfile->setLayerSpecularMappingEnabled(false); + mLandSize = ESM::Land::LAND_SIZE; mRealSize = ESM::Land::REAL_SIZE; if ( SPLIT_TERRAIN ) diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp new file mode 100644 index 0000000000..313a4a90cf --- /dev/null +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -0,0 +1,1656 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE +(Object-oriented Graphics Rendering Engine) +For the latest info, see http://www.ogre3d.org/ + +Copyright (c) 2000-2011 Torus Knot Software Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +----------------------------------------------------------------------------- +*/ +#include "terrainmaterial.hpp" +#include "OgreTerrain.h" +#include "OgreMaterialManager.h" +#include "OgreTechnique.h" +#include "OgrePass.h" +#include "OgreTextureUnitState.h" +#include "OgreGpuProgramManager.h" +#include "OgreHighLevelGpuProgramManager.h" +#include "OgreHardwarePixelBuffer.h" +#include "OgreShadowCameraSetupPSSM.h" + +namespace Ogre +{ + //--------------------------------------------------------------------- + TerrainMaterialGeneratorB::TerrainMaterialGeneratorB() + { + // define the layers + // We expect terrain textures to have no alpha, so we use the alpha channel + // in the albedo texture to store specular reflection + // similarly we double-up the normal and height (for parallax) + mLayerDecl.samplers.push_back(TerrainLayerSampler("albedo_specular", PF_BYTE_RGBA)); + mLayerDecl.samplers.push_back(TerrainLayerSampler("normal_height", PF_BYTE_RGBA)); + + mLayerDecl.elements.push_back( + TerrainLayerSamplerElement(0, TLSS_ALBEDO, 0, 3)); + mLayerDecl.elements.push_back( + TerrainLayerSamplerElement(0, TLSS_SPECULAR, 3, 1)); + mLayerDecl.elements.push_back( + TerrainLayerSamplerElement(1, TLSS_NORMAL, 0, 3)); + mLayerDecl.elements.push_back( + TerrainLayerSamplerElement(1, TLSS_HEIGHT, 3, 1)); + + + mProfiles.push_back(OGRE_NEW SM2Profile(this, "SM2", "Profile for rendering on Shader Model 2 capable cards")); + // TODO - check hardware capabilities & use fallbacks if required (more profiles needed) + setActiveProfile("SM2"); + + } + //--------------------------------------------------------------------- + TerrainMaterialGeneratorB::~TerrainMaterialGeneratorB() + { + + } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + TerrainMaterialGeneratorB::SM2Profile::SM2Profile(TerrainMaterialGenerator* parent, const String& name, const String& desc) + : Profile(parent, name, desc) + , mShaderGen(0) + , mLayerNormalMappingEnabled(true) + , mLayerParallaxMappingEnabled(true) + , mLayerSpecularMappingEnabled(true) + , mGlobalColourMapEnabled(true) + , mLightmapEnabled(true) + , mCompositeMapEnabled(true) + , mReceiveDynamicShadows(true) + , mPSSM(0) + , mDepthShadows(false) + , mLowLodShadows(false) + { + + } + //--------------------------------------------------------------------- + TerrainMaterialGeneratorB::SM2Profile::~SM2Profile() + { + OGRE_DELETE mShaderGen; + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::requestOptions(Terrain* terrain) + { + terrain->_setMorphRequired(true); + terrain->_setNormalMapRequired(true); + terrain->_setLightMapRequired(mLightmapEnabled, true); + terrain->_setCompositeMapRequired(mCompositeMapEnabled); + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setLayerNormalMappingEnabled(bool enabled) + { + if (enabled != mLayerNormalMappingEnabled) + { + mLayerNormalMappingEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setLayerParallaxMappingEnabled(bool enabled) + { + if (enabled != mLayerParallaxMappingEnabled) + { + mLayerParallaxMappingEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setLayerSpecularMappingEnabled(bool enabled) + { + if (enabled != mLayerSpecularMappingEnabled) + { + mLayerSpecularMappingEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setGlobalColourMapEnabled(bool enabled) + { + if (enabled != mGlobalColourMapEnabled) + { + mGlobalColourMapEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setLightmapEnabled(bool enabled) + { + if (enabled != mLightmapEnabled) + { + mLightmapEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setCompositeMapEnabled(bool enabled) + { + if (enabled != mCompositeMapEnabled) + { + mCompositeMapEnabled = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setReceiveDynamicShadowsEnabled(bool enabled) + { + if (enabled != mReceiveDynamicShadows) + { + mReceiveDynamicShadows = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setReceiveDynamicShadowsPSSM(PSSMShadowCameraSetup* pssmSettings) + { + if (pssmSettings != mPSSM) + { + mPSSM = pssmSettings; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setReceiveDynamicShadowsDepth(bool enabled) + { + if (enabled != mDepthShadows) + { + mDepthShadows = enabled; + mParent->_markChanged(); + } + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setReceiveDynamicShadowsLowLod(bool enabled) + { + if (enabled != mLowLodShadows) + { + mLowLodShadows = enabled; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + uint8 TerrainMaterialGeneratorB::SM2Profile::getMaxLayers(const Terrain* terrain) const + { + // count the texture units free + uint8 freeTextureUnits = 16; + // lightmap + --freeTextureUnits; + // normalmap + --freeTextureUnits; + // colourmap + if (terrain->getGlobalColourMapEnabled()) + --freeTextureUnits; + if (isShadowingEnabled(HIGH_LOD, terrain)) + { + uint numShadowTextures = 1; + if (getReceiveDynamicShadowsPSSM()) + { + numShadowTextures = getReceiveDynamicShadowsPSSM()->getSplitCount(); + } + freeTextureUnits -= numShadowTextures; + } + + // each layer needs 2.25 units (1xdiffusespec, 1xnormalheight, 0.25xblend) + return static_cast(freeTextureUnits / 2.25f); + + + } + //--------------------------------------------------------------------- + MaterialPtr TerrainMaterialGeneratorB::SM2Profile::generate(const Terrain* terrain) + { + // re-use old material if exists + MaterialPtr mat = terrain->_getMaterial(); + if (mat.isNull()) + { + MaterialManager& matMgr = MaterialManager::getSingleton(); + + // it's important that the names are deterministic for a given terrain, so + // use the terrain pointer as an ID + const String& matName = terrain->getMaterialName(); + mat = matMgr.getByName(matName); + if (mat.isNull()) + { + mat = matMgr.create(matName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + } + } + // clear everything + mat->removeAllTechniques(); + + // Automatically disable normal & parallax mapping if card cannot handle it + // We do this rather than having a specific technique for it since it's simpler + GpuProgramManager& gmgr = GpuProgramManager::getSingleton(); + if (!gmgr.isSyntaxSupported("ps_3_0") && !gmgr.isSyntaxSupported("ps_2_x") + && !gmgr.isSyntaxSupported("fp40") && !gmgr.isSyntaxSupported("arbfp1")) + { + setLayerNormalMappingEnabled(false); + setLayerParallaxMappingEnabled(false); + } + + addTechnique(mat, terrain, HIGH_LOD); + + // LOD + if(mCompositeMapEnabled) + { + addTechnique(mat, terrain, LOW_LOD); + Material::LodValueList lodValues; + lodValues.push_back(TerrainGlobalOptions::getSingleton().getCompositeMapDistance()); + mat->setLodLevels(lodValues); + Technique* lowLodTechnique = mat->getTechnique(1); + lowLodTechnique->setLodIndex(1); + } + + updateParams(mat, terrain); + + return mat; + + } + //--------------------------------------------------------------------- + MaterialPtr TerrainMaterialGeneratorB::SM2Profile::generateForCompositeMap(const Terrain* terrain) + { + // re-use old material if exists + MaterialPtr mat = terrain->_getCompositeMapMaterial(); + if (mat.isNull()) + { + MaterialManager& matMgr = MaterialManager::getSingleton(); + + // it's important that the names are deterministic for a given terrain, so + // use the terrain pointer as an ID + const String& matName = terrain->getMaterialName() + "/comp"; + mat = matMgr.getByName(matName); + if (mat.isNull()) + { + mat = matMgr.create(matName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + } + } + // clear everything + mat->removeAllTechniques(); + + addTechnique(mat, terrain, RENDER_COMPOSITE_MAP); + + updateParamsForCompositeMap(mat, terrain); + + return mat; + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::addTechnique( + const MaterialPtr& mat, const Terrain* terrain, TechniqueType tt) + { + + Technique* tech = mat->createTechnique(); + + // Only supporting one pass + Pass* pass = tech->createPass(); + + GpuProgramManager& gmgr = GpuProgramManager::getSingleton(); + HighLevelGpuProgramManager& hmgr = HighLevelGpuProgramManager::getSingleton(); + if (!mShaderGen) + { + bool check2x = mLayerNormalMappingEnabled || mLayerParallaxMappingEnabled; + if (hmgr.isLanguageSupported("cg")) + mShaderGen = OGRE_NEW ShaderHelperCg(); + else if (hmgr.isLanguageSupported("hlsl") && + ((check2x && gmgr.isSyntaxSupported("ps_2_x")) || + (!check2x && gmgr.isSyntaxSupported("ps_2_0")))) + mShaderGen = OGRE_NEW ShaderHelperHLSL(); + else if (hmgr.isLanguageSupported("glsl")) + mShaderGen = OGRE_NEW ShaderHelperGLSL(); + else + { + // todo + } + + // check SM3 features + mSM3Available = GpuProgramManager::getSingleton().isSyntaxSupported("ps_3_0"); + + } + HighLevelGpuProgramPtr vprog = mShaderGen->generateVertexProgram(this, terrain, tt); + HighLevelGpuProgramPtr fprog = mShaderGen->generateFragmentProgram(this, terrain, tt); + + pass->setVertexProgram(vprog->getName()); + pass->setFragmentProgram(fprog->getName()); + + if (tt == HIGH_LOD || tt == RENDER_COMPOSITE_MAP) + { + // global normal map + TextureUnitState* tu = pass->createTextureUnitState(); + tu->setTextureName(terrain->getTerrainNormalMap()->getName()); + tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + + // global colour map + if (terrain->getGlobalColourMapEnabled() && isGlobalColourMapEnabled()) + { + tu = pass->createTextureUnitState(terrain->getGlobalColourMap()->getName()); + tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + } + + // light map + if (isLightmapEnabled()) + { + tu = pass->createTextureUnitState(terrain->getLightmap()->getName()); + tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + } + + // blend maps + uint maxLayers = getMaxLayers(terrain); + uint numBlendTextures = std::min(terrain->getBlendTextureCount(maxLayers), terrain->getBlendTextureCount()); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + for (uint i = 0; i < numBlendTextures; ++i) + { + tu = pass->createTextureUnitState(terrain->getBlendTextureName(i)); + tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + } + + // layer textures + for (uint i = 0; i < numLayers; ++i) + { + // diffuse / specular + tu = pass->createTextureUnitState(terrain->getLayerTextureName(i, 0)); + // normal / height + tu = pass->createTextureUnitState(terrain->getLayerTextureName(i, 1)); + } + + } + else + { + // LOW_LOD textures + // composite map + TextureUnitState* tu = pass->createTextureUnitState(); + tu->setTextureName(terrain->getCompositeMap()->getName()); + tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + + // That's it! + + } + + // Add shadow textures (always at the end) + if (isShadowingEnabled(tt, terrain)) + { + uint numTextures = 1; + if (getReceiveDynamicShadowsPSSM()) + { + numTextures = getReceiveDynamicShadowsPSSM()->getSplitCount(); + } + for (uint i = 0; i < numTextures; ++i) + { + TextureUnitState* tu = pass->createTextureUnitState(); + tu->setContentType(TextureUnitState::CONTENT_SHADOW); + tu->setTextureAddressingMode(TextureUnitState::TAM_BORDER); + tu->setTextureBorderColour(ColourValue::White); + } + } + + } + //--------------------------------------------------------------------- + bool TerrainMaterialGeneratorB::SM2Profile::isShadowingEnabled(TechniqueType tt, const Terrain* terrain) const + { + return getReceiveDynamicShadowsEnabled() && tt != RENDER_COMPOSITE_MAP && + (tt != LOW_LOD || mLowLodShadows) && + terrain->getSceneManager()->isShadowTechniqueTextureBased(); + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::updateParams(const MaterialPtr& mat, const Terrain* terrain) + { + mShaderGen->updateParams(this, mat, terrain, false); + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::updateParamsForCompositeMap(const MaterialPtr& mat, const Terrain* terrain) + { + mShaderGen->updateParams(this, mat, terrain, true); + } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::generateVertexProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramPtr ret = createVertexProgram(prof, terrain, tt); + + StringUtil::StrStreamType sourceStr; + generateVertexProgramSource(prof, terrain, tt, sourceStr); + ret->setSource(sourceStr.str()); + ret->load(); + defaultVpParams(prof, terrain, tt, ret); +#if OGRE_DEBUG_MODE + LogManager::getSingleton().stream(LML_TRIVIAL) << "*** Terrain Vertex Program: " + << ret->getName() << " ***\n" << ret->getSource() << "\n*** ***"; +#endif + + return ret; + + } + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::generateFragmentProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramPtr ret = createFragmentProgram(prof, terrain, tt); + + StringUtil::StrStreamType sourceStr; + generateFragmentProgramSource(prof, terrain, tt, sourceStr); + ret->setSource(sourceStr.str()); + ret->load(); + defaultFpParams(prof, terrain, tt, ret); + +#if OGRE_DEBUG_MODE + LogManager::getSingleton().stream(LML_TRIVIAL) << "*** Terrain Fragment Program: " + << ret->getName() << " ***\n" << ret->getSource() << "\n*** ***"; +#endif + + return ret; + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::generateVertexProgramSource( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + generateVpHeader(prof, terrain, tt, outStream); + + if (tt != LOW_LOD) + { + uint maxLayers = prof->getMaxLayers(terrain); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + + for (uint i = 0; i < numLayers; ++i) + generateVpLayer(prof, terrain, tt, i, outStream); + } + + generateVpFooter(prof, terrain, tt, outStream); + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::generateFragmentProgramSource( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + generateFpHeader(prof, terrain, tt, outStream); + + if (tt != LOW_LOD) + { + uint maxLayers = prof->getMaxLayers(terrain); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + + for (uint i = 0; i < numLayers; ++i) + generateFpLayer(prof, terrain, tt, i, outStream); + } + + generateFpFooter(prof, terrain, tt, outStream); + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::defaultVpParams( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const HighLevelGpuProgramPtr& prog) + { + GpuProgramParametersSharedPtr params = prog->getDefaultParameters(); + params->setIgnoreMissingParams(true); + params->setNamedAutoConstant("worldMatrix", GpuProgramParameters::ACT_WORLD_MATRIX); + params->setNamedAutoConstant("viewProjMatrix", GpuProgramParameters::ACT_VIEWPROJ_MATRIX); + params->setNamedAutoConstant("lodMorph", GpuProgramParameters::ACT_CUSTOM, + Terrain::LOD_MORPH_CUSTOM_PARAM); + params->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); + + if (prof->isShadowingEnabled(tt, terrain)) + { + uint numTextures = 1; + if (prof->getReceiveDynamicShadowsPSSM()) + { + numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + } + for (uint i = 0; i < numTextures; ++i) + { + params->setNamedAutoConstant("texViewProjMatrix" + StringConverter::toString(i), + GpuProgramParameters::ACT_TEXTURE_VIEWPROJ_MATRIX, i); + if (prof->getReceiveDynamicShadowsDepth()) + { + params->setNamedAutoConstant("depthRange" + StringConverter::toString(i), + GpuProgramParameters::ACT_SHADOW_SCENE_DEPTH_RANGE, i); + } + } + } + + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::defaultFpParams( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const HighLevelGpuProgramPtr& prog) + { + GpuProgramParametersSharedPtr params = prog->getDefaultParameters(); + params->setIgnoreMissingParams(true); + + params->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); + params->setNamedAutoConstant("lightPosObjSpace", GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, 0); + params->setNamedAutoConstant("lightDiffuseColour", GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, 0); + params->setNamedAutoConstant("lightSpecularColour", GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, 0); + params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); + params->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); + + if (prof->isShadowingEnabled(tt, terrain)) + { + uint numTextures = 1; + if (prof->getReceiveDynamicShadowsPSSM()) + { + PSSMShadowCameraSetup* pssm = prof->getReceiveDynamicShadowsPSSM(); + numTextures = pssm->getSplitCount(); + Vector4 splitPoints; + const PSSMShadowCameraSetup::SplitPointList& splitPointList = pssm->getSplitPoints(); + // Populate from split point 1, not 0, since split 0 isn't useful (usually 0) + for (uint i = 1; i < numTextures; ++i) + { + splitPoints[i-1] = splitPointList[i]; + } + params->setNamedConstant("pssmSplitPoints", splitPoints); + } + + if (prof->getReceiveDynamicShadowsDepth()) + { + size_t samplerOffset = (tt == HIGH_LOD) ? mShadowSamplerStartHi : mShadowSamplerStartLo; + for (uint i = 0; i < numTextures; ++i) + { + params->setNamedAutoConstant("inverseShadowmapSize" + StringConverter::toString(i), + GpuProgramParameters::ACT_INVERSE_TEXTURE_SIZE, i + samplerOffset); + } + } + } + + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::updateParams( + const SM2Profile* prof, const MaterialPtr& mat, const Terrain* terrain, bool compositeMap) + { + Pass* p = mat->getTechnique(0)->getPass(0); + if (compositeMap) + { + updateVpParams(prof, terrain, RENDER_COMPOSITE_MAP, p->getVertexProgramParameters()); + updateFpParams(prof, terrain, RENDER_COMPOSITE_MAP, p->getFragmentProgramParameters()); + } + else + { + // high lod + updateVpParams(prof, terrain, HIGH_LOD, p->getVertexProgramParameters()); + updateFpParams(prof, terrain, HIGH_LOD, p->getFragmentProgramParameters()); + + if(prof->isCompositeMapEnabled()) + { + // low lod + p = mat->getTechnique(1)->getPass(0); + updateVpParams(prof, terrain, LOW_LOD, p->getVertexProgramParameters()); + updateFpParams(prof, terrain, LOW_LOD, p->getFragmentProgramParameters()); + } + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::updateVpParams( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const GpuProgramParametersSharedPtr& params) + { + params->setIgnoreMissingParams(true); + uint maxLayers = prof->getMaxLayers(terrain); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + uint numUVMul = numLayers / 4; + if (numLayers % 4) + ++numUVMul; + for (uint i = 0; i < numUVMul; ++i) + { + Vector4 uvMul( + terrain->getLayerUVMultiplier(i * 4), + terrain->getLayerUVMultiplier(i * 4 + 1), + terrain->getLayerUVMultiplier(i * 4 + 2), + terrain->getLayerUVMultiplier(i * 4 + 3) + ); + params->setNamedConstant("uvMul" + StringConverter::toString(i), uvMul); + } + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::updateFpParams( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const GpuProgramParametersSharedPtr& params) + { + params->setIgnoreMissingParams(true); + // TODO - parameterise this? + Vector4 scaleBiasSpecular(0.03, -0.04, 32, 1); + params->setNamedConstant("scaleBiasSpecular", scaleBiasSpecular); + + } + //--------------------------------------------------------------------- + String TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::getChannel(uint idx) + { + uint rem = idx % 4; + switch(rem) + { + case 0: + default: + return "r"; + case 1: + return "g"; + case 2: + return "b"; + case 3: + return "a"; + }; + } + //--------------------------------------------------------------------- + String TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::getVertexProgramName( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + String progName = terrain->getMaterialName() + "/sm2/vp"; + + switch(tt) + { + case HIGH_LOD: + progName += "/hlod"; + break; + case LOW_LOD: + progName += "/llod"; + break; + case RENDER_COMPOSITE_MAP: + progName += "/comp"; + break; + } + + return progName; + + } + //--------------------------------------------------------------------- + String TerrainMaterialGeneratorB::SM2Profile::ShaderHelper::getFragmentProgramName( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + + String progName = terrain->getMaterialName() + "/sm2/fp"; + + switch(tt) + { + case HIGH_LOD: + progName += "/hlod"; + break; + case LOW_LOD: + progName += "/llod"; + break; + case RENDER_COMPOSITE_MAP: + progName += "/comp"; + break; + } + + return progName; + } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::createVertexProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getVertexProgramName(prof, terrain, tt); + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_VERTEX_PROGRAM); + } + else + { + ret->unload(); + } + + ret->setParameter("profiles", "vs_3_0 vs_2_0 arbvp1"); + ret->setParameter("entry_point", "main_vp"); + + return ret; + + } + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::createFragmentProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getFragmentProgramName(prof, terrain, tt); + + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_FRAGMENT_PROGRAM); + } + else + { + ret->unload(); + } + + if(prof->isLayerNormalMappingEnabled() || prof->isLayerParallaxMappingEnabled()) + ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); + else + ret->setParameter("profiles", "ps_3_0 ps_2_0 fp30 arbfp1"); + ret->setParameter("entry_point", "main_fp"); + + return ret; + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpHeader( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + outStream << + "void main_vp(\n" + "float4 pos : POSITION,\n" + "float2 uv : TEXCOORD0,\n"; + if (tt != RENDER_COMPOSITE_MAP) + outStream << "float2 delta : TEXCOORD1,\n"; // lodDelta, lodThreshold + + outStream << + "uniform float4x4 worldMatrix,\n" + "uniform float4x4 viewProjMatrix,\n" + "uniform float2 lodMorph,\n"; // morph amount, morph LOD target + + // uv multipliers + uint maxLayers = prof->getMaxLayers(terrain); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + uint numUVMultipliers = (numLayers / 4); + if (numLayers % 4) + ++numUVMultipliers; + for (uint i = 0; i < numUVMultipliers; ++i) + outStream << "uniform float4 uvMul" << i << ", \n"; + + outStream << + "out float4 oPos : POSITION,\n" + "out float4 oPosObj : TEXCOORD0 \n"; + + uint texCoordSet = 1; + outStream << + ", out float4 oUVMisc : TEXCOORD" << texCoordSet++ <<" // xy = uv, z = camDepth\n"; + + // layer UV's premultiplied, packed as xy/zw + uint numUVSets = numLayers / 2; + if (numLayers % 2) + ++numUVSets; + if (tt != LOW_LOD) + { + for (uint i = 0; i < numUVSets; ++i) + { + outStream << + ", out float4 oUV" << i << " : TEXCOORD" << texCoordSet++ << "\n"; + } + } + + if (prof->getParent()->getDebugLevel() && tt != RENDER_COMPOSITE_MAP) + { + outStream << ", out float2 lodInfo : TEXCOORD" << texCoordSet++ << "\n"; + } + + bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; + if (fog) + { + outStream << + ", uniform float4 fogParams\n" + ", out float fogVal : COLOR\n"; + } + + if (prof->isShadowingEnabled(tt, terrain)) + { + texCoordSet = generateVpDynamicShadowsParams(texCoordSet, prof, terrain, tt, outStream); + } + + // check we haven't exceeded texture coordinates + if (texCoordSet > 8) + { + OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, + "Requested options require too many texture coordinate sets! Try reducing the number of layers.", + __FUNCTION__); + } + + outStream << + ")\n" + "{\n" + " float4 worldPos = mul(worldMatrix, pos);\n" + " oPosObj = pos;\n"; + + if (tt != RENDER_COMPOSITE_MAP) + { + // determine whether to apply the LOD morph to this vertex + // we store the deltas against all vertices so we only want to apply + // the morph to the ones which would disappear. The target LOD which is + // being morphed to is stored in lodMorph.y, and the LOD at which + // the vertex should be morphed is stored in uv.w. If we subtract + // the former from the latter, and arrange to only morph if the + // result is negative (it will only be -1 in fact, since after that + // the vertex will never be indexed), we will achieve our aim. + // sign(vertexLOD - targetLOD) == -1 is to morph + outStream << + " float toMorph = -min(0, sign(delta.y - lodMorph.y));\n"; + // this will either be 1 (morph) or 0 (don't morph) + if (prof->getParent()->getDebugLevel()) + { + // x == LOD level (-1 since value is target level, we want to display actual) + outStream << "lodInfo.x = (lodMorph.y - 1) / " << terrain->getNumLodLevels() << ";\n"; + // y == LOD morph + outStream << "lodInfo.y = toMorph * lodMorph.x;\n"; + } + + // morph + switch (terrain->getAlignment()) + { + case Terrain::ALIGN_X_Y: + outStream << " worldPos.z += delta.x * toMorph * lodMorph.x;\n"; + break; + case Terrain::ALIGN_X_Z: + outStream << " worldPos.y += delta.x * toMorph * lodMorph.x;\n"; + break; + case Terrain::ALIGN_Y_Z: + outStream << " worldPos.x += delta.x * toMorph * lodMorph.x;\n"; + break; + }; + } + + + // generate UVs + if (tt != LOW_LOD) + { + for (uint i = 0; i < numUVSets; ++i) + { + uint layer = i * 2; + uint uvMulIdx = layer / 4; + + outStream << + " oUV" << i << ".xy = " << " uv.xy * uvMul" << uvMulIdx << "." << getChannel(layer) << ";\n"; + outStream << + " oUV" << i << ".zw = " << " uv.xy * uvMul" << uvMulIdx << "." << getChannel(layer+1) << ";\n"; + + } + + } + + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpHeader( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + + // Main header + outStream << + // helpers + "float4 expand(float4 v)\n" + "{ \n" + " return v * 2 - 1;\n" + "}\n\n\n"; + + if (prof->isShadowingEnabled(tt, terrain)) + generateFpDynamicShadowsHelpers(prof, terrain, tt, outStream); + + + outStream << + "float4 main_fp(\n" + "float4 position : TEXCOORD0,\n"; + + uint texCoordSet = 1; + outStream << + "float4 uvMisc : TEXCOORD" << texCoordSet++ << ",\n"; + + // UV's premultiplied, packed as xy/zw + uint maxLayers = prof->getMaxLayers(terrain); + uint numBlendTextures = std::min(terrain->getBlendTextureCount(maxLayers), terrain->getBlendTextureCount()); + uint numLayers = std::min(maxLayers, static_cast(terrain->getLayerCount())); + uint numUVSets = numLayers / 2; + if (numLayers % 2) + ++numUVSets; + if (tt != LOW_LOD) + { + for (uint i = 0; i < numUVSets; ++i) + { + outStream << + "float4 layerUV" << i << " : TEXCOORD" << texCoordSet++ << ", \n"; + } + + } + if (prof->getParent()->getDebugLevel() && tt != RENDER_COMPOSITE_MAP) + { + outStream << "float2 lodInfo : TEXCOORD" << texCoordSet++ << ", \n"; + } + + bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; + if (fog) + { + outStream << + "uniform float3 fogColour, \n" + "float fogVal : COLOR,\n"; + } + + uint currentSamplerIdx = 0; + + outStream << + // Only 1 light supported in this version + // deferred shading profile / generator later, ok? :) + "uniform float3 ambient,\n" + "uniform float4 lightPosObjSpace,\n" + "uniform float3 lightDiffuseColour,\n" + "uniform float3 lightSpecularColour,\n" + "uniform float3 eyePosObjSpace,\n" + // pack scale, bias and specular + "uniform float4 scaleBiasSpecular,\n"; + + if (tt == LOW_LOD) + { + // single composite map covers all the others below + outStream << + "uniform sampler2D compositeMap : register(s" << currentSamplerIdx++ << ")\n"; + } + else + { + outStream << + "uniform sampler2D globalNormal : register(s" << currentSamplerIdx++ << ")\n"; + + + if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + { + outStream << ", uniform sampler2D globalColourMap : register(s" + << currentSamplerIdx++ << ")\n"; + } + if (prof->isLightmapEnabled()) + { + outStream << ", uniform sampler2D lightMap : register(s" + << currentSamplerIdx++ << ")\n"; + } + // Blend textures - sampler definitions + for (uint i = 0; i < numBlendTextures; ++i) + { + outStream << ", uniform sampler2D blendTex" << i + << " : register(s" << currentSamplerIdx++ << ")\n"; + } + + // Layer textures - sampler definitions & UV multipliers + for (uint i = 0; i < numLayers; ++i) + { + outStream << ", uniform sampler2D difftex" << i + << " : register(s" << currentSamplerIdx++ << ")\n"; + outStream << ", uniform sampler2D normtex" << i + << " : register(s" << currentSamplerIdx++ << ")\n"; + } + } + + if (prof->isShadowingEnabled(tt, terrain)) + { + generateFpDynamicShadowsParams(&texCoordSet, ¤tSamplerIdx, prof, terrain, tt, outStream); + } + + // check we haven't exceeded samplers + if (currentSamplerIdx > 16) + { + OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, + "Requested options require too many texture samplers! Try reducing the number of layers.", + __FUNCTION__); + } + + outStream << + ") : COLOR\n" + "{\n" + " float4 outputCol;\n" + " float shadow = 1.0;\n" + " float2 uv = uvMisc.xy;\n" + // base colour + " outputCol = float4(0,0,0,1);\n"; + + if (tt != LOW_LOD) + { + outStream << + // global normal + " float3 normal = expand(tex2D(globalNormal, uv)).rgb;\n"; + + } + + outStream << + " float3 lightDir = \n" + " lightPosObjSpace.xyz - (position.xyz * lightPosObjSpace.w);\n" + " float3 eyeDir = eyePosObjSpace - position.xyz;\n" + + // set up accumulation areas + " float3 diffuse = float3(0,0,0);\n" + " float specular = 0;\n"; + + + if (tt == LOW_LOD) + { + // we just do a single calculation from composite map + outStream << + " float4 composite = tex2D(compositeMap, uv);\n" + " diffuse = composite.rgb;\n"; + // TODO - specular; we'll need normals for this! + } + else + { + // set up the blend values + for (uint i = 0; i < numBlendTextures; ++i) + { + outStream << " float4 blendTexVal" << i << " = tex2D(blendTex" << i << ", uv);\n"; + } + + if (prof->isLayerNormalMappingEnabled()) + { + // derive the tangent space basis + // we do this in the pixel shader because we don't have per-vertex normals + // because of the LOD, we use a normal map + // tangent is always +x or -z in object space depending on alignment + switch(terrain->getAlignment()) + { + case Terrain::ALIGN_X_Y: + case Terrain::ALIGN_X_Z: + outStream << " float3 tangent = float3(1, 0, 0);\n"; + break; + case Terrain::ALIGN_Y_Z: + outStream << " float3 tangent = float3(0, 0, -1);\n"; + break; + }; + + outStream << " float3 binormal = normalize(cross(tangent, normal));\n"; + // note, now we need to re-cross to derive tangent again because it wasn't orthonormal + outStream << " tangent = normalize(cross(normal, binormal));\n"; + // derive final matrix + outStream << " float3x3 TBN = float3x3(tangent, binormal, normal);\n"; + + // set up lighting result placeholders for interpolation + outStream << " float4 litRes, litResLayer;\n"; + outStream << " float3 TSlightDir, TSeyeDir, TShalfAngle, TSnormal;\n"; + if (prof->isLayerParallaxMappingEnabled()) + outStream << " float displacement;\n"; + // move + outStream << " TSlightDir = normalize(mul(TBN, lightDir));\n"; + outStream << " TSeyeDir = normalize(mul(TBN, eyeDir));\n"; + + } + else + { + // simple per-pixel lighting with no normal mapping + outStream << " lightDir = normalize(lightDir);\n"; + outStream << " eyeDir = normalize(eyeDir);\n"; + outStream << " float3 halfAngle = normalize(lightDir + eyeDir);\n"; + outStream << " float4 litRes = lit(dot(lightDir, normal), dot(halfAngle, normal), scaleBiasSpecular.z);\n"; + + } + } + + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpLayer( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) + { + // nothing to do + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpLayer( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) + { + uint uvIdx = layer / 2; + String uvChannels = layer % 2 ? ".zw" : ".xy"; + uint blendIdx = (layer-1) / 4; + String blendChannel = getChannel(layer-1); + String blendWeightStr = String("blendTexVal") + StringConverter::toString(blendIdx) + + "." + blendChannel; + + // generate early-out conditional + /* Disable - causing some issues even when trying to force the use of texldd + if (layer && prof->_isSM3Available()) + outStream << " if (" << blendWeightStr << " > 0.0003)\n { \n"; + */ + + // generate UV + outStream << " float2 uv" << layer << " = layerUV" << uvIdx << uvChannels << ";\n"; + + // calculate lighting here if normal mapping + if (prof->isLayerNormalMappingEnabled()) + { + if (prof->isLayerParallaxMappingEnabled() && tt != RENDER_COMPOSITE_MAP) + { + // modify UV - note we have to sample an extra time + outStream << " displacement = tex2D(normtex" << layer << ", uv" << layer << ").a\n" + " * scaleBiasSpecular.x + scaleBiasSpecular.y;\n"; + outStream << " uv" << layer << " += TSeyeDir.xy * displacement;\n"; + } + + // access TS normal map + outStream << " TSnormal = expand(tex2D(normtex" << layer << ", uv" << layer << ")).rgb;\n"; + outStream << " TShalfAngle = normalize(TSlightDir + TSeyeDir);\n"; + outStream << " litResLayer = lit(dot(TSlightDir, TSnormal), dot(TShalfAngle, TSnormal), scaleBiasSpecular.z);\n"; + if (!layer) + outStream << " litRes = litResLayer;\n"; + else + outStream << " litRes = lerp(litRes, litResLayer, " << blendWeightStr << ");\n"; + + } + + // sample diffuse texture + outStream << " float4 diffuseSpecTex" << layer + << " = tex2D(difftex" << layer << ", uv" << layer << ");\n"; + + // apply to common + if (!layer) + { + outStream << " diffuse = diffuseSpecTex0.rgb;\n"; + if (prof->isLayerSpecularMappingEnabled()) + outStream << " specular = diffuseSpecTex0.a;\n"; + } + else + { + outStream << " diffuse = lerp(diffuse, diffuseSpecTex" << layer + << ".rgb, " << blendWeightStr << ");\n"; + if (prof->isLayerSpecularMappingEnabled()) + outStream << " specular = lerp(specular, diffuseSpecTex" << layer + << ".a, " << blendWeightStr << ");\n"; + + } + + // End early-out + /* Disable - causing some issues even when trying to force the use of texldd + if (layer && prof->_isSM3Available()) + outStream << " } // early-out blend value\n"; + */ + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpFooter( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + + outStream << + " oPos = mul(viewProjMatrix, worldPos);\n" + " oUVMisc.xy = uv.xy;\n"; + + bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; + if (fog) + { + if (terrain->getSceneManager()->getFogMode() == FOG_LINEAR) + { + outStream << + " fogVal = saturate((oPos.z - fogParams.y) * fogParams.w);\n"; + } + else + { + outStream << + " fogVal = saturate(1 / (exp(oPos.z * fogParams.x)));\n"; + } + } + + if (prof->isShadowingEnabled(tt, terrain)) + generateVpDynamicShadows(prof, terrain, tt, outStream); + + outStream << + "}\n"; + + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpFooter( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + + if (tt == LOW_LOD) + { + if (prof->isShadowingEnabled(tt, terrain)) + { + generateFpDynamicShadows(prof, terrain, tt, outStream); + outStream << + " outputCol.rgb = diffuse * rtshadow;\n"; + } + else + { + outStream << + " outputCol.rgb = diffuse;\n"; + } + } + else + { + if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + { + // sample colour map and apply to diffuse + outStream << " diffuse *= tex2D(globalColourMap, uv).rgb;\n"; + } + if (prof->isLightmapEnabled()) + { + // sample lightmap + outStream << " shadow = tex2D(lightMap, uv).r;\n"; + } + + if (prof->isShadowingEnabled(tt, terrain)) + { + generateFpDynamicShadows(prof, terrain, tt, outStream); + } + + // diffuse lighting + outStream << " outputCol.rgb += ambient * diffuse + litRes.y * lightDiffuseColour * diffuse * shadow;\n"; + + // specular default + if (!prof->isLayerSpecularMappingEnabled()) + outStream << " specular = 1.0;\n"; + + if (tt == RENDER_COMPOSITE_MAP) + { + // Lighting embedded in alpha + outStream << + " outputCol.a = shadow;\n"; + + } + else + { + // Apply specular + outStream << " outputCol.rgb += litRes.z * lightSpecularColour * specular * shadow;\n"; + + if (prof->getParent()->getDebugLevel()) + { + outStream << " outputCol.rg += lodInfo.xy;\n"; + } + } + } + + bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; + if (fog) + { + outStream << " outputCol.rgb = lerp(outputCol.rgb, fogColour, fogVal);\n"; + } + + // Final return + outStream << " return outputCol;\n" + << "}\n"; + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpDynamicShadowsHelpers( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + // TODO make filtering configurable + outStream << + "// Simple PCF \n" + "// Number of samples in one dimension (square for total samples) \n" + "#define NUM_SHADOW_SAMPLES_1D 2.0 \n" + "#define SHADOW_FILTER_SCALE 1 \n" + + "#define SHADOW_SAMPLES NUM_SHADOW_SAMPLES_1D*NUM_SHADOW_SAMPLES_1D \n" + + "float4 offsetSample(float4 uv, float2 offset, float invMapSize) \n" + "{ \n" + " return float4(uv.xy + offset * invMapSize * uv.w, uv.z, uv.w); \n" + "} \n"; + + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + "float calcDepthShadow(sampler2D shadowMap, float4 uv, float invShadowMapSize) \n" + "{ \n" + " // 4-sample PCF \n" + + " float shadow = 0.0; \n" + " float offset = (NUM_SHADOW_SAMPLES_1D/2 - 0.5) * SHADOW_FILTER_SCALE; \n" + " for (float y = -offset; y <= offset; y += SHADOW_FILTER_SCALE) \n" + " for (float x = -offset; x <= offset; x += SHADOW_FILTER_SCALE) \n" + " { \n" + " float4 newUV = offsetSample(uv, float2(x, y), invShadowMapSize);\n" + " // manually project and assign derivatives \n" + " // to avoid gradient issues inside loops \n" + " newUV = newUV / newUV.w; \n" + " float depth = tex2D(shadowMap, newUV.xy, 1, 1).x; \n" + " if (depth >= 1 || depth >= uv.z)\n" + " shadow += 1.0;\n" + " } \n" + + " shadow /= SHADOW_SAMPLES; \n" + + " return shadow; \n" + "} \n"; + } + else + { + outStream << + "float calcSimpleShadow(sampler2D shadowMap, float4 shadowMapPos) \n" + "{ \n" + " return tex2Dproj(shadowMap, shadowMapPos).x; \n" + "} \n"; + + } + + if (prof->getReceiveDynamicShadowsPSSM()) + { + uint numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + + + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + "float calcPSSMDepthShadow("; + } + else + { + outStream << + "float calcPSSMSimpleShadow("; + } + + outStream << "\n "; + for (uint i = 0; i < numTextures; ++i) + outStream << "sampler2D shadowMap" << i << ", "; + outStream << "\n "; + for (uint i = 0; i < numTextures; ++i) + outStream << "float4 lsPos" << i << ", "; + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << "\n "; + for (uint i = 0; i < numTextures; ++i) + outStream << "float invShadowmapSize" << i << ", "; + } + outStream << "\n" + " float4 pssmSplitPoints, float camDepth) \n" + "{ \n" + " float shadow; \n" + " // calculate shadow \n"; + + for (uint i = 0; i < numTextures; ++i) + { + if (!i) + outStream << " if (camDepth <= pssmSplitPoints." << ShaderHelper::getChannel(i) << ") \n"; + else if (i < numTextures - 1) + outStream << " else if (camDepth <= pssmSplitPoints." << ShaderHelper::getChannel(i) << ") \n"; + else + outStream << " else \n"; + + outStream << + " { \n"; + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + " shadow = calcDepthShadow(shadowMap" << i << ", lsPos" << i << ", invShadowmapSize" << i << "); \n"; + } + else + { + outStream << + " shadow = calcSimpleShadow(shadowMap" << i << ", lsPos" << i << "); \n"; + } + outStream << + " } \n"; + + } + + outStream << + " return shadow; \n" + "} \n\n\n"; + } + + + } + //--------------------------------------------------------------------- + uint TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpDynamicShadowsParams( + uint texCoord, const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + // out semantics & params + uint numTextures = 1; + if (prof->getReceiveDynamicShadowsPSSM()) + { + numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + } + for (uint i = 0; i < numTextures; ++i) + { + outStream << + ", out float4 oLightSpacePos" << i << " : TEXCOORD" << texCoord++ << " \n" << + ", uniform float4x4 texViewProjMatrix" << i << " \n"; + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + ", uniform float4 depthRange" << i << " // x = min, y = max, z = range, w = 1/range \n"; + } + } + + return texCoord; + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpDynamicShadows( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + uint numTextures = 1; + if (prof->getReceiveDynamicShadowsPSSM()) + { + numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + } + + // Calculate the position of vertex in light space + for (uint i = 0; i < numTextures; ++i) + { + outStream << + " oLightSpacePos" << i << " = mul(texViewProjMatrix" << i << ", worldPos); \n"; + if (prof->getReceiveDynamicShadowsDepth()) + { + // make linear + outStream << + "oLightSpacePos" << i << ".z = (oLightSpacePos" << i << ".z - depthRange" << i << ".x) * depthRange" << i << ".w;\n"; + + } + } + + + if (prof->getReceiveDynamicShadowsPSSM()) + { + outStream << + " // pass cam depth\n" + " oUVMisc.z = oPos.z;\n"; + } + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpDynamicShadowsParams( + uint* texCoord, uint* sampler, const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + if (tt == HIGH_LOD) + mShadowSamplerStartHi = *sampler; + else if (tt == LOW_LOD) + mShadowSamplerStartLo = *sampler; + + // in semantics & params + uint numTextures = 1; + if (prof->getReceiveDynamicShadowsPSSM()) + { + numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + outStream << + ", uniform float4 pssmSplitPoints \n"; + } + for (uint i = 0; i < numTextures; ++i) + { + outStream << + ", float4 lightSpacePos" << i << " : TEXCOORD" << *texCoord << " \n" << + ", uniform sampler2D shadowMap" << i << " : register(s" << *sampler << ") \n"; + *sampler = *sampler + 1; + *texCoord = *texCoord + 1; + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + ", uniform float inverseShadowmapSize" << i << " \n"; + } + } + + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpDynamicShadows( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) + { + if (prof->getReceiveDynamicShadowsPSSM()) + { + uint numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); + outStream << + " float camDepth = uvMisc.z;\n"; + + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + " float rtshadow = calcPSSMDepthShadow("; + } + else + { + outStream << + " float rtshadow = calcPSSMSimpleShadow("; + } + for (uint i = 0; i < numTextures; ++i) + outStream << "shadowMap" << i << ", "; + outStream << "\n "; + + for (uint i = 0; i < numTextures; ++i) + outStream << "lightSpacePos" << i << ", "; + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << "\n "; + for (uint i = 0; i < numTextures; ++i) + outStream << "inverseShadowmapSize" << i << ", "; + } + outStream << "\n" << + " pssmSplitPoints, camDepth);\n"; + + } + else + { + if (prof->getReceiveDynamicShadowsDepth()) + { + outStream << + " float rtshadow = calcDepthShadow(shadowMap0, lightSpacePos0, inverseShadowmapSize0);"; + } + else + { + outStream << + " float rtshadow = calcSimpleShadow(shadowMap0, lightSpacePos0);"; + } + } + + outStream << + " shadow = min(shadow, rtshadow);\n"; + + } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperHLSL::createVertexProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getVertexProgramName(prof, terrain, tt); + + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "hlsl", GPT_VERTEX_PROGRAM); + } + else + { + ret->unload(); + } + + if (prof->_isSM3Available()) + ret->setParameter("target", "vs_3_0"); + else + ret->setParameter("target", "vs_2_0"); + ret->setParameter("entry_point", "main_vp"); + + return ret; + + } + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperHLSL::createFragmentProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getFragmentProgramName(prof, terrain, tt); + + + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "hlsl", GPT_FRAGMENT_PROGRAM); + } + else + { + ret->unload(); + } + + if (prof->_isSM3Available()) + ret->setParameter("target", "ps_3_0"); + else + ret->setParameter("target", "ps_2_x"); + ret->setParameter("entry_point", "main_fp"); + + return ret; + + } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperGLSL::createVertexProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getVertexProgramName(prof, terrain, tt); + + switch(tt) + { + case HIGH_LOD: + progName += "/hlod"; + break; + case LOW_LOD: + progName += "/llod"; + break; + case RENDER_COMPOSITE_MAP: + progName += "/comp"; + break; + } + + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "glsl", GPT_VERTEX_PROGRAM); + } + else + { + ret->unload(); + } + + return ret; + + } + //--------------------------------------------------------------------- + HighLevelGpuProgramPtr + TerrainMaterialGeneratorB::SM2Profile::ShaderHelperGLSL::createFragmentProgram( + const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) + { + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + String progName = getFragmentProgramName(prof, terrain, tt); + + HighLevelGpuProgramPtr ret = mgr.getByName(progName); + if (ret.isNull()) + { + ret = mgr.createProgram(progName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "glsl", GPT_FRAGMENT_PROGRAM); + } + else + { + ret->unload(); + } + + return ret; + + } + + +} diff --git a/apps/openmw/mwrender/terrainmaterial.hpp b/apps/openmw/mwrender/terrainmaterial.hpp new file mode 100644 index 0000000000..eaa5572ee7 --- /dev/null +++ b/apps/openmw/mwrender/terrainmaterial.hpp @@ -0,0 +1,261 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE +(Object-oriented Graphics Rendering Engine) +For the latest info, see http://www.ogre3d.org/ + +Copyright (c) 2000-2011 Torus Knot Software Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +----------------------------------------------------------------------------- +*/ + +#ifndef __Ogre_TerrainMaterialGeneratorB_H__ +#define __Ogre_TerrainMaterialGeneratorB_H__ + +#include "OgreTerrainPrerequisites.h" +#include "OgreTerrainMaterialGenerator.h" +#include "OgreGpuProgramParams.h" + +namespace Ogre +{ + class PSSMShadowCameraSetup; + + /** \addtogroup Optional Components + * @{ + */ + /** \addtogroup Terrain + * Some details on the terrain component + * @{ + */ + + + /** A TerrainMaterialGenerator which can cope with normal mapped, specular mapped + terrain. + @note Requires the Cg plugin to render correctly + */ + class _OgreTerrainExport TerrainMaterialGeneratorB : public TerrainMaterialGenerator + { + public: + TerrainMaterialGeneratorB(); + ~TerrainMaterialGeneratorB(); + + /** Shader model 2 profile target. + */ + class _OgreTerrainExport SM2Profile : public TerrainMaterialGenerator::Profile + { + public: + SM2Profile(TerrainMaterialGenerator* parent, const String& name, const String& desc); + ~SM2Profile(); + MaterialPtr generate(const Terrain* terrain); + MaterialPtr generateForCompositeMap(const Terrain* terrain); + uint8 getMaxLayers(const Terrain* terrain) const; + void updateParams(const MaterialPtr& mat, const Terrain* terrain); + void updateParamsForCompositeMap(const MaterialPtr& mat, const Terrain* terrain); + void requestOptions(Terrain* terrain); + + /** Whether to support normal mapping per layer in the shader (default true). + */ + bool isLayerNormalMappingEnabled() const { return mLayerNormalMappingEnabled; } + /** Whether to support normal mapping per layer in the shader (default true). + */ + void setLayerNormalMappingEnabled(bool enabled); + /** Whether to support parallax mapping per layer in the shader (default true). + */ + bool isLayerParallaxMappingEnabled() const { return mLayerParallaxMappingEnabled; } + /** Whether to support parallax mapping per layer in the shader (default true). + */ + void setLayerParallaxMappingEnabled(bool enabled); + /** Whether to support specular mapping per layer in the shader (default true). + */ + bool isLayerSpecularMappingEnabled() const { return mLayerSpecularMappingEnabled; } + /** Whether to support specular mapping per layer in the shader (default true). + */ + void setLayerSpecularMappingEnabled(bool enabled); + /** Whether to support a global colour map over the terrain in the shader, + if it's present (default true). + */ + bool isGlobalColourMapEnabled() const { return mGlobalColourMapEnabled; } + /** Whether to support a global colour map over the terrain in the shader, + if it's present (default true). + */ + void setGlobalColourMapEnabled(bool enabled); + /** Whether to support a light map over the terrain in the shader, + if it's present (default true). + */ + bool isLightmapEnabled() const { return mLightmapEnabled; } + /** Whether to support a light map over the terrain in the shader, + if it's present (default true). + */ + void setLightmapEnabled(bool enabled); + /** Whether to use the composite map to provide a lower LOD technique + in the distance (default true). + */ + bool isCompositeMapEnabled() const { return mCompositeMapEnabled; } + /** Whether to use the composite map to provide a lower LOD technique + in the distance (default true). + */ + void setCompositeMapEnabled(bool enabled); + /** Whether to support dynamic texture shadows received from other + objects, on the terrain (default true). + */ + bool getReceiveDynamicShadowsEnabled() const { return mReceiveDynamicShadows; } + /** Whether to support dynamic texture shadows received from other + objects, on the terrain (default true). + */ + void setReceiveDynamicShadowsEnabled(bool enabled); + + /** Whether to use PSSM support dynamic texture shadows, and if so the + settings to use (default 0). + */ + void setReceiveDynamicShadowsPSSM(PSSMShadowCameraSetup* pssmSettings); + /** Whether to use PSSM support dynamic texture shadows, and if so the + settings to use (default 0). + */ + PSSMShadowCameraSetup* getReceiveDynamicShadowsPSSM() const { return mPSSM; } + /** Whether to use depth shadows (default false). + */ + void setReceiveDynamicShadowsDepth(bool enabled); + /** Whether to use depth shadows (default false). + */ + bool getReceiveDynamicShadowsDepth() const { return mDepthShadows; } + /** Whether to use shadows on low LOD material rendering (when using composite map) (default false). + */ + void setReceiveDynamicShadowsLowLod(bool enabled); + /** Whether to use shadows on low LOD material rendering (when using composite map) (default false). + */ + bool getReceiveDynamicShadowsLowLod() const { return mLowLodShadows; } + + /// Internal + bool _isSM3Available() const { return mSM3Available; } + + protected: + + enum TechniqueType + { + HIGH_LOD, + LOW_LOD, + RENDER_COMPOSITE_MAP + }; + void addTechnique(const MaterialPtr& mat, const Terrain* terrain, TechniqueType tt); + + /// Interface definition for helper class to generate shaders + class _OgreTerrainExport ShaderHelper : public TerrainAlloc + { + public: + ShaderHelper() {} + virtual ~ShaderHelper() {} + virtual HighLevelGpuProgramPtr generateVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + virtual HighLevelGpuProgramPtr generateFragmentProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + virtual void updateParams(const SM2Profile* prof, const MaterialPtr& mat, const Terrain* terrain, bool compositeMap); + protected: + virtual String getVertexProgramName(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + virtual String getFragmentProgramName(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + virtual HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) = 0; + virtual HighLevelGpuProgramPtr createFragmentProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) = 0; + virtual void generateVertexProgramSource(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + virtual void generateFragmentProgramSource(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + virtual void generateVpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) = 0; + virtual void generateFpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) = 0; + virtual void generateVpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) = 0; + virtual void generateFpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) = 0; + virtual void generateVpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) = 0; + virtual void generateFpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) = 0; + virtual void defaultVpParams(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const HighLevelGpuProgramPtr& prog); + virtual void defaultFpParams(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const HighLevelGpuProgramPtr& prog); + virtual void updateVpParams(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const GpuProgramParametersSharedPtr& params); + virtual void updateFpParams(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const GpuProgramParametersSharedPtr& params); + static String getChannel(uint idx); + + size_t mShadowSamplerStartHi; + size_t mShadowSamplerStartLo; + + }; + + /// Utility class to help with generating shaders for Cg / HLSL. + class _OgreTerrainExport ShaderHelperCg : public ShaderHelper + { + protected: + HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + HighLevelGpuProgramPtr createFragmentProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + void generateVpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateFpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateVpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream); + void generateFpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream); + void generateVpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateFpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + uint generateVpDynamicShadowsParams(uint texCoordStart, const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateVpDynamicShadows(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateFpDynamicShadowsHelpers(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateFpDynamicShadowsParams(uint* texCoord, uint* sampler, const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + void generateFpDynamicShadows(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); + }; + + class _OgreTerrainExport ShaderHelperHLSL : public ShaderHelperCg + { + protected: + HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + HighLevelGpuProgramPtr createFragmentProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + }; + + /// Utility class to help with generating shaders for GLSL. + class _OgreTerrainExport ShaderHelperGLSL : public ShaderHelper + { + protected: + HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + HighLevelGpuProgramPtr createFragmentProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); + void generateVpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) {} + void generateFpHeader(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) {} + void generateVpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) {} + void generateFpLayer(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, uint layer, StringUtil::StrStreamType& outStream) {} + void generateVpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) {} + void generateFpFooter(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream) {} + }; + + ShaderHelper* mShaderGen; + bool mLayerNormalMappingEnabled; + bool mLayerParallaxMappingEnabled; + bool mLayerSpecularMappingEnabled; + bool mGlobalColourMapEnabled; + bool mLightmapEnabled; + bool mCompositeMapEnabled; + bool mReceiveDynamicShadows; + PSSMShadowCameraSetup* mPSSM; + bool mDepthShadows; + bool mLowLodShadows; + bool mSM3Available; + + bool isShadowingEnabled(TechniqueType tt, const Terrain* terrain) const; + + }; + + + + + }; + + + + /** @} */ + /** @} */ + + +} + +#endif From dbd2d390fd4e4858d672c9c11f882010988f96f0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 27 Feb 2012 21:12:16 +0100 Subject: [PATCH 017/488] terrain material fixes: - disable normal and parallax mapping - disable specular mapping and specular --- apps/openmw/mwrender/terrain.cpp | 10 +++---- apps/openmw/mwrender/terrainmaterial.cpp | 36 ++++++++++++++---------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 568ed37415..f3104ef59b 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -31,10 +31,10 @@ namespace MWRender TerrainMaterialGeneratorB::SM2Profile* matProfile = static_cast(activeProfile); - matProfile->setLightmapEnabled(false); + matProfile->setLightmapEnabled(false); // this doesn't disable the lightmap, although it should ?? matProfile->setReceiveDynamicShadowsEnabled(false); matProfile->setLayerNormalMappingEnabled(false); - //matProfile->setLayerParallaxMappingEnabled(false); + matProfile->setLayerParallaxMappingEnabled(false); matProfile->setLayerSpecularMappingEnabled(false); mLandSize = ESM::Land::LAND_SIZE; @@ -195,8 +195,8 @@ namespace MWRender //have a base texture for now, but this is probably not needed on most cells terrainData->layerList.resize(1); terrainData->layerList[0].worldSize = 256; - terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); - terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); + terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); // diffuseSpec + //terrainData->layerList[0].textureNames.push_back("textures\\_land_default.dds"); // normalHeight for ( int y = fromY - 1; y < fromY + size + 1; y++ ) { @@ -230,7 +230,7 @@ namespace MWRender //Normal map. This should be removed but it would require alterations to //the material generator. Another option would be to use a 1x1 blank texture - terrainData->layerList[position].textureNames.push_back("textures\\" + texture); + //terrainData->layerList[position].textureNames.push_back("textures\\" + texture); indexes[ltexIndex] = position; } diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 313a4a90cf..61a7cdb190 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -46,16 +46,16 @@ namespace Ogre // in the albedo texture to store specular reflection // similarly we double-up the normal and height (for parallax) mLayerDecl.samplers.push_back(TerrainLayerSampler("albedo_specular", PF_BYTE_RGBA)); - mLayerDecl.samplers.push_back(TerrainLayerSampler("normal_height", PF_BYTE_RGBA)); + //mLayerDecl.samplers.push_back(TerrainLayerSampler("normal_height", PF_BYTE_RGBA)); mLayerDecl.elements.push_back( TerrainLayerSamplerElement(0, TLSS_ALBEDO, 0, 3)); - mLayerDecl.elements.push_back( - TerrainLayerSamplerElement(0, TLSS_SPECULAR, 3, 1)); - mLayerDecl.elements.push_back( - TerrainLayerSamplerElement(1, TLSS_NORMAL, 0, 3)); - mLayerDecl.elements.push_back( - TerrainLayerSamplerElement(1, TLSS_HEIGHT, 3, 1)); + //mLayerDecl.elements.push_back( + // TerrainLayerSamplerElement(0, TLSS_SPECULAR, 3, 1)); + //mLayerDecl.elements.push_back( + // TerrainLayerSamplerElement(1, TLSS_NORMAL, 0, 3)); + //mLayerDecl.elements.push_back( + // TerrainLayerSamplerElement(1, TLSS_HEIGHT, 3, 1)); mProfiles.push_back(OGRE_NEW SM2Profile(this, "SM2", "Profile for rendering on Shader Model 2 capable cards")); @@ -212,8 +212,8 @@ namespace Ogre freeTextureUnits -= numShadowTextures; } - // each layer needs 2.25 units (1xdiffusespec, 1xnormalheight, 0.25xblend) - return static_cast(freeTextureUnits / 2.25f); + // each layer needs 2.25 units (1xdiffusespec, (1xnormalheight), 0.25xblend) + return static_cast(freeTextureUnits / (1.25f + (mLayerNormalMappingEnabled||mLayerParallaxMappingEnabled))); } @@ -368,8 +368,10 @@ namespace Ogre { // diffuse / specular tu = pass->createTextureUnitState(terrain->getLayerTextureName(i, 0)); + // normal / height - tu = pass->createTextureUnitState(terrain->getLayerTextureName(i, 1)); + if (mLayerNormalMappingEnabled || mLayerParallaxMappingEnabled) + tu = pass->createTextureUnitState(terrain->getLayerTextureName(i, 1)); } } @@ -739,8 +741,10 @@ namespace Ogre if(prof->isLayerNormalMappingEnabled() || prof->isLayerParallaxMappingEnabled()) ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); - else - ret->setParameter("profiles", "ps_3_0 ps_2_0 fp30 arbfp1"); + //else + //ret->setParameter("profiles", "ps_3_0 ps_2_0 fp30 arbfp1"); + else // fp30 doesn't work (black terrain) + ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); ret->setParameter("entry_point", "main_fp"); return ret; @@ -982,7 +986,9 @@ namespace Ogre { outStream << ", uniform sampler2D difftex" << i << " : register(s" << currentSamplerIdx++ << ")\n"; - outStream << ", uniform sampler2D normtex" << i + + if (prof->mLayerNormalMappingEnabled || prof->mLayerParallaxMappingEnabled) + outStream << ", uniform sampler2D normtex" << i << " : register(s" << currentSamplerIdx++ << ")\n"; } } @@ -1238,7 +1244,7 @@ namespace Ogre // specular default if (!prof->isLayerSpecularMappingEnabled()) - outStream << " specular = 1.0;\n"; + outStream << " specular = 0.0;\n"; if (tt == RENDER_COMPOSITE_MAP) { @@ -1266,7 +1272,7 @@ namespace Ogre } // Final return - outStream << " return outputCol;\n" + outStream << " return outputCol;\n" << "}\n"; } From 5b5e8ba4fdb0fdd6bf0c62787b8cb32736bca7f9 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 28 Feb 2012 16:20:57 +0100 Subject: [PATCH 018/488] fix a typo that caused SPLIT_TERRAIN=true blendmap to be too detailed (causing insane loading times) --- apps/openmw/mwrender/terrain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index f3104ef59b..e25b4b1893 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -18,7 +18,7 @@ namespace MWRender mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions(); mTerrainGlobals->setMaxPixelError(8); - mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 1024 : 256); + mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 256 : 1024); Ogre::TerrainMaterialGeneratorPtr matGen; TerrainMaterialGeneratorB* matGenP = new TerrainMaterialGeneratorB(); From abcf25ead21909d6f9f0f6ac33ed98b31526d686 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 28 Feb 2012 16:41:05 +0100 Subject: [PATCH 019/488] terrain shader performance improvement (tested on opengl only, please test on directx) --- apps/openmw/mwrender/terrainmaterial.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 61a7cdb190..2b1eb26041 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -1113,10 +1113,17 @@ namespace Ogre "." + blendChannel; // generate early-out conditional - /* Disable - causing some issues even when trying to force the use of texldd + // Disable - causing some issues even when trying to force the use of texldd + + // comment by scrawl: + // on a NVIDIA card in opengl mode, didn't produce any problems, + // while increasing FPS from 170 to 185 (!!!) in the same area + // so let's try this out - if something does cause problems for + // someone else (with a different card / renderer) we can just + // add a vendor-specific check here if (layer && prof->_isSM3Available()) outStream << " if (" << blendWeightStr << " > 0.0003)\n { \n"; - */ + // generate UV outStream << " float2 uv" << layer << " = layerUV" << uvIdx << uvChannels << ";\n"; @@ -1165,10 +1172,17 @@ namespace Ogre } // End early-out - /* Disable - causing some issues even when trying to force the use of texldd + // Disable - causing some issues even when trying to force the use of texldd + + // comment by scrawl: + // on a NVIDIA card in opengl mode, didn't produce any problems, + // while increasing FPS from 170 to 185 (!!!) in the same area + // so let's try this out - if something does cause problems for + // someone else (with a different card / renderer) we can just + // add a vendor-specific check here if (layer && prof->_isSM3Available()) outStream << " } // early-out blend value\n"; - */ + } //--------------------------------------------------------------------- void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateVpFooter( From f55905609f21036cfbf265194171acc9de47cedb Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 28 Feb 2012 17:18:07 +0100 Subject: [PATCH 020/488] fixed the terrain normals - they had to be adjusted because we use Morrowind's coordinate system --- apps/openmw/mwrender/terrain.cpp | 2 +- apps/openmw/mwrender/terrainmaterial.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index e25b4b1893..d5f7684288 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -31,7 +31,7 @@ namespace MWRender TerrainMaterialGeneratorB::SM2Profile* matProfile = static_cast(activeProfile); - matProfile->setLightmapEnabled(false); // this doesn't disable the lightmap, although it should ?? + matProfile->setLightmapEnabled(false); matProfile->setReceiveDynamicShadowsEnabled(false); matProfile->setLayerNormalMappingEnabled(false); matProfile->setLayerParallaxMappingEnabled(false); diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 2b1eb26041..541fcb91eb 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -196,7 +196,8 @@ namespace Ogre // count the texture units free uint8 freeTextureUnits = 16; // lightmap - --freeTextureUnits; + if (mLightmapEnabled) + --freeTextureUnits; // normalmap --freeTextureUnits; // colourmap @@ -1019,7 +1020,8 @@ namespace Ogre { outStream << // global normal - " float3 normal = expand(tex2D(globalNormal, uv)).rgb;\n"; + " float3 normal = expand(tex2D(globalNormal, uv)).rgb;\n" + " normal = float3(normal.x, normal.z, -normal.y); \n"; // convert Ogre to MW coordinate system } From be5555956ced6012bba5937accc9043bfbc425bd Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 28 Feb 2012 22:04:44 +0100 Subject: [PATCH 021/488] improved composite map, now adapts to the ambient/diffuse light --- apps/openmw/mwrender/renderingmanager.cpp | 8 +++++--- apps/openmw/mwrender/terrain.cpp | 14 ++++++++++++++ apps/openmw/mwrender/terrain.hpp | 3 +++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 04ddc2cf86..7fcfc2a8d2 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -232,17 +232,17 @@ void RenderingManager::setAmbientMode() { case 0: - mRendering.getScene()->setAmbientLight(mAmbientColor); + setAmbientColour(mAmbientColor); break; case 1: - mRendering.getScene()->setAmbientLight(0.7f*mAmbientColor + 0.3f*ColourValue(1,1,1)); + setAmbientColour(0.7f*mAmbientColor + 0.3f*ColourValue(1,1,1)); break; case 2: - mRendering.getScene()->setAmbientLight(ColourValue(1,1,1)); + setAmbientColour(ColourValue(1,1,1)); break; } } @@ -297,11 +297,13 @@ void RenderingManager::skipAnimation (const MWWorld::Ptr& ptr) void RenderingManager::setSunColour(const Ogre::ColourValue& colour) { mSun->setDiffuseColour(colour); + mTerrainManager->setDiffuse(colour); } void RenderingManager::setAmbientColour(const Ogre::ColourValue& colour) { mRendering.getScene()->setAmbientLight(colour); + mTerrainManager->setAmbient(colour); } void RenderingManager::sunEnable() diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index d5f7684288..dd05bf3336 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -73,6 +73,20 @@ namespace MWRender OGRE_DELETE mTerrainGroup; OGRE_DELETE mTerrainGlobals; } + + //---------------------------------------------------------------------------------------------- + + void TerrainManager::setDiffuse(const Ogre::ColourValue& diffuse) + { + mTerrainGlobals->setCompositeMapDiffuse(diffuse); + } + + //---------------------------------------------------------------------------------------------- + + void TerrainManager::setAmbient(const Ogre::ColourValue& ambient) + { + mTerrainGlobals->setCompositeMapAmbient(ambient); + } //---------------------------------------------------------------------------------------------- diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 195741b0f7..3f2633ff9f 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -31,6 +31,9 @@ namespace MWRender{ TerrainManager(Ogre::SceneManager*); virtual ~TerrainManager(); + void setDiffuse(const Ogre::ColourValue& diffuse); + void setAmbient(const Ogre::ColourValue& ambient); + void cellAdded(MWWorld::Ptr::CellStore* store); void cellRemoved(MWWorld::Ptr::CellStore* store); private: From f2b807142a8f1be856c88a62eab9cfaec70f213c Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 29 Feb 2012 11:08:25 +0100 Subject: [PATCH 022/488] update mangle --- libs/mangle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/mangle b/libs/mangle index f3c9694bf2..14b2851e72 160000 --- a/libs/mangle +++ b/libs/mangle @@ -1 +1 @@ -Subproject commit f3c9694bf249a34eae05f0304e6bfc120014ce8c +Subproject commit 14b2851e72f610ae81dd296598867e6fb0babd2a From 1d0ae9c8d122ea168b9515bb696a74e6d8c9aa05 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Wed, 29 Feb 2012 23:05:22 +0000 Subject: [PATCH 023/488] Start of a basic implementation of fake vertex colours --- apps/openmw/mwrender/terrain.cpp | 146 ++++++++++++++++++++++++++++--- apps/openmw/mwrender/terrain.hpp | 26 +++++- components/esm/loadland.cpp | 5 +- components/esm/loadland.hpp | 2 + 4 files changed, 167 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 710a3ad05e..89c362c4cd 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -2,6 +2,8 @@ #include #include +#include + #include "terrain.hpp" #include "components/esm/loadland.hpp" @@ -104,6 +106,9 @@ namespace MWRender const int terrainX = cellX * 2 + x; const int terrainY = cellY * 2 + y; + //it makes far more sense to reallocate the memory here, + //and let Ogre deal with it due to the issues with deleting + //it at the wrong time if using threads (Which Ogre::Terrain does) terrainData.inputFloat = OGRE_ALLOC_T(float, mLandSize*mLandSize, Ogre::MEMCATEGORY_GEOMETRY); @@ -122,10 +127,16 @@ namespace MWRender mLandSize*sizeof(float)); } + //this should really be 33*33 + Ogre::uchar* vertexColourAlpha = OGRE_ALLOC_T(Ogre::uchar, + mLandSize*mLandSize, + Ogre::MEMCATEGORY_GENERAL); + std::map indexes; initTerrainTextures(&terrainData, store, x * numTextures, y * numTextures, - numTextures, indexes); + numTextures, vertexColourAlpha, + indexes); assert( mTerrainGroup->getTerrain(cellX, cellY) == NULL && "The terrain for this cell already existed" ); @@ -133,9 +144,20 @@ namespace MWRender mTerrainGroup->loadTerrain(terrainX, terrainY, true); Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + + Ogre::Image vertexColourBlendMap = Ogre::Image(); + vertexColourBlendMap.loadDynamicImage(vertexColourAlpha, + mLandSize, mLandSize, 1, + Ogre::PF_A8, true) + .resize(mTerrainGlobals->getLayerBlendMapSize(), + mTerrainGlobals->getLayerBlendMapSize(), + Ogre::Image::FILTER_BOX); + initTerrainBlendMaps(terrain, store, x * numTextures, y * numTextures, - numTextures, indexes); + numTextures, + vertexColourBlendMap.getData(), + indexes); } } @@ -154,16 +176,30 @@ namespace MWRender &store->land[1][1]->landData->heights[0], mLandSize*mLandSize*sizeof(float)); + Ogre::uchar* vertexColourAlpha = OGRE_ALLOC_T(Ogre::uchar, + mLandSize*mLandSize, + Ogre::MEMCATEGORY_GENERAL); + std::map indexes; initTerrainTextures(&terrainData, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, indexes); + ESM::Land::LAND_TEXTURE_SIZE, vertexColourAlpha, indexes); mTerrainGroup->defineTerrain(cellX, cellY, &terrainData); mTerrainGroup->loadTerrain(cellX, cellY, true); Ogre::Terrain* terrain = mTerrainGroup->getTerrain(cellX, cellY); + + Ogre::Image vertexColourBlendMap = Ogre::Image(); + vertexColourBlendMap.loadDynamicImage(vertexColourAlpha, + mLandSize, mLandSize, 1, + Ogre::PF_A8, true) + .resize(mTerrainGlobals->getLayerBlendMapSize(), + mTerrainGlobals->getLayerBlendMapSize(), + Ogre::Image::FILTER_BOX); + initTerrainBlendMaps(terrain, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, indexes); + ESM::Land::LAND_TEXTURE_SIZE, + vertexColourBlendMap.getData(), indexes); } mTerrainGroup->freeTemporaryResources(); @@ -196,6 +232,7 @@ namespace MWRender void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, + Ogre::uchar* vertexColourAlpha, std::map& indexes) { assert(store != NULL && "store must be a valid pointer"); @@ -227,7 +264,7 @@ namespace MWRender { //NB: All vtex ids are +1 compared to the ltex ids assert((int)ltexIndex >= 0 && - store->landTextures->ltex.size() > (size_t)ltexIndex - 1 && + (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); std::string texture; @@ -262,6 +299,17 @@ namespace MWRender } } } + + //add the vertex colour overlay + //TODO sort the *4 bit + Ogre::TexturePtr vclr = getVertexColours(store, vertexColourAlpha, fromX*4, fromY*4, mLandSize); + Ogre::TexturePtr normDisp = getNormalDisp("DOES_NOT_EXIST"); + + const size_t position = terrainData->layerList.size(); + terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); + terrainData->layerList[position].worldSize = mRealSize; + terrainData->layerList[position].textureNames.push_back(vclr->getName()); + terrainData->layerList[position].textureNames.push_back(normDisp->getName()); } //---------------------------------------------------------------------------------------------- @@ -269,6 +317,7 @@ namespace MWRender void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, + Ogre::uchar* vertexColourAlpha, const std::map& indexes) { assert(store != NULL && "store must be a valid pointer"); @@ -294,6 +343,15 @@ namespace MWRender ->getBlendPointer(); memset(pBlend, 0, sizeof(float) * blendSize * blendSize); } + //except the overlay, which we will just splat over the top + { + //the overlay is always the last texture layer + float* pBlend = terrain->getLayerBlendMap(terrain->getLayerCount() - 1) + ->getBlendPointer(); + for ( int i = 0; i < blendSize * blendSize; i++ ){ + *pBlend++ = (*vertexColourAlpha++)/255.0f; + } + } //covert the ltex data into a set of blend maps for ( int texY = fromY - 1; texY < fromY + size + 1; texY++ ) @@ -354,10 +412,9 @@ namespace MWRender } } - //update the maps - for ( iter = indexes.begin(); iter != indexes.end(); ++iter ) + for ( int i = 1; i < terrain->getLayerCount(); i++ ) { - Ogre::TerrainLayerBlendMap* blend = terrain->getLayerBlendMap(iter->second); + Ogre::TerrainLayerBlendMap* blend = terrain->getLayerBlendMap(i); blend->dirty(); blend->update(); } @@ -424,8 +481,7 @@ namespace MWRender return texMgr->getByName(normalTextureName); } - const std::string textureName = "default_terrain_normal"; - if ( !texMgr->getByName(textureName).isNull() ) + const std::string textureName = "default_terrain_normal"; if ( !texMgr->getByName(textureName).isNull() ) { return texMgr->getByName(textureName); } @@ -451,4 +507,74 @@ namespace MWRender return tex; } + //---------------------------------------------------------------------------------------------- + + Ogre::TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, + Ogre::uchar* alpha, + int fromX, int fromY, int size) + { + Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); + const char* const colours = store->land[1][1]->landData->colours; + + const std::string colourTextureName = "VtexColours_" + + boost::lexical_cast(store->cell->getGridX()) + + "_" + + boost::lexical_cast(store->cell->getGridY()) + + "_" + + boost::lexical_cast(fromX) + + "_" + + boost::lexical_cast(fromY); + + Ogre::TexturePtr tex = texMgr->getByName(colourTextureName); + if ( !tex.isNull() ) + { + return tex; + } + + tex = texMgr->createManual(colourTextureName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGRA); + + Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); + + pixelBuffer->lock(Ogre::HardwareBuffer::HBL_NORMAL); + const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); + + Ogre::uint8* pDest = static_cast(pixelBox.data); + + for ( int y = 0; y < size; y++ ) + { + for ( int x = 0; x < size; x++ ) + { + const size_t colourOffset = (y+fromY)*3*65 + (x+fromX)*3; + + assert( colourOffset >= 0 && colourOffset < 65*65*3 && + "Colour offset is out of the expected bounds of record" ); + + const unsigned char r = colours[colourOffset + 0]; + const unsigned char g = colours[colourOffset + 1]; + const unsigned char b = colours[colourOffset + 2]; + + //as is the case elsewhere we need to flip the y + const size_t imageOffset = (size - 1 - y)*size*4 + x*4; + pDest[imageOffset + 0] = b; + pDest[imageOffset + 1] = g; + pDest[imageOffset + 2] = r; + pDest[imageOffset + 3] = 255; //Alpha, TODO this needs to be removed + + const size_t alphaOffset = (size - 1 - y)*size + x; + if ( r == 255 && g == 255 && b == 255 ){ + alpha[alphaOffset] = 0; + }else{ + alpha[alphaOffset] = 128; + } + + } + } + + pixelBuffer->unlock(); + + return tex; + } + } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 548d00eab3..a201fdb614 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -74,12 +74,16 @@ namespace MWRender{ * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get + * @param vertexColourAlpha this should be an empty array containing the number of + * vertexes in this terrain segment. It is filled with the + * alpha values for the vertex colours * @param indexes a mapping of ltex index to the terrain texture layer that * can be used by initTerrainBlendMaps */ void initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, + Ogre::uchar* vertexColourAlpha, std::map& indexes); /** @@ -90,11 +94,16 @@ namespace MWRender{ * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get + * @param vertexColourAlpha this should be an array containing the alpha values + * for the vertex colours. NOTE: This should be the + * size of a splat map, which is NOT the same size + * as retured from initTerrainTextures. * @param indexes the mapping of ltex to blend map produced by initTerrainTextures */ void initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, + Ogre::uchar* vertexColourAlpha, const std::map& indexes); /** @@ -118,7 +127,22 @@ namespace MWRender{ * @param fileName the name of the *diffuse* texture */ Ogre::TexturePtr getNormalDisp(const std::string& fileName); - + + /** + * Due to the fact that Ogre terrain doesn't support vertex colours + * we have to generate them manually + * + * @param store the cell store for the given terrain cell + * @param vertexColourAlpha this should be an empty array containing the number of + * vertexes in this terrain segment. It is filled with the + * alpha values for the vertex colours + * @param fromX the *vertex* index in the current cell to start making texture from + * @param fromY the *vertex* index in the current cell to start making the texture from + * @param size the size (number of vertexes) to get + */ + Ogre::TexturePtr getVertexColours(MWWorld::Ptr::CellStore* store, + Ogre::uchar* alpha, + int fromX, int fromY, int size); }; } diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index 1d670036e3..3bca8692b7 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -93,7 +93,10 @@ void Land::loadData(ESMReader &esm) } if (esm.isNextSub("VCLR")) { - esm.skipHSubSize(12675); + landData->usingColours = true; + esm.getHExact(&landData->colours, 3*LAND_NUM_VERTS); + }else{ + landData->usingColours = false; } //TODO fix magic numbers uint16_t vtex[512]; diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 4219f3eb63..eeb198e905 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -58,6 +58,8 @@ struct Land float heights[LAND_NUM_VERTS]; //float normals[LAND_NUM_VERTS * 3]; uint16_t textures[LAND_NUM_TEXTURES]; + + bool usingColours; char colours[3 * LAND_NUM_VERTS]; }; From 69243486960bb9b4ab8bed03d591dcbf04a0f085 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Wed, 29 Feb 2012 23:33:54 +0000 Subject: [PATCH 024/488] Fixed some texture splatting issues with loading empty terrain cells --- apps/openmw/mwrender/terrain.cpp | 3 +-- components/esm/loadland.cpp | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 89c362c4cd..0e6fdff01e 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -263,8 +263,7 @@ namespace MWRender if ( it == indexes.end() ) { //NB: All vtex ids are +1 compared to the ltex ids - assert((int)ltexIndex >= 0 && - (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && + assert( (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); std::string texture; diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index 3bca8692b7..4fe6279d32 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -111,6 +111,8 @@ void Land::loadData(ESMReader &esm) } else { + landData->usingColours = false; + memset(&landData->textures, 0, 512 * sizeof(uint16_t)); for (int i = 0; i < LAND_NUM_VERTS; i++) { landData->heights[i] = -256.0f * HEIGHT_SCALE; From 611f336d0731bdff53203c6aa93fa5b9af087522 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Wed, 29 Feb 2012 23:38:21 +0000 Subject: [PATCH 025/488] Now doesn't attempt to use fake vertex colours with cells that don't have vertex colours --- apps/openmw/mwrender/terrain.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 0e6fdff01e..59f2f2082f 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -300,15 +300,18 @@ namespace MWRender } //add the vertex colour overlay - //TODO sort the *4 bit - Ogre::TexturePtr vclr = getVertexColours(store, vertexColourAlpha, fromX*4, fromY*4, mLandSize); - Ogre::TexturePtr normDisp = getNormalDisp("DOES_NOT_EXIST"); + if ( store->land[1][1]->landData->usingColours ) + { + //TODO sort the *4 bit + Ogre::TexturePtr vclr = getVertexColours(store, vertexColourAlpha, fromX*4, fromY*4, mLandSize); + Ogre::TexturePtr normDisp = getNormalDisp("DOES_NOT_EXIST"); - const size_t position = terrainData->layerList.size(); - terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); - terrainData->layerList[position].worldSize = mRealSize; - terrainData->layerList[position].textureNames.push_back(vclr->getName()); - terrainData->layerList[position].textureNames.push_back(normDisp->getName()); + const size_t position = terrainData->layerList.size(); + terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); + terrainData->layerList[position].worldSize = mRealSize; + terrainData->layerList[position].textureNames.push_back(vclr->getName()); + terrainData->layerList[position].textureNames.push_back(normDisp->getName()); + } } //---------------------------------------------------------------------------------------------- @@ -343,6 +346,7 @@ namespace MWRender memset(pBlend, 0, sizeof(float) * blendSize * blendSize); } //except the overlay, which we will just splat over the top + if ( store->land[1][1]->landData->usingColours ) { //the overlay is always the last texture layer float* pBlend = terrain->getLayerBlendMap(terrain->getLayerCount() - 1) From fddf7b4dd059eae8c0b0a536d8914471d7869642 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 1 Mar 2012 14:35:39 +0100 Subject: [PATCH 026/488] terrain material now supports point lights --- apps/openmw/mwrender/terrain.cpp | 10 +-- apps/openmw/mwrender/terrainmaterial.cpp | 93 ++++++++++++++++++++---- apps/openmw/mwrender/terrainmaterial.hpp | 2 + 3 files changed, 84 insertions(+), 21 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 30e0823f94..df5bba7c46 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -29,10 +29,10 @@ namespace MWRender static_cast(activeProfile); mTerrainGlobals->setMaxPixelError(8); - //mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 256 : 1024); - //mTerrainGlobals->setLightMapSize(SPLIT_TERRAIN ? 256 : 1024); - //mTerrainGlobals->setCompositeMapSize(SPLIT_TERRAIN ? 256 : 1024); - //mTerrainGlobals->setDefaultGlobalColourMapSize(256); + mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setLightMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setCompositeMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setDefaultGlobalColourMapSize(256); //10 (default) didn't seem to be quite enough mTerrainGlobals->setSkirtSize(128); @@ -266,7 +266,7 @@ namespace MWRender Ogre::TexturePtr normDisp = getNormalDisp("textures\\" + texture); - //terrainData->layerList[position].worldSize = 256; + terrainData->layerList[position].worldSize = 256; terrainData->layerList[position].textureNames.push_back("textures\\" + texture); //Normal map. This should be removed but it would require alterations to diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 8985fc8ae2..9121da793b 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -36,6 +36,8 @@ THE SOFTWARE. #include "OgreHardwarePixelBuffer.h" #include "OgreShadowCameraSetupPSSM.h" +#define POINTLIGHTS + namespace Ogre { //--------------------------------------------------------------------- @@ -218,6 +220,22 @@ namespace Ogre } + int TerrainMaterialGeneratorB::SM2Profile::getNumberOfLightsSupported() const + { + #ifndef POINTLIGHTS + return 1; + #else + // number of supported lights depends on the number of available constant registers, + // which in turn depends on the shader profile used + if (GpuProgramManager::getSingleton().isSyntaxSupported("ps_3_0") + || GpuProgramManager::getSingleton().isSyntaxSupported("ps_4_0") + || GpuProgramManager::getSingleton().isSyntaxSupported("fp40") + ) + return 32; + else + return 8; + #endif + } //--------------------------------------------------------------------- MaterialPtr TerrainMaterialGeneratorB::SM2Profile::generate(const Terrain* terrain) { @@ -542,9 +560,15 @@ namespace Ogre params->setIgnoreMissingParams(true); params->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); - params->setNamedAutoConstant("lightPosObjSpace", GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, 0); - params->setNamedAutoConstant("lightDiffuseColour", GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, 0); - //params->setNamedAutoConstant("lightSpecularColour", GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, 0); + + for (int i=0; igetNumberOfLightsSupported(); ++i) + { + params->setNamedAutoConstant("lightPosObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); + params->setNamedAutoConstant("lightDiffuseColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); + params->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); + //params->setNamedAutoConstant("lightSpecularColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, i); + } + params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); params->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); @@ -945,10 +969,25 @@ namespace Ogre outStream << // Only 1 light supported in this version // deferred shading profile / generator later, ok? :) - "uniform float3 ambient,\n" - "uniform float4 lightPosObjSpace,\n" - "uniform float3 lightDiffuseColour,\n" - //"uniform float3 lightSpecularColour,\n" + "uniform float3 ambient,\n"; + + + for (int i=0; igetNumberOfLightsSupported(); ++i) + { + outStream << + "uniform float4 lightPosObjSpace"<getNumberOfLightsSupported(); ++i) + outStream << + " float3 lightDir"<getNumberOfLightsSupported(); ++i) + { + outStream << " float3 halfAngle"<getNumberOfLightsSupported(); ++i) + outStream << " outputCol.rgb += litRes"<isLayerSpecularMappingEnabled()) diff --git a/apps/openmw/mwrender/terrainmaterial.hpp b/apps/openmw/mwrender/terrainmaterial.hpp index eaa5572ee7..7c0b87ce46 100644 --- a/apps/openmw/mwrender/terrainmaterial.hpp +++ b/apps/openmw/mwrender/terrainmaterial.hpp @@ -142,6 +142,8 @@ namespace Ogre */ bool getReceiveDynamicShadowsLowLod() const { return mLowLodShadows; } + int getNumberOfLightsSupported() const; + /// Internal bool _isSM3Available() const { return mSM3Available; } From 562cc7aa30f96cabf3d8380696f777f622dcd45c Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 1 Mar 2012 15:03:43 +0100 Subject: [PATCH 027/488] fixed 2 assertions that caused crashes --- apps/openmw/mwrender/terrain.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index df5bba7c46..5925ad82a0 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -146,16 +146,16 @@ namespace MWRender x * numTextures, y * numTextures, numTextures, indexes); - assert( mTerrainGroup->getTerrain(cellX, cellY) == NULL && - "The terrain for this cell already existed" ); - mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); + if (mTerrainGroup->getTerrain(cellX, cellY) == NULL) + { + mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); - mTerrainGroup->loadTerrain(terrainX, terrainY, true); - Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); - initTerrainBlendMaps(terrain, store, - x * numTextures, y * numTextures, - numTextures, indexes); - + mTerrainGroup->loadTerrain(terrainX, terrainY, true); + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + initTerrainBlendMaps(terrain, store, + x * numTextures, y * numTextures, + numTextures, indexes); + } } } } @@ -246,7 +246,7 @@ namespace MWRender { //NB: All vtex ids are +1 compared to the ltex ids assert((int)ltexIndex >= 0 && - store->landTextures->ltex.size() > (size_t)ltexIndex - 1 && + (int)store->landTextures->ltex.size() > (int)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); std::string texture; From 8dd6e75ae1437f9db6db52e0d9fab5498f78624b Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Fri, 2 Mar 2012 11:56:51 +0000 Subject: [PATCH 028/488] Vertex colours now uses the Ogre::Terrain colour map --- apps/openmw/mwrender/terrain.cpp | 134 +++++++------------------------ apps/openmw/mwrender/terrain.hpp | 17 +--- 2 files changed, 34 insertions(+), 117 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 59f2f2082f..2d433d52f5 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -2,8 +2,6 @@ #include #include -#include - #include "terrain.hpp" #include "components/esm/loadland.hpp" @@ -127,38 +125,29 @@ namespace MWRender mLandSize*sizeof(float)); } - //this should really be 33*33 - Ogre::uchar* vertexColourAlpha = OGRE_ALLOC_T(Ogre::uchar, - mLandSize*mLandSize, - Ogre::MEMCATEGORY_GENERAL); - std::map indexes; initTerrainTextures(&terrainData, store, x * numTextures, y * numTextures, - numTextures, vertexColourAlpha, - indexes); + numTextures, indexes); assert( mTerrainGroup->getTerrain(cellX, cellY) == NULL && "The terrain for this cell already existed" ); mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); mTerrainGroup->loadTerrain(terrainX, terrainY, true); + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); - - Ogre::Image vertexColourBlendMap = Ogre::Image(); - vertexColourBlendMap.loadDynamicImage(vertexColourAlpha, - mLandSize, mLandSize, 1, - Ogre::PF_A8, true) - .resize(mTerrainGlobals->getLayerBlendMapSize(), - mTerrainGlobals->getLayerBlendMapSize(), - Ogre::Image::FILTER_BOX); - initTerrainBlendMaps(terrain, store, x * numTextures, y * numTextures, numTextures, - vertexColourBlendMap.getData(), indexes); - + + if ( store->land[1][1]->landData->usingColours ) + { + Ogre::Image vertex = getVertexColours(store, x*32, y*32, mLandSize); + terrain->setGlobalColourMapEnabled(true); + terrain->getGlobalColourMap()->loadImage(vertex); + } } } } @@ -176,30 +165,25 @@ namespace MWRender &store->land[1][1]->landData->heights[0], mLandSize*mLandSize*sizeof(float)); - Ogre::uchar* vertexColourAlpha = OGRE_ALLOC_T(Ogre::uchar, - mLandSize*mLandSize, - Ogre::MEMCATEGORY_GENERAL); - std::map indexes; initTerrainTextures(&terrainData, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, vertexColourAlpha, indexes); + ESM::Land::LAND_TEXTURE_SIZE, indexes); mTerrainGroup->defineTerrain(cellX, cellY, &terrainData); mTerrainGroup->loadTerrain(cellX, cellY, true); Ogre::Terrain* terrain = mTerrainGroup->getTerrain(cellX, cellY); - Ogre::Image vertexColourBlendMap = Ogre::Image(); - vertexColourBlendMap.loadDynamicImage(vertexColourAlpha, - mLandSize, mLandSize, 1, - Ogre::PF_A8, true) - .resize(mTerrainGlobals->getLayerBlendMapSize(), - mTerrainGlobals->getLayerBlendMapSize(), - Ogre::Image::FILTER_BOX); - initTerrainBlendMaps(terrain, store, 0, 0, ESM::Land::LAND_TEXTURE_SIZE, - vertexColourBlendMap.getData(), indexes); + indexes); + + if ( store->land[1][1]->landData->usingColours ) + { + Ogre::Image vertex = getVertexColours(store, 0, 0, mLandSize); + terrain->setGlobalColourMapEnabled(true); + terrain->getGlobalColourMap()->loadImage(vertex); + } } mTerrainGroup->freeTemporaryResources(); @@ -232,7 +216,6 @@ namespace MWRender void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, - Ogre::uchar* vertexColourAlpha, std::map& indexes) { assert(store != NULL && "store must be a valid pointer"); @@ -298,20 +281,6 @@ namespace MWRender } } } - - //add the vertex colour overlay - if ( store->land[1][1]->landData->usingColours ) - { - //TODO sort the *4 bit - Ogre::TexturePtr vclr = getVertexColours(store, vertexColourAlpha, fromX*4, fromY*4, mLandSize); - Ogre::TexturePtr normDisp = getNormalDisp("DOES_NOT_EXIST"); - - const size_t position = terrainData->layerList.size(); - terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); - terrainData->layerList[position].worldSize = mRealSize; - terrainData->layerList[position].textureNames.push_back(vclr->getName()); - terrainData->layerList[position].textureNames.push_back(normDisp->getName()); - } } //---------------------------------------------------------------------------------------------- @@ -319,7 +288,6 @@ namespace MWRender void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, - Ogre::uchar* vertexColourAlpha, const std::map& indexes) { assert(store != NULL && "store must be a valid pointer"); @@ -345,16 +313,6 @@ namespace MWRender ->getBlendPointer(); memset(pBlend, 0, sizeof(float) * blendSize * blendSize); } - //except the overlay, which we will just splat over the top - if ( store->land[1][1]->landData->usingColours ) - { - //the overlay is always the last texture layer - float* pBlend = terrain->getLayerBlendMap(terrain->getLayerCount() - 1) - ->getBlendPointer(); - for ( int i = 0; i < blendSize * blendSize; i++ ){ - *pBlend++ = (*vertexColourAlpha++)/255.0f; - } - } //covert the ltex data into a set of blend maps for ( int texY = fromY - 1; texY < fromY + size + 1; texY++ ) @@ -484,7 +442,8 @@ namespace MWRender return texMgr->getByName(normalTextureName); } - const std::string textureName = "default_terrain_normal"; if ( !texMgr->getByName(textureName).isNull() ) + const std::string textureName = "default_terrain_normal"; + if ( !texMgr->getByName(textureName).isNull() ) { return texMgr->getByName(textureName); } @@ -512,38 +471,14 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - Ogre::TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, - Ogre::uchar* alpha, + Ogre::Image TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size) { - Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); const char* const colours = store->land[1][1]->landData->colours; - const std::string colourTextureName = "VtexColours_" + - boost::lexical_cast(store->cell->getGridX()) + - "_" + - boost::lexical_cast(store->cell->getGridY()) + - "_" + - boost::lexical_cast(fromX) + - "_" + - boost::lexical_cast(fromY); - - Ogre::TexturePtr tex = texMgr->getByName(colourTextureName); - if ( !tex.isNull() ) - { - return tex; - } - - tex = texMgr->createManual(colourTextureName, - Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGRA); - - Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); - - pixelBuffer->lock(Ogre::HardwareBuffer::HBL_NORMAL); - const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); - - Ogre::uint8* pDest = static_cast(pixelBox.data); + Ogre::uchar* imgData = OGRE_ALLOC_T(Ogre::uchar, + size*size*sizeof(Ogre::uchar)*3, + Ogre::MEMCATEGORY_GENERAL); for ( int y = 0; y < size; y++ ) { @@ -559,25 +494,18 @@ namespace MWRender const unsigned char b = colours[colourOffset + 2]; //as is the case elsewhere we need to flip the y - const size_t imageOffset = (size - 1 - y)*size*4 + x*4; - pDest[imageOffset + 0] = b; - pDest[imageOffset + 1] = g; - pDest[imageOffset + 2] = r; - pDest[imageOffset + 3] = 255; //Alpha, TODO this needs to be removed - - const size_t alphaOffset = (size - 1 - y)*size + x; - if ( r == 255 && g == 255 && b == 255 ){ - alpha[alphaOffset] = 0; - }else{ - alpha[alphaOffset] = 128; - } + const size_t imageOffset = (size - 1 - y)*size*3 + x*3; + imgData[imageOffset + 0] = r; + imgData[imageOffset + 1] = g; + imgData[imageOffset + 2] = b; } } - pixelBuffer->unlock(); + Ogre::Image img; + img.loadDynamicImage(imgData, size, size, 1, Ogre::PF_R8G8B8, true); - return tex; + return img; } } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index a201fdb614..232c1d103d 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -74,16 +74,12 @@ namespace MWRender{ * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get - * @param vertexColourAlpha this should be an empty array containing the number of - * vertexes in this terrain segment. It is filled with the - * alpha values for the vertex colours * @param indexes a mapping of ltex index to the terrain texture layer that * can be used by initTerrainBlendMaps */ void initTerrainTextures(Ogre::Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, - Ogre::uchar* vertexColourAlpha, std::map& indexes); /** @@ -94,16 +90,11 @@ namespace MWRender{ * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get - * @param vertexColourAlpha this should be an array containing the alpha values - * for the vertex colours. NOTE: This should be the - * size of a splat map, which is NOT the same size - * as retured from initTerrainTextures. * @param indexes the mapping of ltex to blend map produced by initTerrainTextures */ void initTerrainBlendMaps(Ogre::Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, - Ogre::uchar* vertexColourAlpha, const std::map& indexes); /** @@ -133,15 +124,13 @@ namespace MWRender{ * we have to generate them manually * * @param store the cell store for the given terrain cell - * @param vertexColourAlpha this should be an empty array containing the number of - * vertexes in this terrain segment. It is filled with the - * alpha values for the vertex colours * @param fromX the *vertex* index in the current cell to start making texture from * @param fromY the *vertex* index in the current cell to start making the texture from * @param size the size (number of vertexes) to get + * + * @TODO FIXME the return of this function possibly copies the image data */ - Ogre::TexturePtr getVertexColours(MWWorld::Ptr::CellStore* store, - Ogre::uchar* alpha, + Ogre::Image getVertexColours(MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size); }; From 2bea4c47242420b8d0b5db4661745a410186a727 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 2 Mar 2012 15:29:12 +0100 Subject: [PATCH 029/488] fixed the global colour map, apparently Ogre::Terrain was corrupting it somehow, now we are just bypassing Ogre::Terrain for the colour map and passing it directly to the material, which makes more sense performance-wise anyway --- apps/openmw/mwrender/terrain.cpp | 68 +++++++++++++++++------- apps/openmw/mwrender/terrain.hpp | 4 +- apps/openmw/mwrender/terrainmaterial.cpp | 10 ++-- 3 files changed, 55 insertions(+), 27 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 4dd03c0970..8d82cb2967 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -6,6 +6,8 @@ #include "components/esm/loadland.hpp" +#include + using namespace Ogre; namespace MWRender @@ -48,6 +50,7 @@ namespace MWRender matProfile->setLayerNormalMappingEnabled(false); matProfile->setLayerParallaxMappingEnabled(false); matProfile->setReceiveDynamicShadowsEnabled(false); + matProfile->setGlobalColourMapEnabled(true); mLandSize = ESM::Land::LAND_SIZE; mRealSize = ESM::Land::REAL_SIZE; @@ -163,9 +166,12 @@ namespace MWRender if ( store->land[1][1]->landData->usingColours ) { - Ogre::Image vertex = getVertexColours(store, x*32, y*32, mLandSize); - terrain->setGlobalColourMapEnabled(true); - terrain->getGlobalColourMap()->loadImage(vertex); + Ogre::TexturePtr vertex = getVertexColours(store, x*32, y*32, mLandSize); + + MaterialPtr mat = terrain->_getMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); + mat = terrain->_getCompositeMapMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); } } } @@ -200,9 +206,12 @@ namespace MWRender if ( store->land[1][1]->landData->usingColours ) { - Ogre::Image vertex = getVertexColours(store, 0, 0, mLandSize); - terrain->setGlobalColourMapEnabled(true); - terrain->getGlobalColourMap()->loadImage(vertex); + Ogre::TexturePtr vertex = getVertexColours(store, 0, 0, mLandSize); + + MaterialPtr mat = terrain->_getMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); + mat = terrain->_getCompositeMapMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); } } @@ -495,14 +504,37 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - Ogre::Image TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, - int fromX, int fromY, int size) + Ogre::TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, + int fromX, int fromY, int size) { + Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); const char* const colours = store->land[1][1]->landData->colours; - Ogre::uchar* imgData = OGRE_ALLOC_T(Ogre::uchar, - size*size*sizeof(Ogre::uchar)*3, - Ogre::MEMCATEGORY_GENERAL); + const std::string colourTextureName = "VtexColours_" + + boost::lexical_cast(store->cell->getGridX()) + + "_" + + boost::lexical_cast(store->cell->getGridY()) + + "_" + + boost::lexical_cast(fromX) + + "_" + + boost::lexical_cast(fromY); + + Ogre::TexturePtr tex = texMgr->getByName(colourTextureName); + if ( !tex.isNull() ) + { + return tex; + } + + tex = texMgr->createManual(colourTextureName, + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGRA); + + Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); + + pixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD); + const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); + + Ogre::uint8* pDest = static_cast(pixelBox.data); for ( int y = 0; y < size; y++ ) { @@ -518,18 +550,16 @@ namespace MWRender const unsigned char b = colours[colourOffset + 2]; //as is the case elsewhere we need to flip the y - const size_t imageOffset = (size - 1 - y)*size*3 + x*3; - imgData[imageOffset + 0] = r; - imgData[imageOffset + 1] = g; - imgData[imageOffset + 2] = b; - + const size_t imageOffset = (size - 1 - y)*size*4 + x*4; + pDest[imageOffset + 0] = b; + pDest[imageOffset + 1] = g; + pDest[imageOffset + 2] = r; } } - Ogre::Image img; - img.loadDynamicImage(imgData, size, size, 1, Ogre::PF_R8G8B8, true); + pixelBuffer->unlock(); - return img; + return tex; } } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 923f4fc2bf..a0a48fb37f 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -130,10 +130,8 @@ namespace MWRender{ * @param fromX the *vertex* index in the current cell to start making texture from * @param fromY the *vertex* index in the current cell to start making the texture from * @param size the size (number of vertexes) to get - * - * @TODO FIXME the return of this function possibly copies the image data */ - Ogre::Image getVertexColours(MWWorld::Ptr::CellStore* store, + Ogre::TexturePtr getVertexColours(MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size); }; diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 9121da793b..0edc23a71b 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -203,7 +203,7 @@ namespace Ogre // normalmap --freeTextureUnits; // colourmap - if (terrain->getGlobalColourMapEnabled()) + //if (terrain->getGlobalColourMapEnabled()) --freeTextureUnits; if (isShadowingEnabled(HIGH_LOD, terrain)) { @@ -359,9 +359,9 @@ namespace Ogre tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); // global colour map - if (terrain->getGlobalColourMapEnabled() && isGlobalColourMapEnabled()) + //if (terrain->getGlobalColourMapEnabled() && isGlobalColourMapEnabled()) { - tu = pass->createTextureUnitState(terrain->getGlobalColourMap()->getName()); + tu = pass->createTextureUnitState(""); tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); } @@ -1004,7 +1004,7 @@ namespace Ogre "uniform sampler2D globalNormal : register(s" << currentSamplerIdx++ << ")\n"; - if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + //if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) { outStream << ", uniform sampler2D globalColourMap : register(s" << currentSamplerIdx++ << ")\n"; @@ -1299,7 +1299,7 @@ namespace Ogre } else { - if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + //if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) { // sample colour map and apply to diffuse outStream << " diffuse *= tex2D(globalColourMap, uv).rgb;\n"; From 0d4e3b8e758ba916f83e3b4ddc496348df3d79e1 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 2 Mar 2012 18:33:05 +0100 Subject: [PATCH 030/488] remove alpha channel from colour map --- apps/openmw/mwrender/terrain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 8d82cb2967..3258925637 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -527,7 +527,7 @@ namespace MWRender tex = texMgr->createManual(colourTextureName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGRA); + Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGR); Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); @@ -550,7 +550,7 @@ namespace MWRender const unsigned char b = colours[colourOffset + 2]; //as is the case elsewhere we need to flip the y - const size_t imageOffset = (size - 1 - y)*size*4 + x*4; + const size_t imageOffset = (size - 1 - y)*size*3 + x*3; pDest[imageOffset + 0] = b; pDest[imageOffset + 1] = g; pDest[imageOffset + 2] = r; From 461ec9f3d6ddfb3642644d85af925c2c7518e642 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 2 Mar 2012 18:50:55 +0100 Subject: [PATCH 031/488] fix regarding last commit --- apps/openmw/mwrender/terrain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 3258925637..ee71754653 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -550,7 +550,7 @@ namespace MWRender const unsigned char b = colours[colourOffset + 2]; //as is the case elsewhere we need to flip the y - const size_t imageOffset = (size - 1 - y)*size*3 + x*3; + const size_t imageOffset = (size - 1 - y)*size*4 + x*4; pDest[imageOffset + 0] = b; pDest[imageOffset + 1] = g; pDest[imageOffset + 2] = r; From 3ecc427b9606f8f7d85adee4b528c0dc6bb12a80 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Fri, 2 Mar 2012 20:27:20 +0000 Subject: [PATCH 032/488] Implemented slightly better texture splatting --- apps/openmw/mwrender/terrain.cpp | 172 ++++++++++++++++--------------- apps/openmw/mwrender/terrain.hpp | 6 -- 2 files changed, 90 insertions(+), 88 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index ee71754653..39aeb64371 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -31,7 +31,7 @@ namespace MWRender static_cast(activeProfile); mTerrainGlobals->setMaxPixelError(8); - mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 32 : 1024); mTerrainGlobals->setLightMapSize(SPLIT_TERRAIN ? 256 : 1024); mTerrainGlobals->setCompositeMapSize(SPLIT_TERRAIN ? 256 : 1024); mTerrainGlobals->setDefaultGlobalColourMapSize(256); @@ -255,62 +255,75 @@ namespace MWRender fromY+size <= ESM::Land::LAND_TEXTURE_SIZE && "Can't get a terrain texture on terrain outside the current cell"); - //there is one texture that we want to use as a base (i.e. it won't have - //a blend map). This holds the ltex index of that base texture so that - //we know not to include it in the output map - int baseTexture = -1; + //this ensures that the ltex indexes are sorted (or retrived as sorted + //which simplifies shading between cells). + // + //If we don't sort the ltex indexes, the splatting order may differ between + //cells which may lead to inconsistent results when shading between cells + std::set ltexIndexes; for ( int y = fromY - 1; y < fromY + size + 1; y++ ) { for ( int x = fromX - 1; x < fromX + size + 1; x++ ) { - const uint16_t ltexIndex = getLtexIndexAt(store, x, y); - //this is the base texture, so we can ignore this at present - if ( ltexIndex == baseTexture ) + ltexIndexes.insert(getLtexIndexAt(store, x, y)); + } + } + + //there is one texture that we want to use as a base (i.e. it won't have + //a blend map). This holds the ltex index of that base texture so that + //we know not to include it in the output map + int baseTexture = -1; + for ( std::set::iterator iter = ltexIndexes.begin(); + iter != ltexIndexes.end(); + ++iter ) + { + const uint16_t ltexIndex = *iter; + //this is the base texture, so we can ignore this at present + if ( ltexIndex == baseTexture ) + { + continue; + } + + const std::map::const_iterator it = indexes.find(ltexIndex); + + if ( it == indexes.end() ) + { + //NB: All vtex ids are +1 compared to the ltex ids + + assert( (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && + "LAND.VTEX must be within the bounds of the LTEX array"); + + std::string texture; + if ( ltexIndex == 0 ) { - continue; + texture = "_land_default.dds"; + } + else + { + texture = store->landTextures->ltex[ltexIndex-1].texture; + //TODO this is needed due to MWs messed up texture handling + texture = texture.substr(0, texture.rfind(".")) + ".dds"; } - const std::map::const_iterator it = indexes.find(ltexIndex); + const size_t position = terrainData->layerList.size(); + terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); - if ( it == indexes.end() ) + Ogre::TexturePtr normDisp = getNormalDisp("textures\\" + texture); + + terrainData->layerList[position].worldSize = 256; + terrainData->layerList[position].textureNames.push_back("textures\\" + texture); + + //Normal map. This should be removed but it would require alterations to + //the material generator. Another option would be to use a 1x1 blank texture + //terrainData->layerList[position].textureNames.push_back(normDisp->getName()); + + if ( baseTexture == -1 ) { - //NB: All vtex ids are +1 compared to the ltex ids - - assert( (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && - "LAND.VTEX must be within the bounds of the LTEX array"); - - std::string texture; - if ( ltexIndex == 0 ) - { - texture = "_land_default.dds"; - } - else - { - texture = store->landTextures->ltex[ltexIndex-1].texture; - //TODO this is needed due to MWs messed up texture handling - texture = texture.substr(0, texture.rfind(".")) + ".dds"; - } - - const size_t position = terrainData->layerList.size(); - terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); - - Ogre::TexturePtr normDisp = getNormalDisp("textures\\" + texture); - - terrainData->layerList[position].worldSize = 256; - terrainData->layerList[position].textureNames.push_back("textures\\" + texture); - - //Normal map. This should be removed but it would require alterations to - //the material generator. Another option would be to use a 1x1 blank texture - //terrainData->layerList[position].textureNames.push_back(normDisp->getName()); - - if ( baseTexture == -1 ) - { - baseTexture = ltexIndex; - } - else - { - indexes[ltexIndex] = position; - } + baseTexture = ltexIndex; + } + else + { + indexes[ltexIndex] = position; } } } @@ -335,8 +348,8 @@ namespace MWRender //that need to result in an integer for correct splatting assert( (size & (size - 1)) == 0 && "Size must be a power of 2"); - const int blendSize = terrain->getLayerBlendMapSize(); - const int blendDist = TERRAIN_SHADE_DISTANCE * (blendSize / size); + const int blendMapSize = terrain->getLayerBlendMapSize(); + const int splatSize = blendMapSize / size; //zero out every map std::map::const_iterator iter; @@ -344,7 +357,7 @@ namespace MWRender { float* pBlend = terrain->getLayerBlendMap(iter->second) ->getBlendPointer(); - memset(pBlend, 0, sizeof(float) * blendSize * blendSize); + memset(pBlend, 0, sizeof(float) * blendMapSize * blendMapSize); } //covert the ltex data into a set of blend maps @@ -354,11 +367,6 @@ namespace MWRender { const uint16_t ltexIndex = getLtexIndexAt(store, texX, texY); - //whilte texX is the splat index relative to the entire cell, - //relX is relative to the current segment we are splatting - const int relX = texX - fromX; - const int relY = texY - fromY; - //check if it is the base texture (which isn't in the map) and //if it is don't bother altering the blend map for it if ( indexes.find(ltexIndex) == indexes.end() ) @@ -366,43 +374,43 @@ namespace MWRender continue; } + //while texX is the splat index relative to the entire cell, + //relX is relative to the current segment we are splatting + const int relX = texX - fromX; + const int relY = texY - fromY; + const int layerIndex = indexes.find(ltexIndex)->second; float* const pBlend = terrain->getLayerBlendMap(layerIndex) ->getBlendPointer(); - const int splatSize = blendSize / size; + for ( int y = -1; y < splatSize + 1; y++ ){ + for ( int x = -1; x < splatSize + 1; x++ ){ - //setup the bounds for the shading of this texture splat - const int startX = std::max(0, relX*splatSize - blendDist); - const int endX = std::min(blendSize, (relX+1)*splatSize + blendDist); + //Note: Y is reversed + const int splatY = blendMapSize - 1 - relY * splatSize - y; + const int splatX = relX * splatSize + x; - const int startY = std::max(0, relY*splatSize - blendDist); - const int endY = std::min(blendSize, (relY+1)*splatSize + blendDist); - - for ( int blendX = startX; blendX < endX; blendX++ ) - { - for ( int blendY = startY; blendY < endY; blendY++ ) - { - assert(blendX >= 0 && blendX < blendSize && - "index must be within texture bounds"); - - assert(blendY >= 0 && blendY < blendSize && - "index must be within texture bounds"); - - const int index = blendSize*(blendSize - 1 - blendY) + blendX; - if ( blendX >= relX*splatSize && blendX < (relX+1)*splatSize && - blendY >= relY*splatSize && blendY < (relY+1)*splatSize ) + if ( splatX >= 0 && splatX < blendMapSize && + splatY >= 0 && splatY < blendMapSize ) { - pBlend[index] = 1; - } - else - { - pBlend[index] = std::max((float)pBlend[index], 0.5f); + const int index = (splatY)*blendMapSize + splatX; + + if ( y >= 0 && y < splatSize && + x >= 0 && x < splatSize ) + { + pBlend[index] = 1; + } + else + { + //this provides a transition shading but also + //rounds off the corners slightly + pBlend[index] = std::min(1.0f, pBlend[index] + 0.5f); + } } + } } - } } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index a0a48fb37f..c298b7fc18 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -61,12 +61,6 @@ namespace MWRender{ */ int mRealSize; - /** - * The distance that the current cell should be shaded into the neighbouring - * texture. The distance is in terms of the splat size of a texture - */ - static const float TERRAIN_SHADE_DISTANCE = 0.25f; - /** * Setups up the list of textures for part of a cell, using indexes as * an output to create a mapping of MW LtexIndex to the relevant terrain From 0f705eaca580da7bf11bc773529b9fc54c9d2b28 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Fri, 2 Mar 2012 21:03:53 +0000 Subject: [PATCH 033/488] Removed the option of not splitting terrain as it was slower and adding to code complexity. The only real reason for keeping it, which was that it made debugging some texture issues easier is now gone. --- apps/openmw/mwrender/terrain.cpp | 183 +++++++++++-------------------- apps/openmw/mwrender/terrain.hpp | 25 +---- 2 files changed, 69 insertions(+), 139 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 39aeb64371..113a4a8317 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -31,9 +31,9 @@ namespace MWRender static_cast(activeProfile); mTerrainGlobals->setMaxPixelError(8); - mTerrainGlobals->setLayerBlendMapSize(SPLIT_TERRAIN ? 32 : 1024); - mTerrainGlobals->setLightMapSize(SPLIT_TERRAIN ? 256 : 1024); - mTerrainGlobals->setCompositeMapSize(SPLIT_TERRAIN ? 256 : 1024); + mTerrainGlobals->setLayerBlendMapSize(32); + mTerrainGlobals->setLightMapSize(256); + mTerrainGlobals->setCompositeMapSize(256); mTerrainGlobals->setDefaultGlobalColourMapSize(256); //10 (default) didn't seem to be quite enough @@ -52,29 +52,21 @@ namespace MWRender matProfile->setReceiveDynamicShadowsEnabled(false); matProfile->setGlobalColourMapEnabled(true); - mLandSize = ESM::Land::LAND_SIZE; - mRealSize = ESM::Land::REAL_SIZE; - if ( SPLIT_TERRAIN ) - { - mLandSize = (mLandSize - 1)/2 + 1; - mRealSize /= 2; - } - mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, Ogre::Terrain::ALIGN_X_Z, mLandSize, - mRealSize); + mWorldSize); - mTerrainGroup->setOrigin(Ogre::Vector3(mRealSize/2, + mTerrainGroup->setOrigin(Ogre::Vector3(mWorldSize/2, 0, - -mRealSize/2)); + -mWorldSize/2)); Ogre::Terrain::ImportData& importSettings = mTerrainGroup->getDefaultImportSettings(); importSettings.inputBias = 0; importSettings.terrainSize = mLandSize; - importSettings.worldSize = mRealSize; + importSettings.worldSize = mWorldSize; importSettings.minBatchSize = 9; importSettings.maxBatchSize = mLandSize; @@ -111,109 +103,72 @@ namespace MWRender const int cellY = store->cell->getGridY(); - if ( SPLIT_TERRAIN ) + //split the cell terrain into four segments + const int numTextures = ESM::Land::LAND_TEXTURE_SIZE/2; + + for ( int x = 0; x < 2; x++ ) { - //split the cell terrain into four segments - const int numTextures = ESM::Land::LAND_TEXTURE_SIZE/2; - - for ( int x = 0; x < 2; x++ ) + for ( int y = 0; y < 2; y++ ) { - for ( int y = 0; y < 2; y++ ) + Ogre::Terrain::ImportData terrainData = + mTerrainGroup->getDefaultImportSettings(); + + const int terrainX = cellX * 2 + x; + const int terrainY = cellY * 2 + y; + + //it makes far more sense to reallocate the memory here, + //and let Ogre deal with it due to the issues with deleting + //it at the wrong time if using threads (Which Ogre::Terrain does) + terrainData.inputFloat = OGRE_ALLOC_T(float, + mLandSize*mLandSize, + Ogre::MEMCATEGORY_GEOMETRY); + + //copy the height data row by row + for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) { - Ogre::Terrain::ImportData terrainData = - mTerrainGroup->getDefaultImportSettings(); + //the offset of the current segment + const size_t yOffset = y * (mLandSize-1) * ESM::Land::LAND_SIZE + + //offset of the row + terrainCopyY * ESM::Land::LAND_SIZE; + const size_t xOffset = x * (mLandSize-1); - const int terrainX = cellX * 2 + x; - const int terrainY = cellY * 2 + y; + memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], + &store->land[1][1]->landData->heights[yOffset + xOffset], + mLandSize*sizeof(float)); + } - //it makes far more sense to reallocate the memory here, - //and let Ogre deal with it due to the issues with deleting - //it at the wrong time if using threads (Which Ogre::Terrain does) - terrainData.inputFloat = OGRE_ALLOC_T(float, - mLandSize*mLandSize, - Ogre::MEMCATEGORY_GEOMETRY); + std::map indexes; + initTerrainTextures(&terrainData, store, + x * numTextures, y * numTextures, + numTextures, indexes); - //copy the height data row by row - for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) + if (mTerrainGroup->getTerrain(cellX, cellY) == NULL) + { + mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); + + mTerrainGroup->loadTerrain(terrainX, terrainY, true); + + Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + initTerrainBlendMaps(terrain, store, + x * numTextures, y * numTextures, + numTextures, + indexes); + + if ( store->land[1][1]->landData->usingColours ) { - //the offset of the current segment - const size_t yOffset = y * (mLandSize-1) * ESM::Land::LAND_SIZE + - //offset of the row - terrainCopyY * ESM::Land::LAND_SIZE; - const size_t xOffset = x * (mLandSize-1); + Ogre::TexturePtr vertex = getVertexColours(store, + x*(mLandSize-1), + y*(mLandSize-1), + mLandSize); - memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], - &store->land[1][1]->landData->heights[yOffset + xOffset], - mLandSize*sizeof(float)); - } - - std::map indexes; - initTerrainTextures(&terrainData, store, - x * numTextures, y * numTextures, - numTextures, indexes); - - if (mTerrainGroup->getTerrain(cellX, cellY) == NULL) - { - mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); - - mTerrainGroup->loadTerrain(terrainX, terrainY, true); - - Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); - initTerrainBlendMaps(terrain, store, - x * numTextures, y * numTextures, - numTextures, - indexes); - - if ( store->land[1][1]->landData->usingColours ) - { - Ogre::TexturePtr vertex = getVertexColours(store, x*32, y*32, mLandSize); - - MaterialPtr mat = terrain->_getMaterial(); - mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); - mat = terrain->_getCompositeMapMaterial(); - mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); - } + MaterialPtr mat = terrain->_getMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); + mat = terrain->_getCompositeMapMaterial(); + mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); } } } } - else - { - Ogre::Terrain::ImportData terrainData = - mTerrainGroup->getDefaultImportSettings(); - - //one cell is one terrain segment - terrainData.inputFloat = OGRE_ALLOC_T(float, - mLandSize*mLandSize, - Ogre::MEMCATEGORY_GEOMETRY); - - memcpy(&terrainData.inputFloat[0], - &store->land[1][1]->landData->heights[0], - mLandSize*mLandSize*sizeof(float)); - - std::map indexes; - initTerrainTextures(&terrainData, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, indexes); - - mTerrainGroup->defineTerrain(cellX, cellY, &terrainData); - - mTerrainGroup->loadTerrain(cellX, cellY, true); - Ogre::Terrain* terrain = mTerrainGroup->getTerrain(cellX, cellY); - - initTerrainBlendMaps(terrain, store, 0, 0, - ESM::Land::LAND_TEXTURE_SIZE, - indexes); - - if ( store->land[1][1]->landData->usingColours ) - { - Ogre::TexturePtr vertex = getVertexColours(store, 0, 0, mLandSize); - - MaterialPtr mat = terrain->_getMaterial(); - mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); - mat = terrain->_getCompositeMapMaterial(); - mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); - } - } mTerrainGroup->freeTemporaryResources(); } @@ -222,22 +177,14 @@ namespace MWRender void TerrainManager::cellRemoved(MWWorld::Ptr::CellStore *store) { - if ( SPLIT_TERRAIN ) + for ( int x = 0; x < 2; x++ ) { - for ( int x = 0; x < 2; x++ ) + for ( int y = 0; y < 2; y++ ) { - for ( int y = 0; y < 2; y++ ) - { - mTerrainGroup->unloadTerrain(store->cell->getGridX() * 2 + x, - store->cell->getGridY() * 2 + y); - } + mTerrainGroup->unloadTerrain(store->cell->getGridX() * 2 + x, + store->cell->getGridY() * 2 + y); } } - else - { - mTerrainGroup->unloadTerrain(store->cell->getGridX(), - store->cell->getGridY()); - } } //---------------------------------------------------------------------------------------------- diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index c298b7fc18..eba437a2d5 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -17,14 +17,8 @@ namespace MWRender{ /** * Implements the Morrowind terrain using the Ogre Terrain Component * - * This currently has two options as to how the terrain is rendered, one - * is that one cell is rendered as one Ogre::Terrain and the other that - * it is rendered as 4 Ogre::Terrain segments - * - * Splitting it up into segments has the following advantages - * * Seems to be faster - * * Terrain can now be culled more aggressivly using view frustram culling - * * We don't hit splat limits as much + * Each terrain cell is split into four blocks as this leads to an increase + * in performance and means we don't hit splat limits quite as much */ class TerrainManager{ public: @@ -40,26 +34,15 @@ namespace MWRender{ Ogre::TerrainGlobalOptions* mTerrainGlobals; Ogre::TerrainGroup* mTerrainGroup; - /** - * Should each cell be split into a further four Ogre::Terrain objects - * - * This has the advantage that it is possible to cull more terrain and - * we are more likly to be able to be able to fit all the required splats - * in (Ogre's default material generator only works with about 6 textures) - */ - static const bool SPLIT_TERRAIN = true; - /** * The length in verticies of a single terrain block. - * This takes into account the SPLIT_TERRAIN option */ - int mLandSize; + static const int mLandSize = (ESM::Land::LAND_SIZE - 1)/2 + 1; /** * The length in game units of a single terrain block. - * This takes into account the SPLIT_TERRAIN option */ - int mRealSize; + static const int mWorldSize = ESM::Land::REAL_SIZE/2; /** * Setups up the list of textures for part of a cell, using indexes as From 07a2e5a5be7edea0b0a4e14807202b74d91bbd01 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Fri, 2 Mar 2012 21:20:12 +0000 Subject: [PATCH 034/488] Removed dead code, fixed a error, added comments and tweaked some constants (after trying to find their min/max values) --- apps/openmw/mwrender/terrain.cpp | 65 ++++++-------------------------- apps/openmw/mwrender/terrain.hpp | 11 ------ 2 files changed, 12 insertions(+), 64 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 113a4a8317..9cc0a9f370 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -30,7 +30,11 @@ namespace MWRender TerrainMaterialGeneratorB::SM2Profile* matProfile = static_cast(activeProfile); - mTerrainGlobals->setMaxPixelError(8); + //The pixel error should be as high as possible without it being noticed + //as it governs how fast mesh quality decreases. 16 was just about Ok + //when tested at the small swamp pond in Seyda Neen + mTerrainGlobals->setMaxPixelError(16); + mTerrainGlobals->setLayerBlendMapSize(32); mTerrainGlobals->setLightMapSize(256); mTerrainGlobals->setCompositeMapSize(256); @@ -39,11 +43,9 @@ namespace MWRender //10 (default) didn't seem to be quite enough mTerrainGlobals->setSkirtSize(128); - /* - * Here we are pushing the composite map distance beyond the edge - * of the rendered terrain due to not having setup lighting - */ - //mTerrainGlobals->setCompositeMapDistance(ESM::Land::REAL_SIZE*4); + //due to the sudden flick between composite and non composite textures, + //this seemed the distance where it wasn't too noticeable + mTerrainGlobals->setCompositeMapDistance(mWorldSize*2); matProfile->setLightmapEnabled(false); matProfile->setLayerSpecularMappingEnabled(false); @@ -142,7 +144,7 @@ namespace MWRender x * numTextures, y * numTextures, numTextures, indexes); - if (mTerrainGroup->getTerrain(cellX, cellY) == NULL) + if (mTerrainGroup->getTerrain(terrainX, terrainY) == NULL) { mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); @@ -161,6 +163,8 @@ namespace MWRender y*(mLandSize-1), mLandSize); + //this is a hack to get around the fact that Ogre seems to + //corrupt the composite map leading to rendering errors MaterialPtr mat = terrain->_getMaterial(); mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); mat = terrain->_getCompositeMapMaterial(); @@ -255,15 +259,9 @@ namespace MWRender const size_t position = terrainData->layerList.size(); terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); - Ogre::TexturePtr normDisp = getNormalDisp("textures\\" + texture); - terrainData->layerList[position].worldSize = 256; terrainData->layerList[position].textureNames.push_back("textures\\" + texture); - //Normal map. This should be removed but it would require alterations to - //the material generator. Another option would be to use a 1x1 blank texture - //terrainData->layerList[position].textureNames.push_back(normDisp->getName()); - if ( baseTexture == -1 ) { baseTexture = ltexIndex; @@ -418,52 +416,12 @@ namespace MWRender ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; } - //---------------------------------------------------------------------------------------------- - - Ogre::TexturePtr TerrainManager::getNormalDisp(const std::string& fileName) - { - Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); - const std::string normalTextureName = fileName.substr(0, fileName.rfind(".")) - + "_n.dds"; - if ( !texMgr->getByName(normalTextureName).isNull() ) - { - return texMgr->getByName(normalTextureName); - } - - const std::string textureName = "default_terrain_normal"; - if ( !texMgr->getByName(textureName).isNull() ) - { - return texMgr->getByName(textureName); - } - - Ogre::TexturePtr tex = texMgr->createManual( - textureName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - Ogre::TEX_TYPE_2D, 1, 1, 0, Ogre::PF_BYTE_BGRA); - - Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); - - pixelBuffer->lock(Ogre::HardwareBuffer::HBL_NORMAL); - const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); - - Ogre::uint8* pDest = static_cast(pixelBox.data); - - *pDest++ = 128; // B - *pDest++ = 128; // G - *pDest++ = 128; // R - *pDest++ = 0; // A - - pixelBuffer->unlock(); - - return tex; - } - //---------------------------------------------------------------------------------------------- Ogre::TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size) { Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); - const char* const colours = store->land[1][1]->landData->colours; const std::string colourTextureName = "VtexColours_" + boost::lexical_cast(store->cell->getGridX()) + @@ -491,6 +449,7 @@ namespace MWRender Ogre::uint8* pDest = static_cast(pixelBox.data); + const char* const colours = store->land[1][1]->landData->colours; for ( int y = 0; y < size; y++ ) { for ( int x = 0; x < size; x++ ) diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index eba437a2d5..6d98655400 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -88,17 +88,6 @@ namespace MWRender{ */ int getLtexIndexAt(MWWorld::Ptr::CellStore* store, int x, int y); - /** - * Retrives the texture that is the normal and parallax map for the - * terrain. If it doesn't exist a blank texture is used - * - * The file name of the texture should be the same as the file name of - * the base diffuse texture, but with _n appended before the extension - * - * @param fileName the name of the *diffuse* texture - */ - Ogre::TexturePtr getNormalDisp(const std::string& fileName); - /** * Due to the fact that Ogre terrain doesn't support vertex colours * we have to generate them manually From 3c934e3e44ae0a3cc87beb51a2dc2e1fe378bb33 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Fri, 2 Mar 2012 22:31:17 +0000 Subject: [PATCH 035/488] Fixed a bug with fog not being applied to initially created terrain when starting in exteriors. --- apps/openmw/mwrender/renderingmanager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index e204b5856a..1c7edb7da8 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -25,6 +25,10 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mRendering.createScene("PlayerCam", 55, 5); mTerrainManager = new TerrainManager(mRendering.getScene()); + //The fog type must be set before any terrain objects are created as if the + //fog type is set to FOG_NONE then the initially created terrain won't have any fog + configureFog(1, ColourValue(1,1,1)); + // Set default mipmap level (NB some APIs ignore this) TextureManager::getSingleton().setDefaultNumMipmaps(5); From b882c03adc95d5ed9a6b888d69084aff2b5bc2d2 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 2 Mar 2012 23:36:48 +0100 Subject: [PATCH 036/488] fixed terrain regions without vertexcolours, tweaked maxPixelError --- apps/openmw/mwrender/terrain.cpp | 32 +++++++++++++++--------- apps/openmw/mwrender/terrain.hpp | 3 +++ apps/openmw/mwrender/terrainmaterial.cpp | 8 +++--- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 9cc0a9f370..ca218388f5 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -27,13 +27,12 @@ namespace MWRender Ogre::TerrainMaterialGenerator::Profile* const activeProfile = mTerrainGlobals->getDefaultMaterialGenerator() ->getActiveProfile(); - TerrainMaterialGeneratorB::SM2Profile* matProfile = + mActiveProfile = static_cast(activeProfile); //The pixel error should be as high as possible without it being noticed - //as it governs how fast mesh quality decreases. 16 was just about Ok - //when tested at the small swamp pond in Seyda Neen - mTerrainGlobals->setMaxPixelError(16); + //as it governs how fast mesh quality decreases. + mTerrainGlobals->setMaxPixelError(8); mTerrainGlobals->setLayerBlendMapSize(32); mTerrainGlobals->setLightMapSize(256); @@ -47,12 +46,11 @@ namespace MWRender //this seemed the distance where it wasn't too noticeable mTerrainGlobals->setCompositeMapDistance(mWorldSize*2); - matProfile->setLightmapEnabled(false); - matProfile->setLayerSpecularMappingEnabled(false); - matProfile->setLayerNormalMappingEnabled(false); - matProfile->setLayerParallaxMappingEnabled(false); - matProfile->setReceiveDynamicShadowsEnabled(false); - matProfile->setGlobalColourMapEnabled(true); + mActiveProfile->setLightmapEnabled(false); + mActiveProfile->setLayerSpecularMappingEnabled(false); + mActiveProfile->setLayerNormalMappingEnabled(false); + mActiveProfile->setLayerParallaxMappingEnabled(false); + mActiveProfile->setReceiveDynamicShadowsEnabled(false); mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, Ogre::Terrain::ALIGN_X_Z, @@ -156,15 +154,25 @@ namespace MWRender numTextures, indexes); + // disable or enable global colour map (depends on available vertex colours) if ( store->land[1][1]->landData->usingColours ) - { + mActiveProfile->setGlobalColourMapEnabled(true); + else + mActiveProfile->setGlobalColourMapEnabled(false); + + /// \todo are we possibly generating the materials twice? + mActiveProfile->generate(terrain); + mActiveProfile->generateForCompositeMap(terrain); + + if ( store->land[1][1]->landData->usingColours ) + { Ogre::TexturePtr vertex = getVertexColours(store, x*(mLandSize-1), y*(mLandSize-1), mLandSize); //this is a hack to get around the fact that Ogre seems to - //corrupt the composite map leading to rendering errors + //corrupt the global colour map leading to rendering errors MaterialPtr mat = terrain->_getMaterial(); mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); mat = terrain->_getCompositeMapMaterial(); diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 6d98655400..397c0c473f 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -2,6 +2,7 @@ #define _GAME_RENDER_TERRAIN_H #include +#include "terrainmaterial.hpp" #include "../mwworld/ptr.hpp" @@ -34,6 +35,8 @@ namespace MWRender{ Ogre::TerrainGlobalOptions* mTerrainGlobals; Ogre::TerrainGroup* mTerrainGroup; + Ogre::TerrainMaterialGeneratorB::SM2Profile* mActiveProfile; + /** * The length in verticies of a single terrain block. */ diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 0edc23a71b..67ebf45af6 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -134,7 +134,7 @@ namespace Ogre if (enabled != mGlobalColourMapEnabled) { mGlobalColourMapEnabled = enabled; - mParent->_markChanged(); + //mParent->_markChanged(); } } //--------------------------------------------------------------------- @@ -359,7 +359,7 @@ namespace Ogre tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); // global colour map - //if (terrain->getGlobalColourMapEnabled() && isGlobalColourMapEnabled()) + if (isGlobalColourMapEnabled()) { tu = pass->createTextureUnitState(""); tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); @@ -1004,7 +1004,7 @@ namespace Ogre "uniform sampler2D globalNormal : register(s" << currentSamplerIdx++ << ")\n"; - //if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + if (prof->isGlobalColourMapEnabled()) { outStream << ", uniform sampler2D globalColourMap : register(s" << currentSamplerIdx++ << ")\n"; @@ -1299,7 +1299,7 @@ namespace Ogre } else { - //if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled()) + if (prof->isGlobalColourMapEnabled()) { // sample colour map and apply to diffuse outStream << " diffuse *= tex2D(globalColourMap, uv).rgb;\n"; From a8939bc3180a8475be9dd38878228c924a31e9b0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 4 Mar 2012 00:08:56 +0100 Subject: [PATCH 037/488] disabled the composite map, improves loading time a lot --- apps/openmw/mwrender/terrain.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index ca218388f5..a66b4ad3f0 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -51,6 +51,7 @@ namespace MWRender mActiveProfile->setLayerNormalMappingEnabled(false); mActiveProfile->setLayerParallaxMappingEnabled(false); mActiveProfile->setReceiveDynamicShadowsEnabled(false); + mActiveProfile->setCompositeMapEnabled(false); mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, Ogre::Terrain::ALIGN_X_Z, @@ -160,10 +161,6 @@ namespace MWRender else mActiveProfile->setGlobalColourMapEnabled(false); - /// \todo are we possibly generating the materials twice? - mActiveProfile->generate(terrain); - mActiveProfile->generateForCompositeMap(terrain); - if ( store->land[1][1]->landData->usingColours ) { Ogre::TexturePtr vertex = getVertexColours(store, @@ -173,10 +170,10 @@ namespace MWRender //this is a hack to get around the fact that Ogre seems to //corrupt the global colour map leading to rendering errors - MaterialPtr mat = terrain->_getMaterial(); - mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); - mat = terrain->_getCompositeMapMaterial(); + MaterialPtr mat = terrain->getMaterial(); mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); + //mat = terrain->_getCompositeMapMaterial(); + //mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); } } } From bcd2371baa318b9393ccec684a34d1b1a5bc3f53 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Sun, 4 Mar 2012 11:21:47 +0000 Subject: [PATCH 038/488] Code cleanup: Removed unneeded Ogre namespace --- apps/openmw/mwrender/terrain.cpp | 56 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 9cc0a9f370..3db5dfc8cb 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -15,16 +15,16 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - TerrainManager::TerrainManager(Ogre::SceneManager* mgr) + TerrainManager::TerrainManager(SceneManager* mgr) { - mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions(); + mTerrainGlobals = OGRE_NEW TerrainGlobalOptions(); - Ogre::TerrainMaterialGeneratorPtr matGen; + TerrainMaterialGeneratorPtr matGen; TerrainMaterialGeneratorB* matGenP = new TerrainMaterialGeneratorB(); matGen.bind(matGenP); mTerrainGlobals->setDefaultMaterialGenerator(matGen); - Ogre::TerrainMaterialGenerator::Profile* const activeProfile = + TerrainMaterialGenerator::Profile* const activeProfile = mTerrainGlobals->getDefaultMaterialGenerator() ->getActiveProfile(); TerrainMaterialGeneratorB::SM2Profile* matProfile = @@ -54,16 +54,16 @@ namespace MWRender matProfile->setReceiveDynamicShadowsEnabled(false); matProfile->setGlobalColourMapEnabled(true); - mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mgr, - Ogre::Terrain::ALIGN_X_Z, + mTerrainGroup = OGRE_NEW TerrainGroup(mgr, + Terrain::ALIGN_X_Z, mLandSize, mWorldSize); - mTerrainGroup->setOrigin(Ogre::Vector3(mWorldSize/2, + mTerrainGroup->setOrigin(Vector3(mWorldSize/2, 0, -mWorldSize/2)); - Ogre::Terrain::ImportData& importSettings = + Terrain::ImportData& importSettings = mTerrainGroup->getDefaultImportSettings(); importSettings.inputBias = 0; @@ -85,14 +85,14 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - void TerrainManager::setDiffuse(const Ogre::ColourValue& diffuse) + void TerrainManager::setDiffuse(const ColourValue& diffuse) { mTerrainGlobals->setCompositeMapDiffuse(diffuse); } //---------------------------------------------------------------------------------------------- - void TerrainManager::setAmbient(const Ogre::ColourValue& ambient) + void TerrainManager::setAmbient(const ColourValue& ambient) { mTerrainGlobals->setCompositeMapAmbient(ambient); } @@ -112,7 +112,7 @@ namespace MWRender { for ( int y = 0; y < 2; y++ ) { - Ogre::Terrain::ImportData terrainData = + Terrain::ImportData terrainData = mTerrainGroup->getDefaultImportSettings(); const int terrainX = cellX * 2 + x; @@ -120,10 +120,10 @@ namespace MWRender //it makes far more sense to reallocate the memory here, //and let Ogre deal with it due to the issues with deleting - //it at the wrong time if using threads (Which Ogre::Terrain does) + //it at the wrong time if using threads (Which Terrain does) terrainData.inputFloat = OGRE_ALLOC_T(float, mLandSize*mLandSize, - Ogre::MEMCATEGORY_GEOMETRY); + MEMCATEGORY_GEOMETRY); //copy the height data row by row for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) @@ -150,7 +150,7 @@ namespace MWRender mTerrainGroup->loadTerrain(terrainX, terrainY, true); - Ogre::Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); initTerrainBlendMaps(terrain, store, x * numTextures, y * numTextures, numTextures, @@ -158,7 +158,7 @@ namespace MWRender if ( store->land[1][1]->landData->usingColours ) { - Ogre::TexturePtr vertex = getVertexColours(store, + TexturePtr vertex = getVertexColours(store, x*(mLandSize-1), y*(mLandSize-1), mLandSize); @@ -193,7 +193,7 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - void TerrainManager::initTerrainTextures(Ogre::Terrain::ImportData* terrainData, + void TerrainManager::initTerrainTextures(Terrain::ImportData* terrainData, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, std::map& indexes) @@ -257,7 +257,7 @@ namespace MWRender } const size_t position = terrainData->layerList.size(); - terrainData->layerList.push_back(Ogre::Terrain::LayerInstance()); + terrainData->layerList.push_back(Terrain::LayerInstance()); terrainData->layerList[position].worldSize = 256; terrainData->layerList[position].textureNames.push_back("textures\\" + texture); @@ -276,7 +276,7 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - void TerrainManager::initTerrainBlendMaps(Ogre::Terrain* terrain, + void TerrainManager::initTerrainBlendMaps(Terrain* terrain, MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size, const std::map& indexes) @@ -361,7 +361,7 @@ namespace MWRender for ( int i = 1; i < terrain->getLayerCount(); i++ ) { - Ogre::TerrainLayerBlendMap* blend = terrain->getLayerBlendMap(i); + TerrainLayerBlendMap* blend = terrain->getLayerBlendMap(i); blend->dirty(); blend->update(); } @@ -418,10 +418,10 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - Ogre::TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, + TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, int fromX, int fromY, int size) { - Ogre::TextureManager* const texMgr = Ogre::TextureManager::getSingletonPtr(); + TextureManager* const texMgr = TextureManager::getSingletonPtr(); const std::string colourTextureName = "VtexColours_" + boost::lexical_cast(store->cell->getGridX()) + @@ -432,22 +432,22 @@ namespace MWRender "_" + boost::lexical_cast(fromY); - Ogre::TexturePtr tex = texMgr->getByName(colourTextureName); + TexturePtr tex = texMgr->getByName(colourTextureName); if ( !tex.isNull() ) { return tex; } tex = texMgr->createManual(colourTextureName, - Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - Ogre::TEX_TYPE_2D, size, size, 0, Ogre::PF_BYTE_BGR); + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + TEX_TYPE_2D, size, size, 0, PF_BYTE_BGR); - Ogre::HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); + HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); - pixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD); - const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock(); + pixelBuffer->lock(HardwareBuffer::HBL_DISCARD); + const PixelBox& pixelBox = pixelBuffer->getCurrentLock(); - Ogre::uint8* pDest = static_cast(pixelBox.data); + uint8* pDest = static_cast(pixelBox.data); const char* const colours = store->land[1][1]->landData->colours; for ( int y = 0; y < size; y++ ) From eca91d17bb823a6f0fda3b88764b9a8a8c84274a Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Sun, 4 Mar 2012 11:46:33 +0000 Subject: [PATCH 039/488] Indentation tweaks and code cleanup --- apps/openmw/mwrender/terrain.cpp | 42 +++++++++++++++----------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index d9e6c1cf60..64acd9fe38 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -27,17 +27,14 @@ namespace MWRender TerrainMaterialGenerator::Profile* const activeProfile = mTerrainGlobals->getDefaultMaterialGenerator() ->getActiveProfile(); - mActiveProfile = - static_cast(activeProfile); + mActiveProfile = static_cast(activeProfile); //The pixel error should be as high as possible without it being noticed //as it governs how fast mesh quality decreases. mTerrainGlobals->setMaxPixelError(8); mTerrainGlobals->setLayerBlendMapSize(32); - mTerrainGlobals->setLightMapSize(256); - mTerrainGlobals->setCompositeMapSize(256); - mTerrainGlobals->setDefaultGlobalColourMapSize(256); + mTerrainGlobals->setDefaultGlobalColourMapSize(65); //10 (default) didn't seem to be quite enough mTerrainGlobals->setSkirtSize(128); @@ -51,19 +48,21 @@ namespace MWRender mActiveProfile->setLayerNormalMappingEnabled(false); mActiveProfile->setLayerParallaxMappingEnabled(false); mActiveProfile->setReceiveDynamicShadowsEnabled(false); + + //composite maps lead to a drastic reduction in loading time so are + //disabled mActiveProfile->setCompositeMapEnabled(false); mTerrainGroup = OGRE_NEW TerrainGroup(mgr, - Terrain::ALIGN_X_Z, - mLandSize, - mWorldSize); + Terrain::ALIGN_X_Z, + mLandSize, + mWorldSize); mTerrainGroup->setOrigin(Vector3(mWorldSize/2, - 0, - -mWorldSize/2)); + 0, + -mWorldSize/2)); - Terrain::ImportData& importSettings = - mTerrainGroup->getDefaultImportSettings(); + Terrain::ImportData& importSettings = mTerrainGroup->getDefaultImportSettings(); importSettings.inputBias = 0; importSettings.terrainSize = mLandSize; @@ -103,7 +102,6 @@ namespace MWRender const int cellX = store->cell->getGridX(); const int cellY = store->cell->getGridY(); - //split the cell terrain into four segments const int numTextures = ESM::Land::LAND_TEXTURE_SIZE/2; @@ -155,18 +153,14 @@ namespace MWRender numTextures, indexes); - // disable or enable global colour map (depends on available vertex colours) if ( store->land[1][1]->landData->usingColours ) + { + // disable or enable global colour map (depends on available vertex colours) mActiveProfile->setGlobalColourMapEnabled(true); - else - mActiveProfile->setGlobalColourMapEnabled(false); - - if ( store->land[1][1]->landData->usingColours ) - { TexturePtr vertex = getVertexColours(store, - x*(mLandSize-1), - y*(mLandSize-1), - mLandSize); + x*(mLandSize-1), + y*(mLandSize-1), + mLandSize); //this is a hack to get around the fact that Ogre seems to //corrupt the global colour map leading to rendering errors @@ -175,6 +169,10 @@ namespace MWRender //mat = terrain->_getCompositeMapMaterial(); //mat->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName( vertex->getName() ); } + else + { + mActiveProfile->setGlobalColourMapEnabled(false); + } } } } From 5328853445fbe2dc7b35df12e06167b973ea803e Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Thu, 8 Mar 2012 01:03:46 +0400 Subject: [PATCH 040/488] Feature #37 (In Progress) Render Path Grid added "togglepathgrid" script command --- CMakeLists.txt | 10 +++++-- apps/openmw/mwscript/docs/vmformat.txt | 5 ++-- apps/openmw/mwscript/miscextensions.cpp | 36 +++++++++++++++++++------ apps/openmw/mwworld/world.hpp | 15 ++++++----- 4 files changed, 47 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e116d8759..60731c092e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,8 +255,14 @@ if (APPLE) "${APP_BUNDLE_DIR}/Contents/Resources/OpenMW.icns" COPYONLY) # prepare plugins - if (${CMAKE_BUILD_TYPE} MATCHES "Release" OR - ${CMAKE_BUILD_TYPE} MATCHES "RelWithDebugInfo") + if (${CMAKE_BUILD_TYPE} MATCHES "Release") + set(OPENMW_RELEASE_BUILD 1) + endif() + if (${CMAKE_BUILD_TYPE} MATCHES "Release") + set(OPENMW_RELEASE_BUILD 1) + endif() + + if (${OPENMW_RELEASE_BUILD}) set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_REL}) else() set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_DBG}) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 09b0c04825..efdc63a2d8 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -115,10 +115,11 @@ op 0x2000136: GetPCCell op 0x2000137: GetButtonPressed op 0x2000138: SkipAnim op 0x2000139: SkipAnim, expplicit reference -op 0x200013b: twf +op 0x200013b: ToggleWireframe op 0x200013c: FadeIn op 0x200013d: FadeOut op 0x200013e: FadeTo op 0x200013f: GetCurrentWeather op 0x2000140: ChangeWeather -opcodes 0x2000141-0x3ffffff unused +op 0x2000141: TogglePathgrid +opcodes 0x2000142-0x3ffffff unused diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 5bfffd3a26..45189e698e 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -106,7 +106,7 @@ namespace MWScript "Collision Mesh Rendering -> On" : "Collision Mesh Rendering -> Off"); } }; - + class OpToggleWireframe : public Interpreter::Opcode0 { public: @@ -123,7 +123,23 @@ namespace MWScript "Wireframe Rendering -> On" : "Wireframe Rendering -> Off"); } }; - + + class OpTogglePathgrind : 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 ? + "Path Grid rendering -> On" : "Path Grid Rendering -> Off"); + } + }; + class OpFadeIn : public Interpreter::Opcode0 { public: @@ -135,11 +151,11 @@ namespace MWScript Interpreter::Type_Float time = runtime[0].mFloat; runtime.pop(); - + context.getWorld().getFader()->fadeIn(time); } }; - + class OpFadeOut : public Interpreter::Opcode0 { public: @@ -151,11 +167,11 @@ namespace MWScript Interpreter::Type_Float time = runtime[0].mFloat; runtime.pop(); - + context.getWorld().getFader()->fadeOut(time); } }; - + class OpFadeTo : public Interpreter::Opcode0 { public: @@ -167,10 +183,10 @@ namespace MWScript Interpreter::Type_Float alpha = runtime[0].mFloat; runtime.pop(); - + Interpreter::Type_Float time = runtime[0].mFloat; runtime.pop(); - + context.getWorld().getFader()->fadeTo(alpha, time); } }; @@ -187,6 +203,7 @@ namespace MWScript const int opcodeFadeIn = 0x200013c; const int opcodeFadeOut = 0x200013d; const int opcodeFadeTo = 0x200013e; + const int opcodeTogglePathgrid = 0x2000141; void registerExtensions (Compiler::Extensions& extensions) { @@ -204,6 +221,8 @@ namespace MWScript extensions.registerInstruction ("fadein", "f", opcodeFadeIn); extensions.registerInstruction ("fadeout", "f", opcodeFadeOut); extensions.registerInstruction ("fadeto", "ff", opcodeFadeTo); + extensions.registerInstruction ("togglepathgrid", "", opcodeTogglePathgrid); + extensions.registerInstruction ("tpg", "", opcodeTogglePathgrid); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -220,6 +239,7 @@ namespace MWScript interpreter.installSegment5 (opcodeFadeIn, new OpFadeIn); interpreter.installSegment5 (opcodeFadeOut, new OpFadeOut); interpreter.installSegment5 (opcodeFadeTo, new OpFadeTo); + interpreter.installSegment5 (opcodeTogglePathgrid, new OpTogglePathgrind); } } } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 71cca3545d..bd62be4159 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -63,13 +63,14 @@ namespace MWWorld enum RenderMode { Render_CollisionDebug, - Render_Wireframe + Render_Wireframe, + Render_Pathgrid }; private: MWRender::RenderingManager* mRendering; - + MWWorld::WeatherManager* mWeatherManager; MWWorld::Scene *mWorldScene; @@ -106,13 +107,13 @@ namespace MWWorld Environment& environment, const std::string& encoding); ~World(); - + OEngine::Render::Fader* getFader(); Ptr::CellStore *getExterior (int x, int y); Ptr::CellStore *getInterior (const std::string& name); - + void adjustSky(); MWWorld::Player& getPlayer(); @@ -125,7 +126,7 @@ namespace MWWorld bool hasCellChanged() const; ///< Has the player moved to a different cell, since the last frame? - + bool isCellExterior() const; bool isCellQuasiExterior() const; @@ -163,9 +164,9 @@ namespace MWWorld bool toggleSky(); ///< \return Resulting mode - + void changeWeather(const std::string& region, const unsigned int id); - + int getCurrentWeather() const; int getMasserPhase() const; From 6357adffcf11da817d449a4aefd61a0f026cd89e Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Thu, 8 Mar 2012 01:09:06 +0400 Subject: [PATCH 041/488] Fixed typo --- apps/openmw/mwscript/miscextensions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 45189e698e..36b8df70b9 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -124,7 +124,7 @@ namespace MWScript } }; - class OpTogglePathgrind : public Interpreter::Opcode0 + class OpTogglePathgrid : public Interpreter::Opcode0 { public: virtual void execute (Interpreter::Runtime& runtime) @@ -239,7 +239,7 @@ namespace MWScript interpreter.installSegment5 (opcodeFadeIn, new OpFadeIn); interpreter.installSegment5 (opcodeFadeOut, new OpFadeOut); interpreter.installSegment5 (opcodeFadeTo, new OpFadeTo); - interpreter.installSegment5 (opcodeTogglePathgrid, new OpTogglePathgrind); + interpreter.installSegment5 (opcodeTogglePathgrid, new OpTogglePathgrid); } } } From 11f957a64d677d0b1bed3574dc61eb378e090261 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Thu, 8 Mar 2012 10:46:34 +0400 Subject: [PATCH 042/488] Feature #37 (In Progress) Render Path Grid cubes for path grid points strange crash when trying to get path grids from Debugging --- apps/openmw/mwrender/debugging.cpp | 124 +++++++++++++++++++++- apps/openmw/mwrender/debugging.hpp | 35 ++++-- apps/openmw/mwrender/renderingmanager.cpp | 31 +++--- apps/openmw/mwrender/renderingmanager.hpp | 18 ++-- apps/openmw/mwscript/miscextensions.cpp | 2 +- components/esm_store/cell_store.hpp | 4 + components/esm_store/reclists.hpp | 8 +- 7 files changed, 186 insertions(+), 36 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 60b299acd1..f1e601af52 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -12,27 +12,141 @@ #include "../mwworld/world.hpp" // these includes can be removed once the static-hack is gone #include "../mwworld/ptr.hpp" #include +#include #include "player.hpp" using namespace MWRender; using namespace Ogre; -Debugging::Debugging(OEngine::Physic::PhysicEngine* engine){ - eng = engine; +Debugging::Debugging(const ESMS::ESMStore &store, SceneManager* sceneMgr, OEngine::Physic::PhysicEngine *engine) : + mStore(store), mSceneMgr(sceneMgr), mEngine(engine), pathgridEnabled(false) +{ } bool Debugging::toggleRenderMode (int mode){ - switch (mode) + switch (mode) { case MWWorld::World::Render_CollisionDebug: // TODO use a proper function instead of accessing the member variable // directly. - eng->setDebugRenderingMode (!eng->isDebugCreated); - return eng->isDebugCreated; + mEngine->setDebugRenderingMode (!mEngine->isDebugCreated); + return mEngine->isDebugCreated; + case MWWorld::World::Render_Pathgrid: + togglePathgrid(); + return pathgridEnabled; } return false; } + +void Debugging::cellAdded(MWWorld::Ptr::CellStore *store) +{ + std::cout << "Cell added to debugging" << std::endl; + mActiveCells.push_back(store); + if (pathgridEnabled) + togglePathgridForCell(store, true); +} + +void Debugging::cellRemoved(MWWorld::Ptr::CellStore *store) +{ + mActiveCells.erase(std::remove(mActiveCells.begin(), mActiveCells.end(), store), mActiveCells.end()); + std::cout << "Cell removed from debugging, active cells count: " << mActiveCells.size() << std::endl; + if (pathgridEnabled) + togglePathgridForCell(store, false); +} + +void Debugging::togglePathgrid() +{ + pathgridEnabled = !pathgridEnabled; + if (pathgridEnabled) + { + // add path grid meshes to already loaded cells + mPathGridRoot = mSceneMgr->getRootSceneNode()->createChildSceneNode(); + for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) + { + togglePathgridForCell(*it, true); + } + } + else { + // remove path grid meshes from already loaded cells + for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) + { + togglePathgridForCell(*it, false); + } + mPathGridRoot->removeAndDestroyAllChildren(); + mSceneMgr->destroySceneNode(mPathGridRoot); + } +} + +void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled) +{ + ESM::Pathgrid *pathgrid = mStore.pathgrids.search(*store->cell); + if (!pathgrid) + { + std::cout << "No path grid :(" << std::endl; + return; + } + std::cout << "Path grid exists!" << std::endl; + + if (enabled) + { + Vector3 cellPathGridPos; + if (!(store->cell->data.flags & ESM::Cell::Interior)) + { + /// \todo Replace with ESM::Land::REAL_SIZE after merging with terrain branch + cellPathGridPos.x = store->cell->data.gridX * 8192; + cellPathGridPos.z = -store->cell->data.gridY * 8192; + } + SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); + ESM::Pathgrid::PointList points = pathgrid->points; + for (ESM::Pathgrid::PointList::iterator it = points.begin(); it != points.end(); it++) + { + Vector3 position(it->x, it->z, -it->y); + SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); + pointNode->setScale(0.5, 0.5, 0.5); + Entity *pointMesh = mSceneMgr->createEntity(SceneManager::PT_CUBE); + pointNode->attachObject(pointMesh); + } + + if (!(store->cell->data.flags & ESM::Cell::Interior)) + { + mExteriorPathgridNodes[std::make_pair(store->cell->data.gridX, store->cell->data.gridY)] = cellPathGrid; + } + else + { + assert(mInteriorPathgridNode == NULL); + mInteriorPathgridNode = cellPathGrid; + } + } + else + { + /// \todo Don't forget to destroy cubes too! + SceneNode *cellPathGridNode; + if (!(store->cell->data.flags & ESM::Cell::Interior)) + { + ExteriorPathgridNodes::iterator it = + mExteriorPathgridNodes.find(std::make_pair(store->cell->data.gridX, store->cell->data.gridY)); + if (it != mExteriorPathgridNodes.end()) + { + cellPathGridNode = it->second; + mPathGridRoot->removeChild(cellPathGridNode); + cellPathGridNode->removeAndDestroyAllChildren(); + mSceneMgr->destroySceneNode(cellPathGridNode); + mExteriorPathgridNodes.erase(it); + } + } + else + { + if (mInteriorPathgridNode) + { + mPathGridRoot->removeChild(mInteriorPathgridNode); + mInteriorPathgridNode->removeAndDestroyAllChildren(); + mSceneMgr->destroySceneNode(mInteriorPathgridNode); + mInteriorPathgridNode = NULL; + } + } + } +} diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index b48cfaee2a..2258fec219 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -4,6 +4,7 @@ #include #include #include +#include "../mwworld/ptr.hpp" #include #include @@ -28,14 +29,36 @@ namespace MWRender { class Player; - class Debugging{ - OEngine::Physic::PhysicEngine* eng; + class Debugging + { + OEngine::Physic::PhysicEngine* mEngine; + Ogre::SceneManager* mSceneMgr; + const ESMS::ESMStore& mStore; + // Path grid stuff + bool pathgridEnabled; - public: - Debugging(OEngine::Physic::PhysicEngine* engine); - bool toggleRenderMode (int mode); - }; + void togglePathgrid(); + + typedef std::vector CellList; + + CellList mActiveCells; + + Ogre::SceneNode *mPathGridRoot; + Ogre::SceneNode *mInteriorPathgridNode; + + typedef std::map, Ogre::SceneNode *> ExteriorPathgridNodes; + ExteriorPathgridNodes mExteriorPathgridNodes; + + void togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled); + + public: + Debugging(const ESMS::ESMStore &store, Ogre::SceneManager *mSceneMgr, OEngine::Physic::PhysicEngine* engine); + bool toggleRenderMode (int mode); + + void cellAdded(MWWorld::Ptr::CellStore* store); + void cellRemoved(MWWorld::Ptr::CellStore* store); + }; } diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7b58a80d76..94197108d9 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -20,10 +20,12 @@ using namespace Ogre; namespace MWRender { RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment) -:mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0), mDebugging(engine) + :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0) { mRendering.createScene("PlayerCam", 55, 5); + mDebugging = new Debugging(environment.mWorld->getStore(), mRendering.getScene(), engine); + // Set default mipmap level (NB some APIs ignore this) TextureManager::getSingleton().setDefaultNumMipmaps(5); @@ -40,7 +42,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mMwRoot->pitch(Degree(-90)); mObjects.setMwRoot(mMwRoot); mActors.setMwRoot(mMwRoot); - + //used to obtain ingame information of ogre objects (which are faced or selected) mRaySceneQuery = mRendering.getScene()->createRayQuery(Ray()); @@ -49,7 +51,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); cameraPitchNode->attachObject(mRendering.getCamera()); - + //mSkyManager = 0; mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera()); @@ -62,6 +64,7 @@ RenderingManager::~RenderingManager () //TODO: destroy mSun? delete mPlayer; delete mSkyManager; + delete mDebugging; } MWRender::SkyManager* RenderingManager::getSkyManager() @@ -88,11 +91,13 @@ OEngine::Render::Fader* RenderingManager::getFader() void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ mObjects.removeCell(store); mActors.removeCell(store); + mDebugging->cellRemoved(store); } void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store) { mObjects.buildStaticGeometry (*store); + mDebugging->cellAdded(store); } void RenderingManager::addObject (const MWWorld::Ptr& ptr){ @@ -133,9 +138,9 @@ void RenderingManager::moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Ve void RenderingManager::update (float duration){ mActors.update (duration); - + mSkyManager->update(duration); - + mRendering.update(duration); } @@ -166,7 +171,7 @@ void RenderingManager::skySetDate (int day, int month) int RenderingManager::skyGetMasserPhase() const { - + return mSkyManager->getMasserPhase(); } @@ -182,8 +187,8 @@ void RenderingManager::skySetMoonColour (bool red){ bool RenderingManager::toggleRenderMode(int mode) { - if (mode == MWWorld::World::Render_CollisionDebug) - return mDebugging.toggleRenderMode(mode); + if (mode != MWWorld::World::Render_Wireframe) + return mDebugging->toggleRenderMode(mode); else // if (mode == MWWorld::World::Render_Wireframe) { if (mRendering.getCamera()->getPolygonMode() == PM_SOLID) @@ -208,13 +213,13 @@ void RenderingManager::configureFog(ESMS::CellStore &mCell) } void RenderingManager::configureFog(const float density, const Ogre::ColourValue& colour) -{ +{ /// \todo make the viewing distance and fog start/end configurable float low = 3000 / density; float high = 6200 / density; - + mRendering.getScene()->setFog (FOG_LINEAR, colour, 0, low, high); - + mRendering.getCamera()->setFarClipDistance ( high ); mRendering.getViewport()->setBackgroundColour (colour); } @@ -310,10 +315,10 @@ void RenderingManager::sunDisable() void RenderingManager::setSunDirection(const Ogre::Vector3& direction) { - // direction * -1 (because 'direction' is camera to sun vector and not sun to camera), + // direction * -1 (because 'direction' is camera to sun vector and not sun to camera), // then convert from MW to ogre coordinates (swap y,z and make y negative) if (mSun) mSun->setDirection(Vector3(-direction.x, -direction.z, direction.y)); - + mSkyManager->setSunDirection(direction); } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index d84ee43e00..9be3892727 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -66,7 +66,7 @@ class RenderingManager: private RenderingInterface { void toggleLight(); bool toggleRenderMode(int mode); - + OEngine::Render::Fader* getFader(); void removeCell (MWWorld::Ptr::CellStore *store); @@ -86,13 +86,13 @@ class RenderingManager: private RenderingInterface { void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); void update (float duration); - + void setAmbientColour(const Ogre::ColourValue& colour); void setSunColour(const Ogre::ColourValue& colour); void setSunDirection(const Ogre::Vector3& direction); void sunEnable(); void sunDisable(); - + void setGlare(bool glare); void skyEnable (); void skyDisable (); @@ -102,13 +102,13 @@ class RenderingManager: private RenderingInterface { int skyGetSecundaPhase() const; void skySetMoonColour (bool red); void configureAmbient(ESMS::CellStore &mCell); - + /// configure fog according to cell void configureFog(ESMS::CellStore &mCell); - + /// configure fog manually void configureFog(const float density, const Ogre::ColourValue& colour); - + void playAnimationGroup (const MWWorld::Ptr& ptr, const std::string& groupName, int mode, int number = 1); ///< Run animation for a MW-reference. Calls to this function for references that are currently not @@ -124,9 +124,9 @@ class RenderingManager: private RenderingInterface { private: void setAmbientMode(); - + SkyManager* mSkyManager; - + OEngine::Render::OgreRenderer &mRendering; MWRender::Objects mObjects; @@ -147,7 +147,7 @@ class RenderingManager: private RenderingInterface { OEngine::Physic::PhysicEngine* mPhysicsEngine; MWRender::Player *mPlayer; - MWRender::Debugging mDebugging; + MWRender::Debugging *mDebugging; }; } diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 36b8df70b9..425fa3727d 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -133,7 +133,7 @@ namespace MWScript static_cast (runtime.getContext()); bool enabled = - context.getWorld().toggleRenderMode (MWWorld::World::Render_Wireframe); + context.getWorld().toggleRenderMode (MWWorld::World::Render_Pathgrid); context.report (enabled ? "Path Grid rendering -> On" : "Path Grid Rendering -> Off"); diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index c4bcf84d81..4f5b6b6ec4 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -123,6 +123,8 @@ namespace ESMS CellRefList statics; CellRefList weapons; + ESM::Pathgrid *pathgrid; + void load (const ESMStore &store, ESMReader &esm) { if (mState!=State_Loaded) @@ -134,6 +136,8 @@ namespace ESMS loadRefs (store, esm); + pathgrid = store.pathgrids.search(*cell); + mState = State_Loaded; } } diff --git a/components/esm_store/reclists.hpp b/components/esm_store/reclists.hpp index 4aacf2332b..da6e9b3d5f 100644 --- a/components/esm_store/reclists.hpp +++ b/components/esm_store/reclists.hpp @@ -428,14 +428,16 @@ namespace ESMS if (grid->data.x == 0 && grid->data.y == 0) { intGrids[grid->cell] = grid; + std::cout << "int grids size " << intGrids.size() << std::endl; } else { extGrids[std::make_pair(grid->data.x, grid->data.y)] = grid; + std::cout << "ext grids size " << extGrids.size() << std::endl; } } - Pathgrid *find(int cellX, int cellY, std::string cellName) const + Pathgrid *find(int cellX, int cellY, const std::string &cellName) const { Pathgrid *result = search(cellX, cellY, cellName); if (!result) @@ -445,8 +447,10 @@ namespace ESMS return result; } - Pathgrid *search(int cellX, int cellY, std::string cellName) const + Pathgrid *search(int cellX, int cellY, const std::string &cellName) const { + std::cout << "int grids size " << intGrids.size() << std::endl; + std::cout << "ext grids size " << extGrids.size() << std::endl; Pathgrid *result = NULL; if (cellX == 0 && cellY == 0) // possibly interior { From 4659076129de9185e3b0f6e7d11ff28c1fe9df61 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sat, 10 Mar 2012 20:45:55 +0400 Subject: [PATCH 043/488] Feature #37 (In Progress) Render Path Grid workaround for strange ESMStore bug --- apps/openmw/mwrender/debugging.cpp | 7 ++++--- apps/openmw/mwrender/debugging.hpp | 6 ++++-- apps/openmw/mwrender/renderingmanager.cpp | 2 +- components/esm_store/cell_store.hpp | 4 ---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index f1e601af52..8df4850dbc 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -10,6 +10,7 @@ #include "OgreTextureManager.h" #include "../mwworld/world.hpp" // these includes can be removed once the static-hack is gone +#include "../mwworld/environment.hpp" #include "../mwworld/ptr.hpp" #include #include @@ -19,8 +20,8 @@ using namespace MWRender; using namespace Ogre; -Debugging::Debugging(const ESMS::ESMStore &store, SceneManager* sceneMgr, OEngine::Physic::PhysicEngine *engine) : - mStore(store), mSceneMgr(sceneMgr), mEngine(engine), pathgridEnabled(false) +Debugging::Debugging(MWWorld::Environment &env, SceneManager* sceneMgr, OEngine::Physic::PhysicEngine *engine) : + mEnvironment(env), mSceneMgr(sceneMgr), mEngine(engine), pathgridEnabled(false) { } @@ -83,7 +84,7 @@ void Debugging::togglePathgrid() void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled) { - ESM::Pathgrid *pathgrid = mStore.pathgrids.search(*store->cell); + ESM::Pathgrid *pathgrid = mEnvironment.mWorld->getStore().pathgrids.search(*store->cell); if (!pathgrid) { std::cout << "No path grid :(" << std::endl; diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index 2258fec219..2b47eb773c 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -23,6 +23,7 @@ namespace Ogre namespace MWWorld { class World; + class Environment; } namespace MWRender @@ -33,7 +34,8 @@ namespace MWRender { OEngine::Physic::PhysicEngine* mEngine; Ogre::SceneManager* mSceneMgr; - const ESMS::ESMStore& mStore; + MWWorld::Environment& mEnvironment; + //const ESMS::ESMStore& mStore; // Path grid stuff bool pathgridEnabled; @@ -53,7 +55,7 @@ namespace MWRender void togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled); public: - Debugging(const ESMS::ESMStore &store, Ogre::SceneManager *mSceneMgr, OEngine::Physic::PhysicEngine* engine); + Debugging(MWWorld::Environment &env, Ogre::SceneManager *mSceneMgr, OEngine::Physic::PhysicEngine* engine); bool toggleRenderMode (int mode); void cellAdded(MWWorld::Ptr::CellStore* store); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 94197108d9..4cb8b42fab 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -24,7 +24,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const { mRendering.createScene("PlayerCam", 55, 5); - mDebugging = new Debugging(environment.mWorld->getStore(), mRendering.getScene(), engine); + mDebugging = new Debugging(environment, mRendering.getScene(), engine); // Set default mipmap level (NB some APIs ignore this) TextureManager::getSingleton().setDefaultNumMipmaps(5); diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index 4f5b6b6ec4..c4bcf84d81 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -123,8 +123,6 @@ namespace ESMS CellRefList statics; CellRefList weapons; - ESM::Pathgrid *pathgrid; - void load (const ESMStore &store, ESMReader &esm) { if (mState!=State_Loaded) @@ -136,8 +134,6 @@ namespace ESMS loadRefs (store, esm); - pathgrid = store.pathgrids.search(*cell); - mState = State_Loaded; } } From 387c84e60631399ac86dcd24e4b5cd53e4bd510d Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 11 Mar 2012 18:46:32 +0400 Subject: [PATCH 044/488] small fix in CMakeLists, thx ace13 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60731c092e..ce03542904 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -258,7 +258,7 @@ if (APPLE) if (${CMAKE_BUILD_TYPE} MATCHES "Release") set(OPENMW_RELEASE_BUILD 1) endif() - if (${CMAKE_BUILD_TYPE} MATCHES "Release") + if (${CMAKE_BUILD_TYPE} MATCHES "RelWithDebugInfo") set(OPENMW_RELEASE_BUILD 1) endif() From f292a5a7ca8295d61b6bf6c9f6fd9850b750ae6c Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Mon, 12 Mar 2012 02:12:56 +0400 Subject: [PATCH 045/488] Feature #37 (In Progress) Render Path Grid now using mwRoot instead of ogre's root, so no more messing with coordinates. --- apps/openmw/mwrender/debugging.cpp | 55 ++++++++++++++--------- apps/openmw/mwrender/debugging.hpp | 8 ++-- apps/openmw/mwrender/renderingmanager.cpp | 4 +- components/esm_store/reclists.hpp | 4 -- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 8df4850dbc..ebaab5703f 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -2,12 +2,8 @@ #include -#include "OgreRoot.h" -#include "OgreRenderWindow.h" -#include "OgreSceneManager.h" -#include "OgreViewport.h" -#include "OgreCamera.h" -#include "OgreTextureManager.h" +#include +#include #include "../mwworld/world.hpp" // these includes can be removed once the static-hack is gone #include "../mwworld/environment.hpp" @@ -20,8 +16,11 @@ using namespace MWRender; using namespace Ogre; -Debugging::Debugging(MWWorld::Environment &env, SceneManager* sceneMgr, OEngine::Physic::PhysicEngine *engine) : - mEnvironment(env), mSceneMgr(sceneMgr), mEngine(engine), pathgridEnabled(false) +Debugging::Debugging(SceneNode *mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine) : + mMwRoot(mwRoot), mEnvironment(env), mEngine(engine), + mSceneMgr(mwRoot->getCreator()), + pathgridEnabled(false), + mInteriorPathgridNode(NULL), mPathGridRoot(NULL) { } @@ -65,7 +64,7 @@ void Debugging::togglePathgrid() if (pathgridEnabled) { // add path grid meshes to already loaded cells - mPathGridRoot = mSceneMgr->getRootSceneNode()->createChildSceneNode(); + mPathGridRoot = mMwRoot->createChildSceneNode(); for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) { togglePathgridForCell(*it, true); @@ -79,6 +78,7 @@ void Debugging::togglePathgrid() } mPathGridRoot->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(mPathGridRoot); + mPathGridRoot = NULL; } } @@ -87,25 +87,24 @@ void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabl ESM::Pathgrid *pathgrid = mEnvironment.mWorld->getStore().pathgrids.search(*store->cell); if (!pathgrid) { - std::cout << "No path grid :(" << std::endl; return; } - std::cout << "Path grid exists!" << std::endl; if (enabled) { Vector3 cellPathGridPos; + /// \todo replace tests like this with isExterior method of ESM::Cell after merging with terrain branch if (!(store->cell->data.flags & ESM::Cell::Interior)) { /// \todo Replace with ESM::Land::REAL_SIZE after merging with terrain branch cellPathGridPos.x = store->cell->data.gridX * 8192; - cellPathGridPos.z = -store->cell->data.gridY * 8192; + cellPathGridPos.y = store->cell->data.gridY * 8192; } SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); ESM::Pathgrid::PointList points = pathgrid->points; for (ESM::Pathgrid::PointList::iterator it = points.begin(); it != points.end(); it++) { - Vector3 position(it->x, it->z, -it->y); + Vector3 position(it->x, it->y, it->z); SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); pointNode->setScale(0.5, 0.5, 0.5); Entity *pointMesh = mSceneMgr->createEntity(SceneManager::PT_CUBE); @@ -124,18 +123,13 @@ void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabl } else { - /// \todo Don't forget to destroy cubes too! - SceneNode *cellPathGridNode; if (!(store->cell->data.flags & ESM::Cell::Interior)) { ExteriorPathgridNodes::iterator it = mExteriorPathgridNodes.find(std::make_pair(store->cell->data.gridX, store->cell->data.gridY)); if (it != mExteriorPathgridNodes.end()) { - cellPathGridNode = it->second; - mPathGridRoot->removeChild(cellPathGridNode); - cellPathGridNode->removeAndDestroyAllChildren(); - mSceneMgr->destroySceneNode(cellPathGridNode); + destroyCellPathgridNode(it->second); mExteriorPathgridNodes.erase(it); } } @@ -143,11 +137,28 @@ void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabl { if (mInteriorPathgridNode) { - mPathGridRoot->removeChild(mInteriorPathgridNode); - mInteriorPathgridNode->removeAndDestroyAllChildren(); - mSceneMgr->destroySceneNode(mInteriorPathgridNode); + destroyCellPathgridNode(mInteriorPathgridNode); mInteriorPathgridNode = NULL; } } } } + +void Debugging::destroyCellPathgridNode(SceneNode *node) +{ + mPathGridRoot->removeChild(node); + + SceneNode::ChildNodeIterator childIt = node->getChildIterator(); + while (childIt.hasMoreElements()) + { + SceneNode *child = static_cast(childIt.getNext()); + SceneNode::ObjectIterator objIt = child->getAttachedObjectIterator(); + while (objIt.hasMoreElements()) + { + MovableObject *mesh = static_cast(objIt.getNext()); + child->getCreator()->destroyMovableObject(mesh); + } + } + node->removeAndDestroyAllChildren(); + mSceneMgr->destroySceneNode(node); +} diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index 2b47eb773c..eb592b98d9 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -33,9 +33,8 @@ namespace MWRender class Debugging { OEngine::Physic::PhysicEngine* mEngine; - Ogre::SceneManager* mSceneMgr; + Ogre::SceneManager *mSceneMgr; MWWorld::Environment& mEnvironment; - //const ESMS::ESMStore& mStore; // Path grid stuff bool pathgridEnabled; @@ -46,6 +45,7 @@ namespace MWRender CellList mActiveCells; + Ogre::SceneNode *mMwRoot; Ogre::SceneNode *mPathGridRoot; Ogre::SceneNode *mInteriorPathgridNode; @@ -54,8 +54,10 @@ namespace MWRender void togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled); + void destroyCellPathgridNode(Ogre::SceneNode *node); + public: - Debugging(MWWorld::Environment &env, Ogre::SceneManager *mSceneMgr, OEngine::Physic::PhysicEngine* engine); + Debugging(Ogre::SceneNode* mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine); bool toggleRenderMode (int mode); void cellAdded(MWWorld::Ptr::CellStore* store); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4cb8b42fab..8880122802 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -24,8 +24,6 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const { mRendering.createScene("PlayerCam", 55, 5); - mDebugging = new Debugging(environment, mRendering.getScene(), engine); - // Set default mipmap level (NB some APIs ignore this) TextureManager::getSingleton().setDefaultNumMipmaps(5); @@ -57,6 +55,8 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mPlayer = new MWRender::Player (mRendering.getCamera(), playerNode); mSun = 0; + + mDebugging = new Debugging(mMwRoot, environment, engine); } RenderingManager::~RenderingManager () diff --git a/components/esm_store/reclists.hpp b/components/esm_store/reclists.hpp index da6e9b3d5f..f2c07dda5e 100644 --- a/components/esm_store/reclists.hpp +++ b/components/esm_store/reclists.hpp @@ -428,12 +428,10 @@ namespace ESMS if (grid->data.x == 0 && grid->data.y == 0) { intGrids[grid->cell] = grid; - std::cout << "int grids size " << intGrids.size() << std::endl; } else { extGrids[std::make_pair(grid->data.x, grid->data.y)] = grid; - std::cout << "ext grids size " << extGrids.size() << std::endl; } } @@ -449,8 +447,6 @@ namespace ESMS Pathgrid *search(int cellX, int cellY, const std::string &cellName) const { - std::cout << "int grids size " << intGrids.size() << std::endl; - std::cout << "ext grids size " << extGrids.size() << std::endl; Pathgrid *result = NULL; if (cellX == 0 && cellY == 0) // possibly interior { From d22678faab028d31283d4ef0ccbd26c14f19d5ef Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 13 Mar 2012 17:14:02 +0100 Subject: [PATCH 046/488] fixed wrong merge --- CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc1dea25ca..18c312229d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,6 +255,20 @@ if (APPLE) configure_file(${OpenMW_SOURCE_DIR}/files/mac/openmw.icns "${APP_BUNDLE_DIR}/Contents/Resources/OpenMW.icns" COPYONLY) + # prepare plugins + if (${CMAKE_BUILD_TYPE} MATCHES "Release") + set(OPENMW_RELEASE_BUILD 1) + endif() + if (${CMAKE_BUILD_TYPE} MATCHES "RelWithDebugInfo") + set(OPENMW_RELEASE_BUILD 1) + endif() + + if (${OPENMW_RELEASE_BUILD}) + set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_REL}) + else() + set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_DBG}) + endif() + foreach(plugin ${USED_OGRE_PLUGINS}) configure_file("${OGRE_PLUGIN_DIR}/${plugin}.dylib" "${APP_BUNDLE_DIR}/Contents/Plugins/${plugin}.dylib" From 3a705baa29c9887057a20ee5f4586121e53efee9 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Wed, 14 Mar 2012 03:06:56 +0400 Subject: [PATCH 047/488] Feature #37 (In Progress) Render Path Grid added simple pathgrid edges --- apps/openmw/mwrender/debugging.cpp | 162 +++++++++++++++++++---------- apps/openmw/mwrender/debugging.hpp | 6 +- 2 files changed, 113 insertions(+), 55 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index ebaab5703f..3b01d4b36c 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -13,15 +13,51 @@ #include "player.hpp" -using namespace MWRender; using namespace Ogre; +namespace MWRender +{ + +static const std::string PATHGRID_LINE_MATERIAL = "pathgridLineMaterial"; +static const std::string DEBUGGING_GROUP = "debugging"; + +ManualObject *createPathgridLine(SceneManager* sceneMgr, const Vector3& from, const Vector3& to) +{ + ManualObject *line = sceneMgr->createManualObject(); + if (MaterialManager::getSingleton().getByName(PATHGRID_LINE_MATERIAL, DEBUGGING_GROUP).isNull()) + { + MaterialPtr lineMatPtr = MaterialManager::getSingleton().create(PATHGRID_LINE_MATERIAL, DEBUGGING_GROUP); + lineMatPtr->setReceiveShadows(false); + lineMatPtr->getTechnique(0)->setLightingEnabled(true); + lineMatPtr->getTechnique(0)->getPass(0)->setDiffuse(1,1,0,0); + lineMatPtr->getTechnique(0)->getPass(0)->setAmbient(1,1,0); + lineMatPtr->getTechnique(0)->getPass(0)->setSelfIllumination(1,1,0); + } + + line->begin(PATHGRID_LINE_MATERIAL, Ogre::RenderOperation::OT_LINE_LIST); + line->position(from); + line->position(to); + line->end(); + + return line; +} + +ManualObject *createPathgridPoint(SceneManager* sceneMgr, const Vector3& pos) +{ +} + Debugging::Debugging(SceneNode *mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine) : mMwRoot(mwRoot), mEnvironment(env), mEngine(engine), mSceneMgr(mwRoot->getCreator()), pathgridEnabled(false), mInteriorPathgridNode(NULL), mPathGridRoot(NULL) { + ResourceGroupManager::getSingleton().createResourceGroup(DEBUGGING_GROUP); +} + +Debugging::~Debugging() +{ + ResourceGroupManager::getSingleton().destroyResourceGroup(DEBUGGING_GROUP); } @@ -47,7 +83,7 @@ void Debugging::cellAdded(MWWorld::Ptr::CellStore *store) std::cout << "Cell added to debugging" << std::endl; mActiveCells.push_back(store); if (pathgridEnabled) - togglePathgridForCell(store, true); + enableCellPathgrid(store); } void Debugging::cellRemoved(MWWorld::Ptr::CellStore *store) @@ -55,7 +91,7 @@ void Debugging::cellRemoved(MWWorld::Ptr::CellStore *store) mActiveCells.erase(std::remove(mActiveCells.begin(), mActiveCells.end(), store), mActiveCells.end()); std::cout << "Cell removed from debugging, active cells count: " << mActiveCells.size() << std::endl; if (pathgridEnabled) - togglePathgridForCell(store, false); + disableCellPathgrid(store); } void Debugging::togglePathgrid() @@ -67,14 +103,14 @@ void Debugging::togglePathgrid() mPathGridRoot = mMwRoot->createChildSceneNode(); for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) { - togglePathgridForCell(*it, true); + enableCellPathgrid(*it); } } else { // remove path grid meshes from already loaded cells for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) { - togglePathgridForCell(*it, false); + disableCellPathgrid(*it); } mPathGridRoot->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(mPathGridRoot); @@ -82,7 +118,7 @@ void Debugging::togglePathgrid() } } -void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled) +void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) { ESM::Pathgrid *pathgrid = mEnvironment.mWorld->getStore().pathgrids.search(*store->cell); if (!pathgrid) @@ -90,56 +126,65 @@ void Debugging::togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabl return; } - if (enabled) + Vector3 cellPathGridPos; + /// \todo replace tests like this with isExterior method of ESM::Cell after merging with terrain branch + if (!(store->cell->data.flags & ESM::Cell::Interior)) { - Vector3 cellPathGridPos; - /// \todo replace tests like this with isExterior method of ESM::Cell after merging with terrain branch - if (!(store->cell->data.flags & ESM::Cell::Interior)) - { - /// \todo Replace with ESM::Land::REAL_SIZE after merging with terrain branch - cellPathGridPos.x = store->cell->data.gridX * 8192; - cellPathGridPos.y = store->cell->data.gridY * 8192; - } - SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); - ESM::Pathgrid::PointList points = pathgrid->points; - for (ESM::Pathgrid::PointList::iterator it = points.begin(); it != points.end(); it++) - { - Vector3 position(it->x, it->y, it->z); - SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); - pointNode->setScale(0.5, 0.5, 0.5); - Entity *pointMesh = mSceneMgr->createEntity(SceneManager::PT_CUBE); - pointNode->attachObject(pointMesh); - } + /// \todo Replace with ESM::Land::REAL_SIZE after merging with terrain branch + cellPathGridPos.x = store->cell->data.gridX * 8192; + cellPathGridPos.y = store->cell->data.gridY * 8192; + } + SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); + ESM::Pathgrid::PointList points = pathgrid->points; + for (ESM::Pathgrid::PointList::iterator it = points.begin(); it != points.end(); it++) + { + Vector3 position(it->x, it->y, it->z); + SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); + pointNode->setScale(0.5, 0.5, 0.5); + Entity *pointMesh = mSceneMgr->createEntity(SceneManager::PT_CUBE); + pointNode->attachObject(pointMesh); + } - if (!(store->cell->data.flags & ESM::Cell::Interior)) + ESM::Pathgrid::EdgeList edges = pathgrid->edges; + for(ESM::Pathgrid::EdgeList::const_iterator it = edges.begin(); + it != edges.end(); it++) + { + ESM::Pathgrid::Edge edge = *it; + ESM::Pathgrid::Point p1 = points[edge.v0], p2 = points[edge.v1]; + cellPathGrid->attachObject(createPathgridLine(cellPathGrid->getCreator(), + Vector3(p1.x, p1.y, p1.z), + Vector3(p2.x, p2.y, p2.z))); + } + + if (!(store->cell->data.flags & ESM::Cell::Interior)) + { + mExteriorPathgridNodes[std::make_pair(store->cell->data.gridX, store->cell->data.gridY)] = cellPathGrid; + } + else + { + assert(mInteriorPathgridNode == NULL); + mInteriorPathgridNode = cellPathGrid; + } +} + +void Debugging::disableCellPathgrid(MWWorld::Ptr::CellStore *store) +{ + if (!(store->cell->data.flags & ESM::Cell::Interior)) + { + ExteriorPathgridNodes::iterator it = + mExteriorPathgridNodes.find(std::make_pair(store->cell->data.gridX, store->cell->data.gridY)); + if (it != mExteriorPathgridNodes.end()) { - mExteriorPathgridNodes[std::make_pair(store->cell->data.gridX, store->cell->data.gridY)] = cellPathGrid; - } - else - { - assert(mInteriorPathgridNode == NULL); - mInteriorPathgridNode = cellPathGrid; + destroyCellPathgridNode(it->second); + mExteriorPathgridNodes.erase(it); } } else { - if (!(store->cell->data.flags & ESM::Cell::Interior)) + if (mInteriorPathgridNode) { - ExteriorPathgridNodes::iterator it = - mExteriorPathgridNodes.find(std::make_pair(store->cell->data.gridX, store->cell->data.gridY)); - if (it != mExteriorPathgridNodes.end()) - { - destroyCellPathgridNode(it->second); - mExteriorPathgridNodes.erase(it); - } - } - else - { - if (mInteriorPathgridNode) - { - destroyCellPathgridNode(mInteriorPathgridNode); - mInteriorPathgridNode = NULL; - } + destroyCellPathgridNode(mInteriorPathgridNode); + mInteriorPathgridNode = NULL; } } } @@ -148,17 +193,26 @@ void Debugging::destroyCellPathgridNode(SceneNode *node) { mPathGridRoot->removeChild(node); + /// \todo should object be killed by hand or removeAndDestroyAllChildren is sufficient? SceneNode::ChildNodeIterator childIt = node->getChildIterator(); while (childIt.hasMoreElements()) { SceneNode *child = static_cast(childIt.getNext()); - SceneNode::ObjectIterator objIt = child->getAttachedObjectIterator(); - while (objIt.hasMoreElements()) - { - MovableObject *mesh = static_cast(objIt.getNext()); - child->getCreator()->destroyMovableObject(mesh); - } + destroyAttachedObjects(child); } + destroyAttachedObjects(node); node->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(node); } + +void Debugging::destroyAttachedObjects(SceneNode *node) +{ + SceneNode::ObjectIterator objIt = node->getAttachedObjectIterator(); + while (objIt.hasMoreElements()) + { + MovableObject *mesh = static_cast(objIt.getNext()); + node->getCreator()->destroyMovableObject(mesh); + } +} + +} diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index eb592b98d9..cfa7723307 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -52,12 +52,16 @@ namespace MWRender typedef std::map, Ogre::SceneNode *> ExteriorPathgridNodes; ExteriorPathgridNodes mExteriorPathgridNodes; - void togglePathgridForCell(MWWorld::Ptr::CellStore *store, bool enabled); + void enableCellPathgrid(MWWorld::Ptr::CellStore *store); + void disableCellPathgrid(MWWorld::Ptr::CellStore *store); + // utility void destroyCellPathgridNode(Ogre::SceneNode *node); + void destroyAttachedObjects(Ogre::SceneNode *node); public: Debugging(Ogre::SceneNode* mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine); + ~Debugging(); bool toggleRenderMode (int mode); void cellAdded(MWWorld::Ptr::CellStore* store); From a8e25bc32ce3c862b512b130531db24eb0f9f704 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Wed, 14 Mar 2012 15:03:04 +0400 Subject: [PATCH 048/488] Feature #37 (In Progress) Render Path Grid improved path grid point mesh (closer to vanilla MW) --- apps/openmw/mwrender/debugging.cpp | 96 +++++++++++++++++++++++------- apps/openmw/mwrender/debugging.hpp | 14 ++++- 2 files changed, 86 insertions(+), 24 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 3b01d4b36c..aa98f433fd 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -4,6 +4,8 @@ #include #include +#include +#include #include "../mwworld/world.hpp" // these includes can be removed once the static-hack is gone #include "../mwworld/environment.hpp" @@ -18,12 +20,15 @@ using namespace Ogre; namespace MWRender { +static const std::string PATHGRID_POINT_MATERIAL = "pathgridPointMaterial"; static const std::string PATHGRID_LINE_MATERIAL = "pathgridLineMaterial"; static const std::string DEBUGGING_GROUP = "debugging"; +static const int POINT_MESH_BASE = 80; -ManualObject *createPathgridLine(SceneManager* sceneMgr, const Vector3& from, const Vector3& to) +void Debugging::createGridMaterials() { - ManualObject *line = sceneMgr->createManualObject(); + if (mGridMatsCreated) return; + if (MaterialManager::getSingleton().getByName(PATHGRID_LINE_MATERIAL, DEBUGGING_GROUP).isNull()) { MaterialPtr lineMatPtr = MaterialManager::getSingleton().create(PATHGRID_LINE_MATERIAL, DEBUGGING_GROUP); @@ -34,6 +39,31 @@ ManualObject *createPathgridLine(SceneManager* sceneMgr, const Vector3& from, co lineMatPtr->getTechnique(0)->getPass(0)->setSelfIllumination(1,1,0); } + if (MaterialManager::getSingleton().getByName(PATHGRID_POINT_MATERIAL, DEBUGGING_GROUP).isNull()) + { + MaterialPtr pointMatPtr = MaterialManager::getSingleton().create(PATHGRID_POINT_MATERIAL, DEBUGGING_GROUP); + pointMatPtr->setReceiveShadows(false); + pointMatPtr->getTechnique(0)->setLightingEnabled(true); + pointMatPtr->getTechnique(0)->getPass(0)->setDiffuse(1,0,0,0); + pointMatPtr->getTechnique(0)->getPass(0)->setAmbient(1,0,0); + pointMatPtr->getTechnique(0)->getPass(0)->setSelfIllumination(1,0,0); + } + mGridMatsCreated = true; +} + +void Debugging::destroyGridMaterials() +{ + if (mGridMatsCreated) + { + MaterialManager::getSingleton().remove(PATHGRID_POINT_MATERIAL); + MaterialManager::getSingleton().remove(PATHGRID_LINE_MATERIAL); + mGridMatsCreated = false; + } +} + +MovableObject *Debugging::createPathgridLine(const Vector3& from, const Vector3& to) +{ + ManualObject *line = mSceneMgr->createManualObject(); line->begin(PATHGRID_LINE_MATERIAL, Ogre::RenderOperation::OT_LINE_LIST); line->position(from); line->position(to); @@ -42,21 +72,47 @@ ManualObject *createPathgridLine(SceneManager* sceneMgr, const Vector3& from, co return line; } -ManualObject *createPathgridPoint(SceneManager* sceneMgr, const Vector3& pos) +MovableObject *Debugging::createPathgridPoint() { + ManualObject *point = mSceneMgr->createManualObject(); + point->begin(PATHGRID_POINT_MATERIAL, Ogre::RenderOperation::OT_TRIANGLE_FAN); + float height = POINT_MESH_BASE /*/ sqrtf(2)*/; + point->position(0, 0, height); + point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->position(POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->position(POINT_MESH_BASE, POINT_MESH_BASE, 0); + point->position(-POINT_MESH_BASE, POINT_MESH_BASE, 0); + point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->end(); + point->begin(PATHGRID_POINT_MATERIAL, Ogre::RenderOperation::OT_TRIANGLE_FAN); + point->position(0, 0, -height); + point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->position(-POINT_MESH_BASE, POINT_MESH_BASE, 0); + point->position(POINT_MESH_BASE, POINT_MESH_BASE, 0); + point->position(POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); + point->end(); + + return point; } Debugging::Debugging(SceneNode *mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine) : mMwRoot(mwRoot), mEnvironment(env), mEngine(engine), mSceneMgr(mwRoot->getCreator()), - pathgridEnabled(false), - mInteriorPathgridNode(NULL), mPathGridRoot(NULL) + mPathgridEnabled(false), + mInteriorPathgridNode(NULL), mPathGridRoot(NULL), + mGridMatsCreated(false) { ResourceGroupManager::getSingleton().createResourceGroup(DEBUGGING_GROUP); } Debugging::~Debugging() { + if (mPathgridEnabled) + { + togglePathgrid(); + } + ResourceGroupManager::getSingleton().destroyResourceGroup(DEBUGGING_GROUP); } @@ -72,7 +128,7 @@ bool Debugging::toggleRenderMode (int mode){ return mEngine->isDebugCreated; case MWWorld::World::Render_Pathgrid: togglePathgrid(); - return pathgridEnabled; + return mPathgridEnabled; } return false; @@ -82,7 +138,7 @@ void Debugging::cellAdded(MWWorld::Ptr::CellStore *store) { std::cout << "Cell added to debugging" << std::endl; mActiveCells.push_back(store); - if (pathgridEnabled) + if (mPathgridEnabled) enableCellPathgrid(store); } @@ -90,15 +146,17 @@ void Debugging::cellRemoved(MWWorld::Ptr::CellStore *store) { mActiveCells.erase(std::remove(mActiveCells.begin(), mActiveCells.end(), store), mActiveCells.end()); std::cout << "Cell removed from debugging, active cells count: " << mActiveCells.size() << std::endl; - if (pathgridEnabled) + if (mPathgridEnabled) disableCellPathgrid(store); } void Debugging::togglePathgrid() { - pathgridEnabled = !pathgridEnabled; - if (pathgridEnabled) + mPathgridEnabled = !mPathgridEnabled; + if (mPathgridEnabled) { + createGridMaterials(); + // add path grid meshes to already loaded cells mPathGridRoot = mMwRoot->createChildSceneNode(); for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) @@ -106,7 +164,8 @@ void Debugging::togglePathgrid() enableCellPathgrid(*it); } } - else { + else + { // remove path grid meshes from already loaded cells for(CellList::iterator it = mActiveCells.begin(); it != mActiveCells.end(); it++) { @@ -115,16 +174,14 @@ void Debugging::togglePathgrid() mPathGridRoot->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(mPathGridRoot); mPathGridRoot = NULL; + destroyGridMaterials(); } } void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) { ESM::Pathgrid *pathgrid = mEnvironment.mWorld->getStore().pathgrids.search(*store->cell); - if (!pathgrid) - { - return; - } + if (!pathgrid) return; Vector3 cellPathGridPos; /// \todo replace tests like this with isExterior method of ESM::Cell after merging with terrain branch @@ -141,8 +198,7 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) Vector3 position(it->x, it->y, it->z); SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); pointNode->setScale(0.5, 0.5, 0.5); - Entity *pointMesh = mSceneMgr->createEntity(SceneManager::PT_CUBE); - pointNode->attachObject(pointMesh); + pointNode->attachObject(createPathgridPoint()); } ESM::Pathgrid::EdgeList edges = pathgrid->edges; @@ -151,8 +207,7 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) { ESM::Pathgrid::Edge edge = *it; ESM::Pathgrid::Point p1 = points[edge.v0], p2 = points[edge.v1]; - cellPathGrid->attachObject(createPathgridLine(cellPathGrid->getCreator(), - Vector3(p1.x, p1.y, p1.z), + cellPathGrid->attachObject(createPathgridLine(Vector3(p1.x, p1.y, p1.z), Vector3(p2.x, p2.y, p2.z))); } @@ -193,7 +248,6 @@ void Debugging::destroyCellPathgridNode(SceneNode *node) { mPathGridRoot->removeChild(node); - /// \todo should object be killed by hand or removeAndDestroyAllChildren is sufficient? SceneNode::ChildNodeIterator childIt = node->getChildIterator(); while (childIt.hasMoreElements()) { @@ -211,7 +265,7 @@ void Debugging::destroyAttachedObjects(SceneNode *node) while (objIt.hasMoreElements()) { MovableObject *mesh = static_cast(objIt.getNext()); - node->getCreator()->destroyMovableObject(mesh); + mSceneMgr->destroyMovableObject(mesh); } } diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index cfa7723307..c8c19fb8cb 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -37,20 +37,20 @@ namespace MWRender MWWorld::Environment& mEnvironment; // Path grid stuff - bool pathgridEnabled; + bool mPathgridEnabled; void togglePathgrid(); typedef std::vector CellList; - CellList mActiveCells; Ogre::SceneNode *mMwRoot; + Ogre::SceneNode *mPathGridRoot; - Ogre::SceneNode *mInteriorPathgridNode; typedef std::map, Ogre::SceneNode *> ExteriorPathgridNodes; ExteriorPathgridNodes mExteriorPathgridNodes; + Ogre::SceneNode *mInteriorPathgridNode; void enableCellPathgrid(MWWorld::Ptr::CellStore *store); void disableCellPathgrid(MWWorld::Ptr::CellStore *store); @@ -59,6 +59,14 @@ namespace MWRender void destroyCellPathgridNode(Ogre::SceneNode *node); void destroyAttachedObjects(Ogre::SceneNode *node); + // materials + bool mGridMatsCreated; + void createGridMaterials(); + void destroyGridMaterials(); + + // path grid meshes + Ogre::MovableObject* createPathgridLine(const Ogre::Vector3& from, const Ogre::Vector3& to); + Ogre::MovableObject* createPathgridPoint(); public: Debugging(Ogre::SceneNode* mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine); ~Debugging(); From 42b445383f7b3193f12588142f4762ff1af6c72e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 16 Mar 2012 17:08:13 -0700 Subject: [PATCH 049/488] Remove Mangle- and OpenEngine-related sound code Start of the sound code refactoring. Currently there is no sound, but it will be added back. --- CMakeLists.txt | 19 +- apps/openmw/mwsound/soundmanager.cpp | 509 ++++++------------ apps/openmw/mwsound/soundmanager.hpp | 38 -- libs/mangle/sound/.gitignore | 1 - .../sound/clients/ogre_listener_mover.hpp | 79 --- .../sound/clients/ogre_output_updater.hpp | 31 -- libs/mangle/sound/filters/input_filter.hpp | 68 --- libs/mangle/sound/filters/openal_audiere.hpp | 24 - libs/mangle/sound/filters/openal_ffmpeg.hpp | 23 - libs/mangle/sound/filters/openal_mpg123.hpp | 24 - libs/mangle/sound/filters/openal_sndfile.hpp | 24 - .../sound/filters/openal_sndfile_mpg123.hpp | 33 -- libs/mangle/sound/filters/openal_various.hpp | 39 -- libs/mangle/sound/filters/pure_filter.hpp | 73 --- libs/mangle/sound/filters/source_splicer.hpp | 90 ---- libs/mangle/sound/output.hpp | 183 ------- libs/mangle/sound/outputs/openal_out.cpp | 500 ----------------- libs/mangle/sound/outputs/openal_out.hpp | 44 -- libs/mangle/sound/source.hpp | 62 --- libs/mangle/sound/sources/audiere_source.cpp | 77 --- libs/mangle/sound/sources/audiere_source.hpp | 48 -- libs/mangle/sound/sources/ffmpeg_source.cpp | 189 ------- libs/mangle/sound/sources/ffmpeg_source.hpp | 52 -- libs/mangle/sound/sources/libsndfile.cpp | 48 -- libs/mangle/sound/sources/libsndfile.hpp | 36 -- libs/mangle/sound/sources/loadertemplate.hpp | 28 - libs/mangle/sound/sources/mpg123_source.cpp | 115 ---- libs/mangle/sound/sources/mpg123_source.hpp | 47 -- libs/mangle/sound/sources/sample_reader.cpp | 99 ---- libs/mangle/sound/sources/sample_reader.hpp | 48 -- libs/mangle/sound/sources/stream_source.hpp | 47 -- libs/mangle/sound/sources/wav_source.cpp | 99 ---- libs/mangle/sound/sources/wav_source.hpp | 49 -- libs/mangle/sound/tests/.gitignore | 1 - libs/mangle/sound/tests/Makefile | 38 -- .../sound/tests/audiere_source_test.cpp | 68 --- libs/mangle/sound/tests/cow.raw | Bin 37502 -> 0 bytes libs/mangle/sound/tests/cow.wav | Bin 37546 -> 0 bytes .../mangle/sound/tests/ffmpeg_source_test.cpp | 62 --- .../sound/tests/openal_audiere_test.cpp | 52 -- .../mangle/sound/tests/openal_ffmpeg_test.cpp | 52 -- .../mangle/sound/tests/openal_mpg123_test.cpp | 54 -- .../mangle/sound/tests/openal_output_test.cpp | 59 -- .../sound/tests/openal_sndfile_test.cpp | 52 -- .../sound/tests/openal_various_test.cpp | 51 -- .../tests/output/audiere_source_test.out | 21 - .../sound/tests/output/ffmpeg_source_test.out | 12 - .../tests/output/openal_audiere_test.out | 3 - .../sound/tests/output/openal_ffmpeg_test.out | 2 - .../sound/tests/output/openal_mpg123_test.out | 1 - .../sound/tests/output/openal_output_test.out | 5 - .../tests/output/openal_sndfile_test.out | 2 - .../tests/output/openal_various_test.out | 1 - .../sound/tests/output/wav_source_test.out | 12 - libs/mangle/sound/tests/owl.ogg | Bin 18641 -> 0 bytes libs/mangle/sound/tests/test.sh | 18 - libs/mangle/sound/tests/wav_source_test.cpp | 48 -- libs/openengine/sound/sndmanager.cpp | 219 -------- libs/openengine/sound/sndmanager.hpp | 93 ---- libs/openengine/sound/tests/Makefile | 16 - .../sound/tests/output/sound_3d_test.out | 3 - .../sound/tests/output/sound_manager_test.out | 5 - libs/openengine/sound/tests/sound_3d_test.cpp | 46 -- .../sound/tests/sound_manager_test.cpp | 73 --- libs/openengine/sound/tests/test.sh | 18 - 65 files changed, 167 insertions(+), 3766 deletions(-) delete mode 100644 libs/mangle/sound/.gitignore delete mode 100644 libs/mangle/sound/clients/ogre_listener_mover.hpp delete mode 100644 libs/mangle/sound/clients/ogre_output_updater.hpp delete mode 100644 libs/mangle/sound/filters/input_filter.hpp delete mode 100644 libs/mangle/sound/filters/openal_audiere.hpp delete mode 100644 libs/mangle/sound/filters/openal_ffmpeg.hpp delete mode 100644 libs/mangle/sound/filters/openal_mpg123.hpp delete mode 100644 libs/mangle/sound/filters/openal_sndfile.hpp delete mode 100644 libs/mangle/sound/filters/openal_sndfile_mpg123.hpp delete mode 100644 libs/mangle/sound/filters/openal_various.hpp delete mode 100644 libs/mangle/sound/filters/pure_filter.hpp delete mode 100644 libs/mangle/sound/filters/source_splicer.hpp delete mode 100644 libs/mangle/sound/output.hpp delete mode 100644 libs/mangle/sound/outputs/openal_out.cpp delete mode 100644 libs/mangle/sound/outputs/openal_out.hpp delete mode 100644 libs/mangle/sound/source.hpp delete mode 100644 libs/mangle/sound/sources/audiere_source.cpp delete mode 100644 libs/mangle/sound/sources/audiere_source.hpp delete mode 100644 libs/mangle/sound/sources/ffmpeg_source.cpp delete mode 100644 libs/mangle/sound/sources/ffmpeg_source.hpp delete mode 100644 libs/mangle/sound/sources/libsndfile.cpp delete mode 100644 libs/mangle/sound/sources/libsndfile.hpp delete mode 100644 libs/mangle/sound/sources/loadertemplate.hpp delete mode 100644 libs/mangle/sound/sources/mpg123_source.cpp delete mode 100644 libs/mangle/sound/sources/mpg123_source.hpp delete mode 100644 libs/mangle/sound/sources/sample_reader.cpp delete mode 100644 libs/mangle/sound/sources/sample_reader.hpp delete mode 100644 libs/mangle/sound/sources/stream_source.hpp delete mode 100644 libs/mangle/sound/sources/wav_source.cpp delete mode 100644 libs/mangle/sound/sources/wav_source.hpp delete mode 100644 libs/mangle/sound/tests/.gitignore delete mode 100644 libs/mangle/sound/tests/Makefile delete mode 100644 libs/mangle/sound/tests/audiere_source_test.cpp delete mode 100644 libs/mangle/sound/tests/cow.raw delete mode 100644 libs/mangle/sound/tests/cow.wav delete mode 100644 libs/mangle/sound/tests/ffmpeg_source_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_audiere_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_ffmpeg_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_mpg123_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_output_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_sndfile_test.cpp delete mode 100644 libs/mangle/sound/tests/openal_various_test.cpp delete mode 100644 libs/mangle/sound/tests/output/audiere_source_test.out delete mode 100644 libs/mangle/sound/tests/output/ffmpeg_source_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_audiere_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_ffmpeg_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_mpg123_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_output_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_sndfile_test.out delete mode 100644 libs/mangle/sound/tests/output/openal_various_test.out delete mode 100644 libs/mangle/sound/tests/output/wav_source_test.out delete mode 100644 libs/mangle/sound/tests/owl.ogg delete mode 100755 libs/mangle/sound/tests/test.sh delete mode 100644 libs/mangle/sound/tests/wav_source_test.cpp delete mode 100644 libs/openengine/sound/sndmanager.cpp delete mode 100644 libs/openengine/sound/sndmanager.hpp delete mode 100644 libs/openengine/sound/tests/Makefile delete mode 100644 libs/openengine/sound/tests/output/sound_3d_test.out delete mode 100644 libs/openengine/sound/tests/output/sound_manager_test.out delete mode 100644 libs/openengine/sound/tests/sound_3d_test.cpp delete mode 100644 libs/openengine/sound/tests/sound_manager_test.cpp delete mode 100755 libs/openengine/sound/tests/test.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dbd27a68c..d06085322a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,10 +120,6 @@ set(OENGINE_BULLET # Sound setup if (USE_AUDIERE) - set(MANGLE_SOUND_OUTPUT - ${LIBDIR}/mangle/sound/sources/audiere_source.cpp - ${LIBDIR}/mangle/sound/sources/sample_reader.cpp - ${LIBDIR}/mangle/stream/clients/audiere_file.cpp) find_package(Audiere REQUIRED) set(SOUND_INPUT_INCLUDES ${AUDIERE_INCLUDE_DIR}) set(SOUND_INPUT_LIBRARY ${AUDIERE_LIBRARY}) @@ -131,8 +127,6 @@ if (USE_AUDIERE) endif (USE_AUDIERE) if (USE_FFMPEG) - set(MANGLE_SOUND_OUTPUT - ${LIBDIR}/mangle/sound/sources/ffmpeg_source.cpp) find_package(FFMPEG REQUIRED) set(SOUND_INPUT_INCLUDES ${FFMPEG_INCLUDE_DIR}) set(SOUND_INPUT_LIBRARY ${FFMPEG_LIBRARIES}) @@ -140,10 +134,6 @@ if (USE_FFMPEG) endif (USE_FFMPEG) if (USE_MPG123) - set(MANGLE_SOUND_OUTPUT - ${LIBDIR}/mangle/sound/sources/mpg123_source.cpp - ${LIBDIR}/mangle/sound/sources/libsndfile.cpp - ${LIBDIR}/mangle/sound/sources/sample_reader.cpp) find_package(MPG123 REQUIRED) find_package(SNDFILE REQUIRED) set(SOUND_INPUT_INCLUDES ${MPG123_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR}) @@ -151,14 +141,7 @@ if (USE_MPG123) set(SOUND_DEFINE -DOPENMW_USE_MPG123) endif (USE_MPG123) -set(OENGINE_SOUND - # Mangle and OEngine sound files are sort of intertwined, so put - # them together here - ${LIBDIR}/openengine/sound/sndmanager.cpp - ${LIBDIR}/mangle/sound/outputs/openal_out.cpp - ${MANGLE_SOUND_OUTPUT} -) -set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_SOUND} ${OENGINE_BULLET}) +set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_BULLET}) source_group(libs\\openengine FILES ${OENGINE_ALL}) set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL}) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a5ba04e261..e0d7167de8 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -6,10 +6,6 @@ #include -#include -#include -#include - #include #include "../mwworld/environment.hpp" @@ -21,39 +17,23 @@ CMakeLists.txt. */ #ifdef OPENMW_USE_AUDIERE -#include #define SOUND_FACTORY OpenAL_Audiere_Factory #define SOUND_OUT "OpenAL" #define SOUND_IN "Audiere" #endif #ifdef OPENMW_USE_FFMPEG -#include #define SOUND_FACTORY OpenAL_FFMpeg_Factory #define SOUND_OUT "OpenAL" #define SOUND_IN "FFmpeg" #endif #ifdef OPENMW_USE_MPG123 -#include #define SOUND_FACTORY OpenAL_SndFile_Mpg123_Factory #define SOUND_OUT "OpenAL" #define SOUND_IN "mpg123,sndfile" #endif -using namespace Mangle::Sound; -typedef OEngine::Sound::SoundManager OEManager; - -// Set the position on a sound based on a Ptr. -static void setPos(SoundPtr &snd, const MWWorld::Ptr ref) -{ - // Get sound position from the reference - const float *pos = ref.getCellRef().pos.pos; - - // Move the sound, converting from MW coordinates to Ogre - // coordinates. - snd->setPos(pos[0], pos[2], -pos[1]); -} namespace MWSound { @@ -63,50 +43,36 @@ namespace MWSound bool useSound, bool fsstrict, MWWorld::Environment& environment) : mFSStrict(fsstrict) , mEnvironment(environment) - , mgr(new OEManager(SoundFactoryPtr(new SOUND_FACTORY))) - , updater(mgr) - , cameraTracker(mgr) , mCurrentPlaylist(NULL) { - if(useSound) - { - // The music library will accept these filetypes - // If none is given then it will accept all filetypes - std::vector acceptableExtensions; - acceptableExtensions.push_back(".mp3"); - acceptableExtensions.push_back(".wav"); - acceptableExtensions.push_back(".ogg"); - acceptableExtensions.push_back(".flac"); + if(!useSound) + return; - // Makes a list of all sound files, searches in reverse for priority reasons - for (Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) - { - Files::FileLister(*it / std::string("Sound"), mSoundFiles, true); - } + // The music library will accept these filetypes + // If none is given then it will accept all filetypes + std::vector acceptableExtensions; + acceptableExtensions.push_back(".mp3"); + acceptableExtensions.push_back(".wav"); + acceptableExtensions.push_back(".ogg"); + acceptableExtensions.push_back(".flac"); - // Makes a FileLibrary of all music files, searches in reverse for priority reasons - for (Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) - { - mMusicLibrary.add(*it / std::string("Music"), true, mFSStrict, acceptableExtensions); - } + // Makes a list of all sound files, searches in reverse for priority reasons + for(Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) + Files::FileLister(*it / std::string("Sound"), mSoundFiles, true); - std::string anything = "anything"; // anything is better that a segfault - mCurrentPlaylist = mMusicLibrary.section(anything, mFSStrict); // now points to an empty path + // Makes a FileLibrary of all music files, searches in reverse for priority reasons + for(Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) + mMusicLibrary.add(*it / std::string("Music"), true, mFSStrict, acceptableExtensions); - std::cout << "Sound output: " << SOUND_OUT << std::endl; - std::cout << "Sound decoder: " << SOUND_IN << std::endl; - // Attach the camera to the camera tracker - cameraTracker.followCamera(camera); + std::string anything = "anything"; // anything is better that a segfault + mCurrentPlaylist = mMusicLibrary.section(anything, mFSStrict); // now points to an empty path - // Tell Ogre to update the sound system each frame - root->addFrameListener(&updater); - } - } + std::cout << "Sound output: " << SOUND_OUT << std::endl; + std::cout << "Sound decoder: " << SOUND_IN << std::endl; + } SoundManager::~SoundManager() { - Ogre::Root::getSingleton().removeFrameListener(&updater); - cameraTracker.unfollowCamera(); } // Convert a soundId to file name, and modify the volume @@ -115,28 +81,28 @@ namespace MWSound std::string SoundManager::lookup(const std::string &soundId, float &volume, float &min, float &max) { - const ESM::Sound *snd = mEnvironment.mWorld->getStore().sounds.search(soundId); - if(snd == NULL) return ""; + const ESM::Sound *snd = mEnvironment.mWorld->getStore().sounds.search(soundId); + if(snd == NULL) return ""; - if(snd->data.volume == 0) - volume = 0.0f; - else - volume *= pow(10.0, (snd->data.volume/255.0f*3348.0 - 3348.0) / 2000.0); + if(snd->data.volume == 0) + volume = 0.0f; + else + volume *= pow(10.0, (snd->data.volume/255.0f*3348.0 - 3348.0) / 2000.0); - if(snd->data.minRange == 0 && snd->data.maxRange == 0) - { - min = 100.0f; - max = 2000.0f; - } - else - { - min = snd->data.minRange * 20.0f; - max = snd->data.maxRange * 50.0f; - min = std::max(min, 1.0f); - max = std::max(min, max); - } + if(snd->data.minRange == 0 && snd->data.maxRange == 0) + { + min = 100.0f; + max = 2000.0f; + } + else + { + min = snd->data.minRange * 20.0f; + max = snd->data.maxRange * 50.0f; + min = std::max(min, 1.0f); + max = std::max(min, max); + } - return Files::FileListLocator(mSoundFiles, snd->sound, mFSStrict, false); + return Files::FileListLocator(mSoundFiles, snd->sound, mFSStrict, false); } // Add a sound to the list and play it @@ -147,190 +113,79 @@ namespace MWSound float min, float max, bool loop, bool untracked) { - try - { - SoundPtr snd = mgr->load(file); - snd->setRepeat(loop); - snd->setVolume(volume); - snd->setPitch(pitch); - snd->setRange(min,max); - setPos(snd, ptr); - snd->play(); - - if (!untracked) - { - sounds[ptr][id] = WSoundPtr(snd); - } - } - catch(...) - { - std::cout << "Error loading " << file << ", skipping.\n"; - } - } - - // Clears all the sub-elements of a given iterator, and then - // removes it from 'sounds'. - void SoundManager::clearAll(PtrMap::iterator& it) - { - IDMap::iterator sit = it->second.begin(); - - while(sit != it->second.end()) - { - // Get sound pointer, if any - SoundPtr snd = sit->second.lock(); - - // Stop the sound - if(snd) snd->stop(); - - sit++; - } - - // Remove the ptr reference - sounds.erase(it); + //std::cout << "Cannot load " << file << ", skipping.\n"; } // Stop a sound and remove it from the list. If id="" then // remove the entire object and stop all its sounds. void SoundManager::remove(MWWorld::Ptr ptr, const std::string &id) { - PtrMap::iterator it = sounds.find(ptr); - if(it != sounds.end()) - { - if(id == "") - // Kill all references to 'ptr' - clearAll(it); - else - { - // Only find the id we're looking for - IDMap::iterator it2 = it->second.find(id); - if(it2 != it->second.end()) - { - // Stop the sound and remove it from the list - SoundPtr snd = it2->second.lock(); - if(snd) snd->stop(); - it->second.erase(it2); - } - } - } } bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { - PtrMap::const_iterator it = sounds.find(ptr); - if(it != sounds.end()) - { - IDMap::const_iterator it2 = it->second.find(id); - if(it2 != it->second.end()) - { - // Get a shared_ptr from the weak_ptr - SoundPtr snd = it2->second.lock();; - - // Is it still alive? - if(snd) - { - // Then return its status! - return snd->isPlaying(); - } - } - } - // Nothing found, sound is not playing - return false; + // HACK: Return true to prevent the engine from trying to keep playing + // sounds and tanking the framerate. + return true; } // Remove all references to objects belonging to a given cell void SoundManager::removeCell(const MWWorld::Ptr::CellStore *cell) { - PtrMap::iterator it2, it = sounds.begin(); - while(it != sounds.end()) - { - // Make sure to increase the iterator before we erase it. - it2 = it++; - if(it2->first.getCell() == cell) - clearAll(it2); - } } void SoundManager::updatePositions(MWWorld::Ptr ptr) { - // Find the reference (if any) - PtrMap::iterator it = sounds.find(ptr); - if(it != sounds.end()) - { - // Then find all sounds in it (if any) - IDMap::iterator it2 = it->second.begin(); - for(;it2 != it->second.end(); it2++) - { - // Get the sound (if it still exists) - SoundPtr snd = it2->second.lock(); - if(snd) - // Update position - setPos(snd, ptr); - } - } } void SoundManager::stopMusic() { - if (music) - music->stop(); setPlaylist(); } - void SoundManager::streamMusicFull(const std::string& filename) - { - // Play the sound and tell it to stream, if possible. TODO: - // Store the reference, the jukebox will need to check status, - // control volume etc. - if (music) - music->stop(); - music = mgr->load(filename); - music->setStreaming(true); - music->setVolume(0.4); - music->play(); - - } + void SoundManager::streamMusicFull(const std::string& filename) + { + // Play the sound and tell it to stream, if possible. TODO: + // Store the reference, the jukebox will need to check status, + // control volume etc. + } void SoundManager::streamMusic(const std::string& filename) { std::string filePath = mMusicLibrary.locate(filename, mFSStrict, true).string(); if(!filePath.empty()) - { streamMusicFull(filePath); - } } - void SoundManager::startRandomTitle() - { - if(mCurrentPlaylist && !mCurrentPlaylist->empty()) + void SoundManager::startRandomTitle() { - Files::PathContainer::const_iterator fileIter = mCurrentPlaylist->begin(); - srand( time(NULL) ); - int r = rand() % mCurrentPlaylist->size() + 1; //old random code - - std::advance(fileIter, r - 1); - std::string music = fileIter->string(); - std::cout << "Playing " << music << "\n"; - - try + if(mCurrentPlaylist && !mCurrentPlaylist->empty()) { - streamMusicFull(music); - } - catch (std::exception &e) - { - std::cout << " Music Error: " << e.what() << "\n"; + Files::PathContainer::const_iterator fileIter = mCurrentPlaylist->begin(); + srand( time(NULL) ); + int r = rand() % mCurrentPlaylist->size() + 1; //old random code + + std::advance(fileIter, r - 1); + std::string music = fileIter->string(); + //std::cout << "Playing " << music << "\n"; + + try + { + streamMusicFull(music); + } + catch (std::exception &e) + { + std::cout << "Music Error: " << e.what() << "\n"; + } } } - } bool SoundManager::isMusicPlaying() { - bool test = false; - if(music) - { - test = music->isPlaying(); - } - return test; + // HACK: Return true to prevent the engine from trying to keep playing + // music and tanking the framerate. + return true; } bool SoundManager::setPlaylist(std::string playlist) @@ -373,154 +228,122 @@ namespace MWSound } } - void SoundManager::say (MWWorld::Ptr ptr, const std::string& filename) - { - // The range values are not tested - std::string filePath = Files::FileListLocator(mSoundFiles, filename, mFSStrict, true); - if(!filePath.empty()) - add(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); - else - std::cout << "Sound file " << filename << " not found, skipping.\n"; - } - - bool SoundManager::sayDone (MWWorld::Ptr ptr) const - { - return !isPlaying(ptr, "_say_sound"); - } - - - void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) - { - float min, max; - const std::string &file = lookup(soundId, volume, min, max); - if (file != "") + void SoundManager::say(MWWorld::Ptr ptr, const std::string& filename) { - SoundPtr snd = mgr->load(file); - snd->setRepeat(loop); - snd->setVolume(volume); - snd->setRange(min,max); - snd->setPitch(pitch); - snd->setRelative(true); - snd->play(); - - if (loop) - { - // Only add the looping sound once - IDMap::iterator it = mLoopedSounds.find(soundId); - if(it == mLoopedSounds.end()) - { - mLoopedSounds[soundId] = WSoundPtr(snd); - } - } + // The range values are not tested + std::string filePath = Files::FileListLocator(mSoundFiles, filename, mFSStrict, true); + if(!filePath.empty()) + add(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); + else + std::cout << "Sound file " << filename << " not found, skipping.\n"; } - } - void SoundManager::playSound3D (MWWorld::Ptr ptr, const std::string& soundId, - float volume, float pitch, bool loop, bool untracked) - { - // Look up the sound in the ESM data - float min, max; - const std::string &file = lookup(soundId, volume, min, max); - if (file != "") - add(file, ptr, soundId, volume, pitch, min, max, loop, untracked); - } + bool SoundManager::sayDone(MWWorld::Ptr ptr) const + { + return !isPlaying(ptr, "_say_sound"); + } - void SoundManager::stopSound3D (MWWorld::Ptr ptr, const std::string& soundId) - { - remove(ptr, soundId); - } - void SoundManager::stopSound (MWWorld::Ptr::CellStore *cell) - { - removeCell(cell); - } + void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) + { + float min, max; + const std::string &file = lookup(soundId, volume, min, max); + std::cout << "Cannot play " << file << ", skipping.\n"; + } + + void SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId, + float volume, float pitch, bool loop, bool untracked) + { + // Look up the sound in the ESM data + float min, max; + const std::string &file = lookup(soundId, volume, min, max); + if(file != "") + add(file, ptr, soundId, volume, pitch, min, max, loop, untracked); + } + + void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) + { + remove(ptr, soundId); + } + + void SoundManager::stopSound(MWWorld::Ptr::CellStore *cell) + { + removeCell(cell); + } void SoundManager::stopSound(const std::string& soundId) { - IDMap::iterator it = mLoopedSounds.find(soundId); - if(it != mLoopedSounds.end()) - { - SoundPtr snd = it->second.lock(); - if(snd) snd->stop(); - mLoopedSounds.erase(it); - } } - bool SoundManager::getSoundPlaying (MWWorld::Ptr ptr, const std::string& soundId) const - { - // Mark all sounds as playing, otherwise the scripts will just - // keep trying to play them every frame. + bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const + { + // Mark all sounds as playing, otherwise the scripts will just + // keep trying to play them every frame. - return isPlaying(ptr, soundId); - } + return isPlaying(ptr, soundId); + } - void SoundManager::updateObject(MWWorld::Ptr ptr) - { - updatePositions(ptr); - } + void SoundManager::updateObject(MWWorld::Ptr ptr) + { + updatePositions(ptr); + } - void SoundManager::update (float duration) - { + void SoundManager::update(float duration) + { MWWorld::Ptr::CellStore *current = mEnvironment.mWorld->getPlayer().getPlayer().getCell(); static int total = 0; static std::string regionName = ""; static float timePassed = 0.0; - timePassed += duration; //If the region has changed - if(!(current->cell->data.flags & current->cell->Interior) && timePassed >= 10) + timePassed += duration; + if((current->cell->data.flags & current->cell->Interior) || timePassed < 10) + return; + + ESM::Region test = (ESM::Region) *(mEnvironment.mWorld->getStore().regions.find(current->cell->region)); + + timePassed = 0; + if(regionName != current->cell->region) { - - ESM::Region test = (ESM::Region) *(mEnvironment.mWorld->getStore().regions.find(current->cell->region)); - - timePassed = 0; - if (regionName != current->cell->region) - { - regionName = current->cell->region; - total = 0; - } - - if(test.soundList.size() > 0) - { - std::vector::iterator soundIter = test.soundList.begin(); - //mEnvironment.mSoundManager - if(total == 0) - { - while (soundIter != test.soundList.end()) - { - int chance = (int) soundIter->chance; - //ESM::NAME32 go = soundIter->sound; - //std::cout << "Sound: " << go.name <<" Chance:" << chance << "\n"; - soundIter++; - total += chance; - } - } - - int r = rand() % total; //old random code - int pos = 0; - soundIter = test.soundList.begin(); - while (soundIter != test.soundList.end()) - { - const std::string go = soundIter->sound.toString(); - int chance = (int) soundIter->chance; - //std::cout << "Sound: " << go.name <<" Chance:" << chance << "\n"; - soundIter++; - if( r - pos < chance) - { - //play sound - std::cout << "Sound: " << go <<" Chance:" << chance << "\n"; - mEnvironment.mSoundManager->playSound(go, 20.0, 1.0); - - break; - } - pos += chance; - } - } - } - else if(current->cell->data.flags & current->cell->Interior) - { - regionName = ""; + regionName = current->cell->region; + total = 0; } - } + if(test.soundList.size() == 0) + return; + + std::vector::iterator soundIter; + if(total == 0) + { + soundIter = test.soundList.begin(); + while(soundIter != test.soundList.end()) + { + int chance = (int) soundIter->chance; + //ESM::NAME32 go = soundIter->sound; + //std::cout << "Sound: " << go.name <<" Chance:" << chance << "\n"; + soundIter++; + total += chance; + } + } + + int r = rand() % total; //old random code + int pos = 0; + + soundIter = test.soundList.begin(); + while(soundIter != test.soundList.end()) + { + const std::string go = soundIter->sound.toString(); + int chance = (int) soundIter->chance; + //std::cout << "Sound: " << go.name <<" Chance:" << chance << "\n"; + soundIter++; + if(r - pos < chance) + { + //play sound + std::cout << "Sound: " << go <<" Chance:" << chance << "\n"; + playSound(go, 20.0, 1.0); + break; + } + pos += chance; + } + } } diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index bd3b676797..9db7fe1b70 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -3,11 +3,6 @@ #include -#include -#include - -#include - #include #include "../mwworld/ptr.hpp" @@ -19,16 +14,6 @@ namespace Ogre class Camera; } -namespace Mangle -{ - namespace Sound - { - typedef boost::shared_ptr SoundPtr; - } -} - -typedef OEngine::Sound::SoundManagerPtr OEManagerPtr; - namespace MWWorld { struct Environment; @@ -51,26 +36,6 @@ namespace MWSound ///< Play a soundifle /// \param absolute filename - /* This is the sound manager. It loades, stores and deletes - sounds based on the sound factory it is given. - */ - OEManagerPtr mgr; - Mangle::Sound::SoundPtr music; - - /* This class calls update() on the sound manager each frame - using and Ogre::FrameListener - */ - Mangle::Sound::OgreOutputUpdater updater; - - /* This class tracks the movement of an Ogre::Camera and moves - a sound listener automatically to follow it. - */ - Mangle::Sound::OgreListenerMover cameraTracker; - - typedef std::map IDMap; - typedef std::map PtrMap; - PtrMap sounds; - // A list of all sound files used to lookup paths Files::PathContainer mSoundFiles; @@ -80,15 +45,12 @@ namespace MWSound // Points to the current playlist of music files stored in the music library const Files::PathContainer* mCurrentPlaylist; - IDMap mLoopedSounds; - std::string lookup(const std::string &soundId, float &volume, float &min, float &max); void add(const std::string &file, MWWorld::Ptr ptr, const std::string &id, float volume, float pitch, float min, float max, bool loop, bool untracked=false); - void clearAll(PtrMap::iterator& it); void remove(MWWorld::Ptr ptr, const std::string &id = ""); bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; void removeCell(const MWWorld::Ptr::CellStore *cell); diff --git a/libs/mangle/sound/.gitignore b/libs/mangle/sound/.gitignore deleted file mode 100644 index 8b13789179..0000000000 --- a/libs/mangle/sound/.gitignore +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libs/mangle/sound/clients/ogre_listener_mover.hpp b/libs/mangle/sound/clients/ogre_listener_mover.hpp deleted file mode 100644 index 74c21db32a..0000000000 --- a/libs/mangle/sound/clients/ogre_listener_mover.hpp +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef MANGLE_SOUND_OGRELISTENERMOVER_H -#define MANGLE_SOUND_OGRELISTENERMOVER_H - -#include -#include -#include "../output.hpp" - -namespace Mangle { -namespace Sound { - - /** This class lets a sound listener (ie. the SoundFactory) track a - given camera in Ogre3D. The position and orientation of the - listener will be updated to match the camera whenever the camera - is moved. - */ - struct OgreListenerMover : Ogre::Camera::Listener - { - OgreListenerMover(Mangle::Sound::SoundFactoryPtr snd) - : soundFact(snd), camera(NULL) - {} - - /// Follow a camera. WARNING: This will OVERRIDE any other - /// MovableObject::Listener you may have attached to the camera. - void followCamera(Ogre::Camera *cam) - { - camera = cam; - camera->addListener(this); - } - - void unfollowCamera() - { - // If the camera is null, this object wasn't following a camera. - // It doesn't make sense to call unfollow - assert(camera != NULL); - - camera->removeListener(this); - camera = NULL; - } - - private: - Mangle::Sound::SoundFactoryPtr soundFact; - Ogre::Camera *camera; - Ogre::Vector3 pos, dir, up; - - /// From Camera::Listener. This is called once per - /// frame. Unfortunately, Ogre doesn't allow us to be notified - /// only when the camera itself has moved, so we must poll every - /// frame. - void cameraPreRenderScene(Ogre::Camera *cam) - { - assert(cam == camera); - - Ogre::Vector3 nPos, nDir, nUp; - - nPos = camera->getRealPosition(); - nDir = camera->getRealDirection(); - nUp = camera->getRealUp(); - - // Don't bother the sound system needlessly - if(nDir != dir || nPos != pos || nUp != up) - { - pos = nPos; - dir = nDir; - up = nUp; - - soundFact->setListenerPos(pos.x, pos.y, pos.z, - dir.x, dir.y, dir.z, - up.x, up.y, up.z); - } - } - - void cameraDestroyed(Ogre::Camera *cam) - { - assert(cam == camera); - camera = NULL; - } - }; -}} -#endif diff --git a/libs/mangle/sound/clients/ogre_output_updater.hpp b/libs/mangle/sound/clients/ogre_output_updater.hpp deleted file mode 100644 index b73168c759..0000000000 --- a/libs/mangle/sound/clients/ogre_output_updater.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef MANGLE_SOUND_OGREUPDATER_H -#define MANGLE_SOUND_OGREUPDATER_H - -/* - This Ogre FrameListener calls update on a SoundFactory - */ - -#include -#include "../output.hpp" -#include - -namespace Mangle { -namespace Sound { - - struct OgreOutputUpdater : Ogre::FrameListener - { - Mangle::Sound::SoundFactoryPtr driver; - - OgreOutputUpdater(Mangle::Sound::SoundFactoryPtr drv) - : driver(drv) - { assert(drv->needsUpdate); } - - bool frameStarted(const Ogre::FrameEvent &evt) - { - driver->update(); - return true; - } - }; -}} - -#endif diff --git a/libs/mangle/sound/filters/input_filter.hpp b/libs/mangle/sound/filters/input_filter.hpp deleted file mode 100644 index 00ee187660..0000000000 --- a/libs/mangle/sound/filters/input_filter.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef MANGLE_INPUT_FILTER_H -#define MANGLE_INPUT_FILTER_H - -#include "../output.hpp" - -#include - -namespace Mangle { -namespace Sound { - -/** - @brief This filter class adds file loading capabilities to a - Sound::SoundFactory class, by associating a SampleSourceLoader with - it. - - The class takes an existing SoundFactory able to load streams, and - associates a SampleSourceLoader with it. The combined class is able - to load files directly. */ -class InputFilter : public SoundFactory -{ - protected: - SoundFactoryPtr snd; - SampleSourceLoaderPtr inp; - - public: - /// Empty constructor - InputFilter() {} - - /// Assign an input manager and a sound manager to this object - InputFilter(SoundFactoryPtr _snd, SampleSourceLoaderPtr _inp) - { set(_snd, _inp); } - - /// Assign an input manager and a sound manager to this object - void set(SoundFactoryPtr _snd, SampleSourceLoaderPtr _inp) - { - inp = _inp; - snd = _snd; - - // Set capabilities - needsUpdate = snd->needsUpdate; - has3D = snd->has3D; - canLoadStream = inp->canLoadStream; - - // Both these should be true, or the use of this class is pretty - // pointless - canLoadSource = snd->canLoadSource; - canLoadFile = inp->canLoadFile; - assert(canLoadSource && canLoadFile); - } - - virtual SoundPtr load(const std::string &file) - { return loadRaw(inp->load(file)); } - - virtual SoundPtr load(Stream::StreamPtr input) - { return loadRaw(inp->load(input)); } - - virtual SoundPtr loadRaw(SampleSourcePtr input) - { return snd->loadRaw(input); } - - virtual void update() { snd->update(); } - virtual void setListenerPos(float x, float y, float z, - float fx, float fy, float fz, - float ux, float uy, float uz) - { snd->setListenerPos(x,y,z,fx,fy,fz,ux,uy,uz); } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_audiere.hpp b/libs/mangle/sound/filters/openal_audiere.hpp deleted file mode 100644 index 5b9b518249..0000000000 --- a/libs/mangle/sound/filters/openal_audiere.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef MANGLE_AUDIERE_OPENAL_H -#define MANGLE_AUDIERE_OPENAL_H - -#include "input_filter.hpp" -#include "../sources/audiere_source.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/// A InputFilter that adds audiere decoding to OpenAL. Audiere has -/// it's own output, but OpenAL sports 3D and other advanced features. -class OpenAL_Audiere_Factory : public InputFilter -{ - public: - OpenAL_Audiere_Factory() - { - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(new AudiereLoader)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_ffmpeg.hpp b/libs/mangle/sound/filters/openal_ffmpeg.hpp deleted file mode 100644 index 42c76af0cd..0000000000 --- a/libs/mangle/sound/filters/openal_ffmpeg.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MANGLE_FFMPEG_OPENAL_H -#define MANGLE_FFMPEG_OPENAL_H - -#include "input_filter.hpp" -#include "../sources/ffmpeg_source.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/// A InputFilter that adds ffmpeg decoding to OpenAL. -class OpenAL_FFMpeg_Factory : public InputFilter -{ - public: - OpenAL_FFMpeg_Factory() - { - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(new FFMpegLoader)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_mpg123.hpp b/libs/mangle/sound/filters/openal_mpg123.hpp deleted file mode 100644 index bfd926c0bb..0000000000 --- a/libs/mangle/sound/filters/openal_mpg123.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef MANGLE_MPG123_OPENAL_H -#define MANGLE_MPG123_OPENAL_H - -#include "input_filter.hpp" -#include "../sources/mpg123_source.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/// A InputFilter that adds mpg123 decoding to OpenAL. Only supports -/// MP3 files. -class OpenAL_Mpg123_Factory : public InputFilter -{ - public: - OpenAL_Mpg123_Factory() - { - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(new Mpg123Loader)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_sndfile.hpp b/libs/mangle/sound/filters/openal_sndfile.hpp deleted file mode 100644 index fd7e780259..0000000000 --- a/libs/mangle/sound/filters/openal_sndfile.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef MANGLE_SNDFILE_OPENAL_H -#define MANGLE_SNDFILE_OPENAL_H - -#include "input_filter.hpp" -#include "../sources/libsndfile.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/// A InputFilter that adds libsnd decoding to OpenAL. libsndfile -/// supports most formats except MP3. -class OpenAL_SndFile_Factory : public InputFilter -{ - public: - OpenAL_SndFile_Factory() - { - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(new SndFileLoader)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_sndfile_mpg123.hpp b/libs/mangle/sound/filters/openal_sndfile_mpg123.hpp deleted file mode 100644 index 6e5db4d0e1..0000000000 --- a/libs/mangle/sound/filters/openal_sndfile_mpg123.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef MANGLE_SNDFILE_MPG123_OPENAL_H -#define MANGLE_SNDFILE_MPG123_OPENAL_H - -#include "input_filter.hpp" -#include "source_splicer.hpp" -#include "../sources/mpg123_source.hpp" -#include "../sources/libsndfile.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/// A InputFilter that uses OpenAL for output, and mpg123 (for MP3) + -/// libsndfile (for everything else) to decode files. Can only load -/// from the file system, and uses the file name to differentiate -/// between mp3 and non-mp3 types. -class OpenAL_SndFile_Mpg123_Factory : public InputFilter -{ - public: - OpenAL_SndFile_Mpg123_Factory() - { - SourceSplicer *splice = new SourceSplicer; - - splice->add("mp3", SampleSourceLoaderPtr(new Mpg123Loader)); - splice->setDefault(SampleSourceLoaderPtr(new SndFileLoader)); - - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(splice)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/openal_various.hpp b/libs/mangle/sound/filters/openal_various.hpp deleted file mode 100644 index 945b3dabda..0000000000 --- a/libs/mangle/sound/filters/openal_various.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MANGLE_VARIOUS_OPENAL_H -#define MANGLE_VARIOUS_OPENAL_H - -#include "input_filter.hpp" -#include "source_splicer.hpp" -#include "../sources/mpg123_source.hpp" -#include "../sources/wav_source.hpp" -#include "../outputs/openal_out.hpp" - -namespace Mangle { -namespace Sound { - -/** A InputFilter that uses OpenAL for output, and load input from - various individual sources, depending on file extension. Currently - supports: - - MP3: mpg123 - WAV: custom wav loader (PCM only) - - This could be an alternative to using eg. 3rd party decoder - libraries like libsndfile. - */ -class OpenAL_Various_Factory : public InputFilter -{ - public: - OpenAL_Various_Factory() - { - SourceSplicer *splice = new SourceSplicer; - - splice->add("mp3", SampleSourceLoaderPtr(new Mpg123Loader)); - splice->add("wav", SampleSourceLoaderPtr(new WavLoader)); - - set(SoundFactoryPtr(new OpenAL_Factory), - SampleSourceLoaderPtr(splice)); - } -}; - -}} -#endif diff --git a/libs/mangle/sound/filters/pure_filter.hpp b/libs/mangle/sound/filters/pure_filter.hpp deleted file mode 100644 index fc5e625744..0000000000 --- a/libs/mangle/sound/filters/pure_filter.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef MANGLE_SOUND_OUTPUT_PUREFILTER_H -#define MANGLE_SOUND_OUTPUT_PUREFILTER_H - -#include "../output.hpp" - -namespace Mangle -{ - namespace Sound - { - // For use in writing other filters - class SoundFilter : public Sound - { - protected: - SoundPtr client; - - public: - SoundFilter(SoundPtr c) : client(c) {} - void play() { client->play(); } - void stop() { client->stop(); } - void pause() { client->pause(); } - bool isPlaying() const { return client->isPlaying(); } - void setVolume(float f) { client->setVolume(f); } - void setPan(float f) { client->setPan(f); } - void setPos(float x, float y, float z) - { client->setPos(x,y,z); } - void setPitch(float p) { client->setPitch(p); } - void setRepeat(bool b) { client->setRepeat(b); } - void setRange(float a, float b=0, float c=0) - { client->setRange(a,b,c); } - void setStreaming(bool b) { client->setStreaming(b); } - void setRelative(bool b) { client->setRelative(b); } - - // The clone() function is not implemented here, as you will - // almost certainly want to override it yourself - }; - - class FactoryFilter : public SoundFactory - { - protected: - SoundFactoryPtr client; - - public: - FactoryFilter(SoundFactoryPtr c) : client(c) - { - needsUpdate = client->needsUpdate; - has3D = client->has3D; - canLoadFile = client->canLoadFile; - canLoadStream = client->canLoadStream; - canLoadSource = client->canLoadSource; - } - - SoundPtr loadRaw(SampleSourcePtr input) - { return client->loadRaw(input); } - - SoundPtr load(Stream::StreamPtr input) - { return client->load(input); } - - SoundPtr load(const std::string &file) - { return client->load(file); } - - void update() - { client->update(); } - - void setListenerPos(float x, float y, float z, - float fx, float fy, float fz, - float ux, float uy, float uz) - { - client->setListenerPos(x,y,z,fx,fy,fz,ux,uy,uz); - } - }; - } -} -#endif diff --git a/libs/mangle/sound/filters/source_splicer.hpp b/libs/mangle/sound/filters/source_splicer.hpp deleted file mode 100644 index 9c76230865..0000000000 --- a/libs/mangle/sound/filters/source_splicer.hpp +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef MANGLE_SOUND_SOURCE_SPLICE_H -#define MANGLE_SOUND_SOURCE_SPLICE_H - -#include "../source.hpp" -#include -#include -#include -#include - -namespace Mangle -{ - namespace Sound - { - class SourceSplicer : public SampleSourceLoader - { - struct SourceType - { - std::string type; - SampleSourceLoaderPtr loader; - }; - - typedef std::list TypeList; - TypeList list; - SampleSourceLoaderPtr catchAll; - - static bool isMatch(char a, char b) - { - if(a >= 'A' && a <= 'Z') - a += 'a' - 'A'; - if(b >= 'A' && b <= 'Z') - b += 'a' - 'A'; - return a == b; - } - - public: - SourceSplicer() - { - canLoadStream = false; - canLoadFile = true; - } - - void add(const std::string &type, SampleSourceLoaderPtr fact) - { - SourceType tp; - tp.type = type; - tp.loader = fact; - list.push_back(tp); - } - - void setDefault(SampleSourceLoaderPtr def) - { - catchAll = def; - } - - SampleSourcePtr load(const std::string &file) - { - // Search the list for this file type. - for(TypeList::iterator it = list.begin(); - it != list.end(); it++) - { - const std::string &t = it->type; - - int diff = file.size() - t.size(); - if(diff < 0) continue; - - bool match = true; - for(unsigned i=0; iloader->load(file); - } - // If not found, use the catch-all - if(catchAll) - return catchAll->load(file); - - throw std::runtime_error("No handler for sound file " + file); - } - - SampleSourcePtr load(Stream::StreamPtr input) { assert(0); } - }; - } -} - -#endif diff --git a/libs/mangle/sound/output.hpp b/libs/mangle/sound/output.hpp deleted file mode 100644 index e30bf21e27..0000000000 --- a/libs/mangle/sound/output.hpp +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef MANGLE_SOUND_OUTPUT_H -#define MANGLE_SOUND_OUTPUT_H - -#include -#include - -#include "source.hpp" -#include "../stream/stream.hpp" - -namespace Mangle { -namespace Sound { - -/// Abstract interface for a single playable sound -/** This class represents one sound outlet, which may be played, - stopped, paused and so on. - - Sound instances are created from the SoundFactory class. Sounds - may be connected to a SampleSource or read directly from a file, - and they may support 3d sounds, looping and other features - depending on the capabilities of the backend system. - - To create multiple instances of one sound, it is recommended to - 'clone' an existing instance instead of reloading it from - file. Cloned sounds will often (depending on the back-end) use - less memory due to shared buffers. -*/ -class Sound; -typedef boost::shared_ptr SoundPtr; -typedef boost::weak_ptr WSoundPtr; - -class Sound -{ - public: - /// Play or resume the sound - virtual void play() = 0; - - /// Stop the sound - virtual void stop() = 0; - - /// Pause the sound, may be resumed later - virtual void pause() = 0; - - /// Check if the sound is still playing - virtual bool isPlaying() const = 0; - - /// Set the volume. The parameter must be between 0.0 and 1.0. - virtual void setVolume(float) = 0; - - /// Set left/right pan. -1.0 is left, 0.0 is center and 1.0 is right. - virtual void setPan(float) = 0; - - /// Set pitch (1.0 is normal speed) - virtual void setPitch(float) = 0; - - /// Set range factors for 3D sounds. The meaning of the fields - /// depend on implementation. - virtual void setRange(float a, float b=0.0, float c=0.0) = 0; - - /// Set the position. May not work with all backends. - virtual void setPos(float x, float y, float z) = 0; - - /// Set loop mode - virtual void setRepeat(bool) = 0; - - /// If set to true the sound will not be affected by player movement - virtual void setRelative(bool) = 0; - - /// Set streaming mode. - /** This may be used by implementations to optimize for very large - files. If streaming mode is off (default), most implementations - will load the entire file into memory before starting playback. - */ - virtual void setStreaming(bool) = 0; - - /// Create a new instance of this sound. - /** Playback status is not cloned, only the sound data - itself. Back-ends can use this as a means of sharing data and - saving memory. */ - virtual SoundPtr clone() = 0; - - /// Virtual destructor - virtual ~Sound() {} -}; - -/// Factory interface for creating Sound objects -/** The SoundFactory is the main entry point to a given sound output - system. It is used to create Sound objects, which may be connected - to a sound file or stream, and which may be individually played, - paused, and so on. - - The class also contains a set of public bools which describe the - capabilities the particular system. These should be set by - implementations (base classes) in their respective constructors. - */ -class SoundFactory -{ - public: - /// Virtual destructor - virtual ~SoundFactory() {} - - /** @brief If set to true, you should call update() regularly (every frame - or so) on this sound manager. If false, update() should not be - called. - */ - bool needsUpdate; - - /** @brief true if 3D functions are available. If false, all use of - 3D sounds and calls to setPos / setListenerPos will result in - undefined behavior. - */ - bool has3D; - - /// true if we can load sounds directly from file (containing encoded data) - bool canLoadFile; - - /// If true, we can lound sound files from a Stream (containing encoded data) - bool canLoadStream; - - /// true if we can load sounds from a SampleSource (containing raw data) - bool canLoadSource; - - /** - @brief Load a sound from a sample source. Only valid if - canLoadSource is true. - - This function loads a sound from a given stream as defined by - SampleSource. - - @param input the input source - @param stream true if the file should be streamed. - Implementations may use this for optimizing playback of - large files, but they are not required to. - @return a new Sound object - */ - virtual SoundPtr loadRaw(SampleSourcePtr input) = 0; - - /** - @brief Load a sound file from stream. Only valid if canLoadStream - is true. - - @param input audio file stream - @param stream true if the file should be streamed - @see load(InputSource*,bool) - */ - virtual SoundPtr load(Stream::StreamPtr input) = 0; - - /** - @brief Load a sound directly from file. Only valid if canLoadFile - is true. - - @param file filename - @param stream true if the file should be streamed - @see load(InputSource*,bool) - */ - virtual SoundPtr load(const std::string &file) = 0; - - /// Call this every frame if needsUpdate is true - /** - This should be called regularly (about every frame in a normal - game setting.) Implementions may use this for filling streaming - buffers and similar tasks. Implementations that do not need this - should set needsUpdate to false. - */ - virtual void update() { assert(0); } - - /// Set listener position (coordinates, front and up vectors) - /** - Only valid if has3D is true. - - @param x,y,z listener position - @param fx,fy,fz listener's looking direction - @param ux,uy,uz listener's up direction - */ - virtual void setListenerPos(float x, float y, float z, - float fx, float fy, float fz, - float ux, float uy, float uz) = 0; -}; - -typedef boost::shared_ptr SoundFactoryPtr; - -}} // Namespaces - -#endif diff --git a/libs/mangle/sound/outputs/openal_out.cpp b/libs/mangle/sound/outputs/openal_out.cpp deleted file mode 100644 index 2056b4f602..0000000000 --- a/libs/mangle/sound/outputs/openal_out.cpp +++ /dev/null @@ -1,500 +0,0 @@ -#include "openal_out.hpp" -#include -#include - -#include "../../stream/filters/buffer_stream.hpp" - -#ifdef _WIN32 -#include -#include -#elif defined(__APPLE__) -#include -#include -#else -#include -#include -#endif - -using namespace Mangle::Sound; - -// ---- Helper functions and classes ---- - -// Static buffer used to shuffle sound data from the input into -// OpenAL. The data is only stored temporarily and then immediately -// shuffled off to the library. This is not thread safe, but it works -// fine with multiple sounds in one thread. It could be made thread -// safe simply by using thread local storage. -const size_t BSIZE = 32*1024; -static char tmp_buffer[BSIZE]; - -// Number of buffers used (per sound) for streaming sounds. Each -// buffer is of size BSIZE. Increasing this will make streaming sounds -// more fault tolerant against temporary lapses in call to update(), -// but will also increase memory usage. -// This was changed from 4 to 150 for an estimated 30 seconds tolerance. -// At some point we should replace it with a more multithreading-ish -// solution. -const int STREAM_BUF_NUM = 150; - -static void fail(const std::string &msg) -{ throw std::runtime_error("OpenAL exception: " + msg); } - -/* - Check for AL error. Since we're always calling this with string - literals, and it only makes sense to optimize for the non-error - case, the parameter is const char* rather than std::string. - - This way we don't force the compiler to create a string object each - time we're called (since the string is never used unless there's an - error), although a good compiler might have optimized that away in - any case. - */ -static void checkALError(const char *where) -{ - ALenum err = alGetError(); - if(err != AL_NO_ERROR) - { - std::string msg = where; - - const ALchar* errmsg = alGetString(err); - if(errmsg) - fail("\"" + std::string(alGetString(err)) + "\" while " + msg); - else - fail("non-specified error while " + msg + " (did you forget to initialize OpenAL?)"); - } -} - -static void getALFormat(SampleSourcePtr inp, int &fmt, int &rate) -{ - boost::int32_t rate_, ch, bits; - inp->getInfo(&rate_, &ch, &bits); - rate = rate_; - - fmt = 0; - - if(bits == 8) - { - if(ch == 1) fmt = AL_FORMAT_MONO8; - if(ch == 2) fmt = AL_FORMAT_STEREO8; - if(alIsExtensionPresent("AL_EXT_MCFORMATS")) - { - if(ch == 4) fmt = alGetEnumValue("AL_FORMAT_QUAD8"); - if(ch == 6) fmt = alGetEnumValue("AL_FORMAT_51CHN8"); - } - } - if(bits == 16) - { - if(ch == 1) fmt = AL_FORMAT_MONO16; - if(ch == 2) fmt = AL_FORMAT_STEREO16; - if(ch == 4) fmt = alGetEnumValue("AL_FORMAT_QUAD16"); - if(alIsExtensionPresent("AL_EXT_MCFORMATS")) - { - if(ch == 4) fmt = alGetEnumValue("AL_FORMAT_QUAD16"); - if(ch == 6) fmt = alGetEnumValue("AL_FORMAT_51CHN16"); - } - } - - if(fmt == 0) - fail("Unsupported input format"); -} - -/// OpenAL sound output -class Mangle::Sound::OpenAL_Sound : public Sound -{ - ALuint inst; - - // Buffers. Only the first is used for non-streaming sounds. - ALuint bufferID[STREAM_BUF_NUM]; - - // Number of buffers used - int bufNum; - - // Parameters used for filling buffers - int fmt, rate; - - // Poor mans reference counting. Might improve this later. When - // NULL, the buffer has not been set up yet. - int *refCnt; - - bool streaming; - - // Input stream - SampleSourcePtr input; - - OpenAL_Factory *owner; - bool ownerAlive; - - // Used for streamed sound list - OpenAL_Sound *next, *prev; - - void setupBuffer(); - - // Fill data into the given buffer and queue it, if there is any - // data left to queue. Assumes the buffer is already unqueued, if - // necessary. - void queueBuffer(ALuint buf) - { - // If there is no more data, do nothing - if(!input) return; - if(input->eof()) - { - input.reset(); - return; - } - - // Get some new data - size_t bytes = input->read(tmp_buffer, BSIZE); - if(bytes == 0) - { - input.reset(); - return; - } - - // Move data into the OpenAL buffer - alBufferData(buf, fmt, tmp_buffer, bytes, rate); - // Queue it - alSourceQueueBuffers(inst, 1, &buf); - checkALError("Queueing buffer data"); - } - - public: - /// Read samples from the given input buffer - OpenAL_Sound(SampleSourcePtr input, OpenAL_Factory *fact); - - /// Play an existing buffer, with a given ref counter. Used - /// internally for cloning. - OpenAL_Sound(ALuint buf, int *ref, OpenAL_Factory *fact); - - ~OpenAL_Sound(); - - // Must be called regularly on streamed sounds - void update() - { - if(!streaming) return; - if(!input) return; - - // Get the number of processed buffers - ALint count; - alGetSourcei(inst, AL_BUFFERS_PROCESSED, &count); - checkALError("getting number of unprocessed buffers"); - - for(int i=0; iupdate(); -} - -void OpenAL_Factory::notifyStreaming(OpenAL_Sound *snd) -{ - // Add the sound to the streaming list - streaming.push_back(snd); -} - -void OpenAL_Factory::notifyDelete(OpenAL_Sound *snd) -{ - // Remove the sound from the stream list - streaming.remove(snd); -} - -OpenAL_Factory::~OpenAL_Factory() -{ - // Notify remaining streamed sounds that we're dying - StreamList::iterator it = streaming.begin(); - for(;it != streaming.end(); it++) - (*it)->notifyOwnerDeath(); - - // Deinitialize sound system - if(didSetup) - { - alcMakeContextCurrent(NULL); - if(context) alcDestroyContext((ALCcontext*)context); - if(device) alcCloseDevice((ALCdevice*)device); - } -} - -// ---- OpenAL_Sound ---- - -void OpenAL_Sound::play() -{ - setupBuffer(); - alSourcePlay(inst); - checkALError("starting playback"); -} - -void OpenAL_Sound::stop() -{ - alSourceStop(inst); - checkALError("stopping"); -} - -void OpenAL_Sound::pause() -{ - alSourcePause(inst); - checkALError("pausing"); -} - -bool OpenAL_Sound::isPlaying() const -{ - ALint state; - alGetSourcei(inst, AL_SOURCE_STATE, &state); - - return state == AL_PLAYING; -} - -void OpenAL_Sound::setVolume(float volume) -{ - if(volume > 1.0) volume = 1.0; - if(volume < 0.0) volume = 0.0; - alSourcef(inst, AL_GAIN, volume); - checkALError("setting volume"); -} - -void OpenAL_Sound::setRange(float a, float b, float) -{ - alSourcef(inst, AL_REFERENCE_DISTANCE, a); - alSourcef(inst, AL_MAX_DISTANCE, b); - checkALError("setting sound ranges"); -} - -void OpenAL_Sound::setPos(float x, float y, float z) -{ - alSource3f(inst, AL_POSITION, x, y, z); - checkALError("setting position"); -} - -void OpenAL_Sound::setPitch(float pitch) -{ - alSourcef(inst, AL_PITCH, pitch); - checkALError("setting pitch"); -} - -void OpenAL_Sound::setRepeat(bool rep) -{ - alSourcei(inst, AL_LOOPING, rep?AL_TRUE:AL_FALSE); -} - -void OpenAL_Sound::setRelative(bool rel) -{ - alSourcei(inst, AL_SOURCE_RELATIVE, rel?AL_TRUE:AL_FALSE); - checkALError("setting relative"); -} - -SoundPtr OpenAL_Sound::clone() -{ - setupBuffer(); - assert(!streaming && "cloning streamed sounds not supported"); - return SoundPtr(new OpenAL_Sound(bufferID[0], refCnt, owner)); -} - -// Constructor used for cloned sounds -OpenAL_Sound::OpenAL_Sound(ALuint buf, int *ref, OpenAL_Factory *fact) - : refCnt(ref), streaming(false), owner(fact), ownerAlive(false) -{ - // Increase the reference count - assert(ref != NULL); - (*refCnt)++; - - // Set up buffer - bufferID[0] = buf; - bufNum = 1; - - // Create a source - alGenSources(1, &inst); - checkALError("creating instance (clone)"); - alSourcei(inst, AL_BUFFER, bufferID[0]); - checkALError("assigning buffer (clone)"); -} - -// Constructor used for original (non-cloned) sounds -OpenAL_Sound::OpenAL_Sound(SampleSourcePtr _input, OpenAL_Factory *fact) - : refCnt(NULL), streaming(false), input(_input), owner(fact), ownerAlive(false) -{ - // Create a source - alGenSources(1, &inst); - checkALError("creating source"); - - // By default, the sound starts out in a buffer-less mode. We don't - // create a buffer until the sound is played. This gives the user - // the chance to call setStreaming(true) first. -} - -void OpenAL_Sound::setupBuffer() -{ - if(refCnt != NULL) return; - - assert(input); - - // Get the format - getALFormat(input, fmt, rate); - - // Create a cheap reference counter for the buffer - refCnt = new int; - *refCnt = 1; - - if(streaming) bufNum = STREAM_BUF_NUM; - else bufNum = 1; - - // Set up the OpenAL buffer(s) - alGenBuffers(bufNum, bufferID); - checkALError("generating buffer(s)"); - assert(bufferID[0] != 0); - - // STREAMING. - if(streaming) - { - // Just queue all the buffers with data and exit. queueBuffer() - // will work correctly also in the case where there is not - // enough data to fill all the buffers. - for(int i=0; inotifyStreaming(this); - ownerAlive = true; - - return; - } - - // NON-STREAMING. We have to load all the data and shove it into the - // buffer. - - // Does the stream support pointer operations? - if(input->hasPtr) - { - // If so, we can read the data directly from the stream - alBufferData(bufferID[0], fmt, input->getPtr(), input->size(), rate); - } - else - { - // Read the entire stream into a temporary buffer first - Mangle::Stream::BufferStream buf(input, 128*1024); - - // Then copy that into OpenAL - alBufferData(bufferID[0], fmt, buf.getPtr(), buf.size(), rate); - } - checkALError("loading sound data"); - - // We're done with the input stream, release the pointer - input.reset(); - - alSourcei(inst, AL_BUFFER, bufferID[0]); - checkALError("assigning buffer"); -} - -OpenAL_Sound::~OpenAL_Sound() -{ - // Stop - alSourceStop(inst); - - // Return sound - alDeleteSources(1, &inst); - - // Notify the factory that we quit. You will hear from our union - // rep. The bool check is to handle cases where the manager goes out - // of scope before the sounds do. In that case, don't try to contact - // the factory. - if(ownerAlive) - owner->notifyDelete(this); - - // Decrease the reference counter - if((-- (*refCnt)) == 0) - { - // We're the last owner. Delete the buffer(s) and the counter - // itself. - alDeleteBuffers(bufNum, bufferID); - checkALError("deleting buffer"); - delete refCnt; - } -} diff --git a/libs/mangle/sound/outputs/openal_out.hpp b/libs/mangle/sound/outputs/openal_out.hpp deleted file mode 100644 index 44d03ecf81..0000000000 --- a/libs/mangle/sound/outputs/openal_out.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef MANGLE_SOUND_OPENAL_OUT_H -#define MANGLE_SOUND_OPENAL_OUT_H - -#include "../output.hpp" -#include - -namespace Mangle { -namespace Sound { - -class OpenAL_Sound; - -class OpenAL_Factory : public SoundFactory -{ - void *device; - void *context; - bool didSetup; - - // List of streaming sounds that need to be updated every frame. - typedef std::list StreamList; - StreamList streaming; - - friend class OpenAL_Sound; - void notifyStreaming(OpenAL_Sound*); - void notifyDelete(OpenAL_Sound*); - - public: - /// Initialize object. Pass true (default) if you want the - /// constructor to set up the current ALCdevice and ALCcontext for - /// you. - OpenAL_Factory(bool doSetup = true); - ~OpenAL_Factory(); - - SoundPtr load(const std::string &file) { assert(0); return SoundPtr(); } - SoundPtr load(Stream::StreamPtr input) { assert(0); return SoundPtr(); } - SoundPtr loadRaw(SampleSourcePtr input); - - void update(); - void setListenerPos(float x, float y, float z, - float fx, float fy, float fz, - float ux, float uy, float uz); -}; - -}} // namespaces -#endif diff --git a/libs/mangle/sound/source.hpp b/libs/mangle/sound/source.hpp deleted file mode 100644 index fbe7cf958b..0000000000 --- a/libs/mangle/sound/source.hpp +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef MANGLE_SOUND_SOURCE_H -#define MANGLE_SOUND_SOURCE_H - -#include -#include -#include - -#include "../stream/stream.hpp" - -namespace Mangle { -namespace Sound { - -typedef boost::int32_t int32_t; - -/// A stream containing raw sound data and information about the format -class SampleSource : public Stream::Stream -{ - protected: - bool isEof; - - public: - SampleSource() : isEof(false) {} - - /// Get the sample rate, number of channels, and bits per - /// sample. NULL parameters are ignored. - virtual void getInfo(int32_t *rate, int32_t *channels, int32_t *bits) = 0; - - bool eof() const { return isEof; } - - // Disabled functions by default. You can still override them in - // subclasses. - void seek(size_t pos) { assert(0); } - size_t tell() const { assert(0); return 0; } - size_t size() const { assert(0); return 0; } -}; - -typedef boost::shared_ptr SampleSourcePtr; - -/// A factory interface for loading SampleSources from file or stream -class SampleSourceLoader -{ - public: - /// If true, the stream version of load() works - bool canLoadStream; - - /// If true, the file version of load() works - bool canLoadFile; - - /// Load a sound input source from file (if canLoadFile is true) - virtual SampleSourcePtr load(const std::string &file) = 0; - - /// Load a sound input source from stream (if canLoadStream is true) - virtual SampleSourcePtr load(Stream::StreamPtr input) = 0; - - /// Virtual destructor - virtual ~SampleSourceLoader() {} -}; - -typedef boost::shared_ptr SampleSourceLoaderPtr; - -}} // namespaces -#endif diff --git a/libs/mangle/sound/sources/audiere_source.cpp b/libs/mangle/sound/sources/audiere_source.cpp deleted file mode 100644 index faaa3c8c5b..0000000000 --- a/libs/mangle/sound/sources/audiere_source.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "audiere_source.hpp" - -#include "../../stream/clients/audiere_file.hpp" - -#include - -using namespace Mangle::Stream; - -static void fail(const std::string &msg) -{ throw std::runtime_error("Audiere exception: " + msg); } - -using namespace audiere; -using namespace Mangle::Sound; - -// --- SampleSource --- - -void AudiereSource::getInfo(Mangle::Sound::int32_t *rate, - Mangle::Sound::int32_t *channels, Mangle::Sound::int32_t *bits) -{ - SampleFormat fmt; - int channels_, rate_; - sample->getFormat(channels_, rate_, fmt); - *channels = channels_; - *rate = rate_; - if(bits) - { - if(fmt == SF_U8) - *bits = 8; - else if(fmt == SF_S16) - *bits = 16; - else assert(0); - } -} - -// --- Constructors --- - -AudiereSource::AudiereSource(const std::string &file) -{ - sample = OpenSampleSource(file.c_str()); - - if(!sample) - fail("Couldn't load file " + file); - - doSetup(); -} - -AudiereSource::AudiereSource(StreamPtr input) -{ - // Use our Stream::AudiereFile implementation to convert a Mangle - // 'Stream' to an Audiere 'File' - sample = OpenSampleSource(new AudiereFile(input)); - if(!sample) - fail("Couldn't load stream"); - - doSetup(); -} - -AudiereSource::AudiereSource(audiere::SampleSourcePtr src) - : sample(src) -{ assert(sample); doSetup(); } - -// Common function called from all constructors -void AudiereSource::doSetup() -{ - assert(sample); - - SampleFormat fmt; - int channels, rate; - sample->getFormat(channels, rate, fmt); - - // Calculate the size of one frame, and pass it to SampleReader. - setup(GetSampleSize(fmt) * channels); - - isSeekable = sample->isSeekable(); - hasPosition = true; - hasSize = true; -} diff --git a/libs/mangle/sound/sources/audiere_source.hpp b/libs/mangle/sound/sources/audiere_source.hpp deleted file mode 100644 index d797c55c86..0000000000 --- a/libs/mangle/sound/sources/audiere_source.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef MANGLE_SOUND_AUDIERE_SOURCE_H -#define MANGLE_SOUND_AUDIERE_SOURCE_H - -#include "sample_reader.hpp" - -// audiere.h from 1.9.4 (latest) release uses -// cstring routines like strchr() and strlen() without -// including cstring itself. -#include -#include - -namespace Mangle { -namespace Sound { - -/// A sample source that decodes files using Audiere -class AudiereSource : public SampleReader -{ - audiere::SampleSourcePtr sample; - - size_t readSamples(void *data, size_t length) - { return sample->read(length, data); } - - void doSetup(); - - public: - /// Decode the given sound file - AudiereSource(const std::string &file); - - /// Decode the given sound stream - AudiereSource(Mangle::Stream::StreamPtr src); - - /// Read directly from an existing audiere::SampleSource - AudiereSource(audiere::SampleSourcePtr src); - - void getInfo(int32_t *rate, int32_t *channels, int32_t *bits); - - void seek(size_t pos) { sample->setPosition(pos/frameSize); } - size_t tell() const { return sample->getPosition()*frameSize; } - size_t size() const { return sample->getLength()*frameSize; } -}; - -#include "loadertemplate.hpp" - -/// A factory that loads AudiereSources from file and stream -typedef SSL_Template AudiereLoader; - -}} // Namespace -#endif diff --git a/libs/mangle/sound/sources/ffmpeg_source.cpp b/libs/mangle/sound/sources/ffmpeg_source.cpp deleted file mode 100644 index 6349be6913..0000000000 --- a/libs/mangle/sound/sources/ffmpeg_source.cpp +++ /dev/null @@ -1,189 +0,0 @@ -#include "ffmpeg_source.hpp" - -#include - -using namespace Mangle::Sound; - -// Static output buffer. Not thread safe, but supports multiple -// streams operated from the same thread. -static uint8_t outBuf[AVCODEC_MAX_AUDIO_FRAME_SIZE]; - -static void fail(const std::string &msg) -{ throw std::runtime_error("FFMpeg exception: " + msg); } - -// --- Loader --- - -static bool init = false; - -FFMpegLoader::FFMpegLoader(bool setup) -{ - if(setup && !init) - { - av_register_all(); - av_log_set_level(AV_LOG_ERROR); - init = true; - } -} - -// --- Source --- - -FFMpegSource::FFMpegSource(const std::string &file) -{ - std::string msg; - AVCodec *codec; - - if(av_open_input_file(&FmtCtx, file.c_str(), NULL, 0, NULL) != 0) - fail("Error loading audio file " + file); - - if(av_find_stream_info(FmtCtx) < 0) - { - msg = "Error in file stream " + file; - goto err; - } - - // Pick the first audio stream, if any - for(StreamNum = 0; StreamNum < FmtCtx->nb_streams; StreamNum++) - { - // Pick the first audio stream - if(FmtCtx->streams[StreamNum]->codec->codec_type == CODEC_TYPE_AUDIO) - break; - } - - if(StreamNum == FmtCtx->nb_streams) - fail("File '" + file + "' didn't contain any audio streams"); - - // Open the decoder - CodecCtx = FmtCtx->streams[StreamNum]->codec; - codec = avcodec_find_decoder(CodecCtx->codec_id); - - if(!codec || avcodec_open(CodecCtx, codec) < 0) - { - msg = "Error loading '" + file + "': "; - if(codec) - msg += "coded error"; - else - msg += "no codec found"; - goto err; - } - - // No errors, we're done - return; - - // Handle errors - err: - av_close_input_file(FmtCtx); - fail(msg); -} - -FFMpegSource::~FFMpegSource() -{ - avcodec_close(CodecCtx); - av_close_input_file(FmtCtx); -} - -void FFMpegSource::getInfo(int32_t *rate, int32_t *channels, int32_t *bits) -{ - if(rate) *rate = CodecCtx->sample_rate; - if(channels) *channels = CodecCtx->channels; - if(bits) *bits = 16; -} - -size_t FFMpegSource::read(void *data, size_t length) -{ - if(isEof) return 0; - - size_t left = length; - uint8_t *outPtr = (uint8_t*)data; - - // First, copy over any stored data we might be sitting on - { - size_t s = storage.size(); - size_t copy = s; - if(s) - { - // Make sure there's room - if(copy > left) - copy = left; - - // Copy - memcpy(outPtr, &storage[0], copy); - outPtr += copy; - left -= copy; - - // Is there anything left in the storage? - assert(s>= copy); - s -= copy; - if(s) - { - assert(left == 0); - - // Move it to the start and resize - memmove(&storage[0], &storage[copy], s); - storage.resize(s); - } - } - } - - // Next, get more input data from stream, and decode it - while(left) - { - AVPacket packet; - - // Get the next packet, if any - if(av_read_frame(FmtCtx, &packet) < 0) - break; - - // We only allow one stream per file at the moment - assert((int)StreamNum == packet.stream_index); - - // Decode the packet - int len = AVCODEC_MAX_AUDIO_FRAME_SIZE; - int tmp = avcodec_decode_audio2(CodecCtx, (int16_t*)outBuf, - &len, packet.data, packet.size); - assert(tmp < 0 || tmp == packet.size); - - // We don't need the input packet any longer - av_free_packet(&packet); - - if(tmp < 0) - fail("Error decoding audio stream"); - - // Copy whatever data we got, and advance the pointer - if(len > 0) - { - // copy = how many bytes do we copy now - size_t copy = len; - if(copy > left) - copy = left; - - // len = how many bytes are left uncopied - len -= copy; - - // copy data - memcpy(outPtr, outBuf, copy); - - // left = how much space is left in the caller output - // buffer. This loop repeats as long left is > 0 - left -= copy; - outPtr += copy; - assert(left >= 0); - - if(len > 0) - { - // There were uncopied bytes. Store them for later. - assert(left == 0); - storage.resize(len); - memcpy(&storage[0], outBuf, len); - } - } - } - - // End of loop. Return the number of bytes copied. - assert(left <= length); - - // If we're returning less than asked for, then we're done - if(left > 0) - isEof = true; - - return length - left; -} diff --git a/libs/mangle/sound/sources/ffmpeg_source.hpp b/libs/mangle/sound/sources/ffmpeg_source.hpp deleted file mode 100644 index d422b98090..0000000000 --- a/libs/mangle/sound/sources/ffmpeg_source.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef MANGLE_SOUND_FFMPEG_H -#define MANGLE_SOUND_FFMPEG_H - -#include "../source.hpp" -#include -#include - -extern "C" -{ -#include -#include -} - -namespace Mangle { -namespace Sound { - -class FFMpegSource : public SampleSource -{ - AVFormatContext *FmtCtx; - AVCodecContext *CodecCtx; - unsigned int StreamNum; - - std::vector storage; - - public: - /// Decode the given sound file - FFMpegSource(const std::string &file); - - /// Decode the given sound stream (not supported by FFmpeg) - FFMpegSource(Mangle::Stream::StreamPtr src) { assert(0); } - - ~FFMpegSource(); - - // Overrides - void getInfo(int32_t *rate, int32_t *channels, int32_t *bits); - size_t read(void *data, size_t length); -}; - -#include "loadertemplate.hpp" - -/// A factory that loads FFMpegSources from file -class FFMpegLoader : public SSL_Template -{ - public: - - /// Sets up the libavcodec library. If you want to do your own - /// setup, send a setup=false parameter. - FFMpegLoader(bool setup=true); -}; - -}} // namespaces -#endif diff --git a/libs/mangle/sound/sources/libsndfile.cpp b/libs/mangle/sound/sources/libsndfile.cpp deleted file mode 100644 index b69a2d4368..0000000000 --- a/libs/mangle/sound/sources/libsndfile.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "libsndfile.hpp" - -#include -#include - -using namespace Mangle::Stream; - -static void fail(const std::string &msg) -{ throw std::runtime_error("Mangle::libsndfile: " + msg); } - -using namespace Mangle::Sound; - -void SndFileSource::getInfo(int32_t *_rate, int32_t *_channels, int32_t *_bits) -{ - *_rate = rate; - *_channels = channels; - *_bits = bits; -} - -size_t SndFileSource::readSamples(void *data, size_t length) -{ - // readf_* reads entire frames, including channels - return sf_readf_short((SNDFILE*)handle, (short*)data, length); -} - -SndFileSource::SndFileSource(const std::string &file) -{ - SF_INFO info; - info.format = 0; - handle = sf_open(file.c_str(), SFM_READ, &info); - if(handle == NULL) - fail("Failed to open " + file); - - // I THINK that using sf_read_short forces the library to convert to - // 16 bits no matter what, but the libsndfile docs aren't exactly - // very clear on this point. - channels = info.channels; - rate = info.samplerate; - bits = 16; - - // 16 bits per sample times number of channels - setup(2*channels); -} - -SndFileSource::~SndFileSource() -{ - sf_close((SNDFILE*)handle); -} diff --git a/libs/mangle/sound/sources/libsndfile.hpp b/libs/mangle/sound/sources/libsndfile.hpp deleted file mode 100644 index 7286cf0fe4..0000000000 --- a/libs/mangle/sound/sources/libsndfile.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef MANGLE_SOUND_SNDFILE_SOURCE_H -#define MANGLE_SOUND_SNDFILE_SOURCE_H - -#include "sample_reader.hpp" - -namespace Mangle { -namespace Sound { - -/// A sample source that decodes files using libsndfile. Supports most -/// formats except mp3. -class SndFileSource : public SampleReader -{ - void *handle; - int channels, rate, bits; - - size_t readSamples(void *data, size_t length); - - public: - /// Decode the given sound file - SndFileSource(const std::string &file); - - /// Decode the given sound stream (not supported) - SndFileSource(Mangle::Stream::StreamPtr src) { assert(0); } - - ~SndFileSource(); - - void getInfo(int32_t *rate, int32_t *channels, int32_t *bits); -}; - -#include "loadertemplate.hpp" - -/// A factory that loads SndFileSources from file and stream -typedef SSL_Template SndFileLoader; - -}} // Namespace -#endif diff --git a/libs/mangle/sound/sources/loadertemplate.hpp b/libs/mangle/sound/sources/loadertemplate.hpp deleted file mode 100644 index a27a77d106..0000000000 --- a/libs/mangle/sound/sources/loadertemplate.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef SSL_TEMPL_H -#define SSL_TEMPL_H - -template -class SSL_Template : public SampleSourceLoader -{ - public: - - SSL_Template() - { - canLoadStream = stream; - canLoadFile = file; - } - - SampleSourcePtr load(const std::string &filename) - { - assert(canLoadFile); - return SampleSourcePtr(new SourceT(filename)); - } - - SampleSourcePtr load(Stream::StreamPtr input) - { - assert(canLoadStream); - return SampleSourcePtr(new SourceT(input)); - } -}; - -#endif diff --git a/libs/mangle/sound/sources/mpg123_source.cpp b/libs/mangle/sound/sources/mpg123_source.cpp deleted file mode 100644 index 24d6ecce1c..0000000000 --- a/libs/mangle/sound/sources/mpg123_source.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "mpg123_source.hpp" - -#include - -#include - -using namespace Mangle::Stream; - -/* - TODOs: - - - mpg123 impressively enough supports custom stream reading. Which - means we could (and SHOULD!) support reading from Mangle::Streams - as well. But I'll save it til I need it. - - An alternative way to do this is through feeding (which they also - support), but that's more messy. - - - the library also supports output, via various other sources, - including ALSA, OSS, PortAudio, PulseAudio and SDL. Using this - library as a pure output library (if that is possible) would be a - nice shortcut over using those libraries - OTOH it's another - dependency. - - - we could implement seek(), tell() and size(), but they aren't - really necessary. Furthermore, since the returned size is only a - guess, it is not safe to rely on it. - */ - -static void fail(const std::string &msg) -{ throw std::runtime_error("Mangle::Mpg123 exception: " + msg); } - -static void checkError(int err, void *mh = NULL) -{ - if(err != MPG123_OK) - { - std::string msg; - if(mh) msg = mpg123_strerror((mpg123_handle*)mh); - else msg = mpg123_plain_strerror(err); - fail(msg); - } -} - -using namespace Mangle::Sound; - -void Mpg123Source::getInfo(int32_t *pRate, int32_t *pChannels, int32_t *pBits) -{ - // Use the values we found in the constructor - *pRate = rate; - *pChannels = channels; - *pBits = bits; -} - -size_t Mpg123Source::read(void *data, size_t length) -{ - size_t done; - // This is extraordinarily nice. I like this library. - int err = mpg123_read((mpg123_handle*)mh, (unsigned char*)data, length, &done); - assert(done <= length); - if(err == MPG123_DONE) - isEof = true; - else - checkError(err, mh); - return done; -} - -Mpg123Loader::Mpg123Loader(bool setup) -{ - // Do as we're told - if(setup) - { - int err = mpg123_init(); - checkError(err); - } - didSetup = setup; -} - -Mpg123Loader::~Mpg123Loader() -{ - // Deinitialize the library on exit - if(didSetup) - mpg123_exit(); -} - -Mpg123Source::Mpg123Source(const std::string &file) -{ - int err; - - // Create a new handle - mh = mpg123_new(NULL, &err); - if(mh == NULL) - checkError(err, mh); - - mpg123_handle *mhh = (mpg123_handle*)mh; - - // Open the file (hack around constness) - err = mpg123_open(mhh, (char*)file.c_str()); - checkError(err, mh); - - // Get the format - int encoding; - err = mpg123_getformat(mhh, &rate, &channels, &encoding); - checkError(err, mh); - if(encoding != MPG123_ENC_SIGNED_16) - fail("Unsupported encoding in " + file); - - // This is the only bit size we support. - bits = 16; -} - -Mpg123Source::~Mpg123Source() -{ - mpg123_close((mpg123_handle*)mh); - mpg123_delete((mpg123_handle*)mh); -} diff --git a/libs/mangle/sound/sources/mpg123_source.hpp b/libs/mangle/sound/sources/mpg123_source.hpp deleted file mode 100644 index 1ac16b5306..0000000000 --- a/libs/mangle/sound/sources/mpg123_source.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef MANGLE_SOUND_MPG123_SOURCE_H -#define MANGLE_SOUND_MPG123_SOURCE_H - -#include "../source.hpp" -#include - -namespace Mangle { -namespace Sound { - -/// A sample source that decodes files using libmpg123. Only supports -/// MP3 files. -class Mpg123Source : public SampleSource -{ - void *mh; - long int rate; - int channels, bits; - - public: - /// Decode the given sound file - Mpg123Source(const std::string &file); - - /// Needed by SSL_Template but not yet supported - Mpg123Source(Mangle::Stream::StreamPtr data) - { assert(0); } - - ~Mpg123Source(); - - void getInfo(int32_t *rate, int32_t *channels, int32_t *bits); - size_t read(void *data, size_t length); -}; - -#include "loadertemplate.hpp" - -/// A factory that loads Mpg123Sources from file and stream -struct Mpg123Loader : SSL_Template -{ - /** Sets up libmpg123 for you, and closes it on destruction. If you - want to do this yourself, send setup=false. - */ - Mpg123Loader(bool setup=true); - ~Mpg123Loader(); -private: - bool didSetup; -}; - -}} // Namespace -#endif diff --git a/libs/mangle/sound/sources/sample_reader.cpp b/libs/mangle/sound/sources/sample_reader.cpp deleted file mode 100644 index c30de654a5..0000000000 --- a/libs/mangle/sound/sources/sample_reader.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "sample_reader.hpp" - -#include - -using namespace Mangle::Sound; - -void SampleReader::setup(int size) -{ - pullSize = 0; - frameSize = size; - pullOver = new char[size]; -} - -SampleReader::~SampleReader() -{ - if(pullOver) - delete[] pullOver; -} - -size_t SampleReader::read(void *_data, size_t length) -{ - if(isEof) return 0; - char *data = (char*)_data; - - // Pullsize holds the number of bytes that were copied "extra" at - // the end of LAST round. If non-zero, it also means there is data - // left in the pullOver buffer. - if(pullSize) - { - // Amount of data left - size_t doRead = frameSize - pullSize; - assert(doRead > 0); - - // Make sure we don't read more than we're supposed to - if(doRead > length) doRead = length; - - memcpy(data, pullOver+pullSize, doRead); - - // Update the number of bytes now copied - pullSize += doRead; - assert(pullSize <= frameSize); - - if(pullSize < frameSize) - { - // There is STILL data left in the pull buffer, and we've - // done everything we were supposed to. Leave it and return. - assert(doRead == length); - return doRead; - } - - // Set up variables for further reading below. No need to update - // pullSize, it is overwritten anyway. - length -= doRead; - data += doRead; - } - - // Number of whole frames - size_t frames = length / frameSize; - - // Read the data - size_t res = readSamples(data, frames); - assert(res <= frames); - - // Total bytes read - size_t num = res*frameSize; - data += num; - - if(res < frames) - { - // End of stream. - isEof = true; - // Determine how much we read - return data-(char*)_data; - } - - // Determine the overshoot - pullSize = length - num; - assert(pullSize < frameSize && pullSize >= 0); - - // Are we missing data? - if(pullSize) - { - // Fill in one sample - res = readSamples(pullOver,1); - assert(res == 1 || res == 0); - if(res) - { - // Move as much as we can into the output buffer - memcpy(data, pullOver, pullSize); - data += pullSize; - } - else - // Failed reading, we're out of data - isEof = true; - } - - // Return the total number of bytes stored - return data-(char*)_data; -} diff --git a/libs/mangle/sound/sources/sample_reader.hpp b/libs/mangle/sound/sources/sample_reader.hpp deleted file mode 100644 index 89ddf1f652..0000000000 --- a/libs/mangle/sound/sources/sample_reader.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef MANGLE_SOUND_SAMPLE_READER_H -#define MANGLE_SOUND_SAMPLE_READER_H - -#include "../source.hpp" - -namespace Mangle { -namespace Sound { - - /* This is a helper base class for other SampleSource - implementations. Certain sources (like Audiere and libsndfile) - insist on reading whole samples rather than bytes. This class - compensates for that, and allows you to read bytes rather than - samples. - - There are two ways for subclasses to use this class. EITHER call - setup() with the size of frameSize. This will allocate a buffer, - which the destructor frees. OR set frameSize manually and - manipulate the pullOver pointer yourself. In that case you MUST - reset it to NULL if you don't want the destructor to call - delete[] on it. - */ -class SampleReader : public SampleSource -{ - // How much of the above buffer is in use. - int pullSize; - -protected: - // Pullover buffer - char* pullOver; - - // Size of one frame, in bytes. This is also the size of the - // pullOver buffer. - int frameSize; - - // The parameter gives the size of one sample/frame, in bytes. - void setup(int); - - // Read the given number of samples, in multiples of frameSize. Does - // not have to set or respect isEof. - virtual size_t readSamples(void *data, size_t num) = 0; - - public: - SampleReader() : pullSize(0), pullOver(NULL) {} - ~SampleReader(); - size_t read(void *data, size_t length); -}; -}} // Namespace -#endif diff --git a/libs/mangle/sound/sources/stream_source.hpp b/libs/mangle/sound/sources/stream_source.hpp deleted file mode 100644 index 43c605a004..0000000000 --- a/libs/mangle/sound/sources/stream_source.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef MANGLE_SOUND_STREAMSOURCE_H -#define MANGLE_SOUND_STREAMSOURCE_H - -#include "../source.hpp" - -namespace Mangle { -namespace Sound { - -/// A class for reading raw samples directly from a stream. -class Stream2Samples : public SampleSource -{ - Mangle::Stream::StreamPtr inp; - int32_t rate, channels, bits; - - public: - Stream2Samples(Mangle::Stream::StreamPtr _inp, int32_t _rate, int32_t _channels, int32_t _bits) - : inp(_inp), rate(_rate), channels(_channels), bits(_bits) - { - isSeekable = inp->isSeekable; - hasPosition = inp->hasPosition; - hasSize = inp->hasSize; - hasPtr = inp->hasPtr; - } - - /// Get the sample rate, number of channels, and bits per - /// sample. NULL parameters are ignored. - void getInfo(int32_t *_rate, int32_t *_channels, int32_t *_bits) - { - if(_rate) *_rate = rate; - if(_channels) *_channels = channels; - if(_bits) *_bits = bits; - } - - size_t read(void *out, size_t count) - { return inp->read(out, count); } - - void seek(size_t pos) { inp->seek(pos); } - size_t tell() const { return inp->tell(); } - size_t size() const { return inp->size(); } - bool eof() const { return inp->eof(); } - const void *getPtr() { return inp->getPtr(); } - const void *getPtr(size_t size) { return inp->getPtr(size); } - const void *getPtr(size_t pos, size_t size) { return inp->getPtr(pos, size); } -}; - -}} // namespaces -#endif diff --git a/libs/mangle/sound/sources/wav_source.cpp b/libs/mangle/sound/sources/wav_source.cpp deleted file mode 100644 index a46b3d27ec..0000000000 --- a/libs/mangle/sound/sources/wav_source.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "wav_source.hpp" - -#include "../../stream/servers/file_stream.hpp" - -#include - -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -static void fail(const std::string &msg) -{ throw std::runtime_error("Mangle::Wav exception: " + msg); } - -void WavSource::getInfo(int32_t *pRate, int32_t *pChannels, int32_t *pBits) -{ - // Use the values we found in the constructor - *pRate = rate; - *pChannels = channels; - *pBits = bits; -} - -void WavSource::seek(size_t pos) -{ - // Seek the stream and set 'left' - assert(isSeekable); - if(pos > total) pos = total; - input->seek(dataOffset + pos); - left = total-pos; -} - -size_t WavSource::read(void *data, size_t length) -{ - if(length > left) - length = left; - size_t read = input->read(data, length); - if(read < length) - // Something went wrong - fail("WAV read error"); - return length; -} - -void WavSource::open(Mangle::Stream::StreamPtr data) -{ - input = data; - - hasPosition = true; - hasSize = true; - // If we can check position and seek in the input stream, then we - // can seek the wav data too. - isSeekable = input->isSeekable && input->hasPosition; - - // Read header - unsigned int val; - - input->read(&val,4); // header - if(val != 0x46464952) // "RIFF" - fail("Not a WAV file"); - - input->read(&val,4); // size (ignored) - input->read(&val,4); // file format - if(val != 0x45564157) // "WAVE" - fail("Not a valid WAV file"); - - input->read(&val,4); // "fmt " - input->read(&val,4); // chunk size (must be 16) - if(val != 16) - fail("Unsupported WAV format"); - - input->read(&val,2); - if(val != 1) - fail("Non-PCM (compressed) WAV files not supported"); - - // Sound data specification - channels = 0; - input->read(&channels,2); - input->read(&rate, 4); - - // Skip next 6 bytes - input->read(&val, 4); - input->read(&val, 2); - - // Bits per sample - bits = 0; - input->read(&bits,2); - - input->read(&val,4); // Data header - if(val != 0x61746164) // "data" - fail("Expected data block"); - - // Finally, read the data size - input->read(&total,4); - left = total; - - // Store the beginning of the data block for later - if(input->hasPosition) - dataOffset = input->tell(); -} - -WavSource::WavSource(const std::string &file) -{ open(StreamPtr(new FileStream(file))); } diff --git a/libs/mangle/sound/sources/wav_source.hpp b/libs/mangle/sound/sources/wav_source.hpp deleted file mode 100644 index 227f4da733..0000000000 --- a/libs/mangle/sound/sources/wav_source.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef MANGLE_SOUND_WAV_SOURCE_H -#define MANGLE_SOUND_WAV_SOURCE_H - -#include "../source.hpp" -#include - -namespace Mangle { -namespace Sound { - -/// WAV file decoder. Has no external library dependencies. -class WavSource : public SampleSource -{ - // Sound info - uint32_t rate, channels, bits; - - // Total size (of output) and bytes left - uint32_t total, left; - - // Offset in input of the beginning of the data block - size_t dataOffset; - - Mangle::Stream::StreamPtr input; - - void open(Mangle::Stream::StreamPtr); - - public: - /// Decode the given sound file - WavSource(const std::string&); - - /// Decode from stream - WavSource(Mangle::Stream::StreamPtr s) - { open(s); } - - void getInfo(int32_t *rate, int32_t *channels, int32_t *bits); - size_t read(void *data, size_t length); - - void seek(size_t); - size_t tell() const { return total-left; } - size_t size() const { return total; } - bool eof() const { return left > 0; } -}; - -#include "loadertemplate.hpp" - -/// A factory that loads WavSources from file and stream -typedef SSL_Template WavLoader; - -}} // Namespace -#endif diff --git a/libs/mangle/sound/tests/.gitignore b/libs/mangle/sound/tests/.gitignore deleted file mode 100644 index 8144904045..0000000000 --- a/libs/mangle/sound/tests/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*_test diff --git a/libs/mangle/sound/tests/Makefile b/libs/mangle/sound/tests/Makefile deleted file mode 100644 index 6fcac72da7..0000000000 --- a/libs/mangle/sound/tests/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -GCC=g++ -I../ -Wall - -all: audiere_source_test ffmpeg_source_test openal_output_test openal_audiere_test openal_ffmpeg_test openal_mpg123_test openal_sndfile_test wav_source_test openal_various_test - -L_FFMPEG=$(shell pkg-config --libs libavcodec libavformat) -I_FFMPEG=-I/usr/include/libavcodec -I/usr/include/libavformat -L_OPENAL=$(shell pkg-config --libs openal) -L_AUDIERE=-laudiere - -wav_source_test: wav_source_test.cpp ../sources/wav_source.cpp - $(GCC) $^ -o $@ - -openal_various_test: openal_various_test.cpp ../sources/mpg123_source.cpp ../sources/wav_source.cpp ../outputs/openal_out.cpp - $(GCC) $^ -o $@ -lmpg123 ${L_OPENAL} - -openal_audiere_test: openal_audiere_test.cpp ../sources/audiere_source.cpp ../sources/sample_reader.cpp ../outputs/openal_out.cpp ../../stream/clients/audiere_file.cpp - $(GCC) $^ -o $@ $(L_AUDIERE) $(L_OPENAL) - -openal_ffmpeg_test: openal_ffmpeg_test.cpp ../sources/ffmpeg_source.cpp ../outputs/openal_out.cpp - $(GCC) $^ -o $@ $(L_FFMPEG) $(L_OPENAL) $(I_FFMPEG) - -openal_mpg123_test: openal_mpg123_test.cpp ../sources/mpg123_source.cpp ../outputs/openal_out.cpp - $(GCC) $^ -o $@ -lmpg123 ${L_OPENAL} - -openal_sndfile_test: openal_sndfile_test.cpp ../sources/libsndfile.cpp ../sources/sample_reader.cpp ../outputs/openal_out.cpp - $(GCC) $^ -o $@ -lsndfile ${L_OPENAL} - -openal_output_test: openal_output_test.cpp ../outputs/openal_out.cpp - $(GCC) $^ -o $@ $(L_OPENAL) - -audiere_source_test: audiere_source_test.cpp ../sources/audiere_source.cpp ../../stream/clients/audiere_file.cpp ../sources/sample_reader.cpp - $(GCC) $^ -o $@ $(L_AUDIERE) - -ffmpeg_source_test: ffmpeg_source_test.cpp ../sources/ffmpeg_source.cpp - $(GCC) $^ -o $@ $(L_FFMPEG) $(I_FFMPEG) - -clean: - rm *_test diff --git a/libs/mangle/sound/tests/audiere_source_test.cpp b/libs/mangle/sound/tests/audiere_source_test.cpp deleted file mode 100644 index 637d743b21..0000000000 --- a/libs/mangle/sound/tests/audiere_source_test.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../sources/audiere_source.hpp" - -#include -#include - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -// Contents and size of cow.raw -void *orig; -size_t orig_size; - -void run(SampleSourcePtr &src) -{ - size_t ss = src->size(); - assert(ss == orig_size); - - cout << "Source size: " << ss << endl; - int rate, channels, bits; - src->getInfo(&rate, &channels, &bits); - cout << "rate=" << rate << "\nchannels=" << channels - << "\nbits=" << bits << endl; - - cout << "Reading entire buffer into memory\n"; - void *buf = malloc(ss); - src->read(buf, ss); - - cout << "Comparing...\n"; - if(memcmp(buf, orig, ss) != 0) - { - cout << "Oops!\n"; - assert(0); - } - - cout << "Done\n"; -} - -int main() -{ - { - cout << "Reading cow.raw first\n"; - FileStream tmp("cow.raw"); - orig_size = tmp.size(); - cout << "Size: " << orig_size << endl; - orig = malloc(orig_size); - tmp.read(orig, orig_size); - cout << "Done\n"; - } - - { - cout << "\nLoading cow.wav by filename:\n"; - SampleSourcePtr cow_file( new AudiereSource("cow.wav") ); - run(cow_file); - } - - { - cout << "\nLoading cow.wav by stream:\n"; - StreamPtr inp( new FileStream("cow.wav") ); - SampleSourcePtr cow_stream( new AudiereSource(inp) ); - run(cow_stream); - } - - return 0; -} diff --git a/libs/mangle/sound/tests/cow.raw b/libs/mangle/sound/tests/cow.raw deleted file mode 100644 index c4d155bbfb1caba2e41b1a97e01f29276c945c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37502 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 F{|CY68e9MX diff --git a/libs/mangle/sound/tests/cow.wav b/libs/mangle/sound/tests/cow.wav deleted file mode 100644 index 494e6c4ac12a3d318532fdf8178d72f775bc40af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37546 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�b}Ou2(@Nod9rZet}z#nWoL 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 - -#include "../../stream/servers/file_stream.hpp" -#include "../sources/ffmpeg_source.hpp" - -#include -#include - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -// Contents and size of cow.raw -void *orig; -size_t orig_size; - -void run(SampleSourcePtr &src) -{ - int rate, channels, bits; - src->getInfo(&rate, &channels, &bits); - cout << "rate=" << rate << "\nchannels=" << channels - << "\nbits=" << bits << endl; - - cout << "Reading entire buffer into memory\n"; - void *buf = malloc(orig_size); - size_t ss = src->read(buf, orig_size); - cout << "Actually read: " << ss << endl; - assert(ss == orig_size); - - cout << "Comparing...\n"; - if(memcmp(buf, orig, ss) != 0) - { - cout << "Oops!\n"; - assert(0); - } - - cout << "Done\n"; -} - -int main() -{ - { - cout << "Reading cow.raw first\n"; - FileStream tmp("cow.raw"); - orig_size = tmp.size(); - cout << "Size: " << orig_size << endl; - orig = malloc(orig_size); - tmp.read(orig, orig_size); - cout << "Done\n"; - } - - // Initializes the library, not used for anything else. - FFMpegLoader fm; - - { - cout << "\nLoading cow.wav by filename:\n"; - SampleSourcePtr cow_file( new FFMpegSource("cow.wav") ); - run(cow_file); - } - - return 0; -} diff --git a/libs/mangle/sound/tests/openal_audiere_test.cpp b/libs/mangle/sound/tests/openal_audiere_test.cpp deleted file mode 100644 index ced7fe5d23..0000000000 --- a/libs/mangle/sound/tests/openal_audiere_test.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../filters/openal_audiere.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -OpenAL_Audiere_Factory mg; - -void play(const char* name, bool stream=false) -{ - // Only load streams if the backend supports it - if(stream && !mg.canLoadStream) - return; - - cout << "Playing " << name; - if(stream) cout << " (from stream)"; - cout << "\n"; - - SoundPtr snd; - - try - { - if(stream) - snd = mg.load(StreamPtr(new FileStream(name))); - else - snd = mg.load(name); - - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - if(mg.needsUpdate) mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } -} - -int main() -{ - play("cow.wav"); - play("owl.ogg"); - play("cow.wav", true); - return 0; -} diff --git a/libs/mangle/sound/tests/openal_ffmpeg_test.cpp b/libs/mangle/sound/tests/openal_ffmpeg_test.cpp deleted file mode 100644 index d4b8e93003..0000000000 --- a/libs/mangle/sound/tests/openal_ffmpeg_test.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../filters/openal_ffmpeg.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -OpenAL_FFMpeg_Factory mg; - -void play(const char* name, bool stream=false) -{ - // Only load streams if the backend supports it - if(stream && !mg.canLoadStream) - return; - - cout << "Playing " << name; - if(stream) cout << " (from stream)"; - cout << "\n"; - - SoundPtr snd; - - try - { - if(stream) - snd = mg.load(StreamPtr(new FileStream(name))); - else - snd = mg.load(name); - - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - if(mg.needsUpdate) mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } -} - -int main() -{ - play("cow.wav"); - play("owl.ogg"); - play("cow.wav", true); - return 0; -} diff --git a/libs/mangle/sound/tests/openal_mpg123_test.cpp b/libs/mangle/sound/tests/openal_mpg123_test.cpp deleted file mode 100644 index fef1a5605a..0000000000 --- a/libs/mangle/sound/tests/openal_mpg123_test.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../filters/openal_mpg123.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -OpenAL_Mpg123_Factory mg; - -void play(const char* name, bool stream=false) -{ - // Only load streams if the backend supports it - if(stream && !mg.canLoadStream) - return; - - cout << "Playing " << name; - if(stream) cout << " (from stream)"; - cout << "\n"; - - SoundPtr snd; - - try - { - if(stream) - snd = mg.load(StreamPtr(new FileStream(name))); - else - snd = mg.load(name); - - snd->setStreaming(true); - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - if(mg.needsUpdate) mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } -} - -int main(int argc, char**argv) -{ - if(argc != 2) - cout << "Please specify an MP3 file\n"; - else - play(argv[1]); - return 0; -} diff --git a/libs/mangle/sound/tests/openal_output_test.cpp b/libs/mangle/sound/tests/openal_output_test.cpp deleted file mode 100644 index a8059ec652..0000000000 --- a/libs/mangle/sound/tests/openal_output_test.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../sources/stream_source.hpp" -#include "../outputs/openal_out.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -int main() -{ - cout << "Loading cow.raw\n"; - - int rate = 11025; - int chan = 1; - int bits = 16; - - cout << " rate=" << rate << "\n channels=" << chan - << "\n bits=" << bits << endl; - - StreamPtr file( new FileStream("cow.raw") ); - SampleSourcePtr source( new Stream2Samples( file, rate, chan, bits)); - - cout << "Playing\n"; - - OpenAL_Factory mg; - - SoundPtr snd = mg.loadRaw(source); - - try - { - // Try setting all kinds of stuff before playing. OpenAL_Sound - // uses delayed buffer loading, but these should still work - // without a buffer. - snd->stop(); - snd->pause(); - snd->setVolume(0.8); - snd->setPitch(0.9); - - // Also test streaming, since all the other examples test - // non-streaming sounds. - snd->setStreaming(true); - - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } - return 0; -} diff --git a/libs/mangle/sound/tests/openal_sndfile_test.cpp b/libs/mangle/sound/tests/openal_sndfile_test.cpp deleted file mode 100644 index bd5f117a59..0000000000 --- a/libs/mangle/sound/tests/openal_sndfile_test.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../filters/openal_sndfile.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -OpenAL_SndFile_Factory mg; - -void play(const char* name, bool stream=false) -{ - // Only load streams if the backend supports it - if(stream && !mg.canLoadStream) - return; - - cout << "Playing " << name; - if(stream) cout << " (from stream)"; - cout << "\n"; - - SoundPtr snd; - - try - { - if(stream) - snd = mg.load(StreamPtr(new FileStream(name))); - else - snd = mg.load(name); - - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - if(mg.needsUpdate) mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } -} - -int main() -{ - play("cow.wav"); - play("owl.ogg"); - play("cow.wav", true); - return 0; -} diff --git a/libs/mangle/sound/tests/openal_various_test.cpp b/libs/mangle/sound/tests/openal_various_test.cpp deleted file mode 100644 index 9426a672ec..0000000000 --- a/libs/mangle/sound/tests/openal_various_test.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -#include "../../stream/servers/file_stream.hpp" -#include "../filters/openal_various.hpp" - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; - -OpenAL_Various_Factory mg; - -void play(const char* name, bool stream=false) -{ - // Only load streams if the backend supports it - if(stream && !mg.canLoadStream) - return; - - cout << "Playing " << name; - if(stream) cout << " (from stream)"; - cout << "\n"; - - SoundPtr snd; - - try - { - if(stream) - snd = mg.load(StreamPtr(new FileStream(name))); - else - snd = mg.load(name); - - snd->play(); - - while(snd->isPlaying()) - { - usleep(10000); - if(mg.needsUpdate) mg.update(); - } - } - catch(exception &e) - { - cout << " ERROR: " << e.what() << "\n"; - } -} - -int main() -{ - play("cow.wav"); - play("cow.wav", true); - return 0; -} diff --git a/libs/mangle/sound/tests/output/audiere_source_test.out b/libs/mangle/sound/tests/output/audiere_source_test.out deleted file mode 100644 index 47a5a9e418..0000000000 --- a/libs/mangle/sound/tests/output/audiere_source_test.out +++ /dev/null @@ -1,21 +0,0 @@ -Reading cow.raw first -Size: 37502 -Done - -Loading cow.wav by filename: -Source size: 37502 -rate=11025 -channels=1 -bits=16 -Reading entire buffer into memory -Comparing... -Done - -Loading cow.wav by stream: -Source size: 37502 -rate=11025 -channels=1 -bits=16 -Reading entire buffer into memory -Comparing... -Done diff --git a/libs/mangle/sound/tests/output/ffmpeg_source_test.out b/libs/mangle/sound/tests/output/ffmpeg_source_test.out deleted file mode 100644 index 1c7d491139..0000000000 --- a/libs/mangle/sound/tests/output/ffmpeg_source_test.out +++ /dev/null @@ -1,12 +0,0 @@ -Reading cow.raw first -Size: 37502 -Done - -Loading cow.wav by filename: -rate=11025 -channels=1 -bits=16 -Reading entire buffer into memory -Actually read: 37502 -Comparing... -Done diff --git a/libs/mangle/sound/tests/output/openal_audiere_test.out b/libs/mangle/sound/tests/output/openal_audiere_test.out deleted file mode 100644 index 4fe01eac2b..0000000000 --- a/libs/mangle/sound/tests/output/openal_audiere_test.out +++ /dev/null @@ -1,3 +0,0 @@ -Playing cow.wav -Playing owl.ogg -Playing cow.wav (from stream) diff --git a/libs/mangle/sound/tests/output/openal_ffmpeg_test.out b/libs/mangle/sound/tests/output/openal_ffmpeg_test.out deleted file mode 100644 index 96e1db0f9a..0000000000 --- a/libs/mangle/sound/tests/output/openal_ffmpeg_test.out +++ /dev/null @@ -1,2 +0,0 @@ -Playing cow.wav -Playing owl.ogg diff --git a/libs/mangle/sound/tests/output/openal_mpg123_test.out b/libs/mangle/sound/tests/output/openal_mpg123_test.out deleted file mode 100644 index e55dabbb1d..0000000000 --- a/libs/mangle/sound/tests/output/openal_mpg123_test.out +++ /dev/null @@ -1 +0,0 @@ -Please specify an MP3 file diff --git a/libs/mangle/sound/tests/output/openal_output_test.out b/libs/mangle/sound/tests/output/openal_output_test.out deleted file mode 100644 index 04392a72e8..0000000000 --- a/libs/mangle/sound/tests/output/openal_output_test.out +++ /dev/null @@ -1,5 +0,0 @@ -Loading cow.raw - rate=11025 - channels=1 - bits=16 -Playing diff --git a/libs/mangle/sound/tests/output/openal_sndfile_test.out b/libs/mangle/sound/tests/output/openal_sndfile_test.out deleted file mode 100644 index 96e1db0f9a..0000000000 --- a/libs/mangle/sound/tests/output/openal_sndfile_test.out +++ /dev/null @@ -1,2 +0,0 @@ -Playing cow.wav -Playing owl.ogg diff --git a/libs/mangle/sound/tests/output/openal_various_test.out b/libs/mangle/sound/tests/output/openal_various_test.out deleted file mode 100644 index f25a555138..0000000000 --- a/libs/mangle/sound/tests/output/openal_various_test.out +++ /dev/null @@ -1 +0,0 @@ -Playing cow.wav diff --git a/libs/mangle/sound/tests/output/wav_source_test.out b/libs/mangle/sound/tests/output/wav_source_test.out deleted file mode 100644 index b6fc8e6fc8..0000000000 --- a/libs/mangle/sound/tests/output/wav_source_test.out +++ /dev/null @@ -1,12 +0,0 @@ -Source size: 37502 -rate=11025 -channels=1 -bits=16 -Reading entire buffer into memory - -Reading cow.raw -Size: 37502 - -Comparing... - -Done diff --git a/libs/mangle/sound/tests/owl.ogg b/libs/mangle/sound/tests/owl.ogg deleted file mode 100644 index e992f24d48206663c794ce1f835b483aed730319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18641 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"`&tnb`wrwjv1+m1l^X62V>RQ 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 uxXE2GB)VyFe*N* "output/$a.out" - git add "output/$a.out" - fi -done diff --git a/libs/mangle/sound/tests/wav_source_test.cpp b/libs/mangle/sound/tests/wav_source_test.cpp deleted file mode 100644 index 749af18496..0000000000 --- a/libs/mangle/sound/tests/wav_source_test.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include - -#include "../sources/wav_source.hpp" -#include "../../stream/servers/file_stream.hpp" - -#include -#include - -using namespace std; -using namespace Mangle::Sound; -using namespace Mangle::Stream; - -int main() -{ - WavSource wav("cow.wav"); - - cout << "Source size: " << wav.size() << endl; - int rate, channels, bits; - wav.getInfo(&rate, &channels, &bits); - cout << "rate=" << rate << "\nchannels=" << channels - << "\nbits=" << bits << endl; - - cout << "Reading entire buffer into memory\n"; - void *buf = malloc(wav.size()); - wav.read(buf, wav.size()); - - cout << "\nReading cow.raw\n"; - FileStream tmp("cow.raw"); - cout << "Size: " << tmp.size() << endl; - void *buf2 = malloc(tmp.size()); - tmp.read(buf2, tmp.size()); - - cout << "\nComparing...\n"; - if(tmp.size() != wav.size()) - { - cout << "SIZE MISMATCH!\n"; - assert(0); - } - - if(memcmp(buf, buf2, wav.size()) != 0) - { - cout << "CONTENT MISMATCH!\n"; - assert(0); - } - - cout << "\nDone\n"; - return 0; -} diff --git a/libs/openengine/sound/sndmanager.cpp b/libs/openengine/sound/sndmanager.cpp deleted file mode 100644 index 02c6ba1e77..0000000000 --- a/libs/openengine/sound/sndmanager.cpp +++ /dev/null @@ -1,219 +0,0 @@ -#include "sndmanager.hpp" - -#include "../misc/list.hpp" -#include - -using namespace OEngine::Sound; -using namespace Mangle::Sound; - -/** This is our own internal implementation of the - Mangle::Sound::Sound interface. This class links a SoundPtr to - itself and prevents itself from being deleted as long as the sound - is playing. - */ -struct OEngine::Sound::ManagedSound : SoundFilter -{ -private: - /** Who's your daddy? This is set if and only if we are listed - internally in the given SoundManager. - - It may be NULL if the manager has been deleted but the user - keeps their own SoundPtrs to the object. - */ - SoundManager *mgr; - - /** Keep a weak pointer to ourselves, which we convert into a - 'strong' pointer when we are playing. When 'self' is pointing to - ourselves, the object will never be deleted. - - This is used to make sure the sound is not deleted while - playing, unless it is explicitly ordered to do so by the - manager. - - TODO: This kind of construct is useful. If we need it elsewhere - later, template it. It would be generally useful in any system - where we poll to check if a resource is still needed, but where - manual references are allowed. - */ - WSoundPtr weak; - SoundPtr self; - - // Keep this object from being deleted - void lock() - { - self = SoundPtr(weak); - } - - // Release the lock. This may or may not delete the object. Never do - // anything after calling unlock()! - void unlock() - { - self.reset(); - } - -public: - // Used for putting ourselves in linked lists - ManagedSound *next, *prev; - - /** Detach this sound from its manager. This means that the manager - will no longer know we exist. Typically only called when either - the sound or the manager is about to get deleted. - - Since this means update() will no longer be called, we also have - to unlock the sound manually since it will no longer be able to - do that itself. This means that the sound may be deleted, even - if it is still playing, when the manager is deleted. - - However, you are still allowed to keep and manage your own - SoundPtr references, but the lock/unlock system is disabled - after the manager is gone. - */ - void detach() - { - if(mgr) - { - mgr->detach(this); - mgr = NULL; - } - - // Unlock must be last command. Object may get deleted at this - // point. - unlock(); - } - - ManagedSound(SoundPtr snd, SoundManager *mg) - : SoundFilter(snd), mgr(mg) - {} - ~ManagedSound() { detach(); } - - // Needed to set up the weak pointer - void setup(SoundPtr self) - { - weak = WSoundPtr(self); - } - - // Override play() to mark the object as locked - void play() - { - SoundFilter::play(); - - // Lock the object so that it is not deleted while playing. Only - // do this if we have a manager, otherwise the object will never - // get unlocked. - if(mgr) lock(); - } - - // Called regularly by the manager - void update() - { - // If we're no longer playing, don't force object retention. - if(!isPlaying()) - unlock(); - - // unlock() may delete the object, so don't do anything below this - // point. - } - - SoundPtr clone() - { - // Cloning only works when we have a manager. - assert(mgr); - return mgr->wrap(client->clone()); - } -}; - -struct SoundManager::SoundManagerList -{ -private: - // A linked list of ManagedSound objects. - typedef Misc::List SoundList; - SoundList list; - -public: - // Add a new sound to the list - void addNew(ManagedSound* snd) - { - list.insert(snd); - } - - // Remove a sound from the list - void remove(ManagedSound *snd) - { - list.remove(snd); - } - - // Number of sounds in the list - int numSounds() { return list.getNum(); } - - // Update all sounds - void updateAll() - { - ManagedSound *s = list.getHead(); - while(s) - { - ManagedSound *cur = s; - // Propagate first, since update() may delete object - s = s->next; - cur->update(); - } - } - - // Detach and unlock all sounds - void detachAll() - { - ManagedSound *s = list.getHead(); - while(s) - { - ManagedSound *cur = s; - s = s->next; - cur->detach(); - } - } -}; - -SoundManager::SoundManager(SoundFactoryPtr fact) - : FactoryFilter(fact) -{ - needsUpdate = true; - list = new SoundManagerList; -} - -SoundManager::~SoundManager() -{ - // Detach all sounds - list->detachAll(); -} - -SoundPtr SoundManager::wrap(SoundPtr client) -{ - // Create and set up the sound wrapper - ManagedSound *snd = new ManagedSound(client,this); - SoundPtr ptr(snd); - snd->setup(ptr); - - // Add ourselves to the list of all sounds - list->addNew(snd); - - return ptr; -} - -// Remove the sound from this manager. -void SoundManager::detach(ManagedSound *sound) -{ - list->remove(sound); -} - -int SoundManager::numSounds() -{ - return list->numSounds(); -} - -void SoundManager::update() -{ - // Update all the sounds we own - list->updateAll(); - - // Update the source if it needs it - if(client->needsUpdate) - client->update(); -} diff --git a/libs/openengine/sound/sndmanager.hpp b/libs/openengine/sound/sndmanager.hpp deleted file mode 100644 index 5ea0c4fc37..0000000000 --- a/libs/openengine/sound/sndmanager.hpp +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef OENGINE_SOUND_MANAGER_H -#define OENGINE_SOUND_MANAGER_H - -#include - -namespace OEngine -{ - namespace Sound - { - using namespace Mangle::Sound; - - class ManagedSound; - - /** A manager of Mangle::Sounds. - - The sound manager is a wrapper around the more low-level - SoundFactory - although it is also itself an implementation of - SoundFactory. It will: - - keep a list of all created sounds - - let you iterate the list - - keep references to playing sounds so you don't have to - - auto-release references to sounds that are finished playing - (ie. deleting them if you're not referencing them) - */ - class SoundManager : public FactoryFilter - { - // Shove the implementation details into the cpp file. - struct SoundManagerList; - SoundManagerList *list; - - // Create a new sound wrapper based on the given source sound. - SoundPtr wrap(SoundPtr snd); - - /** Internal function. Will completely disconnect the given - sound from this manager. Called from ManagedSound. - */ - friend class ManagedSound; - void detach(ManagedSound *sound); - public: - SoundManager(SoundFactoryPtr fact); - ~SoundManager(); - void update(); - - /// Get number of sounds currently managed by this manager. - int numSounds(); - - SoundPtr loadRaw(SampleSourcePtr input) - { return wrap(client->loadRaw(input)); } - - SoundPtr load(Mangle::Stream::StreamPtr input) - { return wrap(client->load(input)); } - - SoundPtr load(const std::string &file) - { return wrap(client->load(file)); } - - // Play a sound immediately, and release when done unless you - // keep the returned SoundPtr. - SoundPtr play(Mangle::Stream::StreamPtr sound) - { - SoundPtr snd = load(sound); - snd->play(); - return snd; - } - - SoundPtr play(const std::string &sound) - { - SoundPtr snd = load(sound); - snd->play(); - return snd; - } - - // Ditto for 3D sounds - SoundPtr play3D(Mangle::Stream::StreamPtr sound, float x, float y, float z) - { - SoundPtr snd = load(sound); - snd->setPos(x,y,z); - snd->play(); - return snd; - } - - SoundPtr play3D(const std::string &sound, float x, float y, float z) - { - SoundPtr snd = load(sound); - snd->setPos(x,y,z); - snd->play(); - return snd; - } - }; - - typedef boost::shared_ptr SoundManagerPtr; - } -} -#endif diff --git a/libs/openengine/sound/tests/Makefile b/libs/openengine/sound/tests/Makefile deleted file mode 100644 index 04952167f7..0000000000 --- a/libs/openengine/sound/tests/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -GCC=g++ -I../ - -all: sound_manager_test sound_3d_test - -L_FFMPEG=$(shell pkg-config --libs libavcodec libavformat) -L_OPENAL=$(shell pkg-config --libs openal) -L_AUDIERE=-laudiere - -sound_manager_test: sound_manager_test.cpp ../../mangle/sound/sources/audiere_source.cpp ../../mangle/sound/outputs/openal_out.cpp ../../mangle/stream/clients/audiere_file.cpp ../sndmanager.cpp - $(GCC) $^ -o $@ $(L_AUDIERE) $(L_OPENAL) -I../.. - -sound_3d_test: sound_3d_test.cpp ../../mangle/sound/sources/audiere_source.cpp ../../mangle/sound/outputs/openal_out.cpp ../../mangle/stream/clients/audiere_file.cpp ../sndmanager.cpp - $(GCC) $^ -o $@ $(L_AUDIERE) $(L_OPENAL) -I../.. - -clean: - rm *_test diff --git a/libs/openengine/sound/tests/output/sound_3d_test.out b/libs/openengine/sound/tests/output/sound_3d_test.out deleted file mode 100644 index a443c84f02..0000000000 --- a/libs/openengine/sound/tests/output/sound_3d_test.out +++ /dev/null @@ -1,3 +0,0 @@ -Playing at 0,0,0 -Playing at 1,1,0 -Playing at -1,0,0 diff --git a/libs/openengine/sound/tests/output/sound_manager_test.out b/libs/openengine/sound/tests/output/sound_manager_test.out deleted file mode 100644 index 2b458493d2..0000000000 --- a/libs/openengine/sound/tests/output/sound_manager_test.out +++ /dev/null @@ -1,5 +0,0 @@ -Playing ../../mangle/sound/tests/cow.wav -Replaying -pause -restart -Done playing. diff --git a/libs/openengine/sound/tests/sound_3d_test.cpp b/libs/openengine/sound/tests/sound_3d_test.cpp deleted file mode 100644 index f5b197fd0b..0000000000 --- a/libs/openengine/sound/tests/sound_3d_test.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include - -#include -#include - -#include - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; -using namespace OEngine::Sound; - -const std::string sound = "../../mangle/sound/tests/cow.wav"; - -SoundManagerPtr m; - -// Play and wait for finish -void play(float x, float y, float z) -{ - cout << "Playing at " << x << "," << y << "," << z << endl; - - SoundPtr snd = m->play3D(sound,x,y,z); - - while(snd->isPlaying()) - { - usleep(10000); - m->update(); - } -} - -int main() -{ - SoundFactoryPtr oaf(new OpenAL_Audiere_Factory); - SoundManagerPtr mg(new SoundManager(oaf)); - m = mg; - - mg->setListenerPos(0,0,0,0,1,0,0,0,1); - - play(0,0,0); - play(1,1,0); - play(-1,0,0); - - return 0; -} diff --git a/libs/openengine/sound/tests/sound_manager_test.cpp b/libs/openengine/sound/tests/sound_manager_test.cpp deleted file mode 100644 index 3794c4a3cf..0000000000 --- a/libs/openengine/sound/tests/sound_manager_test.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include - -#include -#include - -#include - -using namespace std; -using namespace Mangle::Stream; -using namespace Mangle::Sound; -using namespace OEngine::Sound; - -const std::string sound = "../../mangle/sound/tests/cow.wav"; - -int main() -{ - SoundFactoryPtr oaf(new OpenAL_Audiere_Factory); - SoundManagerPtr mg(new SoundManager(oaf)); - - cout << "Playing " << sound << "\n"; - - assert(mg->numSounds() == 0); - - /** Start the sound playing, and then let the pointer go out of - scope. Lower-level players (like 'oaf' above) will immediately - delete the sound. SoundManager OTOH will keep it until it's - finished. - */ - mg->play(sound); - - assert(mg->numSounds() == 1); - - // Loop while there are still sounds to manage - while(mg->numSounds() != 0) - { - assert(mg->numSounds() == 1); - usleep(10000); - if(mg->needsUpdate) - mg->update(); - } - - SoundPtr snd = mg->play(sound); - cout << "Replaying\n"; - int i = 0; - while(mg->numSounds() != 0) - { - assert(mg->numSounds() == 1); - usleep(10000); - if(mg->needsUpdate) - mg->update(); - - if(i++ == 70) - { - cout << "pause\n"; - snd->pause(); - } - if(i == 130) - { - cout << "restart\n"; - snd->play(); - // Let the sound go out of scope - snd.reset(); - } - } - - cout << "Done playing.\n"; - - assert(mg->numSounds() == 0); - - return 0; -} diff --git a/libs/openengine/sound/tests/test.sh b/libs/openengine/sound/tests/test.sh deleted file mode 100755 index 2d07708adc..0000000000 --- a/libs/openengine/sound/tests/test.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -make || exit - -mkdir -p output - -PROGS=*_test - -for a in $PROGS; do - if [ -f "output/$a.out" ]; then - echo "Running $a:" - ./$a | diff output/$a.out - - else - echo "Creating $a.out" - ./$a > "output/$a.out" - git add "output/$a.out" - fi -done From 45b612ab3bf32b98209e8a8b205bce573bd358a7 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 16 Mar 2012 22:12:17 -0700 Subject: [PATCH 050/488] Add a skeleton output classs using OpenAL --- CMakeLists.txt | 12 +- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwsound/openal_output.cpp | 60 ++++++++++ apps/openmw/mwsound/openal_output.hpp | 29 +++++ apps/openmw/mwsound/soundmanager.cpp | 26 +++-- apps/openmw/mwsound/soundmanager.hpp | 157 +++++++++++++++----------- 6 files changed, 199 insertions(+), 87 deletions(-) create mode 100644 apps/openmw/mwsound/openal_output.cpp create mode 100644 apps/openmw/mwsound/openal_output.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d06085322a..876ea8273b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,12 @@ set(OENGINE_BULLET ${LIBDIR}/openengine/bullet/BulletShapeLoader.h ) +set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_BULLET}) +source_group(libs\\openengine FILES ${OENGINE_ALL}) + +set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL}) +set(OPENMW_LIBS_HEADER) + # Sound setup if (USE_AUDIERE) find_package(Audiere REQUIRED) @@ -141,12 +147,6 @@ if (USE_MPG123) set(SOUND_DEFINE -DOPENMW_USE_MPG123) endif (USE_MPG123) -set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_BULLET}) -source_group(libs\\openengine FILES ${OENGINE_ALL}) - -set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL}) -set(OPENMW_LIBS_HEADER) - # Platform specific if (WIN32) set(PLATFORM_INCLUDE_DIR "platform") diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 77f465b4c9..e9002f1116 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -38,7 +38,7 @@ add_openmw_dir (mwscript ) add_openmw_dir (mwsound - soundmanager + soundmanager openal_output ) add_openmw_dir (mwworld diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp new file mode 100644 index 0000000000..59e9037c4e --- /dev/null +++ b/apps/openmw/mwsound/openal_output.cpp @@ -0,0 +1,60 @@ +#include "openal_output.hpp" + +namespace MWSound +{ + +static void fail(const std::string &msg) +{ throw std::runtime_error("OpenAL exception: " + msg); } + + +bool OpenAL_Output::Initialize(const std::string &devname) +{ + if(Context) + fail("Device already initialized"); + + Device = alcOpenDevice(devname.c_str()); + if(!Device) + { + std::cout << "Failed to open \""<Initialize()) + { + Output.reset(); + return; + } + // The music library will accept these filetypes // If none is given then it will accept all filetypes std::vector acceptableExtensions; @@ -66,13 +72,11 @@ namespace MWSound std::string anything = "anything"; // anything is better that a segfault mCurrentPlaylist = mMusicLibrary.section(anything, mFSStrict); // now points to an empty path - - std::cout << "Sound output: " << SOUND_OUT << std::endl; - std::cout << "Sound decoder: " << SOUND_IN << std::endl; } SoundManager::~SoundManager() { + Output.reset(); } // Convert a soundId to file name, and modify the volume @@ -258,7 +262,7 @@ namespace MWSound float min, max; const std::string &file = lookup(soundId, volume, min, max); if(file != "") - add(file, ptr, soundId, volume, pitch, min, max, loop, untracked); + std::cout << "Cannot play " << file << ", skipping.\n"; } void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 9db7fe1b70..f77222cb4c 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -21,103 +21,122 @@ namespace MWWorld namespace MWSound { + class Sound_Output; + class SoundManager { + // This is used for case insensitive and slash-type agnostic file + // finding. It takes DOS paths (any case, \\ slashes or / slashes) + // relative to the sound dir, and translates them into full paths + // of existing files in the filesystem, if they exist. + bool mFSStrict; - // This is used for case insensitive and slash-type agnostic file - // finding. It takes DOS paths (any case, \\ slashes or / slashes) - // relative to the sound dir, and translates them into full paths - // of existing files in the filesystem, if they exist. - bool mFSStrict; + MWWorld::Environment& mEnvironment; - MWWorld::Environment& mEnvironment; + std::auto_ptr Output; - void streamMusicFull (const std::string& filename); - ///< Play a soundifle - /// \param absolute filename + void streamMusicFull(const std::string& filename); + ///< Play a soundifle + /// \param absolute filename - // A list of all sound files used to lookup paths - Files::PathContainer mSoundFiles; + // A list of all sound files used to lookup paths + Files::PathContainer mSoundFiles; - // A library of all Music file paths stored by the folder they are contained in - Files::FileLibrary mMusicLibrary; + // A library of all Music file paths stored by the folder they are contained in + Files::FileLibrary mMusicLibrary; - // Points to the current playlist of music files stored in the music library - const Files::PathContainer* mCurrentPlaylist; + // Points to the current playlist of music files stored in the music library + const Files::PathContainer* mCurrentPlaylist; - std::string lookup(const std::string &soundId, - float &volume, float &min, float &max); - void add(const std::string &file, - MWWorld::Ptr ptr, const std::string &id, - float volume, float pitch, float min, float max, - bool loop, bool untracked=false); - void remove(MWWorld::Ptr ptr, const std::string &id = ""); - bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; - void removeCell(const MWWorld::Ptr::CellStore *cell); - void updatePositions(MWWorld::Ptr ptr); + std::string lookup(const std::string &soundId, + float &volume, float &min, float &max); + void add(const std::string &file, + MWWorld::Ptr ptr, const std::string &id, + float volume, float pitch, float min, float max, + bool loop, bool untracked=false); + void remove(MWWorld::Ptr ptr, const std::string &id = ""); + bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; + void removeCell(const MWWorld::Ptr::CellStore *cell); + void updatePositions(MWWorld::Ptr ptr); - public: - - SoundManager(Ogre::Root*, Ogre::Camera*, + public: + SoundManager(Ogre::Root*, Ogre::Camera*, const Files::PathContainer& dataDir, bool useSound, bool fsstrict, MWWorld::Environment& environment); - ~SoundManager(); + ~SoundManager(); - void stopMusic(); - ///< Stops music if it's playing + void stopMusic(); + ///< Stops music if it's playing - void streamMusic(const std::string& filename); - ///< Play a soundifle - /// \param filename name of a sound file in "Music/" in the data directory. + void streamMusic(const std::string& filename); + ///< Play a soundifle + /// \param filename name of a sound file in "Music/" in the data directory. - void startRandomTitle(); - ///< Starts a random track from the current playlist + void startRandomTitle(); + ///< Starts a random track from the current playlist - bool isMusicPlaying(); - ///< Returns true if music is playing + bool isMusicPlaying(); + ///< Returns true if music is playing - bool setPlaylist(std::string playlist=""); - ///< Set the playlist to an existing folder - /// \param name of the folder that contains the playlist - /// if none is set then it is set to an empty playlist - /// \return Return true if the previous playlist was the same + bool setPlaylist(std::string playlist=""); + ///< Set the playlist to an existing folder + /// \param name of the folder that contains the playlist + /// if none is set then it is set to an empty playlist + /// \return Return true if the previous playlist was the same - void playPlaylist(std::string playlist=""); - ///< Start playing music from the selected folder - /// \param name of the folder that contains the playlist - /// if none is set then it plays from the current playlist + void playPlaylist(std::string playlist=""); + ///< Start playing music from the selected folder + /// \param name of the folder that contains the playlist + /// if none is set then it plays from the current playlist - void say (MWWorld::Ptr reference, const std::string& filename); - ///< Make an actor say some text. - /// \param filename name of a sound file in "Sound/Vo/" in the data directory. + void say(MWWorld::Ptr reference, const std::string& filename); + ///< Make an actor say some text. + /// \param filename name of a sound file in "Sound/Vo/" in the data directory. - bool sayDone (MWWorld::Ptr reference) const; - ///< Is actor not speaking? + bool sayDone(MWWorld::Ptr reference) const; + ///< Is actor not speaking? - void playSound (const std::string& soundId, float volume, float pitch, bool loop=false); - ///< Play a sound, independently of 3D-position + void playSound(const std::string& soundId, float volume, float pitch, bool loop=false); + ///< Play a sound, independently of 3D-position - void playSound3D (MWWorld::Ptr reference, const std::string& soundId, - float volume, float pitch, bool loop, bool untracked=false); - ///< Play a sound from an object + void playSound3D(MWWorld::Ptr reference, const std::string& soundId, + float volume, float pitch, bool loop, + bool untracked=false); + ///< Play a sound from an object - void stopSound3D (MWWorld::Ptr reference, const std::string& soundId = ""); - ///< Stop the given object from playing the given sound, If no soundId is given, - /// all sounds for this reference will stop. + void stopSound3D(MWWorld::Ptr reference, const std::string& soundId=""); + ///< Stop the given object from playing the given sound, If no soundId is given, + /// all sounds for this reference will stop. - void stopSound (MWWorld::Ptr::CellStore *cell); - ///< Stop all sounds for the given cell. + void stopSound(MWWorld::Ptr::CellStore *cell); + ///< Stop all sounds for the given cell. - void stopSound(const std::string& soundId); - ///< Stop a non-3d looping sound + void stopSound(const std::string& soundId); + ///< Stop a non-3d looping sound - bool getSoundPlaying (MWWorld::Ptr reference, const std::string& soundId) const; - ///< Is the given sound currently playing on the given object? + bool getSoundPlaying(MWWorld::Ptr reference, const std::string& soundId) const; + ///< Is the given sound currently playing on the given object? - void updateObject(MWWorld::Ptr reference); - ///< Update the position of all sounds connected to the given object. + void updateObject(MWWorld::Ptr reference); + ///< Update the position of all sounds connected to the given object. - void update (float duration); + void update(float duration); + }; + + class Sound_Output + { + SoundManager &mgr; + + virtual bool Initialize(const std::string &devname="") = 0; + virtual void Deinitialize() = 0; + + Sound_Output(SoundManager &mgr) : mgr(mgr) { } + + public: + virtual ~Sound_Output() { } + + friend class OpenAL_Output; + friend class SoundManager; }; } From 10037e79e70ff5a4822f73e7da792c7ba6178e54 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 16 Mar 2012 23:18:15 -0700 Subject: [PATCH 051/488] Add a skeleton decoder class using mpg123 and libsndfile --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwsound/mpgsnd_decoder.cpp | 29 ++++++++++++++++++++++++++ apps/openmw/mwsound/mpgsnd_decoder.hpp | 29 ++++++++++++++++++++++++++ apps/openmw/mwsound/sound_decoder.hpp | 19 +++++++++++++++++ apps/openmw/mwsound/soundmanager.cpp | 2 ++ apps/openmw/mwsound/soundmanager.hpp | 2 +- 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 apps/openmw/mwsound/mpgsnd_decoder.cpp create mode 100644 apps/openmw/mwsound/mpgsnd_decoder.hpp create mode 100644 apps/openmw/mwsound/sound_decoder.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index e9002f1116..bb7655a3c5 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -38,7 +38,7 @@ add_openmw_dir (mwscript ) add_openmw_dir (mwsound - soundmanager openal_output + soundmanager openal_output mpgsnd_decoder ) add_openmw_dir (mwworld diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp new file mode 100644 index 0000000000..cdc392e703 --- /dev/null +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -0,0 +1,29 @@ +#include "mpgsnd_decoder.hpp" + + +namespace MWSound +{ + +bool MpgSnd_Decoder::Open(const std::string &fname) +{ + return false; +} + +void MpgSnd_Decoder::Close() +{ +} + + +MpgSnd_Decoder::MpgSnd_Decoder() +{ + static bool initdone = false; + if(!initdone) + mpg123_init(); + initdone = true; +} + +MpgSnd_Decoder::~MpgSnd_Decoder() +{ +} + +} diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp new file mode 100644 index 0000000000..ffa9037a7a --- /dev/null +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -0,0 +1,29 @@ +#ifndef GAME_SOUND_MPGSND_DECODER_H +#define GAME_SOUND_MPGSND_DECODER_H + +#include + +#include "mpg123.h" +#include "sndfile.h" + +#include "sound_decoder.hpp" + + +namespace MWSound +{ + class MpgSnd_Decoder : public Sound_Decoder + { + virtual bool Open(const std::string &fname); + virtual void Close(); + + MpgSnd_Decoder(); + virtual ~MpgSnd_Decoder(); + + friend class SoundManager; + }; +#ifndef DEFAULT_DECODER +#define DEFAULT_DECODER (::MWSound::MpgSnd_Decoder) +#endif +}; + +#endif diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp new file mode 100644 index 0000000000..0d7e3d9f86 --- /dev/null +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -0,0 +1,19 @@ +#ifndef GAME_SOUND_SOUND_DECODER_H +#define GAME_SOUND_SOUND_DECODER_H + +namespace MWSound +{ + class Sound_Decoder + { + public: + virtual bool Open(const std::string &fname) = 0; + virtual void Close() = 0; + + virtual ~Sound_Decoder() { } + + friend class OpenAL_Output; + friend class SoundManager; + }; +} + +#endif diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 8b852a746c..c22550a2a1 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -12,6 +12,7 @@ #include "../mwworld/world.hpp" #include "../mwworld/player.hpp" +#include "sound_decoder.hpp" #include "openal_output.hpp" #define SOUND_OUT "OpenAL" @@ -28,6 +29,7 @@ #endif #ifdef OPENMW_USE_MPG123 +#include "mpgsnd_decoder.hpp" #define SOUND_IN "mpg123,sndfile" #endif diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index f77222cb4c..8d2184c54d 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -22,6 +22,7 @@ namespace MWWorld namespace MWSound { class Sound_Output; + class Sound_Decoder; class SoundManager { @@ -131,7 +132,6 @@ namespace MWSound virtual void Deinitialize() = 0; Sound_Output(SoundManager &mgr) : mgr(mgr) { } - public: virtual ~Sound_Output() { } From 1322b1e160e2c6a3109b1d623d8ccc87443d8d5c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 16 Mar 2012 23:40:07 -0700 Subject: [PATCH 052/488] Move Sound_Output's definition to a separate header --- apps/openmw/mwsound/openal_output.cpp | 3 +++ apps/openmw/mwsound/openal_output.hpp | 6 +++++- apps/openmw/mwsound/sound_output.hpp | 26 ++++++++++++++++++++++++++ apps/openmw/mwsound/soundmanager.cpp | 1 + apps/openmw/mwsound/soundmanager.hpp | 15 --------------- 5 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 apps/openmw/mwsound/sound_output.hpp diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 59e9037c4e..3f99100383 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -1,3 +1,6 @@ +#include +#include + #include "openal_output.hpp" namespace MWSound diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 6d0169366c..d5748ee30c 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -1,13 +1,17 @@ #ifndef GAME_SOUND_OPENAL_OUTPUT_H #define GAME_SOUND_OPENAL_OUTPUT_H -#include "soundmanager.hpp" +#include #include "alc.h" #include "al.h" +#include "sound_output.hpp" + namespace MWSound { + class SoundManager; + class OpenAL_Output : public Sound_Output { ALCdevice *Device; diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp new file mode 100644 index 0000000000..b36a4e89fc --- /dev/null +++ b/apps/openmw/mwsound/sound_output.hpp @@ -0,0 +1,26 @@ +#ifndef GAME_SOUND_SOUND_OUTPUT_H +#define GAME_SOUND_SOUND_OUTPUT_H + +#include + +namespace MWSound +{ + class SoundManager; + + class Sound_Output + { + SoundManager &mgr; + + virtual bool Initialize(const std::string &devname="") = 0; + virtual void Deinitialize() = 0; + + Sound_Output(SoundManager &mgr) : mgr(mgr) { } + public: + virtual ~Sound_Output() { } + + friend class OpenAL_Output; + friend class SoundManager; + }; +} + +#endif diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index c22550a2a1..cb9c58715e 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -12,6 +12,7 @@ #include "../mwworld/world.hpp" #include "../mwworld/player.hpp" +#include "sound_output.hpp" #include "sound_decoder.hpp" #include "openal_output.hpp" diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 8d2184c54d..5a58c60b77 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -123,21 +123,6 @@ namespace MWSound void update(float duration); }; - - class Sound_Output - { - SoundManager &mgr; - - virtual bool Initialize(const std::string &devname="") = 0; - virtual void Deinitialize() = 0; - - Sound_Output(SoundManager &mgr) : mgr(mgr) { } - public: - virtual ~Sound_Output() { } - - friend class OpenAL_Output; - friend class SoundManager; - }; } #endif From 46cd84aac56f2a396845cd2caec8e9d6596b9c65 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 16 Mar 2012 23:59:21 -0700 Subject: [PATCH 053/488] Add a skeleton ffmpeg decoder --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwsound/ffmpeg_decoder.cpp | 29 +++++++++++++++++++++++ apps/openmw/mwsound/ffmpeg_decoder.hpp | 32 ++++++++++++++++++++++++++ apps/openmw/mwsound/mpgsnd_decoder.cpp | 4 ++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 apps/openmw/mwsound/ffmpeg_decoder.cpp create mode 100644 apps/openmw/mwsound/ffmpeg_decoder.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index bb7655a3c5..749b5bc5dd 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -38,7 +38,7 @@ add_openmw_dir (mwscript ) add_openmw_dir (mwsound - soundmanager openal_output mpgsnd_decoder + soundmanager openal_output mpgsnd_decoder ffmpeg_decoder ) add_openmw_dir (mwworld diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp new file mode 100644 index 0000000000..8bd6b3f8e1 --- /dev/null +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -0,0 +1,29 @@ +#ifdef OPENMW_USE_FFMPEG + +#include "ffmpeg_decoder.hpp" + + +namespace MWSound +{ + +bool FFmpeg_Decoder::Open(const std::string &fname) +{ + return false; +} + +void FFmpeg_Decoder::Close() +{ +} + + +FFmpeg_Decoder::FFmpeg_Decoder() +{ +} + +FFmpeg_Decoder::~FFmpeg_Decoder() +{ +} + +} + +#endif diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp new file mode 100644 index 0000000000..2b7363f26a --- /dev/null +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -0,0 +1,32 @@ +#ifndef GAME_SOUND_FFMPEG_DECODER_H +#define GAME_SOUND_FFMPEG_DECODER_H + +#include + +extern "C" +{ +#include +#include +} + +#include "sound_decoder.hpp" + + +namespace MWSound +{ + class FFmpeg_Decoder : public Sound_Decoder + { + virtual bool Open(const std::string &fname); + virtual void Close(); + + FFmpeg_Decoder(); + virtual ~FFmpeg_Decoder(); + + friend class SoundManager; + }; +#ifndef DEFAULT_DECODER +#define DEFAULT_DECODER (::MWSound::FFmpeg_Decoder) +#endif +}; + +#endif diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index cdc392e703..6ca46381dc 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -1,3 +1,5 @@ +#ifdef OPENMW_USE_MPG123 + #include "mpgsnd_decoder.hpp" @@ -27,3 +29,5 @@ MpgSnd_Decoder::~MpgSnd_Decoder() } } + +#endif From 246b0266fb5b7a326f8cccd9d23244ff858e2f8e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 00:11:59 -0700 Subject: [PATCH 054/488] Remove references to Audiere. It's not supported for now. --- CMakeLists.txt | 8 -------- apps/openmw/mwsound/soundmanager.cpp | 4 ---- 2 files changed, 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 876ea8273b..db8f9d1710 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,6 @@ set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VE configure_file ("${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp") # Sound source selection -option(USE_AUDIERE "use Audiere for sound" OFF) option(USE_FFMPEG "use ffmpeg for sound" OFF) option(USE_MPG123 "use mpg123 + libsndfile for sound" ON) @@ -125,13 +124,6 @@ set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL}) set(OPENMW_LIBS_HEADER) # Sound setup -if (USE_AUDIERE) - find_package(Audiere REQUIRED) - set(SOUND_INPUT_INCLUDES ${AUDIERE_INCLUDE_DIR}) - set(SOUND_INPUT_LIBRARY ${AUDIERE_LIBRARY}) - set(SOUND_DEFINE -DOPENMW_USE_AUDIERE) -endif (USE_AUDIERE) - if (USE_FFMPEG) find_package(FFMPEG REQUIRED) set(SOUND_INPUT_INCLUDES ${FFMPEG_INCLUDE_DIR}) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index cb9c58715e..17dfa5ef5b 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -21,10 +21,6 @@ MPG123/libsndfile for input. The OPENMW_USE_x macros are set in CMakeLists.txt. */ -#ifdef OPENMW_USE_AUDIERE -#define SOUND_IN "Audiere" -#endif - #ifdef OPENMW_USE_FFMPEG #define SOUND_IN "FFmpeg" #endif From 637617056b4a6015a151ce8342e57e312c40a662 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 02:45:18 -0700 Subject: [PATCH 055/488] Make a skeleton Sound class --- apps/openmw/mwsound/sound.hpp | 22 ++++++++++++++++++++++ apps/openmw/mwsound/soundmanager.cpp | 14 ++++++++------ apps/openmw/mwsound/soundmanager.hpp | 3 +++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 apps/openmw/mwsound/sound.hpp diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp new file mode 100644 index 0000000000..9d262416eb --- /dev/null +++ b/apps/openmw/mwsound/sound.hpp @@ -0,0 +1,22 @@ +#ifndef GAME_SOUND_SOUND_H +#define GAME_SOUND_SOUND_H + +#include + +namespace MWSound +{ + class Sound + { + virtual bool Play() = 0; + virtual void Stop() = 0; + virtual bool isPlaying() = 0; + + public: + virtual ~Sound() { } + + friend class OpenAL_Output; + friend class SoundManager; + }; +} + +#endif diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 17dfa5ef5b..d231f1d4ad 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -14,6 +14,7 @@ #include "sound_output.hpp" #include "sound_decoder.hpp" +#include "sound.hpp" #include "openal_output.hpp" #define SOUND_OUT "OpenAL" @@ -143,15 +144,18 @@ namespace MWSound void SoundManager::stopMusic() { + if(mMusic) + mMusic->Stop(); setPlaylist(); } void SoundManager::streamMusicFull(const std::string& filename) { - // Play the sound and tell it to stream, if possible. TODO: - // Store the reference, the jukebox will need to check status, - // control volume etc. + if(mMusic) + mMusic->Stop(); + std::auto_ptr decoder(new DEFAULT_DECODER); + //mMusic.reset(Output->StreamSound(filename, decoder)); } void SoundManager::streamMusic(const std::string& filename) @@ -186,9 +190,7 @@ namespace MWSound bool SoundManager::isMusicPlaying() { - // HACK: Return true to prevent the engine from trying to keep playing - // music and tanking the framerate. - return true; + return mMusic && mMusic->isPlaying(); } bool SoundManager::setPlaylist(std::string playlist) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 5a58c60b77..709ab2817d 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -23,6 +23,7 @@ namespace MWSound { class Sound_Output; class Sound_Decoder; + class Sound; class SoundManager { @@ -36,6 +37,8 @@ namespace MWSound std::auto_ptr Output; + boost::shared_ptr mMusic; + void streamMusicFull(const std::string& filename); ///< Play a soundifle /// \param absolute filename From 9cf42f6d0fcde91c25f5ffe0027cd186223421aa Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 02:51:46 -0700 Subject: [PATCH 056/488] Flesh out the sound decoder a bit more --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 15 ++++ apps/openmw/mwsound/ffmpeg_decoder.hpp | 3 + apps/openmw/mwsound/mpgsnd_decoder.cpp | 95 +++++++++++++++++++++++++- apps/openmw/mwsound/mpgsnd_decoder.hpp | 9 +++ apps/openmw/mwsound/sound_decoder.hpp | 11 +++ 5 files changed, 132 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 8bd6b3f8e1..d3715d5fe9 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -6,8 +6,12 @@ namespace MWSound { +static void fail(const std::string &msg) +{ throw std::runtime_error("FFmpeg exception: "+msg); } + bool FFmpeg_Decoder::Open(const std::string &fname) { + fail("Not currently working"); return false; } @@ -15,6 +19,17 @@ void FFmpeg_Decoder::Close() { } +void FFmpeg_Decoder::GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) +{ + fail("Not currently working"); +} + +size_t FFmpeg_Decoder::Read(char *buffer, size_t bytes) +{ + fail("Not currently working"); + return 0; +} + FFmpeg_Decoder::FFmpeg_Decoder() { diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index 2b7363f26a..6ff93904af 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -19,6 +19,9 @@ namespace MWSound virtual bool Open(const std::string &fname); virtual void Close(); + virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t Read(char *buffer, size_t bytes); + FFmpeg_Decoder(); virtual ~FFmpeg_Decoder(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 6ca46381dc..4ba48f607a 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -1,22 +1,115 @@ #ifdef OPENMW_USE_MPG123 +#include +#include + #include "mpgsnd_decoder.hpp" +static void fail(const std::string &msg) +{ throw std::runtime_error("MpgSnd exception: "+msg); } + namespace MWSound { bool MpgSnd_Decoder::Open(const std::string &fname) { + Close(); + + SF_INFO info; + sndFile = sf_open(fname.c_str(), SFM_READ, &info); + if(sndFile) + { + if(info.channels == 1) + chanConfig = MonoChannels; + else if(info.channels == 1) + chanConfig = MonoChannels; + else + { + sf_close(sndFile); + sndFile = NULL; + fail("Unsupported channel count in "+fname); + } + sampleRate = info.samplerate; + return true; + } + + mpgFile = mpg123_new(NULL, NULL); + if(mpgFile && mpg123_open(mpgFile, fname.c_str()) == MPG123_OK) + { + try + { + int encoding, channels; + long rate; + if(mpg123_getformat(mpgFile, &rate, &channels, &encoding) != MPG123_OK) + fail("Failed to get audio format"); + if(encoding != MPG123_ENC_SIGNED_16) + fail("Unsupported encoding in "+fname); + if(channels != 1 && channels != 2) + fail("Unsupported channel count in "+fname); + chanConfig = ((channels==2)?StereoChannels:MonoChannels); + sampleRate = rate; + return true; + } + catch(std::exception &e) + { + mpg123_close(mpgFile); + mpg123_delete(mpgFile); + throw; + } + mpg123_close(mpgFile); + } + if(mpgFile) + mpg123_delete(mpgFile); + mpgFile = NULL; + + fail("Unsupported file type: "+fname); return false; } void MpgSnd_Decoder::Close() { + if(sndFile) + sf_close(sndFile); + sndFile = NULL; + + if(mpgFile) + { + mpg123_close(mpgFile); + mpg123_delete(mpgFile); + mpgFile = NULL; + } } +void MpgSnd_Decoder::GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) +{ + if(!sndFile && !mpgFile) + fail("No open file"); -MpgSnd_Decoder::MpgSnd_Decoder() + *samplerate = sampleRate; + *chans = chanConfig; + *type = Int16Sample; +} + +size_t MpgSnd_Decoder::Read(char *buffer, size_t bytes) +{ + size_t got = 0; + + if(sndFile) + { + got = sf_read_short(sndFile, (short*)buffer, bytes/2)*2; + } + else if(mpgFile) + { + int err; + err = mpg123_read(mpgFile, (unsigned char*)buffer, bytes, &got); + if(err != MPG123_OK && err != MPG123_DONE) + fail("Failed to read from file"); + } + return got; +} + +MpgSnd_Decoder::MpgSnd_Decoder() : sndFile(NULL), mpgFile(NULL) { static bool initdone = false; if(!initdone) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index ffa9037a7a..641d891a3e 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -13,9 +13,18 @@ namespace MWSound { class MpgSnd_Decoder : public Sound_Decoder { + SNDFILE *sndFile; + mpg123_handle *mpgFile; + + ChannelConfig chanConfig; + int sampleRate; + virtual bool Open(const std::string &fname); virtual void Close(); + virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t Read(char *buffer, size_t bytes); + MpgSnd_Decoder(); virtual ~MpgSnd_Decoder(); diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 0d7e3d9f86..fd8f4ac515 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -6,9 +6,20 @@ namespace MWSound class Sound_Decoder { public: + enum SampleType { + UInt8Sample, + Int16Sample + }; + enum ChannelConfig { + MonoChannels, + StereoChannels + }; virtual bool Open(const std::string &fname) = 0; virtual void Close() = 0; + virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; + virtual size_t Read(char *buffer, size_t bytes) = 0; + virtual ~Sound_Decoder() { } friend class OpenAL_Output; From 1ade01edc84c69692c6b3dc39e0c83389eb9e9cb Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 02:55:08 -0700 Subject: [PATCH 057/488] Add a function to stream sounds --- apps/openmw/mwsound/openal_output.cpp | 188 ++++++++++++++++++++++++++ apps/openmw/mwsound/openal_output.hpp | 4 + apps/openmw/mwsound/sound_output.hpp | 5 + apps/openmw/mwsound/soundmanager.cpp | 2 +- 4 files changed, 198 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 3f99100383..45be366874 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -1,7 +1,11 @@ #include #include +#include #include "openal_output.hpp" +#include "sound_decoder.hpp" +#include "sound.hpp" + namespace MWSound { @@ -9,6 +13,176 @@ namespace MWSound static void fail(const std::string &msg) { throw std::runtime_error("OpenAL exception: " + msg); } +static void throwALerror() +{ + ALenum err = alGetError(); + if(err != AL_NO_ERROR) + fail(alGetString(err)); +} + + +static ALenum getALFormat(Sound_Decoder::ChannelConfig chans, Sound_Decoder::SampleType type) +{ + if(chans == Sound_Decoder::MonoChannels) + { + if(type == Sound_Decoder::Int16Sample) + return AL_FORMAT_MONO16; + else if(type == Sound_Decoder::UInt8Sample) + return AL_FORMAT_MONO8; + else + fail("Unsupported sample type"); + } + else if(chans == Sound_Decoder::StereoChannels) + { + if(type == Sound_Decoder::Int16Sample) + return AL_FORMAT_STEREO16; + else if(type == Sound_Decoder::UInt8Sample) + return AL_FORMAT_STEREO8; + else + fail("Unsupported sample type"); + } + else + fail("Unsupported channel config"); + return AL_NONE; +} + + +class OpenAL_SoundStream : public Sound +{ + // This should be something sane, like 4, but currently cell loads tend to + // cause the stream to underrun + static const ALuint NumBuffers = 150; + static const ALuint BufferSize = 32768; + + ALuint Source; + ALuint Buffers[NumBuffers]; + + ALenum Format; + ALsizei SampleRate; + + std::auto_ptr Decoder; + +public: + OpenAL_SoundStream(std::auto_ptr decoder) : Decoder(decoder) + { + throwALerror(); + + alGenSources(1, &Source); + throwALerror(); + try + { + alGenBuffers(NumBuffers, Buffers); + throwALerror(); + } + catch(std::exception &e) + { + alDeleteSources(1, &Source); + alGetError(); + throw; + } + + try + { + int srate; + enum Sound_Decoder::ChannelConfig chans; + enum Sound_Decoder::SampleType type; + + Decoder->GetInfo(&srate, &chans, &type); + Format = getALFormat(chans, type); + SampleRate = srate; + } + catch(std::exception &e) + { + alDeleteSources(1, &Source); + alDeleteBuffers(NumBuffers, Buffers); + alGetError(); + throw; + } + } + virtual ~OpenAL_SoundStream() + { + alDeleteSources(1, &Source); + alDeleteBuffers(NumBuffers, Buffers); + alGetError(); + Decoder->Close(); + } + + virtual bool Play() + { + std::vector data(BufferSize); + + alSourceStop(Source); + alSourcei(Source, AL_BUFFER, 0); + throwALerror(); + + for(ALuint i = 0;i < NumBuffers;i++) + { + size_t got; + got = Decoder->Read(&data[0], data.size()); + alBufferData(Buffers[i], Format, &data[0], got, SampleRate); + } + throwALerror(); + + alSourceQueueBuffers(Source, NumBuffers, Buffers); + alSourcePlay(Source); + throwALerror(); + + return true; + } + + virtual void Stop() + { + alSourceStop(Source); + alSourcei(Source, AL_BUFFER, 0); + throwALerror(); + // FIXME: Rewind decoder + } + + virtual bool isPlaying() + { + ALint processed, state; + + alGetSourcei(Source, AL_SOURCE_STATE, &state); + alGetSourcei(Source, AL_BUFFERS_PROCESSED, &processed); + throwALerror(); + + if(processed > 0) + { + std::vector data(BufferSize); + do { + ALuint bufid; + size_t got; + + alSourceUnqueueBuffers(Source, 1, &bufid); + processed--; + + got = Decoder->Read(&data[0], data.size()); + if(got > 0) + { + alBufferData(bufid, Format, &data[0], got, SampleRate); + alSourceQueueBuffers(Source, 1, &bufid); + } + } while(processed > 0); + throwALerror(); + } + + if(state != AL_PLAYING && state != AL_PAUSED) + { + ALint queued; + + alGetSourcei(Source, AL_BUFFERS_QUEUED, &queued); + throwALerror(); + if(queued == 0) + return false; + + alSourcePlay(Source); + throwALerror(); + } + + return true; + } +}; + bool OpenAL_Output::Initialize(const std::string &devname) { @@ -50,6 +224,20 @@ void OpenAL_Output::Deinitialize() } +Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr decoder) +{ + std::auto_ptr sound; + + if(!decoder->Open(fname)) + return NULL; + + sound.reset(new OpenAL_SoundStream(decoder)); + sound->Play(); + + return sound.release(); +} + + OpenAL_Output::OpenAL_Output(SoundManager &mgr) : Sound_Output(mgr), Device(0), Context(0) { diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index d5748ee30c..b0cd469e57 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -11,6 +11,8 @@ namespace MWSound { class SoundManager; + class Sound_Decoder; + class Sound; class OpenAL_Output : public Sound_Output { @@ -20,6 +22,8 @@ namespace MWSound virtual bool Initialize(const std::string &devname=""); virtual void Deinitialize(); + virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder); + OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index b36a4e89fc..16639de7b3 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -2,10 +2,13 @@ #define GAME_SOUND_SOUND_OUTPUT_H #include +#include namespace MWSound { class SoundManager; + class Sound_Decoder; + class Sound; class Sound_Output { @@ -14,6 +17,8 @@ namespace MWSound virtual bool Initialize(const std::string &devname="") = 0; virtual void Deinitialize() = 0; + virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder) = 0; + Sound_Output(SoundManager &mgr) : mgr(mgr) { } public: virtual ~Sound_Output() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index d231f1d4ad..9ba5479d7e 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -155,7 +155,7 @@ namespace MWSound if(mMusic) mMusic->Stop(); std::auto_ptr decoder(new DEFAULT_DECODER); - //mMusic.reset(Output->StreamSound(filename, decoder)); + mMusic.reset(Output->StreamSound(filename, decoder)); } void SoundManager::streamMusic(const std::string& filename) From 207d7dd89e66d5eccc4f2b62a2288148b1df5fbe Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 03:01:51 -0700 Subject: [PATCH 058/488] Stop and delete the current music before deleting the sound output --- apps/openmw/mwsound/soundmanager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 9ba5479d7e..8b8ffcedcf 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -76,6 +76,9 @@ namespace MWSound SoundManager::~SoundManager() { + if(mMusic) + mMusic->Stop(); + mMusic.reset(); Output.reset(); } From 2f6b73d46149d08478d220d38073d389a673151d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 03:06:35 -0700 Subject: [PATCH 059/488] Prevent streamMusic from throwing an exception --- apps/openmw/mwsound/soundmanager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 8b8ffcedcf..b215fd7c57 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -165,7 +165,16 @@ namespace MWSound { std::string filePath = mMusicLibrary.locate(filename, mFSStrict, true).string(); if(!filePath.empty()) - streamMusicFull(filePath); + { + try + { + streamMusicFull(filePath); + } + catch(std::exception &e) + { + std::cout << "Music Error: " << e.what() << "\n"; + } + } } void SoundManager::startRandomTitle() From 1b41987e184fc63576096ad0fbc608105049cc75 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 03:15:07 -0700 Subject: [PATCH 060/488] Move OpenAL_SoundStream function definitions out of the class --- apps/openmw/mwsound/openal_output.cpp | 212 +++++++++++++------------- 1 file changed, 110 insertions(+), 102 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 45be366874..766fa018a0 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -63,125 +63,133 @@ class OpenAL_SoundStream : public Sound std::auto_ptr Decoder; public: - OpenAL_SoundStream(std::auto_ptr decoder) : Decoder(decoder) + OpenAL_SoundStream(std::auto_ptr decoder); + virtual ~OpenAL_SoundStream(); + + virtual bool Play(); + virtual void Stop(); + virtual bool isPlaying(); +}; + +OpenAL_SoundStream::OpenAL_SoundStream(std::auto_ptr decoder) + : Decoder(decoder) +{ + throwALerror(); + + alGenSources(1, &Source); + throwALerror(); + try { + alGenBuffers(NumBuffers, Buffers); throwALerror(); - - alGenSources(1, &Source); - throwALerror(); - try - { - alGenBuffers(NumBuffers, Buffers); - throwALerror(); - } - catch(std::exception &e) - { - alDeleteSources(1, &Source); - alGetError(); - throw; - } - - try - { - int srate; - enum Sound_Decoder::ChannelConfig chans; - enum Sound_Decoder::SampleType type; - - Decoder->GetInfo(&srate, &chans, &type); - Format = getALFormat(chans, type); - SampleRate = srate; - } - catch(std::exception &e) - { - alDeleteSources(1, &Source); - alDeleteBuffers(NumBuffers, Buffers); - alGetError(); - throw; - } } - virtual ~OpenAL_SoundStream() + catch(std::exception &e) + { + alDeleteSources(1, &Source); + alGetError(); + throw; + } + + try + { + int srate; + Sound_Decoder::ChannelConfig chans; + Sound_Decoder::SampleType type; + + Decoder->GetInfo(&srate, &chans, &type); + Format = getALFormat(chans, type); + SampleRate = srate; + } + catch(std::exception &e) { alDeleteSources(1, &Source); alDeleteBuffers(NumBuffers, Buffers); alGetError(); - Decoder->Close(); + throw; } +} +OpenAL_SoundStream::~OpenAL_SoundStream() +{ + alDeleteSources(1, &Source); + alDeleteBuffers(NumBuffers, Buffers); + alGetError(); + Decoder->Close(); +} - virtual bool Play() +bool OpenAL_SoundStream::Play() +{ + std::vector data(BufferSize); + + alSourceStop(Source); + alSourcei(Source, AL_BUFFER, 0); + throwALerror(); + + for(ALuint i = 0;i < NumBuffers;i++) + { + size_t got; + got = Decoder->Read(&data[0], data.size()); + alBufferData(Buffers[i], Format, &data[0], got, SampleRate); + } + throwALerror(); + + alSourceQueueBuffers(Source, NumBuffers, Buffers); + alSourcePlay(Source); + throwALerror(); + + return true; +} + +void OpenAL_SoundStream::Stop() +{ + alSourceStop(Source); + alSourcei(Source, AL_BUFFER, 0); + throwALerror(); + // FIXME: Rewind decoder +} + +bool OpenAL_SoundStream::isPlaying() +{ + ALint processed, state; + + alGetSourcei(Source, AL_SOURCE_STATE, &state); + alGetSourcei(Source, AL_BUFFERS_PROCESSED, &processed); + throwALerror(); + + if(processed > 0) { std::vector data(BufferSize); - - alSourceStop(Source); - alSourcei(Source, AL_BUFFER, 0); - throwALerror(); - - for(ALuint i = 0;i < NumBuffers;i++) - { + do { + ALuint bufid; size_t got; - got = Decoder->Read(&data[0], data.size()); - alBufferData(Buffers[i], Format, &data[0], got, SampleRate); - } - throwALerror(); - alSourceQueueBuffers(Source, NumBuffers, Buffers); + alSourceUnqueueBuffers(Source, 1, &bufid); + processed--; + + got = Decoder->Read(&data[0], data.size()); + if(got > 0) + { + alBufferData(bufid, Format, &data[0], got, SampleRate); + alSourceQueueBuffers(Source, 1, &bufid); + } + } while(processed > 0); + throwALerror(); + } + + if(state != AL_PLAYING && state != AL_PAUSED) + { + ALint queued; + + alGetSourcei(Source, AL_BUFFERS_QUEUED, &queued); + throwALerror(); + if(queued == 0) + return false; + alSourcePlay(Source); throwALerror(); - - return true; } - virtual void Stop() - { - alSourceStop(Source); - alSourcei(Source, AL_BUFFER, 0); - throwALerror(); - // FIXME: Rewind decoder - } - - virtual bool isPlaying() - { - ALint processed, state; - - alGetSourcei(Source, AL_SOURCE_STATE, &state); - alGetSourcei(Source, AL_BUFFERS_PROCESSED, &processed); - throwALerror(); - - if(processed > 0) - { - std::vector data(BufferSize); - do { - ALuint bufid; - size_t got; - - alSourceUnqueueBuffers(Source, 1, &bufid); - processed--; - - got = Decoder->Read(&data[0], data.size()); - if(got > 0) - { - alBufferData(bufid, Format, &data[0], got, SampleRate); - alSourceQueueBuffers(Source, 1, &bufid); - } - } while(processed > 0); - throwALerror(); - } - - if(state != AL_PLAYING && state != AL_PAUSED) - { - ALint queued; - - alGetSourcei(Source, AL_BUFFERS_QUEUED, &queued); - throwALerror(); - if(queued == 0) - return false; - - alSourcePlay(Source); - throwALerror(); - } - - return true; - } -}; + return true; +} bool OpenAL_Output::Initialize(const std::string &devname) From caf5d71d44b8bb0382842b56b65148cde4baa8d1 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 03:18:28 -0700 Subject: [PATCH 061/488] Make the sound decoder's Open method return void Errors are thrown, not returned --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 3 +-- apps/openmw/mwsound/ffmpeg_decoder.hpp | 2 +- apps/openmw/mwsound/mpgsnd_decoder.cpp | 7 +++---- apps/openmw/mwsound/mpgsnd_decoder.hpp | 2 +- apps/openmw/mwsound/openal_output.cpp | 3 +-- apps/openmw/mwsound/sound_decoder.hpp | 2 +- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index d3715d5fe9..5c64e4dd10 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -9,10 +9,9 @@ namespace MWSound static void fail(const std::string &msg) { throw std::runtime_error("FFmpeg exception: "+msg); } -bool FFmpeg_Decoder::Open(const std::string &fname) +void FFmpeg_Decoder::Open(const std::string &fname) { fail("Not currently working"); - return false; } void FFmpeg_Decoder::Close() diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index 6ff93904af..205fe8865b 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -16,7 +16,7 @@ namespace MWSound { class FFmpeg_Decoder : public Sound_Decoder { - virtual bool Open(const std::string &fname); + virtual void Open(const std::string &fname); virtual void Close(); virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 4ba48f607a..2c35adeb33 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -12,7 +12,7 @@ static void fail(const std::string &msg) namespace MWSound { -bool MpgSnd_Decoder::Open(const std::string &fname) +void MpgSnd_Decoder::Open(const std::string &fname) { Close(); @@ -31,7 +31,7 @@ bool MpgSnd_Decoder::Open(const std::string &fname) fail("Unsupported channel count in "+fname); } sampleRate = info.samplerate; - return true; + return; } mpgFile = mpg123_new(NULL, NULL); @@ -49,7 +49,7 @@ bool MpgSnd_Decoder::Open(const std::string &fname) fail("Unsupported channel count in "+fname); chanConfig = ((channels==2)?StereoChannels:MonoChannels); sampleRate = rate; - return true; + return; } catch(std::exception &e) { @@ -64,7 +64,6 @@ bool MpgSnd_Decoder::Open(const std::string &fname) mpgFile = NULL; fail("Unsupported file type: "+fname); - return false; } void MpgSnd_Decoder::Close() diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 641d891a3e..391cfbd6d3 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -19,7 +19,7 @@ namespace MWSound ChannelConfig chanConfig; int sampleRate; - virtual bool Open(const std::string &fname); + virtual void Open(const std::string &fname); virtual void Close(); virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 766fa018a0..7668dcac29 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -236,8 +236,7 @@ Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr sound; - if(!decoder->Open(fname)) - return NULL; + decoder->Open(fname); sound.reset(new OpenAL_SoundStream(decoder)); sound->Play(); diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index fd8f4ac515..4f778c3b31 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -14,7 +14,7 @@ namespace MWSound MonoChannels, StereoChannels }; - virtual bool Open(const std::string &fname) = 0; + virtual void Open(const std::string &fname) = 0; virtual void Close() = 0; virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; From 2429755bf1daa4ddad0cae74171cf5ef41c71703 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 03:20:43 -0700 Subject: [PATCH 062/488] Make the sound's Play method return void --- apps/openmw/mwsound/openal_output.cpp | 6 ++---- apps/openmw/mwsound/sound.hpp | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 7668dcac29..246fce7e10 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -66,7 +66,7 @@ public: OpenAL_SoundStream(std::auto_ptr decoder); virtual ~OpenAL_SoundStream(); - virtual bool Play(); + virtual void Play(); virtual void Stop(); virtual bool isPlaying(); }; @@ -116,7 +116,7 @@ OpenAL_SoundStream::~OpenAL_SoundStream() Decoder->Close(); } -bool OpenAL_SoundStream::Play() +void OpenAL_SoundStream::Play() { std::vector data(BufferSize); @@ -135,8 +135,6 @@ bool OpenAL_SoundStream::Play() alSourceQueueBuffers(Source, NumBuffers, Buffers); alSourcePlay(Source); throwALerror(); - - return true; } void OpenAL_SoundStream::Stop() diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 9d262416eb..5ffb48820c 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -7,7 +7,7 @@ namespace MWSound { class Sound { - virtual bool Play() = 0; + virtual void Play() = 0; virtual void Stop() = 0; virtual bool isPlaying() = 0; From 2dabdcb9e551a97ff9d2d67a344cc66ffbf7117a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 04:22:54 -0700 Subject: [PATCH 063/488] Add a function to update the sound listener --- apps/openmw/mwsound/openal_output.cpp | 12 ++++++++++++ apps/openmw/mwsound/openal_output.hpp | 2 ++ apps/openmw/mwsound/sound_output.hpp | 3 +++ 3 files changed, 17 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 246fce7e10..1a02dc258f 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -243,6 +243,18 @@ Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr decoder); + virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]); + OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 16639de7b3..a8a91cca1b 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -19,6 +19,9 @@ namespace MWSound virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder) = 0; + // FIXME: This should take an MWWorld::Ptr that represents the in-world camera + virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]) = 0; + Sound_Output(SoundManager &mgr) : mgr(mgr) { } public: virtual ~Sound_Output() { } From a46f8ced05c519a6d6b921ae3eb1ca12385c6583 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 06:18:59 -0700 Subject: [PATCH 064/488] Keep the sound output's listener updated with the camera position --- apps/openmw/mwsound/openal_output.cpp | 7 ++----- apps/openmw/mwsound/soundmanager.cpp | 23 ++++++++++++++++++++++- apps/openmw/mwsound/soundmanager.hpp | 1 + 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 1a02dc258f..2dbe4baad1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -245,11 +245,8 @@ Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptrgetPlayer().getPlayer().getCell(); static int total = 0; @@ -363,4 +363,25 @@ namespace MWSound pos += chance; } } + + void SoundManager::update(float duration) + { + static float timePassed = 0.0; + + timePassed += duration; + if(timePassed > (1.0f/30.0f)) + { + timePassed = 0.0f; + Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); + + Ogre::Vector3 nPos, nDir, nUp; + nPos = cam->getRealPosition(); + nDir = cam->getRealDirection(); + nUp = cam->getRealUp(); + + Output->UpdateListener(&nPos[0], &nDir[0], &nUp[0]); + } + + updateRegionSound(duration); + } } diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 709ab2817d..b31e1db7f1 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -62,6 +62,7 @@ namespace MWSound bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; void removeCell(const MWWorld::Ptr::CellStore *cell); void updatePositions(MWWorld::Ptr ptr); + void updateRegionSound(float duration); public: SoundManager(Ogre::Root*, Ogre::Camera*, From 656863ec6e13ab9c73b66eca069de9c73a716608 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 06:51:44 -0700 Subject: [PATCH 065/488] Add functions to play sounds --- apps/openmw/mwsound/openal_output.cpp | 16 +++++++++++ apps/openmw/mwsound/openal_output.hpp | 6 ++++ apps/openmw/mwsound/sound_output.hpp | 7 +++++ apps/openmw/mwsound/soundmanager.cpp | 41 +++++++++++++++++++++------ 4 files changed, 62 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 2dbe4baad1..a183909d38 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -230,6 +230,22 @@ void OpenAL_Output::Deinitialize() } +Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr decoder, + float volume, float pitch, bool loop) +{ + fail("PlaySound not yet supported"); + return NULL; +} + +Sound* OpenAL_Output::PlaySound3D(const std::string &fname, std::auto_ptr decoder, + MWWorld::Ptr ptr, float volume, float pitch, + float min, float max, bool loop) +{ + fail("PlaySound3D not yet supported"); + return NULL; +} + + Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr decoder) { std::auto_ptr sound; diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 6dd5a2c230..0ab8dd3496 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -22,6 +22,12 @@ namespace MWSound virtual bool Initialize(const std::string &devname=""); virtual void Deinitialize(); + virtual Sound *PlaySound(const std::string &fname, std::auto_ptr decoder, + float volume, float pitch, bool loop); + virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, + MWWorld::Ptr ptr, float volume, float pitch, + float min, float max, bool loop); + virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder); virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index a8a91cca1b..ba98092915 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -4,6 +4,8 @@ #include #include +#include "../mwworld/ptr.hpp" + namespace MWSound { class SoundManager; @@ -17,6 +19,11 @@ namespace MWSound virtual bool Initialize(const std::string &devname="") = 0; virtual void Deinitialize() = 0; + virtual Sound *PlaySound(const std::string &fname, std::auto_ptr decoder, + float volume, float pitch, bool loop) = 0; + virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, + MWWorld::Ptr ptr, float volume, float pitch, + float min, float max, bool loop) = 0; virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder) = 0; // FIXME: This should take an MWWorld::Ptr that represents the in-world camera diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 242755e95d..b24a748683 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -120,7 +120,17 @@ namespace MWSound float min, float max, bool loop, bool untracked) { - //std::cout << "Cannot load " << file << ", skipping.\n"; + try + { + Sound *sound; + std::auto_ptr decoder(new DEFAULT_DECODER); + sound = Output->PlaySound3D(file, decoder, ptr, volume, pitch, min, max, loop); + delete sound; + } + catch(std::exception &e) + { + std::cout <<"Sound play error: "< decoder(new DEFAULT_DECODER); + sound = Output->PlaySound(file, decoder, volume, pitch, loop); + delete sound; + } + catch(std::exception &e) + { + std::cout <<"Sound play error: "< Date: Sat, 17 Mar 2012 08:02:46 -0700 Subject: [PATCH 066/488] Keep a handle on played sounds --- apps/openmw/mwsound/soundmanager.cpp | 56 ++++++++++++++++++++++++---- apps/openmw/mwsound/soundmanager.hpp | 8 +++- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index b24a748683..535dbe774e 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -76,6 +76,8 @@ namespace MWSound SoundManager::~SoundManager() { + LooseSounds.clear(); + ActiveSounds.clear(); if(mMusic) mMusic->Stop(); mMusic.reset(); @@ -113,7 +115,7 @@ namespace MWSound } // Add a sound to the list and play it - void SoundManager::add(const std::string &file, + void SoundManager::play3d(const std::string &file, MWWorld::Ptr ptr, const std::string &id, float volume, float pitch, @@ -125,7 +127,10 @@ namespace MWSound Sound *sound; std::auto_ptr decoder(new DEFAULT_DECODER); sound = Output->PlaySound3D(file, decoder, ptr, volume, pitch, min, max, loop); - delete sound; + if(untracked) + LooseSounds[id] = SoundPtr(sound); + else + ActiveSounds[ptr][id] = SoundPtr(sound); } catch(std::exception &e) { @@ -137,6 +142,22 @@ namespace MWSound // remove the entire object and stop all its sounds. void SoundManager::remove(MWWorld::Ptr ptr, const std::string &id) { + SoundMap::iterator snditer = ActiveSounds.find(ptr); + if(snditer == ActiveSounds.end()) + return; + + if(!id.empty()) + { + IDMap::iterator iditer = snditer->second.find(id); + if(iditer != snditer->second.end()) + { + snditer->second.erase(iditer); + if(snditer->second.size() == 0) + ActiveSounds.erase(snditer); + } + } + else + ActiveSounds.erase(snditer); } bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const @@ -149,6 +170,14 @@ namespace MWSound // Remove all references to objects belonging to a given cell void SoundManager::removeCell(const MWWorld::Ptr::CellStore *cell) { + SoundMap::iterator snditer = ActiveSounds.begin(); + while(snditer != ActiveSounds.end()) + { + if(snditer->first.getCell() == cell) + ActiveSounds.erase(snditer++); + else + snditer++; + } } void SoundManager::updatePositions(MWWorld::Ptr ptr) @@ -260,7 +289,7 @@ namespace MWSound // The range values are not tested std::string filePath = Files::FileListLocator(mSoundFiles, filename, mFSStrict, true); if(!filePath.empty()) - add(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); + play3d(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); } bool SoundManager::sayDone(MWWorld::Ptr ptr) const @@ -280,7 +309,7 @@ namespace MWSound Sound *sound; std::auto_ptr decoder(new DEFAULT_DECODER); sound = Output->PlaySound(file, decoder, volume, pitch, loop); - delete sound; + LooseSounds[soundId] = SoundPtr(sound); } catch(std::exception &e) { @@ -298,7 +327,7 @@ namespace MWSound float min, max; std::string file = lookup(soundId, volume, min, max); if(!file.empty()) - add(file, ptr, soundId, volume, pitch, min, max, false); + play3d(file, ptr, soundId, volume, pitch, min, max, false); else std::cout << "Sound file " << soundId << " not found, skipping.\n"; } @@ -315,6 +344,9 @@ namespace MWSound void SoundManager::stopSound(const std::string& soundId) { + IDMap::iterator iditer = LooseSounds.find(soundId); + if(iditer != LooseSounds.end()) + LooseSounds.erase(iditer); } bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const @@ -382,7 +414,7 @@ namespace MWSound { //play sound std::cout << "Sound: " << go <<" Chance:" << chance << "\n"; - playSound(go, 20.0, 1.0); + playSound(go, 1.0f, 1.0f); break; } pos += chance; @@ -397,14 +429,24 @@ namespace MWSound if(timePassed > (1.0f/30.0f)) { timePassed = 0.0f; - Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); + Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); Ogre::Vector3 nPos, nDir, nUp; nPos = cam->getRealPosition(); nDir = cam->getRealDirection(); nUp = cam->getRealUp(); Output->UpdateListener(&nPos[0], &nDir[0], &nUp[0]); + + + IDMap::iterator snditer = LooseSounds.begin(); + while(snditer != LooseSounds.end()) + { + if(!snditer->second->isPlaying()) + LooseSounds.erase(snditer++); + else + snditer++; + } } updateRegionSound(duration); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index b31e1db7f1..7b103dbad7 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -52,9 +52,15 @@ namespace MWSound // Points to the current playlist of music files stored in the music library const Files::PathContainer* mCurrentPlaylist; + typedef boost::shared_ptr SoundPtr; + typedef std::map IDMap; + typedef std::map SoundMap; + SoundMap ActiveSounds; + IDMap LooseSounds; + std::string lookup(const std::string &soundId, float &volume, float &min, float &max); - void add(const std::string &file, + void play3d(const std::string &file, MWWorld::Ptr ptr, const std::string &id, float volume, float pitch, float min, float max, bool loop, bool untracked=false); From d57051375dda480be65fbc5127b4d4433d99e0e1 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:15:47 -0700 Subject: [PATCH 067/488] Implement non-streaming sounds with OpenAL --- apps/openmw/mwsound/openal_output.cpp | 166 +++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index a183909d38..ac639416f3 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -47,6 +47,32 @@ static ALenum getALFormat(Sound_Decoder::ChannelConfig chans, Sound_Decoder::Sam } +ALuint LoadBuffer(std::auto_ptr decoder) +{ + int srate; + Sound_Decoder::ChannelConfig chans; + Sound_Decoder::SampleType type; + ALenum format; + + decoder->GetInfo(&srate, &chans, &type); + format = getALFormat(chans, type); + + std::vector data(32768); + size_t got, total = 0; + while((got=decoder->Read(&data[total], data.size()-total)) > 0) + { + total += got; + data.resize(total*2); + } + data.resize(total); + + ALuint buf; + alGenBuffers(1, &buf); + alBufferData(buf, format, &data[0], total, srate); + return buf; +} + + class OpenAL_SoundStream : public Sound { // This should be something sane, like 4, but currently cell loads tend to @@ -71,6 +97,21 @@ public: virtual bool isPlaying(); }; +class OpenAL_Sound : public Sound +{ +public: + ALuint Source; + ALuint Buffer; + + OpenAL_Sound(ALuint src, ALuint buf); + virtual ~OpenAL_Sound(); + + virtual void Play(); + virtual void Stop(); + virtual bool isPlaying(); +}; + + OpenAL_SoundStream::OpenAL_SoundStream(std::auto_ptr decoder) : Decoder(decoder) { @@ -190,6 +231,38 @@ bool OpenAL_SoundStream::isPlaying() } +OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) + : Source(src), Buffer(buf) +{ +} +OpenAL_Sound::~OpenAL_Sound() +{ + alDeleteSources(1, &Source); + alDeleteBuffers(1, &Buffer); + alGetError(); +} + +void OpenAL_Sound::Play() +{ +} + +void OpenAL_Sound::Stop() +{ + alSourceStop(Source); + throwALerror(); +} + +bool OpenAL_Sound::isPlaying() +{ + ALint state; + + alGetSourcei(Source, AL_SOURCE_STATE, &state); + throwALerror(); + + return state==AL_PLAYING; +} + + bool OpenAL_Output::Initialize(const std::string &devname) { if(Context) @@ -233,16 +306,97 @@ void OpenAL_Output::Deinitialize() Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch, bool loop) { - fail("PlaySound not yet supported"); - return NULL; + throwALerror(); + + decoder->Open(fname); + + ALuint src=0, buf=0; + try + { + buf = LoadBuffer(decoder); + alGenSources(1, &src); + throwALerror(); + } + catch(std::exception &e) + { + if(alIsSource(buf)) + alDeleteSources(1, &src); + if(alIsBuffer(buf)) + alDeleteBuffers(1, &buf); + alGetError(); + throw; + } + + std::auto_ptr sound(new OpenAL_Sound(src, buf)); + alSource3f(src, AL_POSITION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + + alSourcef(src, AL_REFERENCE_DISTANCE, 1.0f); + alSourcef(src, AL_MAX_DISTANCE, 1000.0f); + alSourcef(src, AL_ROLLOFF_FACTOR, 0.0f); + + alSourcef(src, AL_GAIN, volume); + alSourcef(src, AL_PITCH, pitch); + + alSourcei(src, AL_SOURCE_RELATIVE, AL_TRUE); + alSourcei(src, AL_LOOPING, (loop?AL_TRUE:AL_FALSE)); + throwALerror(); + + alSourcei(src, AL_BUFFER, buf); + alSourcePlay(src); + throwALerror(); + + return sound.release(); } Sound* OpenAL_Output::PlaySound3D(const std::string &fname, std::auto_ptr decoder, - MWWorld::Ptr ptr, float volume, float pitch, - float min, float max, bool loop) + MWWorld::Ptr ptr, float volume, float pitch, + float min, float max, bool loop) { - fail("PlaySound3D not yet supported"); - return NULL; + throwALerror(); + + decoder->Open(fname); + + ALuint src=0, buf=0; + try + { + buf = LoadBuffer(decoder); + alGenSources(1, &src); + throwALerror(); + } + catch(std::exception &e) + { + if(alIsSource(buf)) + alDeleteSources(1, &src); + if(alIsBuffer(buf)) + alDeleteBuffers(1, &buf); + alGetError(); + throw; + } + + std::auto_ptr sound(new OpenAL_Sound(src, buf)); + const float *pos = ptr.getCellRef().pos.pos; + alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + + alSourcef(src, AL_REFERENCE_DISTANCE, min); + alSourcef(src, AL_MAX_DISTANCE, max); + alSourcef(src, AL_ROLLOFF_FACTOR, 1.0f); + + alSourcef(src, AL_GAIN, volume); + alSourcef(src, AL_PITCH, pitch); + + alSourcei(src, AL_SOURCE_RELATIVE, AL_FALSE); + alSourcei(src, AL_LOOPING, (loop?AL_TRUE:AL_FALSE)); + throwALerror(); + + alSourcei(src, AL_BUFFER, buf); + alSourcePlay(src); + throwALerror(); + + return sound.release(); } From e49a090af787faf4115f0dece1a4aee7dd0bb70d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:16:09 -0700 Subject: [PATCH 068/488] Remove unnecessary hack --- apps/openmw/mwsound/soundmanager.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 535dbe774e..796c490d9a 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -162,9 +162,15 @@ namespace MWSound bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { - // HACK: Return true to prevent the engine from trying to keep playing - // sounds and tanking the framerate. - return true; + SoundMap::const_iterator snditer = ActiveSounds.find(ptr); + if(snditer == ActiveSounds.end()) + return false; + + IDMap::const_iterator iditer = snditer->second.find(id); + if(iditer == snditer->second.end()) + return false; + + return iditer->second->isPlaying(); } // Remove all references to objects belonging to a given cell From cac07d0fbf5035f47dbeb4d8ed7fa64dac615394 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:27:31 -0700 Subject: [PATCH 069/488] Remove some unnecessary methods --- apps/openmw/mwsound/openal_output.cpp | 7 +------ apps/openmw/mwsound/sound.hpp | 1 - apps/openmw/mwsound/soundmanager.cpp | 6 +----- apps/openmw/mwsound/soundmanager.hpp | 1 - 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ac639416f3..bf972512bc 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -92,7 +92,7 @@ public: OpenAL_SoundStream(std::auto_ptr decoder); virtual ~OpenAL_SoundStream(); - virtual void Play(); + void Play(); virtual void Stop(); virtual bool isPlaying(); }; @@ -106,7 +106,6 @@ public: OpenAL_Sound(ALuint src, ALuint buf); virtual ~OpenAL_Sound(); - virtual void Play(); virtual void Stop(); virtual bool isPlaying(); }; @@ -242,10 +241,6 @@ OpenAL_Sound::~OpenAL_Sound() alGetError(); } -void OpenAL_Sound::Play() -{ -} - void OpenAL_Sound::Stop() { alSourceStop(Source); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 5ffb48820c..5fb996e28a 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -7,7 +7,6 @@ namespace MWSound { class Sound { - virtual void Play() = 0; virtual void Stop() = 0; virtual bool isPlaying() = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 796c490d9a..b1caf7ff37 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -186,10 +186,6 @@ namespace MWSound } } - void SoundManager::updatePositions(MWWorld::Ptr ptr) - { - } - void SoundManager::stopMusic() { if(mMusic) @@ -365,7 +361,7 @@ namespace MWSound void SoundManager::updateObject(MWWorld::Ptr ptr) { - updatePositions(ptr); + // FIXME: Update tracked sounds that are using this ptr } void SoundManager::updateRegionSound(float duration) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 7b103dbad7..df7e696dac 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -67,7 +67,6 @@ namespace MWSound void remove(MWWorld::Ptr ptr, const std::string &id = ""); bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; void removeCell(const MWWorld::Ptr::CellStore *cell); - void updatePositions(MWWorld::Ptr ptr); void updateRegionSound(float duration); public: From 979ae89aab8dadde4efff46e5a01e91436665fa7 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:37:41 -0700 Subject: [PATCH 070/488] Pass volume and pitch parameters to streamed sounds --- apps/openmw/mwsound/openal_output.cpp | 10 ++++++---- apps/openmw/mwsound/openal_output.hpp | 3 ++- apps/openmw/mwsound/sound_output.hpp | 3 ++- apps/openmw/mwsound/soundmanager.cpp | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index bf972512bc..9131bbe296 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -92,7 +92,7 @@ public: OpenAL_SoundStream(std::auto_ptr decoder); virtual ~OpenAL_SoundStream(); - void Play(); + void Play(float volume, float pitch); virtual void Stop(); virtual bool isPlaying(); }; @@ -156,12 +156,14 @@ OpenAL_SoundStream::~OpenAL_SoundStream() Decoder->Close(); } -void OpenAL_SoundStream::Play() +void OpenAL_SoundStream::Play(float volume, float pitch) { std::vector data(BufferSize); alSourceStop(Source); alSourcei(Source, AL_BUFFER, 0); + alSourcef(Source, AL_GAIN, volume); + alSourcef(Source, AL_PITCH, pitch); throwALerror(); for(ALuint i = 0;i < NumBuffers;i++) @@ -395,14 +397,14 @@ Sound* OpenAL_Output::PlaySound3D(const std::string &fname, std::auto_ptr decoder) +Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch) { std::auto_ptr sound; decoder->Open(fname); sound.reset(new OpenAL_SoundStream(decoder)); - sound->Play(); + sound->Play(volume, pitch); return sound.release(); } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 0ab8dd3496..65fe89c9e6 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -28,7 +28,8 @@ namespace MWSound MWWorld::Ptr ptr, float volume, float pitch, float min, float max, bool loop); - virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder); + virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, + float volume, float pitch); virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index ba98092915..9c8d0303b3 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -24,7 +24,8 @@ namespace MWSound virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, MWWorld::Ptr ptr, float volume, float pitch, float min, float max, bool loop) = 0; - virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder) = 0; + virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, + float volume, float pitch) = 0; // FIXME: This should take an MWWorld::Ptr that represents the in-world camera virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]) = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index b1caf7ff37..cab179f616 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -199,7 +199,7 @@ namespace MWSound if(mMusic) mMusic->Stop(); std::auto_ptr decoder(new DEFAULT_DECODER); - mMusic.reset(Output->StreamSound(filename, decoder)); + mMusic.reset(Output->StreamSound(filename, decoder, 0.4f, 1.0f)); } void SoundManager::streamMusic(const std::string& filename) From 5563f583ff6821337ae49c385986c84730925c6f Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:51:03 -0700 Subject: [PATCH 071/488] Add and implement methods to update tracked sounds on an object --- apps/openmw/mwsound/openal_output.cpp | 20 ++++++++++++++++++++ apps/openmw/mwsound/sound.hpp | 3 +++ apps/openmw/mwsound/soundmanager.cpp | 14 ++++++++++---- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 9131bbe296..c460aeb299 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -95,6 +95,7 @@ public: void Play(float volume, float pitch); virtual void Stop(); virtual bool isPlaying(); + virtual void Update(MWWorld::Ptr ptr); }; class OpenAL_Sound : public Sound @@ -108,6 +109,7 @@ public: virtual void Stop(); virtual bool isPlaying(); + virtual void Update(MWWorld::Ptr ptr); }; @@ -231,6 +233,15 @@ bool OpenAL_SoundStream::isPlaying() return true; } +void OpenAL_SoundStream::Update(MWWorld::Ptr ptr) +{ + const float *pos = ptr.getCellRef().pos.pos; + alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + throwALerror(); +} + OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) : Source(src), Buffer(buf) @@ -259,6 +270,15 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } +void OpenAL_Sound::Update(MWWorld::Ptr ptr) +{ + const float *pos = ptr.getCellRef().pos.pos; + alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + throwALerror(); +} + bool OpenAL_Output::Initialize(const std::string &devname) { diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 5fb996e28a..99be9dfeb6 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -3,12 +3,15 @@ #include +#include "../mwworld/ptr.hpp" + namespace MWSound { class Sound { virtual void Stop() = 0; virtual bool isPlaying() = 0; + virtual void Update(MWWorld::Ptr ptr) = 0; public: virtual ~Sound() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index cab179f616..5918a9cf7b 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -353,15 +353,21 @@ namespace MWSound bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const { - // Mark all sounds as playing, otherwise the scripts will just - // keep trying to play them every frame. - return isPlaying(ptr, soundId); } void SoundManager::updateObject(MWWorld::Ptr ptr) { - // FIXME: Update tracked sounds that are using this ptr + SoundMap::iterator snditer = ActiveSounds.find(ptr); + if(snditer == ActiveSounds.end()) + return; + + IDMap::iterator iditer = snditer->second.begin(); + while(iditer != snditer->second.end()) + { + iditer->second->Update(ptr); + iditer++; + } } void SoundManager::updateRegionSound(float duration) From 87adf6002a4c8933269177038771db4a71d449d2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 09:57:39 -0700 Subject: [PATCH 072/488] Fix a copy-paste typo in the openal output --- apps/openmw/mwsound/openal_output.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index c460aeb299..c8ed2ad8b1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -336,7 +336,7 @@ Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr Date: Sat, 17 Mar 2012 10:16:22 -0700 Subject: [PATCH 073/488] Pass the loop and untracked flags when playing a 3d sound --- apps/openmw/mwsound/soundmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 5918a9cf7b..9f80a8e20f 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -329,7 +329,7 @@ namespace MWSound float min, max; std::string file = lookup(soundId, volume, min, max); if(!file.empty()) - play3d(file, ptr, soundId, volume, pitch, min, max, false); + play3d(file, ptr, soundId, volume, pitch, min, max, loop, untracked); else std::cout << "Sound file " << soundId << " not found, skipping.\n"; } From 7160d20db33f4b9e3d136dc613aa64a4c780412d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 10:36:34 -0700 Subject: [PATCH 074/488] Be more consistent with the vector orientations given the sound handler --- apps/openmw/mwsound/openal_output.cpp | 13 ++++++++----- apps/openmw/mwsound/openal_output.hpp | 4 ++-- apps/openmw/mwsound/sound_output.hpp | 5 ++--- apps/openmw/mwsound/soundmanager.cpp | 8 ++++++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index c8ed2ad8b1..0cff2303fd 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -368,7 +368,7 @@ Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr decoder, - MWWorld::Ptr ptr, float volume, float pitch, + const float *pos, float volume, float pitch, float min, float max, bool loop) { throwALerror(); @@ -393,7 +393,6 @@ Sound* OpenAL_Output::PlaySound3D(const std::string &fname, std::auto_ptr sound(new OpenAL_Sound(src, buf)); - const float *pos = ptr.getCellRef().pos.pos; alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -430,10 +429,14 @@ Sound* OpenAL_Output::StreamSound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch, bool loop); virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, - MWWorld::Ptr ptr, float volume, float pitch, + const float *pos, float volume, float pitch, float min, float max, bool loop); virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch); - virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]); + virtual void UpdateListener(const float *pos, const float *atdir, const float *updir); OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 9c8d0303b3..c69247cc9d 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -22,13 +22,12 @@ namespace MWSound virtual Sound *PlaySound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch, bool loop) = 0; virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, - MWWorld::Ptr ptr, float volume, float pitch, + const float *pos, float volume, float pitch, float min, float max, bool loop) = 0; virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, float volume, float pitch) = 0; - // FIXME: This should take an MWWorld::Ptr that represents the in-world camera - virtual void UpdateListener(float pos[3], float atdir[3], float updir[3]) = 0; + virtual void UpdateListener(const float *pos, const float *atdir, const float *updir) = 0; Sound_Output(SoundManager &mgr) : mgr(mgr) { } public: diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 9f80a8e20f..af1cdf76df 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -125,8 +125,9 @@ namespace MWSound try { Sound *sound; + const float *pos = ptr.getCellRef().pos.pos; std::auto_ptr decoder(new DEFAULT_DECODER); - sound = Output->PlaySound3D(file, decoder, ptr, volume, pitch, min, max, loop); + sound = Output->PlaySound3D(file, decoder, pos, volume, pitch, min, max, loop); if(untracked) LooseSounds[id] = SoundPtr(sound); else @@ -444,7 +445,10 @@ namespace MWSound nDir = cam->getRealDirection(); nUp = cam->getRealUp(); - Output->UpdateListener(&nPos[0], &nDir[0], &nUp[0]); + float pos[3] = { nPos[0], -nPos[2], nPos[1] }; + float at[3] = { nDir[0], -nDir[2], nDir[1] }; + float up[3] = { nUp[0], -nUp[2], nUp[1] }; + Output->UpdateListener(pos, at, up); IDMap::iterator snditer = LooseSounds.begin(); From a91085a1b904bb26cf8410721e978fc73c3392b6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 10:45:11 -0700 Subject: [PATCH 075/488] Add a couple comments --- apps/openmw/mwsound/soundmanager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index af1cdf76df..5d872476e9 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -445,12 +445,16 @@ namespace MWSound nDir = cam->getRealDirection(); nUp = cam->getRealUp(); + // The output handler is expecting vectors oriented like the game + // (that is, -Z goes down, +Y goes forward), but that's not what we + // get from Ogre's camera, so we have to convert. float pos[3] = { nPos[0], -nPos[2], nPos[1] }; float at[3] = { nDir[0], -nDir[2], nDir[1] }; float up[3] = { nUp[0], -nUp[2], nUp[1] }; Output->UpdateListener(pos, at, up); - + // Check if any "untracked" sounds are finished playing, and trash + // them IDMap::iterator snditer = LooseSounds.begin(); while(snditer != LooseSounds.end()) { From a69ec91242eb1a781d944283af1c17b2d4110b2b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 22:13:57 -0700 Subject: [PATCH 076/488] Remove some unnecessary wrappers and do some small cleanups --- apps/openmw/mwsound/soundmanager.cpp | 68 ++++++++++++---------------- apps/openmw/mwsound/soundmanager.hpp | 2 - 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 5d872476e9..5b050e6121 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -78,8 +78,6 @@ namespace MWSound { LooseSounds.clear(); ActiveSounds.clear(); - if(mMusic) - mMusic->Stop(); mMusic.reset(); Output.reset(); } @@ -135,32 +133,10 @@ namespace MWSound } catch(std::exception &e) { - std::cout <<"Sound play error: "<second.find(id); - if(iditer != snditer->second.end()) - { - snditer->second.erase(iditer); - if(snditer->second.size() == 0) - ActiveSounds.erase(snditer); - } - } - else - ActiveSounds.erase(snditer); - } - bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { SoundMap::const_iterator snditer = ActiveSounds.find(ptr); @@ -174,18 +150,6 @@ namespace MWSound return iditer->second->isPlaying(); } - // Remove all references to objects belonging to a given cell - void SoundManager::removeCell(const MWWorld::Ptr::CellStore *cell) - { - SoundMap::iterator snditer = ActiveSounds.begin(); - while(snditer != ActiveSounds.end()) - { - if(snditer->first.getCell() == cell) - ActiveSounds.erase(snditer++); - else - snditer++; - } - } void SoundManager::stopMusic() { @@ -194,7 +158,6 @@ namespace MWSound setPlaylist(); } - void SoundManager::streamMusicFull(const std::string& filename) { if(mMusic) @@ -337,12 +300,37 @@ namespace MWSound void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) { - remove(ptr, soundId); + // Stop a sound and remove it from the list. If soundId="" then + // stop all its sounds. + SoundMap::iterator snditer = ActiveSounds.find(ptr); + if(snditer == ActiveSounds.end()) + return; + + if(!soundId.empty()) + { + IDMap::iterator iditer = snditer->second.find(soundId); + if(iditer != snditer->second.end()) + { + snditer->second.erase(iditer); + if(snditer->second.size() == 0) + ActiveSounds.erase(snditer); + } + } + else + ActiveSounds.erase(snditer); } void SoundManager::stopSound(MWWorld::Ptr::CellStore *cell) { - removeCell(cell); + // Remove all references to objects belonging to a given cell + SoundMap::iterator snditer = ActiveSounds.begin(); + while(snditer != ActiveSounds.end()) + { + if(snditer->first.getCell() == cell) + ActiveSounds.erase(snditer++); + else + snditer++; + } } void SoundManager::stopSound(const std::string& soundId) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index df7e696dac..62e452cdea 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -64,9 +64,7 @@ namespace MWSound MWWorld::Ptr ptr, const std::string &id, float volume, float pitch, float min, float max, bool loop, bool untracked=false); - void remove(MWWorld::Ptr ptr, const std::string &id = ""); bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; - void removeCell(const MWWorld::Ptr::CellStore *cell); void updateRegionSound(float duration); public: From ddfa9069220c3560df1a14332f1c8b2266c7b04c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 22:45:28 -0700 Subject: [PATCH 077/488] Add a missing include --- apps/openmw/mwsound/soundmanager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 5b050e6121..7cd8f4ea79 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -23,6 +23,7 @@ CMakeLists.txt. */ #ifdef OPENMW_USE_FFMPEG +#include "ffmpeg_decoder.hpp" #define SOUND_IN "FFmpeg" #endif From 44fc204864f15485c53d9f80492679d0b7b19d5a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 23:30:43 -0700 Subject: [PATCH 078/488] Avoid passing a sound decoder to the play methods --- apps/openmw/mwsound/mpgsnd_decoder.hpp | 1 + apps/openmw/mwsound/openal_output.cpp | 20 +++++++++++--------- apps/openmw/mwsound/openal_output.hpp | 9 +++------ apps/openmw/mwsound/sound_output.hpp | 9 +++------ apps/openmw/mwsound/soundmanager.cpp | 17 ++++++++++------- apps/openmw/mwsound/soundmanager.hpp | 6 ++++++ 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 391cfbd6d3..cd7e468da5 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -26,6 +26,7 @@ namespace MWSound virtual size_t Read(char *buffer, size_t bytes); MpgSnd_Decoder(); + public: virtual ~MpgSnd_Decoder(); friend class SoundManager; diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 0cff2303fd..e9df0738be 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -5,6 +5,7 @@ #include "openal_output.hpp" #include "sound_decoder.hpp" #include "sound.hpp" +#include "soundmanager.hpp" namespace MWSound @@ -47,7 +48,7 @@ static ALenum getALFormat(Sound_Decoder::ChannelConfig chans, Sound_Decoder::Sam } -ALuint LoadBuffer(std::auto_ptr decoder) +ALuint LoadBuffer(DecoderPtr decoder) { int srate; Sound_Decoder::ChannelConfig chans; @@ -86,10 +87,10 @@ class OpenAL_SoundStream : public Sound ALenum Format; ALsizei SampleRate; - std::auto_ptr Decoder; + DecoderPtr Decoder; public: - OpenAL_SoundStream(std::auto_ptr decoder); + OpenAL_SoundStream(DecoderPtr decoder); virtual ~OpenAL_SoundStream(); void Play(float volume, float pitch); @@ -113,7 +114,7 @@ public: }; -OpenAL_SoundStream::OpenAL_SoundStream(std::auto_ptr decoder) +OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) : Decoder(decoder) { throwALerror(); @@ -320,11 +321,11 @@ void OpenAL_Output::Deinitialize() } -Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr decoder, - float volume, float pitch, bool loop) +Sound* OpenAL_Output::PlaySound(const std::string &fname, float volume, float pitch, bool loop) { throwALerror(); + DecoderPtr decoder = mgr.getDecoder(); decoder->Open(fname); ALuint src=0, buf=0; @@ -367,12 +368,12 @@ Sound* OpenAL_Output::PlaySound(const std::string &fname, std::auto_ptr decoder, - const float *pos, float volume, float pitch, +Sound* OpenAL_Output::PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) { throwALerror(); + DecoderPtr decoder = mgr.getDecoder(); decoder->Open(fname); ALuint src=0, buf=0; @@ -416,10 +417,11 @@ Sound* OpenAL_Output::PlaySound3D(const std::string &fname, std::auto_ptr decoder, float volume, float pitch) +Sound* OpenAL_Output::StreamSound(const std::string &fname, float volume, float pitch) { std::auto_ptr sound; + DecoderPtr decoder = mgr.getDecoder(); decoder->Open(fname); sound.reset(new OpenAL_SoundStream(decoder)); diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index b941aea3a4..7d5bd25f6b 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -22,14 +22,11 @@ namespace MWSound virtual bool Initialize(const std::string &devname=""); virtual void Deinitialize(); - virtual Sound *PlaySound(const std::string &fname, std::auto_ptr decoder, - float volume, float pitch, bool loop); - virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, - const float *pos, float volume, float pitch, + virtual Sound *PlaySound(const std::string &fname, float volume, float pitch, bool loop); + virtual Sound *PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop); - virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, - float volume, float pitch); + virtual Sound *StreamSound(const std::string &fname, float volume, float pitch); virtual void UpdateListener(const float *pos, const float *atdir, const float *updir); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index c69247cc9d..8dfc0f21ee 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -19,13 +19,10 @@ namespace MWSound virtual bool Initialize(const std::string &devname="") = 0; virtual void Deinitialize() = 0; - virtual Sound *PlaySound(const std::string &fname, std::auto_ptr decoder, - float volume, float pitch, bool loop) = 0; - virtual Sound *PlaySound3D(const std::string &fname, std::auto_ptr decoder, - const float *pos, float volume, float pitch, + virtual Sound *PlaySound(const std::string &fname, float volume, float pitch, bool loop) = 0; + virtual Sound *PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) = 0; - virtual Sound *StreamSound(const std::string &fname, std::auto_ptr decoder, - float volume, float pitch) = 0; + virtual Sound *StreamSound(const std::string &fname, float volume, float pitch) = 0; virtual void UpdateListener(const float *pos, const float *atdir, const float *updir) = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 7cd8f4ea79..a603763e5f 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -83,6 +83,12 @@ namespace MWSound Output.reset(); } + // Return a new decoder instance, used as needed by the output implementations + DecoderPtr SoundManager::getDecoder() + { + return DecoderPtr(new DEFAULT_DECODER); + } + // Convert a soundId to file name, and modify the volume // according to the sounds local volume setting, minRange and // maxRange. @@ -124,9 +130,8 @@ namespace MWSound try { Sound *sound; - const float *pos = ptr.getCellRef().pos.pos; - std::auto_ptr decoder(new DEFAULT_DECODER); - sound = Output->PlaySound3D(file, decoder, pos, volume, pitch, min, max, loop); + const ESM::Position &pos = ptr.getCellRef().pos; + sound = Output->PlaySound3D(file, pos.pos, volume, pitch, min, max, loop); if(untracked) LooseSounds[id] = SoundPtr(sound); else @@ -163,8 +168,7 @@ namespace MWSound { if(mMusic) mMusic->Stop(); - std::auto_ptr decoder(new DEFAULT_DECODER); - mMusic.reset(Output->StreamSound(filename, decoder, 0.4f, 1.0f)); + mMusic.reset(Output->StreamSound(filename, 0.4f, 1.0f)); } void SoundManager::streamMusic(const std::string& filename) @@ -274,8 +278,7 @@ namespace MWSound try { Sound *sound; - std::auto_ptr decoder(new DEFAULT_DECODER); - sound = Output->PlaySound(file, decoder, volume, pitch, loop); + sound = Output->PlaySound(file, volume, pitch, loop); LooseSounds[soundId] = SoundPtr(sound); } catch(std::exception &e) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 62e452cdea..6b188c9e49 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -25,6 +25,8 @@ namespace MWSound class Sound_Decoder; class Sound; + typedef boost::shared_ptr DecoderPtr; + class SoundManager { // This is used for case insensitive and slash-type agnostic file @@ -67,6 +69,10 @@ namespace MWSound bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; void updateRegionSound(float duration); + protected: + DecoderPtr getDecoder(); + friend class OpenAL_Output; + public: SoundManager(Ogre::Root*, Ogre::Camera*, const Files::PathContainer& dataDir, bool useSound, bool fsstrict, From f7ac94d6860fc43344e403ce7904b2197262059a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 23:41:45 -0700 Subject: [PATCH 079/488] Pass the new position to the sound update method --- apps/openmw/mwsound/openal_output.cpp | 10 ++++------ apps/openmw/mwsound/sound.hpp | 2 +- apps/openmw/mwsound/soundmanager.cpp | 3 ++- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index e9df0738be..e37924088b 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -96,7 +96,7 @@ public: void Play(float volume, float pitch); virtual void Stop(); virtual bool isPlaying(); - virtual void Update(MWWorld::Ptr ptr); + virtual void Update(const float *pos); }; class OpenAL_Sound : public Sound @@ -110,7 +110,7 @@ public: virtual void Stop(); virtual bool isPlaying(); - virtual void Update(MWWorld::Ptr ptr); + virtual void Update(const float *pos); }; @@ -234,9 +234,8 @@ bool OpenAL_SoundStream::isPlaying() return true; } -void OpenAL_SoundStream::Update(MWWorld::Ptr ptr) +void OpenAL_SoundStream::Update(const float *pos) { - const float *pos = ptr.getCellRef().pos.pos; alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -271,9 +270,8 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } -void OpenAL_Sound::Update(MWWorld::Ptr ptr) +void OpenAL_Sound::Update(const float *pos) { - const float *pos = ptr.getCellRef().pos.pos; alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 99be9dfeb6..3b4736fd6c 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -11,7 +11,7 @@ namespace MWSound { virtual void Stop() = 0; virtual bool isPlaying() = 0; - virtual void Update(MWWorld::Ptr ptr) = 0; + virtual void Update(const float *pos) = 0; public: virtual ~Sound() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a603763e5f..650c8f0d93 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -358,7 +358,8 @@ namespace MWSound IDMap::iterator iditer = snditer->second.begin(); while(iditer != snditer->second.end()) { - iditer->second->Update(ptr); + const ESM::Position &pos = ptr.getCellRef().pos; + iditer->second->Update(pos.pos); iditer++; } } From 3fea3e7d25e59e45c5357616f46fc05e3fb56fa5 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 17 Mar 2012 23:47:12 -0700 Subject: [PATCH 080/488] Fix stereo files with libsndfile --- apps/openmw/mwsound/mpgsnd_decoder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 2c35adeb33..9b51319dd8 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -22,8 +22,8 @@ void MpgSnd_Decoder::Open(const std::string &fname) { if(info.channels == 1) chanConfig = MonoChannels; - else if(info.channels == 1) - chanConfig = MonoChannels; + else if(info.channels == 2) + chanConfig = StereoChannels; else { sf_close(sndFile); From a256b9a7b0952803aacad7a27d4c8c2225b1418b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 08:42:55 -0700 Subject: [PATCH 081/488] Remove a comment about Audiere --- apps/openmw/mwsound/soundmanager.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 650c8f0d93..895d580db8 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -18,9 +18,8 @@ #include "openal_output.hpp" #define SOUND_OUT "OpenAL" -/* Set up the sound manager to use Audiere, FFMPEG or - MPG123/libsndfile for input. The OPENMW_USE_x macros are set in - CMakeLists.txt. +/* Set up the sound manager to use FFMPEG or MPG123+libsndfile for input. The + * OPENMW_USE_x macros are set in CMakeLists.txt. */ #ifdef OPENMW_USE_FFMPEG #include "ffmpeg_decoder.hpp" From 2f92559fc7b7c6d64b2f5d7cd0435da20689e67a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 09:05:38 -0700 Subject: [PATCH 082/488] Use OpenAL's linear attenuation model We should use the inverse distance clamped model (the default), but we first need to handle muting sounds that are beyond their max distance. Linear attenuation doesn't give a proper rolloff, but it makes the sounds silent at max distance. --- apps/openmw/mwsound/openal_output.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index e37924088b..5ce7931684 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -303,6 +303,8 @@ bool OpenAL_Output::Initialize(const std::string &devname) Device = 0; return false; } + alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); + throwALerror(); return true; } From 162642e6726ec741731520fde4909e4d681e7bc2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 11:17:45 -0700 Subject: [PATCH 083/488] Prefix some SoundManager class member variables --- apps/openmw/mwsound/soundmanager.cpp | 60 ++++++++++++++-------------- apps/openmw/mwsound/soundmanager.hpp | 6 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 895d580db8..d78251ef15 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -47,10 +47,10 @@ namespace MWSound std::cout << "Sound output: " << SOUND_OUT << std::endl; std::cout << "Sound decoder: " << SOUND_IN << std::endl; - Output.reset(new DEFAULT_OUTPUT(*this)); - if(!Output->Initialize()) + mOutput.reset(new DEFAULT_OUTPUT(*this)); + if(!mOutput->Initialize()) { - Output.reset(); + mOutput.reset(); return; } @@ -76,10 +76,10 @@ namespace MWSound SoundManager::~SoundManager() { - LooseSounds.clear(); - ActiveSounds.clear(); + mLooseSounds.clear(); + mActiveSounds.clear(); mMusic.reset(); - Output.reset(); + mOutput.reset(); } // Return a new decoder instance, used as needed by the output implementations @@ -130,11 +130,11 @@ namespace MWSound { Sound *sound; const ESM::Position &pos = ptr.getCellRef().pos; - sound = Output->PlaySound3D(file, pos.pos, volume, pitch, min, max, loop); + sound = mOutput->PlaySound3D(file, pos.pos, volume, pitch, min, max, loop); if(untracked) - LooseSounds[id] = SoundPtr(sound); + mLooseSounds[id] = SoundPtr(sound); else - ActiveSounds[ptr][id] = SoundPtr(sound); + mActiveSounds[ptr][id] = SoundPtr(sound); } catch(std::exception &e) { @@ -144,8 +144,8 @@ namespace MWSound bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { - SoundMap::const_iterator snditer = ActiveSounds.find(ptr); - if(snditer == ActiveSounds.end()) + SoundMap::const_iterator snditer = mActiveSounds.find(ptr); + if(snditer == mActiveSounds.end()) return false; IDMap::const_iterator iditer = snditer->second.find(id); @@ -167,7 +167,7 @@ namespace MWSound { if(mMusic) mMusic->Stop(); - mMusic.reset(Output->StreamSound(filename, 0.4f, 1.0f)); + mMusic.reset(mOutput->StreamSound(filename, 0.4f, 1.0f)); } void SoundManager::streamMusic(const std::string& filename) @@ -277,8 +277,8 @@ namespace MWSound try { Sound *sound; - sound = Output->PlaySound(file, volume, pitch, loop); - LooseSounds[soundId] = SoundPtr(sound); + sound = mOutput->PlaySound(file, volume, pitch, loop); + mLooseSounds[soundId] = SoundPtr(sound); } catch(std::exception &e) { @@ -305,8 +305,8 @@ namespace MWSound { // Stop a sound and remove it from the list. If soundId="" then // stop all its sounds. - SoundMap::iterator snditer = ActiveSounds.find(ptr); - if(snditer == ActiveSounds.end()) + SoundMap::iterator snditer = mActiveSounds.find(ptr); + if(snditer == mActiveSounds.end()) return; if(!soundId.empty()) @@ -316,21 +316,21 @@ namespace MWSound { snditer->second.erase(iditer); if(snditer->second.size() == 0) - ActiveSounds.erase(snditer); + mActiveSounds.erase(snditer); } } else - ActiveSounds.erase(snditer); + mActiveSounds.erase(snditer); } void SoundManager::stopSound(MWWorld::Ptr::CellStore *cell) { // Remove all references to objects belonging to a given cell - SoundMap::iterator snditer = ActiveSounds.begin(); - while(snditer != ActiveSounds.end()) + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { if(snditer->first.getCell() == cell) - ActiveSounds.erase(snditer++); + mActiveSounds.erase(snditer++); else snditer++; } @@ -338,9 +338,9 @@ namespace MWSound void SoundManager::stopSound(const std::string& soundId) { - IDMap::iterator iditer = LooseSounds.find(soundId); - if(iditer != LooseSounds.end()) - LooseSounds.erase(iditer); + IDMap::iterator iditer = mLooseSounds.find(soundId); + if(iditer != mLooseSounds.end()) + mLooseSounds.erase(iditer); } bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const @@ -350,8 +350,8 @@ namespace MWSound void SoundManager::updateObject(MWWorld::Ptr ptr) { - SoundMap::iterator snditer = ActiveSounds.find(ptr); - if(snditer == ActiveSounds.end()) + SoundMap::iterator snditer = mActiveSounds.find(ptr); + if(snditer == mActiveSounds.end()) return; IDMap::iterator iditer = snditer->second.begin(); @@ -443,15 +443,15 @@ namespace MWSound float pos[3] = { nPos[0], -nPos[2], nPos[1] }; float at[3] = { nDir[0], -nDir[2], nDir[1] }; float up[3] = { nUp[0], -nUp[2], nUp[1] }; - Output->UpdateListener(pos, at, up); + mOutput->UpdateListener(pos, at, up); // Check if any "untracked" sounds are finished playing, and trash // them - IDMap::iterator snditer = LooseSounds.begin(); - while(snditer != LooseSounds.end()) + IDMap::iterator snditer = mLooseSounds.begin(); + while(snditer != mLooseSounds.end()) { if(!snditer->second->isPlaying()) - LooseSounds.erase(snditer++); + mLooseSounds.erase(snditer++); else snditer++; } diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 6b188c9e49..3c78268213 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -37,7 +37,7 @@ namespace MWSound MWWorld::Environment& mEnvironment; - std::auto_ptr Output; + std::auto_ptr mOutput; boost::shared_ptr mMusic; @@ -57,8 +57,8 @@ namespace MWSound typedef boost::shared_ptr SoundPtr; typedef std::map IDMap; typedef std::map SoundMap; - SoundMap ActiveSounds; - IDMap LooseSounds; + SoundMap mActiveSounds; + IDMap mLooseSounds; std::string lookup(const std::string &soundId, float &volume, float &min, float &max); From 362e25472017839f468a3194058a2d83b5a4a715 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 11:30:53 -0700 Subject: [PATCH 084/488] Rename some more sound class member variables and functions --- apps/openmw/mwsound/openal_output.cpp | 162 +++++++++++++------------- apps/openmw/mwsound/openal_output.hpp | 16 +-- apps/openmw/mwsound/sound_output.hpp | 16 +-- apps/openmw/mwsound/soundmanager.cpp | 10 +- 4 files changed, 102 insertions(+), 102 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 5ce7931684..ad21aefbe6 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -78,16 +78,16 @@ class OpenAL_SoundStream : public Sound { // This should be something sane, like 4, but currently cell loads tend to // cause the stream to underrun - static const ALuint NumBuffers = 150; - static const ALuint BufferSize = 32768; + static const ALuint sNumBuffers = 150; + static const ALuint sBufferSize = 32768; - ALuint Source; - ALuint Buffers[NumBuffers]; + ALuint mSource; + ALuint mBuffers[sNumBuffers]; - ALenum Format; - ALsizei SampleRate; + ALenum mFormat; + ALsizei mSampleRate; - DecoderPtr Decoder; + DecoderPtr mDecoder; public: OpenAL_SoundStream(DecoderPtr decoder); @@ -102,8 +102,8 @@ public: class OpenAL_Sound : public Sound { public: - ALuint Source; - ALuint Buffer; + ALuint mSource; + ALuint mBuffer; OpenAL_Sound(ALuint src, ALuint buf); virtual ~OpenAL_Sound(); @@ -115,20 +115,20 @@ public: OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) - : Decoder(decoder) + : mDecoder(decoder) { throwALerror(); - alGenSources(1, &Source); + alGenSources(1, &mSource); throwALerror(); try { - alGenBuffers(NumBuffers, Buffers); + alGenBuffers(sNumBuffers, mBuffers); throwALerror(); } catch(std::exception &e) { - alDeleteSources(1, &Source); + alDeleteSources(1, &mSource); alGetError(); throw; } @@ -139,53 +139,53 @@ OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) Sound_Decoder::ChannelConfig chans; Sound_Decoder::SampleType type; - Decoder->GetInfo(&srate, &chans, &type); - Format = getALFormat(chans, type); - SampleRate = srate; + mDecoder->GetInfo(&srate, &chans, &type); + mFormat = getALFormat(chans, type); + mSampleRate = srate; } catch(std::exception &e) { - alDeleteSources(1, &Source); - alDeleteBuffers(NumBuffers, Buffers); + alDeleteSources(1, &mSource); + alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); throw; } } OpenAL_SoundStream::~OpenAL_SoundStream() { - alDeleteSources(1, &Source); - alDeleteBuffers(NumBuffers, Buffers); + alDeleteSources(1, &mSource); + alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); - Decoder->Close(); + mDecoder->Close(); } void OpenAL_SoundStream::Play(float volume, float pitch) { - std::vector data(BufferSize); + std::vector data(sBufferSize); - alSourceStop(Source); - alSourcei(Source, AL_BUFFER, 0); - alSourcef(Source, AL_GAIN, volume); - alSourcef(Source, AL_PITCH, pitch); + alSourceStop(mSource); + alSourcei(mSource, AL_BUFFER, 0); + alSourcef(mSource, AL_GAIN, volume); + alSourcef(mSource, AL_PITCH, pitch); throwALerror(); - for(ALuint i = 0;i < NumBuffers;i++) + for(ALuint i = 0;i < sNumBuffers;i++) { size_t got; - got = Decoder->Read(&data[0], data.size()); - alBufferData(Buffers[i], Format, &data[0], got, SampleRate); + got = mDecoder->Read(&data[0], data.size()); + alBufferData(mBuffers[i], mFormat, &data[0], got, mSampleRate); } throwALerror(); - alSourceQueueBuffers(Source, NumBuffers, Buffers); - alSourcePlay(Source); + alSourceQueueBuffers(mSource, sNumBuffers, mBuffers); + alSourcePlay(mSource); throwALerror(); } void OpenAL_SoundStream::Stop() { - alSourceStop(Source); - alSourcei(Source, AL_BUFFER, 0); + alSourceStop(mSource); + alSourcei(mSource, AL_BUFFER, 0); throwALerror(); // FIXME: Rewind decoder } @@ -194,25 +194,25 @@ bool OpenAL_SoundStream::isPlaying() { ALint processed, state; - alGetSourcei(Source, AL_SOURCE_STATE, &state); - alGetSourcei(Source, AL_BUFFERS_PROCESSED, &processed); + alGetSourcei(mSource, AL_SOURCE_STATE, &state); + alGetSourcei(mSource, AL_BUFFERS_PROCESSED, &processed); throwALerror(); if(processed > 0) { - std::vector data(BufferSize); + std::vector data(sBufferSize); do { ALuint bufid; size_t got; - alSourceUnqueueBuffers(Source, 1, &bufid); + alSourceUnqueueBuffers(mSource, 1, &bufid); processed--; - got = Decoder->Read(&data[0], data.size()); + got = mDecoder->Read(&data[0], data.size()); if(got > 0) { - alBufferData(bufid, Format, &data[0], got, SampleRate); - alSourceQueueBuffers(Source, 1, &bufid); + alBufferData(bufid, mFormat, &data[0], got, mSampleRate); + alSourceQueueBuffers(mSource, 1, &bufid); } } while(processed > 0); throwALerror(); @@ -222,12 +222,12 @@ bool OpenAL_SoundStream::isPlaying() { ALint queued; - alGetSourcei(Source, AL_BUFFERS_QUEUED, &queued); + alGetSourcei(mSource, AL_BUFFERS_QUEUED, &queued); throwALerror(); if(queued == 0) return false; - alSourcePlay(Source); + alSourcePlay(mSource); throwALerror(); } @@ -236,27 +236,27 @@ bool OpenAL_SoundStream::isPlaying() void OpenAL_SoundStream::Update(const float *pos) { - alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); - alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); - alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); throwALerror(); } OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) - : Source(src), Buffer(buf) + : mSource(src), mBuffer(buf) { } OpenAL_Sound::~OpenAL_Sound() { - alDeleteSources(1, &Source); - alDeleteBuffers(1, &Buffer); + alDeleteSources(1, &mSource); + alDeleteBuffers(1, &mBuffer); alGetError(); } void OpenAL_Sound::Stop() { - alSourceStop(Source); + alSourceStop(mSource); throwALerror(); } @@ -264,7 +264,7 @@ bool OpenAL_Sound::isPlaying() { ALint state; - alGetSourcei(Source, AL_SOURCE_STATE, &state); + alGetSourcei(mSource, AL_SOURCE_STATE, &state); throwALerror(); return state==AL_PLAYING; @@ -272,35 +272,35 @@ bool OpenAL_Sound::isPlaying() void OpenAL_Sound::Update(const float *pos) { - alSource3f(Source, AL_POSITION, pos[0], pos[2], -pos[1]); - alSource3f(Source, AL_DIRECTION, 0.0f, 0.0f, 0.0f); - alSource3f(Source, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); throwALerror(); } -bool OpenAL_Output::Initialize(const std::string &devname) +bool OpenAL_Output::init(const std::string &devname) { - if(Context) + if(mContext) fail("Device already initialized"); - Device = alcOpenDevice(devname.c_str()); - if(!Device) + mDevice = alcOpenDevice(devname.c_str()); + if(!mDevice) { std::cout << "Failed to open \""<Open(fname); ALuint src=0, buf=0; @@ -368,12 +368,12 @@ Sound* OpenAL_Output::PlaySound(const std::string &fname, float volume, float pi return sound.release(); } -Sound* OpenAL_Output::PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, +Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) { throwALerror(); - DecoderPtr decoder = mgr.getDecoder(); + DecoderPtr decoder = mManager.getDecoder(); decoder->Open(fname); ALuint src=0, buf=0; @@ -417,11 +417,11 @@ Sound* OpenAL_Output::PlaySound3D(const std::string &fname, const float *pos, fl } -Sound* OpenAL_Output::StreamSound(const std::string &fname, float volume, float pitch) +Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) { std::auto_ptr sound; - DecoderPtr decoder = mgr.getDecoder(); + DecoderPtr decoder = mManager.getDecoder(); decoder->Open(fname); sound.reset(new OpenAL_SoundStream(decoder)); @@ -431,7 +431,7 @@ Sound* OpenAL_Output::StreamSound(const std::string &fname, float volume, float } -void OpenAL_Output::UpdateListener(const float *pos, const float *atdir, const float *updir) +void OpenAL_Output::updateListener(const float *pos, const float *atdir, const float *updir) { float orient[6] = { atdir[0], atdir[2], -atdir[1], @@ -445,13 +445,13 @@ void OpenAL_Output::UpdateListener(const float *pos, const float *atdir, const f OpenAL_Output::OpenAL_Output(SoundManager &mgr) - : Sound_Output(mgr), Device(0), Context(0) + : Sound_Output(mgr), mDevice(0), mContext(0) { } OpenAL_Output::~OpenAL_Output() { - Deinitialize(); + deinit(); } } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 7d5bd25f6b..25c414c6db 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -16,19 +16,19 @@ namespace MWSound class OpenAL_Output : public Sound_Output { - ALCdevice *Device; - ALCcontext *Context; + ALCdevice *mDevice; + ALCcontext *mContext; - virtual bool Initialize(const std::string &devname=""); - virtual void Deinitialize(); + virtual bool init(const std::string &devname=""); + virtual void deinit(); - virtual Sound *PlaySound(const std::string &fname, float volume, float pitch, bool loop); - virtual Sound *PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, + virtual Sound *playSound(const std::string &fname, float volume, float pitch, bool loop); + virtual Sound *playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop); - virtual Sound *StreamSound(const std::string &fname, float volume, float pitch); + virtual Sound *streamSound(const std::string &fname, float volume, float pitch); - virtual void UpdateListener(const float *pos, const float *atdir, const float *updir); + virtual void updateListener(const float *pos, const float *atdir, const float *updir); OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 8dfc0f21ee..6497cc1bd9 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -14,19 +14,19 @@ namespace MWSound class Sound_Output { - SoundManager &mgr; + SoundManager &mManager; - virtual bool Initialize(const std::string &devname="") = 0; - virtual void Deinitialize() = 0; + virtual bool init(const std::string &devname="") = 0; + virtual void deinit() = 0; - virtual Sound *PlaySound(const std::string &fname, float volume, float pitch, bool loop) = 0; - virtual Sound *PlaySound3D(const std::string &fname, const float *pos, float volume, float pitch, + virtual Sound *playSound(const std::string &fname, float volume, float pitch, bool loop) = 0; + virtual Sound *playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) = 0; - virtual Sound *StreamSound(const std::string &fname, float volume, float pitch) = 0; + virtual Sound *streamSound(const std::string &fname, float volume, float pitch) = 0; - virtual void UpdateListener(const float *pos, const float *atdir, const float *updir) = 0; + virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; - Sound_Output(SoundManager &mgr) : mgr(mgr) { } + Sound_Output(SoundManager &mgr) : mManager(mgr) { } public: virtual ~Sound_Output() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index d78251ef15..c496701c7c 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -48,7 +48,7 @@ namespace MWSound std::cout << "Sound decoder: " << SOUND_IN << std::endl; mOutput.reset(new DEFAULT_OUTPUT(*this)); - if(!mOutput->Initialize()) + if(!mOutput->init()) { mOutput.reset(); return; @@ -130,7 +130,7 @@ namespace MWSound { Sound *sound; const ESM::Position &pos = ptr.getCellRef().pos; - sound = mOutput->PlaySound3D(file, pos.pos, volume, pitch, min, max, loop); + sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop); if(untracked) mLooseSounds[id] = SoundPtr(sound); else @@ -167,7 +167,7 @@ namespace MWSound { if(mMusic) mMusic->Stop(); - mMusic.reset(mOutput->StreamSound(filename, 0.4f, 1.0f)); + mMusic.reset(mOutput->streamSound(filename, 0.4f, 1.0f)); } void SoundManager::streamMusic(const std::string& filename) @@ -277,7 +277,7 @@ namespace MWSound try { Sound *sound; - sound = mOutput->PlaySound(file, volume, pitch, loop); + sound = mOutput->playSound(file, volume, pitch, loop); mLooseSounds[soundId] = SoundPtr(sound); } catch(std::exception &e) @@ -443,7 +443,7 @@ namespace MWSound float pos[3] = { nPos[0], -nPos[2], nPos[1] }; float at[3] = { nDir[0], -nDir[2], nDir[1] }; float up[3] = { nUp[0], -nUp[2], nUp[1] }; - mOutput->UpdateListener(pos, at, up); + mOutput->updateListener(pos, at, up); // Check if any "untracked" sounds are finished playing, and trash // them From 9656456d30adb6a30a0de6637ca4e0f6579ce6af Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 11:34:23 -0700 Subject: [PATCH 085/488] Make sure the sound decoders are closed when they're finished with --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 1 + apps/openmw/mwsound/mpgsnd_decoder.cpp | 1 + apps/openmw/mwsound/openal_output.cpp | 2 ++ 3 files changed, 4 insertions(+) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 5c64e4dd10..41e25e5b6d 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -36,6 +36,7 @@ FFmpeg_Decoder::FFmpeg_Decoder() FFmpeg_Decoder::~FFmpeg_Decoder() { + Close(); } } diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 9b51319dd8..dbe1d0a507 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -118,6 +118,7 @@ MpgSnd_Decoder::MpgSnd_Decoder() : sndFile(NULL), mpgFile(NULL) MpgSnd_Decoder::~MpgSnd_Decoder() { + Close(); } } diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ad21aefbe6..f28b09c077 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -332,6 +332,7 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi try { buf = LoadBuffer(decoder); + decoder->Close(); alGenSources(1, &src); throwALerror(); } @@ -380,6 +381,7 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl try { buf = LoadBuffer(decoder); + decoder->Close(); alGenSources(1, &src); throwALerror(); } From efae7dfe8385a9a4455a3b730a5da2c0e6599de3 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 11:47:15 -0700 Subject: [PATCH 086/488] Rename some sound decoder class member variables and functions --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 10 ++-- apps/openmw/mwsound/ffmpeg_decoder.hpp | 8 +-- apps/openmw/mwsound/mpgsnd_decoder.cpp | 79 +++++++++++++------------- apps/openmw/mwsound/mpgsnd_decoder.hpp | 16 +++--- apps/openmw/mwsound/openal_output.cpp | 22 +++---- apps/openmw/mwsound/sound_decoder.hpp | 8 +-- 6 files changed, 72 insertions(+), 71 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 41e25e5b6d..2b84439c04 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -9,21 +9,21 @@ namespace MWSound static void fail(const std::string &msg) { throw std::runtime_error("FFmpeg exception: "+msg); } -void FFmpeg_Decoder::Open(const std::string &fname) +void FFmpeg_Decoder::open(const std::string &fname) { fail("Not currently working"); } -void FFmpeg_Decoder::Close() +void FFmpeg_Decoder::close() { } -void FFmpeg_Decoder::GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) +void FFmpeg_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) { fail("Not currently working"); } -size_t FFmpeg_Decoder::Read(char *buffer, size_t bytes) +size_t FFmpeg_Decoder::read(char *buffer, size_t bytes) { fail("Not currently working"); return 0; @@ -36,7 +36,7 @@ FFmpeg_Decoder::FFmpeg_Decoder() FFmpeg_Decoder::~FFmpeg_Decoder() { - Close(); + close(); } } diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index 205fe8865b..676a576da3 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -16,11 +16,11 @@ namespace MWSound { class FFmpeg_Decoder : public Sound_Decoder { - virtual void Open(const std::string &fname); - virtual void Close(); + virtual void open(const std::string &fname); + virtual void close(); - virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); - virtual size_t Read(char *buffer, size_t bytes); + virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t read(char *buffer, size_t bytes); FFmpeg_Decoder(); virtual ~FFmpeg_Decoder(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index dbe1d0a507..6be6566f0f 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -12,103 +12,104 @@ static void fail(const std::string &msg) namespace MWSound { -void MpgSnd_Decoder::Open(const std::string &fname) +void MpgSnd_Decoder::open(const std::string &fname) { - Close(); + close(); SF_INFO info; - sndFile = sf_open(fname.c_str(), SFM_READ, &info); - if(sndFile) + mSndFile = sf_open(fname.c_str(), SFM_READ, &info); + if(mSndFile) { if(info.channels == 1) - chanConfig = MonoChannels; + mChanConfig = MonoChannels; else if(info.channels == 2) - chanConfig = StereoChannels; + mChanConfig = StereoChannels; else { - sf_close(sndFile); - sndFile = NULL; + sf_close(mSndFile); + mSndFile = NULL; fail("Unsupported channel count in "+fname); } - sampleRate = info.samplerate; + mSampleRate = info.samplerate; return; } - mpgFile = mpg123_new(NULL, NULL); - if(mpgFile && mpg123_open(mpgFile, fname.c_str()) == MPG123_OK) + mMpgFile = mpg123_new(NULL, NULL); + if(mMpgFile && mpg123_open(mMpgFile, fname.c_str()) == MPG123_OK) { try { int encoding, channels; long rate; - if(mpg123_getformat(mpgFile, &rate, &channels, &encoding) != MPG123_OK) + if(mpg123_getformat(mMpgFile, &rate, &channels, &encoding) != MPG123_OK) fail("Failed to get audio format"); if(encoding != MPG123_ENC_SIGNED_16) fail("Unsupported encoding in "+fname); if(channels != 1 && channels != 2) fail("Unsupported channel count in "+fname); - chanConfig = ((channels==2)?StereoChannels:MonoChannels); - sampleRate = rate; + mChanConfig = ((channels==2)?StereoChannels:MonoChannels); + mSampleRate = rate; return; } catch(std::exception &e) { - mpg123_close(mpgFile); - mpg123_delete(mpgFile); + mpg123_close(mMpgFile); + mpg123_delete(mMpgFile); + mMpgFile = NULL; throw; } - mpg123_close(mpgFile); + mpg123_close(mMpgFile); } - if(mpgFile) - mpg123_delete(mpgFile); - mpgFile = NULL; + if(mMpgFile) + mpg123_delete(mMpgFile); + mMpgFile = NULL; fail("Unsupported file type: "+fname); } -void MpgSnd_Decoder::Close() +void MpgSnd_Decoder::close() { - if(sndFile) - sf_close(sndFile); - sndFile = NULL; + if(mSndFile) + sf_close(mSndFile); + mSndFile = NULL; - if(mpgFile) + if(mMpgFile) { - mpg123_close(mpgFile); - mpg123_delete(mpgFile); - mpgFile = NULL; + mpg123_close(mMpgFile); + mpg123_delete(mMpgFile); + mMpgFile = NULL; } } -void MpgSnd_Decoder::GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) +void MpgSnd_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) { - if(!sndFile && !mpgFile) + if(!mSndFile && !mMpgFile) fail("No open file"); - *samplerate = sampleRate; - *chans = chanConfig; + *samplerate = mSampleRate; + *chans = mChanConfig; *type = Int16Sample; } -size_t MpgSnd_Decoder::Read(char *buffer, size_t bytes) +size_t MpgSnd_Decoder::read(char *buffer, size_t bytes) { size_t got = 0; - if(sndFile) + if(mSndFile) { - got = sf_read_short(sndFile, (short*)buffer, bytes/2)*2; + got = sf_read_short(mSndFile, (short*)buffer, bytes/2)*2; } - else if(mpgFile) + else if(mMpgFile) { int err; - err = mpg123_read(mpgFile, (unsigned char*)buffer, bytes, &got); + err = mpg123_read(mMpgFile, (unsigned char*)buffer, bytes, &got); if(err != MPG123_OK && err != MPG123_DONE) fail("Failed to read from file"); } return got; } -MpgSnd_Decoder::MpgSnd_Decoder() : sndFile(NULL), mpgFile(NULL) +MpgSnd_Decoder::MpgSnd_Decoder() : mSndFile(NULL), mMpgFile(NULL) { static bool initdone = false; if(!initdone) @@ -118,7 +119,7 @@ MpgSnd_Decoder::MpgSnd_Decoder() : sndFile(NULL), mpgFile(NULL) MpgSnd_Decoder::~MpgSnd_Decoder() { - Close(); + close(); } } diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index cd7e468da5..4d3c7f4aba 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -13,17 +13,17 @@ namespace MWSound { class MpgSnd_Decoder : public Sound_Decoder { - SNDFILE *sndFile; - mpg123_handle *mpgFile; + SNDFILE *mSndFile; + mpg123_handle *mMpgFile; - ChannelConfig chanConfig; - int sampleRate; + ChannelConfig mChanConfig; + int mSampleRate; - virtual void Open(const std::string &fname); - virtual void Close(); + virtual void open(const std::string &fname); + virtual void close(); - virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type); - virtual size_t Read(char *buffer, size_t bytes); + virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t read(char *buffer, size_t bytes); MpgSnd_Decoder(); public: diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index f28b09c077..af8569ad78 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -55,12 +55,12 @@ ALuint LoadBuffer(DecoderPtr decoder) Sound_Decoder::SampleType type; ALenum format; - decoder->GetInfo(&srate, &chans, &type); + decoder->getInfo(&srate, &chans, &type); format = getALFormat(chans, type); std::vector data(32768); size_t got, total = 0; - while((got=decoder->Read(&data[total], data.size()-total)) > 0) + while((got=decoder->read(&data[total], data.size()-total)) > 0) { total += got; data.resize(total*2); @@ -139,7 +139,7 @@ OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) Sound_Decoder::ChannelConfig chans; Sound_Decoder::SampleType type; - mDecoder->GetInfo(&srate, &chans, &type); + mDecoder->getInfo(&srate, &chans, &type); mFormat = getALFormat(chans, type); mSampleRate = srate; } @@ -156,7 +156,7 @@ OpenAL_SoundStream::~OpenAL_SoundStream() alDeleteSources(1, &mSource); alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); - mDecoder->Close(); + mDecoder->close(); } void OpenAL_SoundStream::Play(float volume, float pitch) @@ -172,7 +172,7 @@ void OpenAL_SoundStream::Play(float volume, float pitch) for(ALuint i = 0;i < sNumBuffers;i++) { size_t got; - got = mDecoder->Read(&data[0], data.size()); + got = mDecoder->read(&data[0], data.size()); alBufferData(mBuffers[i], mFormat, &data[0], got, mSampleRate); } throwALerror(); @@ -208,7 +208,7 @@ bool OpenAL_SoundStream::isPlaying() alSourceUnqueueBuffers(mSource, 1, &bufid); processed--; - got = mDecoder->Read(&data[0], data.size()); + got = mDecoder->read(&data[0], data.size()); if(got > 0) { alBufferData(bufid, mFormat, &data[0], got, mSampleRate); @@ -326,13 +326,13 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi throwALerror(); DecoderPtr decoder = mManager.getDecoder(); - decoder->Open(fname); + decoder->open(fname); ALuint src=0, buf=0; try { buf = LoadBuffer(decoder); - decoder->Close(); + decoder->close(); alGenSources(1, &src); throwALerror(); } @@ -375,13 +375,13 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl throwALerror(); DecoderPtr decoder = mManager.getDecoder(); - decoder->Open(fname); + decoder->open(fname); ALuint src=0, buf=0; try { buf = LoadBuffer(decoder); - decoder->Close(); + decoder->close(); alGenSources(1, &src); throwALerror(); } @@ -424,7 +424,7 @@ Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float std::auto_ptr sound; DecoderPtr decoder = mManager.getDecoder(); - decoder->Open(fname); + decoder->open(fname); sound.reset(new OpenAL_SoundStream(decoder)); sound->Play(volume, pitch); diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 4f778c3b31..551cd24112 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -14,11 +14,11 @@ namespace MWSound MonoChannels, StereoChannels }; - virtual void Open(const std::string &fname) = 0; - virtual void Close() = 0; + virtual void open(const std::string &fname) = 0; + virtual void close() = 0; - virtual void GetInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; - virtual size_t Read(char *buffer, size_t bytes) = 0; + virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; + virtual size_t read(char *buffer, size_t bytes) = 0; virtual ~Sound_Decoder() { } From 403e51cef377b1dbc9725c7f9f7efc819babc1f5 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 11:56:54 -0700 Subject: [PATCH 087/488] Move the sample type and channel config enums to MWSound and give use appropriate names for the values --- apps/openmw/mwsound/mpgsnd_decoder.cpp | 8 ++++---- apps/openmw/mwsound/openal_output.cpp | 22 +++++++++++----------- apps/openmw/mwsound/sound_decoder.hpp | 19 +++++++++++-------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 6be6566f0f..e112d30b1d 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -21,9 +21,9 @@ void MpgSnd_Decoder::open(const std::string &fname) if(mSndFile) { if(info.channels == 1) - mChanConfig = MonoChannels; + mChanConfig = ChannelConfig_Mono; else if(info.channels == 2) - mChanConfig = StereoChannels; + mChanConfig = ChannelConfig_Stereo; else { sf_close(mSndFile); @@ -47,7 +47,7 @@ void MpgSnd_Decoder::open(const std::string &fname) fail("Unsupported encoding in "+fname); if(channels != 1 && channels != 2) fail("Unsupported channel count in "+fname); - mChanConfig = ((channels==2)?StereoChannels:MonoChannels); + mChanConfig = ((channels==2)?ChannelConfig_Stereo:ChannelConfig_Mono); mSampleRate = rate; return; } @@ -88,7 +88,7 @@ void MpgSnd_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType * *samplerate = mSampleRate; *chans = mChanConfig; - *type = Int16Sample; + *type = SampleType_Int16; } size_t MpgSnd_Decoder::read(char *buffer, size_t bytes) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index af8569ad78..cda6c89dd3 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -22,22 +22,22 @@ static void throwALerror() } -static ALenum getALFormat(Sound_Decoder::ChannelConfig chans, Sound_Decoder::SampleType type) +static ALenum getALFormat(ChannelConfig chans, SampleType type) { - if(chans == Sound_Decoder::MonoChannels) + if(chans == ChannelConfig_Mono) { - if(type == Sound_Decoder::Int16Sample) + if(type == SampleType_Int16) return AL_FORMAT_MONO16; - else if(type == Sound_Decoder::UInt8Sample) + else if(type == SampleType_UInt8) return AL_FORMAT_MONO8; else fail("Unsupported sample type"); } - else if(chans == Sound_Decoder::StereoChannels) + else if(chans == ChannelConfig_Stereo) { - if(type == Sound_Decoder::Int16Sample) + if(type == SampleType_Int16) return AL_FORMAT_STEREO16; - else if(type == Sound_Decoder::UInt8Sample) + else if(type == SampleType_UInt8) return AL_FORMAT_STEREO8; else fail("Unsupported sample type"); @@ -51,8 +51,8 @@ static ALenum getALFormat(Sound_Decoder::ChannelConfig chans, Sound_Decoder::Sam ALuint LoadBuffer(DecoderPtr decoder) { int srate; - Sound_Decoder::ChannelConfig chans; - Sound_Decoder::SampleType type; + ChannelConfig chans; + SampleType type; ALenum format; decoder->getInfo(&srate, &chans, &type); @@ -136,8 +136,8 @@ OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) try { int srate; - Sound_Decoder::ChannelConfig chans; - Sound_Decoder::SampleType type; + ChannelConfig chans; + SampleType type; mDecoder->getInfo(&srate, &chans, &type); mFormat = getALFormat(chans, type); diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 551cd24112..e25321a906 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -1,19 +1,22 @@ #ifndef GAME_SOUND_SOUND_DECODER_H #define GAME_SOUND_SOUND_DECODER_H +#include + namespace MWSound { + enum SampleType { + SampleType_UInt8, + SampleType_Int16 + }; + enum ChannelConfig { + ChannelConfig_Mono, + ChannelConfig_Stereo + }; + class Sound_Decoder { public: - enum SampleType { - UInt8Sample, - Int16Sample - }; - enum ChannelConfig { - MonoChannels, - StereoChannels - }; virtual void open(const std::string &fname) = 0; virtual void close() = 0; From 1965b5bc796353326746129c0f8fc1a6802192d8 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 12:03:15 -0700 Subject: [PATCH 088/488] Rename some Sound class member functions --- apps/openmw/mwsound/openal_output.cpp | 22 +++++++++++----------- apps/openmw/mwsound/sound.hpp | 8 ++------ apps/openmw/mwsound/soundmanager.cpp | 6 +++--- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index cda6c89dd3..4aa76cc637 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -93,10 +93,10 @@ public: OpenAL_SoundStream(DecoderPtr decoder); virtual ~OpenAL_SoundStream(); - void Play(float volume, float pitch); - virtual void Stop(); + void play(float volume, float pitch); + virtual void stop(); virtual bool isPlaying(); - virtual void Update(const float *pos); + virtual void update(const float *pos); }; class OpenAL_Sound : public Sound @@ -108,9 +108,9 @@ public: OpenAL_Sound(ALuint src, ALuint buf); virtual ~OpenAL_Sound(); - virtual void Stop(); + virtual void stop(); virtual bool isPlaying(); - virtual void Update(const float *pos); + virtual void update(const float *pos); }; @@ -159,7 +159,7 @@ OpenAL_SoundStream::~OpenAL_SoundStream() mDecoder->close(); } -void OpenAL_SoundStream::Play(float volume, float pitch) +void OpenAL_SoundStream::play(float volume, float pitch) { std::vector data(sBufferSize); @@ -182,7 +182,7 @@ void OpenAL_SoundStream::Play(float volume, float pitch) throwALerror(); } -void OpenAL_SoundStream::Stop() +void OpenAL_SoundStream::stop() { alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); @@ -234,7 +234,7 @@ bool OpenAL_SoundStream::isPlaying() return true; } -void OpenAL_SoundStream::Update(const float *pos) +void OpenAL_SoundStream::update(const float *pos) { alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); @@ -254,7 +254,7 @@ OpenAL_Sound::~OpenAL_Sound() alGetError(); } -void OpenAL_Sound::Stop() +void OpenAL_Sound::stop() { alSourceStop(mSource); throwALerror(); @@ -270,7 +270,7 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } -void OpenAL_Sound::Update(const float *pos) +void OpenAL_Sound::update(const float *pos) { alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); @@ -427,7 +427,7 @@ Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float decoder->open(fname); sound.reset(new OpenAL_SoundStream(decoder)); - sound->Play(volume, pitch); + sound->play(volume, pitch); return sound.release(); } diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 3b4736fd6c..84725464be 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -1,17 +1,13 @@ #ifndef GAME_SOUND_SOUND_H #define GAME_SOUND_SOUND_H -#include - -#include "../mwworld/ptr.hpp" - namespace MWSound { class Sound { - virtual void Stop() = 0; + virtual void stop() = 0; virtual bool isPlaying() = 0; - virtual void Update(const float *pos) = 0; + virtual void update(const float *pos) = 0; public: virtual ~Sound() { } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index c496701c7c..5d9a37065f 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -159,14 +159,14 @@ namespace MWSound void SoundManager::stopMusic() { if(mMusic) - mMusic->Stop(); + mMusic->stop(); setPlaylist(); } void SoundManager::streamMusicFull(const std::string& filename) { if(mMusic) - mMusic->Stop(); + mMusic->stop(); mMusic.reset(mOutput->streamSound(filename, 0.4f, 1.0f)); } @@ -358,7 +358,7 @@ namespace MWSound while(iditer != snditer->second.end()) { const ESM::Position &pos = ptr.getCellRef().pos; - iditer->second->Update(pos.pos); + iditer->second->update(pos.pos); iditer++; } } From b938fd7b368470ee780378ff37414a16d79ae038 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 18 Mar 2012 12:19:54 -0700 Subject: [PATCH 089/488] Make the sound output init return void --- apps/openmw/mwsound/openal_output.cpp | 24 ++++++------------------ apps/openmw/mwsound/openal_output.hpp | 2 +- apps/openmw/mwsound/sound_output.hpp | 2 +- apps/openmw/mwsound/soundmanager.cpp | 9 +++++++-- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 4aa76cc637..b1359d5f4e 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -279,34 +279,22 @@ void OpenAL_Sound::update(const float *pos) } -bool OpenAL_Output::init(const std::string &devname) +void OpenAL_Output::init(const std::string &devname) { - if(mContext) - fail("Device already initialized"); + if(mDevice || mContext) + fail("Device already open"); mDevice = alcOpenDevice(devname.c_str()); if(!mDevice) - { - std::cout << "Failed to open \""<init()) + try { + mOutput.reset(new DEFAULT_OUTPUT(*this)); + mOutput->init(); + } + catch(std::exception &e) + { + std::cout <<"Sound init failed: "< Date: Sun, 18 Mar 2012 14:27:22 -0700 Subject: [PATCH 090/488] Use a background thread to keep OpenAL streams fed Maybe this could be moved to the SoundManager instead of in OpenAL, but it's good enough for now. --- apps/openmw/mwsound/openal_output.cpp | 93 +++++++++++++++++++++++---- apps/openmw/mwsound/openal_output.hpp | 4 ++ 2 files changed, 83 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index b1359d5f4e..9d0cd7d566 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -76,9 +77,7 @@ ALuint LoadBuffer(DecoderPtr decoder) class OpenAL_SoundStream : public Sound { - // This should be something sane, like 4, but currently cell loads tend to - // cause the stream to underrun - static const ALuint sNumBuffers = 150; + static const ALuint sNumBuffers = 4; static const ALuint sBufferSize = 32768; ALuint mSource; @@ -89,14 +88,18 @@ class OpenAL_SoundStream : public Sound DecoderPtr mDecoder; + volatile bool mIsFinished; + public: OpenAL_SoundStream(DecoderPtr decoder); virtual ~OpenAL_SoundStream(); - void play(float volume, float pitch); virtual void stop(); virtual bool isPlaying(); virtual void update(const float *pos); + + void play(float volume, float pitch); + bool process(); }; class OpenAL_Sound : public Sound @@ -114,8 +117,52 @@ public: }; +struct StreamThread { + typedef std::vector StreamVec; + static StreamVec sStreams; + static boost::mutex sMutex; + + void operator()() + { + while(1) + { + sMutex.lock(); + StreamVec::iterator iter = sStreams.begin(); + while(iter != sStreams.end()) + { + if((*iter)->process() == false) + iter = sStreams.erase(iter); + else + iter++; + } + sMutex.unlock(); + boost::this_thread::sleep(boost::posix_time::milliseconds(20)); + } + } + + static void add(OpenAL_SoundStream *stream) + { + sMutex.lock(); + if(std::find(sStreams.begin(), sStreams.end(), stream) == sStreams.end()) + sStreams.push_back(stream); + sMutex.unlock(); + } + + static void remove(OpenAL_SoundStream *stream) + { + sMutex.lock(); + StreamVec::iterator iter = std::find(sStreams.begin(), sStreams.end(), stream); + if(iter != sStreams.end()) + sStreams.erase(iter); + sMutex.unlock(); + } +}; +StreamThread::StreamVec StreamThread::sStreams; +boost::mutex StreamThread::sMutex; + + OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) - : mDecoder(decoder) + : mDecoder(decoder), mIsFinished(true) { throwALerror(); @@ -153,9 +200,12 @@ OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) } OpenAL_SoundStream::~OpenAL_SoundStream() { + StreamThread::remove(this); + alDeleteSources(1, &mSource); alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); + mDecoder->close(); } @@ -180,17 +230,36 @@ void OpenAL_SoundStream::play(float volume, float pitch) alSourceQueueBuffers(mSource, sNumBuffers, mBuffers); alSourcePlay(mSource); throwALerror(); + + StreamThread::add(this); + mIsFinished = false; } void OpenAL_SoundStream::stop() { + StreamThread::remove(this); + alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); throwALerror(); // FIXME: Rewind decoder + mIsFinished = true; } bool OpenAL_SoundStream::isPlaying() +{ + return !mIsFinished; +} + +void OpenAL_SoundStream::update(const float *pos) +{ + alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + throwALerror(); +} + +bool OpenAL_SoundStream::process() { ALint processed, state; @@ -225,7 +294,10 @@ bool OpenAL_SoundStream::isPlaying() alGetSourcei(mSource, AL_BUFFERS_QUEUED, &queued); throwALerror(); if(queued == 0) + { + mIsFinished = true; return false; + } alSourcePlay(mSource); throwALerror(); @@ -234,14 +306,6 @@ bool OpenAL_SoundStream::isPlaying() return true; } -void OpenAL_SoundStream::update(const float *pos) -{ - alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); - alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); - alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); - throwALerror(); -} - OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) : mSource(src), mBuffer(buf) @@ -435,12 +499,13 @@ void OpenAL_Output::updateListener(const float *pos, const float *atdir, const f OpenAL_Output::OpenAL_Output(SoundManager &mgr) - : Sound_Output(mgr), mDevice(0), mContext(0) + : Sound_Output(mgr), mDevice(0), mContext(0), mStreamThread(StreamThread()) { } OpenAL_Output::~OpenAL_Output() { + mStreamThread.interrupt(); deinit(); } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 54c3268d71..9a6d7f9d2a 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -3,6 +3,8 @@ #include +#include + #include "alc.h" #include "al.h" @@ -19,6 +21,8 @@ namespace MWSound ALCdevice *mDevice; ALCcontext *mContext; + boost::thread mStreamThread; + virtual void init(const std::string &devname=""); virtual void deinit(); From fe9e6a732c73cd1cc471319c590bbe37c2f10c43 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sun, 18 Mar 2012 22:32:46 -0400 Subject: [PATCH 091/488] Some cleanup --- apps/openmw/mwrender/water.cpp | 37 +----- apps/openmw/mwrender/water.hpp | 10 +- files/CMakeLists.txt | 3 +- files/water/Water01.jpg | Bin 295326 -> 0 bytes files/water/water.material | 217 --------------------------------- files/water/water1.cg | 39 ------ 6 files changed, 6 insertions(+), 300 deletions(-) delete mode 100644 files/water/Water01.jpg delete mode 100644 files/water/water.material delete mode 100644 files/water/water1.cg diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 06ab53734c..3075041577 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -40,14 +40,12 @@ namespace MWRender { Water::~Water() { Ogre::MeshManager::getSingleton().remove("water"); - //mCamera->removeListener(this); mWaterNode->detachObject(mWater); mSceneManager->destroyEntity(mWater); mSceneManager->destroySceneNode(mWaterNode); - //Ogre::TextureManager::getSingleton().remove("refraction"); - //Ogre::TextureManager::getSingleton().remove("reflection"); + Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); } @@ -63,23 +61,6 @@ namespace MWRender { } - void Water::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) { - mWater->setVisible(false); - - if (evt.source == mReflectionTarget) { - mCamera->enableReflection(mWaterPlane); - } else { - } - } - - void Water::postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) { - mWater->setVisible(true); - - if (evt.source == mReflectionTarget) { - mCamera->disableReflection(); - } else { - } - } void Water::checkUnderwater(float y) { @@ -101,21 +82,7 @@ namespace MWRender { } - void Water::cameraPreRenderScene(Ogre::Camera *cam) { - Ogre::Vector3 pos = cam->getPosition(); - - if (pos != mOldCameraPos) { - mWaterNode->setPosition(pos.x, 0, pos.z); - - mOldCameraPos = pos; - } - } - - void Water::cameraPostRenderScene(Ogre::Camera *cam) { - } - - void Water::cameraDestroyed(Ogre::Camera *cam) { - } + Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index bdc9895fd6..48b0af9847 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -13,8 +13,7 @@ namespace MWRender { Ogre::SceneManager *mSceneManager; Ogre::Viewport *mViewport; - Ogre::RenderTarget *mRefractionTarget; - Ogre::RenderTarget *mReflectionTarget; + Ogre::Plane mWaterPlane; Ogre::SceneNode *mWaterNode; @@ -26,12 +25,7 @@ namespace MWRender { - void preRenderTargetUpdate(const Ogre::RenderTargetEvent&); - void postRenderTargetUpdate(const Ogre::RenderTargetEvent&); - - void cameraPreRenderScene(Ogre::Camera *cam); - void cameraPostRenderScene(Ogre::Camera *cam); - void cameraDestroyed(Ogre::Camera *cam); + Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); public: diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 720044df8d..203b406810 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -8,5 +8,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassVP.cg "${OpenMW_BINARY_DIR configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINARY_DIR}/resources/water/perlinvolume.dds" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Water02.jpg "${OpenMW_BINARY_DIR}/resources/water/Water02.jpg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/waves2.dds "${OpenMW_BINARY_DIR}/resources/water/waves2.dds" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Examples-Water.material "${OpenMW_BINARY_DIR}/resources/water/Examples-Water.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal1.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal1.tga" COPYONLY) diff --git a/files/water/Water01.jpg b/files/water/Water01.jpg deleted file mode 100644 index f9c9b7feec540c35e7a1972cb78c5661912da77d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295326 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
`a>RgL%!BnG?f)Wpv-@KTSGDlR)gOgC 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 WNj=oLu-pr?uYdqM{g?ay=Kl|rkHWS9 diff --git a/files/water/water.material b/files/water/water.material deleted file mode 100644 index 9929feabc3..0000000000 --- a/files/water/water.material +++ /dev/null @@ -1,217 +0,0 @@ -// Derived from ogre samples - - -vertex_program Water/GlassVP cg -{ - source GlassVP.cg - entry_point glass_vp - profiles vs_1_1 arbvp1 - - default_params - { - param_named_auto worldViewProj worldviewproj_matrix - } -} - - -fragment_program Water/GlassFP cg -{ - source GlassFP.cg - entry_point main_ps - profiles ps_2_0 arbfp1 -} - -material Water/Compositor -{ - technique - { - pass - { - depth_check off - - vertex_program_ref Water/GlassVP - { - param_named_auto timeVal time 0.25 - param_named scale float 0.1 - } - - fragment_program_ref Water/GlassFP - { - param_named tintColour float4 0 0.35 0.35 1 - } - - texture_unit RT - { - tex_coord_set 0 - tex_address_mode clamp - filtering linear linear linear - } - - texture_unit - { - texture WaterNormal1.tga 2d - tex_coord_set 1 - //tex_address_mode clamp - filtering linear linear linear - } - texture_unit - { - texture caustic_0.png 2d - tex_coord_set 2 - //tex_address_mode clamp - filtering linear linear linear - } - } - } -} - - - - - - - -vertex_program Water/RefractReflectVP cg -{ - source Example_Fresnel.cg - entry_point main_vp - profiles vs_1_1 arbvp1 -} -vertex_program Water/RefractReflectVPold cg -{ - source Example_Fresnel.cg - entry_point main_vp_old - profiles vs_1_1 arbvp1 -} - -fragment_program Water/RefractReflectFP cg -{ - source Example_Fresnel.cg - entry_point main_fp - // sorry, ps_1_1 and fp20 can't do this - profiles ps_2_0 arbfp1 -} - -fragment_program Water/RefractReflectPS asm -{ - source Example_FresnelPS.asm - // sorry, only for ps_1_4 :) - syntax ps_1_4 - -} - - -material Water/ReflectionRefraction -{ - // ps_2_0 / arbfp1 - technique - { - pass - { - - vertex_program_ref Water/RefractReflectVP - { - param_named_auto worldViewProjMatrix worldviewproj_matrix - param_named_auto eyePosition camera_position_object_space - param_named_auto timeVal time 0.15 - param_named scroll float 1 - param_named scale float 1 - param_named noise float 1 - // scroll and noisePos will need updating per frame - } - fragment_program_ref Water/RefractReflectFP - { - param_named fresnelBias float -0.1 - param_named fresnelScale float 0.8 - param_named fresnelPower float 20 - param_named tintColour float4 0 0.15 0.15 1 - param_named noiseScale float 0.05 - } - // Water - texture_unit - { - // Water texture - texture Water02.jpg - // min / mag filtering, no mip - filtering linear linear none - } - // Noise - texture_unit - { - // Perlin noise volume - texture waves2.dds - // min / mag filtering, no mip - filtering linear linear none - } - // Reflection - texture_unit - { - // Will be filled in at runtime - texture reflection - tex_address_mode clamp - } - // Refraction - texture_unit - { - // Will be filled in at runtime - texture refraction - tex_address_mode clamp - } - } - - - } - - // ATI 8500 + - technique - { - pass - { - vertex_program_ref Water/RefractReflectVPold - { - param_named_auto worldViewProjMatrix worldviewproj_matrix - param_named_auto eyePosition camera_position_object_space - param_named fresnelBias float -0.3 - param_named fresnelScale float 1.4 - param_named fresnelPower float 8 - param_named_auto timeVal time_0_1 20 - param_named scroll float 1 - param_named scale float 4 - param_named noise float 1 - // scroll and noisePos will need updating per frame - } - - // for ATI RADEON 8500 - 9200 - fragment_program_ref Water/RefractReflectPS - { - // distortionRange - param_indexed 0 float 0.025 - // tintColour - param_indexed 1 float4 0.05 0.12 0.15 1 - } - - // Noise - texture_unit - { - // Perlin noise volume - texture perlinvolume.dds 3d - // min / mag filtering, no mip - filtering linear linear none - } - // Reflection - texture_unit - { - // Will be filled in at runtime - texture Reflection - tex_address_mode clamp - } - // Refraction - texture_unit - { - // Will be filled in at runtime - texture Refraction - tex_address_mode clamp - } - } - } -} diff --git a/files/water/water1.cg b/files/water/water1.cg deleted file mode 100644 index f8fa18c1a6..0000000000 --- a/files/water/water1.cg +++ /dev/null @@ -1,39 +0,0 @@ -void main( in float4 fresnel : COLOR0, - in float4 inTex0 : TEXCOORD0, - in float4 inTex1 : TEXCOORD1, - in float4 inTex2 : TEXCOORD2, - in float4 inTex3 : TEXCOORD3, - in float4 inTex4 : COLOR1, - in float4 inTex5 : BCOL1, - out float4 outCol : COLOR, - uniform float4 matrix, - uniform sampler2D offsetTexture : texunit0, - uniform sampler2D reflexTexture : texunit1, - uniform sampler2D refractTexture : texunit2, - uniform sampler2D depthTexture : texunit3) -{ - float4 norm = tex2D(offsetTexture, inTex0.xy); - float4 refr = tex2D(depthTexture, inTex3.xy); - - float4 norm2 = tex2D(offsetTexture, inTex0.xy/10.0f); - - float4 projCoord = inTex1 / inTex1.w; - projCoord = (projCoord + 1.0) * 0.5; - projCoord += norm * 0.02; - projCoord = clamp(projCoord, 0.001, 0.999); - - float4 reflexe = tex2D(reflexTexture, projCoord.xy); - float4 refrakce = tex2D(refractTexture, projCoord.xy); - - float4 odrazy = reflexe*(0.7+0.3*refr); - - reflexe = (float4(0,0.4,0.4,1.0) + reflexe*0.5); - - outCol = lerp(refrakce, reflexe, fresnel.r)-refr*0.08; - -//outCol = lerp(refrakce, reflexe, fresnel.r); - -// outCol = norm; - - outCol.a = 1; -} \ No newline at end of file From f2093a51db22d17368ad85230d6a075d87bbea7d Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Sun, 18 Mar 2012 22:38:07 -0400 Subject: [PATCH 092/488] more cleanup --- files/water/Examples-Water.material | 169 ---------------------------- 1 file changed, 169 deletions(-) diff --git a/files/water/Examples-Water.material b/files/water/Examples-Water.material index c09447aa14..2b46d6e08d 100644 --- a/files/water/Examples-Water.material +++ b/files/water/Examples-Water.material @@ -1,10 +1,4 @@ -vertex_program Water/Test cg -{ - source water1.cg - entry_point main - profiles vs_1_1 arbvp1 -} vertex_program Water/GlassVP cg { source GlassVP.cg @@ -152,167 +146,4 @@ material Examples/Water0 } } -material Examples/Water1 -{ - technique - { - pass - { - scene_blend colour_blend - depth_write off - texture_unit - { - texture BeachStones.jpg - scale 0.25 0.25 - } - - texture_unit - { - texture Water01.jpg - env_map spherical - scroll_anim 0.01 0.01 - } - } - } -} -material Examples/Water2 -{ - technique - { - pass - { - scene_blend colour_blend - depth_write off - - texture_unit - { - texture Water01.jpg - scroll_anim 0.01 0.01 - } - } - } -} -material Examples/Water3 -{ - technique - { - pass - { - scene_blend colour_blend - depth_write off - - texture_unit - { - texture Water02.jpg - env_map spherical - scroll_anim 0.01 0.01 - rotate_anim 0.03 - } - } - } -} -material Examples/Water4 -{ - technique - { - pass - { - cull_hardware none - cull_software none - - texture_unit - { - texture Water02.jpg - env_map spherical - scroll_anim 0.01 0.01 - } - } - } -} -material Examples/Water5 -{ - technique - { - pass - { - cull_hardware none - cull_software none - - texture_unit - { - texture BeachStones.jpg - scale 0.25 0.25 - } - - texture_unit - { - texture Water01.jpg - env_map spherical - scroll_anim 0.01 0.01 - } - } - } -} -material Examples/Water6 -{ - technique - { - pass - { - lighting off - - texture_unit - { - cubic_texture cubescene.jpg combinedUVW - tex_address_mode clamp - env_map cubic_reflection - } - } - } -} -material Examples/Water7 -{ - technique - { - pass - { - cull_hardware none - cull_software none - - texture_unit - { - texture BeachStones.jpg - scale 0.25 0.25 - } - - texture_unit - { - cubic_texture cubescene.jpg combinedUVW - tex_address_mode clamp - env_map cubic_reflection - } - } - } -} -material Examples/Water8 -{ - technique - { - pass - { - lighting off - scene_blend add - depth_write off - cull_hardware none - cull_software none - - texture_unit - { - cubic_texture cubescene.jpg combinedUVW - tex_address_mode clamp - env_map cubic_reflection - } - } - } -} From 6a256d399392131293a1ce413b295ddcaca4f31d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 00:38:56 -0700 Subject: [PATCH 093/488] Make sure the OpenAL stream list is clear before shutting down --- apps/openmw/mwsound/openal_output.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 9d0cd7d566..556c1bb644 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -156,6 +156,13 @@ struct StreamThread { sStreams.erase(iter); sMutex.unlock(); } + + static void removeAll() + { + sMutex.lock(); + sStreams.clear(); + sMutex.unlock(); + } }; StreamThread::StreamVec StreamThread::sStreams; boost::mutex StreamThread::sMutex; @@ -363,6 +370,8 @@ void OpenAL_Output::init(const std::string &devname) void OpenAL_Output::deinit() { + StreamThread::removeAll(); + alcMakeContextCurrent(0); if(mContext) alcDestroyContext(mContext); From e234b901731ef88df22fff5ed710757e2ea73377 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 00:49:52 -0700 Subject: [PATCH 094/488] Use a loop to find the OpenAL format from the decoder format --- apps/openmw/mwsound/openal_output.cpp | 34 +++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 556c1bb644..71cf33b751 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -25,26 +25,24 @@ static void throwALerror() static ALenum getALFormat(ChannelConfig chans, SampleType type) { - if(chans == ChannelConfig_Mono) + static const struct { + ALenum format; + ChannelConfig chans; + SampleType type; + } fmtlist[] = { + { AL_FORMAT_MONO16, ChannelConfig_Mono, SampleType_Int16 }, + { AL_FORMAT_MONO8, ChannelConfig_Mono, SampleType_UInt8 }, + { AL_FORMAT_STEREO16, ChannelConfig_Stereo, SampleType_Int16 }, + { AL_FORMAT_STEREO8, ChannelConfig_Stereo, SampleType_UInt8 }, + }; + static const size_t fmtlistsize = sizeof(fmtlist)/sizeof(fmtlist[0]); + + for(size_t i = 0;i < fmtlistsize;i++) { - if(type == SampleType_Int16) - return AL_FORMAT_MONO16; - else if(type == SampleType_UInt8) - return AL_FORMAT_MONO8; - else - fail("Unsupported sample type"); + if(fmtlist[i].chans == chans && fmtlist[i].type == type) + return fmtlist[i].format; } - else if(chans == ChannelConfig_Stereo) - { - if(type == SampleType_Int16) - return AL_FORMAT_STEREO16; - else if(type == SampleType_UInt8) - return AL_FORMAT_STEREO8; - else - fail("Unsupported sample type"); - } - else - fail("Unsupported channel config"); + fail("Unsupported sound format"); return AL_NONE; } From 2c27827e4fbb62b4351ca9bef27c2300d3e42baf Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 01:33:33 -0700 Subject: [PATCH 095/488] Add some comment markers to the OpenAL sound classes --- apps/openmw/mwsound/openal_output.cpp | 101 ++++++++++++++------------ 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 71cf33b751..4b07e204fc 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -46,33 +46,9 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) return AL_NONE; } - -ALuint LoadBuffer(DecoderPtr decoder) -{ - int srate; - ChannelConfig chans; - SampleType type; - ALenum format; - - decoder->getInfo(&srate, &chans, &type); - format = getALFormat(chans, type); - - std::vector data(32768); - size_t got, total = 0; - while((got=decoder->read(&data[total], data.size()-total)) > 0) - { - total += got; - data.resize(total*2); - } - data.resize(total); - - ALuint buf; - alGenBuffers(1, &buf); - alBufferData(buf, format, &data[0], total, srate); - return buf; -} - - +// +// A streaming OpenAL sound. +// class OpenAL_SoundStream : public Sound { static const ALuint sNumBuffers = 4; @@ -100,26 +76,15 @@ public: bool process(); }; -class OpenAL_Sound : public Sound -{ -public: - ALuint mSource; - ALuint mBuffer; - - OpenAL_Sound(ALuint src, ALuint buf); - virtual ~OpenAL_Sound(); - - virtual void stop(); - virtual bool isPlaying(); - virtual void update(const float *pos); -}; - - +// +// A background streaming thread (keeps active streams processed) +// struct StreamThread { typedef std::vector StreamVec; static StreamVec sStreams; static boost::mutex sMutex; + // boost::thread entry point void operator()() { while(1) @@ -243,12 +208,12 @@ void OpenAL_SoundStream::play(float volume, float pitch) void OpenAL_SoundStream::stop() { StreamThread::remove(this); + mIsFinished = true; alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); throwALerror(); // FIXME: Rewind decoder - mIsFinished = true; } bool OpenAL_SoundStream::isPlaying() @@ -311,6 +276,49 @@ bool OpenAL_SoundStream::process() return true; } +// +// A regular OpenAL sound +// +class OpenAL_Sound : public Sound +{ + ALuint mSource; + ALuint mBuffer; + +public: + OpenAL_Sound(ALuint src, ALuint buf); + virtual ~OpenAL_Sound(); + + virtual void stop(); + virtual bool isPlaying(); + virtual void update(const float *pos); + + static ALuint LoadBuffer(DecoderPtr decoder); +}; + +ALuint OpenAL_Sound::LoadBuffer(DecoderPtr decoder) +{ + int srate; + ChannelConfig chans; + SampleType type; + ALenum format; + + decoder->getInfo(&srate, &chans, &type); + format = getALFormat(chans, type); + + std::vector data(32768); + size_t got, total = 0; + while((got=decoder->read(&data[total], data.size()-total)) > 0) + { + total += got; + data.resize(total*2); + } + data.resize(total); + + ALuint buf; + alGenBuffers(1, &buf); + alBufferData(buf, format, &data[0], total, srate); + return buf; +} OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) : mSource(src), mBuffer(buf) @@ -348,6 +356,9 @@ void OpenAL_Sound::update(const float *pos) } +// +// An OpenAL output device +// void OpenAL_Output::init(const std::string &devname) { if(mDevice || mContext) @@ -390,7 +401,7 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi ALuint src=0, buf=0; try { - buf = LoadBuffer(decoder); + buf = OpenAL_Sound::LoadBuffer(decoder); decoder->close(); alGenSources(1, &src); throwALerror(); @@ -439,7 +450,7 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl ALuint src=0, buf=0; try { - buf = LoadBuffer(decoder); + buf = OpenAL_Sound::LoadBuffer(decoder); decoder->close(); alGenSources(1, &src); throwALerror(); From 4698e8c0a23f04b7d32920d2089d96cb0c4a6578 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 02:15:08 -0700 Subject: [PATCH 096/488] Make the sound stream thread object per-device --- apps/openmw/mwsound/openal_output.cpp | 83 ++++++++++++++++----------- apps/openmw/mwsound/openal_output.hpp | 9 ++- 2 files changed, 52 insertions(+), 40 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 4b07e204fc..2f993aa010 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -3,6 +3,8 @@ #include #include +#include + #include "openal_output.hpp" #include "sound_decoder.hpp" #include "sound.hpp" @@ -54,6 +56,8 @@ class OpenAL_SoundStream : public Sound static const ALuint sNumBuffers = 4; static const ALuint sBufferSize = 32768; + OpenAL_Output &mOutput; + ALuint mSource; ALuint mBuffers[sNumBuffers]; @@ -65,7 +69,7 @@ class OpenAL_SoundStream : public Sound volatile bool mIsFinished; public: - OpenAL_SoundStream(DecoderPtr decoder); + OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder); virtual ~OpenAL_SoundStream(); virtual void stop(); @@ -79,60 +83,68 @@ public: // // A background streaming thread (keeps active streams processed) // -struct StreamThread { +struct OpenAL_Output::StreamThread { typedef std::vector StreamVec; - static StreamVec sStreams; - static boost::mutex sMutex; + StreamVec mStreams; + boost::mutex mMutex; + boost::thread mThread; + + StreamThread() + : mThread(boost::ref(*this)) + { + } + ~StreamThread() + { + mThread.interrupt(); + } // boost::thread entry point void operator()() { while(1) { - sMutex.lock(); - StreamVec::iterator iter = sStreams.begin(); - while(iter != sStreams.end()) + mMutex.lock(); + StreamVec::iterator iter = mStreams.begin(); + while(iter != mStreams.end()) { if((*iter)->process() == false) - iter = sStreams.erase(iter); + iter = mStreams.erase(iter); else iter++; } - sMutex.unlock(); + mMutex.unlock(); boost::this_thread::sleep(boost::posix_time::milliseconds(20)); } } - static void add(OpenAL_SoundStream *stream) + void add(OpenAL_SoundStream *stream) { - sMutex.lock(); - if(std::find(sStreams.begin(), sStreams.end(), stream) == sStreams.end()) - sStreams.push_back(stream); - sMutex.unlock(); + mMutex.lock(); + if(std::find(mStreams.begin(), mStreams.end(), stream) == mStreams.end()) + mStreams.push_back(stream); + mMutex.unlock(); } - static void remove(OpenAL_SoundStream *stream) + void remove(OpenAL_SoundStream *stream) { - sMutex.lock(); - StreamVec::iterator iter = std::find(sStreams.begin(), sStreams.end(), stream); - if(iter != sStreams.end()) - sStreams.erase(iter); - sMutex.unlock(); + mMutex.lock(); + StreamVec::iterator iter = std::find(mStreams.begin(), mStreams.end(), stream); + if(iter != mStreams.end()) + mStreams.erase(iter); + mMutex.unlock(); } - static void removeAll() + void removeAll() { - sMutex.lock(); - sStreams.clear(); - sMutex.unlock(); + mMutex.lock(); + mStreams.clear(); + mMutex.unlock(); } }; -StreamThread::StreamVec StreamThread::sStreams; -boost::mutex StreamThread::sMutex; -OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) - : mDecoder(decoder), mIsFinished(true) +OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder) + : mOutput(output), mDecoder(decoder), mIsFinished(true) { throwALerror(); @@ -170,7 +182,7 @@ OpenAL_SoundStream::OpenAL_SoundStream(DecoderPtr decoder) } OpenAL_SoundStream::~OpenAL_SoundStream() { - StreamThread::remove(this); + mOutput.mStreamThread->remove(this); alDeleteSources(1, &mSource); alDeleteBuffers(sNumBuffers, mBuffers); @@ -201,13 +213,13 @@ void OpenAL_SoundStream::play(float volume, float pitch) alSourcePlay(mSource); throwALerror(); - StreamThread::add(this); + mOutput.mStreamThread->add(this); mIsFinished = false; } void OpenAL_SoundStream::stop() { - StreamThread::remove(this); + mOutput.mStreamThread->remove(this); mIsFinished = true; alSourceStop(mSource); @@ -379,7 +391,8 @@ void OpenAL_Output::init(const std::string &devname) void OpenAL_Output::deinit() { - StreamThread::removeAll(); + if(mStreamThread.get() != 0) + mStreamThread->removeAll(); alcMakeContextCurrent(0); if(mContext) @@ -496,7 +509,7 @@ Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float DecoderPtr decoder = mManager.getDecoder(); decoder->open(fname); - sound.reset(new OpenAL_SoundStream(decoder)); + sound.reset(new OpenAL_SoundStream(*this, decoder)); sound->play(volume, pitch); return sound.release(); @@ -517,13 +530,13 @@ void OpenAL_Output::updateListener(const float *pos, const float *atdir, const f OpenAL_Output::OpenAL_Output(SoundManager &mgr) - : Sound_Output(mgr), mDevice(0), mContext(0), mStreamThread(StreamThread()) + : Sound_Output(mgr), mDevice(0), mContext(0), mStreamThread(new StreamThread) { } OpenAL_Output::~OpenAL_Output() { - mStreamThread.interrupt(); + mStreamThread.reset(); deinit(); } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 9a6d7f9d2a..cd6146e39f 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -3,8 +3,6 @@ #include -#include - #include "alc.h" #include "al.h" @@ -13,7 +11,6 @@ namespace MWSound { class SoundManager; - class Sound_Decoder; class Sound; class OpenAL_Output : public Sound_Output @@ -21,8 +18,6 @@ namespace MWSound ALCdevice *mDevice; ALCcontext *mContext; - boost::thread mStreamThread; - virtual void init(const std::string &devname=""); virtual void deinit(); @@ -37,6 +32,10 @@ namespace MWSound OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); + class StreamThread; + std::auto_ptr mStreamThread; + + friend class OpenAL_SoundStream; friend class SoundManager; }; #ifndef DEFAULT_OUTPUT From 4a0b5b791865dc0b8fb2f666b7868684311ef4ff Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 02:19:13 -0700 Subject: [PATCH 097/488] Increase the sound stream thread sleep time to 50ms --- apps/openmw/mwsound/openal_output.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 2f993aa010..04ae47c72b 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -113,7 +113,7 @@ struct OpenAL_Output::StreamThread { iter++; } mMutex.unlock(); - boost::this_thread::sleep(boost::posix_time::milliseconds(20)); + boost::this_thread::sleep(boost::posix_time::milliseconds(50)); } } From dc6354b2f9edd6880cf460e1365393ec538ca732 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 02:31:40 -0700 Subject: [PATCH 098/488] Add functions to get string names for sample types and channel configs --- apps/openmw/mwsound/openal_output.cpp | 2 +- apps/openmw/mwsound/sound_decoder.hpp | 3 +++ apps/openmw/mwsound/soundmanager.cpp | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 04ae47c72b..81b874dbf8 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -44,7 +44,7 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) if(fmtlist[i].chans == chans && fmtlist[i].type == type) return fmtlist[i].format; } - fail("Unsupported sound format"); + fail(std::string("Unsupported sound format (")+getChannelConfigName(chans)+", "+getSampleTypeName(type)+")"); return AL_NONE; } diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index e25321a906..957681e93a 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -9,10 +9,13 @@ namespace MWSound SampleType_UInt8, SampleType_Int16 }; + const char *getSampleTypeName(SampleType type); + enum ChannelConfig { ChannelConfig_Mono, ChannelConfig_Stereo }; + const char *getChannelConfigName(ChannelConfig config); class Sound_Decoder { diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 447c860ffb..a263fb1ac0 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -464,4 +464,25 @@ namespace MWSound updateRegionSound(duration); } + + + const char *getSampleTypeName(SampleType type) + { + switch(type) + { + case SampleType_UInt8: return "U8"; + case SampleType_Int16: return "S16"; + } + return "(unknown sample type)"; + } + + const char *getChannelConfigName(ChannelConfig config) + { + switch(config) + { + case ChannelConfig_Mono: return "Mono"; + case ChannelConfig_Stereo: return "Stereo"; + } + return "(unknown channel config)"; + } } From 8f9d4ff841af39f90426b03e9dc738e30cf17b09 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 05:29:04 -0700 Subject: [PATCH 099/488] Use 6 125ms buffers for OpenAL streams --- apps/openmw/mwsound/openal_output.cpp | 12 ++++++++---- apps/openmw/mwsound/sound_decoder.hpp | 3 +++ apps/openmw/mwsound/soundmanager.cpp | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 81b874dbf8..3e07c3f64e 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -53,8 +53,8 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) // class OpenAL_SoundStream : public Sound { - static const ALuint sNumBuffers = 4; - static const ALuint sBufferSize = 32768; + static const ALuint sNumBuffers = 6; + static const ALfloat sBufferLength = 0.125f; OpenAL_Output &mOutput; @@ -63,6 +63,7 @@ class OpenAL_SoundStream : public Sound ALenum mFormat; ALsizei mSampleRate; + ALuint mBufferSize; DecoderPtr mDecoder; @@ -171,6 +172,9 @@ OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder mDecoder->getInfo(&srate, &chans, &type); mFormat = getALFormat(chans, type); mSampleRate = srate; + + mBufferSize = static_cast(sBufferLength*srate); + mBufferSize = framesToBytes(mBufferSize, chans, type); } catch(std::exception &e) { @@ -193,7 +197,7 @@ OpenAL_SoundStream::~OpenAL_SoundStream() void OpenAL_SoundStream::play(float volume, float pitch) { - std::vector data(sBufferSize); + std::vector data(mBufferSize); alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); @@ -251,7 +255,7 @@ bool OpenAL_SoundStream::process() if(processed > 0) { - std::vector data(sBufferSize); + std::vector data(mBufferSize); do { ALuint bufid; size_t got; diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 957681e93a..2b16eaeeed 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -17,6 +17,9 @@ namespace MWSound }; const char *getChannelConfigName(ChannelConfig config); + size_t framesToBytes(size_t frames, ChannelConfig config, SampleType type); + size_t bytesToFrames(size_t bytes, ChannelConfig config, SampleType type); + class Sound_Decoder { public: diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a263fb1ac0..d86c5c2f50 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -485,4 +485,24 @@ namespace MWSound } return "(unknown channel config)"; } + + size_t framesToBytes(size_t frames, ChannelConfig config, SampleType type) + { + switch(config) + { + case ChannelConfig_Mono: frames *= 1; break; + case ChannelConfig_Stereo: frames *= 2; break; + } + switch(type) + { + case SampleType_UInt8: frames *= 1; break; + case SampleType_Int16: frames *= 2; break; + } + return frames; + } + + size_t bytesToFrames(size_t bytes, ChannelConfig config, SampleType type) + { + return bytes / framesToBytes(1, config, type); + } } From ae8218bf03f5a6b7799c358f58de351a5ed7f371 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 07:11:01 -0700 Subject: [PATCH 100/488] Allocate OpenAL sources when opening the device This allows sources to be more efficiently retrieved and returned --- apps/openmw/mwsound/openal_output.cpp | 165 ++++++++++++++++++-------- apps/openmw/mwsound/openal_output.hpp | 5 + 2 files changed, 119 insertions(+), 51 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 3e07c3f64e..62a7076e9e 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -17,6 +17,13 @@ namespace MWSound static void fail(const std::string &msg) { throw std::runtime_error("OpenAL exception: " + msg); } +static void throwALCerror(ALCdevice *device) +{ + ALCenum err = alcGetError(device); + if(err != ALC_NO_ERROR) + fail(alcGetString(device, err)); +} + static void throwALerror() { ALenum err = alGetError(); @@ -70,14 +77,14 @@ class OpenAL_SoundStream : public Sound volatile bool mIsFinished; public: - OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder); + OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder); virtual ~OpenAL_SoundStream(); virtual void stop(); virtual bool isPlaying(); virtual void update(const float *pos); - void play(float volume, float pitch); + void play(); bool process(); }; @@ -144,25 +151,13 @@ struct OpenAL_Output::StreamThread { }; -OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder) - : mOutput(output), mDecoder(decoder), mIsFinished(true) +OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder) + : mOutput(output), mSource(src), mDecoder(decoder), mIsFinished(true) { throwALerror(); - alGenSources(1, &mSource); + alGenBuffers(sNumBuffers, mBuffers); throwALerror(); - try - { - alGenBuffers(sNumBuffers, mBuffers); - throwALerror(); - } - catch(std::exception &e) - { - alDeleteSources(1, &mSource); - alGetError(); - throw; - } - try { int srate; @@ -178,7 +173,7 @@ OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, DecoderPtr decoder } catch(std::exception &e) { - alDeleteSources(1, &mSource); + mOutput.mFreeSources.push_back(mSource); alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); throw; @@ -188,21 +183,22 @@ OpenAL_SoundStream::~OpenAL_SoundStream() { mOutput.mStreamThread->remove(this); - alDeleteSources(1, &mSource); + alSourceStop(mSource); + alSourcei(mSource, AL_BUFFER, 0); + + mOutput.mFreeSources.push_back(mSource); alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); mDecoder->close(); } -void OpenAL_SoundStream::play(float volume, float pitch) +void OpenAL_SoundStream::play() { std::vector data(mBufferSize); alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); - alSourcef(mSource, AL_GAIN, volume); - alSourcef(mSource, AL_PITCH, pitch); throwALerror(); for(ALuint i = 0;i < sNumBuffers;i++) @@ -297,11 +293,12 @@ bool OpenAL_SoundStream::process() // class OpenAL_Sound : public Sound { + OpenAL_Output &mOutput; + ALuint mSource; ALuint mBuffer; - public: - OpenAL_Sound(ALuint src, ALuint buf); + OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf); virtual ~OpenAL_Sound(); virtual void stop(); @@ -330,19 +327,22 @@ ALuint OpenAL_Sound::LoadBuffer(DecoderPtr decoder) } data.resize(total); - ALuint buf; + ALuint buf=0; alGenBuffers(1, &buf); alBufferData(buf, format, &data[0], total, srate); return buf; } -OpenAL_Sound::OpenAL_Sound(ALuint src, ALuint buf) - : mSource(src), mBuffer(buf) +OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf) + : mOutput(output), mSource(src), mBuffer(buf) { } OpenAL_Sound::~OpenAL_Sound() { - alDeleteSources(1, &mSource); + alSourceStop(mSource); + alSourcei(mSource, AL_BUFFER, 0); + + mOutput.mFreeSources.push_back(mSource); alDeleteBuffers(1, &mBuffer); alGetError(); } @@ -391,13 +391,37 @@ void OpenAL_Output::init(const std::string &devname) alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); throwALerror(); + + ALCint maxmono, maxstereo; + alcGetIntegerv(mDevice, ALC_MONO_SOURCES, 1, &maxmono); + alcGetIntegerv(mDevice, ALC_STEREO_SOURCES, 1, &maxstereo); + throwALCerror(mDevice); + + mFreeSources.resize(std::min(maxmono+maxstereo, 256)); + for(size_t i = 0;i < mFreeSources.size();i++) + { + ALuint src; + alGenSources(1, &src); + if(alGetError() != AL_NO_ERROR) + { + mFreeSources.resize(i); + break; + } + mFreeSources[i] = src; + } + if(mFreeSources.size() == 0) + fail("Could not allocate any sources"); } void OpenAL_Output::deinit() { - if(mStreamThread.get() != 0) - mStreamThread->removeAll(); + mStreamThread->removeAll(); + if(!mFreeSources.empty()) + { + alDeleteSources(mFreeSources.size(), mFreeSources.data()); + mFreeSources.clear(); + } alcMakeContextCurrent(0); if(mContext) alcDestroyContext(mContext); @@ -412,28 +436,33 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi { throwALerror(); - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); - + std::auto_ptr sound; ALuint src=0, buf=0; + + if(mFreeSources.empty()) + fail("No free sources"); + src = mFreeSources.back(); + mFreeSources.pop_back(); + try { + DecoderPtr decoder = mManager.getDecoder(); + decoder->open(fname); buf = OpenAL_Sound::LoadBuffer(decoder); - decoder->close(); - alGenSources(1, &src); throwALerror(); + decoder->close(); + + sound.reset(new OpenAL_Sound(*this, src, buf)); } catch(std::exception &e) { - if(alIsSource(src)) - alDeleteSources(1, &src); + mFreeSources.push_back(src); if(alIsBuffer(buf)) alDeleteBuffers(1, &buf); alGetError(); throw; } - std::auto_ptr sound(new OpenAL_Sound(src, buf)); alSource3f(src, AL_POSITION, 0.0f, 0.0f, 0.0f); alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -461,28 +490,33 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl { throwALerror(); - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); - + std::auto_ptr sound; ALuint src=0, buf=0; + + if(mFreeSources.empty()) + fail("No free sources"); + src = mFreeSources.back(); + mFreeSources.pop_back(); + try { + DecoderPtr decoder = mManager.getDecoder(); + decoder->open(fname); buf = OpenAL_Sound::LoadBuffer(decoder); - decoder->close(); - alGenSources(1, &src); throwALerror(); + decoder->close(); + + sound.reset(new OpenAL_Sound(*this, src, buf)); } catch(std::exception &e) { - if(alIsSource(src)) - alDeleteSources(1, &src); + mFreeSources.push_back(src); if(alIsBuffer(buf)) alDeleteBuffers(1, &buf); alGetError(); throw; } - std::auto_ptr sound(new OpenAL_Sound(src, buf)); alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -508,14 +542,44 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) { + throwALerror(); + std::auto_ptr sound; + ALuint src; - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); + if(mFreeSources.empty()) + fail("No free sources"); + src = mFreeSources.back(); + mFreeSources.pop_back(); - sound.reset(new OpenAL_SoundStream(*this, decoder)); - sound->play(volume, pitch); + try + { + DecoderPtr decoder = mManager.getDecoder(); + decoder->open(fname); + sound.reset(new OpenAL_SoundStream(*this, src, decoder)); + } + catch(std::exception &e) + { + mFreeSources.push_back(src); + throw; + } + alSource3f(src, AL_POSITION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + + alSourcef(src, AL_REFERENCE_DISTANCE, 1.0f); + alSourcef(src, AL_MAX_DISTANCE, 1000.0f); + alSourcef(src, AL_ROLLOFF_FACTOR, 0.0f); + + alSourcef(src, AL_GAIN, volume); + alSourcef(src, AL_PITCH, pitch); + + alSourcei(src, AL_SOURCE_RELATIVE, AL_TRUE); + alSourcei(src, AL_LOOPING, AL_FALSE); + throwALerror(); + + sound->play(); return sound.release(); } @@ -540,7 +604,6 @@ OpenAL_Output::OpenAL_Output(SoundManager &mgr) OpenAL_Output::~OpenAL_Output() { - mStreamThread.reset(); deinit(); } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index cd6146e39f..80c6db8514 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -2,6 +2,7 @@ #define GAME_SOUND_OPENAL_OUTPUT_H #include +#include #include "alc.h" #include "al.h" @@ -18,6 +19,9 @@ namespace MWSound ALCdevice *mDevice; ALCcontext *mContext; + typedef std::vector IDVec; + IDVec mFreeSources; + virtual void init(const std::string &devname=""); virtual void deinit(); @@ -35,6 +39,7 @@ namespace MWSound class StreamThread; std::auto_ptr mStreamThread; + friend class OpenAL_Sound; friend class OpenAL_SoundStream; friend class SoundManager; }; From 4f69972a9c7a10aea930567d3431eea6381049b6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 07:28:03 -0700 Subject: [PATCH 101/488] Add a method to stream a sound in 3D --- apps/openmw/mwsound/openal_output.cpp | 44 +++++++++++++++++++++++++++ apps/openmw/mwsound/openal_output.hpp | 2 ++ apps/openmw/mwsound/sound_output.hpp | 2 ++ 3 files changed, 48 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 62a7076e9e..d63482273a 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -583,6 +583,50 @@ Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float return sound.release(); } +Sound* OpenAL_Output::streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max) +{ + throwALerror(); + + std::auto_ptr sound; + ALuint src; + + if(mFreeSources.empty()) + fail("No free sources"); + src = mFreeSources.back(); + mFreeSources.pop_back(); + + try + { + DecoderPtr decoder = mManager.getDecoder(); + decoder->open(fname); + sound.reset(new OpenAL_SoundStream(*this, src, decoder)); + } + catch(std::exception &e) + { + mFreeSources.push_back(src); + throw; + } + + alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + + alSourcef(src, AL_REFERENCE_DISTANCE, min); + alSourcef(src, AL_MAX_DISTANCE, max); + alSourcef(src, AL_ROLLOFF_FACTOR, 1.0f); + + alSourcef(src, AL_GAIN, volume); + alSourcef(src, AL_PITCH, pitch); + + alSourcei(src, AL_SOURCE_RELATIVE, AL_FALSE); + alSourcei(src, AL_LOOPING, AL_FALSE); + throwALerror(); + + sound->play(); + return sound.release(); +} + void OpenAL_Output::updateListener(const float *pos, const float *atdir, const float *updir) { diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 80c6db8514..dddd1d6dc6 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -30,6 +30,8 @@ namespace MWSound float min, float max, bool loop); virtual Sound *streamSound(const std::string &fname, float volume, float pitch); + virtual Sound *streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max); virtual void updateListener(const float *pos, const float *atdir, const float *updir); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index be721831f9..a2a035e710 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -23,6 +23,8 @@ namespace MWSound virtual Sound *playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) = 0; virtual Sound *streamSound(const std::string &fname, float volume, float pitch) = 0; + virtual Sound *streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max) = 0; virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; From afa2cb6de7a708a89630d30478bd21bbbef968b6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 07:51:28 -0700 Subject: [PATCH 102/488] Stop trying to read decoded audio once it's finished --- apps/openmw/mwsound/openal_output.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index d63482273a..f3cc261a4f 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -230,6 +230,13 @@ void OpenAL_SoundStream::stop() bool OpenAL_SoundStream::isPlaying() { + ALint state; + + alGetSourcei(mSource, AL_SOURCE_STATE, &state); + throwALerror(); + + if(state == AL_PLAYING) + return true; return !mIsFinished; } @@ -259,7 +266,11 @@ bool OpenAL_SoundStream::process() alSourceUnqueueBuffers(mSource, 1, &bufid); processed--; + if(mIsFinished) + continue; + got = mDecoder->read(&data[0], data.size()); + mIsFinished = (got < data.size()); if(got > 0) { alBufferData(bufid, mFormat, &data[0], got, mSampleRate); @@ -275,17 +286,14 @@ bool OpenAL_SoundStream::process() alGetSourcei(mSource, AL_BUFFERS_QUEUED, &queued); throwALerror(); - if(queued == 0) + if(queued > 0) { - mIsFinished = true; - return false; + alSourcePlay(mSource); + throwALerror(); } - - alSourcePlay(mSource); - throwALerror(); } - return true; + return !mIsFinished; } // From db46bf39b33f4271bebab20e0a34f917c668fef6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 08:48:25 -0700 Subject: [PATCH 103/488] Add a rewind method to the sound decoder --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 4 ++++ apps/openmw/mwsound/ffmpeg_decoder.hpp | 2 ++ apps/openmw/mwsound/mpgsnd_decoder.cpp | 17 +++++++++++++++++ apps/openmw/mwsound/mpgsnd_decoder.hpp | 2 ++ apps/openmw/mwsound/openal_output.cpp | 3 ++- apps/openmw/mwsound/sound_decoder.hpp | 2 ++ 6 files changed, 29 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 2b84439c04..cb14df946f 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -29,6 +29,10 @@ size_t FFmpeg_Decoder::read(char *buffer, size_t bytes) return 0; } +void FFmpeg_Decoder::rewind() +{ + fail("Not currently working"); +} FFmpeg_Decoder::FFmpeg_Decoder() { diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index 676a576da3..f622b115ee 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -20,7 +20,9 @@ namespace MWSound virtual void close(); virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t read(char *buffer, size_t bytes); + virtual void rewind(); FFmpeg_Decoder(); virtual ~FFmpeg_Decoder(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index e112d30b1d..1c13b5b1ae 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -109,6 +109,23 @@ size_t MpgSnd_Decoder::read(char *buffer, size_t bytes) return got; } +void MpgSnd_Decoder::rewind() +{ + if(!mSndFile && !mMpgFile) + fail("No open file"); + + if(mSndFile) + { + if(sf_seek(mSndFile, 0, SEEK_SET) == -1) + fail("seek failed"); + } + else if(mMpgFile) + { + if(mpg123_seek(mMpgFile, 0, SEEK_SET) < 0) + fail("seek failed"); + } +} + MpgSnd_Decoder::MpgSnd_Decoder() : mSndFile(NULL), mMpgFile(NULL) { static bool initdone = false; diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 4d3c7f4aba..19a6079b87 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -23,7 +23,9 @@ namespace MWSound virtual void close(); virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + virtual size_t read(char *buffer, size_t bytes); + virtual void rewind(); MpgSnd_Decoder(); public: diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index f3cc261a4f..084c269ddd 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -225,7 +225,8 @@ void OpenAL_SoundStream::stop() alSourceStop(mSource); alSourcei(mSource, AL_BUFFER, 0); throwALerror(); - // FIXME: Rewind decoder + + mDecoder->rewind(); } bool OpenAL_SoundStream::isPlaying() diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 2b16eaeeed..5abd4371d1 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -27,7 +27,9 @@ namespace MWSound virtual void close() = 0; virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; + virtual size_t read(char *buffer, size_t bytes) = 0; + virtual void rewind() = 0; virtual ~Sound_Decoder() { } From 91821ccd8c26ea0db1893f5fa07a86694343e833 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 09:08:59 -0700 Subject: [PATCH 104/488] Add the sound stream to the thread after resetting the mIsFinished flag --- apps/openmw/mwsound/openal_output.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 084c269ddd..468c1565d7 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -213,8 +213,8 @@ void OpenAL_SoundStream::play() alSourcePlay(mSource); throwALerror(); - mOutput.mStreamThread->add(this); mIsFinished = false; + mOutput.mStreamThread->add(this); } void OpenAL_SoundStream::stop() From 6c45d6668ba73cbe131ef21fb53b8320ddeae622 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 10:33:06 -0700 Subject: [PATCH 105/488] Cache OpenAL buffers for easy reuse --- apps/openmw/mwsound/openal_output.cpp | 118 ++++++++++++++++---------- apps/openmw/mwsound/openal_output.hpp | 14 +++ 2 files changed, 87 insertions(+), 45 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 468c1565d7..a0884fb40f 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -313,35 +313,8 @@ public: virtual void stop(); virtual bool isPlaying(); virtual void update(const float *pos); - - static ALuint LoadBuffer(DecoderPtr decoder); }; -ALuint OpenAL_Sound::LoadBuffer(DecoderPtr decoder) -{ - int srate; - ChannelConfig chans; - SampleType type; - ALenum format; - - decoder->getInfo(&srate, &chans, &type); - format = getALFormat(chans, type); - - std::vector data(32768); - size_t got, total = 0; - while((got=decoder->read(&data[total], data.size()-total)) > 0) - { - total += got; - data.resize(total*2); - } - data.resize(total); - - ALuint buf=0; - alGenBuffers(1, &buf); - alBufferData(buf, format, &data[0], total, srate); - return buf; -} - OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf) : mOutput(output), mSource(src), mBuffer(buf) { @@ -352,8 +325,7 @@ OpenAL_Sound::~OpenAL_Sound() alSourcei(mSource, AL_BUFFER, 0); mOutput.mFreeSources.push_back(mSource); - alDeleteBuffers(1, &mBuffer); - alGetError(); + mOutput.bufferFinished(mBuffer); } void OpenAL_Sound::stop() @@ -431,6 +403,15 @@ void OpenAL_Output::deinit() alDeleteSources(mFreeSources.size(), mFreeSources.data()); mFreeSources.clear(); } + + mBufferRefs.clear(); + mUnusedBuffers.clear(); + while(!mBufferCache.empty()) + { + alDeleteBuffers(1, &mBufferCache.begin()->second); + mBufferCache.erase(mBufferCache.begin()); + } + alcMakeContextCurrent(0); if(mContext) alcDestroyContext(mContext); @@ -441,6 +422,63 @@ void OpenAL_Output::deinit() } +ALuint OpenAL_Output::getBuffer(const std::string &fname) +{ + ALuint buf = 0; + + NameMap::iterator iditer = mBufferCache.find(fname); + if(iditer != mBufferCache.end()) + { + buf = iditer->second; + if(mBufferRefs[buf]++ == 0) + { + IDDq::iterator iter = std::find(mUnusedBuffers.begin(), + mUnusedBuffers.end(), buf); + if(iter != mUnusedBuffers.end()) + mUnusedBuffers.erase(iter); + } + + return buf; + } + throwALerror(); + + int srate; + ChannelConfig chans; + SampleType type; + ALenum format; + + DecoderPtr decoder = mManager.getDecoder(); + decoder->open(fname); + decoder->getInfo(&srate, &chans, &type); + format = getALFormat(chans, type); + + std::vector data(32768); + size_t got, total = 0; + while((got=decoder->read(&data[total], data.size()-total)) > 0) + { + total += got; + data.resize(total*2); + } + data.resize(total); + decoder->close(); + + alGenBuffers(1, &buf); + throwALerror(); + + alBufferData(buf, format, &data[0], total, srate); + mBufferCache[fname] = buf; + mBufferRefs[buf] = 1; + + return buf; +} + +void OpenAL_Output::bufferFinished(ALuint buf) +{ + if(mBufferRefs.at(buf)-- == 1) + mUnusedBuffers.push_back(buf); +} + + Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, bool loop) { throwALerror(); @@ -455,19 +493,14 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi try { - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); - buf = OpenAL_Sound::LoadBuffer(decoder); - throwALerror(); - decoder->close(); - + buf = getBuffer(fname); sound.reset(new OpenAL_Sound(*this, src, buf)); } catch(std::exception &e) { mFreeSources.push_back(src); - if(alIsBuffer(buf)) - alDeleteBuffers(1, &buf); + if(buf && alIsBuffer(buf)) + bufferFinished(buf); alGetError(); throw; } @@ -509,19 +542,14 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl try { - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); - buf = OpenAL_Sound::LoadBuffer(decoder); - throwALerror(); - decoder->close(); - + buf = getBuffer(fname); sound.reset(new OpenAL_Sound(*this, src, buf)); } catch(std::exception &e) { mFreeSources.push_back(src); - if(alIsBuffer(buf)) - alDeleteBuffers(1, &buf); + if(buf && alIsBuffer(buf)) + bufferFinished(buf); alGetError(); throw; } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index dddd1d6dc6..62ec39abaf 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -3,6 +3,8 @@ #include #include +#include +#include #include "alc.h" #include "al.h" @@ -22,6 +24,18 @@ namespace MWSound typedef std::vector IDVec; IDVec mFreeSources; + typedef std::map NameMap; + NameMap mBufferCache; + + typedef std::map IDRefMap; + IDRefMap mBufferRefs; + + typedef std::deque IDDq; + IDDq mUnusedBuffers; + + ALuint getBuffer(const std::string &fname); + void bufferFinished(ALuint buffer); + virtual void init(const std::string &devname=""); virtual void deinit(); From 04638516b282bf9550758690678095bf1924ef04 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 12:08:40 -0700 Subject: [PATCH 106/488] Check for stopped active sounds too and remove them --- apps/openmw/mwsound/soundmanager.cpp | 42 ++++++++++++++++++---------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index d86c5c2f50..f3480766b0 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -133,13 +133,11 @@ namespace MWSound { try { - Sound *sound; const ESM::Position &pos = ptr.getCellRef().pos; - sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop); - if(untracked) - mLooseSounds[id] = SoundPtr(sound); - else - mActiveSounds[ptr][id] = SoundPtr(sound); + SoundPtr sound(mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop)); + + if(untracked) mLooseSounds[id] = sound; + else mActiveSounds[ptr][id] = sound; } catch(std::exception &e) { @@ -157,7 +155,7 @@ namespace MWSound if(iditer == snditer->second.end()) return false; - return iditer->second->isPlaying(); + return true; } @@ -320,7 +318,7 @@ namespace MWSound if(iditer != snditer->second.end()) { snditer->second.erase(iditer); - if(snditer->second.size() == 0) + if(snditer->second.empty()) mActiveSounds.erase(snditer); } } @@ -450,16 +448,32 @@ namespace MWSound float up[3] = { nUp[0], -nUp[2], nUp[1] }; mOutput->updateListener(pos, at, up); - // Check if any "untracked" sounds are finished playing, and trash - // them - IDMap::iterator snditer = mLooseSounds.begin(); - while(snditer != mLooseSounds.end()) + // Check if any sounds are finished playing, and trash them + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { - if(!snditer->second->isPlaying()) - mLooseSounds.erase(snditer++); + IDMap::iterator iditer = snditer->second.begin(); + while(iditer != snditer->second.end()) + { + if(!iditer->second->isPlaying()) + snditer->second.erase(iditer++); + else + iditer++; + } + if(snditer->second.empty()) + mActiveSounds.erase(snditer++); else snditer++; } + + IDMap::iterator iditer = mLooseSounds.begin(); + while(iditer != mLooseSounds.end()) + { + if(!iditer->second->isPlaying()) + mLooseSounds.erase(iditer++); + else + iditer++; + } } updateRegionSound(duration); From fd37a4827c1d993b719abf2f8ada23153144c04a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 19 Mar 2012 13:19:22 -0700 Subject: [PATCH 107/488] Enforce a 15MB limit on the sound buffer cache --- apps/openmw/mwsound/openal_output.cpp | 36 ++++++++++++++++++++++++++- apps/openmw/mwsound/openal_output.hpp | 2 ++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index a0884fb40f..7768119b6e 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -469,13 +469,46 @@ ALuint OpenAL_Output::getBuffer(const std::string &fname) mBufferCache[fname] = buf; mBufferRefs[buf] = 1; + ALint bufsize = 0; + alGetBufferi(buf, AL_SIZE, &bufsize); + mBufferCacheMemSize += bufsize; + + // NOTE: Max buffer cache: 15MB + while(mBufferCacheMemSize > 15*1024*1024) + { + if(mUnusedBuffers.empty()) + { + std::cout <<"No more unused buffers to clear!"<< std::endl; + break; + } + + ALuint oldbuf = mUnusedBuffers.front(); + mUnusedBuffers.pop_front(); + + NameMap::iterator nameiter = mBufferCache.begin(); + while(nameiter != mBufferCache.end()) + { + if(nameiter->second == oldbuf) + mBufferCache.erase(nameiter++); + else + nameiter++; + } + + bufsize = 0; + alGetBufferi(oldbuf, AL_SIZE, &bufsize); + alDeleteBuffers(1, &oldbuf); + mBufferCacheMemSize -= bufsize; + } return buf; } void OpenAL_Output::bufferFinished(ALuint buf) { if(mBufferRefs.at(buf)-- == 1) + { + mBufferRefs.erase(mBufferRefs.find(buf)); mUnusedBuffers.push_back(buf); + } } @@ -679,7 +712,8 @@ void OpenAL_Output::updateListener(const float *pos, const float *atdir, const f OpenAL_Output::OpenAL_Output(SoundManager &mgr) - : Sound_Output(mgr), mDevice(0), mContext(0), mStreamThread(new StreamThread) + : Sound_Output(mgr), mDevice(0), mContext(0), mBufferCacheMemSize(0), + mStreamThread(new StreamThread) { } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 62ec39abaf..aeb64ad0d1 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -33,6 +33,8 @@ namespace MWSound typedef std::deque IDDq; IDDq mUnusedBuffers; + uint64_t mBufferCacheMemSize; + ALuint getBuffer(const std::string &fname); void bufferFinished(ALuint buffer); From 80dbf82a748f7b821b8eabbdf7a795e1998fecc2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 07:22:17 -0700 Subject: [PATCH 108/488] Explicitly stop sounds instead of relying on their deletion to do it --- apps/openmw/mwsound/soundmanager.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 508e9144d7..e5449e09bb 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -40,7 +40,6 @@ namespace MWSound : mFSStrict(fsstrict) , mEnvironment(environment) , mCurrentPlaylist(NULL) - , mUsingSound(useSound) { if(!useSound) return; @@ -239,9 +238,6 @@ namespace MWSound void SoundManager::playPlaylist(std::string playlist) { - if (!mUsingSound) - return; - if (playlist == "") { if(!isMusicPlaying()) @@ -321,13 +317,22 @@ namespace MWSound IDMap::iterator iditer = snditer->second.find(soundId); if(iditer != snditer->second.end()) { + iditer->second->stop(); snditer->second.erase(iditer); if(snditer->second.empty()) mActiveSounds.erase(snditer); } } else + { + IDMap::iterator iditer = snditer->second.begin(); + while(iditer != snditer->second.end()) + { + iditer->second->stop(); + iditer++; + } mActiveSounds.erase(snditer); + } } void SoundManager::stopSound(MWWorld::Ptr::CellStore *cell) @@ -337,7 +342,15 @@ namespace MWSound while(snditer != mActiveSounds.end()) { if(snditer->first.getCell() == cell) + { + IDMap::iterator iditer = snditer->second.begin(); + while(iditer != snditer->second.end()) + { + iditer->second->stop(); + iditer++; + } mActiveSounds.erase(snditer++); + } else snditer++; } @@ -347,7 +360,10 @@ namespace MWSound { IDMap::iterator iditer = mLooseSounds.find(soundId); if(iditer != mLooseSounds.end()) + { + iditer->second->stop(); mLooseSounds.erase(iditer); + } } bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const From 0261aac5184d961b9cfb8e5aaba8261ffdb3f5cf Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 10:34:36 -0700 Subject: [PATCH 109/488] Use Ogre's resource group manager to handle sound files --- apps/openmw/mwsound/mpgsnd_decoder.cpp | 79 +++++++++++++++- apps/openmw/mwsound/mpgsnd_decoder.hpp | 11 +++ apps/openmw/mwsound/sound_decoder.hpp | 12 ++- apps/openmw/mwsound/soundmanager.cpp | 122 ++++++------------------- apps/openmw/mwsound/soundmanager.hpp | 23 +---- 5 files changed, 125 insertions(+), 122 deletions(-) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index 1c13b5b1ae..f9bef9774b 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -12,12 +12,83 @@ static void fail(const std::string &msg) namespace MWSound { +// +// libSndFile io callbacks +// +sf_count_t MpgSnd_Decoder::ogresf_get_filelen(void *user_data) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->size(); +} + +sf_count_t MpgSnd_Decoder::ogresf_seek(sf_count_t offset, int whence, void *user_data) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + + if(whence == SEEK_CUR) + stream->seek(stream->tell()+offset); + else if(whence == SEEK_SET) + stream->seek(offset); + else if(whence == SEEK_END) + stream->seek(stream->size()+offset); + else + return -1; + + return stream->tell(); +} + +sf_count_t MpgSnd_Decoder::ogresf_read(void *ptr, sf_count_t count, void *user_data) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->read(ptr, count); +} + +sf_count_t MpgSnd_Decoder::ogresf_write(const void*, sf_count_t, void*) +{ return -1; } + +sf_count_t MpgSnd_Decoder::ogresf_tell(void *user_data) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->tell(); +} + +// +// libmpg13 io callbacks +// +ssize_t MpgSnd_Decoder::ogrempg_read(void *user_data, void *ptr, size_t count) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->read(ptr, count); +} + +off_t MpgSnd_Decoder::ogrempg_lseek(void *user_data, off_t offset, int whence) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + + if(whence == SEEK_CUR) + stream->seek(stream->tell()+offset); + else if(whence == SEEK_SET) + stream->seek(offset); + else if(whence == SEEK_END) + stream->seek(stream->size()+offset); + else + return -1; + + return stream->tell(); +} + + void MpgSnd_Decoder::open(const std::string &fname) { close(); + mDataStream = mResourceMgr.openResource(fname); SF_INFO info; - mSndFile = sf_open(fname.c_str(), SFM_READ, &info); + SF_VIRTUAL_IO streamIO = { + ogresf_get_filelen, ogresf_seek, + ogresf_read, ogresf_write, ogresf_tell + }; + mSndFile = sf_open_virtual(&streamIO, SFM_READ, &info, this); if(mSndFile) { if(info.channels == 1) @@ -33,9 +104,11 @@ void MpgSnd_Decoder::open(const std::string &fname) mSampleRate = info.samplerate; return; } + mDataStream->seek(0); mMpgFile = mpg123_new(NULL, NULL); - if(mMpgFile && mpg123_open(mMpgFile, fname.c_str()) == MPG123_OK) + if(mMpgFile && mpg123_replace_reader_handle(mMpgFile, ogrempg_read, ogrempg_lseek, NULL) == MPG123_OK && + mpg123_open_handle(mMpgFile, this) == MPG123_OK) { try { @@ -79,6 +152,8 @@ void MpgSnd_Decoder::close() mpg123_delete(mMpgFile); mMpgFile = NULL; } + + mDataStream.setNull(); } void MpgSnd_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 19a6079b87..35c753ec81 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -3,6 +3,8 @@ #include +#include + #include "mpg123.h" #include "sndfile.h" @@ -16,6 +18,15 @@ namespace MWSound SNDFILE *mSndFile; mpg123_handle *mMpgFile; + Ogre::DataStreamPtr mDataStream; + static sf_count_t ogresf_get_filelen(void *user_data); + static sf_count_t ogresf_seek(sf_count_t offset, int whence, void *user_data); + static sf_count_t ogresf_read(void *ptr, sf_count_t count, void *user_data); + static sf_count_t ogresf_write(const void*, sf_count_t, void*); + static sf_count_t ogresf_tell(void *user_data); + static ssize_t ogrempg_read(void*, void*, size_t); + static off_t ogrempg_lseek(void*, off_t, int); + ChannelConfig mChanConfig; int mSampleRate; diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 5abd4371d1..858cc63531 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -3,6 +3,8 @@ #include +#include + namespace MWSound { enum SampleType { @@ -20,9 +22,10 @@ namespace MWSound size_t framesToBytes(size_t frames, ChannelConfig config, SampleType type); size_t bytesToFrames(size_t bytes, ChannelConfig config, SampleType type); - class Sound_Decoder + struct Sound_Decoder { - public: + Ogre::ResourceGroupManager &mResourceMgr; + virtual void open(const std::string &fname) = 0; virtual void close() = 0; @@ -31,10 +34,9 @@ namespace MWSound virtual size_t read(char *buffer, size_t bytes) = 0; virtual void rewind() = 0; + Sound_Decoder() : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) + { } virtual ~Sound_Decoder() { } - - friend class OpenAL_Output; - friend class SoundManager; }; } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index e5449e09bb..c0a1a8a833 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -39,7 +39,6 @@ namespace MWSound bool useSound, bool fsstrict, MWWorld::Environment& environment) : mFSStrict(fsstrict) , mEnvironment(environment) - , mCurrentPlaylist(NULL) { if(!useSound) return; @@ -59,24 +58,7 @@ namespace MWSound return; } - // The music library will accept these filetypes - // If none is given then it will accept all filetypes - std::vector acceptableExtensions; - acceptableExtensions.push_back(".mp3"); - acceptableExtensions.push_back(".wav"); - acceptableExtensions.push_back(".ogg"); - acceptableExtensions.push_back(".flac"); - - // Makes a list of all sound files, searches in reverse for priority reasons - for(Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) - Files::FileLister(*it / std::string("Sound"), mSoundFiles, true); - - // Makes a FileLibrary of all music files, searches in reverse for priority reasons - for(Files::PathContainer::const_reverse_iterator it = dataDirs.rbegin(); it != dataDirs.rend(); ++it) - mMusicLibrary.add(*it / std::string("Music"), true, mFSStrict, acceptableExtensions); - - std::string anything = "anything"; // anything is better that a segfault - mCurrentPlaylist = mMusicLibrary.section(anything, mFSStrict); // now points to an empty path + mResourceMgr = Ogre::ResourceGroupManager::getSingletonPtr(); } SoundManager::~SoundManager() @@ -120,7 +102,14 @@ namespace MWSound max = std::max(min, max); } - return Files::FileListLocator(mSoundFiles, snd->sound, mFSStrict, false); + std::string fname = std::string("Sound\\")+snd->sound; + if(!mResourceMgr->resourceExistsInAnyGroup(fname)) + { + std::string::size_type pos = fname.rfind('.'); + if(pos != std::string::npos) + fname = fname.substr(0, pos)+".mp3"; + } + return fname; } // Add a sound to the list and play it @@ -163,53 +152,25 @@ namespace MWSound { if(mMusic) mMusic->stop(); - setPlaylist(); - } - - void SoundManager::streamMusicFull(const std::string& filename) - { - if(mMusic) - mMusic->stop(); - mMusic.reset(mOutput->streamSound(filename, 0.4f, 1.0f)); + mMusic.reset(); } void SoundManager::streamMusic(const std::string& filename) { - std::string filePath = mMusicLibrary.locate(filename, mFSStrict, true).string(); - if(!filePath.empty()) + try { - try - { - streamMusicFull(filePath); - } - catch(std::exception &e) - { - std::cout << "Music Error: " << e.what() << "\n"; - } + if(mMusic) + mMusic->stop(); + mMusic.reset(mOutput->streamSound(filename, 0.4f, 1.0f)); + } + catch(std::exception &e) + { + std::cout << "Music Error: " << e.what() << "\n"; } } void SoundManager::startRandomTitle() { - if(mCurrentPlaylist && !mCurrentPlaylist->empty()) - { - Files::PathContainer::const_iterator fileIter = mCurrentPlaylist->begin(); - srand( time(NULL) ); - int r = rand() % mCurrentPlaylist->size() + 1; //old random code - - std::advance(fileIter, r - 1); - std::string music = fileIter->string(); - //std::cout << "Playing " << music << "\n"; - - try - { - streamMusicFull(music); - } - catch (std::exception &e) - { - std::cout << "Music Error: " << e.what() << "\n"; - } - } } bool SoundManager::isMusicPlaying() @@ -217,52 +178,21 @@ namespace MWSound return mMusic && mMusic->isPlaying(); } - bool SoundManager::setPlaylist(std::string playlist) - { - const Files::PathContainer* previousPlaylist; - previousPlaylist = mCurrentPlaylist; - if (playlist == "") - { - mCurrentPlaylist = mMusicLibrary.section(playlist, mFSStrict); - } - else if(mMusicLibrary.containsSection(playlist, mFSStrict)) - { - mCurrentPlaylist = mMusicLibrary.section(playlist, mFSStrict); - } - else - { - std::cout << "Warning: playlist named " << playlist << " does not exist.\n"; - } - return previousPlaylist == mCurrentPlaylist; - } - void SoundManager::playPlaylist(std::string playlist) { - if (playlist == "") - { - if(!isMusicPlaying()) - { - startRandomTitle(); - } - return; - } - - if(!setPlaylist(playlist)) - { - startRandomTitle(); - } - else if (!isMusicPlaying()) - { - startRandomTitle(); - } } void SoundManager::say(MWWorld::Ptr ptr, const std::string& filename) { // The range values are not tested - std::string filePath = Files::FileListLocator(mSoundFiles, filename, mFSStrict, true); - if(!filePath.empty()) - play3d(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); + std::string filePath = std::string("Sound\\")+filename; + if(!mResourceMgr->resourceExistsInAnyGroup(filePath)) + { + std::string::size_type pos = filePath.rfind('.'); + if(pos != std::string::npos) + filePath = filePath.substr(0, pos)+".mp3"; + } + play3d(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); } bool SoundManager::sayDone(MWWorld::Ptr ptr) const diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 3c78268213..2a474e5f54 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -3,6 +3,8 @@ #include +#include + #include #include "../mwworld/ptr.hpp" @@ -29,6 +31,8 @@ namespace MWSound class SoundManager { + Ogre::ResourceGroupManager *mResourceMgr; + // This is used for case insensitive and slash-type agnostic file // finding. It takes DOS paths (any case, \\ slashes or / slashes) // relative to the sound dir, and translates them into full paths @@ -41,19 +45,6 @@ namespace MWSound boost::shared_ptr mMusic; - void streamMusicFull(const std::string& filename); - ///< Play a soundifle - /// \param absolute filename - - // A list of all sound files used to lookup paths - Files::PathContainer mSoundFiles; - - // A library of all Music file paths stored by the folder they are contained in - Files::FileLibrary mMusicLibrary; - - // Points to the current playlist of music files stored in the music library - const Files::PathContainer* mCurrentPlaylist; - typedef boost::shared_ptr SoundPtr; typedef std::map IDMap; typedef std::map SoundMap; @@ -92,12 +83,6 @@ namespace MWSound bool isMusicPlaying(); ///< Returns true if music is playing - bool setPlaylist(std::string playlist=""); - ///< Set the playlist to an existing folder - /// \param name of the folder that contains the playlist - /// if none is set then it is set to an empty playlist - /// \return Return true if the previous playlist was the same - void playPlaylist(std::string playlist=""); ///< Start playing music from the selected folder /// \param name of the folder that contains the playlist From 5ae47f783ebdf9cef3407b96d005f67aa78fd851 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 10:46:10 -0700 Subject: [PATCH 110/488] Use the sound manager's update to make sure music is still playing --- apps/openmw/engine.cpp | 4 ---- apps/openmw/mwsound/soundmanager.cpp | 4 ++++ apps/openmw/mwsound/soundmanager.hpp | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 89068ce533..57723cac99 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -117,11 +117,7 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // sound if (mUseSound) - { - mEnvironment.mSoundManager->playPlaylist(); - mEnvironment.mSoundManager->update (evt.timeSinceLastFrame); - } // update GUI Ogre::RenderWindow* window = mOgre->getWindow(); diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index c0a1a8a833..b4a2409ca7 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -384,6 +384,10 @@ namespace MWSound { timePassed = 0.0f; + // Make sure music is still playing + if(!mMusic || !mMusic->isPlaying()) + startRandomTitle(); + Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); Ogre::Vector3 nPos, nDir, nUp; nPos = cam->getRealPosition(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 2a474e5f54..2f850b569d 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -83,10 +83,9 @@ namespace MWSound bool isMusicPlaying(); ///< Returns true if music is playing - void playPlaylist(std::string playlist=""); + void playPlaylist(std::string playlist); ///< Start playing music from the selected folder /// \param name of the folder that contains the playlist - /// if none is set then it plays from the current playlist void say(MWWorld::Ptr reference, const std::string& filename); ///< Make an actor say some text. From fc27d5cc198e85f0b7ddcf934b606ff312dd65c2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 11:31:13 -0700 Subject: [PATCH 111/488] Restore music playback --- apps/openmw/mwsound/soundmanager.cpp | 15 +++++++++++++-- apps/openmw/mwsound/soundmanager.hpp | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index b4a2409ca7..7b3346331e 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -157,6 +157,7 @@ namespace MWSound void SoundManager::streamMusic(const std::string& filename) { + std::cout <<"Playing "<findResourceNames(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "Music/"+mCurrentPlaylist+"/*"); + if(!filelist->size()) + return; + + int i = rand()%filelist->size(); + streamMusic((*filelist)[i]); } bool SoundManager::isMusicPlaying() @@ -178,8 +187,10 @@ namespace MWSound return mMusic && mMusic->isPlaying(); } - void SoundManager::playPlaylist(std::string playlist) + void SoundManager::playPlaylist(const std::string &playlist) { + mCurrentPlaylist = playlist; + startRandomTitle(); } void SoundManager::say(MWWorld::Ptr ptr, const std::string& filename) @@ -385,7 +396,7 @@ namespace MWSound timePassed = 0.0f; // Make sure music is still playing - if(!mMusic || !mMusic->isPlaying()) + if(!isMusicPlaying()) startRandomTitle(); Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 2f850b569d..206b7a1b92 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -44,6 +44,7 @@ namespace MWSound std::auto_ptr mOutput; boost::shared_ptr mMusic; + std::string mCurrentPlaylist; typedef boost::shared_ptr SoundPtr; typedef std::map IDMap; @@ -83,7 +84,7 @@ namespace MWSound bool isMusicPlaying(); ///< Returns true if music is playing - void playPlaylist(std::string playlist); + void playPlaylist(const std::string &playlist); ///< Start playing music from the selected folder /// \param name of the folder that contains the playlist From e48745b68ec25b351b4dd511dac1c1c1bb00e647 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 12:39:49 -0700 Subject: [PATCH 112/488] Fix streamMusic's path lookup --- apps/openmw/mwsound/soundmanager.cpp | 9 +++++++-- apps/openmw/mwsound/soundmanager.hpp | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 7b3346331e..ec5ab310b7 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -155,7 +155,7 @@ namespace MWSound mMusic.reset(); } - void SoundManager::streamMusic(const std::string& filename) + void SoundManager::streamMusicFull(const std::string& filename) { std::cout <<"Playing "<size(); - streamMusic((*filelist)[i]); + streamMusicFull((*filelist)[i]); } bool SoundManager::isMusicPlaying() diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 206b7a1b92..f350da2be1 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -58,6 +58,7 @@ namespace MWSound MWWorld::Ptr ptr, const std::string &id, float volume, float pitch, float min, float max, bool loop, bool untracked=false); + void streamMusicFull(const std::string& filename); bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; void updateRegionSound(float duration); From 9a48002025b266a6767e8c8ea26de3c43dbc5749 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 14:13:58 -0700 Subject: [PATCH 113/488] Fix compilation of the FFmpeg decoder --- CMakeLists.txt | 15 +++++++++------ apps/openmw/mwsound/ffmpeg_decoder.hpp | 6 ++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 97cb33685b..d836cccaa8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,19 +126,22 @@ set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL}) set(OPENMW_LIBS_HEADER) # Sound setup +set(SOUND_INPUT_INCLUDES "") +set(SOUND_INPUT_LIBRARY "") +set(SOUND_DEFINE "") if (USE_FFMPEG) find_package(FFMPEG REQUIRED) - set(SOUND_INPUT_INCLUDES ${FFMPEG_INCLUDE_DIR}) - set(SOUND_INPUT_LIBRARY ${FFMPEG_LIBRARIES}) - set(SOUND_DEFINE -DOPENMW_USE_FFMPEG) + set(SOUND_INPUT_INCLUDES ${SOUND_INPUT_INCLUDES} ${FFMPEG_INCLUDE_DIR}) + set(SOUND_INPUT_LIBRARY ${SOUND_INPUT_LIBRARY} ${FFMPEG_LIBRARIES}) + set(SOUND_DEFINE ${SOUND_DEFINE} -DOPENMW_USE_FFMPEG) endif (USE_FFMPEG) if (USE_MPG123) find_package(MPG123 REQUIRED) find_package(SNDFILE REQUIRED) - set(SOUND_INPUT_INCLUDES ${MPG123_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR}) - set(SOUND_INPUT_LIBRARY ${MPG123_LIBRARY} ${SNDFILE_LIBRARY}) - set(SOUND_DEFINE -DOPENMW_USE_MPG123) + set(SOUND_INPUT_INCLUDES ${SOUND_INPUT_INCLUDES} ${MPG123_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR}) + set(SOUND_INPUT_LIBRARY ${SOUND_INPUT_LIBRARY} ${MPG123_LIBRARY} ${SNDFILE_LIBRARY}) + set(SOUND_DEFINE ${SOUND_DEFINE} -DOPENMW_USE_MPG123) endif (USE_MPG123) # Platform specific diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index f622b115ee..de39259886 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -3,6 +3,11 @@ #include +// FIXME: This can't be right? The headers refuse to build without UINT64_C, +// which only gets defined in stdint.h in either C99 mode or with this macro +// defined... +#define __STDC_CONSTANT_MACROS +#include extern "C" { #include @@ -25,6 +30,7 @@ namespace MWSound virtual void rewind(); FFmpeg_Decoder(); + public: virtual ~FFmpeg_Decoder(); friend class SoundManager; From deb473b9ae69a37a4c9db91a39f08c7184b5bb24 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 16:45:01 -0700 Subject: [PATCH 114/488] Implement the ffmpeg decoder --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 348 ++++++++++++++++++++++++- apps/openmw/mwsound/ffmpeg_decoder.hpp | 12 + 2 files changed, 354 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index cb14df946f..b8ad809263 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -9,33 +9,369 @@ namespace MWSound static void fail(const std::string &msg) { throw std::runtime_error("FFmpeg exception: "+msg); } + +struct PacketList { + AVPacket pkt; + PacketList *next; +}; + +struct FFmpeg_Decoder::MyStream { + AVCodecContext *mCodecCtx; + int mStreamIdx; + + PacketList *mPackets; + + char *mDecodedData; + size_t mDecodedDataSize; + + FFmpeg_Decoder *mParent; + + void clearPackets(); + void *getAVAudioData(size_t *length); + size_t readAVAudioData(void *data, size_t length); +}; + + +int FFmpeg_Decoder::readPacket(void *user_data, uint8_t *buf, int buf_size) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->read(buf, buf_size); +} + +int FFmpeg_Decoder::writePacket(void *user_data, uint8_t *buf, int buf_size) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + return stream->write(buf, buf_size); +} + +int64_t FFmpeg_Decoder::seek(void *user_data, int64_t offset, int whence) +{ + Ogre::DataStreamPtr stream = static_cast(user_data)->mDataStream; + + whence &= ~AVSEEK_FORCE; + if(whence == AVSEEK_SIZE) + return stream->size(); + if(whence == SEEK_SET) + stream->seek(offset); + else if(whence == SEEK_CUR) + stream->seek(stream->tell()+offset); + else if(whence == SEEK_END) + stream->seek(stream->size()+offset); + else + return -1; + + return stream->tell(); +} + + +/* Used by getAV*Data to search for more compressed data, and buffer it in the + * correct stream. It won't buffer data for streams that the app doesn't have a + * handle for. */ +bool FFmpeg_Decoder::getNextPacket(int streamidx) +{ + PacketList *packet; + + packet = (PacketList*)av_malloc(sizeof(*packet)); + packet->next = NULL; + +next_packet: + while(av_read_frame(mFormatCtx, &packet->pkt) >= 0) + { + std::vector::iterator iter = mStreams.begin(); + + /* Check each stream the user has a handle for, looking for the one + * this packet belongs to */ + while(iter != mStreams.end()) + { + if((*iter)->mStreamIdx == packet->pkt.stream_index) + { + PacketList **last; + + last = &(*iter)->mPackets; + while(*last != NULL) + last = &(*last)->next; + + *last = packet; + if((*iter)->mStreamIdx == streamidx) + return true; + + packet = (PacketList*)av_malloc(sizeof(*packet)); + packet->next = NULL; + goto next_packet; + } + iter++; + } + /* Free the packet and look for another */ + av_free_packet(&packet->pkt); + } + av_free(packet); + + return false; +} + +void FFmpeg_Decoder::MyStream::clearPackets() +{ + while(mPackets) + { + PacketList *self = mPackets; + mPackets = self->next; + + av_free_packet(&self->pkt); + av_free(self); + } +} + +void *FFmpeg_Decoder::MyStream::getAVAudioData(size_t *length) +{ + int size; + int len; + + if(length) *length = 0; + if(mCodecCtx->codec_type != AVMEDIA_TYPE_AUDIO) + return NULL; + + mDecodedDataSize = 0; + +next_packet: + if(!mPackets && !mParent->getNextPacket(mStreamIdx)) + return NULL; + + /* Decode some data, and check for errors */ + size = AVCODEC_MAX_AUDIO_FRAME_SIZE; + while((len=avcodec_decode_audio3(mCodecCtx, (int16_t*)mDecodedData, &size, + &mPackets->pkt)) == 0) + { + PacketList *self; + + if(size > 0) + break; + + /* Packet went unread and no data was given? Drop it and try the next, + * I guess... */ + self = mPackets; + mPackets = self->next; + + av_free_packet(&self->pkt); + av_free(self); + + if(!mPackets) + goto next_packet; + + size = AVCODEC_MAX_AUDIO_FRAME_SIZE; + } + + if(len < 0) + return NULL; + + if(len < mPackets->pkt.size) + { + /* Move the unread data to the front and clear the end bits */ + int remaining = mPackets->pkt.size - len; + memmove(mPackets->pkt.data, &mPackets->pkt.data[len], remaining); + memset(&mPackets->pkt.data[remaining], 0, mPackets->pkt.size - remaining); + mPackets->pkt.size -= len; + } + else + { + PacketList *self; + + self = mPackets; + mPackets = self->next; + + av_free_packet(&self->pkt); + av_free(self); + } + + if(size == 0) + goto next_packet; + + /* Set the output buffer size */ + mDecodedDataSize = size; + if(length) *length = mDecodedDataSize; + + return mDecodedData; +} + +size_t FFmpeg_Decoder::MyStream::readAVAudioData(void *data, size_t length) +{ + size_t dec = 0; + + while(dec < length) + { + /* If there's no decoded data, find some */ + if(mDecodedDataSize == 0) + { + if(getAVAudioData(NULL) == NULL) + break; + } + + if(mDecodedDataSize > 0) + { + /* Get the amount of bytes remaining to be written, and clamp to + * the amount of decoded data we have */ + size_t rem = length-dec; + if(rem > mDecodedDataSize) + rem = mDecodedDataSize; + + /* Copy the data to the app's buffer and increment */ + if(data != NULL) + { + memcpy(data, mDecodedData, rem); + data = (char*)data + rem; + } + dec += rem; + + /* If there's any decoded data left, move it to the front of the + * buffer for next time */ + if(rem < mDecodedDataSize) + memmove(mDecodedData, &mDecodedData[rem], mDecodedDataSize - rem); + mDecodedDataSize -= rem; + } + } + + /* Return the number of bytes we were able to get */ + return dec; +} + + + void FFmpeg_Decoder::open(const std::string &fname) { - fail("Not currently working"); + close(); + mDataStream = mResourceMgr.openResource(fname); + + if((mFormatCtx=avformat_alloc_context()) == NULL) + fail("Failed to allocate context"); + + try + { + mFormatCtx->pb = avio_alloc_context(NULL, 0, 0, this, readPacket, writePacket, seek); + if(!mFormatCtx->pb || avformat_open_input(&mFormatCtx, fname.c_str(), NULL, NULL) != 0) + fail("Failed to open input"); + + if(avformat_find_stream_info(mFormatCtx, NULL) < 0) + fail("Failed to find stream info"); + + for(size_t j = 0;j < mFormatCtx->nb_streams;j++) + { + if(mFormatCtx->streams[j]->codec->codec_type == AVMEDIA_TYPE_AUDIO) + { + std::auto_ptr stream(new MyStream); + stream->mCodecCtx = mFormatCtx->streams[j]->codec; + stream->mStreamIdx = j; + stream->mPackets = NULL; + + AVCodec *codec; + codec = avcodec_find_decoder(stream->mCodecCtx->codec_id); + if(!codec || avcodec_open(stream->mCodecCtx, codec) < 0) + fail("Could not open audio codec"); + + stream->mDecodedData = (char*)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE); + stream->mDecodedDataSize = 0; + + stream->mParent = this; + mStreams.push_back(stream.release()); + break; + } + } + if(mStreams.empty()) + fail("No audio streams"); + } + catch(std::exception &e) + { + av_close_input_file(mFormatCtx); + mFormatCtx = NULL; + throw; + } } void FFmpeg_Decoder::close() { + while(!mStreams.empty()) + { + MyStream *stream = mStreams.front(); + + stream->clearPackets(); + avcodec_close(stream->mCodecCtx); + av_free(stream->mDecodedData); + + mStreams.erase(mStreams.begin()); + } + if(mFormatCtx) + av_close_input_file(mFormatCtx); + mFormatCtx = NULL; } void FFmpeg_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) { - fail("Not currently working"); + if(mStreams.empty()) + fail("No audio stream info"); + + MyStream *stream = mStreams[0]; + if(stream->mCodecCtx->sample_fmt == AV_SAMPLE_FMT_U8) + *type = SampleType_UInt8; + else if(stream->mCodecCtx->sample_fmt == AV_SAMPLE_FMT_S16) + *type = SampleType_Int16; + else + fail(std::string("Unsupported sample format:")+ + av_get_sample_fmt_name(stream->mCodecCtx->sample_fmt)); + + if(stream->mCodecCtx->channel_layout == AV_CH_LAYOUT_MONO) + *chans = ChannelConfig_Mono; + else if(stream->mCodecCtx->channel_layout == AV_CH_LAYOUT_STEREO) + *chans = ChannelConfig_Stereo; + else if(stream->mCodecCtx->channel_layout == 0) + { + /* Unknown channel layout. Try to guess. */ + if(stream->mCodecCtx->channels == 1) + *chans = ChannelConfig_Mono; + else if(stream->mCodecCtx->channels == 2) + *chans = ChannelConfig_Stereo; + else + { + std::stringstream sstr("Unsupported raw channel count: "); + sstr << stream->mCodecCtx->channels; + fail(sstr.str()); + } + } + else + { + char str[1024]; + av_get_channel_layout_string(str, sizeof(str), stream->mCodecCtx->channels, + stream->mCodecCtx->channel_layout); + fail(std::string("Unsupported channel layout: ")+str); + } + + *samplerate = stream->mCodecCtx->sample_rate; } size_t FFmpeg_Decoder::read(char *buffer, size_t bytes) { - fail("Not currently working"); - return 0; + if(mStreams.empty()) + fail("No audio streams"); + + return mStreams.front()->readAVAudioData(buffer, bytes); } void FFmpeg_Decoder::rewind() { - fail("Not currently working"); + av_seek_frame(mFormatCtx, -1, 0, 0); + for(size_t i = 0;i < mStreams.size();i++) + mStreams[i]->clearPackets(); } -FFmpeg_Decoder::FFmpeg_Decoder() +FFmpeg_Decoder::FFmpeg_Decoder() : mFormatCtx(NULL) { + static bool done_init = false; + + /* We need to make sure ffmpeg is initialized. Optionally silence warning + * output from the lib */ + if(!done_init) + { + av_register_all(); + av_log_set_level(AV_LOG_ERROR); + done_init = true; + } } FFmpeg_Decoder::~FFmpeg_Decoder() diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index de39259886..9211bcc0dc 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -21,6 +21,18 @@ namespace MWSound { class FFmpeg_Decoder : public Sound_Decoder { + AVFormatContext *mFormatCtx; + + struct MyStream; + std::vector mStreams; + + bool getNextPacket(int streamidx); + + Ogre::DataStreamPtr mDataStream; + static int readPacket(void *user_data, uint8_t *buf, int buf_size); + static int writePacket(void *user_data, uint8_t *buf, int buf_size); + static int64_t seek(void *user_data, int64_t offset, int whence); + virtual void open(const std::string &fname); virtual void close(); From 26a441f29a418c7c87db881491526c854ff07b97 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 17:57:28 -0700 Subject: [PATCH 115/488] Add a readAll method to the sound decoder, for potentially more efficient reading --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 12 ++++++++++++ apps/openmw/mwsound/ffmpeg_decoder.hpp | 1 + apps/openmw/mwsound/mpgsnd_decoder.cpp | 22 +++++++++++++++++----- apps/openmw/mwsound/mpgsnd_decoder.hpp | 2 ++ apps/openmw/mwsound/openal_output.cpp | 15 +++++---------- apps/openmw/mwsound/sound_decoder.hpp | 1 + apps/openmw/mwsound/soundmanager.cpp | 16 ++++++++++++++++ 7 files changed, 54 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index b8ad809263..55ccad43d7 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -353,6 +353,18 @@ size_t FFmpeg_Decoder::read(char *buffer, size_t bytes) return mStreams.front()->readAVAudioData(buffer, bytes); } +void FFmpeg_Decoder::readAll(std::vector &output) +{ + if(mStreams.empty()) + fail("No audio streams"); + MyStream *stream = mStreams.front(); + char *inbuf; + size_t got; + + while((inbuf=(char*)stream->getAVAudioData(&got)) != NULL && got > 0) + output.insert(output.end(), inbuf, inbuf+got); +} + void FFmpeg_Decoder::rewind() { av_seek_frame(mFormatCtx, -1, 0, 0); diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index 9211bcc0dc..ae71c00523 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -39,6 +39,7 @@ namespace MWSound virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); virtual size_t read(char *buffer, size_t bytes); + virtual void readAll(std::vector &output); virtual void rewind(); FFmpeg_Decoder(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index f9bef9774b..f576833a82 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -83,17 +83,16 @@ void MpgSnd_Decoder::open(const std::string &fname) close(); mDataStream = mResourceMgr.openResource(fname); - SF_INFO info; SF_VIRTUAL_IO streamIO = { ogresf_get_filelen, ogresf_seek, ogresf_read, ogresf_write, ogresf_tell }; - mSndFile = sf_open_virtual(&streamIO, SFM_READ, &info, this); + mSndFile = sf_open_virtual(&streamIO, SFM_READ, &mSndInfo, this); if(mSndFile) { - if(info.channels == 1) + if(mSndInfo.channels == 1) mChanConfig = ChannelConfig_Mono; - else if(info.channels == 2) + else if(mSndInfo.channels == 2) mChanConfig = ChannelConfig_Stereo; else { @@ -101,7 +100,7 @@ void MpgSnd_Decoder::open(const std::string &fname) mSndFile = NULL; fail("Unsupported channel count in "+fname); } - mSampleRate = info.samplerate; + mSampleRate = mSndInfo.samplerate; return; } mDataStream->seek(0); @@ -184,6 +183,19 @@ size_t MpgSnd_Decoder::read(char *buffer, size_t bytes) return got; } +void MpgSnd_Decoder::readAll(std::vector &output) +{ + if(mSndFile && mSndInfo.frames > 0) + { + size_t pos = output.size(); + output.resize(pos + mSndInfo.frames*mSndInfo.channels*2); + sf_readf_short(mSndFile, (short*)(output.data()+pos), mSndInfo.frames); + return; + } + // Fallback in case we don't know the total already + Sound_Decoder::readAll(output); +} + void MpgSnd_Decoder::rewind() { if(!mSndFile && !mMpgFile) diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 35c753ec81..1d9e9d5e22 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -15,6 +15,7 @@ namespace MWSound { class MpgSnd_Decoder : public Sound_Decoder { + SF_INFO mSndInfo; SNDFILE *mSndFile; mpg123_handle *mMpgFile; @@ -36,6 +37,7 @@ namespace MWSound virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); virtual size_t read(char *buffer, size_t bytes); + virtual void readAll(std::vector &output); virtual void rewind(); MpgSnd_Decoder(); diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 7768119b6e..1efb70db47 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -442,30 +442,25 @@ ALuint OpenAL_Output::getBuffer(const std::string &fname) } throwALerror(); - int srate; + std::vector data; ChannelConfig chans; SampleType type; ALenum format; + int srate; DecoderPtr decoder = mManager.getDecoder(); decoder->open(fname); + decoder->getInfo(&srate, &chans, &type); format = getALFormat(chans, type); - std::vector data(32768); - size_t got, total = 0; - while((got=decoder->read(&data[total], data.size()-total)) > 0) - { - total += got; - data.resize(total*2); - } - data.resize(total); + decoder->readAll(data); decoder->close(); alGenBuffers(1, &buf); throwALerror(); - alBufferData(buf, format, &data[0], total, srate); + alBufferData(buf, format, data.data(), data.size(), srate); mBufferCache[fname] = buf; mBufferRefs[buf] = 1; diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index 858cc63531..e076c7b567 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -32,6 +32,7 @@ namespace MWSound virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; virtual size_t read(char *buffer, size_t bytes) = 0; + virtual void readAll(std::vector &output); virtual void rewind() = 0; Sound_Decoder() : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index ec5ab310b7..ded94aee3b 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -449,6 +449,22 @@ namespace MWSound updateRegionSound(duration); } + // Default readAll implementation, for decoders that can't do anything + // better + void Sound_Decoder::readAll(std::vector &output) + { + size_t total = output.size(); + size_t got; + + output.resize(total+32768); + while((got=read(&output[total], output.size()-total)) > 0) + { + total += got; + output.resize(total*2); + } + output.resize(total); + } + const char *getSampleTypeName(SampleType type) { From 2989a1e06e7b70273aeb2f8e9c1e57bbcc79b9c7 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 18:49:52 -0700 Subject: [PATCH 116/488] Improve ffmpeg failure messages --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 55ccad43d7..d1a90da13f 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -247,10 +247,10 @@ void FFmpeg_Decoder::open(const std::string &fname) { mFormatCtx->pb = avio_alloc_context(NULL, 0, 0, this, readPacket, writePacket, seek); if(!mFormatCtx->pb || avformat_open_input(&mFormatCtx, fname.c_str(), NULL, NULL) != 0) - fail("Failed to open input"); + fail("Failed to open input stream for "+fname); if(avformat_find_stream_info(mFormatCtx, NULL) < 0) - fail("Failed to find stream info"); + fail("Failed to find stream info in "+fname); for(size_t j = 0;j < mFormatCtx->nb_streams;j++) { @@ -261,10 +261,15 @@ void FFmpeg_Decoder::open(const std::string &fname) stream->mStreamIdx = j; stream->mPackets = NULL; - AVCodec *codec; - codec = avcodec_find_decoder(stream->mCodecCtx->codec_id); - if(!codec || avcodec_open(stream->mCodecCtx, codec) < 0) - fail("Could not open audio codec"); + AVCodec *codec = avcodec_find_decoder(stream->mCodecCtx->codec_id); + if(!codec) + { + std::stringstream ss("No codec found for id "); + ss << stream->mCodecCtx->codec_id; + fail(ss.str()); + } + if(avcodec_open(stream->mCodecCtx, codec) < 0) + fail("Failed to open audio codec " + std::string(codec->long_name)); stream->mDecodedData = (char*)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE); stream->mDecodedDataSize = 0; @@ -275,7 +280,7 @@ void FFmpeg_Decoder::open(const std::string &fname) } } if(mStreams.empty()) - fail("No audio streams"); + fail("No audio streams in "+fname); } catch(std::exception &e) { @@ -313,7 +318,7 @@ void FFmpeg_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType * else if(stream->mCodecCtx->sample_fmt == AV_SAMPLE_FMT_S16) *type = SampleType_Int16; else - fail(std::string("Unsupported sample format:")+ + fail(std::string("Unsupported sample format: ")+ av_get_sample_fmt_name(stream->mCodecCtx->sample_fmt)); if(stream->mCodecCtx->channel_layout == AV_CH_LAYOUT_MONO) From 7b22ee6fd1a4113a131bc74016a92fef5cbe582a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 20 Mar 2012 21:46:12 -0700 Subject: [PATCH 117/488] Use for_each to clear the ffmpeg stream packets --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index d1a90da13f..fb530de913 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -373,8 +373,7 @@ void FFmpeg_Decoder::readAll(std::vector &output) void FFmpeg_Decoder::rewind() { av_seek_frame(mFormatCtx, -1, 0, 0); - for(size_t i = 0;i < mStreams.size();i++) - mStreams[i]->clearPackets(); + std::for_each(mStreams.begin(), mStreams.end(), std::mem_fun(&MyStream::clearPackets)); } FFmpeg_Decoder::FFmpeg_Decoder() : mFormatCtx(NULL) From fd8326e9585259609122b8d289848328749c13a2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 12:20:36 -0700 Subject: [PATCH 118/488] Better handle some ffmpeg errors --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index fb530de913..3ba1af525d 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -243,12 +243,16 @@ void FFmpeg_Decoder::open(const std::string &fname) if((mFormatCtx=avformat_alloc_context()) == NULL) fail("Failed to allocate context"); + mFormatCtx->pb = avio_alloc_context(NULL, 0, 0, this, readPacket, writePacket, seek); + if(!mFormatCtx->pb || avformat_open_input(&mFormatCtx, fname.c_str(), NULL, NULL) != 0) + { + avformat_free_context(mFormatCtx); + mFormatCtx = NULL; + fail("Failed to allocate input stream"); + } + try { - mFormatCtx->pb = avio_alloc_context(NULL, 0, 0, this, readPacket, writePacket, seek); - if(!mFormatCtx->pb || avformat_open_input(&mFormatCtx, fname.c_str(), NULL, NULL) != 0) - fail("Failed to open input stream for "+fname); - if(avformat_find_stream_info(mFormatCtx, NULL) < 0) fail("Failed to find stream info in "+fname); From 0d973ac8ffa5d7cf196642c83907c85eef52c869 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 14:38:37 -0700 Subject: [PATCH 119/488] Use the vector's data field instead of the address of the first element Same thing really, but less convoluted --- apps/openmw/mwsound/openal_output.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 1efb70db47..d41d692db6 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -204,8 +204,8 @@ void OpenAL_SoundStream::play() for(ALuint i = 0;i < sNumBuffers;i++) { size_t got; - got = mDecoder->read(&data[0], data.size()); - alBufferData(mBuffers[i], mFormat, &data[0], got, mSampleRate); + got = mDecoder->read(data.data(), data.size()); + alBufferData(mBuffers[i], mFormat, data.data(), got, mSampleRate); } throwALerror(); @@ -270,11 +270,11 @@ bool OpenAL_SoundStream::process() if(mIsFinished) continue; - got = mDecoder->read(&data[0], data.size()); + got = mDecoder->read(data.data(), data.size()); mIsFinished = (got < data.size()); if(got > 0) { - alBufferData(bufid, mFormat, &data[0], got, mSampleRate); + alBufferData(bufid, mFormat, data.data(), got, mSampleRate); alSourceQueueBuffers(mSource, 1, &bufid); } } while(processed > 0); From 6a85ef12299f12b302d9c7c14751ba426c5873b9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 14:46:29 -0700 Subject: [PATCH 120/488] Set Ogre's data stream to NULL when closing the audio file --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 3ba1af525d..41859f7fd9 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -309,6 +309,8 @@ void FFmpeg_Decoder::close() if(mFormatCtx) av_close_input_file(mFormatCtx); mFormatCtx = NULL; + + mDataStream.setNull(); } void FFmpeg_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) From 8c5f85ca83907f31ba4532bbe0afae15a3986630 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 14:49:29 -0700 Subject: [PATCH 121/488] Use a local variable to mark sound streams as finished while processing This avoids a race condition where the source can underrun while the final buffers are being queued and the sound can be detected as stopped --- apps/openmw/mwsound/openal_output.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index d41d692db6..ed7be21f63 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -251,6 +251,7 @@ void OpenAL_SoundStream::update(const float *pos) bool OpenAL_SoundStream::process() { + bool finished = mIsFinished; ALint processed, state; alGetSourcei(mSource, AL_SOURCE_STATE, &state); @@ -267,11 +268,11 @@ bool OpenAL_SoundStream::process() alSourceUnqueueBuffers(mSource, 1, &bufid); processed--; - if(mIsFinished) + if(finished) continue; got = mDecoder->read(data.data(), data.size()); - mIsFinished = (got < data.size()); + finished = (got < data.size()); if(got > 0) { alBufferData(bufid, mFormat, data.data(), got, mSampleRate); @@ -294,7 +295,8 @@ bool OpenAL_SoundStream::process() } } - return !mIsFinished; + mIsFinished = finished; + return !finished; } // From 56c3b988ccb60c66daa20db7ba0dd0fe333de2e0 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 15:19:40 -0700 Subject: [PATCH 122/488] Avoid copying the region when looking for a sound to play --- apps/openmw/mwsound/soundmanager.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index ded94aee3b..a46c17e79d 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -343,38 +343,34 @@ namespace MWSound timePassed += duration; if((current->cell->data.flags & current->cell->Interior) || timePassed < 10) return; - - ESM::Region test = (ESM::Region) *(mEnvironment.mWorld->getStore().regions.find(current->cell->region)); - timePassed = 0; + if(regionName != current->cell->region) { regionName = current->cell->region; total = 0; } - if(test.soundList.size() == 0) + const ESM::Region *regn = mEnvironment.mWorld->getStore().regions.find(regionName); + if(regn->soundList.size() == 0) return; - std::vector::iterator soundIter; + std::vector::const_iterator soundIter; if(total == 0) { - soundIter = test.soundList.begin(); - while(soundIter != test.soundList.end()) + soundIter = regn->soundList.begin(); + while(soundIter != regn->soundList.end()) { - int chance = (int) soundIter->chance; - //ESM::NAME32 go = soundIter->sound; - //std::cout << "Sound: " << go.name <<" Chance:" << chance << "\n"; + total += (int)soundIter->chance; soundIter++; - total += chance; } } int r = rand() % total; //old random code int pos = 0; - soundIter = test.soundList.begin(); - while(soundIter != test.soundList.end()) + soundIter = regn->soundList.begin(); + while(soundIter != regn->soundList.end()) { const std::string go = soundIter->sound.toString(); int chance = (int) soundIter->chance; From 9a139f511f5937e5ad34e2765332857817a5502e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 15:29:05 -0700 Subject: [PATCH 123/488] Avoid redefining SOUND_IN --- apps/openmw/mwsound/soundmanager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a46c17e79d..5a6b07e0a8 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -23,13 +23,17 @@ */ #ifdef OPENMW_USE_FFMPEG #include "ffmpeg_decoder.hpp" +#ifndef SOUND_IN #define SOUND_IN "FFmpeg" #endif +#endif #ifdef OPENMW_USE_MPG123 #include "mpgsnd_decoder.hpp" +#ifndef SOUND_IN #define SOUND_IN "mpg123,sndfile" #endif +#endif namespace MWSound From ebc49de85117bca4137b45cf95fe4a9e9a98d2fd Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Thu, 22 Mar 2012 00:39:19 +0200 Subject: [PATCH 124/488] Fix Bug #1: "Meshes rendered with wrong orientation" Discard the tranformation of the root NiNode when loading nif files (set the 'identity' transformation instead). After applying the fix test the following types of interiors: - Dwemer ruins (the bug was common here before the fix) - Ancestral tombs (the bug was common here before the fix) - Daedric shrines - Caves/grottos - Dunmer strongholds - Telvanni, imperial, redoran houses/towers/castles Also checked exteriors (although it is hard to do without terrain rendering) --- components/nif/nif_file.cpp | 9 +++++++++ components/nif/nif_types.hpp | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/components/nif/nif_file.cpp b/components/nif/nif_file.cpp index 52a37ba5c1..80ea7a0b7f 100644 --- a/components/nif/nif_file.cpp +++ b/components/nif/nif_file.cpp @@ -162,6 +162,15 @@ void NIFFile::parse() r->recName = rec; records[i] = r; r->read(this); + + // Discard tranformations for the root node, otherwise some meshes + // occasionally get wrong orientation. Only for NiNode-s for now, but + // can be expanded if needed. + // This should be rewritten when the method is cleaned up. + if (0 == i && rec == "NiNode") + { + static_cast(r)->trafo = Nif::Transformation::getIdentity(); + } } /* After the data, the nif contains an int N and then a list of N diff --git a/components/nif/nif_types.hpp b/components/nif/nif_types.hpp index 17cec19bcd..ce7a0de628 100644 --- a/components/nif/nif_types.hpp +++ b/components/nif/nif_types.hpp @@ -59,6 +59,21 @@ struct Transformation Matrix rotation; float scale; Vector velocity; + + static const Transformation* getIdentity() + { + static Transformation* identity = NULL; + if (NULL == identity) + { + identity = new Transformation(); + identity->scale = 1.0f; + identity->rotation.v[0].array[0] = 1.0f; + identity->rotation.v[1].array[1] = 1.0f; + identity->rotation.v[2].array[2] = 1.0f; + } + + return identity; + } }; #pragma pack(pop) From 8056a7f20b22d57c77a9cb42addcad84da022672 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 18:20:32 -0700 Subject: [PATCH 125/488] Throw an exception when looking up a sound instead of returning an empty string --- apps/openmw/mwsound/soundmanager.cpp | 39 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 5a6b07e0a8..cce1bfefe9 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -86,7 +86,8 @@ namespace MWSound float &volume, float &min, float &max) { const ESM::Sound *snd = mEnvironment.mWorld->getStore().sounds.search(soundId); - if(snd == NULL) return ""; + if(snd == NULL) + throw std::runtime_error(std::string("Failed to lookup sound ")+soundId); if(snd->data.volume == 0) volume = 0.0f; @@ -224,34 +225,32 @@ namespace MWSound void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) { float min, max; - std::string file = lookup(soundId, volume, min, max); - if(!file.empty()) + try { - try - { - Sound *sound; - sound = mOutput->playSound(file, volume, pitch, loop); - mLooseSounds[soundId] = SoundPtr(sound); - } - catch(std::exception &e) - { - std::cout <<"Sound play error: "<playSound(file, volume, pitch, loop); + mLooseSounds[soundId] = SoundPtr(sound); + } + catch(std::exception &e) + { + std::cout <<"Sound play error: "< Date: Wed, 21 Mar 2012 18:35:20 -0700 Subject: [PATCH 126/488] Replace the sound file extension when opening fails This should make it more efficient to lookup a sound instead of checking each time it's played. A better method would perhaps be to check if the resource exists when the ESM is loaded and replace it then as needed. --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 12 +++++++++++- apps/openmw/mwsound/mpgsnd_decoder.cpp | 12 +++++++++++- apps/openmw/mwsound/soundmanager.cpp | 15 +-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 41859f7fd9..edc9e6e295 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -238,7 +238,17 @@ size_t FFmpeg_Decoder::MyStream::readAVAudioData(void *data, size_t length) void FFmpeg_Decoder::open(const std::string &fname) { close(); - mDataStream = mResourceMgr.openResource(fname); + try + { + mDataStream = mResourceMgr.openResource(fname); + } + catch(Ogre::Exception &e) + { + std::string::size_type pos = fname.rfind('.'); + if(pos == std::string::npos) + throw; + mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3"); + } if((mFormatCtx=avformat_alloc_context()) == NULL) fail("Failed to allocate context"); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index f576833a82..e014008a06 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -81,7 +81,17 @@ off_t MpgSnd_Decoder::ogrempg_lseek(void *user_data, off_t offset, int whence) void MpgSnd_Decoder::open(const std::string &fname) { close(); - mDataStream = mResourceMgr.openResource(fname); + try + { + mDataStream = mResourceMgr.openResource(fname); + } + catch(Ogre::Exception &e) + { + std::string::size_type pos = fname.rfind('.'); + if(pos == std::string::npos) + throw; + mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3"); + } SF_VIRTUAL_IO streamIO = { ogresf_get_filelen, ogresf_seek, diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index cce1bfefe9..6c415957fb 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -107,14 +107,7 @@ namespace MWSound max = std::max(min, max); } - std::string fname = std::string("Sound\\")+snd->sound; - if(!mResourceMgr->resourceExistsInAnyGroup(fname)) - { - std::string::size_type pos = fname.rfind('.'); - if(pos != std::string::npos) - fname = fname.substr(0, pos)+".mp3"; - } - return fname; + return std::string("Sound/")+snd->sound; } // Add a sound to the list and play it @@ -207,12 +200,6 @@ namespace MWSound { // The range values are not tested std::string filePath = std::string("Sound\\")+filename; - if(!mResourceMgr->resourceExistsInAnyGroup(filePath)) - { - std::string::size_type pos = filePath.rfind('.'); - if(pos != std::string::npos) - filePath = filePath.substr(0, pos)+".mp3"; - } play3d(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false); } From e6fe1c026117afba201d0abf607f50d3e94e37c4 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 19:08:11 -0700 Subject: [PATCH 127/488] Remove a mostly unneeded wrapper function --- apps/openmw/mwsound/soundmanager.cpp | 47 ++++++++++++---------------- apps/openmw/mwsound/soundmanager.hpp | 4 --- 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 6c415957fb..36e058c6fe 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -110,27 +110,6 @@ namespace MWSound return std::string("Sound/")+snd->sound; } - // Add a sound to the list and play it - void SoundManager::play3d(const std::string &file, - MWWorld::Ptr ptr, - const std::string &id, - float volume, float pitch, - float min, float max, - bool loop, bool untracked) - { - try - { - const ESM::Position &pos = ptr.getCellRef().pos; - SoundPtr sound(mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop)); - - if(untracked) mLooseSounds[id] = sound; - else mActiveSounds[ptr][id] = sound; - } - catch(std::exception &e) - { - std::cout <<"Sound Error: "<playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false)); + mActiveSounds[ptr]["_say_sound"] = sound; + } + catch(std::exception &e) + { + std::cout <<"Sound Error: "<playSound3D(file, pos.pos, volume, pitch, min, max, loop)); + if(untracked) mLooseSounds[soundId] = sound; + else mActiveSounds[ptr][soundId] = sound; } catch(std::exception &e) { - std::cout <<"Sound play error: "< Date: Wed, 21 Mar 2012 19:21:36 -0700 Subject: [PATCH 128/488] Use a separate method to check for finished sounds and update the listener --- apps/openmw/mwsound/soundmanager.cpp | 90 +++++++++++++++------------- apps/openmw/mwsound/soundmanager.hpp | 1 + 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 36e058c6fe..4cc4eec934 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -370,64 +370,68 @@ namespace MWSound } } - void SoundManager::update(float duration) + void SoundManager::updateSounds(float duration) { static float timePassed = 0.0; timePassed += duration; - if(timePassed > (1.0f/30.0f)) + if(timePassed < (1.0f/30.0f)) + return; + timePassed = 0.0f; + + // Make sure music is still playing + if(!isMusicPlaying()) + startRandomTitle(); + + Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); + Ogre::Vector3 nPos, nDir, nUp; + nPos = cam->getRealPosition(); + nDir = cam->getRealDirection(); + nUp = cam->getRealUp(); + + // The output handler is expecting vectors oriented like the game + // (that is, -Z goes down, +Y goes forward), but that's not what we + // get from Ogre's camera, so we have to convert. + float pos[3] = { nPos[0], -nPos[2], nPos[1] }; + float at[3] = { nDir[0], -nDir[2], nDir[1] }; + float up[3] = { nUp[0], -nUp[2], nUp[1] }; + mOutput->updateListener(pos, at, up); + + // Check if any sounds are finished playing, and trash them + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { - timePassed = 0.0f; - - // Make sure music is still playing - if(!isMusicPlaying()) - startRandomTitle(); - - Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); - Ogre::Vector3 nPos, nDir, nUp; - nPos = cam->getRealPosition(); - nDir = cam->getRealDirection(); - nUp = cam->getRealUp(); - - // The output handler is expecting vectors oriented like the game - // (that is, -Z goes down, +Y goes forward), but that's not what we - // get from Ogre's camera, so we have to convert. - float pos[3] = { nPos[0], -nPos[2], nPos[1] }; - float at[3] = { nDir[0], -nDir[2], nDir[1] }; - float up[3] = { nUp[0], -nUp[2], nUp[1] }; - mOutput->updateListener(pos, at, up); - - // Check if any sounds are finished playing, and trash them - SoundMap::iterator snditer = mActiveSounds.begin(); - while(snditer != mActiveSounds.end()) - { - IDMap::iterator iditer = snditer->second.begin(); - while(iditer != snditer->second.end()) - { - if(!iditer->second->isPlaying()) - snditer->second.erase(iditer++); - else - iditer++; - } - if(snditer->second.empty()) - mActiveSounds.erase(snditer++); - else - snditer++; - } - - IDMap::iterator iditer = mLooseSounds.begin(); - while(iditer != mLooseSounds.end()) + IDMap::iterator iditer = snditer->second.begin(); + while(iditer != snditer->second.end()) { if(!iditer->second->isPlaying()) - mLooseSounds.erase(iditer++); + snditer->second.erase(iditer++); else iditer++; } + if(snditer->second.empty()) + mActiveSounds.erase(snditer++); + else + snditer++; } + IDMap::iterator iditer = mLooseSounds.begin(); + while(iditer != mLooseSounds.end()) + { + if(!iditer->second->isPlaying()) + mLooseSounds.erase(iditer++); + else + iditer++; + } + } + + void SoundManager::update(float duration) + { + updateSounds(duration); updateRegionSound(duration); } + // Default readAll implementation, for decoders that can't do anything // better void Sound_Decoder::readAll(std::vector &output) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 5c64d912d3..433f2c169c 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -56,6 +56,7 @@ namespace MWSound float &volume, float &min, float &max); void streamMusicFull(const std::string& filename); bool isPlaying(MWWorld::Ptr ptr, const std::string &id) const; + void updateSounds(float duration); void updateRegionSound(float duration); protected: From f11e3e39a146187ac9c4df8bd8f6a8d051f491f4 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 20:15:01 -0700 Subject: [PATCH 129/488] Add an enumerate method to the sound output interface --- apps/openmw/mwsound/openal_output.cpp | 14 ++++++++++++++ apps/openmw/mwsound/openal_output.hpp | 1 + apps/openmw/mwsound/sound_output.hpp | 1 + apps/openmw/mwsound/soundmanager.cpp | 6 ++++++ 4 files changed, 22 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ed7be21f63..6ee36b1ab1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -358,6 +358,20 @@ void OpenAL_Sound::update(const float *pos) // // An OpenAL output device // +std::vector OpenAL_Output::enumerate() +{ + std::vector devlist; + const ALCchar *devnames; + + devnames = alcGetString(NULL, ALC_DEVICE_SPECIFIER); + while(devnames && *devnames) + { + devlist.push_back(devnames); + devnames += strlen(devnames)+1; + } + return devlist; +} + void OpenAL_Output::init(const std::string &devname) { if(mDevice || mContext) diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index aeb64ad0d1..6e41c7deed 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -38,6 +38,7 @@ namespace MWSound ALuint getBuffer(const std::string &fname); void bufferFinished(ALuint buffer); + virtual std::vector enumerate(); virtual void init(const std::string &devname=""); virtual void deinit(); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index a2a035e710..14b61e6099 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -16,6 +16,7 @@ namespace MWSound { SoundManager &mManager; + virtual std::vector enumerate() = 0; virtual void init(const std::string &devname="") = 0; virtual void deinit() = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 4cc4eec934..e3931afd64 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -53,6 +53,12 @@ namespace MWSound try { mOutput.reset(new DEFAULT_OUTPUT(*this)); + + std::vector names = mOutput->enumerate(); + std::cout <<"Enumerated output devices:"<< std::endl; + for(size_t i = 0;i < names.size();i++) + std::cout <<" "<init(); } catch(std::exception &e) From 15317796bf67b5834ef924ef0b09d61c14c6b0be Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 22:49:40 -0700 Subject: [PATCH 130/488] Handle the wav -> mp3 extension conversion in the sound output backend --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 12 +----------- apps/openmw/mwsound/mpgsnd_decoder.cpp | 12 +----------- apps/openmw/mwsound/openal_output.cpp | 12 +++++++++++- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index edc9e6e295..41859f7fd9 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -238,17 +238,7 @@ size_t FFmpeg_Decoder::MyStream::readAVAudioData(void *data, size_t length) void FFmpeg_Decoder::open(const std::string &fname) { close(); - try - { - mDataStream = mResourceMgr.openResource(fname); - } - catch(Ogre::Exception &e) - { - std::string::size_type pos = fname.rfind('.'); - if(pos == std::string::npos) - throw; - mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3"); - } + mDataStream = mResourceMgr.openResource(fname); if((mFormatCtx=avformat_alloc_context()) == NULL) fail("Failed to allocate context"); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index e014008a06..f576833a82 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -81,17 +81,7 @@ off_t MpgSnd_Decoder::ogrempg_lseek(void *user_data, off_t offset, int whence) void MpgSnd_Decoder::open(const std::string &fname) { close(); - try - { - mDataStream = mResourceMgr.openResource(fname); - } - catch(Ogre::Exception &e) - { - std::string::size_type pos = fname.rfind('.'); - if(pos == std::string::npos) - throw; - mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3"); - } + mDataStream = mResourceMgr.openResource(fname); SF_VIRTUAL_IO streamIO = { ogresf_get_filelen, ogresf_seek, diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 6ee36b1ab1..456ee534c1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -465,7 +465,17 @@ ALuint OpenAL_Output::getBuffer(const std::string &fname) int srate; DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); + try + { + decoder->open(fname); + } + catch(Ogre::FileNotFoundException &e) + { + std::string::size_type pos = fname.rfind('.'); + if(pos == std::string::npos) + throw; + decoder->open(fname.substr(0, pos)+".mp3"); + } decoder->getInfo(&srate, &chans, &type); format = getALFormat(chans, type); From bac6df5563ea7ca50c932a416b53e60dd6237af0 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 21 Mar 2012 23:32:24 -0700 Subject: [PATCH 131/488] Avoid leaking an ffmpeg stream --- apps/openmw/mwsound/ffmpeg_decoder.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.cpp b/apps/openmw/mwsound/ffmpeg_decoder.cpp index 41859f7fd9..9298bf8488 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.cpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.cpp @@ -303,6 +303,7 @@ void FFmpeg_Decoder::close() stream->clearPackets(); avcodec_close(stream->mCodecCtx); av_free(stream->mDecodedData); + delete stream; mStreams.erase(mStreams.begin()); } From fd4826d06fc9cb6489f10c177c2fcee4786939e0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 22 Mar 2012 12:34:43 +0100 Subject: [PATCH 132/488] Fix for Bug #222, config is always written to user location now --- apps/launcher/datafilespage.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index c96fc2c7b6..6d8c1f19dd 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -1057,16 +1057,8 @@ void DataFilesPage::writeConfig(QString profile) return; } - // Prepare the OpenMW config - QString config = QString::fromStdString((mCfgMgr.getLocalPath() / "openmw.cfg").string()); - QFile file(config); - - if (!file.exists()) { - config = QString::fromStdString((mCfgMgr.getUserPath() / "openmw.cfg").string()); - } - - // Open the config as a QFile - file.setFileName(config); + // Open the OpenMW config as a QFile + QFile file(QString::fromStdString((mCfgMgr.getUserPath() / "openmw.cfg").string())); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { // File cannot be opened or created From 73a1b256a880d69dbd0de24c35be4752223b16e0 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 22 Mar 2012 12:42:08 +0100 Subject: [PATCH 133/488] Changed warning dialog text to be less ambiguous --- apps/launcher/datafilespage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index 6d8c1f19dd..c15274e749 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -225,7 +225,7 @@ void DataFilesPage::setupDataFiles() msgBox.setIcon(QMessageBox::Warning); msgBox.setStandardButtons(QMessageBox::Cancel); msgBox.setText(tr("
Could not find the Data Files location

\ - The directory containing the Data Files was not found.

\ + The directory containing the data files was not found.

\ Press \"Browse...\" to specify the location manually.
")); QAbstractButton *dirSelectButton = From 6df6cbc71a002480f37f0f3296b4715c01d02891 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 22 Mar 2012 14:12:43 +0100 Subject: [PATCH 134/488] updated changelog once more --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index 8f360235fd..4c265c4624 100644 --- a/readme.txt +++ b/readme.txt @@ -144,6 +144,7 @@ Bug #207: Ogre.log not written Bug #209: Sounds do not play Bug #210: Ogre crash at Dren plantation Bug #214: Unsupported file format version +Bug #222: Launcher is writing openmw.cfg file to wrong location Feature #9: NPC Dialogue Window Feature #16/42: New sky/weather implementation Feature #40: Fading From 2e288192433c8834ea959a901633b89f061477a4 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 22 Mar 2012 18:39:10 -0700 Subject: [PATCH 135/488] Avoid trying to play an ambient sound if there's no chance for any to play --- apps/openmw/mwsound/soundmanager.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index e3931afd64..38b9bee256 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -341,9 +341,6 @@ namespace MWSound } const ESM::Region *regn = mEnvironment.mWorld->getStore().regions.find(regionName); - if(regn->soundList.size() == 0) - return; - std::vector::const_iterator soundIter; if(total == 0) { @@ -353,6 +350,8 @@ namespace MWSound total += (int)soundIter->chance; soundIter++; } + if(total == 0) + return; } int r = rand() % total; //old random code From 277597c567efa0b0fe50191dc4026c43716f374a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 22 Mar 2012 18:44:55 -0700 Subject: [PATCH 136/488] Fix DEFAULT_OUTPUT for OpenAL_Output --- apps/openmw/mwsound/openal_output.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 6e41c7deed..33ab7a2aa9 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -63,7 +63,7 @@ namespace MWSound friend class SoundManager; }; #ifndef DEFAULT_OUTPUT -#define DEFAULT_OUTPUT OpenAL_Output +#define DEFAULT_OUTPUT (::MWSound::OpenAL_Output) #endif }; From 2f0af42261ca048d20034e7273a32b92494aa545 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 22 Mar 2012 23:51:00 -0700 Subject: [PATCH 137/488] Use the ALC_ENUMERATE_ALL_EXT extension with OpenAL when available --- apps/openmw/mwsound/openal_output.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 456ee534c1..b9a32d57c0 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -363,7 +363,10 @@ std::vector OpenAL_Output::enumerate() std::vector devlist; const ALCchar *devnames; - devnames = alcGetString(NULL, ALC_DEVICE_SPECIFIER); + if(alcIsExtensionPresent(NULL, "ALC_ENUMERATE_ALL_EXT")) + devnames = alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER); + else + devnames = alcGetString(NULL, ALC_DEVICE_SPECIFIER); while(devnames && *devnames) { devlist.push_back(devnames); @@ -380,7 +383,10 @@ void OpenAL_Output::init(const std::string &devname) mDevice = alcOpenDevice(devname.c_str()); if(!mDevice) fail("Failed to open \""+devname+"\""); - std::cout << "Opened \""< Date: Fri, 23 Mar 2012 00:31:01 -0700 Subject: [PATCH 138/488] Properly report the default device when opening sound fails --- apps/openmw/mwsound/openal_output.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index b9a32d57c0..5e61cb94f2 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -382,7 +382,12 @@ void OpenAL_Output::init(const std::string &devname) mDevice = alcOpenDevice(devname.c_str()); if(!mDevice) - fail("Failed to open \""+devname+"\""); + { + if(devname.empty()) + fail("Failed to open default device"); + else + fail("Failed to open \""+devname+"\""); + } if(alcIsExtensionPresent(mDevice, "ALC_ENUMERATE_ALL_EXT")) std::cout << "Opened \""< Date: Fri, 23 Mar 2012 13:02:07 +0100 Subject: [PATCH 139/488] Adding readme to windows builds --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a454f211b2..7a1b983358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,6 +347,7 @@ if(WIN32) FILE(GLOB files "${OpenMW_BINARY_DIR}/Release/*.*") INSTALL(FILES ${files} DESTINATION ".") INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg") + INSTALL(FILES "${OpenMW_SOURCE_DIR}/readme.txt" DESTINATION ".") INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION ".") SET(CPACK_GENERATOR "NSIS") @@ -357,6 +358,7 @@ if(WIN32) SET(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO}) SET(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE}) SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW;esmtool;Esmtool;omwlauncher;OpenMW Launcher") + set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Readme.lnk' '\$INSTDIR\\\\readme.txt'") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/readme.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${OpenMW_SOURCE_DIR}/GPL3.txt") SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") From f9bb19fcdc8111ab405cbc8673dbf9c5800b1986 Mon Sep 17 00:00:00 2001 From: gugus Date: Fri, 23 Mar 2012 15:18:09 +0100 Subject: [PATCH 140/488] begining factions --- apps/openmw/mwworld/player.cpp | 53 ++++++++++++++++++++++++++++++++++ apps/openmw/mwworld/player.hpp | 21 ++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 5bfb82138c..270ffa55ca 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -89,4 +89,57 @@ namespace MWWorld MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); } + + Player::Faction Player::getFaction(std::string faction) + { + for(std::list::iterator it = mFactions.begin(); it != mFactions.end();it++) + { + if(it->name == faction) return *it; + } + //faction was not found->dummy faction + Player::Faction fact; + fact.id = "not found"; + fact.name = "not found"; + fact.rank = -10; + fact.expelled = false; + return fact; + } + + void Player::addFaction(std::string faction) + { + if(getFaction(faction).name == "not found") + { + Player::Faction fact; + const ESM::Faction* eFact = mWorld.getStore().factions.find(faction); + fact.expelled = false; + fact.rank = 0; + fact.name = faction; + fact.id = eFact->id; + mFactions.push_back(fact); + } + } + + int Player::getRank(std::string faction) + { + Player::Faction fact = getFaction(faction); + return fact.rank; + } + + void Player::setRank(std::string faction,int rank) + { + Player::Faction fact = getFaction(faction); + fact.rank = rank; + } + + bool Player::isExpelled(std::string faction) + { + Player::Faction fact = getFaction(faction); + return fact.expelled; + } + + void Player::setExpelled(std::string faction,bool expelled) + { + Player::Faction fact = getFaction(faction); + fact.expelled = expelled; + } } diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index 01c71da437..8129c4d8ea 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -4,6 +4,7 @@ #include "OgreCamera.h" #include +#include #include "../mwworld/refdata.hpp" #include "../mwworld/ptr.hpp" @@ -20,6 +21,13 @@ namespace MWWorld /// \brief NPC object representing the player and additional player data class Player { + struct Faction + { + std::string id,name; + int rank; + bool expelled; + }; + ESMS::LiveCellRef mPlayer; MWWorld::Ptr::CellStore *mCellStore; MWRender::Player *mRenderer; @@ -29,9 +37,12 @@ namespace MWWorld std::string mRace; std::string mBirthsign; ESM::Class *mClass; + std::list mFactions; bool mAutoMove; int mForwardBackward; + Faction getFaction(std::string faction); + public: Player(MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world); @@ -108,6 +119,16 @@ namespace MWWorld void setAutoMove (bool enable); + void addFaction(std::string faction); + + int getRank(std::string faction); + + void setRank(std::string faction,int rank); + + bool isExpelled(std::string faction); + + void setExpelled(std::string faction,bool expelled); + void setLeftRight (int value); void setForwardBackward (int value); From 319022d962197b73f09d47418ff29ede2f6dcc2d Mon Sep 17 00:00:00 2001 From: gugus Date: Fri, 23 Mar 2012 15:24:39 +0100 Subject: [PATCH 141/488] speed up dialogue start-up. --- apps/openmw/mwdialogue/dialoguemanager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index 91785819f9..451c49b1eb 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -531,6 +531,13 @@ namespace MWDialogue mChoice = -1; mIsInChoice = false; mCompilerContext.setExtensions (&extensions); + mDialogueMap.clear(); + actorKnownTopics.clear(); + ESMS::RecListT::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list; + for(ESMS::RecListT::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) + { + mDialogueMap[it->first] = it->second; + } } void DialogueManager::addTopic(std::string topic) @@ -566,13 +573,7 @@ namespace MWDialogue mActor = actor; - mDialogueMap.clear(); actorKnownTopics.clear(); - ESMS::RecListT::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list; - for(ESMS::RecListT::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) - { - mDialogueMap[it->first] = it->second; - } //initialise the GUI mEnvironment.mInputManager->setGuiMode(MWGui::GM_Dialogue); @@ -585,6 +586,7 @@ namespace MWDialogue //greeting bool greetingFound = false; //ESMS::RecListT::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list; + ESMS::RecListT::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list; for(ESMS::RecListT::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) { ESM::Dialogue ndialogue = it->second; From 6d33ad248d49258342cd7f56efa2adf64b414f11 Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Fri, 23 Mar 2012 22:08:02 +0200 Subject: [PATCH 142/488] Fix memory leak in getIdentity method Replace static pointer and new() operator with normal static variable --- components/nif/nif_types.hpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/components/nif/nif_types.hpp b/components/nif/nif_types.hpp index ce7a0de628..83f912bfd2 100644 --- a/components/nif/nif_types.hpp +++ b/components/nif/nif_types.hpp @@ -62,17 +62,18 @@ struct Transformation static const Transformation* getIdentity() { - static Transformation* identity = NULL; - if (NULL == identity) + static Transformation identity; + static bool iset = false; + if (!iset) { - identity = new Transformation(); - identity->scale = 1.0f; - identity->rotation.v[0].array[0] = 1.0f; - identity->rotation.v[1].array[1] = 1.0f; - identity->rotation.v[2].array[2] = 1.0f; + identity.scale = 1.0f; + identity.rotation.v[0].array[0] = 1.0f; + identity.rotation.v[1].array[1] = 1.0f; + identity.rotation.v[2].array[2] = 1.0f; + iset = true; } - return identity; + return &identity; } }; #pragma pack(pop) From e6c55c144c7603a52e76cb814331f462b16f66fd Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Fri, 23 Mar 2012 22:15:45 +0200 Subject: [PATCH 143/488] Fix tabulation/formatting --- components/nif/nif_types.hpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/components/nif/nif_types.hpp b/components/nif/nif_types.hpp index 83f912bfd2..ee796cc991 100644 --- a/components/nif/nif_types.hpp +++ b/components/nif/nif_types.hpp @@ -55,26 +55,26 @@ struct Matrix struct Transformation { - Vector pos; - Matrix rotation; - float scale; - Vector velocity; + Vector pos; + Matrix rotation; + float scale; + Vector velocity; - static const Transformation* getIdentity() - { - static Transformation identity; - static bool iset = false; - if (!iset) - { - identity.scale = 1.0f; - identity.rotation.v[0].array[0] = 1.0f; - identity.rotation.v[1].array[1] = 1.0f; - identity.rotation.v[2].array[2] = 1.0f; - iset = true; - } + static const Transformation* getIdentity() + { + static Transformation identity; + static bool iset = false; + if (!iset) + { + identity.scale = 1.0f; + identity.rotation.v[0].array[0] = 1.0f; + identity.rotation.v[1].array[1] = 1.0f; + identity.rotation.v[2].array[2] = 1.0f; + iset = true; + } - return &identity; - } + return &identity; + } }; #pragma pack(pop) From fa70a72b75690f095fb0bf84576245c274ba8742 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 24 Mar 2012 00:22:54 -0700 Subject: [PATCH 144/488] Remove some unused sound manager fields and constructor parameters --- apps/openmw/engine.cpp | 5 +---- apps/openmw/mwsound/soundmanager.cpp | 12 ++++-------- apps/openmw/mwsound/soundmanager.hpp | 12 ++---------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 57723cac99..5e49ae2f72 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -333,10 +333,7 @@ void OMW::Engine::go() mExtensions, mFpsLevel, mNewGame, mOgre, mCfgMgr.getLogPath().string() + std::string("/")); // Create sound system - mEnvironment.mSoundManager = new MWSound::SoundManager(mOgre->getRoot(), - mOgre->getCamera(), - mDataDirs, - mUseSound, mFSStrict, mEnvironment); + mEnvironment.mSoundManager = new MWSound::SoundManager(mUseSound, mEnvironment); // Create script system mScriptContext = new MWScript::CompilerContext (MWScript::CompilerContext::Type_Full, diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 38b9bee256..272956082a 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -38,10 +38,8 @@ namespace MWSound { - SoundManager::SoundManager(Ogre::Root *root, Ogre::Camera *camera, - const Files::PathContainer& dataDirs, - bool useSound, bool fsstrict, MWWorld::Environment& environment) - : mFSStrict(fsstrict) + SoundManager::SoundManager(bool useSound, MWWorld::Environment& environment) + : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) , mEnvironment(environment) { if(!useSound) @@ -67,8 +65,6 @@ namespace MWSound mOutput.reset(); return; } - - mResourceMgr = Ogre::ResourceGroupManager::getSingletonPtr(); } SoundManager::~SoundManager() @@ -161,8 +157,8 @@ namespace MWSound void SoundManager::startRandomTitle() { Ogre::StringVectorPtr filelist; - filelist = mResourceMgr->findResourceNames(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - "Music/"+mCurrentPlaylist+"/*"); + filelist = mResourceMgr.findResourceNames(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "Music/"+mCurrentPlaylist+"/*"); if(!filelist->size()) return; diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 433f2c169c..aef4a8ace9 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -31,13 +31,7 @@ namespace MWSound class SoundManager { - Ogre::ResourceGroupManager *mResourceMgr; - - // This is used for case insensitive and slash-type agnostic file - // finding. It takes DOS paths (any case, \\ slashes or / slashes) - // relative to the sound dir, and translates them into full paths - // of existing files in the filesystem, if they exist. - bool mFSStrict; + Ogre::ResourceGroupManager& mResourceMgr; MWWorld::Environment& mEnvironment; @@ -64,9 +58,7 @@ namespace MWSound friend class OpenAL_Output; public: - SoundManager(Ogre::Root*, Ogre::Camera*, - const Files::PathContainer& dataDir, bool useSound, bool fsstrict, - MWWorld::Environment& environment); + SoundManager(bool useSound, MWWorld::Environment& environment); ~SoundManager(); void stopMusic(); From 5cb90ab7044299fddad6028af3b2ab3985cd402a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 24 Mar 2012 03:49:03 -0700 Subject: [PATCH 145/488] Add some dummy copy constructors and assignment operators to prevent implicit versions from being used --- apps/openmw/mwsound/ffmpeg_decoder.hpp | 3 +++ apps/openmw/mwsound/mpgsnd_decoder.hpp | 3 +++ apps/openmw/mwsound/openal_output.cpp | 11 +++++++++++ apps/openmw/mwsound/openal_output.hpp | 3 +++ apps/openmw/mwsound/sound.hpp | 4 ++++ apps/openmw/mwsound/sound_decoder.hpp | 4 ++++ apps/openmw/mwsound/sound_output.hpp | 3 +++ apps/openmw/mwsound/soundmanager.hpp | 3 +++ 8 files changed, 34 insertions(+) diff --git a/apps/openmw/mwsound/ffmpeg_decoder.hpp b/apps/openmw/mwsound/ffmpeg_decoder.hpp index ae71c00523..4344397c70 100644 --- a/apps/openmw/mwsound/ffmpeg_decoder.hpp +++ b/apps/openmw/mwsound/ffmpeg_decoder.hpp @@ -42,6 +42,9 @@ namespace MWSound virtual void readAll(std::vector &output); virtual void rewind(); + FFmpeg_Decoder& operator=(const FFmpeg_Decoder &rhs); + FFmpeg_Decoder(const FFmpeg_Decoder &rhs); + FFmpeg_Decoder(); public: virtual ~FFmpeg_Decoder(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.hpp b/apps/openmw/mwsound/mpgsnd_decoder.hpp index 1d9e9d5e22..870773edc5 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.hpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.hpp @@ -40,6 +40,9 @@ namespace MWSound virtual void readAll(std::vector &output); virtual void rewind(); + MpgSnd_Decoder& operator=(const MpgSnd_Decoder &rhs); + MpgSnd_Decoder(const MpgSnd_Decoder &rhs); + MpgSnd_Decoder(); public: virtual ~MpgSnd_Decoder(); diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 5e61cb94f2..a0b9c3a724 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -76,6 +76,9 @@ class OpenAL_SoundStream : public Sound volatile bool mIsFinished; + OpenAL_SoundStream(const OpenAL_SoundStream &rhs); + OpenAL_SoundStream& operator=(const OpenAL_SoundStream &rhs); + public: OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder); virtual ~OpenAL_SoundStream(); @@ -148,6 +151,10 @@ struct OpenAL_Output::StreamThread { mStreams.clear(); mMutex.unlock(); } + +private: + StreamThread(const StreamThread &rhs); + StreamThread& operator=(const StreamThread &rhs); }; @@ -308,6 +315,10 @@ class OpenAL_Sound : public Sound ALuint mSource; ALuint mBuffer; + + OpenAL_Sound(const OpenAL_Sound &rhs); + OpenAL_Sound& operator=(const OpenAL_Sound &rhs); + public: OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf); virtual ~OpenAL_Sound(); diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 33ab7a2aa9..e8154e9063 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -52,6 +52,9 @@ namespace MWSound virtual void updateListener(const float *pos, const float *atdir, const float *updir); + OpenAL_Output& operator=(const OpenAL_Output &rhs); + OpenAL_Output(const OpenAL_Output &rhs); + OpenAL_Output(SoundManager &mgr); virtual ~OpenAL_Output(); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 84725464be..f9e7ab4278 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -9,7 +9,11 @@ namespace MWSound virtual bool isPlaying() = 0; virtual void update(const float *pos) = 0; + Sound& operator=(const Sound &rhs); + Sound(const Sound &rhs); + public: + Sound() { } virtual ~Sound() { } friend class OpenAL_Output; diff --git a/apps/openmw/mwsound/sound_decoder.hpp b/apps/openmw/mwsound/sound_decoder.hpp index e076c7b567..9c28d5ff55 100644 --- a/apps/openmw/mwsound/sound_decoder.hpp +++ b/apps/openmw/mwsound/sound_decoder.hpp @@ -38,6 +38,10 @@ namespace MWSound Sound_Decoder() : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) { } virtual ~Sound_Decoder() { } + + private: + Sound_Decoder(const Sound_Decoder &rhs); + Sound_Decoder& operator=(const Sound_Decoder &rhs); }; } diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 14b61e6099..1722165e49 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -29,6 +29,9 @@ namespace MWSound virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; + Sound_Output& operator=(const Sound_Output &rhs); + Sound_Output(const Sound_Output &rhs); + Sound_Output(SoundManager &mgr) : mManager(mgr) { } public: virtual ~Sound_Output() { } diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index aef4a8ace9..b7c883a130 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -53,6 +53,9 @@ namespace MWSound void updateSounds(float duration); void updateRegionSound(float duration); + SoundManager(const SoundManager &rhs); + SoundManager& operator=(const SoundManager &rhs); + protected: DecoderPtr getDecoder(); friend class OpenAL_Output; From f4898539e9c99f0f2c4a36c0f47bf0f90dcc0290 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 13:06:01 +0100 Subject: [PATCH 146/488] added some code that doesn't do anything yet, waiting for ogre 1.8 --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwrender/occlusionquery.cpp | 27 +++++++++++++++++++++++ apps/openmw/mwrender/occlusionquery.hpp | 27 +++++++++++++++++++++++ apps/openmw/mwrender/renderingmanager.cpp | 3 +++ apps/openmw/mwrender/renderingmanager.hpp | 7 ++++-- 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 apps/openmw/mwrender/occlusionquery.cpp create mode 100644 apps/openmw/mwrender/occlusionquery.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2630098f5c..7d4836d3b1 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -15,7 +15,7 @@ source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender renderingmanager debugging sky player animation npcanimation creatureanimation actors objects - renderinginterface localmap + renderinginterface localmap occlusionquery ) add_openmw_dir (mwinput diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp new file mode 100644 index 0000000000..395660bb5c --- /dev/null +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -0,0 +1,27 @@ +#include "occlusionquery.hpp" + +#include +#include + +using namespace MWRender; +using namespace Ogre; + +OcclusionQuery::OcclusionQuery() : + mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0) +{ + try { + RenderSystem* renderSystem = Root::getSingleton().getRenderSystem(); + + mSunTotalAreaQuery = renderSystem->createHardwareOcclusionQuery(); + mSunVisibleAreaQuery = renderSystem->createHardwareOcclusionQuery(); + + mSupported = (mSunTotalAreaQuery != 0) && (mSunVisibleAreaQuery != 0); + } + catch (Ogre::Exception e) + { + mSupported = false; + } + + if (!mSupported) + std::cout << "Hardware occlusion queries not supported." << std::endl; +} diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp new file mode 100644 index 0000000000..619b072ee0 --- /dev/null +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -0,0 +1,27 @@ +#ifndef _GAME_OCCLUSION_QUERY_H +#define _GAME_OCCLUSION_QUERY_H + +#include + +namespace MWRender +{ + /// + /// \brief Implements hardware occlusion queries on the GPU + /// + class OcclusionQuery + { + public: + OcclusionQuery(); + + bool supported(); + ///< returns true if occlusion queries are supported on the user's hardware + + private: + Ogre::HardwareOcclusionQuery* mSunTotalAreaQuery; + Ogre::HardwareOcclusionQuery* mSunVisibleAreaQuery; + + bool mSupported; + }; +} + +#endif diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index e2aea19c6e..78287dadb5 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -49,6 +49,8 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); cameraPitchNode->attachObject(mRendering.getCamera()); + + mOcclusionQuery = new OcclusionQuery(); //mSkyManager = 0; mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera(), &environment); @@ -65,6 +67,7 @@ RenderingManager::~RenderingManager () delete mPlayer; delete mSkyManager; delete mLocalMap; + delete mOcclusionQuery; } MWRender::SkyManager* RenderingManager::getSkyManager() diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 78a1d2fdb7..996396633c 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -25,6 +25,7 @@ #include "actors.hpp" #include "player.hpp" #include "localmap.hpp" +#include "occlusionquery.hpp" namespace Ogre { @@ -131,9 +132,11 @@ class RenderingManager: private RenderingInterface { private: void setAmbientMode(); - + SkyManager* mSkyManager; - + + OcclusionQuery* mOcclusionQuery; + OEngine::Render::OgreRenderer &mRendering; MWRender::Objects mObjects; From 99b2b6b6482cc967694b8f62057367d2f47626ad Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 14:46:48 +0100 Subject: [PATCH 147/488] ogre 1.8 fixes --- apps/openmw/mwrender/terrainmaterial.hpp | 3 ++ components/bsa/bsa_archive.cpp | 31 ++++++++++++++++++-- components/bsa/bsa_file.cpp | 4 +-- components/bsa/bsa_file.hpp | 4 +-- libs/openengine/bullet/BulletShapeLoader.cpp | 8 ++--- 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/terrainmaterial.hpp b/apps/openmw/mwrender/terrainmaterial.hpp index 7c0b87ce46..798821d616 100644 --- a/apps/openmw/mwrender/terrainmaterial.hpp +++ b/apps/openmw/mwrender/terrainmaterial.hpp @@ -63,6 +63,9 @@ namespace Ogre public: SM2Profile(TerrainMaterialGenerator* parent, const String& name, const String& desc); ~SM2Profile(); + + bool isVertexCompressionSupported() const {return false;} + MaterialPtr generate(const Terrain* terrain); MaterialPtr generateForCompositeMap(const Terrain* terrain); uint8 getMaxLayers(const Terrain* terrain) const; diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 72d15944d5..80d92dd521 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -256,8 +256,12 @@ public: return DataStreamPtr(new Mangle2OgreStream(strm)); } +bool exists(const String& filename) { + return cexists(filename); +} + // Check if the file exists. - bool exists(const String& filename) { + bool cexists(const String& filename) const { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' || filename.at(filename.length() - 1) == '"' || filename.at(filename.length() - 1) == '>' || filename.at(filename.length() - 1) == ':' @@ -308,6 +312,29 @@ return arc.exists(passed.c_str()); located in BSAs. So instead we channel it through exists() and set up a single-element result list if the file is found. */ + FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, + bool dirs = false) const + { + FileInfoListPtr ptr = FileInfoListPtr(new FileInfoList()); + + // Check if the file exists (only works for single files - wild + // cards and recursive search isn't implemented.) + if(cexists(pattern)) + { + FileInfo fi; + fi.archive = this; + fi.filename = pattern; + // It apparently doesn't matter that we return bogus + // information + fi.path = ""; + fi.compressedSize = fi.uncompressedSize = 0; + + ptr->push_back(fi); + } + + return ptr; + } + FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, bool dirs = false) { @@ -315,7 +342,7 @@ return arc.exists(passed.c_str()); // Check if the file exists (only works for single files - wild // cards and recursive search isn't implemented.) - if(exists(pattern)) + if(cexists(pattern)) { FileInfo fi; fi.archive = this; diff --git a/components/bsa/bsa_file.cpp b/components/bsa/bsa_file.cpp index 95358a3628..f19606703c 100644 --- a/components/bsa/bsa_file.cpp +++ b/components/bsa/bsa_file.cpp @@ -148,9 +148,9 @@ void BSAFile::readHeader() } /// Get the index of a given file name, or -1 if not found -int BSAFile::getIndex(const char *str) +int BSAFile::getIndex(const char *str) const { - Lookup::iterator it; + Lookup::const_iterator it; it = lookup.find(str); if(it == lookup.end()) return -1; diff --git a/components/bsa/bsa_file.hpp b/components/bsa/bsa_file.hpp index f54a64d2af..95fac0f4d7 100644 --- a/components/bsa/bsa_file.hpp +++ b/components/bsa/bsa_file.hpp @@ -93,7 +93,7 @@ class BSAFile void readHeader(); /// Get the index of a given file name, or -1 if not found - int getIndex(const char *str); + int getIndex(const char *str) const; public: @@ -119,7 +119,7 @@ class BSAFile */ /// Check if a file exists - bool exists(const char *file) { return getIndex(file) != -1; } + bool exists(const char *file) const { return getIndex(file) != -1; } /** Open a file contained in the archive. Throws an exception if the file doesn't exist. diff --git a/libs/openengine/bullet/BulletShapeLoader.cpp b/libs/openengine/bullet/BulletShapeLoader.cpp index 48b87e1e8c..01b6363d9a 100644 --- a/libs/openengine/bullet/BulletShapeLoader.cpp +++ b/libs/openengine/bullet/BulletShapeLoader.cpp @@ -62,17 +62,17 @@ size_t BulletShape::calculateSize() const //============================================================================================================= -template<> BulletShapeManager *Ogre::Singleton::ms_Singleton = 0; +template<> BulletShapeManager *Ogre::Singleton::msSingleton = 0; BulletShapeManager *BulletShapeManager::getSingletonPtr() { - return ms_Singleton; + return msSingleton; } BulletShapeManager &BulletShapeManager::getSingleton() { - assert(ms_Singleton); - return(*ms_Singleton); + assert(msSingleton); + return(*msSingleton); } BulletShapeManager::BulletShapeManager() From 71d3f9bd512edc078272468e1243e2deaee1bb0e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 24 Mar 2012 08:12:04 -0700 Subject: [PATCH 148/488] Get the object reference's position once when updating its sounds --- apps/openmw/mwsound/soundmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 272956082a..3b1f188e70 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -308,10 +308,10 @@ namespace MWSound if(snditer == mActiveSounds.end()) return; + const ESM::Position &pos = ptr.getCellRef().pos; IDMap::iterator iditer = snditer->second.begin(); while(iditer != snditer->second.end()) { - const ESM::Position &pos = ptr.getCellRef().pos; iditer->second->update(pos.pos); iditer++; } From 743ea0c9be16a6864bf861db101dd5901452045a Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 17:59:26 +0100 Subject: [PATCH 149/488] use hardware occlusion query for sun glare effect --- apps/openmw/mwrender/occlusionquery.cpp | 116 +++++++++++++++++++++- apps/openmw/mwrender/occlusionquery.hpp | 28 +++++- apps/openmw/mwrender/renderingmanager.cpp | 12 ++- apps/openmw/mwrender/renderingmanager.hpp | 4 +- apps/openmw/mwrender/sky.cpp | 52 ++++++---- apps/openmw/mwrender/sky.hpp | 48 ++++----- apps/openmw/mwworld/world.cpp | 17 ++-- 7 files changed, 216 insertions(+), 61 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 395660bb5c..6c74561e95 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -2,13 +2,17 @@ #include #include +#include using namespace MWRender; using namespace Ogre; -OcclusionQuery::OcclusionQuery() : - mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0) +OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : + mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0) { + mRendering = renderer; + mSunNode = sunNode; + try { RenderSystem* renderSystem = Root::getSingleton().getRenderSystem(); @@ -23,5 +27,113 @@ OcclusionQuery::OcclusionQuery() : } if (!mSupported) + { std::cout << "Hardware occlusion queries not supported." << std::endl; + return; + } + + // This means that everything up to RENDER_QUEUE_MAIN can occlude the objects that are tested + const int queue = RENDER_QUEUE_MAIN+1; + + MaterialPtr matBase = MaterialManager::getSingleton().getByName("BaseWhiteNoLighting"); + MaterialPtr matQueryArea = matBase->clone("QueryTotalPixels"); + matQueryArea->setDepthWriteEnabled(false); + matQueryArea->setColourWriteEnabled(false); + matQueryArea->setDepthCheckEnabled(false); // Not occluded by objects + MaterialPtr matQueryVisible = matBase->clone("QueryVisiblePixels"); + matQueryVisible->setDepthWriteEnabled(false); + matQueryVisible->setColourWriteEnabled(false); + matQueryVisible->setDepthCheckEnabled(true); // Occluded by objects + + mBBQueryTotal = mRendering->getScene()->createBillboardSet(1); + mBBQueryTotal->setDefaultDimensions(150, 150); + mBBQueryTotal->createBillboard(Vector3::ZERO); + mBBQueryTotal->setMaterialName("QueryTotalPixels"); + mBBQueryTotal->setRenderQueueGroup(queue); + mSunNode->attachObject(mBBQueryTotal); + + mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); + mBBQueryVisible->setDefaultDimensions(150, 150); + mBBQueryVisible->createBillboard(Vector3::ZERO); + mBBQueryVisible->setMaterialName("QueryVisiblePixels"); + mBBQueryVisible->setRenderQueueGroup(queue); + mSunNode->attachObject(mBBQueryVisible); + + mRendering->getScene()->addRenderObjectListener(this); + mDoQuery = true; } + +OcclusionQuery::~OcclusionQuery() +{ + RenderSystem* renderSystem = Root::getSingleton().getRenderSystem(); + if (mSunTotalAreaQuery) renderSystem->destroyHardwareOcclusionQuery(mSunTotalAreaQuery); + if (mSunVisibleAreaQuery) renderSystem->destroyHardwareOcclusionQuery(mSunVisibleAreaQuery); +} + +bool OcclusionQuery::supported() +{ + return mSupported; +} + +void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, + const LightList* pLightList, bool suppressRenderStateChanges) +{ + if (!mSupported) return; + + // The following code activates and deactivates the occlusion queries + // so that the queries only include the rendering of their intended targets + + // Close the last occlusion query + // Each occlusion query should only last a single rendering + if (mActiveQuery != NULL) + { + mActiveQuery->endOcclusionQuery(); + mActiveQuery = NULL; + } + + // Open a new occlusion query + if (mDoQuery == true) + { + if (rend == mBBQueryTotal) + mActiveQuery = mSunTotalAreaQuery; + else if (rend == mBBQueryVisible) + mActiveQuery = mSunVisibleAreaQuery; + + if (mActiveQuery != NULL) + { + mActiveQuery->beginOcclusionQuery(); + } + } +} + +void OcclusionQuery::update() +{ + if (!mSupported) return; + + // Stop occlusion queries until we get their information + // (may not happen on the same frame they are requested in) + mDoQuery = false; + + if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding()) + { + unsigned int totalPixels; + unsigned int visiblePixels; + + mSunTotalAreaQuery->pullOcclusionQuery(&totalPixels); + mSunVisibleAreaQuery->pullOcclusionQuery(&visiblePixels); + + if (totalPixels == 0) + { + // probably outside of the view frustum + mSunVisibility = 0; + } + else + { + mSunVisibility = float(visiblePixels) / float(totalPixels); + if (mSunVisibility > 1) mSunVisibility = 1; + } + + mDoQuery = true; + } +} + diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index 619b072ee0..e6adc0d4b3 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -2,25 +2,49 @@ #define _GAME_OCCLUSION_QUERY_H #include +#include + +#include namespace MWRender { /// /// \brief Implements hardware occlusion queries on the GPU /// - class OcclusionQuery + class OcclusionQuery : public Ogre::RenderObjectListener { public: - OcclusionQuery(); + OcclusionQuery(OEngine::Render::OgreRenderer*, Ogre::SceneNode* sunNode); + ~OcclusionQuery(); bool supported(); ///< returns true if occlusion queries are supported on the user's hardware + void update(); + ///< per-frame update + + float getSunVisibility() const {return mSunVisibility;}; + private: Ogre::HardwareOcclusionQuery* mSunTotalAreaQuery; Ogre::HardwareOcclusionQuery* mSunVisibleAreaQuery; + Ogre::HardwareOcclusionQuery* mActiveQuery; + + Ogre::BillboardSet* mBBQueryVisible; + Ogre::BillboardSet* mBBQueryTotal; + + Ogre::SceneNode* mSunNode; + + float mSunVisibility; bool mSupported; + bool mDoQuery; + + OEngine::Render::OgreRenderer* mRendering; + + protected: + virtual void notifyRenderSingleObject(Ogre::Renderable* rend, const Ogre::Pass* pass, const Ogre::AutoParamDataSource* source, + const Ogre::LightList* pLightList, bool suppressRenderStateChanges); }; } diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7aa623879e..b4711e8df7 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -54,12 +54,12 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); cameraPitchNode->attachObject(mRendering.getCamera()); - - mOcclusionQuery = new OcclusionQuery(); //mSkyManager = 0; mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera(), &environment); + mOcclusionQuery = new OcclusionQuery(&mRendering, mSkyManager->getSunNode()); + mPlayer = new MWRender::Player (mRendering.getCamera(), playerNode); mSun = 0; @@ -149,9 +149,13 @@ void RenderingManager::moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Ve void RenderingManager::update (float duration){ mActors.update (duration); - + + mOcclusionQuery->update(); + mSkyManager->update(duration); - + + mSkyManager->setGlare(mOcclusionQuery->getSunVisibility()); + mRendering.update(duration); mLocalMap->updatePlayer( mRendering.getCamera()->getRealPosition(), mRendering.getCamera()->getRealDirection() ); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index acaf8565bb..450e461730 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -98,7 +98,9 @@ class RenderingManager: private RenderingInterface { void setSunDirection(const Ogre::Vector3& direction); void sunEnable(); void sunDisable(); - + + bool occlusionQuerySupported() { return mOcclusionQuery->supported(); }; + void setGlare(bool glare); void skyEnable (); void skyDisable (); diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 5e85780022..a70913b239 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -12,6 +12,7 @@ #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" +#include "occlusionquery.hpp" using namespace MWRender; using namespace Ogre; @@ -30,7 +31,7 @@ BillboardObject::BillboardObject() void BillboardObject::setVisible(const bool visible) { - mNode->setVisible(visible); + mBBSet->setVisible(visible); } void BillboardObject::setSize(const float size) @@ -88,7 +89,7 @@ void BillboardObject::init(const String& textureName, /// \todo These billboards are not 100% correct, might want to revisit them later mBBSet = sceneMgr->createBillboardSet("SkyBillboardSet"+StringConverter::toString(bodyCount), 1); mBBSet->setDefaultDimensions(550.f*initialSize, 550.f*initialSize); - mBBSet->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY+2); + mBBSet->setRenderQueueGroup(RENDER_QUEUE_MAIN+2); mBBSet->setBillboardType(BBT_PERPENDICULAR_COMMON); mBBSet->setCommonDirection( -position.normalisedCopy() ); mNode = rootNode->createChildSceneNode(); @@ -293,7 +294,7 @@ void SkyManager::ModVertexAlpha(Entity* ent, unsigned int meshType) } SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environment* env) : - mGlareFade(0), mGlareEnabled(false) + mGlare(0), mGlareFade(0) { mEnvironment = env; mViewport = pCamera->getViewport(); @@ -562,10 +563,23 @@ void SkyManager::update(float duration) mMasser->setPhase( static_cast( (int) ((mDay % 32)/4.f)) ); mSecunda->setPhase ( static_cast( (int) ((mDay % 32)/4.f)) ); - // increase the strength of the sun glare effect depending - // on how directly the player is looking at the sun + if (mSunEnabled) { + // take 1/5 sec for fading the glare effect from invisible to full + if (mGlareFade > mGlare) + { + mGlareFade -= duration*5; + if (mGlareFade < mGlare) mGlareFade = mGlare; + } + else if (mGlareFade < mGlare) + { + mGlareFade += duration*5; + if (mGlareFade > mGlare) mGlareFade = mGlare; + } + + // increase the strength of the sun glare effect depending + // on how directly the player is looking at the sun Vector3 sun = mSunGlare->getPosition(); sun = Vector3(sun.x, sun.z, -sun.y); Vector3 cam = mViewport->getCamera()->getRealDirection(); @@ -573,21 +587,10 @@ void SkyManager::update(float duration) float val = 1- (angle.valueDegrees() / 180.f); val = (val*val*val*val)*2; - if (mGlareEnabled) - { - mGlareFade += duration*3; - if (mGlareFade > 1) mGlareFade = 1; - } - else - { - mGlareFade -= duration*3; - if (mGlareFade < 0.3) mGlareFade = 0; - } - - mSunGlare->setSize(val * (mGlareFade)); + mSunGlare->setSize(val * mGlareFade); } - mSunGlare->setVisible(mGlareFade>0 && mSunEnabled); + mSunGlare->setVisible(mSunEnabled); mSun->setVisible(mSunEnabled); mMasser->setVisible(mMasserEnabled); mSecunda->setVisible(mSecundaEnabled); @@ -689,15 +692,15 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather) else strength = 1.f; - mSunGlare->setVisibility(weather.mGlareView * strength); - mSun->setVisibility(strength); + mSunGlare->setVisibility(weather.mGlareView * mGlareFade * strength); + mSun->setVisibility(mGlareFade >= 0.5 ? weather.mGlareView * mGlareFade * strength : 0); mAtmosphereNight->setVisible(weather.mNight && mEnabled); } -void SkyManager::setGlare(bool glare) +void SkyManager::setGlare(const float glare) { - mGlareEnabled = glare; + mGlare = glare; } Vector3 SkyManager::getRealSunPos() @@ -782,3 +785,8 @@ void SkyManager::setDate(int day, int month) mDay = day; mMonth = month; } + +Ogre::SceneNode* SkyManager::getSunNode() +{ + return mSun->getNode(); +} diff --git a/apps/openmw/mwrender/sky.hpp b/apps/openmw/mwrender/sky.hpp index bf52afd8dd..508af76732 100644 --- a/apps/openmw/mwrender/sky.hpp +++ b/apps/openmw/mwrender/sky.hpp @@ -109,58 +109,60 @@ namespace MWRender public: SkyManager(Ogre::SceneNode* pMwRoot, Ogre::Camera* pCamera, MWWorld::Environment* env); ~SkyManager(); - + void update(float duration); - + void enable(); - + void disable(); - + void setHour (double hour); ///< will be called even when sky is disabled. - + void setDate (int day, int month); ///< will be called even when sky is disabled. - + int getMasserPhase() const; ///< 0 new moon, 1 waxing or waning cresecent, 2 waxing or waning half, /// 3 waxing or waning gibbous, 4 full moon - + int getSecundaPhase() const; ///< 0 new moon, 1 waxing or waning cresecent, 2 waxing or waning half, /// 3 waxing or waning gibbous, 4 full moon - + void setMoonColour (bool red); ///< change Secunda colour to red - + void setCloudsOpacity(float opacity); ///< change opacity of the clouds - + void setWeather(const MWWorld::WeatherResult& weather); - + + Ogre::SceneNode* getSunNode(); + void sunEnable(); - + void sunDisable(); - + void setSunDirection(const Ogre::Vector3& direction); - + void setMasserDirection(const Ogre::Vector3& direction); - + void setSecundaDirection(const Ogre::Vector3& direction); - + void setMasserFade(const float fade); - + void setSecundaFade(const float fade); - + void masserEnable(); void masserDisable(); void secundaEnable(); void secundaDisable(); - + void setThunder(const float factor); - - void setGlare(bool glare); + + void setGlare(const float glare); Ogre::Vector3 getRealSunPos(); private: @@ -203,12 +205,12 @@ namespace MWRender float mRemainingTransitionTime; - float mGlareFade; + float mGlare; // target + float mGlareFade; // actual void ModVertexAlpha(Ogre::Entity* ent, unsigned int meshType); bool mEnabled; - bool mGlareEnabled; bool mSunEnabled; bool mMasserEnabled; bool mSecundaEnabled; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index a636ce2887..261f66ff4f 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -705,13 +705,16 @@ namespace MWWorld mWeatherManager->update (duration); - // cast a ray from player to sun to detect if the sun is visible - // this is temporary until we find a better place to put this code - // currently its here because we need to access the physics system - float* p = mPlayer->getPlayer().getRefData().getPosition().pos; - Vector3 sun = mRendering->getSkyManager()->getRealSunPos(); - sun = Vector3(sun.x, -sun.z, sun.y); - mRendering->getSkyManager()->setGlare(!mPhysics->castRay(Ogre::Vector3(p[0], p[1], p[2]), sun)); + if (!mRendering->occlusionQuerySupported()) + { + // cast a ray from player to sun to detect if the sun is visible + // this is temporary until we find a better place to put this code + // currently its here because we need to access the physics system + float* p = mPlayer->getPlayer().getRefData().getPosition().pos; + Vector3 sun = mRendering->getSkyManager()->getRealSunPos(); + sun = Vector3(sun.x, -sun.z, sun.y); + mRendering->getSkyManager()->setGlare(!mPhysics->castRay(Ogre::Vector3(p[0], p[1], p[2]), sun)); + } } bool World::isCellExterior() const From e212a3235011986ad9fda7f58ac354c79e971f21 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 18:38:58 +0100 Subject: [PATCH 150/488] bugfix --- apps/openmw/mwrender/occlusionquery.cpp | 15 +++++++++++-- apps/openmw/mwrender/occlusionquery.hpp | 29 +++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 6c74561e95..baf55b0249 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -45,19 +45,21 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod matQueryVisible->setColourWriteEnabled(false); matQueryVisible->setDepthCheckEnabled(true); // Occluded by objects + mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); + mBBQueryTotal = mRendering->getScene()->createBillboardSet(1); mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); mBBQueryTotal->setMaterialName("QueryTotalPixels"); mBBQueryTotal->setRenderQueueGroup(queue); - mSunNode->attachObject(mBBQueryTotal); + mBBNode->attachObject(mBBQueryTotal); mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); mBBQueryVisible->setDefaultDimensions(150, 150); mBBQueryVisible->createBillboard(Vector3::ZERO); mBBQueryVisible->setMaterialName("QueryVisiblePixels"); mBBQueryVisible->setRenderQueueGroup(queue); - mSunNode->attachObject(mBBQueryVisible); + mBBNode->attachObject(mBBQueryVisible); mRendering->getScene()->addRenderObjectListener(this); mDoQuery = true; @@ -110,6 +112,15 @@ void OcclusionQuery::update() { if (!mSupported) return; + // Adjust the position of the sun billboards according to camera viewing distance + // we need to do this to make sure that _everything_ can occlude the sun + float dist = mRendering->getCamera()->getFarClipDistance(); + if (dist==0) dist = 10000000; + dist -= 1000; // bias + dist /= 1000.f; + mBBNode->setPosition(mSunNode->getPosition() * dist); + mBBNode->setScale(dist, dist, dist); + // Stop occlusion queries until we get their information // (may not happen on the same frame they are requested in) mDoQuery = false; diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index e6adc0d4b3..2545e590e9 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -17,11 +17,32 @@ namespace MWRender OcclusionQuery(OEngine::Render::OgreRenderer*, Ogre::SceneNode* sunNode); ~OcclusionQuery(); + /** + * @return true if occlusion queries are supported on the user's hardware + */ bool supported(); - ///< returns true if occlusion queries are supported on the user's hardware + /** + * per-frame update + */ void update(); - ///< per-frame update + + /** + * request occlusion test for a billboard at the given position, omitting an entity + * @param position of the billboard in ogre coordinates + * @param entity to exclude from the occluders + */ + void occlusionTest(const Ogre::Vector3& position, Ogre::Entity* entity); + + /** + * @return true if a request is still outstanding + */ + bool occlusionTestPending(); + + /** + * @return true if the object tested in the last request was occluded + */ + bool getTestResult(); float getSunVisibility() const {return mSunVisibility;}; @@ -35,8 +56,12 @@ namespace MWRender Ogre::SceneNode* mSunNode; + Ogre::SceneNode* mBBNode; + float mSunVisibility; + bool mTestResult; + bool mSupported; bool mDoQuery; From 9d30a139cc416a078c6f63871e7d584f982fc2a1 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 20:41:23 +0100 Subject: [PATCH 151/488] added api --- apps/openmw/mwrender/occlusionquery.cpp | 73 +++++++++++++++++++++++-- apps/openmw/mwrender/occlusionquery.hpp | 20 ++++++- 2 files changed, 85 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index baf55b0249..8dd30394c9 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -3,12 +3,16 @@ #include #include #include +#include +#include using namespace MWRender; using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : - mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0) + mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), + mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), + mQuerySingleObjectRequested(false) { mRendering = renderer; mSunNode = sunNode; @@ -18,8 +22,9 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mSunTotalAreaQuery = renderSystem->createHardwareOcclusionQuery(); mSunVisibleAreaQuery = renderSystem->createHardwareOcclusionQuery(); + mSingleObjectQuery = renderSystem->createHardwareOcclusionQuery(); - mSupported = (mSunTotalAreaQuery != 0) && (mSunVisibleAreaQuery != 0); + mSupported = (mSunTotalAreaQuery != 0) && (mSunVisibleAreaQuery != 0) && (mSingleObjectQuery != 0); } catch (Ogre::Exception e) { @@ -47,6 +52,8 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); + mObjectNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); + mBBQueryTotal = mRendering->getScene()->createBillboardSet(1); mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); @@ -61,6 +68,13 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBQueryVisible->setRenderQueueGroup(queue); mBBNode->attachObject(mBBQueryVisible); + mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); + mBBQuerySingleObject->setDefaultDimensions(10, 10); + mBBQuerySingleObject->createBillboard(Vector3::ZERO); + mBBQuerySingleObject->setMaterialName("QueryVisiblePixels"); + mBBQuerySingleObject->setRenderQueueGroup(queue); + mObjectNode->attachObject(mBBQuerySingleObject); + mRendering->getScene()->addRenderObjectListener(this); mDoQuery = true; } @@ -70,6 +84,7 @@ OcclusionQuery::~OcclusionQuery() RenderSystem* renderSystem = Root::getSingleton().getRenderSystem(); if (mSunTotalAreaQuery) renderSystem->destroyHardwareOcclusionQuery(mSunTotalAreaQuery); if (mSunVisibleAreaQuery) renderSystem->destroyHardwareOcclusionQuery(mSunVisibleAreaQuery); + if (mSingleObjectQuery) renderSystem->destroyHardwareOcclusionQuery(mSingleObjectQuery); } bool OcclusionQuery::supported() @@ -100,11 +115,15 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass mActiveQuery = mSunTotalAreaQuery; else if (rend == mBBQueryVisible) mActiveQuery = mSunVisibleAreaQuery; + else if (rend == mBBQuerySingleObject && mQuerySingleObjectRequested) + { + mQuerySingleObjectStarted = true; + mQuerySingleObjectRequested = false; + mActiveQuery = mSingleObjectQuery; + } if (mActiveQuery != NULL) - { mActiveQuery->beginOcclusionQuery(); - } } } @@ -125,7 +144,9 @@ void OcclusionQuery::update() // (may not happen on the same frame they are requested in) mDoQuery = false; - if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding()) + if (!mSunTotalAreaQuery->isStillOutstanding() + && !mSunVisibleAreaQuery->isStillOutstanding() + && !mSingleObjectQuery->isStillOutstanding()) { unsigned int totalPixels; unsigned int visiblePixels; @@ -144,7 +165,49 @@ void OcclusionQuery::update() if (mSunVisibility > 1) mSunVisibility = 1; } + if (mQuerySingleObjectStarted) + { + unsigned int visiblePixels; + + mSingleObjectQuery->pullOcclusionQuery(&visiblePixels); + + mBBQuerySingleObject->setVisible(false); + mObject->setRenderQueueGroup(mObjectOldRenderQueue); + + mQuerySingleObjectStarted = false; + mQuerySingleObjectRequested = false; + } + mDoQuery = true; } } +void OcclusionQuery::occlusionTest(const Ogre::Vector3& position, Ogre::Entity* entity) +{ + assert( !occlusionTestPending() + && "Occlusion test still pending"); + + mBBQuerySingleObject->setVisible(true); + + // we don't want the object to occlude itself + mObjectOldRenderQueue = entity->getRenderQueueGroup(); + if (mObjectOldRenderQueue < RENDER_QUEUE_MAIN+2) + entity->setRenderQueueGroup(RENDER_QUEUE_MAIN+2); + + mObjectNode->setPosition(position); + + mQuerySingleObjectRequested = true; +} + +bool OcclusionQuery::occlusionTestPending() +{ + return (mQuerySingleObjectRequested || mQuerySingleObjectStarted); +} + +bool OcclusionQuery::getTestResult() +{ + assert( !occlusionTestPending() + && "Occlusion test still pending"); + + return mTestResult; +} diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index 2545e590e9..bcc45d96c6 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -1,9 +1,15 @@ #ifndef _GAME_OCCLUSION_QUERY_H #define _GAME_OCCLUSION_QUERY_H -#include #include +namespace Ogre +{ + class HardwareOcclusionQuery; + class Entity; + class SceneNode; +} + #include namespace MWRender @@ -49,22 +55,30 @@ namespace MWRender private: Ogre::HardwareOcclusionQuery* mSunTotalAreaQuery; Ogre::HardwareOcclusionQuery* mSunVisibleAreaQuery; + Ogre::HardwareOcclusionQuery* mSingleObjectQuery; Ogre::HardwareOcclusionQuery* mActiveQuery; Ogre::BillboardSet* mBBQueryVisible; Ogre::BillboardSet* mBBQueryTotal; + Ogre::BillboardSet* mBBQuerySingleObject; Ogre::SceneNode* mSunNode; - Ogre::SceneNode* mBBNode; - float mSunVisibility; + Ogre::Entity* mObject; + + Ogre::SceneNode* mObjectNode; + int mObjectOldRenderQueue; + bool mTestResult; bool mSupported; bool mDoQuery; + bool mQuerySingleObjectRequested; + bool mQuerySingleObjectStarted; + OEngine::Render::OgreRenderer* mRendering; protected: From 155cd76f3733f1b17596bf556d5c9cb68e78d2b1 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 24 Mar 2012 20:43:35 +0100 Subject: [PATCH 152/488] Changed Launcher font to EB Garamond and added license info --- Bitstream Vera License.txt | 123 ++++++++++++++++++ OFL.txt | 93 +++++++++++++ apps/launcher/maindialog.cpp | 21 ++- .../resources/images/openmw-header.png | Bin 45163 -> 50727 bytes files/launcher.qss | 6 +- files/mygui/CMakeLists.txt | 2 +- files/mygui/EBGaramond-Regular.ttf | Bin 0 -> 231904 bytes readme.txt | 4 + 8 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 Bitstream Vera License.txt create mode 100644 OFL.txt create mode 100644 files/mygui/EBGaramond-Regular.ttf diff --git a/Bitstream Vera License.txt b/Bitstream Vera License.txt new file mode 100644 index 0000000000..2b37cc1df2 --- /dev/null +++ b/Bitstream Vera License.txt @@ -0,0 +1,123 @@ +Bitstream Vera Fonts Copyright + +The fonts have a generous copyright, allowing derivative works (as +long as "Bitstream" or "Vera" are not in the names), and full +redistribution (so long as they are not *sold* by themselves). They +can be be bundled, redistributed and sold with any software. + +The fonts are distributed under the following copyright: + +Copyright +========= + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream +Vera is a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute +the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished +to do so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Bitstream" or the word "Vera". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Bitstream Vera" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, +OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font +Software without prior written authorization from the Gnome Foundation +or Bitstream Inc., respectively. For further information, contact: +fonts at gnome dot org. + +Copyright FAQ +============= + + 1. I don't understand the resale restriction... What gives? + + Bitstream is giving away these fonts, but wishes to ensure its + competitors can't just drop the fonts as is into a font sale system + and sell them as is. It seems fair that if Bitstream can't make money + from the Bitstream Vera fonts, their competitors should not be able to + do so either. You can sell the fonts as part of any software package, + however. + + 2. I want to package these fonts separately for distribution and + sale as part of a larger software package or system. Can I do so? + + Yes. A RPM or Debian package is a "larger software package" to begin + with, and you aren't selling them independently by themselves. + See 1. above. + + 3. Are derivative works allowed? + Yes! + + 4. Can I change or add to the font(s)? + Yes, but you must change the name(s) of the font(s). + + 5. Under what terms are derivative works allowed? + + You must change the name(s) of the fonts. This is to ensure the + quality of the fonts, both to protect Bitstream and Gnome. We want to + ensure that if an application has opened a font specifically of these + names, it gets what it expects (though of course, using fontconfig, + substitutions could still could have occurred during font + opening). You must include the Bitstream copyright. Additional + copyrights can be added, as per copyright law. Happy Font Hacking! + + 6. If I have improvements for Bitstream Vera, is it possible they might get + adopted in future versions? + + Yes. The contract between the Gnome Foundation and Bitstream has + provisions for working with Bitstream to ensure quality additions to + the Bitstream Vera font family. Please contact us if you have such + additions. Note, that in general, we will want such additions for the + entire family, not just a single font, and that you'll have to keep + both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add + glyphs to the font, they must be stylistically in keeping with Vera's + design. Vera cannot become a "ransom note" font. Jim Lyles will be + providing a document describing the design elements used in Vera, as a + guide and aid for people interested in contributing to Vera. + + 7. I want to sell a software package that uses these fonts: Can I do so? + + Sure. Bundle the fonts with your software and sell your software + with the fonts. That is the intent of the copyright. + + 8. If applications have built the names "Bitstream Vera" into them, + can I override this somehow to use fonts of my choosing? + + This depends on exact details of the software. Most open source + systems and software (e.g., Gnome, KDE, etc.) are now converting to + use fontconfig (see www.fontconfig.org) to handle font configuration, + selection and substitution; it has provisions for overriding font + names and subsituting alternatives. An example is provided by the + supplied local.conf file, which chooses the family Bitstream Vera for + "sans", "serif" and "monospace". Other software (e.g., the XFree86 + core server) has other mechanisms for font substitution. diff --git a/OFL.txt b/OFL.txt new file mode 100644 index 0000000000..619d1f429f --- /dev/null +++ b/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2010, 2011 Georg Duffner (http://www.georgduffner.at) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 49c0bd960e..ef9cfa8519 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -45,9 +45,28 @@ MainDialog::MainDialog() setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); setMinimumSize(QSize(575, 575)); + // Install the stylesheet font + QFile file; + QFontDatabase fontDatabase; + + const QStringList fonts = fontDatabase.families(); + + // Check if the font is installed + if (!fonts.contains("EB Garamond")) { + + QString font = QString::fromStdString((mCfgMgr.getGlobalDataPath() / "resources/mygui/EBGaramond-Regular.ttf").string()); + file.setFileName(font); + + if (!file.exists()) { + font = QString::fromStdString((mCfgMgr.getLocalPath() / "resources/mygui/EBGaramond-Regular.ttf").string()); + } + + fontDatabase.addApplicationFont(font); + } + // Load the stylesheet QString config = QString::fromStdString((mCfgMgr.getGlobalDataPath() / "resources/launcher.qss").string()); - QFile file(config); + file.setFileName(config); if (!file.exists()) { file.setFileName(QString::fromStdString((mCfgMgr.getLocalPath() / "launcher.qss").string())); diff --git a/apps/launcher/resources/images/openmw-header.png b/apps/launcher/resources/images/openmw-header.png index a168d4d2a816cb816dd50eb9ff1961291c2fe899..a2ffab68b8b447193d1153950e5c4d7f43348641 100644 GIT binary patch literal 50727 zcmV)UK(N1wP)|D^_ww@lRz|vCuzLs)$;-`! zo*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!& zC1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2hoGcOF60t^# zFqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTXa!E_i;d2ub z1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqKG_|(0G&D0Z z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl z*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY_n(^h55xYX z#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^bXThc7C4-yr zInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qjZ=)yBuQ3=5 z4Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK%>{;v(b^`kb zN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<)0>40zCTJ7v z2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01)S~6}jY?%U? zgEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j*2tcg9i<^O zEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfK zTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761jmyXF)a;mc z^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQqHZJR2&bcD4 z9Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^TY0bZ?)4%0 z1p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK8LKk71XR(_ zRKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS<&CX#T35dw zS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@qL5!WvekBL z-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW%ue3U;av{9 z4wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#o zSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%oZ=0JGnu?n~ z9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8No_-(u{qS+0 z<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-UsyQuty7Ua; zOu?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimkUAw*F_TX^n z@STz9kDQ$NC=!KfXWC z8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgUAAWQEt$#LR zcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6?<+s(e(3(_ z^YOu_)K8!O1p}D#{JO;G(*OVf24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV z0GgZ_00007bV*G`2iyY~6DAP5Ed4zI03ZNKL_t(|+T6W+yk*-}*ZCb|&b9VFr>bre zlJF80XapKjfq-Z}5dqOO5)lc{fCP*@e4vI_Kv0Ow@Q*RpKBsQgO-SqK6JjNG@2%SVtiASHYtAvo@An(O zA@1(HS$;YAuj*a*z29-<`s>%ff;)bCqsP0qzw`L**Z+;h>u&M7835*n+sO9~+y}Vi z@eQ*MX89UOewI5UMqv5#4?^+73 zib|Z_=nJY!(TQ#zpC!UrSH$C@ND04cQNT|_D_ zovBttE4>Yh7Cf($OhSHS%flr7uY+aGMW3+`*3n28-<9b>=kIfs? zw1e&pYjH1elnHRkRN}j@N8AP?6RHI*1;#+C;v)3cXvZVdJVO2e!Ksa}BsWq`#g4=uPAgcTd{48w{Pp)DOP6&1y; zgX|D7%o@Uks2~ER7Wx?A9d8|x9o;YE)9Ws`kppgucZ+ohh&T{yS<4*PRwm3_e5MPc z6&nk+?C8TVyF|+bbi^mdI3lH@GRM}^4bu*N#Ix#75g_-NJ~~xrx(%lN8KXC_!Fs$z zqyq+e7VFqLjvy4KIwN)Bc;`057JS6+DW#)QC}qdm7pl$-zofSV;yYA#dA(wfIxd%p z-DTn?E8uR(TTB4)>!IXPKX`i0^Z$NtFu4{qP65RY-14vN6hPbz&!EB1MoRL^i3w9zSE8RLjjfexkO7>p9vRP+9b#-F=k^s69^AnKrwNMX6S%e32r zZr9e(*yRueM36GY#qLIDq0}?PVokXYyeOqkjAfx#!K`CA_(ZKYuyKLlI292EZ-_)7 z@1s#_#TjvLydnzbf~sI+L3PI6&^pCqLkDrj+VEjGgK63``a+pzMz;*el~Q*&jb%Nc zV%Ug4T;+^z4FJ`OYs0#sI#H(@$H0*i_s;rYK0A-+qIaqk`dGn1OQr74v9aXt8vzlZ zP6bfb?3aGX*VL|{z703YZ)VM|Bn9d11WjtYG&6q(}OGY=`E3?GQqc&4Qy0**#( zq+mX9R;14OhtCHI3!+=e^YKt&k_QWZraPjicV!k`ofgfYNvL8StbFt~wPL+dX0s2xO7#Pm(nUDnOwY#d=;l0V6g;A90PPXlxMfj6Nu3#!WCW+*YPK(_1VW zyx=8+pm#v>S{uVM+Y&I<$Y33C&Fe7GId-i9VcC1VymE;?mKn z;<7_rSdX{a?QTSNRVp}Gccg-fB0e)B$D&ZL1-y!lhE7ui@B%Uf^AQWtIz=ajk9;O2 zg8$l4Ra9eRTl+#SmC-vYik1muAQYhC=Cr=Bn{QxQHA+>)CGM37odM?9u-Jf00gGp% z6lIuY@Se~CQl_XJxN@>#dp4_=xXp zI7OlY)>>ktvC8mo|6O%OtH_C9US51yuzG))&w@mP=L} zTk;s!KtNzwR%#{|_(Glclrk|!>=hzLA1jmIj6_zAwqBrR7wfxdJfGtDh=kMnf>c3u zigoWoZwtd$rV^D?TaQ3zT^n^eL+A*VK1QxJ$3#F1g#j5@M|ZSD%IQ7!Jl6@c9+i1t zsioqhQ~5Ri>l7s9K1}Nkgd4x_@8q6kbNxMXb#U>_{&UlhG%Kr=2v}y3eVZF1u{h#^ z^V5lHmhni*zaJ4`tR*0%2^nQYWD(_uMfr;esyp0{xri;Zl!3bqaTU=uu8bVNk9rv>|AT4B19N76Gp*f}kQGH8%XIA}%M|niUofp5N6M5Tn*} zrd`3kMJ1^fY{_R(7^745JfHQbj<?sghG@qj0_PZ@f{(@|I|hc-^Vs~?xGtDP#W&&_Ih`?L z1EmP9F9AVu#$XLd*+JZK5!zUxugudKLp#3n&2}MrC_sgAN9P0t^pWs;E#)p;@C&0XvS~Y5l-F-HP?^igS#>ZxgEf z$od_Os6fV8PeDm*B%?i_ckj+zCx+Jz)kY;?u-$GB9Ah+UQTDqTnCR`2sZ>UX?nW)~ ze8fEu$a#!`vBFpxnUq$U66V)8V+Haie5_yJ@cjWW)*IkJt{|+fDzSSYtav#q6pO0C zBfSo;;skF+c4pSIq5vCf?7<1+#G(uA+RRTGjg5}m8t_cQHnAwO+VBw=wH;9jeB50U z-yb;nevi)%*lR>KiX&PWt>Fwx*#(^D5r%b&p5bcf*p^Sjhods(#=K%G6seKvj9jED&<3JH?-v0}l@bf2S!C7@ zy|0MEqA;8Jl;EU%$?Q6_>@4amVK5&W+)DCTk~~74&Os|!!}?&* z5gDjg3}M>MjIrk8jx4&=8N9Qu3)3{^y&7?Uv_!B_rS%0JB_OH-%1rMo)EXJFEmT+5 zwIM|)qO9%6uAW0te8lEiw9tKx`dDi4I0H(ptm{fGQ&ch*OolP2r6LG@44g=qM1)c` zAYiHS)U*W{sP1B|*uZ3|yS5Gb#bG4jR36 zgc8q|8dYZyp)W_I2A>6nOYj$?M@8M1C7@dItlna!Eq7l>(VMu&b?yCjRDuK4l~QUX zY_`%Hc^!|D0BVgL#yk>{VW=xc!AHRMC84WkN08v1EQ9;6`3mF>RVI&JkjQ-jNA71% zt{ova*8n2oPd+kZmi)6_RTvx5Q7Uc&Gd;yHDUua|CG6F+N~wX{1HJb+o3RBF&qY2n z#xXKzm7oKd0`75-EKlPB7t<(d-Gfk7VV-YcUGiMwp-1#oW4R9)mJ394v1E{QV=M=> z*2s)=ppD|6XVryawC51|;|EjFrBL4)H7_@mN}mxxrPM3sT=C{i$AFY3mWy$X4gwKA;-8 zf@npYfiuk$(-1_@a92DbAJK}mNWA7UpPoN6ONd1%1@KNOnW(7dIW@#BIFm6V*(n8F zDa1YVgrlZuADg!%r{p1eC>r8~u^uUPj&+|%0J3qJv93x9E~w1A;1DdHkuvQWqvtx@ zv#tlQK~>2rMlzWkNu0+s6qW1Du(Y(aHOnC&jGLrY=p7Zg>LT?XjJZvO;^ zIo1c}Yo1e~)+yF%#KNe;v{TC-D-+h%(QWJU_LX|Lhl`^%3PmBJ1!I* zI02i!1yvyTS0Sg`#IL{hpbCU5mDPzv_j}3ndx-UXEwc_!CD!TZ%@en8`92RQW^9Dk zb}YFHAf6#Cxr^TKQtBDjJ3e{_p8UBa@uM0^NNKddTYZfTyc=4!s23ZV4Z|hXNY<0c zFHznTgr|>j1-~WHzg-iR2^DA1P)aN^>vRiJ4K0k`(5i^Rus9ddnZm@d#Ck^tt`cxv zKrc`zp=_#7NtKjaC|jH!0gcRXd!v>qux?r?fV9%uCA-}@qJbe>U(jg|xWOyk8-;+m z+&tD2QFeDfqB=(fB0_5`-Hue%Sk$`1?0}4pd&N8m>!?@)UmxR;D!M5$M|xy~Jrz@; z7|Bh!BLaPZsw2|`qr+&S&=C*F#SN$_K`J27+GVP^5_u#xopn7@YE)@s7-|8vN{u8& z%fz;%ORCNy_wiF=H9{8!#W7ox;}YB#M3q|4SleX;TG@!&sGx>9Mdv&(MT*dS$f9Z~ zs20|KpvoR8N@jnfH*9Pw ztl&tr#D?m_6RPg_XfnyXo<)eW8>&6O~5mODNYIhDAViTLKm( zpv*eW_*iihT%w|C%f*QuE;>ggvcd2*0;0OWfVM0siWQj3#PCp6wsk@5fR~CeGnPwK z22N0AE<`eD7jMY{#P6*u+#iEPzb4-$pSmQz?+qH3!NKkcE>TTf3pi#c^%b@SpY1(d zJH|M{L+%C%Y1u}&kA4MzNtTf2q3ZF5c&KFD$p>cR5K>a>osCA=6eY0$HA%?!sGuo% zc@hRo)t6gjL>rl1%Y1b`)fp~9xP_QExQDF*)Zkho$j#U|L_pJ!VoGB1W&zU$**qvx zgS20d5n$NV$dM6Csn|&Mj+Z!|M|o~z9Oe?66C#Lx8jbN4~5iuZvDu^C7xtCd0Tajhb*Ib}X$cs!HV2X(%Id+;HnYkXHU zcq$3P-fgh12d1*mb&^o06q+3n3Por7xD!P2bd%yGxu6nwy#zc*ZrB?{HI*}@7J6R; z?%YjaPMvm1<2P(I+=W_{;TG9%!fzlU^OcT`!1B#I&O&9Tk0nGN^BfY_c0jaT<5)Ds z?jaeTc01N(#Rc|fw;27nZ3~gaoOTjLGc((yw6>8GRf>C{b!wRzWf&8@XNrI(9qV ztHe7g8k|%tTES9XN6Kii6>0{lH5FzFcS49?$i0A~Q56u<@sMaAP?bnfC{Pq7rTbNb zhr%#-v_>Km5TD^al8P}72$d*oqdKy7q~~{BmxrnKoT59%+Tt3#c>>6Y@--By`;o85q4WFw3asBT%HO8r5EK`@6B z;wtD#XzblkhoV8KV*Ogh64{=K2bP~Czsmqi6_98^Vu`HelN^h~ozX*yC7#fi^{5`$ zq`v{psa8xzN_90eEwYjb>86&zuN{lccEj;eT%yvk7HX?a&Rpt@i3PDs#cU0DNq3BX zi4tlq*Mtp6kG-A1$N{=%AA$tVTqG4KB?w_jWs>L=!NZJhD^oqEXpsJETXM55Xi&eal~3mNkjH45>jsQfU?Yk@Hg*>?&9ej(A!<=?kq(J zj%$$Bqb&>{6wUq%nL{;%LW(Oy3Q}wGW(^y0A8V-$hdNJ)R7StVhBMD+@%hZS3~U`} z0ar&nK8KQljp%a-rQJd)`?zQ3tji-nkpIzd6q$Cnfrv5bc?2pC7^>6~l?pZcSLTyq z&|D~W2Sg@cOGs=Pona#}c01`(1fg5NPAIt+!NpLonaU{EFR1g5F&b`ymWfiQsPMPs z&McCVLUNWNZzcmc1E%?m<#-#N=Tnl@+g(bT!KN!!rX>ul0WtR;YN?R$Hmrk88VHz5 zYG(5quxV(6#V9(360aXa!FS52piC2eEcggg8*g|fX94paLIFGmwZw6H-hY*eW`}s5 zraiVcO4*~OvaWaIIps)^9cFS;upKWSVcy-sfwo-6K2Qeh;gUMv0Gz&F288)*Er9r= zIF2_N!s0q%{-6rvdd1*Zf4&F0x+d+-s>L!x-vWr_<`vb&2y#7xRLI74& zHA`Jfyt8MCnOL>isi!2F)hnLDMyimb+Hkf8sZGUIPfD}V*GLPq!a!=0_YvI2SYhK* zC@1o9^fj(kt*F+hd`6J}!$W0+c)&pUIUzd?^-f6@mopfxM^-99Vn?G@4RYOx?7BE& z)9KpxcA3p*gHq(wVA%Tr9f?op`63Kk>HSElyTH-iL89r-`hnOj<9r3dMx(V$w4TNH z6By$z;!|eDBlxY9bcXa(vYI0Jr?p2>B(bnd5}u5b=5@oecsg=H7qGitB zppx0OF#275z;I)#Hz+%$9Ye&>$0c=liz3lbYNI1IXln~-P*OfSHra1fRi$b+`Av)p zRVv=s=rMAGTH<-gq=*{Nu%?uFj6tmx>k&9ZR5D?{P|B1Ih%3X|Ra2-bbuRREM8&9u zQY)jc+0zo)z7MFo8wi~??jp8FYXlmVNchI+6bX^SZhsb)j62;fQ9Z+KjjY}*IJkC+ z$a!-8sb;egf*EQiSsk;G-D{a>ePQ$i^L#Tz-W~}+9~~QwdAbRVNRY}d)P-5OZ2c-l z&oGp++=0?lMdtM7z_i~dLJ^!<(ZbqSdcO=P(un5|4>+`(N9Eyy1I1x&x9N*Po$>WH zUUwk~GL0ryb+8q;`eqCuZ&Z@|tE)in2^fzVK)9zGx#B&p0?F2OzUld|coR7ViXd0F zOdxz={BBX=s|Nm$7*oB85%1fY!yV{L3W zn&u)XWsb_Dtx+mN20EdXvnY$V#U>6z6S3{l3GLBv-kqS+xx!DNya;)9G1II5l?`l;#Hjf$8d>*xpl#>h`QQTUHXA&E5WE63#Sg-31(sqAF1h4U0ftG!g?Z@jfkhU*cy&GKZEL{Y8C=HSc!CMaqa~KrcY@ zISfR0L6l3wY)$b+N`FO8^5WiG_KOK;XSZ07cTqlUTgwZ$ETMHo1VQF{32es}q@f3 zNJ44bbARf3Dm&Z?%@@=M)<-sGI-+}Ef^4L;rK7tkq|kk(x3FjtGrBkCdPXS|rU}VK z27+eKMf8ZI>It$jF;OGWUY9aqV>u;WQ5lX58l9<5w6S8XYCfcV*h$3^Kj1wB-=}Og?Dqfw}BZRr(k#$Ggn)jQB8E08w^VQ~r)_i-R6j)N-*>l$>m$zHd{K~GhdSv&QCY*E-P8>6za8NDZjab*`F zqKtM(^+k(~*RR1~dEP3TYN`Ou-L85+ghJaou|2Xw&jv9uJrUKi{ZC?358+ofJh~um z*{8Dgt!Q?Nhu4;;G`31b>l8S;Ie1DNHT!=x^zzY}41<9J>NO;^<_vRc&CEM11)cT` zYm9DO91h&Ra|bi!>}=0NH_kXei|+7lTd#^?y)&#)O2Jz8PZSNwp@5rY^WjRVbKDoA zQA|ZCBCP$0%Y^qeUX!h{Gn6@^bMOF}y}BK*d5CS&$P!Kjwx(LZ0;1IDEisE80HiQ! z!Nh};Y7V7cQ%Id5#Up_G058F>2-)DbrZ^xf+G*NFZ;WL{+*@YN(Pa%Ie3pC)rvZT? z3A?CMO2CLldXZ&sN+~2RUqS`8RTmI~fRu=9*_{-9rG%YFNG0~j6dm2Ao<$#qMioj) z>8sQe1glzt??a-CUTg9&E2Fnei25lXZ0nNNCw>L9YVeJ=MiM8rL?t7^e{F%YNbpyi zl}U&tCUicJ3c5SfG@X(z&Gj^VLD*9eT0fj1+CGe0D_UyEaaE!ZXoJIRRA3=w2rsUH zqeESGTCTvrt7(Cvtg5elqj!R;7aY!lk?E~P}{>GAM-7#-C;1Hs4ff06)lp9<^I zW{QsiVUf_)7EJDexBQf~ae}aV%JO=SXN0P22sh-f0l-Pt-LpnKHsDiSN z3MfHOl>*t^gIfwOoiUC{RoBz`3(+(e&48OB-3VE5zV6AjNGe=TaGMRLDagdumRuB} zMOQ7TPSJ5ZwvOCbWTAx*KO7w9dC#zMY9Mo|^tMEnJx$ayV-7F>S3k|a{E>gnPyO3h z@iYJCKk!Sx{MrZJ?TQ1nmHxb$4x^)Y$wBy3G+XYPEMq$FlC?fQA2@j_Nq)B1in}DE- zPT4%?;WFTBN@F#urj(fLG^b&wq+)ELTgXRAC`?dVyG@;Lg|K1@DQ!Su6Y3#drUsuf z)&-G(X{FBm@~_o-dX$WE~B7@qQ4!DWPt0I=IVj2^UOTQdTM=eJYLe8u`CN``-u=tF61%fS0TWdL~q ziGHd;?hO*5vU-%6;wJS?$coKIWP`^t=xo8{B$qu&e|uCO`B}30>TC@~4t*RG1Gf{_ z8f(Ks`Z~rbsGNMeglG!O%}#{WfsZt7D_5!@_t=OuNJMePXc5Rpngsfiuw13o$nJ^+ zW?!^09Et{}9sLd2**!vX>fSL;!$P1Y6chFfgEF1-^Z)r5`I@hPF)#V zX?cgYe_NjYtUtsjJoD+C@54ewH3(@xxfib|XVicc!>&Xy`d9*o*KE^C<(vD8O9%$Y zrpw_W=>(&cG|ZDLnX!*fEkVwfdKTB;2jb4MTrka3WZh~}ziNV1AaN$e&E7foxk6)ThIKydS)awvzUn`|$L@U@lsW_aU`*!+DW^vc}|vH+mTHN$KY6cJaGzgTL-z1 zevd?X^XH1*0kR)uO~sl9p|`a)OLT;|1;M?xW5|uoPj-4j4?A-y5vb@C>dE56Qdm&S z9NoWVkGltCm9Si?8rpJ7Se0Z~?|*&G>-g(m@j|}k#s4fD?>Jd@{I=in9z6B^pTci? zmv`jJPkbV0XJ;IbM;^I-hky5~|G*Ew;>UQ!kN!mV16=*Ob?YXd{h80eWt_oKO! zAapG{l~uz$P$4?*XrTq&5A1;U6)LNP5hvHl< zWvL>Wu=F6cEu`67@6kwTO*6oY!Wb7!aw|H%2`Oh4p|wLmmgM)+U3j`>UyFHIg_l}S zkWwvYlxfE={>sDr$WQznKm21q&G)?YU-B!jd-x5m?=Su0zrZIx^Y_!%3r4%Z`k);z z(1gGkB|gJftSzU6$})Ly^E4@qJ{~PQq)aDe;4tUz3h(#y=RD>)s47o=|EKWbzyCw{ zh-Z8-HztXSsI4@Vmwe9;^1^TZE?)kMpLnDD)gSoK58)F(?ho<1f9F%^?Sj!8|K?S% z=7rz-PxyeL3Is?cd8Qf9$8@%Uu{s(Lpz8>qS6?{YV=c`_o9s@XZ=PeicE)-{8;qi3AsUfFkQrmB-d0 z{vi48y`AZHa@F*cE?WZIye|38PNE`q70k#cB=aPVH)1~e41|DS zPF075qUy@{G05+*R~Xq<9+ntICGdaMAmeRKLaqlP?T+X!;jj=6$adW%J(0$mnXMq% zDpvOq{SN46V@++@V!p()(@Nlsxb0~DMR8h^RD$m*E(IHulXCyl4 zEx9OB&ra~oNN0r6qDQ5HNU_oz{OG^ulRxu$_kH#>O+5EAKZ8H|DId>U zJ#>RHR{HUFy7(H_kKsgDca&+zPyFo9^T$8y3;B<){)GpAm#4hXd-HwY`OUQBUHW>U zuZJt1QI+F>ulf3KIr=HS9}>yd+PhrmIHmg2#$4x_{3~5&yVA?zVJ)=#ut6ZeV_4Jf9liu+&}XfSUa*F z9_D!QFzexUw8N3!VkS&q@6g;RUh#gHHljbP>J(3CU#_(QznO$s|NTEMr|kXS?vY39 zwEP}7Eay5u@+c*j=(Tssl?{BF1c*epYC0mP8|=t_4n3XO7=cB{fFnzPtC0|jrB*u~ zTcw;VBFy@=m=zUCxb&t)j|x(1`a{j93TY~Hyib+l73*u@zit#MDgRV_T!x%cvb#O| zMBE!|dp)S3)5Nq3=g{7dtjEicIO@bS@0fQx>Qs{#oY86KvNb;C&wLSo;fwy(J;CF{ zKkVuJ&^gZlug!!KCpw`?NOOmQl5mnuVbvXtSrjv0k z3$@%pMQL_7Z9Bpy-P3+X#PD&sWhsbtifmqf(bX*`;Z7>SYm9E$shvb-nV9EW*;t$c zi+%{+DPhOBkHMo@kIwNRWqT^~ob4%;vQH&ZV_hy;mx~yPH9CXnxfsM?s~B?SnQRDi zovAKSbxF+WkeFPAVl3@;NV%<3=RMPW3zdpk1mZDrR8g5Sm>RCpx3Ss#*zpo?4Xp7o zf9ON`rWgEON)C;B^sgU$`70Pw(P@v?9a<+OZBEKmqd6gGUWi9yVL0KQN03OdL!iNL{gEjCJ9? z-}7Dho^Sg)-uaz=;{(6Td%VZHXW}yOOlW+>{WKfwYvE6R>a+M4-}NHi@i+YX2OeW> znH2g+F-Rnyb#u!W;RRp)<$S=?-XCiXTQ8#D#zrJ$y+;tWl}~&2N8fk+zx)NC$6x&1 zKZDyEGeXt{YfDt2x+Wu8uFOmv6;rHRBG8V z*L_qhZN$_+W~MSxYK^%MzEwRHDRY=2YUQ=BKkzZn`5eCYU%dRDEBu9@|L1tYSN|Oz z|F|3U^~iF(gO4M+>KIwZLIA!?GV5F@eb!ZQ>KRy*@xYSdiEPARWk~wCzdl(g*36--3UvQ(eZwP zYF;ZX)M+1^D4Rc4MI@%S)oF_P6WJ`LMX7b4!8_ocLR2QM%1FCxEiqkDbw-(kJCWd@ zoQldsks#JpgsJRNo0yrXTB-FWRcEHTQm2~LK#eYJjk>4IQ6ZRE28)Sq$25jcRhM;? zN-5zyyWigmencxigwZYdn(3U9O_-R6M4g`BA*Kt4a6m%Q(=Kw*)yh+T>;KBfKJyPg za7iBy2Y&LWUqzXB)ajfuogq~zS{cK^!uq975m=%RM^DmP&nbjT$hLdC4B4|d(|n7f zGcW&FKXu>de)u2wFy8-t-v>sc9dEN-Jj{B$3;>~be8lXFF$QKAxOYZ7a_fBNAN<|t zKQJIZ{O}{W&LzeHKqQUgw05Mo1O0g9o!;SX`L-ASecs{Mz5RX1c=12^&VZ29&WMCS zzwc!~1i+_1=h^(u_j|9H|1mCO;8s7<)=SoY$Qd%B?0VeI{XNJ2;1B!&{`8;tqx9v# z@#0~Y%STubucxht5Tuk6jic%~3%fF7eaQiA;lXG9A`%Ga%@IK4Q4!$3FOvAL)?({X zHt_NouesaFL+9kz?N>o)gS&>sI7_pQzsQc)>>shw!tz)&<(@%eZl5C((!~=jVxFb9 zg|=U=!~mYv4=MeP<7r4+`!UJ$85a$r(=72I$7JI;O2#qG_j@!CS*n`c>0^zFe3Zyy zMQ~jiN%AVYFcg$QAK{)WQn`CHKIS=}&AdKQo=BNg}8k!&h3r zOCOyVkfH8~|RR6KUITvRB! zL#CL$qT-opr@tB%Hwj2+2{`B7-}Rjzb2Y#8pZ_4W?!q=cXV^qn`AjKOc#xUpDBr8u zBU0vQmQB+^sMPreXS*BhrW=gWc=dmM4L|e%?&1lLe;lJPC$1w#Kgas9(PBM|#draU zCfenAm*e3P-uX8?nP-2(N8NYKSHAK`*=Ag;hJe8>hEHiGhrO@#cHnKEbc?_KC0}^o zG5+zlz8FNA<}c+@ z3;+4Q+;i-|@`ay6TP|3Sx9RHzZM{ujF0dAZ%z9hsYe=O>j_{Qd*6!9WndU;>KNNQF zB5!60>%X%Q@dpGac_ZN_hoC;tGG(hIuD|Nn-Fvq|vs=-UimV`W`w73c-mgwjVyIL6 z&e57Nxcl^xV{Df1k#UHY95l4y-yUwUWy*OMlF&?8af{T`xZABCplHAnMW<+l+MqI* z=p!kLPE%~Q8lyx@os-1x6se(f>d|>yO3i^xIXp-kT4oI4kNvqX;^+S3y_oRFeDp{1 zS%3PEGuknT(Y7*{L(ZL#pcQ3y8os6gAu{%;z-;aG<&yPqL0>NUgTX z;+%q{@5k(2*d(n184XJbD$(uhQh+cc42Md^v$rOkYCSlWoM+vw;p2!>QrQ-g@Tgw) z;mQlq;hutx_~@7=!sZff#3r0`DZMqI!GpnV{u!tu=$-0WBpUTdBcdjo6TN>tX3DfAkMO z^S)#L;xGLYul(_!I>F!}ub-o;N~l=q*jTaA`Jku0A0PMuPrc_DuleO)=B5Aqhd`8C zb`({<`=vib?}JbOlxOkKts7WxwDkg84(V*XPY=FGDy*-#89(&OtIF#`KKOU@?!W0B z>B}9~%R7u^!Mo9VXIRddv6V84dW*$4Xd5KI*jU@$;M?9j+rPXCHO7NgTk=@J zLLT%-xzAhczIh^75#ipyJ7HpS)rFp}w;_KC;uE>*yV%BJo|*;CP7R40hAFy5AwA6( z3GU;nM%uMLoZJN_?%y9Ce9iA95;Q=;>p4jR8fc@S&3EIu~MqRKOZR>IPmO z<83v4yNZP5bM%F=@;#qtW_1>DAbEdN!dC%kd)G~oglzN_lr=XtPUnywW zp=G9EDMc4FNoy4tz9iflaIfV!+sFF#>R10KzW)bbj@CJyeQOp~Q60PH^)GP^OD&Y$ zK6+qeN;{G8>7o{FEKIvIe&vys7k&Fbd*Elb))GZXA3`%|_Z{PFU+|65b2aTK z)1Ght&hKNMC!X`{k4rzT6(0?|mKY;WEmJ~H;e7mkFZ+?xF+b^9AH`@#`g+8&vJb!{ z+zfgP=ZhlBx*qUhw04NTqGstr+-U6(t_9YAjZ`4=Kk$8iZ@9R(OI@!1DU#-O86^Cg zwTfRg7H;aTt7wz9=o_zL*QXTbi~y-*e`@j;ay33yrm#2Yhkz9#tjBEZZCc?rLO1Q3 zrOe>RfOy}D zR1uAVLO=KFU*hk4)eG;t1^?F<{}mqp&`sKUm);IhZl|g&6e$3)Ku*6olcbcK5Ewj< z^{oLjzoQbJzhRY&^~QcGJn!?Ld*5gN%4=W8=l|s|MH54>(=O&KlwD4jQ$!|eol`0s z5Q$33;XZ&)IW^MgJx1griR%+YaWoB%4Az`rD9!uo!(vKb-A7}hRwy-L5Jjhw-O@G8 zzEaKRqIj8-o2Wp?Mot}c$36VKn#U*sksz^a*@wAe-JOP@6%E)&wNf>PkeRP>`!yQ| zRhY^-jEx73VB|5XFnBe>u~^gA-Af4)-(xJUl2BPr7YsX+7DTve(rbFkyjy$2y&+%w zf)`TC97#Z(k|0k)JT3R<{aM6q58f_@PgzvY7`6ud8Oh(^D_`&(wALT^dA;{c=JaF< z6VBWNGpO@9!^4j&P`fE*^f^amUHQWwcR#Q5kG|#GxO;Jo&A;v=_-MFkW0FZp@L)C; zKIm!h$2|9j1AdFl86OFrTmPv=Qbd_q>eOL&cGHib&8 z;nt49YoR=R`@k!IJY>8#&d>QhANW+PuQ5M9L{oyhj6LdcR>Pbk(l zufwD}X`DV^3+H@UM7v1;MyNl7VX>~ZLZduz&gJ8lbAG~lPAxH^%HmXI@+ zed5PXQDT;YtvRG7N_La5o)DSx+gVse5IqKEx)Ke1!I%8M_vzB#^F7~#kNv2Ri1DXm z34f>2uI7zQyMzS@`+1M~@S}(K5~^u3DG8ZG@4aoZY8yQB86U#?zRz#F@3wx+x4ncP z`O%-D&gWSrB<`* zENqnGcApUsVp*oN+zx*%B?cX-hL4erLj+MKRHq1fdImb;zo#2$-Gfx-xrSU-qFJz( zN~z}|AD4O>6(Cx2!eR{>HepXvq_CUMnde(+p|3fx>yWk@J5<9M)3LOA58p4TVYd=P zk9zi{1jIDWyL3HPd~E@9mR(HrQv>f@US7Vz75yDA`A%MU`!WJ-%GrbHCx$CYr7ug) z4Uuf13?Tw(yHZjVQumMJ_Ql{I{-YN^=H~^375A%1Wcwl&vv7kRBdk?)s?p&u<5V5@ z?AZRW-}`|);R%nsPZaP?-|`(uol-G5XaCTabB+^#>K0P=PyD!#ysxVMn_vD_l1ms4}JOvGZ$yH1Ge?IESFI! zml8ojYK#KTebC(K7^5HP7Q>`=a+9e(j#3|o%lzgFApSr22>vEjFIQexa`juvm6A*4 zs(i^Qd7EF=2`b9>s_Mxidow*0(P&ekp*5n=}?ZzW3-5f!;@dN>L1!qyT z1h-Mj=_~^Z2on+!N3_dvNtA&OWDZz5iMqTOgmr>%M;NQe+{NN%>R%WWF%6k zB|Ugb4ZfvJOuI9F_Eo>Y_y6E4?z_yN_MA__Mv#P~E$QVXDR&M#n9ZUkzdmh^dFRo^ zK2A`A6Y}Q}6eJ$s8`f7o`2k!Az+d~aza4%-bw{b8l2VC`Jp3m$vUSlDBNpl<&1z%5 zHe5+g{XC*OC^byzrWx3C@9RmelO(-`u1b#%Mi~4H3N77`1C1Jl%XzE-o*w$lSm51rLOj zzTunxF{RGb{moM)<38vudwj~~ben2Nv6IJCoo>V!;2O~5-+RHgb2u)PQuyRgde#Fz zFTKB<+|0AmNNXI)vC~*%^ox_UI|LY07+%WY5^-98k>N{ zGxO4yU9HcLc*fIlbK0`dm&+9YWOeA^z6L1Yqam~I_NU5Ue4^?OEwHS2xqIgqSdX{S zY4_%m@yeS3Px)g?cpp1Z$QyW5LRZ4I>f_M|-yn{Fa5larvNgX($a(tzZ<~Uj?BCgN zPQOm5kKCBH8S2qI=+~e#Tr)-9$kCD;NRt0%CpbouOb__VqG>KOZP9XiIF*BV!3Ui1;p6>uSnQjDN7$;u{z_fg7yq0yQgznyV?$2;5K-;X1vAIed)!9x+x zgtP+JGQo4%PC=AGKuV&gsNfw(cCzd?h(CsJHXR|E76BlS{rCC=`g(gi)jW6HjaOcO zORA7MpDIm)?P+MKptQCy+QMdasH_IkmIVrt!>^Rdcw8Z`FNgDC{xAllG4zMvrUw?fQoF@F*QN5NF^k< zuQi#35?T02(ss-^@>mA$N?RevW>rO;*9Ks1KXg`ut@ZI^C<^x4mxh>uU(v2%X#`%C$~Pg%YqO;(owo^ryq z?MIdmNDdAm1jetE7zdY)l(_IRHqae=)L}T{utU37Afj+28TuG9w zwTecRjKdDc9nsmwn)B>)c;vCCMb6E#eb^j{PutRJK-vGX4L zW697`969|^F@=VT#H~evrbxkJ8ms;!fwR(e ziZc!EF|~#VtditcWmCv7x`ijVZBf2jvK>P8JNw{Z^FHJ~19C!QG%vut(bA@g zK%-gU`kQX=bQJHpGx~cI@`4@atm5DSoXvYhHO83_>}GZ>n~q6%kX1&k7z;$9?5FoH zMvvef>bb^&`|a8Fin;pQoA}gcv&z^PgX6Xq$&I38#rM+MAkTYwF*J2^fmCPH&8-QWs z=_~G9001BWNklDyo3iIegekkT=j}iM#Utl7GIW<7AX|8%~0=|P|fSC z$#L;jGqG%V1jZPA?H^7-Z*RS`0`abr3v2oPi2!XG(ZWVWevdiH&s5z94K3GaiFGHh zhV8fAqO%J5{S1~r8v|oAs2KP#XLH`HC7g?7o#<9o7X=$~4>|b2sxy+zo52+l0l^0? zLg2N96ds@ZGKQA2^MBvHc7rtmp&VuTeB_pFj3rl&kvkJ1dZ^4mk>%=Hf#V8{fiXF( z$r0iRLOBFw6>7HrclLq&PdZxa{r0K4cm~_dhA9%VT@b8POF>oTttUoMGG4XKRaB}3 zjA4mkYLChAlo!nm##nL2ropSKXtvZ zEcay6#i$y^k|8l&E2dQv;RGkY)YIYJEI}j_gIzCWp~1yW~sG!deBLXRvu4Ht$7N>qlOn z0FztTT8_LnfV@74EbBv-_rla_Ts_$yD4WBW9^Ra+W%7Ww0J6$UVQc-k>V`Y<@@wzG zWPPw1JHBnk5vN)i=)4YH>p|8xh&=B{miNKf99gXoww4xjBSBYOb=ka!c~~i%CIB%s zrQ+k51D-c2EE!q~09be3$sh{Yf8X7)<{GPa9i~?jb_L$FvpQ_829xIkj*LKzu+^rm zWUw1C(ip{gzrO|maOCuZFnR6O(NoX6EY790{zyb7a(DnCM3$WUGRTRY)q@Cx;0yRr zvQu5uRNbnOYp%T!L&GEd+9Z>gWTqB^XBjdeVwQ+qKE4AcueD~!<4l^g3Z`znA*;87 zs}5+&WYAena&I8*YR)9N^{$rs>W~BWL<|I1j3PvjKmoxy5j_NGWE|$Es*os&nqbk1 z)fO;-_YK%=09kEfDmKU^JfxKONy_=>7- zeg$zv+7N;a>!<{QhrUouT#b=?)*&hees?kM zeeg*<`}`|dw0H@6dV8?iq?NJt7Mo()_FF1r^XHg#_e1#oIsb-_Oq~i}mQbO|CrqU<+9>egBhTRJ=U&1a zZ@z=FbXa}0Rj|h{J7Am5r}9xGj`HVeWX=~jY)P3UACT&rg1D#IGm(t2i-pF#?&P%u z)e>>iiO1o4Klstuh4;D}@$WzQ4*K&td}zqV%-4QdHiQobxtFL?6=r!abk>XCU2+2! zEg9nK<11eP#fY9-=LRw|G9oR*)}fF+ND(n6{#cOTm0Pkg<%@`d3xN>JCidBVM~ojo z4oj8{jj0}HTyY&ff8vqcP7VPkfHU5unot7rqv#Ps1IHgd9pC@aS!1aSqYX5Rl2wt~ zRO^}6Vq8_6fTd)E*CxkpcRd6E7&mSZyL@~H=9`5mF~Cj9w9&9u!}|zrGx(w*hc})F zMdw9{r=W>A-q{1uYUpUtEQkI-*g(_@Dj4eg2POYoIW1&^Xq70586>vDD&`g~g0EsU zMGLqn?XHw!NQ$2$xN4y8V~WDnEUhK(r<0r<>K zPZCr`1J6&i%JB4Z zj`Q^O(M>l2;AQ?(a=+HCyl48K4;ssAjK&Lhg9whH%!{Uu21~1wK-o#kjoB`2c zy>-_@UvDo)mQ(kH5HR1_t{#D#E>mJ;A^PQOUT#J!3ZrlKR zdIu3)10fhhm*blM{v$4&aUC9ea?T1b!SUk;aoQ=L#%GT|44P_eIEy7;4(|A32Rt=~~LU z!h1tQIRBFCasEYDqbM2Nx8~ZDIlT`A?SY3LeFhiIxE8m}y0@#`_3ZOzV2@p<;iv!l zO-vZ*h0+B_0+WYTU=LEz@G){*L@2qW94u;Vj13Wn6y95~2mr9wnrm=7GL$&}=uhHb ze|#3ovIQ1wHk-KO>Kkym724Zli*E^TGrAwDVB|xOf5Zs6;oH%ZpTZ1Id`nKd!p)D(=;6edy4KibK_#yk^ z*B8tfI|#q%Qhebv$AA<^9Yhec{7D^jlC^GU&bpJhs zgkXh~>m}~jhzLLfHpeUT-oh*M80Wsp*@jL75wk~;V8xU2+mZ{l@mTl+$F_Wo%BBR~ZOZFyiE ziD0z>sSMA(@Jh$~Ua!~D+tY(`bcmxh(rGEUYG|&+G{{>o`zgE_2V+~fmr`0hoe@x; zTQMxeM~IvWuS^aL!X_JUfZ30BVk%yJ?R9KAbqWV~2|}WDglT&pjo06JtLwG1%E~Jv ztMws7!X=kqg`b`MTfF(!yMOVTTQam1|MbJNaKp@5xb(L_!$5y8qBBszv3p$7C6%=> zQH$%|v*8X3|NL*~;`f)cTYBBeYvG7b?vG8Uei+7D%zyJ8+#VaLOsxkGJ^B>R{LwG* z@MBN?#ozDNJMP61pE?cKTzW1BdixOz5j#XcMXp+NTN7oN2RlS`H8)X)4Uh{K@&>Z@ z+G{d4KLm^)-;YBM+y|Fmb=`7iyczi1iATd`J#3zh0R|SjCPvx7cQYg3g~$Nl%4=`K zJMS)p)*4?u_49I{0rjkNsT&?1VKGNLVZvw_U6V|7SCN;g%AmI#OeQhW+V&v$h|B=T zPCu|?19|?17xBRC$FSX&o51-J(YID1Mz9bc-iU+bCap3a+ikNY9-RH?*tXv9XW+1d z_N}shyrguh%7VZxJPHPXyz_y!_SIepuF2}E#N|^45e3M3_VSQM3|xIEW#Oqr1cNC< zXhK^B20U2=8inb}fJiX(L1V*`2mnK^ju$!GA6-YJ7+ViLa38F{-n!C`iKy4Jj`w5P@G{A1mrj7HK`Dn28wjz< zL<6rx4y_~yhG!lj7O+-Klo`i9um7Rduv@j2)(5Gy@;o?#J+M7}j#cK=Oek zp-UhVc|NfEYLhx%>s@!>i&tNpk2NL@%37hgBBv70vBJ@2OlZFKP6nDz7(Wivw%Z!s zjS9(v>A6Hzt{NhFcpn6&s+g@8f`sA)WO*IYbH|``!%$Jdib*t>`Ue2#uHNrf@qTup zzd%y#c%0=7hi&!`YJYJ`E*?oAOw`_FuG2~j{(=O9z`e#4I-52b<{6RTNLZ>0!Db}I zmzJKrQUsGRqso`fD%>f?P-R5$a5;rnl``~>)v%akux_;x!<%P?kc0pkYmw!3C>Y6I zma;uU_)Jk+N8&ZnIhKw#y1v5`CQPVs3LHMAp-G1D)!QieaLrO8Hfj;HCdRSDR9O$K z98;X%tXLU?7{nx*bA%}=3=Z~peLce?qmY3PKc50jW^m!TKfxbnoQEvyTu`2W@kQ*q z_rd7z@52Lk-hfNa|2dAHejqmAbR$ezZ!)&rY!iI?*y*_X(qH4jyKchHpP1J17>_;i zCw%jt{{z})$Z{S)rZWgAvQg7yh&scuUubO}=luMK_|{iXL1qopU%ep3-3VMUf=xG? zg3B)YuNFN4!1)(m24#4#42k32Z?9ePxlbLAo_eS1D8`77?X)NEf9Mfha>3bn>cLy^ z^B?~UPWjyNIR5BE@wpR^!I|IvD(;_kJubcQ9E=|~)*yH7^)oU1v8Q3OI<(0-TSX+i z;|%ISY~}f7mxrpf`+v< zrZvFvY!FHa5S(>x^FAok!<$Vx%xDoGyE@aayJ034EF5A_nB_%29V)G1=%z8uvy0y2 zz6T!edQD$E<0=?igUNeDrp-beqXoREa}14?cvRZ0`|qa|2Q<=yNUq zGGriKK^4^)kA_O#4@3d#nO0-0io4a4uMsQrTnH@ZMXW@f!cZa!5R{e=NtQtHRa7l2 zb=nkT4CUd$IFaN|y}`Eh!g9e+4m5* zZ?Ck*@NoAHM2pdkLM;VA7IPLykLhm@cuIQv}ylSCY!DXDM_<>ZBi?FQ?BWgPV6-LU3v9&XcUo2yd?fCtwAb? zVvwtNZZBE<=Wi}y)7$}jyyYDUN zzJXkNInPo|4LV~Xh{|{-!Z;b=w!0p#+~XMp@iM z%CP#+W@0p>7JrLMkq+0OweYqO5JfAmwPrn5Xo&hN6Q2qpga#98$w(WHB#o}dzK9ql zgMedCeH?8855b7%ZeNYjM$4=RldPA}7136S8P8VgGRB3o(#eMgVq~O;(QJIwc`t8b zAShA2X``9kqjM-@Fwo!E_4V}h)T;%GB%~`5b-j1^^zq%D?BD<1cVI2Yc6whT_>!TH zZWO_dA{3+Wt_fd`!WX0Xmv5hn?Y8Zd6aVOE=RjML$eIjFFeN6d;ep4V!Fd<)pf}4h zeD$<1SG+DrKpCe8mM}`xXY$$fFZcU48wFnr+Efbk7z1|QX~!{}P5L_HYo}w4HCC-? zu#DPgNopuY;j1LQQEa{0#yISd1D0#0+|O!2*$64}Vnf1jqsR&{P*TqUTG#RJ0$voY zwOD24mDtA+yu8N+4n1&h3=Rx*sHCpG_C{#K@@A$!WOB_AqhxH3EUV#`S+nu{i#(hA z#_1#EJ(O+t9(OCZnr2)HAt<9vGi^NtNONQ$tJ9!#}rvV-j zBzz_S;+Es)GpNg7PPKqM!pDW2OP1VlGdZ769w1Vurl zdyyf_Tn3^Yj}RkMugrNOS18;O71FEavRA4c#+M|WCZVsdxBJZDz4xm84CaHi-ZO^p zMJQy53h*&u)*YLd6w7>}SX~xLBSyz@qS3Qa4J7j#4p)ic8>)e92gLv4&&|v zG0B)DwQcfRYhr^bWAiCiUU?;KwdEE9bd+i_22d#F=h(gP%Tb9C9R)&(Gr#k-j^}^$ zu_y586LZ*zXKl;HuPuIh_Jw0Mx;(GTCC2C*W9w{W%W{tT%`*@*UVQm=JoWUmZEaVD zHP%{#NxcHTOcH5|9y@Heb;s*EV86YE4lTZ%Sg<-x66}~Z9S~$;-+%Aj#{B%kMT_vx zdkfi=DMV>a;1-P5Ol&1?3$bxhBO>Chw|N6ub<)aJt5oR>2o5oL)H01Dr+2o0F8uwa z&^Cw7a@d^F<~#%8YuaXP+Wh%B{GJ}T-=5fb!wq;Q6g;PbO1yDTPiI?i*|KGFfC|+$ ztCiw=ivnEH z2nuh!vjDU1z8`C>zA8@s{AaN5-knC--(7r}m}D(`aI#u;$ZeJ$cMD$V!2R~%h~>bM z+R;a75VBlo3Z&r527(VLeS?uanmr)FaZZsn23frqWSR7=h~PpY8!1Ny{~d|tl=3>`~ATcko3L=vv!3afcQe;pfS2z^ewM@awKtD=?oecUklUsS7A}(}fAe10t zGa*TK2nqdH8`iV4WSD`5O4k4|6puCL3R)|SA3xajBU!d=8I}w!!9dNnz=hFqI+_Ru z_>^s-wTKYBg0>9WQ^=tei9{L#4kigwih#~};h{tX;2U_^vSnRg&)RFPC5HeHf)^v7 zXF-5600peE#;SPXrI)Lp*>HmmSX7)`?-UV8vRWvLO3om{!$g3TM~E6*ZZ;JgZ?qwv zo%{S)L*wmtW2?Sj}<07`Z(syeE}P-zqY8nz|ptl5DBnZ4Y%L(FrIvRu2dhVv^Gc;7}&|##oafM z;Ss3SC&~fJB7`6SNd=0UXBJ8$2(Jw>Na`X%YsEPlK|>jhXaYhg@Zl*R!q!`U6pt*Y za69KW7vivk_JQ)Os8lM#<_w@zM&sfc*Mf*};_*kp7=z=FI|?`a_slVmG4tkIv0%{> zOdPDkyF#c68VbOj_dkrLA4N+J$>-OA(Wb1r7`llWfc3S zOfSoL5#gI90tJaT)`(>jF%%ylocsT1m`q?r+F_qG8B8?Cr>?oGHrU86XGEpEIn+OgQoNNa{Felk@ z30+ zIFB`(;{^0*q`g8QKCN1bay1%?#BC30T^U9{P!*7+1%Gakuq{Ssa)Wy;T{hhHwXD1D zWT`k}(o8}eI--D~j`Ye&lU70Sjt7pU#1b%$a&ujDX>TB~c@AWtE#+z?r$)HiY_`i_1CI=m0CWw1u{4|z}FNde77j?lvER7W1uDme}cNV2%ClD zVQ$vX*O+41C$qW~jH&a&6?MgJN^DIfeDsQ`OHkS&l35rD(JIp}LItUR(vw={0 z5nyoGoRND?MT<}r2+a}bpxBX~)uBQ}S(J#R5FMGEh;1fRu)|7Dn1u&?JFIHI@njJX{p% z^F|v^>H7XY{ODu6um=*PiIX^3R&`M1!Ced`qbe*%$`TYv<#4V*j7=zz*X6sK|CpAuYt^30am8#KqE7ftpQt| zC=@gY8kw4?n;drTvVpw%>OA2}S;WW+y}R#kDQtRsdvW_8Z^9e%p2Pf?pT@lBAIH48 zkKom3XXBMQ58#zK58~BlXXDjpAHu88&c^%~AIE#IJ&lL%`fvQxw@<@BkA*LX5z0mt zfW!wIRdJ}sUgJutW=>V)jZipjia=VmWa~(X4c)zqkT!TDNr>7=A|4OsWAaZBBWY3v zvdSteRWj}1IoBe+?&u19>e$ZN)Ql^xM$-jp?`DEcW0A`J4?T+6kMc?X8>gKj68j)6 z+XNm}AOzIwwJsi>A*s4qU_y#d-^^bt5vc*40H}~^2H?2^fwSx@eSayfL5~CW+8Kib zoeIJK`t=2jk4)ss@qB-{_C~z7aELQTOjg+eF1(b7=bt{|XvVX<0%c2=`wWi7E=0QY&hdd#H-F@=E6{ zL-eBXN>RF|#%K~^x2aZuwML+HEv-PTKw;AE30}Z!kza@R*kz~fyT04^-TxroTew8% zrMZ|Z6FNPw6iJ!wVW^xa!=MyY#wT@>-xs$LLClA}wTy&yl2z>gOyOWpy=QV-m6H za!2s>$gLw){ob5BnBE9gp>UL@F1JA|-ash>o7JFFtJ7L&rD07kJJ10%%d*0lOq@8r zm2ncIv=+5Um?N^x;Hbk7>3GfyF1l2zIY`D%jz7(P1$W&$TV@|$WOR=VgCYnV9MKJ>M z1(eQUYjtF~t?Jwl#uxqV_Ka%jS1W*IsrKz6sjjq~{MB-U8C8J_D_U=oERq+8ajX%dD1Etv|U-bpV%1`fhut>u!hJPAR&|-Mw1G#3PUcl3n?694A^eVsaUHEMKy$g%dWTv5`ze> zED!@+F)XpVv4Y1bkw`}Hz?vi^hubTotWJZMObacTdRcH30kD`e_r%MFv>D zS1VN4NSwLCn;Z|2gS-Yp;P;u-3T`r)PeF~{Sfk>ADjBX52=m)E`SIh%ar$H|g@8*U zL1*Dd^bW@y-Z?+G|AB|_!b|h`#GSDs>KEty9ssc0&eO2vW*@CYCW&W7PKXF1W~q0X zfh-vsVqT`PyrD@(h=vv#1rxUg^-#^1NU}A&FQAdZm|h7)^Nb~l0UNKsF1FfY(=L+U zOArFd0mR^<%a|O@iG!lb^hIShJoczhcBy1;z(}KnwieDu%#``Z!3XREqm>-?ct#hA zQw6nRyo|P%3kkWyV{lwOMk_E=2XXw7+L1_!`OCT~%=7Y0=sK3$o z62?+@S5U^c%XrfwUgeroyAZh5ORRFzQx(ug%uT)CR$d1u#>Hx22?4-~o4k@TwpwFB zZfbyo?Gutck$)-jMQpQNu+t(05bTOFX>l`v4j|X$z#Yl-hA{}9eGm+&i`C75vie})IN|6|c71RE>)i9;C4fg8PKUF$M^2i64<5lcc*9eG(Yb66qX>S4 zJ8Y_#2kbh7lX(#d8I@4*Ytsr3KGMl?+H;THu=ZMO$O$ZEh=eK^gpFLhI4pm8xU#H3 znL$pPtSD1e#TOCezB6*-q(9CF}3+;$W7pf-sH;1OaeL0`ndVx*Z{ z2gB_*aNbV6XOOEr;yccH$Go%J1O#d_awyXvtv_Iqw(5NrCG_XpRciUx6#cn}5#WeI z+mJj}FT!O~?M`sCOhnSg;^wv^cMY#7hLDlUl3IGzcXr zbS4!(tn^5ww9cy2AS7^!7Xn5dFwKJvbckY%f`-u=1TWdzmQ(FyzC$5`WVi`qxME3( zyWgQs4@nwSd^GHV*?Z# zEcX>p(ZVi#u&uY+Lasy&3ZaAB_14>OP({LdeAXK%L1mvZ=eJ*k&-L< zR4GxjQe8zcV0Uf93TsRmU7di9sR6`lInJ(0$$z>U8h85&u@rS$25W1uSzgWJ00l)H zWc7Mm1v1dzFQ8Gr7YJU|Zk|J_q?dZ!k(~?grI%faNCq~mXODLE-731zEQ#s42$Fh?GA$m`6ijf%57S|L`+aZbsl48c1jmpodT-)vmu!L~9A z#)6|Yp1(Ht?}(ju`WS*M zWMkGXTn6#NMoF^RWnnCe5?Wb-ZAbZhIG{&KWGgD`6t_35?Saw;ONKiAD0}R-i?paX zBgI;S@yiW}Z@uj<0c}Q*WZS38Ho{A8232z|mM@cR{y{ixfYzy6(1=u2sgvFA6D5+( z=mW?{xN<}kdufmw#3&cqGIP3D@w};NF~rKxQDp9!;f?sU*WVnYJmX7RHX4dRAW%?Z zl;yVFLHq6A;oDfSU?Hx(;by%0`a8J#T3$5I`07_U`O-NA@8JXEeYCM+ifc$rf$3U- zFw$L=fRZ{Iq>@xJFefESz|w)dOGHo3WbqMYQ6Tt+&?i#UphSozatj>RW$}Ofi6`;E z?8k7yMVA2pjy-BRAADR>Otzt#*oEkEY?pb;V~;71Ns~Iysyio)o*d-`1A}58)AxCrpS*=$2f8hSEEv&yL*7kk0u-ZKx zZKo|-{&9)g%zsHyGR7#v|CYXo#+nQh95GcPYWe+(QtC*Wi7*Lwj0!>qy1XGNp>oP5 zqS{+=$!RWuQlip|Da1<95fn=iZSq3H3ygv>d3ADSm%I$EwPs$CwQ}kb3b0}06z^~H z+Nk6cyS9Q>P|W=)3w-9d>0NOd3l=WKH~;ZWXq$_KS681!BqwQ$S_D7h0wyIn@5HiK z;gRt?CUgs=a=PW`cz8La{KSb9u;(7TG8j^V!YI0q_v`F)&tv4iY#u}k6pak>HKL}9 zBj$ZT3=u|aXwo3B5gjk`&Xa^8dzNa8nXcPcj82qAB-z@WIH%-VWRHd@?^d)4B}Jkl z#8Aoxr(kSNDj|8V6yde`Z?$b8b#C{@LR!CCd>0(96s5ZE@9V(<`*u39zxCbk;mG4o zLW~hRP1^z6ZL^su>jF{`Tf!2>$e$IYOPqBAr5e*0yxL_2!#^IcJYJ&z@bMRhx;F#ja65jgxz-i1TWx`xnwc8 z>iIwsn{T=yrf#%B$739L=n++x%AtoGz@9XU@U9TD0bi?JRpo%!fS0sUqoM79bYLvV zHF!=L`JfajFo72lCgW-{h5|m0q9_^&W%KX3fvErachH~z?iKk8mq#ZOE&un{EQC+` zov%U*ql(`ahW*h~TmCItxpjP$rEh)TpuivTbtPdimh8Z6a>u8d18yG)xBzZk*s|~`~KIp6m+SVD3U1e*_&3^J>EkQvzrgcz~?auVnlUwjFdT>b|b+argHBwNn;b2J$M zBZf>}v93rPC?g?2GKWxNh~o`9@7kuT;+j=#nFL1G*@S3v4A(J5Ls58)uD3k1X!h+X=d2- zVsq{uP{@D~ph$hdV2bL0@qP3c%9rK69%G#6snk$ai>sQ3$Xp=xvXTBjRVHFqg2b^_ z#--{+BuX7=dBj+6gt{=|)dczLA{B6C->qWFW|DA!BkBQRCa+``L1>t7-Vw*H1-o zP55FI!4>=*Dbk+&m=igX0;1_q7%|?P?PJ?>v~%<#OXi9^2#MLW zOOs>ldhT2%h?o!xSYePUIUy>!9;wRraj;r*rt#AI?QzkcdyKKr#MbW9 zR%WLQJDuN&#`L9B+ajJC1?f%HV!DE27cK;G!bkwgqfjhwWNB|Er=k|UH^#`rV`XK~ zC8+D@In1R}f+ZePQWa`xuf=NN*Gg!iNV;|}Jzzrc9;7_0xHPN6h={BFENcy2RfLg2 zyGgbH&Ac4WV~7aEFuUNI*m1j$;4 zsK}BUrTuH(Yp;nTS&L(x(fTRpq%}W4rM}ZP$M0rbGX|;h^Pm1ZdV6xt^l$}=atP5C z2(F1Klh?$qpV+Zu<2vN<6Y$>RrO+m4Zd#h3k&}6h48XyOd5=8)9Cp~_Xeg^$Wf#3{ z@S+x!EcO-MFHyjWK7Ed%$zlPSfr$&Pdle(?NZvS%C;_Dfs|`qLL3QMKdEQ%N0?1yQ z|Ayq}uBSLYz3ZW7-7!7Ef!De;ntQRl_HZ#zsAI9_onh;_W-Z8N@l0zs9 zu3Sn6RUWkW&RwxETW_@`KD@zth@pgcO}OS#M(G46hbk|k5QqN09ETjR&k8q?G=GY+ ziMZ0S88@=R(&(IxkkLU=&L(726V#Aw3PgxLwB+DgP%bh@$@4mA&)YO{`(W=F-Txyk z_m{t@-coJqtTuku7}|TAyIi+BM08bQK($m%tyYubp0sQxY%J52RF|s*5(%oW5C&R& z5+r|DD#>q9MNg811W`JIRH=h82{5HEug1jpax2XX@`MnGTN5^`@nBxmSV4?jkO7;9 z0gMdnrP2z)fi!~|wc_k$1p=Joo0cNHYhuq`rs497&gr1_zPDf@_B-Tg+yAJv9q4-15z%7rJqLC#dul5W;r}5oP5T=;`*6)RFD0kb=Sd-f0%)l276I9m%*3I zIHMs(I5z?UV_s6_p^$tgp%cOhV9}z*c>0-VD+~yuY*4+AEQ0VL#i|x)MeKX<(Rgysi!dffUh9RmHNa$I z#N*Jr&8?SZU*yxZ|D&#{B4Qv+m~0RqiF5^;A-Js!}?Y(4`57 zbwQ(VzumUjd8cWD+%Hg;O*l7Nc|O>Wp}19?RCii;RmwT%@YK`K!J4|z2Z-JCSq{=x zDniYkmB{a#fdU22vyVh@WfQR+fz2&~xYl_#7Np}GQOgt#J#ep%=RfMm>D9c0W!eS2 zD}@-qYmE<0#IlJ{j^Ko&4(@o2_1B+*O*h$y&8E&F1c%^@YPOh!IkB5x`oGPtpBdwG~Gvy(uPQv?-wAqgx;49=r$jBsXw z*6e2yRJ$viY^yB-+Hk*o*Ki?T>_2Nq}WA}YOiLZR)Og#A590X;N*ZN`e zIsyTAJ@f=l{@V9(_z7Ra$jB(Z^tn%QHUx>vPy8I2pkWp+Uc6k-eS`!Pt+|1+HZ^2fU8Lbw z4insV^`T@hjxVv{l(q5Ek8C{VF}{7qSJ`Fl3nmat>o#~VSvS0?X_NCDPjf4H_9IVr zT`hj{v;Sndy2+5|z0es~bkT8j#QE+lQ1In4lx34Ej8MS)5g5q~iP8bkCSxbJ)*RgA zn($=yMnlwdZ7Ax0o7@p1%g@zIU2*`{OD8xK45AW?7e zYi8MQ2AkzDnv*=ED?!2YEKV^jlRQ_&AvEO>U}Uc9TOAHQ{t*BFNP1#;8- z|562_{)(S#-yBrOC_O1=RaYS}jUk{^$srZ`qTOJnSlL8!f=ZbjhyZ*GVUGeiWe?#>O979e2#U0w)}IWJmA)-1C2r zEk3q4et6bz@cg{Dp)8-S8F5k*=9h-fYG^bAZoTtieCo^J!vRNq3D3R2VL`Q8j_-Zv z>$u^H3o)+04quMI7b6Hw&gk&2Kol8oM;>E$@@qRXKzV__6{ zVX-!cHI_rXOosa(ehPaWd?MyP|FX0Y_QwV1o&`jQP>#Zv4c^c^FYG~_i#r5D@X&8*k%+<&o(-&Ic(Hk}FdYc%V*IfRa`QIx`q;7Wlz`{Ho(M{_5QG zuykaE$;;5lbS4K2Mw}ayq0uPunJ;}8?<|+DSC%D?IPPT7x{~MqA z;%Rti!4Q;X(T1_P_>v5C-Y17QgFLHqhKVRA>-7QXoCOG>TqX&IO-VHsz$F+@Gj;v- zu-T>?waL79#>8>GY!WRS6=6CZ@U&J?#KBlW?m1VC;M2#AHSr#K*uhLOC>!vh!Jlb@ zuObTnDj9*nRTe2BfJ4-OLJRid5T?NP8$Eq7TGw@xD~O z)U}00V_Hzua-+B9DpWFA`9q>)YB|tji=UK!R%RNJg7gt%MHo#tF62WAA`4Bkh!6|D z5rX5L9TAEYLU3ZB3P5x`y&xm;t|@!H)zWDQLx;fysL?{Zpsm?)x5UYwxt= z+uLrv1r9xEA8fku23T|TRnXU4N2Afe6MuRRmt1i@Zn>S&5qX~BAI~@qr=D_>IL1r( za+D)!wdA{#cuznG1X-NwD5AnqCwvL_-v7}1zH7AB_|6$$!9Sex86m6|5`jAm1cN`` z`7mzy<6W3}>pg6Y?D92v?KN@4VF%*4!}i9?69<^%6hp;nd-3J@xcG`2aqUgBuxRm6 z*T?AV>&3wb?1fJqbuc#HWCM6#q9{t-dEdjh`=TZkIB z-~BM2obw{?zV8vtdG4k6_1^Bd{nprSt4;8+tvA6In@)j>d{1)rd6T^#kx?v6gsve( zLeW?ZM1w4=0h(a)L0I{3#^$Un%zJUgjd$Ve-~AB);J4?Vg@gCq73Js<%H}dr402w1 zh!I9%aMCl8i#-5Qd%y|6BI2_JUS1qVyY{I6wE-8=(d~koy4P-@gjlb;%(%KAK z63j}HNz{fPX>BlxteX}eAc`^~wrxggOr|r5i3+lSll0k@@S`{jJc!=iRFzBuy|HtZ z{SF*h6{-Y8sEjcWp=c?xGD$P*X_(jB6 zQLVr|Sj~&Bf&%F%ra$hnTe47A(gA~$yavr}6`R4>J{W89_*2i}qD!yBwb$Q-p`}az zsw-rj$!p<=PacS4jye=;uemz6pgbF{$Om{o!l(Y2Okig*LjV9E07*naR86v}iHeEC zs8kzRncEFntrv%X`s=voz7}46-+lJR(ML|l_s;wwUU>1(FF3{+9Jt?}_{VRYiYXsj zM+ToBzT`eODN(*e2cs;YGsa=4oKJVgBCGd8=^Q^l=R*AZPyVyg^RMV@+K$`d2mkyn zZ1#~4^J&wS2;~S<38Ke^SKfqw{QfV;{7i3e55^4+q9{uY4J~Cvi+rs*X=OZh@3rip zcFbOS``v}uVee0I>m&(ovkc<~2Vkwm;w3}kmuZ`8TzdgNvhfrg|AlYjk9XYvSFZxr zTHJT@C0KinNqis>5rDCE9$4EPhaCH5G@2#un0X~aDB%l^-VJ3UEHlrFl!ijYY2W=B zuDap&|JCaB^)H`*FP(T8yc>mU4zsy4wX`B3Mlleo2wy5>c`r<+5LJLy?C#ehXfd@6 z#`K^F8e8ph1Tt&!^z2(;bwJr1fiFiuo;O1yiGzs^mV8u!0&G@?$$Id!b1%nF&;Bib z^UHt7LHq6o-yDH=qwr0xW+FMn&;&)xI3)tSZvc_xz))7ON%9IIG{i(&KHkv&!dmZ8Y35TaD}@y) zrNq<0n}!lB0?S4{v@r<5i&`s4g`mg0F2+fVgID%K4hT{eJBtTgxrA8-8SL@v(MDJ8 zne@Rc#gmz&CITe`S*ZG)TD1DSpK4Gn5EUm6TB8vYzfkdigXWeKG+vWo1nH&}3}< z;q~#c?YF|Zlh+itwU9z%MC2Ekf5njTtyK$Xk$T82+DC-ogcVdd|y$))*W&4&%m6z_{__F*rCLgMn#yi{9Q|Or1If2*d+t#~ZZG41D1# z>Alt#OGlRBsk!q((C8l+#Nfan1_sArU~nAz2l~<9H-Mrj(P%U=JUon%kzouEFU9ci zFou^6AvX$}PhA%|M^D1J1`r%dH_SXZJpf-ULx=_E+vprwUKb&Z;mTjPFg!p+X8WLP zHT?U3UW|3uSqsNZ-xm}DyemXSSU^j5j4>I4D>>?bM9MA!R5q(&v>^QJFD}5p{?pf> zwT5dhhHo}dmZMdt1A;UOt`uRAw5=jz>b)CVAXjfqO+slkaeSrjpf#H0pR`9xnpsk#^!jU=0~Vx>~Qm`pq* zj?InAiuWUfl0G-*IdD!nWcbOcY_9rzQdm%G|4?ipx*2sI#XG=!D`O&JAcPQLbY5`- zDkO~7T$Cto zTy;WPm@JgYs%s_94In6VV--iV>b&yHK(_=JAjQ9bly+6wg!j@f4{|+u$AsEQylH1O zKwDUwx2fG?Wuin1Idg>sJEgb)M%^d^OTi_70}^@!rN>MZL%Kd?bLaPom~Cci0(4X` zSxo?kZJD2`G7qk$LJB3{H&q)p2=d%ivoc1j#0s2fLRoKfa1Y;a1P#&iXDv*19t;J9LE3(LWf|0r^$Pu!I*g?V9HR82>ySFTgwD? z%=;!l3O+O?P)>-!p7~u`=Lm?LxGY9!4xnK4P&Y7P+JXr!bx-<1m@(lUcm^r$x@yEmeob&B%%hvj>{E#mH zaOUJUuA6dIZQWbsV+Q1%xrt1ir~npqT2X@pThGY0BgQ&Kk&;Nu0st1^P?R^(l|!th z`nK-|J^ze()Pt%lg{Zbek@;@3@BH(z;w+qkv{Ks@FMJ$`leM;)Yq{S6aN(%h7+hOY zk0c@kE$9SE>GZz`58jyU$H*iPht}mr231Wkntu-P(!L4FUQLE5CRhtq|M1Uf-2Z z@n=%^0ZNGxaKHE6&UA)S;s6XZA+U{^~>7n74(HZ=hqBV9!AQlWkcY)?r80R*etY7 z)!=Taml=@NKnNiOGJNuqfF#Zzg{%p{MJVePDLD#jLK6UA+as>pfdm2u#6UXHB0ibS z4xcqmW5YVRuNalf4}>H#4!FFPnZzKbI5W3{G3&v-1o0>n#H!z9uFxrveqm-nl$KZ@C(D^Kk#X^*3`$r+UQrop$`n((PK99J zUrQQGq%ymaF)`0Ks4F}!UNrnHOYej>22TODA%+z2QUve|(@XL$%7U0w?ZZT*LM<`p z1=S~r0)_*~<2P`CB>pU};y0z8kcaQ)-9hm2*X7;RlKJtd%C$_5EG=ChlGir}oq&hM zTBK*b`%t2lGB4|AU?+4}``4D+GRhZ!a5wFPw>{;9f=SVOxfgAB=M?PVS0sEB%yDuT zQAt>2dCCE3>9;Asj8`t%r9rYIKn>iq^Yiw^hzp|if}8b#7nWsFVk`P^C{hNK@~S{| zOt8>uj5|d9(cGq;_dr42jIk-FD!JPkJp%%VL<7(Oam;a5xbA(xlYd98L28Mv{kg_< z-i+4+6S2Bgo=UCBU(yO<6+BIv85RP0ML1Kru&==0$}YICR>wNnq5&%KF<39^lt!7a zaLS9qeN#m2uglLb{H!W#!3ij90+~<=Kw9nF_;L6UpUh;q^L6T0cM;pR^-Q_|TiILJ zbRO;uhK>mn;rGT4z=_`(e#a=F)N0>U2ra=fk=aO_7C^g_*_9`;H)8ue!ms0k$bnga zLsdLLm+AF2lK8B~kATLyi;U{&j;$yWSu@p-xcb z@!T=ax6Qy)?dX-4LVC%)4DeE#KOn;I_i_8FoS_q48+=}W$pa++gzSgl*AW-<5B%@^ z#qY{D(~0aL-kSK|OJMIvDDNnxJFQ&xwU4ifNpLM7;zDWDr%ty8RLGTCsOW0x%i7Io zJ!ExDGNX{|>mQ$h9ehJ)?Kc+kgze(g;f3sfx?3EEUKOORb_E@CUYx2Ru)~1t1u~?D z>WrQhX9>vEYCL0QDEbXKCjtW!>}^+7-fTBUWT96ERBv0_q4R_X=k!4wdh((2KeO5ZQjc{IBU89)H#K6nqU)QR{d~JN}vJW;8AWT?xsfNUk#ANyyC;; z8!O|ah5d2C%r_in1S;aGK6f4j)`-zpjmk{Xa5829Ze&brEwhCapSE6dC#MfZqfFHs z_Z6#yr*89{0)gRguy(_|2D&}bHarK@*!~8y8!|{y9_Jez6KXGLw;NzJt@7Q1@IeNc zaM_)s5DrCbjzK!_9CzGqKf*oW{uO2ii<-m`W1{yPCm?lPcZZokHQSBNEo1IB(>?Zj@wYHIUyKfwa=%xpnj1JXn8TMXGcuiptAH zIUf>H63yJG2oVK5Int`qa#+oAW=C}p0Af$o(l+1CQ18Z>Dw*OiLs>w~kn>&x(!yvv zEa-$v#N%rdCQ;Yn7jePti8Z12lHQ z{o;)A_cnz&F&U?eH> ztFE+?;F2d4jcM%fzQl4rj29XL9v`znskO6--90Ws#J5L4>_E&{bm1ZG5s;Z^?S_Gq zLufK^#sjpK92s@1N98gCYP=0IzmiC^-EF~a09|`39iB^qi8??Znsr{ICTi>eEN|Qs z4Gju`tJkd>nDgQ^XPuXrxd5X@k6ybDzFeEE4h;(Du# zQ|$ty!Tl?M4$X!c7yoxAVksq19LKGM5M}N0yhAc^JpT?e21Gl;zal))j!#e|T7SXY z`GptN6okxOT9=V%?FBG)se}(IB#Pp8Q7QQg9w72Zm*{_b0#Uwy*yMW=3tLW-yU2&qXTV!=(MPQTa8^w!i*%r5*l^L!|2D0jj>^VpSHvtfmEI6>k*TFez40og9Gg4@ zwOdV9C8fa1--2upf5CQy7^;S3q_`H|CDwI03*R61I!lHIOQ4SU$>-)Kiv`mcM z&K6sq@^Y?;D-T#qs6N$$tR_hIN$yby}eYSmQ)9N?t@QT=V4k?1u+&xQXKsgT!Dxal7Nq-4BD(32?LGA%bL2Q0tvx2?o3jP z0LABuoDhHJ>o_K^JkjI;Vl{Kt#1a!?$Ck+Ec&lkkOL`@gbn2{$Y#^P4SZ=^Nrj!w+ z2+6Ezeb;~DqjqM>*F^@qQ_A*jshnJlhX)magir1ptv|!ma9wYkRFEE!`rfU|WdPiF zjHp_LXE<0wrA^?z_JKSIBfRQ(!PjlIN>XyXL-khA1-`zUJkbF;Cn81_L^1oNMv2<& z01!CuU!kVBz5E1;0YC4Yh>$q%Umy|at>f}LBn1#5mFWj{p+a1pGYz z(g#TX=?Bg?8;|!N^ACw!wF>!;?42JDlMlK^HP|svkoE7$uDIR!<$BC}E!7_g@X}gU z_IO=S{Cyxj`qjzHS}kzRWKRuykq(DSqdgdmHUs$aFtQHar*WCFOXP-XQ{QdK)rT}`;hk+R<#(0B!XANy&S5HTlyjS(lF)m~|HKituaI*QP-#LZ07u?UUI9g(Q zU?Pfa%xB{mpP~B9T^0sZ;Rth*#;DNFdTI~v|J~sh+*%xF_jB=k*T4U}*>S4wj-jNQg1KJw( zc_~}-LcRQ$_aJO3z`k%{9EX8 z1E#}}NHsu{lZo}ZJn-iq^W>!fjSkPIkOZ#l4XrB^?)HQY
BDhY5eE5SO|BCe8j27!aDGp=Pqkw29ByCSV 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 Ai~s-t literal 45163 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

f8@q%9Y%{e3dEe5KuuYGX{P+Sv; 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 diff --git a/files/launcher.qss b/files/launcher.qss index dad87022cb..8be235f71b 100644 --- a/files/launcher.qss +++ b/files/launcher.qss @@ -22,7 +22,7 @@ stop:0.9 rgba(0, 0, 0, 55), stop:1 rgba(0, 0, 0, 100)); - font: 24pt "Trebuchet MS"; + font: 26pt "EB Garamond"; color: black; border-right: 1px solid rgba(0, 0, 0, 155); @@ -54,7 +54,7 @@ } #ProfileLabel { - font: 14pt "Trebuchet MS"; + font: 18pt "EB Garamond"; } #ProfilesComboBox { @@ -82,7 +82,7 @@ padding-top: 3px; padding-left: 4px; - font: 11pt "Trebuchet MS"; + font: 12pt "EB Garamond"; } #ProfilesComboBox::drop-down { diff --git a/files/mygui/CMakeLists.txt b/files/mygui/CMakeLists.txt index 9a6cde7ba1..dbc20f3f88 100644 --- a/files/mygui/CMakeLists.txt +++ b/files/mygui/CMakeLists.txt @@ -6,7 +6,6 @@ set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui) configure_file("${SDIR}/bigbars.png" "${DDIR}/bigbars.png" COPYONLY) configure_file("${SDIR}/black.png" "${DDIR}/black.png" COPYONLY) -configure_file("${SDIR}/Comic.TTF" "${DDIR}/Comic.TTF" COPYONLY) configure_file("${SDIR}/core.skin" "${DDIR}/core.skin" COPYONLY) configure_file("${SDIR}/core.xml" "${DDIR}/core.xml" COPYONLY) configure_file("${SDIR}/mwpointer.png" "${DDIR}/mwpointer.png" COPYONLY) @@ -54,4 +53,5 @@ configure_file("${SDIR}/openmw_journal_layout.xml" "${DDIR}/openmw_journal_layou configure_file("${SDIR}/openmw_journal_skin.xml" "${DDIR}/openmw_journal_skin.xml" COPYONLY) configure_file("${SDIR}/smallbars.png" "${DDIR}/smallbars.png" COPYONLY) configure_file("${SDIR}/transparent.png" "${DDIR}/transparent.png" COPYONLY) +configure_file("${SDIR}/EBGaramond-Regular.ttf" "${DDIR}/EBGaramond-Regular.ttf" COPYONLY) configure_file("${SDIR}/VeraMono.ttf" "${DDIR}/VeraMono.ttf" COPYONLY) diff --git a/files/mygui/EBGaramond-Regular.ttf b/files/mygui/EBGaramond-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dde4869030022bf4d25ac5ea4403795ebd864fd1 GIT binary patch literal 231904 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 T4s-SWr@ZM*DnIDIeBu8Aczgq4 literal 0 HcmV?d00001 diff --git a/readme.txt b/readme.txt index 8f360235fd..36a7320154 100644 --- a/readme.txt +++ b/readme.txt @@ -7,6 +7,10 @@ Version: 0.13.0 License: GPL (see GPL3.txt for more information) Website: http://www.openmw.org +Font Licenses: +EBGaramond-Regular.ttf: OFL (see OFL.txt for more information) +VeraMono.ttf: custom (see Bitstream Vera License.txt for more information) + THIS IS A WORK IN PROGRESS From 426c2785058a0a4b31148351e5c57dfea18cba22 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Sat, 24 Mar 2012 22:02:55 +0100 Subject: [PATCH 153/488] Changed the OpenMW default font from Comic sans to EB Garamond --- files/mygui/Comic.TTF | Bin 129196 -> 0 bytes files/mygui/core.skin | 6 +- files/mygui/core.xml | 48 +++---- files/mygui/openmw.font.xml | 131 +++++------------- files/mygui/openmw_button.skin.xml | 5 +- files/mygui/openmw_console.skin.xml | 2 - files/mygui/openmw_dialogue_window_layout.xml | 5 +- files/mygui/openmw_edit.skin.xml | 8 +- .../openmw_interactive_messagebox_layout.xml | 7 +- files/mygui/openmw_journal_skin.xml | 4 +- files/mygui/openmw_list.skin.xml | 8 +- files/mygui/openmw_messagebox_layout.xml | 7 +- files/mygui/openmw_progress.skin.xml | 5 +- files/mygui/openmw_settings.xml | 4 +- files/mygui/openmw_text.skin.xml | 18 +-- files/mygui/openmw_windows.skin.xml | 15 +- 16 files changed, 94 insertions(+), 179 deletions(-) delete mode 100644 files/mygui/Comic.TTF diff --git a/files/mygui/Comic.TTF b/files/mygui/Comic.TTF deleted file mode 100644 index 309894bafc18692591a1efb70da12fe958eab200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129196 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 literal 153405 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�J7yiOda|4kLi`DUZ3lTqw#22u*qi{XQgc-NL-t7*_9QP zU6oXXfnok~?^qFT#@s?;Pe#0pe`nTY-y-Ggwqe9FE+kmL2QD)uKEeqj!{RoDYlI7L ztg){8Mz@YW^@b6~F&~|9;@v&9ByhV3qWR;Oi8pN0)s_ z2R3{Z!PJIET_mm<10hxiDYq!=jZc74f%MG>k8^HroJ;P?BugKR7!xjEL2YSot z?*u?FJshQ10s{*rVeZ=6s98%w&wN%*=0{a5jps-otSnQzKe&BV|?hEX6OhIsmA1`)^Jr#+o@x1FUX1 z6rx)A@mX$gZyEg=Ujo~g`A%gPQ-ZbYJdXtJrnplK6Ag7O*jKeTh>Bbov+?j#PXe9^ z<;sObmCBKZ<=^$qbWq{46&4eDrWMVB1}EO-u?vDYb{-?mlbpx*oLnY=7$0eVJuajT zF5cvmCaOTammWowl~WgZ$o_{5nWeT~5q-i3^gW~|hmUO$oUz;q^}pIcufA&PQpK0o zab3kW+49+9<5n&Cx=BR?wUZz+X}0up$SwaA5Ww zlU2e4<_*0>Je-hrw$j{b{t265rXMyeHL-Lq1# zXRF=^@eviFv;GW)C0)Vb7790r+-5JMJe0CR4~0LeWCS_3OW;~1@1xNSTqD!8c3$3R zjIQ;|6MLo-HlQ0i-O%8M3gqcdx-c1{*kjU{7pQ}DIBp#K!05bM zc8=4bMw{G6Zmf4nIGd;hH$9Hk*Wqt#)CaCY zKZP3uAwm-y92o(n==VB(@f41&tH^=RV&1!4|5!YRDqcwN87zMbvScnCgzFr|ad+k~ zWduhJVP&*H^I&~d4_{O*Q}XMWtvTxdXd+V_(GYqT<{aJ}K>CVy+*BEcDNY5@xU^ch z7oG{q)6Ui`XV02z`LM~1439Zr*<>6 z9W($Q7&r8t3I_fAb^(oxfV&D=#-rbc67sk00xEy%xJe5+%0C#Aa&Gl_g254ZcK;*% z2)O$5}#zg zOfMW4?9>Xi$QgQ@q7lK0MB&zj89@1540CGA5gp-xz??bJfRK6b|AFfbsX_{Gr_?Ym z(S=PkOFU_czvj3$B~X8^*8G%pyy3f`gbe(TVI*Qj{#CjjUuR@%g~ZOWiaa3dC~@6r0H;2Jow$u^nJ*3>b5*qq0Kw+mt1-5AQvON|B? zp2j9Ohrn_{?PqUpf;}FnBbnMzp16UaM~25acyvRjnnRld>llg`vvfB>BwXi>R!jsq z#nT4qgpe$&SnIi`NRR(-mbq?TnK&=`eCoWt45@l!KPGP#E;y)-seOx;i38pW_w4IMD@LB13ZX>wUzYT7DJnXRF1Dg1 za~f+Wx+$sw#{)cYg*b=#xa^Q692aMV{cqoF-}nz~H%MoC2Fl5FRw%Fq*VHiO3!kjM?aaT`AP?yJSc)jG*Ck_HL9)F^ zH&SnzL7+ph0)+GBEpxSG3|C}14giPx+zmWP?14Dq!T)U*hMw#;_-5(>T?~`j@?>@A zs3wlU)S~A{z_s`(fFnI4&X8Xm%|=EgoA&|x!SH6pgQZ+PQP7-pA77HSK&b^I#-;hg z6zIW*?^C1jspd-H&~#>RLCY5mVD{R9tj+3*^dfF=DQf~mZe2rHkeze`jzq`FK=Y>6ETA?5rlcP|qyI8-2u^s32+K2BFnlpIEQ%?Aw`-q#iV5ZD(>aJc z#}t1tenYdYr#spCZv_IOZp#+(WbhNt)ccOwY?X?0ho5AvMy%HVAegs0<6;r5r|*T>9H}Pyj+>p{SV-dwPHIU!`F@3tOSu zMO8|vum3rYc1Of5r|r~xMk|giImU%&&~L>KXs;is!GP3_nncL(db?7r_hc+vN)ohYpNXl?JZ;9g%a3q!!);Zx85#1`y5!$%%?uAs>fb%EJ?=gG!f;$yP03=vSn#nu65`)b|o5B$!!O8s&8u4HIZmky(*=Ek7##O*w$ z*1rN24M!rpxCamKa=Q;Kj`}&Av@^S0XXWlvi*nWfWfQ)?R_1EaVO+3o7ZE{uZ1Nlq zwjOep(MuHw4>^yM=X|>L?RLNAnEIt*(^__$GuSC6$_|;O@@P{enqGsK$|V8I4IR34 z+0>NfB@>P!Vys%#UK}1&g=uBNaq!l=(n}_?-T9DMjdx5ZiB1; z4N!yw%9jaX82AiG2QNzJ68mU*j@ZxiA}wUus>vuQwdBOM6xb41zSHpX|6Dga-TL-c z8SOJ;Czri%H}lu+tT!+|H+UT&^d(y6=`5L_jG3~rXWFCA2YEIlQF|2?8J!^)<*41m z+gj6v#0AEu7X}tClS>+|KId-QBWQl0>M*Aj_ebKI?4My(>Phh9`q<4yA6rI z8W|5r_%}`^iRUafho<3v9X4ZC7@pnkKlipp2)04NeWdt~+y zs0~ZA{WWU_Y2N6Ojbr!*fCn!sKsc5Cqj-wOu)+Qsp`STjXgH@U%-?4-_B(7X-5s)a-+^*e zBNVxqk~%-Vroa3CEy`JOvob2VK>9po>g5t!uh$#uA?3;ZCM(9)O0$Icx-rV3-ITzh z(>y<@Hf{!mniX3piIO}&m1@*Kpo8u<@{AZ-IdWz~2~Z(167EQ`4p>CkU~;vwS)Pf}hvhu!Jr{q$Cg_(N3r`b}S^?5i`!U8%xoyo1-h%?H9weQGto*G}khmn+0r z`FuCWwW6=l*23msdq*av-94GCXQC1xzvzQvHeM=v=fDVSi#CtU!!5N)?-;ARzYaT{ z&RsVOxY_h~Om$CyFS3R+R=8*{v(lBnPfz|M+NdQiV%AfiE7B<^Z`$#8!KXZlp4%g= z5L&6Ydf`#Y5G$<$S(3t<_RVWfsm`nowJ1~`HiCQB++a_ZV*5)Be| zxd6!6yA%~}0tMEIZYu2Fkl22y3x0kh+eD?h+*d&p8!tsjfb>zOtOb%a`TApb5xdKE zbmb+KOh{{i`=GUnp!7j``yVGSY&bY6Wajbn2bR9WjpUDGQQD>z#ccr`wa*a@z2NO- zI{@oQoj&0LZE8oBiHO=M^z+1Al>F7*2ajHEz?Q)kHpG!pZ%0MT2We%2qF=?8^f#vbk4C29wNOqgs`e~41A{3OY;FeWBAYfquc&b5z zk~f;wmkcS9s=V=&aqe zA)->NydhttaC%ED$ev68fvE_y_1uhd62_Qm{~mh%9_R-Mzz9hBwh;!1$l2~VdkC|w z2#UP~t@H2Xv!p5nZ)bR(OIxUL`dqO3DmWUqIK z=Vg%9OhOvNAC#*5!_R$517Z-CaPX@-n(Z(a?x7%5KCXjm)zNydmqUTnQ4ZrKUoB#6 zrag&#tIW8M1sbVH4E)2J03ZUPA1Mr;y1zYc^)qG*L2~7%>wu0HLf;T& za8{}d><}uc-(;Nngd~rkLS6DR z?=RPu5EHbD7mHP*xRT&aJW6nk{(aste;ex2Rfh6E%%pA<{tB1PA9pV7#tJ7o_Np~a zDK20mwM}CtgWs59w|*?&o#1>)384~APYU$0dG|{-ErabwlfS0B@!~%*V>2R3uAys} zD9HaQdD4`BLuLE?&oAC>yF8{nPpnsH@&I+v&!Jp5>AYwXJtqwcO}o?PaIs0T7)zI^ z-i9?zmIYT;n#2(^C)uqZXf8HBSIXJFA8b8U)fi3w%8!#WseO%td5@e#+QimT{_ zJF2%EW>4GSH^R~MI&smngSau(OHscth{bAL&!UHwtPCCL7d00Fj&`4#p~dq^zj;?xE?`s z*jlH;BZIaO%xJA3Z1YEL|5AU)W6uZu_(p7OG(|^`s29#!yRC{(*mwR@!%S6s#Qwk1 zX|PsR2EBnqb%A{s4AXj@HeszX)Q!i!XS{M2)Obt4??;7cOz75vwkry~}#rHJwsUJwr3FX7WUuia2HMca(sm%XydC->o zR#QA7&=DI`*6Pp7<$AA<5ju{?9$05S^78nQaiP0Y`uey;s6Q|4Ttn7Osp()DZOV(x zLy_!nL)eI$zyCnuzQqTbaI3wGRo3AHgCw=lQTtdjjap!!3(!F6upDm(4(DT~p{)G3 zMd;z4yrpq5Q-{@z7>E~dc+i0N$_y8(kTRD}Y~jFO_AzT@43+f1lDS-dccB{=*iyZfJ33+olSAlJbt?%<93qv~yhSbPYVZ zD)iDZ%}5Yd{~+*BeXgB2qifsKlpcaWl@dx2#8W1Bpp%FCqDcY@e>2gDu+olo5w%`HT!|BS|sQ%l}sb#n?1WjmwvivEBhdM5Q4mqrJ)oR zQ9n83MnfvEEOf`2xAdRS;_JjjG8Oa+d<6y5`=*lP-&iH;8e{?S5tQu&ch|CsskcpRG#hA7W}3!yvl1G>J;F&IW^_OuS7R ztQMaYpHV={2H)tn+Iw{|E*p*^*%yL=kyE0*Ky@X5{Ri{JHIN}DlPb;Oi}e$titt2p z6aiK}kRjF*E=2czn1)N)L|=WoiD>l~#&?*#%F-G4ygzvF;cN!lSEKhR7h|4J_c^03 zlg?08c1MQ4=3qf;qA(xWi|=Jq%{4)Pjwx&E?LmY!l`g?1et?viUdDaNA}!hHa|@Pa zxph_Qb|8VcfeJ^k$X%Y~*_R%EwICqX+rs!|$nZ)YLecIYE6}=H?H92<4dmz`w5xgA zJR#zFB8{MqDM#b=IIp%i2v7Vj!MiY@U>bj3QarEM`-=GYD{u(wD`Iy$%V?d)t&EKYrqZ*2(dVF{UNpTazIFo4j1}+tL9JvFee5$xRb?Dp zCZFzEe3ftZ{$Z}TENm7yh?)r4bjbkV8#h%%{|9gcBq{Fb>vhr-Z0N|!mtjLADI3OA z)3JW8jP#+VGwnj?EEpw?_ABvr1O`f7AYYfvB%xsOULHxDl%BC+SF!VwuSl|8*IH#x zzrdCPRzjYQ)&G5}Te5k>II)4nPM1bG`0kw0{}Hje)n+CklPp#OWZmiRbz3{G_i!6pmU4hsow{a2#P?+YJ zv6{~V?8o6WFxDAxwI}<(clJytC72Vt$GePEXSQO*CEUZc+?kxFllmzM*^nQW>pa(q z8Gx;GI*t^Vn->UDOE0H(h6H;eHGiZ010SrPz!KJy+QT=gAX<9_A#Hzxu!}V#4q;@U7!FODna-DlMcyzPY>030= zS6u}F&dq*&){iXx_F~)HB%rnx!BF8C*AL=J&0`$5GY?NE0E=HEevmWQBZT07#7W}B z@)h@Civ#;{Q+0vI!A2~G*X}v%R+wuVa%%WVkdrix#~WxOPJsW}X=83y0000CLjC{% DFXfI0 From 08f8701b33d1a7cc5dc9d92e1c4b9a77cb35f7ab Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 31 Mar 2012 17:52:58 +0200 Subject: [PATCH 279/488] workaround for tga problem --- components/bsa/bsa_archive.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 41bff7e40a..f4f4b898cf 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -71,6 +71,9 @@ class DirArchive: public Ogre::FileSystemArchive bool findFile(const String& filename, std::string& copy) const { + if (filename.find(".tga") != std::string::npos) + return false; + { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' @@ -179,7 +182,7 @@ class DirArchive: public Ogre::FileSystemArchive bool exists(const String& filename) { std::string copy; - + if (findFile(filename, copy)) return FileSystemArchive::exists(copy); @@ -192,7 +195,7 @@ class DirArchive: public Ogre::FileSystemArchive if (findFile(filename, copy)) return FileSystemArchive::open(copy, readonly); - + DataStreamPtr p; return p; } @@ -243,7 +246,7 @@ bool exists(const String& filename) { } // Check if the file exists. - bool cexists(const String& filename) const { + bool cexists(const String& filename) const { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' || filename.at(filename.length() - 1) == '"' || filename.at(filename.length() - 1) == '>' || filename.at(filename.length() - 1) == ':' @@ -254,7 +257,7 @@ bool exists(const String& filename) { if(filename.at(filename.length() - 2) == '>') passed = filename.substr(0, filename.length() - 6); -return arc.exists(passed.c_str()); +return arc.exists(passed.c_str()); } time_t getModifiedTime(const String&) { return 0; } From 653fbdd10cf83a3d361b7017b6e491d6df7aa67a Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 18:24:43 +0200 Subject: [PATCH 280/488] master/plugin support; needs multimap instead of map --- apps/mwiniimporter/importer.cpp | 58 +++++++++++++++++++++++++++++++++ apps/mwiniimporter/importer.hpp | 1 + apps/mwiniimporter/main.cpp | 5 +++ 3 files changed, 64 insertions(+) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 09088774b4..7532bf1dae 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -2,6 +2,9 @@ #include #include #include +#include +#include +#include MwIniImporter::MwIniImporter() { const char *map[][2] = @@ -99,6 +102,61 @@ void MwIniImporter::merge(strmap &cfg, strmap &ini) { } } +void MwIniImporter::importGameFiles(strmap &cfg, strmap &ini) { + std::vector esmFiles; + std::string baseEsm("Game Files:GameFile"); + std::string esmFile(""); + + strmap::iterator it = ini.begin(); + for(int i=0; it != ini.end(); i++) { + esmFile = baseEsm; + esmFile.append(1,i+'0'); + + it = ini.find(esmFile); + if(it == ini.end()) { + break; + } + + std::cout << "found EMS file: " << it->second << std::endl; + esmFiles.push_back(it->second); + esmFile = ""; + } + + + std::vector bsaFiles; + std::string baseBsa("Archives:Archive "); + std::string bsaFile(""); + + it = ini.begin(); + for(int i=0; it != ini.end(); i++) { + bsaFile = baseBsa; + bsaFile.append(1,i+'0'); + + it = ini.find(bsaFile); + if(it == ini.end()) { + break; + } + + std::cout << "found BSA file: " << it->second << std::endl; + bsaFiles.push_back(it->second); + bsaFile = ""; + } + + if(!esmFiles.empty()) { + cfg.erase("master"); + for(std::vector::iterator it = esmFiles.begin(); it != esmFiles.end(); it++) { + cfg.insert(std::make_pair("master", *it)); + } + } + + if(!bsaFile.empty()) { + cfg.erase("plugin"); + for(std::vector::iterator it = bsaFiles.begin(); it != bsaFiles.end(); it++) { + cfg.insert(std::make_pair("plugin", *it)); + } + } +} + bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini) { return false; } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index ad5aaacde3..13cb02ee69 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -16,6 +16,7 @@ class MwIniImporter { strmap loadIniFile(std::string filename); strmap loadCfgFile(std::string filename); void merge(strmap &cfg, strmap &ini); + void importGameFiles(strmap &cfg, strmap &ini); void writeToFile(std::string file, strmap &cfg); private: diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 059703ea89..87225432d1 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -16,6 +16,7 @@ int main(int argc, char *argv[]) { ("ini,i", bpo::value(), "morrowind.ini file") ("cfg,c", bpo::value(), "openmw.cfg file") ("output,o", bpo::value()->default_value(""), "openmw.cfg file") + ("game-files,g", "import esm and esp files") ; bpo::variables_map vm; @@ -65,6 +66,10 @@ int main(int argc, char *argv[]) { std::mapcfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); + + if(vm.count("game-files")) { + importer.importGameFiles(cfg, ini); + } std::cout << "write to: " << outputFile << std::endl; importer.writeToFile(outputFile, cfg); From 092de45924ec2c263049e9fe46757892fb93c039 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 18:28:48 +0200 Subject: [PATCH 281/488] std::map to std::multimap --- apps/mwiniimporter/importer.cpp | 4 ++-- apps/mwiniimporter/importer.hpp | 2 +- apps/mwiniimporter/main.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 7532bf1dae..a92eee725c 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -26,7 +26,7 @@ strmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; std::string section(""); - std::map map; + std::multimap map; boost::iostreams::streamfile(filename.c_str()); std::string line; @@ -58,7 +58,7 @@ strmap MwIniImporter::loadIniFile(std::string filename) { strmap MwIniImporter::loadCfgFile(std::string filename) { std::cout << "load cfg file: " << filename << std::endl; - std::map map; + std::multimap map; boost::iostreams::streamfile(filename.c_str()); std::string line; diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 13cb02ee69..3c85fd25a2 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -6,7 +6,7 @@ #include -typedef std::map strmap; +typedef std::multimap strmap; class MwIniImporter { diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 87225432d1..5eba95961a 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -62,8 +62,8 @@ int main(int argc, char *argv[]) { MwIniImporter importer; importer.setVerbose(vm.count("verbose")); - std::mapini = importer.loadIniFile(iniFile); - std::mapcfg = importer.loadCfgFile(cfgFile); + std::multimapini = importer.loadIniFile(iniFile); + std::multimapcfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); From cbf6c0404a7f0177e5eea47da04c77beb0c8a7f3 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 10:06:12 -0700 Subject: [PATCH 282/488] Implement a basic underwater sound environment --- apps/openmw/mwsound/openal_output.cpp | 60 +++++++++++++++++++++++---- apps/openmw/mwsound/openal_output.hpp | 6 ++- apps/openmw/mwsound/sound_output.hpp | 4 +- apps/openmw/mwsound/soundmanager.cpp | 11 ++++- apps/openmw/mwsound/soundmanager.hpp | 5 +++ 5 files changed, 72 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ddf4df7057..6c7fff973a 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -260,7 +260,16 @@ bool OpenAL_SoundStream::isPlaying() void OpenAL_SoundStream::update() { - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + ALfloat gain = mVolume*mBaseVolume; + ALfloat pitch = 1.0f; + if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) + { + gain *= 0.9f; + pitch *= 0.7f; + } + + alSourcef(mSource, AL_GAIN, gain); + alSourcef(mSource, AL_PITCH, pitch); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -388,7 +397,16 @@ bool OpenAL_Sound::isPlaying() void OpenAL_Sound::update() { - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + ALfloat gain = mVolume*mBaseVolume; + ALfloat pitch = 1.0f; + if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) + { + gain *= 0.9f; + pitch *= 0.7f; + } + + alSourcef(mSource, AL_GAIN, gain); + alSourcef(mSource, AL_PITCH, pitch); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -397,10 +415,18 @@ void OpenAL_Sound::update() void OpenAL_Sound3D::update() { + ALfloat gain = mVolume*mBaseVolume; + ALfloat pitch = 1.0f; if(mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) - alSourcef(mSource, AL_GAIN, 0.0f); - else - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + gain = 0.0f; + else if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) + { + gain *= 0.9f; + pitch *= 0.7f; + } + + alSourcef(mSource, AL_GAIN, gain); + alSourcef(mSource, AL_PITCH, pitch); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -638,6 +664,11 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float alSourcef(src, AL_MAX_DISTANCE, 1000.0f); alSourcef(src, AL_ROLLOFF_FACTOR, 0.0f); + if(!(flags&Play_NoEnv) && mLastEnvironment == Env_Underwater) + { + volume *= 0.9f; + pitch *= 0.7f; + } alSourcef(src, AL_GAIN, volume); alSourcef(src, AL_PITCH, pitch); @@ -685,6 +716,11 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector alSourcef(src, AL_MAX_DISTANCE, max); alSourcef(src, AL_ROLLOFF_FACTOR, 1.0f); + if(!(flags&Play_NoEnv) && mLastEnvironment == Env_Underwater) + { + volume *= 0.9f; + pitch *= 0.7f; + } alSourcef(src, AL_GAIN, (pos.squaredDistance(mPos) > max*max) ? 0.0f : volume); alSourcef(src, AL_PITCH, pitch); @@ -701,7 +737,7 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector } -SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) +SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch, int flags) { boost::shared_ptr sound; ALuint src; @@ -713,6 +749,8 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa try { + if((flags&Play_Loop)) + std::cout <<"Warning: cannot loop stream "<open(fname); sound.reset(new OpenAL_SoundStream(*this, src, decoder)); @@ -731,6 +769,11 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa alSourcef(src, AL_MAX_DISTANCE, 1000.0f); alSourcef(src, AL_ROLLOFF_FACTOR, 0.0f); + if(!(flags&Play_NoEnv) && mLastEnvironment == Env_Underwater) + { + volume *= 0.9f; + pitch *= 0.7f; + } alSourcef(src, AL_GAIN, volume); alSourcef(src, AL_PITCH, pitch); @@ -743,9 +786,10 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa } -void OpenAL_Output::updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) +void OpenAL_Output::updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir, Environment env) { mPos = pos; + mLastEnvironment = env; if(mContext) { @@ -762,7 +806,7 @@ void OpenAL_Output::updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 OpenAL_Output::OpenAL_Output(SoundManager &mgr) : Sound_Output(mgr), mDevice(0), mContext(0), mBufferCacheMemSize(0), - mStreamThread(new StreamThread) + mLastEnvironment(Env_Normal), mStreamThread(new StreamThread) { } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index a709576bae..d62d20286a 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -36,6 +36,8 @@ namespace MWSound ALuint getBuffer(const std::string &fname); void bufferFinished(ALuint buffer); + Environment mLastEnvironment; + virtual std::vector enumerate(); virtual void init(const std::string &devname=""); virtual void deinit(); @@ -43,9 +45,9 @@ namespace MWSound virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, int flags); virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, float volume, float pitch, float min, float max, int flags); - virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch); + virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch, int flags); - virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir); + virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir, Environment env); OpenAL_Output& operator=(const OpenAL_Output &rhs); OpenAL_Output(const OpenAL_Output &rhs); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 1507e18472..774e42efa3 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -27,9 +27,9 @@ namespace MWSound virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, int flags) = 0; virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, float volume, float pitch, float min, float max, int flags) = 0; - virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch) = 0; + virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch, int flags) = 0; - virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) = 0; + virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir, Environment env) = 0; Sound_Output& operator=(const Sound_Output &rhs); Sound_Output(const Sound_Output &rhs); diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 2c2e6e9f91..aaeef80ff5 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -137,8 +137,9 @@ namespace MWSound { if(mMusic) mMusic->stop(); - mMusic = mOutput->streamSound(filename, 0.4f, 1.0f); + mMusic = mOutput->streamSound(filename, 0.4f, 1.0f, Play_NoEnv); mMusic->mBaseVolume = 0.4f; + mMusic->mFlags = Play_NoEnv; } catch(std::exception &e) { @@ -408,19 +409,25 @@ namespace MWSound if(!isMusicPlaying()) startRandomTitle(); + MWWorld::Ptr::CellStore *current = mEnvironment.mWorld->getPlayer().getPlayer().getCell(); Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); Ogre::Vector3 nPos, nDir, nUp; nPos = cam->getRealPosition(); nDir = cam->getRealDirection(); nUp = cam->getRealUp(); + Environment env = Env_Normal; + if(nPos.y < current->cell->water) + env = Env_Underwater; + // The output handler is expecting vectors oriented like the game // (that is, -Z goes down, +Y goes forward), but that's not what we // get from Ogre's camera, so we have to convert. const Ogre::Vector3 pos(nPos[0], -nPos[2], nPos[1]); const Ogre::Vector3 at(nDir[0], -nDir[2], nDir[1]); const Ogre::Vector3 up(nUp[0], -nUp[2], nUp[1]); - mOutput->updateListener(pos, at, up); + + mOutput->updateListener(pos, at, up, env); // Check if any sounds are finished playing, and trash them SoundMap::iterator snditer = mActiveSounds.begin(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index de5cca839c..cad5f61871 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -43,6 +43,11 @@ namespace MWSound static inline int operator&(const PlayMode &a, const PlayMode &b) { return (int)a & (int)b; } + enum Environment { + Env_Normal, + Env_Underwater, + }; + class SoundManager { Ogre::ResourceGroupManager& mResourceMgr; From f8d45eae52413bba78fea6715046ac7ac7eb2182 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 19:08:05 +0200 Subject: [PATCH 283/488] fix #1 --- apps/openmw/mwrender/occlusionquery.cpp | 7 +++++-- apps/openmw/mwrender/occlusionquery.hpp | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 228d8a4990..b571e3c3ad 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -55,20 +55,21 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); mObjectNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); + mBBNodeReal = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); mBBQueryTotal = mRendering->getScene()->createBillboardSet(1); mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); mBBQueryTotal->setMaterialName("QueryTotalPixels"); mBBQueryTotal->setRenderQueueGroup(queue); - mBBNode->attachObject(mBBQueryTotal); + mBBNodeReal->attachObject(mBBQueryTotal); mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); mBBQueryVisible->setDefaultDimensions(150, 150); mBBQueryVisible->createBillboard(Vector3::ZERO); mBBQueryVisible->setMaterialName("QueryVisiblePixels"); mBBQueryVisible->setRenderQueueGroup(queue); - mBBNode->attachObject(mBBQueryVisible); + mBBNodeReal->attachObject(mBBQueryVisible); mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); /// \todo ideally this should occupy exactly 1 pixel on the screen @@ -178,6 +179,8 @@ void OcclusionQuery::update(float duration) dist /= 1000.f; mBBNode->setPosition(mSunNode->getPosition() * dist); mBBNode->setScale(dist, dist, dist); + mBBNodeReal->setPosition(mBBNode->_getDerivedPosition()); + mBBNodeReal->setScale(mBBNode->getScale()); // Stop occlusion queries until we get their information // (may not happen on the same frame they are requested in) diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index e81358eb6c..102b18bee3 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -65,6 +65,7 @@ namespace MWRender Ogre::SceneNode* mSunNode; Ogre::SceneNode* mBBNode; + Ogre::SceneNode* mBBNodeReal; float mSunVisibility; Ogre::SceneNode* mObjectNode; From 909abb480d8479f7f70268f717556cb2f82b9102 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 19:09:36 +0200 Subject: [PATCH 284/488] fix 2 --- apps/openmw/mwrender/occlusionquery.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index b571e3c3ad..9baea23b51 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -217,8 +217,6 @@ void OcclusionQuery::update(float duration) //std::cout << "Single object query result: " << result << " pixels " << std::endl; mTestResult = (result != 0); - mBBQuerySingleObject->setVisible(false); - mQuerySingleObjectStarted = false; mQuerySingleObjectRequested = false; } From c08a2b294224da72d32d409c7229aa999c1c4f82 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 19:12:02 +0200 Subject: [PATCH 285/488] fix 3 --- apps/openmw/mwrender/occlusionquery.cpp | 10 +++++++--- apps/openmw/mwrender/occlusionquery.hpp | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 9baea23b51..de66df6d97 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -12,7 +12,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), mTestResult(false), - mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false) + mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false), mDoQuery2(false) { mRendering = renderer; mSunNode = sunNode; @@ -82,6 +82,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mRendering->getScene()->addRenderObjectListener(this); mRendering->getScene()->addRenderQueueListener(this); mDoQuery = true; + mDoQuery2 = true; } OcclusionQuery::~OcclusionQuery() @@ -125,7 +126,7 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass mActiveQuery = mSunVisibleAreaQuery; } } - if (rend == mBBQuerySingleObject && mQuerySingleObjectRequested) + if (mDoQuery2 == true && rend == mBBQuerySingleObject && mQuerySingleObjectRequested) { mQuerySingleObjectStarted = true; mQuerySingleObjectRequested = false; @@ -154,7 +155,7 @@ void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocati mSunVisibleAreaQuery->beginOcclusionQuery(); mSunVisibleAreaQuery->endOcclusionQuery(); } - if (mObjectWasVisible == false && mQuerySingleObjectRequested) + if (mObjectWasVisible == false && mDoQuery2 && mQuerySingleObjectRequested) { mSingleObjectQuery->beginOcclusionQuery(); mSingleObjectQuery->endOcclusionQuery(); @@ -185,6 +186,7 @@ void OcclusionQuery::update(float duration) // Stop occlusion queries until we get their information // (may not happen on the same frame they are requested in) mDoQuery = false; + mDoQuery2 = false; if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding()) @@ -219,6 +221,8 @@ void OcclusionQuery::update(float duration) mQuerySingleObjectStarted = false; mQuerySingleObjectRequested = false; + + mDoQuery2 = true; } } diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index 102b18bee3..ebdc51311d 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -77,6 +77,7 @@ namespace MWRender bool mSupported; bool mDoQuery; + bool mDoQuery2; bool mQuerySingleObjectRequested; bool mQuerySingleObjectStarted; From c9067249dd0a3e4eef6d5db37480bc74426721c8 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 19:16:14 +0200 Subject: [PATCH 286/488] fix 4 --- apps/openmw/mwrender/occlusionquery.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index de66df6d97..2bcf6bd4b4 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -126,7 +126,7 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass mActiveQuery = mSunVisibleAreaQuery; } } - if (mDoQuery2 == true && rend == mBBQuerySingleObject && mQuerySingleObjectRequested) + if (mDoQuery2 == true && rend == mBBQuerySingleObject) { mQuerySingleObjectStarted = true; mQuerySingleObjectRequested = false; @@ -155,7 +155,7 @@ void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocati mSunVisibleAreaQuery->beginOcclusionQuery(); mSunVisibleAreaQuery->endOcclusionQuery(); } - if (mObjectWasVisible == false && mDoQuery2 && mQuerySingleObjectRequested) + if (mObjectWasVisible == false && mDoQuery2) { mSingleObjectQuery->beginOcclusionQuery(); mSingleObjectQuery->endOcclusionQuery(); @@ -210,13 +210,13 @@ void OcclusionQuery::update(float duration) mDoQuery = true; } - if (mQuerySingleObjectStarted && !mSingleObjectQuery->isStillOutstanding()) + if (!mSingleObjectQuery->isStillOutstanding()) { unsigned int result; mSingleObjectQuery->pullOcclusionQuery(&result); - //std::cout << "Single object query result: " << result << " pixels " << std::endl; + std::cout << "Single object query result: " << result << " pixels " << std::endl; mTestResult = (result != 0); mQuerySingleObjectStarted = false; From 4944a29b21b515f33686ab54dc0ecfd71e8b6cbd Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 10:41:12 -0700 Subject: [PATCH 287/488] Keep track of the sound pitch --- apps/openmw/mwsound/openal_output.cpp | 6 +++--- apps/openmw/mwsound/sound.hpp | 2 ++ apps/openmw/mwsound/soundmanager.cpp | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 6c7fff973a..41411a6216 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -261,7 +261,7 @@ bool OpenAL_SoundStream::isPlaying() void OpenAL_SoundStream::update() { ALfloat gain = mVolume*mBaseVolume; - ALfloat pitch = 1.0f; + ALfloat pitch = mPitch; if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) { gain *= 0.9f; @@ -398,7 +398,7 @@ bool OpenAL_Sound::isPlaying() void OpenAL_Sound::update() { ALfloat gain = mVolume*mBaseVolume; - ALfloat pitch = 1.0f; + ALfloat pitch = mPitch; if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) { gain *= 0.9f; @@ -416,7 +416,7 @@ void OpenAL_Sound::update() void OpenAL_Sound3D::update() { ALfloat gain = mVolume*mBaseVolume; - ALfloat pitch = 1.0f; + ALfloat pitch = mPitch; if(mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) gain = 0.0f; else if(!(mFlags&Play_NoEnv) && mOutput.mLastEnvironment == Env_Underwater) diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index ca12ec5571..a33892548c 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -16,6 +16,7 @@ namespace MWSound Ogre::Vector3 mPos; float mVolume; /* NOTE: Real volume = mVolume*mBaseVolume */ float mBaseVolume; + float mPitch; float mMinDistance; float mMaxDistance; int mFlags; @@ -29,6 +30,7 @@ namespace MWSound Sound() : mPos(0.0f, 0.0f, 0.0f) , mVolume(1.0f) , mBaseVolume(1.0f) + , mPitch(1.0f) , mMinDistance(20.0f) /* 1 * min_range_scale */ , mMaxDistance(12750.0f) /* 255 * max_range_scale */ , mFlags(Play_Normal) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index aaeef80ff5..a00b7dc661 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -216,6 +216,7 @@ namespace MWSound sound = mOutput->playSound(file, volume*basevol, pitch, mode); sound->mVolume = volume; sound->mBaseVolume = basevol; + sound->mPitch = pitch; sound->mMinDistance = min; sound->mMaxDistance = max; sound->mFlags = mode; @@ -246,6 +247,7 @@ namespace MWSound sound->mPos = objpos; sound->mVolume = volume; sound->mBaseVolume = basevol; + sound->mPitch = pitch; sound->mMinDistance = min; sound->mMaxDistance = max; sound->mFlags = mode; From 3a57746ee47f8504f6c531fd43166316ba973fd9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 10:43:55 -0700 Subject: [PATCH 288/488] Remove an unneeded volume special-case --- apps/openmw/mwsound/soundmanager.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a00b7dc661..1aa2bf2bf7 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -88,10 +88,7 @@ namespace MWSound if(snd == NULL) throw std::runtime_error(std::string("Failed to lookup sound ")+soundId); - if(snd->data.volume == 0) - volume = 0.0f; - else - volume *= pow(10.0, (snd->data.volume/255.0f*3348.0 - 3348.0) / 2000.0); + volume *= pow(10.0, (snd->data.volume/255.0*3348.0 - 3348.0) / 2000.0); if(snd->data.minRange == 0 && snd->data.maxRange == 0) { From 3cc81d74bc3395198f9fa995191b410842de31e0 Mon Sep 17 00:00:00 2001 From: Eli2 Date: Sat, 31 Mar 2012 19:50:21 +0200 Subject: [PATCH 289/488] Cleanup, replaced if with switch --- apps/openmw/mwgui/window_manager.cpp | 110 ++++++++++++--------------- 1 file changed, 48 insertions(+), 62 deletions(-) diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 4654674695..1afca1d41a 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -180,71 +180,57 @@ void WindowManager::updateVisible() // Mouse is visible whenever we're not in game mode MyGUI::PointerManager::getInstance().setVisible(isGuiMode()); - // If in game mode, don't show anything. - if(mode == GM_Game) //Use a switch/case structure - { - return; - } + int eff; + switch(mode) { + case GM_Game: + // If in game mode, don't show anything. + break; + case GM_MainMenu: + menu->setVisible(true); + break; + case GM_Console: + console->enable(); + break; + case GM_Name: + case GM_Race: + case GM_Class: + case GM_ClassPick: + case GM_ClassCreate: + case GM_Birth: + case GM_ClassGenerate: + case GM_Review: + mCharGen->spawnDialog(mode); + break; + case GM_Inventory: + // First, compute the effective set of windows to show. + // This is controlled both by what windows the + // user has opened/closed (the 'shown' variable) and by what + // windows we are allowed to show (the 'allowed' var.) + eff = shown & allowed; - if(mode == GM_MainMenu) - { - // Enable the main menu - menu->setVisible(true); - return; - } - - if(mode == GM_Console) - { - console->enable(); - return; - } - - //There must be a more elegant solution - if (mode == GM_Name || mode == GM_Race || mode == GM_Class || mode == GM_ClassPick || mode == GM_ClassCreate || mode == GM_Birth || mode == GM_ClassGenerate || mode == GM_Review) - { - mCharGen->spawnDialog(mode); - return; - } - - if(mode == GM_Inventory) - { - // Ah, inventory mode. First, compute the effective set of - // windows to show. This is controlled both by what windows the - // user has opened/closed (the 'shown' variable) and by what - // windows we are allowed to show (the 'allowed' var.) - int eff = shown & allowed; - - // Show the windows we want - map -> setVisible( (eff & GW_Map) != 0 ); - stats -> setVisible( (eff & GW_Stats) != 0 ); - return; - } - - if (mode == GM_Dialogue) - { - dialogueWindow->open(); - return; - } - - if(mode == GM_InterMessageBox) - { - if(!mMessageBoxManager->isInteractiveMessageBox()) { + // Show the windows we want + map -> setVisible( (eff & GW_Map) != 0 ); + stats -> setVisible( (eff & GW_Stats) != 0 ); + break; + case GM_Dialogue: + dialogueWindow->open(); + break; + case GM_InterMessageBox: + if(!mMessageBoxManager->isInteractiveMessageBox()) { + setGuiMode(GM_Game); + } + break; + case GM_Journal: + mJournal->setVisible(true); + mJournal->open(); + break; + default: + // Unsupported mode, switch back to game + // Note: The call will eventually end up this method again but + // will stop at the check if mode is GM_Game. setGuiMode(GM_Game); - } - return; + break; } - - if(mode == GM_Journal) - { - mJournal->setVisible(true); - mJournal->open(); - return; - } - - // Unsupported mode, switch back to game - // Note: The call will eventually end up this method again but - // will stop at the check if(mode == GM_Game) above. - setGuiMode(GM_Game); } void WindowManager::setValue (const std::string& id, const MWMechanics::Stat& value) From e8e8d3fb1b4ef1fb917e04278fd6493c310d34ca Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 10:59:29 -0700 Subject: [PATCH 290/488] Fully reset the music before starting the next track --- apps/openmw/mwsound/soundmanager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 1aa2bf2bf7..a96aac6c5c 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -132,8 +132,7 @@ namespace MWSound std::cout <<"Playing "<stop(); + stopMusic(); mMusic = mOutput->streamSound(filename, 0.4f, 1.0f, Play_NoEnv); mMusic->mBaseVolume = 0.4f; mMusic->mFlags = Play_NoEnv; From b018d00fd3feff313ec9c099ea5c73be89f24e5d Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 20:05:23 +0200 Subject: [PATCH 291/488] fix 5 --- apps/openmw/mwrender/occlusionquery.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 2bcf6bd4b4..f4eb08acdc 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -126,7 +126,7 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass mActiveQuery = mSunVisibleAreaQuery; } } - if (mDoQuery2 == true && rend == mBBQuerySingleObject) + if (mDoQuery == true && rend == mBBQuerySingleObject) { mQuerySingleObjectStarted = true; mQuerySingleObjectRequested = false; @@ -155,7 +155,7 @@ void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocati mSunVisibleAreaQuery->beginOcclusionQuery(); mSunVisibleAreaQuery->endOcclusionQuery(); } - if (mObjectWasVisible == false && mDoQuery2) + if (mObjectWasVisible == false && mDoQuery) { mSingleObjectQuery->beginOcclusionQuery(); mSingleObjectQuery->endOcclusionQuery(); @@ -189,7 +189,8 @@ void OcclusionQuery::update(float duration) mDoQuery2 = false; if (!mSunTotalAreaQuery->isStillOutstanding() - && !mSunVisibleAreaQuery->isStillOutstanding()) + && !mSunVisibleAreaQuery->isStillOutstanding() + && !mSingleObjectQuery->isStillOutstanding()) { unsigned int totalPixels; unsigned int visiblePixels; @@ -208,10 +209,6 @@ void OcclusionQuery::update(float duration) if (mSunVisibility > 1) mSunVisibility = 1; } - mDoQuery = true; - } - if (!mSingleObjectQuery->isStillOutstanding()) - { unsigned int result; mSingleObjectQuery->pullOcclusionQuery(&result); @@ -222,7 +219,7 @@ void OcclusionQuery::update(float duration) mQuerySingleObjectStarted = false; mQuerySingleObjectRequested = false; - mDoQuery2 = true; + mDoQuery = true; } } From 5f78f6c72325de90c7efbc55fc191dc3c27dee44 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 20:10:34 +0200 Subject: [PATCH 292/488] change queue --- apps/openmw/mwrender/occlusionquery.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index f4eb08acdc..ade0f976e0 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -61,14 +61,14 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); mBBQueryTotal->setMaterialName("QueryTotalPixels"); - mBBQueryTotal->setRenderQueueGroup(queue); + mBBQueryTotal->setRenderQueueGroup(queue+1); mBBNodeReal->attachObject(mBBQueryTotal); mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); mBBQueryVisible->setDefaultDimensions(150, 150); mBBQueryVisible->createBillboard(Vector3::ZERO); mBBQueryVisible->setMaterialName("QueryVisiblePixels"); - mBBQueryVisible->setRenderQueueGroup(queue); + mBBQueryVisible->setRenderQueueGroup(queue+1); mBBNodeReal->attachObject(mBBQueryVisible); mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); From cfb194f1d13c1836022b0845d7ffdc5d896a768b Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 20:18:20 +0200 Subject: [PATCH 293/488] fix 6 --- apps/openmw/mwrender/occlusionquery.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index ade0f976e0..bfa3b73aef 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -140,6 +140,11 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocation, bool& repeatThisInvocation) { + if (mActiveQuery != NULL) + { + mActiveQuery->endOcclusionQuery(); + mActiveQuery = NULL; + } /** * for every beginOcclusionQuery(), we want a respective pullOcclusionQuery() and vice versa * this also means that results can be wrong at other places if we pull, but beginOcclusionQuery() was never called From 13efe68fc3a628abaa8ca65181390030983c4e22 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 20:28:07 +0200 Subject: [PATCH 294/488] disabled some debug output --- apps/openmw/mwrender/occlusionquery.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index bfa3b73aef..cc3464c646 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -95,7 +95,6 @@ OcclusionQuery::~OcclusionQuery() bool OcclusionQuery::supported() { - //if (!mResponding) std::cout << "Occlusion query timed out" << std::endl; return mSupported; } @@ -218,7 +217,6 @@ void OcclusionQuery::update(float duration) mSingleObjectQuery->pullOcclusionQuery(&result); - std::cout << "Single object query result: " << result << " pixels " << std::endl; mTestResult = (result != 0); mQuerySingleObjectStarted = false; From 4ef921c43fd82f09e61677765c4394de2c32f251 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 31 Mar 2012 20:50:22 +0200 Subject: [PATCH 295/488] Prevent internal classes from being marked dllimport --- apps/openmw/mwrender/terrainmaterial.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwrender/terrainmaterial.hpp b/apps/openmw/mwrender/terrainmaterial.hpp index 798821d616..3cb3163475 100644 --- a/apps/openmw/mwrender/terrainmaterial.hpp +++ b/apps/openmw/mwrender/terrainmaterial.hpp @@ -50,7 +50,7 @@ namespace Ogre terrain. @note Requires the Cg plugin to render correctly */ - class _OgreTerrainExport TerrainMaterialGeneratorB : public TerrainMaterialGenerator + class TerrainMaterialGeneratorB : public TerrainMaterialGenerator { public: TerrainMaterialGeneratorB(); @@ -58,7 +58,7 @@ namespace Ogre /** Shader model 2 profile target. */ - class _OgreTerrainExport SM2Profile : public TerrainMaterialGenerator::Profile + class SM2Profile : public TerrainMaterialGenerator::Profile { public: SM2Profile(TerrainMaterialGenerator* parent, const String& name, const String& desc); @@ -161,7 +161,7 @@ namespace Ogre void addTechnique(const MaterialPtr& mat, const Terrain* terrain, TechniqueType tt); /// Interface definition for helper class to generate shaders - class _OgreTerrainExport ShaderHelper : public TerrainAlloc + class ShaderHelper : public TerrainAlloc { public: ShaderHelper() {} @@ -194,7 +194,7 @@ namespace Ogre }; /// Utility class to help with generating shaders for Cg / HLSL. - class _OgreTerrainExport ShaderHelperCg : public ShaderHelper + class ShaderHelperCg : public ShaderHelper { protected: HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); @@ -212,7 +212,7 @@ namespace Ogre void generateFpDynamicShadows(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, StringUtil::StrStreamType& outStream); }; - class _OgreTerrainExport ShaderHelperHLSL : public ShaderHelperCg + class ShaderHelperHLSL : public ShaderHelperCg { protected: HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); @@ -220,7 +220,7 @@ namespace Ogre }; /// Utility class to help with generating shaders for GLSL. - class _OgreTerrainExport ShaderHelperGLSL : public ShaderHelper + class ShaderHelperGLSL : public ShaderHelper { protected: HighLevelGpuProgramPtr createVertexProgram(const SM2Profile* prof, const Terrain* terrain, TechniqueType tt); From 64f792c01d4e3595f5ba0116773af23b23c7f9ab Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 31 Mar 2012 21:05:33 +0200 Subject: [PATCH 296/488] Fix a value defined at the wrong place --- apps/openmw/mwsound/openal_output.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ddf4df7057..e57c1a7094 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -71,7 +71,7 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) class OpenAL_SoundStream : public Sound { static const ALuint sNumBuffers = 6; - static const ALfloat sBufferLength = 0.125f; + static const ALfloat sBufferLength; OpenAL_Output &mOutput; @@ -101,6 +101,7 @@ public: bool process(); }; +const ALfloat OpenAL_SoundStream::sBufferLength = 0.125f; // // A background streaming thread (keeps active streams processed) From 6d875dfd54105505c62f831717632e6c9eeaad12 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 21:06:48 +0200 Subject: [PATCH 297/488] handle master/plugin properly --- apps/mwiniimporter/importer.cpp | 120 ++++++++++++++------------------ apps/mwiniimporter/importer.hpp | 10 ++- apps/mwiniimporter/main.cpp | 14 ++-- 3 files changed, 69 insertions(+), 75 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index a92eee725c..937073632d 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -5,6 +5,7 @@ #include #include #include +#include MwIniImporter::MwIniImporter() { const char *map[][2] = @@ -26,17 +27,12 @@ strmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; std::string section(""); - std::multimap map; + std::map map; boost::iostreams::streamfile(filename.c_str()); std::string line; while (std::getline(file, line)) { - // ignore sections for now - if(line.empty() || line[0] == ';') { - continue; - } - if(line[0] == '[') { if(line.length() > 2) { section = line.substr(1, line.length()-3); @@ -44,6 +40,15 @@ strmap MwIniImporter::loadIniFile(std::string filename) { continue; } + int comment_pos = line.find(";"); + if(comment_pos > 0) { + line = line.substr(0,comment_pos); + } + + if(line.empty()) { + continue; + } + int pos = line.find("="); if(pos < 1) { continue; @@ -58,16 +63,12 @@ strmap MwIniImporter::loadIniFile(std::string filename) { strmap MwIniImporter::loadCfgFile(std::string filename) { std::cout << "load cfg file: " << filename << std::endl; - std::multimap map; + std::map map; boost::iostreams::streamfile(filename.c_str()); std::string line; while (std::getline(file, line)) { - if(line[0] == '[') { // section - continue; // ignore for now - } - // we cant say comment by only looking at first char anymore int comment_pos = line.find("#"); if(comment_pos > 0) { @@ -102,67 +103,50 @@ void MwIniImporter::merge(strmap &cfg, strmap &ini) { } } -void MwIniImporter::importGameFiles(strmap &cfg, strmap &ini) { - std::vector esmFiles; - std::string baseEsm("Game Files:GameFile"); - std::string esmFile(""); - - strmap::iterator it = ini.begin(); - for(int i=0; it != ini.end(); i++) { - esmFile = baseEsm; - esmFile.append(1,i+'0'); - - it = ini.find(esmFile); - if(it == ini.end()) { - break; - } - - std::cout << "found EMS file: " << it->second << std::endl; - esmFiles.push_back(it->second); - esmFile = ""; - } - - - std::vector bsaFiles; - std::string baseBsa("Archives:Archive "); - std::string bsaFile(""); - - it = ini.begin(); - for(int i=0; it != ini.end(); i++) { - bsaFile = baseBsa; - bsaFile.append(1,i+'0'); - - it = ini.find(bsaFile); - if(it == ini.end()) { - break; - } - - std::cout << "found BSA file: " << it->second << std::endl; - bsaFiles.push_back(it->second); - bsaFile = ""; - } - - if(!esmFiles.empty()) { - cfg.erase("master"); - for(std::vector::iterator it = esmFiles.begin(); it != esmFiles.end(); it++) { - cfg.insert(std::make_pair("master", *it)); - } - } - - if(!bsaFile.empty()) { - cfg.erase("plugin"); - for(std::vector::iterator it = bsaFiles.begin(); it != bsaFiles.end(); it++) { - cfg.insert(std::make_pair("plugin", *it)); - } - } -} - bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini) { return false; } -void MwIniImporter::writeToFile(std::string file, strmap &cfg) { - boost::iostreams::stream out(file); +void MwIniImporter::importGameFiles(strmap &cfg, strmap &ini, std::vector &esmFiles, std::vector &espFiles) { + std::string baseGameFile("Game Files:GameFile"); + std::string gameFile(""); + + strmap::iterator it = ini.begin(); + for(int i=0; it != ini.end(); i++) { + gameFile = baseGameFile; + gameFile.append(1,i+'0'); + + it = ini.find(gameFile); + if(it == ini.end()) { + break; + } + + std::string filetype(it->second.substr(it->second.length()-4, 3)); + std::transform(filetype.begin(), filetype.end(), filetype.begin(), ::tolower); + + if(filetype.compare("esm") == 0) { + esmFiles.push_back(it->second); + } + else if(filetype.compare("esp") == 0) { + espFiles.push_back(it->second); + } + + gameFile = ""; + } +} + +void MwIniImporter::writeGameFiles(boost::iostreams::stream &out, std::vector &esmFiles, std::vector &espFiles) { + for(std::vector::iterator it=esmFiles.begin(); it != esmFiles.end(); it++) { + out << "master=" << *it << std::endl; + } + for(std::vector::iterator it=espFiles.begin(); it != espFiles.end(); it++) { + out << "plugin=" << *it << std::endl; + } +} + +void MwIniImporter::writeToFile(boost::iostreams::stream &out, strmap &cfg) { + cfg.erase("master"); + cfg.erase("plugin"); for(strmap::iterator it=cfg.begin(); it != cfg.end(); it++) { out << (it->first) << "=" << (it->second) << std::endl; diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 3c85fd25a2..d7250f5e25 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -1,12 +1,15 @@ #ifndef MWINIIMPORTER_IMPORTER #define MWINIIMPORTER_IMPORTER 1 +#include +#include #include #include +#include #include -typedef std::multimap strmap; +typedef std::map strmap; class MwIniImporter { @@ -16,8 +19,9 @@ class MwIniImporter { strmap loadIniFile(std::string filename); strmap loadCfgFile(std::string filename); void merge(strmap &cfg, strmap &ini); - void importGameFiles(strmap &cfg, strmap &ini); - void writeToFile(std::string file, strmap &cfg); + void importGameFiles(strmap &cfg, strmap &ini, std::vector &esmFiles, std::vector &espFiles); + void writeGameFiles(boost::iostreams::stream &out, std::vector &esmFiles, std::vector &espFiles); + void writeToFile(boost::iostreams::stream &out, strmap &cfg); private: bool specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini); diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 5eba95961a..7426e71ea0 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -58,21 +58,27 @@ int main(int argc, char *argv[]) { std::cerr << "cfg file does not exist" << std::endl; return -4; } + MwIniImporter importer; importer.setVerbose(vm.count("verbose")); + boost::iostreams::stream file(outputFile); - std::multimapini = importer.loadIniFile(iniFile); - std::multimapcfg = importer.loadCfgFile(cfgFile); + std::mapini = importer.loadIniFile(iniFile); + std::mapcfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); if(vm.count("game-files")) { - importer.importGameFiles(cfg, ini); + std::vector esmFiles; + std::vector espFiles; + + importer.importGameFiles(cfg, ini, esmFiles, espFiles); + importer.writeGameFiles(file, esmFiles, espFiles); } std::cout << "write to: " << outputFile << std::endl; - importer.writeToFile(outputFile, cfg); + importer.writeToFile(file, cfg); return 0; } From ca4ad741517b6d975ed1d6e0df151560582d30d5 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 31 Mar 2012 21:29:46 +0200 Subject: [PATCH 298/488] more cleanup --- apps/openmw/mwgui/window_manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 1afca1d41a..49b6e644d3 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -180,7 +180,6 @@ void WindowManager::updateVisible() // Mouse is visible whenever we're not in game mode MyGUI::PointerManager::getInstance().setVisible(isGuiMode()); - int eff; switch(mode) { case GM_Game: // If in game mode, don't show anything. @@ -202,16 +201,18 @@ void WindowManager::updateVisible() mCharGen->spawnDialog(mode); break; case GM_Inventory: + { // First, compute the effective set of windows to show. // This is controlled both by what windows the // user has opened/closed (the 'shown' variable) and by what // windows we are allowed to show (the 'allowed' var.) - eff = shown & allowed; + int eff = shown & allowed; // Show the windows we want map -> setVisible( (eff & GW_Map) != 0 ); stats -> setVisible( (eff & GW_Stats) != 0 ); break; + } case GM_Dialogue: dialogueWindow->open(); break; From bdc4c79b4e06450bb2735dbfeaa3b8a347248308 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sat, 31 Mar 2012 21:34:40 +0200 Subject: [PATCH 299/488] Fix for segfault when doing 'coc "seyda neen"'. This is a fix for segfault: ==8683== Process terminating with default action of signal 11 (SIGSEGV) ==8683== Access not within mapped region at address 0x0 ==8683== at 0x59DFE4: MWRender::Animation::handleShapes(std::vector >*, Ogre::Entity*, Ogre::SkeletonInstance*) (animation.cpp:503) ==8683== by 0x5A4ECE: MWRender::Actors::update(float) (actors.cpp:134) ==8683== by 0x5937A9: MWRender::RenderingManager::update(float) (renderingmanager.cpp:168) ==8683== by 0x629AD6: MWWorld::World::update(float) (world.cpp:705) ==8683== by 0x68B022: OMW::Engine::frameRenderingQueued(Ogre::FrameEvent const&) (engine.cpp:157) ==8683== by 0x51F9574: Ogre::Root::_fireFrameRenderingQueued(Ogre::FrameEvent&) (in /usr/lib/libOgreMain.so.1.8.0) ==8683== by 0x51F964F: Ogre::Root::_fireFrameRenderingQueued() (in /usr/lib/libOgreMain.so.1.8.0) ==8683== by 0x51F9681: Ogre::Root::_updateAllRenderTargets() (in /usr/lib/libOgreMain.so.1.8.0) ==8683== by 0x51F98CF: Ogre::Root::renderOneFrame() (in /usr/lib/libOgreMain.so.1.8.0) ==8683== by 0x51F990C: Ogre::Root::startRendering() (in /usr/lib/libOgreMain.so.1.8.0) ==8683== by 0x68A669: OMW::Engine::go() (engine.cpp:408) ==8683== by 0x51CECB: main (main.cpp:254) ==8683== If you believe this happened as a result of a stack ==8683== overflow in your program's main thread (unlikely but ==8683== possible), you can try to increase the size of the ==8683== main thread stack using the --main-stacksize= flag. ==8683== The main thread stack size used in this run was 8388608. when doing 'coc "seyda neen"' when animations are enabled (Animation::animate member variable is set to 1). --- apps/openmw/mwrender/animation.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index f3a8f64d55..fb710443b6 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -126,6 +126,11 @@ namespace MWRender{ void Animation::handleShapes(std::vector* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel){ shapeNumber = 0; + if (allshapes == NULL || creaturemodel == NULL || skel == NULL) + { + return; + } + std::vector::iterator allshapesiter; for(allshapesiter = allshapes->begin(); allshapesiter != allshapes->end(); allshapesiter++) From 1d596d6c722ac579e527b785ff6b393d8375f3b6 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 22:48:50 +0200 Subject: [PATCH 300/488] use std::map > instead of std::map --- apps/mwiniimporter/importer.cpp | 103 ++++++++++++++++++++------------ apps/mwiniimporter/importer.hpp | 20 +++---- apps/mwiniimporter/main.cpp | 11 +--- 3 files changed, 78 insertions(+), 56 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 937073632d..f7ddb2bf07 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -23,11 +23,11 @@ void MwIniImporter::setVerbose(bool verbose) { mVerbose = verbose; } -strmap MwIniImporter::loadIniFile(std::string filename) { +MwIniImporter::multistrmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; std::string section(""); - std::map map; + MwIniImporter::multistrmap map; boost::iostreams::streamfile(filename.c_str()); std::string line; @@ -54,16 +54,23 @@ strmap MwIniImporter::loadIniFile(std::string filename) { continue; } - map.insert(std::make_pair(section + ":" + line.substr(0,pos), line.substr(pos+1))); + std::string key(section + ":" + line.substr(0,pos)); + std::string value(line.substr(pos+1)); + + multistrmap::iterator it; + if((it = map.find(key)) == map.end()) { + map.insert( std::make_pair > (key, std::vector() ) ); + } + map[key].push_back(value); } return map; } -strmap MwIniImporter::loadCfgFile(std::string filename) { +MwIniImporter::multistrmap MwIniImporter::loadCfgFile(std::string filename) { std::cout << "load cfg file: " << filename << std::endl; - std::map map; + MwIniImporter::multistrmap map; boost::iostreams::streamfile(filename.c_str()); std::string line; @@ -84,34 +91,43 @@ strmap MwIniImporter::loadCfgFile(std::string filename) { continue; } - map.insert(std::make_pair(line.substr(0,pos), line.substr(pos+1))); + std::string key(line.substr(0,pos)); + std::string value(line.substr(pos+1)); + + multistrmap::iterator it; + if((it = map.find(key)) == map.end()) { + map.insert( std::make_pair > (key, std::vector() ) ); + } + map[key].push_back(value); } return map; } -void MwIniImporter::merge(strmap &cfg, strmap &ini) { - strmap::iterator cfgIt; - strmap::iterator iniIt; +void MwIniImporter::merge(multistrmap &cfg, multistrmap &ini) { + multistrmap::iterator cfgIt; + multistrmap::iterator iniIt; for(strmap::iterator it=mMergeMap.begin(); it!=mMergeMap.end(); it++) { if((iniIt = ini.find(it->second)) != ini.end()) { cfg.erase(it->first); if(!this->specialMerge(it->first, it->second, cfg, ini)) { - cfg.insert(std::make_pair(it->first, iniIt->second)); + cfg.insert(std::make_pair >(it->first, iniIt->second)); } } } } -bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini) { +bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, multistrmap &cfg, multistrmap &ini) { return false; } -void MwIniImporter::importGameFiles(strmap &cfg, strmap &ini, std::vector &esmFiles, std::vector &espFiles) { +void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { + std::vector esmFiles; + std::vector espFiles; std::string baseGameFile("Game Files:GameFile"); std::string gameFile(""); - strmap::iterator it = ini.begin(); + multistrmap::iterator it = ini.begin(); for(int i=0; it != ini.end(); i++) { gameFile = baseGameFile; gameFile.append(1,i+'0'); @@ -121,35 +137,48 @@ void MwIniImporter::importGameFiles(strmap &cfg, strmap &ini, std::vectorsecond.substr(it->second.length()-4, 3)); - std::transform(filetype.begin(), filetype.end(), filetype.begin(), ::tolower); - - if(filetype.compare("esm") == 0) { - esmFiles.push_back(it->second); - } - else if(filetype.compare("esp") == 0) { - espFiles.push_back(it->second); + for(std::vector::iterator entry = it->second.begin(); entry!=it->second.end(); entry++) { + std::string filetype(entry->substr(entry->length()-4, 3)); + std::transform(filetype.begin(), filetype.end(), filetype.begin(), ::tolower); + + if(filetype.compare("esm") == 0) { + esmFiles.push_back(*entry); + } + else if(filetype.compare("esp") == 0) { + espFiles.push_back(*entry); + } } gameFile = ""; } -} - -void MwIniImporter::writeGameFiles(boost::iostreams::stream &out, std::vector &esmFiles, std::vector &espFiles) { - for(std::vector::iterator it=esmFiles.begin(); it != esmFiles.end(); it++) { - out << "master=" << *it << std::endl; - } - for(std::vector::iterator it=espFiles.begin(); it != espFiles.end(); it++) { - out << "plugin=" << *it << std::endl; - } -} - -void MwIniImporter::writeToFile(boost::iostreams::stream &out, strmap &cfg) { - cfg.erase("master"); - cfg.erase("plugin"); - for(strmap::iterator it=cfg.begin(); it != cfg.end(); it++) { - out << (it->first) << "=" << (it->second) << std::endl; + if(!esmFiles.empty()) { + multistrmap::iterator it; + cfg.erase("master"); + cfg.insert( std::make_pair > ("master", std::vector() ) ); + + for(std::vector::iterator it=esmFiles.begin(); it!=esmFiles.end(); it++) { + cfg["master"].push_back(*it); + } + } + + if(!espFiles.empty()) { + multistrmap::iterator it; + cfg.erase("plugin"); + cfg.insert( std::make_pair > ("plugin", std::vector() ) ); + + for(std::vector::iterator it=espFiles.begin(); it!=espFiles.end(); it++) { + cfg["plugin"].push_back(*it); + } + } +} + +void MwIniImporter::writeToFile(boost::iostreams::stream &out, multistrmap &cfg) { + + for(multistrmap::iterator it=cfg.begin(); it != cfg.end(); it++) { + for(std::vector::iterator entry=it->second.begin(); entry != it->second.end(); entry++) { + out << (it->first) << "=" << (*entry) << std::endl; + } } } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index d7250f5e25..454dc209af 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -8,23 +8,21 @@ #include #include - -typedef std::map strmap; - class MwIniImporter { - public: + typedef std::map strmap; + typedef std::map > multistrmap; + MwIniImporter(); void setVerbose(bool verbose); - strmap loadIniFile(std::string filename); - strmap loadCfgFile(std::string filename); - void merge(strmap &cfg, strmap &ini); - void importGameFiles(strmap &cfg, strmap &ini, std::vector &esmFiles, std::vector &espFiles); - void writeGameFiles(boost::iostreams::stream &out, std::vector &esmFiles, std::vector &espFiles); - void writeToFile(boost::iostreams::stream &out, strmap &cfg); + multistrmap loadIniFile(std::string filename); + multistrmap loadCfgFile(std::string filename); + void merge(multistrmap &cfg, multistrmap &ini); + void importGameFiles(multistrmap &cfg, multistrmap &ini); + void writeToFile(boost::iostreams::stream &out, multistrmap &cfg); private: - bool specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini); + bool specialMerge(std::string cfgKey, std::string iniKey, multistrmap &cfg, multistrmap &ini); bool mVerbose; strmap mMergeMap; }; diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 7426e71ea0..9a6e61645d 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -59,22 +59,17 @@ int main(int argc, char *argv[]) { return -4; } - MwIniImporter importer; importer.setVerbose(vm.count("verbose")); boost::iostreams::stream file(outputFile); - std::mapini = importer.loadIniFile(iniFile); - std::mapcfg = importer.loadCfgFile(cfgFile); + MwIniImporter::multistrmap ini = importer.loadIniFile(iniFile); + MwIniImporter::multistrmap cfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); if(vm.count("game-files")) { - std::vector esmFiles; - std::vector espFiles; - - importer.importGameFiles(cfg, ini, esmFiles, espFiles); - importer.writeGameFiles(file, esmFiles, espFiles); + importer.importGameFiles(cfg, ini); } std::cout << "write to: " << outputFile << std::endl; From a2a7539fd55b2a4480c36575f0814d4180215146 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 23:15:33 +0200 Subject: [PATCH 301/488] fix for more than 10 game files; delete both master and plugin settings if called with --game-files --- apps/mwiniimporter/importer.cpp | 36 +++++++++++++++++---------------- apps/mwiniimporter/importer.hpp | 1 + 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index f7ddb2bf07..a82240a8aa 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -6,6 +6,7 @@ #include #include #include +#include MwIniImporter::MwIniImporter() { const char *map[][2] = @@ -23,6 +24,12 @@ void MwIniImporter::setVerbose(bool verbose) { mVerbose = verbose; } +std::string MwIniImporter::numberToString(int n) { + std::stringstream str; + str << n; + return str.str(); +} + MwIniImporter::multistrmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; @@ -130,7 +137,7 @@ void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { multistrmap::iterator it = ini.begin(); for(int i=0; it != ini.end(); i++) { gameFile = baseGameFile; - gameFile.append(1,i+'0'); + gameFile.append(this->numberToString(i)); it = ini.find(gameFile); if(it == ini.end()) { @@ -152,24 +159,19 @@ void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { gameFile = ""; } - if(!esmFiles.empty()) { - multistrmap::iterator it; - cfg.erase("master"); - cfg.insert( std::make_pair > ("master", std::vector() ) ); - - for(std::vector::iterator it=esmFiles.begin(); it!=esmFiles.end(); it++) { - cfg["master"].push_back(*it); - } + multistrmap::iterator it; + cfg.erase("master"); + cfg.insert( std::make_pair > ("master", std::vector() ) ); + + for(std::vector::iterator it=esmFiles.begin(); it!=esmFiles.end(); it++) { + cfg["master"].push_back(*it); } - if(!espFiles.empty()) { - multistrmap::iterator it; - cfg.erase("plugin"); - cfg.insert( std::make_pair > ("plugin", std::vector() ) ); - - for(std::vector::iterator it=espFiles.begin(); it!=espFiles.end(); it++) { - cfg["plugin"].push_back(*it); - } + cfg.erase("plugin"); + cfg.insert( std::make_pair > ("plugin", std::vector() ) ); + + for(std::vector::iterator it=espFiles.begin(); it!=espFiles.end(); it++) { + cfg["plugin"].push_back(*it); } } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 454dc209af..988f10255e 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -23,6 +23,7 @@ class MwIniImporter { private: bool specialMerge(std::string cfgKey, std::string iniKey, multistrmap &cfg, multistrmap &ini); + std::string numberToString(int n); bool mVerbose; strmap mMergeMap; }; From 8aa4001937834851b83146177cc591ebbc6f0c47 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 1 Apr 2012 10:34:51 +0200 Subject: [PATCH 302/488] compile fix --- apps/mwiniimporter/importer.cpp | 51 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index a82240a8aa..08b05f417e 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -14,7 +14,7 @@ MwIniImporter::MwIniImporter() { { "fps", "General:Show FPS" }, { 0, 0 } }; - + for(int i=0; map[i][0]; i++) { mMergeMap.insert(std::make_pair(map[i][0], map[i][1])); } @@ -32,7 +32,7 @@ std::string MwIniImporter::numberToString(int n) { MwIniImporter::multistrmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; - + std::string section(""); MwIniImporter::multistrmap map; boost::iostreams::streamfile(filename.c_str()); @@ -46,68 +46,68 @@ MwIniImporter::multistrmap MwIniImporter::loadIniFile(std::string filename) { } continue; } - + int comment_pos = line.find(";"); if(comment_pos > 0) { line = line.substr(0,comment_pos); } - + if(line.empty()) { continue; } - + int pos = line.find("="); if(pos < 1) { continue; } - + std::string key(section + ":" + line.substr(0,pos)); std::string value(line.substr(pos+1)); - + multistrmap::iterator it; if((it = map.find(key)) == map.end()) { map.insert( std::make_pair > (key, std::vector() ) ); } map[key].push_back(value); } - + return map; } MwIniImporter::multistrmap MwIniImporter::loadCfgFile(std::string filename) { std::cout << "load cfg file: " << filename << std::endl; - + MwIniImporter::multistrmap map; boost::iostreams::streamfile(filename.c_str()); std::string line; while (std::getline(file, line)) { - + // we cant say comment by only looking at first char anymore int comment_pos = line.find("#"); if(comment_pos > 0) { line = line.substr(0,comment_pos); } - + if(line.empty()) { continue; } - + int pos = line.find("="); if(pos < 1) { continue; } - + std::string key(line.substr(0,pos)); std::string value(line.substr(pos+1)); - + multistrmap::iterator it; if((it = map.find(key)) == map.end()) { map.insert( std::make_pair > (key, std::vector() ) ); } map[key].push_back(value); } - + return map; } @@ -138,16 +138,16 @@ void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { for(int i=0; it != ini.end(); i++) { gameFile = baseGameFile; gameFile.append(this->numberToString(i)); - + it = ini.find(gameFile); if(it == ini.end()) { break; } - + for(std::vector::iterator entry = it->second.begin(); entry!=it->second.end(); entry++) { std::string filetype(entry->substr(entry->length()-4, 3)); std::transform(filetype.begin(), filetype.end(), filetype.begin(), ::tolower); - + if(filetype.compare("esm") == 0) { esmFiles.push_back(*entry); } @@ -155,33 +155,30 @@ void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { espFiles.push_back(*entry); } } - + gameFile = ""; } - - multistrmap::iterator it; + cfg.erase("master"); cfg.insert( std::make_pair > ("master", std::vector() ) ); - + for(std::vector::iterator it=esmFiles.begin(); it!=esmFiles.end(); it++) { cfg["master"].push_back(*it); } - + cfg.erase("plugin"); cfg.insert( std::make_pair > ("plugin", std::vector() ) ); - + for(std::vector::iterator it=espFiles.begin(); it!=espFiles.end(); it++) { cfg["plugin"].push_back(*it); } } void MwIniImporter::writeToFile(boost::iostreams::stream &out, multistrmap &cfg) { - + for(multistrmap::iterator it=cfg.begin(); it != cfg.end(); it++) { for(std::vector::iterator entry=it->second.begin(); entry != it->second.end(); entry++) { out << (it->first) << "=" << (*entry) << std::endl; } } } - - From 4e63f89829fbd0d64f6b782c60849f0776987ed8 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 13:09:30 +0200 Subject: [PATCH 303/488] silence an error regarding faced handle --- apps/openmw/engine.cpp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 441c227699..2da5456e6d 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -82,12 +82,20 @@ void OMW::Engine::updateFocusReport (float duration) if (!handle.empty()) { - MWWorld::Ptr ptr = mEnvironment.mWorld->getPtrViaHandle (handle); + // the faced handle is not updated immediately, so on a cell change it might + // point to an object that doesn't exist anymore + // therefore, we are catching the "Unknown Ogre handle" exception that occurs in this case + try + { + MWWorld::Ptr ptr = mEnvironment.mWorld->getPtrViaHandle (handle); - if (!ptr.isEmpty()){ - name = MWWorld::Class::get (ptr).getName (ptr); + if (!ptr.isEmpty()){ + name = MWWorld::Class::get (ptr).getName (ptr); + } } + catch (std::runtime_error& e) + {} } if (name!=mFocusName) @@ -415,10 +423,21 @@ void OMW::Engine::activate() if (handle.empty()) return; - MWWorld::Ptr ptr = mEnvironment.mWorld->getPtrViaHandle (handle); + // the faced handle is not updated immediately, so on a cell change it might + // point to an object that doesn't exist anymore + // therefore, we are catching the "Unknown Ogre handle" exception that occurs in this case + MWWorld::Ptr ptr; + try + { + ptr = mEnvironment.mWorld->getPtrViaHandle (handle); - if (ptr.isEmpty()) + if (ptr.isEmpty()) + return; + } + catch (std::runtime_error&) + { return; + } MWScript::InterpreterContext interpreterContext (mEnvironment, &ptr.getRefData().getLocals(), ptr); From 80456778be3e51e177626e1e28da2fa907251658 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 14:22:04 +0200 Subject: [PATCH 304/488] fix for pickup up transparent objects, workaround for doors --- apps/openmw/mwrender/occlusionquery.cpp | 42 ++++++++++++++++++++-- apps/openmw/mwrender/occlusionquery.hpp | 8 +++++ apps/openmw/mwworld/world.cpp | 46 ++++++++++++++++++++----- 3 files changed, 85 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index cc3464c646..6215a6f199 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -5,6 +5,7 @@ #include #include #include +#include using namespace MWRender; using namespace Ogre; @@ -12,7 +13,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), mTestResult(false), - mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false), mDoQuery2(false) + mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false) { mRendering = renderer; mSunNode = sunNode; @@ -82,7 +83,6 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mRendering->getScene()->addRenderObjectListener(this); mRendering->getScene()->addRenderQueueListener(this); mDoQuery = true; - mDoQuery2 = true; } OcclusionQuery::~OcclusionQuery() @@ -190,7 +190,6 @@ void OcclusionQuery::update(float duration) // Stop occlusion queries until we get their information // (may not happen on the same frame they are requested in) mDoQuery = false; - mDoQuery2 = false; if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding() @@ -252,3 +251,40 @@ bool OcclusionQuery::getTestResult() return mTestResult; } + +bool OcclusionQuery::isPotentialOccluder(Ogre::SceneNode* node) +{ + bool result = false; + for (unsigned int i=0; i < node->numAttachedObjects(); ++i) + { + MovableObject* ob = node->getAttachedObject(i); + std::string type = ob->getMovableType(); + if (type == "Entity") + { + Entity* ent = static_cast(ob); + for (unsigned int j=0; j < ent->getNumSubEntities(); ++j) + { + // if any sub entity has a material with depth write off, + // consider the object as not an occluder + MaterialPtr mat = ent->getSubEntity(j)->getMaterial(); + + Material::TechniqueIterator techIt = mat->getTechniqueIterator(); + while (techIt.hasMoreElements()) + { + Technique* tech = techIt.getNext(); + Technique::PassIterator passIt = tech->getPassIterator(); + while (passIt.hasMoreElements()) + { + Pass* pass = passIt.getNext(); + + if (pass->getDepthWriteEnabled() == false) + return false; + else + result = true; + } + } + } + } + } + return result; +} diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index ebdc51311d..934d963ac2 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -46,6 +46,14 @@ namespace MWRender */ bool occlusionTestPending(); + /** + * Checks if the objects held by this scenenode + * can be considered as potential occluders + * (which might not be the case when transparency is involved) + * @param Scene node + */ + bool isPotentialOccluder(Ogre::SceneNode* node); + /** * @return true if the object tested in the last request was occluded */ diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 6f03fa37f5..47e608624f 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -750,15 +750,16 @@ namespace MWWorld // figure out which object we want to test against std::vector < std::pair < float, std::string > > results = mPhysics->getFacedObjects(); - // ignore the player - for (std::vector < std::pair < float, std::string > >::iterator it = results.begin(); - it != results.end(); ++it) + // ignore the player and other things we're not interested in + std::vector < std::pair < float, std::string > >::iterator it = results.begin(); + while (it != results.end()) { - if ( (*it).second == mPlayer->getPlayer().getRefData().getHandle() ) + if ( (*it).second == mPlayer->getPlayer().getRefData().getHandle()) { - results.erase(it); - break; + it = results.erase(it); } + else + ++it; } if (results.size() == 0) @@ -774,6 +775,7 @@ namespace MWWorld btVector3 p = mPhysics->getRayPoint(results.front().first); Ogre::Vector3 pos(p.x(), p.z(), -p.y()); Ogre::SceneNode* node = mFaced1.getRefData().getBaseNode(); + query->occlusionTest(pos, node); } else @@ -784,10 +786,38 @@ namespace MWWorld mFaced2 = getPtrViaHandle(results[1].second); mNumFacing = 2; + //std::cout << "Num facing 2 : " << mFaced1Name << " " << mFaced2Name << std::endl; + //std::cout << "Type 1 " << mFaced1.getTypeName() << " " << mFaced2.getTypeName() << std::endl; + btVector3 p = mPhysics->getRayPoint(results[1].first); Ogre::Vector3 pos(p.x(), p.z(), -p.y()); - Ogre::SceneNode* node = mFaced2.getRefData().getBaseNode(); - query->occlusionTest(pos, node); + Ogre::SceneNode* node1 = mFaced1.getRefData().getBaseNode(); + Ogre::SceneNode* node2 = mFaced2.getRefData().getBaseNode(); + + // no need to test if the first node is not occluder + if (!query->isPotentialOccluder(node1) && (mFaced1.getTypeName().find("Static") == std::string::npos)) + { + mFacedHandle = mFaced1Name; + //std::cout << "node1 Not an occluder" << std::endl; + return; + } + + // no need to test if the second object is static (thus cannot be activated) + if (mFaced2.getTypeName().find("Static") != std::string::npos) + { + mFacedHandle = mFaced1Name; + return; + } + + // work around door problems + if (mFaced1.getTypeName().find("Static") != std::string::npos + && mFaced2.getTypeName().find("Door") != std::string::npos) + { + mFacedHandle = mFaced2Name; + return; + } + + query->occlusionTest(pos, node2); } } } From df8e0bbff2533a5d9b9c1ef11ca2f4589663b1ed Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 14:53:41 +0200 Subject: [PATCH 305/488] player check --- apps/openmw/mwworld/world.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 47e608624f..9ca31b5d33 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -754,7 +754,7 @@ namespace MWWorld std::vector < std::pair < float, std::string > >::iterator it = results.begin(); while (it != results.end()) { - if ( (*it).second == mPlayer->getPlayer().getRefData().getHandle()) + if ( getPtrViaHandle((*it).second) == mPlayer->getPlayer() ) { it = results.erase(it); } @@ -776,6 +776,9 @@ namespace MWWorld Ogre::Vector3 pos(p.x(), p.z(), -p.y()); Ogre::SceneNode* node = mFaced1.getRefData().getBaseNode(); + //std::cout << "Num facing 1 : " << mFaced1Name << std::endl; + //std::cout << "Type 1 " << mFaced1.getTypeName() << std::endl; + query->occlusionTest(pos, node); } else @@ -786,8 +789,8 @@ namespace MWWorld mFaced2 = getPtrViaHandle(results[1].second); mNumFacing = 2; - //std::cout << "Num facing 2 : " << mFaced1Name << " " << mFaced2Name << std::endl; - //std::cout << "Type 1 " << mFaced1.getTypeName() << " " << mFaced2.getTypeName() << std::endl; + std::cout << "Num facing 2 : " << mFaced1Name << " " << mFaced2Name << std::endl; + std::cout << "Type 1 " << mFaced1.getTypeName() << " " << mFaced2.getTypeName() << std::endl; btVector3 p = mPhysics->getRayPoint(results[1].first); Ogre::Vector3 pos(p.x(), p.z(), -p.y()); From ee754eda6c5e2377956092ad6a04f02c3367fd1e Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 15:07:41 +0200 Subject: [PATCH 306/488] don't create sky until entering an exterior cell --- apps/openmw/mwrender/occlusionquery.cpp | 24 +++++++++++++++++------ apps/openmw/mwrender/occlusionquery.hpp | 2 ++ apps/openmw/mwrender/renderingmanager.cpp | 2 ++ apps/openmw/mwrender/sky.cpp | 18 ++++++++++++++++- apps/openmw/mwrender/sky.hpp | 7 ++++++- apps/openmw/mwworld/world.cpp | 4 ++-- 6 files changed, 47 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index cc3464c646..29cfe33fe3 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -12,7 +12,8 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), mTestResult(false), - mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false), mDoQuery2(false) + mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false), mDoQuery2(false), + mBBNode(0) { mRendering = renderer; mSunNode = sunNode; @@ -52,7 +53,8 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod matQueryVisible->setCullingMode(CULL_NONE); matQueryVisible->setManualCullingMode(MANUAL_CULL_NONE); - mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); + if (sunNode) + mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); mObjectNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); mBBNodeReal = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); @@ -182,10 +184,13 @@ void OcclusionQuery::update(float duration) if (dist==0) dist = 10000000; dist -= 1000; // bias dist /= 1000.f; - mBBNode->setPosition(mSunNode->getPosition() * dist); - mBBNode->setScale(dist, dist, dist); - mBBNodeReal->setPosition(mBBNode->_getDerivedPosition()); - mBBNodeReal->setScale(mBBNode->getScale()); + if (mBBNode) + { + mBBNode->setPosition(mSunNode->getPosition() * dist); + mBBNode->setScale(dist, dist, dist); + mBBNodeReal->setPosition(mBBNode->_getDerivedPosition()); + mBBNodeReal->setScale(mBBNode->getScale()); + } // Stop occlusion queries until we get their information // (may not happen on the same frame they are requested in) @@ -245,6 +250,13 @@ bool OcclusionQuery::occlusionTestPending() return (mQuerySingleObjectRequested || mQuerySingleObjectStarted); } +void OcclusionQuery::setSunNode(Ogre::SceneNode* node) +{ + mSunNode = node; + if (!mBBNode) + mBBNode = node->getParentSceneNode()->createChildSceneNode(); +} + bool OcclusionQuery::getTestResult() { assert( !occlusionTestPending() diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index ebdc51311d..b655c8e46b 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -53,6 +53,8 @@ namespace MWRender float getSunVisibility() const {return mSunVisibility;}; + void setSunNode(Ogre::SceneNode* node); + private: Ogre::HardwareOcclusionQuery* mSunTotalAreaQuery; Ogre::HardwareOcclusionQuery* mSunVisibleAreaQuery; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 3d715b3d32..bbddd325a1 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -201,6 +201,8 @@ void RenderingManager::skyEnable () { if(mSkyManager) mSkyManager->enable(); + + mOcclusionQuery->setSunNode(mSkyManager->getSunNode()); } void RenderingManager::skyDisable () diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 265008e346..23b44d1f3c 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -325,14 +325,17 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environmen , mSunEnabled(true) , mMasserEnabled(true) , mSecundaEnabled(true) + , mCreated(false) { - mViewport = pCamera->getViewport(); mSceneMgr = pMwRoot->getCreator(); mRootNode = pCamera->getParentSceneNode()->createChildSceneNode(); mRootNode->pitch(Degree(-90)); // convert MW to ogre coordinates mRootNode->setInheritOrientation(false); +} +void SkyManager::create() +{ /// \todo preload all the textures and meshes that are used for sky rendering // Create overlay used for thunderstorm @@ -562,6 +565,8 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environmen mCloudMaterial->getTechnique(0)->getPass(0)->setSceneBlending(SBT_TRANSPARENT_ALPHA); mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(""); + + mCreated = true; } SkyManager::~SkyManager() @@ -574,11 +579,13 @@ SkyManager::~SkyManager() int SkyManager::getMasserPhase() const { + if (!mCreated) return 0; return mMasser->getPhaseInt(); } int SkyManager::getSecundaPhase() const { + if (!mCreated) return 0; return mSecunda->getPhaseInt(); } @@ -631,6 +638,9 @@ void SkyManager::update(float duration) void SkyManager::enable() { + if (!mCreated) + create(); + mRootNode->setVisible(true); mEnabled = true; } @@ -654,6 +664,7 @@ void SkyManager::setCloudsOpacity(float opacity) void SkyManager::setWeather(const MWWorld::WeatherResult& weather) { + if (!mCreated) return; if (mClouds != weather.mCloudTexture) { mCloudMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("textures\\"+weather.mCloudTexture); @@ -750,17 +761,20 @@ void SkyManager::sunDisable() void SkyManager::setSunDirection(const Vector3& direction) { + if (!mCreated) return; mSun->setPosition(direction); mSunGlare->setPosition(direction); } void SkyManager::setMasserDirection(const Vector3& direction) { + if (!mCreated) return; mMasser->setPosition(direction); } void SkyManager::setSecundaDirection(const Vector3& direction) { + if (!mCreated) return; mSecunda->setPosition(direction); } @@ -786,6 +800,7 @@ void SkyManager::secundaDisable() void SkyManager::setThunder(const float factor) { + if (!mCreated) return; if (factor > 0.f) { mThunderOverlay->show(); @@ -818,5 +833,6 @@ void SkyManager::setDate(int day, int month) Ogre::SceneNode* SkyManager::getSunNode() { + if (!mCreated) return 0; return mSun->getNode(); } diff --git a/apps/openmw/mwrender/sky.hpp b/apps/openmw/mwrender/sky.hpp index 508af76732..baf5933cbc 100644 --- a/apps/openmw/mwrender/sky.hpp +++ b/apps/openmw/mwrender/sky.hpp @@ -112,6 +112,9 @@ namespace MWRender void update(float duration); + void create(); + ///< no need to call this, automatically done on first enable() + void enable(); void disable(); @@ -164,8 +167,10 @@ namespace MWRender void setGlare(const float glare); Ogre::Vector3 getRealSunPos(); - + private: + bool mCreated; + MWWorld::Environment* mEnvironment; float mHour; int mDay; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 6f03fa37f5..a48cc7e722 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -146,10 +146,10 @@ namespace MWWorld mRendering->skySetDate (mGlobalVariables->getInt ("day"), mGlobalVariables->getInt ("month")); - mRendering->getSkyManager()->enable(); + mRendering->skyEnable(); } else - mRendering->getSkyManager()->disable(); + mRendering->skyDisable(); } World::World (OEngine::Render::OgreRenderer& renderer, From 9a261a02aa78e1f9edfbb7aac8874d653b814d78 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 15:14:43 +0200 Subject: [PATCH 307/488] changed the cloud movement direction like suggested on the forum --- apps/openmw/mwrender/sky.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 23b44d1f3c..2fdf9b2cd6 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -536,7 +536,7 @@ void SkyManager::create() " uniform float4 emissive \n" ") \n" "{ \n" - " uv += float2(1,0) * time * speed * 0.003; \n" // Scroll in x direction + " uv += float2(0,1) * time * speed * 0.003; \n" // Scroll in y direction " float4 tex = lerp(tex2D(texture, uv), tex2D(secondTexture, uv), transitionFactor); \n" " oColor = color * float4(emissive.xyz,1) * tex * float4(1,1,1,opacity); \n" "}"; From cab412c225703cfda26efc5d20be8fc9bfde4c5f Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 1 Apr 2012 17:27:18 +0400 Subject: [PATCH 308/488] Feature #37 (In Progress) Render Path Grid optimisation, now it takes only two batches per cell. --- apps/openmw/mwrender/debugging.cpp | 132 ++++++++++++++++------------- apps/openmw/mwrender/debugging.hpp | 4 +- 2 files changed, 74 insertions(+), 62 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index f768de661f..730370ae1b 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -23,7 +23,7 @@ namespace MWRender static const std::string PATHGRID_POINT_MATERIAL = "pathgridPointMaterial"; static const std::string PATHGRID_LINE_MATERIAL = "pathgridLineMaterial"; static const std::string DEBUGGING_GROUP = "debugging"; -static const int POINT_MESH_BASE = 80; +static const int POINT_MESH_BASE = 40; void Debugging::createGridMaterials() { @@ -61,39 +61,80 @@ void Debugging::destroyGridMaterials() } } -MovableObject *Debugging::createPathgridLine(const Vector3& from, const Vector3& to) +ManualObject *Debugging::createPathgridLines(const ESM::Pathgrid *pathgrid) { - ManualObject *line = mSceneMgr->createManualObject(); - line->begin(PATHGRID_LINE_MATERIAL, Ogre::RenderOperation::OT_LINE_LIST); - line->position(from); - line->position(to); - line->end(); + ManualObject *result = mSceneMgr->createManualObject(); - return line; + result->begin(PATHGRID_LINE_MATERIAL, RenderOperation::OT_LINE_LIST); + for(ESM::Pathgrid::EdgeList::const_iterator it = pathgrid->edges.begin(); + it != pathgrid->edges.end(); + it++) + { + const ESM::Pathgrid::Edge &edge = *it; + const ESM::Pathgrid::Point &p1 = pathgrid->points[edge.v0], &p2 = pathgrid->points[edge.v1]; + Vector3 direction = (Vector3(p2.x, p2.y, p2.z) - Vector3(p1.x, p1.y, p1.z)); + Vector3 lineDisplacement = direction.crossProduct(Vector3::UNIT_Z).normalisedCopy(); + lineDisplacement = lineDisplacement * POINT_MESH_BASE/2 + Vector3(0, 0, 10); // move lines up a little, so they will be less covered by meshes/landscape + result->position(Vector3(p1.x, p1.y, p1.z) + lineDisplacement); + result->position(Vector3(p2.x, p2.y, p2.z) + lineDisplacement); + } + result->end(); + + return result; } -MovableObject *Debugging::createPathgridPoint() +ManualObject *Debugging::createPathgridPoints(const ESM::Pathgrid *pathgrid) { - ManualObject *point = mSceneMgr->createManualObject(); - point->begin(PATHGRID_POINT_MATERIAL, Ogre::RenderOperation::OT_TRIANGLE_FAN); - float height = POINT_MESH_BASE /*/ sqrtf(2)*/; - point->position(0, 0, height); - point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->position(POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->position(POINT_MESH_BASE, POINT_MESH_BASE, 0); - point->position(-POINT_MESH_BASE, POINT_MESH_BASE, 0); - point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->end(); - point->begin(PATHGRID_POINT_MATERIAL, Ogre::RenderOperation::OT_TRIANGLE_FAN); - point->position(0, 0, -height); - point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->position(-POINT_MESH_BASE, POINT_MESH_BASE, 0); - point->position(POINT_MESH_BASE, POINT_MESH_BASE, 0); - point->position(POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->position(-POINT_MESH_BASE, -POINT_MESH_BASE, 0); - point->end(); + ManualObject *result = mSceneMgr->createManualObject(); + const float height = POINT_MESH_BASE /*/ sqrtf(2)*/; - return point; + result->begin(PATHGRID_POINT_MATERIAL, RenderOperation::OT_TRIANGLE_STRIP); + + bool first = true; + uint32 startIndex = 0; + for(ESM::Pathgrid::PointList::const_iterator it = pathgrid->points.begin(); + it != pathgrid->points.end(); + it++, startIndex += 6) + { + Vector3 pointPos(it->x, it->y, it->z); + + if (!first) + { + // degenerate triangle from previous octahedron + result->index(startIndex - 4); // 2nd point of previous octahedron + result->index(startIndex); // start point of current octahedron + } + + result->position(pointPos + Vector3(0, 0, height)); // 0 + result->position(pointPos + Vector3(-POINT_MESH_BASE, -POINT_MESH_BASE, 0)); // 1 + result->position(pointPos + Vector3(POINT_MESH_BASE, -POINT_MESH_BASE, 0)); // 2 + result->position(pointPos + Vector3(POINT_MESH_BASE, POINT_MESH_BASE, 0)); // 3 + result->position(pointPos + Vector3(-POINT_MESH_BASE, POINT_MESH_BASE, 0)); // 4 + result->position(pointPos + Vector3(0, 0, -height)); // 5 + + result->index(startIndex + 0); + result->index(startIndex + 1); + result->index(startIndex + 2); + result->index(startIndex + 5); + result->index(startIndex + 3); + result->index(startIndex + 4); + // degenerates + result->index(startIndex + 4); + result->index(startIndex + 5); + result->index(startIndex + 5); + // end degenerates + result->index(startIndex + 1); + result->index(startIndex + 4); + result->index(startIndex + 0); + result->index(startIndex + 3); + result->index(startIndex + 2); + + first = false; + } + + result->end(); + + return result; } Debugging::Debugging(SceneNode *mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine) : @@ -179,36 +220,15 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) ESM::Pathgrid *pathgrid = mEnvironment.mWorld->getStore().pathgrids.search(*store->cell); if (!pathgrid) return; - Vector3 cellPathGridPos; + Vector3 cellPathGridPos(0, 0, 0); if (store->cell->isExterior()) { cellPathGridPos.x = store->cell->data.gridX * ESM::Land::REAL_SIZE; cellPathGridPos.y = store->cell->data.gridY * ESM::Land::REAL_SIZE; } SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); - ESM::Pathgrid::PointList points = pathgrid->points; - for (ESM::Pathgrid::PointList::iterator it = points.begin(); it != points.end(); it++) - { - Vector3 position(it->x, it->y, it->z); - SceneNode* pointNode = cellPathGrid->createChildSceneNode(position); - pointNode->setScale(0.5, 0.5, 0.5); - pointNode->attachObject(createPathgridPoint()); - } - - ESM::Pathgrid::EdgeList edges = pathgrid->edges; - for(ESM::Pathgrid::EdgeList::const_iterator it = edges.begin(); - it != edges.end(); it++) - { - ESM::Pathgrid::Edge edge = *it; - ESM::Pathgrid::Point p1 = points[edge.v0], p2 = points[edge.v1]; - - Vector3 direction = (Vector3(p2.x, p2.y, p2.z) - Vector3(p1.x, p1.y, p1.z)); - Vector3 lineDisplacement = direction.crossProduct(Vector3::UNIT_Z).normalisedCopy(); - lineDisplacement = lineDisplacement * POINT_MESH_BASE/2 + - Vector3(0, 0, 10); // move lines up a little, so they will be less covered by meshes/landscape - cellPathGrid->attachObject(createPathgridLine(Vector3(p1.x, p1.y, p1.z) + lineDisplacement, - Vector3(p2.x, p2.y, p2.z) + lineDisplacement)); - } + cellPathGrid->attachObject(createPathgridLines(pathgrid)); + cellPathGrid->attachObject(createPathgridPoints(pathgrid)); if (store->cell->isExterior()) { @@ -246,15 +266,7 @@ void Debugging::disableCellPathgrid(MWWorld::Ptr::CellStore *store) void Debugging::destroyCellPathgridNode(SceneNode *node) { mPathGridRoot->removeChild(node); - - SceneNode::ChildNodeIterator childIt = node->getChildIterator(); - while (childIt.hasMoreElements()) - { - SceneNode *child = static_cast(childIt.getNext()); - destroyAttachedObjects(child); - } destroyAttachedObjects(node); - node->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(node); } diff --git a/apps/openmw/mwrender/debugging.hpp b/apps/openmw/mwrender/debugging.hpp index c8c19fb8cb..ebf3884dcc 100644 --- a/apps/openmw/mwrender/debugging.hpp +++ b/apps/openmw/mwrender/debugging.hpp @@ -65,8 +65,8 @@ namespace MWRender void destroyGridMaterials(); // path grid meshes - Ogre::MovableObject* createPathgridLine(const Ogre::Vector3& from, const Ogre::Vector3& to); - Ogre::MovableObject* createPathgridPoint(); + Ogre::ManualObject *createPathgridLines(const ESM::Pathgrid *pathgrid); + Ogre::ManualObject *createPathgridPoints(const ESM::Pathgrid *pathgrid); public: Debugging(Ogre::SceneNode* mwRoot, MWWorld::Environment &env, OEngine::Physic::PhysicEngine *engine); ~Debugging(); From 30d6c880ffd0ed4253ca368324a76eaeb9b24ed4 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 1 Apr 2012 17:51:37 +0400 Subject: [PATCH 309/488] Feature #37 (In Progress) Render Path Grid tuned sized a bit --- apps/openmw/mwrender/debugging.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 730370ae1b..6182258bb7 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -23,7 +23,7 @@ namespace MWRender static const std::string PATHGRID_POINT_MATERIAL = "pathgridPointMaterial"; static const std::string PATHGRID_LINE_MATERIAL = "pathgridLineMaterial"; static const std::string DEBUGGING_GROUP = "debugging"; -static const int POINT_MESH_BASE = 40; +static const int POINT_MESH_BASE = 35; void Debugging::createGridMaterials() { @@ -74,7 +74,8 @@ ManualObject *Debugging::createPathgridLines(const ESM::Pathgrid *pathgrid) const ESM::Pathgrid::Point &p1 = pathgrid->points[edge.v0], &p2 = pathgrid->points[edge.v1]; Vector3 direction = (Vector3(p2.x, p2.y, p2.z) - Vector3(p1.x, p1.y, p1.z)); Vector3 lineDisplacement = direction.crossProduct(Vector3::UNIT_Z).normalisedCopy(); - lineDisplacement = lineDisplacement * POINT_MESH_BASE/2 + Vector3(0, 0, 10); // move lines up a little, so they will be less covered by meshes/landscape + lineDisplacement = lineDisplacement * POINT_MESH_BASE + + Vector3(0, 0, 10); // move lines up a little, so they will be less covered by meshes/landscape result->position(Vector3(p1.x, p1.y, p1.z) + lineDisplacement); result->position(Vector3(p2.x, p2.y, p2.z) + lineDisplacement); } @@ -86,7 +87,7 @@ ManualObject *Debugging::createPathgridLines(const ESM::Pathgrid *pathgrid) ManualObject *Debugging::createPathgridPoints(const ESM::Pathgrid *pathgrid) { ManualObject *result = mSceneMgr->createManualObject(); - const float height = POINT_MESH_BASE /*/ sqrtf(2)*/; + const float height = POINT_MESH_BASE * sqrtf(2); result->begin(PATHGRID_POINT_MATERIAL, RenderOperation::OT_TRIANGLE_STRIP); From 308df7caa8806f344a7e32f02b9b1114b433b791 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 16:26:42 +0200 Subject: [PATCH 310/488] add method for keeping track of settings that changed --- components/settings/settings.cpp | 13 ++++++++++++- components/settings/settings.hpp | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index 500d3c6e63..463230bc72 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -9,6 +9,7 @@ using namespace Settings; Ogre::ConfigFile Manager::mFile = Ogre::ConfigFile(); Ogre::ConfigFile Manager::mDefaultFile = Ogre::ConfigFile(); +SettingCategoryVector Manager::mChangedSettings = SettingCategoryVector(); void Manager::loadUser (const std::string& file) { @@ -77,8 +78,11 @@ void Manager::setString (const std::string& setting, const std::string& category { Ogre::ConfigFile::SettingsMultiMap::iterator i = it.current(); - if ((*i).first == setting) + if ((*i).first == setting && (*i).second != value) + { + mChangedSettings.push_back(std::make_pair(setting, category)); (*i).second = value; + } it.getNext(); } @@ -98,3 +102,10 @@ void Manager::setBool (const std::string& setting, const std::string& category, { setString(setting, category, Ogre::StringConverter::toString(value)); } + +const SettingCategoryVector Manager::apply() +{ + SettingCategoryVector vec = mChangedSettings; + mChangedSettings.clear(); + return vec; +} diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index 46f8139c49..98fad605ef 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -5,6 +5,7 @@ namespace Settings { + typedef std::vector< std::pair > SettingCategoryVector; /// /// \brief Settings management (can change during runtime) @@ -12,9 +13,13 @@ namespace Settings class Manager { public: + static Ogre::ConfigFile mFile; static Ogre::ConfigFile mDefaultFile; + static SettingCategoryVector mChangedSettings; + ///< tracks all the settings that were changed since the last apply() call + void loadDefault (const std::string& file); ///< load file as the default settings (can be overridden by user settings) @@ -27,6 +32,9 @@ namespace Settings void saveUser (const std::string& file); ///< save user settings to file + const SettingCategoryVector apply(); + ///< returns the list of changed settings and then clears it + static const int getInt (const std::string& setting, const std::string& category); static const float getFloat (const std::string& setting, const std::string& category); static const std::string getString (const std::string& setting, const std::string& category); From 6091a0504db624f10e605a1bf3a22345c9399fe6 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 16:59:35 +0200 Subject: [PATCH 311/488] first settings test (config file has to be created manually) --- apps/openmw/engine.cpp | 12 ++ components/nifogre/ogre_nif_loader.cpp | 241 ++++++++++++------------- components/settings/settings.cpp | 3 + components/settings/settings.hpp | 1 - 4 files changed, 135 insertions(+), 122 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 38050e53b4..294fcf492f 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -313,6 +314,17 @@ void OMW::Engine::go() { boost::filesystem::create_directories(configPath); } + + Settings::Manager settings; + + //settings.loadDefault(defaultsettingspath); + + const std::string settingspath = mCfgMgr.getUserPath().string() + "/settings.cfg"; + if (boost::filesystem::exists(settingspath)) + settings.loadUser(settingspath); + else + settings.copyDefaultToUserSettings(); + mOgre->configure(!boost::filesystem::is_regular_file(mCfgMgr.getOgreConfigPath()), mCfgMgr.getOgreConfigPath().string(), mCfgMgr.getLogPath().string(), diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 2ab6ae6211..7fa45815fb 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -25,6 +25,7 @@ #include "ogre_nif_loader.hpp" +#include typedef unsigned char ubyte; @@ -299,138 +300,136 @@ void NIFLoader::createMaterial(const String &name, material->setSelfIllumination(emissive.array[0], emissive.array[1], emissive.array[2]); material->setShininess(glossiness); - // Create shader for the material - // vertex - HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); - - HighLevelGpuProgramPtr vertex; - if (mgr.getByName("main_vp").isNull()) + if (Settings::Manager::getBool("shaders", "Objects")) { - vertex = mgr.createProgram("main_vp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - "cg", GPT_VERTEX_PROGRAM); - vertex->setParameter("profiles", "vs_4_0 vs_2_x vp40 arbvp1"); - vertex->setParameter("entry_point", "main_vp"); - StringUtil::StrStreamType outStream; - outStream << - "void main_vp( \n" - " float4 position : POSITION, \n" - " float4 normal : NORMAL, \n" - " float4 colour : COLOR, \n" - " in float2 uv : TEXCOORD0, \n" - " out float2 oUV : TEXCOORD0, \n" - " out float4 oPosition : POSITION, \n" - " out float4 oPositionObjSpace : TEXCOORD1, \n" - " out float4 oNormal : TEXCOORD2, \n" - " out float oFogValue : TEXCOORD3, \n" - " out float4 oVertexColour : TEXCOORD4, \n" - " uniform float4 fogParams, \n" - " uniform float4x4 worldViewProj \n" - ") \n" - "{ \n" - " oVertexColour = colour; \n" - " oUV = uv; \n" - " oNormal = normal; \n" - " oPosition = mul( worldViewProj, position ); \n" - " oFogValue = saturate((oPosition.z - fogParams.y) * fogParams.w); \n" - " oPositionObjSpace = position; \n" - "}"; - vertex->setSource(outStream.str()); - vertex->load(); - vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - vertex->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); - } - else - vertex = mgr.getByName("main_vp"); - material->getTechnique(0)->getPass(0)->setVertexProgram(vertex->getName()); + // Create shader for the material + // vertex + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); - // the number of lights to support. - // when rendering an object, OGRE automatically picks the lights that are - // closest to the object being rendered. unfortunately this mechanism does - // not work perfectly for objects batched together (they will all use the same - // lights). to work around this, we are simply pushing the maximum number - // of lights here in order to minimize disappearing lights. - float num_lights; - if (GpuProgramManager::getSingleton().isSyntaxSupported("fp40") || - GpuProgramManager::getSingleton().isSyntaxSupported("ps_4_0")) - num_lights = 8 /* 32 */; - else - num_lights = 8; - - // fragment - HighLevelGpuProgramPtr fragment; - if (mgr.getByName("main_fp").isNull()) - { - fragment = mgr.createProgram("main_fp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - "cg", GPT_FRAGMENT_PROGRAM); - fragment->setParameter("profiles", "ps_4_0 ps_2_x fp40 arbfp1"); - fragment->setParameter("entry_point", "main_fp"); - StringUtil::StrStreamType outStream; - outStream << - "void main_fp( \n" - " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" - " uniform sampler2D texture : TEXUNIT0, \n" - " float4 positionObjSpace : TEXCOORD1, \n" - " float4 normal : TEXCOORD2, \n" - " float fogValue : TEXCOORD3, \n" - " float4 vertexColour : TEXCOORD4, \n" - " uniform float4 fogColour, \n"; - - for (int i=0; isetParameter("profiles", "vs_4_0 vs_2_x vp40 arbvp1"); + vertex->setParameter("entry_point", "main_vp"); + StringUtil::StrStreamType outStream; outStream << - " uniform float4 lightDiffuse"<setSource(outStream.str()); + vertex->load(); + vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); + vertex->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); } - outStream << - " uniform float4 lightAmbient, \n" - " uniform float4 ambient, \n" - " uniform float4 diffuse, \n" - " uniform float4 emissive \n" - ") \n" - "{ \n" - " float4 tex = tex2D(texture, uv); \n" - " float d; \n" - " float attn; \n" - " float3 lightColour = float3(0, 0, 0); \n"; - - for (int i=0; igetTechnique(0)->getPass(0)->setVertexProgram(vertex->getName()); + + // the number of lights to support. + // when rendering an object, OGRE automatically picks the lights that are + // closest to the object being rendered. unfortunately this mechanism does + // not work perfectly for objects batched together (they will all use the same + // lights). to work around this, we are simply pushing the maximum number + // of lights here in order to minimize disappearing lights. + int num_lights = Settings::Manager::getInt("num lights", "Objects"); + + // fragment + HighLevelGpuProgramPtr fragment; + if (mgr.getByName("main_fp").isNull()) { + fragment = mgr.createProgram("main_fp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_FRAGMENT_PROGRAM); + fragment->setParameter("profiles", "ps_4_0 ps_2_x fp40 arbfp1"); + fragment->setParameter("entry_point", "main_fp"); + StringUtil::StrStreamType outStream; outStream << - " float3 lightDir"<setSource(outStream.str()); + fragment->load(); + + for (int i=0; igetDefaultParameters()->setNamedAutoConstant("lightPositionObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); + fragment->getDefaultParameters()->setNamedAutoConstant("lightDiffuse"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); + fragment->getDefaultParameters()->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); + } + fragment->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); } - - outStream << - " float3 lightingFinal = lightColour.xyz * diffuse.xyz * vertexColour.xyz + ambient.xyz * lightAmbient.xyz + emissive.xyz; \n" - " oColor.xyz = lerp(lightingFinal * tex.xyz, fogColour, fogValue); \n" - " oColor.a = tex.a * diffuse.a * vertexColour.a; \n" - "}"; - fragment->setSource(outStream.str()); - fragment->load(); - - for (int i=0; igetDefaultParameters()->setNamedAutoConstant("lightPositionObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); - fragment->getDefaultParameters()->setNamedAutoConstant("lightDiffuse"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); - fragment->getDefaultParameters()->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); - } - fragment->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); + else + fragment = mgr.getByName("main_fp"); + material->getTechnique(0)->getPass(0)->setFragmentProgram(fragment->getName()); } - else - fragment = mgr.getByName("main_fp"); - material->getTechnique(0)->getPass(0)->setFragmentProgram(fragment->getName()); } // Takes a name and adds a unique part to it. This is just used to diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index 463230bc72..f2b7823e3e 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -73,6 +73,7 @@ const bool Manager::getBool (const std::string& setting, const std::string& cate void Manager::setString (const std::string& setting, const std::string& category, const std::string& value) { + bool found=false; Ogre::ConfigFile::SettingsIterator it = mFile.getSettingsIterator(category); while (it.hasMoreElements()) { @@ -82,10 +83,12 @@ void Manager::setString (const std::string& setting, const std::string& category { mChangedSettings.push_back(std::make_pair(setting, category)); (*i).second = value; + found = true; } it.getNext(); } + assert(found && "Attempting to change a non-existing setting"); } void Manager::setInt (const std::string& setting, const std::string& category, const int value) diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index 98fad605ef..368b5e692c 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -13,7 +13,6 @@ namespace Settings class Manager { public: - static Ogre::ConfigFile mFile; static Ogre::ConfigFile mDefaultFile; From f4bbcb48a6de3a5d505004571c627a68b8b28d71 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 17:14:49 +0200 Subject: [PATCH 312/488] settings-default.cfg --- CMakeLists.txt | 4 ++++ apps/openmw/engine.cpp | 9 ++++++++- files/settings-default.cfg | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 files/settings-default.cfg diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f007dbccf..9c2f5a29a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -214,6 +214,9 @@ endif (APPLE) # Other files +configure_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg + "${OpenMW_BINARY_DIR}/settings-default.cfg") + configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local "${OpenMW_BINARY_DIR}/openmw.cfg") configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg @@ -288,6 +291,7 @@ if(DPKG_PROGRAM) INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") #Install global configuration files + INSTALL(FILES "${OpenMW_BINARY_DIR}/settings-default.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "../etc/openmw/" RENAME "openmw.cfg" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 294fcf492f..166c9c16ba 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -315,9 +315,16 @@ void OMW::Engine::go() boost::filesystem::create_directories(configPath); } + // Create the settings manager and load default and user settings file Settings::Manager settings; + const std::string localdefault = mCfgMgr.getLocalPath().string() + "/settings-default.cfg"; + const std::string globaldefault = mCfgMgr.getGlobalPath().string() + "/settings-default.cfg"; - //settings.loadDefault(defaultsettingspath); + // prefer local + if (boost::filesystem::exists(localdefault)) + settings.loadDefault(localdefault); + else if (boost::filesystem::exists(globaldefault)) + settings.loadDefault(globaldefault); const std::string settingspath = mCfgMgr.getUserPath().string() + "/settings.cfg"; if (boost::filesystem::exists(settingspath)) diff --git a/files/settings-default.cfg b/files/settings-default.cfg new file mode 100644 index 0000000000..7a35b7102f --- /dev/null +++ b/files/settings-default.cfg @@ -0,0 +1,3 @@ +[Objects] +shaders = true +num lights = 8 From 54ce95cfafb2c525818787f1a52463185eb8278a Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sun, 1 Apr 2012 17:25:03 +0200 Subject: [PATCH 313/488] Make sure it doesn't find the wrong file --- components/bsa/bsa_archive.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index f4f4b898cf..0e3563b261 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -41,21 +41,21 @@ struct ciLessBoost : std::binary_function { bool operator() (const std::string & s1, const std::string & s2) const { //case insensitive version of is_less - return lexicographical_compare(s1, s2, boost::algorithm::is_iless()); + return boost::ilexicographical_compare(s1, s2); } }; struct pathComparer { private: - int m_start, m_size; + std::string find; public: - pathComparer(int start, int size) : m_start(start), m_size(size) { } + pathComparer(const std::string& toFind) : find(toFind) { } - bool operator() (const std::string& first, const std::string& other) + bool operator() (const std::string& other) { - return lexicographical_compare(first.substr(m_start,m_size), other.substr(m_start,m_size), boost::algorithm::is_iless()); + return boost::iequals(find, other); } }; @@ -71,9 +71,6 @@ class DirArchive: public Ogre::FileSystemArchive bool findFile(const String& filename, std::string& copy) const { - if (filename.find(".tga") != std::string::npos) - return false; - { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' @@ -116,10 +113,13 @@ class DirArchive: public Ogre::FileSystemArchive current = found->second; } - pathComparer comp(delimiter, copy.size() - delimiter-1); - std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); - if (find != current.end() && !comp(copy, current.front())) + std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, ciLessBoost()); + if (find != current.end() && !ciLessBoost()(copy, current.front())) { + if (!boost::iequals(copy, *find)) + if ((find = std::find_if(current.begin(), current.end(), pathComparer(copy))) == current.end()) //\todo Check if this line is actually needed + return false; + copy = *find; return true; } From 7b3adb27a3eb88752681f47fc4622d80f191fd4f Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 1 Apr 2012 18:48:37 +0200 Subject: [PATCH 314/488] backend changes, terrain num lights setting --- apps/openmw/engine.cpp | 3 + apps/openmw/mwrender/terrainmaterial.cpp | 40 ++++-------- components/settings/settings.cpp | 81 +++++++++++++++++++----- components/settings/settings.hpp | 11 +++- files/settings-default.cfg | 3 + 5 files changed, 92 insertions(+), 46 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 166c9c16ba..849ccbe2e0 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -426,6 +426,9 @@ void OMW::Engine::go() // Start the main rendering loop mOgre->start(); + // Save user settings + settings.saveUser(settingspath); + std::cout << "Quitting peacefully.\n"; } diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 67ebf45af6..922ea2280e 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -36,7 +36,7 @@ THE SOFTWARE. #include "OgreHardwarePixelBuffer.h" #include "OgreShadowCameraSetupPSSM.h" -#define POINTLIGHTS +#include namespace Ogre { @@ -220,22 +220,10 @@ namespace Ogre } - int TerrainMaterialGeneratorB::SM2Profile::getNumberOfLightsSupported() const - { - #ifndef POINTLIGHTS - return 1; - #else - // number of supported lights depends on the number of available constant registers, - // which in turn depends on the shader profile used - if (GpuProgramManager::getSingleton().isSyntaxSupported("ps_3_0") - || GpuProgramManager::getSingleton().isSyntaxSupported("ps_4_0") - || GpuProgramManager::getSingleton().isSyntaxSupported("fp40") - ) - return 32; - else - return 8; - #endif - } + int TerrainMaterialGeneratorB::SM2Profile::getNumberOfLightsSupported() const + { + return Settings::Manager::getInt("num lights", "Terrain"); + } //--------------------------------------------------------------------- MaterialPtr TerrainMaterialGeneratorB::SM2Profile::generate(const Terrain* terrain) { @@ -565,7 +553,8 @@ namespace Ogre { params->setNamedAutoConstant("lightPosObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); params->setNamedAutoConstant("lightDiffuseColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); - params->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); + if (prof->getNumberOfLightsSupported() > 1) + params->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); //params->setNamedAutoConstant("lightSpecularColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, i); } @@ -980,10 +969,9 @@ namespace Ogre //"uniform float3 lightSpecularColour"<getNumberOfLightsSupported() > 1) + outStream << + "uniform float4 lightAttenuation"<getNumberOfLightsSupported() > 1) + outStream << "float d; \n" "float attn; \n"; - #endif outStream << " eyeDir = normalize(eyeDir); \n"; @@ -1144,13 +1131,12 @@ namespace Ogre outStream << " float3 halfAngle"<getNumberOfLightsSupported() > 1) outStream << // pre-multiply light color with attenuation factor "d = length( lightDir"<begin(); i != settings->end(); ++i) { - fout << i->first.c_str() << '=' << i->second.c_str() << '\n'; + fout << i->first.c_str() << " = " << i->second.c_str() << '\n'; } - seci.getNext(); + CategorySettingValueMap::iterator it = mNewSettings.begin(); + while (it != mNewSettings.end()) + { + if (it->first.first == sectionName) + { + fout << it->first.second << " = " << it->second << '\n'; + mNewSettings.erase(it++); + } + else + ++it; + } + } + + std::string category = ""; + for (CategorySettingValueMap::iterator it = mNewSettings.begin(); + it != mNewSettings.end(); ++it) + { + if (category != it->first.first) + { + category = it->first.first; + fout << '\n' << '[' << category << ']' << '\n'; + } + fout << it->first.second << " = " << it->second << '\n'; } } const std::string Manager::getString (const std::string& setting, const std::string& category) { + if (mNewSettings.find(std::make_pair(category, setting)) != mNewSettings.end()) + return mNewSettings[std::make_pair(category, setting)]; + std::string defaultval = mDefaultFile.getSetting(setting, category); return mFile.getSetting(setting, category, defaultval); } @@ -73,22 +99,45 @@ const bool Manager::getBool (const std::string& setting, const std::string& cate void Manager::setString (const std::string& setting, const std::string& category, const std::string& value) { + CategorySetting s = std::make_pair(category, setting); + bool found=false; - Ogre::ConfigFile::SettingsIterator it = mFile.getSettingsIterator(category); - while (it.hasMoreElements()) + try { - Ogre::ConfigFile::SettingsMultiMap::iterator i = it.current(); - - if ((*i).first == setting && (*i).second != value) + Ogre::ConfigFile::SettingsIterator it = mFile.getSettingsIterator(category); + while (it.hasMoreElements()) { - mChangedSettings.push_back(std::make_pair(setting, category)); - (*i).second = value; - found = true; - } + Ogre::ConfigFile::SettingsMultiMap::iterator i = it.current(); - it.getNext(); + if ((*i).first == setting) + { + if ((*i).second != value) + { + mChangedSettings.push_back(std::make_pair(category, setting)); + (*i).second = value; + } + found = true; + } + + it.getNext(); + } + } + catch (Ogre::Exception&) + {} + + if (!found) + { + if (mNewSettings.find(s) != mNewSettings.end()) + { + if (mNewSettings[s] != value) + { + mChangedSettings.push_back(std::make_pair(category, setting)); + mNewSettings[s] = value; + } + } + else + mNewSettings[s] = value; } - assert(found && "Attempting to change a non-existing setting"); } void Manager::setInt (const std::string& setting, const std::string& category, const int value) @@ -106,9 +155,9 @@ void Manager::setBool (const std::string& setting, const std::string& category, setString(setting, category, Ogre::StringConverter::toString(value)); } -const SettingCategoryVector Manager::apply() +const CategorySettingVector Manager::apply() { - SettingCategoryVector vec = mChangedSettings; + CategorySettingVector vec = mChangedSettings; mChangedSettings.clear(); return vec; } diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index 368b5e692c..f670ea1ddb 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -5,7 +5,9 @@ namespace Settings { - typedef std::vector< std::pair > SettingCategoryVector; + typedef std::pair < std::string, std::string > CategorySetting; + typedef std::vector< std::pair > CategorySettingVector; + typedef std::map < CategorySetting, std::string > CategorySettingValueMap; /// /// \brief Settings management (can change during runtime) @@ -16,9 +18,12 @@ namespace Settings static Ogre::ConfigFile mFile; static Ogre::ConfigFile mDefaultFile; - static SettingCategoryVector mChangedSettings; + static CategorySettingVector mChangedSettings; ///< tracks all the settings that were changed since the last apply() call + static CategorySettingValueMap mNewSettings; + ///< tracks all the settings that are in the default file, but not in user file yet + void loadDefault (const std::string& file); ///< load file as the default settings (can be overridden by user settings) @@ -31,7 +36,7 @@ namespace Settings void saveUser (const std::string& file); ///< save user settings to file - const SettingCategoryVector apply(); + static const CategorySettingVector apply(); ///< returns the list of changed settings and then clears it static const int getInt (const std::string& setting, const std::string& category); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 7a35b7102f..1a6b9b3287 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,3 +1,6 @@ [Objects] shaders = true num lights = 8 + +[Terrain] +num lights = 8 From d09f0610eaaf5128b9d849e3bc99868fcf17f43e Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sun, 1 Apr 2012 20:36:57 +0300 Subject: [PATCH 315/488] Add basic windows pinning Create WindowPinnableBase class for windows which should be allowed to be pinned. Add skin for pinnable windows - currently just a copy of normal window with 1 extra button (hopefully this can be improved later). Handle clicking on PinToggle button (pinning/unpinning a window). --- apps/openmw/mwgui/stats_window.cpp | 2 +- apps/openmw/mwgui/stats_window.hpp | 4 +- apps/openmw/mwgui/window_pinnable_base.cpp | 31 +++++++++ apps/openmw/mwgui/window_pinnable_base.hpp | 24 +++++++ files/mygui/openmw_stats_window_layout.xml | 2 +- files/mygui/openmw_windows.skin.xml | 81 ++++++++++++++++++++++ libs/openengine/gui/layout.hpp | 2 +- 7 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 apps/openmw/mwgui/window_pinnable_base.cpp create mode 100644 apps/openmw/mwgui/window_pinnable_base.hpp diff --git a/apps/openmw/mwgui/stats_window.cpp b/apps/openmw/mwgui/stats_window.cpp index 12b0dcc793..3ded9713af 100644 --- a/apps/openmw/mwgui/stats_window.cpp +++ b/apps/openmw/mwgui/stats_window.cpp @@ -12,7 +12,7 @@ using namespace MWGui; const int StatsWindow::lineHeight = 18; StatsWindow::StatsWindow (WindowManager& parWindowManager) - : WindowBase("openmw_stats_window_layout.xml", parWindowManager) + : WindowPinnableBase("openmw_stats_window_layout.xml", parWindowManager) , skillAreaWidget(NULL) , skillClientWidget(NULL) , skillScrollerWidget(NULL) diff --git a/apps/openmw/mwgui/stats_window.hpp b/apps/openmw/mwgui/stats_window.hpp index 2ff170f571..081a75d56d 100644 --- a/apps/openmw/mwgui/stats_window.hpp +++ b/apps/openmw/mwgui/stats_window.hpp @@ -9,13 +9,13 @@ #include #include "../mwmechanics/stat.hpp" -#include "window_base.hpp" +#include "window_pinnable_base.hpp" namespace MWGui { class WindowManager; - class StatsWindow : public WindowBase + class StatsWindow : public WindowPinnableBase { public: typedef std::pair Faction; diff --git a/apps/openmw/mwgui/window_pinnable_base.cpp b/apps/openmw/mwgui/window_pinnable_base.cpp new file mode 100644 index 0000000000..cca593c9cf --- /dev/null +++ b/apps/openmw/mwgui/window_pinnable_base.cpp @@ -0,0 +1,31 @@ +#include "window_pinnable_base.hpp" +#include "window_manager.hpp" + +using namespace MWGui; + +WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, WindowManager& parWindowManager) + : WindowBase(parLayout, parWindowManager), mIsPinned(false) +{ + MyGUI::WindowPtr t = static_cast(mMainWidget); + t->eventWindowButtonPressed += MyGUI::newDelegate(this, &WindowPinnableBase::onWindowButtonPressed); +} + +void WindowPinnableBase::setVisible(bool b) +{ + // Pinned windows can not be hidden + if (mIsPinned && !b) + return; + + WindowBase::setVisible(b); +} + +void WindowPinnableBase::onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName) +{ + if ("PinToggle" == eventName) + { + mIsPinned = !mIsPinned; + } + + eventDone(this); +} + diff --git a/apps/openmw/mwgui/window_pinnable_base.hpp b/apps/openmw/mwgui/window_pinnable_base.hpp new file mode 100644 index 0000000000..0e3c27c861 --- /dev/null +++ b/apps/openmw/mwgui/window_pinnable_base.hpp @@ -0,0 +1,24 @@ +#ifndef MWGUI_WINDOW_PINNABLE_BASE_H +#define MWGUI_WINDOW_PINNABLE_BASE_H + +#include "window_base.hpp" + +namespace MWGui +{ + class WindowManager; + + class WindowPinnableBase: public WindowBase + { + public: + WindowPinnableBase(const std::string& parLayout, WindowManager& parWindowManager); + void setVisible(bool b); + + private: + void onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName); + + bool mIsPinned; + }; +} + +#endif + diff --git a/files/mygui/openmw_stats_window_layout.xml b/files/mygui/openmw_stats_window_layout.xml index 1380d474cd..fd99f863e5 100644 --- a/files/mygui/openmw_stats_window_layout.xml +++ b/files/mygui/openmw_stats_window_layout.xml @@ -1,7 +1,7 @@ - + diff --git a/files/mygui/openmw_windows.skin.xml b/files/mygui/openmw_windows.skin.xml index 3ee33124ca..7c194ea5d0 100644 --- a/files/mygui/openmw_windows.skin.xml +++ b/files/mygui/openmw_windows.skin.xml @@ -289,6 +289,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/openengine/gui/layout.hpp b/libs/openengine/gui/layout.hpp index e73b2d1cea..05a23e8aea 100644 --- a/libs/openengine/gui/layout.hpp +++ b/libs/openengine/gui/layout.hpp @@ -103,7 +103,7 @@ namespace GUI )); } - void setVisible(bool b) + virtual void setVisible(bool b) { mMainWidget->setVisible(b); } From 911ca4be8950b6b590104cb85a35f86e5edc0d5d Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sun, 1 Apr 2012 20:39:53 +0300 Subject: [PATCH 316/488] Move MapWindow to separate files Separate MapWindow from bunch of classes in layouts.cpp/hpp Inherit it from WindowPinnableBase. TODO: map arrow (player position) updates orientation only when you open the inventory. When the map window is pinned, the arrow direction is not updated. --- apps/openmw/mwgui/layouts.cpp | 93 ------------------------ apps/openmw/mwgui/layouts.hpp | 24 ------- apps/openmw/mwgui/map_window.cpp | 104 +++++++++++++++++++++++++++ apps/openmw/mwgui/map_window.hpp | 33 +++++++++ apps/openmw/mwgui/window_manager.cpp | 3 +- 5 files changed, 139 insertions(+), 118 deletions(-) create mode 100644 apps/openmw/mwgui/map_window.cpp create mode 100644 apps/openmw/mwgui/map_window.hpp diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index de74214eef..af068ffae1 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -181,99 +181,6 @@ void HUD::setPlayerPos(const float x, const float y) compass->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); } -MapWindow::MapWindow() - : Layout("openmw_map_window_layout.xml") - , mGlobal(false) - , mVisible(false) -{ - setCoord(500,0,320,300); - setText("WorldButton", "World"); - setImage("Compass", "textures\\compass.dds"); - - // Obviously you should override this later on - setCellName("No Cell Loaded"); - - getWidget(mLocalMap, "LocalMap"); - getWidget(mGlobalMap, "GlobalMap"); - getWidget(mPlayerArrow, "Compass"); - - getWidget(mButton, "WorldButton"); - mButton->eventMouseButtonClick += MyGUI::newDelegate(this, &MapWindow::onWorldButtonClicked); - - MyGUI::Button* eventbox; - getWidget(eventbox, "EventBox"); - eventbox->eventMouseDrag += MyGUI::newDelegate(this, &MapWindow::onMouseDrag); - eventbox->eventMouseButtonPressed += MyGUI::newDelegate(this, &MapWindow::onDragStart); - - LocalMapBase::init(mLocalMap, this); -} - -void MapWindow::setVisible(bool b) -{ - mMainWidget->setVisible(b); - if (b) - mVisible = true; - else - mVisible = false; -} - -void MapWindow::setCellName(const std::string& cellName) -{ - static_cast(mMainWidget)->setCaption(cellName); - adjustWindowCaption(); -} - -void MapWindow::setPlayerPos(const float x, const float y) -{ - if (mGlobal || mVisible) return; - MyGUI::IntSize size = mLocalMap->getCanvasSize(); - MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height); - MyGUI::IntCoord viewsize = mLocalMap->getCoord(); - MyGUI::IntPoint pos(0.5*viewsize.width - middle.left, 0.5*viewsize.height - middle.top); - mLocalMap->setViewOffset(pos); - - mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); -} - -void MapWindow::setPlayerDir(const float x, const float y) -{ - if (!mVisible) return; - MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain(); - MyGUI::RotatingSkin* rotatingSubskin = main->castType(); - rotatingSubskin->setCenter(MyGUI::IntPoint(16,16)); - float angle = std::atan2(x,y); - rotatingSubskin->setAngle(angle); -} - -void MapWindow::onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) -{ - if (_id!=MyGUI::MouseButton::Left) return; - if (!mGlobal) - mLastDragPos = MyGUI::IntPoint(_left, _top); -} - -void MapWindow::onMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) -{ - if (_id!=MyGUI::MouseButton::Left) return; - - if (!mGlobal) - { - MyGUI::IntPoint diff = MyGUI::IntPoint(_left, _top) - mLastDragPos; - mLocalMap->setViewOffset( mLocalMap->getViewOffset() + diff ); - - mLastDragPos = MyGUI::IntPoint(_left, _top); - } -} - -void MapWindow::onWorldButtonClicked(MyGUI::Widget* _sender) -{ - mGlobal = !mGlobal; - mGlobalMap->setVisible(mGlobal); - mLocalMap->setVisible(!mGlobal); - - mButton->setCaption( mGlobal ? "Local" : "World" ); -} - LocalMapBase::LocalMapBase() : mCurX(0) , mCurY(0) diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 614479ccce..30bea579c5 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -82,30 +82,6 @@ namespace MWGui MyGUI::TextBox* batchcounter; }; - class MapWindow : public OEngine::GUI::Layout, public LocalMapBase - { - public: - MapWindow(); - virtual ~MapWindow(){} - - void setVisible(bool b); - void setPlayerPos(const float x, const float y); - void setPlayerDir(const float x, const float y); - void setCellName(const std::string& cellName); - - private: - void onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); - void onMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); - void onWorldButtonClicked(MyGUI::Widget* _sender); - - MyGUI::ScrollView* mGlobalMap; - MyGUI::ImageBox* mPlayerArrow; - MyGUI::Button* mButton; - MyGUI::IntPoint mLastDragPos; - bool mVisible; - bool mGlobal; - }; - class MainMenu : public OEngine::GUI::Layout { public: diff --git a/apps/openmw/mwgui/map_window.cpp b/apps/openmw/mwgui/map_window.cpp new file mode 100644 index 0000000000..631f61c9d7 --- /dev/null +++ b/apps/openmw/mwgui/map_window.cpp @@ -0,0 +1,104 @@ +#include "map_window.hpp" +/* +#include "../mwmechanics/mechanicsmanager.hpp" +#include "window_manager.hpp" + +#include +#include +#include + +#undef min +#undef max +*/ +using namespace MWGui; + +MapWindow::MapWindow(WindowManager& parWindowManager) : + MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager), + mGlobal(false), + mVisible(false) +{ + setCoord(500,0,320,300); + setText("WorldButton", "World"); + setImage("Compass", "textures\\compass.dds"); + + // Obviously you should override this later on + setCellName("No Cell Loaded"); + + getWidget(mLocalMap, "LocalMap"); + getWidget(mGlobalMap, "GlobalMap"); + getWidget(mPlayerArrow, "Compass"); + + getWidget(mButton, "WorldButton"); + mButton->eventMouseButtonClick += MyGUI::newDelegate(this, &MapWindow::onWorldButtonClicked); + + MyGUI::Button* eventbox; + getWidget(eventbox, "EventBox"); + eventbox->eventMouseDrag += MyGUI::newDelegate(this, &MapWindow::onMouseDrag); + eventbox->eventMouseButtonPressed += MyGUI::newDelegate(this, &MapWindow::onDragStart); + + LocalMapBase::init(mLocalMap, this); +} + +void MapWindow::setVisible(bool b) +{ + WindowPinnableBase::setVisible(b); + mVisible = b; +} + +void MapWindow::setCellName(const std::string& cellName) +{ + static_cast(mMainWidget)->setCaption(cellName); + adjustWindowCaption(); +} + +void MapWindow::setPlayerPos(const float x, const float y) +{ + if (mGlobal || mVisible) return; + MyGUI::IntSize size = mLocalMap->getCanvasSize(); + MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height); + MyGUI::IntCoord viewsize = mLocalMap->getCoord(); + MyGUI::IntPoint pos(0.5*viewsize.width - middle.left, 0.5*viewsize.height - middle.top); + mLocalMap->setViewOffset(pos); + + mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); +} + +void MapWindow::setPlayerDir(const float x, const float y) +{ + if (!mVisible) return; + MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain(); + MyGUI::RotatingSkin* rotatingSubskin = main->castType(); + rotatingSubskin->setCenter(MyGUI::IntPoint(16,16)); + float angle = std::atan2(x,y); + rotatingSubskin->setAngle(angle); +} + +void MapWindow::onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) +{ + if (_id!=MyGUI::MouseButton::Left) return; + if (!mGlobal) + mLastDragPos = MyGUI::IntPoint(_left, _top); +} + +void MapWindow::onMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) +{ + if (_id!=MyGUI::MouseButton::Left) return; + + if (!mGlobal) + { + MyGUI::IntPoint diff = MyGUI::IntPoint(_left, _top) - mLastDragPos; + mLocalMap->setViewOffset( mLocalMap->getViewOffset() + diff ); + + mLastDragPos = MyGUI::IntPoint(_left, _top); + } +} + +void MapWindow::onWorldButtonClicked(MyGUI::Widget* _sender) +{ + mGlobal = !mGlobal; + mGlobalMap->setVisible(mGlobal); + mLocalMap->setVisible(!mGlobal); + + mButton->setCaption( mGlobal ? "Local" : "World" ); +} + diff --git a/apps/openmw/mwgui/map_window.hpp b/apps/openmw/mwgui/map_window.hpp new file mode 100644 index 0000000000..2fdc0d91ab --- /dev/null +++ b/apps/openmw/mwgui/map_window.hpp @@ -0,0 +1,33 @@ +#ifndef MWGUI_MAPWINDOW_H +#define MWGUI_MAPWINDOW_H + +#include "layouts.hpp" +#include "window_pinnable_base.hpp" + +namespace MWGui +{ + class MapWindow : public MWGui::WindowPinnableBase, public LocalMapBase + { + public: + MapWindow(WindowManager& parWindowManager); + virtual ~MapWindow(){} + + void setVisible(bool b); + void setPlayerPos(const float x, const float y); + void setPlayerDir(const float x, const float y); + void setCellName(const std::string& cellName); + + private: + void onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); + void onMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); + void onWorldButtonClicked(MyGUI::Widget* _sender); + + MyGUI::ScrollView* mGlobalMap; + MyGUI::ImageBox* mPlayerArrow; + MyGUI::Button* mButton; + MyGUI::IntPoint mLastDragPos; + bool mVisible; + bool mGlobal; + }; +} +#endif diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 49b6e644d3..4d7b9f9013 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -4,6 +4,7 @@ #include "review.hpp" #include "dialogue.hpp" #include "dialogue_history.hpp" +#include "map_window.hpp" #include "stats_window.hpp" #include "messagebox.hpp" @@ -71,7 +72,7 @@ WindowManager::WindowManager(MWWorld::Environment& environment, hud = new HUD(w,h, showFPSLevel); menu = new MainMenu(w,h); - map = new MapWindow(); + map = new MapWindow(*this); stats = new StatsWindow(*this); console = new Console(w,h, environment, extensions); mJournal = new JournalWindow(*this); From cec9562282b89c9e3e15e35e8e7daf7ebf095cce Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sun, 1 Apr 2012 20:29:00 +0200 Subject: [PATCH 317/488] Fixing an ambigous symbol --- apps/openmw/mwworld/weather.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 9a918c2fb3..09fd200762 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -34,7 +34,7 @@ const float WeatherGlobals::mThunderFrequency = .4; const float WeatherGlobals::mThunderThreshold = 0.6; const float WeatherGlobals::mThunderSoundDelay = 0.25; -WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, Environment* env) : +WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, MWWorld::Environment* env) : mHour(14), mCurrentWeather("clear"), mFirstUpdate(true), mWeatherUpdateTime(0), mThunderFlash(0), mThunderChance(0), mThunderChanceNeeded(50), mThunderSoundDelay(0) { From ae989040e58a6b8c688d545a0b6278868e7ce9b7 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 1 Apr 2012 21:29:49 +0200 Subject: [PATCH 318/488] Issue #225: Fix for memleak when loading terrain. --- apps/openmw/mwrender/terrain.cpp | 11 +++++++++-- components/esm/loadland.cpp | 18 ++++++++++++++++++ components/esm/loadland.hpp | 3 +++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 8877215653..0b8f933a27 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -98,7 +98,10 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - land->loadData(); + if (!land->dataLoaded) + { + land->loadData(); + } } //split the cell terrain into four segments @@ -420,7 +423,11 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - land->loadData(); + if (!land->dataLoaded) + { + land->loadData(); + } + return land->landData ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; } diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index cd2cf1d917..96afdf8316 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -2,6 +2,24 @@ namespace ESM { + +Land::Land() + : flags(0) + , X(0) + , Y(0) + , mEsm(NULL) + , hasData(false) + , dataLoaded(false) + , landData(NULL) +{ +} + +Land::~Land() +{ + delete landData; +} + + void Land::load(ESMReader &esm) { mEsm = &esm; diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 5ccd966d92..64baecd349 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -11,6 +11,9 @@ namespace ESM struct Land { + Land(); + ~Land(); + int flags; // Only first four bits seem to be used, don't know what // they mean. int X, Y; // Map coordinates. From 2147210ad7ab001b8789689b6e0556dba4c95183 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 1 Apr 2012 12:46:49 -0700 Subject: [PATCH 319/488] Don't set an underwater environment when there's no water --- apps/openmw/mwsound/soundmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a96aac6c5c..1c6e548b6e 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -407,7 +407,7 @@ namespace MWSound if(!isMusicPlaying()) startRandomTitle(); - MWWorld::Ptr::CellStore *current = mEnvironment.mWorld->getPlayer().getPlayer().getCell(); + const ESM::Cell *cell = mEnvironment.mWorld->getPlayer().getPlayer().getCell()->cell; Ogre::Camera *cam = mEnvironment.mWorld->getPlayer().getRenderer()->getCamera(); Ogre::Vector3 nPos, nDir, nUp; nPos = cam->getRealPosition(); @@ -415,7 +415,7 @@ namespace MWSound nUp = cam->getRealUp(); Environment env = Env_Normal; - if(nPos.y < current->cell->water) + if((cell->data.flags&cell->HasWater) && nPos.y < cell->water) env = Env_Underwater; // The output handler is expecting vectors oriented like the game From 91a377df86021d99e7c45c9ae16dc68d7e45a8ab Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sun, 1 Apr 2012 23:51:49 +0300 Subject: [PATCH 320/488] Fix behaviour of the MapWindow The map now will track player's position/rotation when pinned, and will not update if position/rotation didn't change since last frame. --- apps/openmw/mwgui/map_window.cpp | 22 ++++++++++++---------- apps/openmw/mwgui/map_window.hpp | 6 ++++-- apps/openmw/mwgui/window_pinnable_base.cpp | 7 ++++--- apps/openmw/mwgui/window_pinnable_base.hpp | 4 +++- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwgui/map_window.cpp b/apps/openmw/mwgui/map_window.cpp index 631f61c9d7..b4e8aa4d64 100644 --- a/apps/openmw/mwgui/map_window.cpp +++ b/apps/openmw/mwgui/map_window.cpp @@ -14,8 +14,11 @@ using namespace MWGui; MapWindow::MapWindow(WindowManager& parWindowManager) : MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager), - mGlobal(false), - mVisible(false) + mGlobal(false), + mLastPositionX(0.0f), + mLastPositionY(0.0f), + mLastDirectionX(0.0f), + mLastDirectionY(0.0f) { setCoord(500,0,320,300); setText("WorldButton", "World"); @@ -39,12 +42,6 @@ MapWindow::MapWindow(WindowManager& parWindowManager) : LocalMapBase::init(mLocalMap, this); } -void MapWindow::setVisible(bool b) -{ - WindowPinnableBase::setVisible(b); - mVisible = b; -} - void MapWindow::setCellName(const std::string& cellName) { static_cast(mMainWidget)->setCaption(cellName); @@ -53,7 +50,7 @@ void MapWindow::setCellName(const std::string& cellName) void MapWindow::setPlayerPos(const float x, const float y) { - if (mGlobal || mVisible) return; + if (mGlobal || !mVisible || (x == mLastPositionX && y == mLastPositionY)) return; MyGUI::IntSize size = mLocalMap->getCanvasSize(); MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height); MyGUI::IntCoord viewsize = mLocalMap->getCoord(); @@ -61,16 +58,21 @@ void MapWindow::setPlayerPos(const float x, const float y) mLocalMap->setViewOffset(pos); mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); + mLastPositionX = x; + mLastPositionY = y; } void MapWindow::setPlayerDir(const float x, const float y) { - if (!mVisible) return; + if (!mVisible || (x == mLastDirectionX && y == mLastDirectionY)) return; MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain(); MyGUI::RotatingSkin* rotatingSubskin = main->castType(); rotatingSubskin->setCenter(MyGUI::IntPoint(16,16)); float angle = std::atan2(x,y); rotatingSubskin->setAngle(angle); + + mLastDirectionX = x; + mLastDirectionY = y; } void MapWindow::onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) diff --git a/apps/openmw/mwgui/map_window.hpp b/apps/openmw/mwgui/map_window.hpp index 2fdc0d91ab..cad652bff2 100644 --- a/apps/openmw/mwgui/map_window.hpp +++ b/apps/openmw/mwgui/map_window.hpp @@ -12,7 +12,6 @@ namespace MWGui MapWindow(WindowManager& parWindowManager); virtual ~MapWindow(){} - void setVisible(bool b); void setPlayerPos(const float x, const float y); void setPlayerDir(const float x, const float y); void setCellName(const std::string& cellName); @@ -26,8 +25,11 @@ namespace MWGui MyGUI::ImageBox* mPlayerArrow; MyGUI::Button* mButton; MyGUI::IntPoint mLastDragPos; - bool mVisible; bool mGlobal; + float mLastPositionX; + float mLastPositionY; + float mLastDirectionX; + float mLastDirectionY; }; } #endif diff --git a/apps/openmw/mwgui/window_pinnable_base.cpp b/apps/openmw/mwgui/window_pinnable_base.cpp index cca593c9cf..07f0ea278b 100644 --- a/apps/openmw/mwgui/window_pinnable_base.cpp +++ b/apps/openmw/mwgui/window_pinnable_base.cpp @@ -4,7 +4,7 @@ using namespace MWGui; WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, WindowManager& parWindowManager) - : WindowBase(parLayout, parWindowManager), mIsPinned(false) + : WindowBase(parLayout, parWindowManager), mPinned(false), mVisible(false) { MyGUI::WindowPtr t = static_cast(mMainWidget); t->eventWindowButtonPressed += MyGUI::newDelegate(this, &WindowPinnableBase::onWindowButtonPressed); @@ -13,17 +13,18 @@ WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, WindowManag void WindowPinnableBase::setVisible(bool b) { // Pinned windows can not be hidden - if (mIsPinned && !b) + if (mPinned && !b) return; WindowBase::setVisible(b); + mVisible = b; } void WindowPinnableBase::onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName) { if ("PinToggle" == eventName) { - mIsPinned = !mIsPinned; + mPinned = !mPinned; } eventDone(this); diff --git a/apps/openmw/mwgui/window_pinnable_base.hpp b/apps/openmw/mwgui/window_pinnable_base.hpp index 0e3c27c861..f3cec847fd 100644 --- a/apps/openmw/mwgui/window_pinnable_base.hpp +++ b/apps/openmw/mwgui/window_pinnable_base.hpp @@ -16,7 +16,9 @@ namespace MWGui private: void onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName); - bool mIsPinned; + protected: + bool mPinned; + bool mVisible; }; } From 63e0e820499757a6bbbbf453778756f3e430a455 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 1 Apr 2012 15:02:07 -0700 Subject: [PATCH 321/488] Implement an Audiere-based decoder --- CMakeLists.txt | 8 ++ apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwsound/audiere_decoder.cpp | 122 ++++++++++++++++++++++++ apps/openmw/mwsound/audiere_decoder.hpp | 42 ++++++++ apps/openmw/mwsound/soundmanager.cpp | 11 ++- 5 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 apps/openmw/mwsound/audiere_decoder.cpp create mode 100644 apps/openmw/mwsound/audiere_decoder.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 538e6a2fbc..5d9ef04afd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ option(OGRE_STATIC "Link static build of Ogre and Ogre Plugins into the binaries # Sound source selection option(USE_FFMPEG "use ffmpeg for sound" OFF) +option(USE_AUDIERE "use audiere for sound" OFF) option(USE_MPG123 "use mpg123 + libsndfile for sound" ON) find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") @@ -133,6 +134,13 @@ if (USE_FFMPEG) set(SOUND_DEFINE ${SOUND_DEFINE} -DOPENMW_USE_FFMPEG) endif (USE_FFMPEG) +if (USE_AUDIERE) + find_package(Audiere REQUIRED) + set(SOUND_INPUT_INCLUDES ${SOUND_INPUT_INCLUDES} ${AUDIERE_INCLUDE_DIR}) + set(SOUND_INPUT_LIBRARY ${SOUND_INPUT_LIBRARY} ${AUDIERE_LIBRARY}) + set(SOUND_DEFINE ${SOUND_DEFINE} -DOPENMW_USE_AUDIERE) +endif (USE_AUDIERE) + if (USE_MPG123) find_package(MPG123 REQUIRED) find_package(SNDFILE REQUIRED) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 3dabc9ac8d..873c23a9b1 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -39,7 +39,7 @@ add_openmw_dir (mwscript ) add_openmw_dir (mwsound - soundmanager openal_output mpgsnd_decoder ffmpeg_decoder + soundmanager openal_output audiere_decoder mpgsnd_decoder ffmpeg_decoder ) add_openmw_dir (mwworld diff --git a/apps/openmw/mwsound/audiere_decoder.cpp b/apps/openmw/mwsound/audiere_decoder.cpp new file mode 100644 index 0000000000..acc2e5283c --- /dev/null +++ b/apps/openmw/mwsound/audiere_decoder.cpp @@ -0,0 +1,122 @@ +#ifdef OPENMW_USE_AUDIERE + +#include +#include + +#include "audiere_decoder.hpp" + + +static void fail(const std::string &msg) +{ throw std::runtime_error("Audiere exception: "+msg); } + +namespace MWSound +{ + +class OgreFile : public audiere::File +{ + Ogre::DataStreamPtr mStream; + + ADR_METHOD(int) read(void* buffer, int size) + { + return mStream->read(buffer, size); + } + + ADR_METHOD(bool) seek(int position, SeekMode mode) + { + if(mode == CURRENT) + mStream->seek(mStream->tell()+position); + else if(mode == BEGIN) + mStream->seek(position); + else if(mode == END) + mStream->seek(mStream->size()+position); + else + return false; + + return true; + } + + ADR_METHOD(int) tell() + { + return mStream->tell(); + } + + size_t refs; + virtual void ref() { ++refs; } + virtual void unref() + { + if(--refs == 0) + delete this; + } + +public: + OgreFile(const Ogre::DataStreamPtr &stream) + : mStream(stream), refs(1) + { } + virtual ~OgreFile() { } +}; + + +void Audiere_Decoder::open(const std::string &fname) +{ + close(); + + audiere::FilePtr file(new OgreFile(mResourceMgr.openResource(fname))); + mSoundSource = audiere::OpenSampleSource(file); + + int channels, srate; + audiere::SampleFormat format; + + mSoundSource->getFormat(channels, srate, format); + if(format == audiere::SF_S16) + mSampleType = SampleType_Int16; + else if(format == audiere::SF_U8) + mSampleType = SampleType_UInt8; + else + fail("Unsupported sample type"); + + if(channels == 1) + mChannelConfig = ChannelConfig_Mono; + else if(channels == 2) + mChannelConfig = ChannelConfig_Stereo; + else + fail("Unsupported channel count"); + + mSampleRate = srate; +} + +void Audiere_Decoder::close() +{ + mSoundSource = NULL; +} + +void Audiere_Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) +{ + *samplerate = mSampleRate; + *chans = mChannelConfig; + *type = mSampleType; +} + +size_t Audiere_Decoder::read(char *buffer, size_t bytes) +{ + int size = bytesToFrames(bytes, mChannelConfig, mSampleType); + size = mSoundSource->read(size, buffer); + return framesToBytes(size, mChannelConfig, mSampleType); +} + +void Audiere_Decoder::rewind() +{ + mSoundSource->reset(); +} + +Audiere_Decoder::Audiere_Decoder() +{ +} + +Audiere_Decoder::~Audiere_Decoder() +{ + close(); +} + +} + +#endif diff --git a/apps/openmw/mwsound/audiere_decoder.hpp b/apps/openmw/mwsound/audiere_decoder.hpp new file mode 100644 index 0000000000..0ad026d515 --- /dev/null +++ b/apps/openmw/mwsound/audiere_decoder.hpp @@ -0,0 +1,42 @@ +#ifndef GAME_SOUND_AUDIERE_DECODER_H +#define GAME_SOUND_AUDIERE_DECODER_H + +#include + +#include "audiere.h" + +#include "sound_decoder.hpp" + + +namespace MWSound +{ + class Audiere_Decoder : public Sound_Decoder + { + audiere::SampleSourcePtr mSoundSource; + int mSampleRate; + SampleType mSampleType; + ChannelConfig mChannelConfig; + + virtual void open(const std::string &fname); + virtual void close(); + + virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); + + virtual size_t read(char *buffer, size_t bytes); + virtual void rewind(); + + Audiere_Decoder& operator=(const Audiere_Decoder &rhs); + Audiere_Decoder(const Audiere_Decoder &rhs); + + Audiere_Decoder(); + public: + virtual ~Audiere_Decoder(); + + friend class SoundManager; + }; +#ifndef DEFAULT_DECODER +#define DEFAULT_DECODER (::MWSound::Audiere_Decoder) +#endif +}; + +#endif diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 1c6e548b6e..145390e3e1 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -18,8 +18,8 @@ #include "openal_output.hpp" #define SOUND_OUT "OpenAL" -/* Set up the sound manager to use FFMPEG or MPG123+libsndfile for input. The - * OPENMW_USE_x macros are set in CMakeLists.txt. +/* Set up the sound manager to use FFMPEG, MPG123+libsndfile, or Audiere for + * input. The OPENMW_USE_x macros are set in CMakeLists.txt. */ #ifdef OPENMW_USE_FFMPEG #include "ffmpeg_decoder.hpp" @@ -28,6 +28,13 @@ #endif #endif +#ifdef OPENMW_USE_AUDIERE +#include "audiere_decoder.hpp" +#ifndef SOUND_IN +#define SOUND_IN "Audiere" +#endif +#endif + #ifdef OPENMW_USE_MPG123 #include "mpgsnd_decoder.hpp" #ifndef SOUND_IN From 5accca385ce148bb56545e0d9fbb0037665be3b3 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 13:47:25 +0200 Subject: [PATCH 322/488] fix crash on exit when no user settings exist --- apps/openmw/engine.cpp | 9 ++++++--- components/settings/settings.cpp | 5 ----- components/settings/settings.hpp | 3 --- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 849ccbe2e0..25c0c60bd2 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -315,7 +315,7 @@ void OMW::Engine::go() boost::filesystem::create_directories(configPath); } - // Create the settings manager and load default and user settings file + // Create the settings manager and load default settings file Settings::Manager settings; const std::string localdefault = mCfgMgr.getLocalPath().string() + "/settings-default.cfg"; const std::string globaldefault = mCfgMgr.getGlobalPath().string() + "/settings-default.cfg"; @@ -326,11 +326,14 @@ void OMW::Engine::go() else if (boost::filesystem::exists(globaldefault)) settings.loadDefault(globaldefault); + // load user settings if they exist, otherwise just load the default settings as user settings const std::string settingspath = mCfgMgr.getUserPath().string() + "/settings.cfg"; if (boost::filesystem::exists(settingspath)) settings.loadUser(settingspath); - else - settings.copyDefaultToUserSettings(); + else if (boost::filesystem::exists(localdefault)) + settings.loadUser(localdefault); + else if (boost::filesystem::exists(globaldefault)) + settings.loadUser(globaldefault); mOgre->configure(!boost::filesystem::is_regular_file(mCfgMgr.getOgreConfigPath()), mCfgMgr.getOgreConfigPath().string(), diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index d94e06678f..28201eda2a 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -22,11 +22,6 @@ void Manager::loadDefault (const std::string& file) mDefaultFile.load(file); } -void Manager::copyDefaultToUserSettings () -{ - mFile = mDefaultFile; -} - void Manager::saveUser(const std::string& file) { std::fstream fout(file.c_str(), std::ios::out); diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index f670ea1ddb..e9858eb945 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -27,9 +27,6 @@ namespace Settings void loadDefault (const std::string& file); ///< load file as the default settings (can be overridden by user settings) - void copyDefaultToUserSettings (); - ///< copy the default settings to the user settings (useful when there are no user settings yet) - void loadUser (const std::string& file); ///< load file as user settings From 1445ae992db1b4fde52330b0a498a2b616836c41 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 14:24:16 +0200 Subject: [PATCH 323/488] adding a setting to disable static geometry --- apps/openmw/mwrender/objects.cpp | 3 ++- files/settings-default.cfg | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 94ccb6e97b..eb79581aa8 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -3,6 +3,7 @@ #include #include +#include using namespace MWRender; @@ -113,7 +114,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) bounds.scale(insert->getScale()); mBounds[ptr.getCell()].merge(bounds); - if(!mIsStatic) + if(!mIsStatic || !Settings::Manager::getBool("use static geometry", "Objects")) { insert->attachObject(ent); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 1a6b9b3287..bf471e111f 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,6 +1,7 @@ [Objects] shaders = true num lights = 8 +use static geometry = true [Terrain] num lights = 8 From b380e71832d5bc35aded3deee5e1752d23e3d79f Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 14:32:21 +0200 Subject: [PATCH 324/488] fixed underwater wireframe mode --- apps/openmw/mwrender/renderingmanager.hpp | 3 --- apps/openmw/mwrender/water.cpp | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 81907a9382..fc32b4dd2b 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -31,11 +31,8 @@ namespace Ogre { - class Camera; - class Viewport; class SceneManager; class SceneNode; - class RaySceneQuery; class Quaternion; class Vector3; } diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 9de55e3a59..cbf9c5b29b 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -70,7 +70,7 @@ void Water::toggle() void Water::checkUnderwater(float y) { - if ((mIsUnderwater && y > mTop) || !mWater->isVisible()) + if ((mIsUnderwater && y > mTop) || !mWater->isVisible() || mCamera->getPolygonMode() != Ogre::PM_SOLID) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); @@ -78,7 +78,7 @@ void Water::checkUnderwater(float y) mIsUnderwater = false; } - if (!mIsUnderwater && y < mTop && mWater->isVisible()) + if (!mIsUnderwater && y < mTop && mWater->isVisible() && mCamera->getPolygonMode() == Ogre::PM_SOLID) { try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); From 89565bacd17453c1ce2a8cff7cf6ea5822a262f5 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Mon, 2 Apr 2012 14:34:21 +0200 Subject: [PATCH 325/488] since the default method is not available in older boost we should check by ourselfs if the options are given and dont use notify --- apps/mwiniimporter/main.cpp | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 9a6e61645d..43b17b76ac 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -9,7 +9,7 @@ namespace bpo = boost::program_options; int main(int argc, char *argv[]) { - bpo::options_description desc("Syntax: mwiniimporter \nAllowed options"); + bpo::options_description desc("Syntax: mwiniimporter -i inifile -c configfile \nAllowed options"); desc.add_options() ("help,h", "produce help message") ("verbose,v", "verbose output") @@ -20,25 +20,11 @@ int main(int argc, char *argv[]) { ; bpo::variables_map vm; - try { - bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); + bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); - // parse help before calling notify because we dont want it to throw an error if help is set - if(vm.count("help")) { - std::cout << desc; - return 0; - } - - bpo::notify(vm); - - } - catch(std::exception& e) { - std::cerr << "Error:" << e.what() << std::endl; - return -1; - } - catch(...) { - std::cerr << "Error" << std::endl; - return -2; + if(vm.count("help") || !vm.count("ini") || !vm.count("cfg")) { + std::cout << desc; + return 0; } std::string iniFile = vm["ini"].as(); From 16674ad141661ea77b5903b1cba0716bd19ea7d2 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Mon, 2 Apr 2012 14:42:01 +0200 Subject: [PATCH 326/488] open file for writing AFTER reading it :) --- apps/mwiniimporter/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 43b17b76ac..836f84eb08 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -47,7 +47,6 @@ int main(int argc, char *argv[]) { MwIniImporter importer; importer.setVerbose(vm.count("verbose")); - boost::iostreams::stream file(outputFile); MwIniImporter::multistrmap ini = importer.loadIniFile(iniFile); MwIniImporter::multistrmap cfg = importer.loadCfgFile(cfgFile); @@ -59,6 +58,7 @@ int main(int argc, char *argv[]) { } std::cout << "write to: " << outputFile << std::endl; + boost::iostreams::stream file(outputFile); importer.writeToFile(file, cfg); return 0; From e5cc9adbb02938809938f3ea8a0fe222372d82af Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 15:30:29 +0200 Subject: [PATCH 327/488] added settings for rendering distance of small objects --- apps/openmw/mwrender/objects.cpp | 12 +++++------- files/settings-default.cfg | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index eb79581aa8..dd211f8e9f 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -89,18 +89,16 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) NifOgre::NIFLoader::load(mesh); Ogre::Entity *ent = mRenderer.getScene()->createEntity(mesh); -/* + Ogre::Vector3 extents = ent->getBoundingBox().getSize(); extents *= insert->getScale(); -// float size = std::max(std::max(extents.x, extents.y), extents.z); + float size = std::max(std::max(extents.x, extents.y), extents.z); - bool small = (size < 250); /// \todo config value + bool small = (size < Settings::Manager::getInt("small object size", "Objects")) && Settings::Manager::getBool("limit small object distance", "Objects"); // do not fade out doors. that will cause holes and look stupid if (ptr.getTypeName().find("Door") != std::string::npos) small = false; -*/ - const bool small = false; if (mBounds.find(ptr.getCell()) == mBounds.end()) mBounds[ptr.getCell()] = Ogre::AxisAlignedBox::BOX_NULL; @@ -118,7 +116,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) { insert->attachObject(ent); - ent->setRenderingDistance(small ? 2500 : 0); /// \todo config value + ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Objects") : 0); /// \todo config value } else { @@ -132,7 +130,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); mStaticGeometrySmall[ptr.getCell()] = sg; - sg->setRenderingDistance(2500); /// \todo config value + sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "Objects")); /// \todo config value } else sg = mStaticGeometrySmall[ptr.getCell()]; diff --git a/files/settings-default.cfg b/files/settings-default.cfg index bf471e111f..1e8be450e8 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,7 +1,24 @@ [Objects] + shaders = true + +# Max. number of lights that affect objects. Setting to 1 will only reflect sunlight +# Note: has no effect when shaders are turned off num lights = 8 + +# Use static geometry for static objects. Improves rendering speed. use static geometry = true +# Limit the rendering distance of small objects +limit small object distance = false + +# Size below which an object is considered as small +small object size = 250 + +# Rendering distance for small objects +small object distance = 3500 + [Terrain] + +# Max. number of lights that affect the terrain. Setting to 1 will only reflect sunlight num lights = 8 From fd662f937a7b6fe2d5db70eb6a2fa5bc5a929728 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 15:51:48 +0200 Subject: [PATCH 328/488] add settings for viewing distance and fog --- apps/openmw/mwrender/objects.cpp | 6 +++--- apps/openmw/mwrender/renderingmanager.cpp | 13 +++++-------- files/settings-default.cfg | 11 +++++++++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index dd211f8e9f..bf83e5c836 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -94,7 +94,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) extents *= insert->getScale(); float size = std::max(std::max(extents.x, extents.y), extents.z); - bool small = (size < Settings::Manager::getInt("small object size", "Objects")) && Settings::Manager::getBool("limit small object distance", "Objects"); + bool small = (size < Settings::Manager::getInt("small object size", "View distance")) && Settings::Manager::getBool("limit small object distance", "Objects"); // do not fade out doors. that will cause holes and look stupid if (ptr.getTypeName().find("Door") != std::string::npos) @@ -116,7 +116,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) { insert->attachObject(ent); - ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Objects") : 0); /// \todo config value + ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "View distance") : 0); /// \todo config value } else { @@ -130,7 +130,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); mStaticGeometrySmall[ptr.getCell()] = sg; - sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "Objects")); /// \todo config value + sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "View distance")); /// \todo config value } else sg = mStaticGeometrySmall[ptr.getCell()]; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 688b97a2e3..7f4b1ec396 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -12,6 +12,7 @@ #include "../mwworld/world.hpp" // these includes can be removed once the static-hack is gone #include "../mwworld/ptr.hpp" #include +#include using namespace MWRender; @@ -273,18 +274,14 @@ void RenderingManager::configureFog(ESMS::CellStore &mCell) void RenderingManager::configureFog(const float density, const Ogre::ColourValue& colour) { - /// \todo make the viewing distance and fog start/end configurable + float max = Settings::Manager::getFloat("max viewing distance", "Viewing distance"); - // right now we load 3x3 cells, so the maximum viewing distance we - // can allow (to prevent objects suddenly popping up) equals: - // 8192 * 0.69 - // ^ cell size ^ minimum density value used (clear weather) - float low = 5652.48 / density / 2.f; - float high = 5652.48 / density; + float low = max / (density) * Settings::Manager::getFloat("fog start factor", "Viewing distance"); + float high = max / (density) * Settings::Manager::getFloat("fog end factor", "Viewing distance"); mRendering.getScene()->setFog (FOG_LINEAR, colour, 0, low, high); - mRendering.getCamera()->setFarClipDistance ( high ); + mRendering.getCamera()->setFarClipDistance ( max / density ); mRendering.getViewport()->setBackgroundColour (colour); } diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 1e8be450e8..345977922b 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -9,6 +9,8 @@ num lights = 8 # Use static geometry for static objects. Improves rendering speed. use static geometry = true +[Viewing distance] + # Limit the rendering distance of small objects limit small object distance = false @@ -18,6 +20,15 @@ small object size = 250 # Rendering distance for small objects small object distance = 3500 +# Max viewing distance at clear weather conditions +max viewing distance = 5600 + +# Distance at which fog starts (proportional to viewing distance) +fog start factor = 0.5 + +# Distance at which fog ends (proportional to viewing distance) +fog end factor = 1.0 + [Terrain] # Max. number of lights that affect the terrain. Setting to 1 will only reflect sunlight From 00cc45c5371913d2d4965ffc065e43c10c74042e Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 16:10:54 +0200 Subject: [PATCH 329/488] FPS is now a setting instead of commandline option --- apps/openmw/engine.cpp | 2 ++ apps/openmw/main.cpp | 4 ---- files/settings-default.cfg | 8 ++++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 1722be6754..cfcf9f76b9 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -343,6 +343,8 @@ void OMW::Engine::go() else if (boost::filesystem::exists(globaldefault)) settings.loadUser(globaldefault); + mFpsLevel = settings.getInt("fps", "HUD"); + mOgre->configure(!boost::filesystem::is_regular_file(mCfgMgr.getOgreConfigPath()), mCfgMgr.getOgreConfigPath().string(), mCfgMgr.getLogPath().string(), diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index cd1e0e26e4..a5e5c99e6a 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -92,9 +92,6 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat ("plugin", bpo::value()->default_value(StringsVector(), "") ->multitoken(), "plugin file(s)") - ("fps", boost::program_options::value()->implicit_value(1) - ->default_value(0), "fps counter detail (0 = off, 1 = fps counter, 2 = full detail)") - ("anim-verbose", boost::program_options::value()->implicit_value(true) ->default_value(false), "output animation indices files") @@ -225,7 +222,6 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setNewGame(variables["new-game"].as()); // other settings - engine.showFPS(variables["fps"].as()); engine.setDebugMode(variables["debug"].as()); engine.setSoundUsage(!variables["nosound"].as()); engine.setScriptsVerbosity(variables["script-verbose"].as()); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 345977922b..6372a31c1d 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,3 +1,11 @@ +[HUD] + +# FPS counter +# 0: not visible +# 1: basic FPS display +# 2: advanced FPS display (batches, triangles) +fps = 0 + [Objects] shaders = true From 5f2a674d939f326a41ae9ee6c71f32cdc8136077 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 16:14:39 +0200 Subject: [PATCH 330/488] fixed a typo --- apps/openmw/mwrender/objects.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index bf83e5c836..f52953692e 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -94,7 +94,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) extents *= insert->getScale(); float size = std::max(std::max(extents.x, extents.y), extents.z); - bool small = (size < Settings::Manager::getInt("small object size", "View distance")) && Settings::Manager::getBool("limit small object distance", "Objects"); + bool small = (size < Settings::Manager::getInt("small object size", "Viewing distance")) && Settings::Manager::getBool("limit small object distance", "Objects"); // do not fade out doors. that will cause holes and look stupid if (ptr.getTypeName().find("Door") != std::string::npos) @@ -116,7 +116,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) { insert->attachObject(ent); - ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "View distance") : 0); /// \todo config value + ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Viewing distance") : 0); /// \todo config value } else { @@ -130,7 +130,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); mStaticGeometrySmall[ptr.getCell()] = sg; - sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "View distance")); /// \todo config value + sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "Viewing distance")); /// \todo config value } else sg = mStaticGeometrySmall[ptr.getCell()]; From 6e19076dc55b20bdd71a9ba4e680dee5018721ed Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Mon, 2 Apr 2012 17:07:18 +0200 Subject: [PATCH 331/488] fallback for ini importer --- apps/mwiniimporter/importer.cpp | 39 ++++++++++++++++++++++++++++----- apps/mwiniimporter/importer.hpp | 4 +++- apps/mwiniimporter/main.cpp | 9 ++++++-- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 08b05f417e..80ec4a5fd7 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -14,10 +14,19 @@ MwIniImporter::MwIniImporter() { { "fps", "General:Show FPS" }, { 0, 0 } }; + const char *fallback[][2] = { + { "Weather_Sunrise_Time", "Weather:Sunrise Time" }, + { "Weather_Sunset_Time", "Weather:Sunset Time" }, + { 0, 0 } + }; for(int i=0; map[i][0]; i++) { mMergeMap.insert(std::make_pair(map[i][0], map[i][1])); } + + for(int i=0; fallback[i][0]; i++) { + mMergeFallback.insert(std::make_pair(fallback[i][0], fallback[i][1])); + } } void MwIniImporter::setVerbose(bool verbose) { @@ -116,16 +125,36 @@ void MwIniImporter::merge(multistrmap &cfg, multistrmap &ini) { multistrmap::iterator iniIt; for(strmap::iterator it=mMergeMap.begin(); it!=mMergeMap.end(); it++) { if((iniIt = ini.find(it->second)) != ini.end()) { - cfg.erase(it->first); - if(!this->specialMerge(it->first, it->second, cfg, ini)) { - cfg.insert(std::make_pair >(it->first, iniIt->second)); + for(std::vector::iterator vc = iniIt->second.begin(); vc != iniIt->second.end(); vc++) { + cfg.erase(it->first); + insertMultistrmap(cfg, it->first, *vc); } } } } -bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, multistrmap &cfg, multistrmap &ini) { - return false; +void MwIniImporter::mergeFallback(multistrmap &cfg, multistrmap &ini) { + cfg.erase("fallback"); + + multistrmap::iterator cfgIt; + multistrmap::iterator iniIt; + for(strmap::iterator it=mMergeFallback.begin(); it!=mMergeFallback.end(); it++) { + if((iniIt = ini.find(it->second)) != ini.end()) { + for(std::vector::iterator vc = iniIt->second.begin(); vc != iniIt->second.end(); vc++) { + std::string value("\""); + value.append(it->first).append("=").append(vc->substr(0,vc->length()-1)).append("\""); + insertMultistrmap(cfg, "fallback", value); + } + } + } +}; + +void MwIniImporter::insertMultistrmap(multistrmap &cfg, std::string key, std::string value) { + multistrmap::iterator it = cfg.find(key); + if(it == cfg.end()) { + cfg.insert(std::make_pair >(key, std::vector() )); + } + cfg[key].push_back(value); } void MwIniImporter::importGameFiles(multistrmap &cfg, multistrmap &ini) { diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 988f10255e..9ef7b67037 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -18,14 +18,16 @@ class MwIniImporter { multistrmap loadIniFile(std::string filename); multistrmap loadCfgFile(std::string filename); void merge(multistrmap &cfg, multistrmap &ini); + void mergeFallback(multistrmap &cfg, multistrmap &ini); void importGameFiles(multistrmap &cfg, multistrmap &ini); void writeToFile(boost::iostreams::stream &out, multistrmap &cfg); private: - bool specialMerge(std::string cfgKey, std::string iniKey, multistrmap &cfg, multistrmap &ini); + void insertMultistrmap(multistrmap &cfg, std::string key, std::string value); std::string numberToString(int n); bool mVerbose; strmap mMergeMap; + strmap mMergeFallback; }; diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 836f84eb08..c5409b8121 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -16,6 +16,7 @@ int main(int argc, char *argv[]) { ("ini,i", bpo::value(), "morrowind.ini file") ("cfg,c", bpo::value(), "openmw.cfg file") ("output,o", bpo::value()->default_value(""), "openmw.cfg file") + ("fallback,f", "import fallback settings") ("game-files,g", "import esm and esp files") ; @@ -44,7 +45,7 @@ int main(int argc, char *argv[]) { std::cerr << "cfg file does not exist" << std::endl; return -4; } - + MwIniImporter importer; importer.setVerbose(vm.count("verbose")); @@ -52,7 +53,11 @@ int main(int argc, char *argv[]) { MwIniImporter::multistrmap cfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); - + + if(vm.count("fallback")) { + importer.mergeFallback(cfg, ini); + } + if(vm.count("game-files")) { importer.importGameFiles(cfg, ini); } From 39ee9e9ab867729a41380f318f1ff7696a253884 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 17:51:51 +0200 Subject: [PATCH 332/488] setting for field of view --- apps/openmw/mwrender/renderingmanager.cpp | 2 +- files/settings-default.cfg | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7f4b1ec396..7d30fab6ec 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -23,7 +23,7 @@ namespace MWRender { RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment) :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0) { - mRendering.createScene("PlayerCam", 55, 5); + mRendering.createScene("PlayerCam", Settings::Manager::getFloat("fieldofview", "General"), 5); mTerrainManager = new TerrainManager(mRendering.getScene(), environment); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 6372a31c1d..86dddc9086 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,5 +1,8 @@ -[HUD] +[General] +# Camera field of view +fieldofview = 55 +[HUD] # FPS counter # 0: not visible # 1: basic FPS display @@ -7,7 +10,6 @@ fps = 0 [Objects] - shaders = true # Max. number of lights that affect objects. Setting to 1 will only reflect sunlight @@ -18,7 +20,6 @@ num lights = 8 use static geometry = true [Viewing distance] - # Limit the rendering distance of small objects limit small object distance = false @@ -38,6 +39,5 @@ fog start factor = 0.5 fog end factor = 1.0 [Terrain] - # Max. number of lights that affect the terrain. Setting to 1 will only reflect sunlight num lights = 8 From ff15f28787bdb71e9abe53a96758ff23ed80d524 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 18:01:49 +0200 Subject: [PATCH 333/488] options for texture filtering and mipmaps --- apps/openmw/mwrender/renderingmanager.cpp | 14 ++++++++++++-- files/settings-default.cfg | 14 +++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7d30fab6ec..4b54f3ea28 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -23,7 +23,7 @@ namespace MWRender { RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment) :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0) { - mRendering.createScene("PlayerCam", Settings::Manager::getFloat("fieldofview", "General"), 5); + mRendering.createScene("PlayerCam", Settings::Manager::getFloat("field of view", "General"), 5); mTerrainManager = new TerrainManager(mRendering.getScene(), environment); @@ -32,7 +32,17 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const configureFog(1, ColourValue(1,1,1)); // Set default mipmap level (NB some APIs ignore this) - TextureManager::getSingleton().setDefaultNumMipmaps(5); + TextureManager::getSingleton().setDefaultNumMipmaps(Settings::Manager::getInt("num mipmaps", "General")); + + // Set default texture filtering options + TextureFilterOptions tfo; + std::string filter = Settings::Manager::getString("texture filtering", "General"); + if (filter == "anisotropic") tfo = TFO_ANISOTROPIC; + else if (filter == "trilinear") tfo = TFO_TRILINEAR; + else /* if (filter == "bilinear") */ tfo = TFO_BILINEAR; + + MaterialManager::getSingleton().setDefaultTextureFiltering(tfo); + MaterialManager::getSingleton().setDefaultAnisotropy(Settings::Manager::getInt("anisotropy", "General")); // Load resources ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 86dddc9086..f616471cce 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,6 +1,18 @@ [General] # Camera field of view -fieldofview = 55 +field of view = 55 + +# Texture filtering mode. valid values: +# anisotropic +# bilinear +# trilinear +texture filtering = anisotropic + +# Has no effect when texture filtering is not anisotropic +anisotropy = 4 + +# Number of texture mipmaps to generate +num mipmaps = 5 [HUD] # FPS counter From 342464530de5f88da0a6728e6ad2f8a99ff08e00 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 19:37:24 +0200 Subject: [PATCH 334/488] rotated map working --- apps/openmw/mwrender/localmap.cpp | 37 ++++++++++++++--------- apps/openmw/mwrender/localmap.hpp | 8 ++++- apps/openmw/mwrender/objects.cpp | 32 ++++++++++++++++++++ apps/openmw/mwrender/objects.hpp | 4 +++ apps/openmw/mwrender/renderingmanager.cpp | 12 +++++++- apps/openmw/mwrender/renderingmanager.hpp | 3 ++ 6 files changed, 80 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 063b253019..e88557f204 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -11,10 +11,11 @@ using namespace MWRender; using namespace Ogre; -LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWWorld::Environment* env) : +LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWRender::RenderingManager* rendering, MWWorld::Environment* env) : mInterior(false), mCellX(0), mCellY(0) { mRendering = rend; + mRenderingManager = rendering; mEnvironment = env; mCameraPosNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); @@ -35,6 +36,12 @@ LocalMap::~LocalMap() deleteBuffers(); } +const Ogre::Vector2 LocalMap::rotatePoint(const Ogre::Vector2& p, const Ogre::Vector2& c, const float angle) +{ + return Vector2( Math::Cos(angle) * (p.x - c.x) - Math::Sin(angle) * (p.y - c.y) + c.x, + Math::Sin(angle) * (p.x - c.x) + Math::Cos(angle) * (p.y - c.y) + c.y); +} + void LocalMap::deleteBuffers() { mBuffers.clear(); @@ -117,6 +124,7 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, const Vector2& north = mEnvironment->mWorld->getNorthVector(cell); Radian angle(std::atan2(-north.x, -north.y)); + mAngle = angle.valueRadians(); mCameraRotNode->setOrientation(Quaternion(Math::Cos(angle/2.f), 0, Math::Sin(angle/2.f), 0)); mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_LEFT_BOTTOM))); @@ -124,7 +132,9 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_RIGHT_BOTTOM))); mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::FAR_RIGHT_BOTTOM))); - Vector2 center(bounds.getCenter().x, bounds.getCenter().z); + mBounds.scale(Vector3(2,2,2)); + + Vector2 center(mBounds.getCenter().x, mBounds.getCenter().z); Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); Vector2 max(mBounds.getMaximum().x, mBounds.getMaximum().z); @@ -165,6 +175,7 @@ void LocalMap::render(const float x, const float y, // make everything visible mRendering->getScene()->setAmbientLight(ColourValue(1,1,1)); + mRenderingManager->disableLights(); mCameraNode->setPosition(Vector3(x, zhigh+100000, y)); //mCellCamera->setFarClipDistance( (zhigh-zlow) * 1.1 ); @@ -233,7 +244,8 @@ void LocalMap::render(const float x, const float y, //rtt->writeContentsToFile("./" + texture + ".jpg"); } } - + + mRenderingManager->enableLights(); // re-enable fog mRendering->getScene()->setFog(FOG_LINEAR, clr, 0, fStart, fEnd); @@ -251,15 +263,18 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Quaterni // retrieve the x,y grid coordinates the player is in int x,y; Vector3 _pos(position.x, 0, position.z); - _pos = mCameraRotNode->convertWorldToLocalPosition(_pos); - - //if (mInterior) - /// \todo - Vector2 pos(_pos.x, _pos.z); + if (mInterior) + { + pos = rotatePoint(pos, Vector2(mBounds.getCenter().x, mBounds.getCenter().z), mAngle); + } + + Vector3 playerdirection = -mCameraRotNode->convertWorldToLocalOrientation(orientation).zAxis(); + Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); + if (!mInterior) { x = std::ceil(pos.x / sSize)-1; @@ -269,8 +284,6 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Quaterni } else { - Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); - x = std::ceil((pos.x - min.x)/sSize)-1; y = std::ceil((pos.y - min.y)/sSize)-1; @@ -288,16 +301,12 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Quaterni } else { - Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); - u = (pos.x - min.x - sSize*x)/sSize; v = (pos.y - min.y - sSize*y)/sSize; texName = mInteriorName + "_" + coordStr(x,y); } - //std::cout << " x,y " << x << ", " << y << " u,v " << u << "," << v << std::endl; - mEnvironment->mWindowManager->setPlayerPos(u, v); mEnvironment->mWindowManager->setPlayerDir(playerdirection.x, -playerdirection.z); diff --git a/apps/openmw/mwrender/localmap.hpp b/apps/openmw/mwrender/localmap.hpp index cb294a6568..95685167c3 100644 --- a/apps/openmw/mwrender/localmap.hpp +++ b/apps/openmw/mwrender/localmap.hpp @@ -12,13 +12,15 @@ namespace MWWorld namespace MWRender { + class RenderingManager; + /// /// \brief Local map rendering /// class LocalMap { public: - LocalMap(OEngine::Render::OgreRenderer*, MWWorld::Environment* env); + LocalMap(OEngine::Render::OgreRenderer*, MWRender::RenderingManager* rendering, MWWorld::Environment* env); ~LocalMap(); /** @@ -58,6 +60,7 @@ namespace MWRender private: OEngine::Render::OgreRenderer* mRendering; + MWRender::RenderingManager* mRenderingManager; MWWorld::Environment* mEnvironment; // 1024*1024 pixels for a cell @@ -77,6 +80,9 @@ namespace MWRender Ogre::SceneNode* mCameraPosNode; Ogre::SceneNode* mCameraRotNode; + float mAngle; + const Ogre::Vector2 rotatePoint(const Ogre::Vector2& p, const Ogre::Vector2& c, const float angle); + void render(const float x, const float y, const float zlow, const float zhigh, const float xw, const float yw, diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 94ccb6e97b..05b7e3b0b3 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -169,6 +169,7 @@ void Objects::insertLight (const MWWorld::Ptr& ptr, float r, float g, float b, f assert(insert); Ogre::Light *light = mRenderer.getScene()->createLight(); light->setDiffuseColour (r, g, b); + mLights.push_back(light->getName()); float cval=0.0f, lval=0.0f, qval=0.0f; @@ -274,3 +275,34 @@ Ogre::AxisAlignedBox Objects::getDimensions(MWWorld::Ptr::CellStore* cell) { return mBounds[cell]; } + +void Objects::enableLights() +{ + std::vector::iterator it = mLights.begin(); + while (it != mLights.end()) + { + if (mMwRoot->getCreator()->hasLight(*it)) + { + mMwRoot->getCreator()->getLight(*it)->setVisible(true); + ++it; + } + else + it = mLights.erase(it); + } +} + +void Objects::disableLights() +{ + std::vector::iterator it = mLights.begin(); + while (it != mLights.end()) + { + if (mMwRoot->getCreator()->hasLight(*it)) + { + mMwRoot->getCreator()->getLight(*it)->setVisible(false); + ++it; + } + else + it = mLights.erase(it); + } +} + diff --git a/apps/openmw/mwrender/objects.hpp b/apps/openmw/mwrender/objects.hpp index 265de875be..5911aa4ccf 100644 --- a/apps/openmw/mwrender/objects.hpp +++ b/apps/openmw/mwrender/objects.hpp @@ -16,6 +16,7 @@ class Objects{ std::map mStaticGeometry; std::map mStaticGeometrySmall; std::map mBounds; + std::vector mLights; Ogre::SceneNode* mMwRoot; bool mIsStatic; static int uniqueID; @@ -44,6 +45,9 @@ public: void insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh); void insertLight (const MWWorld::Ptr& ptr, float r, float g, float b, float radius); + void enableLights(); + void disableLights(); + Ogre::AxisAlignedBox getDimensions(MWWorld::Ptr::CellStore*); ///< get a bounding box that encloses all objects in the specified cell diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 18675203c7..92e6d9edd7 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -64,7 +64,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mSun = 0; mDebugging = new Debugging(mMwRoot, environment, engine); - mLocalMap = new MWRender::LocalMap(&mRendering, &environment); + mLocalMap = new MWRender::LocalMap(&mRendering, this, &environment); } RenderingManager::~RenderingManager () @@ -411,4 +411,14 @@ void RenderingManager::preCellChange(MWWorld::Ptr::CellStore* cell) mLocalMap->saveFogOfWar(cell); } +void RenderingManager::disableLights() +{ + mObjects.disableLights(); +} + +void RenderingManager::enableLights() +{ + mObjects.enableLights(); +} + } // namespace diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 81907a9382..ff9cd168ec 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -109,6 +109,9 @@ class RenderingManager: private RenderingInterface { void sunEnable(); void sunDisable(); + void disableLights(); + void enableLights(); + bool occlusionQuerySupported() { return mOcclusionQuery->supported(); }; OcclusionQuery* getOcclusionQuery() { return mOcclusionQuery; }; From d4a2bdfa3d33263481a82b0a3e28b98613bd5c30 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 2 Apr 2012 20:46:42 +0200 Subject: [PATCH 335/488] fix crash when hardware occlusion queries unsupporetd --- apps/openmw/mwrender/sky.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 2fdf9b2cd6..781f7abd5d 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -746,6 +746,7 @@ void SkyManager::setGlare(const float glare) Vector3 SkyManager::getRealSunPos() { + if (!mCreated) return Vector3(0,0,0); return mSun->getNode()->_getDerivedPosition(); } From ab9c4306328446807bde837a0befbe45ed3c1381 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Mon, 2 Apr 2012 20:47:09 +0200 Subject: [PATCH 336/488] fallback in apps/openmw; fix for apps/mwiniimporter --- apps/mwiniimporter/importer.cpp | 4 ++-- apps/mwiniimporter/main.cpp | 2 ++ apps/openmw/engine.cpp | 7 ++++++- apps/openmw/engine.hpp | 3 +++ apps/openmw/main.cpp | 25 ++++++++++++++---------- apps/openmw/mwworld/world.cpp | 34 ++++++++++++++++++++++++++++++++- apps/openmw/mwworld/world.hpp | 7 ++++++- 7 files changed, 67 insertions(+), 15 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 80ec4a5fd7..e8fafab44b 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -141,8 +141,8 @@ void MwIniImporter::mergeFallback(multistrmap &cfg, multistrmap &ini) { for(strmap::iterator it=mMergeFallback.begin(); it!=mMergeFallback.end(); it++) { if((iniIt = ini.find(it->second)) != ini.end()) { for(std::vector::iterator vc = iniIt->second.begin(); vc != iniIt->second.end(); vc++) { - std::string value("\""); - value.append(it->first).append("=").append(vc->substr(0,vc->length()-1)).append("\""); + std::string value(it->first); + value.append("=").append(vc->substr(0,vc->length()-1)); insertMultistrmap(cfg, "fallback", value); } } diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index c5409b8121..dc9bbcd0ae 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -28,6 +28,8 @@ int main(int argc, char *argv[]) { return 0; } + bpo::notify(vm); + std::string iniFile = vm["ini"].as(); std::string cfgFile = vm["cfg"].as(); diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 2dab53ecc8..c6684593e2 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -341,7 +341,7 @@ void OMW::Engine::go() // Create the world mEnvironment.mWorld = new MWWorld::World (*mOgre, mFileCollections, mMaster, - mResDir, mNewGame, mEnvironment, mEncoding); + mResDir, mNewGame, mEnvironment, mEncoding, mFallbackPairs); // Create window manager - this manages all the MW-specific GUI windows MWScript::registerExtensions (mExtensions); @@ -508,3 +508,8 @@ void OMW::Engine::setEncoding(const std::string& encoding) { mEncoding = encoding; } + +void OMW::Engine::setFallbackValues(std::vector pairs) +{ + mFallbackPairs = pairs; +} diff --git a/apps/openmw/engine.hpp b/apps/openmw/engine.hpp index 690430784b..f1df98f4cf 100644 --- a/apps/openmw/engine.hpp +++ b/apps/openmw/engine.hpp @@ -76,6 +76,7 @@ namespace OMW bool mReportFocus; float mFocusTDiff; std::string mFocusName; + std::vector mFallbackPairs; MWWorld::Environment mEnvironment; Compiler::Extensions mExtensions; @@ -163,6 +164,8 @@ namespace OMW void setAnimationVerbose(bool animverbose); + void setFallbackValues(std::vector pairs); + private: Files::ConfigurationManager& mCfgMgr; }; diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index cd1e0e26e4..0dc5343775 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -92,39 +92,43 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat ("plugin", bpo::value()->default_value(StringsVector(), "") ->multitoken(), "plugin file(s)") - ("fps", boost::program_options::value()->implicit_value(1) + ("fps", bpo::value()->implicit_value(1) ->default_value(0), "fps counter detail (0 = off, 1 = fps counter, 2 = full detail)") - ("anim-verbose", boost::program_options::value()->implicit_value(true) + ("anim-verbose", bpo::value()->implicit_value(true) ->default_value(false), "output animation indices files") - ("debug", boost::program_options::value()->implicit_value(true) + ("debug", bpo::value()->implicit_value(true) ->default_value(false), "debug mode") - ("nosound", boost::program_options::value()->implicit_value(true) + ("nosound", bpo::value()->implicit_value(true) ->default_value(false), "disable all sounds") - ("script-verbose", boost::program_options::value()->implicit_value(true) + ("script-verbose", bpo::value()->implicit_value(true) ->default_value(false), "verbose script output") - ("new-game", boost::program_options::value()->implicit_value(true) + ("new-game", bpo::value()->implicit_value(true) ->default_value(false), "activate char gen/new game mechanics") - ("script-all", boost::program_options::value()->implicit_value(true) + ("script-all", bpo::value()->implicit_value(true) ->default_value(false), "compile all scripts (excluding dialogue scripts) at startup") - ("fs-strict", boost::program_options::value()->implicit_value(true) + ("fs-strict", bpo::value()->implicit_value(true) ->default_value(false), "strict file system handling (no case folding)") - ( "encoding", boost::program_options::value()-> + ( "encoding", bpo::value()-> default_value("win1252"), "Character encoding used in OpenMW game messages:\n" "\n\twin1250 - Central and Eastern European such as Polish, Czech, Slovak, Hungarian, Slovene, Bosnian, Croatian, Serbian (Latin script), Romanian and Albanian languages\n" "\n\twin1251 - Cyrillic alphabet such as Russian, Bulgarian, Serbian Cyrillic and other languages\n" "\n\twin1252 - Western European (Latin) alphabet, used by default") - ("report-focus", boost::program_options::value()->implicit_value(true) + ("report-focus", bpo::value()->implicit_value(true) ->default_value(false), "write name of focussed object to cout") + + ("fallback", bpo::value()->default_value(StringsVector(), "") + ->multitoken()->composing(), "fallback values") + ; bpo::parsed_options valid_opts = bpo::command_line_parser(argc, argv) @@ -232,6 +236,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setCompileAll(variables["script-all"].as()); engine.setReportFocus(variables["report-focus"].as()); engine.setAnimationVerbose(variables["anim-verbose"].as()); + engine.setFallbackValues(variables["fallback"].as >()); return true; } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 3a15f42bae..093c3fef0e 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -152,10 +152,40 @@ namespace MWWorld mRendering->skyDisable(); } + void World::setFallbackValues(std::vector pairs) + { + for(std::vector::iterator it = pairs.begin(); it != pairs.end(); it++) + { + std::string kv = *it; + int seperator = kv.find("="); + if(seperator < 1 || seperator == (kv.length()-1)) + { + continue; + } + + std::string key = it->substr(0,seperator); + std::string value = it->substr(seperator+1); + if(mFallback.find(key) == mFallback.end()) { + std::cout << "insert " << key << ":" << value << std::endl; + mFallback.insert(std::make_pair(key,value)); + } + } + } + + std::string World::getFallback(std::string key) + { + std::map::iterator it; + if((it = mFallback.find(key)) == mFallback.end()) + { + return std::string(""); + } + return it->second; + } + World::World (OEngine::Render::OgreRenderer& renderer, const Files::Collections& fileCollections, const std::string& master, const boost::filesystem::path& resDir, - bool newGame, Environment& environment, const std::string& encoding) + bool newGame, Environment& environment, const std::string& encoding, std::vector fallbackPairs) : mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), mSky (true), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this), mNumFacing(0) @@ -190,6 +220,8 @@ namespace MWWorld } mWorldScene = new Scene(environment, this, *mRendering, mPhysics); + + setFallbackValues(fallbackPairs); } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 0d46fe4e81..d6b4221410 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -100,6 +100,7 @@ namespace MWWorld std::string mFaced1Name; std::string mFaced2Name; int mNumFacing; + std::map mFallback; int getDaysPerMonth (int month) const; @@ -110,7 +111,7 @@ namespace MWWorld World (OEngine::Render::OgreRenderer& renderer, const Files::Collections& fileCollections, const std::string& master, const boost::filesystem::path& resDir, bool newGame, - Environment& environment, const std::string& encoding); + Environment& environment, const std::string& encoding, std::vector fallbackPairs); ~World(); @@ -125,6 +126,10 @@ namespace MWWorld void adjustSky(); + void setFallbackValues(std::vector pairs); + + std::string getFallback(std::string key); + MWWorld::Player& getPlayer(); const ESMS::ESMStore& getStore() const; From 0e5c90d3e783cd471197637ae281494de4dd0b08 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Mon, 2 Apr 2012 23:50:53 +0200 Subject: [PATCH 337/488] Issue #225: Correction to commit ae98904. Changed pointer to LandData struct to simple member variable. --- apps/openmw/mwrender/terrain.cpp | 25 +++++++------------- components/esm/loadland.cpp | 40 +++++++++----------------------- components/esm/loadland.hpp | 8 +------ 3 files changed, 20 insertions(+), 53 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 0b8f933a27..f1920490d5 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -98,10 +98,7 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - if (!land->dataLoaded) - { - land->loadData(); - } + land->loadData(); } //split the cell terrain into four segments @@ -136,7 +133,7 @@ namespace MWRender const size_t xOffset = x * (mLandSize-1); memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], - &land->landData->heights[yOffset + xOffset], + &land->landData.heights[yOffset + xOffset], mLandSize*sizeof(float)); } } @@ -163,7 +160,7 @@ namespace MWRender numTextures, indexes); - if ( land && land->landData->usingColours ) + if ( land && land->landData.usingColours ) { // disable or enable global colour map (depends on available vertex colours) mActiveProfile->setGlobalColourMapEnabled(true); @@ -423,18 +420,12 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - if (!land->dataLoaded) - { - land->loadData(); - } + land->loadData(); - return land->landData - ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; - } - else - { - return 0; + return land->landData.textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; } + + return 0; } //---------------------------------------------------------------------------------------------- @@ -473,7 +464,7 @@ namespace MWRender if ( land != NULL ) { - const char* const colours = land->landData->colours; + const char* const colours = land->landData.colours; for ( int y = 0; y < size; y++ ) { for ( int x = 0; x < size; x++ ) diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index 96afdf8316..c6dc3c6f20 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -10,16 +10,10 @@ Land::Land() , mEsm(NULL) , hasData(false) , dataLoaded(false) - , landData(NULL) { + memset(&landData, 0, sizeof(landData)); } -Land::~Land() -{ - delete landData; -} - - void Land::load(ESMReader &esm) { mEsm = &esm; @@ -68,7 +62,6 @@ void Land::load(ESMReader &esm) hasData = (cnt == 3); dataLoaded = false; - landData = NULL; } void Land::loadData() @@ -78,8 +71,6 @@ void Land::loadData() return; } - landData = new LandData; - if (hasData) { mEsm->restoreContext(context); @@ -91,19 +82,20 @@ void Land::loadData() } VHGT rawHeights; + memset(&rawHeights, 0, sizeof(rawHeights)); mEsm->getHNExact(&rawHeights, sizeof(VHGT), "VHGT"); int currentHeightOffset = rawHeights.heightOffset; for (int y = 0; y < LAND_SIZE; y++) { currentHeightOffset += rawHeights.heightData[y * LAND_SIZE]; - landData->heights[y * LAND_SIZE] = currentHeightOffset * HEIGHT_SCALE; + landData.heights[y * LAND_SIZE] = currentHeightOffset * HEIGHT_SCALE; int tempOffset = currentHeightOffset; for (int x = 1; x < LAND_SIZE; x++) { tempOffset += rawHeights.heightData[y * LAND_SIZE + x]; - landData->heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; + landData.heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; } } @@ -113,10 +105,10 @@ void Land::loadData() } if (mEsm->isNextSub("VCLR")) { - landData->usingColours = true; - mEsm->getHExact(&landData->colours, 3*LAND_NUM_VERTS); + landData.usingColours = true; + mEsm->getHExact(&landData.colours, 3*LAND_NUM_VERTS); }else{ - landData->usingColours = false; + landData.usingColours = false; } //TODO fix magic numbers uint16_t vtex[512]; @@ -127,29 +119,19 @@ void Land::loadData() for ( int x1 = 0; x1 < 4; x1++ ) for ( int y2 = 0; y2 < 4; y2++) for ( int x2 = 0; x2 < 4; x2++ ) - landData->textures[(y1*4+y2)*16+(x1*4+x2)] = vtex[readPos++]; + landData.textures[(y1*4+y2)*16+(x1*4+x2)] = vtex[readPos++]; } else { - landData->usingColours = false; - memset(&landData->textures, 0, 512 * sizeof(uint16_t)); + landData.usingColours = false; + memset(landData.textures, 0, sizeof(landData.textures)); for (int i = 0; i < LAND_NUM_VERTS; i++) { - landData->heights[i] = -256.0f * HEIGHT_SCALE; + landData.heights[i] = -256.0f * HEIGHT_SCALE; } } dataLoaded = true; } -void Land::unloadData() -{ - if (dataLoaded) - { - delete landData; - landData = NULL; - dataLoaded = false; - } -} - } diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 64baecd349..86f37d5755 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -12,7 +12,6 @@ namespace ESM struct Land { Land(); - ~Land(); int flags; // Only first four bits seem to be used, don't know what // they mean. @@ -67,7 +66,7 @@ struct Land char colours[3 * LAND_NUM_VERTS]; }; - LandData *landData; + LandData landData; void load(ESMReader &esm); @@ -75,11 +74,6 @@ struct Land * Actually loads data */ void loadData(); - - /** - * Frees memory allocated for land data - */ - void unloadData(); }; } #endif From 2d23d79fd5d7dc954c1228a5a8197ad46692a311 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 3 Apr 2012 00:44:26 +0200 Subject: [PATCH 338/488] allways merge fallback; better syntax --- apps/mwiniimporter/importer.cpp | 20 ++++++++++---------- apps/mwiniimporter/importer.hpp | 2 +- apps/mwiniimporter/main.cpp | 6 +----- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index e8fafab44b..60f2c620d4 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -14,18 +14,16 @@ MwIniImporter::MwIniImporter() { { "fps", "General:Show FPS" }, { 0, 0 } }; - const char *fallback[][2] = { - { "Weather_Sunrise_Time", "Weather:Sunrise Time" }, - { "Weather_Sunset_Time", "Weather:Sunset Time" }, - { 0, 0 } + const char *fallback[] = { + "Weather:Sunrise Time", "Weather_Sunset_Time", 0 }; for(int i=0; map[i][0]; i++) { mMergeMap.insert(std::make_pair(map[i][0], map[i][1])); } - for(int i=0; fallback[i][0]; i++) { - mMergeFallback.insert(std::make_pair(fallback[i][0], fallback[i][1])); + for(int i=0; fallback[i]; i++) { + mMergeFallback.push_back(fallback[i]); } } @@ -138,11 +136,13 @@ void MwIniImporter::mergeFallback(multistrmap &cfg, multistrmap &ini) { multistrmap::iterator cfgIt; multistrmap::iterator iniIt; - for(strmap::iterator it=mMergeFallback.begin(); it!=mMergeFallback.end(); it++) { - if((iniIt = ini.find(it->second)) != ini.end()) { + for(std::vector::iterator it=mMergeFallback.begin(); it!=mMergeFallback.end(); it++) { + if((iniIt = ini.find(*it)) != ini.end()) { for(std::vector::iterator vc = iniIt->second.begin(); vc != iniIt->second.end(); vc++) { - std::string value(it->first); - value.append("=").append(vc->substr(0,vc->length()-1)); + std::string value(*it); + std::replace( value.begin(), value.end(), ' ', '_' ); + std::replace( value.begin(), value.end(), ':', '_' ); + value.append(",").append(vc->substr(0,vc->length()-1)); insertMultistrmap(cfg, "fallback", value); } } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 9ef7b67037..ced332a72d 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -27,7 +27,7 @@ class MwIniImporter { std::string numberToString(int n); bool mVerbose; strmap mMergeMap; - strmap mMergeFallback; + std::vector mMergeFallback; }; diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index dc9bbcd0ae..051e7db2b8 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -16,7 +16,6 @@ int main(int argc, char *argv[]) { ("ini,i", bpo::value(), "morrowind.ini file") ("cfg,c", bpo::value(), "openmw.cfg file") ("output,o", bpo::value()->default_value(""), "openmw.cfg file") - ("fallback,f", "import fallback settings") ("game-files,g", "import esm and esp files") ; @@ -55,10 +54,7 @@ int main(int argc, char *argv[]) { MwIniImporter::multistrmap cfg = importer.loadCfgFile(cfgFile); importer.merge(cfg, ini); - - if(vm.count("fallback")) { - importer.mergeFallback(cfg, ini); - } + importer.mergeFallback(cfg, ini); if(vm.count("game-files")) { importer.importGameFiles(cfg, ini); From d87dffa948af48002863efd1a92837ba88574068 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 3 Apr 2012 01:47:43 +0200 Subject: [PATCH 339/488] should work... but does not even compile --- apps/openmw/main.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 0dc5343775..e1ddb03e72 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -54,6 +54,35 @@ inline boost::filesystem::path lexical_cast mMap; + + static void + validate(boost::any &v, std::vector const &tokens) + { + if(v.empty()) + { + v = boost::any(FallbackMap()); + } + + FallbackMap *map = boost::any_cast(&v); + + std::map::iterator mapIt; + for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) + { + int sep = it->find(","); + std::string key(it->substr(0,sep-1)); + std::string value(it->substr(sep)); + + if((mapIt = map->mMap.find(key)) == map->mMap.end()) + { + map->mMap.insert(std::make_pair(key,value)); + } + } + } +}; + + /** * \brief Parses application command line and calls \ref Cfg::ConfigurationManager * to parse configuration files. @@ -126,7 +155,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat ("report-focus", bpo::value()->implicit_value(true) ->default_value(false), "write name of focussed object to cout") - ("fallback", bpo::value()->default_value(StringsVector(), "") + ("fallback", bpo::value() ->multitoken()->composing(), "fallback values") ; @@ -236,7 +265,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setCompileAll(variables["script-all"].as()); engine.setReportFocus(variables["report-focus"].as()); engine.setAnimationVerbose(variables["anim-verbose"].as()); - engine.setFallbackValues(variables["fallback"].as >()); + //engine.setFallbackValues(variables["fallback"].as >()); return true; } From 73705dadf6036323bbbe79e2da0dbe7c52f7991d Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 3 Apr 2012 02:14:39 +0200 Subject: [PATCH 340/488] parse fallback with boost program option custom validators --- apps/openmw/engine.cpp | 6 ++-- apps/openmw/engine.hpp | 4 +-- apps/openmw/main.cpp | 52 ++++++++++++++++++----------------- apps/openmw/mwworld/world.cpp | 24 ++++------------ apps/openmw/mwworld/world.hpp | 4 +-- 5 files changed, 39 insertions(+), 51 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index c6684593e2..dae5aaff15 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -341,7 +341,7 @@ void OMW::Engine::go() // Create the world mEnvironment.mWorld = new MWWorld::World (*mOgre, mFileCollections, mMaster, - mResDir, mNewGame, mEnvironment, mEncoding, mFallbackPairs); + mResDir, mNewGame, mEnvironment, mEncoding, mFallbackMap); // Create window manager - this manages all the MW-specific GUI windows MWScript::registerExtensions (mExtensions); @@ -509,7 +509,7 @@ void OMW::Engine::setEncoding(const std::string& encoding) mEncoding = encoding; } -void OMW::Engine::setFallbackValues(std::vector pairs) +void OMW::Engine::setFallbackValues(std::map fallbackMap) { - mFallbackPairs = pairs; + mFallbackMap = fallbackMap; } diff --git a/apps/openmw/engine.hpp b/apps/openmw/engine.hpp index f1df98f4cf..6eae20cc0f 100644 --- a/apps/openmw/engine.hpp +++ b/apps/openmw/engine.hpp @@ -76,7 +76,7 @@ namespace OMW bool mReportFocus; float mFocusTDiff; std::string mFocusName; - std::vector mFallbackPairs; + std::map mFallbackMap; MWWorld::Environment mEnvironment; Compiler::Extensions mExtensions; @@ -164,7 +164,7 @@ namespace OMW void setAnimationVerbose(bool animverbose); - void setFallbackValues(std::vector pairs); + void setFallbackValues(std::map map); private: Files::ConfigurationManager& mCfgMgr; diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index e1ddb03e72..b541ea0d36 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -56,32 +56,34 @@ using namespace std; struct FallbackMap { std::map mMap; - - static void - validate(boost::any &v, std::vector const &tokens) - { - if(v.empty()) - { - v = boost::any(FallbackMap()); - } - - FallbackMap *map = boost::any_cast(&v); - - std::map::iterator mapIt; - for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) - { - int sep = it->find(","); - std::string key(it->substr(0,sep-1)); - std::string value(it->substr(sep)); - - if((mapIt = map->mMap.find(key)) == map->mMap.end()) - { - map->mMap.insert(std::make_pair(key,value)); - } - } - } }; +void validate(boost::any &v, std::vector const &tokens, FallbackMap*, int) +{ + if(v.empty()) + { + v = boost::any(FallbackMap()); + } + + FallbackMap *map = boost::any_cast(&v); + + std::map::iterator mapIt; + for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) + { + int sep = it->find(","); + if(sep < 1) + continue; + + std::string key(it->substr(0,sep)); + std::string value(it->substr(sep+1)); + + if((mapIt = map->mMap.find(key)) == map->mMap.end()) + { + map->mMap.insert(std::make_pair(key,value)); + } + } +} + /** * \brief Parses application command line and calls \ref Cfg::ConfigurationManager @@ -265,7 +267,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setCompileAll(variables["script-all"].as()); engine.setReportFocus(variables["report-focus"].as()); engine.setAnimationVerbose(variables["anim-verbose"].as()); - //engine.setFallbackValues(variables["fallback"].as >()); + engine.setFallbackValues(variables["fallback"].as().mMap); return true; } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 093c3fef0e..596adcf6b0 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -152,24 +152,9 @@ namespace MWWorld mRendering->skyDisable(); } - void World::setFallbackValues(std::vector pairs) + void World::setFallbackValues(std::map fallbackMap) { - for(std::vector::iterator it = pairs.begin(); it != pairs.end(); it++) - { - std::string kv = *it; - int seperator = kv.find("="); - if(seperator < 1 || seperator == (kv.length()-1)) - { - continue; - } - - std::string key = it->substr(0,seperator); - std::string value = it->substr(seperator+1); - if(mFallback.find(key) == mFallback.end()) { - std::cout << "insert " << key << ":" << value << std::endl; - mFallback.insert(std::make_pair(key,value)); - } - } + mFallback = fallbackMap; } std::string World::getFallback(std::string key) @@ -185,7 +170,7 @@ namespace MWWorld World::World (OEngine::Render::OgreRenderer& renderer, const Files::Collections& fileCollections, const std::string& master, const boost::filesystem::path& resDir, - bool newGame, Environment& environment, const std::string& encoding, std::vector fallbackPairs) + bool newGame, Environment& environment, const std::string& encoding, std::map fallbackMap) : mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), mSky (true), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this), mNumFacing(0) @@ -221,7 +206,8 @@ namespace MWWorld mWorldScene = new Scene(environment, this, *mRendering, mPhysics); - setFallbackValues(fallbackPairs); + setFallbackValues(fallbackMap); + std::cout << "Weather_Sunrise_Time=" << getFallback("Weather_Sunrise_Time") << std::endl; } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index d6b4221410..7f18762f56 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -111,7 +111,7 @@ namespace MWWorld World (OEngine::Render::OgreRenderer& renderer, const Files::Collections& fileCollections, const std::string& master, const boost::filesystem::path& resDir, bool newGame, - Environment& environment, const std::string& encoding, std::vector fallbackPairs); + Environment& environment, const std::string& encoding, std::map fallbackMap); ~World(); @@ -126,7 +126,7 @@ namespace MWWorld void adjustSky(); - void setFallbackValues(std::vector pairs); + void setFallbackValues(std::map fallbackMap); std::string getFallback(std::string key); From 329d59e52bc7256bb30fa24bd8a0ab01e36d189c Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 3 Apr 2012 02:17:15 +0200 Subject: [PATCH 341/488] typo --- apps/mwiniimporter/importer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 60f2c620d4..f1cec04795 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -15,7 +15,9 @@ MwIniImporter::MwIniImporter() { { 0, 0 } }; const char *fallback[] = { - "Weather:Sunrise Time", "Weather_Sunset_Time", 0 + "Weather:Sunrise Time", + "Weather:Sunset Time", + 0 }; for(int i=0; map[i][0]; i++) { From fd45208196f824bf3536b24d25d8386e7cba302d Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 14:23:23 +0200 Subject: [PATCH 342/488] re-added code for reflection & refraction rendering --- apps/openmw/mwrender/water.cpp | 68 +++++++++++++++++++++++++++++----- apps/openmw/mwrender/water.hpp | 9 ++++- files/settings-default.cfg | 8 ++++ 3 files changed, 74 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index cbf9c5b29b..c19a487abc 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,4 +1,7 @@ #include "water.hpp" +#include + +using namespace Ogre; namespace MWRender { @@ -9,17 +12,17 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : { try { - Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); + CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) {} mTop = cell->water; mIsUnderwater = false; - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); + mWaterPlane = Plane(Vector3::UNIT_Y, 0); - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + MeshManager::getSingleton().createPlane("water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); @@ -33,18 +36,41 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); } mWaterNode->attachObject(mWater); + + // Create rendertargets for reflection and refraction + int rttsize = Settings::Manager::getInt("rtt size", "Water"); + for (unsigned int i = 0; i < 2; ++i) + { + if (i==0 && !Settings::Manager::getBool("reflection", "Water")) continue; + if (i==1 && !Settings::Manager::getBool("refraction", "Water")) continue; + + TexturePtr tex = TextureManager::getSingleton().createManual(i == 0 ? "WaterReflection" : "WaterRefraction", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); + + RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); + Viewport* vp = rtt->addViewport(mCamera); + vp->setOverlaysEnabled(false); + vp->setBackgroundColour(ColourValue(0.8f, 0.9f, 1.0f)); + vp->setShadowsEnabled(false); + //vp->setVisibilityMask( ... ); + rtt->addListener(this); + rtt->setActive(true); + + if (i == 0) mReflectionTarget = rtt; + else mRefractionTarget = rtt; + } } Water::~Water() { - Ogre::MeshManager::getSingleton().remove("water"); + MeshManager::getSingleton().remove("water"); mWaterNode->detachObject(mWater); mSceneManager->destroyEntity(mWater); mSceneManager->destroySceneNode(mWaterNode); - Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); + CompositorManager::getSingleton().removeCompositorChain(mViewport); } void Water::changeCell(const ESM::Cell* cell) @@ -73,7 +99,7 @@ void Water::checkUnderwater(float y) if ((mIsUnderwater && y > mTop) || !mWater->isVisible() || mCamera->getPolygonMode() != Ogre::PM_SOLID) { try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) {} mIsUnderwater = false; } @@ -81,15 +107,37 @@ void Water::checkUnderwater(float y) if (!mIsUnderwater && y < mTop && mWater->isVisible() && mCamera->getPolygonMode() == Ogre::PM_SOLID) { try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); + CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); } catch(...) {} mIsUnderwater = true; } } -Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) +Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) { - return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); + return Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); +} + +void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) +{ + mWater->setVisible(false); + + if (evt.source == mReflectionTarget) + { + mCamera->enableCustomNearClipPlane(mWaterPlane); + mCamera->enableReflection(Plane(Vector3::UNIT_Y, mWaterNode->_getDerivedPosition().y)); + } +} + +void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) +{ + mWater->setVisible(true); + + if (evt.source == mReflectionTarget) + { + mCamera->disableReflection(); + mCamera->disableCustomNearClipPlane(); + } } } // namespace diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 5a5d1cca09..6f3c4a6c39 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -7,7 +7,7 @@ namespace MWRender { /// Water rendering - class Water : Ogre::RenderTargetListener, Ogre::Camera::Listener + class Water : Ogre::RenderTargetListener { static const int CELL_SIZE = 8192; Ogre::Camera *mCamera; @@ -23,6 +23,13 @@ namespace MWRender { Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); + protected: + void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); + void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); + + Ogre::RenderTarget* mReflectionTarget; + Ogre::RenderTarget* mRefractionTarget; + public: Water (Ogre::Camera *camera, const ESM::Cell* cell); ~Water(); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 6372a31c1d..ec105c8f37 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -41,3 +41,11 @@ fog end factor = 1.0 # Max. number of lights that affect the terrain. Setting to 1 will only reflect sunlight num lights = 8 + +[Water] + +reflection = false + +refraction = false + +rtt size = 256 From 8aea311797d2a441a4d3156e2b53a42c03e6fc68 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 15:13:47 +0200 Subject: [PATCH 343/488] added visibility flags for everything --- apps/openmw/mwrender/creatureanimation.cpp | 2 + apps/openmw/mwrender/localmap.cpp | 3 +- apps/openmw/mwrender/npcanimation.cpp | 2 + apps/openmw/mwrender/objects.cpp | 6 ++- apps/openmw/mwrender/renderconst.hpp | 44 ++++++++++++++++++++++ apps/openmw/mwrender/renderingmanager.cpp | 6 +-- apps/openmw/mwrender/sky.cpp | 6 ++- apps/openmw/mwrender/terrain.cpp | 2 + apps/openmw/mwrender/water.cpp | 33 +++++++++++++--- apps/openmw/mwrender/water.hpp | 9 +++++ files/settings-default.cfg | 13 +++++++ 11 files changed, 114 insertions(+), 12 deletions(-) create mode 100644 apps/openmw/mwrender/renderconst.hpp diff --git a/apps/openmw/mwrender/creatureanimation.cpp b/apps/openmw/mwrender/creatureanimation.cpp index 4de6453aa6..4c2ce8399a 100644 --- a/apps/openmw/mwrender/creatureanimation.cpp +++ b/apps/openmw/mwrender/creatureanimation.cpp @@ -1,4 +1,5 @@ #include "creatureanimation.hpp" +#include "renderconst.hpp" #include "../mwworld/world.hpp" @@ -20,6 +21,7 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, MWWorld::Environme std::string meshNumbered = mesh + getUniqueID(mesh) + ">|"; NifOgre::NIFLoader::load(meshNumbered); base = mRend.getScene()->createEntity(meshNumbered); + base->setVisibilityFlags(RV_Actors); std::string meshZero = mesh + "0000>|"; if((transformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero))){ diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index e88557f204..cf9cfab4c2 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -4,6 +4,7 @@ #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" #include "../mwgui/window_manager.hpp" +#include "renderconst.hpp" #include #include @@ -211,7 +212,7 @@ void LocalMap::render(const float x, const float y, vp->setOverlaysEnabled(false); vp->setShadowsEnabled(false); vp->setBackgroundColour(ColourValue(0, 0, 0)); - //vp->setVisibilityMask( ... ); + vp->setVisibilityMask(RV_Map); rtt->update(); diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index c6fe023d69..3a4d9300d7 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -1,5 +1,6 @@ #include "npcanimation.hpp" #include "../mwworld/world.hpp" +#include "renderconst.hpp" using namespace Ogre; @@ -65,6 +66,7 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,O NifOgre::NIFLoader::load(smodel); base = mRend.getScene()->createEntity(smodel); + base->setVisibilityFlags(RV_Actors); base->setSkipAnimationStateUpdate(true); //Magical line of code, this makes the bones //stay in the same place when we skipanim, or open a gui window diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 39ab0b0897..bd39e1f5a5 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -4,6 +4,7 @@ #include #include +#include "renderconst.hpp" using namespace MWRender; @@ -116,7 +117,8 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) { insert->attachObject(ent); - ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Viewing distance") : 0); /// \todo config value + ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Viewing distance") : 0); + ent->setVisibilityFlags(mIsStatic ? (small ? RV_StaticsSmall : RV_Statics) : RV_Misc); } else { @@ -158,6 +160,8 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg->addEntity(ent,insert->_getDerivedPosition(),insert->_getDerivedOrientation(),insert->_getDerivedScale()); + sg->setVisibilityFlags(small ? RV_StaticsSmall : RV_Statics); + mRenderer.getScene()->destroyEntity(ent); } } diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp new file mode 100644 index 0000000000..5e1c6c7bb1 --- /dev/null +++ b/apps/openmw/mwrender/renderconst.hpp @@ -0,0 +1,44 @@ +#ifndef GAME_RENDER_CONST_H +#define GAME_RENDER_CONST_H + +#include + +namespace MWRender +{ + +// Render queue groups +/// \todo + +// Visibility flags +enum VisibilityFlags +{ + // Terrain + RV_Terrain = 1, + + // Statics (e.g. trees, houses) + RV_Statics = 2, + + // Small statics + RV_StaticsSmall = 4, + + // Water + RV_Water = 8, + + // Actors (player, npcs, creatures) + RV_Actors = 16, + + // Misc objects (containers, dynamic objects) + RV_Misc = 32, + + RV_Sky = 64, + + RV_Map = RV_Terrain + RV_Statics + RV_StaticsSmall + RV_Misc + RV_Water, + + /// \todo markers (normally hidden) + + RV_All = 255 +}; + +} + +#endif diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 5dc41dc4b2..608ae441ba 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -112,8 +112,7 @@ void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store) void RenderingManager::removeWater () { if(mWater){ - delete mWater; - mWater = 0; + mWater->setActive(false); } } @@ -188,8 +187,7 @@ void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){ mWater = new MWRender::Water(mRendering.getCamera(), store->cell); else mWater->changeCell(store->cell); - //else - + mWater->setActive(true); } else removeWater(); diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 781f7abd5d..8e774eb084 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -12,7 +12,7 @@ #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" -#include "occlusionquery.hpp" +#include "renderconst.hpp" using namespace MWRender; using namespace Ogre; @@ -92,6 +92,7 @@ void BillboardObject::init(const String& textureName, mBBSet->setRenderQueueGroup(RENDER_QUEUE_MAIN+2); mBBSet->setBillboardType(BBT_PERPENDICULAR_COMMON); mBBSet->setCommonDirection( -position.normalisedCopy() ); + mBBSet->setVisibilityFlags(RV_Sky); mNode = rootNode->createChildSceneNode(); mNode->setPosition(finalPosition); mNode->attachObject(mBBSet); @@ -376,6 +377,7 @@ void SkyManager::create() MeshPtr mesh = NifOgre::NIFLoader::load("meshes\\sky_night_01.nif"); Entity* night1_ent = mSceneMgr->createEntity("meshes\\sky_night_01.nif"); night1_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY+1); + night1_ent->setVisibilityFlags(RV_Sky); mAtmosphereNight = mRootNode->createChildSceneNode(); mAtmosphereNight->attachObject(night1_ent); @@ -449,6 +451,7 @@ void SkyManager::create() ModVertexAlpha(atmosphere_ent, 0); atmosphere_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY); + atmosphere_ent->setVisibilityFlags(RV_Sky); mAtmosphereDay = mRootNode->createChildSceneNode(); mAtmosphereDay->attachObject(atmosphere_ent); mAtmosphereMaterial = atmosphere_ent->getSubEntity(0)->getMaterial(); @@ -485,6 +488,7 @@ void SkyManager::create() // Clouds NifOgre::NIFLoader::load("meshes\\sky_clouds_01.nif"); Entity* clouds_ent = mSceneMgr->createEntity("meshes\\sky_clouds_01.nif"); + clouds_ent->setVisibilityFlags(RV_Sky); clouds_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY+5); SceneNode* clouds_node = mRootNode->createChildSceneNode(); clouds_node->attachObject(clouds_ent); diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 8877215653..6c11f74859 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -6,6 +6,7 @@ #include "terrainmaterial.hpp" #include "terrain.hpp" +#include "renderconst.hpp" using namespace Ogre; @@ -159,6 +160,7 @@ namespace MWRender x * numTextures, y * numTextures, numTextures, indexes); + terrain->setVisibilityFlags(RV_Terrain); if ( land && land->landData->usingColours ) { diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index c19a487abc..0ef914210b 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -8,7 +8,8 @@ namespace MWRender Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), - mIsUnderwater(false) + mIsUnderwater(false), mReflectDistance(0), mVisibilityFlags(0), mOldCameraFarClip(0), + mReflectionTarget(0), mRefractionTarget(0), mActive(1) { try { @@ -25,9 +26,16 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : MeshManager::getSingleton().createPlane("water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); - + mWater->setVisibilityFlags(RV_Water); mWater->setMaterialName("Examples/Water0"); + mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") + + RV_StaticsSmall * Settings::Manager::getBool("reflect small statics", "Water") + + RV_Actors * Settings::Manager::getBool("reflect actors", "Water") + + RV_Misc * Settings::Manager::getBool("reflect misc", "Water"); + mReflectDistance = Settings::Manager::getInt("reflect distance", "Water"); + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode->setPosition(0, mTop, 0); @@ -43,7 +51,7 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : { if (i==0 && !Settings::Manager::getBool("reflection", "Water")) continue; if (i==1 && !Settings::Manager::getBool("refraction", "Water")) continue; - + TexturePtr tex = TextureManager::getSingleton().createManual(i == 0 ? "WaterReflection" : "WaterRefraction", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); @@ -52,7 +60,7 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : vp->setOverlaysEnabled(false); vp->setBackgroundColour(ColourValue(0.8f, 0.9f, 1.0f)); vp->setShadowsEnabled(false); - //vp->setVisibilityMask( ... ); + vp->setVisibilityMask( (i == 0) ? mVisibilityFlags : RV_All); rtt->addListener(this); rtt->setActive(true); @@ -61,6 +69,13 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : } } +void Water::setActive(bool active) +{ + mActive = active; + if (mReflectionTarget) mReflectionTarget->setActive(active); + if (mRefractionTarget) mRefractionTarget->setActive(active); + mWater->setVisible(active); +} Water::~Water() { @@ -91,11 +106,13 @@ void Water::setHeight(const float height) void Water::toggle() { - mWater->setVisible(!mWater->getVisible()); + if (mActive) + mWater->setVisible(!mWater->getVisible()); } void Water::checkUnderwater(float y) { + if (!mActive) return; if ((mIsUnderwater && y > mTop) || !mWater->isVisible() || mCamera->getPolygonMode() != Ogre::PM_SOLID) { try { @@ -122,6 +139,10 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { mWater->setVisible(false); + mOldCameraFarClip = mCamera->getFarClipDistance(); + if (mReflectDistance != 0) + mCamera->setFarClipDistance(mReflectDistance); + if (evt.source == mReflectionTarget) { mCamera->enableCustomNearClipPlane(mWaterPlane); @@ -133,6 +154,8 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) { mWater->setVisible(true); + mCamera->setFarClipDistance(mOldCameraFarClip); + if (evt.source == mReflectionTarget) { mCamera->disableReflection(); diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 6f3c4a6c39..44f765a94d 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -4,6 +4,8 @@ #include #include +#include "renderconst.hpp" + namespace MWRender { /// Water rendering @@ -19,6 +21,7 @@ namespace MWRender { Ogre::Entity *mWater; bool mIsUnderwater; + bool mActive; int mTop; Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); @@ -30,10 +33,16 @@ namespace MWRender { Ogre::RenderTarget* mReflectionTarget; Ogre::RenderTarget* mRefractionTarget; + int mVisibilityFlags; + int mReflectDistance; + int mOldCameraFarClip; + public: Water (Ogre::Camera *camera, const ESM::Cell* cell); ~Water(); + void setActive(bool active); + void toggle(); void checkUnderwater(float y); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index ec105c8f37..d9c908883d 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -49,3 +49,16 @@ reflection = false refraction = false rtt size = 256 + +# 0 unlimited +reflect distance = 0 + +reflect terrain = true + +reflect statics = true + +reflect small statics = false + +reflect actors = true + +reflect misc = false From 51e33cc090d8bf3c0cd4d28506861509959b0942 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 15:34:13 +0200 Subject: [PATCH 344/488] fixed map of some interiors --- apps/openmw/mwrender/localmap.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index e88557f204..6a94551deb 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -127,12 +127,24 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, mAngle = angle.valueRadians(); mCameraRotNode->setOrientation(Quaternion(Math::Cos(angle/2.f), 0, Math::Sin(angle/2.f), 0)); - mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_LEFT_BOTTOM))); - mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::FAR_LEFT_BOTTOM))); - mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_RIGHT_BOTTOM))); - mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::FAR_RIGHT_BOTTOM))); - - mBounds.scale(Vector3(2,2,2)); + // rotate the cell and merge the rotated corners to the bounding box + Vector2 _center(bounds.getCenter().x, bounds.getCenter().z); + Vector3 _c1 = bounds.getCorner(AxisAlignedBox::NEAR_LEFT_BOTTOM); + Vector3 _c2 = bounds.getCorner(AxisAlignedBox::FAR_LEFT_BOTTOM); + Vector3 _c3 = bounds.getCorner(AxisAlignedBox::NEAR_RIGHT_BOTTOM); + Vector3 _c4 = bounds.getCorner(AxisAlignedBox::FAR_RIGHT_BOTTOM); + Vector2 c1(_c1.x, _c1.z); + Vector2 c2(_c2.x, _c2.z); + Vector2 c3(_c3.x, _c3.z); + Vector2 c4(_c4.x, _c4.z); + c1 = rotatePoint(c1, _center, mAngle); + c2 = rotatePoint(c2, _center, mAngle); + c3 = rotatePoint(c3, _center, mAngle); + c4 = rotatePoint(c4, _center, mAngle); + mBounds.merge(Vector3(c1.x, 0, c1.y)); + mBounds.merge(Vector3(c2.x, 0, c2.y)); + mBounds.merge(Vector3(c3.x, 0, c3.y)); + mBounds.merge(Vector3(c4.x, 0, c4.y)); Vector2 center(mBounds.getCenter().x, mBounds.getCenter().z); From b3a186e7290663a258ca1def65584ac9a5edfde8 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 16:37:54 +0200 Subject: [PATCH 345/488] simple water without shaders that uses original MW textures --- apps/openmw/mwrender/localmap.cpp | 1 + apps/openmw/mwrender/water.cpp | 30 +++++- apps/openmw/mwrender/water.hpp | 2 + files/CMakeLists.txt | 4 +- files/water/Example_Fresnel.cg | 116 ---------------------- files/water/Example_FresnelPS.asm | 72 -------------- files/water/Examples-Water.material | 149 ---------------------------- files/water/Water02.jpg | Bin 185893 -> 232475 bytes files/water/water.material | 62 ++++++++++++ 9 files changed, 95 insertions(+), 341 deletions(-) delete mode 100644 files/water/Example_Fresnel.cg delete mode 100644 files/water/Example_FresnelPS.asm delete mode 100644 files/water/Examples-Water.material create mode 100644 files/water/water.material diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 40ac9b6cd2..cb3c0a204b 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -225,6 +225,7 @@ void LocalMap::render(const float x, const float y, vp->setShadowsEnabled(false); vp->setBackgroundColour(ColourValue(0, 0, 0)); vp->setVisibilityMask(RV_Map); + vp->setMaterialScheme("Map"); rtt->update(); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 0ef914210b..f1d8d7550f 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -27,7 +27,8 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mWater = mSceneManager->createEntity("water"); mWater->setVisibilityFlags(RV_Water); - mWater->setMaterialName("Examples/Water0"); + + mWater->setMaterial(createMaterial()); mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") @@ -163,4 +164,31 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) } } +Ogre::MaterialPtr Water::createMaterial() +{ + MaterialPtr mat = MaterialManager::getSingleton().create("Water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + mat->removeAllTechniques(); + + // fallback technique without shaders + // also used for minimap (because it can't have reflecting water) + Technique* old = mat->createTechnique(); + old->setSchemeName("Map"); + Pass* oldpass = old->createPass(); + oldpass->setSceneBlending(SBT_TRANSPARENT_ALPHA); + oldpass->setDepthWriteEnabled(false); + oldpass->setDiffuse(0,0,0,1); + oldpass->setSelfIllumination(0.6, 0.7, 1.0); + oldpass->setAmbient(0,0,0); + TextureUnitState* oldtus = oldpass->createTextureUnitState(); + std::string textureNames[32]; + for (int i=0; i<32; ++i) + { + textureNames[i] = "textures\\water\\water" + StringConverter::toString(i, 2, '0') + ".dds"; + } + oldtus->setAnimatedTextureName(textureNames, 32, 2); + oldtus->setTextureScale(0.1, 0.1); + oldtus->setAlphaOperation(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, 0.7); + return mat; +} + } // namespace diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 44f765a94d..c4d2189ff6 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -30,6 +30,8 @@ namespace MWRender { void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); + Ogre::MaterialPtr createMaterial(); + Ogre::RenderTarget* mReflectionTarget; Ogre::RenderTarget* mRefractionTarget; diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 203b406810..70458a14a6 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -1,13 +1,11 @@ project(resources) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/caustic_0.png "${OpenMW_BINARY_DIR}/resources/water/caustic_0.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Example_Fresnel.cg "${OpenMW_BINARY_DIR}/resources/water/Example_Fresnel.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Example_FresnelPS.asm "${OpenMW_BINARY_DIR}/resources/water/Example_FresnelPS.asm" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassFP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassFP.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassVP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassVP.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINARY_DIR}/resources/water/perlinvolume.dds" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Water02.jpg "${OpenMW_BINARY_DIR}/resources/water/Water02.jpg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/waves2.dds "${OpenMW_BINARY_DIR}/resources/water/waves2.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Examples-Water.material "${OpenMW_BINARY_DIR}/resources/water/Examples-Water.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal1.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal1.tga" COPYONLY) diff --git a/files/water/Example_Fresnel.cg b/files/water/Example_Fresnel.cg deleted file mode 100644 index e091fc5878..0000000000 --- a/files/water/Example_Fresnel.cg +++ /dev/null @@ -1,116 +0,0 @@ -// Vertex program for fresnel reflections / refractions -void main_vp( - float4 pos : POSITION, - float4 normal : NORMAL, - float2 tex : TEXCOORD0, - - out float4 oPos : POSITION, - out float3 noiseCoord : TEXCOORD0, - out float4 projectionCoord : TEXCOORD1, - out float3 oEyeDir : TEXCOORD2, - out float3 oNormal : TEXCOORD3, - - uniform float4x4 worldViewProjMatrix, - uniform float3 eyePosition, // object space - uniform float timeVal, - uniform float scale, // the amount to scale the noise texture by - uniform float scroll, // the amount by which to scroll the noise - uniform float noise // the noise perturb as a factor of the time - ) -{ - oPos = mul(worldViewProjMatrix, pos); - // Projective texture coordinates, adjust for mapping - float4x4 scalemat = float4x4(0.5, 0, 0, 0.5, - 0,-0.5, 0, 0.5, - 0, 0, 0.5, 0.5, - 0, 0, 0, 1); - projectionCoord = mul(scalemat, oPos); - // Noise map coords - noiseCoord.xy = (tex + (timeVal * scroll)) * scale; - noiseCoord.z = noise * timeVal; - - oEyeDir = normalize(pos.xyz - eyePosition); - oNormal = normal.rgb; - -} - -// Fragment program for distorting a texture using a 3D noise texture -void main_fp( - float3 noiseCoord : TEXCOORD0, - float4 projectionCoord : TEXCOORD1, - float3 eyeDir : TEXCOORD2, - float3 normal : TEXCOORD3, - - out float4 col : COLOR, - - uniform float4 tintColour, - uniform float noiseScale, - uniform float fresnelBias, - uniform float fresnelScale, - uniform float fresnelPower, - uniform sampler2D waterTex : register(s0), - uniform sampler2D noiseMap : register(s1), - uniform sampler2D reflectMap : register(s2), - uniform sampler2D refractMap : register(s3) - ) -{ - // Do the tex projection manually so we can distort _after_ - float2 final = projectionCoord.xy / projectionCoord.w; - - // Noise - float3 noiseNormal = (tex2D(noiseMap, (noiseCoord.xy / 5)).rgb - 0.5).rbg * noiseScale; - final += noiseNormal.xz; - - // Fresnel - //normal = normalize(normal + noiseNormal.xz); - float fresnel = fresnelBias + fresnelScale * pow(1 + dot(eyeDir, normal), fresnelPower); - - // Reflection / refraction - float4 reflectionColour = tex2D(reflectMap, final); - float4 refractionColour = tex2D(refractMap, final) + tintColour; - - // Final colour - col = lerp(refractionColour, reflectionColour, fresnel) * tex2D(waterTex, noiseNormal) / 3 ; - - -} - - -// Old version to match ATI PS 1.3 implementation -void main_vp_old( - float4 pos : POSITION, - float4 normal : NORMAL, - float2 tex : TEXCOORD0, - - out float4 oPos : POSITION, - out float fresnel : COLOR, - out float3 noiseCoord : TEXCOORD0, - out float4 projectionCoord : TEXCOORD1, - - uniform float4x4 worldViewProjMatrix, - uniform float3 eyePosition, // object space - uniform float fresnelBias, - uniform float fresnelScale, - uniform float fresnelPower, - uniform float timeVal, - uniform float scale, // the amount to scale the noise texture by - uniform float scroll, // the amount by which to scroll the noise - uniform float noise // the noise perturb as a factor of the time - ) -{ - oPos = mul(worldViewProjMatrix, pos); - // Projective texture coordinates, adjust for mapping - float4x4 scalemat = float4x4(0.5, 0, 0, 0.5, - 0,-0.5, 0, 0.5, - 0, 0, 0.5, 0.5, - 0, 0, 0, 1); - projectionCoord = mul(scalemat, oPos); - // Noise map coords - noiseCoord.xy = (tex + (timeVal * scroll)) * scale; - noiseCoord.z = noise * timeVal; - - // calc fresnel factor (reflection coefficient) - float3 eyeDir = normalize(pos.xyz - eyePosition); - fresnel = fresnelBias + fresnelScale * pow(1 + dot(eyeDir, normal), fresnelPower); - -} diff --git a/files/water/Example_FresnelPS.asm b/files/water/Example_FresnelPS.asm deleted file mode 100644 index 2de078ef5a..0000000000 --- a/files/water/Example_FresnelPS.asm +++ /dev/null @@ -1,72 +0,0 @@ -ps.1.4 - // conversion from Cg generated ARB_fragment_program to ps.1.4 by NFZ - // command line args: -profile arbfp1 -entry main_fp - // program main_fp - // c0 : distortionRange - // c1 : tintColour - // testure 0 : noiseMap - // texture 1 : reflectMap - // texture 2 : refractMap - // v0.x : fresnel - // t0.xyz : noiseCoord - // t1.xyw : projectionCoord - -def c2, 2, 1, 0, 0 - - // Cg: distort.x = tex3D(noiseMap, noiseCoord).x; - // arbfp1: TEX R0.x, fragment.texcoord[0], texture[0], 3D; - // sample noise map using noiseCoord in TEX unit 0 - -texld r0, t0.xyz - - // get projected texture coordinates from TEX coord 1 - // will be used in phase 2 - -texcrd r1.xy, t1_dw.xyw -mov r1.z, c2.y - - // Cg: distort.y = tex3D(noiseMap, noiseCoord + yoffset).x; - // arbfp1: ADD R1.xyz, fragment.texcoord[0], c1; - // arbfp1: TEX R1.x, R1, texture[0], 3D; - // arbfp1: MOV R0.y, R1.x; - - // Cg: distort = (distort * 2 - 1) * distortionRange; - // arbfp1: MAD R0.xy, R0, c0.x, -c0.y; - // arbfp1: MUL R0.xy, R0, u0.x; - // (distort * 2 - 1) same as 2*(distort -.5) so use _bx2 - - - // Cg: final = projectionCoord.xy / projectionCoord.w; - // Cg: final += distort; - // arbfp1: RCP R0.w, fragment.texcoord[1].w; - // arbfp1: MAD R0.xy, fragment.texcoord[1], R0.w, R0; - // final = (distort * projectionCoord.w) + projectionCoord.xy - // for ps.1.4 have to re-arrange things a bit to perturb projected texture coordinates - -mad r0.xyz, r0_bx2, c0.x, r1 - -phase - - // do dependant texture reads - // Cg: reflectionColour = tex2D(reflectMap, final); - // arbfp1: TEX R0, R0, texture[1], 2D; - // sampe reflectMap using dependant read : texunit 1 - -texld r1, r0.xyz - - // Cg: refractionColour = tex2D(refractMap, final) + tintColour; - // arbfp1: TEX R1, R0, texture[2], 2D; - // sample refractMap : texunit 2 - -texld r2, r0.xyz - - // adding tintColour that is in global c1 - // arbfp1: ADD R1, R1, u1; - -add r2, r2, c1 - - // Cg: col = lerp(refractionColour, reflectionColour, fresnel); - // arbfp1: ADD R0, R0, -R1; - // arbfp1: MAD result.color, fragment.color.primary.x, R0, R1; - -lrp r0, v0.x, r1, r2 diff --git a/files/water/Examples-Water.material b/files/water/Examples-Water.material deleted file mode 100644 index 2b46d6e08d..0000000000 --- a/files/water/Examples-Water.material +++ /dev/null @@ -1,149 +0,0 @@ - -vertex_program Water/GlassVP cg -{ - source GlassVP.cg - entry_point glass_vp - profiles vs_1_1 arbvp1 - - default_params - { - param_named_auto worldViewProj worldviewproj_matrix - } -} - - -fragment_program Water/GlassFP cg -{ - source GlassFP.cg - entry_point main_ps - profiles ps_2_0 arbfp1 -} - -material Water/Compositor -{ - technique - { - pass - { - depth_check off - vertex_program_ref Water/GlassVP - { - param_named_auto timeVal time 0.25 - param_named scale float 0.1 - } - - fragment_program_ref Water/GlassFP - { - param_named tintColour float4 0 0.35 0.35 1 - } - - texture_unit RT - { - tex_coord_set 0 - tex_address_mode clamp - filtering linear linear linear - } - - texture_unit - { - texture WaterNormal1.tga 2d - tex_coord_set 1 - //tex_address_mode clamp - filtering linear linear linear - } - texture_unit - { - texture caustic_0.png 2d - tex_coord_set 2 - //tex_address_mode clamp - filtering linear linear linear - } - } - } -} -vertex_program Water/RefractReflectVP cg -{ - source Example_Fresnel.cg - entry_point main_vp - profiles vs_1_1 arbvp1 -} -vertex_program Water/RefractReflectVPold cg -{ - source Example_Fresnel.cg - entry_point main_vp_old - profiles vs_1_1 arbvp1 -} - -fragment_program Water/RefractReflectFP cg -{ - source Example_Fresnel.cg - entry_point main_fp - // sorry, ps_1_1 and fp20 can't do this - profiles ps_2_0 arbfp1 -} - -fragment_program Water/RefractReflectPS asm -{ - source Example_FresnelPS.asm - // sorry, only for ps_1_4 :) - syntax ps_1_4 - -} -material Examples/Water0 -{ - - technique - { - pass - { - // - - depth_write off - vertex_program_ref Water/RefractReflectVP - { - param_named_auto worldViewProjMatrix worldviewproj_matrix - param_named_auto eyePosition camera_position_object_space - param_named_auto timeVal time 0.15 - param_named scroll float 1 - param_named scale float 1 - param_named noise float 1 - // scroll and noisePos will need updating per frame - } - fragment_program_ref Water/RefractReflectFP - { - param_named fresnelBias float -0.1 - param_named fresnelScale float 0.8 - param_named fresnelPower float 20 - param_named tintColour float4 1 1 1 1 - param_named noiseScale float 0.05 - } - // Water - scene_blend alpha_blend - texture_unit - { - - // Water texture - texture Water02.jpg - // min / mag filtering, no mip - filtering linear linear none - alpha_op_ex source1 src_manual src_current 0.9 - - } - // Noise - texture_unit - { - alpha_op_ex source1 src_manual src_current 0.9 - // Perlin noise volume - texture waves2.dds - // min / mag filtering, no mip - filtering linear linear none - } - - - } - - - } - -} - diff --git a/files/water/Water02.jpg b/files/water/Water02.jpg index 3efda7b6a88488f34f83ef292e57466db09818d3..b91430244629dbfbfbc5a027e198b1b3061dd0ed 100644 GIT binary patch literal 232475 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 &=wPF&?9=M zINVc&>tUK$9r5V;JdfaUuVsj`E=I+p{bkNSu-HCyMy0*$=A zr7(Ah0*+!dK{kFOw)mH_u+_m)leTUY-108@<1w0qDOPpuAA}v#$ydK=W?Vw-1fbdP zy)Xqh%u?@Vgjm3)P&7n&mioj~-XtvULtr$0sxLV%zhoF^44r*pkx@|k=DbwL)+c2S z+urj#Qsf%n-X$r_c?Z@BS4>3iMX{=kT3*NT9I3D=v~Na9Ux*ME@&5oBkl$jZWpZtX z&$RQOe-I89ffeA6043eweWh6TZSK9?BEpW{=L-~|#i3eDreMulW1DxU66ldiEs)~s zl*FNGL(5I7ybxgMYF*`Gc5xESr~&Xq4|!~j#B{AC4*OhN@hBAwR7(oI-)UfW-9X&a zv`Wz^xqgsuiJHRBad6^_?GOW1t~t27I@B2T`H4o2aUYgrK)s@9gG}qi^DNAlydONm z>eI_u?!;2DGe)~}7*nvwXAc}qlp(|~XzRo*qhOvcuTgD`3vUYJ zQ5*uS3tt{%HBxV|^9NQ2+N*fwm7Z#k>Hu6q9yGE!i(c)VsC^P)9J)G#8ttF*u_>@}8Im~20a0UXkP|6CG_Lh}$r8XNI z!Pgfbh}pMrH^;auB}atp1>l z_cx0?!Alnn>aGr7CRwj&XcR8Rv2d2b%AiLzyK!(AXLEXuWvzZVl-23)m6fcX&Sl`w zyx*FJM!{_nZPR~w$|>fnKUl47`ImSfs|p;7Rkj`74s{D=QM;vv8}R4MuqfaaT0C5J zvXldOzGJurrfEa5;$LV`7!tXe646C4t(kH%rQD8BX?5hn%_H$EDAu!w%i^P~84BGA zbYNEp2Qfr63rOz1@|XyqK@)A9{L4Ves0$pKy5qb>rDzwnVlFA=dX1($=P7R*{H7bP0J5YUW4)(Ls!u7({L5o2*^lVo6@I zg75cIg;nLX^irTAP+D%d!&it5Z7P9gs4=Wcs2I=BXqDsxy|)t)2apA^mr;ym&w6>d zYA{_S%&nWU4P@-VPz=i2o;a4g@i#nUS;n2Fv^3BvGC#y3*pQ( zprvi#nVpIOSxPsC1Itp$7dgJw{(62{Hk%~*kw9?)xY%omFGhAn{0%n{!%-*#9I zL^F^8L|Sh33pg+lMOW4se8KY*|{j+F65pswE4m zYNa}`7A?|oue1!l7OA*67Ug*MiG9`6xUKi%4d%6`E9AXY0b`5iX;nck@Z*}5Skx;@ zW9coScf$A}2$i9aA4qJahb0Hz0aw_uM5R`HUS=N>&8i8N$;MuFF6IT=Ic@R8y%`z+ zyxi~_X-fQ-Km!?Wp8cU)VTAq@RlAqC1%-^~Ca&)Nm}r;LYQp9!Wl89#WrG=mD$0h% zpdS;-N>>QI+zZbB(bQdIaHXrhGlC_7#uo5vX4uf|0%JX%{KD@QWqJ65B|6hs&BE6r zw@0(NjrJI7kg(?bOY<1lnQN>J*u2|8_=lv}xC4Irh6u3D@cDbh1mxN873Q_)Gdn<4 zOV-A*ECISpNaBm}abWFLU(_%g996uuX|wG!ZszL?0%Yw00q5;Ci`{D#q zLH0zfl%z6aS(al1SPS`-j1bfBF4MLiV@Qv4$1urYvkm1YvD)EGmY0$Nfx5&UdFEyw zDH&B)y~UKaYOX4`j`FLO_cwke?Jd&buJZsWo??TA_HX9kAO%&j?}9K9jN)a>;5(0p z8~Kz+A~J3oC}~Tkyju=IHd74#$!IvYWpU5@m`iA&3asN7sG4u+j%ATL4{MU`$x1p!uunX(`J%!P3?;@-v+X=2Wh6C_F@cVtL099s6Cv+6(7XmX=cuVi`80h(>W^!UIzmcp_ZO zM<4bW7khN#W2juZ$w8Ca1qCZ*jSo9}$5O-!FSFwDObv=qwv;eb$qI~$Tx#jn&8V8t zn9B_($yLj8)dx`aZc~cKh?^shNxGz`j?8v-y%1Y%;LSuNYVn^3v|OdCadO-@f)_yG z?h%HY47<3*TqHmtzcv)#6)d7xBVssA3No$PSgVv(6J~DK+0AZm$g&G@jMnuiXp-?+WeEQOP*w#FK{1g< zf4Q%9j(E%frkJvhS`{j# zrlRk?Mb0V&X|>h-F%dre^P9Zx2%H`wtCo%G$*k5*FoFd(zEL$0%{Z1oMsarq5(>b& z=F=X-Fqwf4iU6vr;5mWC8Z@(Kx5OUn?G~!`%i{Np+QswUQJzwVV-~^I?d0?KN@VjLU~KJwm1;j|6Ig7kU(KporO;CADQn1m61;icsE=P=mA zSs$51Zz=YHK(OJB2r^L9b)0;WWwRNl^D2Afj`ug7*_fqxgA3!1B58Cj>vHICcFevr z;$l&}TtReinA$^=EDeC1o*@gRz05=wx17w*>gbzvmaIoQ%dKBxTpr8?M_4^Zml98u0)mG+u@lz$`f8cCzxsVEx?T zxobxFAh1iI8E5WG#T-Me;%>xTe-NUdv~rKoXKv+UDLBEoPoD66{Ka~WRxqKBWxX@C zg5!(kTOz7z`_^|ANaAr%IUyCMJ1p;4Y-~Xxx0B$+zVg;@nmb2KgJ9udEh6wY`IUpb z&tY%kHkcbzGUF5rC4J*i%V9@vX=1O1uXy&0D=a`?Flr`l!W5%!%YfKC8I0I+p@cVn zWyXgUtkAC%xR_xjS&${8+KS>h)s(v4JW9}h&*Cd6x-hNf%EY38=L2;WG-uCwi?V=j z;KMsk#bdkxu*edvI-#bD;v&|dIdKtj&cEVo0SF;NY@xbDTgWD{N4!gBWk?>3US zA&wY(o0Nc~l`hu@Xr(5Q${*ZLM#X}5@5O5qMK2;PjWxYMN_VTPuF*PWHS)_SEpUGR zBPt3fXk*~SaK&7|k>Xuu_C^dZKSl!Nq^p7yxk;<p& z04U8&4g!P%i+MvoF|b|U2=;Ob-m(z&3D8~RJvwSg<;4q9?^Ww+lMvg35urE zUh=4`OR?_&8$dmXEN+H_TEX@ud<(5?#0 zYB1gS(+bp{3mXnmc55(nF=|0utY2-*kU^yiDL@U?)@$ZxLqTM>CetmERZ&jaO_q0H zX!mFRz#DYQ;RTAKv{U@YY)$KLtYf<^4I*hD6IR7`7q$oQ9Mij?VF5h&izK%OT)h3} z(BVz-?I<-^s5R}F7;(lL{7Zn-vaRn^1SoAoMb)nxfNWCJW8`YPN3~^pP*tnS*mEpz zjwPD9czvb-W*hIBUpEb@TPhU0`o=0N4N7R=o@KJiP*%8u#26Q3aJiBmVYznuKm}D- z9NhLu>zJ0l@mCVvLWQ`j#?DA_Uo&(ZaX$*P`I&AtS;f9cnk=~9 zsk6IMqOcco(`~NTXx5i}FA(BwifH0w_>QV?QIMlz)N2qa4QW`qshoVfcl2OBo`ISJ#QlEKYX}~+3p!20}1c$JD$JZ{U?7x|m90z_O zK%Y1x zxL?nBaRswv6E?HC+v^=eWErq|4(#>?4ed4*NrctJF^VuB@>xr34bF2$8G;130Io#w zP!YUg_c@6mP_4kca_yN)E&x+bfpo`g5mQth-X%Hu!EOrpm0ujiYLjr$-xwkw6<7PY$O~y@yTsH$8Qa9Y?k#9oK~QX4J+b$h0N}1H?*lH7+PDuS z8cRUJpL>S1M;9wxjQd0?L~@`PjBzQ86t=27HsS@RY~-luX^^%50FjV1S{nZT@h!`j zyk&%Js*7r=1GUTu)lS=cc8bL_LcsRbL=19Z35+}MGOl-M4H(aEd%_*i5{=T>-+6kK z8VoNv1I!6Dx2wWujX*&yOSixgil|h-l2n7kE>IUmvls_LRvfBaQR7Mp%I0f}#lw7_ z@Bj)NRVv#WXJ2?%m;eCI5KC{hN-?pBt$PqJ8D<(vxIh4+(D-K^9dC07rxp|s5+6cNWEujO`-Gz%=B$4t8wIe9+57Dh#Fu5Y-*6D@r9<%)he&YxlR0~F z1uSWQGR0LdobFO-SH}@81ZeZen>7eJs|~QLKEClRZK}S+!AT7kp^WmzABYx!N*?7s z;n%!-CvPxDz@hu^7*ZH8yILr(d5YtAk*tCAh*D(jo_j$6B%}rR=HO)tD$1`TXS`tO zH)7>%v}EErvpBKek~<*SJ~3YZ05Y>0o)K;~rmv04Lh$JG2%>7utHQ%dkEA4SgcMyh zEVTlJzx5L~gNI$;63At+&UojDtD0t>U8~!Pd9BPGnSG*EObcz5?;SxySDHLrx{a;d zE}bz^Lhxrr%cbEVWZfti!RnAfb$f zXCE@TqEkhOIf%`sZ^TTn1fc?y>%(I#R26rDy5#&!MZ3C)Q)0H-c(Myhqfal1ifL;P zdAgZ^R@m?3+5!NAiHHdefHWbXoS7j*SmqN~lkAiQn8D$nY2XzbdpY~u712en;G2%f zR21Hqh>ntritj9C8*{-PUE!DW2Eqk!^Ej=nY=xh=!55CvDh=U0CUp}~s>1TlTT72 z0#tMD8}y2UM)kyMt6nh0JDE8X(FwA_=G5?MWn_?=D{2Zx_>dK z3|1h1j4)Q~9FoI2ncOK(P9=;QVO~7VJqxApu3&2vq_n!c?Tj*D9**_n+GA9z+Ec#a z5~ajxUTS5_vW1laO8)?JJA#xqo$I+8%_FNfULj)5`B&EiqFZQz;~ zmhLebi(1`&W=;<^?F#Z@_2q#iD^{};>jkd8qX4_g zPVzEtWUqN}RCk$k2*_OSCF28ZHb)YW?)y#ye9O?v>2A{lpPunuu@`-y1AhL{s*Fb5 z!IQK^AEa_sUuO3QvE3n&S{qF2SIdioozcu$cn9%!7I!Z%H@L%pBoi)SP)eK*STv#E zCuvc9%L}{gOKvN5qw6h5Ih+Yu!zovlJfUE*qWACKSS1UNR2X#xl{9RqL5R5G>*A#d zSOSh~@dE1V^l^xc3<82E)Rt3u_aj>!3tH3x6y3Z&(uSHHwR}J@0e6ZKD))tJ?JO%b z!JB|bkjczLDlVhqriH1EIFQWx<5b^IhY@ zqU;ZlvfpSA3=1x+Rqy6lpxSJ{-+6aBt&SsA!6KrzqKk!Zlnq2C&R9^itk|N#s1oQk zTztSak`1_di&Wl=iYCFm{iCh`6_b;{GiCv_+^QQ9&s5bl?JQA{tnk+(-`*DK&3SkV z9I@gGU=I{R0SvTitP9M#rj5{OuJE@(n+mpnm2(CF%mY3cfvbelmnlnFGVV)`SSuL4 z!~}9=w&7dt5pmdB=kX0#7Q?KHzava-T-&tTwy(UvY%_3cIyKC>S%1s?0bD>R>K-Sx7rQ1$C-IA7a3i{ ziKvQiF&rOA(B620#~jW%#G$=Me(i)Rg2R<79_7sdTd{^D;iPUT&^B}Tfv0NNc<&aC z#`B|f-T_crTYhH19XG0ln6b&v)P=Q0vMz`;ayLao-B@9jGP}6jrm@5<;A*js&{Yt$ zZ$D^2Ld(0odqB)&xN9EJfEF9Jn@%7oi1t4c!k171$I0HI7EyF>dP)d!eJ!h~^am8Y z2Qu^AVX84$pnzy{WKa&%-!66gqrrYzlBT=6A}%$`(crce8g8BzdCk?t3=am8w~sQF zU|F|t{o)4zg&ZmrKQPu^bQ*74^Ei_7Hu0&GPvTHUk20#D0uTj~@(f&Mt!2{(v~plg z^LGuMv(GamKqz1}v)W}8$h&X(mq=-LfT6Wi#Do!L5L9TUo$e$|h*jNKY(BAr7R5kp zy=vp;QNo;7ye=RMtudib5{g)@lUACb0H`RYaZ!{h^?*$-jPkgQ6;MmrMff;~G&FKJ zyRO_v+FgK^Qi-zeYad8}Qx`{+9TdJCAQK>sSo$zUt}(AXRJ1@?vRwvS!-l0O1QZdj zYt6RHP^+bR(8OJ_?hMt;#VWz_`Hrw^E*&w%F3fq3e-$gaMmWA=akR&8J)qfXWm_?r zrXYOGrJpgIU0yNXA~aR^maAHto2MRqqih;Eib^gWEVr3t2Fq8>!D14OG%zwKrPQ#s z3|BqyLTsStm`>WRAZD=|e^ceTXsh_1`-5{1C(KTZOS}-5tYYR$B`q#E^A&1Vi<=#_ z?-9Kf+!;>YE)>eOQtWr!Ks%Us_m)SKPA?66+$sZLQ_Jr%Yh9w^+vZZe=V_^B(N`Mu zUiAPY3mxCI9R=Q!QnsiRi=j6T*M4S&E6vNS-?4G9Ek@pc(;O>Hle+*C z$~mVo6M$B26fTtQ0Hr5lV_rEfe_;_(hqP5Y>5RMMgU{53$gUbZ;u^77H%2=M@7aRS>t%CIB}=x*8YA!a(H~Xyh+blJr+>&a-5@=-q(bLeLj= zp@mim$eAqdPypT1Ynq9ew{$c0Y7PNf*6Js=+#C$URR;FarH&1-AT1Z2*_ys}4*Aw) zb@hVm^QAbHMGDIlUzfTIKrH*z1f^|u;`b5<+#uyH)>`cv+p)tGZo9w*hy}N|>k()+ z2JWINmZ*8eOU^=@*b%l66ocH(u3Zp|LahZ*5?^IS0I{=ZgMrD6K_+Q=TPU8@?+ZwQ zR;)bVnX|}V3$K}Q3N{Zs#itg*X=`^?j&sbkRb`I&8acrzWeOp5mg9WR&!A`y05~ra z%xWTTg5uTeS#j4w>Z&%17A%^(yM6L$K+9|*!kdVzuqoS#Z8o?Dtl-};NTi=3nPH(y zaGw7FFbhSw2EP!CLq{7Z=i(%$byhypfD{ff8fLNHBn!vZal0P#hfJ}K@J>b~47q)W zYK$fv4E-)yx6D{RiAA=GiwS_+?+hN?v-=acE!QwW79JU4taqLbK`B>q)J4&T3EWm$ zs@!0ix46*6FSnp)oW&oMy036g4KJ7|!-zLhwdYdCEO&`pxb3(&gLC2yOLZ->=>B6a z?&3oDmAK9JnCQ*!Dm>lFXMv9QGC|zbR=jZ+?F(hBr+#Z)RaO=+e9T2@3W3GRd;Zur9d zCDtVh1Ch%45TaNlRWz54W1T=yU9S1&UA|$&;Bee(vSC19Ciyj}Ev70U1)H+;!nOr6 z3Vv_qR&BS`E#q{#4SC$w@rt%MZHf)-rUM?>i1*f?Q<$v5dv$Sv71-yrXqV;PO>BF% zL=^`BHtJe}uXc0VJ76rQoBsfk>Vh_lb)o?#A-!M+YP@Fi5f0|1?Z~D!(?IOpXBaMJ zSw;E1#|7CTyU1tj7m!;66c+s@j6&L4GE)1ICS?qg8SgI{O{KPg4xuzQf zO<;{;#hB%M!#?uPiKsqewMBP%g(gCxZO42|y9>!^Z^of6#x{GbLlt9huA`S?>-|7S z*=+vfh+*TjHKAwAAH>QS%S zhy!Zoy7zdLz$nYTb6JKlmny=4PY@U5v?yehWdh)(0i^-3pv23b+(8rp0^|cmhP%SW z6d1eDnt1IU#{%xR@x(?tvVgk9R@}|y4o%fP%*RLq!<~g$@e0NgC`n7!9_S7TF6iOUZlOuorEH zCNLgn;@i}w8od48##X>7JAV)jfD8!TV~;Uxw?$rbR9aH(VqDfk4`4w2M-t^lRThn^ z;H|4{%{V24J2(qm8r--L((=~aW0D!L)(@Qgw=v$BFY?6&z_q|!H(ks?0-TvVzlarH z4E!df;g$J@&7j)Fy^O&NI10{c+WJK_YAg%TRWLv;3Qz6@wP%S|<5K#EC3|^Ihc0t0 z0;RB9j@Z7?&G4~>ce>47LZf!Jg7qB|9SeHyz&(&>SBsCuUt!#oQ5-yT2Vk}G+%Q_w zb#Gwyi$LHPs=U8hYfxT9a@PAq;66mN?(s8ATla|Q;t7{K3Y0TZ%fC*u4|%zK)&ZvK z3Wkg-fX(fh>+1zvNlKGU6EHD0a_$fPx_}Nh4mUr((W|k#tWCY91XIOJDPiH428-f2 zZyln&PHDMjt6G>=ej#(5P_xgdwMNOi!Z)ubq2&s1N9Gpq>k{hm2ViTw4vh26Lc65; z#8+=Osdo5i)Ls*jK4lpg=H(Vwd@)6$-YNv!4~*2MYnR!6S)d)v3toN5i%^!T*Js)l zIyXY;9%$dRQEGr#R0H70h})tu9#_vCAMa=jO=`aq>x5OJt`ML_dujc_Nlt|@dt6Xh zCMk8lFe#~=Q$@s-Q3Mf)MFB#=*efuciQAQV#1D|wxV9Azno!8UF({=GM>(&ov>opb zqJms))$;&YBB}GtFlfGPM;o&9;}JF(Ej5-q@OVLXF2V(ALk7~_1A2r|Yz_|D<;+UL zyMg0E_LbX8hZDS07DZ_xTF&|AW-N;rD3@g%d0?Ib5u+0Ldk5MI%X?R7j1D`p%*4#6 zh`+V<`oyJGQZe$Ih=8zY(TFO5VN#XXFSIcIV8&f@RowpoQNGwMYQHw>J{thb_rwPw zTPAq>MPXHBXrdwSJ!O4(h~z2mc~r4?W5;2^1_0M0q6vrMP`3-EKg>=JMKEn;nxVUG zp?i+ZyQ(;DzMGa-rIyu~s~{ZHA--H4rP!;dD!1k}f($9%oLWFzU;>`kH_K>@v(v$h z8MT(8rE!Vjp2~lb}LJ`j3RH}lDJ2x3CeJbY`UBn<@iS7nh{FA*JL$#1<$xh(bsU#Y^D(>c3ir8L?OGtW zSAC-0a81Ub93AQN3!TR%NryJ?2*$_0;s!9+GY)E9D#rt7B(a)&MnSJ(h*hAO)ymaw z2G|5LmVPG15m*+k!%(4|#_V8hw$NXQq9~G-LMSe`dAVFRrDz2^wRGbD0M*}-4QH?* zql+6Y)h7jWDN`73#V(gMi-uHMXsrjvV`dvx4C>{xZPY1f{0-=qF1T>Y)|NM9#ttk% zybFcgHpN$GwoFR`G-#Om{U+cl@W>>skaE#pZ|MxNjvDgkonl%nqg3}EV76gEeYGwF zh$$A;XYKfdkP2#WI6!b2=THJD3>#@~!k%Tds0zSD00n)w7ANR9fECUcOhKli3M>%w zyu?5^+OfG_&oOJ5XD1jgrwiv%6?QNYe!twsW%!30!-JTh!e=nXi%u2+YN{}aRG0v9 zW#oZGuDnj?JVh5^8uq}(H3p=r)0E=)?+lTF@e~g7#45O0a;#f00<^dAL(D7i4BR9% z14E2JE|ld0ut5Ul@qW`%<05-}T&8ylzMCb0=e57D8i2xs516j`UL(@W45RyEG;KMr zGb?X7Np)7Kj`5O>Z8s}5taWavt>CDtA3kNHaJKuzUGAWvjCYAxtq1Fv5e%u}@|TSi zc7z&KM%4(ZbgzRR5LgSi2}~=H6S*{YK9|BGTFHMR~(Gf`ZlOyr8*lsJVt3*+!MHo*Ro9PrjUh$cP~$aLVj5dzT%Z(`y7z!vQ(Kf(NU9&q#{uB-R$~z* zO@VnUg}{WtE?Y)0W4kZ~u$J^?G+7aPv?VDj!CvzMZKqaqQ+ikAP`a+fF4128yY`Jv zJg``(7R}Bp1XdfSKG>NGBm(QYb1xdwBI8Aniuov1iVcEo>DTN1vFPQw^-taY4ZYtMH%xs%?hZhx_?-5Js1NNNz zLbB@Z0d$uFG+^T5eI=#tw+XxVf~GL)Rch5Y16=YMkkvKzmv8Y3g;N)to#s@l?9r0# z8!W{_YuMzv&th`o{C9^9_U{F_HtTRHEck^HbU-ZI5d_xh_LOf`xExcC^W~JL%ySDU zCujj+t|LHJo_qI+cpG~~R&z0-^2=6Xd=lK|9^TN4Ma2b<%|wlxmak4~UNvtiK{K3T zJnO#IHnMO`vDzcrBT&Lzz_`gOV`5&K1Ll3Veq|^K%%HPH*E~T3ehdI3IHxzJxPs;I zLoPne#oZvv=M1#O#ew9gP>kdTD^;j5#jhNtu5!*SF!q!ShXv+}m9o=n-Uab4Xw!!j zK4S!{G*rvyF<#!xyYaFxU20Ro92<$Ks)aWD%ORHP+jxR1gFU5tK&pcrCGVGUk(}rr zA{o{Xfb-@f083?n$h@m<=furG*I;vvmkU)Mmh1>!6FM+`;}>*p?f@?@EK_k@h!o1vyI9knJDGFTQdb9eqv^;Sh&0|4Pk#z zq$tyzz13!=>~)H$>?k#*gBpXI`G}(eT@VcTUGWjM1XjkMhAy^?a>&?+InJhf?iPm! zEo!DnFt%++HNi0!3$dl~HtZZmeYlt#!0m-*$;;X++%&H|ziEiPJi7Y9&?_CaEKDA2 z*(k>}yyu@DC5Lx45ks@+O~%)nmT8q)d2DtBen|rw?UBPz57is0WRS1*jarv2M zA&<1L9GW}B0*idqr;96xQ8!;`7!6`)i0knOHMh(Hur%&7csxJe;0g{KA^4$1S3chH zrtlX*vi!=1vhFQ>+_2@Ycs-y{<)X6{s`A5@`4O@U0pPK{+^Pbe?ibH^f}VExgj+0B zmBmGl*9cn3(#B0IwMSeP!oR4h)#dXuKM(iJ&M}bNa0Q57&DB_LExHk~UM$D@g<6SN zTPweKc?B-Nh>$2<1^IkVH6UJ9P0_|M# zmKFxiTd%YPbFAMi3u7JSulE*Of3X*Ig9Tj5Sy1GFQFnoB&LAsVkYNnB%td^K?$%Gd zr(xCGE_Z9WrQTj50J-rIb1MX}G0OIo44Yo{Yt*gSYqUy$Y#O?NR?lgKGPcuFO_RhNUzOs__b`L1{y3Rkwdg+!z91`gemi^QndIlTwh2AX|?g zwmm9nf_J^9<6B26D!zmzzqGOie=`9?nWkFeUO>SyVBJcucnh01DGO`F3eesP_JOwP zuNj5g;odc9#Qt-Rb*QVv_skrzqnX%(mr<7ZBLQKhxHuAs z0Lh~MX5qT*>K-b!qVMK$p@8AyH7{K>Ks9LDh^11$KJgSQSbqj()TWBgC63C~UgiQ{ z4et&mvZ}r|`^$_qugnVQ4Z3%J&}=R9`|30a6nrYHgyI4+Mj=40Rq#|mWYs~lr5(-I z7GSn=Hf4xTU|N6xW`TeR_SGVSxxJs><#JIe!S-3rXHlk8EiE&2`*)TQTn+$az}>${ zm6zsQJ6{sS021Np}wwAL25{wOtR-AjxdkH8O zjvUP*;5jER15WGDXod541&v!0=t7#RJ)Dxr4uCvF0i(I``H5vq(c)z_e8A*t+XSSa zRY4O&4Zs=;v@YoQ?=3HGAsKmF$@qc}1y$I7`^zoAnQ_X8m_bt`oqZz#HtJ9?9pad$ zTtV=7j1r$Qi%Q3B?=e>7xx!pDaJ}a9EDLcy&hm`o2IV}X&uCrYmx4MDY}7D-e^TOY z1_xQ!pNZwnT(I_I15cFi9$m_)80X94B2aQzeNIm(5Pv>jO$`$hhzl*FlZ+AZ!TaRt^sW#lhfXK{|v6xPge`a=@HJU10o7%V(O z+RrQkujMUin}Ms9&NONeyo=2rX@8T>8u&!HmzR}q#8Qku!b~9TD;3@$y`r{80e4l2 z#5UGl@iJ(UfIFGY7FyTy^DxTVUFh*B#74keam7Ge83}6f?8M?(FkWK-Q*X=&hjDJ; z>%6iX_+z@DmN0>7eAN*s0CCGZ67dmI(t^F7H!AAKxbEVn8%R(YalfojPi-|q_7i2) z6h%=Q$pqfcS$qRaZ6QZB#$txBWO4rhW5KzGCh6F5k1z-s#D}oelm-4JDwggouwIlt zoJDisM(ptG@h+j-HJIKOP#uF^>%<0?WY>1CvD=7!HE(y!b3j_Tx`KwZ3QDbGiCZqr zGuq}#u;Wn_A>lOufsZj_%&!y1CK5Hu=W%U*!YI!>r!W*Hy}kQHfpqs=5qO#dOD*5i z+5}~Tv87*dZsMG8u>eGQYH?l4_NZs)Q_WC<)qSAcpk=O-emIN$T(`prFK1+T zeAKFPx{lDcjY67ZO>39DQ&w%hT8*G>PHXLPBBCK}+t1PfC(W{`G39{KTi9|+jr&6N zOTFKSo1uF*3S}sCyv&7mmhS~{c{3{QyXIx)T*N{xP5g5Nd_ma7v@ToDhO)|qAS5g(b`vPIcaw&GOdMGcrr%E zf3Zw1FT6C17(qbL9I3QEU>J4rXjMW3V}hoqm14k*JY{!?u%aI&Xsho9Cmcgnc)tGt zSY>P=Cd>zEeuEms4Z>k@Ei{U@89x;faAqJ2t4r?#HFgWmSXPpUE9VfprM1p)K3M5C zAlsugm%Lc{E19L|>nnR!yU)Zh4e@Zi)Z-d{@vY|Cxn1Xc%3QNi-V|*+&D(b@1~YI2 z01F+|V9}wx*U^j`t$t{gknf4Qqd7!BgYy*x;iTa?V?h?Jq^8;&1DZ7u9kiZ#eWMyg z;$dP{-S?CP`b1TmVT!PGH!r}b!0oHV(fLYM*AoU;2oV8Two@1uMrNcqm&AcYnVyP_bs+vHqqr#H1B1xE`X* zU@?wmXG;><_G1&f+F?~;vf~!J$X4rfYVE%F8f=MOyvCdjK(m5VFT7GIYrc9_!(HQ? zzV7*oG`Q4Ks@H(6bZNmQuom`eDv>uGFS7`Wp#j#+UpJeRT?NnoimS9dB^4 z+73`9j?J`7xWH+c2JrLvgI4QF#CjEqy8dOM#ye>2w<_Bc6xH_$RVM*2+`74V##f8K zsxS&x96tStPK*xx$FVI7emH{J@w6$aaa+iITjfxBr96dr63kABeFDyuZ& zu8Q}TCIM|iylM-0%NPlu3akoUIdYxl(@u#`xBHj?a^tpQm?iNn!Y;~!4ma9fv5~|t zmf?jsxrO60^fd79L`~?&h}!ub!T!cmy7`X_Rnj=dC5b63OGR-Jyt(FBblk&y^DMAI zIe}4lgE#(>jz83+Xl1~|O>4OaJ^Mi9x62!I7|TEBEl*=ZFUpFna}}>W=I?ItZlLPr zj^lzFT5OpYJRdB{KK-T{V(M)*&2${U5|pLB*~Cn9XA@v}YFUHW^C)Z^!}*mI7T!Ij>(lfmPcZpJS$D)WPa2I~ za~aM(rSu;u?~k0jcLon=7`TexxdKU+pFU-{TMh@k+_-aYN`-XM!oXBkjT~{AjRI9L zm@-oPkS`S(0{8ZXL$>WdX_aKPOMhuq9^y0N-aX~CysgU{05MI9^(dgpqubtGRJ*6N zM=YE%-rpk#!_9atpI}+hF?!>7^Tl+oZXc`>j?I~l3 zw;zIKWJ_~Pykena25=#wCk7o?Dv7B!>DaTJP}F{b!9bdqPWIP$}F~f%%Q$3MA4NPv28qVqQcYF zuDzkmF0p0{qTcny8@@S?lLcy0s-ua62;p%oC{_>dWm&v+@jEQ>5euwpA->)sXUw^M z47q&*5O$eVE5SLNyu|14Gz-8#s7(#`-_n@!8(DUP1DQ}8RBgU-xcip_4&2cZ3u5B4 zuQIX1OibN|UTOBIMhkNB+K6exm$a%-5jG3^kB zotnqu42J7&&!oOh_CX@>MU`k6OZ9@{Tvc74%uFoXf|Q75t@gW#V~ubHV*Ih8MzHQ< zb@2e&!AAjgc$r#{T7sp0p5$`TcKx8Iv%wn_6tbVxO=zLO$Fk7hlgw9FG@yAPvT$H- zTyM|5Vl@H+Ip+=Yi2g#t0C_6Xzk7onS>IuF-N9%(-)I7c-^^)yLSC`Q#Id}$C^^)1 zXlC?GrMs`@1ajMUw>J6QcYkScUdK>h68a`g+!LTU0pn}{2Ez~gi$Luly~q!658_mx zpQNZuU0hq%>SbvL5&^Bpix^8bQOs2s!4`RT_KhNhXWk|9V2!Ui=H=zScN4}Z$nicN z&oMQ3Y!9qaoX1CK1SplVp$g!N*Q=1}URRsdJt8Ez(p*PhbT`EeMr#mjet2FUTd;13kqNs_$3#aXi>7Wa+Ow5Rd1%HKwMWkiAb$A0vyn|g;A>80@)=|f|@Av z6)*#bHkhi!%(i$4r6{Ol;t8#j%ssF30J9~++(FoR?<|YA6mc*Ge8Ay#zogAOU@fL@ z_pLaFTF(I1t#gd!mKGKWv=9QdkPFCrL9#k8OQsGA2f5#!FIT`<(xN&3|RO% zmjlJ@YU>j*t5iHY+{hw^Pc;>!tB(wGaawmOX8^Ib<%MNOGR%EoYPEF+LuOP*XMz!~A|1eS z?OoupQ^Wa%4pAu|GVbs$2;vT4#f+=trHZN;%_BF6bBHwGF+&Tb33-7KyppB8D)!g3 zO$PQe_EsP*k*{UT7K_zu?+{xM*8=6MBy>F;@&K&g=P@j0dVB>*|aMiaMbLA7s-i;NFs)~sw0moVmef>17Q zW^E~4K~z|a3;2|gfEg4#{6fvrz#p7DiLV-c>J{@Ggidhg^#SAnIeW_6Xyt-{ln48Y z!#A$VgLWQF@9QcrHKcd#DHm((y0;bOh1fxcYde0j`aSQ3iUw;7hE*1W*owylA9ELc z{35tjI@|A<+kx#Y@G`y626>fvChJu;j_7i89j8k@^#~1)YW1F9XbVL^DYGN8SkAml z3j!jHZ~SPVO%Imu*d{1&M?idd_l~FE=_e*R8Y453m#y@ol zre0%~XM7qcd*Uf-!9K)Y%uS0kcpxjXvV>BrX3g#@!3SlZh?JDOl?x6s&I?tPy{Zra zO0Bi=2n8q$nujbB;<4^=3X6@4wQm9##(yz)Rt7AMsC}#EWLO)RQF;HYRTZuHgTN!+>4AX^?P4*@ z7lzY5(=}}?>+cE>U0;%SBSO)!MWJVV%%GYDQeP$JHlQyT#^NqpUFR^&l<`L6Awt=& zw&Eelkgpx;;@Gl4e=@;l3azUYH&KO@O_{{VE<-nn9m8xWZ`oa;V*)l{Qz`Um20Da%}QLLcF)oUJ4TIG9Y9N=Fx+wsz;3vBoU)gKCi~0!!GE~h zDyZTlOEcafM8|Xe&z19!n6oI(^a8QOMQO_v&Mjicv{}y_MVp<5yTgtaWr#m2`paOJ zEx3m(li%wEJGS)%!m{jU0gkkzMy!ncMjtY}LlOA;O)uUs_Mkrz1+X+zSLQaF+dQv} zo5FxQ6wSASu>`6Nv{^px(HDu8mitT(9ix?3IvyrM3Ox3fzE*IBt6z9aiqAKRwzq`1L6P=(#11UC0`*fX;3Q7vxVgkRcEnqQL*i5%Tc@uqaSgFb*l=pb z8rOCULiY{<5ZjJOtIOU2X9EYyyT-~5v3tKdfjr-c2t|(((Wv3Y;#RR0S$Ce&jL{D{ z9_+qMp<8|0gc35IMFY9!U9Xvsd_>$Sr%I?Dj%#w%yKya*d5EXQ{{YAp6SZl*K+AU9 z3w$Gwta|9n3&Pj8dAfQ~Af|?l>xoo$yG$Co?E^T%?Lzp2tJ`A|-yl-$^(AL$%N)MM zuS|GhKaOR(%I?l@v_v!vJ6vqbd-;P*&y(#Hl+#s5XAjy1Iye`JoO=Oze0G&&G&x8M z=fYD-E^*%+`!E(LrJ?PafTtTMSo`i!&1UUO882_yFUZ0fEnVODE~K@B)%!*i0bo_V zrNHH#sp6wRT`_;z4wBnG2&|g7Vq9Ihi$<`LlJSa8m&tg-JJVF zdtT)gUwEr3V>ZRGIKPj0AXi=EZSB-E{L52K_PM@I>L!0M6u3BRPUTgI8SxOzt2v5p zm5hhd3yffL_K6yD;W&!c>%4T?dmacaj(_758?R{5U1pMO9??_SFv?-{l^)%qT)2$I zXJb&)54i@wU=do_Tbhgi0A+CkaS9dkBgAWv_RK=8%nNN>q8zs{7FZ0tD83^!TF1P_ z7`9L=!GMYPjdw^+8I(&`z{;6^BWqlh0WrpK^C`!cr=B*K$9>AUQkSk+f;QFN`85>V zywRfb1sKr5USJvT6?S|?z%T|o-UsUexwLuLW$|@zqpI4grhpf9Y<{eWFb30W?=)Nq zgnRO00eHPc6fm9ja^rWsRI%NA!~=I+%TZ4GYA7bVR$BrL8~1N``oNr8a6PIv^u3?V zFjh=jO}ZVB-g%a=HAzBe8q~7aw98Iw>fA9EscE3d?{zI?&C?c~`$Wj^7=RI4ZxFSG zkk}r^-0ci}kO)nJ$d$DyyTwc3;S;idxv#8RM7KZAt|^@y?%wG!fve0FxT1r`V}#JE zJ6(SJKb4sT5w}=3O0QP4z%P6qH zSl@eUGF)?eTW*XmN|8)X8{pK*N@D#0#}IB7QN!8@5Etq zuG(}SCD7X5b6% z4&GS7YFU=N#~a%4>Q_yLdXn@x?TPRu>rc1d4#G} zGgZ#+TTQv>0ae7OO1HElAxZ?hZ=F=!1?1j%iVXrXcYY-vONH-qV9;F;e`t^guujti zVcSG)yR!1UF7N>Ix@Y>7b4_Llu5`iMCUEDtjo+0;ug=k4`^*klKR z46{IY^YDvj$kA){m2Ms`gAdFi-pD}5k9ZXsr|bMd3A)q#OZZ`@h_sKq1<{CF&)OH! zsETB+BD8Lle7&KidOmP&6uOZ2M zvr?j*9HH9a%ie)Y%Xu{c)kbnArYMBC(~BdFRh#yYkrPoq0t(Cnu?e4GV7hi!&RL?+vzAx?kfpeaebMRz>F)gMVnPHz%| z+>MYHJG8i!7pNtnaSh?daSL`AW5HFKUfC^<)%{GZ3SZh1;Nm6XaF;sIj`5=rEkxCOBf5nwOxiUyR=g)R9Sktb5sK@@(&OQ+hXi*KUh}UM(gV>S+T%& zg@9yCUg4!I@%e>Sx_0XB9Ljq_;9l8VFI>VYdlpv_0*Xe@!yTt~=+KJ?xh@!Jz8E_@hI1u7 z2)HhNrI!~Sr4g(ciS>z{ONA%0*Tmw5ab2QzE4<6Q?HgBP#8jzte<;_Pw*DaJ9@2#5 zVPSrdSiG*@A!eC-QJF1q?Uu1O3lw zStExOc4ja_BD!rJ%%r4QdW2(XTRB~GhqrhQH;Tm~tfPe1CKa_B^|fSXF`Wl>TDyndJ{P?9GaqrQmUMRy(3_3T+WXkFgZVwM9U#L$#EsnXY;B z6TUmb@KkJ6!u^g^9WtrW2{Vr!g6C8%qvnaYGQzdhsz9pa#*b<7d_=1`NMTYX{3w6E5pxp$pwu`8OG=_ql8^w2`HGVKF z^*~&lY~$Ht)&XER8Nsbe62ufk1Dn~fs1g%kV`~1$F}PhVt9M@28ia1g7ILxD6wFp% z1U%NI2CZl}-!UhS4VLZsCWF2MU?2ruC1-Oi3w3s4i-`a=VJ@L>xWaqu9?=Gk?3d3B z?uJ(N-YTya;fP+0?jo+S+8p5~0N>dZQIPMrZE>U80QhxNC%Pb#{;}UN_k)~$A?NQA zz-GCE`ovuGwmm6>B8BCkDmX`u@dHIBEs1Gl-Uufj1XW*Xk9RDpUE!1pfU=DKkN$J z&l0?5p{zdsB_jU-5|=-DXdi?c2v=#G?=|8!UAlcz%&_)_9xgNiFXVf{^AiW+P?jY{ zY?;HvoA>_!aSBkTq*Esz)d?yXdE}j_JeuVzs6!2PYb0uaY3-t{AP-7Y2|@J4KV8VgiqP z2rNNMwDy5mcI+0`S4HzE+RPWf^(bo)S{9s!vTV=9O#!;7CV^Ocz6n+V9}2NS28QwW z%qs!FQm>WOe84xnxpS#Qz5SEh+M-8%D>~HL3cA?rZ1BZL5#Y-RF!g24AKn!dNdjUGw5>MrU<^yP zhL`~`(4mL{H!UjG1zb7H*s_m@~E%W%r+Sd^O0I*O!m;z`!c#61q(ak}m<|sKDu3*LY zUrfdS0BK2~cT%Si<(F9bnOZ1YJ)y|$nz|x@W{hgze8S5bF?umKSzZQ{oWmU10Kaz` zWv&AAjMvgoZ4^NGT+{%_+NG*+&uCVF#1(4RiA({%J*G`49#Z(9NT+YLK~0J*0QQ2| zcWe2LRddVzPDkcCLkgy`EjgFEwsH>*KJwE!#$EWsaY(9x-pc#rVvURi(`91i=2yVv z#a1=Ag@9`fUwDfG&OIj&kC-TpG!RhL?atsuYgP}5!LdBzDZLp#yOt$Y8Z*7cvRIoP z*f(yHmCx4ThguQ1Is_-yHXv6c4ZGX(3Q#&HE^OXbai~Z%nyNwDx6C$;(p;D4-d`_M z28*{YoZAQ)rUh^{cPI!>OlhSIbJ`r(6%aNsuV^VEacYygejorB2uEwbkBLCat9CH? z)U46A_wD}WL1@MXB`Vw&(N7;(;eu6)weH1%w~T1OQnqv69X@~-gOXNtoZ?lc(`(1x z9#uBy>eLK0*;Q8*orPDE|J%p6!RQ#V0Rt34knR-Jkt(4BHX0l~x=RoTN{tYd262EO z-6Kag3t?I}V zNAQv~O03cL+uie^0Gd$z{{Zn!AE--rmgWBTf}<5*w2-R&_eb0(+RKx}hX~BgUX*`- z3ti%GQPubiZ3;gSFcIX{nS`&qXH2O^bJ35iu0YVZ;-E!pIpc1b0?Sl1*wobd0C2=~ z0zg`?Vp&6D66)8LN~Fk!4@pOx$q3~<>9Lctl2Wa{eg}(|1xL^{%vZ+dG)MYAy5fb= z<(R@-U6NxowQ1SXScg$Sf_A~>0Q5A&&%D{G&^_{q)=Is0NQhufq9QT$w%l|BmOd}h z18&hpAUVI<_y z5en)!bi`0^UlB=J1>xlIpFx)z!8vZK)PdT?yFcKL@zoE62YLe~P_X)-XW@GUU*Y1zvxU(DC5=*T^_kr-Ph@8a zw(cgsiO)<0)y}R+#2r_J3$3NU;uN{OvS!x=7kHd}pQ~?m?ME+7tV9yeg^fUA^laT~ zfSnRlP%OmfY9UPo2mj!3QWl+*uIAwEG5Y-Nqn%=-jrlk^hP5UmbMgZ~WUY$Pa=GuL z1j60OLwh>Hnp^WuPjOp(IN@hAeJ+zZ@>j33);%CN^o66+kvP-#);$YO&$Y*^2KqHuC6F&H^YNPQo(BW&rxr5H zt8`Sm}|3VQrG{$397u3&duubmvaZshFV=qoW9hCOWOXvT0GuRG3H{I+pfzz?cu; z)ERu!N?C{s1FMOp%@vPl+%}8QXCg+rAhrginA2=5t)bpyM|`O}AtVaMH)=hf#S36eyMmxBBc(N@fig8w)hWR{MXoox_;=p(M`b9C%WSW)Jc&GJMlnPW z?l4yO{D7Fj-7C4?4&P<3K=~_~eIaQJSp)GCi>}z!vN_p_xj6!#Wn!kvU?V$u+Q_)5 zQpuQ#5H(hC9w4JhU0(+Ch%R+4lw~wo3D8_(>}P0FoQF85XlL+u=Uf4}J)YLZKV&J! zKrOzIEWzzVZ|fP6S6pcHFF)q;Qxt^B=}20)Qf8nPmU3VATF-7_Q7xxNT9i0nw>in8 zG|z=G@@*k|)utjtZ^|zM#?m!(mpNbOeN#E!vKZa{-bjXq>)J8X=f*J>goZM4+*ejC z)TplU>5O@b63_*Oa!H1GE?V0g$w45M;gNzl(x>s&RnLuc7yceWoF3e0Y6on2^=1Zr zB+2&0?H{p6;?7?Q>E#&hClOQ6fmpQ&s}!L5z(vn1-r z8AqFiQGw!o?|Vl;-Ru)sRw8(s!tTQpP74rk2{CRdVceZ->t}`H`sl%}f%@lsU_R~tnED0Sp0yB?Lrur8_mmvX9}+HuW79Vy*Wo)T(_ zd{%gZA3t%JAq?hOjAdL3&#&?8fT|DnMA_na4@f2{{Y)+QrFW>_#S@xF3mwf(p7psy z#fwUCGD^MtG%2Yq$Gf2GUEf0qj!|je{{uLg3+{{^Ls|Zotf}`=Yj^w|Gy{D)J;}Hs z&qd7_6KC>Y@QQoLs=_tb@ObvNBT4TcN>J0QxV5gJ-TmxEms$--nQF7TW@%&hU14IN zoxm?2lDwS)4xeFgAa22dKOVjb_a0o+hW3NL&Xl+)8{fXqh1#;2Y119tcLZcER;s(O zrzU3}@q)Mg2B;oU2{`f@=z-qFwH!;w4&PFpDTP|S@Q&z7SI*bagn6#E{D+fhJAw@Z zW#8QX80r9&M9_+CatFbfpZMrO zLPdRP$5@V?(wbw##f`p@m%M$yjFi@tyleHk2GpxKzffyPpLIDH5LWLr8_eHinCvW4 z5FJG=bxT_E@-D`*SbdyxwD-bnPAcyII|2Y2fS9_Uu(37Sk(zf;bF8jxmp$VTrgWKe z1gFB63!KS*T2{63#kLZjial2&N0uS4j{rI5Z1_(hpld&r>ik&j!q!c5kl_l>s)JGe^TJgFQxbQQfJI@!A(>dwQ_(~M((+m z_M8uFxm?K>nwaEVs?ouSv3#7RexnItCH3l3p#V9VY|WRfZ8XNBA36IB4$4Qd%#WS_ z(Hy6%34Jc7Co(>EVe^S`iz`~d*1v$>RlDtg+K4Hl1b_+dTq<|^G&aFS^oSQpWS4v4 zc3;jvsZZW1_Su3WRVrx<;ub*pcU-Ty9{QD~u8f(nvmxCQ?X$}!AnQr74$@Yd&@W{k zC*AhuPl=X#j)%a4}{?I%g}X>Ulx=(g>FZ$UZX1D1pZ#rL8lYzQP`&H8O2 zpWjV&55lL{+cQ(6h#t&;ohvOilhT2f zwoZq+uj~~wmtrW{oz#CM>-{39)7*+y6I@_Gy#+IxM&wj`pL6?px(t`w-hQx8{9z~+ zfKwc^uzxWC>6V`jte6ITZl6xSxz3WZZ>iVsWzKYS8c|<~em@Oc#9FB0qbw$`Pg43j z$lUz5UM|}B87IzDnVA@ol`N%Da z6-BL*+`(nv?guryQ!|-o+y{Fvzobj#5N{tU^hXqSR1v@Uz8D2`c-d$#UcrRF{u#r< zXuw6EFZH8Lh_jyI`bIAy?J8$2-AnXHTAEt62c~8=>JXNS1xW84pO0#k=qJYbM~u$( zmd0!ky?<}9NBQN~hj#rWfc4&<@)@F90{-UW8hVJlNDMbEL*4+RN5PcE4(@GzEyO~+ z=a{5)ec$%lw0%=<#}Tk#C?PK81^ro;vW=SD6>C%gnKghojjk=QXvvP5eK%0oKBLTB zdjyIZEclqMLCk;VoJiV$LYo88Jw+!&No~64dlxi5J(4V z09>O8O1y>s7v)WGd_f*8WcBOXjDJr-o~vY+P5v8o8Gjp6EFq<4|GqyTn}b`%4)P!F zoF@0|W!qHaWNtJ%pwIMgG-N2kIj8EoGkV#OR_fOtR|z3vK8Tv%@(@i@z?G;)Npd*MgH!;IzkLa`a3f`TG+rcn}Xw;ZwdWMuua49)noUV zzesC26y3a2bo7PozOd$C{qnsWywDi7(rT}IZcFpMS7m>Q&Nu+1{Alh68@jMGIY;pp zKF6q~?5LYu6i5dwQ9BO+&0{>fqh2F9qCRu`^KcnHv#hUbX0X8=#mqc_CW7l<$FybG z5!1yyu&VP-eGhpxGry1b8kaxW4UmU@P{36TOZCNCqr!YFVpjrU+6x|utE7ZLes<)3 zlRgg3plmiDwb>!m)x`a9>bmAwnsZ;X@|9>twvd+9wrtEax@G4yyXyT%Zm$N2ZS`&I z_a;#YX$#d011vFlVs)q5M^l#XT2@JKR9EDo=&sjAm?LmZl2N?xZ-uk7d{LRptAZ)4 z8L<5cL$Lc5VxF73J;R;jQ(SlQ#@h(CH=^5Wsv`0m?k`}Ms}tq+~G?LpHbh!UJgFG2F`@OelBJ|;g!h& zkx4)g{btjbBl}HlO0%}7H++bXX37coN1o(r_>f04J2#5Kd)ilh8DT&f^Tv4elNq0P zUgYOA7UDeok;2v9ZwGRNTHD>mj;Wf}8{$$vwM9DfDJ%i=3U?*f@9bQ?oy9n_+p$xo z90O;`i))gz<_S-KHotfo*k8uv58thE`V!u?LM%EZX>*uKgsyNJNLkrUp0aSopnXH} zww72Mnb@9$;i<`ozBU`HR@1?T=&3}(36`@Av+7<>a4aX!mV6ebWKo`3PYkmMZbuKg zx7xs_BV6dUM6Z?s6lA>j1+0plQ4`PQDi=(yKU-5sy6=lNi+}Iu+e|W0{@x-{S(>_Z znWQ46LnrW?fyU5hdFgd?Q%)FbfNTyS$QP;49ip%ROVgd3ZLv%gx`Cgl2nhae2Niv} z<)Y%8;=rrC`mTwgWIThxo6pdnS%4S8yfEVo6rHrQi)a+dzWYHDHq+EgVg@m4+41W28AVd!-y@KVwd5%7aF5iYr|7zaDR{;MhEm-?N zOwA*Ws3mwK)b;MvjOD;}+@W4WYV4A1xIs$jv^DMgH^?Bf{C-DWa=v!Mk&Gmxe}!R} zw{ntOp-07YKM;TLiIC&N$;qWmh6d}1^K4Fx*P=YN@<|rT@ii*=El1$q0TL%lVxQO* zG4Te2=0t6MxRfo2L;y&t?bfdnpgS$bA4C|cdV0$_C(W2&ae^Mh+aHlu7meK<8038w3;gD5S=b;uJt2Puoo(5>jLw+cep zbGsJ4Sv7Goza{xvR;j0O-zA^auV#g=A})oQs@rQ0l`}9$49mj4AJ*)P4)7EDxT?R7 z3n)ou3bIu5J}3m9-tyTos<|yXk~ww_$S5dmU)M}`=T}GqY(&z)Kk|hb?q{cYm#|R| zf~M8(&K4xAj*rjG=Lb+e8*-xZucUI?SyarxMb=3`7P)EL;!71Rl~$tmoLWa&;ZBMT@~;20}4>$G+ba+BH4Bk5L04kw8&- zT!wh|d2{^qw-C_4EY~p)1uCIcdM%tn-pf3MKrx{pL7 z(Gt`eKc=Oc%{!U^*1^?OSO&JLT}4Hzb{B!VNAnEHDQ-cu#llv%Ze(58(0>3rhn_or zD?{#^OC7*g4B_%G&{x6vGX9J8dk<1M;WVqg6;bT7luxxrr+BwF;X#@Qw#VQ=;7gEQ zouxlv%08#@5V1Qh82Ws{89(WAb*_YhqQ1bS3I`aXHx|SGw&005ZLwWSI??WWt5`zGEB~dKlim&SoZK3 zZ;#@ySQy;=*d!Qpp@P}`)0cnEG$d@O7-XTsso@!U%uo8u!TpTlXnh4f$#5wfxHX<3 zn#<%V4qKBTj*GatoS$TCNmw(>{{X>!nPHaU^-M-&2^hvG# z{;A2Ew}Uy_jt&*de@{{Hr@W>P!0MkVJX$5oLkiC*ePA&|Q5B!;@(7^*=P37lo}6p@ zpg7`+=)6VqyXVC~tvv%yrNs3)40uU&L(zr8WZ^YahLP!ip8a3f3dM}Y%i^9@Hi?ND z1Itrw!{TV>cPnNo62^A4b)T24=v-H+xej0#3ciC)l7#p7L*n8!b)|g`MClSfv2i=q920ZS^0%7~K?lNgH;DN;Mh z1*P{jB2jNcLhVAn)0`sQ%vk}n><-g!=4GBtlY@XeA@Hb>^HO<-S;j?{GT# z47!V3Yq@&qrrAg<{f=X+@QXX!uf7G^;xI#w7g+)^wW733cbB}@zKevP#PX1v@9gs8 zkJeN_eVe?O6C{YqJ6tu~SorH;)4Dv|bi0~gxy6{K6(pYZH#i7Wb)*w)^jpZDd$p{!b&)11zzEt3H7wH>bNn+@Em2GcPs97HrfBC2sipmh&I!_)P zy^kr6S~U~CZLY0a75BQW)6l>w3qFb>E!|2oe8!wk#mX5(aHU9&A_sUFM)*bh7=y9U`xF#Cr-ivEXS`%DY5@=x4 zp)Oc+5FRYpE**ceNmZc__X#W<9H?M()^3)z{VrK!?j4X67S&cc`~Bz8IO`gt{vv|^ zHJRSR@lGJ!t2awd+nu3h9M#-qRIpl}KfAEk1OkFu1desaHGQB{(6NuLf9ogXqBx$} zQ+Sy(*-Cf7Zl4-Be2GD>Es zy4S5m=`^ovfAw0UK!xE$6dpeL$pZexjp*6k3o#7+KF?NJbHq{-m#MBV8!@Qd zsFx;v{4h97Ah}5+&X|smY#1HW6c!aM?*PV*TbS z7n7xgxDJGZ%@S8y+k5*ib(76*{S^Vb8yD|xdTCv-4ZRUrwD8{HQ5h^XIeP)Dm;OCS zfmDE^^m~$K>)6-=8C{=!fT%*Ihw|)e-QFrAd6n!-JL=F`tg@ceZ4dI#oa#MznzIoB z#@eeMvWWW4e={hO@)mxr3Y%g+6`Sbt*d0OU^odgeD{D$uoC-*BkGt5x;S8A zO@fGGU<>pGS|Gk7Yp!U;Q(G_TuV4RVzlYMT^=W$e!UFpNxB?~e-k82G zBE*ukAog>M;Y2X;^EGfS7eI`-OK(TVo)p_pr<8IoZi5Z5T>oTTBz5chgXZQu^}8aU z`!f2MzmYBYc+ZtuXZ<8-%olDkDal%&Y;O6-9=G%N45^xH33DM{*ZNVGM$bvd$75`cB)8 zOB?2n==I`04T^v3m5mexX3!ipClg#)m@3NnXI z3unkMu@5_#?}xlLk;$xL)NoIS=bPy5K~=v|u}`p-EKd6p0ft*8U@o-pcK0a{JIzf2 zWwheIt;O{2@KDu(x&Wo=mez}YyQU9@Q=9cC~LZmvmDddXFrydMQ1NtH{)p^ ze#od_-n5QEjayiK?53D{gjPoWngKSBhaSP@Fv#j7KYo8nvzzFu#E1XYI1s!>Ff#Q6 zNbwoZ#a}*X1+z^DX0=q?lf|5HJ+zjpFue=yMFuz{q9~ia;)m)?U-QKBt7wSnPx&TI z)wc#N$PuMdfOJyL$pE%LMwKi8!7MOK_lq3)Dr-OB(zG)x+uhJ*jXzOc3W8vB1^DRDR+6ThPLYMcBe-aDYorl)Bu zV#U%X2l@f{kqyvd>>D!BQQb3r=++hw0%f3TV|PUW(r3a8D+CkX60;yl69N5Q80(_w zdGq(aY2!PjmF7l|@vvQ#(2JD)Pd}+>cf}_1V+Z2UavV(ob`IsEZMrO8FV+Ay6>Z{q z9IOzqnIM2MRsTx_+1d5&i=VPO0~V5nT0SflRya&k)3XwnX4!M4*JxzSH_W8lfmFQL zTMh~Qzb#*9w}*FcSW5!aKSFh8#{BYG>qE%BnheW1_Oz|JcST_9fv$Yq$D+o;(2`d7 zoJC3Ubc*eTeoDh;c%|Wqi^wM%`~;{~MaES4oQd1X?Dy;y2E4JHaIK@%`wrW{@!IzDSvZwE|x>EU)69b*@5N zY|J?G$qSmgb0#WHGt!s@W9&~LNwq=alsZt#4id<}FFYkcvP$th$ER~^^Hg2MFz(Y3 zWRkd2L^NybRCJb^3^-jgj>-r<8{2$F=z2lx@xu(k!fwHSj8K^Mb5A1!c#(p2o2E&R ztgYNDHfnj3j^}fZRgCrS9bq_sXZa7kZGp^9Q*M-l_`!Je6N&w60#t5#Hm7?muU{(X z6rB{V*-X%Oo}>)4G76okVI(B5L4n-b9R4STIsYFZby<^}K?)hW)V?k|hGVJoAI}dDBO5sI*@K)c-IHAiMq~!z&o^otk9Z%{ z(*(syVm2%Jv#h|@A+7B=SqSP7z<1C?XD>|DUINo%OdTSHo? zq4%Ncq58E`Pn2l#?AqU*wT$^DZ4IU30_v#a_vPpwE{l(Dx`vzFgnn~kI zqeSf#-MPEFJ0%wD(eJoS8934&%i0M@OEFaM+v1ek3@V5o{%2SZYTX*H>uOcb-Q$w) zY5bn3;;4z9?vq{u09!mC>APc^V%Cd-U3G(}2Z8+{_pB>2a~~d?e?=h~Yly$*RlH77 zl<6!ZF#G(~^LKO*?D)v^R9`&pG(-9B!6H9Td1`BCNP=dgh0-3_fX)iw<5=h?iK6Mp ztX0e92bX(sGQ%u>@eJs3C0Z$GuBmJuX`d#~A&iCU!%?bnzVWZYiG(K<2Vi}vzT`A! z)p9%8X`<`3iL{$#2uu)ZF{Nli;O!VHsACeGYA)}y4? z+t0&SEGNn@^uAi~a94_TqW=e2kWh+wB7s_^m0w`B*9O&%h4+X6&cV7Mma0Ov$ncSJEV>_+KUMPOweC`rX0$dRf7TE_FehxBor5+zCF|W-topWmgiN>(U?ysM z*ium3U>>>u0Wd8kiJ_C1nvNdYHWL6<0k2tS3M98sk&lj!82rpxv=s;MoVH&>MwbDJ z;eDBf;%S}EllJdLa7;1n)xH;FENqzJ@EkVlhVsgTY<#MPSyzvKB3vnA_xTALWX9+hG$NXHI7_N6Tb)S%(U6L+1Esd|-mA z0x(mA>jloBkvb`%2Nn!|HiOmHP9YYmveo|sur0usJGoF7YWSE%;>YVNBk(yH13PC% zE+G2l(SW3b#D$H0${nfpWvA>FVZKy!e&^wyA{*4h4P60%r#z=w z6$!G$VkhZIQ+N8WaEjJ<4*p2TM(wbwS*fyLU~*8?zeM%po7!a|;2zIgKEh*HCsF##oY6|j zlGNOh?t-y8PJD@EeZ<@a$Qo{!V1ueK$~twr81Pb}sqgq>_-T8&QSaq&ykn{f|JtUn z6~*E@?eIlxNx9)%=Z<_z(+=U{yG4_&#;)!AKZxmdUw6a^a9M^e3P&?l1()E`)f+9} zlvK%}qpJv>`s=QCS+?fXdg zEc6g~dBogVE3`LWz&7j7vP0`nMWqz4m=TMLSWrVK9gs65G&BJcvLa_Dh2V&c(3|w@ zpwfT&`IQ`!A11kQ@J?>AJ$7%YyY*G~eSL}=;?tq$2NeUFO)%(OolG;kewOhSxO zuxl_>t*-TQSk1C|x}ugt1BjPQ48HbTRxJDlBsia9-!AFIOHrlL+W6UGCCy5SzQS>g1g;ga^b}N0h`LK@@ZluOWLqS>+Bhb)*4{+kG9a{-%K^*XxG+O znV?XcWJ*n=n5O-s9xtO78-%(y^Y~Nhn7OSP?z4c^`ZJs?tphK*r=E=+YAzLhw$ima z^GFU|?&!6g7=B$gmWZ&~3ii9E=?fTLpA=}{4@aMp(K36DA}i}ELY(U7OnQDo|-_~2%b)O@C8T;0Lmn7a_MGw1@`rAKEUDt zQop`5HPEq`O29J-$}WjTvr z?lgEklU0IFB~oTn6E_uOw&y$X+`rXqHpR2UR@0r({?jAw%>nOovxhzQBe&(G9Z2fC zqUI!qr4pM8OPUe3A!sFY@>#qnm>rDNTBFM-1-xDNpORZb12`?0+su(l8^MuJ_Ce8` z7@8FyxbV2qj?g3&vXv0=Qsr&ZGhsvVaNHNG{juPL*o;na%K6GX&0h8f zRZiT$nwIkJSQ260&x6T35Lre{w?q*sI z8E8!fRc04h5cuY#r`%aI7}_SiYq_2C^CwajN;{nP#O(>BL`sVy#*?Y+*WGEfD9efq;C+4z9Q+0hpE)!18q05?GjXWk1&lr|G~d z6#6_X_8_?qM-Xc(SYgv15v00W8x_F+%3A<$k_94&B4GamR1a745DFKf>k;kvp62hn z5`;;E@<3`>!)&(9S-MpsGv~qA6%QsXX{Rk{O8WY@vUuSd6M$zn14*xr=&rY4mMKv= z@5r?GF;wNb4!8(!xV$ADZbTh=@;0h&)i%KNHibEZ$Di)2B~=F&wTe?GH3>5(Xjl0d{$I|=%{AfD&y}}9q+6l+b~?^WWK7#m@Ccf4CRpcJ9{g& zUE|%;vcfey%;$(LIA`JB75+5v^%SqcAaiW_$ApLTeHIAeN@oUqyypR!X=kOx_euN< zl?6ziuu;uAJOxXDKfWoU6P^EK;(q|sJ5Bng(4YtC;uh=~_DtPVAlXm!wE9U%{0^i! z<&}$dcCgCv#f@d-FmmUf^`Cx~O-fEFRc+i zoQR;oCxLXCKljSU;xx*XbZkE7;iZ})Kmgc1U>3wQJj|Vjr-x8HMv1{rXcQ+Mmw|DL zk2iXKyRFG8j)GJ@6>Mr`9d>YyxZ;IYW0%YtO;7vBJ~2!o+I$!SUcgpPsF%%w>59Vx zTz|6{$#UA9Hg@XJ{1^0k-^->RV4D~~S^fNEsIHGiEdjUp}bD2g`b>+!^SCb8_lN=~??FZU>`InuJlLQ;bjTONwCtLPD* z*9l}Nj|nQ`8Lk*fkUC+_O8h|)edy<&hW7XBTeoML*f*AxtjGNvA8IO_2QqM?-|lGV z8G%`RQ!rad|3mxNIdn;1K50b!o4Y@{E#;9b@s05va)Jjn5r-nmKsLa(WXpa|0 zI;P25vBiK)C-&OqTUZrYh)(@8eO{2nQieZ6ubo>;RFs)V@Lb6a>$B*_%&|`9V{n+$ zg3xRH;sHxm(r4uw7H+DjK$7io%CrY=6;f}QK1=@iw%*}qQj9~2U`4ei1VG}9=5d6G zm-{8PfFzjjEAG{D$ztIdxO$@v_r-WX1$w=Hz(u-ZKUK5&*lwDADoHoWVgJ+8t^}e3 z{Rk@AY3cX;83Z3_BK2W-+|gvDX_n2rS>pS+P+qKaQ9UpVcxaTNX|%QcgQj7C#6lDk zMY}ZCoMnbhl+pZRb3dZj&G{5|!2dZ$?WZ@7d<=3QL(}^zRGx+NPUi@IbzXiYpKlzz zXfwDhy&u4wc>=m1()Hy$F;cPcIe@rGV0}Fk`rb$yz3rJhhz}J<5~Wrn28F3CJo-@$ zG0+y_6P4ivGhQyO6U#4_nHD@IvJtG$UM~_$RD0dly~#jQJc|t6W}Ur|OVe9&B7nh+ ztNtC<7Cu9z)ug_g89-mSzkhxJ?9O3!ns%G$VX{g(jxM9anTT&MCOI;TtWzn60=-j$R!hlok z?$-Hn8P&gP0>om8tB1rYeI0KVCmR_G^;BVVuli1seZ6)_L;Y&1Db3n6urHedYoM3D zFf2{uWWcDE3fTW4KbX`mjHnc{M7yu(p)cvPEM6~KOP{4oG{m{-%G2s=%+xvw!1e?C zq)N)(m7gHbWBjSD0UZNAWYAJq@%3BK}WsZ9t)&>5E%xhEB9^lKB; zY2?CF`dZ+I-aF;?*Ys#&m*g+{25X;--btDOTn`PoWsaTaveDbHt@G{(!3P$3na(WOmH;Y$e|$}nvpDV*l6m@!@H71vr#QH!Tf-f5 z1SZh&!X_xk@C7}_!7SfuJ~`LO)lv!Hf}ug43A1}MQcfuC{O7l$1xv5MJe{rOSY{hv z)rJP>z@QGI&7aSc!tMKI$qU*jo{AH1Zg6(KD0EoSmIc?3bs!|5#* z!s}O$jLOoKB4%j7DYSh z%1(oN0+KKKl}mvCks})dmEP%?d!D0?u+d=b6+bV*?J$dDT*d<~RuINut&B?WyLezh zTliqpZP^2R1aK!CZXq=0OExQ_+xCp#=xJxMeWT1B@Vq+|_28@M*|W&#clTMV zKYct#KhD#`Za*(um%u9SatmD9#)bM8&#q$WQ<_HO=6601NXNorR1LPsObEqk7GN($ z${B~;rW@L=`hTqvNp2q1^b!8SPhfa0!#y9KZM@@b&^wU~2kl9UHrRr9}1hUMv0D*p_eQ_XBM@e2MVLh3o^a+jfH zo5bGPp}A(zs}f_K5PcSxN}-NKivfBF&K38t{J+`Hk$rQMmn$P19c8q+-?LUphAO46 z0xrS2(Mx=^1COSP20#7wVJA`BREGF)zsP5%;oh@7l8ct(p3SKZ7K<9{+y$NNN(i0j z0G4G@&x)RRXYaWNN=c5N;mhFE`dnsUL1gzSWjqNo1aD3@JbCDVGV*T3)ByYoVs0h{QxyFmHo(4%J?{7&2z)*A|Z zpK;X(K7a7N$`zH@!|V|ZPYZqW%4WIve@iCvW&Q~J(zNRR>c9fe3uxP7jl}HhHL*f7 zv-mp2IY0f%B#~Xcg>PEMe%`rGjFSCzTTpDZ*iAQ=6vwd+4TTq-Ylz1GL zz>*d{;kYE?Pzmk}I*pZT2Bu{mGwxLjWQ=52xM0|dgVt}t^6(Xmn+|ej8ZYX?$6zI# zDCw?;t|e;vnL3ugqQPI+#$|@?rk3R?><}r+$ksZ*Y z0q3qPUSr=5|IVw|)LsVeSEjL*NsYohX1?lG{IgfK__cqU$zKhnv$Eslb_8e*vVBqs zqA*m45trFrMvV18u?~;{`gKZ|r%~p@h;ZSMKU#aaS}S_K|LmPC-*4w7L0{H#Abh)B zA@~tUF~$kja+XPNCEK^PCkiObDb6g~@#TT_a2^`;&zgn`G1hVZk-K&@gT+=`RSMad z?lK>W?Tz(xV6)zZAUS!{rhOS}Il#pZgPx+Q^yZ>zoaJ#Aw9?0-KjB_U`h3aXu1!Ou z!L1YYdL4#I;P?`0*e}=mJt~I`uRT96;_LGheC92!mmOqa=?Ta2wLu@A0Y<{+c*M-& zh=oMGz6tqujf(+VbOCMoMgCLzTs+7^F8W;%hLQ}`&Z0yxu5$nh!Q*?^^kO1P`}#8NRidwr>TMXNEMKdR~6X0xD*+Fg^yi68MC z&)JaIyB}sd(2IHyO0}(GSdFxu(V@pux_+sTlkUZ{m~TK|LfhB2HY3FJF;0qGQezpu zipr7Lqu+Rar!s~Rg!DzPa#Z29G4H>n{%IxBdkk(Jwd@3U@`wt)8yn62BOJbSJp$2= zUTDJZpW)xGOInj`sj7SVyf-V4%7pF2f4&Nmpdi`T1D!;f=2~`9d6MqwH+b7W2dF{% zZ*jvV?%&j$6PtYqaX+>^8z^3PJQM}}`wfKpL`CbWs;R9k6IrxXvT1Thbx_G`65q<= zU}<@W<^JX-Et#JV10D`20Xi-4^A1SH^u@~XCnP25-?t54VVl;G3T2cIjHz=C7h8z< zsQbMcE9{XN)3G=;j}i5FgWWgk^89I0ncH!Gm#=^@NxxIw z%=cp3vy_#QZI09Z)2dCq=eV!$h9v1Uk&T@c^>&L*HBY94y+f%Z%Kd);xl? zqEwdglwAWqOA)BBn`;ujK)9X6NCsqQ+E#(Cm3p|0$8ZIC$s#AI&$<(I;|tDNInb3~ za^kb3_2Kk!u#+6a5n}RTY!ZhqFbgajI8V z?o{f66^t>%%2a)U#@Tc^S?-#0OV&VDjyM20i=OuKU5C8VfIZMTc?>p4cY@`wwuByJ z#}kQ3wQ+;w{>?VN7fd4Lu}iR|0fEj`Z9H_Q?(Q37{w}J(uT=j>(UnIfy?tL(L{v1u z37j6{kRl>rW!mt-Ij{o7DRIJ}GBa^Vv%zo#MJ*G-Y(Nad21_$VGjl+DDV3J>8cYqJ zhP}#sSvG%v{QhPw)?N2=?!M>Tea_yH$GL_(($q_Ii2r1yi&;&f9;#w;S1YB(j&~9_tz# zX5&N|{pvKN+VIMvtVPrP5^9#$H^d%|%9%>L%wnIiIXw8}^n>i}>vS2{6iq+a_N~v( zD<7TFyvoh3oEP?{$)4Ts&i*uSS#Y<|r|WdVqh}2Dr}%hpH+uFpOWCW!D2vtGwqoaY z-I~hA>C`VoKTGtmT6w?vpUAf3IKQhv@Ru4i%oi`1XesAfSJw~mvI|uhU9tn#{ zKADZU$lHybH_Tl$PJg)Xv2A9-89wm7j+7)@v)k|t^sukR&6vIKn9-P0dPn?M`M}Q4n$p86{U==M^HUpsHb5Kp zQ66xoqFY9KqYk{-`SHiel(QxZgfoK1(fGMhr1Cu*T(m+kAER>#>(1`@-wPekDqX!* ze?q8^J1f+do=zjHN|^1uDc&Zud1WLKU(EO=tB3#6o^6vpdjD~o#j(K0b`!U=&#%Cf z(h_6E(bJF6ab0(hjp0+*lZ7#-BjfRUUs85et$szklF{ehTsTWpkXj?`vgGB_Ny0L* z^V7e-{#yF-Pfq~MgsgbYKYnb;?8ZE!L;l|Kh<^g zP7C!whtF@C2UnH8`$;}{u~RGkv$$k{8u6(i=1$HSGa~o>{#I*a`o!5Us4kvCc=gA!C8q1JgI(SvGoAS zA~hx*rG&h2xLJ!x+kgeFQ&4RlYRQ&gpD=&#F-%S#KE71-@CEeVcqM{DI6~QXVbJ&) zbI%&pyDe>(Pu&+d0+J#(H`VIB+4Avz=eM84jwN*!?@0j8SgRS+o9I=Q>49(Q;s-tW z7!-f(BSbE=z3qy37iHA(coS&Q)xx?XO(~Tw3th*UcJn$V1mQH^LrPOdf}?(R?TRgC z+dulAPaS?B6~~Isn_iFQuz^LU*Xbt zT0ymRdcsp3zgH(>*8iE!DmJKO5-VS7x5(@S3)6Ew`V{;(XYZGqaCL9SPqoFFw&d28 zgMzXHNz$>Y)l=T)#-rm0@5P$_dC?(XJYKY40R=6g9bAb!i%*U$8EH#{fOpCZo9+@$ zW?OVsqsws2zlwtqFIM?;u1Azs{5p2x_{_4-E^=?R9-(EO?sZ*RBb+!||MF}2zu`95 z&QGU(T;;cE`opZ?@VD-Q*v>`qL__7@C3TTIrqAg@+^6KaE^H;=r)Z1X-81)#lc~9FXP~ZtC(8YP( z;{$3MFTE?>(Y#<}cMtVL*)(snY$YicwNg&)EoUSBB>GTfE$z-#r)3z*B=%H!?O3(fUw8$E{zX=Xs7Sp#V=6j zKB^`-n~*ME@ZtEGWZbut{BaL%NPLJ}FHa32@2fiJZCZEV{rp4z-xbpxAFPP|Rj=}o{WtW-ohg~I z{q}#}c`U6*kdOQzuG2m-Dr5)7k9@1lyfeL|UV|6UdM>_TJo+U{hFa&2{N%X~Bo-*$_WrB-nP+f}_#T(oMkErFl4DBK$9X zf-={|>4?iVmfXpI3%Gfp<4;8;uEru=74_6%Qh(c--G4%o?f=Z7vJ9LWlHlzhAKHD7 z(Gg-|`2$@-uLJFWm6KeVZR@>U3+Q*lUJ=`TZ~c0Ui2J&bggFh#1Uc57ZhIFN$^rsf zxay4>hpins*NF-&tX@7Jn2#uJ*IllZUX9N`{FS>}I7FWAd}MK<>&{E{p4XSl(*8f% zIlT`);SH}UE`Cx{Ufg=G`pfDnsmK}?0cjV!cshIKu5A|DLE4a440Jdcjc>U;@s`PuLXeVFf1HOuTNq zOty@s%Ln5B85#Lx9T<6V35`a2FhTJ#Bkc8-8=04DBhy${???RpjINvJ#QyrxcH;dH zef2+`gr2r95+?`qhtRG~AHb4f zCz9*likX0eRp{U?NfAqb? zuJqNhu}e)-6}QOupHmy0HY3-+Gv$1G^W z*L_Ob3lwFKc5TUjbG`==@-1iOuHCC8J{=z?c|RXFwsG-Ji#-*bx7pF<|- zyfmZ1JZDqE%6Iap3XXbGp8(Aon4xdCu$CkOd&k7e1Xx2pzu#n#v(Dz?Z@0 zx+499?H>vG(Pp~_@2Li`j~%c7>md{GdYzA%%#VW}EFWy_iX3Wv*fIqrYr#Vul-M zCSE{d#*!h3kO2n9%d55SWOwos`|bU{<)g9*UpQ}Q8n=oOfcm1Sm{ionfPl9G?~{0? zr_sLqGKSdBK*Zy3KLeDD%i5xlt#ELEsxRhAs-XpSiK=ypm+V#Ay5&6&A zxgXWe;9z>XjvQ6nFHn6Aq>Y!KKD#~)XLVj=Xhkfps;+7K5`DwzbS7iaE?hlR?si+z9Xzby9#pQi`ewx&VPfz)7MYzE) z1h5Z|3L!f+cDm@W*6EeH>S|LeH?Jsb#5v1hkFc3*EoZZs;6Os3wMt4x#h5jMZg7Cz zgjk!jC44&SIUve-n0{|8_{N>~jTcnVdD+bz>@COFN|*j_K{#+GC|tL^!r31ucz=2u zg55F}4Ykb}?c^u%vpV*Wz0u6bv}pI#YzrduNcG&n*y~5mfvU$)M)cG;g)(eEedpV1 z;DIIORWj(brd_Wtn9)7`8PknSyO+#s`k{Qrv7^7a`E-ld{0by;ZgzUqI_=)d$AR1R zzkVpge;oVW$~lyu-!mZDaCd2(#>jtG+_>`NTjiHyH#kdPZt~9eda#0+>qUnld&YS! z7;>6PyV8fNcwVCJ9n%Y4x>fKja;5;hzF_kHck(hvXk(&e?b`BjZPIPkI?EF!j=W{L zyx^1hBF}QTXQirU14da+JKcfE+oZJ!L#-~Hxa_?|mkn6f9N`G+ zUFIg#>xHtrHAke?Ct#~oYvZFgl$w#X9qoG)gY@U4m#hk`Otv-6xl6ryMfVaB-M@ZN z#9C4RUR4@^&Q~_r=TR8uY-4ezagTW~+h+%^Bo8n)0!OKwDiBe)p-~ZtZ90y!KAK!W zKhS>g-O){?lx zfLD(DkAy#%>#r?J-gQ~&T2@~$l6LhBq#$OMvNbv8Xx}{QqP3gVo_=k@oXR2&K5t+}Z!E%<_i{W0C2 zvPB<{?!0GF`#+r{#HZ;0@^gQ^O?1n@Grb5*Wu9R)iV;g|l~Hz-)pypdRJjKLzkY(g zfpm$(X={4^(9WGFPG&w*6wF(skJ1KWU0q=PLqpgGwQ3^tq(2lsk>Nu)gaycNB~Odri;4L0;BeLp2)iyQ&O7F}TN5NVg_#92gStB8gu+yhtUhHi* z(gt=gz5V7u;MG&7b)*0OFcZ|b^kd#|{SKZ*tigkyza$?P7as08W0ucEOMm=!u>Cix za!I#m@%&Wp_d1tN2lxd$gTLe-t}>VXnq65gbPMkMOaMJSci>Aro88`{-r)ZI+P8J< z$q~)%1*apWdv}U@C^Z|31${Ndj8I;-u7t=G=WJ`bc;+d4pMkf>`LII<{K(<#C6DGg zS2a9E-~X0`&=Iq~BGE$Gnhz5Nsa2<3ZqMzF)Vnh^*YY8Ae1v)xvhQ}zpWv?fGb;s_ zMIE7Zm_!-**}gWx{y)`iFeHGlCmYp(Ngf#m7LPdxBm=)4uh*XjaNt%peWw*6d6>Nh zb|61|$$E45dd)hMG%G!`m>Sus)hYw`eQJF&P+}8DUX$yP74W|Q$0T{LUEI=pgX8ns zT>5`HTXzmbK{8su2-^>NE}VS-#iJL{4!czto^l%*rZKEk7c{n=KlJg-`6G@qf=YfCC!{4%7TR%(j3QI{(nR8UC?Z2W%1uA6i4jvemW;CS8)c_aL99(A$4~lsXaj#&tMCo6jbr9_A#)|) zG1y&iy=!HmRW-lYbVV(~UMgi4(DoZ0n^lg!;vN^Y zI#3jcRE9VJOp#^1`X zfp;WTV%^*uC-AD6qkxGQapVbCO}BH;aBGYycY*5OfXurD$bOuAw&2mXF~d z*8lAP+exR128bKYPz{}))C*cYy{Pu-+VK7*M}b#GoLc5HJs#Vh^t3(>*>O9duRv{- z*tR7pB+{~C7*{;i>UnOdij*Gi0TPxpU0+C1rqfofIe%yIU#qkI=(YVc=L%)onm~s1 ztwm#X^dK%k=$6uG>T<#g==fAqN|EA<^eH9DCSMAOnd?CKS2-4>G{%R*u-7I-86(cY zmnNvpxYqq5aR1|sg+t3(YYPLQQTWHS=&M9<=!z@q%H99+VJGZ}yOpbQe1*TI~GFN`t#UEJr>=cYCdR68M|bo-O0j_@qJ0OrPFjh3i)H*Ki7Pq}g; zG!8@&`?m5Z9z*!O(1$^F;dN97#AGy-_%>+28yyLc`4owqs`weNS|yYFfHz4dIH zwyAQTgEJ0nc{JE}A``O8Th8wU#SBMo=fG6JV4k_Y;^YSfUl zHKeYvM@|!{z$(i1a0&em>_oe#E0_1K%ypiQ>GO4hUP#4a6wEXyrc_bqw+W<}r^9s- z8FNE5P@E=8Osgyt1pM7VvMzg$c{)4NEJM506_Z@%_Fp;t8}!Ne@^Oz3^!@JQmoyKT zi@x6N(mxf(weH8JwSKmQJA+@VPIOjH=enJ;?F-lYDm34+)VrGy5$HQ<{?bmzN@r)b z`|*zf>_8Qwve-*xb{+>jdWo8nI||zH$+I9Wg+bMr7UAfu;W)o>MVQHu<|Gr}flhH) zCG^J;cn}A8bgKrM-EtMGjEMs)1EOoSNe-pS|GKf!J4;`AYKzVDk5SaIJuYqO!Q)9%eiCCOvK z-cU!kZT>J#3u}r!9(2|!eG0jLQm0Sj$A~YUq;a0)a(hpR;0cEHyV6+iS3UN`A9{~o z*n#N&#yl3kLA;^toJ-Ne^is$de$0{3w<*xhxT)0_q!rrB=~4bqSnpggoo-C7T^;o6bQ*Uk7)*AWfIznYpcPOn!QG^dyr1e~}nWXf7eVuA?b?g=jm9 zr7K%~O}VAzc&YzUOGZp*U_gP7!Fv^AUl}5I3aywY2X>V zRc^la#dSI2QJ#gTbh!G;zK4rF+kw)vyLjucm*(-gRlzlqNwap$bdViDAyKqA2=S5k zNo3CW$*vr@3t09|^yX5QGev}DPta^(1K@1fe4ODJ2TN#pBn!eZkc=afwh_6My6cM>dFB^QAvvg5g};@k<5qR z97~$F5kwhM-Hr#XAr3%F|9>e7b^A7=p?N@#CzQFI1QO{1-5011FwocHGgr_)!g|po z8Cj@_=ce0%b{bXkUIQ`MImV?z%q3LVAMZ`yJ;o0hwdnUXtrfjs>z@d#yFyVwE%>jI zmiJXBYJ?s$S|`-5gLbW1+tiH2+8at`sF~`{W^;u(6X>`N$8arSWwBxROpNBPU9l#* zIP@00LU0l_gqeO3d>9|v3E{5u)-?!jFco4YN`AO$!G=P_8L834V;r7Z8aM>J#PHo5 znLs>^A{R7_)3A_G*zxiUdD^&sr`tYz?oYGBIjhqH;=ImJzetQ3`%oGPbwo!~;3D)r z5XVZ|L(XrmUs*XT)PttwR&?rwMk%dqM?Wd#&pq%=+NN!?P;WC8ZrhOB2`yVoYEQI( zc_qsMJPdHeGDaY*(Lx}DHKYm2qD-2CIBNqneam@-IVBg6PAM1?Q24Q;EiTVAkKwJP zs=)Fm;dL=_K$ja9fgJ!^0orjp3Y&O)Z0EC{QKKB}~1UdAX56r~s0 zVKyyCCS4dA0 z4q5u5jTLqyevoDwtU3vp?k{UPGiZ4{*&L3q3alcDu&Vr=xV=PWTn@ldsL9^fE|#YET6^4 ziOtA3)4k)ns>UF9`4_x_AL@+Um>u;Zw`xk@>^Rduxp+Dq5V&#~+@&yj-ZUel!8`?#!3SsmYD(XI2lT=y# zcBFI#Ornhd*mpWB2qN;@n834yh{RWPsWkL8Ro^nWCkS4y6`1XaqnpjgltiKuplGU?>1#N~T5c&)v|dn+u%u=N9(CX}idBO=T&RIp28h1RLrOqk~*4CY{l7B<`cvkJRfs zHeKLg8_bWVm<&9#5rz6PdaDlY1Ho=sX4*c;E3?Q^`HR~g6oZ!G-dIM=Q8XZIwvIm1 zl?*Xb8_zoc|H7{-AQmNCG7v|xn8YmKq~02WASim`vcUMJnKDg6}!GtTBjkok_tU# zqjGm$wd!QkY%S`);lH+bJ0XXy(oc$$4H~e7Zm^<%jQrkYF358$pyS;iD}C{-LFt4CFy6OP=q^EKv4{(z zZ4EXWw)Rr$E!LAWyTM%nTcgdu#9qOO6Ka`ZqBfdO714I(AL$#LUi@;vOP>RXv2?Cu zdBHX+eV-%ETKSB0K8$|3$QYPFF1NpU6uY(-UL|(Pt(AU<7T{4Q=!htQ=?S5wSKYxx zKlB!<(PT{DiQ0G1}0}$e1LyR_)444FA zy@n$bTLc-Q4k52I1U7&`fvQR!&BmadfRN+D^+j+y>?}^@yo_yW+8^wbWJnYJL0a(l zEXQi|n>36?; z+3KE~{uZ{eXNy2krw({1qMqzLv_LJ$O4IZS$A!8KRxmWGhe6t~^9Lr$e<1kgN;V+^}7grP;A%zw=<>eQ!E84Aa<0L!9jq=qSYCm`k#hH1F zPs2*OE!nB*;%&o_dj5nQ)&Oj^Tw9j{P1l?ai?I%HfwsqRgloBvoLVj^;u@qpWkOwv zp)AlcakO085{VLyEi?2KgcHT^O@Vm3Q$X<8o>lyBR{(lB^-)oDJ|4=#~^HRS8oCNp+q~I z94#AJ#qk2OX)sF_UZy$7PSGC`*caFP!=C3@XTd)(dM~9!NnW_#!^J|%m;rX(pVn?0 zw8H}MR&c?iq*aP957MmcR1wM^x@DhkvUe?GB9yqynrE4i1jvdk{Sb4mIpG!McE2B?Fj{j$sc3*X1wF4E z^Q@G(#5&73`>!{3ovoGxRt!h5XXdf&kI1feDFzv|)@u(x2McW@C&6Ax5Sg(xlPwqh zhTcAeHp=F38Jtz}_M> zI4RuBAoh59jSKCapk;2FNWT>hl)&C@M5$2O=H%fy5sgxnEK><_BI7I9A5?u-v-UuO z@fwJ;pP97rjGew)SNOVBETB}SJw#fh1uI#&8cI?ZEorBq(=bB6DZ((ehr-`K2>7ce zaCoMflMJvHbkqwG5B&v0!0!=w5Bi90Q{L&Iac6rm>_NrkA4Imz@j$s)3~0ia%Q&#= z`>;{m>A<3$8pAM{peHb_1>g&BtxqKF8EP(}{i$GJueq z;Jea?UdHJCk47~5%d2dW{$7SxUgDZ}_4Bt)dg}=T%0glzfX3OtG$;Ei{|tV50x`?X zl{nM^7wL>3IJ(*gPhi|I28o0+Xep4QgaFtqaE293r9;+X=!YK=V=H9=YW9r(xk5ag zTF3O+G(5(-_PUCv$RgXe`;$1O zIeUF#-<4L}l#eE4Bk{7xwzZJZy-S7c*El??K8f~a3>L78Hwu z*C9ifSq@|UFbut4yvhzg0LeCf@vTGxlQ8U{&AAJl#Np2-Qedp+`lJ`k$@=)fE8VuG z$L%2_U0iV6{cSg@4O1Z3D!J5yf}T*Ddm9Y5!uyX4T(2l@0P&ie7JafnVI9dV{me|j zLdqPJDH^AH)gl)Jd)EmO)Qwq+&AKOqnd9WT%3b&G?0FpSlZ^)C(H(V>u@<$ex^`W> z;I5ZxIV9%5S0T9Dy@_UXP?(T$`OD(Ex^#_U(E}erWUEQ!wcmrq^FH(zxGSn~KlEJ@ zKCx?iqBG4l=)|)X0Sg`P5MfI}lA8l2&Qw-Go^n9XaWus%r4;$~a;4(hQ9LbqZ*}6N=U9+A$&SKoX*kk$ z#)T?Kwk>UUp2!G54mR=ww~wQ`J|6q@MoayNQ=?Q9SAtD1171@1rOU3FwQW*5zHn^L z$!PBC<<0-pw$PeW;X=!_I0~hrK@rZeB24(#CF8T&kp0n@C9Qcr;$WW= zC?2O)7gFuBZC7j|g*f|tk^^B+R(&BN2LMz@3veK!_k@yMq!B@n1zN0+>rQHFE&~=bR1~#v%K** z+x;PFfTi9C6Qz47kxcc|=-mxt!HtMMhuZmsz`8`TAW5&$Ht;As`DOdPx}k-AoOenH z_i4A(;@X`>vCBCoK81;)u^*$tENU9i%)r9-ohj=Jl7ZLYjyn51k3{v@8%#embI>uB zO~Q%&6`<~R0n!_@=Zrrs1&Ac2zbip4dv3O}YP1R(YeKT|S9TQ@(2>esZp|cA#QRj* zz~0WZC8FvS&KNO9Oir{sJ18T`ThgL}{*!RWmAwUc{*)O<8T}>`a7#AsFx!x{XPNF` zFW9!Mb1k=AaaLb(6H_}{?8l&b6v_Jw_KF>%-c+4UnEi3twEyms-DUSTE6rQ;7S)#S z5x0_$`9oqfnsM)eRN+wIQzC6aNt;jd5Af?f^M0;X==Yq~6l_LNuj< zuW3K?n{$mO4>@0>VgC@#R!vVG@VNP7sL%Z0CVy*ZjxD2~pRKiOiYXBt`t?>HF$vsl z+V(5RU6PfznmE{Wg88?f(LU+WlTcr9RH%$JHndXEaOFlGR^%8&6+dZE3&%&GOXs_u{{BzCOy^oJ4o#|tRv;ruJ zY-1JX>v6L`+Z+8&g5x%J8^)zElIz+t0U+hSae;w?7zM<6v>eVF=lnrQXRsTvK6rf! zR-%Du6tfuQoHrn1qp>a?L&uR!)a46>ki?;}>&Z|&o@@MJZ@7V%#i&A28M-Xb3OTzW@H(S&NA<=2 zf~06oi8QdhG+4SEt>CIsHk__)=P@Jmtd$%_0 z!f{Vhj(JXp-Q0CgtEIMEq6=oy6p}#sCp1sJd498TJhO!)l8t^iCt|a=COn$bTyrS7xW@DFaXV)5K z8n`ksnuFEa5D35J4I$)eGuw3?vI+`*^@7AC` z#3=<$Qj0MscgeDzNuV-$EIO-8krh+VX8pZYYm1TYXt{Y6Y<)?Ttu(lShRR}=gE|$p z^Jb>br`n7rx|!EwPb<5+3U$o2>}m<*sf+Z?NagP&#>BrpJ;`b`jrTTgm;oOvIXs#s zYv2UgvlwzeTum9od47Fm;xemW2;dk^08qElgtwbbe+VxNLqCC{nRBdYmYMe$?<`E2m8Bd6wzZ2 z^vrM?pjVK$`7yA&ByqIYnQe-VdC0SNF}$fiT#{UpY-^(IEjc&l*6VE+_m^8)#bH@J zKjH&T1(=7a9~?Tq>VDubQf5wZFp$6^0(?bstiTt?HCK$P;*dL&fE-vjj4ofcLxf4e zNllFhu}EiIZ9}H4>*z=;lgrKvsaL;GW^E6PZwu*Sw4^o3iG3)zye#c-zWn3+hV6!@7ZCBW_FC00@=vAZOp==yL9b!v6~2g~KXe3AX$^vq1xYDrcXr-mCgGXaZO zc1hN>sfWsG2V_~!bZWWQ1klizfvdf~<@yf%>Yi@?*6UwHDVstc6ld)`o>UeWs8V20 z7mjDcN4f0X*2dg)KMtPHyBdl(qU;C*9Tcw30>LhM`Wth&V)rIHqxhNU;ux?hb5(I8 z6YVG$*Qc47@!O4^^1I93u7 zOmlA>%fxZ>Ajy{WkbcT>nNogTBYCMd7Q@Gz0DL~_F!{EO2eja9R1UjD3kPh2uB01j zayE9y;L0uM?#iri|Gs`4VvZX|ee_!mJE_Xk$)m$9#=1C_ED&;AXoKP;Ab3{?!@`(y zRaw9usev%`OTZ(odoI=aT;iTnxC9g+5kWh*IYyx;TLQq>Yfc*6rL>f=KIi#XcuiVKyW-j-OnKX!1H3`n(tH@A46$TyaPw@xEJoB?27^|m zILTx1QMs6PJ3d?X5F0aZ=?u8;=@w>snhaGxy|%I}s$wP%xBYj-KgHzBuOGyx$rfb9 zJHO#PTYtM~`KanmI82rWl~+p|JsA5MCoaXn%|X?&?2XctZ-oI99WM(>cz`k5;NqEX zM|mr9VlSp+4d&+LCDVrIW6^}~*b{12MKF{pEh+$P99|L^B6zrBk++9&mP;lmD|(sH z73Hn#ASO|b>q0ZVHMS#d>zLFg7l-lZCieLR9@fd19^n4HKsF5ex~nq7?`vfxz=c{- z;(S3nprq;6j~fwaFB95A%b8#^Fz7}21S+6VOP7w8Z&cqsYHVEGoP0D#?5Ca%cO9l@ zTTU$Ekd;qY^*;KLMDPVd9n6u(16otClj=2fHHck~y07g5nqTSOE7}@GDxv1#wq0xR zt(K1X!AUlL?(IMy@lNh{VhCcPxrBu)!#XcRU%M4Wu87)p*cY9gU20ecN+%}qjXaAR{&IgN^CqXp$nP85$I-H~2*dRyE z|FwJ7Lp-v`7YxsWsA)?7WQFYq12b2pP?w&Z>SuRuJXv3z}2Q&l#;Kws#OO6nbM#FD;zo+rQ!`TNgor z(LuIksf`vfzGE5iJVRR904DQMbtk$TbwJwO!D7GGm=;#nCQjn`Go@ME%UK@F3_ZnwHVx)upGwT5x-nWF8|33Z3-T z1ti0V&bFN)O@JT{dsB)>SY4W7FSpuc08X@Nv=zQD>>3WuNbD_P>>>4v9=$d^s%uCM zP$bId0dcqkjbZb%07`*3+*xk6ZhRllFk^O{MyJSamz^X<>#!C<|7GhiEokP004<@D zi2#%fZU*alQqxj%C7uj@B z6uFG6*O&>t5{mkE+#d}4x+aIBxwePHtA2v1V~4E40ioUX{(>A`C)9Yw&~C6%r7e+g zuhu!Wn<|9S8^t#~Sp9YFAr>0U$QpljxNBYzrc-_+q@$0^8#X3Pz>Nz%n`^q0jaAK& zvPtWO)q&WAAmbuHS9;>$qYKP0$GJ4VTMqUK1&4$i+6M6LZ)z@S`mYiunqqovv*JdB zOrmmWUgV(ttU|yW0O()|R(ssiOM;a`6JnnUw5omJjWAkZQc(T6i)4{$nOfkyd~n--K4D=O(m`*`mh@hK0571oR7MXrD8QNa&Cn;B zK>HFp^S+F+-BIq1$U}oDl?*sRJu32)a2J}x8i7y&kh6oAm1lug6Gbq9V)?KnB4PSn zZBXuyCG+S?Hm;!Ypntace5AM79q<5f?z?*vdy*;Xm#6b$nDBGdO!W7)#c>S^C{YN1 z>VRcP^=IXs-e~%E2_^qO^R$Q&Vxk}~Wiut5nihkWwIofbpYz3c)1&+ism@tX@5Nyg zC;|nsNXv}+;zdS*JnE-SsLeov%#crm)6OMle7D3<>U`Aeb{5$eAWHu7Vc)QK7CUx) zQ*S|KkPh(U@YDhiQi;nc!bSMT8yCtd9r&T$#|!S!gbViUqkv>AUL~J`HfPM5jUDNG zwWQl1&SsG{hyVs9HD-?*W5juQ=t3&Fo`g2!E6%!WQ6-)3Fpi~zn7G!iqVn`;w>0PX zz>@;s$*zMzNtGxp6Ox=h@;7u1Jh>RsZbcQr0~M&ypwCKUpyg#jj7uvuZMTAnfrPAL zOK7x2dWMzVZ9pDGy@t2*@hvcP7WSPmYei!pHGq8w$osOK;*7pyn*l~#v_VLgmV~l^ zcDz~3#G=1y+KS{K8u%O$N2z3eB1|6Df%t;|@ZXv?hBd%HWvvu^tBI|BLMRr7bz{1Y zy36Y;>>VJtl0!6I(wV-lGsbn*g~wEvlkC81rAH~p(@dYBBJeJ}OK!v1T&}|#(WMNJ zP|F|)H<%m@&IB2Wp~*ZbJ%;0J@G#ibPM021EhE9`b_Aq*BaEfjFwU8@659dfDG=cV zi`$ab-SyT?iLG(zVB&qJdl&hr&J} zy)YugUO?Znk)m3KKjfH`v(~}5eScZGxYeU;TWD=?ckbwzmK;U;eX~}iJl`$h2}as{ zxE{ViL(MnL06Mq{@9+?XNC;a7*#$mu9&9ZE4GThMJq*bFb-D;`Ux)=DZ!66g`?|8Q znR;A{OY)&|S2iTpv=OUaWSs))3otFmY6)hSxz`g>;xJXkntl>mATQGBnS|UtS!A&+_7etzEuAQQT~z7T7U3{K zm|j+(ElzoTgUuSc^R}}mJ)oX_=fXOin#sm_QY^p9Wj9z+Rca_ z>PA%94g2tEoYdI5ivT@2VXm(T&>V*d>*i{FG00MiAX#hyG=|@Ls}zp;@(?YB^%ckx z=Z5i&i@R`+JgjT*MKhE40-D$C`EOQiOJ-7&<4BehF8$(op?1BSPIMvOu2A49Km@!tpVhONAZ|0M|y~zV!H6 zQ|dNS6UQbnS8I#b@+kld%VNoOgHk8|>f%{Kv2hfJ_b#ukKBrRT7HUg0m8`+#UBsUd zNSdD2M>{N-I0md`sXkWBTCUenCf3r;U0^rH!bS|WFvmI@f_&@kewADmNWlpdoAsW` zvgnNxHO@I;nb9j~kY6v*D~pOh8go2 zK0<(egljK|FBf4M+REL%5#D>eUjQj;DS^C5eezY<*wA}$sq~jUa;`Pv)G4*+x!eOQ z)T0j1tIbtY%-R%MfHScYHE)5tgCjkd(}S4it+$wp^d}A@X*;)k<&HJ}3p^kL#a^X| z+@;Ht!Pvf^{Ri(iY`Nruvj6Wi-yOGP?AKir49!ZfoKIC`MG=oLTLc!4mwQUI9jP{W?pVCYQw+S;s75k9#!Bm zDXZ8zVv-TJ?_9o^=vJK8aON)fErD%50XmT*Om~_4zy{l)S(cZaZm)V_l3cgXv}|qB ztvrjgxS=d%+jO{vR!Q%&bjd9x&Il0Q_8Ki+X7(3i0nK3zrd%|>Tpj7cmlH}NF?nc)rjm-1WQ)*R4KWPVv~y^wX{ejn0z%u$W!bBH(094s9@k>C{XTtvf7L%e!1LUn z`*7XYbviu8qHh31Jo4#00N% z%BKd45L^d9Mxt3HkrDAeEJkg(VWIiJQ^i1aGtP1M6Jk}vcZ(dv&r0v3<*0b2Z)3>0 zjMzH|t#Vv=2YtrcpEwQpAAYy{#|DYQ%EtgCw!Z>NhkN-?hRlBk{bnS$Dxj-v!J@@`Dh10eU3#> za4y~6HnBz5MI)?5U{-fl%qXJN(iMW98jo{NRXdsQ{(iUm&h@;&X|zVz*2kx)r7-7q57Dm$^xDj;Z_=YPe<3 z!xBQBml5obYgI$Bg`5o%!tA^L04ITReXJrTL=M|`%IIXNHSr3-5!kFaIkNS$+8u)# zvBWHf#90Rh?Gy&Yvqgnj2)|JG&YYV|%?~H9*l>bQn7Mhh+IG8l`QpjYWd!`Xzz2+@ z)5|N)dFK@s2h|c+<^YVpBy>3_`okWLBLdgy+5u==f+!UAmT=i$7ud&^5=jwKi(G^% z18sfLy=X4zfjF{2z#+0yd)-SMDnedrr54j{9P*Ox4YP|`ZrN<*(~7NBegbND3Q^wK zse`PQOwaB*VX9=eW6|FA$x(Grcum~X7=2n{iq9i#V-?vuuEst{>6*G@%8YwK)e^j6yg!yd0M z2MH)tEAIBYHZAC(5Ssei9k7k!VT&H;Uk;(xW_w48<(&ySZeVI(odDgM7LPN8)ZevU zJ=a-Vks_PB&O`bJYBx4=4@*}?snmn4&xfq-M^R_ml8|?Dc0>x3gKdNM$;*psUY=4D zZC?=|HkSM4fbn~|3;Rn4act9ot6dZTk-pStYv*_S;S35bd>zJET07+qr$lv15o-h% z7~kF2a;Yn;y~>**(dAY%#LaB2)Y|F9==s|6uX^fgf*$+7av8blf^*SO++4}HD5uA< zmwjlVd2GMv0w2cysT0CNQ_{+&2Mne6A}@L05!j+-g~p`5R#!s}LvXPo3MqOBrXr}8 zbGbuRZ2DP?0(f(I$iCN466cT>_)&?aBD(XWHHMZgK~V_-f*f?P$i3*LR?HM9 zjQP3-3%uzmF)Vc(b$RDW9%`+vayk#qImLga&xN}pS0{NZ|8PHhAC9wkZ(>x+>8KA? zB`Z7V20Oy-;0GBYbL6AAD&ODN6d;E8=5Y)cw~na=>i4;q(Y_Wn63=0q=#n)4O80ny z&yZE8h!=>}dKJ#Ay!t~XB)-*a6bz9j1 z@jf9WXers4uyf{*v-@s3SijOm>!rS)Pq454l!n^{XL3ZN$MNpocTyjy&h)HC1^)yb zz?%+ki?_lJesM0x;y^9gn^xcMYDIRP;o^*PxR^+8WGbmvP7?G$6%Tv5frswjN!`vv zv;C0x5;pAyxsr-nbo%OK$+5{OuMUpx`o0-AyPjE=Tgdj@ci-S<(jXjDaL8#GziRu4 z^u2Hf{k%x$xek49vRIwque1JED|cyI_suNv??y)bKI}XH0H^Y^5%u`V+!)MCAPlg& z8()kVsI(@Y(MrcTLfy+Dzsf=(%F+_mmJ~NCL2ICBfvup(yq4oo9-!+*4El_Y6(dJ~ z9kO_5TUdU{cOW21t3Pm>Aw`p~W#`)4(>Z6o^M83IbxS*inq*9R`WjdK^w+pPuv}-% z$88dHp3mm8nCB^L0a4+Iz7Rp7S~uI7-LQi0s2|iwA3>mdWjuS7RzMN(mVvgON1{O` zE1?X_ka8%qDxN(YY~N~EUW_4!M4KwvRffIEeS%Ki9nflp62WHxr$XxFR1%%7-o?0bQCYotPeG z^;No(eQTOm-^kDiiGf-ty5WatjW{NSK441hVeLtx*qQyB_F=2G;EcJn9Sk+6c&CWy z4p=LbduY2*C)36@$ASsO9*rYz67Oz2;QgR;jDh&ISrm0n_N2S+aokV)$DV6O2`6WN zmI%V}rx$rr&qx_ z)~hE6lS{CLN+7bG4*8EVc-zND@zb|1Q_-gyQV(h?lU&N zYSv-6$8%ZF$-nW;%4nr-c%Ns)z4N&)%4d^@8&m+H#>oKGwO#pA z?5P3C8X~E=Zk&Db58OD##qbK9_p_#4x{Sv#EbCWwOkcHRSVis2N61{?{u-l zX=tcLr4AMDRE!Z*hyBkabQk*U4%2b}WOiQCYcl-ZeFX?r!ep(m!6W=D$7tkzyZ;I6 z>e{PZCb7Vg<9-j4{p!vepQi@vxtHEGVPo$R`-^_yrd5Oh%E$?$mar`QwNhU+6|MC)jS$;I;e=KZoaV3-t!%Kl66wk{g2j`cQVu#J?j@_)V^3QbdR*7ZLHLb zlOGM(CO|lQc0^CrbqA^EqZq7TSMXhW-znNDC!Cy+R|wXJ1rXalRWCvCR=x0ciGlv< zKUMnP`leg-sWJMQTG5B?Ro+Cw`WoHr8(d$`Bh6;orgI(7Hb!^9W7O8{nU4P1* z4$Q2MjH3^)G6%Hf)Rz;$-sF1Fo`*NmkZGcWO_jW=z^{#gNxcz|zDGF8SA?#Ku2PI& z=T#we++c2krTjSjGuMhjmUz;Xa5vvRy;BtTYT3mGpM7gJ!F~zL2Z>~8;3Rxjm0@{_=dT7ZL=Rq&XPvmPPEKrAJg<8@(-`z+-!Jba^LN0~ zlg)S>HAf}ljEb1^*{x3%?bN{RX$N0IxGrMwiyh(U1HeFITV$c*(JtFb$uq0^ZHEJo zkhCttHJ-@A6)u4f9?(-KvPGe17eIUHVftb+cLXKxwQHThc}1{ihOxQE^b3GAUM|Sy z2K`j&UP;_E;8#)X7HmWh)g{ir54!8h^fa1E|XZ7fXjN)mVVE@ne zrKpf6iqHQ(GC|1Ojm`Bws*I}ly?2tUoKBHleMi=G^mL!$zyA5Wh@Ag-WnJisjsGCm`!h)`Ao*u^Rp?_^*>kw|+lwT8@u~f(&i$F~Qm7XQ})B)0%GlRYh2_&$iuX#p&Uh z0J59SMkw%pSuh(P;L*OYs>{W*NoxJI`)%G{cFMBt_(3OeB%qU@Y1=f-dS`(Ns(mys zEVNF$AmE{9v;yC_X8}_55OiJ>_SMQW%MWi48LA5p|3x!i`r%xc_`WsXdq9ea*~}{b z@L_Csqe3fc-&C(IaS!c2_hZ#>zo8agb6sna$C`_PrQ5+{0wQ_kZ1IX;zFN;Gi1K_j zpFb_!?B2h)?7Qla=~<*;FkP)xqB{3G{}92AL_1#Yg!HOyG5DsYfrR_(@c9X%9`KG~ z`#nL#tYd}jLEC~~QatGxVqg(`eJs>IH5?IpbNS<#pFvBUdSeF0xyhoZV*JeEU^5Ka z7ENqGUmEf33_H9Y0jQ~XW7;{NSmo-npToc1o)opACNunZ_sS(LTV309|3eq*b^GeS zMqbz*YQ+EK8{>edoH#sUAU+;j0}vk8*v8}ZYd12{zuP8EuXB0^(VdGL2WInK!rU`F zsvAR*?8mP*{MfV~Wh}9bf8b$X7EEAE{V$%G8A#1(+U=J#{8Ho47%dFPilY;xH^%mK z=Z@5%cn}14h zhL_>toM-Fl?`&I**-yX!b+F^!Z~X@Xe@X5bJN3!wi)_`ibl1iwBWAEWZjGvgwyEAJ z&>R(?V1t^5?d`-DM;wC2=U(0DYus{iv+f(sI`XPW#h^K)ha&1OJhky$?q4<6_Q=|I z&V0Aw;q~`sIux)qPhxYR^7AuIo7q)DuCo<4eN)pH=kU?jls`n2JJhH*i3NLov~^@x z>yKr9_@8!8T``|zEc|`%-(}YhivM^xNrGvwp}sb_tSI ztvU7S@0Lb~J}kXImC`>|^TKJvLV%N>`U-h0x&p}Y@;vbLmwpk?0tv5FMbhVYWYIye zpy{m1!6m`J^58dzmp;@sT^=gysuOe<2>$o|S7@PT+cCafrVsgE?Ssi(Ya}auqECn~|b$@pU2l7tK!HqMiAIkW;m$*p*004|HstWA(5n zzpTk*zqMjx&YV7FOk8kAO>^wt%sd|_2Aw~-Woi4AFdDP<@qtIbPtE!>ioc&)M45ys zq^@T+2QaN4G_CHSYsg0ZRJ*Jex_a;Z*0Mf!ZAR}qqP?0*2-dt2xjjkkYP_vX=>F9? z6uerzsAk6U*Au^neRvzPN{hDh`0M0NPak4xWd)V>XvK9;w*;b&`0MxLHz|FU+kx&p z<~x`miv^mFGv?0K&d=eBu#Yp&;Fao2(}^?-MOJ)LV6@bl%p>|ASsv7;8h$NYZ~ap7 zXqSd?wyP%orsKi_=10IH4_=NT5N%&~T~^Kok$Mswrpi97j79w(;P?!@Qlr>{{@+?w zXKu7cH1PHF_iz)ct0}kTs~?FioM)fY*=x}^T2tw2s56_^)8%p2*8~iR$i@El8otcN z;q%CqP(5X+?8ov9MgyS>n1{`9>e!Yyp9C*hn^QFlhS%=N3DzGZ$3%^}-mU>wr;-O; zZ2JdoYWM8_60W_f@62f``>oMKz0Q7HRQ%qr3JD+nIdY-<=C0l`vgO$d`)`;U)V%%v zb?iOa6W+l0^U%~n&FY9BUwq@1_n+Y2f0ywUl#`+U2|m+SSGWIgt4U(fq8rnS*4Z81 zeq&(e17KO75&5ihf3fSsvabeT6|dTSHh(Q^@*VI=xTL7^kR%+%OFd55UVNdb-a5S> z)e=UK4bg6m-g!e@qmF6l9f*Go^y!?U50e=U-cgdqdpl{L{ceA6=$*!P-N*hzpEEa1 ze%;$JbR?*+x^Yyp38aay_CEb=%=2aVN13r(rOL5?;KL56b8Y>6Q{;RH9SQ4T+Xg%xqS=8Wv?v)$lF?$s;hSYfsFdF)5!0y%5!ux6B5&WsD z><-t@KbC&}CO%5&yLd7Xz=KUeu2p&o+Rab%H9 z82_;J_BGN=`|E__$j#mei+8hopVe2EVc$^OZr+M+UwRYY)7idzjy{fVd;hri_1{&? zn2&)Vurb`~T!YVBzcc!@Xq&=J{EJOZv0tnB=gl!a9b~7l70aH!a}6cxruQxg?*F31 z#I^-Lc)>eeFN(yL9j)*y%71x#c4eYcGpSBcx7RlTFuTD`n4@{n{&=D3@Ou|>y~o;n z-nWii`s3j4oj%ZTkXG2vZm8MNAA^&xT(Ao)9wXn=tP8yu_4U*-MjdcJBbH|MM(eFD z8-r^b*PVI%`BIDQ`W@eM*@LV0eNI~lpn9NBxlc~8NB@bMw$8O)=gQjego~YCd2mykk|J}Flo1FDkkG-~uDyCdu~A29 zWtQdunP&A#mPBkJcL^?p-FnIbNW|5Hx*oaZ-;q(v|C(o%y z0{5?)8oR9*GV&GQIkc2GPT<|A^DGSH=z4PCFPdF2clm*{F5BbicA3Y% z;rli=7zNdLML68B#)i{H^sI>L>d73)uB*9Ylqq(}w}uqv400h-*Hv z7Ox^(5*ONU<&G~4FZ(lbA1i{z{od=1U-HdkPv8Ibn{e`HPUz^f@qpTYm+h_gP9K?F zo`2=$JpbQiH7naTZs#A&3T&tT^Y_;N_kug?w@XK+-Vp_<4TR#AA5M1IC&k9I7%k4~ zyx`Y0#4p_%CubNL2hHD~FZ}Z#+Vd(~uW+8^=dJwNJ-0P?R|;cVZg-~T{8!^>Gn;aC z#(J@_@|(JtTubNBXRfh^vTes|?IUW1c}XiA{+N_W z2%8`mw!K^zB0VcvG1J^dY?Kyof@!Um-BV`u{tpCTkFrg z2^^nIsQ4;;1$P-#@I>6cdbDX*<@cR^$7!3Z@Wn{f{rfk42771LWiz1lVWF|N;_kRS zLAw#j_lqR=PG(;nh-$g@L&C7v2ah(1dS$=p_}@%#!lu6CuirnSFMGJ_@x3L_Bsa!y zW$2HyVeO{(TXcV1``@uQ3&}ZMv&aHCD7*CW3-5t^0A{?I-IKlZon@-9&li7Vo;r#vqur54qN1<&#)I2!QXn}uf zLw&hrH=;89oyDnvj+lq)u=e*5jv1nWJ7 zM6B*kGaU6DSQ6YHsLcA)FL=lG!H=gKc0FEvksQ4vf*W1v_l>s0M}z$LIpZvAxc;*$MS4K8vI-|PK9%;oov9R0oP*M~tz9^dR>?l{h`IL#Zwm5Dy}wl8viY>{__rTQ^H|TgHu=Sr@!j ztWlyrl(JpY)&87m;vXMQ*b%I(XQ1DMzPlGKA8kBN%lo2xpFHXJ)v054`QY`pXP$4} z+WSz%TyyEk-hBmvHB?1?&Pld0?LPXX?c;Y#5$U_OlHPq*+<3(2C&b&xvsO3KLf)Ts z;{1w?zc;mDS{bbz&c2#aG&*?h#p3IQ;}61KeLrdl`gIVH=Kp6q^2YE? z_$(`a(k@5no@_C4^x(Nme?-Vv>apcEA?JJ#hWu^ye$uYz@d&x?rIe&xBiviRrfE(0 zo{3iGlF`P#lVaOlLtpd$>^rxEt_v5V{<&m$5Pt3PLRMoy+iUZ=)%O3LeOu=2ellhF z-(}*vOi|K4_s{!ZaL)e0+PRKVj(%&gxcpYs*q_rIvhFUve}BSC{>DGhF8}Yc%s&n` z_5JrOWh`eH|0k-F6Y`JqXhw~BxcN1C&*C&;M(}&gMy6+IUX}g-`X`xJLjMb`I%8Ye z6cN=gNciqL<`t#3Io4=-lkU18-YwJeIG6i*)X4npWPn%waYa9yutm2>TJIaFp$nI=D zEbDGtdN1+&emAwb?^(_YwR37%h_Y z=JjUkYbj!IHEwBPYsj0&zmBfll=XE#WlK**#U#ftcu#v`muA#zz;eUn(3R$gsDHfY z-&u*U*53?!y?y6l%6wk7p!q)&Y0FP0(z{~Ts^WQ5t)0P#6!d#@Uz{hS6BjAS10r>v zhxpi0p;b43XFVm0R_Xdn&5f5}G*B=0-F7(tn2zeqZktanf3_A|=?OeESp7O4YWmS) z{|*M!OKSBc-H+HYh94*-*d8A0yH|OO1F6k~WbRu+y_6V4gYuJk*6uli?P0Egsphc@ zWP8OV9rZI4xMy}Q0S!aX>Am9g3ydnC{IqHVK=_=kIC}oJjLf@45))!?p%`rw#B>&F z)d1S9$fU7<&_$kHkDM>$8Tm(yQvcr??;3hAU~3(@5%3Aoy)hQQDWZP&mxTLCEEGd? z%nO&EIOVVHY#x^eQq3g!Yr_o8L2x

eA|Fn8kM^sm2AW1PW3TzCk^ZCP~ZD`MkB3 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 P5??NQhD?6@?=Sxk>yAs_ literal 185893 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 diff --git a/files/water/water.material b/files/water/water.material new file mode 100644 index 0000000000..fd2589ddbc --- /dev/null +++ b/files/water/water.material @@ -0,0 +1,62 @@ +vertex_program Water/GlassVP cg +{ + source GlassVP.cg + entry_point glass_vp + profiles vs_1_1 arbvp1 + + default_params + { + param_named_auto worldViewProj worldviewproj_matrix + } +} + + +fragment_program Water/GlassFP cg +{ + source GlassFP.cg + entry_point main_ps + profiles ps_2_0 arbfp1 +} + +material Water/Compositor +{ + technique + { + pass + { + depth_check off + vertex_program_ref Water/GlassVP + { + param_named_auto timeVal time 0.25 + param_named scale float 0.1 + } + + fragment_program_ref Water/GlassFP + { + param_named tintColour float4 0 0.35 0.35 1 + } + + texture_unit RT + { + tex_coord_set 0 + tex_address_mode clamp + filtering linear linear linear + } + + texture_unit + { + texture WaterNormal1.tga 2d + tex_coord_set 1 + //tex_address_mode clamp + filtering linear linear linear + } + texture_unit + { + texture caustic_0.png 2d + tex_coord_set 2 + //tex_address_mode clamp + filtering linear linear linear + } + } + } +} From 052cc47ee92488dfa4c233ae5c30414e3ef0f00e Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 16:53:33 +0200 Subject: [PATCH 346/488] fixed waterAdded --- apps/openmw/mwrender/renderingmanager.cpp | 1 + apps/openmw/mwworld/scene.cpp | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 608ae441ba..ff4e6786ca 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -128,6 +128,7 @@ void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store) mDebugging->cellAdded(store); if (store->cell->isExterior()) mTerrainManager->cellAdded(store); + waterAdded(store); } void RenderingManager::addObject (const MWWorld::Ptr& ptr){ diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index df7d20bb60..2123b47999 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -204,7 +204,6 @@ namespace MWWorld mWorld->adjustSky(); mCellChanged = true; - mRendering.waterAdded(mCurrentCell); } //We need the ogre renderer and a scene node. @@ -257,8 +256,6 @@ namespace MWWorld mWorld->adjustSky(); mCellChanged = true; - - mRendering.waterAdded(cell); } void Scene::changeToExteriorCell (const ESM::Position& position) From 6481cf87fca7dc77cc014130f97b66bcd963533f Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 17:07:16 +0200 Subject: [PATCH 347/488] cleanup resources --- apps/openmw/mwrender/water.cpp | 5 +++++ files/CMakeLists.txt | 4 +--- files/water/Water02.jpg | Bin 232475 -> 0 bytes files/water/WaterNormal1.tga | Bin 196652 -> 0 bytes files/water/WaterNormal2.tga | Bin 0 -> 196652 bytes files/water/water.material | 2 +- files/water/waves2.dds | Bin 262272 -> 0 bytes 7 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 files/water/Water02.jpg delete mode 100644 files/water/WaterNormal1.tga create mode 100644 files/water/WaterNormal2.tga delete mode 100644 files/water/waves2.dds diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index f1d8d7550f..a6479c401d 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -169,6 +169,11 @@ Ogre::MaterialPtr Water::createMaterial() MaterialPtr mat = MaterialManager::getSingleton().create("Water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); mat->removeAllTechniques(); + // shader technique + Technique* tech = mat->createTechnique(); + Pass* pass = tech->createPass(); + + // fallback technique without shaders // also used for minimap (because it can't have reflecting water) Technique* old = mat->createTechnique(); diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 70458a14a6..0a38ff8b50 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -4,8 +4,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/caustic_0.png "${OpenMW_BINARY_ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassFP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassFP.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassVP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassVP.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINARY_DIR}/resources/water/perlinvolume.dds" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/Water02.jpg "${OpenMW_BINARY_DIR}/resources/water/Water02.jpg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/waves2.dds "${OpenMW_BINARY_DIR}/resources/water/waves2.dds" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal1.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal1.tga" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal2.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal2.tga" COPYONLY) diff --git a/files/water/Water02.jpg b/files/water/Water02.jpg deleted file mode 100644 index b91430244629dbfbfbc5a027e198b1b3061dd0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232475 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 &=wPF&?9=M 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

eA|Fn8kM^sm2AW1PW3TzCk^ZCP~ZD`MkB3 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 P5??NQhD?6@?=Sxk>yAs_ diff --git a/files/water/WaterNormal1.tga b/files/water/WaterNormal1.tga deleted file mode 100644 index a9ca11b7ed0a44ddbd9d1b5cd8d699ade928c4a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196652 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%0A>`i> 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 diff --git a/files/water/WaterNormal2.tga b/files/water/WaterNormal2.tga new file mode 100644 index 0000000000000000000000000000000000000000..771d15041922130687cc943d8350165c7edadc0e GIT binary patch literal 196652 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

GK8 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 K>GQw)JO3X(c8^d1 literal 0 HcmV?d00001 diff --git a/files/water/water.material b/files/water/water.material index fd2589ddbc..673bbaf56a 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -45,7 +45,7 @@ material Water/Compositor texture_unit { - texture WaterNormal1.tga 2d + texture WaterNormal2.tga 2d tex_coord_set 1 //tex_address_mode clamp filtering linear linear linear diff --git a/files/water/waves2.dds b/files/water/waves2.dds deleted file mode 100644 index c379886faec80aa3b6772a890e0f49822782b33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262272 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 gsQ~eb`z73kNP2Y0|?iZ|j%iYiX zRccth!IE=2AFcgde97RA;cs&HYkK)6uBP~<`8O~D{4#%M=ceoTc++5X#UFMI_M<1F z6`$gnZy%1lj~CQm;_;6$Xp_~77SqymbA^5{7 z^HQ0K4lfJuvq$F5t9^PRKHgLEqJB^Rp^i^2TUS3#=JQqSI?u&ZwhK2ayqM!PJhsz2QEu z-~KP%6+LTqG<2P@<;>;;YcmV5bMGTB+=w^EZ-!^}^jCK748FMY&j0aOH+W*~ntR`f z#^vrKFYeqLcyZ^wM`t(18MzXMOG9igbi7XnJmY*W@zi$b+nKqBK{sl_U5fT};av0z zMOP@7G*e@wufy@}(tIA?edH_q_;>nnyVpO*bK_6{o<4D@n|q?uT187SR9{X(heReg{0N#&pyIyNQ zp780tijH*Ay~^(2h3ozIzV?%ox4Zuk536Y6PwC}O!gWr=9itx!<}#vYPfv5K33aB5 zHX&S|IH(qaKiO$$S1o*UjqhLCkC^&MjLCh<4%x04wCVo%tZ<(8u|yl_d-Hm}K8l+i z)*EDx`>@&k0bV@=V!l4o_ov~-Aw*j>;@l0p_d{OW8L#&g{aG&@`jpq*k59<{;-cA0 zJk~!p@u16i^e#@cs}|2*V*26ii!0np@$wWeQqSQ6@XW{aXLb2MewNX5kNY*;h<@c# z_}bud@#x#gj&)k>P5-^(y?1XO&_Y3JWsvoy0b zx6Q-`99z*tOy)hA1zQQnrbcKwtL}evWd*0p-lsF(zux9z_5L?MSO49&K37-wPx3$* zx%ZPVo0q8D3)ebv>laJCV!9ITiMi`47ntfcpc zzqM%)^tpDTcwO1sT8*9xo>}Ix)DqD$_50ptwCI@Zst<=L4&ZApjPrTSew_3);ql^o zmH3&Mz7xMBoRqx;IPE7ds_S1`jdu)9Pg_kH4-h@p)$GgM$lsyC^3~Y8|Kz-$etyf> zZgw5M{lB+&X#jR;dM>@bX{`?UQjmv-IR8@Z3+`o*R-d9O`(-{E~_*J>?3LK|>{ z%nZTXuO}a7j@0gviyOcF?AX4${~#W4nHx*K|F=Oo|IyDCza5@iN73cepV$XIc3)rc zfcG>1A3u+OqyOH4C$HvCCbz1|hcdf<^Y4C=S@_ItpXSlj&z~jUE`9P0eeJd4sTz%g zyPmuTH;!&&S{%-2k={ivRfobLH|c@4;$!7G%=rA&qjt0MRfJtcJ6t$$XF0o?;sHMt z4M((W@_6QQPwDAT(br}#WOjdewsc~&`O&*(h6F!XX6^j`4DDy%Z(e>g{^4hWhk1>8 zPw7cAZ;)Kua`!uY$y>ku?iX5kfSK$z`+xrG8TcY@nNHsMOdn^?%KIsE;1lKuVB>Vf z@tSu3X(IUjKUsVpR@C718jUW^W4t!E=&v^1{kDADbVlh|^ghqxgr2tdg;oMyvXPm@ z;G)j_7+!5sA70~GR*RM+^VItH;DX8h>fz{Iyq4^2FdrL@NP4yOCDB8tCJ{TuEAzDQ z$mkQ*VK6<|=qqM*qX&B3JaA@rmh3^IC!`;2du?_>Hu))w>994Mzubtj|KY6j&{T%QfeZ4rjw- zy-M3Xp-!1nQ)PyS=Q(~g^}8Ov?Edq2N8EARj^d{#zRaHrUK8zx-3)_rKHs9}f>X#* z6KydxGp*St={bet!Ke@9*mSSAz?v-PVFP z%CURyqr2a@;ht~n^Z9qq%DXRZ^2XbF_e0lqZ+>WYpHJB4!4uz`i@$p`hru-Iu1D2@ zlX!w)3oAJK>>KrYs0ZTB4U3@-=y<&=nUVF`<0NJ`{4DrHeNWAv{(VnCfb{a3JoF9=iB8;;rp|hYM~-`{Vxc`@B@ALuhB0 ziPuAmSax8QyB}{ny?dYYa|)iEdAeS@wiBsIXr?r(>%F>a#dV+07QDzT@72_C@gP{&!)}LLE!-zh65MdKYwC9xAFj#w zm#3cXsK4o+^-JB0wGtPz*ZptI;{5d|TJ{t#$NM6n%Nmm?5r; z@xILJ>noy*y8DyyvAaKbDtNA4)Qv&+o~GwTnv8jT>P6bBi_t=!F~^5%{q{q@`MYnO z$i4NwQ?HNUDaDQF#HM(5=&f*L=~sL{@H^bCm@ZcHCVDw@mb4w0<^6{Kqdut5k3O^F z^Qz^u!mp(+%09wPSW7$zGk=@i1l#dL;D?mGC-*at2B+IqW7>cAO6zyEH_BcMu^_!O zUhnHGym>dHy~H=}1rM{&d^h#Kd#^5_`Ky}4`Skqiy^qXo*>@_}e!G49{C^!inEb`i zZ)Sfq94)oyHs-UK^Y`p_Z7;`r1b#NAKZHv!HgR#;5$dcLAKZ#aNtR%j-nGI~EA2z4l^xBGdq#AC|dp)>w_P;!^SMTVZ z%HYw#XCFKA-XCO^ELed4;J!ZVhOcOc3$jwF6T__62^w)M8+H@pOP5-oZ93$f>Cn4n zr;)wYI5}Q(_|+OtIryLRN@rIvX#AsHO~HMm-NO%UW&TNTxXw$)Opl(B4_9<6@Wgm9 zWj>r1i!YHm9dSf$p7>}!i*Dfebc1U4Cfp#kVaw~uy!}e{l=D-OpU<`2dvyt(TAi*Y zX#2PEyMR#?4l>>YWp4)FJvv-Ix-Xw`_eQ)&y2nc+>bGHc+D<5b5qzWZ8u5{hhYsI` z%#i1fX0C##3GH?2KXH99SfDRB?$vOdwGZ|`!Z7Ct@vA5CtG#p-uz(l(qNfTjNSAra zEYw5c1z~sYaU)vkq0At}KPfswwMVHH{jBK6qQeW1GwLpl`dkwWQXAlNaS^X&j$uB1 zKMt{)UAJYwL$IXyqpPvjy|2v3#WQKAXinuqxqt7yuROLZ4)a927EC+6+jw|?xf7mz zbtSVk;Rj)UMSpDuGxJ1S^e>z0?oFPP;`&Q^gm~o8=}cX(n(rF9b@^9kZa@Fa?0+5< zd!spl#qgZUY}?e*jC)_@e?Dej2FBNHsR=h}V|V0gucf+~nOL0sn$Hpz*2vrtFGs#z z)iyuxYvH);FU)K`U4nfwv`U%ZoW!3*o7C|-;%}VUH#(*1O`Q8KelPxTN9KHv-u=Rd zkHmu`b-^J{Z!cVhXY&BoA5LT^9E%!YN59l^ChNY`y6MTxv)I3Nx4VAw-Nk=8VZZ%J z?=fDriE+cu#6a$1_Oj~7NAwHFvz+?*<5?T`*#4hj$@I$lhQCI)}M$X8+BK1BPJ<&qWk$U4u`4H-E{W8iAQir zv9?+6YW&Evm)NuG_x{b-Ww*w3=8xSS@8gx(iW-@gp?IT~*We|ObGJCBkFGmoc)w_q zaOyBpJxeE;jr~Z`Qbfgg|HH-c=UZvYOnN9K3%o+cOsin;LRmFke#?c1F zqbr^gwchg3%HN{|j~|=UghD>|(&-z2_gc&GF2fhM3vty>5-L4vKOFwe|=4T&GOxjVC zH}y}$^7d&zH{LNPg4;QR1Mc^Tdrq%@z07WSKEbi^av$vA5r1$3Ltg7CuUpUXt@!fx z!2+^3G#EgiyI~$k{&uHJ{Xsh_2GM4_XBW&S`tslLD%v#1vF&xQ$%*)}W6n&k5k5UL z#Hrn38?=5rX`RKAfAI4gsSjZ`@s;9Nd^O&M@yg%AiSqIk^UU+4he+%YhrAA7*^?A} zSWRK3tmPbJ=XddJ_PK>Oh_`tw938*%c&wKm()Y6~5=QIZsHHNyIO<%6hYTkZ59J}x zE4@3syv!)j0bdl$s`!U09Kmz&8q{ihkm__ia;u%3;x^Bevw240Sc12@i#UUZ`$(%7 zo)V8UuGWVW*5QH+XT*rqgsByRF=Wo*%)Ou0Pv8CdY=3%x@6BuEE6f|f&l*11cxL3? zpN|dg|F`Fc?)?1Ar| zm!a{Y6`9e?o8g1;yL-+VJqLe)=o=dLdf^1sV=X;d3!V`iGqW_&!m9uI16+6|xqm#p zozH<*E^{-mQaqHq0Bg9od;5>hJvjJ-FPAzW{?mIany@S_ghT-XWF!2=8*ZUl@-=`C9JNUXfcuOy`2cw9O^^UmQ#u<&K=FiSQ z+Vx(3vAt?`obh7ndia0xK3_LDS2Wa~ZTP;_<+j<=^|0B}6S@DH6U^P0fBImU z{l|D=G!*(AJAi%WT`|zEH=Jp3(_>Hj-S|jEt49~0PKUEaixWRBoV)lQ9gzDUT+>&) zd^}T{%I)IGWd0mq8Esit-k>L`s|)Oi@jS#gxm(!6?8bT+zbgv5>b7Ib}<-Qqn(H?7aF`zrUvbK<9Er|893hRvCd&?F5fMysPo zql*>WOWuy&H*rhsk@M4o!%tpq((pFq;rN(M#Q(Rh-Y$At&$y!Btcf-870GL@>g}TY zACI=pxv?)`>5N_hR;X`SSQzp9A@xA8I{UmX=q2!eW+dXHsKziecxmvRt?B>{ap2v5 zIzMQZXfXcl;rH_QqT3f^Jzt)FnTLpkeyF;beT=EoQ;YJ&#@R(sPp23$Jg9kax{&d9^ltTk3UZ@n;l`<(ZWOAXG%|_cji}=`a%9r@1C7z8}H9Pw(ZWY zyT5Q4zB2JCe+stG`$hcrXKFeAZ({m!eB?>&Gfe&$3vearDd5)O806<=*uysNATf;S@Z-)14nQ2vv&g)FJLB%*J)mD_HZ}@eSSF2%uj*^Xn8&37#7NgRNUH4(!?~xnsV)a7#Y3XdagH*@%_lR-&_p zZJE>J_Yw`Nx~J+rjme?z7>ysl4(B62xb!*ECi=PY@Lj;M%y+8pUPTNT6?YIm+W`Ov#4ltIkU0Um7XCUDc74&6>7~k-=Oh=z zOMRABaC!_DTX#p3E5@DOF<$D!>f2#;QFzkC1hZSTT@&-PabuhA(!RPszVFVixrM1k zejgJn=KHc=E3-h`c=s)5X9EthhJ(tv@;dD^onFkjbpD)y)Om}u@!gRVru*%@d6=H_ zAvkV4a8J{4_PT4iU)kp}%F`gTKcnJ-UTOhOc`^PLxJ!MG9VqEh;jvB%GagGMJriyK_j z=a1hk+O_EE

G5I(z}7~>w4dlNn&9tp?u#f{AW1_wT6-$}t7ecut^OKzDic%NP& zbx8Q)crt{aY&naW>s?iA@iwW>(LK=hSJUU0ng~`(&jmlWAJ@I|TKQwsrRcBKVnx@O zoff|u-VZTmB;>X-QRE{79v*3C&4j{sPSf4_hSGApds2#za%&M(9KlMi;1 zH+|7o(^xgkq0Z+^4zNvMOUBQuKEh))TFl94uyM7;S0%k~ z?z=P8j`kQKCPTQ}tQSO6m*V8<~%J=cnK4x%IPe_P~x#MhE`>Uw`jJzA|U&z7FKRx}%lU zYwp)dYG*kWcX^3U;mU^RLBp!Pns)bS+1$Hm;@9}guH%oI-fwiB!E_66AUDKIKfdv2 za1TSU`?5DGe2_Xt48UhQPdK3ByDu(}q{gK~9x)41;j3CPlUy;|6|5w?X2<16+MJ~h zJu!`i_-oEqZaDUDqp@|yI(!gPOXdtFPq_Oy%k*+~Z^;AE-md5y3ieAcKF6~m^;b)6 znRvFAS=4a*dA7kiolSdta^G_QeHIt|{AYN~ivRioJX3ou7(uX`)QVzGu>9nl4Z4i& z!#{gG`@Ob(FY_cgBfF8sDm#DYogcGc$xGRlO#?4hkA`=VTSxe!4&R&o*^nM}NX?p^ z@9NHJIq12}4Q}9z)n+v0>Wt*T@MxtMXvmkm34QjN#jLrv?qBJ>Q_n_=Jn0VBg0)6_ z>G{ShBb=7FZRYqpvwWFeKEuN&GgW3>&YA0*jy_op(Zu7`M&Em@HtO#UxP$6~;FafV zv{%`~vf}SLx8}h4`yJ0$Qn!R>*oL?B-F}Jdz z&fUV>WH0t=I28Cz+un@ietmz#-EZi1%$X$5nFZEoXYWpWzzuw#d7BG6`c-G7^#Ad^ zOMdm4G*@y*+>d_hrkdw z;Ap(G&##KNaCKTR{-OGeO+N8k^nlqBvFYA->9*qC+{WFse*3M@w(%$F1LggKH3VbO zQ=3C>bVj4Cv!@{((uvG~h*MtI)xlsL>dHQ!Yhu!<`=418I4v%3qMALC$GiCAVajjZ z?7|BDa`qps$YDkA5Wd^_XlK?;?KqGl{1wD% zTI6N?+HyFhvS%Ut%bGOIJo|zR(T37_rk=^U%XR-T7he1|3cgS@A}H# zj^Y6aONxdlJKggPKEMO)tED~9T!-0)Hr-%emp)-Sb7ng{Q*O{;ZU>k3nzCCpd%&X| z?C2NcosilgHD1Yw@P9bm<#-mQ=NUGuHI`kw@Gai5jWu(bDJIuF&%zl- zU#RxsXM0xs(GSM=X4+>8S9S07Ik=KwI?21{t32-!xqC1*eCoeE_w@9BcJ_wGH+?XD zn%7!~5x8TEnb(d-N+o$tZwcp{jTWJ3cg#IR|J;o4D10tGFZ|1Hk)>*8AmZtt9GRXV z-bS=y_?PIM-7R(8y8ftWt%H|}CF|KK4fooR^SkbS;&JwZq;4ZMSgA zo%jRcl;+HTX5KZko@F0Q?isFZ25wBlBAN51#`JK5;F+ zmUgL@K3`pt+QMg&S)kzHWwy#)$Sl`N`YZ81v)efD;!jzX12O{_UM)OZ<~N7c0HeVd z&HhzkF2O(26DBwLEaeY*B)jA3j|Sk*$Nk79GYVh%(NOjh1TTe+Wv0x$RN`jpIzDH~ zx6=!SKZCh0t4pHAraj=jXs?6XD1IqsQ^YBroBlt&r9Ea(+l@A%j&Hn*Kf4Ay);mqm zDaX@bfwqCiSNcu<%o{v;Gpo)&`C7|sz%lcvwIfa(+3+0X;Dvb8H}wS_m=;|Z|A}^49apcETG;oEr)+%UXVf{#*R-!@70p5v-N~PP zJ3ABYX}q|Zx<56c*WHrCX5e0Q!#Ji3)wRqes=tFVx_@}cd3f(a&ZPauuU`n>FBkLp zrO$&g4!~&!;?WDoJFO1v=Y!Pe_t|v_KWbFMi+JWakLmd{hYSCUr%z*CugAj)zJxn0 zHF?wQ)ytphWDY{@6+BX`p@-lLQE->kAmw$z)Pk+>i&wuTm!w}$ZA52XG!@x(7T$JO z53ubsEc^O0*DkifPw;Z~^WeYMyk{8yLiB!_L0O9yPt4C9(x=8l3E#6&dhF=x=)mJM z%*W>f?=Cxm+}R30tZ^}*$^)Y+-n#$d=G65uHEVX!jF+53`w?Eg%&a}FA54E`E=zvR z-HDIXxSTakzk|Pi1=cY;sa~mj9`@MtIDEyN96ms;nzO5qfU9Na;>0vxAf7U*BlQ!` z5zf%-buQxD=nQW8OtTvn*1*R(!NWDEtx`w2Py99c-QqO+ z__Lmd`winXvP&s*Rk$O5m@nIR-F}VNJ1i|b4dO>sYTS}r(_gB4_*B3*!_l}K;kScV z;3%^zIlWIX0Y3Hdu9(Q4Qgdz%o(^w>%hCQocxZ^OsWl(R6UzPLJ8sUfX z{PLw{h`+y>+f1D>5}$YYL3Ynoa!)-wpMC1<^t$2i3I?~FKF>1>*A{Nb?gR1FuDsOp z;=pR|M)W$g0dxuWnn%~XuoUjWPV`_sc|W{asuMezm*#nNKwq&(Q?cbaud4@~sb-#! zSbb65!OQpDERL|5-DzrvSMoi=6PPWZH9J1P6}~W<0ll_!XZOt%K9Fy_9-AKCj*gYj z*7Z%E(+B!r-UDJxUXwmnT(eKH;0<&w`qAvR$^7buTvq&UgJ~o_r~&Lz=WYMA-Eith zcP?52nq1zgbT@F5cysv7rzhoRbu&M%Cf~!Q*W$0^?l1L+_YcQ%|6AWW<=1#Ej*BDF z6^T!fL4~S_bF5sm94nNb13sT$J5W!9SCyGYgFy2`7>q zXcrA%LfComGhgxe_N6CFjFc~v%cCRP)#q;FNLKY`iOIoBaIfY5WVSGSRe9SqczRqB zhwZ(vZwfw{od$40`6qmDY7zLDI9&Q|@gsieWA@IB(36g)c9)mN>=mxi_hpx7&0VSK zLo4b4+`@%uUFlh8qXX{x%+2-d0WX;K;T<5aP3oEHw-+Ykp{b6rLt{~1f@!q%d+oEW z@MSrB;d;DA=RrL&p+@m*JOXG5QqOhtAgz49KKr(3k^KN$`l0CQGAHi!+o9?2!U#5s z4kBJZVnBK%^;UFf!5(os&9PwcbUoRXGMISgzD?q@>f&BaoieW1kKgW?`Z@P@IXGtC zW9gA;QJq^~rS_3i`5$?frEW_tmpK$YmHeB3liliiWS*l>$xT!6(57eHDZa0EL&1{g zdF_~`qy@;V&xo3=<}O7O(GH%cPKD=(57e8T4O2joNXb*4}^#Y&uKXr4wF;-eZbR=X|sZYXuMF6$P8E!(`2vhQHQ_PT}J1jnIRM z!Hq3_)`QGfWTxu9$G^C*&$fpL_OoYMJo zxwPobXYBx*r%|^@q3SHeugYAs&!whshRIele>dmuH1#PT@Dlv5(o6D@ga`Rd_{6FC z=~dUws_|mJ91ph@dY8I*lUm5#g!yMq5?(8hI8)hKq1QDR=#I+!iz9Rx6?rT(E17wW z&u{$LM`6FiaMxgXsq2T#_rw!<*uS+`gPtI}Yw#uFc;=D^=?UOAWq#WQT}ZXkKM{)VVyzd>(4DmE4i!j^iAnf5W3C z@6iFR`U=0b?)$Isb6F7w;D7WJ(-Uf+^R&Nbx1+~O{#1v>*DKtNTE*@dv)9pBs3{V6 z@dt84G-=^;V1IOJWB+r0wW_bu^S85mavT?)T60jXnO>+02d~l;#>acbvxwFu&s+Xm zjAk%iM0Q)66*12nZ;fCI`hdE6EW3uH^@a8FcfduYmkvIfKG406&MY&abiwKXJ0v^@ z{h-;|cxCYt^*R$5ws?E&nLodQJGMJsT%UjwJS`{N74P{4pK7I!#I@jfvsZ)f#w+Tq zcnN3!C|uH=pL9OsPg-J2VwCrr9R*FjYkbPmN9l1Ia(MRsh|zYr$N|yU1RM9+U5yVn zEikTCKZx55jtdJZ^|&|@j5RTX&-wH<-$y?YehJ?npC~z{57u~EJQ`68&*`5NOP9rg z;1uy-fo=JHcD<<0z2^9|R}a7V z?lyM(cYHO(Yu*oZpR|!hcT;MY>?c{`N9SC7{xd!YwP^WX>+xGTc=Va0cOR)7#miG} z+JY5%F7~MMhlb&8sKt2o*u(x5ZP3#&1T}!Zf6ZL!=IsyH@821$ALUnH2ejoo_8PD0 z-{UJ{Z-D-#iJvn=ksRP2L=#wYn_Mdgy3gWU;N&JvqI1q% z=ET%p3udvLM{|SXwz{bF_jPf-BEDxQSad$w5kPCUl+QGtXz|y}jLwj_Fs!zU*3$2n zD*1QnEIM8Lx%i2sZ*b2CaYy~}`wQj=!#+a`oV`lX57uCGO|yg@_q*ly(KMybNiERM zeHTB9M~rhb=e%auPB;17J{7p}hVR-}wEW&*Khc6KwBWhXaYrMh zzN4o!Ym?6+{c+;FXOX?sExEX80>i<6@U!%>de~_gu{k2owJHBa@5V!XK3+RB>94Z? zuI%w?Y-G>FAdWN~xZF>(qvlhOt?1jGmGHD?+~9t}9nw>X$;&)M+Va30ZA~)!%isy%&u)jZlJZtXU z!XTpe#HG@*c(ya~O;PV;-UFWQvt6_ssPSy_b96PS5nJ$%R`4ltsc=jBobkNQa0L%& z8G=I=9+O9%xIxPuzrH5@*DSxE;v0vrqbDgd^b^h0bHN)^Z{;o?Kb!P*Wq#FpY|cfO zt-czj+p{~DuO|-=Ind9A%iDS5&dIM5^cx`zN zu=ntocCyT?v())^bv(HF=x2}2mOYT;;Vu4+8pvmyyS3`9W&go;`b_^;-ILmg2daHb zd>(d=@Bi};ZVl8Q-2U+F19^K*tnJ!8)v|A`jW>o{mhY8bCB7It(JR2dw)G~#tn?M~ ze*8Wfi~9fR<2~84WwtatQSqzuJ?G+|;`8*Z7E8^g4#{3AeIrbrPdZFDce<*cfUjrX z8Rln4P{A2955ikZOt%x|`k=f&6x_gQqf(t~qxJW}4 zz51fPHqGIXA819z(Q$2rT<4ww&9*BtLO$h{E{c}|Fh zYMOXWaG=?mQm1*@K=Me?x3f@0(Z)Pgy9Q z&f!h;0h{iqK1+YEw@6$~JrI8-aXq<}zww{$@=iFQUw)7oGyhIaxqw4%`2?eX)qQ;-B0774O(f;Y+jkR}9L`*Y#$+#duV7Z++xjYw@0k5hf<> zWM^Qx|L4wa6}^gHF#S;YNO8N=_y4O2$Iw%I=6N=C=R391T)wCKAH2~%`eP1>?|e14TY}_hn2qG>kBrReb&n~X)F5mHGTV*{?s#X#2*C~Q(c8&Zx${8pPN^YGP?n%`;cSH3XM&E}{+N>pB&kocN~RRj=0H`}B8a z!Xc^~%Z!gXs9>P@5I8SS-|#!;x5mwWH0}84*v}Rnty;R7{YCj+VodoN@v&KZHaplWQ;0y!lGrgxSe5PxC_)BGwnoPv06`B^Vq$HFt1||475Vob_k(;q0Q}-;b^- z^W!{9cHV#Di~D%`ecnDhu!8Nv9~69JG564C8!T?R6UtmOa0kyqDvR>T{@Y}#|tj&H+PGf!0f)1w}zRdB_K!{w-hGhr1$Pbi9`Mp5jyRO}>|!%?{uz=Kosj>cQgEs&-ye@2z{i z?nUluGv561e9F#%N$-6O)-<^P{Pu}ozwqCC@6>-jELW|<_R&knF!W*frG9Ahrg;{~tQo8evkJ=py8WcWJwzpZa-dyjd~ zMIRB))c5b|Fa5j=YpJL7+`-=5O?rp<=qc$R%HC<%jOS?&SaehLs#9I(C%8g(mC4Ec zHEF#3%(36|Vpr=$Uo+xtWnXgPmS9EZUiCTC^hjp#{hT4OK0MrDnHi9u@llC8(Gk|- zZI?O^W>w})!-YoMC`M-<4G$cze_zoNz#r5Yna!%etj6N2Bd?d;Oqp{z_D*e%ItOY3 zwcCW(fQL*@DCg^Zvzea79qQ5@bor8Q9Q?tHoA)01DsR-6%y_-zJ<`*Cfb+ZinXBL6 zhp_8T@1_6dv2cSA!-Jb2dj9bChcEBm`^fAb-<1Qt4AC^|5vI1`hdZ8i!Io2VdY>@V zqM3_6Sv{882=>aa8eWh(3x`y6MBx?JXrMOKXglhUO);3i+{Ivk_`mjM=FE6g1t(74 zwSVFY96wlIV;gR5cWUrD+RgZar4Gz2Li(?1_!3Xp+*vV3f2g;LpSW2O^+=f!m%j?{ zn0x_4oup+O`|ZUyN7Hx7OTlR21NxNYe3}XI8IEyHU3`5G-pOkYUS$_t@a|GO@EXBg zjXSrs;8^}n&Ho#dGX^t*ShQ<)k7frIJUW`x)YThithVi++mqi9>_W?as9mu#{-ztW zO87ZEaroHm{LAjYSC04H!69f6;7AL(lW>bEpSyXA!WqbG_(Ol6$JFJ=Ht)PJxML<@ zC;Jhj3zlXF-e&KNy~R4ffjASEM$NZYRB$8eMPWEM(rG^z-%=%lG=8`4<1* zmVUZk-cOT`!47wyd*(y46PK^Vm3TD_;E)E?hD9Ibe#cufyQ5pbS^h-4kLa$;-sq9T zjm9WX$?VV;KN{hiGj~3WGs-@ZA)4nQ96&h85j92pz3@x8hvV5>_&9(4U@B&_3XV1H zv*NuYzb(5*t7bNNG=7y=%U8E~x9!{;`r6jrN4}PQuDFvX49E`R>9gCJmAd=PA0Naw z(H-1!|95yW-FN5tu)XO1U*`K(=f!BQ;#_txiXTO1ojs}LoVGkiI<*OLb0T^j&SWFL zbaK0O)RVd2X2J)Om(8SuSfhrx!-vhh1LhdnIUN0Xkp%bL#tCn`st zU7B$(s&-qC>6ypWyXxz6Ew%Tu^A;U$H$AGlDSHrh=~HjG`#ZrhJfrNjU-#eQC7vjn zqiYkz6Xh7E&i==#qT7w0MZSvGR-Fu=O^>{E0e)yMkiX2mFAwe6b+gOcX`S9>?ftJm zv5E6eJyG}q&m}o8GlX5SN$)$+mIuX?^loZ5b($Cvtg(|C+Z~O+aCAF0IWnG@<9D9_ z`QZKw|9a}(iGS+H0glR>O+8@tcScv9`8xGpeA@8+!BlvX7QHb~z;Ij9MbZ5v21Fw< zL~CRBm>PQ`{k)iC2GGyUxrfKVJJgTzOgow>U)jYz_xo$-gA0U9jbHto9GMwQIw`zf z=F1l*(m%jSdHFs=!=m2z47&1fa#m`fcvT03$!ty=?&9aY68+t1a(wz&c|dJp2PxmA z>;VbJE{4IH7K7Cd@&fCp!Q<~l*LmIE?CWZQE?=NBGtOt;_r}jgZ#ZXH6p#A48Kd-t zmj`%34DphqeXI{;KcqkB^<+oP>--+uuf#_+^+)_{;{6@%8jfVqT*XCsI2_IbZ}-au z1N6*RoQY_z69ZE7^HY6cCwKVZ53g^D0qeY5SM_o6f|u)I?~gqDAahgp9zDq1sN9+U zJ{aJR`mgLj@%{09^F_~$e~2f1I2!%FJ*hrxvC&=*e%#sD7N4%%Njby)&)%+lMswbK zG(36$IJKER^+w`N_M_jY_uHeH&TceZ{cJqyH|&^Nd3W&Jt6sAi;`pjB(7Y^W=UZms z<&x}|(D&Nu=6k~Pr(k+|dh@Jma&ceJlzF0@L9s&KN&P7n(Ab{8Hp6doS&tOo`_8?O zy}HZ~uXFdw@9p_PbcW$#=JW`4 z9C$P>lX|bFSOzPGgU_0;ZJ%3#;ji(X-*)eJs%pBF!_;dRC@Z##6#ps{(7GmxEv#T^f8~nbu`Csh*&)H9H>GivOf;zXp z^^ui3okzlXhf6PfVCpAW)UrCDBX;O7r}YNbKEH77W`MnR{UfY_kGFU*7#>+IHj~&N-bUW9M*Au6_rJF>Yu9Gu z)O&AzrR?D38FR}1y%ToB@sPdT>;Dg^kA`t7>LW8rX0*j2TGsZue7wV-b&vPDT75qL zEF0>5dJej}>V#c-)3kKc;ng?gPWQRF;qR>Iqr0${^wPXrpFi6B4_`X^zfWI0x-~Ev zZ?yaILs1iK!tyqJZF}#jwdL&WV9YM`W^g#4ZRZ;{9sE`|KDE3b zi;i0D-F9!YJ4(Ja3vEuvXBMBJ#P6KbIknO_y;OAnut4?Zf_p=^pk}UzpATND7K~O3 z4tRCN&nbP@qu(B_L?*$M3>#0jK2fl6p#O~pjKDt*tIrt&->{ye3*WeY=;;rOPJFhkT z?TtiTJh-?2jP5lWq1|;COvIMZXXE`?ymEy%Wkv9U?n5*Xpq}R zKP$fVaIN&U{%xrr<+Z7Jj?wee2AsbZOsSg~=W9irG{Xy@DH=O_+UPXlZ8Y=~ z?lApyyz3Y6jx=oX+*IGINob~uwrs(9nd<7fR-!QoCNG!Z8I!yC3RK&ZI12kYod3ds z%5CZ!`^qYJzx>l-7=8GFa07|;;o8T-qqwh=(FUs_>|I>&-p|!(J6oCQf&tsf(N3Q4 zyZ5u%-rK*N;~W1%@BY93#ff+R<%Ng$|Mi8Qx3~W?_x~iHdAoc5Ji5coY6K6#aZT7s zKD`;fB1#{ zxBt`l(f{cG{L!!f!(SY|b7t=7&fp6V%uTED;qXuC$!P%85qiPw!HjOW%yQuf=8IO3 zN9-QIn1iza0e=`z=+p)HjZfexxElWLE}GJv!X^dZ_`=UW~6z@xiv^z7@Xo&Zpj(5pUpOba6P-Qb$ZDUg%q4 zv)TRNYbacgdL(#I^qB649??9I`e58SnM@A?yX?Yn!)4fM*Vxum?Po8fyMLo#eU0;L z?$?U^5O0e3qRM9z*<++;U95<2dcDjZ!uiZSILBpvG_T!RUQ1u){fA42;hDF!Bgy|; z7eiLXm5!P#TDsJpT^z%z9&|bP-`r&$eMr@kQEF3l@J==dIvD@>=kz^aIgAmbp-zAP&GYFk7OhgB|no znAJnVl9S8s&%QCt`(XIJFaEIN9MS__pV3cF(m__$eenAZP2OTnuK0gxx}V^_@B7a0 zyy&8nF1+x<3s1Q4f}Jg!6pd>%S*8x17@GuI$5{I7>i%D^i34l<)C7~fp%(3$?L0K&P?O2QC!fC=X1qHyi`TX}>ilMVYG(8FbG-L{ z<31kF+hOJE=9_7<ifRHl-3hsVS&e=yeFcx`xO=NK&t{DBocjApUX6p7^wKNlKz!MI zXFMPNlRa@T?c42$e)#fFylqEYJJ@M9ow0OCFduo$?AN_p$K!`}z?f&+4J{szy$A77 z{I@h{OYwUAoaq=h>-Y4McHr4}OLOb}r`?T9-M$??=1TiU@c3}@*I&qQwOvH*6WnZ0 z3IkYs{EOF4*+r*jzYOcy%*RAOB^Mo!4|`!Y?SA|}+N#6q4?Hn__o_WNyLoOGpMh|gc$&B1Wr;ZpUa6M9qqt$oE8FHE`1Gcd3tFwc3I zz@q&?<^=p-+RMQcqx(H_q5XtvuY69c^{4owq??OdKObk%vvl{pfAa$|XG{FQDyGFh z3X_XFXy$;cAAIX-VxJ;`p3qfe(7 zvH!{M4PzAt`+o3w|IG99tol)JRed+=+3+TF2)vJWeaw`D)Y5qR(P@4yE1>*ue( zNduz~mCw%Sv5a4T?6!R{cW9>X!SL;cXlL8XsNZ34@c>2+AN?E6hgjxajQzd0^GEl+ z^IylS#^b{qaOUuN)V}zLy(6(7SBO8wh&OTjaq!-UU&PZHrtmi2(T`t$@B4oA@cI94 zc-7$Z*>S_O()n(7o6y*2*RTwVg|oy)kw>bbB!*wu#n z0yFbH%>CEX-Zh)ev#h#x4u*b8pLbb}d_B$Em=U(m2#3$Rii5r;kFDvG;-_9NZ>!_O z`j_B+GwD9k7sC4w>kp@!_c{OgU3rD#3Wx*63v~gWCXN(NHjezJSmOSF=oTLIZ8g>4 zSmN|F@25$GpXS*M!&blMrv|g6zYeQdc}K_YP8X}>Ew~__3oTkResi!e@PRMK4^9uH zUd3rYUXQ#PA5eU~)>oP?bwTt0YySJSdT2FMI`}JbWt#K5SDrtQMmjt1H4cuRV7=YC zhs~Yb+09A*(+AsWqK?Yf?49`rk44X=d@kqDHX{|Ymz%BXh30x+?zjDfXLol}{r+du z)9Le%FT2z2Kgl~p&Y&5NU&fot=h)TLi2?O$zURi6&GD4*47>AVmNxq8U0)N=UmcWx zQJly)AkDY&rNy=CtLENf1T6C`%*3n;ZrB&^$CoyH9%`|Csc{6GslW`2eJ>77w7JFZ zuBr1d3%LL`5Fe_%zeo$UP|v3}oyUuugKI2_iN&=rj+r>(X~y7s2OfX@qxnPV^FRL7 z<8Q1zgDbWl<~IokoXHn@@Eq)Qv=?jR!PTGMPy;k4+<@a=Z?9?IuH*Tv`x%eJ1i~ip za+;mtx|UH#(mxaVnzae2(kJCAz2`BCq5_u?|}fh_OC3dNQack*R| zG5q+!;hC|EL633Id%5Mkw3~6;eP~CrnobQ!k1hAB(dirD#`?b9dxgg%zbwkBySu91 zvwmG{+iGrH{jFCTv-{p#JyZBC464tx)~vRgqB@v9yQej2rQy2}^OF1hb( zYWB-w0R7OX#ev^HRj=V4caA&Xea@Nqt~3Ji|GNLx=;DsPng3b7XL!}^uE4eY6rS_x z>t>hwspDZPJL!?*SjyEqYAbneJuZJ(`SPeR_h2#e}|g(tn#0b7$O-X4diL z^B7-DC*&@~X`QB(sxMX}!(zH?@IX0Z1LlKgvR=Om>s9OGs&=-+oP4Qs)BB!*@xtMr z-3SX-m#fLmo8Y2mPqfkbS`Lnh_i6^|9S>jOY5>nBTtyupU*F!Dyl2dX>VM?__VuL? zq!%z-cD_dqV#lE0JFw4iUa`KtoO!|N2l-CfYoZn$`ln{1)dKAUO}DEzorMpil^VOU z<&NpJh33I&LJo=tJfqJy1K{bt!V_*`_(8|Z2q(u+8vA(o6m0P>*y8ba?a?RSwOtM8 ztfa?u#`QNedt+96R87PW1qPc3Z(3S4LVEYKcl_Pob7o-po*`edGkLt+5KGcngopA3 zyRE|^;_vi@C9jvd2Y(BVd(=OA35*B@Jpem-Dv*f{;C^r|J?uh z#5?MZCy#$-{>MM~Z+`X1um7`We}wmUPmJmNZL7nZgWVi6FY`L@$9!~s*Z-!utNFj5 z1J8lZ_xQ!UBv094XWzh?8*=}4{q^Ht`8P{)G>jzuMzcqEhj)!S++1|*SM2^Ti*cLr zU*9vC3B`zIDuRC zVsF75uC#|iKX43!*n=_A z?h718y9v(ce^g#q3+Z3%Hm+V%Coib0W*)!%jY*z%&Bo35@nMh3^Y+WR|HU{vZh6Pj zY3pOd`pgeb<{dxkOf@cSc>}g}CX5>fLVIcs>)FF{;WF`gUpcx6!)SlKeg-DI`YS^# zq8G|{K5aV>l%sK=<+`K!8`8vI2%{SR?d?_jZ`Disfv~Q4>bv<(O&6apOwXBGQfn5k z;)l-5>v{543&szsE}c&g!568yeft6r*%O%met!JTiu?V%BI&?rMtMc$36C#)JU()} z9MXiG6U)=h@F;ukdOuU#ZMu#t5B})zRoG26oAcsa``N?JMqbFvVkJe>ctp60gN zcBdXdel8!>!^4AlZ{$0u#)-opKUK^(kD+;Z?(F5x10KV5efuf%nAviT7-4QC2H2@y zK2`sy-@+c@gzH=QeCj1<0e}2P{5ZIme1UT*28bK@{q|Fxm792gh&An%Kf+V(5bgB@ z%)foFlkWW_J=S#p3=fm{2j8hb!oUkf$8 zTJ?BySI?5qN4t%_aBPFm(U=*&{?VyxPd@oGSK6yW^IL4#Y`;RhT5|!qn3v|;Rr2N^ z{=xnyfAYKbnS7$Jb{jpTetoKb^^Jf1d;2@T#RFJi`o`gh=;vLm#_Bm#XNzg|z(?L# z-9GsJk9}u<8g?06~ml7T#-m5p;`N2DKx4-n9c<4SW2AJ2-44zY4 zgvI7<1$&8S=I^pUJM1)0fE+pg>GN&+TzSXDtM1-c6QrTgBUIn3d1(^hDx03$IraDO zmsTICq2vSpqIyF(roRu5LoN~L$K9X9&zVvG9nzz=&)mMPS10q_wpGG!Ks{zwc0fyy?g3N@s8xi(R-2FQ(((dh-)@@qOy&<1xn5P1CXU*605D zWqT*L9$b0%xhH?{3;CqR-E>~@KJCNv6?U=dF2PiDZ_)S<;w8&_M{*Kt;yUsu!F7gx>B@8>`AZgQ5!KJzdmfB$X|VZTE$ zgil-g;A^nIb8lS#my3^Xd|>|Jm)^VZgFpG%wKx9t`|^pTFJCqs|vAhyRTG%!^MAY2H2ZQo8@JdAbPyeN!)S zD*vH4Sf07r*gNMDC%2gCot|=+ngyPUC#=@Fh6kM&ir6{$r`NH3=8Xm;XgM6}H-jH*gAMX#A83s5h{^bKQJc4+G?rX=3c=^oZ&;QBO?L@FE zXkWVns+Yn~y#L`D_s;I{cJ$B_{g(V(hjv%ieSZN*Z3G=Zq*KI4(C_jWM+Uf zU^aN?^{LKpYZ&B%P=isJj5v8wN8yr*0P z3g7j2cn*3F{d#?C&sa}Z9eK`sgCh;@DXh7B5?7#|&M&pwAkL2-&A&gpihFy^bIFq( ze!8+%J)j@cAM5d)=lrV1{s?tLaZRjVA3PiQiWsud{Hs~fns>j{Y)>rMQ2)FCdSp8l z-oXKRG^#QG=tGNg-Rv8GIzRvVjc4cnZu{rvzk73L_R-frjEA;5DaY@9bi*F=zqq*P z^>3bj%B3Ve8e#K?_p!TC&rF*#HE?t*Ho9}t|BZqm0$9Wq1duey| z^l^;aPq^fst-1eW7hXA5+=z4F{a#qq?;UQRp8ekwJfEJS=YGa+uKjt<^4M=L-_yRH zv72+BUgv-sad_^l5!yLhpSh%$%rj*^>@dt=%ou4Mabm8)_^zq}@}|A^`1DWh*co!O z+TOD*rY(utOAo&K%S#Wx@=J3+_{RI^UjOswc!#d=mRmh+FXil`8_&(Z`IW`lAO7*L zFRB-oVcp(84%=}YR+ye=Ew>EaH!bj``enVfnNcx-Czm)-Z@S~_mOg9OH{*S0w$u?D z&U_k2^&Nej=j1%^?m3|o*Sn_)*ugonU)~PopZk~f`#-`h{4t)A8es7OJows>_AaQaJ5TC<+_Q`C_(iJ|M^0_NymC&Tes$CrX2#CVd>j>=mZ7&+?;f&e&wmh*S@%im-y4|Pl5OI_RHtPJPiNeSa=33(EsIu(&bjpR3kiHUrIva1Iak$eUmJ@a*G%^D7I* zfct;>E3@DK=KIa4Khl201MRw$&&u`t?I7Jt&)j*p$8^K~!DBP#sP-AHrpsAq1`*Fi zE$Uq8#hv#jzw@UDUjNdyy|9CW-qR7>$$7CGUM=_J^@umRn~$4mnBRppA0P9(QDeFn z`2(rJ^)R#q)$QeLF@6Ci6Rz0)vZ2+ML-81JCGC_KL)xzqr|$}!_j+DPdVm|vJ?o{$ zjE`S}Gh3bF?}9JW?HB)@ZNFYvc9%Bg({uX7bN+7g0Q*v$54C*zG~4^T*LiqGkF?J- zX}4ze{(kv>pFMs1@_>eQ9;i;lM~mN3P8)h*&tM6zbn3}3{J}=pRUVl5db{34W?`_4 zF|V}C<(|FSJL8PDNBzRtMSa}Dqc8p9qTQ3lf_e9U&O78M#XI>6CuX1g*{{#rAu*pv zRx@7pPdZrfQGAB!jQj)d6ccDPUzNLjUUOn+N&X&MWO@reVE@H0Y5@nLS1KaHlN|S5Gb??c~eE98felZ{~pttdZ?&1r?@wbQGewpVt%`47d z_wTpbKY%l^p`OE+y2SV09ybO0fpxy2Fg;&mha!w?LQJ24 zcOPgUQ@vh)Pv^zE#8JDD1~6~s;;5esuD9@k<}Tt^o_X**JQ#7Hx>Nie9tM}4B3_ibLC;5p(W?Bc|_^Lf_-#1!6r7XBbTV65jnw&*oVIn~$$^ zX&Khj3}_+#P5dMGK3;({VFu&9>ML%fIma!#4M!VZbn2h0^=0mN{GhnaYn~r%t{oZp z2xdU}x6Q^22!rRDa0*7Urk0YI><4+}QaiXOX>tz2^!C^1ivbfj5eN1E2mN|K&(Qt+ zfe+*fX%^Bxm`SlP&Xk{P+%Ng|!r0rPk7<^*=Kh<_uhw_p^6u>4dhWJefOj5!_+59M zjq9TZxwL9;{AL`v<#Djoek@v#%P@p|4llb)VFPI(;M46V za&OzYvCe~D&D8UN5w`;?UZ=Y~Y7JbPcoO#FoP}G!E}XACkei}mh{JZe|xA_Y_Q46Fea{pJ;_wfZfPEWADgKKo#ZrQuy-p+q|{<9ltN6huj zN9-%$fr&4q8SL3oD zau3>nnx9F#%4WSQeAWeirptDno!{fFDDPyOIKFYo1fFxk8EtUP}`v>MAh zRIl-qUeNRBduKnSSXbZU{NoHRoYfn|0nb|t_Z~(M8^mFoyJM!3|3N)pabYnp9(BOn zTYPclChu1L!_yk>v)z0Jo;dWS{Ep)OzF5UljYfifV2cDeS-p>=@VCP1zKcwd0t1oCDa63DOMqmCJ zz7lyg#6xrraJ1nEutPJ21;1YQ47&d`cguI_>Un6s{~k{KoiK6p%8h?~b#+ERYBvH7 zi#o13rI~Fyu6A`^u7@3cW|)TD20sk*xC-OFX6~E6RGI_v`q-?q(riYo;2pu2GER(l z(*DT>JzYENXqQf^?M@7@O?hBOT+C}E--FKnn){l@^{VH4yPs2Ce^)NQi{IBy#k+C* za4m0(1-Hx>`3S%h`2zWj@sjcpxYON_kKnWO^}n)!PdWK;?OPMwv+jm@RQpJr;rvix z0sI@PE8Wv}%ujjV?PBSjwQoI-rMw!<=6N&9(VlG_jQH4QHfksO1Lrqy8d_<%Si460 zetf#qp0xLm*IN5h&9*Nca_6Vz`)L}NW_;mHae5bh;9fJ;EV9PVtaLc9GY9O zA~>FV3(%X8h7Hob=~KJ&{%(B%uD#l;dSEBbZ~d^?cv&B|>E~WHL!R|HXj#ht ze4{!)>2~>4n;Ff?=L=@}r<(6O3uX+*X){jTkXzNb7w6TY?INHtS*94#rl)K{+W<6m$7^bnaIc_#3_?4z1(0ee|in{db?(^SA%*{GK0tXL;X)zkG2@4K4n@uqf^g zKEHfEdNy}4om0Di%#NycczLS_>I>6(_iMdSTynU``n5P`xDxT%;H9{v=6=sFcYJdgxlD_ZQjq1v{rfPtE(c5W*=RxDn&)!{Fv~OuC4X$&ZmyKgTJ2fEn|^*=k5Vd3T>SXYoF~?0%Y_xFPVPYwjsNDDKsj^M}o2 z+{2enY}1_@ew|r(Zw!&3*9U{X^$$cHVvz ze~wQ@o((H<;PJfj^_pk%*QqYwr^Y%kVz*t`_#fTlYJ#c3RofgM9L22RrGT#j7s?}9 zuBUI&lZy%U8k_O5nqTMNKdGMB?|Z~?iRaqPw!EJQlevQVPdm);{mpUm8W_A4{~niw zpOO5}YdcIIKJWgQtMn^&^}r193-C$9$>WwapTx7pNxAXXM-I0SH$T2GZgJ$5;jP8T zX(o(YUV~xi^CAz*b$S*eNsD^$MAB3Qj&K2%?HSUul<>3u(V<$rnV(PzH4Up|Thl2`xaKdfJ~Z@3prt=oyb=}zN#y_(nDMmtC3x0NODdds~Zp1e3> zH}o<%(E1p6geLTq8Bu(P`pS5bV-F9!XG1PmH>bN;X}7(v6TSN*zIarfw09_P8awB! z33$%JO$RS>%)-l?>PxXx?yAphMtIy@aMA32(F}jZd*Qde@?4&)ck{DQe|q+20ju5@ zt-Bs1JmWfCp;;roJ)EmuXmqByG&A-{P4kYKXt(;nMh-6zjc+Qx2 z9;HFGOF?|_=lC1hfn|QMLq~XrmiVrCd7r*b4ffI%GtdQod{g$o9aO*j`Nf^I{CSDv z<;Ww;a$xn{Vex+Mtv{Sw)ceo7|FhKqu)x`efAPX0IDa$0XYkhd(XH&GS!s{?fo9ff zGC8Teho=udy7B7M54Nv7!|U*ndTq`OYANg)e|0H5O1}|4%^&T!nf<`hcl&)FfpJ&p z7^@Yl5zG0_s-2T&M8(j-4;XwrpF^Lf&)eWTE;hPDGig0>0eFXPUcrGk!!l1&Z^}12 zX;sp&iXGJgc&p(sdBf*%o7VJXTGO!cjnUWr7cB>FTlZ&o#zp&i_V`jdyf9Py+wyPT z|N6Br?K2ZPAP!AB6Zr+ty|w<8DS7>n`86E!;tV|Th}a)CF}#4xl?cD;=nC%uh1$b~CvnKb0|CIe@4j_|#YAKk$5xDuBk-G@FfFQGhP=H1^B->U=t z|1mEd9Fus@7x*2hI|d)1y#s0_|4&|$gWL~yDo%X;vAf-WQ)iydzm`|ptM0rz>RD7{ z=q+F`c%iVRwEx}-pHDrf?{%3L^LqP#|Dk<`>UTeLGjF?ej+V>w2aDrV9RO$K(ab;9 zpQXLnnm5Ne@@W2RM;?9P#uBapuHw4c!x`_$&zlbgo~8bGzTA#8F#%uQYu*|Mc6qoLY=i^Vz?l_6eh^r<)S@!hQ4nZ}&s{ z7vpI4?(*zUf9vdy{7uW1zQ7Fc#j|;dI8@(d5Y`NzL=fPUAx ze{oSC;=P|-gF`Lg8df_`J^YIor~Mss&h3)9)@HK_b5C>Qd_GTJ<9&7u2lP%DAbx*6 z5KMsXOs_S1hWwr6fqEhJ8m=7u;L4>VaclJe`mYTdkmYUM_U76`yUZ4N#l3{< zo{sf+T-f4DI}Y=aY*sb2v)*I7s+Z#w$=Q0jJZl!rkLZ5eU##YH4)PzRBVX}ZK79b@ zzh7>cR0p0^X4bMGQks~{&7l-oK{29{?j;K+B}pO2wm!^uiv z9v_PzKK3bz2VrQ<>GWi{C%k3Eq^&SW=gYkNz5A2hIV`&;$> zLoXX{7k9@jWG(->GzQs9BQQ(!1_A*FNxMdwp7u13NUoPQO6AB40M!%fByf+2955 z&XnBC=ALQ7@&|0UkF&9xquSx3$JgJAXU)FEY#I}~HT98M1C6jbq&B(oe22u-1>DHIdYUP8hu}VNP8ioNes>xc_>rkcUwdKtwZB|A(k#hL zX$Jm(=(TUZ{LKAZAKe4b8(;VT`nR5b?b}PVtBdCT8wY;)$3wqrE_lYS!_$+V^^9IW z?Jdpi=&j_Xm3EySQ3K53)GVZ9ady)jhQWm|tNouJyJO8N`NK9h$&Wp6eEKPSLU6ut zs^lec6b?y8Xr4n)>m4oRb31ya4}5SN*6cp7^RWH|UHp2S(`L~3t5KV2%l*|H>Vsq5 ze>FmTfmXx=JE}i0v`X!Kns*--$C=Kzj2>0bpw_Y@ir;>m-!N5uC!NFQq%$`Bi}Z+x z;{Cx}CY-eiSjm(;lHNId{jj|q)Bo_B_?y&ZcS^RRBN(F}LYs{5?! zk#;KOSsSlP-KKWhGW%AG$4`J?*j>r*_46y$>&yCqEA|{;;q~5L(e3uY;8Wj$zvq|B zJGTA_fBY!?i5I4L7KW0C5&jfR9nQF0AHvFb{p*YJTDvYThfSqD8QL{_{<%t<}fV%c1O~q>Q zcG~-zt_Fy=6_(GFFHZZU*~wwgaY;?EP>%}RIpWR_|0(&ux-DP%CGX#vD0hp+?cc>w z3}^LEb$Rs(te@AAJ08cce7^zr>wbDpt2}3%<72Plv+nL(5l?Tc-EVpKcVNBM0qQ>7 ztah2L6enn()XDC-JHL@n*&3Xrn#12^CW;%3ladBLpYEHU?~dLeZR@$P!uWW;*F4Vs zET5`8N`^l^ucDdeT(}JrG$#l3?g!PQ2Vei@^3;RBczzZRxBwgQ3|GtyKKAtA-MRqJ zJL~@cPkSDIYx#iM;4ogvVOq5VYW{tCFWR3~o|h-Y)uViAUs`al+gSo@F-Hqa<68uC zU!Y|VV^}s@SQ4Z0b6$$0F!sjh<&pNl`B6`ng9a{`b|b&dd^pSZH{ZrPz31-Bdl%xuhQ+o!so6+;1Dq*%3tk`Yezkje zFH9~hH%{BwsiGf?*Q6dxgSK*M-tRfm{ZwfO@L+K))AG#)aAstTq!)AKn z+GbU16~9+cU_*gVg39puE`8uWV*k}?zdcQUmBeF$}v08@eIDSJflxmW9j+L%&Q~ylf#qPpIao*5!1v$8V5MvZoD1-+q3R{xj8H?Kfe4mc5xJb80m%N{s-#( z`)?gyz5`2p0Gl#fTD}v%zzk8ZI(9v@^JW)!$jdmb%+Mavd!D~`r2DUypK(W={c_sS zALF3tWAQed4KxF7J{0#?9gs&SKeLPC!mG2eziGZN!wXVh(tWRQY&YK=jAB90w&q-@ z6USb_=GxWpSLB~_uxtIc{X;Y_Vz>HcHC|mjaXJ+Ep}s`^=-taR!}B10Njp%kxtHl@ zZvFiSXYTrSUb1%|e|Y-IlN0a0Yya8Ja<~}QtVPa}A9ydrP3lMCQTo#MUcedL`8cBa zL8?PujFX-3`~&snJu|#;z59=!J@Q0P6@TB(pwsUD#`QFrc?`gAZjUohC+yvMf2&*O zlsE9MciP29w|ol*c*9v)le>@LgHETV5g*&J7gjQQa5)TbbMuIq)5IHJ{NkP;Y+rp! z-M`O$j7v41eg7}MHSO6m;s6fT@9|Rk__+IeqA>00a+uz=8lT?sSlH8|x@XMqs-^80 zx}2AgpL5i!p8a8b_CxC8L$Ip+<7UP?P>;eX@CDN{w@1$XgQ570=6LZ=JySY77*ZOj zxNYWl@hgwUb%0?EFIL*?GrSkh&|a_Hed8D2|MtW8zBkW9yOQXjcuI{k9rkCJ+vq_z zX#31Q)lqS_%0FYTj-SPR!0bFdTU+~}qc#n* zt5%&9119iO_L&RrfAVLaJm@(cg8$9f5wiT&AOG4CFWMt&s3~>R0ln6KeJ@T{OHLc)NM8 z)phP^_r)D_N96kMah(5Y@$-=1pXR4oviv}!W|wg@$oRHu7zycYAf%%^>K zw_@|Wd_c|ie*|MHN8M}BhwuL*bG>5i*cAk;OGmsz8*uB%yHAL{Ct#|0uW?vm{KY2o ziaT$v{`76N&bBRxAfzglwI zduabcbC-jEfBEW!|G!@x*o&VZ7PwE|w!4S+(|OY;;kSN5Z@Yfbvz@_hS~Dxr|GKa7 zOJ7`9pKosRMcQm`B&V#^>&r9ZFaK8kfI0})%*)uhg=MBMgL5>yS9>-Gh({D2UA;s< zH0s87={Pq%%X)NQ;>6HE=U?nOt>0CfK6&jY7ve^~tvl~x zd1(0B;cJ*7s14yk{Q7wIj(3Uc8y_H^Z=bQbj^`WRH0$|H_pHR({c6?&uv7icXD8hI zeUHC*ZC^c5vyHeQo(+GAe{o7}k1M#?jM#kmbi1b}d@s1EJ%pEjb`Q(3(OY>6Pp*cUxVmcgLlstsjJkupJ_54b<@KUb7cKXn*#~*#yZL^_m z9NX)-9@oTxT~BxS&ik0F)`sudu>w!e(^uUphTF|T)53?sxo_V51UF#JoMHcTEBV8> zXY%Z2+|2yD(sg(C+nY11Uu^F>e5g4PuZE#rva8)JQT|_cHee6C__$b#3oJMBDEBjz z$J2ffFK%bXy%GP+)xxFmQ4Utq;>mVS^D%F398WIqjJWPsow;_crI9Fy?CzO=btSDr ze8YA)dH*;d&mF^$7lZ7yOmE~&$UW*xJRw{toV&r#@9y7!>(_q%t{i<=Jh(UbcORO$ zTOA%}7=A|!f=hSx*YbxMx@ga#K6Mrc;fVfU{2DVoJQjSkm9%>=?dV(Y@uPq8*j^vc z_r9FpeENxgwR+%wT%T$ySPMV?)mv&U{$IR-X${r(dMEw8*+w{b+>5+E@p-P7``s_S z;@K(K=)Nbv`zP_qCz{2HrS<0NqG#&Gz3ZvBPJd;e8sVV(XKr_PHXXH{%m>BaNqGJw zT;KrC)!H#A+(BBt(W8k0)!cAS9QEeNaH@7W=6#ND==0+J@YTZi_gwQ! zy@lU(3ns;L>EvB_tomR*oU8cGJ3;NhKR3(=4pNSjhny304EL}ZqQArU4-d|p7|sqy zj~mas_vjkm+xXKnBL?6|r9H34!UagP*cqK1+*G{u`XTR$SO4Hx<09fB@E*!r98b&_ zP05w>Q|;NpLM>(R&Gb&IAU?}2n~H}fKaZRmM6#3c6-7VA#Vc~9{yx=Zp@ znyBN~o%ii>6i=GY<86Iq-ZZ!6{vCZOj={yTBQI{S*c`qyr(T>={~T0n!zcJg+a>0m zHEUT2w+-JjAN2i4KUNGXC)6W1yUjzcy{}X1(6oH`3}@%$vKe*K0rTj+Fr^9cMg51t2xy) z@jLNm=w?1>Z_EdO={6i;;A-LP>FE9Y?QrMLV!6rZT*Mb$hK(=7=6CN$URQjV<>_jZ z{P5j}lb1dJ8~M<~3-9aopNK6#_Iw|7Zp{zwnlH7-FMglC_T=ypaPOPb@@N>mtW)(W z-jg`@lKBm+!>-ouK0eZ>^96f8dqgifore^zf2&KyrIc|6Zz!o|a`P!K!wri-fePI(`u&j1f zW5j(pyEJ;=c$&><^SQGV!=H`kRj(EvxG7fo+;XFSTs<;deX72i@|+HPhKJ+H;SyDs z9@d}ERKFBE^xNW<&k{e^d4b*MF^(_RTuGj6U)fgN$>IVY;a5L$5V!9T4S{-p6<6%+ zw7ccrw|@%Hr=5g+%+j!{>*G1cd5LEmS8xfhd&54mtKWU~pWb}!(topqqkc;dF!)R2 z*j1kqH(lSmL61jw(u|en|FSvAR=;+4^ss!=aUb$e?%ccgcg^{o+qw4B@mPkLt$%(& zeyh$Mxw!X=w-moCK9uioCk3As&r{x0fBN#g(+=qm#Q*jwtX|4)n@vA-a zJxKRF<$J-8KRb>8x8HxSA2s9KG#kBes5*Aki$~L}=->Q%HBi`owW408-W%4ls?MXy zT^M^G@_<|ugZ=*eKC36;N<%mD&RNS-GL0FXiCD2Mzov@_OTHEN%seIktj?9*v~##J z^8UaY=pW+LRlll@7UUkY1^!2QDw?6f4|m!@)g0OPyzP6olLnvXr8tT4`$i9sZwzZz z-yZd@+L35yWZ%QHUJPq?56A3F&D`_Nqdwj>-Pt-G^O?LN1~+2hB>8pJV>g4Kg|6=N z9>OT+`K(UkcOTAQdCVkM=$}4#Wj>v6obS9=$8sGIIj%OulLuxo1op?ua3yu=3x7q%n}x0(dU{?H3uHE**N{aul&&5FMW}I zpjn03-2RPrx)0nstv}q5w}d}Gb|1s%x4oY~cD{e{pWdW% zz1}`g{et<0e0;&#<-=sQl*bD%i8FanT;m13MJtwOx7`st&6Z(Ix8DYefe4}x@^?j|jge2Wu!6@HqRYISy8&a@)!4H^3Z%ORaZF**I)QZY0> z<JtEFd){Dw#2h_Af^P_HpBjcmu(Yb$1dWc!?qnVWF(6iJxcK2cN zJ%4k$8+z<~_OE*Od7067J+Ib$G5sfQsk<)@xM$^QSdnvS&x5bwr=3TD+?|(2vvcjiW&Jbc!Mz9pP^}o0K>G8M=t2TrJd$&G5z=(FHgMo?bUFve3%d9anl?jOjpfG1GYIEE~9SUFlX8D zOx4Ee1y+XESqyN_<%bRLV&yDdPrc5l2fWMTturHksrUGfJfH9Gjp|x_)63~P-7$ZL zXA@6t`5O;|Zg_W3+TakUUG#IOv0Bs@3?E%JLAYRhwLB;1AjL-t92Iiq36_XFp1OcYRDfhK2cn|a^a@CP+vnY74}#@ zU!T+8A8~(ZfAB>0&ffphn}7KJde`<6q?Z|(F|Mw;FbvO}($9!{9@i)?2JcMIz*)Uv z7uhy1yW96S|H&O+H`N1I_!t(S_G6n7{TFK8(EUKgCD!Bh9t% zR0kJZ!Pcs0251a_6@xsL^b?jbR>8Ehf_TfbwgojL4@Ay1% z=+fD=E7pv9;|P2d&QBwq2kF2X%yN!>VCcZzo8~~_OltoZFAu*$@!olJ_vPrkPSk1M zyL0*6W_itB-AdyVegNm5&%Y#n1I$nEP{Yctu;LqLdF?|E7q}`$%iUt@2Y&l%F%=&# zzq;K%mB)eSsh0N$tm*{tKzh8gd|@(-`hE&2Q8nz3sIfB3>-by5D0 z2kSr8Flj=aoqB#hbDnP(SJEGi-YbmGGno<_`Nh?b(IA|^5=Up&zq^AMr}a_(KOF^* zg1K5X{gS#a9A?gJdrlpY_d3jdCGPDl*g6l?)A<&+_SsdN#AiY0q{p96+ymO5c)y^oVuEfN(1@3qB(b=5{BCMIHm{9M znxj+gELW#)m|ZH_J6v{8+TRo|o=;&uap{DrXJ*{{=JkUcUcC47#QQiEH>tk6oH?-DcB@@F zKKq}(Xx@$!sRo}?bD0yvj$Xm3f=fBSW^u2i1)hd|<(o2gs*B%)pQ}y_U&&K)Q4F(l z>*O{J$S#5t?*Ex^iLlml=|j!>+s8aFwudP-uXQ(0hGF$H;0>-H(J!0(h*3u`j$YF& zvwN90*X|t+7v0^3d$pR|yKsM2ui=q7>u``f!awlYO@F6Y3j27D#w4D(oK#OMmgKE} zqjRrEYiF^Z0=5U^jbm1Am)_U=rb{*_wofz;f839MhsTS6HlnQ-&>dk5lgb$huhj~0C=tV;blj|;qDUb_)LK@92{;UdFp&1&mkI$xfFeiTOp zcG6tf9X7)ozDUib)x=>AxN&*t*uRSJ)$YJ+&6;seZpIgttCq!_(Zj2o)bnwUkFTlm zuetZz?(4OF{pd5(+Yhh&_t$U_Hq;VpyzS1l(=3k@GtKIU;!i!0bI;Sm>~-{dG}Ul` zJV2X=^=z+HgQ$ImXPerwS>cTPHph2wnhs*p=Re~2FN(RtUsaB~>ReWLo^qG_%z3^x zA5KFIujQvk!{WWH!A!!-58LTDqwZYfr@w|X*q-h=GnPXSFa6JZ`F$Oz-_Wb6{os_V zFP;lu7`+;AqTXRU1DxlD=AZfe__@QZ;u!97^23eA*ZLE+N6+{weCDdN*Lk_(jD>@k zx7)YzOCP+Q&dvtak^=<#%#wT4IWVBk$V z{qY-5e&*A8{R~eQSi~(jz&-vWZ;RLW^cz?8L*Ah}pZ|^+#Xo`Guzl0^$Eg3)WE_^i zhbOe$PIp76O0SOR9FKTt3B&%~Z!z#}9I~OeQ%}olKR>w>2ogc<=0CSeO$f%e6e{>Y|S4f zUz{T_tVKOkb-tcKt*@p~TZH}S{nyXwbDN89<@GeU+3DBhLwPfNY)MQ^|1mJk`o(l4 z^2p_U#q1WoPJ41iPJlbZ3}NTRfzcbqCsR9__0{|5J(w@e*5l9o%=NHb;B@QD&F$RB zInOW5J4P3Q+kE@=so#A2(YrqUz$_^}eSWFx zfi2IWp6$hR;_+pBh6m50SX&)h@0rJhx+*;ShVQ)-<|xk5i?3hKgJ|r#u)oh|zZ0Lx z-stvo;AQ7kkuOMl+rltc$}M8^Nj2V4ae;1dgEr^Pm-p!b+)um;Gb!g>epA2co!zrA zr9<9PHFq(pbm9!)Q9pu zAJGrNC_i-9-Mh{gX2Wi#d7c8Z>gXAHZQe7&FQDJg2e{qtC;dB3uDF(e#+q79->XOG zH!H_f4|m>*zuo`v)q7%$__CtUSXF17;AgOW!+De^&R)ZVP)jurJ*SpBZ8myl>}7I> zZkWkz!>PB`YUM{bU>ui|eGQy4%&L2@&TTG{Rv^CLm`8@E$fdj3yzVy?1uZasSnMIHeUsE zAop{4%3k2{OE=0F9Z#YAp09oWb~oIE>t=%2;;s*Wv(JrMV1w3nE*>{M@`B&LoNrHY zQ{IPNolk33?+Ft?&wO=ir*$a#Xa2&JJU6NiE$yP7i{o z`*iwHXJAeYuQsiY@wxOg@(6r%+KlAjJ2khnXy+@=EgpKk_+(rFIO#OZvUj1@ePvcW zDfgS%T(EP+y&X81nJSHld!t9=vW=dP%pYi z>Jt4O4|l)LBV_E>)uXJbrLV@tE(V0Lc@{m-^24^-=N%fRp|kO9@=6{4b?%M2?LzM> z&3fMI`5wd7&eN=KUgw|Q8NE6@P;ma^xQf4dgj_XKEcg5Q-NSSR@rvmDo6Gt67Ulo; zO6H%xAQsH4L66Y&9ZJt1)-rIu&u_xxPfxu0)zb(1Cmkfs!}?Tr9uHa!;Pvo@5A}@g zn~?wI<>L3qr(*Iuvj??@xu!EGmlV6MnmwFLckHY-Cpd@SN#86lz*pU8F|oSTj6B}+ z`pRZ!soq|XZ^jDief1@I0j{Pt2s4Jy))Tcu4uDj>^EO>;yUEP8)VlO0d8Ejvi?F!%iiX?PM>elCliVl<@Op^1 zi@!%l((J=KpEaA&*XRL`)3w>L0;7T(z@{#={{^;jQf@PgQZvOBI_O+`-Y_owOa0UA zh{yJp>M0L7W7GD4&Ze=l_v4hkKWo)b>PB&j9_IOckUd+tnYuT;p!zEx>*lTe*u&A@ zzx?L!{qwXCamDb0)L7;+zDGOlu9yK-M_lcE!wGMj$ER()RUg!>U9C7cD8(Idx}FjT zXJPossQb6g-p3wTce%TN{Xd%-s0H#2y3&~!3pTrNen#<{H&Om6zjUG)e_b5{Q#`Q% zD>wUDj~Cn7nucMz?;nCQ^9uR=`V>9n-tT|&_x8ND{rh{&Mfa%zXW#LZocH*VO~@ros%(mEw@_BG{PH@5xuV(4IdWr{`^NyxJ4a-t$ajt2Xz1)q(0) zxik-r_|SQvY*f>y!GzTwz9FfH#_n0Y;bFL0{%7apqwBEg_Uq(J z5a#N6=r{Qn;XdC^3*qkG9KCOv=i;>3EBBkD*(E{Cudc>>xX^o051hXatEStfXJ4Q< z#h<8WOYd7vA;$FF^?Tj>X2RqCs~ty9uAWMpwFCoLYX0%}D_@>^a(a9C&3SJ5HMEN_ zzXE>6XNqIpZG4A3+&1v?R&Y}m244r4&wPILWNM81cARB?zi2lZ@uKV9 z7S)?`b}>(Tr-z*v`1;w&W*_Q+{9@En=`=@OwIq(tx67gT@B0q?Dva9s=CfhHYW@uC z$IEHBjhlJQ9H2ef{~yOZ|7f0ov*wEJeVCNT()1n7+YlBw)%W&}mOZm2GhFzA_ln2h zd4&}ZucB~R^{g5?4oCQkT134Lhgjn?xJ9>jrRP{rHEKh#vi#t#=I2$;NLw>%dGYI7 zc#U|}yxkm8tpY<-$6tY6-88Gam+o)y1kLpI@He~vVKqHd=RFPfm>H@QUp4!Wr#_er52R@IH8D9PbPr7FVZm!+1x2F z`@MRYZ_<(1zA-ob-T&p;!?dM`Xh!gK|A1%5r=P(e$JJk%q8~e;9ylOo3=F_KD=u_) znCboq4A1hk?_!*JpISxF2CMEK!J_%O$rtzq>(lsHlemL>&20AZ?4A%u z4vIfRW2Agdxtj!%HxcD|WwZt3i3My8rDU$?HIG^uzc6@*Ujja`$$z)4Zs@ zXIG!0UK6iJKkYuK8_J1%{CV)nmF9SQ$>(0la`A+@rV? zYTj~M&mf7BR(4*W%HAh@bVLR`h-*aOzysVAD=Ienf=al zdegn?DPCvGah;~sr~Ax`^PQS9FU|vO!at|HgL(IG*}Uo0e|rA2`LOzaX2keZ;(Gd^ z_%7;QIpu6|LG8s8qB^u^)2uyz@_~8!oC7n+uOZE;v*=k|S2OMIFKB;}=iJ;9H*(Re zXhS}%FSE1bM3~gAH-GNeCv&UQD2l;t=(J!43Yue8f!mjdv_0<3K?~mJC{9Ak43n9;>1*aWp zr`h^Jdhz}L&+X^;-~IO=+-Jx6p4Yzd**%ZG_8ETCtNZOi-A{YA7Y<0jyUKSp{+Peh ze)NG|@9u$?58WkR*=e`rRi1;Fy8q4+p8Ue5d5L?IZbqFKW~fe4qinR7VgKWgetm+j z>yWz?9-N0?TE}|AMY%N`Af7Gk=jiq3P3Ch~;6izw=)V@W`I-(dMzhhI@@9Jo^kVUE zy&Ll{F{1a=or}X07Om%Z#(9Cn<&i(lCeEszPu`5D8c#bf%YiML|A}j6aCWf`@1T6x z_2Q!*fkVH519$Z7B0t1=_|l<=tKZu9@btI#xs#J}%B;_jR$S~)Q;w^nu6N(@o7!^@ zBQY!R-#RB@Z@aUo=26XL+i`RutXZ7PEBE;DjH~b2)F1Jf`~2vc-IqMA@L1zKiW#F{ z>GKYbj=vLL5f{RJS5H<~wx{BpJm&i}&%$$GfAMnXPyHI68lE!lKd#OYtJJ^FKf zYxP(BOYcwL?-`_%y(!P{;7x_iUG2Sy5%p+!1zcC3-l$IP-op!MR`pl$6mbaD>pTr! z;&pH={S!U;@Y!vrpBlnDpb-%>?UX;ZAui?vZx;Tc1wJoxG~KhbnmC^7M$cC~$j3Pz z`QiE>d2><>)Sr)?Fi-v6|N80nzwCMK+aKNYy?^_$J^$~&|E)d$*Z;ZdpD*tb4|qSm z{4_ku|Nl6@h|~MN|DB}+_x|Sj{eS!K>^G+)H-CRhzsfgaed6&qR`aGj?CsuumQi;lIbv<@2$!RUeS%7iM$J?&DvNtA0C0zM3 zKYQ5l7Z<9ny}Rmw1)QiO`jkocfA4FjzrEKCKg}c#TXXs}47lt3rOZ+CG;%La(@)>t+%C4YUV+A`_kC&hO6Gr+MVhiHPucYagX2ki}6Zt zd2Tn&vdvlYOcaOlTAzI6-47lt{p1sR@w;NjZO`4_DSdPtjaN73X$#XApn_0K=IsaDVXCVn2j0-m5>T3%3tr1hC{ z=F{+}=QmUR+yq{aeD~3P&Mw~H8Tx^h^bYv|9FkXfd70abUGmaq@#U>w`{VkjFy_2; z%R>v*!M##{oL8@%;X(PS{WKZ- z)P$W2JlIS1fbm++sVC%K_2`Qid6|ZN>rdO63l}f8wnuNwvrfPFn*NA>y1i2;)mRJh z0QgA70f7C%8qJ{8w)xn-xFP?+A6CTB{K{a6&U5uxvqE*jjz6o85Fgr8Jo=%y4 zxv!Qx_2%MN#=czl+IxdT@A7uyuO58u3VG)>JT)40kVV$%yJFPm#@yz%~j-5s6x=k!T*P-pBH2Ql#o6jP~uha6`(eCev zPaj_>|Ce?=v=^ZoKM(%m;)=dtQwN^aNb)8WAhZ%wZ!GB14uwfo|J1X=scydEe8@e&s-74cd$Cn*!zbZIo)*u&G(2#;_eHhV z+^BDsufZ_rjq|^w<8+@7%>s>+%szHoVhW z_A}XI{`{qlw|@TeIr#79z<;0HuxqPCQ+U+-g{paqO+1-_=)B?YK)j2w6rk`#Y zj!^Clckp!q?-)0<7&f>e{C@eqoU>DSL%%d?pzzOp_8wgS<2`@7b9Fc8-}=;^`+xaP z9Qdox?D>ChZ;iZP&F}8p_pthu{QlH;|7KNv@IOB7uEPgbpDFME-L03NffepoYaGgl z-rb)K$4PT8-{yIT7o7L{s#)R+4)ceO@QImghVbyuKd=B3&UbkRHggE}V$b|5qb7Uf zPe1cCkD904{ik__>=P4s1KHj8h2K6{{jUyAo0itwIcXNfH;*^IKCK-Lc8pa+^O>+C zz!<@J6Uy2KLD}2Cn#KYR<&ZzO@&BfVk&I8xtRsZ~@@W1v?T=y>0 zOjp}p9sOZ*r)E*>ad69Ht)c-7KPW(mn&T4SWFJMVp&u=xe-g`@7l$1LI!Jw?C|7_-Zw;uIG0T zw)C<)_<-?zah-UUudH5$r`*i%jxXJgp5um?k#6mF-rnMB-naSlhCysO>(}9fH^QiK z3eLf)+IwZ@ygSo}t;t{f+IHte;~whAXT<^iaGapQm+|+iv(z>56L2{4sKUqM^~;wd z-KUw#;e02}Ji`CtDtktsjn6;y0`Xi4F*55sX_1b?)cNX{0e=Cls1yPF+Z+4gm zZm#EY)!pC16Wqmr`5D8nZ+ec`>hshA{5)YQ>+Ne&BYx=TZ~t)dJ$F5yJH<(HSgycN z!$mBwghQ(lh7X^+-cFOe-f!w#htD}&>5kZOTital4A&XF{P(|ndGn2*`yCz^pF4;D zqOKD&`Eja^stITj%|T`})W8?K0W-;L7%%?|t#>d%pkmKhX1E z9JRm?zG2SyjnD1L8%iIq*ME86Yu{czpsvqLYTv*~zV(|Ec}9itH7DTzI>}FZ%C6ZX zzQ*23f7fDj9vq1Li(vqCcdxFhU+F~o$?;sr|C(>t*#d63ex)3CK2OzjTx0h*qooJ@EBj{FvG1%CbUfs@Ib?KZP@<+y=*yXPrc>SZ_+-C>zK5^h+vw$@5 zctTn<+ zEXPdg`}c(%IcxFJ%kkl>>F9jV)x6(lJ3r2hnZ7sWY0-=VQJV4-FT! z-F|AsQv&qu94`Y8CI z`hUyW5Chu*a;91Rz6Y27V$b(p+1X>q!5&`QPs8rpZ@O3hZ6{n@-}Yv}+?UPsPUzq9 z`*^|Pp5UdNfJZG4A2>Xe8FzWMy)yhC(|IhVQD|53*kSXfRag$6F8gHR4(5x?vv7gp z(wGI?OKp$chssa8IxYK_^z?apA4;<|Fu>#L!Z0FU?))>B%IV=ng4j2TEM<4 zz1Z-IrpwF6tNk>%6YAj|_eig%Mur24_e;%t+}md9aUyUi(|ZifZMs|E7q&yQlYfM} zen76Dczx}g6W{x-zuIT^|BO2SfEo1E-~wOByU7_Bhtvv7Kb*7oFs)-Vqx?zRla+5} zTEw%}e`6-UY}U2m*>B*WUvA#)_sTV465^Qs4AqqCbJ~aFga7L1ZujH7Il%0HJm&9# zZ;NwzAA}v2_xyR<)YXgbme{fKLYk!N_AB;h=5cp94}|I`ICfs8`BvS3{EP25#0@;il#-%8i#&)x8B)8^l< zPLPx2xG~$w)1;ZlY##8=#_*SL&f+8GYdz-c)yB;gs+co*2dB3Nf3*y7zgS8ty%yaa6`qCL^a!xI3evij1 zjygLdSLv(Lh%bqG3qJec`}uQ=>WnqKvUbAn_7Q5kcn5HtV)(pxiQj%UEbp4S^%f7s z+mBa&>MlLXHFIfy?&N~Iv#3YXujnUeRNWWcw&pZ^Jlc1#?jFQbQh$0k?`XPUukMh# zF>m0$dN0jeic4l`@cGr1a(VeI{QeM*#Dw~5f3to&<|ZD#{H?t|c=8}4Ht|I>F+MBa~xFz3&HPOwU#OHY>&8XRgdm7HaN~_H0N8GKxxsevPoKbF) zV{Y>ze(?H#|6Ft9W=CNhbZVEHNtEwqo4Lqg{;tpQBz{GnU57`@`|$xz!VcQ0%G*Rf z+@uSptg!umjt>lRxFdfAQ12rQZL*-_8G&hXH+yUNt_I8S2SA=HpuB z2kQA&dxx`n)?&=)`_n<5#Fb3Dlomnk_8e&;hXz|*_4}G@*hgO7UJQ{7(nQQUvuV}y zoSvcUY4_BDG=lO%xYE$E@k-iT{;wDIUfN09Zq0V`%!et{{2%hpm)-fT^dbC6;@i;F z;GiDIo#UyH=0L3`Hs$Lgj`1s%Bk=5he+y6a>YG2^Z0Lj?n06H%UD%P&6#J-hRs zF0I+Bo^!+g?C0eHXDu%b^ICaeD{Yq8S6#FXt8CZB&d3KF_#$+*>iy+VEx{!b9%ekw14Uz zIJuh7+?&pfN8T|S>`xrTzTxs{S_1u%*ctzkuiEYQQN(GjPR3{Cp>mW?fVTRN zK2%&q@tY_SP?#+Z?I%2-xa~9rd zrzAd9GbUc9_L_a_fcerv9!C>)`RxDR>R;^>2PTSnzQ;Q?_)&Q#uTk0+JA&N(tB>CG z$(@Hk@$y}m-L{(Ga`mUP0{7yNl-G!#NglpoSIZrD@g5JIyX|jncJ%st-^c6irQ700 zo)~&Y8Y^B=p7*?%yQIe%dVyxy@=0D+`7Zd}=T%PWOv3sm)m9VEOS_T| znWId*-v^7ow8RJS{|*(G-T!p&i}j~4X!=uplH+54LHfg+<{dZFdGtPfmgaBq^9JwS zzo)T=1CM<}H`{ypy?^qtyRRKOeTRP@FWuF9yi4zxhjzEkLHLu)L)DS$vAaC@eq>(y zHcu{j|M^?6%~7ApJ@nDEitd=0-hCR}H1&P^MW@0q)anPrz{4sBM$&Exobz%9y_bF| z&H9U{ob$1#&F{;fD~@Bc)Oa)bY)#TYO{xDD)ikHlr^me;7)4qYv#W55ILh@TJ}W*v z%t!xQeIm!0aqs}wr{KZf9&v7+Z`H+<^X7H#{wF5vk%`0Z{;%ZO*^avQ(Jt~D8D7!& zkz4NE@J7+^wf`m0)*10f9^lU~%ilgob28Oj**i0PfW6^?ho7kcXUJowlA6NiRo z`5m5PTqnI3%pk44*(hHFed>*N9PoXuj=F=>bGzK{{)clvv9s`A{ebwF)*4=aVa&$G zpLY1QEBYo}pnae6$638{yn`{DpxF$&a*pHJrlVXDJDRETcUBv$RpX90vFo|jE<5qU zOeBxT3zypSn!X%Y`26sz&{G|B{}0huOygV8SiRaF*hzONZ)%@^g$MA9`5Kz39GC0X z3$AxJyHN3y*gPhwm1i)DvFOKYsn6J^Lfi=B_)hwy2iSv%wn0 ziNWtsZ=Z4|?Fv=je*XL47 znXq&FoW_2WS+m}>&y(`)VfRZv^U5h&hh;p+aF8{1g}QHj3&)M#<)v*HNVsG>Xkj2H z#XLFcl#{}Nqp)~pKRC{gL;(OOKs3C9AhFw=* z!w(kY-1Ge4<kYUH+=>5LD4)jLml%o&W^s_Xl+RiHtpXH9&d{=zCpLRkI zi}U|V7|-J9Q_k8SymApI$37CfiR2Sl=A`Mf-mTo^lV*<$>AggVD3< znLX=valy#(*yKNF#+)^MWHAd~U#`hdWCb2h%L7AIQ?<|i#rRF`K{$x~uP1;F;3KKK zR`ez(`6abG2mjG~oAW#mrB79h;ZK<*^79-TicS07SHC#LBcQKoyxwuPe0IJwaUb<| z_7wX&mz{@2v00Dn9;LZA_e=lWoLIe^#p)QdeO1_4p(k)LGfkb3-P$zeRq3WoX8XF z;K1;|ww0C?mu5LV^D-PpD_4sD zvtv&!EK;nT z@+O~w8)}Rl^+sBv+v-ZY<5&4OeDWrKo0=J&xT?(vTwy!!(`dVOkH95^Ee*irVLGximo zx#_;!3(@Y9Q9Is;3*4(7c=GO*2d}^Dg}3pg-i9l{_b$Lf^wwkU>}PQg;8*RirtLfl zQ!c-S!=2{Ye6}4W`PmLHl-_Ci%ri@~AJ-?1(vtdlmQH4Zm-b$H(Jb#{asA@xk2+k= zYc`+8YFaHgUp)YOKkS+E>GaIi{bo1#FDun??YD`~)V?tPp1#B#!jp%=GvCsF}HYln=#1`ja?)V()yO>}H^GE$PwJFvt1q@cI$6W(VgN&JTlb*TJO!f7rWA zpE>jdfB)X|dVtP<@G`VgHe@(T8{z^fW{B=4>4u zIdJ4MK4sn$ueZUesV0t>t=2s|TP+`_fAsRNo}3B;^clvE1T&;*SOV_E*e{XZ;jr4L zIxO#!Jhv~KquC>1hCVnS|36Rn7aaFprVBnd+~g`Zx#7k)zH)7qPo32{98EZa44M#S zKw%=nC=i4}o}`K0kY-s-4SB~`gM(zHd|iA9VsD3Iw1hzWv0aL_P=hI2H#t24E_ z(Uoe?Y5+kpd^SsaVyqT}0-UvV4%!I#-x^_p6 zb0D7W>d&*sT@4e?G(8?)I-K6a8&5rXFEPL!KfcyGyMO(WSN3l{+EV|&Vt2-z?=Coi zy*f{hiv#276%KEGxPCzEucjQ|^?mUYpbv?*sBrq!WAJ^kOK;osY;ZnkK-KSNqEq3~ z_XfXHThlKGtAmRqCeG;>3ML zyv*FaIhfz)US+NxJSer3UMu%Qo=gt{tMs{H7U_RrHfEUKmt1b%g(t3Of}IpzVXykc z{yBTO^!dS6+}*M-*}bmk?*E=YqWeE<9vM!;v_3nU@H(E-Z1zX#b#OuGg)Z?ETDTN$ zX81~{X){jdy^C39wtO!1tZML4yxJkNv_W-FpSUohKlI*9{4TzHi2-yGa5#SHxUq18 zCaixtUd$zz;NlhhDBKSHDm;7r=4+4cT>JChLmo+o<^_ASnd$vter11axXHm_;y*p) zJjLsDgkHV)@H$(C@8@$>eU@mz!ub!6zY@|02@#WjdG$w9E>n|(98i2>;c@K06_KmJ$sn@_&o!YNwj>ruFh!R-nF-2yFA4-7NDfKKA;@J+W)&=p(IdeoD)* zreNsF>&0s;m_6=P)w80FEIYECXg?0!!|#3fM-RN$*?8dATi<(7e{?c4fYiIC@9p~J z#kZ#?+=%oM&O`A@^gZaa;IH8-Wap>ZZ>gJcX~i6|=%RX_=S=*Ld58J4*|8PPdU$%C z`B{4+y8C+681iBx9Mx)Ot!5IrgW-OboR14Iix1oicOZNMSOu=YT>KeM++O>7_AkVH z@csErVpjIk`1@eBydcfddguUqU}@RS9G!T$&+$rYh6^kIC+EjUQx7o}&BzKYC;ff+ zY#@nJ%slf8Gr&S(bxKb%K^Ayj%DL%$>z8so9 zs`Q!8+_1QnSybKUO3d;1;_1lq(UZbk`tsa~dKYj^H^?yqKfw`31? zyo-lREDF~nJKbUX&Yu21cz?XLo?rI-qnj54=+=V?+iT~2(mY=ob)Wm(>t6M6ysE>y zjE*RJv(wJ>DS0xOmw$(q^OqARhJz<0o&-ls-0?F;QWH1_nJJn%@`>W>5YDape~`I` zc}CacMO@ANG8m1xynpm3!^gM&_}SxYPkiF|-Ny%yVStCXA8T!^$=3CAtMT44zcJs$ ze~cCdo(bECKY8XmW`LJk1!JFC$}Bm4P2qi|#w@!{Qva&6OV5~jAG|*pV7PKH`~`Z3 zv)R3bTjGqxYxC+%*^PDMXJ3Bcm;Z3}f&b?p-hSZM>pytl@W-78@a7+sL;Llpqsf8t zZ2X(;j5RNLdrse6c*Af++`;tXnP10;C-dJ0eezo~X4n_AW413IpE*nNdU@vV9$(Pt zi7&>(%D-2FS;V(6ajW>q`}@>v^!y8U=4AIc3?5%KcQm`>Z~~tjrXjH3uYUU0PhW`^ z8PETs9iSKS6Rw{P$arYwoJLmeu)DySA`Q30Vqw99}#$c2BkZ=rf zOvIxVxqD0e+jsttx?G;|?fhIdU?;Vb-=ijMWItrMMcZ({eRF_4JK?r(eYt;&|KApT zXIo6z)<0*5F>I^M&TDuwBlbTG{-&XJv%eiCQg%f8j+|xR3GWfTN87BXllr2>1YRX- z)YOIif8a#=nAG%USY>yp-@})5G5b;a@Wda!@zbS;oS}#GjSs6!AO6h`TPK4-cjv-# zrCr$0ZFa#||JBZi%qPw3H^jM}U_S14V()?3=C1o%W}NCOHNaTrmpgE~qu_T3k9mFQ z>EL+BzCRd8@f&RGO~d!h3=NKj&k)}Ly=HL5fIEt z$D^mueeI#_c(L0dGq|dGSG=FQoch)9bS6vh{&CA^_%XTr zYqj2EHNl$iEgt8%1hD<|TKN9($)V(NJpP=&(_+A>`!T>C3UT<-xy+`*ErQ$5gm;y_ zXgH_wJz2=?D6+y2PSyyAZBjL8eUU(m?Ee~&h=1=bVJ-ew3!ZE{vv{UR# zGdoVz|LtoZ{dPysxvf9g)*Gxv8zP68nRpiN2plQ=E9Z23#z~>&OftbSM{!$ z*-mB%e6{dmy5YM}vjR8@WtpHY1o{9S#nF8Ws< zp5@QY$&F3E4m=*kUvr`80~dzei^S6reNXOKyr}xK$LIQYzW?Bj^|#(#k=k|A@dVec)vkjyVzzUOFu z^raQw5w6Hs_QRDqNKHKwEV-BeQ2g<8|Dy$qrom3XtJymqpWXDw@qA0Jh7I68U2XKs z&F{atzVg1qAAaY7Uv7S<=zHGVBKV&@V%p9|q*Ry=p{h!0{*&JRezbCmpJVV|?FZS^8H?N3)z=ad;_e0nJ z?h-$dnY{NNv&=r84SC-u#DoX!vVPbr{Z-0t~~_-gPKNlj$;mVZX8qMww{FRu2; zU8(1L`B0zKi}s7#@sEcoIKK;H*;nd3H;3a}=X;|k#|NarQRk`I+nvmb__IetyeY5p zl%);F>GL`0NypZCLf^zfuFt_ul#O{E7Hp-1lS?kHWEu7k#*?1@lSGy%Ft-=W&pF$d2coaA2Kp za|U?%SUAYE(Tj4lebwOrs+afmEBp8|yLyN8|J(3@-5V|UpWa8TaGu0mIFo*@@Ak|_ zPxxn^;eb0c>irhaJGp&Ytd7i_u`rw*8w}Wd zuNU91sx;)_E=6d4vJMpW@{)>uUW>8HTjHuUl7fy+MU@9=F1w;PXTjt97y;_i!C@OOKO=u5+al=JK6 z3$!Ma)4~6P|2dO6yV13W&$33Vv3q;;iQ{+w><{k#dZuUJ9{bhA2|ZHcu)A*td8Hj6 zs$N(}e4D-*Ya!*WdFLQjgUNHkes^cjs96R;##N+jdQ-_dS&V z_i

)HCk8*?fs_Fu0lQf}aRZw(AZYWRG;=NqqkENB3jFu375-jSGFdaEP`)n|@Qx z>Dlp%4Hk-fdOEXtbqeh<{=vkR>;hQ!_eUqdr!xA0)CKl==m#=)a+jvzcBvsoU}nSW z`0k!>cPBrKuA=8?ZsU|YbONp&E>L`9%I*%Ixt88Hm=Ii8-4|}y#CrT&+~>Q8AOA%7 zc*pRTd%hQ*J3Jokz=YXt`#sy)O$g7}zW$|0j<0?G!^h$6iIuzI!IZwpE|b(}=8Dtq ze;v+I^?gmN+h~OrV3;tq=(0-Ao(TpIKOd7*7KiT7iicp?#e-D61Jf*eNOMlTiv6`> zOU0}B+xjzR0TbD2W{3N?PTp93=YbpVtUeHJZ(i!+694q=!T1UnCp+HU_x|X3+_8RM z((?B>-b#A=$@JFh#fhqZc_cdi+Z!`#@ze;fpMb$dCy=>g@FKNBqr%^`cI{gq3I9JF z?r3xp!&6t~oOC_X;O^0*=;P$s;Ar;S@G9`C`|QyL+ZWRAiRVH-lUYJM*?0)essrZY zDIA_=JhA(|@SWU!+9dJM%;HKHH{wArwl;kSVk*C|t70TCEF6Gv4dPujt+vTru9mr@ zK0i2MJQr8>3LC+9<=VrWqy0zWwD@xy_{mKk_1TvRSF~5~O}h|@dF#*@x0+s_U^hJOw}ad&F)H(&hzi2fjbWzi4) z^A|eVbBTXH*K&5s{6anr?=3U7)L_9rI_W=PQaS6{!Ixe0NAdGf({HCY3g6aQsmtMJ zEcrZYCY;q<&kWwZ@u`m;@lrg}A0OE;LHNW9a7tB(3v!!W$~DW#|A z38($&rH%g77W!y=lbjXYKK!$ha6IYL>v(8tzsiz2W9#NKe_V38+2%bl?67DTY5P2D znvcbJRl#S@#^)uT5!=^Z?!Bi!JPI!0ToPi zy5HQ&96^1^k1ZVD`Skp1|M|=b!Z(gKDDxrb>Dd*t{I%O(ePS6F$twl+jZ4t2tN7ex z2TgWw@QDkSD+ii&`Cj#Q?m;;JnQIP&x9@D6@>$?Bi+Z#-%m8Q=->FA4=ygGDaDf(a zPCSa9aLOEGD)Z6&UD1bSUj@GIVjae&9)YKf@x_{ZCOWmY9wafh>fh_~degk2jU&_% z2iC&xa7GXCeGcMVr!H7`-d28ZM~(9yUa)f;y`%TpSq_#QK2z6=kY53QRc8OAa`3GF zIGzFJ93)peJI;^y63%@zI`k~zc*hGztr9MH>GyHjR{S|}BiwNR{(PygJE_Y(t9Wa- z6ED3oa}7T#*m-KgYVaf9^@FU9KP3zk2BHoDiZa)3wUH{zG>u;#rqCJBT*l8qwnVrS&Zk4uu*Dm=Z@$*ps zlzo!>i5c$Cp8FqdTXs_|CGW%EXu$Yuz1avx+#fzZtzAD(=Wu*c^uVwtv)ef{6SFM$ zHNB@AKl5-tL~t{o-5tIhZdv)P?!kaQpo&MFeTr4PkO!izRFn1MwfFOhACON|TNG_3 zygI(gqc|t^n{Pk4M6=e(%;Hzi{m0|$pZ%j_ysNv}hnweMwz*WW`Ev{Qr`WNP{kyc3 za>nL+FMr_h`s^b|&d+AzX1MU4hdo>TiFhgDhXwnq>j&(4YtPcH)y=ERufqlEa)TJ^ zZtE>Gm&r^{eWaFI=+Dkk^ZEym{^GkQ^Z(ru`dC_bTD;(J>YD7xjz5`M9j+{`o8JBu z%pkh5)T9G=+=Ia%)F72$2Ze*)`KJ4Y^V6A& z@evs^Tj~1mnZNmc?q~EF6HQ!yS~waryr}r$-7)lyIjutjB`UT zSa73wte7o7N_U0!jcCDOG-BkEQ z&SSh5GS8tSgg=D4L@S=$ni|}lNxhNJoSwf4mu%4swQjui__7_<>*2BUq&whCx#z6& ztQ?EqZQ>LBGhRD(MetS1d(m%3pO^26Pt4^~OQ$c8tLO}A_U-$^D^d$Jc?H;S{Y*PC zF#C6AqpNlIGh3n~j}Kh<-g9tzF{3h3_*Ll%#0$8vx*;6pIT)LrT)~axZ1qy%DyrEo z4yq5sWyv1k5odhJnHUrYqT9k>hi%!3q_3P6hw3?heqY`F$bQ92eof3t9TY#W^clgn zQs1T)+LhCfZa@9>5!{i6Z>FOTF~7>rEc#uVb>C@tpxFy}kQaSSJk+;?8DwS>JV0F> zU)6RnS>JKLxS8BzK38}rbW@kZHL1AwHSuXWF(CQ__g&v;t}H)#=CG~_`@VUaz-iTc z19Dw&dWhu9atG}G%DoG3{pJfl9lT!ud1k_=-IK(D6aHDWq~Til?y?8CLNnUBe&r8W zZ+y9L_uxza^MThr`|$4J`|RU+<0$*gGhH8e7=XQ8JWTLklk0uHE%pDQIp_ZG>_&lQ zXSc*EEIT?t-`P@X^_tI9(+d=Q4@a~vCf5_AoQKh1{O&2;7{521H?deM-ckUqx>rzL*5hx ziQBLK_{7bt>ko(j?md**RL)Uq#LS?Y#@{J+!;zpy-?I zPs|JjHn8$9&+w>*1A6V@K;FClN1r`b8y$xqnw{D{cXV*>fgI#6%RxioA!G)iC#=Pz z$MbHbC$LATrrsHHC;Ov8@*VlTI9WW3g5~k%=so(%k51;!`ukzYxO}|Mea^(jXf$fM zCu+YzeL%mOuix`HnYy2^`TOa6Pr$Q)+%* zRWR+n_v#-wQp@e({OD27EbGTI2V9oR;$0uDH}8RkjvZv-W&P1j%1;1~anwn>&~4{vNeqkG@Y`EGA|ii#u1&kN!CPs>9mfpZryA`(d7{ zCyrVh(f-2z@!sCTMGgOvPpj`>Q_R1cS&uVtd~K#T=imT$c`rU)zAyD#^e?=N$IfoS zB(`aN_Hy^%`_G?0zV*@3V>7^G{mrhkvf-?#7kCEXA(j3(UKwT`-dk{q%=e?yXx@2l zt;8tx$w2%&O8#hMHm2W6FTi^cA8F8hW4N3veuC~K9farMS>@M!zxBlW_(k!I&JOgG ze0)y0>nEMRUO5^@eX$33?)^7cS5Msj`dVtB-ndVvsVt|>^+<>|}Ug2;scYC4eB`dgkl{;(CWiNUBKxqCd@t+nu($j}$*1*S{ z8H5}3o6+gv=k?4}G)!L{zWIY^D!i&P8%(|o?=ya#`E2omlv5YVtS9#;`M?>qgIu+OR=9fiugA>G5rHuH)&C!}-#-neblnwEWDo<;t>pdg-@A%i-Z<9v9EC z)O>QboL|uop3lyDHCDqe1KOVSfblPJmNxX+!IA88Iv2lu9(jK5ne2ACtj1VWD=kdx z72|V~+~It?=lC745SWd-ROYj4#Wzb{jb1vOf;_YExBLJ3jqk+gu0LKv@E^58baQiX zwdRr;VdvIIzq*d2wvHzx{>j!V)O#*@J9O#?WKajhnJMy1~ADjxpB|A zk00f(KeO!_rH?5*U^QMVHK22#r{weW_EfxJX*Z%X z@qeBC)!23qEOfxmqx8$+t5%))CcJM=kF%BU|Js*&kG+m^?^Dk^3p;vQS`Tw%ItAR_ zHT6!O!)m-hf^)zJkMNlf!pja-r(Ca9hiC-eYjAUH|#U`;Pm_Su$My7(v8!9LYXQ!9#oI9mH{!h9CT-bsrjf-7%1(eqwYFT16B=ErJW+DJe5p?5yCq()sxfI; zX;bZVcF%BRiceki(qfliH(y9>gV7`w`z(3y;=SkRjK;ffL*2dMd(6(iyEJ}B+5M${ zSksd%XLmC#`}Xy7AG&+<%;P+4MzV+145+#`uw;e5)HY^R$xc=RrKE)3o8I#c&u9Z7*J_K3}}z(fi~iJ?i`h zZOZ212QTren2#1^_s(N8JK^@@`0a<=8V^67^;>ZNE&cGec$s@%;*_(qb=iz zp5m)8XcjO;dsR*REu84{pW4J#-1^Prz>a%=U_QB@on_HX!vi+r3l;uB>K=G*<}z?t z_zbKBR|1NbIS4?bOIdB4*~=WdHv(RCN!VEswFs4_Fcr=Ez$BYsUa^NxW#lV(Mq zyEn?b3CY!&A(@3Z6vSv&FMQj^uZEpI>dx z;*L2xxNqtPy-K`T@p{jvcdv`3;gV;*UXQ5Chy@@(5YEOnUOeK^z$cm?5XG{RL= zuf#iQPK|_%qPK3r0-|;K|93Ipnh9OLlQ_3!B?#maKO zJm2E^U9hy&SnkmPU(4_j`t|>V zX6Sk+cl5dZs;2n*pAU|=7aTx*+7wfR3#9Kadq33fnaxEnU-n6PFJgXoH|M|AjNQ3* zxS#GZ-)H|lj8ihq_a(fN{CD;l#m}`T=h^w{m8bBd^z!io%wEFGDAk%ib1l2df@`Pl zcV^OK@jpKwJ%{=*=dM|m6U*nnKmY5!e(vvj4`2NIe)nxiKCNc1k~roL?CM{NU$Jb8F-N)qq zaB`!oO&-Rno}yErKjUHH`zw45J`YtrWGiP#%%6^zh#XQ8>&3dlx1aT$$D1QQgwgnA zZw3t9{ySV8ebULqO|{d2dS^KNqTK!b4CisgOmx(Jx36$9JkjtG3irTwyC!a>{&n}K z=rAYspi{on#q2FeO)@^7#u&tJ?DkG+S{a2SIrszZ2VRq(j3cs*-p`8JPSdll zls&}t?`IEjo;ln~T>>|NmBI6~8zS$`KBFmqD)g(Fd#1ORe|Gr49N_gI_#WaD7vBG} z_|m55n~fg`tUelpaN9=B^5V&mST3GL1IMd0erfKPb5Z)U%z@yvgW_jZ&!LxSidEy= zH~U8qQ^VwLhsz?L*QiF`^55panutD|a{lo%u;mc+>;p23G`cTdeELJ_sCu)bP>$Wd0nEZ*)y3%|(05EPzhf*^3`u<+oq_ ztNPLKcW3EBTKD5iW>Bj*rX8_<6@KZ?k8kR|GP8`%A-mq=%`CqzW=~D_ndXeehas~` z^&5RK9|F%Chmqf&e%9S;Wp-TZZn`YBTxRLZz65bjoXbs zq0dZzo&IvwuQ|)%4`c8cbWyzoYisi$|52P1(UL7OdM@x$8Xa^Rn58 zj|RhD##`&q&@bs5{k+r?X3_W?-cRu&vPY-FgQJ=n&J3$lxO_wBcT0`TCotMhpFi`0 z)G?VO#q)7Hyg1sjaAf$!Ov=ld`z_+VI7@%_mleCG`_-}o?tgH-%<`+^OR43;gDw4J znFr9j;7g?LluzXzy@1)Fdrl8HxkZ=0fBT7WS?hY3Iap)#=<{|HUMzdg{r8soe;byM zU)%^DkvzAp-_IW7Rp&MySZmJwx_&YEHm^LI?C>vFv+t$e7oHY=i2t7HclWdFgkI1urZw`>awo!n3pIE4$Ic z`H0R(P0i~r8c%x<^crw!*qi!Mzh6=J58ry>CnLH0*9ZQxeY1aQoi=KlJ}-BFTkjPf zf4svt?1b99^~$5$=0V%O>vgs1CjW=diFs{2mnE1;`kiRk*7-+v@X76ztLS53 zcWO1*-mn-D|0?(_3^RVFcwb^zQ%xE_f%Lf3`noFZQym6S^Y4l6L-Kg`nAhFc%#|we z|J?tR>Ymd$9cG>F)D+oa7Ve#Vibs`Q=(M=bW4v7QXPbCND~BIhS-bY(Z>)(kw4nUs zJ~p?i-t+JCw8*~WGjc!Nvdp3MH}PV~-w7k(3qgydjt$2!@wA*RzQLt-&mE4(HSY|0 zzvWJZ$697X;z{yDW}ulR1ebx?xOeo_>5Jjg@Jn0(+%i0|-P~Ev$ZVLNE@w7c0Un2* zwb@r?**tnpPUqKswWbal2$q%l!)G;zx7+c}3D4tvd_D?qMO`P3(V|b_rf06Hrtovs z2*I1CT4LUE`tIO9?t1ho8}9gunq$fPUQvIvae~(MfSd8Mp&bt7@Av zg9{dtXI{=)ICw{cZ?@qy4CyU)%>S;NLz?zy~kX-<5b%l*&%*L>KoCH6PN zH>W=s^W9#OUl+yu>_X(vB9GQmKizm{y{?vO-*|Lsg?H*&un+z!uvU5tSWv+_c>2RR zc5b}fw|6x6k)7h1&=}Z>f1;STDaS>B7>?8uUQDTRosHncv+09<=F;1^9|L;sp74*u zw=vg>x0F}$C6&*g3D+<)>Y_RHdxp&hqXP|&A8)%F&T!SdxE78E4pZWPKhL5eGmv5U zU_SdOJfO>UODrQnrb^8Kr;{9#tbf%JHG2wq%`?ppls)&RT<)OTfv zxZY)@XwmBLMAsg_ZQLYYdsAWgt=RA?QkHvGf?w$ zdELC4PYY~L%uD`@S9&|=Nl%H_iucCj)n|aw$*b{~*SGtb*iQOQOdb~VpIYPlu?Yj}{N@{<%p8k$;OvsK8NCv{D}C@8JAi0B#4^s5l9Zx-z{3`}b?!-4n4A@UhD)pfmJsdxC zx?w!7;JT-STl>2*&zn^P1#3*c(9^sB@p~~7PR*8=b5FMyoZPZ{kh_GjjxRpbRI`=>g}3%FodVs16LZ*8&q(;r{Q4D%#ig+;gW<`7(7`$ zIlg5U0mq%$65n9F^PTLearQdNNpe#M?;xMM%%9*G@J#&lvtwd>yv*^*d7uP45C`hc zKs;cpa_+EL*7b(QXH1My55fo*o&7S$%6`J){~O+b-a0*jI*dMq&R2|p;Y`$Xr^C$% z7L`2c4y~ki61Q?k#TK*<}Wy z{^D=Ba`fil3Qk{o{>)h7DU&?nj^G@HgBH*AnMTuh(56#Z@_VzJgvYP_(E3rkOQ!vd zw)%frFSy2sXxUz}*?5YJ11;xZm9D)zw>zVj`qUfk?8!)vEyrg+LAU_n<(Hj-u>TEr zjh9a|v6#l^qJN(XzLr@VKfij}=^D;lW|yf^606+fqSYyWB8|5*&l$;mR}-gitmhm= z+biC*^8M?ZazBbsqx>C=hsWk*_L1+#i`l$1UY+ayj`j3J11#nfl3neU4UYJ&M_8H!(`{5!%YB0g;KU@P3S%ocsOVr*tOyd>Ug&^kBpJSO{( ze)L@B&bNoN2WnQ0Tnpz;4pXDUVZ;(OWH?>nvcZNM!{#s917)`atmradUh}uickb7X z?NY0swJ(F_DLvACPGYzT#UDQN6Wju4RICs;Jf9K+qP-C}r^V0gHnFq0ZkGGP;f=m8 z-8=kX?fBXUE5|qbUc3h%xu-5YNKA(9?ZRlb^nPnFKzSRlyzKwe+b$G6_lUm7?CXnV zuHoN%_`1K}?yUFG*gv4Ac>r(TKFm5^dlkk}8IFIi^Ok*B;X(H3*WyjM>U*<) z=$Ur*l(qDxv(cuMJ5hX<w|{zGYRc?Ot%x!BidSY~2{rvlUEG+4BZR~1jN56A z6DcpGj$IF?oU`TUn8_vI!#S_S3ot%AW3VZnW$GWfGdvw}8Slfc1m}O%pIOT6NAFVc zT_slsCm2CO$65_<>2@%K6O@^E6Y1%^Ev?x8%^;-8Tj z0nhL3Mwkl5!x!{|UVbv?;RsjhP`n8~Z61olrzZ&ZsQ&USCh{3p;ve8F*>kiIfA!3r z)M@ASL(fO6!SiztmrAZ#yc|7M_Hl*(g_CLL>Rj}ea>)J zhP7L7KUFs$h6BR^c>MdjoxNy!egEO_Ub>WAh}%6ic(m~n-IqBrpQz|cGDCIWXT87V zdox}55M7x&q4viC<9F_JiC=J*{CB*>%UqmYHFG`j)WyAf z7(XdHEcHk8&h4aqFVBVV5}iC<>r1>BUe+rWJzaiJczSki(I;I|*DhY^^*rKfJ%qzB zYLD@>e7+pq$UW@b`S|i$aEy40-Fa+o6E7uxjC>(7gPd9yCsydc+wq3ei)LqC%e@|j zhmNME5L?0>@qJdr$?SzPn^MQ-u6U+ZF(TT+GH=d#bEa1OogJ|!xy3%5+Jqq6BtQ8(`<^tXN zEq?CtSg|wKY%-nz)3iXXc!cn%3KwC8|Jah8)uIoYy?OQV*6puXgDixbevgQez_>$pZgi_$ErA8&pwC)IMlA+ zhfi?1DTjwItVgCbplkD8_0z=l`o0GAQE)CkRby9L;<{LTx#dnSr4C4+$4@h}JKpmR zev`BNJZSk(#iy@&AWq}0E!bDVgTL%6qrb4T6NbejbV{tcn4LoD&7utoKL{68ork*| zy{7ME+8in#N6FK}zAy71&vz#Mw|tHl5^jrpjUVa^49;WKOTU1Vl$$L`f&CS^~T8ceL4+LX5r?|l3V$7=rL>mNGDueW}r9y@gR z_rqlr8xF;Q_&sMI9}UB~_@>))WtZGr^LR}Bt**d1uU6D574^;>KZ<#|e$IWLkH$Wp zx2chMRm|~PnC!!K4evFY+aCAdF3nlHFlOBSMtUe(a`hBE-}9iYy_%Rfnmg$Zx9$wQ z+L3?L!;4)PgX6FHHM#%dMmz}3rGw$)Xg9o?IUCL7?9_>}XaW zoIKzjX0{1CNQ|GlQY#v^DRVx1KiqXYAm&z_kLbIR3wvtLyZl~{#B3hW^}XQmevi51w_sN87GFg* zQD&w6JZ<{$M1m#pua#5ju}eS2Um@Rz{GXnpc!%%`<~2WwqcnbW{gL{i-4o)=44*!G zckk;E^S$|=*I;F-m*d%EW^*ok3G11;`TL7sg)_^O2 zUnRD~g53#tG)@Q)q13UzzltaR)+B!qJ={Wf4{>shIFKEbH9oIp*K7R7#EW1EJ>m1I zhkJ8xg7>&r)B3F@E>=r^jb^j!MV$K494_xay_Gz)mKjBQ+2Fp;BL4z?>Df}VESY;R zmHel6g>wW4+rIsgnFBk}jt@Tg?D4yOpE>5geawrWXXndD_H=~bx##=xs%)3O3I7Lv zElCFVIp;kMGoP7b>Jr+MN$3aaN%%tiz+eJ60^uRklRdi-FTvdLws@W1 zExae6JKt|!`0n<%!li=c)$kyO%@~G)F=kGceW7yEO5tCuk8?#cP)0yFW@GKX#Q_`SSjURw_*+~?0+Av(yO->ulubn&eo z-gc!1kXO~;a5M9_^fB`G{n>rI{$}>%utPupNG&V2%!>!F2J7cjJFi~D>o~`A(vG^k zd|$pRoT;W7ZLxUZWnPt@N-eJr(n|$n_jCE0sjZ3+BhTM>1jJ)I-0sxZd?e&)TB)v2u>V$jE+mKN+4$V? zk}R5u3cgPGgM;e-q0G;J^M$`^!vovA<8i(wcY+P4Z*msO+zHlHG-R-+?A>#&lh@zDzev8J?(SgKkIi#;f_P%5S~}&JTxOboz1n)gTo)dEwt|mrW_0z zw#T2HCrkEmheKy>7(TNaBzh^mV(~-9U%9Ya~AtF7H8D{sr8fpGgHBB*k-Xza#y=Odp^?A+?tdJ+aSw{5J!K%Wikn6VG{he#QuN?43 zJh=XcXG`us`sj1+{^UKi*pYuf!tKV9`0CnkKk+(V6pm?jtY4BVl6%VT88szMa&nWKr5#8o*D8?{7>S6B;STtr1!=v?&@^vI9mAo>X~?FZuq<1k8l7}@5{;J zhgwXXl^w6=#ei`>3hFBLFWezBU3@?u20Xyb`Pb-v*2DYr&rKYGZ5p8+{`p%lf{t3W zdh;jGj~xB==b~FGJCEfDaUA!CwlT9Y{b1dBEpa6^WPI{}^U0ziIKac;t#LWEQ#V%U zo=v@3jRs6_7SEo{dI!vd;%6}o2ME?N=vfaZ=ci_)TcH~WuGoOT&<^5p2mAGW58*&+ zi#a(zvxcS~#H<%r*^Zzl|DViW+=k!iB z_r!jt_9)6)m@;WS=0x1`5obvFPX!w;^O4H*iEcY{*Z%l z@_e4+r;7(>iKa?AqJ^muD(F&Z&4gxhq!V zKDL+Ox6x|j>pI`@wYR&$*{=GGg~R9`4n?DI=d~Z6=CyM&`Muoj_F2B<_T$Qt-dj7| zq}<=&`f~OCzG-1py(;TQV>uio@W|{sk7*Nsa!mh)UGl!3MbeAUl zz%GP)x1V_Kt~vKze9JxYNxf#*K{&8eW>;z%pJN)=tr@;z!L`n|i>FoDq5i2imZPsz zyEvb?)Gz?Jo$m!^czL3Qr?rZsu@N3m_&f4OJ9wbELpR6q=uPaEM{|br=d+Ik_XM|K z<_wN5-d`7cT+022Bdo#!H_QF6Ke?SfAU@Ly{AyV($}_aizviXk8}B?-feX~Ks{l3$ z1Ae366}kV(RoP|eyv9o```wPir-^4> zzk8QCaLspCa~7ljYX)n@C)|Tc9qM_rOJfICwdekC2d8qL&Fl5|<`Ck%S#L9#e$GQH zdZL@p{21s`nf(-SAT6h1ARDOne}G|7sew zoqi{M=I?o_>*HbLcA(3T>V|kO9e9SR^UM57%rL9bKj6HE^YS~pFx_$d19yNP-<^%_ zN)F=xc6A|pH%`*io{Z<495pOAnxCC*r+@UG^;dS~W@f>6CAeiU6+hqH`-<4wY~#K! z!;zvdSTcK}m1_0|>-Ie2cipE?(hEd0;9h#k!%gQ@Ego-H^@u%vaLsUGeV_K)HJ*)c z>q_P#$(L$`O8R&+#7gF#_Cz-`e}+3}cP-w-g|*vHd}UeBIV<0U>mN>ORsTPl86d5| zXmXBw9dCc{WlY>Rw~;f%Lf+*|@xG7FJfAW9)9jvdKL6~~n>ejI>g64NvHQg@`kBfu zjpUwZz9qN76L>emxO{KkXZmJ)Cir6MgEOm5-Lj;9S;9>*d$_oq+2!G9H?r$5v8J25 z_4l6llD}&khc_Ipb+t!3^|v#aIZfSrO|DC=R8cF%E81t6D|yMCZt?$Xhs%|jt}_!( zNBj_0|M>#m=gec#zLlRTpD(%7;jz%N*ZEeSAIZM*%(QNO z^Y7iL_uZo*EVE>>Is88Qp3I)iXYc{cR+i-0cthlS8jKHiJS%Cr`pdmH?}fL<=YP5E z`*^G#9-kc?pE)$w+n4kA)xrDvvG@pNFDq;>9v!?9XuR(6=S_SGM(Q=I#;U>@Qd{NR zByXtu%xW)pIkvgm-alME-WBF}c4p$8_PGc2IQ}1?1YH=5dmA1l94^YqNk5|0bt+I+U?t<-SAn1Ur$c}e#1?df{l z>W{>PIz5BC-VBF`{!I|_8N_Gyt>+E>^?uA4Eu6@j_7rYRwubb zUR{AhnGKg2ksiv<(vfe^;zp0c1Bacr+>tu3iD{VpwEtIy83ywUE}@QzH;{b6w@ZDe zkBmR##czCcm>SpIp&8c66 zYna(Y?>?Kkw%RpkJ~5!JH?Grf48_w{uPmOo@hqlnsA1NkW$@jU-Qdntuq%Gi z^ei~-{$D$_t#ew3MFt0`$vI8f!-`&Hn}+a+m)N0QxZ7rmTQEj7kKJLxQ|#CiYs0Os zMYEya>W^O=kBV@8`*1)>tDLZHiU!PyF zbG`0-$3HN8I`vjK0~0ubVteAOSWvz5g|$&JzfydK5{su6@FJJ=mF`das;&;B=(XXm z@evzVYua5{c%1rRoXdqPeesYon=#{VXCH%I2j*6^XgqfKI|Kup?1O{Bx#x=Z*X%z& zve_}y!-GHG$@+!D=YZ|PW$bd&6A!)jUn>LG{`T_&*ET*qY+g7G16+~s6N}eyFV_C~ zjiDv8_ImV%;SH)OU@rE_(j&S5iD%)D&iY=Pu+nz=I^0G5fX~`=_nXN-ycZ`b@hFIw zQ07E+^|iWkZh+U;X+3?p`{DAZ2NFA-p)%W1`|zZE>vC`o9`kebX;XL?&2T89*--aS zEC++;`=YO&N?we%7vE?eMl)yc*<5x3Z}DA#&tAk2n_1Dn&`7k4pO-!X$Avc`EuH)n z&J}zgZ}u$j51t+BHs>1-$H!0%AJUs;9-i~pjP5=$D)pS76MvVw`cK{1T!(w^Tz}+c z9Pb&uAzbAA)!As3=%Yq&f3B-nknht^)XYsQ{$F;o48RRCcUAjku21{M-$))0wwAeT zI9SW>YWQY&2jg2sGiEoOe76TX+m%OmaH!}dqT3A)ACCV*w3}uI`7XMi13sg7LiiJ$oN zYJ%$T&7@Ngz$E+i2HDq>-Marazm9ivaC{!F7tF&ahqM3C*{q~*gZ+g&n0(5!D>bEi zOG7AU1v?oqJLd=W!hoF=L+@?;Y4zRjJ>I%@`Gd>my1{2NcUgwLHuZ1jF2yfK?!y;> zx25-&``v$MEb~G6-0u%=uoj(Z!N_xW@WaJuwE-`oEA(}E`!po+&gN0l?#Uh`bI9xw z9Q0>$7pB!|(ND{H3-#dOnNO#`P*bQa#?2t@WPj#zhvo(+hDSJE5p8*Pqv3xvaC4jT zbtdB(Qgb%UAkCY2*+jEeYRxXb9}FtIv%+=x*9y<*^E{JyL*_nakH+2l zlbdRsRo@LR06aB5&O9@{M>tJ5s8hje@fw;d{vLI!-T)uK-OoQ zWUsQlxHIu!3x8{uSMNUGx}EU95=-=Pur>eG(`N=HSLH0H#^8+uqtD(hy=Cx}%$Vhq z;1$s<1v|(t;?=y;$LR-B4`lyMr{tBTMzk!m(F~-<3s<1jZx?a8%^c;b5<^P83Xjm= zb^dLBb@bigIzFK}_EfM;xK4KK;^_QKKk|H37lGwZ8o78V|FFx}Pggz&(kCoj7$Q@g7!TjSr5`2kv6;A@c&rBjQH0QAR7=^Fk6~1WZOZLy1SK7lsr*R^Ef&88w zjl+1qm2i5^F5^?AzEERKxUW;G%Q9btBbbxN(<7KcIKtryWe?=LZ~VdXuior!Ut5Ed zbv{F5S9V3trWZ4Jh0DX^qZNv_i_Rq9w^#V)YOD#Ky=OLXxwoR%^SR{bc(Ixdh5s-U zos~Wr|2P^l?`^>Q4hNx6e#*SrS@B*A)~6%%@(#b!MSR!zXy6NoUFNRE_jA~L3@+|GpZD4MxbrHM8^ooF>||RtbBo{2 zu9>twa^Gyr_rcpz=eNY4r5jJKHV>Zqo6*$Q1y?kKwv(j~|7hF;FaQMmHAx-T5nfbeBt=eYLVA_oX*W4$1rofA{$nx`FsfIk(xNdSP9i zgx8!MiCz6(INt6I-9P@pvbp7&yJ4<1&#$U($JGnF@Y~&J4&hkl+1V?l$C${D z#iscYpC_2V-qow{D#A}2l55h>g=5l6KWW$ZnjS#!=9!yU={3Uz$n0-ZEx#@<;O2MZ zZ)(QE|8b_&^ebY-k~$z-kfnTI!F0rr>@l2G^G@@;slpAa*==mMc|CZcoR>LKJPr$| zAJ)14*vbihrjIk%Ko(ve~lhDSU#*?lHGcZ%h zu21^{&a}l}{zPK2nA*Da%=c0|#RDc-ZDz)!sWJ3aqrPkRFuYA1dwLS}Lf%t%mYW&i z*~O;$Ou?Y!y;?ZVzIT{fv+$l%o0%t9)R2SO;S-NZJ48>&qo+Mz-!tC_K48V4g9m^b zNc9B;Cu;{k9GHf=gr`02 zmD;TxK5lZoyyCvg`|3JpEMBm1UAcJxU>wkD<)$DTn=A&PZRz2}FbD&LsH$Nblz8}9qIbC((5%6*OdramBZ{|&YOy1p@eS9)ak=WOfl zg(p`M1I()U@#7WqWepx+mXjUBZ5V+XwK5$)G_TQU3-MmVeVf+PR)U4$4tWmp7JqcL z6%N$v8}EK#asQY9?q&SFnWMuGUD^BP2Ugave`skVJ|pVS@LKIn(~I)X6yM`VxgIY% zc__X?_!gO`!u^Z4PwIfhR{Z6zpZ%Kw|IBXN_{t5-Yt3_7E{rz4_tu5KJ$e0=pTGa+mw$RP^KfUAFLwop zu@W7~viO-jq3Uk??sEU-X}DSipLkgPTKb@10C|pL>Z*Dx`&XCc`<7XG{qToFwSW3v z-|Tzedm>t__{>C)4O5cKc|3;;n7-RNFI-gLQAgdj!CPfpj@iTC4_1=8HQL8ufYG5< z&9DjvBM$m*3kDUf2tHeCqQY^a9ThYAc>Dd~snXnxo1f)A&&cI<`0Mx{EOysC(SJ|w zir0zRJdqptmyLa#VjNHPz*BW`K#lgP_NrHU=A8LF-@3U><>u&5Ms9tn>-FH=n)Mfd zow}T^PZ^7TTFz>i1JYRN&BP=#x$J3nm+Wg71M1@8GVFQvcXLmzdglCZ^xWBuq=TkikRFF*SagE!9nmmzt7RNp_E_@6tjekn6MwTqgx zv6Z-*8FcypH9)km;;PxnIX(Rhj3PW>oFU(7coS;=vFyKu*-WXu)l__4(x1~;?Kl^7 z714s^ye%yAL!mYJ3XSr7sddH6@SZ#PE2}sAzlyieQvbK`p6BCR;WL?WOzsCi@bti3GqG(FG)W@yIjftpAAm{k2U*7vu|)z zUp$KY5q?}|-7vUt1;;n=_O^IanCG{1=fjO!5}R9cY%{&Q+#j7^Vg^q01kFID>|98$ z3*RBq2uv>Gdsp9#=|l%N$)cZpR~8Yc`u&)=a$9ab+as-A-ruq?ZI62Xf3;? z)~JD7 z`eDCkQt%o%s;O?y*@_-6{Zl+2^#J-R~+&tYb=! zI8%`e%sv`ETljkTy58ebu!nNSo_?qHPow{Rz^fO|9-p)kxqmi!MC{7@R-?~_XO^B+ z-9J-2ll1rM3!Gh^VQ`Xmuz7V;IKXh2@cv;DGx6liY$e)O{kS{fy*A~}CAiLNW^U#Q z;oyXqinonB&sSS7kba=M|Jv+C{n3fuf$nK7n)OmcWfo9sVfyqlu<~anSA$Rb`{bR4 z!C<*}{=&Y}Z+`ovy@lD=r7msQS6r#+G3&`AJRUo@zWULXVEMVXxu^1YygpX)iY~}| z)^9d=*QC#C@HakR3n!IEs3yOQ(UtBl)0t=C2+ybI$s94f*X+Fz2hOh0B?MDgDja4$ z{&WOui8Jm*Fp~~Wi@p?Rnsy}~F3xD~>M$Na{M>5UA?;pfP72G9zKVt?93WiaZtqe_ z3=J1s{a(&*E%V=KIbgZNV#ui4uIwB3jGOKZti+D0&wed4#-;ES&r~={r(s07|0lC&!#VEDt{qyT@W#W*?ufBVv=r^sKH>iI z3&D*|4`yf6B|B#AE(y;G=3t)n{8BXGS{>mde{<#}Z4n7_6 z=vWUvE?292;#*cxhhND3+y3V-{OM7=TkRma%U^8|CTBh*_v6Zz=Q~D2@7#(R&iKr_ zo;+AtG@QICuFk4$GA~jO1j8SXRzBEj`rF`pxB?T=cCV|e-7VV6iTv#JQtEBoE-uW=n6-#0zS|onSCmX2l(6nRdb7BTl9M^SlL`*~`i$Ae&dRQMc#3(fc~5*Yy(VbyxYDY-I-_ z9Lny*#ul%md-jkX-x>boJzmATsSP~0U_<5|_OoRd6Ay>vWxN&V`Stj%+1K!<+BADQ zuE0BZViaE8`OU-$XEXgqxTT%MrT775=HJb4F#60E)ALTzn`Q46jh)<4*=HArD(R85RUHQ|+Fz?_$zPtVSkS+m$v>Q~PZx1hd}9PL@A z4hz5EKO5O?v(^1~zg9eyc?ZPPuW~jX)2U(OA7ZBj->`}u^6|&ldpe8!zSX1QQQ@%U zEIKQd|XY9*)MkY#*2M-Gh6lCw&l6h`D^}Pa@{U`3l>!LfSbSl%%2|9 zn;qYL^6Bt=)#lM+7oD7Zyl7^1kq=&c*v7NNXr1Rx3->yH`)04rm2giyn`qfq)mmmt z!IbTip|L5sG`u0&F?Fq+liDb=t%=MR-3Pfoo~3YZ^_9N zyNB6fy>;tLkM7~%?D>Com=$lA;5>Q>d{WvTGltBel4~-@}ofBt|KV|o|;Ca}CaaR2O{HHx%-UDYY^C);dbpQ^^ zjM-je69&2k`%HdWh3CN%v+KSduY&FSbHZQ>*(u}9q<4rOB_3Yp(&kdhUuI0Do(&dT z@X?v2;91=|DKjeEuW$>pPszTgUcKpQJ?cpwRj2;t4W41JQZc*gZo&)jLB@Ess|TZ{ z;Tf><+gCr9`Q1uzz|8hiv%25Y=GSJ{M=g*M5lp4U@%zcDO@JXF}I(7E4T>lJ*g#RtCINNlv z^XfR?gBq)F)G8~@aD~!$q-Ibf*D~L8_SBa&CXI#Y>1)x22Iq7CAH4b6PajPEZ)VjS zo?v$Jc|XJ6TjqP=+eD`i_gC*Oz^mcExWTw&QzJ0K>{6uv&HhF+{P2!aliK;CH*4Q{ zZD5VR{)YMSw%TcrH{WjdkGuPOW&_)>+f8?WGc%fCHi@HRdS-iTYLDF;&pdv7@Uh3T zn`d9F%pJ(tQ;&ul-Plmu%2y5j`^>gp+@AB5+2|vj-4*zqn0RqroP^c4b56XHJMCz; z7ulIk4_xAa|2F%IhJr3CPx<+688y~vZ<&Putz2REwlrEnwY0h{*o;67yL zVg3-kS9D*gz0BxaaJjagFTLQjS4H2YXMp|Kbs}HLA)c?k+Id}utz>U`_&0izX1x5j zqFKRX-IiZd^T-L8!rdr;7YupCISM`&e5m+nsM+i%|3)o1`+I+IdF%Qk7mkiTGRYg| zrF%3}`|#+s;DpXZc3Hun^^bUF?sf3cjnp5WQ+O!xxk&9Ub}s6J#&|897aQi>{{=O{ zOnldZlf-Y%uk+y#Hyf6nSXOipsddaV#X3FVQaEzc{@!Y8U-3D7wo===FT-%pVP~uG zN3x^%_IJN|lK=f_oVuRhUi|*)cu+OIsRwvD6k0g)r?%s(_7{Pkx2AT25;}tPEyWhhB$!sn&=U`Cwv_`v-Jy(tF zN5Uo7zfUb@kA&Q;o`VIdGYXdCy_kWhakAIzJ}z7Gy1n1({^h*HaNip)DqK}v&`$1y zL&qN~y?^QdGxrlS!W++QIzC(RZ>0><0J-ncjEw=Y*xztWUsKU(Jhuv6UCcr(KA!m*Lt#+G^UheN)d`=7n6>VQ2p z?SB4UtlKn$+3@e1_wlayvv=SwnKP{G{r9eoeE8n&=bkvwf2?_C>BZBRy4M%Py~)h$ zf@_&!!Qs!SGb?Y!bIE>W-s}9@{9587&x>z_ug$Xw=ZudMoNw2k4bER;fb$#OvHhuU zM*j&{razLG#p>+!_vm?TDpT)_o z^M4w}*C>14!nexLG*1&}ro5uzRO`(=zb-arFN6FNFCN~G&r~+>bauqWcxz{0MrOEW z_Uj(NJw11|p&BuMay&xpoA|`*#Y-l5aEX17&F$TM^rd*nhy!zb;==mD$9~+p{^UE^ zU)XkcVWH#kjm@6xc<#bN5)1i)#LokcAJvxl1c_wrJHUBU1Aagx)m+p>Tp7uOxW_rE) zaN9@Zry7s2rJG;vkKb5og^oYBAz$q#Kj9PX!>8jVyMuqSoxfA;PM=hAKR)ytoMsu9 zaF+L2(<@rh%yEMIR$(cn|2Crw1~}@T7v7ThpB_^VzF@D#8gwQFkJ3jpvTHZE z!-jezbHL=Uju$_IV7c?D&9bv3egH*(;J#-kbvSObzSm~He?Bi_!MEZyRAz$kR-T4@ z4&mnf;L1F~PMtyh>Ih6>*!MAlqd6Q-8Jr+^OuUSu86Bn%&d$hib&D?0-I!Jn=j^I0 zaKiXKX71u8$HFhOuN}7O+3nfGxep`V^bEtNJcI#c7t5~RYD-+$@*QpkQ%MeV_gCY^ zPp`R|x>v8TFP3lld(^#fw8pu_dh_aW_rK(y%&g^f^MEm4cjK#So%H<92t2EtUtCnr za8v)gXC}L+R@kQ%jNZyTkB2ZEI&sl=8y|Rj*=CJ~Ob(-4;AyD0j&{53iH{eWdzhUT z(bd52)JT4xTBuM*b+F%p&TieD zbHmSyC*2wi{5npESw9|5Jl^cEj*p8w6n#(T2I@uH&jocO&A(cv#JkMbaFNP9AUw0o zH1L?Bi}aGSKlzQ$yN`db{fkG}R^EN|FL0ggP~g3w-hhE*FUpi&g@(#}6~>SmaX1d~ zk>f3DH_DlC(&tM5lwMu!pSi!9KwTV7hJ8MnafE~6PG`@-AaA5WwKhE&oH*Ef16Cpq zz{5x6ooKX%Jm0?bo|!v`zXhMm9_5kb{Oo@(_n)VN=S_Eot9|zK8|FdT`Jy&DV^-jN zWT&Vzpny>Z=aRLw(IAy$SXQfi*e?9ANs;fvGq zm_A4SSNcERQ2GJ=W^`fVr=7u-^V??8|HeIw9~4}4G4oUSes_PB``&inqYcWeB{PNi zWLG`cTAr=*SxFy&A5_)f zKXRaFI;8*K)hljiwx8JWuXE3@c?RL7t@CEhPOfk_c4@aa{LGH$ZWcXZZXsr5-$!&( z@Fm=cQbUQi(VTamgW6kNoEjuOkMDwpj|VcH6@Jx4wZeRv>6Ka+mY7;y%}`G-ZO)wC z;_)@*X>3O!?L>6Z&SvR9^*weLo{fGW&)PguEf|hWe1)d;4oy3w?aB>CrJfzeu?{X5 zoOPHdL`9tjQ^ixj%km7%GfUl{9pvz{Z838l#^-|K;~~2A-bXr}U;L+Ut?38sw`=q3 zxgv(c-1XFY`P2a`o?$$RR>D2hCxs7~xk<3U@Ceq@KZU=S*nq{?qkMDth67Bf{4+;BFVA0Xj!q3!Y zIDD|=wcP*kWwJw1E^6UZ*2BX|{t0fEzMiIs@9-pyDxTKSeiiILe3sd8hV-9ndaHH! zev^(c`Dy#w%f0(@)`6P;Pz>1f&(x_Kumn0Ie6=>c(bTh<2hq0U;lDMXeOTFjGYVsz zHH(~vXJwaq_>>*B=dAC&8f|d;aQR5z*Nk6B{JNUKJ~F?~-N_wL|E<#+@7?+2XL$aN z)3VQm=T>H8FeLi3;tiF4GI(H9T$s*1m$xzlq6ac>^xyE)=shZWu7a`VOh;!HjZ*r2 z{Ym=N!Q>@7kNWfg(Jb}QkoLo9aEkRT`q}V%N<861BhD1xs?3Ds3D^;QJX+#KI2Jvb z*L1WIunWJAx9)qA*S2x@lZKWcx80?ukk{gTf(!LT9zxK6~^^5 z-}X7w2k`%b$;TsYIQvA!#c2HHR`;0qx?Zi8{LjNGSZTi*>VW*iBXqoG21>hY9*`Od zHk*5F(1YoGkltT`b~06%iGPS{=93+HqBe(lQUD-v#Acmw*Z=mEr$iNYZ; zZ^e-g_Hx0@_Hz1AyXo3(y}j?g#NeWN)K~eev>e&%R`gfqTDXxgvOZdw>^kkCQ|Jk2 zQcM`oe}=c69R+&K#qd)G^-v??l%IPx`$1^^)!jG;=`o$Zf>C*9_O?BfXGT|UXZO`9 z_w&BDm$>ZvghkL;HtYnp3o0H5cmZp8LmRg)e0VoHXL##@^LeCaJI<>nQ$ ztYxtvoB;90K3n_K%Pb-u1?Jb{!kW4@e1M$c@W$cz3F2&A#-!J9JR{^1(r#Gwg*9>QXpaVsShPF9zSsY%BOd^kL6>)PVeVgybJjpzH;oP!Zy9|?ww`+Wemc{E;-`O(#Ot|#Pe{yNV z3!Y9J={--o|07~n(bT!iFw;s0zj8xvUF-HW<#WViOwLmm&GCN4u?Rn+%%ZZ7ns18l zreL1(ShNu%d4~Bt!S93jh)4Q&^|;wz?qS}GXUtziJm*jAxv7CJXJ?;Wfu z%bzdzUEg4Kss6}pPM-xEz&#w>)cfN{Hn!CUsi$BF7mJ5w`VX)0{958&TRj4&GW&qp zicOiZx+}CIm+iG)?ws~IW#9R!=;qx0{_xy_P3y&AD$UXVkEXu~?)yB?Jx_14@k$$Q zxZ#E?E`~i5W^$PLAaRVufgK}`5j${f!?K~+a3q8@s1z^-vrq+8>t7KYWDMDaqtHrd zN5OF#c|j60K4B+q_6w(`cxs9pu2?nAJ_&7!l1Rxu%$ZS673cGPpe#^&qX7JWzvsDM zuKT*L%WQSldtMZaXeV#^8PAQq5BGRSPS}*^o1d#Yc$U~_^sEkjy3@v?abu=FG{y#B zF`Y~M7_cR^`_t`gAHWK(%1bx+#@>JZcYpSgecwmoz{5PGtN+V2&S;v^>5FVTqq}&A zn`#O3FTJq*=V#|79bVP^TUC*{AuN7k$08JG24cJDaB` zOp1q{nnnz}9q-M26W{yduJ{>FBVIU@Fobf7T%NA$f;=7%SkH<_X11>;82qAYjluV` z_bTqx)6ek|UC{T(ADq)CkGYFDGU}^)|BwH4?6t4_?FMp8kO8jeab9ivP_WY?^_J6PAWbB92 zhX2X?@vAz&?OhzC%^I%^rnr-qi&!#Z!@Jt9yEw_)YOefhm%W#C>pV-^2r%ZjPJYim z=d3#dhtX%t2fpGf4~@iTdZTYY^c`#;s(tjlUplYpi}Dq{G=WVm=m+d~#V<57;n|>1 zSP5^h&#cyI{{C(bFwcv(g=_Ux&uUV9(VK4!nOR)>5sGryjcvYXC8M14-cUU<-4es8H+vZ;Snw=~2>clnk<11zZH}Aji_i0XV!$daPceqR6mJbQtNqwg8 zQN9w>;IC(&zAj$jKtCIAv;Bwq(>Pb{N$(cp;7;MtgO4dbq!D_h&u^x8AQG7;^;g zxjSD^5|7pVdl3!<%UCy`m$&4W_&R_gom6Y;*sGw?i{3B}J9 zr&sNaieYpP)e!Ljujoz6nYTL=^_QOSL=8Z%<5JpA^TmF7APjn(aqrYlWVK*@CoRj# z%X7_!i>2Q0oZ5B+!+KVR5(C=c`jSM%k>wYct| zujkE!KXJAF3-9K#=T*NjcKzhm{hmb_;s1B(GwnuoVS=fRlNb!qrtT&nJH_lEw| zM87&|uB491f81;i)^q7;cjN3Fp29qjLLT1hvvI)c3(Yjr>as5nvlHvg7RDL&jLx-J zuhz=vsvTJWx?TH7S4n{dOtuyl)u_!*~;J>QZ+NB%)hMGGK<89A;Ee~?HDbHS@kyQUf{}|%~zFX z<Fu1os2S^HhD`yYF`Fe#0mDgPo-%cBcJ8`TY4C_VVmEzhJ-lcgzdE zd>6O)x<26wjCAi?Tj-hfZu@%MNd8+-2l6=zy)NSiiIBy$g+Q~hZUZ71FH8@uUh z;c(}Lx3<4Goh}Q$$)Q&)t+eLK%>vXYOLEod;kv(YeR?bQifClWf$hTge*G*QW1r8t zIFO%tVjOw`Ro}b+?T?DZ?$*F=O)7Rd@S3ZuJ>k03^owW2}(vk{~noFbT;q%vy ztNl;dTRDlhK2^M+1(YTY&S03U^F2{h#zDdfbpGSqid{7Ny>GQ`wSjwR&)}uc4PL)` z|EisxYsJ`ldv(*kS?V==n%B)$Z^HraJoxSDdupZI-ra#Xx)%mk9UKM#$B9dJdGz~q z82%e>jCYrJb2Fy6bj2Ll?ipGc-ZxIVKA_yc7Oq5t<)|}ehP1__lz*Yw56&Xpl4ZQl z=gjiMfrpkXF6rw0z-$j^GVrU5o7GNf?wPslm?MVcltbsuqtfE>Z1g&6fOH)w6V)nm zN0_j?Urc*uPn`+Z<5`)$+9$Ve(WbEb_`B+WE!uQn--jpe+1W|I2JXlAhR415atj_9 zS0K&u%bt&1e`(}rb?&A)Y`tY3KWTmOOtb3l6RZ30^YUc&PSl_@JoHY*4>42hDo&Yc znz6$WuEF+hI-@tbyUtp=gSX78@BHB6Pu=|Iou9mp3wUkp4C(pB_2#qbfHr^jGwkK8 zelgtUntOiW9JCjG$a6D0gk9en&mX3zMl+)|w`}*s=kZ)d{TGj~=M*003m@ft82YZB z`2cos-E88To|irr{E~kP{5c)bS$8-*YBp`x^yOjg=Bnox@J?o`3!H_4t;+v1W-56t zragYlxjlwIMVJ5l3~ut!vw!=m-#v!=a|HMI2^yG3U<0Rc*TP!Uj9&4)(+^j3Txwob z?MD|$UHtSVHL}?T{(<_$zRiVvY1(PHEN@+RuLo`_@9&F|JXvwsc{8g8ZhP)={_p%? z;0Rn#^K7(p}9#Q<%xpmiJlK zU?`jB1?g{Gt{&jwycCY>eVub3^UMsFY#t2{QSZadftzW;igx{^Wd?m*FO37<%1*m-6!D{_Qpn>G@o|Acp}sf_gBBWJo_|V#ijNEZ|H^M zPZZzlS=%w=6}FXL`)%`-bZg?f!yB4CY^ftI3?DuE2YH^(!IIOQo3gVzg*SQ9TnEF9H;6b(YbU6F9@F%rud;V9<`me$On^j%A zf8_%Qum1T5_w57h#wRN0j5ryt2nXm{sXO9kTvxNf8}vjQPwkmw5AJ}RRnEKO&ZtGi zzI?9JbIZS2E!G^a8ql2?dk;RBnW7#Fm#Xg>AI|xQajlzQykLI%d^#K_#n6*5$0_ru z={PCwW|~`RB2WLzH?Pp9#-pM;-8@mOm=%&rjrT-RLV_;>-25 z&c+^|{++i!|B;8)hhu(am$N#Ce%cLu|M-9R&GqZE9>Q7gq$?$6lv8fP>28MK)bsmU z?GB`!v6Hq-yeu`AT!)i)QQ!4aT0``U;k;>}n7=E>Jz`k&sTuRPM9 zQyqRKLV#>N&L&R z0}gUgU$I&(s5j$veb)bDM(RDZXI8%nE94LQ((qJCQ|*+ykQO0*fxz)U#l$m?~%ctjl_`iOBjxQm9lGVj}6)}G*yr(-P9+X>~Rj4&+WZCtu2llK6 z=hd9T-2K9_c4!`c>#vT5x4W-mm0pWy*Qi@)fOm$gRo$7Z`t0=m%pIL^y-WGFK11(A zLjwPlevg(*E~{aJUL))!jhX}b?go7Nz@OiTh3%-x#{9zjwPZf_&I;|0w>K=kM-qU#GgE=CYTyCmp}P~DLx;=&%*p=MoycvitEqE`hctU ze6HE|y@M-#mrwfr2fs5tFc$y*HjMB(+~h!vb@tk!;2ZnmGw$i>9sT~5;U;o7H5B}q?&hs5q zqu3j~_~J=5+;Qh1ucdLW)Ghjpe7we9Ab#p<8cWN3TWPd@_2}CNm(w^srO%)r<+-Ne zmv?V-(BUaHcH8!x;pza|HLd} z_H?Ji&_TuVI)to1t!IN?OJ*OFctLGz! z4J^g`u|FW^zzxg0r~8cfa2q&qTXGNXW<12F<>IG5$D{i!F4Bb&BkJ?V_ec{XozuSb zY~sKD0(I=r3Bp$ux6SM?me(4O|LdGD61)$;Z3dKr7K zG*ZM|HEunm9;2F)HovdtaQV}yp?0R_kluScC*_cEx*2y}%)~3+qAhP1#JfIG%>B{j zzc}*aZ}|G-y`yS|6Y#%7KLRmYP2cXwto{t%?_ATD##LPs1K#bucHonAL}(ht6IBa~ zp?*)hka*A4iTI%FW9AFXs`ulSwlQ}0#N#`9`8)h~)sSc6v0v3YU48hC58n8}@BP&6 z*VlgbE`0TFylPliSm2oHsi%9s+U6{A->jUy?+Yxhne_@gF()>i)y1q-*d!mz3p-{QqN??`*QxD*$gArJ1omr%}rpFFXjIho;p0>?6Xaa zQQrNMyYF23+10%6vOK+-roEnozxbswQ&wZ3o) z=0|G{*X8+-4es^8%zPgA4Ce6ypN6mUbQwDe?v;K=%oGRX9*P)1?Pz(>?^gSV{ity+*5@2PqxL5G37F5#!}3o#bEoP_anGjZ_LC2O|L>dY zofIeM{9bl^%=9KN(UZF{t*4C(+5G=_+B51@^JqIkd8e4=9zK8GAGAQ-aW&?%*KoGY z9mkH;HTw#Dx8r~p1J1N3-F_F}cwA3=hSk*Kpq$0G_|n<5!rQThk-%%!eeDH|eBwU4 z+n3?e*Yp5GGcYZIA71|1y?gt=u>as&AC4Pb4N!kp-e_M`j)Eu3Q|%hL`+NHJtFV^? zI8OEJW$`8MVf(vrw8NLphs_^{9zMNfv0gl0bLaK{XTyuzlNz4M)wF8d=E?1z%{xQ& z|0hPg$NT6xIh!kDS=u+VdcrCF#f;c8=PaGFFL~UZkFRz_?tfArd{q89B@WH1@#p3A zMem4?@TFzX3y0vP&h;Xm^5VGvb`z^{-GAOedi^v^U_j}$j5(zqMV$_Z6RXU)&BdFY z=@(#`r}>Pl<;}G3gb~Rl?d6$ctX@<5-?;bR|KINX@PGK}W`Ni9saJb`;T(3f*6eM= z^H%d1po_J-sE$1s|3`di$Fu#4?dtroXMs!N9J)i^^Xj_yYX|S>bNYPeRZrrarCpVV-@CfYFSoDOzQDY5Uj48l-|FMTl>aW<1ks*Im!&vOJU~)u#MEj}JQ)zN2q3|Fnm8R*kgvu}N5g+=>(MVto41cgPcT z*|+jyoXvYzoZ;zQU5Xd)4yZLfKlg0x-rCdV$)LV9i;Dl-uEjdu>7^Ze&6{S*YKARy zxI>@DQJ0^e=szz_(d0U&KT&VdbKTmVsi*Wc<$29HOP!D9-UkdK?1{JRy1C26bf=Cx zqxs^6ImP3EN5Ng+lHQl6ZW|w^Pj_2PVJ}%Ahcu&jB8Ggy{ZqB2J{4c+0rn0b*p5tv;OS?At#NB-K ziQl?~Q*r0buf6{|KjwpKEjlfm&Mn>iXBX&(&)dt2FK&0_*)?}Q|HgJX_Nu>NtP^** znxL5Np0>*;e{boxFTS)~-RMrmvrf-6K4czj&B@)9v(>$E6Z0{is3-VE(px&z5g5I# zT%Sf)^Ym(va6Mn^&d|j;7sZu0Kyd|@n`4Oy;j#02v?cGV@2_S{8xJN!o3c4~&%K?0 z?|enQ5_YZ56DMKA;zs^|EB>ASDvbf0>GS6EYSrc@ba2$OaK(*h>QVRn-g-iu_$`>) zsyzj@aU5&4y8F7ZEzd9DpQmk+HbMC`O$NQ=g&8}VX}Ax~3$+j**w3utQC0tLyElWo z>F(46#dGV~T=xFbJIPCaXY5q!^Xy!xyVvND?!-+=e|6CuZ$^HCPo2*LqW$P8eoDui z!?^cL?qYN18CbwcHR+)bwwZuuG^0K}hTmtm2bZQCng2Gf)42a?e)UNDBJrT`;^Q5i zjiZ!CE-iu$J4loI&oNu|jH|=KUYFx-_=+2a|f zcDp@a*jstLXMLGR;Ld;k4?lD8+8_V?{*V6n*LTwuQjgIKSg4i^E8-h`dM(`nHNvhP z!rgdb<(l%m=g0&3>4D$Y*WhfxoPia3PGOCWFfE9sY}8__N;UMG#V7jQk{lJw*3id?7LDCWN4`O}d3 zggxB)LLA#>zc^ugwA|x{+;S$vi0|@{xH;z7_>KSdlene0BgIK~zg`PYMN{!FmvL&J zb9T=x`TNE8sKWi=DPv|}&T=bW`pDUInVJiT0ey)9X5y5REUh(0qs4<}as zv)=~0+J}+e{;!|=oSjD6SauxJu{K*h_il~XYe4g5e$CMw{L24mAs^25Nl6(+` z&Nuw@i$2H1JVx)xJ1LxBZJ*{vJJM-EPRCE}e5f}U-hTdjQ*UnnLm2a%f1jRB+_mOb z)9>~NL(fbfHr@wZ!CnHdm(#E{pB)AiH!55rjIv!sJBma9m1o+ep}kyQ3(xU6<$2g} zKCAk$a)SHfbLM?=dRZRdbOwjlczg@<=4X zZF<$` z;|w27b18quf2;SKt={)nzFU+0gQwEvaL1pddv+YAGj^%ypPtNXSFC;V?LYg|_rCd^ zzkHAW>!|t<7O<+%v+odB$n!R9>D*2ZXAJ9CJVSY9^}r5cb$xe#qQ~3CP4E8i(yh3x zuCm{~aScbMKZgt2-go-&6P%UdiSECBHSd}3jk|xA4##ut)!?r_omb2qvw+)j{!KWo z`rm#nytba(x$1ph7E`y=RPO$_t5IDq_lB+Rq$!7&c^!A~rucs&o;++SjIceFG(*F0 z<6Tsv?%r?^QT@jQ(0m#<<&Kyae+*aTCGm?_pPUnCq5j$VwhNz^ z;ClaVPR#@#o`emZ_|ac~{Ukr;Q}*5EecmkTpwkvsZY|Fj78DAir(!~p%&)Ah$o z;Voe;@A7H3#f9(|80mK7=C!m@KI8CHea5vKXsQ^)U?a$ zq?res|2WmYnLE0On?3Xjik;!8y))0f-PU~WMo;G*)4psb32%h?4*uBI%;CHpXTf`H z@6${l$I^Z>d}=%1VcNH9?dCkr0qhKCPA{bX>zRjDo^DTdqGr#Rp`1OuZPl4q{CzQY z*WHgpl!nbFEO6(a4?b}D)xVuxd+;}(UMxSg>q9rlzR#BqHG#kStD`Gv4(Pdizg2{PRD3FP)?(+fny3aV>Dc^gVt?KIDVb4#(MvO9nSli>LF@ z+;pqwH9U*s0s6CHTIb?!y8pDX@wz{A$(%n=xOAWn>n%0cs0q|v`*g2&+BwG|t1lb= z1?ItOV){fp-BF9CyBNQ}-HI!N17n9veV$Ly zHCW7n__`-wHKz{eEvDp^a7!MzWk>eLJ5QY*+O_T0!R8m@Kk6~#Kg{6qES4W&5c0*k zIkBHl|5aYEhD-Zxkx$8@Jg9FUT6{x;+p`S2Q)jhrCzfyM|>##xfsk$k>)Zq*2XE_`4m1ol|L>+oV zY!ff}H`06;Q^JiGyX$bJ>PUS;_!54P9VIz0PSYvp;kYk#c)IQRoer&DJxcinHeest zz2|}RtXz3Ioze1Y^OMmd|J%%4AA^?!TiEz?a}9Wu&ol9JUJT2kR~$ENa#8*9(mc)h z<8Qz4z2j!kr^;QPnLihnxe<0X+x$tNe-f{6*7<6lyeMuC90gCX8LQo8bNTk%d8~;6 z@%i_}`*@GdNiNILH_8Pt_ImbuqM&)_S~cqI8oTS6II(_t%%@=Ws{ee^(5@`cU!mZTD@5FP9gBkBBEC#-E;629|yz2R0ZT1%j2w(UXZo%FBqVywn+Md1L&IJ7W zpu7=&*`BB!(rI^ps(XR|c22ya!6ydcEyQ_opYllV-OR|5^WN#=>)-vvA`C(dP%}4Y zH*0f;;j?)t#~a13q0`ciO8E|+*ZrSX=Qf8)(wRZch)jxY;;l4gcZ+>wRHXhHrnz|h}U%Y274o*Y!!p_J{ z_s+ea8oTo^pI7taMblw?7ju?p@WS(duLi#O^tSlApXLCb#x*hevN$p@XIh%OZ@%*3 zG_Yy!KV$x}x(QE+?;dW?(@foApSM|y&oTCR;QU8neaGUB79-T2)w7<*Brm4pxF$!$ z2AGsN=y^IQ>BPc}n!7lIamnb|h2vkKK^Eq`V=iH?lm6Oz^}y;OH}tt*y`|sTlS2>V zR-EuJ4!(A0v|P4A!)D(5nfEis{+f8~XV@QDHNT@v?_HUz@E_I-<@rY^G>yRgTPNjh zJ1KBx*u7ol@@PHR!$1ACbNN@i`8S_j;Ac1UgYVDJtN-mLEu9OOsWzb@bXl(2ZI(DN zs+X3;>Qy)ptZwkPXg$L`ya#>5h2wOHj?*AH!Anc6me1z;sQ3MDVK>v_blkMKTg|hN zgaOC_@YO9Eh8yO(FXYj4r2B6kbWFaA+mnwT?3sTK9NTPX2SzU6jGjs#nNG`T8V>2@ zy>M0D-oxA3qyex%TU?!-KNgN1-Iwl@TCH8u`c)ogIOyqYq&G|_#>|DT#MtKL7wR*w+nKyc=i^SAAnN+` zBX7_Ls295d*S;~dL$+pa+R?fdPAezTnOfo*afTjPbE>d6UUyrg&O9Zaoy60hDQC*R zW`%NaxtBJ%nrI;`&z-9`4ilp(|M?|-K%6^qf4!P3FHW_q8H4^aOdy=0eC^(!z?(d( z2RLr-T2EK3rX_cQN9xveeu;h0&RBO(U41U>Sss>?;(zHeoJn8d2J-#zbF?Fug zd;RqAp@Yrs$_p^73xiW5&o&qLdBPRKkHrdgfctgg?SpR|ed}+(am3freA&V+#10-; zcCv~`?!K>j!WG~Da(fwrYyF(vD||ucOs?{~s3*jRG%&9`_`?rQ(mCko=cR;$cG4L= z=}en5)pwkqjhmAGA#T|bdVR;`_2D-jzo|29UOiPkGIV>*2XM2>ZSYw9K0A!whZ)YQ zotS4~iqG@J{$@BHt|5(@c>Ak#M(j|@+vWdu$ga!%V=p9*9ZWF&A?KP-MI8Cn?<~*? zn6~>d<#`p0)GF|RFE;1JA)-qpUef1*g}~80-<5~on!SwY(|l$4faV1NfAZYVsJG}0 z%H!(PNp-;R0r~6YxmW-3Qwum5E4V@vHEKG6?Xp&*ra#vGUrrOx^P1%;+PrsQ`lBv& zX7Y!1e_=H1;WQ_4J*Lwq#d(=8pNQqv3B{;6_x`B+{{*ZLcl+WA^S$2pv4_`QIQrK2 zwx2Kuey`c<5jdgVp!<)@3Mcpb9EjhzI`*(kX zZ=bsQAkAlJ`={_qr^Ef!HtO(!`R%x8EAln`3m0qW z(hN@I;G#MUb8y{B?_UkKgBv`sS@F~S$o(H2&UEZ1^^r5~{_zK2`}-&H44!Pp;wwG+ zlkOd@8(vB3qC0Cy94#5Fw5$*^Aj~0o{M~k zW2FY&?ssv=(-E0%?(g>w!^3%Wzx8+eziD^tL|$#MpyOhJc=YT%&b5A$M&q|O=w0V` z98Xd_E4Dm~r}m{!+_uAWOANj4XHE19KHpYnj=q?E>$EZQZu{=?QaYLLa-1{y>iLuY z-83!|@8sv3;ZN1C!l#bQ{m0d(C&R1d`V(;JexDQW|FO<{b7|*SO@$k=YVPq2?8BKz z;|MN{yF;&yc4HV``CmLtf6Sbpw&y45wVpkFRjkSrA$~%7DL0*${rdcO>#2oiqGqGh zG%ZfVj}^z^FwOhqeKo&lJMql%J;a4@myPx9G(aA{@PPw)n>XD;UI1eb4VRs$UI*88yM{SAKE#hkrbE`Sox9!k(U~xnZ-av`58l8UuW=#K}4FWX1Vf@r;`z z&sAsR?oU?>^d3iTU@vjZwCt(5|DBJXQ+%%(v-~5l{U^oQG$)Tf_?vG%iO=<fXS?`Uxt?xM##{9g9!tF6=RwBup_#C#W?H13u==ibnCr;CM$eEGEx{@Im# z@B7xly;Fa5^VOeu@eUr}?R;%{7v8cL+CEqsS+pMdcWdp1K726!+Yiaq1wa)j>;`7q3N^iF~9xpzA6C6yAle617NoS(_-_G<6_xw5@1>XNtd-8i)V1omk zMnn1xctW?*WT78+FHJCK_(oh|?|((Dm##@3G1GGUDf7_Tu%`Gq{yV&(_kVr@2hE#L zJjTi6eX2%iHlP=OdJ@mTyV@;h!ceNAmfl~NM=k`~4pn37e7nhoG!2-;^ z;}ZDZajG^>pYu#7daXTkm2_6ylgDGRKQw9PEC%4Tbq?jPiO;?kHf>kxq`7h<B!R zT(vg+*7v?V_23`Z#Dk5a?Nq6wPMG1vGd*6fiVJYWGdY@%q_Y`s1wZAyKFPjz`vT2a z^!V~jT0R5Ig)6pSm2OLO@VM7}9G+9B(jMob>%0zqQ9a^K@BXG9@P__i&x~_u4fXxa zyH56d*k?PYCpppmms9bvmx`%z|3>{)tx#TsfwiyFd^wNc{O#QTPp$9}SoZh%gDmj@ zI%lTWUR!m+IbY46H{%4t2KRpWr|;hv2lnC)rca@F*!fp=L+?zi9+)a@DQ=jUtmk-s z%#3E?nqpA>Fb-Q<8s_7l+8Coewy!O6`>|McJe_mBE}8d0~*{cgW@>UZzFc53a>8&h9-{NU%;9{%`O zzG|lb2jT8R=MYvv>tU4#$C-4Z;r{&O;)~)5=%2@ajC>7)(TCXGvO`f0A9@$%`}*EE zS-$Y6aPWA)iv?HlGSXnY!-xG2eU`iStL~}&XaK?VCp2-&>+ATDw2jh@uFh(A9~QXm z=Y_ec-{V?b9C~PcQwRP8cWypq<|i)E`xFB2$(MJyqFC4JGqaLjJcl;x>qM@ZXosN9?E(~ur{77zBuj31^(*oM! zWt>j@>A@FU#Gi@>u;9$Cz!T!mwj0p=GcM&7nip4`XI!ehJmtr9q1z$yj68SeaEWft z8L?{hRCVU7|J$Ya_Sy9}&7acGJ^A1tH;()AT%HpXwvPM#((CQ(XgSOMZ(h|bTAz@2 z=cqxti}?5PkMR!mnLcZ~-*#*5tmIL@ZkBxZygkCRduoHBEo}A}uk<=@`CVV_i_k>0 zGfsnFU8GM_Pn~~pDxT|u@9aNe|Kn(yq2*hjXZSBx2Z+Jq99&GjrN0>d#A?j+JSO6D zyH-m){+8YUB|Tx7@NycVVnTD$p39nekeA2`KiuuOf#v^ZgzXH$5AvcHH=mocw-Zha z|6E%3|K@c$YOyd7@9R{vIq?BTW44lBw!Y4vUsSKD9nX(`5~g<|egypgr1(CKFP)$L zlb&@oz!7Kh2|a*!vVO9k>2uJWG=rA!oMC<^tNrXgQ*%#vD4j`s8uO31o#A2hA(wBx z{Yz`S7`Jc8{kMPk(=Xorr~m84yRZKA@7?EtdEdXg|4%>t^1J_TgAd*YKfJYjykzc) z3AcVY_3eE#!}$N(@LMy3Gq8cP?X9c*&kx@xF(y9gzyRV6g+cmrLrY2x(0>0-H60wv zd@ufFHGo<#Z7>|-+w_0$zVW+L_w8igvtMz8pJ+U5nk;%hoGE7}{^Gp6-#%&czI2z< zJ#L3I{9TUQXyzIxWIhgm`m^r7KJ%j423~VMKXOFx%6o>fo}W=yt9{j7bR)}i)m&oj zPdxa$KYY&*|NhV4GY}L{H z5NGv#@W*w$ylVR9)ZqiC%h%=x?qoG8&D?70@~V6`?Vhw#v?iCQvpn#3xuF@Kdv~By03M%e=jQwJ;#xD;{4M?2!`VbyFL7mfYr&_E{NVrfdp~ja z|NXW1y!yYr_!Dnk+c+ksz^XP*yz%|bW4?~O`TdO}Z+~y?q}X_}S|1)=4e+F0qcM-F zAHjhWcnwa6; zYV)z%A7%=xY5!`u`!5bG>fe`n)t`I&+rNGe|1#h3CGTww9&nD2-DUTF>~MsMetz^5+d8+5{- z$KRumY@fxP<;a^aUp?~UZ|@z|TgB~`NAOM69Dcuasp4~)nL6|7(U|d6OOL!t7jf|I zw>~y}H1l14_`xsSgWdCBy+A8&`+Bv093MUr>irjRtheaG{14Z~1^@03@96Vs!aSE} zYuecdxI=qC_~pOZeSPLX4E^cOm>ftyGS8T;yk?ut@Z$^L&D-xZ-q0ER&Ajwr_@DT# zdt&;17!Y6U^>zhrs0nYW@$RJijYDvsM$Ua0;a$5!H^r~3X@}8w-PfZ#uX3mT#4u(2 zyqRWiL$7d^J|e9}cif#y%g|m#Uc0a#|4&+9aZu`u4*h9yoyC#C7q9orA4Y$Ba^QO} z?cmL(A$c(#=8@O__AlP^#?@EeBexw_TUB%WJ?sGBo%HT~xhLiLtrPwVJHyBMOFNhP z2VX~EX|%-iqWJRskG?Bc{K;=E#7~p+@m}4B_K(f==Yu z;^8;`?uj>E{*Uit%kH zS6{pIzJpi4`S17463%(Ac!AY>?xfzsdsU<0S+~DFVjiwp-aJb<31Z!tcbSdrNAeJd zHxCV!a$1_m?L$tv|J8nJr5u0b_rHIvSql!@wAyFE=YV6>-{PLzWfB91e`z}ku=ljG z=`_)~{=}E=^3S@*Pv@Pt7C-d(%};*#oi~5^sYh@B(sTFCU+y%2X`ez(pUyB$mS@}C zPBYo`Uaz$KjR$l?O>i>~usXoJ@4{tV+f8~_E4;7M6sdMoZ{p?BvZ=On|MvVj7@~Qh zuV#ep2jC0c{_(FocmKf$7azYlz4+Mg@etpr*g|vW3lHD=wNKrD>$4xZpI-nz3?A`Q zx6H)TWZ7>YVDK^Fv~sMRuKvgOZ?~aYxqn_(7Yr^BPV*Yxe%Mg^lhg5G{`Fyr@=-um{RAAR^oe_KChm)@?<#b@$D z@O!MsXN{YK1Gh8d|1;xx{+K-Ko~)Y*@D8~02gk#4`6swb&&}eGg)fz-*St5q!s&2g zz53zI$nRC&T!}9O8$V|c%UsMHV#9f&W9N+1u-eEPX`hP^ z6~9N$vBwAF_AJ#f>FTc)=T7KXpMa0Pw;iSMK6fClAx+3<>c90`bo+Q4R==ok4r?5{ zz4621kjN{|kZ)J-r!Rb{E%*Zd$na?zT%a*OHuDkx=8NR;1IL<81S(w2o7;8A{(Xap*;;FDL@xmFm zx5hVHEKG|(zv9dJAHdV>MK0aon`0LLsrzq#9yfDN`E4j;IvpG~9Wyc%p>jL1vU-WBekdHe7cZl8#5P$rcXVd^N+)Ky&Iro2K&hNh{ z|8_qn&fIdk!p@BQAJ?W@Fum_XOc4e)^fbj`c*oKt7@e%gtR3z4@G zUi@#}u#0ggj+A^5x8fj9Kg?ytdIF?WI&n18Ch)0G+Z3QaXN2(Nf}v%ikMl&%2mC%plh zhR!VRwY2$bb&aa$)pg-&W$HmY)Y~UB-U3f1G=>y}qw`(+S zk9|>pm(I5QDwfi%@)_~6^k;a)?j;U*I|gEdJwttBd`)La9`!E80ky#3p>D^MfaiDj zm(4vE^#sfO!Opq+<=Jgq-_6(l?1PiLSASvq)xZDsrB|v_TXg|!)pf}NMTJ0*1hjaH%+&4MvtX-CR)G+L|znt+LXUtZbIUf;Q2gl0) zJL}Kkqnp|GIcP(gYwBg-HyboJ*MH@!;oj5c-W87}un}58MK2h34FqduTC_Sh0H~kb|FzSiwdjI~4U9gFr*mR^8JohD- z+Oo4b!5j2vx7yS2{?=$%(r6HK#i%&jI0Ik4_xdk9{rLYlIsf?1|K-z<|IZU=9-A>d zG-JFShiLQ_dJDb4O>@NV{FQdBV5`jr(nuVAx@S3wr_nBt_oa58dN6qtrmd$!Tt5F&dG}WX>NlH%g@A_{x@HzbiCck!T&AJ;WwJ^*yR_0Y4P%f zf}MM}*W=5>6b{_~!JQviVB7|Ej(Ugoe7v7Yd{W$nuNJf3!*BOJ=1f1K);|gZoGZpw zo9MaKN@fpvq2+`0^1!&~{hsj;=Y5ZPSpTegJnvZ8D^Bmz&t8ph&>fG@BNps=uV%q& z`18JSrsXMnyXHaSM7nwZ@|(Zq>^w)0aA*?B8!uetTav$(Ttpv&=3yKHSXw)ddVD(T zOE0&-+TK@MyJ_CHe--9#FT?Jy8Hidd3@^Mxj2-&S`~qIC?$axz&r?jn*R5`+-{IVC zI%o7g*Ozd^mSBG8%=)(T3~LtH7hGWbwZHh#_G^Fl>nm>^e0JfrgO4o#@NYi6(vE=V zHXm+)Q@EK|x%ggh5e^6!NaF-If!0L*fw%8_`9JJFerkYJW`O@ubIXeROHQE(BecjK!^I-OqkMI4$#~%NG{@q6(|L322>hWu* zzVZmBaLZ1S_Z+Wi6`yyNuIv_niH$hJm(`BxfbGbWJKl}hkHb&v&iyHO`tR}C$BtEFU9Bgtf$oO)9&*rp5`aJ3vygF03OSw z=5EcgPxx!`H~+u-G545cj-O#Jsd#z4r59`gpdF8$EFFv7p&2I6Vdj9ysYtQSK zad$7C)@SP(?30@%HE{Rkh|-JWtTPvHF@*V`O>xOMG> zo?zOafdS!{;e{3kgg0{|pHi{mu2_)9<_)oj zej^`@&K90kciK+y#4JCL3Vz}j4$Se|`8hD>+jF<`f#Em4jt@A2`G0%owGaJ8`$9YR z2;*(hc^w`_?Q9qGVSyKY-+UpSy$#D7eaGEj_~pm{Jo8JB-}=aBAKOEWLqtdDtMLcM zOrqIf^=t25|B)_b-2XkFZ^ztfM=wPKM4v|cv)JnXgag!z%0>7)ux7q8^Kbm__ooIA zNR8(ig%Qm8@@Iw?;K0f8dFSl%#uW@7m~v;Qor}Ke<@LThC(L1v%WEgy?Nc~F&2FaQ zGBfhMeT}6BxKKM83;x?QUf_v#G2Z^OZ~p}C4YQeX|M6vfuYEnjH$S)R-aCtM;#ZcI z{lDo+%M0`luE3i2+96v=Yg%6Cp@OU7vtM;@>%*M&$>?e5G?wFNkuTNTwoAO`F4uR8 zkFdNA8YdU!KH3Mcs5Ny(Gc1}Q8*$9rMa@4T&*m_{IL6cY?~K20?N6yc)0vo6`!6-S z!i`yii#OZI-!c!=;p-Ehu9%>9R?FAN=Ra~0XNNY_N561W4HDLi-*evn1r90iDEW6s zp2f?g^R#aMpZ;+iahlO--wmFho#$rR@-!Ul{9e0<&I#X=ueWm=SLmELm>#-#mp;%% z9Ke^-XUx-JK0d4eE+4d8Pov9Tt$4|+c4MVobG7`~nKI+4raKXrDNO?TSueOsGy17! z{$cjjJ?C($@}Agp=ko#Db;s(ncl8JRyu%LMuXMlC6I*MiEiB;egU|QO7VWh!`upXy zT=0mRM{bt$<0Q*va2&f-{7$Mr>I=lSY5triVX0~O9P>_2x%)G;Ip)3dMbFzAhYz1s zv*0qpIu`tY)n?VhJFu}U%_eD@UB*k;!%aT)IQhNz-{Mt%Q#`m1lepsdNO!;a{C0b3 zo@G9P?VHhZe8H|aPA1-;f3J??>q6hr+|(S&4F8#n`*wqN?GEnZ5ABKrn`r>5QHMvN z9B#%4XHG+gFSoOB`@tt?AOG{*&prOZhkyBT{fD~mZdi1C#CA7^fAPCINOlIoYuh>4 z>MX_crVVCyj-IIdzwHiJcaQz6F{`!P-u;)OaBcXK;>)LH3X`1I>$ZQMcK2-DUmRfd zYJ3;77QEVeM|(YKtju|~?gS3-%NLs04Gx=H|D-yzy1>^Z{edt374cll7w&KMVYuOR z{1fr|=y-3u!r@6Hr$C7!)X=DD_g~k#V`Q#q;_vsIv4TKaM8z38f<7^{l2Gf z*7wl2phxKW=Jzr@SmQ`Ck-wS z%r4v>H}s~jTX8_^8Q*#8JPzrFcFFLm_3^N97(iYTcJTT4!2sLo>He!>^J>vA(Coxj zvE#vK?1ck4CSSuV=}}d0cK^kixI+1qZl?R77hTYc&e5`(r&+KJ$MQSUYP~q>Wqjax z;OR!=WWEBk?OncfsrhLf4QI+bN@D^p3fpaGV6#1FT=YD~_tl(N+?{RvD7$L=%X+sf z=269fd}`uNnE|aXjl94A@f9(5InGe?0=?cu{J$J84<=AQf?r9$369$A-&yK+2=hNR z<{7{D{gd8FT;|2FEirF}4olk4dc$}n;UDyrcyq=Lb-v&BRG6+;CAF}M|ftt3vp=WwDooe;9h6PI|=*7gU4sTcpA^)jJ(EQl0KGqw&wnZ zWv7vv21Qyq-Tiraej1jVcKX2m^zO9zE=}XFpTZkDX>OEPyPp316n;g$@Do4!?h8kn zca6PF&)T0)$MS@_0N3_nSa^CrYs~<9f7NXIjuSksX2j;@fmNM7d0%tp_2fqplf zw%x|`hxv=EMdonHm}U)*kto>b&In~YZ8C4x)C;EZ*S<~nlG5|e%zk89T0zo`J8XoHfBP__V)YY z`1@Vs0bNNqv-~e^?dbp8NxGQ^w4Me(gx3I`pYKigXR8`CA7@|R-f`yE#P)yl(`!#{ z(*4jEE%{ogKl0y~#DqM?mq%|1Gn7-(Xmz%5Z{Vxq0&Qk}qumU#!5K3@i6^_tlTJU< z-kQI*6Wz>WFDy#E6_&UQ54b|pGQIoa0RG^YRy<$5RlC$rjoG0-;auEd_r2YqD{Asx zSQdWp*%dPrbLQqotLDpRyf0i39DdkwK8Por*Qs{ecqXzty|ox7ukxmA3?1B(ZG&7S^E_*}cxab)w* z!9Q+S1a@ma;!g0u!Bt3;(Z8=R9Y5#nlDYvV#cNcJy#QZd;%T!IPFwsJ1LFCp;psDe z=FF{Tk8geam60ohE)wM6!nhtFHbDX zspYq!spD?gpWdROusUD=ET%4o@5|Hq%cOZe{3M$Zs-g0motNYI0@3NDqh@9e^Ly!} zdo^W#I9m*;4}P%!o%e=?J-oJkBz{Y??`i|NcM7IhzZlkcxQB~dYsPGTWKVAA%HVhB zWg+L;=~2hfi&o3?&9y(t%S{~P`}oBj=PHehgZBOP!8hA|YWD%R{Wi>|JqNpPae>ky zQ!ih{4LCnyGjH#;Yw%U^mA4k}Z#8kdT4E(1l#6P@b`U4Ka3&g*FQ-%SLNm#9z|8BO zGpl&68mPLxyWIRkUvzQCEG?edDbFT7t_2uWK5DdS%o{GY53x>Tti7Z&>W%fa^uYOm z-H1n~=i^(5U&KGOJu@5|THEd8(+#bj&xfaQeD5AcXxUb_^4*ZH2j?18}6QG z!PkSgr?39|H93Ly|I3?ZQ)|BR4o=%;Ar6N#BnC~ITP=6*{kJg_wQpR^j~kM=0FG5P zAHCIZigeRA#@X|Z%pmNMct88qE8-2`uFo9ae|rZ$OZaJZXMRI@4^}s~C$Y!VZs=H4 z!=(*SFQ{MYnXmZ!_KDL27@W&^m+*rf^?;p=5r5!3co6j1Z4?tq*-pN5s3 zI8pDc=xtWo(Qm)iT^pJ{gF}eR?ry@gSNY!_)?n`R4f!M;-utxpAK&}@zkB?{&;RUW zo@5VcoTSZtkMGHC|J;n=7HqCQy}Mj(*}3sMv^SPc>7}@}X;btJ-F;{9G|nRJLor7$ z>-Xd(tX5ov8=R{rkoN~?tM}sfs)ox8B;NL|;yb?e4LPr8s>X){wFg%&H?!C8^Lny- z*dTN{TB&$=FdZRXMc_$6`r z>_X36{#|HqIxI~Mi+}#ih&eEE`(A%gZ!o1Mj>}eU>fJi`z322mHu&MR-)^2QkA(g1 zt7(S!shGH*?w4nD`%v?UzXrV`XQS^SPO1awbvmQ)*k{w|7du|I)5DL&ohna=ZQ^!0 zjo-kQeQtUry+^;B7`8Q~C*Xs-9yZ;aTkXORY3v1?edu4}8m1HL{~x}zIQi+D=rz+# zF?Y)&g(i@Ec-4L1=l^-<;Rn`m!Pd>}w{E!8`K&rmdX{xOe}2Gtn8k`>N1A-g@r~>6 zU|(?O^v2A@+7lHvqYUSVRgM99;I`jK5EPl4n z=99hYeQ%3-`C7nmcVUb#g-MFT^cC6%;bkMXZ{{5+rsbDB2ODg^X~ryTW?)%k$5A~g z$9V4hV|VV^r*GqY+`a$w&pp2P@t=GAPajote`4k_f5Lb_k6)er(Bp?6`s~Aab)B=r zUhDk1xU=qZJKAcBOU)wYK-I6tEqEY60{a+=;0uRSp@o!|0@y6n9B?;O8E zOTTjpcdPDKm*+2W!t5Eo{@m0X-~S!EDPKAM=0E)Y(J=RF{IC^w6;}4*IcITGJe}wx zCw8AU>k-vh>G?Ht?fxI!PiJ7a<}9=v)nhzBCb*>hoti=a z<@304&rihx@LXoft7FbY15EtMUtmcs-u&G8m($ayg>C7<4%%a@#uN*#`ujYjhG(jC z2b&%G*DyUiPIJI=YkQOK*>!Pb55H;XbBmeHvYUYpEmwDcsriO{yAWO%N4Oj>FUf&t zt5NL)=n4771i&43;=jJq_jsC5b$b@+DOby=8{I86UYJ#$r! znpWJtnrKh##8<3$+8SE3>C`{`?Z2DX3#+j%go%1S^u1{6zrFUoS^NJZ|BDlAaO`vG z0>xMP(XV`cw|x3;J(312Jks~=UF5+b4y(oTHH?E~Prmwe=+O@@i)Y@S-*Ja&ggli7 z<=6*oJ}3sP>G20w5Jr%O$Yp1KUmd=$2fu7r=!za--*@GuHl1Wv}s6qPrRsxp6yb3WcX*(-nsYsGw%MEesbh~ zT)M|^eC$^r{~sUtrN{R_^3lgW<2`vKpXoihH4Jh&u7NrENgT>kb`Fl0GhjyX*G`3% z=m`#Imi#T;SM|aA(4z5s=0lvX)R?U~hj~?oN4dA^I-b(?vf(GRUFwA%*uK&M<@O%JV^lU#Ln-mX2Z&=;D|9aG1*hcab1&CcHN z_lkSo{)HYQEjIj)^gParBeb{Fii=`s`C-m8ZRS#MFq0P|?B$pq{urH~v?|R4&40`o z+T+&)w;xrk&@jW`yOqMfJrvytvd);aAgfwSPH*y{^T> zP_GYt!s?x3)6m)D7mHKU=k`wMpxO<92f)9#+HY)U*}lmn4*!%MAxu;5cP5@OOQiW< zEG{PdJ<@Hsn*P$m&wl8h8u^ACo$tmC_#Aw1!wh%LZpQ@w<2>%(#E$o*ozTl_Lp<o z?X%KUit8m;E>)*APCSs)?9@67@9z4nrd_$H|DS{j>haSL34_ZIC=a&-n89W9xP3ap z)dArL`Ic|X1vmlEiNPB<n=e)p#yzxumB{rLXxyzlXU{>0Bbe)ZQr_!$58 z9p|V1%=|&`6Am7KW9Q{l_9#x^7oN-u43>3LK7bdk$59VM9%tX@r_=u8v^=4fY&X9B z4%k6^#_4S2qj{(sQa^RWc}b@yZ=dVcxB3qrUp&8Q@ea&&V|QMEVg4~V%;A1GSa#jh z#ES>R(;z)BeK(Dhi&Oe=vFE%#U}Hvn5)00c-8lcPxUkq<4UXFm%n~d&F2~SdbwAxn zzpq{pHaOj9^jU|Fr+$4-?Ku6$+V@Yr@s;nN6kkuN^Jjde@l!u%H?Hq>I*zE{H9TKz zqAB9+EyACh*TW~;D{tq}9&lehUuQFH#aUYO8PCNDt2T6|c41xn?Kt}TcrxugwcB>3 zS*IRn+cToykdDLPP}LLXHH#x*e+oZBzZCAZEOsr(5wp%loUsKM1C0LsO1P(gp6~Z^ z_XelS?}-DTucMD7M(Y1p?FzQz@PeJyRk01`ZNILWoOe2b16Dirne^biGk@bZ(s#b& z_qyhHKkz=&eKRYb!2Y*JUqVO1y>G9Iuhr5;8Xov1pV&!r+Wn_}*t^Ixoo;e9pSxH8 zU%h>G=sob!tPb*gig$ZrMxKxD?+-sseSYt2-tV^Ndsi2n)BD5$SQZOc-0|wXG=aAD zdh`|OS<$oc-_8{i;3nZQv?}ry93BX?2YK75NxR$brd-rcx97-DIJ~U>#Cc3Vpgp_Y zdOEpCTtB@G+uy_s!V6d!nu2ESd$<8t^aI0VNG!WbXCOb3b}!QgPb1hlH50}?GgnDh z#XQ;0&nqv4Ee%XYzcymCvmdYWM7tjH)olGu_(1VhuW}og?@`>oH-GsvkL=St`q2Wu z-xogk$jlrXM4;Gz4wXPp`Fc-e(5f*?|oPm&8{=I z?DO3;*Wz!_m)guxeseD-;hS;W!-UO-VS0I{;5z9$=Jg}_o8=L6JiK0Pluw7JWczhP z_pVvJxB%B*$7Ndz2NbUkwGz$eh8C0j3kRpSW@ishm;Y=!ely*Dxic@+8F&BGn_vEi zQ~Jy5tzvC`77Y1|=h7@xtF4K5dKmwRc{G=9$5 zFVLq|n^qUDsO6URcV@q<*Ko=E`8U-eH@x$G{mR~d+4>b;fb@ECMY~hZ0S@8|X&2*x z>{LSxUr=?xwti*PjJ};L_bdKB{rx;ws%O%4;w_Q32mWdp=q>reSqV!JC(7MzxAviO*d*SDlZ~y6x}BOj|zcb1cGm(;v0}%eRsyoH=#+Gy}_a z4$JM~n{odKXVBeP3!8w&=4Gj0@&2BHvC_{B+ZtRlTvENjF03ydq5ZeF_=wQ0@Gh^I z30^iEydoa#SMz$`J925Wzh$vqk0_Vnk-)EJ?NsrvGiz=(OXDGYHhe3L8c!iVkCWko zKI>9AmN<5$-pdZ(;~&0%{_(x{eflw7j>q=;9{%Xp7w*y3dFQpI_l>(R2E4;>?-Bg} zw)$gFY;*V1L5YKGHxA!WjH&mVg8vO)#yo*W?*{*@=JcHQ%G2)7jG9{=j>ow5RI|}M znDBJ$8_@$%=e4hGpFmwW_odtToOX=X?%Ex=gZp2tdjL0s4a$dhzs7t>T_|@nhKNzJy;zi7XV4)R~er{5}fHS3B8A-^PK%TxX1L5p8sy%r&G8iGY@|I?`Oi8!jqk2Tvk2ed2>8m zy6V(%|9E(*Ip^$ToPt5tm*gcrFFxqUJP+8`JMH7}=+&2p$%k{w9eE7U3!vxw1(C6 zlh<4IVf&Bu#LKXgHF>}DKBtdbboQIuyXRuK`MY{NuGcPZw|q<&C!PGWu-&smTXSgT ziS6>V9fUZ8c5u~kdGNrCdAgi=s$C-3<1a%!zJ^aqW8DlK*e2$L;*#3sq+|^PS*r=FQ4K zSPYo;x%4KmYntlu&)oMs*28yq=5Acp|6f+~ zk9bgT02^G1^MOmD?hk*l3(6Z2pE6wqJ5(??UVmx2^GSolo=N)BkY#*B;;hz-J!6`Tj4r({~SsId=VC{oKEQtOj_;?{$~Q(akskunY4? z+Q=^sosqm^hJQmk1M+U3q5~`U9GAl5@i)@&OfzUZ%&{5KmJ2!FjXTku}y|S;84w9Pb%%T24^+>u~@u~TQ`GOn5yYTJA)OrTHxLoeyV4JvQ`4#n3c= z^&G|1XSN^lHIvIcGx-({uit3CkT$00ein9mxW7~VE&ng^`n5au8S&t`>4(?WW^qR6 z@krY<-_cv{!o>FF+3><$@oz=_MKkUj$HjoO2J<)>dv9u7`S4Ph#4;>k(R`yB*;0M8 zT;-ng`*vrYd-XW|$GJbaT(0!r>7%I0!{g4=RhYo$(oMmiQ|IG)E%DhobIUC3=6|Kv zr-y9TPutmCbKSgbbTbSuZ)>M1%xd_dg) z103P)I0Am=p4c;VDc=6npKW@VE8=>40ysmb>5TFRh5@LBR^%6R9W##bXFJ%%v4IV2 z@kP~lIK%n1A{VZeN1@y*>ozr)!DGnCO=$7kYE+^*wE|Gk~N ze!uo^hpty#p0pFf`qI&O^Xkh_#qP^Uw0{wOc9Y3KD)X(Oz{CE+*X^fksQhq~7M zDcXH}>qCEd`N8ZfJ8=ztw%vTo;DpO>f8n4V_00z#{6jvKLyz7w*gEI#FT#M*i4OCG zMW|tLe&oC6m}!ogbB4F#GrZd~ixYzn46DqG!e>|)-!}TpH~-6T&E3YazZ2G7Z{ywU zq^acnE0{9v^dB?O#tDC!5Cdgg)?cTo&A<>W}yza#&twtGhdT zs~hV3dv8vEkq+1IJbL|Sf7ktAdFQPUEk4Gvd(?l|gB^&^w_t&H>FC~7yWCMv-F~$8 ztG8e)*Yuy^Zq4q@(CJ5Avae2;NIlInrRSXI3!L`!BtFhLvBzB+J8nzvfBHJ=g0pl2 z_=t#&<$Zm1I4SKhGmSVa8|_!F_s_#?yrG?qi_Dh_7Pw2ee)l__N180i`RbtEA8UbwsxoLDV)o(L;U0Azg~9#SMbc@nWop! z9D7^sWp|C9p_y$lQ17{-=giaH+%lcyvv{hXz3c0qvvDoH3!X|dhPi4RHSD~2qz~De zlk4gCJ{#xUEbh5>%g?Fxw_$4bTRwT6U*erNzx@8Ycw4=@8)hf_a!=ghX7*F@b^J3d zw7DW~5|4>6Sv}%nJOICIzxN6}Ag!a_fyeWJ@P7Bi<)Kw3r%bvdJfG;de7#y-ZLr=h zZX7uNBTLts6Tk7RA4{j<5#6_Yv?6Z9`po#Y)c4ExXf-@4cf0>Lod-Lgd|;mD8?pLI zdYvPB4n347{w&>q)ii0ZhB?9)w&nXV^Al$_dA2XV{n@`*5d+rLI_G};(Xa3L z>(IW`=Pt;3=|;2{=KVF_Gi!L}^uEtOv}ti1_*cna@N(yO_#O?e5Pp*WE+&oi&cLeoc(HTt-JV^B zC8SBY?M|5!$AL*Z_w*Im>;2b${&SCC{h4PTzcKaYcW^K6Km5S@eX;pYzpHwro@U>B zNJICQ7=BAFavK)V*NuArk*D*g$}ca!8W>y8q8Yj8T>kF<_cPl=T{eqrFP`?pg>bhy zaiQEFFA6_(a=6Q7A3Z+`UQUmfbE(o54XJb&_EU*3r0WWHj5-R{0;t}Z{FKYM+8b@Ng2_!;Px_@}3z!$y!R^i)(mUH}U|(mAunFcW0_+DfcXU9t%C6Fi?1vK5=5#{KB~Z z;mHFZ*%D`9HG2Q$u)fZ$JQYTl|6n@fdKkIREWl^r_wv<)H{bvJ^j|Nf1xKf0?WX?z zrZ{v1j(qRU&;0V(7svN$)}QBQd!h8Ap1c3nhraO8JeeLRjrT1xGT$4%=efK*X^+Gm zwe!zM0+)av%bMr0RxD~R^k3$F>$ZEJr^EgFf3-hN_YHWU9!2fE)tn&<=s;6(Zv#dY5tX64{vEC;uXHVmGZd7|>Lh559`tAAZE!K~9|5BGuOoMYxU=H$xWEl z74_maTygX;YCyRjzH81FR@_c@{Z94!sAa_l&nCat{HxQRi|?vOBt%1Jf~UR?oEyLo-Joa!S2V%W!hi zGmBro0B@Lse>7WLmYWyMvj)Elw}a-5y@WKB;$`F)QNOD14+Dht=d0AdSGpZX?c*KM zH{c2E`2MSE9@y*f_NlL|Z?`w({)-FkR~_=^oRextIb_B8IVZRHS?g)+=)vrv>T%?x zc5?Wio!__beCxr7KmEuI=J8v<^yT~R6fe|2nZUain^)OK8Z(CQ9RHuVrC*5KKcUO` zJf6t9Jq;c=)%q~wcq4m#(Vp7ZL+&=mR14ugUKqMW^-J!59^2lvkZ+HIbC%=A=*DH<3jdtfciQuIU$6MSgVPUVfQ!RDo`#RY8Pw=-zDqmhV{vpl z%)$4*QLJ>g?#TIf)&7svue@dX$Q;fM^;>W?dPlue=TidKy*rH1XEMv3quYm*!f<(Qu2w!SeI-q}z+5;NJIFxf8d6*MQ%d2Kzdm$_uCT zt7CTEJ|G{Vm4|=z=@s*Vv=rz{UU2`{=s_*F!{VLcnOq!NUTM4#O+F8oVNT{(tDW=sLcBaiO_l$Q zdA>ZV#&ZAhw3}Uv3+uZJ_4?!P)5RHoMonf0z1J5$q~~sT$KI8^*8X=IgcBIUF3!W~ z8QfvHX+lqOeVUHk(2sQ2PdT&cYSnwRw+jd0T?dCy!-hw|KdR}^rq8ihO%9t%?_e>k zrg@#8S#RrH4{ppsy=3pFc;J2Zv*RkzuDFzrXB__%{j74QekF~jH9b6Dah_lJI(bCl zGI$@wBQqj6ZkqAtNIq})jNA2+tqyIsbB2t9r!X2dJby?U zj{G8g4*bQJXb`~Rz`=+hnPK?~Mz3G)KgRy6jF}X$C2u@2L&0rt_tyj)NRG!n;jhZ_BQ}eOp`$ z@wVS_&&()I6eT+*lJks&E4p0#I9!}+Om>Xu0y9GF|P%adkQwBol;h;ew`j5wO0go<;R|IZbXd#|yhx&u-Z5<=H`-ZW=CNo@Lg4=$E;yMjSY!exrTi!`jwP zfqEf6b$T@MhvE^9+R>kZXAVw&I9~WF{t`VVJ0Unda6=d{jMwvOPUpP67~i}ZK%5bI za$@i11v*CC^ij9?A#C1!@bjB@-+2EQAJH*;^zZ{;u7V{hLHVpi3xVPSX=;Or^F#p>N3&bs7QX|5PpXVKOf!E7woDsYv zGfz9Cuz>W+)L?W_+F`uN3-~3U3)cYlTAoy^(P4Y~o4do``IEeyc&f^KH}OU8m?7VX z>oq&V=ij>d@Pl8wo-PZF`QdBtTN;`zVE}TY-hYc1^m@9{cfJ35{B7rBdvH&FQzP^K#r_MefUM^3KTpM0ckBw7c-yv@Ry?9)5ca9zotckv>cNj-- zGv0lD%is?VJxzDNnOytx^k2#m?)O4CgWPVXWbBnK;S0~H0cM@mfsv}m!fiH--_0fm zPvxVZH>X~|*~#gcX0v-9!PKEsSE8OmHW*1<&m&_x_&<6;AFrK($#4G)GpF;yYO%P z!x!h^n`ZO;3C!8*>)-y~)=Bthcn5A%y3qVjHntXFIt$_G@>cx?j)ms~RJn3iC$E5KiZVi8FIb2`k>wcyhQuun8C+JzaT=9_rV-vovka+;;D2q;KAT?bOD@!@vIS zBN&YH^E~gPm*fO{K0Ln6sOOx$1v*J9&8CLG`bRG7A=m4%Z?!w8mux@s&ZE!$=IwAN zbrqeS)$RDvIOTCldGM|4pW^Fo&?;KBi+C0ub0)8k1$B#hsl74!#&k$~W@fr+nAk`B z%$`_pzCQRHCR9LA~eDb=n{9qFH_QlCHwO)Kb^^!S)T-%PIm}S1Ws@_$Do8hVX>_w`3 z+Ed}{6nf)0N*hiIrKAc23ai9d(`XP_4nS%2LGEc-|>0z zo6qidkL8`_QR2{9eavUnP4o%kaC=WayPVNnVvCP8&yci|^5M!i9+##6Up?T@&~%yj ztoTem^KP6{=SzKCO}Y`cJnRau<4c=w{^9iQn_qkXUYa7s32|ZV;h)cMKG^^G8jN^> z)>u8nrZ}-PG(NU|C0v(x?6+3Ly?!3t)hyF97n63KZO`@ec5@x^U?;5G4!haImfV5E z#<#ZFPxoVBf0I6wTu2+FyeekX_Id%=VKUC9cV2Ez`vu1yC-35=6L!aFZSml-m)vag z{{OPVJLC7Bc<}dMdqNyIK6XvgK}+ivmsY(Y-{N!O8#yC!4Xcle^K$=~^T4)nq4fzk z0QC&G_;|gzxB7y163e5`F^%}8YP5PUbIT1naJ*!kA-o;=DesGXxN-2@%Q4$*Ugvz) z3;SodXWlvLOPH-Qy1pj%^*+~{-#XJU=E*@?W^#UGFkVMQ3thEsi)WbGE%l?=$Sk?!#JhBp65dB`uHPAx}?&7tFgn$t88;0Uz}^ zHT)9c@;r9^j?Mk{s^RTq-+%Dw57T4#%`{o>;%V7^JM??M9I39whFyI&3lhN43}~p73-2TU_Y&RO73T**$En+TRYdT5RrF8n@3i4VfW%c0e|JZLU1?WoK1vul>Jqpv=vE^n7cj=(cgw~U&X-jurp8(teY7%;zo)ZA=&&kH?*~F^}nKj=cK++&uQ$|Ni_F z)vV@gd6Z1|Y~r-(a|S=}U(@XI-e3&of$cIoALqOK{H^HqkMm-eHXgfLu=s$NDYn&9 zK7*HKHruY2bKS1o$h+ccobaXcM|s0@Pbc0vRgZ}^^??o=(;-m1@{RbcZ))jH!sycd) zKk}6~Km5wR+4Hsg?|bp)KmX*;?H~M9{wiM)1BxBb^GjM)GslUZz*XRay}N3Vc!Kl* z)oSfoz)Q?EzO$|lc!8eiSMUVCF!mse#lFHcy^}blbTRcYbVP2vwsGnn%qY(XGn)va^; z>JBuxr8*aNgA!Z*P#kdITZU7*zxD1gP$mA7_WtkpeLmK+)_VM%?02tinlbIcH1_0J zyIgBLyyD^7+O?e8T8x}XFHruC`L5nSv(c6ps+oiyZy@s{xPY@CEm(A%;zr_aa7+DY za-uxI6R;AEO|(gB`C97d;0gML%i#)5_&og@t~Jb40vFFbG<%EHx8EMZd+Z5E6nDKV z`N(jxUR@q;N@_MWcQg@W@$g*qxo!UEq_amy7%VUzF=qE`;?H`tGtmvxNw10%Ydi>6 zco1fXS=IL`d!^m~VCJ5?I72^D?tbR}(|QyhZtiTfeEMg#vwAZarq9pwOhRy`A*dv>?-AT@uI`#WL!C(7M_?z!wCJRWY2d57I_GxkJO;~|OLG-l3L z%kK2-+wQyl<`;VCb&D@<<|1nQV_wrqe+#f)!hbRXm4+`7k!uesaNSoVlDnK7t)8qve5nbpd2XZj#@gG|IiC7*YAIBA-uW-Hd)cvcz2nRFsm!dYD+*uUy^GITFlMvf_}ZC& zW$q2Hb=I7pvI~&j>|*Dg*S==IK&|uED~}A^`CcC!U=)TaCTAX6bV+#7V}nh8n%SMU z=RB=>Uur}gz}ET4RTx`#=GVQyJ-#ga;qjz5*T*lbg*Vj1(e$r*Ev>oOW23yhyuM*r z{<#-3H*BWvQUAd5>gCVG1s>G$4?I$C@$9p&g#Sl$b9BES^j{4**z43YPrLIx=;S45 zRQ)!cv!+(XQ%t_cQJllSDz$)r8~yVVY%ZFqMSbdw``wRU(M6}x1@ng$<;>uF;z&4` zoyjXWWzn=|XL~n{stT`#+h%4IFI#wnz6GZ)T)*N)pf>04kvgz35e_^}Vbyb)^Ip9s z7}KRXzDhLVW_#J2VAkY}iF0aAJ|#If=|u}hF*&J^Rp;n4-I?tBEdD9_eK8)#&+HxE zt%s}WL3zmFjl&%_@W*!48FsW5P1LggU&G_uh&O~D(Y$3ido#Dqi8pck7U2QoEqu5h z&$+_k4Thh)o98PQ1)GF%+i`HkYbpD!>F?5u*uxDUl7B{5;UV+-WBpv}=4i9@acT** zdHkJ=2afY4x0uc8ZD53DFA4tOF?Tk;mq*`Q{?>7Pn|AjYo)^El%s9`-KZBOA+I{P- zr+fB(Hi+kbzF>lOOC8~}6HbmEp&Gqmm!H)sM)u+Jm6|0zh?z6LD_-UNB;{LYu9i8? znmI;dwfc~Ei1{`R!i>6cqU;SnO zy89pPoE}pg4%XG`OZqa8{m+HxI?Y>q@Pmi+fn{HnvsirON?fn&AEt-r%@Wsd)jK!g z$OSXbeM~*-tUIT;yOrT}bG@DYFZ@k*D)MA9tIy01Ut6Dzvnd8;#yW@#%g+ZUU+@$0 zc7bOzU%q zf5y4Yd7Xn>(>cPl9>2Kw-Xq@)k01Vo*8+10_srdz&;w;>UhzV_^SR{#y;h&OYP4*9 z>22wm`L^i^rp=3LbddHW`214$c*fJ2afj#Pzwu1XeRXf?)#XBZBQRyy=pw@_uRpTk*=%RdM31!t7g?wHyOx2Wwj5?!Te%SooHvF^GRn~i{4zm ztY-&swA!gza?VDgWue;*=dMS6ScxxuaA?2ZF9#GJVYGtcp!s0&6M^jxCige^yT%uF z5l*@yAFlC9FJ3&J&qny5nWHBMs+-{H!%MV`;ejMJY}kotS8{DH{Fz%1d`<2D^<_2x ziu}L4_o0P#cOGZ^%h{(aw|;$rkKG)u`jWr5Dt?&1&#Xk7uGYz}(!7`ST$xwQI8)9k zEOxs1!^dOazTd(l9@zikXY&Ogd?vUHkH2`ynU~EDHt9ar@rSpfM~4MA-7!78*;#f( zCdaCE<^N56&L+J|`26Mm7vC~imop#-xU)DeVo>}%t|s!_+H{m{O9}mPeucsvzi^`nI)GUyy9IoxdApiuU->FE-uOs zt!FF$%Pl_7_*4~tmEcIhA&VvwuOdD{@fZ>-rf1}oe%kQtT+PfH{xVc{1gh!B)iO=9 zn|w~*ul~(UIelhogY+{cCb*BDzt1sRQs0+XTj7qw)5YJl>}sMR*yr1Ik6$)_+|l*I zhk|?Jh^(3cuB-dEZ$I6&#nWR;{kB$SoEKl>MW0#XP@kMIqQ|xuW6;lvFZ(R-$8chT zosA_X4|%;+I^^s*N}n>X?pXLk_+?(RINtC6bi(uE8^;%B%1r+9$&x#tTR5SvFMHo$ zE$z|J-TBV<4*NQ0?_+kA9#dy$#|^*hso?*1;7poXosTz1pShqu;w+z1{HXj_t&&)R z-xrUO?3qem7;FLVH#mg*FlP=H@3qu0;jB16&Qv(c_+jbw)xGJZ%Ki82;7-vD7eCwN z1F>w#86EJR`uKcyrdRx54SKiepYe)(*8ED$+{VrE62Y*^d`at8=lg z?+c$2ww;<0hc24&^i1^XKDWdGSk&3V0go3(bZ6P80tcLTrx$_)zy(&_^%c0lV)96I zaPk{IdYx8fY7tjxULLE$u3LRec7U2|%fHDT_~7Om7wtHtjnISfOriPF>xV~t>&=0l zn{PkU?HTu&A0@WZ|2?{3XX;ioY0>FB4|DMqNNo$JTX0t6Ij|Q0k&T~?zq4;j;k&CY)jCCOMm&{y!Ui#yFZs{}S z#Bk2|umq#ej4w4#;coD+O6{AvUXQzk2eIb=`P1_a8@p6^d*K5l9=I<}m|wKL+282> z1b@6V0Nd-i_4Hdk{IU9?fAIIzgXiq8IhWmYxXn}9WdpmPZNLVr(I$)MnIi=6h-Qgj z^;obuSo|!{i*H103MU?no&+8{JAi{8f1#7%p~rVuuF8JhM$W0)ao!z*AB8)Q7w6}T z8P$A0XE%J<)C1~-M*JiOd~O5k@nHXAs@W`Ewfny<|LDbeIZu8MbBgP zclD2M?mzRP4WDbN>BP>aoKWyhIe}(&xB@dA=S9$H%^`SI!6wxoG!vE70>0qeb7S!T zr!q&#UegJ^;Y?~Z_b$4C?&wMJBePdhA6~qoJG|d^d)=}VGczc6d#c@zxa0Wv$6ze& z&Sg8ix6{9Er%!7aH?k8_PEQQsa}xjg=lkQER6Ni#-%kz>UhR2jwyMXlckS|NcRDy= zE&EIh2P%F`nX9&Pi8I9OI5;od&htx*jb^Fr`x?qQ6rZyLu1EhL-f(Z?LG*V zhAnnyzgX^gZ+b8By+v zJ}=HTZ@v<y

5=oc2ne{-j%I1pSA#|$qc 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 Cxy8Z& From be4af711af3ee7668110b7d838c275432b969bfb Mon Sep 17 00:00:00 2001 From: gugus Date: Tue, 3 Apr 2012 17:30:19 +0200 Subject: [PATCH 348/488] NPC rank was not loaded. Not sure if it's the right way, but it seems to work. --- apps/openmw/mwclass/npc.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 83a94d27d1..b98df79ef1 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -53,9 +53,14 @@ namespace MWClass // NPC stats if (!ref->base->faction.empty()) { - // TODO research how initial rank is stored. The information in loadnpc.hpp are at - // best very unclear. - data->mNpcStats.mFactionRank[ref->base->faction] = 0; + if(ref->base->npdt52.gold != -10) + { + data->mNpcStats.mFactionRank[ref->base->faction] = ref->base->npdt52.rank; + } + else + { + data->mNpcStats.mFactionRank[ref->base->faction] = ref->base->npdt52.rank; + } } for (int i=0; i<27; ++i) @@ -281,7 +286,7 @@ namespace MWClass void Npc::registerSelf() { boost::shared_ptr instance (new Npc); - + std::cout << "class npc:" << typeid (ESM::NPC).name(); registerClass (typeid (ESM::NPC).name(), instance); } } From a268b89239742ce05f164f0706c8c765aa01ab6e Mon Sep 17 00:00:00 2001 From: gugus Date: Tue, 3 Apr 2012 17:31:41 +0200 Subject: [PATCH 349/488] changed the way NPC faction is checked. Should be the same way for the player. --- apps/openmw/mwdialogue/dialoguemanager.cpp | 23 +++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index 50549f4a55..1e6faf2924 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -39,6 +39,9 @@ #include "../mwscript/interpretercontext.hpp" #include +#include "../mwclass/npc.hpp" +#include "../mwmechanics/npcstats.hpp" + namespace { std::string toLower (const std::string& name) @@ -474,22 +477,18 @@ namespace MWDialogue //NPC faction if (!info.npcFaction.empty()) { - ESMS::LiveCellRef *cellRef = actor.get(); - - if (!cellRef) - return false; - - if (toLower (info.npcFaction)!=toLower (cellRef->base->faction)) - return false; - - //check NPC rank - if(cellRef->base->npdt52.gold != -10) + //MWWorld::Class npcClass = MWWorld::Class::get(actor); + MWMechanics::NpcStats stats = MWWorld::Class::get(actor).getNpcStats(actor); + std::map::iterator it = stats.mFactionRank.find(info.npcFaction); + if(it!=stats.mFactionRank.end()) { - if(cellRef->base->npdt52.rank < info.data.rank) return false; + //check rank + if(it->second < info.data.rank) return false; } else { - if(cellRef->base->npdt12.rank < info.data.rank) return false; + //not in the faction + return false; } } From fe63f2b2aaf0873fa57c8ae766776c5566da1181 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 19:10:02 +0200 Subject: [PATCH 350/488] first reflection test; removed the refraction render (we'll have it for free using MRT and deferred water rendering) --- apps/openmw/mwrender/water.cpp | 65 ++++++++++++---------------------- apps/openmw/mwrender/water.hpp | 1 - files/CMakeLists.txt | 1 + files/settings-default.cfg | 2 -- files/water/water.material | 61 +++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 46 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index a6479c401d..bf40c95679 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -9,7 +9,7 @@ namespace MWRender Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mIsUnderwater(false), mReflectDistance(0), mVisibilityFlags(0), mOldCameraFarClip(0), - mReflectionTarget(0), mRefractionTarget(0), mActive(1) + mReflectionTarget(0), mActive(1) { try { @@ -28,8 +28,6 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mWater = mSceneManager->createEntity("water"); mWater->setVisibilityFlags(RV_Water); - mWater->setMaterial(createMaterial()); - mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") + RV_StaticsSmall * Settings::Manager::getBool("reflect small statics", "Water") @@ -48,33 +46,31 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : // Create rendertargets for reflection and refraction int rttsize = Settings::Manager::getInt("rtt size", "Water"); - for (unsigned int i = 0; i < 2; ++i) - { - if (i==0 && !Settings::Manager::getBool("reflection", "Water")) continue; - if (i==1 && !Settings::Manager::getBool("refraction", "Water")) continue; - TexturePtr tex = TextureManager::getSingleton().createManual(i == 0 ? "WaterReflection" : "WaterRefraction", - ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); + if (Settings::Manager::getBool("reflection", "Water")) + { + TexturePtr tex = TextureManager::getSingleton().createManual("WaterReflection", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); - RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); - Viewport* vp = rtt->addViewport(mCamera); - vp->setOverlaysEnabled(false); - vp->setBackgroundColour(ColourValue(0.8f, 0.9f, 1.0f)); - vp->setShadowsEnabled(false); - vp->setVisibilityMask( (i == 0) ? mVisibilityFlags : RV_All); - rtt->addListener(this); + RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); + Viewport* vp = rtt->addViewport(mCamera); + vp->setOverlaysEnabled(false); + vp->setBackgroundColour(ColourValue(0.8f, 0.9f, 1.0f)); + vp->setShadowsEnabled(false); + vp->setVisibilityMask( mVisibilityFlags ); + rtt->addListener(this); rtt->setActive(true); - if (i == 0) mReflectionTarget = rtt; - else mRefractionTarget = rtt; - } + mReflectionTarget = rtt; + } + + mWater->setMaterial(createMaterial()); } void Water::setActive(bool active) { mActive = active; if (mReflectionTarget) mReflectionTarget->setActive(active); - if (mRefractionTarget) mRefractionTarget->setActive(active); mWater->setVisible(active); } @@ -146,8 +142,8 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) if (evt.source == mReflectionTarget) { - mCamera->enableCustomNearClipPlane(mWaterPlane); - mCamera->enableReflection(Plane(Vector3::UNIT_Y, mWaterNode->_getDerivedPosition().y)); + mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); + mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); } } @@ -166,33 +162,16 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) Ogre::MaterialPtr Water::createMaterial() { - MaterialPtr mat = MaterialManager::getSingleton().create("Water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); - mat->removeAllTechniques(); + MaterialPtr mat = MaterialManager::getSingleton().getByName("Water"); - // shader technique - Technique* tech = mat->createTechnique(); - Pass* pass = tech->createPass(); - - - // fallback technique without shaders - // also used for minimap (because it can't have reflecting water) - Technique* old = mat->createTechnique(); - old->setSchemeName("Map"); - Pass* oldpass = old->createPass(); - oldpass->setSceneBlending(SBT_TRANSPARENT_ALPHA); - oldpass->setDepthWriteEnabled(false); - oldpass->setDiffuse(0,0,0,1); - oldpass->setSelfIllumination(0.6, 0.7, 1.0); - oldpass->setAmbient(0,0,0); - TextureUnitState* oldtus = oldpass->createTextureUnitState(); + // these have to be set in code std::string textureNames[32]; for (int i=0; i<32; ++i) { textureNames[i] = "textures\\water\\water" + StringConverter::toString(i, 2, '0') + ".dds"; } - oldtus->setAnimatedTextureName(textureNames, 32, 2); - oldtus->setTextureScale(0.1, 0.1); - oldtus->setAlphaOperation(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, 0.7); + mat->getTechnique(1)->getPass(0)->getTextureUnitState(0)->setAnimatedTextureName(textureNames, 32, 2); + return mat; } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index c4d2189ff6..61519dbb97 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -33,7 +33,6 @@ namespace MWRender { Ogre::MaterialPtr createMaterial(); Ogre::RenderTarget* mReflectionTarget; - Ogre::RenderTarget* mRefractionTarget; int mVisibilityFlags; int mReflectDistance; diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 0a38ff8b50..56c3db8627 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -7,3 +7,4 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINA configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal2.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal2.tga" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.cg "${OpenMW_BINARY_DIR}/resources/water/water.cg" COPYONLY) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index d9c908883d..914b4019d6 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -46,8 +46,6 @@ num lights = 8 reflection = false -refraction = false - rtt size = 256 # 0 unlimited diff --git a/files/water/water.material b/files/water/water.material index 673bbaf56a..50dfd93795 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -18,6 +18,67 @@ fragment_program Water/GlassFP cg profiles ps_2_0 arbfp1 } +vertex_program Water_VP cg +{ + source water.cg + entry_point main_vp + profiles vs_2_x arbvp1 + + default_params + { + param_named_auto wvpMat worldviewproj_matrix + } +} + +fragment_program Water_FP cg +{ + source water.cg + entry_point main_fp + profiles ps_2_x arbfp1 +} + +material Water +{ + technique + { + pass + { + scene_blend alpha_blend + depth_write off + + vertex_program_ref Water_VP + { + } + fragment_program_ref Water_FP + { + } + + texture_unit reflectionMap + { + texture WaterReflection + } + } + } + technique + { + scheme Map + pass + { + scene_blend alpha_blend + depth_write off + diffuse 0 0 0 1 + emissive 0.6 0.7 1.0 + ambient 0 0 0 + texture_unit + { + // texture names set via code + scale 0.1 0.1 + alpha_op_ex source1 src_manual src_current 0.7 + } + } + } +} + material Water/Compositor { technique From cc4076d42aea6e8009f6505a0cc867532a7c2844 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 21:16:43 +0200 Subject: [PATCH 351/488] basic noise --- apps/openmw/mwrender/renderingmanager.cpp | 2 +- apps/openmw/mwrender/water.cpp | 12 ++++- apps/openmw/mwrender/water.hpp | 6 ++- files/settings-default.cfg | 3 -- files/water/water.cg | 56 +++++++++++++++++++++++ files/water/water.material | 6 +++ 6 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 files/water/water.cg diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index ff4e6786ca..98344297fa 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -185,7 +185,7 @@ void RenderingManager::update (float duration){ void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){ if(store->cell->data.flags & store->cell->HasWater){ if(mWater == 0) - mWater = new MWRender::Water(mRendering.getCamera(), store->cell); + mWater = new MWRender::Water(mRendering.getCamera(), mSkyManager, store->cell); else mWater->changeCell(store->cell); mWater->setActive(true); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index bf40c95679..df6d1a97a1 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,16 +1,19 @@ #include "water.hpp" #include +#include "sky.hpp" using namespace Ogre; namespace MWRender { -Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : +Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mIsUnderwater(false), mReflectDistance(0), mVisibilityFlags(0), mOldCameraFarClip(0), mReflectionTarget(0), mActive(1) { + mSky = sky; + try { CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); @@ -33,6 +36,7 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : + RV_StaticsSmall * Settings::Manager::getBool("reflect small statics", "Water") + RV_Actors * Settings::Manager::getBool("reflect actors", "Water") + RV_Misc * Settings::Manager::getBool("reflect misc", "Water"); + //+ RV_Sky; mReflectDistance = Settings::Manager::getInt("reflect distance", "Water"); mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); @@ -44,7 +48,7 @@ Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : } mWaterNode->attachObject(mWater); - // Create rendertargets for reflection and refraction + // Create rendertarget for reflection int rttsize = Settings::Manager::getInt("rtt size", "Water"); if (Settings::Manager::getBool("reflection", "Water")) @@ -172,6 +176,10 @@ Ogre::MaterialPtr Water::createMaterial() } mat->getTechnique(1)->getPass(0)->getTextureUnitState(0)->setAnimatedTextureName(textureNames, 32, 2); + // use technique without shaders if reflection is disabled + if (mReflectionTarget == 0) + mat->removeTechnique(0); + return mat; } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 61519dbb97..8e9014833e 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -8,6 +8,8 @@ namespace MWRender { + class SkyManager; + /// Water rendering class Water : Ogre::RenderTargetListener { @@ -30,6 +32,8 @@ namespace MWRender { void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); + SkyManager* mSky; + Ogre::MaterialPtr createMaterial(); Ogre::RenderTarget* mReflectionTarget; @@ -39,7 +43,7 @@ namespace MWRender { int mOldCameraFarClip; public: - Water (Ogre::Camera *camera, const ESM::Cell* cell); + Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell); ~Water(); void setActive(bool active); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 914b4019d6..ea2aa8ff1f 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -48,9 +48,6 @@ reflection = false rtt size = 256 -# 0 unlimited -reflect distance = 0 - reflect terrain = true reflect statics = true diff --git a/files/water/water.cg b/files/water/water.cg new file mode 100644 index 0000000000..6d5df987dc --- /dev/null +++ b/files/water/water.cg @@ -0,0 +1,56 @@ +void main_vp +( + in float4 iPos : POSITION + , in float2 iUv : TEXCOORD0 + + , out float4 oPos : POSITION + , out float3 oScreenCoords : TEXCOORD0 + , out float2 oUv : TEXCOORD1 + + , uniform float4x4 wvpMat +) +{ + oPos = mul(wvpMat, iPos); + + oUv = iUv * 10; // uv scale + + float4x4 scalemat = float4x4( 0.5, 0, 0, 0.5, + 0, -0.5, 0, 0.5, + 0, 0, 0.5, 0.5, + 0, 0, 0, 1 ); + float4 texcoordProj = mul(scalemat, oPos); + oScreenCoords = float3(texcoordProj.x, texcoordProj.y, texcoordProj.w); +} + +void main_fp +( + out float4 oColor : COLOR + + , in float3 iScreenCoords : TEXCOORD0 + , in float2 iUv : TEXCOORD1 + , uniform float renderTargetFlipping + + , uniform sampler2D reflectionMap : register(s0) + , uniform sampler2D normalMap : register(s1) + , uniform float time +) +{ + + float2 screenCoords = iScreenCoords.xy / iScreenCoords.z; + screenCoords.y = (renderTargetFlipping == -1) ? (1-screenCoords.y) : screenCoords.y; + + float2 uv1 = iUv + time * float2(0.5, 0); + float2 uv2 = iUv + time * float2(0, 0.5); + float2 uv3 = iUv + time * float2(-0.5, 0); + float2 uv4 = iUv + time * float2(0, -0.5); + + float4 normal = tex2D(normalMap, uv1) + tex2D(normalMap, uv2) + tex2D(normalMap, uv3) + tex2D(normalMap, uv4); + normal = normal / 4.f; + normal = 2*normal - 1; + screenCoords += normal.yx * 0.05; + + float4 reflection = tex2D(reflectionMap, screenCoords); + + oColor.xyz = reflection.xyz; + oColor.a = 0.45; +} diff --git a/files/water/water.material b/files/water/water.material index 50dfd93795..8f8f72df00 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -51,11 +51,17 @@ material Water } fragment_program_ref Water_FP { + param_named_auto time time 0.1 } texture_unit reflectionMap { texture WaterReflection + tex_address_mode clamp + } + texture_unit normalMap + { + texture WaterNormal2.tga } } } From 2fa9bac5172476893f78fdcb45d467ce10a5f0cd Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 22:04:37 +0200 Subject: [PATCH 352/488] added fog --- files/water/water.cg | 8 +++++++- files/water/water.material | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/files/water/water.cg b/files/water/water.cg index 6d5df987dc..70d3339b19 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -6,6 +6,7 @@ void main_vp , out float4 oPos : POSITION , out float3 oScreenCoords : TEXCOORD0 , out float2 oUv : TEXCOORD1 + , out float oDepth : TEXCOORD2 , uniform float4x4 wvpMat ) @@ -13,6 +14,7 @@ void main_vp oPos = mul(wvpMat, iPos); oUv = iUv * 10; // uv scale + oDepth = oPos.z; float4x4 scalemat = float4x4( 0.5, 0, 0, 0.5, 0, -0.5, 0, 0.5, @@ -28,11 +30,14 @@ void main_fp , in float3 iScreenCoords : TEXCOORD0 , in float2 iUv : TEXCOORD1 + , in float iDepth : TEXCOORD2 , uniform float renderTargetFlipping , uniform sampler2D reflectionMap : register(s0) , uniform sampler2D normalMap : register(s1) , uniform float time + , uniform float4 fogParams + , uniform float4 fogColour ) { @@ -51,6 +56,7 @@ void main_fp float4 reflection = tex2D(reflectionMap, screenCoords); - oColor.xyz = reflection.xyz; + float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); + oColor.xyz = lerp(reflection.xyz, fogColour, fogValue); oColor.a = 0.45; } diff --git a/files/water/water.material b/files/water/water.material index 8f8f72df00..abd5ad80e6 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -52,6 +52,8 @@ material Water fragment_program_ref Water_FP { param_named_auto time time 0.1 + param_named_auto fogColour fog_colour + param_named_auto fogParams fog_params } texture_unit reflectionMap From 328bdaafb64c30981c6b1515e6a25c77a9d96823 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 3 Apr 2012 22:53:08 +0200 Subject: [PATCH 353/488] fixed a problem with the underwater compositor --- files/settings-default.cfg | 6 ++++++ files/water/GlassFP.cg | 2 +- files/water/water.material | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index ea2aa8ff1f..9be18f61be 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -57,3 +57,9 @@ reflect small statics = false reflect actors = true reflect misc = false + +[Render] + +# Only supported on SM3+ cards +# If you have a lower end card, this will be disabled automatically +multiple render targets = true diff --git a/files/water/GlassFP.cg b/files/water/GlassFP.cg index eb18885d25..c294f6fff5 100644 --- a/files/water/GlassFP.cg +++ b/files/water/GlassFP.cg @@ -6,7 +6,7 @@ float4 main_ps(float2 iTexCoord : TEXCOORD0, float3 noiseCoord : TEXCOORD1, uniform float4 tintColour) : COLOR { - float4 normal = tex2D(NormalMap, noiseCoord); + float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; return tex2D(RT, iTexCoord + normal.xy * 0.05) + diff --git a/files/water/water.material b/files/water/water.material index abd5ad80e6..bca5a9281d 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -48,6 +48,7 @@ material Water vertex_program_ref Water_VP { + param_named_auto renderTargetFlipping render_target_flipping } fragment_program_ref Water_FP { From 329ba24eab7ee016bd103367c061f87f04f6d282 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 15:11:30 +0200 Subject: [PATCH 354/488] streamlined command line options --- apps/mwiniimporter/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 051e7db2b8..234d7d57d4 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -9,7 +9,8 @@ namespace bpo = boost::program_options; int main(int argc, char *argv[]) { - bpo::options_description desc("Syntax: mwiniimporter -i inifile -c configfile \nAllowed options"); + bpo::options_description desc("Syntax: mwiniimporter inifile configfile\nAllowed options"); + bpo::positional_options_description p_desc; desc.add_options() ("help,h", "produce help message") ("verbose,v", "verbose output") @@ -18,9 +19,15 @@ int main(int argc, char *argv[]) { ("output,o", bpo::value()->default_value(""), "openmw.cfg file") ("game-files,g", "import esm and esp files") ; + p_desc.add("ini", 1).add("cfg", 1); bpo::variables_map vm; - bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); + bpo::parsed_options parsed = bpo::command_line_parser(argc, argv) + .options(desc) + .positional(p_desc) + .run(); + + bpo::store(parsed, vm); if(vm.count("help") || !vm.count("ini") || !vm.count("cfg")) { std::cout << desc; From de510d445b328f5315a3aff4ac00d610bb23fa8e Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 15:23:14 +0200 Subject: [PATCH 355/488] throw an error if the --fallback syntax is wrong --- apps/openmw/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index b541ea0d36..cdc4af4b02 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -71,8 +71,8 @@ void validate(boost::any &v, std::vector const &tokens, FallbackMap for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) { int sep = it->find(","); - if(sep < 1) - continue; + if(sep < 1 || sep = it->length()-1) + throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value); std::string key(it->substr(0,sep)); std::string value(it->substr(sep+1)); From 16e7bf353a50a0188cf1790417751d89ea24d83e Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 16:08:46 +0200 Subject: [PATCH 356/488] remove debug message --- apps/openmw/mwworld/world.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 596adcf6b0..7f4169b9d4 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -205,9 +205,8 @@ namespace MWWorld } mWorldScene = new Scene(environment, this, *mRendering, mPhysics); - + setFallbackValues(fallbackMap); - std::cout << "Weather_Sunrise_Time=" << getFallback("Weather_Sunrise_Time") << std::endl; } From 48b7b03453197ff5069aee6b9714838bc95085be Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 16:15:15 +0200 Subject: [PATCH 357/488] typo; World::getFallback(std::string key, std::string def) --- apps/openmw/main.cpp | 2 +- apps/openmw/mwworld/world.cpp | 7 ++++++- apps/openmw/mwworld/world.hpp | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index cdc4af4b02..06b0686217 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -71,7 +71,7 @@ void validate(boost::any &v, std::vector const &tokens, FallbackMap for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) { int sep = it->find(","); - if(sep < 1 || sep = it->length()-1) + if(sep < 1 || sep == (it->length()-1)) throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value); std::string key(it->substr(0,sep)); diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 7f4169b9d4..431a7a18c1 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -158,11 +158,16 @@ namespace MWWorld } std::string World::getFallback(std::string key) + { + return getFallback(key, ""); + } + + std::string World::getFallback(std::string key, std::string def) { std::map::iterator it; if((it = mFallback.find(key)) == mFallback.end()) { - return std::string(""); + return def; } return it->second; } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 7f18762f56..799b0d0941 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -130,6 +130,8 @@ namespace MWWorld std::string getFallback(std::string key); + std::string getFallback(std::string key, std::string def); + MWWorld::Player& getPlayer(); const ESMS::ESMStore& getStore() const; From 6442d49e1630daaa9f5ef74f8dc2eaee1de68730 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 4 Apr 2012 18:53:40 +0200 Subject: [PATCH 358/488] render queue groups, sky fix --- apps/openmw/mwrender/creatureanimation.cpp | 21 +++++++++++++++++++++ apps/openmw/mwrender/npcanimation.cpp | 20 ++++++++++++++++++++ apps/openmw/mwrender/objects.cpp | 20 ++++++++++++++++++++ apps/openmw/mwrender/occlusionquery.cpp | 7 ++++--- apps/openmw/mwrender/renderconst.hpp | 13 ++++++++++++- apps/openmw/mwrender/sky.cpp | 16 ++++++++-------- apps/openmw/mwrender/terrain.cpp | 1 + apps/openmw/mwrender/water.cpp | 3 ++- 8 files changed, 88 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwrender/creatureanimation.cpp b/apps/openmw/mwrender/creatureanimation.cpp index 4c2ce8399a..e0eb5ccc20 100644 --- a/apps/openmw/mwrender/creatureanimation.cpp +++ b/apps/openmw/mwrender/creatureanimation.cpp @@ -22,6 +22,27 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, MWWorld::Environme NifOgre::NIFLoader::load(meshNumbered); base = mRend.getScene()->createEntity(meshNumbered); base->setVisibilityFlags(RV_Actors); + + bool transparent = false; + for (unsigned int i=0; igetNumSubEntities(); ++i) + { + Ogre::MaterialPtr mat = base->getSubEntity(i)->getMaterial(); + Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); + while (techIt.hasMoreElements()) + { + Ogre::Technique* tech = techIt.getNext(); + Ogre::Technique::PassIterator passIt = tech->getPassIterator(); + while (passIt.hasMoreElements()) + { + Ogre::Pass* pass = passIt.getNext(); + + if (pass->getDepthWriteEnabled() == false) + transparent = true; + } + } + } + base->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); + std::string meshZero = mesh + "0000>|"; if((transformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero))){ diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index 3a4d9300d7..9de5705e3f 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -67,6 +67,26 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,O base = mRend.getScene()->createEntity(smodel); base->setVisibilityFlags(RV_Actors); + bool transparent = false; + for (unsigned int i=0; igetNumSubEntities(); ++i) + { + Ogre::MaterialPtr mat = base->getSubEntity(i)->getMaterial(); + Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); + while (techIt.hasMoreElements()) + { + Ogre::Technique* tech = techIt.getNext(); + Ogre::Technique::PassIterator passIt = tech->getPassIterator(); + while (passIt.hasMoreElements()) + { + Ogre::Pass* pass = passIt.getNext(); + + if (pass->getDepthWriteEnabled() == false) + transparent = true; + } + } + } + base->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); + base->setSkipAnimationStateUpdate(true); //Magical line of code, this makes the bones //stay in the same place when we skipanim, or open a gui window diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index bd39e1f5a5..9d743fe90b 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -113,6 +113,26 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) bounds.scale(insert->getScale()); mBounds[ptr.getCell()].merge(bounds); + bool transparent = false; + for (unsigned int i=0; igetNumSubEntities(); ++i) + { + Ogre::MaterialPtr mat = ent->getSubEntity(i)->getMaterial(); + Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); + while (techIt.hasMoreElements()) + { + Ogre::Technique* tech = techIt.getNext(); + Ogre::Technique::PassIterator passIt = tech->getPassIterator(); + while (passIt.hasMoreElements()) + { + Ogre::Pass* pass = passIt.getNext(); + + if (pass->getDepthWriteEnabled() == false) + transparent = true; + } + } + } + ent->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); + if(!mIsStatic || !Settings::Manager::getBool("use static geometry", "Objects")) { insert->attachObject(ent); diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 781b522b63..ff1ce82e7c 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -1,4 +1,5 @@ #include "occlusionquery.hpp" +#include "renderconst.hpp" #include #include @@ -39,8 +40,8 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod return; } - // This means that everything up to RENDER_QUEUE_MAIN can occlude the objects that are tested - const int queue = RENDER_QUEUE_MAIN+1; + // This means that everything up to RQG_Main can occlude the objects that are tested + const int queue = RQG_Main+1; MaterialPtr matBase = MaterialManager::getSingleton().getByName("BaseWhiteNoLighting"); MaterialPtr matQueryArea = matBase->clone("QueryTotalPixels"); @@ -152,7 +153,7 @@ void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocati * this can happen for example if the object that is tested is outside of the view frustum * to prevent this, check if the queries have been performed after everything has been rendered and if not, start them manually */ - if (queueGroupId == RENDER_QUEUE_SKIES_LATE) + if (queueGroupId == RQG_SkiesLate) { if (mWasVisible == false && mDoQuery) { diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 5e1c6c7bb1..6eba8d92e4 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -7,7 +7,18 @@ namespace MWRender { // Render queue groups -/// \todo +enum RenderQueueGroups +{ + // Sky early (atmosphere, clouds, moons) + RQG_SkiesEarly = Ogre::RENDER_QUEUE_SKIES_EARLY, + + RQG_Main = Ogre::RENDER_QUEUE_MAIN, + + RQG_Alpha = Ogre::RENDER_QUEUE_7, + + // Sky late (sun & sun flare) + RQG_SkiesLate = Ogre::RENDER_QUEUE_SKIES_LATE +}; // Visibility flags enum VisibilityFlags diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 8e774eb084..7ccbaf8e23 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -89,7 +89,6 @@ void BillboardObject::init(const String& textureName, /// \todo These billboards are not 100% correct, might want to revisit them later mBBSet = sceneMgr->createBillboardSet("SkyBillboardSet"+StringConverter::toString(bodyCount), 1); mBBSet->setDefaultDimensions(550.f*initialSize, 550.f*initialSize); - mBBSet->setRenderQueueGroup(RENDER_QUEUE_MAIN+2); mBBSet->setBillboardType(BBT_PERPENDICULAR_COMMON); mBBSet->setCommonDirection( -position.normalisedCopy() ); mBBSet->setVisibilityFlags(RV_Sky); @@ -359,15 +358,16 @@ void SkyManager::create() mSecunda = new Moon("textures\\tx_secunda_full.dds", 0.5, Vector3(-0.4, 0.4, 0.5), mRootNode); mSecunda->setType(Moon::Type_Secunda); - mSecunda->setRenderQueue(RENDER_QUEUE_SKIES_EARLY+4); + mSecunda->setRenderQueue(RQG_SkiesEarly+4); mMasser = new Moon("textures\\tx_masser_full.dds", 0.75, Vector3(-0.4, 0.4, 0.5), mRootNode); - mMasser->setRenderQueue(RENDER_QUEUE_SKIES_EARLY+3); + mMasser->setRenderQueue(RQG_SkiesEarly+3); mMasser->setType(Moon::Type_Masser); mSun = new BillboardObject("textures\\tx_sun_05.dds", 1, Vector3(0.4, 0.4, 0.4), mRootNode); + mSun->setRenderQueue(RQG_SkiesEarly+4); mSunGlare = new BillboardObject("textures\\tx_sun_flash_grey_05.dds", 3, Vector3(0.4, 0.4, 0.4), mRootNode); - mSunGlare->setRenderQueue(RENDER_QUEUE_SKIES_LATE); + mSunGlare->setRenderQueue(RQG_SkiesLate); HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); @@ -376,7 +376,7 @@ void SkyManager::create() /// \todo sky_night_02.nif (available in Bloodmoon) MeshPtr mesh = NifOgre::NIFLoader::load("meshes\\sky_night_01.nif"); Entity* night1_ent = mSceneMgr->createEntity("meshes\\sky_night_01.nif"); - night1_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY+1); + night1_ent->setRenderQueueGroup(RQG_SkiesEarly+1); night1_ent->setVisibilityFlags(RV_Sky); mAtmosphereNight = mRootNode->createChildSceneNode(); @@ -450,7 +450,7 @@ void SkyManager::create() ModVertexAlpha(atmosphere_ent, 0); - atmosphere_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY); + atmosphere_ent->setRenderQueueGroup(RQG_SkiesEarly); atmosphere_ent->setVisibilityFlags(RV_Sky); mAtmosphereDay = mRootNode->createChildSceneNode(); mAtmosphereDay->attachObject(atmosphere_ent); @@ -489,7 +489,7 @@ void SkyManager::create() NifOgre::NIFLoader::load("meshes\\sky_clouds_01.nif"); Entity* clouds_ent = mSceneMgr->createEntity("meshes\\sky_clouds_01.nif"); clouds_ent->setVisibilityFlags(RV_Sky); - clouds_ent->setRenderQueueGroup(RENDER_QUEUE_SKIES_EARLY+5); + clouds_ent->setRenderQueueGroup(RQG_SkiesEarly+5); SceneNode* clouds_node = mRootNode->createChildSceneNode(); clouds_node->attachObject(clouds_ent); mCloudMaterial = clouds_ent->getSubEntity(0)->getMaterial(); @@ -738,7 +738,7 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather) strength = 1.f; mSunGlare->setVisibility(weather.mGlareView * mGlareFade * strength); - mSun->setVisibility(mGlareFade >= 0.5 ? weather.mGlareView * mGlareFade * strength : 0); + mSun->setVisibility(weather.mGlareView); mAtmosphereNight->setVisible(weather.mNight && mEnabled); } diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 6c11f74859..ed2c983ddb 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -161,6 +161,7 @@ namespace MWRender numTextures, indexes); terrain->setVisibilityFlags(RV_Terrain); + terrain->setRenderQueueGroup(RQG_Main); if ( land && land->landData->usingColours ) { diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index df6d1a97a1..1983616d60 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -26,10 +26,11 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mWaterPlane = Plane(Vector3::UNIT_Y, 0); - MeshManager::getSingleton().createPlane("water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Vector3::UNIT_Z); + MeshManager::getSingleton().createPlane("water", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,3, Vector3::UNIT_Z); mWater = mSceneManager->createEntity("water"); mWater->setVisibilityFlags(RV_Water); + mWater->setRenderQueueGroup(RQG_Alpha); mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") From 94a220dcdd9d222b1799c6731898da768c496fac Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 19:52:07 +0200 Subject: [PATCH 359/488] set a default value for --fallback --- apps/openmw/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 06b0686217..2e56d528be 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -267,7 +267,11 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setCompileAll(variables["script-all"].as()); engine.setReportFocus(variables["report-focus"].as()); engine.setAnimationVerbose(variables["anim-verbose"].as()); - engine.setFallbackValues(variables["fallback"].as().mMap); + + if(variables.count("fallback")) + { + engine.setFallbackValues(variables["fallback"].as().mMap); + } return true; } From 006970fd792b27d6fabb8fd52738e42eef9edc1f Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 4 Apr 2012 19:53:41 +0200 Subject: [PATCH 360/488] add MRT code to shaders --- components/nifogre/ogre_nif_loader.cpp | 28 +++++++++++++++++++------- files/gbuffer/gbuffer.compositor | 0 files/gbuffer/gbuffer.material | 0 3 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 files/gbuffer/gbuffer.compositor create mode 100644 files/gbuffer/gbuffer.material diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 7fa45815fb..83510db139 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -302,6 +302,8 @@ void NIFLoader::createMaterial(const String &name, if (Settings::Manager::getBool("shaders", "Objects")) { + bool mrt = Settings::Manager::getBool("multiple render targets", "Render"); + // Create shader for the material // vertex HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); @@ -324,9 +326,8 @@ void NIFLoader::createMaterial(const String &name, " out float4 oPosition : POSITION, \n" " out float4 oPositionObjSpace : TEXCOORD1, \n" " out float4 oNormal : TEXCOORD2, \n" - " out float oFogValue : TEXCOORD3, \n" + " out float oDepth : TEXCOORD3, \n" " out float4 oVertexColour : TEXCOORD4, \n" - " uniform float4 fogParams, \n" " uniform float4x4 worldViewProj \n" ") \n" "{ \n" @@ -334,13 +335,12 @@ void NIFLoader::createMaterial(const String &name, " oUV = uv; \n" " oNormal = normal; \n" " oPosition = mul( worldViewProj, position ); \n" - " oFogValue = saturate((oPosition.z - fogParams.y) * fogParams.w); \n" + " oDepth = oPosition.z; \n" " oPositionObjSpace = position; \n" "}"; vertex->setSource(outStream.str()); vertex->load(); vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - vertex->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); } else vertex = mgr.getByName("main_vp"); @@ -370,9 +370,14 @@ void NIFLoader::createMaterial(const String &name, " uniform sampler2D texture : TEXUNIT0, \n" " float4 positionObjSpace : TEXCOORD1, \n" " float4 normal : TEXCOORD2, \n" - " float fogValue : TEXCOORD3, \n" + " float iDepth : TEXCOORD3, \n" " float4 vertexColour : TEXCOORD4, \n" - " uniform float4 fogColour, \n"; + " uniform float4 fogColour, \n" + " uniform float4 fogParams, \n"; + + if (mrt) outStream << + " out float4 oColor1 : COLOR1, \n" + " uniform float far, \n"; for (int i=0; isetSource(outStream.str()); fragment->load(); @@ -425,6 +436,9 @@ void NIFLoader::createMaterial(const String &name, fragment->getDefaultParameters()->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); fragment->getDefaultParameters()->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); fragment->getDefaultParameters()->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); + if (mrt) + fragment->getDefaultParameters()->setNamedAutoConstant("far", GpuProgramParameters::ACT_FAR_CLIP_DISTANCE); } else fragment = mgr.getByName("main_fp"); diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor new file mode 100644 index 0000000000..e69de29bb2 diff --git a/files/gbuffer/gbuffer.material b/files/gbuffer/gbuffer.material new file mode 100644 index 0000000000..e69de29bb2 From a974d88cf1fab6f5d5d18b7762f943ea6c101fb6 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 19:58:04 +0200 Subject: [PATCH 361/488] Revert "set a default value for --fallback" This reverts commit 94a220dcdd9d222b1799c6731898da768c496fac. --- apps/openmw/main.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 2e56d528be..06b0686217 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -267,11 +267,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat engine.setCompileAll(variables["script-all"].as()); engine.setReportFocus(variables["report-focus"].as()); engine.setAnimationVerbose(variables["anim-verbose"].as()); - - if(variables.count("fallback")) - { - engine.setFallbackValues(variables["fallback"].as().mMap); - } + engine.setFallbackValues(variables["fallback"].as().mMap); return true; } From d3a6484bbc052706949fd176a01ada7c549d9853 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 19:59:46 +0200 Subject: [PATCH 362/488] set the default value for --fallback the right way --- apps/openmw/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 06b0686217..545014206f 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -157,7 +157,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat ("report-focus", bpo::value()->implicit_value(true) ->default_value(false), "write name of focussed object to cout") - ("fallback", bpo::value() + ("fallback", bpo::value()->default_value(FallbackMap(), "") ->multitoken()->composing(), "fallback values") ; From 6ccb32d26c55808b55f2c637b250e977144a3d07 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 20:06:31 +0200 Subject: [PATCH 363/488] import nosound option --- apps/mwiniimporter/importer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index f1cec04795..5503a7c1a8 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -12,6 +12,7 @@ MwIniImporter::MwIniImporter() { const char *map[][2] = { { "fps", "General:Show FPS" }, + { "nosound", "General:Disable Audio" }, { 0, 0 } }; const char *fallback[] = { From eb67afe5528aae8fdb288e20db5f13d2959625bd Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 4 Apr 2012 20:18:08 +0200 Subject: [PATCH 364/488] added MRT output to terrain material --- apps/openmw/mwrender/terrainmaterial.cpp | 42 ++++++++++++++---------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 922ea2280e..867ec8e1fd 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -557,7 +557,10 @@ namespace Ogre params->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); //params->setNamedAutoConstant("lightSpecularColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, i); } - + + if (Settings::Manager::getBool("multiple render targets", "Render")) + params->setNamedAutoConstant("far", GpuProgramParameters::ACT_FAR_CLIP_DISTANCE); + params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); params->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); @@ -753,12 +756,7 @@ namespace Ogre ret->unload(); } - if(prof->isLayerNormalMappingEnabled() || prof->isLayerParallaxMappingEnabled()) - ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); - //else - //ret->setParameter("profiles", "ps_3_0 ps_2_0 fp30 arbfp1"); - else // fp30 doesn't work (black terrain) - ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); + ret->setParameter("profiles", "ps_3_0 ps_2_x fp40 arbfp1"); ret->setParameter("entry_point", "main_fp"); return ret; @@ -917,7 +915,7 @@ namespace Ogre outStream << - "float4 main_fp(\n" + "void main_fp(\n" "float4 position : TEXCOORD0,\n"; uint texCoordSet = 1; @@ -1034,8 +1032,15 @@ namespace Ogre __FUNCTION__); } + if (Settings::Manager::getBool("multiple render targets", "Render")) outStream << + " , out float4 oColor : COLOR \n" + " , out float4 oColor1 : COLOR1 \n" + " , uniform float far \n"; + else outStream << + " , out float4 oColor : COLOR \n"; + outStream << - ") : COLOR\n" + ")\n" "{\n" " float4 outputCol;\n" " float shadow = 1.0;\n" @@ -1241,6 +1246,10 @@ namespace Ogre " oPos = mul(viewProjMatrix, worldPos);\n" " oUVMisc.xy = uv.xy;\n"; + outStream << + " // pass cam depth\n" + " oUVMisc.z = oPos.z;\n"; + bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; if (fog) { @@ -1337,7 +1346,12 @@ namespace Ogre } // Final return - outStream << " return outputCol;\n" + outStream << " oColor = outputCol;\n"; + + if (Settings::Manager::getBool("multiple render targets", "Render")) outStream << + " oColor1 = float4(uvMisc.z / far, 0, 0, 1); \n"; + + outStream << "}\n"; } @@ -1511,14 +1525,6 @@ namespace Ogre } } - - if (prof->getReceiveDynamicShadowsPSSM()) - { - outStream << - " // pass cam depth\n" - " oUVMisc.z = oPos.z;\n"; - } - } //--------------------------------------------------------------------- void TerrainMaterialGeneratorB::SM2Profile::ShaderHelperCg::generateFpDynamicShadowsParams( From 5dd65c11ee85f43cca92caea85fa22fb8b82c07b Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 21:04:52 +0200 Subject: [PATCH 365/488] forgot to save the file --- apps/openmw/main.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 0a2d356996..bc6159e2aa 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -123,14 +123,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat ("plugin", bpo::value()->default_value(StringsVector(), "") ->multitoken(), "plugin file(s)") -<<<<<<< HEAD - ("fps", bpo::value()->implicit_value(1) - ->default_value(0), "fps counter detail (0 = off, 1 = fps counter, 2 = full detail)") - ("anim-verbose", bpo::value()->implicit_value(true) -======= - ("anim-verbose", boost::program_options::value()->implicit_value(true) ->>>>>>> e403c7158acfb118bed01a08a46431b24cff8747 ->default_value(false), "output animation indices files") ("debug", bpo::value()->implicit_value(true) From cd2789b15abdcf65c934a64327ef53a43bc1f4b9 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Wed, 4 Apr 2012 21:05:19 +0200 Subject: [PATCH 366/488] Revert "Issue #225: Correction to commit ae98904." This reverts commit 0e5c90d3e783cd471197637ae281494de4dd0b08. --- apps/openmw/mwrender/terrain.cpp | 25 +++++++++++++------- components/esm/loadland.cpp | 40 +++++++++++++++++++++++--------- components/esm/loadland.hpp | 8 ++++++- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index f1920490d5..0b8f933a27 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -98,7 +98,10 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - land->loadData(); + if (!land->dataLoaded) + { + land->loadData(); + } } //split the cell terrain into four segments @@ -133,7 +136,7 @@ namespace MWRender const size_t xOffset = x * (mLandSize-1); memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], - &land->landData.heights[yOffset + xOffset], + &land->landData->heights[yOffset + xOffset], mLandSize*sizeof(float)); } } @@ -160,7 +163,7 @@ namespace MWRender numTextures, indexes); - if ( land && land->landData.usingColours ) + if ( land && land->landData->usingColours ) { // disable or enable global colour map (depends on available vertex colours) mActiveProfile->setGlobalColourMapEnabled(true); @@ -420,12 +423,18 @@ namespace MWRender ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); if ( land != NULL ) { - land->loadData(); + if (!land->dataLoaded) + { + land->loadData(); + } - return land->landData.textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + return land->landData + ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + } + else + { + return 0; } - - return 0; } //---------------------------------------------------------------------------------------------- @@ -464,7 +473,7 @@ namespace MWRender if ( land != NULL ) { - const char* const colours = land->landData.colours; + const char* const colours = land->landData->colours; for ( int y = 0; y < size; y++ ) { for ( int x = 0; x < size; x++ ) diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index c6dc3c6f20..96afdf8316 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -10,10 +10,16 @@ Land::Land() , mEsm(NULL) , hasData(false) , dataLoaded(false) + , landData(NULL) { - memset(&landData, 0, sizeof(landData)); } +Land::~Land() +{ + delete landData; +} + + void Land::load(ESMReader &esm) { mEsm = &esm; @@ -62,6 +68,7 @@ void Land::load(ESMReader &esm) hasData = (cnt == 3); dataLoaded = false; + landData = NULL; } void Land::loadData() @@ -71,6 +78,8 @@ void Land::loadData() return; } + landData = new LandData; + if (hasData) { mEsm->restoreContext(context); @@ -82,20 +91,19 @@ void Land::loadData() } VHGT rawHeights; - memset(&rawHeights, 0, sizeof(rawHeights)); mEsm->getHNExact(&rawHeights, sizeof(VHGT), "VHGT"); int currentHeightOffset = rawHeights.heightOffset; for (int y = 0; y < LAND_SIZE; y++) { currentHeightOffset += rawHeights.heightData[y * LAND_SIZE]; - landData.heights[y * LAND_SIZE] = currentHeightOffset * HEIGHT_SCALE; + landData->heights[y * LAND_SIZE] = currentHeightOffset * HEIGHT_SCALE; int tempOffset = currentHeightOffset; for (int x = 1; x < LAND_SIZE; x++) { tempOffset += rawHeights.heightData[y * LAND_SIZE + x]; - landData.heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; + landData->heights[x + y * LAND_SIZE] = tempOffset * HEIGHT_SCALE; } } @@ -105,10 +113,10 @@ void Land::loadData() } if (mEsm->isNextSub("VCLR")) { - landData.usingColours = true; - mEsm->getHExact(&landData.colours, 3*LAND_NUM_VERTS); + landData->usingColours = true; + mEsm->getHExact(&landData->colours, 3*LAND_NUM_VERTS); }else{ - landData.usingColours = false; + landData->usingColours = false; } //TODO fix magic numbers uint16_t vtex[512]; @@ -119,19 +127,29 @@ void Land::loadData() for ( int x1 = 0; x1 < 4; x1++ ) for ( int y2 = 0; y2 < 4; y2++) for ( int x2 = 0; x2 < 4; x2++ ) - landData.textures[(y1*4+y2)*16+(x1*4+x2)] = vtex[readPos++]; + landData->textures[(y1*4+y2)*16+(x1*4+x2)] = vtex[readPos++]; } else { - landData.usingColours = false; - memset(landData.textures, 0, sizeof(landData.textures)); + landData->usingColours = false; + memset(&landData->textures, 0, 512 * sizeof(uint16_t)); for (int i = 0; i < LAND_NUM_VERTS; i++) { - landData.heights[i] = -256.0f * HEIGHT_SCALE; + landData->heights[i] = -256.0f * HEIGHT_SCALE; } } dataLoaded = true; } +void Land::unloadData() +{ + if (dataLoaded) + { + delete landData; + landData = NULL; + dataLoaded = false; + } +} + } diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 86f37d5755..64baecd349 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -12,6 +12,7 @@ namespace ESM struct Land { Land(); + ~Land(); int flags; // Only first four bits seem to be used, don't know what // they mean. @@ -66,7 +67,7 @@ struct Land char colours[3 * LAND_NUM_VERTS]; }; - LandData landData; + LandData *landData; void load(ESMReader &esm); @@ -74,6 +75,11 @@ struct Land * Actually loads data */ void loadData(); + + /** + * Frees memory allocated for land data + */ + void unloadData(); }; } #endif From ea8e5cb6f876fa8bbee83ce0c40028c7957be66c Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Wed, 4 Apr 2012 21:39:21 +0200 Subject: [PATCH 367/488] Issue #225: Land struct is not copyable. Disabled copy constructor and assignment operator in Land structure. --- components/esm/loadland.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index 64baecd349..ebc314a280 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -80,6 +80,11 @@ struct Land * Frees memory allocated for land data */ void unloadData(); + + private: + Land(const Land& land); + Land& operator=(const Land& land); }; + } #endif From 2c7c945208789b2ea29a8755608fc212721f3462 Mon Sep 17 00:00:00 2001 From: gugus Date: Wed, 4 Apr 2012 22:13:57 +0200 Subject: [PATCH 368/488] check playerfaction during dialogue --- apps/openmw/mwdialogue/dialoguemanager.cpp | 31 ++++++++++++++++++++++ apps/openmw/mwdialogue/dialoguemanager.hpp | 3 +++ 2 files changed, 34 insertions(+) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index 1e6faf2924..cd7be50316 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -493,6 +493,21 @@ namespace MWDialogue } // TODO check player faction + if(!info.pcFaction.empty()) + { + MWMechanics::NpcStats stats = MWWorld::Class::get(actor).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); + std::map::iterator it = stats.mFactionRank.find(info.npcFaction); + if(it!=stats.mFactionRank.end()) + { + //check rank + if(it->second < info.data.rank) return false; + } + else + { + //not in the faction + return false; + } + } //check gender ESMS::LiveCellRef* npc = actor.get(); @@ -655,6 +670,7 @@ namespace MWDialogue void DialogueManager::executeScript(std::string script) { + std::cout << script; std::vector code; if(compile(script,code)) { @@ -796,4 +812,19 @@ namespace MWDialogue mChoiceMap[question] = choice; mIsInChoice = true; } + + std::string DialogueManager::getFaction() + { + std::string factionID(""); + MWMechanics::NpcStats stats = MWWorld::Class::get(mActor).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); + if(stats.mFactionRank.empty()) + { + std::cout << "No faction for this actor!"; + } + else + { + factionID = stats.mFactionRank.begin()->first; + } + return factionID; + } } diff --git a/apps/openmw/mwdialogue/dialoguemanager.hpp b/apps/openmw/mwdialogue/dialoguemanager.hpp index 260d8e3394..d0380fa717 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.hpp +++ b/apps/openmw/mwdialogue/dialoguemanager.hpp @@ -63,6 +63,9 @@ namespace MWDialogue void askQuestion(std::string question,int choice); + ///get the faction of the actor you are talking with + std::string getFaction(); + //calbacks for the GUI void keywordSelected(std::string keyword); void goodbyeSelected(); From aaa5368fe927b093b239862bb7d069c83099f140 Mon Sep 17 00:00:00 2001 From: gugus Date: Wed, 4 Apr 2012 22:14:38 +0200 Subject: [PATCH 369/488] added script instruction pcraiserank. Does not work yet. --- apps/openmw/mwscript/docs/vmformat.txt | 3 ++- apps/openmw/mwscript/statsextensions.cpp | 27 ++++++++++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 7ff60a2035..27b426d0e0 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -127,4 +127,5 @@ op 0x2000141: GetWaterLevel op 0x2000142: SetWaterLevel op 0x2000143: ModWaterLevel op 0x2000144: ToggleWater, twa -opcodes 0x2000145-0x3ffffff unused +op 0x2000145: PCRaiseRank +opcodes 0x2000146-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 85ac54348a..be31321e98 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -17,6 +17,8 @@ #include "interpretercontext.hpp" #include "ref.hpp" +#include "../mwdialogue/dialoguemanager.hpp" + namespace MWScript { namespace Stats @@ -303,12 +305,18 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime) { + std::cout << "try to rais rank..."; MWScript::InterpreterContext& context = static_cast (runtime.getContext()); - - std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); - runtime.pop(); - context.getEnvironment().mWorld->getPlayer().raiseRank(factionID); + + std::string factionID = context.getEnvironment().mDialogueManager->getFaction(); + if(factionID != "") + { + std::cout << "raiserank!!!!!"; + MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + } + std::cout << std::endl; } }; @@ -342,8 +350,8 @@ namespace MWScript const int opcodeSetSkillExplicit = 0x20000df; const int opcodeModSkill = 0x20000fa; const int opcodeModSkillExplicit = 0x2000115; - const int opcodePCJoinFaction = 0x2000141; - const int opcodePCRaiseRank = 0x2000142; + //const int opcodePCJoinFaction = 0x2000141; + const int opcodePCRaiseRank = 0x2000145; void registerExtensions (Compiler::Extensions& extensions) { @@ -415,8 +423,9 @@ namespace MWScript extensions.registerInstruction (mod + skills[i], "l", opcodeModSkill+i, opcodeModSkillExplicit+i); } - extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); - extensions.registerInstruction("PCRaiseRank","S",opcodePCRaiseRank); + //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); + std::cout << "rgister raiserank"; + extensions.registerInstruction("pcraiserank","",opcodePCRaiseRank); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -473,7 +482,7 @@ namespace MWScript interpreter.installSegment5 (opcodeModSkillExplicit+i, new OpModSkill (i)); } - interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); + //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment5(opcodePCRaiseRank,new OpPCRaiseRank); } } From 8c84f68dab58b36a4a8a7d51a634cc2192788798 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 23:51:22 +0200 Subject: [PATCH 370/488] fix for older boost versions; unsigned warning --- apps/openmw/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index bc6159e2aa..11efc2867e 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -71,8 +71,12 @@ void validate(boost::any &v, std::vector const &tokens, FallbackMap for(std::vector::const_iterator it=tokens.begin(); it != tokens.end(); it++) { int sep = it->find(","); - if(sep < 1 || sep == (it->length()-1)) + if(sep < 1 || sep == (int)it->length()-1) +#if (BOOST_VERSION <= 104200) + throw boost::program_options::validation_error("invalid value"); +#else throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value); +#endif /* #if (BOOST_VERSION <= 104200) */ std::string key(it->substr(0,sep)); std::string value(it->substr(sep+1)); From 56c9992b29f63a01c887a42a38d2174d4922d6bf Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 4 Apr 2012 23:52:42 +0200 Subject: [PATCH 371/488] typo --- apps/openmw/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 11efc2867e..11516d43c9 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -72,11 +72,11 @@ void validate(boost::any &v, std::vector const &tokens, FallbackMap { int sep = it->find(","); if(sep < 1 || sep == (int)it->length()-1) -#if (BOOST_VERSION <= 104200) +#if (BOOST_VERSION < 104200) throw boost::program_options::validation_error("invalid value"); #else throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value); -#endif /* #if (BOOST_VERSION <= 104200) */ +#endif/ std::string key(it->substr(0,sep)); std::string value(it->substr(sep+1)); From f7bfea586198dc97df92bd2b96e4c1c50ed7710d Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Thu, 5 Apr 2012 00:16:44 +0200 Subject: [PATCH 372/488] typo 2 -.- --- apps/openmw/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 11516d43c9..df52faab14 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -76,7 +76,7 @@ void validate(boost::any &v, std::vector const &tokens, FallbackMap throw boost::program_options::validation_error("invalid value"); #else throw boost::program_options::validation_error(boost::program_options::validation_error::invalid_option_value); -#endif/ +#endif std::string key(it->substr(0,sep)); std::string value(it->substr(sep+1)); From 3f05aba76dc3d6a6c8747ee453c328cf833b7376 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 01:21:36 +0200 Subject: [PATCH 373/488] got MRT working, some minor quirks to solve (black viewport background) --- apps/openmw/engine.cpp | 1 + apps/openmw/mwrender/occlusionquery.cpp | 9 +-- apps/openmw/mwrender/renderconst.hpp | 2 + apps/openmw/mwrender/renderingmanager.cpp | 19 ++++++ apps/openmw/mwrender/water.cpp | 15 +++++ files/CMakeLists.txt | 4 ++ files/gbuffer/gbuffer.compositor | 81 +++++++++++++++++++++++ files/gbuffer/gbuffer.material | 63 ++++++++++++++++++ files/water/GlassFP.cg | 6 +- files/water/water.cg | 12 ++-- files/water/water.material | 8 ++- 11 files changed, 206 insertions(+), 14 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index cfcf9f76b9..a6b712abfe 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -357,6 +357,7 @@ void OMW::Engine::go() addResourcesDirectory(mResDir / "mygui"); addResourcesDirectory(mResDir / "water"); + addResourcesDirectory(mResDir / "gbuffer"); // Create the window mOgre->createWindow("OpenMW"); diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index ff1ce82e7c..5be7202b34 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -40,9 +40,6 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod return; } - // This means that everything up to RQG_Main can occlude the objects that are tested - const int queue = RQG_Main+1; - MaterialPtr matBase = MaterialManager::getSingleton().getByName("BaseWhiteNoLighting"); MaterialPtr matQueryArea = matBase->clone("QueryTotalPixels"); matQueryArea->setDepthWriteEnabled(false); @@ -65,14 +62,14 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); mBBQueryTotal->setMaterialName("QueryTotalPixels"); - mBBQueryTotal->setRenderQueueGroup(queue+1); + mBBQueryTotal->setRenderQueueGroup(RQG_OcclusionQuery+1); mBBNodeReal->attachObject(mBBQueryTotal); mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); mBBQueryVisible->setDefaultDimensions(150, 150); mBBQueryVisible->createBillboard(Vector3::ZERO); mBBQueryVisible->setMaterialName("QueryVisiblePixels"); - mBBQueryVisible->setRenderQueueGroup(queue+1); + mBBQueryVisible->setRenderQueueGroup(RQG_OcclusionQuery+1); mBBNodeReal->attachObject(mBBQueryVisible); mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); @@ -80,7 +77,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBQuerySingleObject->setDefaultDimensions(0.003, 0.003); mBBQuerySingleObject->createBillboard(Vector3::ZERO); mBBQuerySingleObject->setMaterialName("QueryVisiblePixels"); - mBBQuerySingleObject->setRenderQueueGroup(queue); + mBBQuerySingleObject->setRenderQueueGroup(RQG_OcclusionQuery); mObjectNode->attachObject(mBBQuerySingleObject); mRendering->getScene()->addRenderObjectListener(this); diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 6eba8d92e4..113024ace8 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -14,6 +14,8 @@ enum RenderQueueGroups RQG_Main = Ogre::RENDER_QUEUE_MAIN, + RQG_OcclusionQuery = Ogre::RENDER_QUEUE_MAIN+1, + RQG_Alpha = Ogre::RENDER_QUEUE_7, // Sky late (sun & sun flare) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 98344297fa..7797d18529 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -37,6 +37,14 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const // Load resources ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); + if (Settings::Manager::getBool("multiple render targets", "Render")) + { + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbuffer"); + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbufferFinalizer"); + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); + } + // Turn the entire scene (represented by the 'root' node) -90 // degrees around the x axis. This makes Z go upwards, and Y go into // the screen (when x is to the right.) This is the orientation that @@ -252,11 +260,22 @@ bool RenderingManager::toggleRenderMode(int mode) { if (mRendering.getCamera()->getPolygonMode() == PM_SOLID) { + // disable compositors + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", false); + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", false); + mRendering.getCamera()->setPolygonMode(PM_WIREFRAME); return true; } else { + // re-enable compositors + if (Settings::Manager::getBool("multiple render targets", "Render")) + { + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); + } + mRendering.getCamera()->setPolygonMode(PM_SOLID); return false; } diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 1983616d60..b3db66189b 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -181,6 +181,21 @@ Ogre::MaterialPtr Water::createMaterial() if (mReflectionTarget == 0) mat->removeTechnique(0); + if (Settings::Manager::getBool("multiple render targets", "Render")) + { + CompositorInstance* compositor = CompositorManager::getSingleton().getCompositorChain(mViewport)->getCompositor("gbuffer"); + + TexturePtr colorTexture = compositor->getTextureInstance("mrt_output", 0); + TextureUnitState* tus = mat->getTechnique(0)->getPass(0)->getTextureUnitState("refractionMap"); + if (tus != 0) + tus->setTexture(colorTexture); + + TexturePtr depthTexture = compositor->getTextureInstance("mrt_output", 1); + tus = mat->getTechnique(0)->getPass(0)->getTextureUnitState("depthMap"); + if (tus != 0) + tus->setTexture(depthTexture); + } + return mat; } diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 56c3db8627..377e2d1f8e 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -8,3 +8,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINA configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/WaterNormal2.tga "${OpenMW_BINARY_DIR}/resources/water/WaterNormal2.tga" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.cg "${OpenMW_BINARY_DIR}/resources/water/water.cg" COPYONLY) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.cg "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.material "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.compositor "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.compositor" COPYONLY) diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index e69de29bb2..d51d3700c8 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -0,0 +1,81 @@ +// Compositor that just controls output to the MRT textures +compositor gbuffer +{ + technique + { + // MRT output. Currently this is a color texture plus a depth texture + texture mrt_output target_width target_height PF_FLOAT16_RGBA PF_FLOAT16_RGBA chain_scope depth_pool 2 + + target mrt_output + { + input none + pass clear + { + } + pass render_scene + { + first_render_queue 0 + last_render_queue 69 + } + + } + + target_output + { + input none + + pass render_quad + { + material RenderScene + input 0 mrt_output 0 + } + } + } +} + +// Finalizer compositor to render objects that we don't want in the MRT textures (this is the case for most transparent stuff) +compositor gbufferFinalizer +{ + technique + { + texture no_mrt_output target_width target_height PF_R8G8B8A8 depth_pool 2 no_fsaa + texture previousscene target_width target_height PF_R8G8B8A8 + + target previousscene + { + input previous + } + target no_mrt_output + { + input none + shadows off + pass clear + { + buffers colour + colour_value 0 0 0 0 + } + pass render_quad + { + material RenderSceneNoDepth + input 0 previousscene + } + pass render_scene + { + first_render_queue 70 + last_render_queue 100 + } + } + target_output + { + input none + pass clear + { + } + pass render_quad + { + material RenderSceneNoDepth + input 0 no_mrt_output + } + } + } +} diff --git a/files/gbuffer/gbuffer.material b/files/gbuffer/gbuffer.material index e69de29bb2..faa8dd4980 100644 --- a/files/gbuffer/gbuffer.material +++ b/files/gbuffer/gbuffer.material @@ -0,0 +1,63 @@ +vertex_program RenderGBuffer_vs cg +{ + source gbuffer.cg + profiles vs_4_0 vs_1_1 arbvp1 + entry_point RenderScene_vs + default_params + { + param_named_auto wvp worldviewproj_matrix + } +} +fragment_program RenderGBuffer_ps cg +{ + source gbuffer.cg + entry_point RenderScene_ps + profiles ps_4_0 ps_2_x arbfp1 + default_params + { + } +} +material RenderScene +{ + technique + { + pass + { + vertex_program_ref RenderGBuffer_vs + { + } + + fragment_program_ref RenderGBuffer_ps + { + } + + texture_unit tex1 + { + //scenebuffer + } + } + } +} + +material RenderSceneNoDepth +{ + technique + { + pass + { + depth_write off + vertex_program_ref RenderGBuffer_vs + { + } + + fragment_program_ref RenderGBuffer_ps + { + } + + texture_unit tex1 + { + //scenebuffer + } + } + } +} diff --git a/files/water/GlassFP.cg b/files/water/GlassFP.cg index c294f6fff5..0ce343b0aa 100644 --- a/files/water/GlassFP.cg +++ b/files/water/GlassFP.cg @@ -1,9 +1,9 @@ -sampler RT : register(s0); -sampler NormalMap : register(s1); -sampler CausticMap : register(s2); float4 main_ps(float2 iTexCoord : TEXCOORD0, float3 noiseCoord : TEXCOORD1, + uniform sampler2D RT : register(s0), + uniform sampler2D NormalMap : register(s1), + uniform sampler2D CausticMap : register(s2), uniform float4 tintColour) : COLOR { float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; diff --git a/files/water/water.cg b/files/water/water.cg index 70d3339b19..88515c3e8c 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -34,7 +34,8 @@ void main_fp , uniform float renderTargetFlipping , uniform sampler2D reflectionMap : register(s0) - , uniform sampler2D normalMap : register(s1) + , uniform sampler2D refractionMap : register(s1) + , uniform sampler2D normalMap : register(s2) , uniform float time , uniform float4 fogParams , uniform float4 fogColour @@ -42,7 +43,7 @@ void main_fp { float2 screenCoords = iScreenCoords.xy / iScreenCoords.z; - screenCoords.y = (renderTargetFlipping == -1) ? (1-screenCoords.y) : screenCoords.y; + screenCoords.y = (1-saturate(renderTargetFlipping))+renderTargetFlipping*screenCoords.y; float2 uv1 = iUv + time * float2(0.5, 0); float2 uv2 = iUv + time * float2(0, 0.5); @@ -55,8 +56,11 @@ void main_fp screenCoords += normal.yx * 0.05; float4 reflection = tex2D(reflectionMap, screenCoords); + float4 refraction = tex2D(refractionMap, screenCoords); + + oColor.xyz = lerp(reflection.xyz, refraction.xyz, 1); float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); - oColor.xyz = lerp(reflection.xyz, fogColour, fogValue); - oColor.a = 0.45; + oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); + oColor.a = 1; } diff --git a/files/water/water.material b/files/water/water.material index bca5a9281d..c964e9ae42 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -48,13 +48,13 @@ material Water vertex_program_ref Water_VP { - param_named_auto renderTargetFlipping render_target_flipping } fragment_program_ref Water_FP { param_named_auto time time 0.1 param_named_auto fogColour fog_colour param_named_auto fogParams fog_params + param_named_auto renderTargetFlipping render_target_flipping } texture_unit reflectionMap @@ -62,6 +62,12 @@ material Water texture WaterReflection tex_address_mode clamp } + + texture_unit refractionMap + { + tex_address_mode clamp + } + texture_unit normalMap { texture WaterNormal2.tga From ab8b74dcac00af9684cdc0d8d1d2b0fcee184dd4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 08:58:21 +0200 Subject: [PATCH 374/488] forgot adding a file --- apps/openmw/mwrender/water.cpp | 2 +- files/gbuffer/gbuffer.cg | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 files/gbuffer/gbuffer.cg diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index b3db66189b..1caced9f53 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -183,7 +183,7 @@ Ogre::MaterialPtr Water::createMaterial() if (Settings::Manager::getBool("multiple render targets", "Render")) { - CompositorInstance* compositor = CompositorManager::getSingleton().getCompositorChain(mViewport)->getCompositor("gbuffer"); + CompositorInstance* compositor = CompositorManager::getSingleton().getCompositorChain(mViewport)->getCompositor("gbuffer"); TexturePtr colorTexture = compositor->getTextureInstance("mrt_output", 0); TextureUnitState* tus = mat->getTechnique(0)->getPass(0)->getTextureUnitState("refractionMap"); diff --git a/files/gbuffer/gbuffer.cg b/files/gbuffer/gbuffer.cg new file mode 100644 index 0000000000..c7f2fe6788 --- /dev/null +++ b/files/gbuffer/gbuffer.cg @@ -0,0 +1,18 @@ +void RenderScene_vs(in float4 position : POSITION + ,in float2 uv :TEXCOORD0 + ,uniform float4x4 wvp + ,out float4 oPosition : POSITION + ,out float2 oUV :TEXCOORD0) +{ + oPosition = mul(wvp, position); + oUV = uv; +} + +void RenderScene_ps(in float4 position : POSITION + ,in float2 uv :TEXCOORD0 + ,uniform sampler2D tex1 : TEXUNIT0 + ,out float4 oColor : COLOR) +{ + float4 scene =tex2D(tex1, uv); + oColor= scene; +} From 36fd9b9f263c7c4f4fc9df759253b96785121cdf Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 10:39:22 +0200 Subject: [PATCH 375/488] shore transition test --- files/water/water.cg | 17 ++++++++++++----- files/water/water.material | 6 ++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/files/water/water.cg b/files/water/water.cg index 88515c3e8c..c8156d9cec 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -35,8 +35,10 @@ void main_fp , uniform sampler2D reflectionMap : register(s0) , uniform sampler2D refractionMap : register(s1) - , uniform sampler2D normalMap : register(s2) + , uniform sampler2D depthMap : register(s2) + , uniform sampler2D normalMap : register(s3) , uniform float time + , uniform float far , uniform float4 fogParams , uniform float4 fogColour ) @@ -45,6 +47,9 @@ void main_fp float2 screenCoords = iScreenCoords.xy / iScreenCoords.z; screenCoords.y = (1-saturate(renderTargetFlipping))+renderTargetFlipping*screenCoords.y; + float depth1 = tex2D(depthMap, screenCoords).r * far - iDepth; + depth1 = saturate(depth1 / 500.f); + float2 uv1 = iUv + time * float2(0.5, 0); float2 uv2 = iUv + time * float2(0, 0.5); float2 uv3 = iUv + time * float2(-0.5, 0); @@ -53,12 +58,14 @@ void main_fp float4 normal = tex2D(normalMap, uv1) + tex2D(normalMap, uv2) + tex2D(normalMap, uv3) + tex2D(normalMap, uv4); normal = normal / 4.f; normal = 2*normal - 1; - screenCoords += normal.yx * 0.05; - float4 reflection = tex2D(reflectionMap, screenCoords); - float4 refraction = tex2D(refractionMap, screenCoords); + float2 screenCoords_reflect = screenCoords + normal.yx * 0.05; + float2 screenCoords_refract = screenCoords + normal.yx * 0.1 * depth1; - oColor.xyz = lerp(reflection.xyz, refraction.xyz, 1); + float4 reflection = tex2D(reflectionMap, screenCoords_reflect); + float4 refraction = tex2D(refractionMap, screenCoords_refract); + + oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1); float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); diff --git a/files/water/water.material b/files/water/water.material index c964e9ae42..dd01af4051 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -55,6 +55,7 @@ material Water param_named_auto fogColour fog_colour param_named_auto fogParams fog_params param_named_auto renderTargetFlipping render_target_flipping + param_named_auto far far_clip_distance } texture_unit reflectionMap @@ -68,6 +69,11 @@ material Water tex_address_mode clamp } + texture_unit depthMap + { + tex_address_mode clamp + } + texture_unit normalMap { texture WaterNormal2.tga From 8ddc8131a5480d0b134bb90d5cd0c9283957937d Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 11:18:58 +0200 Subject: [PATCH 376/488] fresnel test --- files/gbuffer/gbuffer.compositor | 1 + files/water/water.cg | 13 ++++++++++++- files/water/water.material | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index d51d3700c8..a81ad18c3f 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -11,6 +11,7 @@ compositor gbuffer input none pass clear { + colour_value 0 0 0 1 } pass render_scene { diff --git a/files/water/water.cg b/files/water/water.cg index c8156d9cec..bd18286bc0 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -7,8 +7,10 @@ void main_vp , out float3 oScreenCoords : TEXCOORD0 , out float2 oUv : TEXCOORD1 , out float oDepth : TEXCOORD2 + , out float4 oEyeVector : TEXCOORD3 , uniform float4x4 wvpMat + , uniform float4 camPosObjSpace ) { oPos = mul(wvpMat, iPos); @@ -22,6 +24,8 @@ void main_vp 0, 0, 0, 1 ); float4 texcoordProj = mul(scalemat, oPos); oScreenCoords = float3(texcoordProj.x, texcoordProj.y, texcoordProj.w); + + oEyeVector = camPosObjSpace - iPos; } void main_fp @@ -31,6 +35,7 @@ void main_fp , in float3 iScreenCoords : TEXCOORD0 , in float2 iUv : TEXCOORD1 , in float iDepth : TEXCOORD2 + , in float4 iEyeVector : TEXCOORD3 , uniform float renderTargetFlipping , uniform sampler2D reflectionMap : register(s0) @@ -47,17 +52,19 @@ void main_fp float2 screenCoords = iScreenCoords.xy / iScreenCoords.z; screenCoords.y = (1-saturate(renderTargetFlipping))+renderTargetFlipping*screenCoords.y; + // Sample screen-space depth map and subtract pixel depth to get the real water depth float depth1 = tex2D(depthMap, screenCoords).r * far - iDepth; depth1 = saturate(depth1 / 500.f); + // Simple wave effect. to be replaced by something better float2 uv1 = iUv + time * float2(0.5, 0); float2 uv2 = iUv + time * float2(0, 0.5); float2 uv3 = iUv + time * float2(-0.5, 0); float2 uv4 = iUv + time * float2(0, -0.5); - float4 normal = tex2D(normalMap, uv1) + tex2D(normalMap, uv2) + tex2D(normalMap, uv3) + tex2D(normalMap, uv4); normal = normal / 4.f; normal = 2*normal - 1; + //normal = normalize(normal); float2 screenCoords_reflect = screenCoords + normal.yx * 0.05; float2 screenCoords_refract = screenCoords + normal.yx * 0.1 * depth1; @@ -65,6 +72,10 @@ void main_fp float4 reflection = tex2D(reflectionMap, screenCoords_reflect); float4 refraction = tex2D(refractionMap, screenCoords_refract); + // fresnel + //float facing = 1.0 - max(abs(dot(iEyeVector.xyz, normal.xyz)), 0); + //float reflectionFactor = saturate(0.3 + 0.7 * pow(facing, 2)); + oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1); float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); diff --git a/files/water/water.material b/files/water/water.material index dd01af4051..ffd813e16c 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -48,6 +48,7 @@ material Water vertex_program_ref Water_VP { + //param_named_auto camPosObjSpace camera_position_object_space } fragment_program_ref Water_FP { From 5664d879a5c0b37c1228849854188cc834c81105 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 11:40:56 +0200 Subject: [PATCH 377/488] fixed some sky objects --- apps/openmw/mwrender/sky.cpp | 82 ++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 7ccbaf8e23..3f815d9fcc 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -109,6 +109,59 @@ void BillboardObject::init(const String& textureName, p->createTextureUnitState(textureName); mBBSet->setMaterialName("BillboardMaterial"+StringConverter::toString(bodyCount)); + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + HighLevelGpuProgramPtr vshader; + if (mgr.resourceExists("BBO_VP")) + vshader = mgr.getByName("BBO_VP"); + else + vshader = mgr.createProgram("BBO_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_VERTEX_PROGRAM); + vshader->setParameter("profiles", "vs_2_x arbvp1"); + vshader->setParameter("entry_point", "main_vp"); + StringUtil::StrStreamType outStream; + outStream << + "void main_vp( \n" + " float4 position : POSITION, \n" + " in float2 uv : TEXCOORD0, \n" + " out float2 oUV : TEXCOORD0, \n" + " out float4 oPosition : POSITION, \n" + " uniform float4x4 worldViewProj \n" + ") \n" + "{ \n" + " oUV = uv; \n" + " oPosition = mul( worldViewProj, position ); \n" + "}"; + vshader->setSource(outStream.str()); + vshader->load(); + vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); + mMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName()); + + HighLevelGpuProgramPtr fshader; + if (mgr.resourceExists("BBO_FP")) + fshader = mgr.getByName("BBO_FP"); + else + fshader = mgr.createProgram("BBO_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_FRAGMENT_PROGRAM); + + fshader->setParameter("profiles", "ps_2_x arbfp1"); + fshader->setParameter("entry_point", "main_fp"); + StringUtil::StrStreamType outStream2; + outStream2 << + "void main_fp( \n" + " in float2 uv : TEXCOORD0, \n" + " out float4 oColor : COLOR, \n" + " uniform sampler2D texture : TEXUNIT0, \n" + " uniform float4 diffuse, \n" + " uniform float4 emissive \n" + ") \n" + "{ \n" + " float4 tex = tex2D(texture, uv); \n" + " oColor = float4(emissive.xyz,1) * tex * float4(1,1,1,diffuse.a); \n" + "}"; + fshader->setSource(outStream2.str()); + fshader->load(); + fshader->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR); + fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); + mMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName()); + bodyCount++; } @@ -469,21 +522,42 @@ void SkyManager::create() " float4 position : POSITION, \n" " in float4 color : COLOR, \n" " out float4 oPosition : POSITION, \n" - " out float4 oColor : COLOR, \n" + " out float4 oVertexColor : TEXCOORD0, \n" " uniform float4 emissive, \n" " uniform float4x4 worldViewProj \n" ") \n" "{ \n" " oPosition = mul( worldViewProj, position ); \n" - " oColor = color * emissive; \n" + " oVertexColor = color; \n" "}"; vshader->setSource(outStream.str()); vshader->load(); vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - vshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); mAtmosphereMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName()); - mAtmosphereMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(""); + + HighLevelGpuProgramPtr fshader = mgr.createProgram("Atmosphere_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_FRAGMENT_PROGRAM); + + fshader->setParameter("profiles", "ps_2_x arbfp1"); + fshader->setParameter("entry_point", "main_fp"); + + StringUtil::StrStreamType _outStream; + _outStream << + "void main_fp( \n" + " in float4 iVertexColor : TEXCOORD0, \n" + " out float4 oColor : COLOR, \n" + " uniform float4 emissive, \n" + " uniform float4x4 worldViewProj \n" + ") \n" + "{ \n" + " oColor = iVertexColor * emissive; \n" + "}"; + fshader->setSource(_outStream.str()); + fshader->load(); + + fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); + mAtmosphereMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName()); // Clouds NifOgre::NIFLoader::load("meshes\\sky_clouds_01.nif"); From f6342cfd60ae508bd54b247a3f1ef7c5db1f8f35 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 11:52:06 +0200 Subject: [PATCH 378/488] fixed viewport background color, fixed indentation of some old functions --- apps/openmw/mwrender/renderingmanager.cpp | 76 ++++++++++++----------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 7797d18529..ce4dea74dd 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -284,23 +284,27 @@ bool RenderingManager::toggleRenderMode(int mode) void RenderingManager::configureFog(ESMS::CellStore &mCell) { - Ogre::ColourValue color; - color.setAsABGR (mCell.cell->ambi.fog); + Ogre::ColourValue color; + color.setAsABGR (mCell.cell->ambi.fog); - configureFog(mCell.cell->ambi.fogDensity, color); + configureFog(mCell.cell->ambi.fogDensity, color); } void RenderingManager::configureFog(const float density, const Ogre::ColourValue& colour) { - float max = Settings::Manager::getFloat("max viewing distance", "Viewing distance"); + float max = Settings::Manager::getFloat("max viewing distance", "Viewing distance"); - float low = max / (density) * Settings::Manager::getFloat("fog start factor", "Viewing distance"); - float high = max / (density) * Settings::Manager::getFloat("fog end factor", "Viewing distance"); + float low = max / (density) * Settings::Manager::getFloat("fog start factor", "Viewing distance"); + float high = max / (density) * Settings::Manager::getFloat("fog end factor", "Viewing distance"); - mRendering.getScene()->setFog (FOG_LINEAR, colour, 0, low, high); + mRendering.getScene()->setFog (FOG_LINEAR, colour, 0, low, high); - mRendering.getCamera()->setFarClipDistance ( max / density ); - mRendering.getViewport()->setBackgroundColour (colour); + mRendering.getCamera()->setFarClipDistance ( max / density ); + mRendering.getViewport()->setBackgroundColour (colour); + + CompositorInstance* inst = CompositorManager::getSingleton().getCompositorChain(mRendering.getViewport())->getCompositor("gbuffer"); + if (inst != 0) + inst->getCompositor()->getTechnique(0)->getTargetPass(0)->getPass(0)->setClearColour(colour); } @@ -327,41 +331,43 @@ void RenderingManager::setAmbientMode() void RenderingManager::configureAmbient(ESMS::CellStore &mCell) { - mAmbientColor.setAsABGR (mCell.cell->ambi.ambient); - setAmbientMode(); + mAmbientColor.setAsABGR (mCell.cell->ambi.ambient); + setAmbientMode(); - // Create a "sun" that shines light downwards. It doesn't look - // completely right, but leave it for now. - if(!mSun) - { - mSun = mRendering.getScene()->createLight(); - } - Ogre::ColourValue colour; - colour.setAsABGR (mCell.cell->ambi.sunlight); - mSun->setDiffuseColour (colour); - mSun->setType(Ogre::Light::LT_DIRECTIONAL); - mSun->setDirection(0,-1,0); + // Create a "sun" that shines light downwards. It doesn't look + // completely right, but leave it for now. + if(!mSun) + { + mSun = mRendering.getScene()->createLight(); + } + Ogre::ColourValue colour; + colour.setAsABGR (mCell.cell->ambi.sunlight); + mSun->setDiffuseColour (colour); + mSun->setType(Ogre::Light::LT_DIRECTIONAL); + mSun->setDirection(0,-1,0); } // Switch through lighting modes. void RenderingManager::toggleLight() { - if (mAmbientMode==2) - mAmbientMode = 0; - else - ++mAmbientMode; + if (mAmbientMode==2) + mAmbientMode = 0; + else + ++mAmbientMode; - switch (mAmbientMode) - { - case 0: std::cout << "Setting lights to normal\n"; break; - case 1: std::cout << "Turning the lights up\n"; break; - case 2: std::cout << "Turning the lights to full\n"; break; - } + switch (mAmbientMode) + { + case 0: std::cout << "Setting lights to normal\n"; break; + case 1: std::cout << "Turning the lights up\n"; break; + case 2: std::cout << "Turning the lights to full\n"; break; + } - setAmbientMode(); + setAmbientMode(); } -void RenderingManager::checkUnderwater(){ - if(mWater){ +void RenderingManager::checkUnderwater() +{ + if(mWater) + { mWater->checkUnderwater( mRendering.getCamera()->getRealPosition().y ); } } From add4ebe4458fa57e8584bc3db1901a12bb1b2c0c Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 12:59:56 +0200 Subject: [PATCH 379/488] fresnel effect --- files/gbuffer/gbuffer.compositor | 1 + files/water/water.cg | 12 +++++++----- files/water/water.material | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index a81ad18c3f..fb12b8bf46 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -11,6 +11,7 @@ compositor gbuffer input none pass clear { + // make sure to set this to the viewport background color from outside colour_value 0 0 0 1 } pass render_scene diff --git a/files/water/water.cg b/files/water/water.cg index bd18286bc0..10b42eec04 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -64,7 +64,6 @@ void main_fp float4 normal = tex2D(normalMap, uv1) + tex2D(normalMap, uv2) + tex2D(normalMap, uv3) + tex2D(normalMap, uv4); normal = normal / 4.f; normal = 2*normal - 1; - //normal = normalize(normal); float2 screenCoords_reflect = screenCoords + normal.yx * 0.05; float2 screenCoords_refract = screenCoords + normal.yx * 0.1 * depth1; @@ -72,11 +71,14 @@ void main_fp float4 reflection = tex2D(reflectionMap, screenCoords_reflect); float4 refraction = tex2D(refractionMap, screenCoords_refract); - // fresnel - //float facing = 1.0 - max(abs(dot(iEyeVector.xyz, normal.xyz)), 0); - //float reflectionFactor = saturate(0.3 + 0.7 * pow(facing, 2)); + // tangent to object space + normal.xyz = normal.xzy; - oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1); + // fresnel + float facing = 1.0 - max(abs(dot(normalize(iEyeVector.xyz), normal.xyz)), 0); + float reflectionFactor = saturate(0.3 + 0.7 * pow(facing, 2)); + + oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1 * reflectionFactor); float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); diff --git a/files/water/water.material b/files/water/water.material index ffd813e16c..95a0aef788 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -48,7 +48,7 @@ material Water vertex_program_ref Water_VP { - //param_named_auto camPosObjSpace camera_position_object_space + param_named_auto camPosObjSpace camera_position_object_space } fragment_program_ref Water_FP { From f2c4e513a426f1215ed0df37a60e3b41e787788c Mon Sep 17 00:00:00 2001 From: k1ll Date: Thu, 5 Apr 2012 13:01:09 +0200 Subject: [PATCH 380/488] Add support for building with a static build of the MyGui Libraries. --- CMakeLists.txt | 1 + cmake/FindMyGUI.cmake | 45 +++++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0f67e4bf5..71f36fe3de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VE configure_file ("${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp") +option(MYGUI_STATIC "Link static build of Mygui into the binaries" FALSE) option(OGRE_STATIC "Link static build of Ogre and Ogre Plugins into the binaries" FALSE) # Sound source selection diff --git a/cmake/FindMyGUI.cmake b/cmake/FindMyGUI.cmake index cc97992084..6731d584c0 100644 --- a/cmake/FindMyGUI.cmake +++ b/cmake/FindMyGUI.cmake @@ -82,20 +82,37 @@ findpkg_finish ( "MYGUI" ) ELSE (WIN32) #Unix CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR) FIND_PACKAGE(PkgConfig) - PKG_SEARCH_MODULE(MYGUI MYGUI MyGUI) - IF (MYGUI_INCLUDE_DIRS) - SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS}) - SET(MYGUI_LIB_DIR ${MYGUI_LIBDIR}) - SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "") - SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") - ELSE (MYGUI_INCLUDE_DIRS) - FIND_PATH(MYGUI_INCLUDE_DIRS MyGUI.h PATHS /usr/local/include /usr/include PATH_SUFFIXES MyGUI MYGUI) - FIND_LIBRARY(MYGUI_LIBRARIES mygui PATHS /usr/lib /usr/local/lib) - SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") - SET(MYGUI_LIB_DIR ${MYGUI_LIBRARIES}) - STRING(REGEX REPLACE "(.*)/.*" "\\1" MYGUI_LIB_DIR "${MYGUI_LIB_DIR}") - STRING(REGEX REPLACE ".*/" "" MYGUI_LIBRARIES "${MYGUI_LIBRARIES}") - ENDIF (MYGUI_INCLUDE_DIRS) + IF(MYGUI_STATIC) + PKG_SEARCH_MODULE(MYGUI MYGUIStatic MyGUIStatic) + IF (MYGUI_INCLUDE_DIRS) + SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS}) + SET(MYGUI_LIB_DIR ${MYGUI_LIBDIR}) + SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "") + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") + ELSE (MYGUI_INCLUDE_DIRS) + FIND_PATH(MYGUI_INCLUDE_DIRS MyGUI.h PATHS /usr/local/include /usr/include PATH_SUFFIXES MyGUI MYGUI) + FIND_LIBRARY(MYGUI_LIBRARIES myguistatic PATHS /usr/lib /usr/local/lib) + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") + SET(MYGUI_LIB_DIR ${MYGUI_LIBRARIES}) + STRING(REGEX REPLACE "(.*)/.*" "\\1" MYGUI_LIB_DIR "${MYGUI_LIB_DIR}") + STRING(REGEX REPLACE ".*/" "" MYGUI_LIBRARIES "${MYGUI_LIBRARIES}") + ENDIF (MYGUI_INCLUDE_DIRS) + ELSE(MYGUI_STATIC) + PKG_SEARCH_MODULE(MYGUI MYGUI MyGUI) + IF (MYGUI_INCLUDE_DIRS) + SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS}) + SET(MYGUI_LIB_DIR ${MYGUI_LIBDIR}) + SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "") + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") + ELSE (MYGUI_INCLUDE_DIRS) + FIND_PATH(MYGUI_INCLUDE_DIRS MyGUI.h PATHS /usr/local/include /usr/include PATH_SUFFIXES MyGUI MYGUI) + FIND_LIBRARY(MYGUI_LIBRARIES mygui PATHS /usr/lib /usr/local/lib) + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") + SET(MYGUI_LIB_DIR ${MYGUI_LIBRARIES}) + STRING(REGEX REPLACE "(.*)/.*" "\\1" MYGUI_LIB_DIR "${MYGUI_LIB_DIR}") + STRING(REGEX REPLACE ".*/" "" MYGUI_LIBRARIES "${MYGUI_LIBRARIES}") + ENDIF (MYGUI_INCLUDE_DIRS) + ENDIF(MYGUI_STATIC) ENDIF (WIN32) #Do some preparation From f49131e1b8a2c8a1976c643b77eb76f56b4bcb42 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 13:09:59 +0200 Subject: [PATCH 381/488] renamed setting, automatically disable MRT when unsupported --- apps/openmw/mwrender/renderingmanager.cpp | 6 ++++++ apps/openmw/mwrender/water.cpp | 2 +- files/settings-default.cfg | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index ce4dea74dd..97312b6974 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -37,6 +37,12 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const // Load resources ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); + // disable MRT if it is unsupported + const RenderSystemCapabilities* caps = Root::getSingleton().getRenderSystem()->getCapabilities(); + if (caps->getNumMultiRenderTargets() < 2 + || (!caps->isShaderProfileSupported("fp40") && !caps->isShaderProfileSupported("ps_3_0"))) + Settings::Manager::setBool("multiple render targets", "Render", false); + if (Settings::Manager::getBool("multiple render targets", "Render")) { CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbuffer"); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 1caced9f53..7e9dd957ba 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -52,7 +52,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : // Create rendertarget for reflection int rttsize = Settings::Manager::getInt("rtt size", "Water"); - if (Settings::Manager::getBool("reflection", "Water")) + if (Settings::Manager::getBool("shader", "Water") && Settings::Manager::getBool("multiple render targets", "Render")) { TexturePtr tex = TextureManager::getSingleton().createManual("WaterReflection", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 9be18f61be..7791f39ab1 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -44,7 +44,7 @@ num lights = 8 [Water] -reflection = false +shader = false rtt size = 256 From 43fd0352f44fe8a1d6044573af18c24b2aa51a80 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 14:21:57 +0200 Subject: [PATCH 382/488] removed unneeded lines --- apps/openmw/mwrender/sky.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 3f815d9fcc..89c1f3c095 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -523,7 +523,6 @@ void SkyManager::create() " in float4 color : COLOR, \n" " out float4 oPosition : POSITION, \n" " out float4 oVertexColor : TEXCOORD0, \n" - " uniform float4 emissive, \n" " uniform float4x4 worldViewProj \n" ") \n" "{ \n" @@ -548,7 +547,6 @@ void SkyManager::create() " in float4 iVertexColor : TEXCOORD0, \n" " out float4 oColor : COLOR, \n" " uniform float4 emissive, \n" - " uniform float4x4 worldViewProj \n" ") \n" "{ \n" " oColor = iVertexColor * emissive; \n" From e1bde415f5bf775c953cd6b551423c37420b634f Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 14:22:44 +0200 Subject: [PATCH 383/488] typo --- apps/openmw/mwrender/sky.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 89c1f3c095..02af314a85 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -546,7 +546,7 @@ void SkyManager::create() "void main_fp( \n" " in float4 iVertexColor : TEXCOORD0, \n" " out float4 oColor : COLOR, \n" - " uniform float4 emissive, \n" + " uniform float4 emissive \n" ") \n" "{ \n" " oColor = iVertexColor * emissive; \n" From 01500e979a09cb4d2012a20a207cab85e367fbc2 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 5 Apr 2012 14:27:39 +0200 Subject: [PATCH 384/488] another fix for optional arguments --- components/compiler/parser.cpp | 11 +++++++++++ components/compiler/stringparser.cpp | 5 ----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/components/compiler/parser.cpp b/components/compiler/parser.cpp index 73cadfeba1..90368eee01 100644 --- a/components/compiler/parser.cpp +++ b/components/compiler/parser.cpp @@ -7,6 +7,7 @@ #include "errorhandler.hpp" #include "exception.hpp" +#include "scanner.hpp" namespace Compiler { @@ -81,6 +82,8 @@ namespace Compiler { if (!(mOptional && mEmpty)) reportSeriousError ("Unexpected numeric value", loc); + else + scanner.putbackInt (value, loc); return false; } @@ -94,6 +97,8 @@ namespace Compiler { if (!(mOptional && mEmpty)) reportSeriousError ("Unexpected floating point value", loc); + else + scanner.putbackFloat (value, loc); return false; } @@ -108,6 +113,8 @@ namespace Compiler { if (!(mOptional && mEmpty)) reportSeriousError ("Unexpected name", loc); + else + scanner.putbackName (name, loc); return false; } @@ -121,6 +128,8 @@ namespace Compiler { if (!(mOptional && mEmpty)) reportSeriousError ("Unexpected keyword", loc); + else + scanner.putbackKeyword (keyword, loc); return false; } @@ -134,6 +143,8 @@ namespace Compiler { if (!(mOptional && mEmpty)) reportSeriousError ("Unexpected special token", loc); + else + scanner.putbackSpecial (code, loc); return false; } diff --git a/components/compiler/stringparser.cpp b/components/compiler/stringparser.cpp index fe7bd30b9e..396a88c786 100644 --- a/components/compiler/stringparser.cpp +++ b/components/compiler/stringparser.cpp @@ -39,11 +39,6 @@ namespace Compiler mState = CommaState; return true; } - else if (code==Scanner::S_newline && mState==StartState) - { - scanner.putbackSpecial (code, loc); - return false; - } return Parser::parseSpecial (code, loc, scanner); } From 84b475130a88e32398120c5eb86bcfed5d6c0ff1 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Thu, 5 Apr 2012 13:19:51 +0400 Subject: [PATCH 385/488] Add missing include --- apps/openmw/mwrender/occlusionquery.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 781b522b63..0c917cda19 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -6,6 +6,7 @@ #include #include #include +#include using namespace MWRender; using namespace Ogre; From 1b89a9e203f95427b3989ca3d5d4f30b5e064fd4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 15:30:55 +0200 Subject: [PATCH 386/488] various fixes --- apps/openmw/mwrender/renderingmanager.cpp | 9 +++--- apps/openmw/mwrender/sky.cpp | 10 +++++++ apps/openmw/mwrender/sky.hpp | 3 ++ apps/openmw/mwrender/water.cpp | 34 +++++++++++++++-------- apps/openmw/mwrender/water.hpp | 2 ++ files/water/water.cg | 2 +- 6 files changed, 43 insertions(+), 17 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 97312b6974..c2ad2a0432 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -27,6 +27,8 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mTerrainManager = new TerrainManager(mRendering.getScene(), environment); + mWater = 0; + //The fog type must be set before any terrain objects are created as if the //fog type is set to FOG_NONE then the initially created terrain won't have any fog configureFog(1, ColourValue(1,1,1)); @@ -39,8 +41,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const // disable MRT if it is unsupported const RenderSystemCapabilities* caps = Root::getSingleton().getRenderSystem()->getCapabilities(); - if (caps->getNumMultiRenderTargets() < 2 - || (!caps->isShaderProfileSupported("fp40") && !caps->isShaderProfileSupported("ps_3_0"))) + if (caps->getNumMultiRenderTargets() < 2) Settings::Manager::setBool("multiple render targets", "Render", false); if (Settings::Manager::getBool("multiple render targets", "Render")) @@ -73,8 +74,6 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mOcclusionQuery = new OcclusionQuery(&mRendering, mSkyManager->getSunNode()); - mWater = 0; - mPlayer = new MWRender::Player (mRendering.getCamera(), playerNode); mSun = 0; @@ -311,6 +310,8 @@ void RenderingManager::configureFog(const float density, const Ogre::ColourValue CompositorInstance* inst = CompositorManager::getSingleton().getCompositorChain(mRendering.getViewport())->getCompositor("gbuffer"); if (inst != 0) inst->getCompositor()->getTechnique(0)->getTargetPass(0)->getPass(0)->setClearColour(colour); + if (mWater) + mWater->setViewportBackground(colour); } diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 02af314a85..43ef31d861 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -913,3 +913,13 @@ Ogre::SceneNode* SkyManager::getSunNode() if (!mCreated) return 0; return mSun->getNode(); } + +void SkyManager::setSkyPosition(const Ogre::Vector3& position) +{ + mRootNode->_setDerivedPosition(position); +} + +void SkyManager::resetSkyPosition() +{ + mRootNode->setPosition(0,0,0); +} diff --git a/apps/openmw/mwrender/sky.hpp b/apps/openmw/mwrender/sky.hpp index baf5933cbc..c18b9f4843 100644 --- a/apps/openmw/mwrender/sky.hpp +++ b/apps/openmw/mwrender/sky.hpp @@ -168,6 +168,9 @@ namespace MWRender void setGlare(const float glare); Ogre::Vector3 getRealSunPos(); + void setSkyPosition(const Ogre::Vector3& position); + void resetSkyPosition(); + private: bool mCreated; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 7e9dd957ba..cce25d1e96 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -36,8 +36,8 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") + RV_StaticsSmall * Settings::Manager::getBool("reflect small statics", "Water") + RV_Actors * Settings::Manager::getBool("reflect actors", "Water") - + RV_Misc * Settings::Manager::getBool("reflect misc", "Water"); - //+ RV_Sky; + + RV_Misc * Settings::Manager::getBool("reflect misc", "Water") + + RV_Sky; mReflectDistance = Settings::Manager::getInt("reflect distance", "Water"); mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); @@ -145,11 +145,14 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) if (mReflectDistance != 0) mCamera->setFarClipDistance(mReflectDistance); - if (evt.source == mReflectionTarget) - { - mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); - mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); - } + if (evt.source == mReflectionTarget) + { + Vector3 pos = mCamera->getRealPosition(); + pos.y = mTop*2 - pos.y; + mSky->setSkyPosition(pos); + mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); + mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); + } } void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) @@ -158,11 +161,12 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) mCamera->setFarClipDistance(mOldCameraFarClip); - if (evt.source == mReflectionTarget) - { - mCamera->disableReflection(); - mCamera->disableCustomNearClipPlane(); - } + if (evt.source == mReflectionTarget) + { + mSky->resetSkyPosition(); + mCamera->disableReflection(); + mCamera->disableCustomNearClipPlane(); + } } Ogre::MaterialPtr Water::createMaterial() @@ -199,4 +203,10 @@ Ogre::MaterialPtr Water::createMaterial() return mat; } +void Water::setViewportBackground(const ColourValue& bg) +{ + if (mReflectionTarget) + mReflectionTarget->getViewport(0)->setBackgroundColour(bg); +} + } // namespace diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 8e9014833e..964a8c7354 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -50,6 +50,8 @@ namespace MWRender { void toggle(); + void setViewportBackground(const Ogre::ColourValue& bg); + void checkUnderwater(float y); void changeCell(const ESM::Cell* cell); void setHeight(const float height); diff --git a/files/water/water.cg b/files/water/water.cg index 10b42eec04..188c37709c 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -76,7 +76,7 @@ void main_fp // fresnel float facing = 1.0 - max(abs(dot(normalize(iEyeVector.xyz), normal.xyz)), 0); - float reflectionFactor = saturate(0.3 + 0.7 * pow(facing, 2)); + float reflectionFactor = saturate(0.35 + 0.65 * pow(facing, 2)); oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1 * reflectionFactor); From b8a470efcdf4b592dae3cf02f9cc211059ca0018 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 19:07:21 +0200 Subject: [PATCH 387/488] put transparent objects in a seperate render queue, in order to not mess up the mrt textures --- apps/openmw/mwrender/objects.cpp | 31 +++++++++++++++++++++++++--- apps/openmw/mwrender/objects.hpp | 1 + apps/openmw/mwrender/renderconst.hpp | 4 +++- apps/openmw/mwrender/water.cpp | 2 +- files/gbuffer/gbuffer.compositor | 4 ++-- files/water/water.material | 3 --- 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 9d743fe90b..a388d31636 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -131,7 +131,6 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) } } } - ent->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); if(!mIsStatic || !Settings::Manager::getBool("use static geometry", "Objects")) { @@ -139,12 +138,24 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) ent->setRenderingDistance(small ? Settings::Manager::getInt("small object distance", "Viewing distance") : 0); ent->setVisibilityFlags(mIsStatic ? (small ? RV_StaticsSmall : RV_Statics) : RV_Misc); + ent->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); } else { Ogre::StaticGeometry* sg = 0; - if (small) + if (transparent) + { + if( mStaticGeometryAlpha.find(ptr.getCell()) == mStaticGeometryAlpha.end()) + { + uniqueID = uniqueID +1; + sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); + mStaticGeometryAlpha[ptr.getCell()] = sg; + } + else + sg = mStaticGeometryAlpha[ptr.getCell()]; + } + else if (small) { if( mStaticGeometrySmall.find(ptr.getCell()) == mStaticGeometrySmall.end()) { @@ -152,7 +163,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); mStaticGeometrySmall[ptr.getCell()] = sg; - sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "Viewing distance")); /// \todo config value + sg->setRenderingDistance(Settings::Manager::getInt("small object distance", "Viewing distance")); } else sg = mStaticGeometrySmall[ptr.getCell()]; @@ -182,6 +193,8 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg->setVisibilityFlags(small ? RV_StaticsSmall : RV_Statics); + sg->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); + mRenderer.getScene()->destroyEntity(ent); } } @@ -275,6 +288,13 @@ void Objects::removeCell(MWWorld::Ptr::CellStore* store) mRenderer.getScene()->destroyStaticGeometry (sg); sg = 0; } + if(mStaticGeometryAlpha.find(store) != mStaticGeometryAlpha.end()) + { + Ogre::StaticGeometry* sg = mStaticGeometryAlpha[store]; + mStaticGeometryAlpha.erase(store); + mRenderer.getScene()->destroyStaticGeometry (sg); + sg = 0; + } if(mBounds.find(store) != mBounds.end()) mBounds.erase(store); @@ -292,6 +312,11 @@ void Objects::buildStaticGeometry(ESMS::CellStore& cell) Ogre::StaticGeometry* sg = mStaticGeometrySmall[&cell]; sg->build(); } + if(mStaticGeometryAlpha.find(&cell) != mStaticGeometryAlpha.end()) + { + Ogre::StaticGeometry* sg = mStaticGeometryAlpha[&cell]; + sg->build(); + } } Ogre::AxisAlignedBox Objects::getDimensions(MWWorld::Ptr::CellStore* cell) diff --git a/apps/openmw/mwrender/objects.hpp b/apps/openmw/mwrender/objects.hpp index 5911aa4ccf..4326ce3265 100644 --- a/apps/openmw/mwrender/objects.hpp +++ b/apps/openmw/mwrender/objects.hpp @@ -15,6 +15,7 @@ class Objects{ std::map mCellSceneNodes; std::map mStaticGeometry; std::map mStaticGeometrySmall; + std::map mStaticGeometryAlpha; std::map mBounds; std::vector mLights; Ogre::SceneNode* mMwRoot; diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 113024ace8..26d56a75c8 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -14,10 +14,12 @@ enum RenderQueueGroups RQG_Main = Ogre::RENDER_QUEUE_MAIN, - RQG_OcclusionQuery = Ogre::RENDER_QUEUE_MAIN+1, + RQG_Water = Ogre::RENDER_QUEUE_6, RQG_Alpha = Ogre::RENDER_QUEUE_7, + RQG_OcclusionQuery = Ogre::RENDER_QUEUE_8, + // Sky late (sun & sun flare) RQG_SkiesLate = Ogre::RENDER_QUEUE_SKIES_LATE }; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index cce25d1e96..d4ec9aeeaf 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -30,7 +30,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mWater = mSceneManager->createEntity("water"); mWater->setVisibilityFlags(RV_Water); - mWater->setRenderQueueGroup(RQG_Alpha); + mWater->setRenderQueueGroup(RQG_Water); mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index fb12b8bf46..8ab5665dda 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -17,7 +17,7 @@ compositor gbuffer pass render_scene { first_render_queue 0 - last_render_queue 69 + last_render_queue 59 } } @@ -63,7 +63,7 @@ compositor gbufferFinalizer } pass render_scene { - first_render_queue 70 + first_render_queue 60 last_render_queue 100 } } diff --git a/files/water/water.material b/files/water/water.material index 95a0aef788..f21f929d48 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -43,9 +43,6 @@ material Water { pass { - scene_blend alpha_blend - depth_write off - vertex_program_ref Water_VP { param_named_auto camPosObjSpace camera_position_object_space From 622fb568cf82526874b71d8dea15bbe38b88fc28 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 19:27:54 +0200 Subject: [PATCH 388/488] removed MRT setting and figure it out automatically --- apps/openmw/mwrender/renderingmanager.cpp | 20 ++++++++++++++------ apps/openmw/mwrender/renderingmanager.hpp | 2 ++ apps/openmw/mwrender/terrainmaterial.cpp | 7 ++++--- apps/openmw/mwrender/water.cpp | 4 ++-- components/nifogre/ogre_nif_loader.cpp | 2 +- files/settings-default.cfg | 6 ------ 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index c2ad2a0432..024c10f3d0 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -39,12 +39,12 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const // Load resources ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); - // disable MRT if it is unsupported + // disable unsupported effects const RenderSystemCapabilities* caps = Root::getSingleton().getRenderSystem()->getCapabilities(); if (caps->getNumMultiRenderTargets() < 2) - Settings::Manager::setBool("multiple render targets", "Render", false); + Settings::Manager::setBool("shader", "Water", false); - if (Settings::Manager::getBool("multiple render targets", "Render")) + if (useMRT()) { CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbuffer"); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); @@ -266,8 +266,11 @@ bool RenderingManager::toggleRenderMode(int mode) if (mRendering.getCamera()->getPolygonMode() == PM_SOLID) { // disable compositors - CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", false); - CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", false); + if (useMRT()) + { + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", false); + CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", false); + } mRendering.getCamera()->setPolygonMode(PM_WIREFRAME); return true; @@ -275,7 +278,7 @@ bool RenderingManager::toggleRenderMode(int mode) else { // re-enable compositors - if (Settings::Manager::getBool("multiple render targets", "Render")) + if (useMRT()) { CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); @@ -449,4 +452,9 @@ void RenderingManager::enableLights() mObjects.enableLights(); } +const bool RenderingManager::useMRT() +{ + return Settings::Manager::getBool("shader", "Water"); +} + } // namespace diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 27cd67bbc0..da9c55cb5a 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -81,6 +81,8 @@ class RenderingManager: private RenderingInterface { void removeWater(); + static const bool useMRT(); + void preCellChange (MWWorld::Ptr::CellStore* store); ///< this event is fired immediately before changing cell diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 867ec8e1fd..87798006c3 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -37,6 +37,7 @@ THE SOFTWARE. #include "OgreShadowCameraSetupPSSM.h" #include +#include "renderingmanager.hpp" namespace Ogre { @@ -558,7 +559,7 @@ namespace Ogre //params->setNamedAutoConstant("lightSpecularColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, i); } - if (Settings::Manager::getBool("multiple render targets", "Render")) + if (MWRender::RenderingManager::useMRT()) params->setNamedAutoConstant("far", GpuProgramParameters::ACT_FAR_CLIP_DISTANCE); params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); @@ -1032,7 +1033,7 @@ namespace Ogre __FUNCTION__); } - if (Settings::Manager::getBool("multiple render targets", "Render")) outStream << + if (MWRender::RenderingManager::useMRT()) outStream << " , out float4 oColor : COLOR \n" " , out float4 oColor1 : COLOR1 \n" " , uniform float far \n"; @@ -1348,7 +1349,7 @@ namespace Ogre // Final return outStream << " oColor = outputCol;\n"; - if (Settings::Manager::getBool("multiple render targets", "Render")) outStream << + if (MWRender::RenderingManager::useMRT()) outStream << " oColor1 = float4(uvMisc.z / far, 0, 0, 1); \n"; outStream diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index d4ec9aeeaf..cbce0d0750 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -52,7 +52,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : // Create rendertarget for reflection int rttsize = Settings::Manager::getInt("rtt size", "Water"); - if (Settings::Manager::getBool("shader", "Water") && Settings::Manager::getBool("multiple render targets", "Render")) + if (Settings::Manager::getBool("shader", "Water")) { TexturePtr tex = TextureManager::getSingleton().createManual("WaterReflection", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); @@ -185,7 +185,7 @@ Ogre::MaterialPtr Water::createMaterial() if (mReflectionTarget == 0) mat->removeTechnique(0); - if (Settings::Manager::getBool("multiple render targets", "Render")) + if (Settings::Manager::getBool("shader", "Water")) { CompositorInstance* compositor = CompositorManager::getSingleton().getCompositorChain(mViewport)->getCompositor("gbuffer"); diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 83510db139..d2b53291e6 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -302,7 +302,7 @@ void NIFLoader::createMaterial(const String &name, if (Settings::Manager::getBool("shaders", "Objects")) { - bool mrt = Settings::Manager::getBool("multiple render targets", "Render"); + bool mrt = Settings::Manager::getBool("shader", "Water"); // Create shader for the material // vertex diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 7791f39ab1..90f832b998 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -57,9 +57,3 @@ reflect small statics = false reflect actors = true reflect misc = false - -[Render] - -# Only supported on SM3+ cards -# If you have a lower end card, this will be disabled automatically -multiple render targets = true From a3151fe525651f0535586f7b84239d269b831014 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 21:16:51 +0200 Subject: [PATCH 389/488] fixed input handling priority in the main loop --- apps/openmw/engine.cpp | 3 +++ apps/openmw/mwinput/inputmanager.cpp | 13 +++++++------ apps/openmw/mwinput/inputmanager.hpp | 2 ++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 3d88fd1415..a88588b9c0 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -124,6 +124,9 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) { mEnvironment.mFrameDuration = evt.timeSinceLastFrame; + // update input + mEnvironment.mInputManager->update(); + // sound if (mUseSound) mEnvironment.mSoundManager->update (evt.timeSinceLastFrame); diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index 88534dddae..a86e80e5b7 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -200,8 +200,6 @@ namespace MWInput // Add the exit listener ogre.getRoot()->addFrameListener(&exit); - // Add ourselves as a frame listener to catch movement keys - ogre.getRoot()->addFrameListener(this); // Set up the mouse handler and tell it about the player camera mouse = MouseLookEventPtr(new MouseLookEvent(player.getRenderer()->getCamera())); @@ -262,7 +260,7 @@ namespace MWInput } //NOTE: Used to check for movement keys - bool frameRenderingQueued (const Ogre::FrameEvent &evt) + void update () { // Tell OIS to handle all input events input.capture(); @@ -276,7 +274,7 @@ namespace MWInput windows.update(); // Disable movement in Gui mode - if (windows.isGuiMode()) return true; + if (windows.isGuiMode()) return; // Configure player movement according to keyboard input. Actual movement will // be done in the physics system. @@ -305,8 +303,6 @@ namespace MWInput } else player.setForwardBackward (0); - - return true; } // Switch between gui modes. Besides controlling the Gui windows @@ -358,4 +354,9 @@ namespace MWInput { impl->setGuiMode(mode); } + + void MWInputManager::update() + { + impl->update(); + } } diff --git a/apps/openmw/mwinput/inputmanager.hpp b/apps/openmw/mwinput/inputmanager.hpp index 6b8034c8b4..721c77d9fd 100644 --- a/apps/openmw/mwinput/inputmanager.hpp +++ b/apps/openmw/mwinput/inputmanager.hpp @@ -48,6 +48,8 @@ namespace MWInput OMW::Engine& engine); ~MWInputManager(); + void update(); + void setGuiMode(MWGui::GuiMode mode); }; } From b36c0d95b80c565e1cb9c4f94a8b24a44891db6b Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 22:11:04 +0200 Subject: [PATCH 390/488] night transition fix --- apps/openmw/mwworld/weather.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 09fd200762..8422dd916f 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -472,6 +472,7 @@ WeatherResult WeatherManager::transition(float factor) result.mCloudSpeed = current.mCloudSpeed; result.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity); result.mGlareView = lerp(current.mGlareView, other.mGlareView); + result.mNightFade = lerp(current.mNightFade, other.mNightFade); result.mNight = current.mNight; From e718d4b6f060ec1fcbd09db83829dce84449d0fe Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 5 Apr 2012 22:36:48 +0200 Subject: [PATCH 391/488] another sky fix --- apps/openmw/mwworld/weather.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 8422dd916f..80035df14c 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -521,23 +521,23 @@ void WeatherManager::update(float duration) srand(time(NULL)); float random = ((rand()%100)/100.f) * total; - //if (random > snow+blight+ash+thunder+rain+overcast+foggy+cloudy+clear) + //if (random >= snow+blight+ash+thunder+rain+overcast+foggy+cloudy+clear) // weather = "blizzard"; - //else if (random > blight+ash+thunder+rain+overcast+foggy+cloudy+clear) + //else if (random >= blight+ash+thunder+rain+overcast+foggy+cloudy+clear) // weather = "snow"; - /*else*/ if (random > ash+thunder+rain+overcast+foggy+cloudy+clear) + /*else*/ if (random >= ash+thunder+rain+overcast+foggy+cloudy+clear) weather = "blight"; - else if (random > thunder+rain+overcast+foggy+cloudy+clear) + else if (random >= thunder+rain+overcast+foggy+cloudy+clear) weather = "ashstorm"; - else if (random > rain+overcast+foggy+cloudy+clear) + else if (random >= rain+overcast+foggy+cloudy+clear) weather = "thunderstorm"; - else if (random > overcast+foggy+cloudy+clear) + else if (random >= overcast+foggy+cloudy+clear) weather = "rain"; - else if (random > foggy+cloudy+clear) + else if (random >= foggy+cloudy+clear) weather = "overcast"; - else if (random > cloudy+clear) + else if (random >= cloudy+clear) weather = "foggy"; - else if (random > clear) + else if (random >= clear) weather = "cloudy"; else weather = "clear"; From ef0a185e115aebe56fc12d32785e03f050895b4f Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Fri, 6 Apr 2012 01:17:23 +0300 Subject: [PATCH 392/488] Pinnable windows: hide hud elements Hide elements of the HUD (health/magicka/stamina bars, minimap) when the corresponding windows (stats/map) are pinned. Rearrange the remaining hud elements in such cases (like in the original Morrowind). --- apps/openmw/mwgui/layouts.cpp | 57 ++++++++++++++++++++++ apps/openmw/mwgui/layouts.hpp | 16 +++++- apps/openmw/mwgui/map_window.cpp | 12 ++--- apps/openmw/mwgui/map_window.hpp | 7 ++- apps/openmw/mwgui/stats_window.cpp | 5 ++ apps/openmw/mwgui/stats_window.hpp | 3 ++ apps/openmw/mwgui/window_manager.cpp | 10 ++++ apps/openmw/mwgui/window_manager.hpp | 5 ++ apps/openmw/mwgui/window_pinnable_base.cpp | 1 + apps/openmw/mwgui/window_pinnable_base.hpp | 2 + files/mygui/openmw_hud_layout.xml | 28 ++++++----- 11 files changed, 122 insertions(+), 24 deletions(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index af068ffae1..0bca3b5340 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -31,6 +31,11 @@ HUD::HUD(int width, int height, int fpsLevel) , fpscounter(NULL) , trianglecounter(NULL) , batchcounter(NULL) + , hmsBaseLeft(0) + , weapBoxBaseLeft(0) + , spellBoxBaseLeft(0) + , effectBoxBaseRight(0) + , minimapBoxBaseRight(0) { setCoord(0,0, width, height); @@ -38,16 +43,25 @@ HUD::HUD(int width, int height, int fpsLevel) getWidget(health, "Health"); getWidget(magicka, "Magicka"); getWidget(stamina, "Stamina"); + hmsBaseLeft = health->getLeft(); // Item and spell images and status bars + getWidget(weapBox, "WeapBox"); getWidget(weapImage, "WeapImage"); getWidget(weapStatus, "WeapStatus"); + weapBoxBaseLeft = weapBox->getLeft(); + + getWidget(spellBox, "SpellBox"); getWidget(spellImage, "SpellImage"); getWidget(spellStatus, "SpellStatus"); + spellBoxBaseLeft = spellBox->getLeft(); getWidget(effectBox, "EffectBox"); getWidget(effect1, "Effect1"); + effectBoxBaseRight = effectBox->getRight(); + getWidget(minimapBox, "MiniMapBox"); + minimapBoxBaseRight = minimapBox->getRight(); getWidget(minimap, "MiniMap"); getWidget(compass, "Compass"); @@ -163,15 +177,21 @@ void HUD::setValue(const std::string& id, const MWMechanics::DynamicStat& v void HUD::setPlayerDir(const float x, const float y) { + if (!minimapBox->getVisible() || (x == mLastPositionX && y == mLastPositionY)) return; + MyGUI::ISubWidget* main = compass->getSubWidgetMain(); MyGUI::RotatingSkin* rotatingSubskin = main->castType(); rotatingSubskin->setCenter(MyGUI::IntPoint(16,16)); float angle = std::atan2(x,y); rotatingSubskin->setAngle(angle); + mLastPositionX = x; + mLastPositionY = y; } void HUD::setPlayerPos(const float x, const float y) { + if (!minimapBox->getVisible() || (x == mLastDirectionX && y == mLastDirectionY)) return; + MyGUI::IntSize size = minimap->getCanvasSize(); MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height); MyGUI::IntCoord viewsize = minimap->getCoord(); @@ -179,6 +199,39 @@ void HUD::setPlayerPos(const float x, const float y) minimap->setViewOffset(pos); compass->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); + + mLastDirectionX = x; + mLastDirectionY = y; +} + +void HUD::setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellVisible) +{ + int weapDx = 0, spellDx = 0; + if (!hmsVisible) + spellDx = weapDx = weapBoxBaseLeft - hmsBaseLeft; + + if (!weapVisible) + spellDx -= spellBoxBaseLeft - weapBoxBaseLeft; + + health->setVisible(hmsVisible); + stamina->setVisible(hmsVisible); + magicka->setVisible(hmsVisible); + weapBox->setPosition(weapBoxBaseLeft - weapDx, weapBox->getTop()); + weapBox->setVisible(weapVisible); + spellBox->setPosition(spellBoxBaseLeft - spellDx, spellBox->getTop()); + spellBox->setVisible(spellVisible); +} + +void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible) +{ + // effect box can have variable width -> variable left coordinate + int effectsDx = 0; + if (!minimapBoxVisible) + effectsDx = minimapBoxBaseRight - effectBoxBaseRight; + + minimapBox->setVisible(minimapBoxVisible); + effectBox->setPosition(effectBoxBaseRight - effectBox->getWidth() + effectsDx, effectBox->getTop()); + effectBox->setVisible(effectBoxVisible); } LocalMapBase::LocalMapBase() @@ -189,6 +242,10 @@ LocalMapBase::LocalMapBase() , mPrefix() , mChanged(true) , mLayout(NULL) + , mLastPositionX(0.0f) + , mLastPositionY(0.0f) + , mLastDirectionX(0.0f) + , mLastDirectionY(0.0f) { } diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 30bea579c5..42b4a8b9ed 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -48,6 +48,11 @@ namespace MWGui bool mChanged; OEngine::GUI::Layout* mLayout; + + float mLastPositionX; + float mLastPositionY; + float mLastDirectionX; + float mLastDirectionY; }; class HUD : public OEngine::GUI::Layout, public LocalMapBase @@ -66,11 +71,14 @@ namespace MWGui void setBatchCount(size_t count); void setPlayerDir(const float x, const float y); void setPlayerPos(const float x, const float y); + void setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellVisible); + void setBottomRightVisibility(bool effectBoxVisible, bool minimapVisible); MyGUI::ProgressPtr health, magicka, stamina; + MyGUI::Widget *weapBox, *spellBox; MyGUI::ImageBox *weapImage, *spellImage; MyGUI::ProgressPtr weapStatus, spellStatus; - MyGUI::WidgetPtr effectBox; + MyGUI::Widget *effectBox, *minimapBox; MyGUI::ImageBox* effect1; MyGUI::ScrollView* minimap; MyGUI::ImageBox* compass; @@ -80,6 +88,12 @@ namespace MWGui MyGUI::TextBox* fpscounter; MyGUI::TextBox* trianglecounter; MyGUI::TextBox* batchcounter; + + private: + // bottom left elements + int hmsBaseLeft, weapBoxBaseLeft, spellBoxBaseLeft; + // bottom right elements + int minimapBoxBaseRight, effectBoxBaseRight; }; class MainMenu : public OEngine::GUI::Layout diff --git a/apps/openmw/mwgui/map_window.cpp b/apps/openmw/mwgui/map_window.cpp index b4e8aa4d64..0e9d57c3c2 100644 --- a/apps/openmw/mwgui/map_window.cpp +++ b/apps/openmw/mwgui/map_window.cpp @@ -1,7 +1,7 @@ #include "map_window.hpp" +#include "window_manager.hpp" /* #include "../mwmechanics/mechanicsmanager.hpp" -#include "window_manager.hpp" #include #include @@ -14,11 +14,7 @@ using namespace MWGui; MapWindow::MapWindow(WindowManager& parWindowManager) : MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager), - mGlobal(false), - mLastPositionX(0.0f), - mLastPositionY(0.0f), - mLastDirectionX(0.0f), - mLastDirectionY(0.0f) + mGlobal(false) { setCoord(500,0,320,300); setText("WorldButton", "World"); @@ -104,3 +100,7 @@ void MapWindow::onWorldButtonClicked(MyGUI::Widget* _sender) mButton->setCaption( mGlobal ? "Local" : "World" ); } +void MapWindow::onPinToggled() +{ + mWindowManager.setMinimapVisibility(!mPinned); +} diff --git a/apps/openmw/mwgui/map_window.hpp b/apps/openmw/mwgui/map_window.hpp index cad652bff2..d14221a408 100644 --- a/apps/openmw/mwgui/map_window.hpp +++ b/apps/openmw/mwgui/map_window.hpp @@ -26,10 +26,9 @@ namespace MWGui MyGUI::Button* mButton; MyGUI::IntPoint mLastDragPos; bool mGlobal; - float mLastPositionX; - float mLastPositionY; - float mLastDirectionX; - float mLastDirectionY; + + protected: + virtual void onPinToggled(); }; } #endif diff --git a/apps/openmw/mwgui/stats_window.cpp b/apps/openmw/mwgui/stats_window.cpp index 3ded9713af..675e5141fa 100644 --- a/apps/openmw/mwgui/stats_window.cpp +++ b/apps/openmw/mwgui/stats_window.cpp @@ -381,3 +381,8 @@ void StatsWindow::updateScroller() skillScrollerWidget->setScrollRange(std::max(clientHeight - skillClientWidget->getHeight(), 0)); skillScrollerWidget->setScrollPage(std::max(skillClientWidget->getHeight() - lineHeight, 0)); } + +void StatsWindow::onPinToggled() +{ + mWindowManager.setHMSVisibility(!mPinned); +} diff --git a/apps/openmw/mwgui/stats_window.hpp b/apps/openmw/mwgui/stats_window.hpp index 081a75d56d..f2731e545c 100644 --- a/apps/openmw/mwgui/stats_window.hpp +++ b/apps/openmw/mwgui/stats_window.hpp @@ -74,6 +74,9 @@ namespace MWGui std::string birthSignId; int reputation, bounty; std::vector skillWidgets; //< Skills and other information + + protected: + virtual void onPinToggled(); }; } #endif diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 4d7b9f9013..8ad71186b7 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -456,3 +456,13 @@ void WindowManager::setPlayerDir(const float x, const float y) map->setPlayerDir(x,y); hud->setPlayerDir(x,y); } + +void WindowManager::setHMSVisibility(bool visible) +{ + hud->setBottomLeftVisibility(visible, hud->weapBox->getVisible(), hud->spellBox->getVisible()); +} + +void WindowManager::setMinimapVisibility(bool visible) +{ + hud->setBottomRightVisibility(hud->effectBox->getVisible(), visible); +} diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index 582f438e8f..e8637f8a2d 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -160,6 +160,11 @@ namespace MWGui void setInteriorMapTexture(const int x, const int y); ///< set the index of the map texture that should be used (for interiors) + // sets the visibility of the hud health/magicka/stamina bars + void setHMSVisibility(bool visible); + // sets the visibility of the hud minimap + void setMinimapVisibility(bool visible); + template void removeDialog(T*& dialog); ///< Casts to OEngine::GUI::Layout and calls removeDialog, then resets pointer to nullptr. void removeDialog(OEngine::GUI::Layout* dialog); ///< Hides dialog and schedules dialog to be deleted. diff --git a/apps/openmw/mwgui/window_pinnable_base.cpp b/apps/openmw/mwgui/window_pinnable_base.cpp index 07f0ea278b..ecdf311c6e 100644 --- a/apps/openmw/mwgui/window_pinnable_base.cpp +++ b/apps/openmw/mwgui/window_pinnable_base.cpp @@ -25,6 +25,7 @@ void WindowPinnableBase::onWindowButtonPressed(MyGUI::Window* sender, const std: if ("PinToggle" == eventName) { mPinned = !mPinned; + onPinToggled(); } eventDone(this); diff --git a/apps/openmw/mwgui/window_pinnable_base.hpp b/apps/openmw/mwgui/window_pinnable_base.hpp index f3cec847fd..8ef38c3867 100644 --- a/apps/openmw/mwgui/window_pinnable_base.hpp +++ b/apps/openmw/mwgui/window_pinnable_base.hpp @@ -17,6 +17,8 @@ namespace MWGui void onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName); protected: + virtual void onPinToggled() = 0; + bool mPinned; bool mVisible; }; diff --git a/files/mygui/openmw_hud_layout.xml b/files/mygui/openmw_hud_layout.xml index 20370770ef..2dafa72988 100644 --- a/files/mygui/openmw_hud_layout.xml +++ b/files/mygui/openmw_hud_layout.xml @@ -11,22 +11,24 @@ align="Left Bottom" name="Stamina"/> - - + + + + + - - - + + + + + - - From 8bf9b371c7d5c01ed3d8de3c45a84408b398317a Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 6 Apr 2012 10:39:55 +0200 Subject: [PATCH 393/488] removed remains of input framelistener --- apps/openmw/mwinput/inputmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index a86e80e5b7..3721d10431 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -70,7 +70,7 @@ namespace MWInput }; // Class that handles all input and key bindings for OpenMW - class InputImpl : public Ogre::FrameListener + class InputImpl { OEngine::Input::DispatcherPtr disp; OEngine::Render::OgreRenderer &ogre; From a41eee9a721c643368eb92909684cecb95d6a15b Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 14:07:52 +0200 Subject: [PATCH 394/488] specular lighting --- apps/openmw/mwrender/renderingmanager.cpp | 1 + files/water/water.cg | 17 +++++++++++++++-- files/water/water.material | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index afa54b30c3..4b38cb1487 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -406,6 +406,7 @@ void RenderingManager::skipAnimation (const MWWorld::Ptr& ptr) void RenderingManager::setSunColour(const Ogre::ColourValue& colour) { mSun->setDiffuseColour(colour); + mSun->setSpecularColour(colour); mTerrainManager->setDiffuse(colour); } diff --git a/files/water/water.cg b/files/water/water.cg index 188c37709c..18ef0a7571 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -37,6 +37,8 @@ void main_fp , in float iDepth : TEXCOORD2 , in float4 iEyeVector : TEXCOORD3 , uniform float renderTargetFlipping + , uniform float4 lightPosObjSpace0 + , uniform float4 lightSpecularColour0 , uniform sampler2D reflectionMap : register(s0) , uniform sampler2D refractionMap : register(s1) @@ -74,11 +76,22 @@ void main_fp // tangent to object space normal.xyz = normal.xzy; + iEyeVector.xyz = normalize(iEyeVector.xyz); + // fresnel - float facing = 1.0 - max(abs(dot(normalize(iEyeVector.xyz), normal.xyz)), 0); + float facing = 1.0 - max(abs(dot(iEyeVector.xyz, normal.xyz)), 0); float reflectionFactor = saturate(0.35 + 0.65 * pow(facing, 2)); - oColor.xyz = lerp(refraction.xyz, reflection.xyz, depth1 * reflectionFactor); + // specular + float3 lightDir = normalize(lightPosObjSpace0.xyz); // assumes that light 0 is a directional light + float3 halfVector = normalize(iEyeVector + lightDir); + float specular = pow(max(dot(normal.xyz, halfVector.xyz), 0), 64); + + float opacity = depth1 * saturate(reflectionFactor + specular); + + reflection.xyz += lightSpecularColour0.xyz * specular; + + oColor.xyz = lerp(refraction.xyz, reflection.xyz, opacity); float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); diff --git a/files/water/water.material b/files/water/water.material index f21f929d48..d0cadfc099 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -54,6 +54,8 @@ material Water param_named_auto fogParams fog_params param_named_auto renderTargetFlipping render_target_flipping param_named_auto far far_clip_distance + param_named_auto lightPosObjSpace0 light_position_object_space 0 + param_named_auto lightSpecularColour0 light_specular_colour 0 } texture_unit reflectionMap From 393530e67174d4771cc668a2dbefcfe0c9a0f601 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 15:05:17 +0200 Subject: [PATCH 395/488] more or less fixed the sky for normal viewing angles, still disappears at a certain height though --- apps/openmw/mwrender/sky.cpp | 9 ++++++++- apps/openmw/mwrender/sky.hpp | 23 ++++++++++++----------- apps/openmw/mwrender/water.cpp | 10 ++++++---- apps/openmw/mwrender/water.hpp | 2 +- files/water/water.cg | 5 ++++- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 43ef31d861..8f719ebaae 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -810,7 +810,9 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather) strength = 1.f; mSunGlare->setVisibility(weather.mGlareView * mGlareFade * strength); - mSun->setVisibility(weather.mGlareView); + + if (strength < 0.4) strength = 0.4; + mSun->setVisibility(weather.mGlareView * strength); mAtmosphereNight->setVisible(weather.mNight && mEnabled); } @@ -923,3 +925,8 @@ void SkyManager::resetSkyPosition() { mRootNode->setPosition(0,0,0); } + +void SkyManager::scaleSky(float scale) +{ + mRootNode->setScale(scale, scale, scale); +} diff --git a/apps/openmw/mwrender/sky.hpp b/apps/openmw/mwrender/sky.hpp index c18b9f4843..f6f166b9e3 100644 --- a/apps/openmw/mwrender/sky.hpp +++ b/apps/openmw/mwrender/sky.hpp @@ -170,6 +170,7 @@ namespace MWRender void setSkyPosition(const Ogre::Vector3& position); void resetSkyPosition(); + void scaleSky(float scale); private: bool mCreated; @@ -183,21 +184,21 @@ namespace MWRender BillboardObject* mSunGlare; Moon* mMasser; Moon* mSecunda; - + Ogre::Viewport* mViewport; Ogre::SceneNode* mRootNode; Ogre::SceneManager* mSceneMgr; - + Ogre::SceneNode* mAtmosphereDay; Ogre::SceneNode* mAtmosphereNight; - + Ogre::MaterialPtr mCloudMaterial; Ogre::MaterialPtr mAtmosphereMaterial; - + Ogre::MaterialPtr mStarsMaterials[7]; - + Ogre::HighLevelGpuProgramPtr mCloudFragmentShader; - + // remember some settings so we don't have to apply them again if they didnt change Ogre::String mClouds; Ogre::String mNextClouds; @@ -207,17 +208,17 @@ namespace MWRender float mStarsOpacity; Ogre::ColourValue mCloudColour; Ogre::ColourValue mSkyColour; - + Ogre::Overlay* mThunderOverlay; Ogre::TextureUnitState* mThunderTextureUnit; - + float mRemainingTransitionTime; - + float mGlare; // target float mGlareFade; // actual - + void ModVertexAlpha(Ogre::Entity* ent, unsigned int meshType); - + bool mEnabled; bool mSunEnabled; bool mMasserEnabled; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index cbce0d0750..544f738e50 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -141,15 +141,16 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { mWater->setVisible(false); - mOldCameraFarClip = mCamera->getFarClipDistance(); - if (mReflectDistance != 0) - mCamera->setFarClipDistance(mReflectDistance); + //mOldCameraFarClip = mCamera->getFarClipDistance(); + //if (mReflectDistance != 0) + // mCamera->setFarClipDistance(mReflectDistance); if (evt.source == mReflectionTarget) { Vector3 pos = mCamera->getRealPosition(); pos.y = mTop*2 - pos.y; mSky->setSkyPosition(pos); + mSky->scaleSky(mCamera->getFarClipDistance() / 1000.f); mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); } @@ -159,11 +160,12 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) { mWater->setVisible(true); - mCamera->setFarClipDistance(mOldCameraFarClip); + //mCamera->setFarClipDistance(mOldCameraFarClip); if (evt.source == mReflectionTarget) { mSky->resetSkyPosition(); + mSky->scaleSky(1); mCamera->disableReflection(); mCamera->disableCustomNearClipPlane(); } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 964a8c7354..264f96fbe1 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -11,7 +11,7 @@ namespace MWRender { class SkyManager; /// Water rendering - class Water : Ogre::RenderTargetListener + class Water : public Ogre::RenderTargetListener { static const int CELL_SIZE = 8192; Ogre::Camera *mCamera; diff --git a/files/water/water.cg b/files/water/water.cg index 18ef0a7571..613891fa59 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -54,6 +54,9 @@ void main_fp float2 screenCoords = iScreenCoords.xy / iScreenCoords.z; screenCoords.y = (1-saturate(renderTargetFlipping))+renderTargetFlipping*screenCoords.y; + // No need for transparency since we are using a refraction map + oColor.a = 1; + // Sample screen-space depth map and subtract pixel depth to get the real water depth float depth1 = tex2D(depthMap, screenCoords).r * far - iDepth; depth1 = saturate(depth1 / 500.f); @@ -93,7 +96,7 @@ void main_fp oColor.xyz = lerp(refraction.xyz, reflection.xyz, opacity); + // add fog float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); - oColor.a = 1; } From ec3fe1ef002ef7aa6e0dd66eb1cd256a6b344d1c Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 15:17:54 +0200 Subject: [PATCH 396/488] no sun glare in the reflection --- apps/openmw/mwrender/renderconst.hpp | 3 +++ apps/openmw/mwrender/sky.cpp | 6 ++++++ apps/openmw/mwrender/sky.hpp | 23 ++++++++++++----------- apps/openmw/mwrender/water.cpp | 3 +-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 26d56a75c8..4445ffe6b7 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -47,6 +47,9 @@ enum VisibilityFlags RV_Sky = 64, + // Sun glare (not visible in reflection) + RV_Glare = 128, + RV_Map = RV_Terrain + RV_Statics + RV_StaticsSmall + RV_Misc + RV_Water, /// \todo markers (normally hidden) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 8f719ebaae..fdd9cd5111 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -60,6 +60,11 @@ Vector3 BillboardObject::getPosition() const return Vector3(p.x, -p.z, p.y); } +void BillboardObject::setVisibilityFlags(int flags) +{ + mBBSet->setVisibilityFlags(flags); +} + void BillboardObject::setColour(const ColourValue& pColour) { mMaterial->getTechnique(0)->getPass(0)->setSelfIllumination(pColour); @@ -421,6 +426,7 @@ void SkyManager::create() mSun->setRenderQueue(RQG_SkiesEarly+4); mSunGlare = new BillboardObject("textures\\tx_sun_flash_grey_05.dds", 3, Vector3(0.4, 0.4, 0.4), mRootNode); mSunGlare->setRenderQueue(RQG_SkiesLate); + mSunGlare->setVisibilityFlags(RV_Glare); HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); diff --git a/apps/openmw/mwrender/sky.hpp b/apps/openmw/mwrender/sky.hpp index f6f166b9e3..64d5c16a03 100644 --- a/apps/openmw/mwrender/sky.hpp +++ b/apps/openmw/mwrender/sky.hpp @@ -36,24 +36,25 @@ namespace MWRender BillboardObject(); virtual ~BillboardObject() {} - + void setColour(const Ogre::ColourValue& pColour); void setPosition(const Ogre::Vector3& pPosition); void setVisible(const bool visible); void setRenderQueue(unsigned int id); + void setVisibilityFlags(int flags); void setSize(const float size); Ogre::Vector3 getPosition() const; - + void setVisibility(const float visibility); - + Ogre::SceneNode* getNode(); - + protected: virtual void init(const Ogre::String& textureName, const float size, const Ogre::Vector3& position, Ogre::SceneNode* rootNode); - + Ogre::SceneNode* mNode; Ogre::MaterialPtr mMaterial; Ogre::BillboardSet* mBBSet; @@ -71,9 +72,9 @@ namespace MWRender const Ogre::Vector3& position, Ogre::SceneNode* rootNode ); - + virtual ~Moon() {} - + enum Phase { Phase_New = 0, @@ -85,20 +86,20 @@ namespace MWRender Phase_WaningHalf, Phase_WaningCrescent }; - + enum Type { Type_Masser = 0, Type_Secunda }; - + void setPhase(const Phase& phase); void setType(const Type& type); void setSkyColour(const Ogre::ColourValue& colour); - + Phase getPhase() const; unsigned int getPhaseInt() const; - + private: Type mType; Phase mPhase; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 544f738e50..5742618632 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -139,14 +139,13 @@ Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { - mWater->setVisible(false); - //mOldCameraFarClip = mCamera->getFarClipDistance(); //if (mReflectDistance != 0) // mCamera->setFarClipDistance(mReflectDistance); if (evt.source == mReflectionTarget) { + mWater->setVisible(false); Vector3 pos = mCamera->getRealPosition(); pos.y = mTop*2 - pos.y; mSky->setSkyPosition(pos); From 2976625b0024ad4b02b508970edcf0cceb3297f5 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 15:51:57 +0200 Subject: [PATCH 397/488] better underwater --- apps/openmw/mwrender/water.cpp | 40 ++++++++++++++++++++++++++-------- apps/openmw/mwrender/water.hpp | 3 ++- files/water/water.cg | 2 ++ files/water/water.material | 4 ++++ 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 5742618632..dd06e21817 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -69,7 +69,8 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mReflectionTarget = rtt; } - mWater->setMaterial(createMaterial()); + createMaterial(); + mWater->setMaterial(mMaterial); } void Water::setActive(bool active) @@ -120,6 +121,15 @@ void Water::checkUnderwater(float y) try { CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) {} + + // tell the shader we are not underwater + Ogre::Pass* pass = mMaterial->getTechnique(0)->getPass(0); + if (pass->hasFragmentProgram() && pass->getFragmentProgramParameters()->_findNamedConstantDefinition("isUnderwater", false)) + pass->getFragmentProgramParameters()->setNamedConstant("isUnderwater", Real(0)); + + if (mReflectionTarget) + mReflectionTarget->setActive(mActive); + mIsUnderwater = false; } @@ -128,6 +138,15 @@ void Water::checkUnderwater(float y) try { CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); } catch(...) {} + + // tell the shader we are underwater + Ogre::Pass* pass = mMaterial->getTechnique(0)->getPass(0); + if (pass->hasFragmentProgram() && pass->getFragmentProgramParameters()->_findNamedConstantDefinition("isUnderwater", false)) + pass->getFragmentProgramParameters()->setNamedConstant("isUnderwater", Real(1)); + + if (mReflectionTarget) + mReflectionTarget->setActive(false); + mIsUnderwater = true; } } @@ -146,10 +165,15 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) if (evt.source == mReflectionTarget) { mWater->setVisible(false); + + // Some messy code to get the skybox to show up at all + // The problem here is that it gets clipped by the water plane + // Therefore scale it up a bit Vector3 pos = mCamera->getRealPosition(); pos.y = mTop*2 - pos.y; mSky->setSkyPosition(pos); mSky->scaleSky(mCamera->getFarClipDistance() / 1000.f); + mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); } @@ -170,9 +194,9 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) } } -Ogre::MaterialPtr Water::createMaterial() +void Water::createMaterial() { - MaterialPtr mat = MaterialManager::getSingleton().getByName("Water"); + mMaterial = MaterialManager::getSingleton().getByName("Water"); // these have to be set in code std::string textureNames[32]; @@ -180,28 +204,26 @@ Ogre::MaterialPtr Water::createMaterial() { textureNames[i] = "textures\\water\\water" + StringConverter::toString(i, 2, '0') + ".dds"; } - mat->getTechnique(1)->getPass(0)->getTextureUnitState(0)->setAnimatedTextureName(textureNames, 32, 2); + mMaterial->getTechnique(1)->getPass(0)->getTextureUnitState(0)->setAnimatedTextureName(textureNames, 32, 2); // use technique without shaders if reflection is disabled if (mReflectionTarget == 0) - mat->removeTechnique(0); + mMaterial->removeTechnique(0); if (Settings::Manager::getBool("shader", "Water")) { CompositorInstance* compositor = CompositorManager::getSingleton().getCompositorChain(mViewport)->getCompositor("gbuffer"); TexturePtr colorTexture = compositor->getTextureInstance("mrt_output", 0); - TextureUnitState* tus = mat->getTechnique(0)->getPass(0)->getTextureUnitState("refractionMap"); + TextureUnitState* tus = mMaterial->getTechnique(0)->getPass(0)->getTextureUnitState("refractionMap"); if (tus != 0) tus->setTexture(colorTexture); TexturePtr depthTexture = compositor->getTextureInstance("mrt_output", 1); - tus = mat->getTechnique(0)->getPass(0)->getTextureUnitState("depthMap"); + tus = mMaterial->getTechnique(0)->getPass(0)->getTextureUnitState("depthMap"); if (tus != 0) tus->setTexture(depthTexture); } - - return mat; } void Water::setViewportBackground(const ColourValue& bg) diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 264f96fbe1..855dd3b184 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -34,7 +34,8 @@ namespace MWRender { SkyManager* mSky; - Ogre::MaterialPtr createMaterial(); + void createMaterial(); + Ogre::MaterialPtr mMaterial; Ogre::RenderTarget* mReflectionTarget; diff --git a/files/water/water.cg b/files/water/water.cg index 613891fa59..dfb1972ae6 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -48,6 +48,7 @@ void main_fp , uniform float far , uniform float4 fogParams , uniform float4 fogColour + , uniform float isUnderwater ) { @@ -91,6 +92,7 @@ void main_fp float specular = pow(max(dot(normal.xyz, halfVector.xyz), 0), 64); float opacity = depth1 * saturate(reflectionFactor + specular); + opacity *= (1-isUnderwater); reflection.xyz += lightSpecularColour0.xyz * specular; diff --git a/files/water/water.material b/files/water/water.material index d0cadfc099..cf7a414cf8 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -43,6 +43,8 @@ material Water { pass { + cull_hardware none + vertex_program_ref Water_VP { param_named_auto camPosObjSpace camera_position_object_space @@ -56,6 +58,7 @@ material Water param_named_auto far far_clip_distance param_named_auto lightPosObjSpace0 light_position_object_space 0 param_named_auto lightSpecularColour0 light_specular_colour 0 + param_named isUnderwater float 0 } texture_unit reflectionMap @@ -85,6 +88,7 @@ material Water scheme Map pass { + cull_hardware none scene_blend alpha_blend depth_write off diffuse 0 0 0 1 From c169f9e171f740869bc6df9954973d4ed91243d7 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 16:11:08 +0200 Subject: [PATCH 398/488] underwater tweaks --- apps/openmw/mwrender/renderconst.hpp | 2 ++ apps/openmw/mwrender/renderingmanager.cpp | 2 ++ apps/openmw/mwrender/water.cpp | 7 +++++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 4445ffe6b7..ab411a6cb4 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -18,6 +18,8 @@ enum RenderQueueGroups RQG_Alpha = Ogre::RENDER_QUEUE_7, + RQG_UnderWater = Ogre::RENDER_QUEUE_7+1, + RQG_OcclusionQuery = Ogre::RENDER_QUEUE_8, // Sky late (sun & sun flare) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4b38cb1487..2f85d35997 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -54,6 +54,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const if (caps->getNumMultiRenderTargets() < 2) Settings::Manager::setBool("shader", "Water", false); + // note that the order is important here if (useMRT()) { CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbuffer"); @@ -61,6 +62,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbufferFinalizer"); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); } + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "Water"); // Turn the entire scene (represented by the 'root' node) -90 // degrees around the x axis. This makes Z go upwards, and Y go into diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index dd06e21817..89b40cf630 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -16,7 +16,6 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : try { - CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) {} @@ -76,7 +75,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : void Water::setActive(bool active) { mActive = active; - if (mReflectionTarget) mReflectionTarget->setActive(active); + if (mReflectionTarget) mReflectionTarget->setActive(active && !mIsUnderwater); mWater->setVisible(active); } @@ -130,6 +129,8 @@ void Water::checkUnderwater(float y) if (mReflectionTarget) mReflectionTarget->setActive(mActive); + mWater->setRenderQueueGroup(RQG_Water); + mIsUnderwater = false; } @@ -147,6 +148,8 @@ void Water::checkUnderwater(float y) if (mReflectionTarget) mReflectionTarget->setActive(false); + mWater->setRenderQueueGroup(RQG_UnderWater); + mIsUnderwater = true; } } From 114e8ae2a02b54f3cb34945cba13816e69cbb923 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 16:45:45 +0200 Subject: [PATCH 399/488] much less underwater distortion --- files/water/GlassFP.cg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/water/GlassFP.cg b/files/water/GlassFP.cg index 0ce343b0aa..1e6c539847 100644 --- a/files/water/GlassFP.cg +++ b/files/water/GlassFP.cg @@ -9,7 +9,7 @@ float4 main_ps(float2 iTexCoord : TEXCOORD0, float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; - return tex2D(RT, iTexCoord + normal.xy * 0.05) + + return tex2D(RT, iTexCoord + normal.xy * 0.015) + (tex2D(CausticMap, noiseCoord) / 5) + tintColour ; } From 8316a4c2ecb37195435f6b25328a28e6286acab1 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 17:21:56 +0200 Subject: [PATCH 400/488] add mrt dummy output to sky shaders --- apps/openmw/mwrender/sky.cpp | 51 +++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index fdd9cd5111..d22f20a222 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -13,6 +13,7 @@ #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" #include "renderconst.hpp" +#include "renderingmanager.hpp" using namespace MWRender; using namespace Ogre; @@ -152,14 +153,20 @@ void BillboardObject::init(const String& textureName, outStream2 << "void main_fp( \n" " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" + " out float4 oColor : COLOR, \n"; + if (RenderingManager::useMRT()) outStream2 << + " out float4 oColor1 : COLOR1, \n"; + outStream2 << " uniform sampler2D texture : TEXUNIT0, \n" " uniform float4 diffuse, \n" " uniform float4 emissive \n" ") \n" "{ \n" " float4 tex = tex2D(texture, uv); \n" - " oColor = float4(emissive.xyz,1) * tex * float4(1,1,1,diffuse.a); \n" + " oColor = float4(emissive.xyz,1) * tex * float4(1,1,1,diffuse.a); \n"; + if (RenderingManager::useMRT()) outStream2 << + " oColor1 = float4(1, 0, 0, 1); \n"; + outStream2 << "}"; fshader->setSource(outStream2.str()); fshader->load(); @@ -215,7 +222,10 @@ Moon::Moon( const String& textureName, outStream2 << "void main_fp( \n" " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" + " out float4 oColor : COLOR, \n"; + if (RenderingManager::useMRT()) outStream2 << + " out float4 oColor1 : COLOR1, \n"; + outStream2 << " uniform sampler2D texture : TEXUNIT0, \n" " uniform float4 skyColour, \n" " uniform float4 diffuse, \n" @@ -223,7 +233,10 @@ Moon::Moon( const String& textureName, ") \n" "{ \n" " float4 tex = tex2D(texture, uv); \n" - " oColor = float4(emissive.xyz,1) * tex; \n" + " oColor = float4(emissive.xyz,1) * tex; \n"; + if (RenderingManager::useMRT()) outStream2 << + " oColor1 = float4(1, 0, 0, 1); \n"; + outStream2 << // use a circle for the alpha (compute UV distance to center) // looks a bit bad because its not filtered on the edges, // but it's cheaper than a seperate alpha texture. @@ -474,7 +487,10 @@ void SkyManager::create() outStream5 << "void main_fp( \n" " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" + " out float4 oColor : COLOR, \n"; + if (RenderingManager::useMRT()) outStream5 << + " out float4 oColor1 : COLOR1, \n"; + outStream5 << " in float fade : TEXCOORD1, \n" " uniform sampler2D texture : TEXUNIT0, \n" " uniform float opacity, \n" @@ -482,7 +498,10 @@ void SkyManager::create() " uniform float4 emissive \n" ") \n" "{ \n" - " oColor = tex2D(texture, uv) * float4(emissive.xyz, 1) * float4(1,1,1,fade*diffuse.a); \n" + " oColor = tex2D(texture, uv) * float4(emissive.xyz, 1) * float4(1,1,1,fade*diffuse.a); \n"; + if (RenderingManager::useMRT()) outStream5 << + " oColor1 = float4(1, 0, 0, 1); \n"; + outStream5 << "}"; stars_fp->setSource(outStream5.str()); stars_fp->load(); @@ -551,11 +570,17 @@ void SkyManager::create() _outStream << "void main_fp( \n" " in float4 iVertexColor : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" + " out float4 oColor : COLOR, \n"; + if (RenderingManager::useMRT()) _outStream << + " out float4 oColor1 : COLOR1, \n"; + _outStream << " uniform float4 emissive \n" ") \n" "{ \n" - " oColor = iVertexColor * emissive; \n" + " oColor = iVertexColor * emissive; \n"; + if (RenderingManager::useMRT()) _outStream << + " oColor1 = float4(1, 0, 0, 1); \n"; + _outStream << "}"; fshader->setSource(_outStream.str()); fshader->load(); @@ -607,8 +632,11 @@ void SkyManager::create() outStream2 << "void main_fp( \n" " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" " in float4 color : TEXCOORD1, \n" + " out float4 oColor : COLOR, \n"; + if (RenderingManager::useMRT()) outStream2 << + " out float4 oColor1 : COLOR1, \n"; + outStream2 << " uniform sampler2D texture : TEXUNIT0, \n" " uniform sampler2D secondTexture : TEXUNIT1, \n" " uniform float transitionFactor, \n" @@ -620,7 +648,10 @@ void SkyManager::create() "{ \n" " uv += float2(0,1) * time * speed * 0.003; \n" // Scroll in y direction " float4 tex = lerp(tex2D(texture, uv), tex2D(secondTexture, uv), transitionFactor); \n" - " oColor = color * float4(emissive.xyz,1) * tex * float4(1,1,1,opacity); \n" + " oColor = color * float4(emissive.xyz,1) * tex * float4(1,1,1,opacity); \n"; + if (RenderingManager::useMRT()) outStream2 << + " oColor1 = float4(1, 0, 0, 1); \n"; + outStream2 << "}"; mCloudFragmentShader->setSource(outStream2.str()); mCloudFragmentShader->load(); From 456eb9520985fce0ac77f755b0cbcefb49fbb97e Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 18:22:37 +0200 Subject: [PATCH 401/488] reversed sun and moon paths (sunrise at east) --- apps/openmw/mwrender/renderingmanager.cpp | 6 +- apps/openmw/mwrender/water.cpp | 7 +- apps/openmw/mwrender/water.hpp | 2 + apps/openmw/mwworld/weather.cpp | 12 +- files/water/water.cg | 6 +- files/water/water.compositor | 31 ++++- files/water/water.material | 139 +++++++++++++++------- 7 files changed, 142 insertions(+), 61 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 2f85d35997..362a04ca50 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -61,8 +61,12 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbufferFinalizer"); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "Underwater"); + } + else + { + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "UnderwaterNoMRT"); } - CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "Water"); // Turn the entire scene (represented by the 'root' node) -90 // degrees around the x axis. This makes Z go upwards, and Y go into diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 89b40cf630..615a24a767 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,6 +1,7 @@ #include "water.hpp" #include #include "sky.hpp" +#include "renderingmanager.hpp" using namespace Ogre; @@ -68,6 +69,8 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mReflectionTarget = rtt; } + mCompositorName = RenderingManager::useMRT() ? "Underwater" : "UnderwaterNoMRT"; + createMaterial(); mWater->setMaterial(mMaterial); } @@ -118,7 +121,7 @@ void Water::checkUnderwater(float y) if ((mIsUnderwater && y > mTop) || !mWater->isVisible() || mCamera->getPolygonMode() != Ogre::PM_SOLID) { try { - CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + CompositorManager::getSingleton().setCompositorEnabled(mViewport, mCompositorName, false); } catch(...) {} // tell the shader we are not underwater @@ -137,7 +140,7 @@ void Water::checkUnderwater(float y) if (!mIsUnderwater && y < mTop && mWater->isVisible() && mCamera->getPolygonMode() == Ogre::PM_SOLID) { try { - CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); + CompositorManager::getSingleton().setCompositorEnabled(mViewport, mCompositorName, true); } catch(...) {} // tell the shader we are underwater diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 855dd3b184..b5aa29a5ba 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -34,6 +34,8 @@ namespace MWRender { SkyManager* mSky; + std::string mCompositorName; + void createMaterial(); Ogre::MaterialPtr mMaterial; diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 80035df14c..0d86d36cab 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -585,8 +585,8 @@ void WeatherManager::update(float duration) int facing = (mHour > 13.f) ? 1 : -1; Vector3 final( - (1-height)*facing, - (1-height)*facing, + -(1-height)*facing, + -(1-height)*facing, height); mRendering->setSunDirection(final); @@ -606,13 +606,13 @@ void WeatherManager::update(float duration) float moonHeight = 1-std::abs((night-0.5)*2); int facing = (mHour > 0.f && mHour<12.f) ? 1 : -1; Vector3 masser( - (1-moonHeight)*facing, - (1-moonHeight)*facing, + -(1-moonHeight)*facing, + -(1-moonHeight)*facing, moonHeight); Vector3 secunda( - (1-moonHeight)*facing*0.8, - (1-moonHeight)*facing*1.25, + -(1-moonHeight)*facing*0.8, + -(1-moonHeight)*facing*1.25, moonHeight); mRendering->getSkyManager()->setMasserDirection(masser); diff --git a/files/water/water.cg b/files/water/water.cg index dfb1972ae6..85c86f3b6d 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -19,9 +19,9 @@ void main_vp oDepth = oPos.z; float4x4 scalemat = float4x4( 0.5, 0, 0, 0.5, - 0, -0.5, 0, 0.5, - 0, 0, 0.5, 0.5, - 0, 0, 0, 1 ); + 0, -0.5, 0, 0.5, + 0, 0, 0.5, 0.5, + 0, 0, 0, 1 ); float4 texcoordProj = mul(scalemat, oPos); oScreenCoords = float3(texcoordProj.x, texcoordProj.y, texcoordProj.w); diff --git a/files/water/water.compositor b/files/water/water.compositor index 67bf908960..8d9c3cb396 100644 --- a/files/water/water.compositor +++ b/files/water/water.compositor @@ -1,4 +1,4 @@ -compositor Water +compositor UnderwaterNoMRT { technique { @@ -13,9 +13,34 @@ compositor Water pass render_quad { - material Water/Compositor + material Water/CompositorNoMRT input 0 rt0 } } } -} +} + + +compositor Underwater +{ + technique + { + texture_ref scene gbuffer mrt_output + texture rt0 target_width target_height PF_R8G8B8 + + target rt0 { input previous } + + target_output + { + // Start with clear output + input none + + pass render_quad + { + material Water/Compositor + input 0 rt0 + input 3 scene 1 + } + } + } +} diff --git a/files/water/water.material b/files/water/water.material index cf7a414cf8..3afbaacd5a 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -1,21 +1,21 @@ vertex_program Water/GlassVP cg { - source GlassVP.cg - entry_point glass_vp - profiles vs_1_1 arbvp1 + source GlassVP.cg + entry_point glass_vp + profiles vs_1_1 arbvp1 - default_params - { - param_named_auto worldViewProj worldviewproj_matrix - } + default_params + { + param_named_auto worldViewProj worldviewproj_matrix + } } fragment_program Water/GlassFP cg { - source GlassFP.cg - entry_point main_ps - profiles ps_2_0 arbfp1 + source GlassFP.cg + entry_point main_ps + profiles ps_2_0 arbfp1 } vertex_program Water_VP cg @@ -104,45 +104,92 @@ material Water } } +material Water/CompositorNoMRT +{ + technique + { + pass + { + depth_check off + vertex_program_ref Water/GlassVP + { + param_named_auto timeVal time 0.25 + param_named scale float 0.1 + } + + fragment_program_ref Water/GlassFP + { + param_named tintColour float4 0 0.35 0.35 1 + } + + texture_unit RT + { + tex_coord_set 0 + tex_address_mode clamp + filtering linear linear linear + } + + texture_unit + { + texture WaterNormal2.tga 2d + tex_coord_set 1 + //tex_address_mode clamp + filtering linear linear linear + } + texture_unit + { + texture caustic_0.png 2d + tex_coord_set 2 + //tex_address_mode clamp + filtering linear linear linear + } + } + } +} + material Water/Compositor { - technique - { - pass - { - depth_check off - vertex_program_ref Water/GlassVP - { - param_named_auto timeVal time 0.25 - param_named scale float 0.1 - } + technique + { + pass + { + depth_check off + vertex_program_ref Water/GlassVP + { + param_named_auto timeVal time 0.25 + param_named scale float 0.1 + } - fragment_program_ref Water/GlassFP - { - param_named tintColour float4 0 0.35 0.35 1 - } + fragment_program_ref Water/GlassFP + { + param_named tintColour float4 0 0.35 0.35 1 + } - texture_unit RT - { - tex_coord_set 0 - tex_address_mode clamp - filtering linear linear linear - } + texture_unit RT + { + tex_coord_set 0 + tex_address_mode clamp + filtering linear linear linear + } - texture_unit - { - texture WaterNormal2.tga 2d - tex_coord_set 1 - //tex_address_mode clamp - filtering linear linear linear - } - texture_unit - { - texture caustic_0.png 2d - tex_coord_set 2 - //tex_address_mode clamp - filtering linear linear linear - } - } - } + texture_unit + { + texture WaterNormal2.tga 2d + tex_coord_set 2 + //tex_address_mode clamp + filtering linear linear linear + } + texture_unit + { + texture caustic_0.png 2d + tex_coord_set 3 + //tex_address_mode clamp + filtering linear linear linear + } + + texture_unit DepthMap + { + } + } + } } From c0f991ac0ae4353da2f6a9f81dc883e846b411cb Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 18:51:30 +0200 Subject: [PATCH 402/488] underwater depth effect --- apps/openmw/mwrender/renderingmanager.cpp | 2 +- files/CMakeLists.txt | 3 +- files/water/GlassFP.cg | 15 ------ files/water/GlassVP.cg | 24 --------- files/water/underwater.cg | 61 +++++++++++++++++++++++ files/water/water.cg | 3 ++ files/water/water.material | 39 ++++++++------- 7 files changed, 87 insertions(+), 60 deletions(-) delete mode 100644 files/water/GlassFP.cg delete mode 100644 files/water/GlassVP.cg create mode 100644 files/water/underwater.cg diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 362a04ca50..8d84af98f4 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -59,9 +59,9 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const { CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbuffer"); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbuffer", true); + CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "Underwater"); CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "gbufferFinalizer"); CompositorManager::getSingleton().setCompositorEnabled(mRendering.getViewport(), "gbufferFinalizer", true); - CompositorManager::getSingleton().addCompositor(mRendering.getViewport(), "Underwater"); } else { diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 377e2d1f8e..507f82c1a3 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -1,8 +1,7 @@ project(resources) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/caustic_0.png "${OpenMW_BINARY_DIR}/resources/water/caustic_0.png" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassFP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassFP.cg" COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/GlassVP.cg "${OpenMW_BINARY_DIR}/resources/water/GlassVP.cg" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/underwater.cg "${OpenMW_BINARY_DIR}/resources/water/underwater.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/perlinvolume.dds "${OpenMW_BINARY_DIR}/resources/water/perlinvolume.dds" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.compositor "${OpenMW_BINARY_DIR}/resources/water/water.compositor" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.material "${OpenMW_BINARY_DIR}/resources/water/water.material" COPYONLY) diff --git a/files/water/GlassFP.cg b/files/water/GlassFP.cg deleted file mode 100644 index 1e6c539847..0000000000 --- a/files/water/GlassFP.cg +++ /dev/null @@ -1,15 +0,0 @@ - -float4 main_ps(float2 iTexCoord : TEXCOORD0, - float3 noiseCoord : TEXCOORD1, - uniform sampler2D RT : register(s0), - uniform sampler2D NormalMap : register(s1), - uniform sampler2D CausticMap : register(s2), - uniform float4 tintColour) : COLOR -{ - float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; - - - return tex2D(RT, iTexCoord + normal.xy * 0.015) + - (tex2D(CausticMap, noiseCoord) / 5) + - tintColour ; -} diff --git a/files/water/GlassVP.cg b/files/water/GlassVP.cg deleted file mode 100644 index 71153769c2..0000000000 --- a/files/water/GlassVP.cg +++ /dev/null @@ -1,24 +0,0 @@ -void glass_vp -( - in float4 inPos : POSITION, - - out float4 pos : POSITION, - out float2 uv0 : TEXCOORD0, - out float4 noiseCoord : TEXCOORD1, - - uniform float4x4 worldViewProj, - uniform float timeVal, - uniform float scale -) -{ - // Use standardise transform, so work accord with render system specific (RS depth, requires texture flipping, etc) - pos = mul(worldViewProj, inPos); - - // The input positions adjusted by texel offsets, so clean up inaccuracies - inPos.xy = sign(inPos.xy); - - // Convert to image-space - uv0 = (float2(inPos.x, -inPos.y) + 1.0f) * 0.5f; - noiseCoord = (pos + timeVal) * scale; -} - diff --git a/files/water/underwater.cg b/files/water/underwater.cg new file mode 100644 index 0000000000..a734c316f7 --- /dev/null +++ b/files/water/underwater.cg @@ -0,0 +1,61 @@ +void main_vp +( + in float4 inPos : POSITION, + + out float4 pos : POSITION, + out float2 uv0 : TEXCOORD0, + out float4 noiseCoord : TEXCOORD1, + + uniform float4x4 worldViewProj, + uniform float timeVal, + uniform float scale +) +{ + // Use standardise transform, so work accord with render system specific (RS depth, requires texture flipping, etc) + pos = mul(worldViewProj, inPos); + + // The input positions adjusted by texel offsets, so clean up inaccuracies + inPos.xy = sign(inPos.xy); + + // Convert to image-space + uv0 = (float2(inPos.x, -inPos.y) + 1.0f) * 0.5f; + noiseCoord = (pos + timeVal) * scale; +} + + + +float4 main_fp_nomrt (float2 iTexCoord : TEXCOORD0, + float3 noiseCoord : TEXCOORD1, + uniform sampler2D RT : register(s0), + uniform sampler2D NormalMap : register(s1), + uniform sampler2D CausticMap : register(s2), + uniform float4 tintColour) : COLOR +{ + float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; + + return tex2D(RT, iTexCoord + normal.xy * 0.015) + + (tex2D(CausticMap, noiseCoord) / 5) + + tintColour ; +} + + +float4 main_fp (float2 iTexCoord : TEXCOORD0, + float3 noiseCoord : TEXCOORD1, + uniform float far, + uniform sampler2D RT : register(s0), + uniform sampler2D NormalMap : register(s1), + uniform sampler2D CausticMap : register(s2), + uniform sampler2D DepthMap : register(s3), + uniform float4 tintColour) : COLOR +{ + float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; + + float depth = tex2D(DepthMap, iTexCoord).r * far; + depth = saturate(depth / 2000.f); + + float4 color = tex2D(RT, iTexCoord + normal.xy * 0.015) + + (tex2D(CausticMap, noiseCoord) / 5) + + tintColour; + + return lerp(color, float4(0, 0.65, 0.65, 1), depth); +} diff --git a/files/water/water.cg b/files/water/water.cg index 85c86f3b6d..a3393e3bf0 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -98,6 +98,9 @@ void main_fp oColor.xyz = lerp(refraction.xyz, reflection.xyz, opacity); + oColor.xyz += isUnderwater * float3(0, 0.35, 0.35); // underwater tint color + oColor.xyz = lerp(oColor.xyz, float3(0, 0.65, 0.65), saturate(isUnderwater * (iDepth / 2000.f))); // underwater fog + // add fog float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); diff --git a/files/water/water.material b/files/water/water.material index 3afbaacd5a..1b8573c4ae 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -1,7 +1,7 @@ -vertex_program Water/GlassVP cg +vertex_program UnderwaterEffectVP cg { - source GlassVP.cg - entry_point glass_vp + source underwater.cg + entry_point main_vp profiles vs_1_1 arbvp1 default_params @@ -11,10 +11,17 @@ vertex_program Water/GlassVP cg } -fragment_program Water/GlassFP cg +fragment_program UnderwaterEffectFP_NoMRT cg { - source GlassFP.cg - entry_point main_ps + source underwater.cg + entry_point main_fp_nomrt + profiles ps_2_0 arbfp1 +} + +fragment_program UnderwaterEffectFP cg +{ + source underwater.cg + entry_point main_fp profiles ps_2_0 arbfp1 } @@ -111,13 +118,13 @@ material Water/CompositorNoMRT pass { depth_check off - vertex_program_ref Water/GlassVP + vertex_program_ref UnderwaterEffectVP { param_named_auto timeVal time 0.25 param_named scale float 0.1 } - fragment_program_ref Water/GlassFP + fragment_program_ref UnderwaterEffectFP_NoMRT { param_named tintColour float4 0 0.35 0.35 1 } @@ -154,37 +161,33 @@ material Water/Compositor pass { depth_check off - vertex_program_ref Water/GlassVP + vertex_program_ref UnderwaterEffectVP { param_named_auto timeVal time 0.25 param_named scale float 0.1 } - fragment_program_ref Water/GlassFP + fragment_program_ref UnderwaterEffectFP { param_named tintColour float4 0 0.35 0.35 1 + param_named_auto far far_clip_distance } texture_unit RT { - tex_coord_set 0 + tex_coord_set 0 tex_address_mode clamp - filtering linear linear linear } texture_unit { texture WaterNormal2.tga 2d - tex_coord_set 2 - //tex_address_mode clamp - filtering linear linear linear + tex_coord_set 2 } texture_unit { texture caustic_0.png 2d - tex_coord_set 3 - //tex_address_mode clamp - filtering linear linear linear + tex_coord_set 3 } texture_unit DepthMap From f008ca166b1140a2f8c5ac068b57cc7040456729 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 19:21:28 +0200 Subject: [PATCH 403/488] restored moons like they were --- apps/openmw/mwworld/weather.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 0d86d36cab..4a5586f55e 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -606,13 +606,13 @@ void WeatherManager::update(float duration) float moonHeight = 1-std::abs((night-0.5)*2); int facing = (mHour > 0.f && mHour<12.f) ? 1 : -1; Vector3 masser( - -(1-moonHeight)*facing, - -(1-moonHeight)*facing, + (1-moonHeight)*facing, + (1-moonHeight)*facing, moonHeight); Vector3 secunda( - -(1-moonHeight)*facing*0.8, - -(1-moonHeight)*facing*1.25, + (1-moonHeight)*facing*0.8, + (1-moonHeight)*facing*1.25, moonHeight); mRendering->getSkyManager()->setMasserDirection(masser); From c49d5dd40bc8c044e0194f1b6a9fb0f312a8582d Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 19:23:19 +0200 Subject: [PATCH 404/488] another sky tweak --- apps/openmw/mwrender/sky.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index d22f20a222..188ec3b831 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -848,7 +848,6 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather) mSunGlare->setVisibility(weather.mGlareView * mGlareFade * strength); - if (strength < 0.4) strength = 0.4; mSun->setVisibility(weather.mGlareView * strength); mAtmosphereNight->setVisible(weather.mNight && mEnabled); From bcee5d5943592584fb39921686301088ecbd1133 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 6 Apr 2012 19:40:37 +0200 Subject: [PATCH 405/488] fix areas with only water (no objects below) --- files/water/water.cg | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/files/water/water.cg b/files/water/water.cg index a3393e3bf0..bbd42874bc 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -59,8 +59,10 @@ void main_fp oColor.a = 1; // Sample screen-space depth map and subtract pixel depth to get the real water depth - float depth1 = tex2D(depthMap, screenCoords).r * far - iDepth; + float depthTex = tex2D(depthMap, screenCoords).r; + float depth1 = depthTex * far - iDepth; depth1 = saturate(depth1 / 500.f); + depth1 = (depthTex == 0 ? 1 : depth1); // Simple wave effect. to be replaced by something better float2 uv1 = iUv + time * float2(0.5, 0); From 87e8917c4dc3a4a7df0a02f0e935aa3c3e965eb5 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 6 Apr 2012 10:43:14 -0700 Subject: [PATCH 406/488] Don't try to play sounds when no sound output is initialized --- apps/openmw/mwsound/openal_output.cpp | 4 ++++ apps/openmw/mwsound/sound_output.hpp | 4 ++++ apps/openmw/mwsound/soundmanager.cpp | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 610a797a2b..9959bedc84 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -508,6 +508,8 @@ void OpenAL_Output::init(const std::string &devname) } if(mFreeSources.empty()) fail("Could not allocate any sources"); + + mInitialized = true; } void OpenAL_Output::deinit() @@ -535,6 +537,8 @@ void OpenAL_Output::deinit() if(mDevice) alcCloseDevice(mDevice); mDevice = 0; + + mInitialized = false; } diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 774e42efa3..7efed81293 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -35,15 +35,19 @@ namespace MWSound Sound_Output(const Sound_Output &rhs); protected: + bool mInitialized; Ogre::Vector3 mPos; Sound_Output(SoundManager &mgr) : mManager(mgr) + , mInitialized(false) , mPos(0.0f, 0.0f, 0.0f) { } public: virtual ~Sound_Output() { } + bool isInitialized() { return mInitialized; } + friend class OpenAL_Output; friend class SoundManager; }; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 145390e3e1..eaa18e6dcd 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -136,6 +136,8 @@ namespace MWSound void SoundManager::streamMusicFull(const std::string& filename) { + if(!mOutput->isInitialized()) + return; std::cout <<"Playing "<isInitialized()) + return; try { // The range values are not tested @@ -210,6 +214,8 @@ namespace MWSound SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, int mode) { SoundPtr sound; + if(!mOutput->isInitialized()) + return sound; try { float basevol = 1.0f; /* TODO: volume settings */ @@ -237,6 +243,8 @@ namespace MWSound float volume, float pitch, int mode) { SoundPtr sound; + if(!mOutput->isInitialized()) + return sound; try { // Look up the sound in the ESM data @@ -450,6 +458,8 @@ namespace MWSound void SoundManager::update(float duration) { + if(!mOutput->isInitialized()) + return; updateSounds(duration); updateRegionSound(duration); } From 72b3f6121d25a7fd036de25ebabc5952d16c67fb Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sat, 7 Apr 2012 12:37:15 +0300 Subject: [PATCH 407/488] Windows Pinning: add files to CMakeLists.txt Add new files (map_window and window_pinnable_base) --- apps/openmw/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 3dabc9ac8d..e4f618eb9c 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -25,6 +25,7 @@ add_openmw_dir (mwinput add_openmw_dir (mwgui layouts text_input widgets race class birth review window_manager console dialogue dialogue_history window_base stats_window messagebox journalwindow charactercreation + map_window window_pinnable_base ) add_openmw_dir (mwdialogue From e21e8c221d3ba16700d37ea5cda0b5624d0c6d48 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sat, 7 Apr 2012 12:54:30 +0200 Subject: [PATCH 408/488] Added explicit cast to char in ToUTF8::windows_XXXX tables. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added explicit cast to char, without that gcc 4.7 (with default settings) is showing a lot of: narrowing conversion of ‘...’ from ‘int’ to ‘char’ inside { } is ill-formed in C++11 [-Wnarrowing] warnings. --- components/to_utf8/gen_iconv.cpp | 2 +- components/to_utf8/tables_gen.hpp | 1536 ++++++++++++++--------------- 2 files changed, 769 insertions(+), 769 deletions(-) diff --git a/components/to_utf8/gen_iconv.cpp b/components/to_utf8/gen_iconv.cpp index 6202052455..b7298e304a 100644 --- a/components/to_utf8/gen_iconv.cpp +++ b/components/to_utf8/gen_iconv.cpp @@ -12,7 +12,7 @@ void tab() { cout << " "; } // write one number with a space in front of it and a comma after it void num(unsigned char i, bool last) { - cout << " 0x" << (unsigned)i; + cout << " (char)0x" << (unsigned)i; if(!last) cout << ","; } diff --git a/components/to_utf8/tables_gen.hpp b/components/to_utf8/tables_gen.hpp index 79945bddca..1084ca28f9 100644 --- a/components/to_utf8/tables_gen.hpp +++ b/components/to_utf8/tables_gen.hpp @@ -10,785 +10,785 @@ namespace ToUTF8 /// Serbian (Latin script), Romanian and Albanian. static char windows_1250[] = { - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x8, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x9, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xa, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xb, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xc, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xd, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xe, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xf, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x12, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x13, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x14, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x15, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x16, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x17, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x18, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x19, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x21, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x22, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x23, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x24, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x25, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x26, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x27, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x28, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x29, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x31, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x32, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x33, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x34, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x35, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x36, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x37, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x38, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x39, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x40, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x41, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x42, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x43, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x44, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x45, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x46, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x47, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x48, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x49, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x50, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x51, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x52, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x53, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x54, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x55, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x56, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x57, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x58, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x59, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x60, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x61, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x62, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x63, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x64, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x65, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x66, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x67, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x68, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x69, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x70, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x71, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x72, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x73, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x74, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x75, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x76, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x77, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x78, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x79, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x82, 0xac, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0x9a, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0x9e, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa6, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa1, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0xb0, 0x0, 0x0, - 0x2, 0xc5, 0xa0, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xb9, 0x0, 0x0, - 0x2, 0xc5, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xb9, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0x98, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x99, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9c, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9d, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa2, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x93, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x94, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x84, 0xa2, 0x0, 0x0, - 0x2, 0xc5, 0xa1, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xba, 0x0, 0x0, - 0x2, 0xc5, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xa5, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa0, 0x0, 0x0, 0x0, - 0x2, 0xcb, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xcb, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x81, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa8, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x9e, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xac, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xcb, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb4, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb5, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb8, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x85, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x9f, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xcb, 0x9d, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xbc, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x94, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x81, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0xb9, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x86, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x8c, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x89, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8b, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8d, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8e, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x8e, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x90, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x83, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x93, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x94, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x90, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x96, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x97, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9c, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9d, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xa2, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9f, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x95, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa1, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa2, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x83, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x8d, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x99, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x8f, 0x0, 0x0, 0x0, - 0x2, 0xc4, 0x91, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x88, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb3, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb4, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x91, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0x99, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xaf, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbc, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xa3, 0x0, 0x0, 0x0, - 0x2, 0xcb, 0x99, 0x0, 0x0, 0x0 + (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x8, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x9, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xa, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xb, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xc, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xd, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xe, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xf, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x10, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x11, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x12, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x13, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x14, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x15, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x16, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x17, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x18, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x19, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x21, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x22, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x23, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x24, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x25, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x26, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x27, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x28, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x29, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x30, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x31, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x32, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x33, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x34, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x35, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x36, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x37, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x38, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x39, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x40, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x41, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x42, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x43, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x44, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x45, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x46, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x47, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x48, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x49, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x50, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x51, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x52, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x53, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x54, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x55, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x56, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x57, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x58, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x59, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x60, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x61, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x62, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x63, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x64, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x65, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x66, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x67, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x68, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x69, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x70, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x71, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x72, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x73, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x74, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x75, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x76, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x77, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x78, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x79, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x82, (char)0xac, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0x9a, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0x9e, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa6, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa1, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0xb0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xb9, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xb9, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0x98, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x99, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9c, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9d, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa2, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x93, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x94, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x84, (char)0xa2, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xba, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x81, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x9e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xac, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x85, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x9f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x9d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xbc, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x94, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x81, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0xb9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x86, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x8c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x89, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x8e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x90, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x83, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x93, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x94, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x90, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x96, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x97, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x95, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x83, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x8d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x99, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x8f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc4, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x88, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x99, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xaf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbc, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x99, (char)0x0, (char)0x0, (char)0x0 }; /// Cyrillic alphabet such as Russian, Bulgarian, Serbian Cyrillic /// and other languages static char windows_1251[] = { - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x8, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x9, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xa, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xb, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xc, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xd, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xe, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xf, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x12, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x13, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x14, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x15, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x16, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x17, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x18, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x19, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x21, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x22, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x23, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x24, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x25, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x26, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x27, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x28, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x29, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x31, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x32, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x33, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x34, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x35, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x36, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x37, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x38, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x39, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x40, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x41, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x42, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x43, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x44, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x45, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x46, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x47, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x48, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x49, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x50, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x51, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x52, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x53, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x54, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x55, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x56, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x57, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x58, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x59, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x60, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x61, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x62, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x63, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x64, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x65, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x66, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x67, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x68, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x69, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x70, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x71, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x72, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x73, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x74, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x75, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x76, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x77, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x78, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x79, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x83, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9a, 0x0, 0x0, - 0x2, 0xd1, 0x93, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9e, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa6, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa1, 0x0, 0x0, - 0x3, 0xe2, 0x82, 0xac, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xb0, 0x0, 0x0, - 0x2, 0xd0, 0x89, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xb9, 0x0, 0x0, - 0x2, 0xd0, 0x8a, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x8c, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x8b, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x8f, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x92, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x98, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x99, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9c, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9d, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa2, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x93, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x94, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x84, 0xa2, 0x0, 0x0, - 0x2, 0xd1, 0x99, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xba, 0x0, 0x0, - 0x2, 0xd1, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x9c, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x9f, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa0, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x8e, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x9e, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x88, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xd2, 0x90, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x81, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xac, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x86, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x96, 0x0, 0x0, 0x0, - 0x2, 0xd2, 0x91, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb5, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x91, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x84, 0x96, 0x0, 0x0, - 0x2, 0xd1, 0x94, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x85, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x95, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x97, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x90, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x91, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x92, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x93, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x94, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x95, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x96, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x97, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x99, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9c, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9d, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9e, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0x9f, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa0, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa1, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa2, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa3, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa5, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa6, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa8, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xaa, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xac, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xaf, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb2, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb3, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb4, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb5, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb8, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xb9, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xbc, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xd0, 0xbf, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x80, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x81, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x83, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x85, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x86, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x88, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x89, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8a, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8b, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8c, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8d, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8e, 0x0, 0x0, 0x0, - 0x2, 0xd1, 0x8f, 0x0, 0x0, 0x0 + (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x8, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x9, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xa, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xb, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xc, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xd, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xe, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xf, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x10, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x11, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x12, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x13, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x14, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x15, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x16, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x17, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x18, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x19, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x21, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x22, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x23, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x24, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x25, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x26, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x27, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x28, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x29, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x30, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x31, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x32, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x33, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x34, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x35, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x36, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x37, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x38, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x39, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x40, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x41, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x42, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x43, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x44, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x45, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x46, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x47, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x48, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x49, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x50, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x51, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x52, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x53, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x54, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x55, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x56, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x57, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x58, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x59, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x60, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x61, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x62, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x63, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x64, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x65, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x66, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x67, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x68, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x69, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x70, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x71, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x72, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x73, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x74, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x75, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x76, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x77, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x78, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x79, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x83, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9a, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x93, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9e, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa6, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa1, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x82, (char)0xac, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xb0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x89, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xb9, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x8a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x8c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x8b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x8f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x92, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x98, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x99, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9c, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9d, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa2, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x93, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x94, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x84, (char)0xa2, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x99, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xba, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x9c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x9f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x8e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x9e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x88, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd2, (char)0x90, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x81, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xac, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x86, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x96, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd2, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x84, (char)0x96, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x94, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x85, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x95, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x97, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x90, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x92, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x93, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x94, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x95, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x96, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x97, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x99, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0x9f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xaa, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xac, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xaf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xb9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xbc, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd0, (char)0xbf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x80, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x81, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x83, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x85, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x86, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x88, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x89, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xd1, (char)0x8f, (char)0x0, (char)0x0, (char)0x0 }; /// Latin alphabet used by English and some other Western languages static char windows_1252[] = { - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x8, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x9, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xa, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xb, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xc, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xd, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xe, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xf, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x12, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x13, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x14, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x15, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x16, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x17, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x18, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x19, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x21, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x22, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x23, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x24, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x25, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x26, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x27, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x28, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x29, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x31, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x32, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x33, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x34, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x35, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x36, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x37, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x38, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x39, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x40, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x41, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x42, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x43, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x44, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x45, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x46, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x47, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x48, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x49, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x4f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x50, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x51, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x52, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x53, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x54, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x55, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x56, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x57, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x58, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x59, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x5f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x60, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x61, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x62, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x63, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x64, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x65, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x66, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x67, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x68, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x69, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x6f, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x70, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x71, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x72, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x73, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x74, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x75, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x76, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x77, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x78, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x79, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7a, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7b, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7c, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7d, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x7f, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x82, 0xac, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0x9a, 0x0, 0x0, - 0x2, 0xc6, 0x92, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9e, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa6, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa1, 0x0, 0x0, - 0x2, 0xcb, 0x86, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xb0, 0x0, 0x0, - 0x2, 0xc5, 0xa0, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xb9, 0x0, 0x0, - 0x2, 0xc5, 0x92, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x2, 0xc5, 0xbd, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x3, 0xe2, 0x80, 0x98, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x99, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9c, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x9d, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xa2, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x93, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0x94, 0x0, 0x0, - 0x2, 0xcb, 0x9c, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x84, 0xa2, 0x0, 0x0, - 0x2, 0xc5, 0xa1, 0x0, 0x0, 0x0, - 0x3, 0xe2, 0x80, 0xba, 0x0, 0x0, - 0x2, 0xc5, 0x93, 0x0, 0x0, 0x0, - 0x1, 0x20, 0x0, 0x0, 0x0, 0x0, // not part of this charset - 0x2, 0xc5, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xc5, 0xb8, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa0, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa1, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa2, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa3, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa5, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa8, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xaa, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xac, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xaf, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb2, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb3, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb4, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb5, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb8, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xb9, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbc, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xc2, 0xbf, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x80, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x81, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x82, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x83, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x84, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x85, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x86, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x87, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x88, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x89, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8a, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8b, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8c, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8d, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8e, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x8f, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x90, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x91, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x92, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x93, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x94, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x95, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x96, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x97, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x98, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x99, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9a, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9b, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9c, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9d, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9e, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0x9f, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa0, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa1, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa2, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa3, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa4, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa5, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa6, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa7, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa8, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xa9, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xaa, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xab, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xac, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xad, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xae, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xaf, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb0, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb1, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb2, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb3, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb4, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb5, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb6, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb7, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb8, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xb9, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xba, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbb, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbc, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbd, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbe, 0x0, 0x0, 0x0, - 0x2, 0xc3, 0xbf, 0x0, 0x0, 0x0 + (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x8, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x9, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xa, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xb, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xc, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xd, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xe, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0xf, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x10, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x11, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x12, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x13, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x14, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x15, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x16, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x17, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x18, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x19, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x1f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x21, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x22, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x23, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x24, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x25, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x26, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x27, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x28, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x29, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x2f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x30, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x31, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x32, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x33, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x34, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x35, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x36, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x37, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x38, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x39, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x3f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x40, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x41, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x42, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x43, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x44, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x45, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x46, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x47, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x48, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x49, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x4f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x50, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x51, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x52, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x53, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x54, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x55, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x56, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x57, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x58, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x59, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x5f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x60, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x61, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x62, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x63, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x64, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x65, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x66, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x67, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x68, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x69, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x6f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x70, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x71, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x72, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x73, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x74, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x75, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x76, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x77, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x78, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x79, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7a, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7b, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7c, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7d, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7e, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x7f, (char)0x0, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x82, (char)0xac, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0x9a, (char)0x0, (char)0x0, + (char)0x2, (char)0xc6, (char)0x92, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9e, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa6, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa1, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x86, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xb0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xb9, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x92, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x2, (char)0xc5, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x3, (char)0xe2, (char)0x80, (char)0x98, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x99, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9c, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x9d, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xa2, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x93, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0x94, (char)0x0, (char)0x0, + (char)0x2, (char)0xcb, (char)0x9c, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x84, (char)0xa2, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x3, (char)0xe2, (char)0x80, (char)0xba, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0x93, (char)0x0, (char)0x0, (char)0x0, + (char)0x1, (char)0x20, (char)0x0, (char)0x0, (char)0x0, (char)0x0, // not part of this charset + (char)0x2, (char)0xc5, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc5, (char)0xb8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xaa, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xac, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xaf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xb9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbc, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc2, (char)0xbf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x80, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x81, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x82, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x83, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x84, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x85, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x86, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x87, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x88, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x89, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x8f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x90, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x91, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x92, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x93, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x94, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x95, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x96, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x97, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x98, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x99, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9a, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9b, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9c, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9d, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9e, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0x9f, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xa9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xaa, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xab, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xac, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xad, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xae, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xaf, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb0, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb1, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb2, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb3, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb4, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb5, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb6, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb7, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb8, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xb9, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xba, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbb, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbc, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbd, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbe, (char)0x0, (char)0x0, (char)0x0, + (char)0x2, (char)0xc3, (char)0xbf, (char)0x0, (char)0x0, (char)0x0 }; } From 1bf79fd022232ca7ecd5e4904324fc48c8cf9609 Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sat, 7 Apr 2012 16:47:41 +0300 Subject: [PATCH 409/488] Windows pinning: support for MapWindow Set correct skin for the Map Window. --- files/mygui/openmw_map_window_layout.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/mygui/openmw_map_window_layout.xml b/files/mygui/openmw_map_window_layout.xml index f5c2c9991d..fbba8ddf47 100644 --- a/files/mygui/openmw_map_window_layout.xml +++ b/files/mygui/openmw_map_window_layout.xml @@ -1,7 +1,7 @@ - + From dbf75470035b0b92b49bea0c60a8772ca9a40726 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 16:33:03 +0200 Subject: [PATCH 410/488] fixed first weather transition being instant --- apps/openmw/mwworld/weather.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 4a5586f55e..d92a36c833 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -341,7 +341,6 @@ void WeatherManager::setWeather(const String& weather, bool instant) { mNextWeather = ""; mCurrentWeather = weather; - mFirstUpdate = false; } else { @@ -355,6 +354,7 @@ void WeatherManager::setWeather(const String& weather, bool instant) mNextWeather = weather; mRemainingTransitionTime = mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*3600; } + mFirstUpdate = false; } WeatherResult WeatherManager::getResult(const String& weather) From 96c37d3e7cea65d64dd7273eb9d375d3f789f33c Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 16:55:32 +0200 Subject: [PATCH 411/488] more accurate fog, TODO: apply this to the terrain --- apps/openmw/mwworld/weather.cpp | 5 ++++- components/nifogre/ogre_nif_loader.cpp | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index d92a36c833..fb0480171d 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -334,8 +334,11 @@ WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, MWWorld::E void WeatherManager::setWeather(const String& weather, bool instant) { - if (weather == mCurrentWeather && mNextWeather == "") + if (weather == mCurrentWeather && mNextWeather == "") + { + mFirstUpdate = false; return; + } if (instant || mFirstUpdate) { diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index d2b53291e6..886c4b451a 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -328,6 +328,7 @@ void NIFLoader::createMaterial(const String &name, " out float4 oNormal : TEXCOORD2, \n" " out float oDepth : TEXCOORD3, \n" " out float4 oVertexColour : TEXCOORD4, \n" + " uniform float4 cameraPosObjSpace, \n" " uniform float4x4 worldViewProj \n" ") \n" "{ \n" @@ -335,12 +336,13 @@ void NIFLoader::createMaterial(const String &name, " oUV = uv; \n" " oNormal = normal; \n" " oPosition = mul( worldViewProj, position ); \n" - " oDepth = oPosition.z; \n" + " oDepth = length(position.xyz - cameraPosObjSpace.xyz); \n" " oPositionObjSpace = position; \n" "}"; vertex->setSource(outStream.str()); vertex->load(); vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); + vertex->getDefaultParameters()->setNamedAutoConstant("cameraPosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); } else vertex = mgr.getByName("main_vp"); From 12f7bae526b89aecb024b5f61d2cd77528e5c602 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 7 Apr 2012 18:37:41 +0200 Subject: [PATCH 412/488] added known spells and selected spell to NpcStats --- apps/openmw/mwmechanics/npcstats.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index aeb5f56d5b..59bfa2ac0a 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -2,6 +2,7 @@ #define GAME_MWMECHANICS_NPCSTATS_H #include +#include #include "stat.hpp" @@ -25,6 +26,9 @@ namespace MWMechanics bool mSneak; bool mCombat; + std::set mKnownSpells; + std::string mSelectedSpell; // can be an empty string (no spell selected) + NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), mCombat (false) {} }; From c94d6830145dcad282e8c3ac412308746c8692a2 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 7 Apr 2012 18:46:50 +0200 Subject: [PATCH 413/488] fill in initial spell list from NPC record --- apps/openmw/mwclass/npc.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 83a94d27d1..2cf4cf41c3 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -61,6 +61,10 @@ namespace MWClass for (int i=0; i<27; ++i) data->mNpcStats.mSkill[i].setBase (ref->base->npdt52.skills[i]); + for (std::vector::const_iterator iter (ref->base->spells.list.begin()); + iter!=ref->base->spells.list.end(); ++iter) + data->mNpcStats.mKnownSpells.insert (*iter); + // creature stats data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength); data->mCreatureStats.mAttributes[1].set (ref->base->npdt52.intelligence); From d5a7d418dd5176621dedc89e4153af49dab33bf9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 7 Apr 2012 19:53:49 +0200 Subject: [PATCH 414/488] added getValue function to Class hierarchy --- apps/openmw/mwclass/apparatus.cpp | 8 ++++++++ apps/openmw/mwclass/apparatus.hpp | 3 +++ apps/openmw/mwclass/armor.cpp | 8 ++++++++ apps/openmw/mwclass/armor.hpp | 3 +++ apps/openmw/mwclass/book.cpp | 8 ++++++++ apps/openmw/mwclass/book.hpp | 3 +++ apps/openmw/mwclass/clothing.cpp | 8 ++++++++ apps/openmw/mwclass/clothing.hpp | 3 +++ apps/openmw/mwclass/ingredient.cpp | 8 ++++++++ apps/openmw/mwclass/ingredient.hpp | 3 +++ apps/openmw/mwclass/light.cpp | 8 ++++++++ apps/openmw/mwclass/light.hpp | 3 +++ apps/openmw/mwclass/lockpick.cpp | 8 ++++++++ apps/openmw/mwclass/lockpick.hpp | 3 +++ apps/openmw/mwclass/misc.cpp | 8 ++++++++ apps/openmw/mwclass/misc.hpp | 3 +++ apps/openmw/mwclass/potion.cpp | 8 ++++++++ apps/openmw/mwclass/potion.hpp | 3 +++ apps/openmw/mwclass/probe.cpp | 8 ++++++++ apps/openmw/mwclass/probe.hpp | 3 +++ apps/openmw/mwclass/repair.cpp | 8 ++++++++ apps/openmw/mwclass/repair.hpp | 3 +++ apps/openmw/mwclass/weapon.cpp | 8 ++++++++ apps/openmw/mwclass/weapon.hpp | 3 +++ apps/openmw/mwworld/class.cpp | 5 +++++ apps/openmw/mwworld/class.hpp | 4 ++++ 26 files changed, 141 insertions(+) diff --git a/apps/openmw/mwclass/apparatus.cpp b/apps/openmw/mwclass/apparatus.cpp index e95fb572f3..4562057de4 100644 --- a/apps/openmw/mwclass/apparatus.cpp +++ b/apps/openmw/mwclass/apparatus.cpp @@ -70,6 +70,14 @@ namespace MWClass return ref->base->script; } + int Apparatus::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Apparatus::registerSelf() { boost::shared_ptr instance (new Apparatus); diff --git a/apps/openmw/mwclass/apparatus.hpp b/apps/openmw/mwclass/apparatus.hpp index c0849e1fe2..861610f6cc 100644 --- a/apps/openmw/mwclass/apparatus.hpp +++ b/apps/openmw/mwclass/apparatus.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr) const; diff --git a/apps/openmw/mwclass/armor.cpp b/apps/openmw/mwclass/armor.cpp index e1c2734f0e..dfc40882ce 100644 --- a/apps/openmw/mwclass/armor.cpp +++ b/apps/openmw/mwclass/armor.cpp @@ -160,6 +160,14 @@ namespace MWClass return ESM::Skill::HeavyArmor; } + int Armor::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Armor::registerSelf() { boost::shared_ptr instance (new Armor); diff --git a/apps/openmw/mwclass/armor.hpp b/apps/openmw/mwclass/armor.hpp index 2b66ff8280..de5ca39835 100644 --- a/apps/openmw/mwclass/armor.hpp +++ b/apps/openmw/mwclass/armor.hpp @@ -40,6 +40,9 @@ namespace MWClass /// Return the index of the skill this item corresponds to when equiopped or -1, if there is /// no such skill. + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/book.cpp b/apps/openmw/mwclass/book.cpp index 0a81ebafb7..08811d2aa0 100644 --- a/apps/openmw/mwclass/book.cpp +++ b/apps/openmw/mwclass/book.cpp @@ -72,6 +72,14 @@ namespace MWClass return ref->base->script; } + int Book::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Book::registerSelf() { boost::shared_ptr instance (new Book); diff --git a/apps/openmw/mwclass/book.hpp b/apps/openmw/mwclass/book.hpp index ccbbfb4b2d..4738187cd6 100644 --- a/apps/openmw/mwclass/book.hpp +++ b/apps/openmw/mwclass/book.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/clothing.cpp b/apps/openmw/mwclass/clothing.cpp index 4fe19ada40..aa58822f97 100644 --- a/apps/openmw/mwclass/clothing.cpp +++ b/apps/openmw/mwclass/clothing.cpp @@ -123,6 +123,14 @@ namespace MWClass return -1; } + int Clothing::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Clothing::registerSelf() { boost::shared_ptr instance (new Clothing); diff --git a/apps/openmw/mwclass/clothing.hpp b/apps/openmw/mwclass/clothing.hpp index 171b062461..97e09012d5 100644 --- a/apps/openmw/mwclass/clothing.hpp +++ b/apps/openmw/mwclass/clothing.hpp @@ -34,6 +34,9 @@ namespace MWClass /// Return the index of the skill this item corresponds to when equiopped or -1, if there is /// no such skill. + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/ingredient.cpp b/apps/openmw/mwclass/ingredient.cpp index 1a7edf6325..84e7ba12ac 100644 --- a/apps/openmw/mwclass/ingredient.cpp +++ b/apps/openmw/mwclass/ingredient.cpp @@ -68,6 +68,14 @@ namespace MWClass return ref->base->script; } + int Ingredient::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Ingredient::registerSelf() { boost::shared_ptr instance (new Ingredient); diff --git a/apps/openmw/mwclass/ingredient.hpp b/apps/openmw/mwclass/ingredient.hpp index 9463dcf8d7..2d77176727 100644 --- a/apps/openmw/mwclass/ingredient.hpp +++ b/apps/openmw/mwclass/ingredient.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/light.cpp b/apps/openmw/mwclass/light.cpp index e2e63a89bb..9c31706dc6 100644 --- a/apps/openmw/mwclass/light.cpp +++ b/apps/openmw/mwclass/light.cpp @@ -110,6 +110,14 @@ namespace MWClass return std::make_pair (slots, false); } + int Light::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Light::registerSelf() { boost::shared_ptr instance (new Light); diff --git a/apps/openmw/mwclass/light.hpp b/apps/openmw/mwclass/light.hpp index 46a4d60ba4..bde252c289 100644 --- a/apps/openmw/mwclass/light.hpp +++ b/apps/openmw/mwclass/light.hpp @@ -34,6 +34,9 @@ namespace MWClass ///< \return first: Return IDs of the slot this object can be equipped in; second: can object /// stay stacked when equipped? + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/lockpick.cpp b/apps/openmw/mwclass/lockpick.cpp index 3dda2f4af0..b55a5e41c5 100644 --- a/apps/openmw/mwclass/lockpick.cpp +++ b/apps/openmw/mwclass/lockpick.cpp @@ -81,6 +81,14 @@ namespace MWClass return std::make_pair (slots, false); } + int Lockpick::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Lockpick::registerSelf() { boost::shared_ptr instance (new Lockpick); diff --git a/apps/openmw/mwclass/lockpick.hpp b/apps/openmw/mwclass/lockpick.hpp index 0c9189c548..1b56234af1 100644 --- a/apps/openmw/mwclass/lockpick.hpp +++ b/apps/openmw/mwclass/lockpick.hpp @@ -29,6 +29,9 @@ namespace MWClass ///< \return first: Return IDs of the slot this object can be equipped in; second: can object /// stay stacked when equipped? + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/misc.cpp b/apps/openmw/mwclass/misc.cpp index 864fc1e382..ef82cc277c 100644 --- a/apps/openmw/mwclass/misc.cpp +++ b/apps/openmw/mwclass/misc.cpp @@ -70,6 +70,14 @@ namespace MWClass return ref->base->script; } + int Miscellaneous::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Miscellaneous::registerSelf() { boost::shared_ptr instance (new Miscellaneous); diff --git a/apps/openmw/mwclass/misc.hpp b/apps/openmw/mwclass/misc.hpp index b07964f990..fc002280cf 100644 --- a/apps/openmw/mwclass/misc.hpp +++ b/apps/openmw/mwclass/misc.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/potion.cpp b/apps/openmw/mwclass/potion.cpp index 4ab3745900..e2c889484e 100644 --- a/apps/openmw/mwclass/potion.cpp +++ b/apps/openmw/mwclass/potion.cpp @@ -70,6 +70,14 @@ namespace MWClass return ref->base->script; } + int Potion::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Potion::registerSelf() { boost::shared_ptr instance (new Potion); diff --git a/apps/openmw/mwclass/potion.hpp b/apps/openmw/mwclass/potion.hpp index be9e713fba..7d30179376 100644 --- a/apps/openmw/mwclass/potion.hpp +++ b/apps/openmw/mwclass/potion.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/probe.cpp b/apps/openmw/mwclass/probe.cpp index 4b4d79a73e..1e9840334f 100644 --- a/apps/openmw/mwclass/probe.cpp +++ b/apps/openmw/mwclass/probe.cpp @@ -80,6 +80,14 @@ namespace MWClass return std::make_pair (slots, false); } + int Probe::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Probe::registerSelf() { boost::shared_ptr instance (new Probe); diff --git a/apps/openmw/mwclass/probe.hpp b/apps/openmw/mwclass/probe.hpp index 1507d65aab..232b523645 100644 --- a/apps/openmw/mwclass/probe.hpp +++ b/apps/openmw/mwclass/probe.hpp @@ -29,6 +29,9 @@ namespace MWClass ///< \return first: Return IDs of the slot this object can be equipped in; second: can object /// stay stacked when equipped? + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/repair.cpp b/apps/openmw/mwclass/repair.cpp index 758bf40797..1f12e699de 100644 --- a/apps/openmw/mwclass/repair.cpp +++ b/apps/openmw/mwclass/repair.cpp @@ -70,6 +70,14 @@ namespace MWClass return ref->base->script; } + int Repair::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Repair::registerSelf() { boost::shared_ptr instance (new Repair); diff --git a/apps/openmw/mwclass/repair.hpp b/apps/openmw/mwclass/repair.hpp index 17b606f4cb..0a9d9c2535 100644 --- a/apps/openmw/mwclass/repair.hpp +++ b/apps/openmw/mwclass/repair.hpp @@ -25,6 +25,9 @@ namespace MWClass virtual std::string getScript (const MWWorld::Ptr& ptr) const; ///< Return name of the script attached to ptr + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwclass/weapon.cpp b/apps/openmw/mwclass/weapon.cpp index 20db0cf38f..9b4db46541 100644 --- a/apps/openmw/mwclass/weapon.cpp +++ b/apps/openmw/mwclass/weapon.cpp @@ -139,6 +139,14 @@ namespace MWClass return -1; } + int Weapon::getValue (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->data.value; + } + void Weapon::registerSelf() { boost::shared_ptr instance (new Weapon); diff --git a/apps/openmw/mwclass/weapon.hpp b/apps/openmw/mwclass/weapon.hpp index f863c0bfe2..505c45645f 100644 --- a/apps/openmw/mwclass/weapon.hpp +++ b/apps/openmw/mwclass/weapon.hpp @@ -40,6 +40,9 @@ namespace MWClass /// Return the index of the skill this item corresponds to when equiopped or -1, if there is /// no such skill. + virtual int getValue (const MWWorld::Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + static void registerSelf(); virtual std::string getUpSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; diff --git a/apps/openmw/mwworld/class.cpp b/apps/openmw/mwworld/class.cpp index 9d766909f7..d3a0a34ae8 100644 --- a/apps/openmw/mwworld/class.cpp +++ b/apps/openmw/mwworld/class.cpp @@ -137,6 +137,11 @@ namespace MWWorld return -1; } + int Class::getValue (const Ptr& ptr) const + { + throw std::logic_error ("value not supported by this class"); + } + const Class& Class::get (const std::string& key) { std::map >::const_iterator iter = sClasses.find (key); diff --git a/apps/openmw/mwworld/class.hpp b/apps/openmw/mwworld/class.hpp index 67320b3e07..e474e9b926 100644 --- a/apps/openmw/mwworld/class.hpp +++ b/apps/openmw/mwworld/class.hpp @@ -155,6 +155,10 @@ namespace MWWorld /// no such skill. /// (default implementation: return -1) + virtual int getValue (const Ptr& ptr) const; + ///< Return trade value of the object. Throws an exception, if the object can't be traded. + /// (default implementation: throws an exception) + static const Class& get (const std::string& key); ///< If there is no class for this \a key, an exception is thrown. From 34a02fef45f0d02dc455ca77d24ce00ac5770da1 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 7 Apr 2012 20:09:09 +0200 Subject: [PATCH 415/488] consider item value when auto equipping --- apps/openmw/mwworld/inventorystore.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwworld/inventorystore.cpp b/apps/openmw/mwworld/inventorystore.cpp index aedd119c8a..1fe76a0a81 100644 --- a/apps/openmw/mwworld/inventorystore.cpp +++ b/apps/openmw/mwworld/inventorystore.cpp @@ -101,20 +101,30 @@ void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats) for (ContainerStoreIterator iter (begin()); iter!=end(); ++iter) { + Ptr test = *iter; + std::pair, bool> itemsSlots = MWWorld::Class::get (*iter).getEquipmentSlots (*iter); for (std::vector::const_iterator iter2 (itemsSlots.first.begin()); iter2!=itemsSlots.first.end(); ++iter2) { - /// \todo comapre item with item in slot - if (slots.at (*iter2)==end()) + if (slots.at (*iter2)!=end()) { - /// \todo unstack, if reqquired (itemsSlots.second) + Ptr old = *slots.at (*iter2); - slots[*iter2] = iter; - break; + // check value + if (MWWorld::Class::get (old).getValue (old)>=MWWorld::Class::get (test).getValue (test)) + { + /// \todo check skill + continue; + } } + + /// \todo unstack, if reqquired (itemsSlots.second) + + slots[*iter2] = iter; + break; } } From 96911ada953c3b47756c3437235529f9fe400422 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 22:37:15 +0200 Subject: [PATCH 416/488] restored render queue of transparent objects, they are now part of the mrt textures this fixes some issues with transparent objects not visible in the refraction --- apps/openmw/mwrender/renderconst.hpp | 4 ++-- components/nifogre/ogre_nif_loader.cpp | 2 +- files/gbuffer/gbuffer.compositor | 9 ++++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index ab411a6cb4..76a460a168 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -14,9 +14,9 @@ enum RenderQueueGroups RQG_Main = Ogre::RENDER_QUEUE_MAIN, - RQG_Water = Ogre::RENDER_QUEUE_6, + RQG_Water = Ogre::RENDER_QUEUE_7+1, - RQG_Alpha = Ogre::RENDER_QUEUE_7, + RQG_Alpha = Ogre::RENDER_QUEUE_MAIN, RQG_UnderWater = Ogre::RENDER_QUEUE_7+1, diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 886c4b451a..538e7290d4 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -420,7 +420,7 @@ void NIFLoader::createMaterial(const String &name, " oColor.a = tex.a * diffuse.a * vertexColour.a; \n"; if (mrt) outStream << - " oColor1 = float4(iDepth / far, 0, 0, 1); \n"; + " oColor1 = float4(iDepth / far, 0, 0, (oColor.a == 1)); \n"; // only write to MRT if alpha is 1 outStream << "}"; diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index 8ab5665dda..6ca35df87b 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -16,8 +16,9 @@ compositor gbuffer } pass render_scene { + // Renders everything except water first_render_queue 0 - last_render_queue 59 + last_render_queue 70 } } @@ -35,7 +36,9 @@ compositor gbuffer } } -// Finalizer compositor to render objects that we don't want in the MRT textures (this is the case for most transparent stuff) +// Finalizer compositor to render objects that we don't want in the MRT textures (ex. water) +// NB the water has to be rendered in a seperate compositor anyway, because it +// accesses the MRT textures which can't be done while they are still being rendered to. compositor gbufferFinalizer { technique @@ -63,7 +66,7 @@ compositor gbufferFinalizer } pass render_scene { - first_render_queue 60 + first_render_queue 71 last_render_queue 100 } } From cdea19206cb83a12adf09726a15ef902c15085a7 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 22:47:39 +0200 Subject: [PATCH 417/488] Revert "more accurate fog, TODO: apply this to the terrain" This reverts commit 96c37d3e7cea65d64dd7273eb9d375d3f789f33c. --- apps/openmw/mwworld/weather.cpp | 5 +---- components/nifogre/ogre_nif_loader.cpp | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index fb0480171d..d92a36c833 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -334,11 +334,8 @@ WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, MWWorld::E void WeatherManager::setWeather(const String& weather, bool instant) { - if (weather == mCurrentWeather && mNextWeather == "") - { - mFirstUpdate = false; + if (weather == mCurrentWeather && mNextWeather == "") return; - } if (instant || mFirstUpdate) { diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 538e7290d4..835534eff2 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -328,7 +328,6 @@ void NIFLoader::createMaterial(const String &name, " out float4 oNormal : TEXCOORD2, \n" " out float oDepth : TEXCOORD3, \n" " out float4 oVertexColour : TEXCOORD4, \n" - " uniform float4 cameraPosObjSpace, \n" " uniform float4x4 worldViewProj \n" ") \n" "{ \n" @@ -336,13 +335,12 @@ void NIFLoader::createMaterial(const String &name, " oUV = uv; \n" " oNormal = normal; \n" " oPosition = mul( worldViewProj, position ); \n" - " oDepth = length(position.xyz - cameraPosObjSpace.xyz); \n" + " oDepth = oPosition.z; \n" " oPositionObjSpace = position; \n" "}"; vertex->setSource(outStream.str()); vertex->load(); vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - vertex->getDefaultParameters()->setNamedAutoConstant("cameraPosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); } else vertex = mgr.getByName("main_vp"); From c748252d33cb87ac3ffb21e08c318717339f26d4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 22:55:25 +0200 Subject: [PATCH 418/488] weather fix again --- apps/openmw/mwrender/renderconst.hpp | 2 -- apps/openmw/mwworld/weather.cpp | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/renderconst.hpp b/apps/openmw/mwrender/renderconst.hpp index 76a460a168..2c7f9e9acb 100644 --- a/apps/openmw/mwrender/renderconst.hpp +++ b/apps/openmw/mwrender/renderconst.hpp @@ -55,8 +55,6 @@ enum VisibilityFlags RV_Map = RV_Terrain + RV_Statics + RV_StaticsSmall + RV_Misc + RV_Water, /// \todo markers (normally hidden) - - RV_All = 255 }; } diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index d92a36c833..fb0480171d 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -334,8 +334,11 @@ WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, MWWorld::E void WeatherManager::setWeather(const String& weather, bool instant) { - if (weather == mCurrentWeather && mNextWeather == "") + if (weather == mCurrentWeather && mNextWeather == "") + { + mFirstUpdate = false; return; + } if (instant || mFirstUpdate) { From 9169c0d7c9f9792a8249f0eace000dde275e4f7a Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 23:18:08 +0200 Subject: [PATCH 419/488] slightly improved the quality of the default water setting --- files/settings-default.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index b421730dc5..051f081e80 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -55,10 +55,9 @@ fog end factor = 1.0 num lights = 8 [Water] - shader = false -rtt size = 256 +rtt size = 512 reflect terrain = true From 030060e656fc6e7cafc314133c8f2701455f959c Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 7 Apr 2012 23:29:36 +0200 Subject: [PATCH 420/488] settings description --- files/settings-default.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 051f081e80..e3a5ceb7bd 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -55,6 +55,8 @@ fog end factor = 1.0 num lights = 8 [Water] +# Enable this to get fancy-looking water with reflections and refractions +# All the settings below have no effect if this is false shader = false rtt size = 512 From bf5a009299cb52cfc2f755303f49cbe32be3eb3f Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 7 Apr 2012 23:33:54 +0200 Subject: [PATCH 421/488] Some improvements to the windows installer --- CMakeLists.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71f36fe3de..7b87e35447 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -346,7 +346,10 @@ if(WIN32) FILE(GLOB files "${OpenMW_BINARY_DIR}/Release/*.*") INSTALL(FILES ${files} DESTINATION ".") INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg") - INSTALL(FILES "${OpenMW_SOURCE_DIR}/readme.txt" DESTINATION ".") + INSTALL(FILES + "${OpenMW_SOURCE_DIR}/readme.txt" + "${OpenMW_BINARY_DIR}/settings-default.cfg" + DESTINATION ".") INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION ".") SET(CPACK_GENERATOR "NSIS") @@ -356,8 +359,12 @@ if(WIN32) SET(CPACK_PACKAGE_VERSION_MAJOR ${OPENMW_VERSION_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO}) SET(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE}) - SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW;esmtool;Esmtool;omwlauncher;OpenMW Launcher") - set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Readme.lnk' '\$INSTDIR\\\\readme.txt'") + SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW;omwlauncher;OpenMW Launcher") + SET(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Readme.lnk' '\$INSTDIR\\\\readme.txt'") + SET(CPACK_NSIS_DELETE_ICONS_EXTRA " + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Readme.lnk\\\" + ") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/readme.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${OpenMW_SOURCE_DIR}/GPL3.txt") SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") From b8be867e6e3bca87668bcb7f2f2e0fc9b5af07a9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 7 Apr 2012 14:58:52 -0700 Subject: [PATCH 422/488] Work around a bug in the Windows OpenAL router --- apps/openmw/mwsound/openal_output.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 9959bedc84..615def7019 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -467,10 +467,15 @@ void OpenAL_Output::init(const std::string &devname) else fail("Failed to open \""+devname+"\""); } - if(alcIsExtensionPresent(mDevice, "ALC_ENUMERATE_ALL_EXT")) - std::cout << "Opened \""< Date: Sat, 7 Apr 2012 15:28:38 -0700 Subject: [PATCH 423/488] Add a setting to select the sound device name --- apps/openmw/mwsound/soundmanager.cpp | 15 ++++++++++++++- files/settings-default.cfg | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index eaa18e6dcd..a09a4b0563 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" @@ -64,7 +65,19 @@ namespace MWSound for(size_t i = 0;i < names.size();i++) std::cout <<" "<init(); + std::string devname = Settings::Manager::getString("device", "Sound"); + try + { + mOutput->init(devname); + } + catch(std::exception &e) + { + if(devname.empty()) + throw; + std::cout <<"Failed to open device \""<init(); + Settings::Manager::setString("device", "Sound", ""); + } } catch(std::exception &e) { diff --git a/files/settings-default.cfg b/files/settings-default.cfg index f616471cce..71637c326d 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -53,3 +53,7 @@ fog end factor = 1.0 [Terrain] # Max. number of lights that affect the terrain. Setting to 1 will only reflect sunlight num lights = 8 + +[Sound] +# Device name. Blank means default +device = From 59ccab0b2ce69e3485bc3d1b65da65d578365ba6 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 7 Apr 2012 16:00:30 -0700 Subject: [PATCH 424/488] Add sound volume settings --- apps/openmw/mwsound/soundmanager.cpp | 22 ++++++++++++++++------ apps/openmw/mwsound/soundmanager.hpp | 4 ++++ files/settings-default.cfg | 5 +++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a09a4b0563..730d9d9b21 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -50,11 +50,20 @@ namespace MWSound : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) , mEnvironment(environment) , mOutput(new DEFAULT_OUTPUT(*this)) - + , mMasterVolume(1.0f) + , mSFXVolume(1.0f) + , mMusicVolume(1.0f) { if(!useSound) return; + mMasterVolume = Settings::Manager::getFloat("master volume", "Sound"); + mMasterVolume = std::min(std::max(mMasterVolume, 0.0f), 1.0f); + mSFXVolume = Settings::Manager::getFloat("sfx volume", "Sound"); + mSFXVolume = std::min(std::max(mSFXVolume, 0.0f), 1.0f); + mMusicVolume = Settings::Manager::getFloat("music volume", "Sound"); + mMusicVolume = std::min(std::max(mMusicVolume, 0.0f), 1.0f); + std::cout << "Sound output: " << SOUND_OUT << std::endl; std::cout << "Sound decoder: " << SOUND_IN << std::endl; @@ -154,9 +163,10 @@ namespace MWSound std::cout <<"Playing "<streamSound(filename, 0.4f, 1.0f, Play_NoEnv); - mMusic->mBaseVolume = 0.4f; + mMusic = mOutput->streamSound(filename, basevol, 1.0f, Play_NoEnv); + mMusic->mBaseVolume = basevol; mMusic->mFlags = Play_NoEnv; } catch(std::exception &e) @@ -200,7 +210,7 @@ namespace MWSound try { // The range values are not tested - float basevol = 1.0f; /* TODO: volume settings */ + float basevol = mMasterVolume * mSFXVolume; std::string filePath = "Sound/"+filename; const ESM::Position &pos = ptr.getCellRef().pos; const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); @@ -231,7 +241,7 @@ namespace MWSound return sound; try { - float basevol = 1.0f; /* TODO: volume settings */ + float basevol = mMasterVolume * mSFXVolume; float min, max; std::string file = lookup(soundId, basevol, min, max); @@ -261,7 +271,7 @@ namespace MWSound try { // Look up the sound in the ESM data - float basevol = 1.0f; /* TODO: volume settings */ + float basevol = mMasterVolume * mSFXVolume; float min, max; std::string file = lookup(soundId, basevol, min, max); const ESM::Position &pos = ptr.getCellRef().pos; diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index cad5f61871..d64db299b4 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -56,6 +56,10 @@ namespace MWSound std::auto_ptr mOutput; + float mMasterVolume; + float mSFXVolume; + float mMusicVolume; + boost::shared_ptr mMusic; std::string mCurrentPlaylist; diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 71637c326d..878b9b0957 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -57,3 +57,8 @@ num lights = 8 [Sound] # Device name. Blank means default device = + +# Volumes. Sfx and music volumes are both affected by the master volume +master volume = 1.0 +sfx volume = 1.0 +music volume = 0.4 From 8c607870c066d5b13cd98f6a6ccd196f48acb465 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 11:26:54 +0200 Subject: [PATCH 425/488] test commit --- apps/openmw/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index df52faab14..f3b5c77bbf 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -342,7 +342,7 @@ private: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { std::streambuf* old_rdbuf = std::cout.rdbuf (); - + std::cout << "Testing stuff in the new branch!"; int ret = 0; #if defined(_DEBUG) // Redirect cout to VS debug output when running in debug mode From d5b8d4ef49d72c8a9663129ac4dc11b7e7b82d90 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 11:30:17 +0200 Subject: [PATCH 426/488] Revert "test commit" This reverts commit 8c607870c066d5b13cd98f6a6ccd196f48acb465. reverting the test commit in the test branch --- apps/openmw/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index f3b5c77bbf..df52faab14 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -342,7 +342,7 @@ private: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { std::streambuf* old_rdbuf = std::cout.rdbuf (); - std::cout << "Testing stuff in the new branch!"; + int ret = 0; #if defined(_DEBUG) // Redirect cout to VS debug output when running in debug mode From b1259ca15c71d9dcb95b6204ec4dbb106732b795 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 12:25:33 +0200 Subject: [PATCH 427/488] added a 'backend' for NPC/Player draw state --- apps/openmw/mwmechanics/drawstate.hpp | 11 +++++++++++ apps/openmw/mwmechanics/npcstats.hpp | 5 +++-- apps/openmw/mwworld/player.cpp | 7 +++++-- apps/openmw/mwworld/player.hpp | 8 +++++++- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 apps/openmw/mwmechanics/drawstate.hpp diff --git a/apps/openmw/mwmechanics/drawstate.hpp b/apps/openmw/mwmechanics/drawstate.hpp new file mode 100644 index 0000000000..3ea115d422 --- /dev/null +++ b/apps/openmw/mwmechanics/drawstate.hpp @@ -0,0 +1,11 @@ +#ifndef GAME_MWMECHANICS_DRAWSTATE_H +#define GAME_MWMECHANICS_DRAWSTATE_H + +enum DrawState +{ + DrawState_Weapon, + DrawState_Spell, + DrawState_Nothing +} + +#endif diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index aeb5f56d5b..cd7c63f99a 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -4,13 +4,13 @@ #include #include "stat.hpp" +#include "drawstate.hpp" namespace MWMechanics { /// \brief Additional stats for NPCs /// /// For non-NPC-specific stats, see the CreatureStats struct. - struct NpcStats { // NPCs other than the player can only have one faction. But for the sake of consistency @@ -24,9 +24,10 @@ namespace MWMechanics bool mRun; bool mSneak; bool mCombat; + DrawState mDrawState; NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), - mCombat (false) {} + mCombat (false) , mDrawState(DrawState::DrawState_Nothing) {} }; } diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 5bfb82138c..a3e8e46c01 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -12,7 +12,7 @@ namespace MWWorld { Player::Player (MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world) : mCellStore (0), mRenderer (renderer), mWorld (world), mClass (0), - mAutoMove (false), mForwardBackward (0) + mAutoMove (false), mForwardBackward (0) , mDrawState(DrawState_Nothing) { mPlayer.base = player; mPlayer.ref.refID = "player"; @@ -47,7 +47,10 @@ namespace MWWorld delete mClass; mClass = new_class; } - + void Player::setDrawState(const DrawState& value) + { + mDrawState = value; + } void Player::setAutoMove (bool enable) { MWWorld::Ptr ptr = getPlayer(); diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index 01c71da437..f235140f8c 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -8,6 +8,8 @@ #include "../mwworld/refdata.hpp" #include "../mwworld/ptr.hpp" +#include "../mwmechanics/drawstate.hpp" + namespace MWRender { class Player; @@ -31,7 +33,7 @@ namespace MWWorld ESM::Class *mClass; bool mAutoMove; int mForwardBackward; - + DrawState mDrawState; public: Player(MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world); @@ -76,6 +78,8 @@ namespace MWWorld void setClass (const ESM::Class& class_); + void setDrawState(const DrawState& state); + std::string getName() const { return mName; @@ -106,6 +110,8 @@ namespace MWWorld return mAutoMove; } + DrawState getDrawState() { return mDrawState; } + void setAutoMove (bool enable); void setLeftRight (int value); From dcab6737e50aa122a4189f8083060d4bd352bdb0 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 8 Apr 2012 12:26:21 +0200 Subject: [PATCH 428/488] consider skills when auto equipping --- apps/openmw/mwmechanics/actors.cpp | 2 +- apps/openmw/mwworld/inventorystore.cpp | 41 ++++++++++++++++++++++---- apps/openmw/mwworld/inventorystore.hpp | 4 ++- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index e68b99597e..c948e00d58 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -19,7 +19,7 @@ namespace MWMechanics { if (!paused) MWWorld::Class::get (ptr).getInventoryStore (ptr).autoEquip ( - MWWorld::Class::get (ptr).getNpcStats (ptr)); + MWWorld::Class::get (ptr).getNpcStats (ptr), mEnvironment); } Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment), mDuration (0) {} diff --git a/apps/openmw/mwworld/inventorystore.cpp b/apps/openmw/mwworld/inventorystore.cpp index 1fe76a0a81..650418201b 100644 --- a/apps/openmw/mwworld/inventorystore.cpp +++ b/apps/openmw/mwworld/inventorystore.cpp @@ -4,6 +4,8 @@ #include #include +#include "../mwmechanics/npcstats.hpp" + #include "class.hpp" #include /// \todo remove after rendering is implemented @@ -94,7 +96,8 @@ MWWorld::ContainerStoreIterator MWWorld::InventoryStore::getSlot (int slot) return mSlots[slot]; } -void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats) +void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats, + const Environment& environment) { TSlots slots; initSlots (slots); @@ -102,6 +105,7 @@ void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats) for (ContainerStoreIterator iter (begin()); iter!=end(); ++iter) { Ptr test = *iter; + int testSkill = MWWorld::Class::get (test).getEquipmentSkill (test, environment); std::pair, bool> itemsSlots = MWWorld::Class::get (*iter).getEquipmentSlots (*iter); @@ -109,15 +113,40 @@ void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats) for (std::vector::const_iterator iter2 (itemsSlots.first.begin()); iter2!=itemsSlots.first.end(); ++iter2) { - if (slots.at (*iter2)!=end()) + bool use = false; + + if (slots.at (*iter2)==end()) + use = true; // slot was empty before -> skill all further checks + else { Ptr old = *slots.at (*iter2); - // check value - if (MWWorld::Class::get (old).getValue (old)>=MWWorld::Class::get (test).getValue (test)) + if (!use) { - /// \todo check skill - continue; + // check skill + int oldSkill = + MWWorld::Class::get (old).getEquipmentSkill (old, environment); + + if (testSkill!=-1 || oldSkill!=-1 || testSkill!=oldSkill) + { + if (stats.mSkill[oldSkill].getModified()>stats.mSkill[testSkill].getModified()) + continue; // rejected, because old item better matched the NPC's skills. + + if (stats.mSkill[oldSkill].getModified()= + MWWorld::Class::get (test).getValue (test)) + { + continue; + } + + use = true; } } diff --git a/apps/openmw/mwworld/inventorystore.hpp b/apps/openmw/mwworld/inventorystore.hpp index 5eeaf570d0..ca733b0847 100644 --- a/apps/openmw/mwworld/inventorystore.hpp +++ b/apps/openmw/mwworld/inventorystore.hpp @@ -10,6 +10,8 @@ namespace MWMechanics namespace MWWorld { + struct Environment; + ///< \brief Variant of the ContainerStore for NPCs class InventoryStore : public ContainerStore { @@ -62,7 +64,7 @@ namespace MWWorld ContainerStoreIterator getSlot (int slot); - void autoEquip (const MWMechanics::NpcStats& stats); + void autoEquip (const MWMechanics::NpcStats& stats, const Environment& environment); ///< Auto equip items according to stats and item value. }; } From b4ee01e69113c2f2262099f15cab84aebb1e247e Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 12:26:59 +0200 Subject: [PATCH 429/488] missing file --- apps/openmw/mwinput/inputmanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index 3721d10431..7b0481f189 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -65,6 +65,8 @@ namespace MWInput A_QuickLoad, A_QuickMenu, A_GameMenu, + A_ToggleWeapon, + A_ToggleSpell, A_LAST // Marker for the last item }; From c1afd534fc292ee441cab56fbb4d1627f1166f78 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 12:37:59 +0200 Subject: [PATCH 430/488] all stuff added --- apps/openmw/mwinput/inputmanager.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index 7b0481f189..4030eb9020 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -88,6 +88,24 @@ namespace MWInput /* InputImpl Methods */ + void toggleSpell() + { + DrawState state = player.getDrawState(); + if(state == DrawState_Weapon || state == DrawState_Nothing) + player.setDrawState(DrawState_Spell); + else + player.setDrawState(DrawState_Nothing); + } + + void toggleWeapon() + { + DrawState state = player.getDrawState(); + if(state == DrawState_Spell || state == DrawState_Nothing) + player.setDrawState(DrawState_Weapon); + else + player.setDrawState(DrawState_Nothing); + } + void screenshot() { mEngine.screenshot(); @@ -199,7 +217,10 @@ namespace MWInput "Auto Move"); disp->funcs.bind(A_ToggleWalk, boost::bind(&InputImpl::toggleWalking, this), "Toggle Walk/Run"); - + disp->funcs.bind(A_ToggleWeapon,boost::bind(&InputImpl::toggleWeapon,this), + "Draw Weapon"); + disp->funcs.bind(A_ToggleSpell,boost::bind(&InputImpl::toggleSpell,this), + "Ready hands"); // Add the exit listener ogre.getRoot()->addFrameListener(&exit); @@ -244,6 +265,8 @@ namespace MWInput disp->bind(A_AutoMove, KC_Z); disp->bind(A_ToggleSneak, KC_X); disp->bind(A_ToggleWalk, KC_C); + disp->bind(A_ToggleWeapon,KC_F); + disp->bind(A_ToggleSpell,KC_R); // Key bindings for polled keys // NOTE: These keys are constantly being polled. Only add keys that must be checked each frame. From ab2a1297b0a137cd2761c06210883835595d5bfd Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 8 Apr 2012 13:01:03 +0200 Subject: [PATCH 431/488] exclude player from auto equip --- apps/openmw/mwmechanics/actors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index c948e00d58..7d9f748d4a 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -17,7 +17,7 @@ namespace MWMechanics void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused) { - if (!paused) + if (!paused && ptr.getRefData().getHandle()!="player") MWWorld::Class::get (ptr).getInventoryStore (ptr).autoEquip ( MWWorld::Class::get (ptr).getNpcStats (ptr), mEnvironment); } From 15526d6110327a32d105c3212569e0033aed94b4 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 13:17:16 +0200 Subject: [PATCH 432/488] only fists support lacks --- apps/openmw/mwinput/inputmanager.cpp | 14 ++++++++++++++ apps/openmw/mwworld/player.cpp | 2 ++ 2 files changed, 16 insertions(+) diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index 4030eb9020..bd27de029c 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -92,18 +92,32 @@ namespace MWInput { DrawState state = player.getDrawState(); if(state == DrawState_Weapon || state == DrawState_Nothing) + { player.setDrawState(DrawState_Spell); + std::cout << "Player has now readied his hands for spellcasting!\n"; + } else + { player.setDrawState(DrawState_Nothing); + std::cout << "Player does not have any kind of attack ready now.\n"; + } + } void toggleWeapon() { DrawState state = player.getDrawState(); if(state == DrawState_Spell || state == DrawState_Nothing) + { player.setDrawState(DrawState_Weapon); + std::cout << "Player is now drawing his weapon.\n"; + } else + { player.setDrawState(DrawState_Nothing); + std::cout << "Player does not have any kind of attack ready now.\n"; + } + } void screenshot() diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index a3e8e46c01..b333d106af 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -47,10 +47,12 @@ namespace MWWorld delete mClass; mClass = new_class; } + void Player::setDrawState(const DrawState& value) { mDrawState = value; } + void Player::setAutoMove (bool enable) { MWWorld::Ptr ptr = getPlayer(); From c589cbd4ff12fcf98660e50ee9e318b742757e82 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 13:25:28 +0200 Subject: [PATCH 433/488] enum bug fix --- apps/openmw/mwmechanics/npcstats.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index cd7c63f99a..7c5d37972d 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -27,7 +27,7 @@ namespace MWMechanics DrawState mDrawState; NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), - mCombat (false) , mDrawState(DrawState::DrawState_Nothing) {} + mCombat (false) , mDrawState(DrawState_Nothing) {} }; } From 23cc1d17ca56950d8aeca6c9ea5d30dc49b01713 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 13:28:34 +0200 Subject: [PATCH 434/488] missing ; added --- apps/openmw/mwmechanics/drawstate.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwmechanics/drawstate.hpp b/apps/openmw/mwmechanics/drawstate.hpp index 3ea115d422..ded25f8d5d 100644 --- a/apps/openmw/mwmechanics/drawstate.hpp +++ b/apps/openmw/mwmechanics/drawstate.hpp @@ -3,9 +3,9 @@ enum DrawState { - DrawState_Weapon, - DrawState_Spell, - DrawState_Nothing -} + DrawState_Weapon = 0, + DrawState_Spell = 1, + DrawState_Nothing = 2, +}; #endif From 113bbfa253eac94ef1d46ed78928cd97538b8d94 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 14:37:36 +0200 Subject: [PATCH 435/488] removed the now unneccesary SG for transparent objects --- apps/openmw/mwrender/objects.cpp | 12 ++++++------ apps/openmw/mwrender/objects.hpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index a388d31636..b633330fa9 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -144,7 +144,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) { Ogre::StaticGeometry* sg = 0; - if (transparent) +/* if (transparent) { if( mStaticGeometryAlpha.find(ptr.getCell()) == mStaticGeometryAlpha.end()) { @@ -155,7 +155,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) else sg = mStaticGeometryAlpha[ptr.getCell()]; } - else if (small) + else*/ if (small) { if( mStaticGeometrySmall.find(ptr.getCell()) == mStaticGeometrySmall.end()) { @@ -288,13 +288,13 @@ void Objects::removeCell(MWWorld::Ptr::CellStore* store) mRenderer.getScene()->destroyStaticGeometry (sg); sg = 0; } - if(mStaticGeometryAlpha.find(store) != mStaticGeometryAlpha.end()) + /*if(mStaticGeometryAlpha.find(store) != mStaticGeometryAlpha.end()) { Ogre::StaticGeometry* sg = mStaticGeometryAlpha[store]; mStaticGeometryAlpha.erase(store); mRenderer.getScene()->destroyStaticGeometry (sg); sg = 0; - } + }*/ if(mBounds.find(store) != mBounds.end()) mBounds.erase(store); @@ -312,11 +312,11 @@ void Objects::buildStaticGeometry(ESMS::CellStore& cell) Ogre::StaticGeometry* sg = mStaticGeometrySmall[&cell]; sg->build(); } - if(mStaticGeometryAlpha.find(&cell) != mStaticGeometryAlpha.end()) + /*if(mStaticGeometryAlpha.find(&cell) != mStaticGeometryAlpha.end()) { Ogre::StaticGeometry* sg = mStaticGeometryAlpha[&cell]; sg->build(); - } + }*/ } Ogre::AxisAlignedBox Objects::getDimensions(MWWorld::Ptr::CellStore* cell) diff --git a/apps/openmw/mwrender/objects.hpp b/apps/openmw/mwrender/objects.hpp index 4326ce3265..0c19f9f33f 100644 --- a/apps/openmw/mwrender/objects.hpp +++ b/apps/openmw/mwrender/objects.hpp @@ -15,7 +15,7 @@ class Objects{ std::map mCellSceneNodes; std::map mStaticGeometry; std::map mStaticGeometrySmall; - std::map mStaticGeometryAlpha; + //std::map mStaticGeometryAlpha; std::map mBounds; std::vector mLights; Ogre::SceneNode* mMwRoot; From 8caa5ff9c494046fca7d1d07e4f8481d6b0d3931 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 15:03:09 +0200 Subject: [PATCH 436/488] fixed refraction and underwater distortion artifacts --- files/water/underwater.cg | 2 +- files/water/water.cg | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/files/water/underwater.cg b/files/water/underwater.cg index a734c316f7..b853dd5355 100644 --- a/files/water/underwater.cg +++ b/files/water/underwater.cg @@ -50,7 +50,7 @@ float4 main_fp (float2 iTexCoord : TEXCOORD0, { float4 normal = tex2D(NormalMap, noiseCoord) * 2 - 1; - float depth = tex2D(DepthMap, iTexCoord).r * far; + float depth = tex2D(DepthMap, iTexCoord + normal.xy * 0.015).r * far; depth = saturate(depth / 2000.f); float4 color = tex2D(RT, iTexCoord + normal.xy * 0.015) + diff --git a/files/water/water.cg b/files/water/water.cg index bbd42874bc..7c7ec07809 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -62,7 +62,6 @@ void main_fp float depthTex = tex2D(depthMap, screenCoords).r; float depth1 = depthTex * far - iDepth; depth1 = saturate(depth1 / 500.f); - depth1 = (depthTex == 0 ? 1 : depth1); // Simple wave effect. to be replaced by something better float2 uv1 = iUv + time * float2(0.5, 0); @@ -74,7 +73,20 @@ void main_fp normal = 2*normal - 1; float2 screenCoords_reflect = screenCoords + normal.yx * 0.05; - float2 screenCoords_refract = screenCoords + normal.yx * 0.1 * depth1; + float2 screenCoords_refract = screenCoords + normal.yx * 0.05 * depth1; + + // Sample depth again with the refracted coordinates + depthTex = tex2D(depthMap, screenCoords_refract).r; + float depth2 = (depthTex * far - iDepth) / 500.f; + depth2 = (depthTex == 0 ? 1 : depth2); + // if depth2 is less than 0, this means we would refract something which is above water, + // which we don't want to - so in that case, don't refract + if (depth2 < 0.25) // delta due to inaccuracies + { + screenCoords_refract = screenCoords; + depth2 = depth1; + } + depth2 = saturate(depth2); float4 reflection = tex2D(reflectionMap, screenCoords_reflect); float4 refraction = tex2D(refractionMap, screenCoords_refract); @@ -93,7 +105,7 @@ void main_fp float3 halfVector = normalize(iEyeVector + lightDir); float specular = pow(max(dot(normal.xyz, halfVector.xyz), 0), 64); - float opacity = depth1 * saturate(reflectionFactor + specular); + float opacity = depth2 * saturate(reflectionFactor + specular); opacity *= (1-isUnderwater); reflection.xyz += lightSpecularColour0.xyz * specular; From 17eb68e4bcbfe066d37e51a2baf0a2bf9a588c7b Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 15:52:43 +0200 Subject: [PATCH 437/488] disable "reflect statics" by default because it performs not so well right now --- files/settings-default.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index e3a5ceb7bd..8209580d7e 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -63,7 +63,7 @@ rtt size = 512 reflect terrain = true -reflect statics = true +reflect statics = false reflect small statics = false From fbfc6e0966be9b13083f86046e79db257c1ef084 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 16:06:47 +0200 Subject: [PATCH 438/488] enabled new water by default --- files/settings-default.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 8209580d7e..efe03972b3 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -57,7 +57,7 @@ num lights = 8 [Water] # Enable this to get fancy-looking water with reflections and refractions # All the settings below have no effect if this is false -shader = false +shader = true rtt size = 512 From a5c6207fe76e710e30f8db6ed65ce799e2e678ca Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 17:44:00 +0200 Subject: [PATCH 439/488] add setting to disable the underwater effect --- apps/openmw/mwrender/water.cpp | 18 +++++------------- apps/openmw/mwrender/water.hpp | 3 +-- files/settings-default.cfg | 3 +++ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 615a24a767..7981def0b8 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -10,7 +10,7 @@ namespace MWRender Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), - mIsUnderwater(false), mReflectDistance(0), mVisibilityFlags(0), mOldCameraFarClip(0), + mIsUnderwater(false), mVisibilityFlags(0), mReflectionTarget(0), mActive(1) { mSky = sky; @@ -38,7 +38,6 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : + RV_Actors * Settings::Manager::getBool("reflect actors", "Water") + RV_Misc * Settings::Manager::getBool("reflect misc", "Water") + RV_Sky; - mReflectDistance = Settings::Manager::getInt("reflect distance", "Water"); mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode->setPosition(0, mTop, 0); @@ -73,6 +72,8 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : createMaterial(); mWater->setMaterial(mMaterial); + + mUnderwaterEffect = Settings::Manager::getBool("underwater effect", "Water"); } void Water::setActive(bool active) @@ -120,9 +121,7 @@ void Water::checkUnderwater(float y) if (!mActive) return; if ((mIsUnderwater && y > mTop) || !mWater->isVisible() || mCamera->getPolygonMode() != Ogre::PM_SOLID) { - try { - CompositorManager::getSingleton().setCompositorEnabled(mViewport, mCompositorName, false); - } catch(...) {} + CompositorManager::getSingleton().setCompositorEnabled(mViewport, mCompositorName, false); // tell the shader we are not underwater Ogre::Pass* pass = mMaterial->getTechnique(0)->getPass(0); @@ -139,9 +138,8 @@ void Water::checkUnderwater(float y) if (!mIsUnderwater && y < mTop && mWater->isVisible() && mCamera->getPolygonMode() == Ogre::PM_SOLID) { - try { + if (mUnderwaterEffect) CompositorManager::getSingleton().setCompositorEnabled(mViewport, mCompositorName, true); - } catch(...) {} // tell the shader we are underwater Ogre::Pass* pass = mMaterial->getTechnique(0)->getPass(0); @@ -164,10 +162,6 @@ Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { - //mOldCameraFarClip = mCamera->getFarClipDistance(); - //if (mReflectDistance != 0) - // mCamera->setFarClipDistance(mReflectDistance); - if (evt.source == mReflectionTarget) { mWater->setVisible(false); @@ -189,8 +183,6 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) { mWater->setVisible(true); - //mCamera->setFarClipDistance(mOldCameraFarClip); - if (evt.source == mReflectionTarget) { mSky->resetSkyPosition(); diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index b5aa29a5ba..0e23f5b0c3 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -41,9 +41,8 @@ namespace MWRender { Ogre::RenderTarget* mReflectionTarget; + bool mUnderwaterEffect; int mVisibilityFlags; - int mReflectDistance; - int mOldCameraFarClip; public: Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 6b037c06a9..4b86cba927 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -71,6 +71,9 @@ reflect actors = true reflect misc = false +# Enable underwater effect. It is not resource intensive, so only disable it if you have problems. +underwater effect = true + [Sound] # Device name. Blank means default device = From 0b2dab0b5dca85d548bb29305456db3a845c31d5 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 18:17:52 +0200 Subject: [PATCH 440/488] disable water fog due to some issues --- files/water/water.cg | 4 ++-- files/water/water.material | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/files/water/water.cg b/files/water/water.cg index 7c7ec07809..bf6d04c5cc 100644 --- a/files/water/water.cg +++ b/files/water/water.cg @@ -116,6 +116,6 @@ void main_fp oColor.xyz = lerp(oColor.xyz, float3(0, 0.65, 0.65), saturate(isUnderwater * (iDepth / 2000.f))); // underwater fog // add fog - float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); - oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); + //float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); + //oColor.xyz = lerp(oColor.xyz, fogColour, fogValue); } diff --git a/files/water/water.material b/files/water/water.material index 1b8573c4ae..7ce6e7ba29 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -59,8 +59,8 @@ material Water fragment_program_ref Water_FP { param_named_auto time time 0.1 - param_named_auto fogColour fog_colour - param_named_auto fogParams fog_params + //param_named_auto fogColour fog_colour + //param_named_auto fogParams fog_params param_named_auto renderTargetFlipping render_target_flipping param_named_auto far far_clip_distance param_named_auto lightPosObjSpace0 light_position_object_space 0 From 00b8ce6b355ed71253e0760456fcf9465ec682ca Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sun, 8 Apr 2012 18:22:41 +0200 Subject: [PATCH 441/488] Fix linker error in windows. --- apps/openmw/mwworld/inventorystore.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/inventorystore.hpp b/apps/openmw/mwworld/inventorystore.hpp index ca733b0847..60b89b0b47 100644 --- a/apps/openmw/mwworld/inventorystore.hpp +++ b/apps/openmw/mwworld/inventorystore.hpp @@ -10,7 +10,7 @@ namespace MWMechanics namespace MWWorld { - struct Environment; + class Environment; ///< \brief Variant of the ContainerStore for NPCs class InventoryStore : public ContainerStore From 9893e4b38484cb9806af407a9f52d8a536542687 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 19:43:04 +0200 Subject: [PATCH 442/488] made player respect NpcStats for mDrawState --- apps/openmw/mwworld/player.cpp | 12 ++++++++++-- apps/openmw/mwworld/player.hpp | 5 ++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index b333d106af..d24780ec10 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -4,6 +4,7 @@ #include "../mwrender/player.hpp" #include "../mwmechanics/movement.hpp" +#include "../mwmechanics/npcstats.hpp" #include "world.hpp" #include "class.hpp" @@ -12,7 +13,7 @@ namespace MWWorld { Player::Player (MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world) : mCellStore (0), mRenderer (renderer), mWorld (world), mClass (0), - mAutoMove (false), mForwardBackward (0) , mDrawState(DrawState_Nothing) + mAutoMove (false), mForwardBackward (0) { mPlayer.base = player; mPlayer.ref.refID = "player"; @@ -50,7 +51,8 @@ namespace MWWorld void Player::setDrawState(const DrawState& value) { - mDrawState = value; + MWWorld::Ptr ptr = getPlayer(); + MWWorld::Class::get(ptr).getNpcStats(ptr).mDrawState = value; } void Player::setAutoMove (bool enable) @@ -94,4 +96,10 @@ namespace MWWorld MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); } + + DrawState Player::getDrawState() + { + MWWorld::Ptr ptr = getPlayer(); + return MWWorld::Class::get(ptr).getNpcStats(ptr).mDrawState; + } } diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index f235140f8c..8dcd9fcc65 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -20,7 +20,7 @@ namespace MWWorld class World; /// \brief NPC object representing the player and additional player data - class Player + class Player { ESMS::LiveCellRef mPlayer; MWWorld::Ptr::CellStore *mCellStore; @@ -33,7 +33,6 @@ namespace MWWorld ESM::Class *mClass; bool mAutoMove; int mForwardBackward; - DrawState mDrawState; public: Player(MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world); @@ -110,7 +109,7 @@ namespace MWWorld return mAutoMove; } - DrawState getDrawState() { return mDrawState; } + DrawState getDrawState(); void setAutoMove (bool enable); From db928dcb2ffae1a12240d9dc0567c677d3d5df57 Mon Sep 17 00:00:00 2001 From: Aleksandar Jovanov Date: Sun, 8 Apr 2012 19:44:11 +0200 Subject: [PATCH 443/488] put an opening bracket on a new line --- apps/openmw/mwworld/class.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/class.cpp b/apps/openmw/mwworld/class.cpp index 9d766909f7..ae12a2ab94 100644 --- a/apps/openmw/mwworld/class.cpp +++ b/apps/openmw/mwworld/class.cpp @@ -26,7 +26,9 @@ namespace MWWorld { } - void Class::insertObject(const Ptr& ptr, MWWorld::PhysicsSystem& physics, MWWorld::Environment& environment) const{ + + void Class::insertObject(const Ptr& ptr, MWWorld::PhysicsSystem& physics, MWWorld::Environment& environment) const + { } From aa8208efb97ad70f8559ad316efb7755e2bb1516 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 8 Apr 2012 22:18:56 +0200 Subject: [PATCH 444/488] changed compositor to be compatible with Ogre 1.8RC --- files/gbuffer/gbuffer.compositor | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/files/gbuffer/gbuffer.compositor b/files/gbuffer/gbuffer.compositor index 6ca35df87b..316003af6b 100644 --- a/files/gbuffer/gbuffer.compositor +++ b/files/gbuffer/gbuffer.compositor @@ -11,8 +11,11 @@ compositor gbuffer input none pass clear { - // make sure to set this to the viewport background color from outside - colour_value 0 0 0 1 + clear + { + // make sure to set this to the viewport background color from outside + colour_value 0 0 0 1 + } } pass render_scene { @@ -56,8 +59,11 @@ compositor gbufferFinalizer shadows off pass clear { - buffers colour - colour_value 0 0 0 0 + clear + { + buffers colour + colour_value 0 0 0 0 + } } pass render_quad { @@ -75,6 +81,9 @@ compositor gbufferFinalizer input none pass clear { + clear + { + } } pass render_quad { From 0aecb0ed5c553d3c818f84a480fe655da59dae5a Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 8 Apr 2012 23:44:40 +0200 Subject: [PATCH 445/488] cmake fix --- apps/openmw/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2342882e07..a8ae0bd49d 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -55,7 +55,7 @@ add_openmw_dir (mwclass ) add_openmw_dir (mwmechanics - mechanicsmanager stat creaturestats magiceffects movement actors + mechanicsmanager stat creaturestats magiceffects movement actors drawstate ) # Main executable From 1df7be7feedbe112b229a56282d620d17244fc6b Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 9 Apr 2012 00:10:42 +0200 Subject: [PATCH 446/488] - fixes to texture filtering setting - add a sensible warning to settings-default.cfg, since there have been some confusions with it --- apps/openmw/mwrender/renderingmanager.cpp | 5 +++-- files/settings-default.cfg | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 8d84af98f4..aadc92369c 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -41,10 +41,11 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const std::string filter = Settings::Manager::getString("texture filtering", "General"); if (filter == "anisotropic") tfo = TFO_ANISOTROPIC; else if (filter == "trilinear") tfo = TFO_TRILINEAR; - else /* if (filter == "bilinear") */ tfo = TFO_BILINEAR; + else if (filter == "bilinear") tfo = TFO_BILINEAR; + else if (filter == "none") tfo = TFO_NONE; MaterialManager::getSingleton().setDefaultTextureFiltering(tfo); - MaterialManager::getSingleton().setDefaultAnisotropy(Settings::Manager::getInt("anisotropy", "General")); + MaterialManager::getSingleton().setDefaultAnisotropy( (filter == "anisotropic") ? Settings::Manager::getInt("anisotropy", "General") : 1 ); // Load resources ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 4b86cba927..d5a8bdfd46 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,8 +1,12 @@ +# WARNING: Editing this file might have no effect, as these +# settings are overwritten by your user settings file. + [General] # Camera field of view field of view = 55 # Texture filtering mode. valid values: +# none # anisotropic # bilinear # trilinear From e5b1e27fa6fae0b8f10dbff3e757342acefdbd5c Mon Sep 17 00:00:00 2001 From: gugus Date: Mon, 9 Apr 2012 13:24:19 +0200 Subject: [PATCH 447/488] pcRaiseRank works. Player can now join factions. --- apps/openmw/mwdialogue/dialoguemanager.cpp | 22 ++++++---- apps/openmw/mwscript/docs/vmformat.txt | 5 ++- apps/openmw/mwscript/statsextensions.cpp | 47 +++++++++++++++++----- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index cd7be50316..b36c9d998e 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -181,7 +181,17 @@ namespace MWDialogue break; case 46://Same faction - if(!selectCompare(comp,0,select.i)) return false; + { + MWMechanics::NpcStats PCstats = MWWorld::Class::get(mEnvironment.mWorld->getPlayer().getPlayer()).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); + MWMechanics::NpcStats NPCstats = MWWorld::Class::get(actor).getNpcStats(actor); + int sameFaction = 0; + if(!NPCstats.mFactionRank.empty()) + { + std::string NPCFaction = NPCstats.mFactionRank.begin()->first; + if(PCstats.mFactionRank.find(NPCFaction) != PCstats.mFactionRank.end()) sameFaction = 1; + } + if(!selectCompare(comp,sameFaction,select.i)) return false; + } break; case 48://Detected @@ -193,7 +203,6 @@ namespace MWDialogue break; case 50://choice - if(choice) { if(!selectCompare(comp,mChoice,select.i)) return false; @@ -447,9 +456,6 @@ namespace MWDialogue if (toLower (info.actor)!=MWWorld::Class::get (actor).getId (actor)) return false; - //PC Faction - if(!info.pcFaction.empty()) return false; - //NPC race if (!info.race.empty()) { @@ -495,8 +501,8 @@ namespace MWDialogue // TODO check player faction if(!info.pcFaction.empty()) { - MWMechanics::NpcStats stats = MWWorld::Class::get(actor).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); - std::map::iterator it = stats.mFactionRank.find(info.npcFaction); + MWMechanics::NpcStats stats = MWWorld::Class::get(mEnvironment.mWorld->getPlayer().getPlayer()).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); + std::map::iterator it = stats.mFactionRank.find(info.pcFaction); if(it!=stats.mFactionRank.end()) { //check rank @@ -816,7 +822,7 @@ namespace MWDialogue std::string DialogueManager::getFaction() { std::string factionID(""); - MWMechanics::NpcStats stats = MWWorld::Class::get(mActor).getNpcStats(mEnvironment.mWorld->getPlayer().getPlayer()); + MWMechanics::NpcStats stats = MWWorld::Class::get(mActor).getNpcStats(mActor); if(stats.mFactionRank.empty()) { std::cout << "No faction for this actor!"; diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 27b426d0e0..2b20b973c4 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -24,7 +24,8 @@ op 0x20007: PlayAnim, explicit reference op 0x20008: LoopAnim op 0x20009: LoopAnim, explicit reference op 0x2000a: Choice -opcodes 0x2000b-0x3ffff unused +op 0x2000b: PCRaiseRank +opcodes 0x2000c-0x3ffff unused Segment 4: (not implemented yet) @@ -127,5 +128,5 @@ op 0x2000141: GetWaterLevel op 0x2000142: SetWaterLevel op 0x2000143: ModWaterLevel op 0x2000144: ToggleWater, twa -op 0x2000145: PCRaiseRank +op 0x2000145: ModDisposition opcodes 0x2000146-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index be31321e98..05db103018 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -299,27 +299,54 @@ namespace MWScript } }; - class OpPCRaiseRank : public Interpreter::Opcode0 + class OpPCRaiseRank : public Interpreter::Opcode1 { public: - virtual void execute (Interpreter::Runtime& runtime) + virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + std::cout << "arg0:" << arg0<< std::endl; std::cout << "try to rais rank..."; + std::string factionID = ""; MWScript::InterpreterContext& context = static_cast (runtime.getContext()); - - std::string factionID = context.getEnvironment().mDialogueManager->getFaction(); + if(arg0==0) + { + std::cout << "slurpppp"; + factionID = context.getEnvironment().mDialogueManager->getFaction(); + } + else + { + factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + } if(factionID != "") { std::cout << "raiserank!!!!!"; MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); - MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) + { + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + } + else + { + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] +1; + } } std::cout << std::endl; } }; + class OpModDisposition : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + + } + }; + const int numberOfAttributes = 8; const int opcodeGetAttribute = 0x2000027; @@ -351,7 +378,8 @@ namespace MWScript const int opcodeModSkill = 0x20000fa; const int opcodeModSkillExplicit = 0x2000115; //const int opcodePCJoinFaction = 0x2000141; - const int opcodePCRaiseRank = 0x2000145; + const int opcodePCRaiseRank = 0x2000b; + const int opcodeModDisposition = 0x2000145; void registerExtensions (Compiler::Extensions& extensions) { @@ -424,8 +452,8 @@ namespace MWScript opcodeModSkill+i, opcodeModSkillExplicit+i); } //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); - std::cout << "rgister raiserank"; - extensions.registerInstruction("pcraiserank","",opcodePCRaiseRank); + extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); + extensions.registerInstruction("moddisposition","l",opcodeModDisposition); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -483,7 +511,8 @@ namespace MWScript } //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); - interpreter.installSegment5(opcodePCRaiseRank,new OpPCRaiseRank); + interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); + interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); } } } From 45d11eaf144a160d8a3b3a2fb83e0a1b491a2324 Mon Sep 17 00:00:00 2001 From: gugus Date: Mon, 9 Apr 2012 14:23:12 +0200 Subject: [PATCH 448/488] fixed a bug in the dialogue manager. --- apps/openmw/mwdialogue/dialoguemanager.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index b36c9d998e..5dded07b08 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -112,16 +112,15 @@ namespace switch (world.getGlobalVariableType (name)) { case 's': - - return selectCompare (comp, value, world.getGlobalVariable (name).mShort); + return selectCompare (comp, world.getGlobalVariable (name).mShort, value); case 'l': - return selectCompare (comp, value, world.getGlobalVariable (name).mLong); + return selectCompare (comp, world.getGlobalVariable (name).mLong, value); case 'f': - return selectCompare (comp, value, world.getGlobalVariable (name).mFloat); + return selectCompare (comp, world.getGlobalVariable (name).mFloat, value); case ' ': @@ -282,7 +281,7 @@ namespace MWDialogue { case '1': // function - return true; // TODO implement functions + return true; // Done elsewhere. case '2': // global From aa8418634f8f776a09e19bf141e322505b26ad1f Mon Sep 17 00:00:00 2001 From: gugus Date: Mon, 9 Apr 2012 14:26:53 +0200 Subject: [PATCH 449/488] add PCLowerRank script instruction --- apps/openmw/mwscript/docs/vmformat.txt | 3 +- apps/openmw/mwscript/statsextensions.cpp | 43 +++++++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 2b20b973c4..9a5cf8525d 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -25,7 +25,8 @@ op 0x20008: LoopAnim op 0x20009: LoopAnim, explicit reference op 0x2000a: Choice op 0x2000b: PCRaiseRank -opcodes 0x2000c-0x3ffff unused +op 0x2000c: PCLowerRank +opcodes 0x2000d-0x3ffff unused Segment 4: (not implemented yet) diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 05db103018..176f139aa1 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -305,14 +305,11 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { - std::cout << "arg0:" << arg0<< std::endl; - std::cout << "try to rais rank..."; std::string factionID = ""; MWScript::InterpreterContext& context = static_cast (runtime.getContext()); if(arg0==0) { - std::cout << "slurpppp"; factionID = context.getEnvironment().mDialogueManager->getFaction(); } else @@ -322,7 +319,6 @@ namespace MWScript } if(factionID != "") { - std::cout << "raiserank!!!!!"; MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) { @@ -336,7 +332,41 @@ namespace MWScript std::cout << std::endl; } }; - + + class OpPCLowerRank : public Interpreter::Opcode1 + { + public: + + virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) + { + std::string factionID = ""; + MWScript::InterpreterContext& context + = static_cast (runtime.getContext()); + if(arg0==0) + { + factionID = context.getEnvironment().mDialogueManager->getFaction(); + } + else + { + factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + } + if(factionID != "") + { + MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); + if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) + { + //do nothing, the player is not in the faction... Throw an exeption? + } + else + { + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] -1; + } + } + std::cout << std::endl; + } + }; + class OpModDisposition : public Interpreter::Opcode0 { public: @@ -379,6 +409,7 @@ namespace MWScript const int opcodeModSkillExplicit = 0x2000115; //const int opcodePCJoinFaction = 0x2000141; const int opcodePCRaiseRank = 0x2000b; + const int opcodePCLowerRank = 0x2000c; const int opcodeModDisposition = 0x2000145; void registerExtensions (Compiler::Extensions& extensions) @@ -453,6 +484,7 @@ namespace MWScript } //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); + extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank); extensions.registerInstruction("moddisposition","l",opcodeModDisposition); } @@ -512,6 +544,7 @@ namespace MWScript //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); + interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank); interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); } } From 6ca212b9e96280cbb671d22b44795ecdc64a6198 Mon Sep 17 00:00:00 2001 From: gugus Date: Mon, 9 Apr 2012 14:30:42 +0200 Subject: [PATCH 450/488] script instruction: PCJoinFaction --- apps/openmw/mwscript/docs/vmformat.txt | 3 +- apps/openmw/mwscript/statsextensions.cpp | 35 ++++++++++++++++++------ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 9a5cf8525d..30b9f97e79 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -26,7 +26,8 @@ op 0x20009: LoopAnim, explicit reference op 0x2000a: Choice op 0x2000b: PCRaiseRank op 0x2000c: PCLowerRank -opcodes 0x2000d-0x3ffff unused +op x20000d: PCJoinFaction +opcodes 0x2000e-0x3ffff unused Segment 4: (not implemented yet) diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 176f139aa1..5b64ee239e 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -284,18 +284,36 @@ namespace MWScript } }; - class OpPCJoinFaction : public Interpreter::Opcode0 + class OpPCJoinFaction : public Interpreter::Opcode1 { public: - virtual void execute (Interpreter::Runtime& runtime) + virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { + std::string factionID = ""; MWScript::InterpreterContext& context = static_cast (runtime.getContext()); - - std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); - runtime.pop(); - context.getEnvironment().mWorld->getPlayer().addFaction(factionID); + if(arg0==0) + { + factionID = context.getEnvironment().mDialogueManager->getFaction(); + } + else + { + factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + } + if(factionID != "") + { + MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); + if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) + { + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + } + else + { + //the player is already in the faction... Throw an exeption? + } + } } }; @@ -329,7 +347,6 @@ namespace MWScript MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] +1; } } - std::cout << std::endl; } }; @@ -363,7 +380,6 @@ namespace MWScript MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] -1; } } - std::cout << std::endl; } }; @@ -410,6 +426,7 @@ namespace MWScript //const int opcodePCJoinFaction = 0x2000141; const int opcodePCRaiseRank = 0x2000b; const int opcodePCLowerRank = 0x2000c; + const int opcodePCJoinFaction = 0x2000d; const int opcodeModDisposition = 0x2000145; void registerExtensions (Compiler::Extensions& extensions) @@ -485,6 +502,7 @@ namespace MWScript //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank); + extensions.registerInstruction("pcjoinfaction","/S",opcodePCJoinFaction); extensions.registerInstruction("moddisposition","l",opcodeModDisposition); } @@ -545,6 +563,7 @@ namespace MWScript //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank); + interpreter.installSegment3(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); } } From dd9a88cee266f4e91bd77312b3b083c9c9a47ad7 Mon Sep 17 00:00:00 2001 From: gugus Date: Mon, 9 Apr 2012 14:32:07 +0200 Subject: [PATCH 451/488] clean up --- apps/openmw/mwscript/statsextensions.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 5b64ee239e..27983eca8a 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -423,7 +423,7 @@ namespace MWScript const int opcodeSetSkillExplicit = 0x20000df; const int opcodeModSkill = 0x20000fa; const int opcodeModSkillExplicit = 0x2000115; - //const int opcodePCJoinFaction = 0x2000141; + const int opcodePCRaiseRank = 0x2000b; const int opcodePCLowerRank = 0x2000c; const int opcodePCJoinFaction = 0x2000d; @@ -499,7 +499,6 @@ namespace MWScript extensions.registerInstruction (mod + skills[i], "l", opcodeModSkill+i, opcodeModSkillExplicit+i); } - //extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank); extensions.registerInstruction("pcjoinfaction","/S",opcodePCJoinFaction); @@ -560,7 +559,6 @@ namespace MWScript interpreter.installSegment5 (opcodeModSkillExplicit+i, new OpModSkill (i)); } - //interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank); interpreter.installSegment3(opcodePCJoinFaction,new OpPCJoinFaction); From 944654f2637c68231583c636f064c6308067aa7a Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 9 Apr 2012 15:20:57 +0200 Subject: [PATCH 452/488] image rotating function --- CMakeLists.txt | 1 + libs/openengine/ogre/imagerotate.cpp | 74 ++++++++++++++++++++++++++++ libs/openengine/ogre/imagerotate.hpp | 27 ++++++++++ 3 files changed, 102 insertions(+) create mode 100644 libs/openengine/ogre/imagerotate.cpp create mode 100644 libs/openengine/ogre/imagerotate.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b87e35447..1483864321 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,7 @@ set(OENGINE_OGRE ${LIBDIR}/openengine/ogre/renderer.cpp ${LIBDIR}/openengine/ogre/mouselook.cpp ${LIBDIR}/openengine/ogre/fader.cpp + ${LIBDIR}/openengine/ogre/imagerotate.cpp ) set(OENGINE_GUI ${LIBDIR}/openengine/gui/events.cpp diff --git a/libs/openengine/ogre/imagerotate.cpp b/libs/openengine/ogre/imagerotate.cpp new file mode 100644 index 0000000000..a6304277eb --- /dev/null +++ b/libs/openengine/ogre/imagerotate.cpp @@ -0,0 +1,74 @@ +#include "imagerotate.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Ogre; +using namespace OEngine::Render; + +void ImageRotate::rotate(const std::string& sourceImage, const std::string& destImage, const float angle) +{ + Root* root = Ogre::Root::getSingletonPtr(); + + SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC); + Camera* camera = sceneMgr->createCamera("ImageRotateCamera"); + + MaterialPtr material = MaterialManager::getSingleton().create("ImageRotateMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + material->getTechnique(0)->getPass(0)->setLightingEnabled(false); + material->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false); + TextureUnitState* tus = material->getTechnique(0)->getPass(0)->createTextureUnitState(sourceImage); + Degree deg(angle); + tus->setTextureRotate(Radian(deg.valueRadians())); + tus->setTextureAddressingMode(TextureUnitState::TAM_BORDER); + tus->setTextureBorderColour(ColourValue(0, 0, 0, 0)); + + Rectangle2D* rect = new Rectangle2D(true); + rect->setCorners(-1.0, 1.0, 1.0, -1.0); + rect->setMaterial("ImageRotateMaterial"); + // Render the background before everything else + rect->setRenderQueueGroup(RENDER_QUEUE_BACKGROUND); + + // Use infinite AAB to always stay visible + AxisAlignedBox aabInf; + aabInf.setInfinite(); + rect->setBoundingBox(aabInf); + + // Attach background to the scene + SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode(); + node->attachObject(rect); + + // retrieve image width and height + TexturePtr sourceTexture = TextureManager::getSingleton().getByName(sourceImage); + unsigned int width = sourceTexture->getWidth(); + unsigned int height = sourceTexture->getHeight(); + + TexturePtr destTexture = TextureManager::getSingleton().createManual( + "ImageRotateDestTexture", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + TEX_TYPE_2D, + width, height, + 0, + PF_R8G8B8, + TU_RENDERTARGET); + + RenderTarget* rtt = destTexture->getBuffer()->getRenderTarget(); + rtt->setAutoUpdated(false); + Viewport* vp = rtt->addViewport(camera); + vp->setOverlaysEnabled(false); + vp->setShadowsEnabled(false); + + rtt->update(); + rtt->writeContentsToFile(destImage); + + // remove all the junk we've created + TextureManager::getSingleton().remove("ImageRotateDestTexture"); + MaterialManager::getSingleton().remove("ImageRotateMaterial"); + root->destroySceneManager(sceneMgr); + delete rect; +} diff --git a/libs/openengine/ogre/imagerotate.hpp b/libs/openengine/ogre/imagerotate.hpp new file mode 100644 index 0000000000..85363d71f4 --- /dev/null +++ b/libs/openengine/ogre/imagerotate.hpp @@ -0,0 +1,27 @@ +#ifndef OENGINE_OGRE_IMAGEROTATE_HPP +#define OENGINE_OGRE_IMAGEROTATE_HPP + +#include + +namespace OEngine +{ +namespace Render +{ + + /// Rotate an image by certain degrees and save as file, uses the GPU + /// Make sure Ogre Root is initialised before calling + class ImageRotate + { + public: + /** + * @param source image (file name - has to exist in an resource group) + * @param destination image (absolute file path) + * @param angle in degrees to turn + */ + static void rotate(const std::string& sourceImage, const std::string& destImage, const float angle); + }; + +} +} + +#endif From 33f360f52f363e67a65b1432a33442d9bfc0a303 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 9 Apr 2012 15:36:51 +0200 Subject: [PATCH 453/488] transparency fix --- libs/openengine/ogre/imagerotate.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/openengine/ogre/imagerotate.cpp b/libs/openengine/ogre/imagerotate.cpp index a6304277eb..166a1d3c60 100644 --- a/libs/openengine/ogre/imagerotate.cpp +++ b/libs/openengine/ogre/imagerotate.cpp @@ -54,7 +54,7 @@ void ImageRotate::rotate(const std::string& sourceImage, const std::string& dest TEX_TYPE_2D, width, height, 0, - PF_R8G8B8, + PF_A8R8G8B8, TU_RENDERTARGET); RenderTarget* rtt = destTexture->getBuffer()->getRenderTarget(); @@ -62,6 +62,8 @@ void ImageRotate::rotate(const std::string& sourceImage, const std::string& dest Viewport* vp = rtt->addViewport(camera); vp->setOverlaysEnabled(false); vp->setShadowsEnabled(false); + vp->setBackgroundColour(ColourValue(0,0,0,0)); + vp->setClearEveryFrame(true, FBT_DEPTH); rtt->update(); rtt->writeContentsToFile(destImage); From 344641e5748d5cb12bcddebd4706a585c73ebbd8 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 11 Apr 2012 13:38:17 +0200 Subject: [PATCH 454/488] updated developer list in readme file --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index 17806172f0..e1c24ab52e 100644 --- a/readme.txt +++ b/readme.txt @@ -95,6 +95,7 @@ Allowed options: CREDITS Current Developers: +Aleksandar Jovanov Alexander “Ace” Olofsson athile BrotherBrick From 2a4fcf42a3a8af3314a0c87deb2d719944482a73 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 11 Apr 2012 18:53:13 +0200 Subject: [PATCH 455/488] basic shadows --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/engine.cpp | 1 + apps/openmw/mwrender/localmap.cpp | 4 +- apps/openmw/mwrender/objects.cpp | 2 + apps/openmw/mwrender/occlusionquery.cpp | 3 + apps/openmw/mwrender/renderingmanager.cpp | 33 ++- apps/openmw/mwrender/renderingmanager.hpp | 15 +- apps/openmw/mwrender/shaderhelper.cpp | 308 ++++++++++++++++++++++ apps/openmw/mwrender/shaderhelper.hpp | 29 ++ apps/openmw/mwrender/shadows.cpp | 175 ++++++++++++ apps/openmw/mwrender/shadows.hpp | 39 +++ apps/openmw/mwrender/sky.cpp | 10 + apps/openmw/mwrender/terrain.cpp | 21 +- apps/openmw/mwrender/terrain.hpp | 3 +- apps/openmw/mwrender/terrainmaterial.cpp | 110 ++++---- apps/openmw/mwrender/terrainmaterial.hpp | 5 + apps/openmw/mwrender/water.cpp | 75 +++++- apps/openmw/mwrender/water.hpp | 2 + components/nifogre/ogre_nif_loader.cpp | 181 +++---------- files/CMakeLists.txt | 3 + files/settings-default.cfg | 31 ++- files/shadows/depthshadowcaster.cg | 51 ++++ files/shadows/depthshadowcaster.material | 67 +++++ files/water/water.material | 2 +- 24 files changed, 953 insertions(+), 219 deletions(-) create mode 100644 apps/openmw/mwrender/shaderhelper.cpp create mode 100644 apps/openmw/mwrender/shaderhelper.hpp create mode 100644 apps/openmw/mwrender/shadows.cpp create mode 100644 apps/openmw/mwrender/shadows.hpp create mode 100644 files/shadows/depthshadowcaster.cg create mode 100644 files/shadows/depthshadowcaster.material diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index a8ae0bd49d..6a65c0e14a 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -15,7 +15,7 @@ source_group(game FILES ${GAME} ${GAME_HEADER}) add_openmw_dir (mwrender renderingmanager debugging sky player animation npcanimation creatureanimation actors objects - renderinginterface localmap occlusionquery terrain terrainmaterial water + renderinginterface localmap occlusionquery terrain terrainmaterial water shadows shaderhelper ) add_openmw_dir (mwinput diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 259733600f..1adcf8dcac 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -362,6 +362,7 @@ void OMW::Engine::go() addResourcesDirectory(mResDir / "mygui"); addResourcesDirectory(mResDir / "water"); addResourcesDirectory(mResDir / "gbuffer"); + addResourcesDirectory(mResDir / "shadows"); // Create the window mOgre->createWindow("OpenMW"); diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index cb3c0a204b..2cc233a011 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -225,7 +225,9 @@ void LocalMap::render(const float x, const float y, vp->setShadowsEnabled(false); vp->setBackgroundColour(ColourValue(0, 0, 0)); vp->setVisibilityMask(RV_Map); - vp->setMaterialScheme("Map"); + + // use fallback techniques without shadows and without mrt + vp->setMaterialScheme("Fallback"); rtt->update(); diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index b633330fa9..eb7e440cb7 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -193,6 +193,8 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) sg->setVisibilityFlags(small ? RV_StaticsSmall : RV_Statics); + sg->setCastShadows(true); + sg->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); mRenderer.getScene()->destroyEntity(ent); diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index d789b8c4e9..80b804dce2 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -60,6 +60,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNodeReal = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); mBBQueryTotal = mRendering->getScene()->createBillboardSet(1); + mBBQueryTotal->setCastShadows(false); mBBQueryTotal->setDefaultDimensions(150, 150); mBBQueryTotal->createBillboard(Vector3::ZERO); mBBQueryTotal->setMaterialName("QueryTotalPixels"); @@ -67,6 +68,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNodeReal->attachObject(mBBQueryTotal); mBBQueryVisible = mRendering->getScene()->createBillboardSet(1); + mBBQueryVisible->setCastShadows(false); mBBQueryVisible->setDefaultDimensions(150, 150); mBBQueryVisible->createBillboard(Vector3::ZERO); mBBQueryVisible->setMaterialName("QueryVisiblePixels"); @@ -75,6 +77,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); /// \todo ideally this should occupy exactly 1 pixel on the screen + mBBQuerySingleObject->setCastShadows(false); mBBQuerySingleObject->setDefaultDimensions(0.003, 0.003); mBBQuerySingleObject->createBillboard(Vector3::ZERO); mBBQuerySingleObject->setMaterialName("QueryVisiblePixels"); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index aadc92369c..ee60407b24 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -14,6 +14,10 @@ #include #include +#include "shadows.hpp" +#include "shaderhelper.hpp" +#include "localmap.hpp" +#include "water.hpp" using namespace MWRender; using namespace Ogre; @@ -21,11 +25,9 @@ using namespace Ogre; namespace MWRender { RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const boost::filesystem::path& resDir, OEngine::Physic::PhysicEngine* engine, MWWorld::Environment& environment) - :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0) + :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0), mSunEnabled(0) { mRendering.createScene("PlayerCam", Settings::Manager::getFloat("field of view", "General"), 5); - mTerrainManager = new TerrainManager(mRendering.getScene(), - environment); mWater = 0; @@ -86,6 +88,12 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); cameraPitchNode->attachObject(mRendering.getCamera()); + mShadows = new Shadows(&mRendering); + mShaderHelper = new ShaderHelper(this); + + mTerrainManager = new TerrainManager(mRendering.getScene(), this, + environment); + //mSkyManager = 0; mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera(), &environment); @@ -412,6 +420,7 @@ void RenderingManager::skipAnimation (const MWWorld::Ptr& ptr) void RenderingManager::setSunColour(const Ogre::ColourValue& colour) { + if (!mSunEnabled) return; mSun->setDiffuseColour(colour); mSun->setSpecularColour(colour); mTerrainManager->setDiffuse(colour); @@ -425,12 +434,21 @@ void RenderingManager::setAmbientColour(const Ogre::ColourValue& colour) void RenderingManager::sunEnable() { - if (mSun) mSun->setVisible(true); + // Don't disable the light, as the shaders assume the first light to be directional. + //if (mSun) mSun->setVisible(true); + mSunEnabled = true; } void RenderingManager::sunDisable() { - if (mSun) mSun->setVisible(false); + // Don't disable the light, as the shaders assume the first light to be directional. + //if (mSun) mSun->setVisible(false); + mSunEnabled = false; + if (mSun) + { + mSun->setDiffuseColour(ColourValue(0,0,0)); + mSun->setSpecularColour(ColourValue(0,0,0)); + } } void RenderingManager::setSunDirection(const Ogre::Vector3& direction) @@ -475,4 +493,9 @@ const bool RenderingManager::useMRT() return Settings::Manager::getBool("shader", "Water"); } +Shadows* RenderingManager::getShadows() +{ + return mShadows; +} + } // namespace diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index da9c55cb5a..a563d78c6a 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -25,8 +25,6 @@ #include "objects.hpp" #include "actors.hpp" #include "player.hpp" -#include "water.hpp" -#include "localmap.hpp" #include "occlusionquery.hpp" namespace Ogre @@ -45,7 +43,10 @@ namespace MWWorld namespace MWRender { - + class Shadows; + class ShaderHelper; + class LocalMap; + class Water; class RenderingManager: private RenderingInterface { @@ -114,6 +115,8 @@ class RenderingManager: private RenderingInterface { bool occlusionQuerySupported() { return mOcclusionQuery->supported(); }; OcclusionQuery* getOcclusionQuery() { return mOcclusionQuery; }; + Shadows* getShadows(); + void setGlare(bool glare); void skyEnable (); void skyDisable (); @@ -149,6 +152,8 @@ class RenderingManager: private RenderingInterface { void setAmbientMode(); + bool mSunEnabled; + SkyManager* mSkyManager; OcclusionQuery* mOcclusionQuery; @@ -180,6 +185,10 @@ class RenderingManager: private RenderingInterface { MWRender::Debugging *mDebugging; MWRender::LocalMap* mLocalMap; + + MWRender::Shadows* mShadows; + + MWRender::ShaderHelper* mShaderHelper; }; } diff --git a/apps/openmw/mwrender/shaderhelper.cpp b/apps/openmw/mwrender/shaderhelper.cpp new file mode 100644 index 0000000000..93f960dc42 --- /dev/null +++ b/apps/openmw/mwrender/shaderhelper.cpp @@ -0,0 +1,308 @@ +#include "shaderhelper.hpp" +#include "renderingmanager.hpp" +#include "shadows.hpp" + +#include +#include +#include + +#include + +using namespace Ogre; +using namespace MWRender; + +ShaderHelper::ShaderHelper(RenderingManager* rend) +{ + mRendering = rend; + applyShaders(); +} + +void ShaderHelper::applyShaders() +{ + if (!Settings::Manager::getBool("shaders", "Objects")) return; + + bool mrt = RenderingManager::useMRT(); + bool shadows = Settings::Manager::getBool("enabled", "Shadows"); + bool split = Settings::Manager::getBool("split", "Shadows"); + + // shader for normal rendering + createShader(mrt, shadows, split, "main"); + + // fallback shader without mrt and without shadows + // (useful for reflection and for minimap) + createShader(false, false, false, "main_fallback"); +} + +void ShaderHelper::createShader(const bool mrt, const bool shadows, const bool split, const std::string& name) +{ + HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); + + const int numsplits = 3; + + // the number of lights to support. + // when rendering an object, OGRE automatically picks the lights that are + // closest to the object being rendered. unfortunately this mechanism does + // not work perfectly for objects batched together (they will all use the same + // lights). to work around this, we are simply pushing the maximum number + // of lights here in order to minimize disappearing lights. + int num_lights = Settings::Manager::getInt("num lights", "Objects"); + + { + // vertex + HighLevelGpuProgramPtr vertex; + if (!mgr.getByName(name+"_vp").isNull()) + mgr.remove(name+"_vp"); + + vertex = mgr.createProgram(name+"_vp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_VERTEX_PROGRAM); + vertex->setParameter("profiles", "vs_4_0 vs_2_x vp40 arbvp1"); + vertex->setParameter("entry_point", "main_vp"); + StringUtil::StrStreamType outStream; + outStream << + "void main_vp( \n" + " float4 position : POSITION, \n" + " float4 normal : NORMAL, \n" + " float4 colour : COLOR, \n" + " in float2 uv : TEXCOORD0, \n" + " out float2 oUV : TEXCOORD0, \n" + " out float4 oPosition : POSITION, \n" + " out float4 oPositionObjSpace : TEXCOORD1, \n" + " out float4 oNormal : TEXCOORD2, \n" + " out float oDepth : TEXCOORD3, \n" + " out float4 oVertexColour : TEXCOORD4, \n"; + if (shadows && !split) outStream << + " out float4 oLightSpacePos0 : TEXCOORD5, \n" + " uniform float4x4 worldMatrix, \n" + " uniform float4x4 texViewProjMatrix0, \n"; + else + { + for (int i=0; isetSource(outStream.str()); + vertex->load(); + vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); + if (shadows) + { + vertex->getDefaultParameters()->setNamedAutoConstant("worldMatrix", GpuProgramParameters::ACT_WORLD_MATRIX); + if (!split) + vertex->getDefaultParameters()->setNamedAutoConstant("texViewProjMatrix0", GpuProgramParameters::ACT_TEXTURE_VIEWPROJ_MATRIX, 0); + else + { + for (int i=0; igetDefaultParameters()->setNamedAutoConstant("texViewProjMatrix"+StringConverter::toString(i), GpuProgramParameters::ACT_TEXTURE_VIEWPROJ_MATRIX, i); + } + } + } + } + + { + // fragment + HighLevelGpuProgramPtr fragment; + if (!mgr.getByName(name+"_fp").isNull()) + mgr.remove(name+"_fp"); + + fragment = mgr.createProgram(name+"_fp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + "cg", GPT_FRAGMENT_PROGRAM); + fragment->setParameter("profiles", "ps_4_0 ps_2_x fp40 arbfp1"); + fragment->setParameter("entry_point", "main_fp"); + StringUtil::StrStreamType outStream; + + if (shadows) outStream << + "float depthShadow(sampler2D shadowMap, float4 shadowMapPos, float2 offset) \n" + "{ \n" + " shadowMapPos /= shadowMapPos.w; \n" + " float3 o = float3(offset.xy, -offset.x) * 0.3f; \n" + " float c = (shadowMapPos.z <= tex2D(shadowMap, shadowMapPos.xy - o.xy).r) ? 1 : 0; // top left \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, shadowMapPos.xy + o.xy).r) ? 1 : 0; // bottom right \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, shadowMapPos.xy + o.zy).r) ? 1 : 0; // bottom left \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, shadowMapPos.xy - o.zy).r) ? 1 : 0; // top right \n" + " return c / 4; \n" + "} \n"; + + outStream << + "void main_fp( \n" + " in float2 uv : TEXCOORD0, \n" + " out float4 oColor : COLOR, \n" + " uniform sampler2D texture : register(s0), \n" + " float4 positionObjSpace : TEXCOORD1, \n" + " float4 normal : TEXCOORD2, \n" + " float iDepth : TEXCOORD3, \n" + " float4 vertexColour : TEXCOORD4, \n" + " uniform float4 fogColour, \n" + " uniform float4 fogParams, \n"; + + if (shadows) outStream << + " uniform float4 shadowFar_fadeStart, \n"; + + if (shadows && !split) outStream << + " uniform sampler2D shadowMap : register(s1), \n" + " float4 lightSpacePos0 : TEXCOORD5, \n" + " uniform float4 invShadowmapSize0, \n"; + else + { + outStream << + " uniform float4 pssmSplitPoints, \n"; + for (int i=0; i shadowFar_fadeStart.x) ? 1 : ((iDepth > shadowFar_fadeStart.y) ? 1-((1-shadow)*fade) : shadow); \n" + " lightColour.xyz += shadow * lit(dot(normalize(lightDir), normalize(normal)), 0, 0).y * lightDiffuse"<setSource(outStream.str()); + fragment->load(); + + for (int i=0; igetDefaultParameters()->setNamedAutoConstant("lightPositionObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); + fragment->getDefaultParameters()->setNamedAutoConstant("lightDiffuse"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); + fragment->getDefaultParameters()->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); + } + fragment->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); + fragment->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); + + if (shadows) + { + fragment->getDefaultParameters()->setNamedConstant("shadowFar_fadeStart", Vector4(mRendering->getShadows()->getShadowFar(), mRendering->getShadows()->getFadeStart()*mRendering->getShadows()->getShadowFar(), 0, 0)); + for (int i=0; i < (split ? numsplits : 1); ++i) + { + fragment->getDefaultParameters()->setNamedAutoConstant("invShadowmapSize" + StringConverter::toString(i), GpuProgramParameters::ACT_INVERSE_TEXTURE_SIZE, i+1); + } + if (split) + { + Vector4 splitPoints; + const PSSMShadowCameraSetup::SplitPointList& splitPointList = mRendering->getShadows()->getPSSMSetup()->getSplitPoints(); + // Populate from split point 1, not 0, since split 0 isn't useful (usually 0) + for (int i = 1; i < numsplits; ++i) + { + splitPoints[i-1] = splitPointList[i]; + } + fragment->getDefaultParameters()->setNamedConstant("pssmSplitPoints", splitPoints); + } + } + + if (mrt) + fragment->getDefaultParameters()->setNamedAutoConstant("far", GpuProgramParameters::ACT_FAR_CLIP_DISTANCE); + } +} diff --git a/apps/openmw/mwrender/shaderhelper.hpp b/apps/openmw/mwrender/shaderhelper.hpp new file mode 100644 index 0000000000..356d345deb --- /dev/null +++ b/apps/openmw/mwrender/shaderhelper.hpp @@ -0,0 +1,29 @@ +#ifndef GAME_SHADERHELPER_H +#define GAME_SHADERHELPER_H + +#include + +namespace MWRender +{ + class RenderingManager; + + /// + /// \brief manages the main shader + /// + class ShaderHelper + { + public: + ShaderHelper(RenderingManager* rend); + + void applyShaders(); + ///< apply new settings + + private: + RenderingManager* mRendering; + + void createShader(const bool mrt, const bool shadows, const bool split, const std::string& name); + }; + +} + +#endif diff --git a/apps/openmw/mwrender/shadows.cpp b/apps/openmw/mwrender/shadows.cpp new file mode 100644 index 0000000000..9c150f0c65 --- /dev/null +++ b/apps/openmw/mwrender/shadows.cpp @@ -0,0 +1,175 @@ +#include "shadows.hpp" + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "renderconst.hpp" + +using namespace Ogre; +using namespace MWRender; + +Shadows::Shadows(OEngine::Render::OgreRenderer* rend) : + mShadowFar(1000), mFadeStart(0.9) +{ + mRendering = rend; + mSceneMgr = mRendering->getScene(); + recreate(); +} + +void Shadows::recreate() +{ + bool enabled = Settings::Manager::getBool("enabled", "Shadows"); + + // Split shadow maps are currently disabled because the terrain cannot cope with them + // (Too many texture units) Solution would be a multi-pass terrain material + bool split = Settings::Manager::getBool("split", "Shadows"); + //const bool split = false; + + if (!enabled) + { + mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE); + return; + } + + int texsize = Settings::Manager::getInt("texture size", "Shadows"); + mSceneMgr->setShadowTextureSize(texsize); + + mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED); + + // no point light shadows, i'm afraid. might revisit this with Deferred Shading + mSceneMgr->setShadowTextureCountPerLightType(Light::LT_POINT, 0); + + mSceneMgr->setShadowTextureCountPerLightType(Light::LT_DIRECTIONAL, split ? 3 : 1); + mSceneMgr->setShadowTextureCount(split ? 3 : 1); + + mSceneMgr->setShadowTextureSelfShadow(true); + mSceneMgr->setShadowCasterRenderBackFaces(true); + mSceneMgr->setShadowTextureCasterMaterial("depth_shadow_caster"); + mSceneMgr->setShadowTexturePixelFormat(PF_FLOAT32_R); + mSceneMgr->setShadowDirLightTextureOffset(0.9); + mSceneMgr->setShadowDirectionalLightExtrusionDistance(1000000); + mSceneMgr->setShowDebugShadows(true); + + mShadowFar = split ? Settings::Manager::getInt("split shadow distance", "Shadows") : Settings::Manager::getInt("shadow distance", "Shadows"); + mSceneMgr->setShadowFarDistance(mShadowFar); + + mFadeStart = Settings::Manager::getFloat("fade start", "Shadows"); + + ShadowCameraSetupPtr shadowCameraSetup; + if (split) + { + mPSSMSetup = new PSSMShadowCameraSetup(); + mPSSMSetup->setSplitPadding(5); + mPSSMSetup->calculateSplitPoints(3, mRendering->getCamera()->getNearClipDistance(), mShadowFar); + + const Real adjustFactors[3] = {64, 64, 64}; + for (int i=0; i < 3; ++i) + { + mPSSMSetup->setOptimalAdjustFactor(i, adjustFactors[i]); + /*if (i==0) + mSceneMgr->setShadowTextureConfig(i, texsize, texsize, Ogre::PF_FLOAT32_R); + else if (i ==1) + mSceneMgr->setShadowTextureConfig(i, texsize/2, texsize/2, Ogre::PF_FLOAT32_R); + else if (i ==2) + mSceneMgr->setShadowTextureConfig(i, texsize/4, texsize/4, Ogre::PF_FLOAT32_R);*/ + } + + shadowCameraSetup = ShadowCameraSetupPtr(mPSSMSetup); + } + else + { + LiSPSMShadowCameraSetup* lispsmSetup = new LiSPSMShadowCameraSetup(); + lispsmSetup->setOptimalAdjustFactor(2); + //lispsmSetup->setCameraLightDirectionThreshold(Degree(0)); + //lispsmSetup->setUseAggressiveFocusRegion(false); + shadowCameraSetup = ShadowCameraSetupPtr(lispsmSetup); + } + mSceneMgr->setShadowCameraSetup(shadowCameraSetup); + + // Set visibility mask for the shadow render textures + int visibilityMask = RV_Actors * Settings::Manager::getBool("actor shadows", "Shadows") + + (RV_Statics + RV_StaticsSmall) * Settings::Manager::getBool("statics shadows", "Shadows") + + RV_Misc * Settings::Manager::getBool("misc shadows", "Shadows"); + + for (int i = 0; i < (split ? 3 : 1); ++i) + { + TexturePtr shadowTexture = mSceneMgr->getShadowTexture(i); + Viewport* vp = shadowTexture->getBuffer()->getRenderTarget()->getViewport(0); + vp->setVisibilityMask(visibilityMask); + } + + // -------------------------------------------------------------------------------------------------------------------- + // --------------------------- Debug overlays to display the content of shadow maps ----------------------------------- + // -------------------------------------------------------------------------------------------------------------------- + /* + OverlayManager& mgr = OverlayManager::getSingleton(); + Overlay* overlay; + + // destroy if already exists + if (overlay = mgr.getByName("DebugOverlay")) + mgr.destroy(overlay); + + overlay = mgr.create("DebugOverlay"); + for (size_t i = 0; i < (split ? 3 : 1); ++i) { + TexturePtr tex = mRendering->getScene()->getShadowTexture(i); + + // Set up a debug panel to display the shadow + + if (MaterialManager::getSingleton().resourceExists("Ogre/DebugTexture" + StringConverter::toString(i))) + MaterialManager::getSingleton().remove("Ogre/DebugTexture" + StringConverter::toString(i)); + MaterialPtr debugMat = MaterialManager::getSingleton().create( + "Ogre/DebugTexture" + StringConverter::toString(i), + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + + debugMat->getTechnique(0)->getPass(0)->setLightingEnabled(false); + TextureUnitState *t = debugMat->getTechnique(0)->getPass(0)->createTextureUnitState(tex->getName()); + t->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + + OverlayContainer* debugPanel; + + // destroy container if exists + try + { + if (debugPanel = + static_cast( + mgr.getOverlayElement("Ogre/DebugTexPanel" + StringConverter::toString(i) + ))) + mgr.destroyOverlayElement(debugPanel); + } + catch (Ogre::Exception&) {} + + debugPanel = (OverlayContainer*) + (OverlayManager::getSingleton().createOverlayElement("Panel", "Ogre/DebugTexPanel" + StringConverter::toString(i))); + debugPanel->_setPosition(0.8, i*0.25); + debugPanel->_setDimensions(0.2, 0.24); + debugPanel->setMaterialName(debugMat->getName()); + debugPanel->show(); + overlay->add2D(debugPanel); + overlay->show(); + } + */ +} + +PSSMShadowCameraSetup* Shadows::getPSSMSetup() +{ + return mPSSMSetup; +} + +float Shadows::getShadowFar() const +{ + return mShadowFar; +} + +float Shadows::getFadeStart() const +{ + return mFadeStart; +} diff --git a/apps/openmw/mwrender/shadows.hpp b/apps/openmw/mwrender/shadows.hpp new file mode 100644 index 0000000000..bc2b141f70 --- /dev/null +++ b/apps/openmw/mwrender/shadows.hpp @@ -0,0 +1,39 @@ +#ifndef GAME_SHADOWS_H +#define GAME_SHADOWS_H + +// forward declares +namespace Ogre +{ + class SceneManager; + class PSSMShadowCameraSetup; +} +namespace OEngine{ + namespace Render{ + class OgreRenderer; + } +} + +namespace MWRender +{ + class Shadows + { + public: + Shadows(OEngine::Render::OgreRenderer* rend); + + void recreate(); + + Ogre::PSSMShadowCameraSetup* getPSSMSetup(); + float getShadowFar() const; + float getFadeStart() const; + + protected: + OEngine::Render::OgreRenderer* mRendering; + Ogre::SceneManager* mSceneMgr; + + Ogre::PSSMShadowCameraSetup* mPSSMSetup; + float mShadowFar; + float mFadeStart; + }; +} + +#endif diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 188ec3b831..859da2dc11 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -102,6 +102,7 @@ void BillboardObject::init(const String& textureName, mNode->setPosition(finalPosition); mNode->attachObject(mBBSet); mBBSet->createBillboard(0,0,0); + mBBSet->setCastShadows(false); mMaterial = MaterialManager::getSingleton().create("BillboardMaterial"+StringConverter::toString(bodyCount), ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); mMaterial->removeAllTechniques(); @@ -450,6 +451,7 @@ void SkyManager::create() Entity* night1_ent = mSceneMgr->createEntity("meshes\\sky_night_01.nif"); night1_ent->setRenderQueueGroup(RQG_SkiesEarly+1); night1_ent->setVisibilityFlags(RV_Sky); + night1_ent->setCastShadows(false); mAtmosphereNight = mRootNode->createChildSceneNode(); mAtmosphereNight->attachObject(night1_ent); @@ -525,6 +527,7 @@ void SkyManager::create() // Atmosphere (day) mesh = NifOgre::NIFLoader::load("meshes\\sky_atmosphere.nif"); Entity* atmosphere_ent = mSceneMgr->createEntity("meshes\\sky_atmosphere.nif"); + atmosphere_ent->setCastShadows(false); ModVertexAlpha(atmosphere_ent, 0); @@ -596,6 +599,7 @@ void SkyManager::create() SceneNode* clouds_node = mRootNode->createChildSceneNode(); clouds_node->attachObject(clouds_ent); mCloudMaterial = clouds_ent->getSubEntity(0)->getMaterial(); + clouds_ent->setCastShadows(false); // Clouds vertex shader HighLevelGpuProgramPtr vshader2 = mgr.createProgram("Clouds_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, @@ -677,6 +681,8 @@ void SkyManager::create() mAtmosphereMaterial->getTechnique(0)->getPass(0)->setSceneBlending(SBT_TRANSPARENT_ALPHA); mCloudMaterial->getTechnique(0)->getPass(0)->setSceneBlending(SBT_TRANSPARENT_ALPHA); + mCloudMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); + mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("textures\\tx_sky_cloudy.dds"); mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(""); mCreated = true; @@ -766,12 +772,14 @@ void SkyManager::disable() void SkyManager::setMoonColour (bool red) { + if (!mCreated) return; mSecunda->setColour( red ? ColourValue(1.0, 0.0784, 0.0784) : ColourValue(1.0, 1.0, 1.0)); } void SkyManager::setCloudsOpacity(float opacity) { + if (!mCreated) return; mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("opacity", Real(opacity)); } @@ -927,11 +935,13 @@ void SkyManager::setThunder(const float factor) void SkyManager::setMasserFade(const float fade) { + if (!mCreated) return; mMasser->setVisibility(fade); } void SkyManager::setSecundaFade(const float fade) { + if (!mCreated) return; mSecunda->setVisibility(fade); } diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 67dd4e0b05..f9b43655b7 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -7,7 +7,8 @@ #include "terrainmaterial.hpp" #include "terrain.hpp" #include "renderconst.hpp" - +#include "shadows.hpp" +#include using namespace Ogre; @@ -16,8 +17,8 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - TerrainManager::TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& evn) : - mEnvironment(evn), mTerrainGroup(TerrainGroup(mgr, Terrain::ALIGN_X_Z, mLandSize, mWorldSize)) + TerrainManager::TerrainManager(Ogre::SceneManager* mgr, RenderingManager* rend, const MWWorld::Environment& evn) : + mEnvironment(evn), mTerrainGroup(TerrainGroup(mgr, Terrain::ALIGN_X_Z, mLandSize, mWorldSize)), mRendering(rend) { TerrainMaterialGeneratorPtr matGen; @@ -48,9 +49,19 @@ namespace MWRender mActiveProfile->setLayerSpecularMappingEnabled(false); mActiveProfile->setLayerNormalMappingEnabled(false); mActiveProfile->setLayerParallaxMappingEnabled(false); - mActiveProfile->setReceiveDynamicShadowsEnabled(false); - //composite maps lead to a drastic reduction in loading time so are + bool shadows = Settings::Manager::getBool("enabled", "Shadows"); + mActiveProfile->setReceiveDynamicShadowsEnabled(shadows); + mActiveProfile->setReceiveDynamicShadowsDepth(shadows); + if (Settings::Manager::getBool("split", "Shadows")) + mActiveProfile->setReceiveDynamicShadowsPSSM(mRendering->getShadows()->getPSSMSetup()); + else + mActiveProfile->setReceiveDynamicShadowsPSSM(0); + + mActiveProfile->setShadowFar(mRendering->getShadows()->getShadowFar()); + mActiveProfile->setShadowFadeStart(mRendering->getShadows()->getFadeStart()); + + //composite maps lead to a drastic increase in loading time so are //disabled mActiveProfile->setCompositeMapEnabled(false); diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 29a4ba36b3..dc4a2388ce 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -24,7 +24,7 @@ namespace MWRender{ */ class TerrainManager{ public: - TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& env); + TerrainManager(Ogre::SceneManager* mgr, RenderingManager* rend, const MWWorld::Environment& env); virtual ~TerrainManager(); void setDiffuse(const Ogre::ColourValue& diffuse); @@ -37,6 +37,7 @@ namespace MWRender{ Ogre::TerrainGroup mTerrainGroup; const MWWorld::Environment& mEnvironment; + RenderingManager* mRendering; Ogre::TerrainMaterialGeneratorB::SM2Profile* mActiveProfile; diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 87798006c3..57bea5388e 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -86,6 +86,7 @@ namespace Ogre , mPSSM(0) , mDepthShadows(false) , mLowLodShadows(false) + , mShadowFar(1300) { } @@ -102,6 +103,24 @@ namespace Ogre terrain->_setLightMapRequired(mLightmapEnabled, true); terrain->_setCompositeMapRequired(mCompositeMapEnabled); } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setShadowFar(float far) + { + if (mShadowFar != far) + { + mShadowFar = far; + mParent->_markChanged(); + } + } + //--------------------------------------------------------------------- + void TerrainMaterialGeneratorB::SM2Profile::setShadowFadeStart(float fadestart) + { + if (mShadowFadeStart != fadestart) + { + mShadowFadeStart = fadestart; + mParent->_markChanged(); + } + } //--------------------------------------------------------------------- void TerrainMaterialGeneratorB::SM2Profile::setLayerNormalMappingEnabled(bool enabled) { @@ -462,6 +481,7 @@ namespace Ogre StringUtil::StrStreamType sourceStr; generateFragmentProgramSource(prof, terrain, tt, sourceStr); + ret->setSource(sourceStr.str()); ret->load(); defaultFpParams(prof, terrain, tt, ret); @@ -533,8 +553,8 @@ namespace Ogre GpuProgramParameters::ACT_TEXTURE_VIEWPROJ_MATRIX, i); if (prof->getReceiveDynamicShadowsDepth()) { - params->setNamedAutoConstant("depthRange" + StringConverter::toString(i), - GpuProgramParameters::ACT_SHADOW_SCENE_DEPTH_RANGE, i); + //params->setNamedAutoConstant("depthRange" + StringConverter::toString(i), + //GpuProgramParameters::ACT_SHADOW_SCENE_DEPTH_RANGE, i); } } } @@ -567,6 +587,7 @@ namespace Ogre if (prof->isShadowingEnabled(tt, terrain)) { + params->setNamedConstant("shadowFar_fadeStart", Vector4(prof->mShadowFar, prof->mShadowFadeStart * prof->mShadowFar, 0, 0)); uint numTextures = 1; if (prof->getReceiveDynamicShadowsPSSM()) { @@ -732,7 +753,7 @@ namespace Ogre ret->unload(); } - ret->setParameter("profiles", "vs_3_0 vs_2_0 arbvp1"); + ret->setParameter("profiles", "vs_3_0 vs_2_0 vp40 arbvp1"); ret->setParameter("entry_point", "main_vp"); return ret; @@ -790,9 +811,9 @@ namespace Ogre outStream << "out float4 oPos : POSITION,\n" - "out float4 oPosObj : TEXCOORD0 \n"; + "out float4 oPosObj : COLOR \n"; - uint texCoordSet = 1; + uint texCoordSet = 0; outStream << ", out float4 oUVMisc : TEXCOORD" << texCoordSet++ <<" // xy = uv, z = camDepth\n"; @@ -818,8 +839,8 @@ namespace Ogre if (fog) { outStream << - ", uniform float4 fogParams\n" - ", out float fogVal : COLOR\n"; + ", uniform float4 fogParams\n"; + //", out float fogVal : COLOR\n"; } if (prof->isShadowingEnabled(tt, terrain)) @@ -831,7 +852,7 @@ namespace Ogre if (texCoordSet > 8) { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, - "Requested options require too many texture coordinate sets! Try reducing the number of layers.", + "Requested options require too many texture coordinate sets! Try reducing the number of layers. requested: " + StringConverter::toString(texCoordSet), __FUNCTION__); } @@ -917,9 +938,9 @@ namespace Ogre outStream << "void main_fp(\n" - "float4 position : TEXCOORD0,\n"; + "float4 position : COLOR,\n"; - uint texCoordSet = 1; + uint texCoordSet = 0; outStream << "float4 uvMisc : TEXCOORD" << texCoordSet++ << ",\n"; @@ -948,8 +969,8 @@ namespace Ogre if (fog) { outStream << - "uniform float3 fogColour, \n" - "float fogVal : COLOR,\n"; + "uniform float3 fogColour, \n"; + //"float fogVal : COLOR,\n"; } uint currentSamplerIdx = 0; @@ -1046,6 +1067,7 @@ namespace Ogre " float4 outputCol;\n" " float shadow = 1.0;\n" " float2 uv = uvMisc.xy;\n" + " float fogVal = position.w; \n" // base colour " outputCol = float4(0,0,0,1);\n"; @@ -1257,13 +1279,15 @@ namespace Ogre if (terrain->getSceneManager()->getFogMode() == FOG_LINEAR) { outStream << - " fogVal = saturate((oPos.z - fogParams.y) * fogParams.w);\n"; + " float fogVal = saturate((oPos.z - fogParams.y) * fogParams.w);\n"; } else { outStream << - " fogVal = saturate(1 / (exp(oPos.z * fogParams.x)));\n"; + " float fogVal = saturate(1 / (exp(oPos.z * fogParams.x)));\n"; } + outStream << + " oPosObj.w = fogVal; \n"; } if (prof->isShadowingEnabled(tt, terrain)) @@ -1364,7 +1388,7 @@ namespace Ogre outStream << "// Simple PCF \n" "// Number of samples in one dimension (square for total samples) \n" - "#define NUM_SHADOW_SAMPLES_1D 2.0 \n" + "#define NUM_SHADOW_SAMPLES_1D 1.0 \n" "#define SHADOW_FILTER_SCALE 1 \n" "#define SHADOW_SAMPLES NUM_SHADOW_SAMPLES_1D*NUM_SHADOW_SAMPLES_1D \n" @@ -1377,28 +1401,18 @@ namespace Ogre if (prof->getReceiveDynamicShadowsDepth()) { outStream << - "float calcDepthShadow(sampler2D shadowMap, float4 uv, float invShadowMapSize) \n" - "{ \n" - " // 4-sample PCF \n" - - " float shadow = 0.0; \n" - " float offset = (NUM_SHADOW_SAMPLES_1D/2 - 0.5) * SHADOW_FILTER_SCALE; \n" - " for (float y = -offset; y <= offset; y += SHADOW_FILTER_SCALE) \n" - " for (float x = -offset; x <= offset; x += SHADOW_FILTER_SCALE) \n" - " { \n" - " float4 newUV = offsetSample(uv, float2(x, y), invShadowMapSize);\n" - " // manually project and assign derivatives \n" - " // to avoid gradient issues inside loops \n" - " newUV = newUV / newUV.w; \n" - " float depth = tex2D(shadowMap, newUV.xy, 1, 1).x; \n" - " if (depth >= 1 || depth >= uv.z)\n" - " shadow += 1.0;\n" - " } \n" - - " shadow /= SHADOW_SAMPLES; \n" - - " return shadow; \n" - "} \n"; + "float calcDepthShadow(sampler2D shadowMap, float4 shadowMapPos, float2 offset) \n" + " { \n" + " shadowMapPos = shadowMapPos / shadowMapPos.w; \n" + " float2 uv = shadowMapPos.xy; \n" + " float3 o = float3(offset, -offset.x) * 0.3f; \n" + " // Note: We using 2x2 PCF. Good enough and is alot faster. \n" + " float c = (shadowMapPos.z <= tex2D(shadowMap, uv.xy - o.xy).r) ? 1 : 0; // top left \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, uv.xy + o.xy).r) ? 1 : 0; // bottom right \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, uv.xy + o.zy).r) ? 1 : 0; // bottom left \n" + " c += (shadowMapPos.z <= tex2D(shadowMap, uv.xy - o.zy).r) ? 1 : 0; // top right \n" + " return c / 4; \n" + " } \n"; } else { @@ -1436,7 +1450,7 @@ namespace Ogre { outStream << "\n "; for (uint i = 0; i < numTextures; ++i) - outStream << "float invShadowmapSize" << i << ", "; + outStream << "float2 invShadowmapSize" << i << ", "; } outStream << "\n" " float4 pssmSplitPoints, float camDepth) \n" @@ -1458,7 +1472,7 @@ namespace Ogre if (prof->getReceiveDynamicShadowsDepth()) { outStream << - " shadow = calcDepthShadow(shadowMap" << i << ", lsPos" << i << ", invShadowmapSize" << i << "); \n"; + " shadow = calcDepthShadow(shadowMap" << i << ", lsPos" << i << ", invShadowmapSize" << i << ".xy); \n"; } else { @@ -1520,8 +1534,8 @@ namespace Ogre if (prof->getReceiveDynamicShadowsDepth()) { // make linear - outStream << - "oLightSpacePos" << i << ".z = (oLightSpacePos" << i << ".z - depthRange" << i << ".x) * depthRange" << i << ".w;\n"; + //outStream << + // "oLightSpacePos" << i << ".z = (oLightSpacePos" << i << ".z - depthRange" << i << ".x) * depthRange" << i << ".w;\n"; } } @@ -1538,6 +1552,8 @@ namespace Ogre // in semantics & params uint numTextures = 1; + outStream << + ", uniform float4 shadowFar_fadeStart \n"; if (prof->getReceiveDynamicShadowsPSSM()) { numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); @@ -1554,7 +1570,7 @@ namespace Ogre if (prof->getReceiveDynamicShadowsDepth()) { outStream << - ", uniform float inverseShadowmapSize" << i << " \n"; + ", uniform float4 inverseShadowmapSize" << i << " \n"; } } @@ -1589,7 +1605,7 @@ namespace Ogre { outStream << "\n "; for (uint i = 0; i < numTextures; ++i) - outStream << "inverseShadowmapSize" << i << ", "; + outStream << "inverseShadowmapSize" << i << ".xy, "; } outStream << "\n" << " pssmSplitPoints, camDepth);\n"; @@ -1600,7 +1616,7 @@ namespace Ogre if (prof->getReceiveDynamicShadowsDepth()) { outStream << - " float rtshadow = calcDepthShadow(shadowMap0, lightSpacePos0, inverseShadowmapSize0);"; + " float rtshadow = calcDepthShadow(shadowMap0, lightSpacePos0, inverseShadowmapSize0.xy);"; } else { @@ -1609,7 +1625,11 @@ namespace Ogre } } - outStream << + outStream << + " float fadeRange = shadowFar_fadeStart.x - shadowFar_fadeStart.y; \n" + " float fade = 1-((uvMisc.z - shadowFar_fadeStart.y) / fadeRange); \n" + " rtshadow = (uvMisc.z > shadowFar_fadeStart.x) ? 1 : ((uvMisc.z > shadowFar_fadeStart.y) ? 1-((1-rtshadow)*fade) : rtshadow); \n" + " rtshadow = (1-(1-rtshadow)*0.6); \n" // make the shadow a little less intensive " shadow = min(shadow, rtshadow);\n"; } diff --git a/apps/openmw/mwrender/terrainmaterial.hpp b/apps/openmw/mwrender/terrainmaterial.hpp index 3cb3163475..db916bf253 100644 --- a/apps/openmw/mwrender/terrainmaterial.hpp +++ b/apps/openmw/mwrender/terrainmaterial.hpp @@ -73,6 +73,9 @@ namespace Ogre void updateParamsForCompositeMap(const MaterialPtr& mat, const Terrain* terrain); void requestOptions(Terrain* terrain); + void setShadowFar(float far); + void setShadowFadeStart(float fadestart); + /** Whether to support normal mapping per layer in the shader (default true). */ bool isLayerNormalMappingEnabled() const { return mLayerNormalMappingEnabled; } @@ -245,6 +248,8 @@ namespace Ogre bool mDepthShadows; bool mLowLodShadows; bool mSM3Available; + float mShadowFar; + float mShadowFadeStart; bool isShadowingEnabled(TechniqueType tt, const Terrain* terrain) const; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 7981def0b8..85fb2ee994 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -31,6 +31,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mWater = mSceneManager->createEntity("water"); mWater->setVisibilityFlags(RV_Water); mWater->setRenderQueueGroup(RQG_Water); + mWater->setCastShadows(false); mVisibilityFlags = RV_Terrain * Settings::Manager::getBool("reflect terrain", "Water") + RV_Statics * Settings::Manager::getBool("reflect statics", "Water") @@ -42,6 +43,8 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); mWaterNode->setPosition(0, mTop, 0); + mReflectionCamera = mSceneManager->createCamera("ReflectionCamera"); + if(!(cell->data.flags & cell->Interior)) { mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); @@ -51,17 +54,20 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : // Create rendertarget for reflection int rttsize = Settings::Manager::getInt("rtt size", "Water"); + TexturePtr tex; if (Settings::Manager::getBool("shader", "Water")) { - TexturePtr tex = TextureManager::getSingleton().createManual("WaterReflection", - ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_R8G8B8, TU_RENDERTARGET); + tex = TextureManager::getSingleton().createManual("WaterReflection", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, rttsize, rttsize, 0, PF_FLOAT16_RGBA, TU_RENDERTARGET); RenderTarget* rtt = tex->getBuffer()->getRenderTarget(); - Viewport* vp = rtt->addViewport(mCamera); + Viewport* vp = rtt->addViewport(mReflectionCamera); vp->setOverlaysEnabled(false); vp->setBackgroundColour(ColourValue(0.8f, 0.9f, 1.0f)); vp->setShadowsEnabled(false); vp->setVisibilityMask( mVisibilityFlags ); + // use fallback techniques without shadows and without mrt (currently not implemented for sky and terrain) + //vp->setMaterialScheme("Fallback"); rtt->addListener(this); rtt->setActive(true); @@ -74,6 +80,55 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mWater->setMaterial(mMaterial); mUnderwaterEffect = Settings::Manager::getBool("underwater effect", "Water"); + + + // ---------------------------------------------------------------------------------------------- + // ---------------------------------- reflection debug overlay ---------------------------------- + // ---------------------------------------------------------------------------------------------- + /* + if (Settings::Manager::getBool("shader", "Water")) + { + OverlayManager& mgr = OverlayManager::getSingleton(); + Overlay* overlay; + // destroy if already exists + if (overlay = mgr.getByName("ReflectionDebugOverlay")) + mgr.destroy(overlay); + + overlay = mgr.create("ReflectionDebugOverlay"); + + if (MaterialManager::getSingleton().resourceExists("Ogre/ReflectionDebugTexture")) + MaterialManager::getSingleton().remove("Ogre/ReflectionDebugTexture"); + MaterialPtr debugMat = MaterialManager::getSingleton().create( + "Ogre/ReflectionDebugTexture", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + + debugMat->getTechnique(0)->getPass(0)->setLightingEnabled(false); + TextureUnitState *t = debugMat->getTechnique(0)->getPass(0)->createTextureUnitState(tex->getName()); + t->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); + + OverlayContainer* debugPanel; + + // destroy container if exists + try + { + if (debugPanel = + static_cast( + mgr.getOverlayElement("Ogre/ReflectionDebugTexPanel" + ))) + mgr.destroyOverlayElement(debugPanel); + } + catch (Ogre::Exception&) {} + + debugPanel = (OverlayContainer*) + (OverlayManager::getSingleton().createOverlayElement("Panel", "Ogre/ReflectionDebugTexPanel")); + debugPanel->_setPosition(0, 0.55); + debugPanel->_setDimensions(0.3, 0.3); + debugPanel->setMaterialName(debugMat->getName()); + debugPanel->show(); + overlay->add2D(debugPanel); + overlay->show(); + } + */ } void Water::setActive(bool active) @@ -162,6 +217,12 @@ Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { + mReflectionCamera->setOrientation(mCamera->getDerivedOrientation()); + mReflectionCamera->setPosition(mCamera->getDerivedPosition()); + mReflectionCamera->setNearClipDistance(mCamera->getNearClipDistance()); + mReflectionCamera->setFarClipDistance(mCamera->getFarClipDistance()); + mReflectionCamera->setAspectRatio(mCamera->getAspectRatio()); + mReflectionCamera->setFOVy(mCamera->getFOVy()); if (evt.source == mReflectionTarget) { mWater->setVisible(false); @@ -174,8 +235,8 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) mSky->setSkyPosition(pos); mSky->scaleSky(mCamera->getFarClipDistance() / 1000.f); - mCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); - mCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); + mReflectionCamera->enableCustomNearClipPlane(Plane(Vector3::UNIT_Y, mTop)); + mReflectionCamera->enableReflection(Plane(Vector3::UNIT_Y, mTop)); } } @@ -187,8 +248,8 @@ void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) { mSky->resetSkyPosition(); mSky->scaleSky(1); - mCamera->disableReflection(); - mCamera->disableCustomNearClipPlane(); + mReflectionCamera->disableCustomNearClipPlane(); + mReflectionCamera->disableReflection(); } } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 0e23f5b0c3..3fb1b07b75 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -39,6 +39,8 @@ namespace MWRender { void createMaterial(); Ogre::MaterialPtr mMaterial; + Ogre::Camera* mReflectionCamera; + Ogre::RenderTarget* mReflectionTarget; bool mUnderwaterEffect; diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 835534eff2..02e4e5447e 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -291,6 +291,42 @@ void NIFLoader::createMaterial(const String &name, else warn("Unhandled alpha setting for texture " + texName); } + else + { + material->getTechnique(0)->setShadowCasterMaterial("depth_shadow_caster_noalpha"); + } + } + + if (Settings::Manager::getBool("enabled", "Shadows")) + { + bool split = Settings::Manager::getBool("split", "Shadows"); + const int numsplits = 3; + for (int i = 0; i < (split ? numsplits : 1); ++i) + { + TextureUnitState* tu = material->getTechnique(0)->getPass(0)->createTextureUnitState(); + tu->setName("shadowMap" + StringConverter::toString(i)); + tu->setContentType(TextureUnitState::CONTENT_SHADOW); + tu->setTextureAddressingMode(TextureUnitState::TAM_BORDER); + tu->setTextureBorderColour(ColourValue::White); + } + } + + if (Settings::Manager::getBool("shaders", "Objects")) + { + material->getTechnique(0)->getPass(0)->setVertexProgram("main_vp"); + material->getTechnique(0)->getPass(0)->setFragmentProgram("main_fp"); + } + + // Create a fallback technique without shadows and without mrt + Technique* tech2 = material->createTechnique(); + tech2->setSchemeName("Fallback"); + Pass* pass2 = tech2->createPass(); + pass2->createTextureUnitState(texName); + pass2->setVertexColourTracking(TVC_DIFFUSE); + if (Settings::Manager::getBool("shaders", "Objects")) + { + pass2->setVertexProgram("main_fallback_vp"); + pass2->setFragmentProgram("main_fallback_fp"); } // Add material bells and whistles @@ -299,151 +335,6 @@ void NIFLoader::createMaterial(const String &name, material->setSpecular(specular.array[0], specular.array[1], specular.array[2], alpha); material->setSelfIllumination(emissive.array[0], emissive.array[1], emissive.array[2]); material->setShininess(glossiness); - - if (Settings::Manager::getBool("shaders", "Objects")) - { - bool mrt = Settings::Manager::getBool("shader", "Water"); - - // Create shader for the material - // vertex - HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton(); - - HighLevelGpuProgramPtr vertex; - if (mgr.getByName("main_vp").isNull()) - { - vertex = mgr.createProgram("main_vp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - "cg", GPT_VERTEX_PROGRAM); - vertex->setParameter("profiles", "vs_4_0 vs_2_x vp40 arbvp1"); - vertex->setParameter("entry_point", "main_vp"); - StringUtil::StrStreamType outStream; - outStream << - "void main_vp( \n" - " float4 position : POSITION, \n" - " float4 normal : NORMAL, \n" - " float4 colour : COLOR, \n" - " in float2 uv : TEXCOORD0, \n" - " out float2 oUV : TEXCOORD0, \n" - " out float4 oPosition : POSITION, \n" - " out float4 oPositionObjSpace : TEXCOORD1, \n" - " out float4 oNormal : TEXCOORD2, \n" - " out float oDepth : TEXCOORD3, \n" - " out float4 oVertexColour : TEXCOORD4, \n" - " uniform float4x4 worldViewProj \n" - ") \n" - "{ \n" - " oVertexColour = colour; \n" - " oUV = uv; \n" - " oNormal = normal; \n" - " oPosition = mul( worldViewProj, position ); \n" - " oDepth = oPosition.z; \n" - " oPositionObjSpace = position; \n" - "}"; - vertex->setSource(outStream.str()); - vertex->load(); - vertex->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - } - else - vertex = mgr.getByName("main_vp"); - material->getTechnique(0)->getPass(0)->setVertexProgram(vertex->getName()); - - // the number of lights to support. - // when rendering an object, OGRE automatically picks the lights that are - // closest to the object being rendered. unfortunately this mechanism does - // not work perfectly for objects batched together (they will all use the same - // lights). to work around this, we are simply pushing the maximum number - // of lights here in order to minimize disappearing lights. - int num_lights = Settings::Manager::getInt("num lights", "Objects"); - - // fragment - HighLevelGpuProgramPtr fragment; - if (mgr.getByName("main_fp").isNull()) - { - fragment = mgr.createProgram("main_fp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, - "cg", GPT_FRAGMENT_PROGRAM); - fragment->setParameter("profiles", "ps_4_0 ps_2_x fp40 arbfp1"); - fragment->setParameter("entry_point", "main_fp"); - StringUtil::StrStreamType outStream; - outStream << - "void main_fp( \n" - " in float2 uv : TEXCOORD0, \n" - " out float4 oColor : COLOR, \n" - " uniform sampler2D texture : TEXUNIT0, \n" - " float4 positionObjSpace : TEXCOORD1, \n" - " float4 normal : TEXCOORD2, \n" - " float iDepth : TEXCOORD3, \n" - " float4 vertexColour : TEXCOORD4, \n" - " uniform float4 fogColour, \n" - " uniform float4 fogParams, \n"; - - if (mrt) outStream << - " out float4 oColor1 : COLOR1, \n" - " uniform float far, \n"; - - for (int i=0; isetSource(outStream.str()); - fragment->load(); - - for (int i=0; igetDefaultParameters()->setNamedAutoConstant("lightPositionObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); - fragment->getDefaultParameters()->setNamedAutoConstant("lightDiffuse"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); - fragment->getDefaultParameters()->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); - } - fragment->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); - fragment->getDefaultParameters()->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); - if (mrt) - fragment->getDefaultParameters()->setNamedAutoConstant("far", GpuProgramParameters::ACT_FAR_CLIP_DISTANCE); - } - else - fragment = mgr.getByName("main_fp"); - material->getTechnique(0)->getPass(0)->setFragmentProgram(fragment->getName()); - } } // Takes a name and adds a unique part to it. This is just used to diff --git a/files/CMakeLists.txt b/files/CMakeLists.txt index 507f82c1a3..8ab3d5b51e 100644 --- a/files/CMakeLists.txt +++ b/files/CMakeLists.txt @@ -11,3 +11,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/water/water.cg "${OpenMW_BINARY_DIR}/ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.cg "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.cg" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.material "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.material" COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gbuffer/gbuffer.compositor "${OpenMW_BINARY_DIR}/resources/gbuffer/gbuffer.compositor" COPYONLY) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/shadows/depthshadowcaster.material "${OpenMW_BINARY_DIR}/resources/shadows/depthshadowcaster.material" COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/shadows/depthshadowcaster.cg "${OpenMW_BINARY_DIR}/resources/shadows/depthshadowcaster.cg" COPYONLY) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index d5a8bdfd46..4d2d46fca1 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -18,6 +18,32 @@ anisotropy = 4 # Number of texture mipmaps to generate num mipmaps = 5 +[Shadows] +# Shadows are only supported when object shaders are on! +enabled = false + +# Split the shadow maps, allows for a larger shadow distance +# Warning: enabling this will cause some terrain textures to disappear due to +# hitting the texture unit limit of the terrain material +split = false + +# Increasing shadow distance will lower the shadow quality. +# Uses "shadow distance" or "split shadow distance" depending on "split" setting. +shadow distance = 1300 +# This one shouldn't be too low, otherwise you'll see artifacts. Use at least 2x max viewing distance. +split shadow distance = 14000 + +# Size of the shadow textures, higher means higher quality +texture size = 1024 + +# Turn on/off various shadow casters +actor shadows = true +misc shadows = true +statics shadows = true + +# Fraction of the total shadow distance after which the shadow starts to fade out +fade start = 0.8 + [HUD] # FPS counter # 0: not visible @@ -64,15 +90,10 @@ num lights = 8 shader = true rtt size = 512 - reflect terrain = true - reflect statics = false - reflect small statics = false - reflect actors = true - reflect misc = false # Enable underwater effect. It is not resource intensive, so only disable it if you have problems. diff --git a/files/shadows/depthshadowcaster.cg b/files/shadows/depthshadowcaster.cg new file mode 100644 index 0000000000..3457a4f8d8 --- /dev/null +++ b/files/shadows/depthshadowcaster.cg @@ -0,0 +1,51 @@ +void main_vp( + float4 position : POSITION, + float2 uv : TEXCOORD0, + + out float4 oPosition : POSITION, + out float2 oDepth : TEXCOORD0, + out float2 oUv : TEXCOORD1, + + uniform float4x4 wvpMat) +{ + // this is the view space position + oPosition = mul(wvpMat, position); + + // depth info for the fragment. + oDepth.x = oPosition.z; + oDepth.y = oPosition.w; + + // clamp z to zero. seem to do the trick. :-/ + oPosition.z = max(oPosition.z, 0); + + oUv = uv; +} + +void main_fp( + float2 depth : TEXCOORD0, + float2 uv : TEXCOORD1, + uniform sampler2D texture1 : register(s0), + + out float4 oColour : COLOR) +{ + float finalDepth = depth.x / depth.y; + + // use alpha channel of the first texture + float alpha = tex2D(texture1, uv).a; + + // discard if alpha is less than 0.5 + clip((alpha >= 0.5) ? 1 : -1); + + oColour = float4(finalDepth, finalDepth, finalDepth, 1); +} + +void main_fp_noalpha( + float2 depth : TEXCOORD0, + float2 uv : TEXCOORD1, + + out float4 oColour : COLOR) +{ + float finalDepth = depth.x / depth.y; + + oColour = float4(finalDepth, finalDepth, finalDepth, 1); +} diff --git a/files/shadows/depthshadowcaster.material b/files/shadows/depthshadowcaster.material new file mode 100644 index 0000000000..9ff51c5b17 --- /dev/null +++ b/files/shadows/depthshadowcaster.material @@ -0,0 +1,67 @@ +vertex_program depth_shadow_caster_vs cg +{ + source depthshadowcaster.cg + profiles vs_1_1 arbvp1 + entry_point main_vp + + default_params + { + param_named_auto wvpMat worldviewproj_matrix + } +} + +fragment_program depth_shadow_caster_ps cg +{ + source depthshadowcaster.cg + profiles ps_2_0 arbfp1 + entry_point main_fp + + default_params + { + } +} + +fragment_program depth_shadow_caster_ps_noalpha cg +{ + source depthshadowcaster.cg + profiles ps_2_0 arbfp1 + entry_point main_fp_noalpha + + default_params + { + } +} + +material depth_shadow_caster +{ + technique + { + pass + { + vertex_program_ref depth_shadow_caster_vs + { + } + + fragment_program_ref depth_shadow_caster_ps + { + } + } + } +} + +material depth_shadow_caster_noalpha +{ + technique + { + pass + { + vertex_program_ref depth_shadow_caster_vs + { + } + + fragment_program_ref depth_shadow_caster_ps_noalpha + { + } + } + } +} diff --git a/files/water/water.material b/files/water/water.material index 7ce6e7ba29..8b4ff96f56 100644 --- a/files/water/water.material +++ b/files/water/water.material @@ -92,7 +92,7 @@ material Water } technique { - scheme Map + scheme Fallback pass { cull_hardware none From 750d79eaf032ca8bd21f33899853e5a3595e311c Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 11 Apr 2012 18:29:36 +0200 Subject: [PATCH 456/488] added spell container class --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwmechanics/spells.cpp | 77 ++++++++++++++++++++++++++++++ apps/openmw/mwmechanics/spells.hpp | 55 +++++++++++++++++++++ 3 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 apps/openmw/mwmechanics/spells.cpp create mode 100644 apps/openmw/mwmechanics/spells.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index c31a9d8fd6..79f0948f99 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -55,7 +55,7 @@ add_openmw_dir (mwclass ) add_openmw_dir (mwmechanics - mechanicsmanager stat creaturestats magiceffects movement + mechanicsmanager stat creaturestats magiceffects movement spells ) # Main executable diff --git a/apps/openmw/mwmechanics/spells.cpp b/apps/openmw/mwmechanics/spells.cpp new file mode 100644 index 0000000000..2b28f0c2fe --- /dev/null +++ b/apps/openmw/mwmechanics/spells.cpp @@ -0,0 +1,77 @@ + +#include "spells.hpp" + +#include + +#include "../mwworld/environment.hpp" +#include "../mwworld/world.hpp" + +#include "magiceffects.hpp" + +namespace MWMechanics +{ + void Spells::addSpell (const ESM::Spell *spell, MagicEffects& effects) const + { + for (std::vector::const_iterator iter = spell->effects.list.begin(); + iter!=spell->effects.list.end(); ++iter) + { + EffectParam param; + param.mMagnitude = iter->magnMax; /// \todo calculate magnitude + effects.add (EffectKey (*iter), param); + } + } + + Spells::TIterator Spells::begin (ESM::Spell::SpellType type) const + { + assert (type>=0 && type=0 && typegetStore().spells.find (spellId); + + int type = spell->data.type; + + assert (type>=0 && typegetStore().spells.find (spellId); + + int type = spell->data.type; + + TContainer::iterator iter = std::find (mSpells[type].begin(), mSpells[type].end(), spell); + + if (iter!=mSpells[type].end()) + mSpells[type].erase (iter); + } + + MagicEffects Spells::getMagicEffects (MWWorld::Environment& environment) const + { + MagicEffects effects; + + for (int i=ESM::Spell::ST_Ability; i<=ESM::Spell::ST_Curse; ++i) + for (TIterator iter (begin (static_cast (i))); + iter!=end(static_cast (i)); ++iter) + addSpell (*iter, effects); + + return effects; + } + + void Spells::clear() + { + for (int i=0; i + +#include + +namespace MWWorld +{ + struct Environment; +} + +namespace MWMechanics +{ + class MagicEffects; + + /// \brief Spell list + /// + /// This class manages known spells as well as abilities, powers and permanent negative effects like + /// diseaes. + class Spells + { + public: + + typedef std::vector TContainer; + typedef TContainer::const_iterator TIterator; + + private: + + static const int sTypes = 6; + + std::vector mSpells[sTypes]; + + void addSpell (const ESM::Spell *, MagicEffects& effects) const; + + public: + + TIterator begin (ESM::Spell::SpellType type) const; + + TIterator end (ESM::Spell::SpellType type) const; + + void add (const std::string& spell, MWWorld::Environment& environment); + /// \note Adding a spell that is already listed in *this is a no-op. + + void remove (const std::string& spell, MWWorld::Environment& environment); + + MagicEffects getMagicEffects (MWWorld::Environment& environment) const; + ///< Return sum of magic effects resulting from abilities, blights, deseases and curses. + + void clear(); + ///< Remove all spells of al types. + }; +} + +#endif From e04ccfced0867c27f8ab049096abad91f9a65b09 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 11 Apr 2012 19:03:36 +0200 Subject: [PATCH 457/488] replaced old abilities container in CreatureStats with a Spells object --- apps/openmw/mwmechanics/creaturestats.hpp | 3 +- apps/openmw/mwmechanics/mechanicsmanager.cpp | 55 ++------------------ apps/openmw/mwmechanics/mechanicsmanager.hpp | 2 - 3 files changed, 7 insertions(+), 53 deletions(-) diff --git a/apps/openmw/mwmechanics/creaturestats.hpp b/apps/openmw/mwmechanics/creaturestats.hpp index d2edc031d2..ab008da9e8 100644 --- a/apps/openmw/mwmechanics/creaturestats.hpp +++ b/apps/openmw/mwmechanics/creaturestats.hpp @@ -6,6 +6,7 @@ #include "stat.hpp" #include "magiceffects.hpp" +#include "spells.hpp" namespace MWMechanics { @@ -14,7 +15,7 @@ namespace MWMechanics Stat mAttributes[8]; DynamicStat mDynamic[3]; // health, magicka, fatigue int mLevel; - std::set mAbilities; + Spells mSpells; MagicEffects mMagicEffects; }; } diff --git a/apps/openmw/mwmechanics/mechanicsmanager.cpp b/apps/openmw/mwmechanics/mechanicsmanager.cpp index 7ed81f7850..00453eee52 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.cpp @@ -23,7 +23,7 @@ namespace MWMechanics // reset creatureStats.mLevel = player->npdt52.level; - creatureStats.mAbilities.clear(); + creatureStats.mSpells.clear(); creatureStats.mMagicEffects = MagicEffects(); for (int i=0; i<27; ++i) @@ -71,7 +71,7 @@ namespace MWMechanics for (std::vector::const_iterator iter (race->powers.list.begin()); iter!=race->powers.list.end(); ++iter) { - insertSpell (*iter, ptr); + creatureStats.mSpells.add (*iter, mEnvironment); } } @@ -85,7 +85,7 @@ namespace MWMechanics for (std::vector::const_iterator iter (sign->powers.list.begin()); iter!=sign->powers.list.end(); ++iter) { - insertSpell (*iter, ptr); + creatureStats.mSpells.add (*iter, mEnvironment); } } @@ -159,59 +159,14 @@ namespace MWMechanics creatureStats.mDynamic[i].setCurrent (creatureStats.mDynamic[i].getModified()); } - void MechanicsManager::insertSpell (const std::string& id, MWWorld::Ptr& creature) - { - MWMechanics::CreatureStats& creatureStats = - MWWorld::Class::get (creature).getCreatureStats (creature); - - const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (id); - - switch (spell->data.type) - { - case ESM::Spell::ST_Ability: - - if (creatureStats.mAbilities.find (id)==creatureStats.mAbilities.end()) - { - creatureStats.mAbilities.insert (id); - } - - break; - - // TODO ST_SPELL, ST_Blight, ST_Disease, ST_Curse, ST_Power - - default: - - std::cout - << "adding unsupported spell type (" << spell->data.type - << ") to creature: " << id << std::endl; - } - } - void MechanicsManager::adjustMagicEffects (MWWorld::Ptr& creature) { MWMechanics::CreatureStats& creatureStats = MWWorld::Class::get (creature).getCreatureStats (creature); - MagicEffects now; + MagicEffects now = creatureStats.mSpells.getMagicEffects (mEnvironment); - for (std::set::const_iterator iter (creatureStats.mAbilities.begin()); - iter!=creatureStats.mAbilities.end(); ++iter) - { - const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (*iter); - - for (std::vector::const_iterator iter = spell->effects.list.begin(); - iter!=spell->effects.list.end(); ++iter) - { - if (iter->range==0) // self - { - EffectParam param; - param.mMagnitude = iter->magnMax; // TODO calculate magnitude - now.add (EffectKey (*iter), param); - } - } - } - - // TODO add effects from other spell types, active spells and equipment + /// \todo add effects from active spells and equipment MagicEffects diff = MagicEffects::diff (creatureStats.mMagicEffects, now); diff --git a/apps/openmw/mwmechanics/mechanicsmanager.hpp b/apps/openmw/mwmechanics/mechanicsmanager.hpp index 2e2192638f..8975329dd1 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.hpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.hpp @@ -37,8 +37,6 @@ namespace MWMechanics ///< build player according to stored class/race/birthsign information. Will /// default to the values of the ESM::NPC object, if no explicit information is given. - void insertSpell (const std::string& id, MWWorld::Ptr& creature); - void adjustMagicEffects (MWWorld::Ptr& creature); public: From 77065390d7de2c09a9972e3fda90c9ed73255644 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 11 Apr 2012 19:40:42 +0200 Subject: [PATCH 458/488] simplifying Spells class --- apps/openmw/mwmechanics/mechanicsmanager.cpp | 4 +- apps/openmw/mwmechanics/spells.cpp | 53 ++++++++------------ apps/openmw/mwmechanics/spells.hpp | 24 +++++---- 3 files changed, 37 insertions(+), 44 deletions(-) diff --git a/apps/openmw/mwmechanics/mechanicsmanager.cpp b/apps/openmw/mwmechanics/mechanicsmanager.cpp index 00453eee52..414faa4144 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.cpp @@ -71,7 +71,7 @@ namespace MWMechanics for (std::vector::const_iterator iter (race->powers.list.begin()); iter!=race->powers.list.end(); ++iter) { - creatureStats.mSpells.add (*iter, mEnvironment); + creatureStats.mSpells.add (*iter); } } @@ -85,7 +85,7 @@ namespace MWMechanics for (std::vector::const_iterator iter (sign->powers.list.begin()); iter!=sign->powers.list.end(); ++iter) { - creatureStats.mSpells.add (*iter, mEnvironment); + creatureStats.mSpells.add (*iter); } } diff --git a/apps/openmw/mwmechanics/spells.cpp b/apps/openmw/mwmechanics/spells.cpp index 2b28f0c2fe..4e8c6fa5a9 100644 --- a/apps/openmw/mwmechanics/spells.cpp +++ b/apps/openmw/mwmechanics/spells.cpp @@ -1,7 +1,7 @@ #include "spells.hpp" -#include +#include #include "../mwworld/environment.hpp" #include "../mwworld/world.hpp" @@ -21,57 +21,48 @@ namespace MWMechanics } } - Spells::TIterator Spells::begin (ESM::Spell::SpellType type) const + Spells::TIterator Spells::begin() const { - assert (type>=0 && type=0 && typegetStore().spells.find (spellId); - - int type = spell->data.type; - - assert (type>=0 && typegetStore().spells.find (spellId); + TContainer::iterator iter = std::find (mSpells.begin(), mSpells.end(), spellId); - int type = spell->data.type; - - TContainer::iterator iter = std::find (mSpells[type].begin(), mSpells[type].end(), spell); - - if (iter!=mSpells[type].end()) - mSpells[type].erase (iter); + if (iter!=mSpells.end()) + mSpells.erase (iter); } - MagicEffects Spells::getMagicEffects (MWWorld::Environment& environment) const + MagicEffects Spells::getMagicEffects (const MWWorld::Environment& environment) const { MagicEffects effects; - for (int i=ESM::Spell::ST_Ability; i<=ESM::Spell::ST_Curse; ++i) - for (TIterator iter (begin (static_cast (i))); - iter!=end(static_cast (i)); ++iter) - addSpell (*iter, effects); + for (TIterator iter = mSpells.begin(); iter!=mSpells.end(); ++iter) + { + const ESM::Spell *spell = environment.mWorld->getStore().spells.find (*iter); + + if (spell->data.type==ESM::Spell::ST_Ability || spell->data.type==ESM::Spell::ST_Blight || + spell->data.type==ESM::Spell::ST_Disease || spell->data.type==ESM::Spell::ST_Curse) + addSpell (spell, effects); + } return effects; } void Spells::clear() { - for (int i=0; i - #include +#include + +namespace ESM +{ + struct Spell; +} namespace MWWorld { @@ -22,29 +26,27 @@ namespace MWMechanics { public: - typedef std::vector TContainer; + typedef std::vector TContainer; typedef TContainer::const_iterator TIterator; private: - static const int sTypes = 6; - - std::vector mSpells[sTypes]; + std::vector mSpells; void addSpell (const ESM::Spell *, MagicEffects& effects) const; public: - TIterator begin (ESM::Spell::SpellType type) const; + TIterator begin() const; - TIterator end (ESM::Spell::SpellType type) const; + TIterator end() const; - void add (const std::string& spell, MWWorld::Environment& environment); + void add (const std::string& spell); /// \note Adding a spell that is already listed in *this is a no-op. - void remove (const std::string& spell, MWWorld::Environment& environment); + void remove (const std::string& spell); - MagicEffects getMagicEffects (MWWorld::Environment& environment) const; + MagicEffects getMagicEffects (const MWWorld::Environment& environment) const; ///< Return sum of magic effects resulting from abilities, blights, deseases and curses. void clear(); From 26a529111c760e639321b87a6659e0875be0fe67 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 11 Apr 2012 19:45:56 +0200 Subject: [PATCH 459/488] removed old known spell list from NpcStats --- apps/openmw/mwclass/npc.cpp | 2 +- apps/openmw/mwmechanics/npcstats.hpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 2cf4cf41c3..57cc3560a5 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -63,7 +63,7 @@ namespace MWClass for (std::vector::const_iterator iter (ref->base->spells.list.begin()); iter!=ref->base->spells.list.end(); ++iter) - data->mNpcStats.mKnownSpells.insert (*iter); + data->mCreatureStats.mSpells.add (*iter); // creature stats data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength); diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index 59bfa2ac0a..ece85f8938 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -11,6 +11,8 @@ namespace MWMechanics /// \brief Additional stats for NPCs /// /// For non-NPC-specific stats, see the CreatureStats struct. + /// + /// \note For technical reasons the spell list is also handled by CreatureStats. struct NpcStats { @@ -26,7 +28,6 @@ namespace MWMechanics bool mSneak; bool mCombat; - std::set mKnownSpells; std::string mSelectedSpell; // can be an empty string (no spell selected) NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), From a727bcd4a405c1d9007b00d609114cb39b7c98cd Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 11 Apr 2012 20:13:15 +0200 Subject: [PATCH 460/488] override nif transparency settings (part 1) --- CMakeLists.txt | 4 ++ apps/openmw/engine.cpp | 8 +++ components/CMakeLists.txt | 4 ++ components/nifogre/ogre_nif_loader.cpp | 19 ++++-- components/nifoverrides/nifoverrides.cpp | 37 ++++++++++ components/nifoverrides/nifoverrides.hpp | 23 +++++++ files/transparency-overrides.cfg | 86 ++++++++++++++++++++++++ 7 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 components/nifoverrides/nifoverrides.cpp create mode 100644 components/nifoverrides/nifoverrides.hpp create mode 100644 files/transparency-overrides.cfg diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b87e35447..21de30bac8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -227,6 +227,9 @@ endif (APPLE) configure_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg "${OpenMW_BINARY_DIR}/settings-default.cfg") +configure_file(${OpenMW_SOURCE_DIR}/files/transparency-overrides.cfg + "${OpenMW_BINARY_DIR}/transparency-overrides.cfg") + configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local "${OpenMW_BINARY_DIR}/openmw.cfg") configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg @@ -308,6 +311,7 @@ if(DPKG_PROGRAM) #Install global configuration files INSTALL(FILES "${OpenMW_BINARY_DIR}/settings-default.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") + INSTALL(FILES "${OpenMW_BINARY_DIR}/transparency-overrides.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "../etc/openmw/" RENAME "openmw.cfg" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 1adcf8dcac..d5ff165f82 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -349,6 +350,13 @@ void OMW::Engine::go() mFpsLevel = settings.getInt("fps", "HUD"); + // load nif overrides + NifOverrides::Overrides nifOverrides; + if (boost::filesystem::exists(mCfgMgr.getLocalPath().string() + "/transparency-overrides.cfg")) + nifOverrides.loadTransparencyOverrides(mCfgMgr.getLocalPath().string() + "/transparency-overrides.cfg"); + else if (boost::filesystem::exists(mCfgMgr.getGlobalPath().string() + "/transparency-overrides.cfg")) + nifOverrides.loadTransparencyOverrides(mCfgMgr.getGlobalPath().string() + "/transparency-overrides.cfg"); + mOgre->configure(!boost::filesystem::is_regular_file(mCfgMgr.getOgreConfigPath()), mCfgMgr.getOgreConfigPath().string(), mCfgMgr.getLogPath().string(), diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index b48c50640c..8a1875d0fb 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -6,6 +6,10 @@ add_component_dir (settings settings ) +add_component_dir (nifoverrides + nifoverrides + ) + add_component_dir (bsa bsa_archive bsa_file ) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 02e4e5447e..6f51427968 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -26,6 +26,7 @@ #include "ogre_nif_loader.hpp" #include +#include typedef unsigned char ubyte; @@ -282,11 +283,21 @@ void NIFLoader::createMaterial(const String &name, // other values. 237 basically means normal transparencly. if (alphaFlags == 237) { - // Enable transparency - pass->setSceneBlending(SBT_TRANSPARENT_ALPHA); + NifOverrides::TransparencyResult result = NifOverrides::Overrides::getTransparencyOverride(texName); + if (result.first) + { + pass->setAlphaRejectFunction(CMPF_GREATER_EQUAL); + pass->setAlphaRejectValue(result.second); + } + else + { + // Enable transparency + pass->setSceneBlending(SBT_TRANSPARENT_ALPHA); - //pass->setDepthCheckEnabled(false); - pass->setDepthWriteEnabled(false); + //pass->setDepthCheckEnabled(false); + pass->setDepthWriteEnabled(false); + std::cout << "alpha 237; material: " << name << " texName: " << texName << std::endl; + } } else warn("Unhandled alpha setting for texture " + texName); diff --git a/components/nifoverrides/nifoverrides.cpp b/components/nifoverrides/nifoverrides.cpp new file mode 100644 index 0000000000..1c8fefd24a --- /dev/null +++ b/components/nifoverrides/nifoverrides.cpp @@ -0,0 +1,37 @@ +#include "nifoverrides.hpp" + +#include + +#include + +using namespace NifOverrides; + +Ogre::ConfigFile Overrides::mTransparencyOverrides = Ogre::ConfigFile(); + +void Overrides::loadTransparencyOverrides (const std::string& file) +{ + mTransparencyOverrides.load(file); +} + +TransparencyResult Overrides::getTransparencyOverride(const std::string& texture) +{ + TransparencyResult result; + result.first = false; + + std::string tex = texture; + boost::to_lower(tex); + + Ogre::ConfigFile::SectionIterator seci = mTransparencyOverrides.getSectionIterator(); + while (seci.hasMoreElements()) + { + Ogre::String sectionName = seci.peekNextKey(); + if (sectionName == tex) + { + result.first = true; + result.second = Ogre::StringConverter::parseInt(mTransparencyOverrides.getSetting("alphaRejectValue", sectionName)); + break; + } + seci.getNext(); + } + return result; +} diff --git a/components/nifoverrides/nifoverrides.hpp b/components/nifoverrides/nifoverrides.hpp new file mode 100644 index 0000000000..c9b711df67 --- /dev/null +++ b/components/nifoverrides/nifoverrides.hpp @@ -0,0 +1,23 @@ +#ifndef COMPONENTS_NIFOVERRIDES_H +#define COMPONENTS_NIFOVERRIDES_H + +#include + +namespace NifOverrides +{ + + typedef std::pair TransparencyResult; + + /// \brief provide overrides for some model / texture properties that bethesda has chosen poorly + class Overrides + { + public: + static Ogre::ConfigFile mTransparencyOverrides; + void loadTransparencyOverrides (const std::string& file); + + static TransparencyResult getTransparencyOverride(const std::string& texture); + }; + +} + +#endif diff --git a/files/transparency-overrides.cfg b/files/transparency-overrides.cfg new file mode 100644 index 0000000000..7750e98347 --- /dev/null +++ b/files/transparency-overrides.cfg @@ -0,0 +1,86 @@ +# Bethesda has used wrong transparency settings for many textures +# (who would have guessed) +# This is very unfortunate because objects with real transparency: +# - cannot cast shadows +# - cannot receive advanced framebuffer effects like depth of field or ambient occlusion +# - cannot cover lens flare effects (the lens flare will just shine through) + +# This file lists textures that should be using alpha rejection instead of transparency +# basically these are textures that are not translucent (i.e. at one spot on the texture, either transparent or opaque) + +# Note: all the texture names here have to be lowercase + +[textures\tx_flag_imp_01.dds] + alphaRejectValue = 128 + +[textures\tx_ivy_02.dds] + alphaRejectValue = 128 + +[textures\tx_ivy_01.dds] + alphaRejectValue = 128 + +[textures\tx_sail.dds] + alphaRejectValue = 128 + +[textures\tx_saltrice_04.dds] + alphaRejectValue = 128 + +[textures\tx_black_lichen_01.dds] + alphaRejectValue = 128 + +[textures\tx_leaves_01.dds] + alphaRejectValue = 128 + +[textures\tx_leaves_02.dds] + alphaRejectValue = 128 + +[textures\tx_leaves_03.dds] + alphaRejectValue = 128 + +[textures\tx_ai_heather_01.dds] + alphaRejectValue = 96 + +[textures\tx_goldkanet_01.dds] + alphaRejectValue = 128 + +[textures\tx_goldkanet_02.dds] + alphaRejectValue = 128 + +[textures\tx_plant_tails00.dds] + alphaRejectValue = 128 + +[textures\tx_vine_01.dds] + alphaRejectValue = 128 + +[textures\tx_comberry_01.dds] + alphaRejectValue = 128 + +[textures\tx_willow_flower_02.dds] + alphaRejectValue = 128 + +[textures\tx_cork_bulb_02.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_telvanni_01.dds] + alphaRejectValue = 128 + +[textures\tx_green_lichen_01.dds] + alphaRejectValue = 128 + +[textures\tx_roobrush_01.dds] + alphaRejectValue = 128 + +[textures\tx_bittergreen_02.dds] + alphaRejectValue = 128 + +[textures\tx_chokeweed_01.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_book_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_w_a_shop_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_temple_02.dds] + alphaRejectValue = 128 From 800df7376ccc1b88c56c286af5e7a1fe1e12c091 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 14:26:21 +0200 Subject: [PATCH 461/488] use the cursors from morrowind.bsa and remove mwpointer.png --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/engine.cpp | 4 ++++ apps/openmw/mwgui/cursorreplace.cpp | 16 ++++++++++++++++ apps/openmw/mwgui/cursorreplace.hpp | 16 ++++++++++++++++ files/mygui/CMakeLists.txt | 1 - files/mygui/mwpointer.png | Bin 4810 -> 0 bytes files/mygui/openmw_images.xml | 18 +++++++++--------- libs/openengine/ogre/imagerotate.cpp | 3 +-- libs/openengine/ogre/imagerotate.hpp | 2 +- 9 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 apps/openmw/mwgui/cursorreplace.cpp create mode 100644 apps/openmw/mwgui/cursorreplace.hpp delete mode 100644 files/mygui/mwpointer.png diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index a8ae0bd49d..b417c764d2 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -25,7 +25,7 @@ add_openmw_dir (mwinput add_openmw_dir (mwgui layouts text_input widgets race class birth review window_manager console dialogue dialogue_history window_base stats_window messagebox journalwindow charactercreation - map_window window_pinnable_base + map_window window_pinnable_base cursorreplace ) add_openmw_dir (mwdialogue diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 259733600f..8fe6963a9a 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -28,6 +28,7 @@ #include "mwinput/inputmanager.hpp" #include "mwgui/window_manager.hpp" +#include "mwgui/cursorreplace.hpp" #include "mwscript/scriptmanager.hpp" #include "mwscript/compilercontext.hpp" @@ -368,6 +369,9 @@ void OMW::Engine::go() loadBSA(); + // cursor replacer (converts the cursor from the bsa so they can be used by mygui) + MWGui::CursorReplace replacer; + // Create the world mEnvironment.mWorld = new MWWorld::World (*mOgre, mFileCollections, mMaster, mResDir, mNewGame, mEnvironment, mEncoding, mFallbackMap); diff --git a/apps/openmw/mwgui/cursorreplace.cpp b/apps/openmw/mwgui/cursorreplace.cpp new file mode 100644 index 0000000000..2079538fc2 --- /dev/null +++ b/apps/openmw/mwgui/cursorreplace.cpp @@ -0,0 +1,16 @@ +#include "cursorreplace.hpp" + +#include +#include + +#include +#include + +using namespace MWGui; + +CursorReplace::CursorReplace() +{ + OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_vresize.png", 90); + OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize1.png", -45); + OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize2.png", 45); +} diff --git a/apps/openmw/mwgui/cursorreplace.hpp b/apps/openmw/mwgui/cursorreplace.hpp new file mode 100644 index 0000000000..06fe28e39a --- /dev/null +++ b/apps/openmw/mwgui/cursorreplace.hpp @@ -0,0 +1,16 @@ +#ifndef GAME_CURSORREPLACE_H +#define GAME_CURSORREPLACE_H + +#include + +namespace MWGui +{ + /// \brief MyGUI does not support rotating cursors, so we have to do it manually + class CursorReplace + { + public: + CursorReplace(); + }; +} + +#endif diff --git a/files/mygui/CMakeLists.txt b/files/mygui/CMakeLists.txt index dbc20f3f88..e3a7b9999c 100644 --- a/files/mygui/CMakeLists.txt +++ b/files/mygui/CMakeLists.txt @@ -8,7 +8,6 @@ configure_file("${SDIR}/bigbars.png" "${DDIR}/bigbars.png" COPYONLY) configure_file("${SDIR}/black.png" "${DDIR}/black.png" COPYONLY) configure_file("${SDIR}/core.skin" "${DDIR}/core.skin" COPYONLY) configure_file("${SDIR}/core.xml" "${DDIR}/core.xml" COPYONLY) -configure_file("${SDIR}/mwpointer.png" "${DDIR}/mwpointer.png" COPYONLY) configure_file("${SDIR}/mwgui.png" "${DDIR}/mwgui.png" COPYONLY) configure_file("${SDIR}/openmw_images.xml" "${DDIR}/openmw_images.xml" COPYONLY) configure_file("${SDIR}/openmw_settings.xml" "${DDIR}/openmw_settings.xml" COPYONLY) diff --git a/files/mygui/mwpointer.png b/files/mygui/mwpointer.png deleted file mode 100644 index 90bc19b5e2c7ea4f30b895cc5b8cde00ce460e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4810 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 diff --git a/files/mygui/openmw_images.xml b/files/mygui/openmw_images.xml index 6487742c3e..e149273e29 100644 --- a/files/mygui/openmw_images.xml +++ b/files/mygui/openmw_images.xml @@ -2,37 +2,37 @@ - + - + - + - + - + - + - + - + - + diff --git a/libs/openengine/ogre/imagerotate.cpp b/libs/openengine/ogre/imagerotate.cpp index 166a1d3c60..b7522c1001 100644 --- a/libs/openengine/ogre/imagerotate.cpp +++ b/libs/openengine/ogre/imagerotate.cpp @@ -49,7 +49,7 @@ void ImageRotate::rotate(const std::string& sourceImage, const std::string& dest unsigned int height = sourceTexture->getHeight(); TexturePtr destTexture = TextureManager::getSingleton().createManual( - "ImageRotateDestTexture", + destImage, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, width, height, @@ -69,7 +69,6 @@ void ImageRotate::rotate(const std::string& sourceImage, const std::string& dest rtt->writeContentsToFile(destImage); // remove all the junk we've created - TextureManager::getSingleton().remove("ImageRotateDestTexture"); MaterialManager::getSingleton().remove("ImageRotateMaterial"); root->destroySceneManager(sceneMgr); delete rect; diff --git a/libs/openengine/ogre/imagerotate.hpp b/libs/openengine/ogre/imagerotate.hpp index 85363d71f4..a3f6d662f3 100644 --- a/libs/openengine/ogre/imagerotate.hpp +++ b/libs/openengine/ogre/imagerotate.hpp @@ -15,7 +15,7 @@ namespace Render public: /** * @param source image (file name - has to exist in an resource group) - * @param destination image (absolute file path) + * @param name of the destination texture to save to (in memory) * @param angle in degrees to turn */ static void rotate(const std::string& sourceImage, const std::string& destImage, const float angle); From 4a6a8e5420eb24f203d6645b157e3aba63a21342 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 14:28:35 +0200 Subject: [PATCH 462/488] don't write to disk --- libs/openengine/ogre/imagerotate.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/openengine/ogre/imagerotate.cpp b/libs/openengine/ogre/imagerotate.cpp index b7522c1001..1147559d6e 100644 --- a/libs/openengine/ogre/imagerotate.cpp +++ b/libs/openengine/ogre/imagerotate.cpp @@ -66,7 +66,6 @@ void ImageRotate::rotate(const std::string& sourceImage, const std::string& dest vp->setClearEveryFrame(true, FBT_DEPTH); rtt->update(); - rtt->writeContentsToFile(destImage); // remove all the junk we've created MaterialManager::getSingleton().remove("ImageRotateMaterial"); From 2b8c81e7795a01c00a6e014714d31206abaa0af4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 14:31:12 +0200 Subject: [PATCH 463/488] removed test.skin file --- files/mygui/test.skin | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 files/mygui/test.skin diff --git a/files/mygui/test.skin b/files/mygui/test.skin deleted file mode 100644 index 5f198ab4a0..0000000000 --- a/files/mygui/test.skin +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - From 95f87a8abf437e7cc0e35c77c785ca619f02b6dc Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 16:33:36 +0200 Subject: [PATCH 464/488] more or less complete list for morrowind.bsa (thanks to artorius) --- components/nifogre/ogre_nif_loader.cpp | 2 +- files/transparency-overrides.cfg | 502 ++++++++++++++++++++++++- 2 files changed, 496 insertions(+), 8 deletions(-) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 6f51427968..ab6a708c0e 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -296,7 +296,7 @@ void NIFLoader::createMaterial(const String &name, //pass->setDepthCheckEnabled(false); pass->setDepthWriteEnabled(false); - std::cout << "alpha 237; material: " << name << " texName: " << texName << std::endl; + //std::cout << "alpha 237; material: " << name << " texName: " << texName << std::endl; } } else diff --git a/files/transparency-overrides.cfg b/files/transparency-overrides.cfg index 7750e98347..299792be17 100644 --- a/files/transparency-overrides.cfg +++ b/files/transparency-overrides.cfg @@ -10,7 +10,17 @@ # Note: all the texture names here have to be lowercase -[textures\tx_flag_imp_01.dds] +# fauna +[textures\tx_wickwheat_01.dds] + alphaRejectValue = 128 + +[textures\tx_wickwheat_03.dds] + alphaRejectValue = 128 + +[textures\tx_red_lichen_01.dds] + alphaRejectValue = 128 + +[textures\tx_stone_flower_01.dds] alphaRejectValue = 128 [textures\tx_ivy_02.dds] @@ -19,9 +29,6 @@ [textures\tx_ivy_01.dds] alphaRejectValue = 128 -[textures\tx_sail.dds] - alphaRejectValue = 128 - [textures\tx_saltrice_04.dds] alphaRejectValue = 128 @@ -37,6 +44,15 @@ [textures\tx_leaves_03.dds] alphaRejectValue = 128 +[textures\tx_leaves_04.dds] + alphaRejectValue = 128 + +[textures\tx_leaves_06.dds] + alphaRejectValue = 128 + +[textures\tx_leaves_07.dds] + alphaRejectValue = 128 + [textures\tx_ai_heather_01.dds] alphaRejectValue = 96 @@ -61,9 +77,6 @@ [textures\tx_cork_bulb_02.dds] alphaRejectValue = 128 -[textures\tx_v_b_telvanni_01.dds] - alphaRejectValue = 128 - [textures\tx_green_lichen_01.dds] alphaRejectValue = 128 @@ -76,11 +89,486 @@ [textures\tx_chokeweed_01.dds] alphaRejectValue = 128 +[textures\tx_branches_01.dds] + alphaRejectValue = 128 + +[textures\tx_branches_02.dds] + alphaRejectValue = 128 + +[textures\tx_guarskin_hut_03.dds] + alphaRejectValue = 128 + +[textures\tx_hackle-lo_02.dds] + alphaRejectValue = 128 + +[textures\tx_bc_fern_01.dds] + alphaRejectValue = 128 + +[textures\tx_bc_fern_02.dds] + alphaRejectValue = 128 + +[textures\tx_bc_leaves_02.dds] + alphaRejectValue = 128 + +[textures\tx_marshmerrow_03.dds] + alphaRejectValue = 128 + +[textures\tx_bc_moss_01.dds] + alphaRejectValue = 128 + +[textures\tx_bc_moss_02.dds] + alphaRejectValue = 128 + +[textures\tx_bc_lilypad_01.dds] + alphaRejectValue = 128 + +[textures\tx_bc_lilypad_02.dds] + alphaRejectValue = 128 + +[textures\tx_bc_lilypad_03.dds] + alphaRejectValue = 128 + +[textures\tx_fire_fern_01.dds] + alphaRejectValue = 128 + +# banners and flags +[textures\tx_flag_imp_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_arena_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_comfort_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_child_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_count_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_faith_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_walk_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_imp_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_redoran_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_avs_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_serving_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_speak_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_stdeyln_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_stolms_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_thin_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_vivec_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_vivec_02.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_01.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_02.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_04.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_05.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_06.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_banner_07.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_a_banner.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_e_banner.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_u_banner.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_z_banner.dds] + alphaRejectValue = 128 + +[textures\tx_banner_6th.dds] + alphaRejectValue = 128 + +[textures\tx_banner_6th_tall.dds] + alphaRejectValue = 128 + +[textures\tx_banner_gnisis_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_gnisis_02.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_bhm_01.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_02.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_03.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_04.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_05.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_06.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_07.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_08.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_08.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_09.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_10.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_11.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_12.dds] + alphaRejectValue = 128 + +[textures\tx_de_tapestry_13.dds] + alphaRejectValue = 128 + +[textures\tx_de_lutestrings_01.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_imp_altar_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_akatosh_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_apprentice_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_arkay_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_dibella_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_golem_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_julianos_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_kynareth_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_lady_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_lord_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_lover_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_mara_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_ritual_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_shadow_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_steed_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_stendarr_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_thief_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_tower_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_warrior_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_wizard_01.dds] + alphaRejectValue = 128 + +[textures\tx_c_t_zenithar_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_dagoth_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_tavern_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_goods_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_danger_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_welcome_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_clothing_01.dds] + alphaRejectValue = 128 + +[textures\tx_bannerd_alchemy_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_hlaalu_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_redoran_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_temple_01.dds] + alphaRejectValue = 128 + +[textures\tx_banner_temple_03.dds] + alphaRejectValue = 128 + [textures\tx_de_banner_book_01.dds] alphaRejectValue = 128 +[textures\tx_de_banner_ald_velothi.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_gnaar_mok.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_hla_oad.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_khull.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_pawn_01.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_sadrith_mora.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_tel_aruhn.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_tel_branora.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_tel_fyr.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_tel_mora.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_telvani_01.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_tel_vos.dds] + alphaRejectValue = 128 + +[textures\tx_de_banner_vos.dds] + alphaRejectValue = 128 + [textures\tx_bannerd_w_a_shop_01.dds] alphaRejectValue = 128 [textures\tx_banner_temple_02.dds] alphaRejectValue = 128 + +[textures\tx_mural1_00.dds] + alphaRejectValue = 128 + +[textures\tx_mural1_01.dds] + alphaRejectValue = 128 + +[textures\tx_mural4_00.dds] + alphaRejectValue = 128 + +[textures\tx_mural4_01.dds] + alphaRejectValue = 128 + +[textures\tx_mural5_00.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_telvanni_01.dds] + alphaRejectValue = 128 + +[textures\tx_v_b_hlaalu_01.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_tapestry.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_tapestry_01.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_tapestry_02.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_tapestry_03.dds] + alphaRejectValue = 128 + +[textures\tx_fabric_tapestry_04.dds] + alphaRejectValue = 128 + +# characters +[textures\tx_netchgod00.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_argonian_f_hair02.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_argonian_f_hair03.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_argonian_m_hair01.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_argonian_m_hair04.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_argonian_m_hair05.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_khajiit_f_hair01.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_khajiit_f_hair02.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_khajiit_m_hair01.dds] + alphaRejectValue = 128 + +[textures\tx_corprus_stalker12.dds] + alphaRejectValue = 128 + +[textures\tx_a_clavicus02.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_dark elf_m_hair11.dds] + alphaRejectValue = 128 + +[textures\tx_b_n_dark elf_f_hair10.dds] + alphaRejectValue = 128 + +# misc items +[textures\tx_sail.dds] + alphaRejectValue = 128 + +[textures\tx_longboatsail01.dds] + alphaRejectValue = 128 + +[textures\tx_longboatsail01a.dds] + alphaRejectValue = 128 + +[textures\tx_longboatsail01b.dds] + alphaRejectValue = 128 + +[textures\tx_longboatsail02.dds] + alphaRejectValue = 128 + +[textures\tx_quill.dds] + alphaRejectValue = 128 + +[textures\tx_note_01.dds] + alphaRejectValue = 128 + +[textures\tx_note_02.dds] + alphaRejectValue = 128 + +[textures\tx_parchment_02.dds] + alphaRejectValue = 128 + +[textures\tx_parchment_03.dds] + alphaRejectValue = 128 + +[textures\tx_scroll_01.dds] + alphaRejectValue = 128 + +[textures\tx_scroll_02.dds] + alphaRejectValue = 128 + +[textures\tx_scroll_03.dds] + alphaRejectValue = 128 + +[textures\tx_alpha_small_edge.dds] + alphaRejectValue = 128 + +[textures\tx_alpha_shadow_circular.dds] + alphaRejectValue = 128 + +# building materials +[textures\tx_shack_thatch_strip.dds] + alphaRejectValue = 128 + +[textures\tx_rug00.dds] + alphaRejectValue = 128 + +[textures\tx_rug_02.dds] + alphaRejectValue = 128 + +[textures\tx_rug_edge_01.dds] + alphaRejectValue = 128 + +[textures\tx_awning_thatch_02.dds] + alphaRejectValue = 128 + +[textures\tx_awning_woven_01.dds] + alphaRejectValue = 128 + +[textures\tx_bridgeropes.dds] + alphaRejectValue = 128 + +[textures\tx_rope_woven_01.dds] + alphaRejectValue = 128 + +[textures\tx_rope_woven_02.dds] + alphaRejectValue = 128 + +[textures\tx_ashl_tent_06.dds] + alphaRejectValue = 128 + +[textures\tx_guar_tarp.dds] + alphaRejectValue = 128 + +[textures\tx_velothi_glyph00.dds] + alphaRejectValue = 128 From a96ad7fb8295df3470dd0b008d978d234317edd6 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 16:46:56 +0200 Subject: [PATCH 465/488] restored toggleWater --- apps/openmw/mwrender/water.cpp | 55 +++++++++++++++++----------------- apps/openmw/mwrender/water.hpp | 2 ++ 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 85fb2ee994..71cf56dfda 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -11,7 +11,7 @@ namespace MWRender Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), mIsUnderwater(false), mVisibilityFlags(0), - mReflectionTarget(0), mActive(1) + mReflectionTarget(0), mActive(1), mToggled(1) { mSky = sky; @@ -93,32 +93,32 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : // destroy if already exists if (overlay = mgr.getByName("ReflectionDebugOverlay")) mgr.destroy(overlay); - + overlay = mgr.create("ReflectionDebugOverlay"); - + if (MaterialManager::getSingleton().resourceExists("Ogre/ReflectionDebugTexture")) MaterialManager::getSingleton().remove("Ogre/ReflectionDebugTexture"); MaterialPtr debugMat = MaterialManager::getSingleton().create( - "Ogre/ReflectionDebugTexture", + "Ogre/ReflectionDebugTexture", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); - + debugMat->getTechnique(0)->getPass(0)->setLightingEnabled(false); TextureUnitState *t = debugMat->getTechnique(0)->getPass(0)->createTextureUnitState(tex->getName()); t->setTextureAddressingMode(TextureUnitState::TAM_CLAMP); OverlayContainer* debugPanel; - + // destroy container if exists try { - if (debugPanel = + if (debugPanel = static_cast( mgr.getOverlayElement("Ogre/ReflectionDebugTexPanel" ))) mgr.destroyOverlayElement(debugPanel); } catch (Ogre::Exception&) {} - + debugPanel = (OverlayContainer*) (OverlayManager::getSingleton().createOverlayElement("Panel", "Ogre/ReflectionDebugTexPanel")); debugPanel->_setPosition(0, 0.55); @@ -134,8 +134,7 @@ Water::Water (Ogre::Camera *camera, SkyManager* sky, const ESM::Cell* cell) : void Water::setActive(bool active) { mActive = active; - if (mReflectionTarget) mReflectionTarget->setActive(active && !mIsUnderwater); - mWater->setVisible(active); + updateVisible(); } Water::~Water() @@ -167,8 +166,8 @@ void Water::setHeight(const float height) void Water::toggle() { - if (mActive) - mWater->setVisible(!mWater->getVisible()); + mToggled = !mToggled; + updateVisible(); } void Water::checkUnderwater(float y) @@ -183,13 +182,10 @@ void Water::checkUnderwater(float y) if (pass->hasFragmentProgram() && pass->getFragmentProgramParameters()->_findNamedConstantDefinition("isUnderwater", false)) pass->getFragmentProgramParameters()->setNamedConstant("isUnderwater", Real(0)); - if (mReflectionTarget) - mReflectionTarget->setActive(mActive); - mWater->setRenderQueueGroup(RQG_Water); mIsUnderwater = false; - } + } if (!mIsUnderwater && y < mTop && mWater->isVisible() && mCamera->getPolygonMode() == Ogre::PM_SOLID) { @@ -201,13 +197,12 @@ void Water::checkUnderwater(float y) if (pass->hasFragmentProgram() && pass->getFragmentProgramParameters()->_findNamedConstantDefinition("isUnderwater", false)) pass->getFragmentProgramParameters()->setNamedConstant("isUnderwater", Real(1)); - if (mReflectionTarget) - mReflectionTarget->setActive(false); - mWater->setRenderQueueGroup(RQG_UnderWater); mIsUnderwater = true; } + + updateVisible(); } Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) @@ -217,15 +212,14 @@ Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) { - mReflectionCamera->setOrientation(mCamera->getDerivedOrientation()); - mReflectionCamera->setPosition(mCamera->getDerivedPosition()); - mReflectionCamera->setNearClipDistance(mCamera->getNearClipDistance()); - mReflectionCamera->setFarClipDistance(mCamera->getFarClipDistance()); - mReflectionCamera->setAspectRatio(mCamera->getAspectRatio()); - mReflectionCamera->setFOVy(mCamera->getFOVy()); if (evt.source == mReflectionTarget) { - mWater->setVisible(false); + mReflectionCamera->setOrientation(mCamera->getDerivedOrientation()); + mReflectionCamera->setPosition(mCamera->getDerivedPosition()); + mReflectionCamera->setNearClipDistance(mCamera->getNearClipDistance()); + mReflectionCamera->setFarClipDistance(mCamera->getFarClipDistance()); + mReflectionCamera->setAspectRatio(mCamera->getAspectRatio()); + mReflectionCamera->setFOVy(mCamera->getFOVy()); // Some messy code to get the skybox to show up at all // The problem here is that it gets clipped by the water plane @@ -242,8 +236,6 @@ void Water::preRenderTargetUpdate(const RenderTargetEvent& evt) void Water::postRenderTargetUpdate(const RenderTargetEvent& evt) { - mWater->setVisible(true); - if (evt.source == mReflectionTarget) { mSky->resetSkyPosition(); @@ -291,4 +283,11 @@ void Water::setViewportBackground(const ColourValue& bg) mReflectionTarget->getViewport(0)->setBackgroundColour(bg); } +void Water::updateVisible() +{ + mWater->setVisible(mToggled && mActive); + if (mReflectionTarget) + mReflectionTarget->setActive(mToggled && mActive && !mIsUnderwater); +} + } // namespace diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 3fb1b07b75..f14482e2b7 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -24,6 +24,7 @@ namespace MWRender { bool mIsUnderwater; bool mActive; + bool mToggled; int mTop; Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); @@ -31,6 +32,7 @@ namespace MWRender { protected: void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt); + void updateVisible(); SkyManager* mSky; From 03d6d1fb82faf7dcdd808facfcefb7e2716b8cfc Mon Sep 17 00:00:00 2001 From: gugus Date: Thu, 12 Apr 2012 17:08:57 +0200 Subject: [PATCH 466/488] NPC rank is correctly loaded now. Also corrected a potential bug (i think). --- apps/openmw/mwclass/npc.cpp | 41 ++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index b98df79ef1..43e04ab521 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -55,31 +55,38 @@ namespace MWClass { if(ref->base->npdt52.gold != -10) { - data->mNpcStats.mFactionRank[ref->base->faction] = ref->base->npdt52.rank; + data->mNpcStats.mFactionRank[ref->base->faction] = (int)ref->base->npdt52.rank; } else { - data->mNpcStats.mFactionRank[ref->base->faction] = ref->base->npdt52.rank; + data->mNpcStats.mFactionRank[ref->base->faction] = (int)ref->base->npdt12.rank; } } - for (int i=0; i<27; ++i) - data->mNpcStats.mSkill[i].setBase (ref->base->npdt52.skills[i]); + if(ref->base->npdt52.gold != -10) + { + for (int i=0; i<27; ++i) + data->mNpcStats.mSkill[i].setBase (ref->base->npdt52.skills[i]); - // creature stats - data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength); - data->mCreatureStats.mAttributes[1].set (ref->base->npdt52.intelligence); - data->mCreatureStats.mAttributes[2].set (ref->base->npdt52.willpower); - data->mCreatureStats.mAttributes[3].set (ref->base->npdt52.agility); - data->mCreatureStats.mAttributes[4].set (ref->base->npdt52.speed); - data->mCreatureStats.mAttributes[5].set (ref->base->npdt52.endurance); - data->mCreatureStats.mAttributes[6].set (ref->base->npdt52.personality); - data->mCreatureStats.mAttributes[7].set (ref->base->npdt52.luck); - data->mCreatureStats.mDynamic[0].set (ref->base->npdt52.health); - data->mCreatureStats.mDynamic[1].set (ref->base->npdt52.mana); - data->mCreatureStats.mDynamic[2].set (ref->base->npdt52.fatigue); + // creature stats + data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength); + data->mCreatureStats.mAttributes[1].set (ref->base->npdt52.intelligence); + data->mCreatureStats.mAttributes[2].set (ref->base->npdt52.willpower); + data->mCreatureStats.mAttributes[3].set (ref->base->npdt52.agility); + data->mCreatureStats.mAttributes[4].set (ref->base->npdt52.speed); + data->mCreatureStats.mAttributes[5].set (ref->base->npdt52.endurance); + data->mCreatureStats.mAttributes[6].set (ref->base->npdt52.personality); + data->mCreatureStats.mAttributes[7].set (ref->base->npdt52.luck); + data->mCreatureStats.mDynamic[0].set (ref->base->npdt52.health); + data->mCreatureStats.mDynamic[1].set (ref->base->npdt52.mana); + data->mCreatureStats.mDynamic[2].set (ref->base->npdt52.fatigue); - data->mCreatureStats.mLevel = ref->base->npdt52.level; + data->mCreatureStats.mLevel = ref->base->npdt52.level; + } + else + { + //TODO: do something with npdt12 maybe:p + } // \todo add initial container content From 7edc5c733ca0f52bcba0025a5dc5244c8e1dff09 Mon Sep 17 00:00:00 2001 From: gugus Date: Thu, 12 Apr 2012 17:29:05 +0200 Subject: [PATCH 467/488] corrected a bug about rank. --- apps/openmw/mwdialogue/dialoguemanager.cpp | 4 ++-- apps/openmw/mwscript/statsextensions.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwdialogue/dialoguemanager.cpp b/apps/openmw/mwdialogue/dialoguemanager.cpp index 1405224991..90f0c0231f 100644 --- a/apps/openmw/mwdialogue/dialoguemanager.cpp +++ b/apps/openmw/mwdialogue/dialoguemanager.cpp @@ -488,7 +488,7 @@ namespace MWDialogue if(it!=stats.mFactionRank.end()) { //check rank - if(it->second < info.data.rank) return false; + if(it->second < (int)info.data.rank) return false; } else { @@ -505,7 +505,7 @@ namespace MWDialogue if(it!=stats.mFactionRank.end()) { //check rank - if(it->second < info.data.rank) return false; + if(it->second < (int)info.data.PCrank) return false; } else { diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index a3c517f8cb..47ae9d13d5 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -307,7 +307,7 @@ namespace MWScript MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) { - MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 0; } else { @@ -340,7 +340,7 @@ namespace MWScript MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) { - MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 1; + MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 0; } else { From e2ec889d1008bd721a945330b136a53a0950a6b0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 17:40:26 +0200 Subject: [PATCH 468/488] fixed a warning "implicit cast to float3" --- apps/openmw/mwrender/shaderhelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/shaderhelper.cpp b/apps/openmw/mwrender/shaderhelper.cpp index 93f960dc42..5354251f8c 100644 --- a/apps/openmw/mwrender/shaderhelper.cpp +++ b/apps/openmw/mwrender/shaderhelper.cpp @@ -258,7 +258,7 @@ void ShaderHelper::createShader(const bool mrt, const bool shadows, const bool s outStream << " float3 lightingFinal = lightColour.xyz * diffuse.xyz * vertexColour.xyz + ambient.xyz * lightAmbient.xyz + emissive.xyz; \n" " float fogValue = saturate((iDepth - fogParams.y) * fogParams.w); \n" - " oColor.xyz = lerp(lightingFinal * tex.xyz, fogColour, fogValue); \n" + " oColor.xyz = lerp(lightingFinal * tex.xyz, fogColour.xyz, fogValue); \n" " oColor.a = tex.a * diffuse.a * vertexColour.a; \n"; if (mrt) outStream << From fb78e853d41f07158705936213f21dd1804d0b16 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 12 Apr 2012 19:18:38 +0200 Subject: [PATCH 469/488] removed 2 unneeded lines --- apps/openmw/mwrender/shadows.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/openmw/mwrender/shadows.cpp b/apps/openmw/mwrender/shadows.cpp index 9c150f0c65..bf5602f438 100644 --- a/apps/openmw/mwrender/shadows.cpp +++ b/apps/openmw/mwrender/shadows.cpp @@ -55,9 +55,7 @@ void Shadows::recreate() mSceneMgr->setShadowCasterRenderBackFaces(true); mSceneMgr->setShadowTextureCasterMaterial("depth_shadow_caster"); mSceneMgr->setShadowTexturePixelFormat(PF_FLOAT32_R); - mSceneMgr->setShadowDirLightTextureOffset(0.9); mSceneMgr->setShadowDirectionalLightExtrusionDistance(1000000); - mSceneMgr->setShowDebugShadows(true); mShadowFar = split ? Settings::Manager::getInt("split shadow distance", "Shadows") : Settings::Manager::getInt("shadow distance", "Shadows"); mSceneMgr->setShadowFarDistance(mShadowFar); From 52c7ee3b6ae8a9738289a1728cb02ad8d9a49e1f Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 13 Apr 2012 10:49:45 +0200 Subject: [PATCH 470/488] moved selected spell from NpcStats to Spells --- apps/openmw/mwmechanics/npcstats.hpp | 5 ++--- apps/openmw/mwmechanics/spells.cpp | 13 +++++++++++++ apps/openmw/mwmechanics/spells.hpp | 11 ++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwmechanics/npcstats.hpp b/apps/openmw/mwmechanics/npcstats.hpp index ece85f8938..b9c672722b 100644 --- a/apps/openmw/mwmechanics/npcstats.hpp +++ b/apps/openmw/mwmechanics/npcstats.hpp @@ -12,7 +12,8 @@ namespace MWMechanics /// /// For non-NPC-specific stats, see the CreatureStats struct. /// - /// \note For technical reasons the spell list is also handled by CreatureStats. + /// \note For technical reasons the spell list and the currently selected spell is also handled by + /// CreatureStats, even though they are actually NPC stats. struct NpcStats { @@ -28,8 +29,6 @@ namespace MWMechanics bool mSneak; bool mCombat; - std::string mSelectedSpell; // can be an empty string (no spell selected) - NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), mCombat (false) {} }; diff --git a/apps/openmw/mwmechanics/spells.cpp b/apps/openmw/mwmechanics/spells.cpp index 4e8c6fa5a9..916239a840 100644 --- a/apps/openmw/mwmechanics/spells.cpp +++ b/apps/openmw/mwmechanics/spells.cpp @@ -43,6 +43,9 @@ namespace MWMechanics if (iter!=mSpells.end()) mSpells.erase (iter); + + if (spellId==mSelectedSpell) + mSelectedSpell.clear(); } MagicEffects Spells::getMagicEffects (const MWWorld::Environment& environment) const @@ -65,4 +68,14 @@ namespace MWMechanics { mSpells.clear(); } + + void Spells::setSelectedSpell (const std::string& spellId) + { + mSelectedSpell = spellId; + } + + const std::string Spells::getSelectedSpell() const + { + return mSelectedSpell; + } } diff --git a/apps/openmw/mwmechanics/spells.hpp b/apps/openmw/mwmechanics/spells.hpp index 4c5f21d351..f7606c4ac2 100644 --- a/apps/openmw/mwmechanics/spells.hpp +++ b/apps/openmw/mwmechanics/spells.hpp @@ -32,6 +32,7 @@ namespace MWMechanics private: std::vector mSpells; + std::string mSelectedSpell; void addSpell (const ESM::Spell *, MagicEffects& effects) const; @@ -42,15 +43,23 @@ namespace MWMechanics TIterator end() const; void add (const std::string& spell); - /// \note Adding a spell that is already listed in *this is a no-op. + ///< Adding a spell that is already listed in *this is a no-op. void remove (const std::string& spell); + ///< If the spell to be removed is the selected spell, the selected spell will be changed to + /// no spell (empty string). MagicEffects getMagicEffects (const MWWorld::Environment& environment) const; ///< Return sum of magic effects resulting from abilities, blights, deseases and curses. void clear(); ///< Remove all spells of al types. + + void setSelectedSpell (const std::string& spellId); + ///< This function does not verify, if the spell is available. + + const std::string getSelectedSpell() const; + ///< May return an empty string. }; } From b099e1baf583202cbaed50697011d09d50a72dc0 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 13 Apr 2012 11:12:53 +0200 Subject: [PATCH 471/488] added addspell and removespell script instructions --- apps/openmw/mwscript/docs/vmformat.txt | 6 ++- apps/openmw/mwscript/statsextensions.cpp | 47 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index df955ec198..705d65814d 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -129,4 +129,8 @@ op 0x2000143: ModWaterLevel op 0x2000144: ToggleWater, twa op 0x2000145: ToggleFogOfWar (tfow) op 0x2000146: TogglePathgrid -opcodes 0x2000147-0x3ffffff unused +op 0x2000147: AddSpell +op 0x2000148: AddSpell, explicit reference +op 0x2000149: RemoveSpell +op 0x200014a: RemoveSpell, explicit reference +opcodes 0x200014b-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 0e97a39cf4..10641903ee 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -280,6 +280,38 @@ namespace MWScript } }; + template + class OpAddSpell : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWWorld::Ptr ptr = R()(runtime); + + std::string id = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + + MWWorld::Class::get (ptr).getCreatureStats (ptr).mSpells.add (id); + } + }; + + template + class OpRemoveSpell : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWWorld::Ptr ptr = R()(runtime); + + std::string id = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + + MWWorld::Class::get (ptr).getCreatureStats (ptr).mSpells.remove (id); + } + }; + const int numberOfAttributes = 8; const int opcodeGetAttribute = 0x2000027; @@ -311,6 +343,11 @@ namespace MWScript const int opcodeModSkill = 0x20000fa; const int opcodeModSkillExplicit = 0x2000115; + const int opcodeAddSpell = 0x2000147; + const int opcodeAddSpellExplicit = 0x2000148; + const int opcodeRemoveSpell = 0x2000149; + const int opcodeRemoveSpellExplicit = 0x200014a; + void registerExtensions (Compiler::Extensions& extensions) { static const char *attributes[numberOfAttributes] = @@ -381,6 +418,10 @@ namespace MWScript extensions.registerInstruction (mod + skills[i], "l", opcodeModSkill+i, opcodeModSkillExplicit+i); } + + extensions.registerInstruction ("addspell", "c", opcodeAddSpell, opcodeAddSpellExplicit); + extensions.registerInstruction ("removespell", "c", opcodeRemoveSpell, + opcodeRemoveSpellExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -436,6 +477,12 @@ namespace MWScript interpreter.installSegment5 (opcodeModSkill+i, new OpModSkill (i)); interpreter.installSegment5 (opcodeModSkillExplicit+i, new OpModSkill (i)); } + + interpreter.installSegment5 (opcodeAddSpell, new OpAddSpell); + interpreter.installSegment5 (opcodeAddSpellExplicit, new OpAddSpell); + interpreter.installSegment5 (opcodeRemoveSpell, new OpRemoveSpell); + interpreter.installSegment5 (opcodeRemoveSpellExplicit, + new OpRemoveSpell); } } } From e3486931aef62a4d10eff259a6fb1fd71e488d7d Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 13 Apr 2012 13:17:50 +0200 Subject: [PATCH 472/488] F10 hotkey toggle FPS --- apps/openmw/mwgui/layouts.cpp | 35 +++++++++++++++++++--------- apps/openmw/mwgui/layouts.hpp | 1 + apps/openmw/mwgui/window_manager.cpp | 10 ++++++++ apps/openmw/mwgui/window_manager.hpp | 5 +++- apps/openmw/mwinput/inputmanager.cpp | 10 ++++++++ 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index 6d8aa901b5..21302d7c1d 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -67,17 +67,8 @@ HUD::HUD(int width, int height, int fpsLevel) getWidget(crosshair, "Crosshair"); - if ( fpsLevel == 2 ){ - getWidget(fpsbox, "FPSBoxAdv"); - fpsbox->setVisible(true); - getWidget(fpscounter, "FPSCounterAdv"); - }else if ( fpsLevel == 1 ){ - getWidget(fpsbox, "FPSBox"); - fpsbox->setVisible(true); - getWidget(fpscounter, "FPSCounter"); - }else{ - getWidget(fpscounter, "FPSCounter"); - } + setFpsLevel(fpsLevel); + getWidget(trianglecounter, "TriangleCounter"); getWidget(batchcounter, "BatchCounter"); @@ -95,6 +86,28 @@ HUD::HUD(int width, int height, int fpsLevel) LocalMapBase::init(minimap, this); } +void HUD::setFpsLevel(int level) +{ + MyGUI::Widget* fps; + getWidget(fps, "FPSBoxAdv"); + fps->setVisible(false); + getWidget(fps, "FPSBox"); + fps->setVisible(false); + + if (level == 2) + { + getWidget(fpsbox, "FPSBoxAdv"); + fpsbox->setVisible(true); + getWidget(fpscounter, "FPSCounterAdv"); + } + else if (level == 1) + { + getWidget(fpsbox, "FPSBox"); + fpsbox->setVisible(true); + getWidget(fpscounter, "FPSCounter"); + } +} + void HUD::setFPS(float fps) { fpscounter->setCaption(boost::lexical_cast((int)fps)); diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 0614708cf1..19d96d2efa 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -78,6 +78,7 @@ namespace MWGui void setPlayerPos(const float x, const float y); void setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellVisible); void setBottomRightVisibility(bool effectBoxVisible, bool minimapVisible); + void setFpsLevel(const int level); MyGUI::ProgressPtr health, magicka, stamina; MyGUI::Widget *weapBox, *spellBox; diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 13b6fab310..34d62ba080 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -15,6 +15,8 @@ #include "journalwindow.hpp" #include "charactercreation.hpp" +#include + #include #include #include @@ -472,3 +474,11 @@ void WindowManager::toggleFogOfWar() map->toggleFogOfWar(); hud->toggleFogOfWar(); } + +int WindowManager::toggleFps() +{ + showFPSLevel = (showFPSLevel+1)%3; + hud->setFpsLevel(showFPSLevel); + Settings::Manager::setInt("fps", "HUD", showFPSLevel); + return showFPSLevel; +} diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index f1db11731b..2b53560baf 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -158,7 +158,10 @@ namespace MWGui void setPlayerDir(const float x, const float y); ///< set player view direction in map space void toggleFogOfWar(); - + + int toggleFps(); + ///< toggle fps display @return resulting fps level + void setInteriorMapTexture(const int x, const int y); ///< set the index of the map texture that should be used (for interiors) diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index bd27de029c..9b5a9ae30f 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -68,6 +68,8 @@ namespace MWInput A_ToggleWeapon, A_ToggleSpell, + A_ToggleFps, // Toggle FPS display (this is temporary) + A_LAST // Marker for the last item }; @@ -88,6 +90,11 @@ namespace MWInput /* InputImpl Methods */ + void toggleFps() + { + windows.toggleFps(); + } + void toggleSpell() { DrawState state = player.getDrawState(); @@ -235,6 +242,8 @@ namespace MWInput "Draw Weapon"); disp->funcs.bind(A_ToggleSpell,boost::bind(&InputImpl::toggleSpell,this), "Ready hands"); + disp->funcs.bind(A_ToggleFps, boost::bind(&InputImpl::toggleFps, this), + "Toggle FPS display"); // Add the exit listener ogre.getRoot()->addFrameListener(&exit); @@ -281,6 +290,7 @@ namespace MWInput disp->bind(A_ToggleWalk, KC_C); disp->bind(A_ToggleWeapon,KC_F); disp->bind(A_ToggleSpell,KC_R); + disp->bind(A_ToggleFps, KC_F10); // Key bindings for polled keys // NOTE: These keys are constantly being polled. Only add keys that must be checked each frame. From e16daeed238c140754642388ffa6d7988884382e Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 13 Apr 2012 13:17:57 +0200 Subject: [PATCH 473/488] added GetSpell script function --- apps/openmw/mwscript/docs/vmformat.txt | 4 ++- apps/openmw/mwscript/statsextensions.cpp | 32 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 705d65814d..1317794fa8 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -133,4 +133,6 @@ op 0x2000147: AddSpell op 0x2000148: AddSpell, explicit reference op 0x2000149: RemoveSpell op 0x200014a: RemoveSpell, explicit reference -opcodes 0x200014b-0x3ffffff unused +op 0x200014b: GetSpell +op 0x200014c: GetSpell, explicit reference +opcodes 0x200014d-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 10641903ee..011b8b010f 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -312,6 +312,33 @@ namespace MWScript } }; + template + class OpGetSpell : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWWorld::Ptr ptr = R()(runtime); + + std::string id = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + + Interpreter::Type_Integer value = 0; + + for (MWMechanics::Spells::TIterator iter ( + MWWorld::Class::get (ptr).getCreatureStats (ptr).mSpells.begin()); + iter!=MWWorld::Class::get (ptr).getCreatureStats (ptr).mSpells.end(); ++iter) + if (*iter==id) + { + value = 1; + break; + } + + runtime.push (value); + } + }; + const int numberOfAttributes = 8; const int opcodeGetAttribute = 0x2000027; @@ -347,6 +374,8 @@ namespace MWScript const int opcodeAddSpellExplicit = 0x2000148; const int opcodeRemoveSpell = 0x2000149; const int opcodeRemoveSpellExplicit = 0x200014a; + const int opcodeGetSpell = 0x200014b; + const int opcodeGetSpellExplicit = 0x200014c; void registerExtensions (Compiler::Extensions& extensions) { @@ -422,6 +451,7 @@ namespace MWScript extensions.registerInstruction ("addspell", "c", opcodeAddSpell, opcodeAddSpellExplicit); extensions.registerInstruction ("removespell", "c", opcodeRemoveSpell, opcodeRemoveSpellExplicit); + extensions.registerFunction ("getspell", 'l', "c", opcodeGetSpell, opcodeGetSpellExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -483,6 +513,8 @@ namespace MWScript interpreter.installSegment5 (opcodeRemoveSpell, new OpRemoveSpell); interpreter.installSegment5 (opcodeRemoveSpellExplicit, new OpRemoveSpell); + interpreter.installSegment5 (opcodeGetSpell, new OpGetSpell); + interpreter.installSegment5 (opcodeGetSpellExplicit, new OpGetSpell); } } } From a33ae35e9487913454e87797425307375dc8aefb Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 13 Apr 2012 13:28:31 +0200 Subject: [PATCH 474/488] some fixes --- apps/openmw/mwrender/renderingmanager.cpp | 3 ++- apps/openmw/mwrender/terrainmaterial.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index ee60407b24..984b7ddc91 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -56,6 +56,8 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const const RenderSystemCapabilities* caps = Root::getSingleton().getRenderSystem()->getCapabilities(); if (caps->getNumMultiRenderTargets() < 2) Settings::Manager::setBool("shader", "Water", false); + if (!caps->isShaderProfileSupported("fp40") && !caps->isShaderProfileSupported("ps_4_0")) + Settings::Manager::setBool("enabled", "Shadows", false); // note that the order is important here if (useMRT()) @@ -108,7 +110,6 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const RenderingManager::~RenderingManager () { - //TODO: destroy mSun? delete mPlayer; delete mSkyManager; delete mDebugging; diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 57bea5388e..c69ed3a613 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -1339,7 +1339,13 @@ namespace Ogre // diffuse lighting for (int i=0; igetNumberOfLightsSupported(); ++i) + { + // shadows only for first light (directional) + if (i==0) outStream << " outputCol.rgb += litRes"<isLayerSpecularMappingEnabled()) From 3442ef17a8ee4dc37d74f63dcd0c95843179ab2b Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 13 Apr 2012 14:54:13 +0200 Subject: [PATCH 475/488] fixed ModDisposition --- apps/openmw/mwscript/docs/vmformat.txt | 3 ++- apps/openmw/mwscript/statsextensions.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 17f11d3a96..fda8d1954b 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -139,4 +139,5 @@ op 0x200014a: RemoveSpell, explicit reference op 0x200014b: GetSpell op 0x200014c: GetSpell, explicit reference op 0x200014d: ModDisposition -opcodes 0x200014e-0x3ffffff unused +op 0x200014e: ModDisposition, explicit reference +opcodes 0x200014f-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index f7a4e5d86e..9d30098703 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -435,13 +435,19 @@ namespace MWScript } }; + template class OpModDisposition : public Interpreter::Opcode0 { public: virtual void execute (Interpreter::Runtime& runtime) { + MWWorld::Ptr ptr = R()(runtime); +// Interpreter::Type_Integer value = runtime[0].mInteger; + runtime.pop(); + + /// \todo modify disposition towards the player } }; @@ -487,6 +493,7 @@ namespace MWScript const int opcodePCLowerRank = 0x2000c; const int opcodePCJoinFaction = 0x2000d; const int opcodeModDisposition = 0x200014d; + const int opcodeModDispositionExplicit = 0x200014e; void registerExtensions (Compiler::Extensions& extensions) { @@ -567,7 +574,8 @@ namespace MWScript extensions.registerInstruction("pcraiserank","/S",opcodePCRaiseRank); extensions.registerInstruction("pclowerrank","/S",opcodePCLowerRank); extensions.registerInstruction("pcjoinfaction","/S",opcodePCJoinFaction); - extensions.registerInstruction("moddisposition","l",opcodeModDisposition); + extensions.registerInstruction("moddisposition","l",opcodeModDisposition, + opcodeModDispositionExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -635,7 +643,8 @@ namespace MWScript interpreter.installSegment3(opcodePCRaiseRank,new OpPCRaiseRank); interpreter.installSegment3(opcodePCLowerRank,new OpPCLowerRank); interpreter.installSegment3(opcodePCJoinFaction,new OpPCJoinFaction); - interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); + interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); + interpreter.installSegment5(opcodeModDispositionExplicit,new OpModDisposition); } } } From 0c6862e3e6469ade34ed6d994ffa92e2bcc90ff3 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 13 Apr 2012 15:09:38 +0200 Subject: [PATCH 476/488] Undefining some windows defines --- apps/openmw/mwmechanics/drawstate.hpp | 2 ++ apps/openmw/mwrender/terrainmaterial.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/apps/openmw/mwmechanics/drawstate.hpp b/apps/openmw/mwmechanics/drawstate.hpp index ded25f8d5d..772086d90a 100644 --- a/apps/openmw/mwmechanics/drawstate.hpp +++ b/apps/openmw/mwmechanics/drawstate.hpp @@ -1,6 +1,8 @@ #ifndef GAME_MWMECHANICS_DRAWSTATE_H #define GAME_MWMECHANICS_DRAWSTATE_H +#undef DrawState + enum DrawState { DrawState_Weapon = 0, diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 57bea5388e..331bb47e32 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -39,6 +39,8 @@ THE SOFTWARE. #include #include "renderingmanager.hpp" +#undef far + namespace Ogre { //--------------------------------------------------------------------- From 226f312163593db2d46dce2c1886b8b365e03650 Mon Sep 17 00:00:00 2001 From: k1ll Date: Fri, 13 Apr 2012 17:36:31 +0200 Subject: [PATCH 477/488] Set the version in the openmw.desktop file via CMake --- CMakeLists.txt | 3 +++ files/openmw.desktop | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3ca740af9..286d0f743b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,6 +244,9 @@ endif (WIN32) if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux "${OpenMW_BINARY_DIR}/plugins.cfg") + + configure_file(${OpenMW_SOURCE_DIR}/files/openmw.desktop + "${OpenMW_BINARY_DIR}/openmw.desktop") endif() if (APPLE) diff --git a/files/openmw.desktop b/files/openmw.desktop index 8643d4b138..234f660c62 100644 --- a/files/openmw.desktop +++ b/files/openmw.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=0.11 +Version=${OPENMW_VERSION} Type=Application Name=OpenMW Launcher GenericName=Role Playing Game From dc2751f4ec40cec649797e76c7e002a371d965fb Mon Sep 17 00:00:00 2001 From: k1ll Date: Fri, 13 Apr 2012 17:39:46 +0200 Subject: [PATCH 478/488] Moved Build options to the top. I need this for my tar.gz packages but i think this is a good idea in general. --- CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 286d0f743b..d67d3eb5f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,11 @@ configure_file ("${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_ option(MYGUI_STATIC "Link static build of Mygui into the binaries" FALSE) option(OGRE_STATIC "Link static build of Ogre and Ogre Plugins into the binaries" FALSE) +# Apps and tools +option(BUILD_ESMTOOL "build ESM inspector" ON) +option(BUILD_LAUNCHER "build Launcher" ON) +option(BUILD_MWINIIMPORTER "build MWiniImporter" ON) + # Sound source selection option(USE_FFMPEG "use ffmpeg for sound" OFF) option(USE_AUDIERE "use audiere for sound" OFF) @@ -416,17 +421,14 @@ add_subdirectory (components) # Apps and tools add_subdirectory( apps/openmw ) -option(BUILD_ESMTOOL "build ESM inspector" ON) if (BUILD_ESMTOOL) add_subdirectory( apps/esmtool ) endif() -option(BUILD_LAUNCHER "build Launcher inspector" ON) if (BUILD_LAUNCHER) add_subdirectory( apps/launcher ) endif() -option(BUILD_MWINIIMPORTER "build MWiniImporter inspector" ON) if (BUILD_MWINIIMPORTER) add_subdirectory( apps/mwiniimporter ) endif() From 2d6cd162966f69501ebc8c5f428f8ca4fa382400 Mon Sep 17 00:00:00 2001 From: k1ll Date: Fri, 13 Apr 2012 17:53:01 +0200 Subject: [PATCH 479/488] Now Debian Packages install the configured openmw.desktop file. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d67d3eb5f9..9969747d36 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -315,7 +315,7 @@ if(DPKG_PROGRAM) endif() #Install icon and desktop file - INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") + INSTALL(FILES "${OpenMW_BINARY_DIR}/files/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") #Install global configuration files From 8156e9e5c4022db029213f04e5e62eb8958dac8a Mon Sep 17 00:00:00 2001 From: k1ll Date: Fri, 13 Apr 2012 18:20:49 +0200 Subject: [PATCH 480/488] Fixed install search path for openmw.desktop. It's directly in the binary dir. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9969747d36..442710a02c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -315,7 +315,7 @@ if(DPKG_PROGRAM) endif() #Install icon and desktop file - INSTALL(FILES "${OpenMW_BINARY_DIR}/files/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") + INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw") #Install global configuration files From 52b0b28c78f1423c463cfbb390bb1a1f3f6d2161 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 13 Apr 2012 19:20:59 +0200 Subject: [PATCH 481/488] fixed the mygui output on console --- libs/openengine/gui/manager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/openengine/gui/manager.cpp b/libs/openengine/gui/manager.cpp index 2d84ac8045..1bf8ec3257 100644 --- a/libs/openengine/gui/manager.cpp +++ b/libs/openengine/gui/manager.cpp @@ -18,7 +18,6 @@ void MyGUIManager::setup(Ogre::RenderWindow *wnd, Ogre::SceneManager *mgr, bool // manager before the main gui system itself, otherwise the main // object will get the chance to spit out a few messages before we // can able to disable it. - /// \todo - can't avoid this with MyGUI 3.2? std::string theLogFile = std::string(MYGUI_PLATFORM_LOG_FILENAME); if(!logDir.empty()) @@ -26,9 +25,9 @@ void MyGUIManager::setup(Ogre::RenderWindow *wnd, Ogre::SceneManager *mgr, bool // Set up OGRE platform. We might make this more generic later. mPlatform = new OgrePlatform(); + LogManager::getInstance().setSTDOutputEnabled(logging); mPlatform->initialise(wnd, mgr, "General", theLogFile); - LogManager::getInstance().setSTDOutputEnabled(logging); // Create GUI mGui = new Gui(); From e04d127f30817dfbe02eebe9cc65f358515cfe59 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 14 Apr 2012 15:10:26 +0200 Subject: [PATCH 482/488] terrain shader fixes --- apps/openmw/mwrender/terrainmaterial.cpp | 68 +++++++++--------------- 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/apps/openmw/mwrender/terrainmaterial.cpp b/apps/openmw/mwrender/terrainmaterial.cpp index 331bb47e32..7ed2a703b3 100644 --- a/apps/openmw/mwrender/terrainmaterial.cpp +++ b/apps/openmw/mwrender/terrainmaterial.cpp @@ -540,7 +540,6 @@ namespace Ogre params->setNamedAutoConstant("viewProjMatrix", GpuProgramParameters::ACT_VIEWPROJ_MATRIX); params->setNamedAutoConstant("lodMorph", GpuProgramParameters::ACT_CUSTOM, Terrain::LOD_MORPH_CUSTOM_PARAM); - params->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); if (prof->isShadowingEnabled(tt, terrain)) { @@ -576,7 +575,7 @@ namespace Ogre { params->setNamedAutoConstant("lightPosObjSpace"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, i); params->setNamedAutoConstant("lightDiffuseColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, i); - if (prof->getNumberOfLightsSupported() > 1) + if (i > 0) params->setNamedAutoConstant("lightAttenuation"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_ATTENUATION, i); //params->setNamedAutoConstant("lightSpecularColour"+StringConverter::toString(i), GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, i); } @@ -586,6 +585,7 @@ namespace Ogre params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); params->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR); + params->setNamedAutoConstant("fogParams", GpuProgramParameters::ACT_FOG_PARAMS); if (prof->isShadowingEnabled(tt, terrain)) { @@ -813,11 +813,11 @@ namespace Ogre outStream << "out float4 oPos : POSITION,\n" - "out float4 oPosObj : COLOR \n"; + "out float4 oPosObj : TEXCOORD0 \n"; - uint texCoordSet = 0; + uint texCoordSet = 1; outStream << - ", out float4 oUVMisc : TEXCOORD" << texCoordSet++ <<" // xy = uv, z = camDepth\n"; + ", out float4 oUVMisc : COLOR0 // xy = uv, z = camDepth\n"; // layer UV's premultiplied, packed as xy/zw uint numUVSets = numLayers / 2; @@ -837,14 +837,6 @@ namespace Ogre outStream << ", out float2 lodInfo : TEXCOORD" << texCoordSet++ << "\n"; } - bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; - if (fog) - { - outStream << - ", uniform float4 fogParams\n"; - //", out float fogVal : COLOR\n"; - } - if (prof->isShadowingEnabled(tt, terrain)) { texCoordSet = generateVpDynamicShadowsParams(texCoordSet, prof, terrain, tt, outStream); @@ -940,11 +932,11 @@ namespace Ogre outStream << "void main_fp(\n" - "float4 position : COLOR,\n"; + "float4 position : TEXCOORD0,\n"; - uint texCoordSet = 0; + uint texCoordSet = 1; outStream << - "float4 uvMisc : TEXCOORD" << texCoordSet++ << ",\n"; + "float4 uvMisc : COLOR0,\n"; // UV's premultiplied, packed as xy/zw uint maxLayers = prof->getMaxLayers(terrain); @@ -971,8 +963,8 @@ namespace Ogre if (fog) { outStream << + "uniform float4 fogParams, \n" "uniform float3 fogColour, \n"; - //"float fogVal : COLOR,\n"; } uint currentSamplerIdx = 0; @@ -991,7 +983,7 @@ namespace Ogre //"uniform float3 lightSpecularColour"<getNumberOfLightsSupported() > 1) + if (i > 0) outStream << "uniform float4 lightAttenuation"<getNumberOfLightsSupported() > 1) + if (i > 0) outStream << // pre-multiply light color with attenuation factor "d = length( lightDir"<getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; - if (fog) - { - if (terrain->getSceneManager()->getFogMode() == FOG_LINEAR) - { - outStream << - " float fogVal = saturate((oPos.z - fogParams.y) * fogParams.w);\n"; - } - else - { - outStream << - " float fogVal = saturate(1 / (exp(oPos.z * fogParams.x)));\n"; - } - outStream << - " oPosObj.w = fogVal; \n"; - } + " oPosObj.w = oPos.z;\n"; if (prof->isShadowingEnabled(tt, terrain)) generateVpDynamicShadows(prof, terrain, tt, outStream); @@ -1369,6 +1343,16 @@ namespace Ogre bool fog = terrain->getSceneManager()->getFogMode() != FOG_NONE && tt != RENDER_COMPOSITE_MAP; if (fog) { + if (terrain->getSceneManager()->getFogMode() == FOG_LINEAR) + { + outStream << + " float fogVal = saturate((position.w - fogParams.y) * fogParams.w);\n"; + } + else + { + outStream << + " float fogVal = saturate(1 / (exp(position.w * fogParams.x)));\n"; + } outStream << " outputCol.rgb = lerp(outputCol.rgb, fogColour, fogVal);\n"; } @@ -1376,7 +1360,7 @@ namespace Ogre outStream << " oColor = outputCol;\n"; if (MWRender::RenderingManager::useMRT()) outStream << - " oColor1 = float4(uvMisc.z / far, 0, 0, 1); \n"; + " oColor1 = float4(position.w / far, 0, 0, 1); \n"; outStream << "}\n"; @@ -1585,7 +1569,7 @@ namespace Ogre { uint numTextures = prof->getReceiveDynamicShadowsPSSM()->getSplitCount(); outStream << - " float camDepth = uvMisc.z;\n"; + " float camDepth = position.w;\n"; if (prof->getReceiveDynamicShadowsDepth()) { @@ -1629,8 +1613,8 @@ namespace Ogre outStream << " float fadeRange = shadowFar_fadeStart.x - shadowFar_fadeStart.y; \n" - " float fade = 1-((uvMisc.z - shadowFar_fadeStart.y) / fadeRange); \n" - " rtshadow = (uvMisc.z > shadowFar_fadeStart.x) ? 1 : ((uvMisc.z > shadowFar_fadeStart.y) ? 1-((1-rtshadow)*fade) : rtshadow); \n" + " float fade = 1-((position.w - shadowFar_fadeStart.y) / fadeRange); \n" + " rtshadow = (position.w > shadowFar_fadeStart.x) ? 1 : ((position.w > shadowFar_fadeStart.y) ? 1-((1-rtshadow)*fade) : rtshadow); \n" " rtshadow = (1-(1-rtshadow)*0.6); \n" // make the shadow a little less intensive " shadow = min(shadow, rtshadow);\n"; From fa5a1432c9817238245be20ec3ee17ec3107c3f9 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 14 Apr 2012 15:58:58 +0200 Subject: [PATCH 483/488] map lighting tweak, default settings tweak --- apps/openmw/mwrender/renderingmanager.cpp | 2 ++ files/settings-default.cfg | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 984b7ddc91..c1462807fc 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -482,11 +482,13 @@ void RenderingManager::preCellChange(MWWorld::Ptr::CellStore* cell) void RenderingManager::disableLights() { mObjects.disableLights(); + sunDisable(); } void RenderingManager::enableLights() { mObjects.enableLights(); + sunEnable(); } const bool RenderingManager::useMRT() diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 4d2d46fca1..553a82e497 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -93,7 +93,7 @@ rtt size = 512 reflect terrain = true reflect statics = false reflect small statics = false -reflect actors = true +reflect actors = false reflect misc = false # Enable underwater effect. It is not resource intensive, so only disable it if you have problems. From 4b0099fb5b1c90214a14e0d387d52a2ed2668c0f Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 14 Apr 2012 16:10:47 +0200 Subject: [PATCH 484/488] npc visibility flags fix --- apps/openmw/mwrender/npcanimation.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index 9de5705e3f..a231e8fe77 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -240,6 +240,7 @@ Ogre::Entity* NpcAnimation::insertBoundedPart(const std::string &mesh, std::stri NIFLoader::load(mesh); Entity* ent = mRend.getScene()->createEntity(mesh); + ent->setVisibilityFlags(RV_Actors); base->attachObjectToBone(bonename, ent); return ent; @@ -249,9 +250,7 @@ void NpcAnimation::insertFreePart(const std::string &mesh, const std::string suf NIFLoader::load(meshNumbered); Ogre::Entity* ent = mRend.getScene()->createEntity(meshNumbered); - - - + ent->setVisibilityFlags(RV_Actors); insert->attachObject(ent); entityparts.push_back(ent); From 45a5877b235e6e41841e83554ada94b0186b9000 Mon Sep 17 00:00:00 2001 From: gugus Date: Sun, 15 Apr 2012 12:05:46 +0200 Subject: [PATCH 485/488] implement getPCRank. Does not work yet. --- apps/openmw/mwscript/docs/vmformat.txt | 6 ++- apps/openmw/mwscript/statsextensions.cpp | 53 ++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index fda8d1954b..c38ff611ca 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -26,8 +26,10 @@ op 0x20009: LoopAnim, explicit reference op 0x2000a: Choice op 0x2000b: PCRaiseRank op 0x2000c: PCLowerRank -op x20000d: PCJoinFaction -opcodes 0x2000e-0x3ffff unused +op 0x2000d: PCJoinFaction +op 0x2000e: PCGetRank implicit +op 0x2000f: PCGetRank explicit +opcodes 0x20010-0x3ffff unused Segment 4: (not implemented yet) diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 9d30098703..727b2d0e14 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -435,6 +435,54 @@ namespace MWScript } }; + template + class OpGetPCRank : public Interpreter::Opcode1 + { + public: + + virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) + { + MWWorld::Ptr ptr = R()(runtime); + runtime.pop(); + + std::string factionID = ""; + if(arg0 >0) + { + factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + } + else + { + if(MWWorld::Class::get(ptr).getNpcStats(ptr).mFactionRank.empty()) + { + //throw exception? + } + else + { + factionID = MWWorld::Class::get(ptr).getNpcStats(ptr).mFactionRank.begin()->first; + } + } + MWScript::InterpreterContext& context + = static_cast (runtime.getContext()); + MWWorld::Ptr player = context.getEnvironment().mWorld->getPlayer().getPlayer(); + if(factionID!="") + { + if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) != MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) + { + runtime.push(MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID]); + } + else + { + runtime.push(-1); + } + } + else + { + runtime.push(-1); + } + } + }; + template class OpModDisposition : public Interpreter::Opcode0 { @@ -492,6 +540,8 @@ namespace MWScript const int opcodePCRaiseRank = 0x2000b; const int opcodePCLowerRank = 0x2000c; const int opcodePCJoinFaction = 0x2000d; + const int opcodeGetPCRank = 0x2000e; + const int opcodeGetPCRankExplicit = 0x2000f; const int opcodeModDisposition = 0x200014d; const int opcodeModDispositionExplicit = 0x200014e; @@ -576,6 +626,7 @@ namespace MWScript extensions.registerInstruction("pcjoinfaction","/S",opcodePCJoinFaction); extensions.registerInstruction("moddisposition","l",opcodeModDisposition, opcodeModDispositionExplicit); + extensions.registerFunction("getpcrank",'l',"/S",opcodeGetPCRank,opcodeGetPCRankExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -645,6 +696,8 @@ namespace MWScript interpreter.installSegment3(opcodePCJoinFaction,new OpPCJoinFaction); interpreter.installSegment5(opcodeModDisposition,new OpModDisposition); interpreter.installSegment5(opcodeModDispositionExplicit,new OpModDisposition); + interpreter.installSegment3(opcodeGetPCRank,new OpGetPCRank); + interpreter.installSegment3(opcodeGetPCRankExplicit,new OpGetPCRank); } } } From f68248e0d0800d37a18afde61fa2380ec79dccd4 Mon Sep 17 00:00:00 2001 From: gugus Date: Sun, 15 Apr 2012 14:20:08 +0200 Subject: [PATCH 486/488] corrected a bug in getPCRank --- apps/openmw/mwscript/statsextensions.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 727b2d0e14..239f8d7682 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -443,7 +443,6 @@ namespace MWScript virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0) { MWWorld::Ptr ptr = R()(runtime); - runtime.pop(); std::string factionID = ""; if(arg0 >0) From c24a85848f0d162b76c320465e524883e8124d07 Mon Sep 17 00:00:00 2001 From: gugus Date: Sun, 15 Apr 2012 15:56:36 +0200 Subject: [PATCH 487/488] forceGreeting script instruction --- apps/openmw/mwscript/dialogueextensions.cpp | 17 +++++++++++++++++ apps/openmw/mwscript/docs/vmformat.txt | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/dialogueextensions.cpp b/apps/openmw/mwscript/dialogueextensions.cpp index 0cca028e29..178485f789 100644 --- a/apps/openmw/mwscript/dialogueextensions.cpp +++ b/apps/openmw/mwscript/dialogueextensions.cpp @@ -11,6 +11,7 @@ #include "../mwdialogue/dialoguemanager.hpp" #include "interpretercontext.hpp" +#include "ref.hpp" namespace MWScript { @@ -115,12 +116,26 @@ namespace MWScript } }; + template + class OpForceGreeting : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWWorld::Ptr ptr = R()(runtime); + MWScript::InterpreterContext& context + = static_cast (runtime.getContext()); + context.getEnvironment().mDialogueManager->startDialogue (ptr); + } + }; const int opcodeJournal = 0x2000133; const int opcodeSetJournalIndex = 0x2000134; const int opcodeGetJournalIndex = 0x2000135; const int opcodeAddTopic = 0x200013a; const int opcodeChoice = 0x2000a; + const int opcodeForceGreeting = 0x200014f; void registerExtensions (Compiler::Extensions& extensions) { @@ -129,6 +144,7 @@ namespace MWScript extensions.registerFunction ("getjournalindex", 'l', "c", opcodeGetJournalIndex); extensions.registerInstruction ("addtopic", "S" , opcodeAddTopic); extensions.registerInstruction ("choice", "/SlSlSlSlSlSlSlSlSlSlSlSlSlSlSlSl", opcodeChoice); + extensions.registerInstruction("forcegreeting","",-1,opcodeForceGreeting); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -138,6 +154,7 @@ namespace MWScript interpreter.installSegment5 (opcodeGetJournalIndex, new OpGetJournalIndex); interpreter.installSegment5 (opcodeAddTopic, new OpAddTopic); interpreter.installSegment3 (opcodeChoice,new OpChoice); + interpreter.installSegment5 (opcodeForceGreeting, new OpForceGreeting); } } diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index c38ff611ca..9155746edb 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -142,4 +142,5 @@ op 0x200014b: GetSpell op 0x200014c: GetSpell, explicit reference op 0x200014d: ModDisposition op 0x200014e: ModDisposition, explicit reference -opcodes 0x200014f-0x3ffffff unused +op 0x200014f: ForceGreeting +opcodes 0x200015-0x3ffffff unused From b5d12d0723731a39ef6ce1bf61c669bf47957bc1 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 15 Apr 2012 17:08:22 +0200 Subject: [PATCH 488/488] fixed ForceGreeting --- apps/openmw/mwscript/dialogueextensions.cpp | 8 ++++++-- apps/openmw/mwscript/docs/vmformat.txt | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwscript/dialogueextensions.cpp b/apps/openmw/mwscript/dialogueextensions.cpp index 178485f789..fec539d3e3 100644 --- a/apps/openmw/mwscript/dialogueextensions.cpp +++ b/apps/openmw/mwscript/dialogueextensions.cpp @@ -136,6 +136,7 @@ namespace MWScript const int opcodeAddTopic = 0x200013a; const int opcodeChoice = 0x2000a; const int opcodeForceGreeting = 0x200014f; + const int opcodeForceGreetingExplicit = 0x2000150; void registerExtensions (Compiler::Extensions& extensions) { @@ -144,7 +145,9 @@ namespace MWScript extensions.registerFunction ("getjournalindex", 'l', "c", opcodeGetJournalIndex); extensions.registerInstruction ("addtopic", "S" , opcodeAddTopic); extensions.registerInstruction ("choice", "/SlSlSlSlSlSlSlSlSlSlSlSlSlSlSlSl", opcodeChoice); - extensions.registerInstruction("forcegreeting","",-1,opcodeForceGreeting); + extensions.registerInstruction("forcegreeting","",opcodeForceGreeting); + extensions.registerInstruction("forcegreeting","",opcodeForceGreeting, + opcodeForceGreetingExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -154,7 +157,8 @@ namespace MWScript interpreter.installSegment5 (opcodeGetJournalIndex, new OpGetJournalIndex); interpreter.installSegment5 (opcodeAddTopic, new OpAddTopic); interpreter.installSegment3 (opcodeChoice,new OpChoice); - interpreter.installSegment5 (opcodeForceGreeting, new OpForceGreeting); + interpreter.installSegment5 (opcodeForceGreeting, new OpForceGreeting); + interpreter.installSegment5 (opcodeForceGreetingExplicit, new OpForceGreeting); } } diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 9155746edb..58960aac47 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -143,4 +143,5 @@ op 0x200014c: GetSpell, explicit reference op 0x200014d: ModDisposition op 0x200014e: ModDisposition, explicit reference op 0x200014f: ForceGreeting -opcodes 0x200015-0x3ffffff unused +op 0x2000150: ForceGreeting, explicit reference +opcodes 0x2000151-0x3ffffff unused

ZhZw<>0$6AUeSrBtF!O_< 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 - - + + - + diff --git a/files/mygui/core.xml b/files/mygui/core.xml index 5bec13aef3..7417328cf1 100644 --- a/files/mygui/core.xml +++ b/files/mygui/core.xml @@ -1,28 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/files/mygui/openmw.font.xml b/files/mygui/openmw.font.xml index 454c3caecc..e7d0f50c8a 100644 --- a/files/mygui/openmw.font.xml +++ b/files/mygui/openmw.font.xml @@ -1,95 +1,40 @@ + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/files/mygui/openmw_button.skin.xml b/files/mygui/openmw_button.skin.xml index 0533a360f6..1c68930264 100644 --- a/files/mygui/openmw_button.skin.xml +++ b/files/mygui/openmw_button.skin.xml @@ -45,10 +45,7 @@ - - - - + diff --git a/files/mygui/openmw_console.skin.xml b/files/mygui/openmw_console.skin.xml index 1c8740ede1..598252734f 100644 --- a/files/mygui/openmw_console.skin.xml +++ b/files/mygui/openmw_console.skin.xml @@ -2,8 +2,6 @@ - - diff --git a/files/mygui/openmw_dialogue_window_layout.xml b/files/mygui/openmw_dialogue_window_layout.xml index 6e833004b1..11ac41cb32 100644 --- a/files/mygui/openmw_dialogue_window_layout.xml +++ b/files/mygui/openmw_dialogue_window_layout.xml @@ -12,7 +12,6 @@ - @@ -21,8 +20,8 @@ - + align="Right Top" name="Disposition"> + diff --git a/files/mygui/openmw_edit.skin.xml b/files/mygui/openmw_edit.skin.xml index 609dfe2c89..a86317d620 100644 --- a/files/mygui/openmw_edit.skin.xml +++ b/files/mygui/openmw_edit.skin.xml @@ -11,8 +11,7 @@ - - + @@ -33,8 +32,7 @@ - - + @@ -51,7 +49,7 @@ - + diff --git a/files/mygui/openmw_interactive_messagebox_layout.xml b/files/mygui/openmw_interactive_messagebox_layout.xml index 4ef2243d42..744f212276 100644 --- a/files/mygui/openmw_interactive_messagebox_layout.xml +++ b/files/mygui/openmw_interactive_messagebox_layout.xml @@ -3,14 +3,13 @@ + + + - - - - diff --git a/files/mygui/openmw_journal_skin.xml b/files/mygui/openmw_journal_skin.xml index a0d6ee2e86..0ef87852f4 100644 --- a/files/mygui/openmw_journal_skin.xml +++ b/files/mygui/openmw_journal_skin.xml @@ -14,13 +14,13 @@ - + - + diff --git a/files/mygui/openmw_list.skin.xml b/files/mygui/openmw_list.skin.xml index 98390367c9..0ac8e03ba6 100644 --- a/files/mygui/openmw_list.skin.xml +++ b/files/mygui/openmw_list.skin.xml @@ -167,8 +167,7 @@ - - + @@ -177,10 +176,9 @@ - - + - + diff --git a/files/mygui/openmw_messagebox_layout.xml b/files/mygui/openmw_messagebox_layout.xml index 244f58c99d..81d1c0a57e 100644 --- a/files/mygui/openmw_messagebox_layout.xml +++ b/files/mygui/openmw_messagebox_layout.xml @@ -6,14 +6,13 @@ + + + - - - - diff --git a/files/mygui/openmw_progress.skin.xml b/files/mygui/openmw_progress.skin.xml index a5fbfb0a34..c4b94e28e2 100644 --- a/files/mygui/openmw_progress.skin.xml +++ b/files/mygui/openmw_progress.skin.xml @@ -19,11 +19,10 @@ - - + - + diff --git a/files/mygui/openmw_settings.xml b/files/mygui/openmw_settings.xml index ca62294de0..c63f962fb7 100644 --- a/files/mygui/openmw_settings.xml +++ b/files/mygui/openmw_settings.xml @@ -1,9 +1,9 @@ - - + + diff --git a/files/mygui/openmw_text.skin.xml b/files/mygui/openmw_text.skin.xml index d62a5b8c02..6ae14c558b 100644 --- a/files/mygui/openmw_text.skin.xml +++ b/files/mygui/openmw_text.skin.xml @@ -2,40 +2,35 @@ - - + - - + - - + - - + - - + @@ -45,8 +40,7 @@ - - + diff --git a/files/mygui/openmw_windows.skin.xml b/files/mygui/openmw_windows.skin.xml index ea8eb5330b..a986dcffc8 100644 --- a/files/mygui/openmw_windows.skin.xml +++ b/files/mygui/openmw_windows.skin.xml @@ -189,14 +189,7 @@ - - - + @@ -221,8 +214,7 @@ ------------------------------------------------------ --> - - + @@ -298,8 +290,7 @@ - - + From 8e76451cda571ae4c58a795a3c8a18e5fa9bdcc5 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sun, 25 Mar 2012 02:00:49 +0400 Subject: [PATCH 154/488] Fix launcher style installation on OS X again --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a1b983358..d5f0bffa8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -501,6 +501,7 @@ if (APPLE) install(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" RENAME "openmw.cfg" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime) install(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime) + install(FILES "${OpenMW_BINARY_DIR}/launcher.qss" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime) set(CPACK_GENERATOR "DragNDrop") set(CPACK_PACKAGE_VERSION ${OPENMW_VERSION}) From f959a5cbeb48e23ebc67d4f8ec571e51b9849167 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 24 Mar 2012 23:24:19 +0100 Subject: [PATCH 155/488] auto adjust size of map window title bar --- apps/openmw/mwgui/layouts.cpp | 1 + libs/openengine/gui/layout.hpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index 5c5a977d38..9c49c62ac3 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -202,6 +202,7 @@ void MapWindow::setVisible(bool b) void MapWindow::setCellName(const std::string& cellName) { static_cast(mMainWidget)->setCaption(cellName); + adjustWindowCaption(); } void MapWindow::setPlayerPos(const float x, const float y) diff --git a/libs/openengine/gui/layout.hpp b/libs/openengine/gui/layout.hpp index 3c03423c38..e73b2d1cea 100644 --- a/libs/openengine/gui/layout.hpp +++ b/libs/openengine/gui/layout.hpp @@ -80,6 +80,29 @@ namespace GUI mMainWidget->setCoord(x,y,w,h); } + void adjustWindowCaption() + { + // adjust the size of the window caption so that all text is visible + // NOTE: this assumes that mMainWidget is of type Window. + MyGUI::TextBox* box = static_cast(mMainWidget)->getCaptionWidget(); + box->setSize(box->getTextSize().width + 48, box->getSize().height); + + // in order to trigger alignment updates, we need to update the parent + // mygui doesn't provide a proper way of doing this, so we are just changing size + box->getParent()->setCoord(MyGUI::IntCoord( + box->getParent()->getCoord().left, + box->getParent()->getCoord().top, + box->getParent()->getCoord().width, + box->getParent()->getCoord().height+1 + )); + box->getParent()->setCoord(MyGUI::IntCoord( + box->getParent()->getCoord().left, + box->getParent()->getCoord().top, + box->getParent()->getCoord().width, + box->getParent()->getCoord().height-1 + )); + } + void setVisible(bool b) { mMainWidget->setVisible(b); From 3e98e28059b1c26e1973a543e1a3d00489cb94e9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 24 Mar 2012 21:05:03 -0700 Subject: [PATCH 156/488] Use a better method to get a more even randomization --- apps/openmw/mwsound/soundmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 3b1f188e70..f626ec1584 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -350,7 +350,7 @@ namespace MWSound return; } - int r = rand() % total; //old random code + int r = (int)(rand()/((double)RAND_MAX+1) * total); int pos = 0; soundIter = regn->soundList.begin(); From 17a4adfe88aded63fd21fe5d3ab658aa62c354c8 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 25 Mar 2012 12:26:44 +0200 Subject: [PATCH 157/488] add raycast method that returns _all_ objects that were hit --- libs/openengine/bullet/physic.cpp | 31 +++++++++++++++++++++++++++++++ libs/openengine/bullet/physic.hpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index 07bad30535..e6a7393cca 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -372,4 +372,35 @@ namespace Physic return std::pair(name,d); } + + std::vector< std::pair > PhysicEngine::rayTest2(btVector3& from, btVector3& to) + { + MyRayResultCallback resultCallback1; + resultCallback1.m_collisionFilterMask = COL_WORLD; + dynamicsWorld->rayTest(from, to, resultCallback1); + resultCallback1.sort(); + std::vector< std::pair > results = resultCallback1.results; + + MyRayResultCallback resultCallback2; + resultCallback2.m_collisionFilterMask = COL_ACTOR_INTERNAL|COL_ACTOR_EXTERNAL; + dynamicsWorld->rayTest(from, to, resultCallback2); + resultCallback2.sort(); + std::vector< std::pair > actorResults = resultCallback2.results; + + std::vector< std::pair > results2; + + for (std::vector< std::pair >::iterator it=results.begin(); + it != results.end(); ++it) + { + results2.push_back( std::make_pair( (*it).first, static_cast(*(*it).second).mName ) ); + } + + for (std::vector< std::pair >::iterator it=actorResults.begin(); + it != actorResults.end(); ++it) + { + results2.push_back( std::make_pair( (*it).first, static_cast(*(*it).second).mName ) ); + } + + return results2; + } }}; diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 88e3699aee..97d2c004d1 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -201,6 +201,11 @@ namespace Physic */ std::pair rayTest(btVector3& from,btVector3& to); + /** + * Return all objects hit by a ray. + */ + std::vector< std::pair > rayTest2(btVector3& from, btVector3& to); + //event list of non player object std::list NPEventList; @@ -225,6 +230,30 @@ namespace Physic bool isDebugCreated; }; + + struct MyRayResultCallback : public btCollisionWorld::RayResultCallback + { + virtual btScalar addSingleResult( btCollisionWorld::LocalRayResult& rayResult, bool bNormalInWorldSpace) + { + results.push_back( std::make_pair(rayResult.m_hitFraction, rayResult.m_collisionObject) ); + return rayResult.m_hitFraction; + } + + static bool cmp( const std::pair& i, const std::pair& j ) + { + if( i.first < j.first ) return false; + if( j.first < i.first ) return true; + return false; + } + + void sort() + { + std::sort(results.begin(), results.end(), cmp); + } + + std::vector < std::pair > results; + }; + }} #endif From 53d4be5cf650edfb0730aa3424d19e70ebfcec40 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 25 Mar 2012 20:52:56 +0200 Subject: [PATCH 158/488] object pickup should work everywhere --- apps/openmw/mwrender/occlusionquery.cpp | 105 +++++++++++++++------- apps/openmw/mwrender/occlusionquery.hpp | 22 +++-- apps/openmw/mwrender/renderingmanager.hpp | 1 + apps/openmw/mwworld/physicssystem.cpp | 27 ++++++ apps/openmw/mwworld/physicssystem.hpp | 6 +- apps/openmw/mwworld/world.cpp | 73 +++++++++++++-- apps/openmw/mwworld/world.hpp | 6 ++ libs/openengine/bullet/physic.hpp | 4 +- 8 files changed, 198 insertions(+), 46 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 8dd30394c9..66086a90b8 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -47,7 +47,7 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod matQueryArea->setDepthCheckEnabled(false); // Not occluded by objects MaterialPtr matQueryVisible = matBase->clone("QueryVisiblePixels"); matQueryVisible->setDepthWriteEnabled(false); - matQueryVisible->setColourWriteEnabled(false); + matQueryVisible->setColourWriteEnabled(false); // Uncomment this to visualize the occlusion query matQueryVisible->setDepthCheckEnabled(true); // Occluded by objects mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); @@ -69,13 +69,14 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNode->attachObject(mBBQueryVisible); mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); - mBBQuerySingleObject->setDefaultDimensions(10, 10); + mBBQuerySingleObject->setDefaultDimensions(0.01, 0.01); mBBQuerySingleObject->createBillboard(Vector3::ZERO); mBBQuerySingleObject->setMaterialName("QueryVisiblePixels"); mBBQuerySingleObject->setRenderQueueGroup(queue); mObjectNode->attachObject(mBBQuerySingleObject); mRendering->getScene()->addRenderObjectListener(this); + mRendering->getScene()->addRenderQueueListener(this); mDoQuery = true; } @@ -95,8 +96,6 @@ bool OcclusionQuery::supported() void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, const LightList* pLightList, bool suppressRenderStateChanges) { - if (!mSupported) return; - // The following code activates and deactivates the occlusion queries // so that the queries only include the rendering of their intended targets @@ -111,26 +110,47 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass // Open a new occlusion query if (mDoQuery == true) { - if (rend == mBBQueryTotal) - mActiveQuery = mSunTotalAreaQuery; - else if (rend == mBBQueryVisible) - mActiveQuery = mSunVisibleAreaQuery; - else if (rend == mBBQuerySingleObject && mQuerySingleObjectRequested) + if (rend == mBBQueryTotal) { - mQuerySingleObjectStarted = true; - mQuerySingleObjectRequested = false; - mActiveQuery = mSingleObjectQuery; + mActiveQuery = mSunTotalAreaQuery; + mWasVisible = true; + } + else if (rend == mBBQueryVisible) + { + mActiveQuery = mSunVisibleAreaQuery; } - - if (mActiveQuery != NULL) - mActiveQuery->beginOcclusionQuery(); } + if (rend == mBBQuerySingleObject && mQuerySingleObjectRequested) + { + mQuerySingleObjectStarted = true; + mQuerySingleObjectRequested = false; + mActiveQuery = mSingleObjectQuery; + } + + if (mActiveQuery != NULL) + mActiveQuery->beginOcclusionQuery(); +} + +void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocation, bool& repeatThisInvocation) +{ + if (queueGroupId == RENDER_QUEUE_SKIES_LATE && mWasVisible == false) + { + // for some reason our single object query returns wrong results when the sun query was never executed + // (which can happen when we are in interiors, or when the sun is outside of the view frustum and gets culled) + // so we force it here once everything has been rendered + mSunTotalAreaQuery->beginOcclusionQuery(); + mSunTotalAreaQuery->endOcclusionQuery(); + mSunVisibleAreaQuery->beginOcclusionQuery(); + mSunVisibleAreaQuery->endOcclusionQuery(); + } } void OcclusionQuery::update() { if (!mSupported) return; + mWasVisible = false; + // Adjust the position of the sun billboards according to camera viewing distance // we need to do this to make sure that _everything_ can occlude the sun float dist = mRendering->getCamera()->getFarClipDistance(); @@ -145,8 +165,7 @@ void OcclusionQuery::update() mDoQuery = false; if (!mSunTotalAreaQuery->isStillOutstanding() - && !mSunVisibleAreaQuery->isStillOutstanding() - && !mSingleObjectQuery->isStillOutstanding()) + && !mSunVisibleAreaQuery->isStillOutstanding()) { unsigned int totalPixels; unsigned int visiblePixels; @@ -165,24 +184,33 @@ void OcclusionQuery::update() if (mSunVisibility > 1) mSunVisibility = 1; } - if (mQuerySingleObjectStarted) + mDoQuery = true; + } + if (!mSingleObjectQuery->isStillOutstanding() && mQuerySingleObjectStarted) + { + unsigned int result; + + mSingleObjectQuery->pullOcclusionQuery(&result); + + //std::cout << "Single object query result: " << result << " pixels " << std::endl; + mTestResult = (result != 0); + + mBBQuerySingleObject->setVisible(false); + + // restore old render queues + for (std::vector::iterator it=mObjectsInfo.begin(); + it!=mObjectsInfo.end(); ++it) { - unsigned int visiblePixels; - - mSingleObjectQuery->pullOcclusionQuery(&visiblePixels); - - mBBQuerySingleObject->setVisible(false); - mObject->setRenderQueueGroup(mObjectOldRenderQueue); - - mQuerySingleObjectStarted = false; - mQuerySingleObjectRequested = false; + if (!mRendering->getScene()->hasMovableObject((*it).name, (*it).typeName)) return; + mRendering->getScene()->getMovableObject((*it).name, (*it).typeName)->setRenderQueueGroup( (*it).oldRenderqueue ); } - mDoQuery = true; + mQuerySingleObjectStarted = false; + mQuerySingleObjectRequested = false; } } -void OcclusionQuery::occlusionTest(const Ogre::Vector3& position, Ogre::Entity* entity) +void OcclusionQuery::occlusionTest(const Ogre::Vector3& position, Ogre::SceneNode* object) { assert( !occlusionTestPending() && "Occlusion test still pending"); @@ -190,11 +218,24 @@ void OcclusionQuery::occlusionTest(const Ogre::Vector3& position, Ogre::Entity* mBBQuerySingleObject->setVisible(true); // we don't want the object to occlude itself - mObjectOldRenderQueue = entity->getRenderQueueGroup(); - if (mObjectOldRenderQueue < RENDER_QUEUE_MAIN+2) - entity->setRenderQueueGroup(RENDER_QUEUE_MAIN+2); + // put it in a render queue _after_ the occlusion query + mObjectsInfo.clear(); + for (int i=0; inumAttachedObjects(); ++i) + { + ObjectInfo info; + MovableObject* obj = object->getAttachedObject(i); + info.name = obj->getName(); + info.typeName = obj->getMovableType(); + info.oldRenderqueue = obj->getRenderQueueGroup(); + + mObjectsInfo.push_back(info); + + object->getAttachedObject(i)->setRenderQueueGroup(RENDER_QUEUE_MAIN+5); + } mObjectNode->setPosition(position); + // scale proportional to camera distance, in order to always give the billboard the same size in screen-space + mObjectNode->setScale( Vector3(1,1,1)*(position - mRendering->getCamera()->getRealPosition()).length() ); mQuerySingleObjectRequested = true; } diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index bcc45d96c6..987087e278 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -2,6 +2,7 @@ #define _GAME_OCCLUSION_QUERY_H #include +#include namespace Ogre { @@ -17,7 +18,14 @@ namespace MWRender /// /// \brief Implements hardware occlusion queries on the GPU /// - class OcclusionQuery : public Ogre::RenderObjectListener + struct ObjectInfo + { + int oldRenderqueue; + std::string name; + std::string typeName; + }; + + class OcclusionQuery : public Ogre::RenderObjectListener, public Ogre::RenderQueueListener { public: OcclusionQuery(OEngine::Render::OgreRenderer*, Ogre::SceneNode* sunNode); @@ -36,9 +44,9 @@ namespace MWRender /** * request occlusion test for a billboard at the given position, omitting an entity * @param position of the billboard in ogre coordinates - * @param entity to exclude from the occluders + * @param object to exclude from the occluders */ - void occlusionTest(const Ogre::Vector3& position, Ogre::Entity* entity); + void occlusionTest(const Ogre::Vector3& position, Ogre::SceneNode* object); /** * @return true if a request is still outstanding @@ -66,10 +74,10 @@ namespace MWRender Ogre::SceneNode* mBBNode; float mSunVisibility; - Ogre::Entity* mObject; - Ogre::SceneNode* mObjectNode; - int mObjectOldRenderQueue; + std::vector mObjectsInfo; + + bool mWasVisible; bool mTestResult; @@ -84,6 +92,8 @@ namespace MWRender protected: virtual void notifyRenderSingleObject(Ogre::Renderable* rend, const Ogre::Pass* pass, const Ogre::AutoParamDataSource* source, const Ogre::LightList* pLightList, bool suppressRenderStateChanges); + + virtual void renderQueueEnded(Ogre::uint8 queueGroupId, const Ogre::String& invocation, bool& repeatThisInvocation); }; } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 450e461730..569447bca3 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -100,6 +100,7 @@ class RenderingManager: private RenderingInterface { void sunDisable(); bool occlusionQuerySupported() { return mOcclusionQuery->supported(); }; + OcclusionQuery* getOcclusionQuery() { return mOcclusionQuery; }; void setGlare(bool glare); void skyEnable (); diff --git a/apps/openmw/mwworld/physicssystem.cpp b/apps/openmw/mwworld/physicssystem.cpp index bb2f9f8a92..1d8f14cc42 100644 --- a/apps/openmw/mwworld/physicssystem.cpp +++ b/apps/openmw/mwworld/physicssystem.cpp @@ -50,6 +50,33 @@ namespace MWWorld return mEngine->rayTest(from,to); } + + std::vector < std::pair > PhysicsSystem::getFacedObjects () + { + //get a ray pointing to the center of the viewport + Ray centerRay = mRender.getCamera()->getCameraToViewportRay( + mRender.getViewport()->getWidth()/2, + mRender.getViewport()->getHeight()/2); + //let's avoid the capsule shape of the player. + centerRay.setOrigin(centerRay.getOrigin() + 20*centerRay.getDirection()); + btVector3 from(centerRay.getOrigin().x,-centerRay.getOrigin().z,centerRay.getOrigin().y); + btVector3 to(centerRay.getPoint(500).x,-centerRay.getPoint(500).z,centerRay.getPoint(500).y); + + return mEngine->rayTest2(from,to); + } + + btVector3 PhysicsSystem::getRayPoint(float extent) + { + //get a ray pointing to the center of the viewport + Ray centerRay = mRender.getCamera()->getCameraToViewportRay( + mRender.getViewport()->getWidth()/2, + mRender.getViewport()->getHeight()/2); + //let's avoid the capsule shape of the player. + centerRay.setOrigin(centerRay.getOrigin() + 20*centerRay.getDirection()); + btVector3 from(centerRay.getOrigin().x,-centerRay.getOrigin().z,centerRay.getOrigin().y); + btVector3 to(centerRay.getPoint(500).x,-centerRay.getPoint(500).z,centerRay.getPoint(500).y); + return from * (1-extent) + to * extent; + } bool PhysicsSystem::castRay(const Vector3& from, const Vector3& to) { diff --git a/apps/openmw/mwworld/physicssystem.hpp b/apps/openmw/mwworld/physicssystem.hpp index 78cbde0837..7b2d77325e 100644 --- a/apps/openmw/mwworld/physicssystem.hpp +++ b/apps/openmw/mwworld/physicssystem.hpp @@ -35,7 +35,11 @@ namespace MWWorld bool toggleCollisionMode(); std::pair getFacedHandle (MWWorld::World& world); - + + btVector3 getRayPoint(float extent); + + std::vector < std::pair > getFacedObjects (); + // cast ray, return true if it hit something bool castRay(const Ogre::Vector3& from, const Ogre::Vector3& to); diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 261f66ff4f..f185e411f8 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -498,13 +498,21 @@ namespace MWWorld std::string World::getFacedHandle() { - std::pair result = mPhysics->getFacedHandle (*this); + if (!mRendering->occlusionQuerySupported()) + { + std::pair result = mPhysics->getFacedHandle (*this); - if (result.first.empty() || - result.second>getStore().gameSettings.find ("iMaxActivateDist")->i) - return ""; + if (result.first.empty() || + result.second>getStore().gameSettings.find ("iMaxActivateDist")->i) + return ""; - return result.first; + return result.first; + } + else + { + // updated every few frames in update() + return mFacedHandle; + } } void World::deleteObject (Ptr ptr) @@ -715,6 +723,61 @@ namespace MWWorld sun = Vector3(sun.x, -sun.z, sun.y); mRendering->getSkyManager()->setGlare(!mPhysics->castRay(Ogre::Vector3(p[0], p[1], p[2]), sun)); } + + // update faced handle (object the player is looking at) + // this uses a mixture of raycasts and occlusion queries. + else // if (mRendering->occlusionQuerySupported()) + { + MWRender::OcclusionQuery* query = mRendering->getOcclusionQuery(); + if (!query->occlusionTestPending()) + { + // get result of last query + if (mNumFacing == 0) mFacedHandle = ""; + else if (mNumFacing == 1) + { + bool result = query->getTestResult(); + mFacedHandle = result ? mFaced1Name : ""; + } + else if (mNumFacing == 2) + { + bool result = query->getTestResult(); + mFacedHandle = result ? mFaced2Name : mFaced1Name; + } + + // send new query + // figure out which object we want to test against + std::vector < std::pair < float, std::string > > results = mPhysics->getFacedObjects(); + + if (results.size() == 0) + { + mNumFacing = 0; + } + else if (results.size() == 1) + { + mFaced1 = getPtrViaHandle(results.front().second); + mFaced1Name = results.front().second; + mNumFacing = 1; + + btVector3 p = mPhysics->getRayPoint(results.front().first); + Ogre::Vector3 pos(p.x(), p.z(), -p.y()); + Ogre::SceneNode* node = mFaced1.getRefData().getBaseNode(); + query->occlusionTest(pos, node); + } + else + { + mFaced1Name = results.front().second; + mFaced2Name = results[1].second; + mFaced1 = getPtrViaHandle(results.front().second); + mFaced2 = getPtrViaHandle(results[1].second); + mNumFacing = 2; + + btVector3 p = mPhysics->getRayPoint(results[1].first); + Ogre::Vector3 pos(p.x(), p.z(), -p.y()); + Ogre::SceneNode* node = mFaced2.getRefData().getBaseNode(); + query->occlusionTest(pos, node); + } + } + } } bool World::isCellExterior() const diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 71cca3545d..7d8a1b9a0a 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -93,6 +93,12 @@ namespace MWWorld Ptr getPtrViaHandle (const std::string& handle, Ptr::CellStore& cellStore); + std::string mFacedHandle; + Ptr mFaced1; + Ptr mFaced2; + std::string mFaced1Name; + std::string mFaced2Name; + int mNumFacing; int getDaysPerMonth (int month) const; diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 97d2c004d1..3ecae7c0cc 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -241,8 +241,8 @@ namespace Physic static bool cmp( const std::pair& i, const std::pair& j ) { - if( i.first < j.first ) return false; - if( j.first < i.first ) return true; + if( i.first > j.first ) return false; + if( j.first > i.first ) return true; return false; } From 382fa6ac688097eb2980067255f4b8fe9395f3cd Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 25 Mar 2012 22:53:00 +0200 Subject: [PATCH 159/488] fixes --- apps/openmw/mwrender/occlusionquery.cpp | 10 +++++++--- libs/openengine/bullet/physic.cpp | 4 ++-- libs/openengine/bullet/physic.hpp | 7 +------ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 66086a90b8..b5f3f9c102 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -49,6 +49,8 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod matQueryVisible->setDepthWriteEnabled(false); matQueryVisible->setColourWriteEnabled(false); // Uncomment this to visualize the occlusion query matQueryVisible->setDepthCheckEnabled(true); // Occluded by objects + matQueryVisible->setCullingMode(CULL_NONE); + matQueryVisible->setManualCullingMode(MANUAL_CULL_NONE); mBBNode = mSunNode->getParentSceneNode()->createChildSceneNode(); @@ -133,16 +135,18 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocation, bool& repeatThisInvocation) { - if (queueGroupId == RENDER_QUEUE_SKIES_LATE && mWasVisible == false) + if (queueGroupId == RENDER_QUEUE_SKIES_LATE && mWasVisible == false && mDoQuery) { // for some reason our single object query returns wrong results when the sun query was never executed // (which can happen when we are in interiors, or when the sun is outside of the view frustum and gets culled) // so we force it here once everything has been rendered + mSunTotalAreaQuery->beginOcclusionQuery(); mSunTotalAreaQuery->endOcclusionQuery(); mSunVisibleAreaQuery->beginOcclusionQuery(); mSunVisibleAreaQuery->endOcclusionQuery(); - } + + } } void OcclusionQuery::update() @@ -201,7 +205,7 @@ void OcclusionQuery::update() for (std::vector::iterator it=mObjectsInfo.begin(); it!=mObjectsInfo.end(); ++it) { - if (!mRendering->getScene()->hasMovableObject((*it).name, (*it).typeName)) return; + if (!mRendering->getScene()->hasMovableObject((*it).name, (*it).typeName)) break; mRendering->getScene()->getMovableObject((*it).name, (*it).typeName)->setRenderQueueGroup( (*it).oldRenderqueue ); } diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index e6a7393cca..b1cd9eadee 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -378,13 +378,11 @@ namespace Physic MyRayResultCallback resultCallback1; resultCallback1.m_collisionFilterMask = COL_WORLD; dynamicsWorld->rayTest(from, to, resultCallback1); - resultCallback1.sort(); std::vector< std::pair > results = resultCallback1.results; MyRayResultCallback resultCallback2; resultCallback2.m_collisionFilterMask = COL_ACTOR_INTERNAL|COL_ACTOR_EXTERNAL; dynamicsWorld->rayTest(from, to, resultCallback2); - resultCallback2.sort(); std::vector< std::pair > actorResults = resultCallback2.results; std::vector< std::pair > results2; @@ -401,6 +399,8 @@ namespace Physic results2.push_back( std::make_pair( (*it).first, static_cast(*(*it).second).mName ) ); } + std::sort(results2.begin(), results2.end(), MyRayResultCallback::cmp); + return results2; } }}; diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 3ecae7c0cc..f6c52cbf95 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -239,18 +239,13 @@ namespace Physic return rayResult.m_hitFraction; } - static bool cmp( const std::pair& i, const std::pair& j ) + static bool cmp( const std::pair& i, const std::pair& j ) { if( i.first > j.first ) return false; if( j.first > i.first ) return true; return false; } - void sort() - { - std::sort(results.begin(), results.end(), cmp); - } - std::vector < std::pair > results; }; From 978b5f64d8767ef05b1010ecd8f862d36bba1b65 Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Sun, 25 Mar 2012 23:53:14 +0300 Subject: [PATCH 160/488] Merge cmake/findBullet patch for '_debug' postfixed libraries Merge in the patch from the cmake official repository: https://cmake.org/gitweb?p=cmake.git;a=commit;h=6f935d7f55af5c96d18d23b72991e87d1e029dda Without this fix cmake couldn't find bullet's debug libraries, and VS2010 openmw project file was generated with links to release libraries instead (which caused errors during build in debug configuration). --- cmake/FindBullet.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/FindBullet.cmake b/cmake/FindBullet.cmake index 7bdf75a0a3..552a0651af 100644 --- a/cmake/FindBullet.cmake +++ b/cmake/FindBullet.cmake @@ -51,13 +51,13 @@ find_path(BULLET_INCLUDE_DIR NAMES btBulletCollisionCommon.h # Find the libraries _FIND_BULLET_LIBRARY(BULLET_DYNAMICS_LIBRARY BulletDynamics) -_FIND_BULLET_LIBRARY(BULLET_DYNAMICS_LIBRARY_DEBUG BulletDynamics_d) +_FIND_BULLET_LIBRARY(BULLET_DYNAMICS_LIBRARY_DEBUG BulletDynamics_Debug BulletDynamics_d) _FIND_BULLET_LIBRARY(BULLET_COLLISION_LIBRARY BulletCollision) -_FIND_BULLET_LIBRARY(BULLET_COLLISION_LIBRARY_DEBUG BulletCollision_d) -_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY LinearMath BulletMath) -_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY_DEBUG LinearMath_d BulletMath_d) +_FIND_BULLET_LIBRARY(BULLET_COLLISION_LIBRARY_DEBUG BulletCollision_Debug BulletCollision_d) +_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY BulletMath LinearMath) +_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY_DEBUG BulletMath_Debug BulletMath_d LinearMath_debug LinearMath_d) _FIND_BULLET_LIBRARY(BULLET_SOFTBODY_LIBRARY BulletSoftBody) -_FIND_BULLET_LIBRARY(BULLET_SOFTBODY_LIBRARY_DEBUG BulletSoftBody_d) +_FIND_BULLET_LIBRARY(BULLET_SOFTBODY_LIBRARY_DEBUG BulletSoftBody_Debug BulletSoftBody_d) # handle the QUIETLY and REQUIRED arguments and set BULLET_FOUND to TRUE if From 35c3a0a3f921ef767121fea17cf2ebf1f4808f7e Mon Sep 17 00:00:00 2001 From: Roman Melnik Date: Mon, 26 Mar 2012 00:12:00 +0300 Subject: [PATCH 161/488] Add Boost_USE_STATIC_LIBS parameter for Windows If this parameter is not set in windows, cmake expects boost libraries to be named "boost_*.lib", while they are actually "libboost_*.lib" In findBoost.cmake (728): # Setting some more suffixes for the library set (Boost_LIB_PREFIX "") if (WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN) set(Boost_LIB_PREFIX "lib") endif() --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5f0bffa8f..d2801c8f22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,6 +168,7 @@ set(OPENMW_LIBS_HEADER) # Platform specific if (WIN32) + set(Boost_USE_STATIC_LIBS ON) set(PLATFORM_INCLUDE_DIR "platform") add_definitions(-DBOOST_ALL_NO_LIB) else (WIN32) From 98a33a7fc6c7f9e3f75f8ccbd93e7625a330eb1f Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 25 Mar 2012 23:28:51 +0200 Subject: [PATCH 162/488] fix --- apps/openmw/mwrender/occlusionquery.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index b5f3f9c102..971815f9bf 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -71,7 +71,8 @@ OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNod mBBNode->attachObject(mBBQueryVisible); mBBQuerySingleObject = mRendering->getScene()->createBillboardSet(1); - mBBQuerySingleObject->setDefaultDimensions(0.01, 0.01); + /// \todo ideally this should occupy exactly 1 pixel on the screen + mBBQuerySingleObject->setDefaultDimensions(0.003, 0.003); mBBQuerySingleObject->createBillboard(Vector3::ZERO); mBBQuerySingleObject->setMaterialName("QueryVisiblePixels"); mBBQuerySingleObject->setRenderQueueGroup(queue); From 4ee03cd61fef8d71e0a4614ef512e34ce30fa278 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 26 Mar 2012 00:31:03 +0200 Subject: [PATCH 163/488] handle timeout --- apps/openmw/mwrender/occlusionquery.cpp | 16 +++++++++++++--- apps/openmw/mwrender/occlusionquery.hpp | 6 +++++- apps/openmw/mwrender/renderingmanager.cpp | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 971815f9bf..6718a588bc 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -12,7 +12,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), - mQuerySingleObjectRequested(false) + mQuerySingleObjectRequested(false), mResponding(true), mDelay(0) { mRendering = renderer; mSunNode = sunNode; @@ -93,7 +93,8 @@ OcclusionQuery::~OcclusionQuery() bool OcclusionQuery::supported() { - return mSupported; + if (!mResponding) std::cout << "Occlusion query timed out" << std::endl; + return mSupported && mResponding; } void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, @@ -150,10 +151,13 @@ void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocati } } -void OcclusionQuery::update() +void OcclusionQuery::update(float duration) { if (!mSupported) return; + mDelay += duration; + if (mDelay >= 2) mResponding = false; + mWasVisible = false; // Adjust the position of the sun billboards according to camera viewing distance @@ -172,6 +176,9 @@ void OcclusionQuery::update() if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding()) { + mDelay = 0; + mResponding = true; + unsigned int totalPixels; unsigned int visiblePixels; @@ -193,6 +200,9 @@ void OcclusionQuery::update() } if (!mSingleObjectQuery->isStillOutstanding() && mQuerySingleObjectStarted) { + mDelay = 0; + mResponding = true; + unsigned int result; mSingleObjectQuery->pullOcclusionQuery(&result); diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index 987087e278..004190cd90 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -39,7 +39,7 @@ namespace MWRender /** * per-frame update */ - void update(); + void update(float duration); /** * request occlusion test for a billboard at the given position, omitting an entity @@ -79,6 +79,10 @@ namespace MWRender bool mWasVisible; + bool mResponding; + + float mDelay; + bool mTestResult; bool mSupported; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index b4711e8df7..2aec95e813 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -150,7 +150,7 @@ void RenderingManager::update (float duration){ mActors.update (duration); - mOcclusionQuery->update(); + mOcclusionQuery->update(duration); mSkyManager->update(duration); From 7b3ecc290e2a75a6caed1cf42df4c2e93d3fe1bd Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 26 Mar 2012 01:12:06 -0700 Subject: [PATCH 164/488] Fix compilation with older OpenAL headers --- apps/openmw/mwsound/openal_output.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index a0b9c3a724..c069474034 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -10,6 +10,10 @@ #include "sound.hpp" #include "soundmanager.hpp" +#ifndef ALC_ALL_DEVICES_SPECIFIER +#define ALC_ALL_DEVICES_SPECIFIER 0x1013 +#endif + namespace MWSound { From 0d552c10bc913771b73ca4deb38f3dbaf97477db Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 26 Mar 2012 04:10:47 -0700 Subject: [PATCH 165/488] Use an empty MWWorld::Ptr object for non-3D sounds --- apps/openmw/mwsound/soundmanager.cpp | 29 ++++++++++++---------------- apps/openmw/mwsound/soundmanager.hpp | 1 - 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index f626ec1584..4d47e5f2cc 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -69,7 +69,6 @@ namespace MWSound SoundManager::~SoundManager() { - mLooseSounds.clear(); mActiveSounds.clear(); mMusic.reset(); mOutput.reset(); @@ -207,7 +206,7 @@ namespace MWSound { std::string file = lookup(soundId, volume, min, max); Sound *sound = mOutput->playSound(file, volume, pitch, loop); - mLooseSounds[soundId] = SoundPtr(sound); + mActiveSounds[MWWorld::Ptr()][soundId] = SoundPtr(sound); } catch(std::exception &e) { @@ -226,8 +225,7 @@ namespace MWSound std::string file = lookup(soundId, volume, min, max); SoundPtr sound(mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop)); - if(untracked) mLooseSounds[soundId] = sound; - else mActiveSounds[ptr][soundId] = sound; + mActiveSounds[untracked?MWWorld::Ptr():ptr][soundId] = sound; } catch(std::exception &e) { @@ -272,7 +270,7 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(snditer->first.getCell() == cell) + if(snditer->first != MWWorld::Ptr() && snditer->first.getCell() == cell) { IDMap::iterator iditer = snditer->second.begin(); while(iditer != snditer->second.end()) @@ -289,11 +287,17 @@ namespace MWSound void SoundManager::stopSound(const std::string& soundId) { - IDMap::iterator iditer = mLooseSounds.find(soundId); - if(iditer != mLooseSounds.end()) + SoundMap::iterator snditer = mActiveSounds.find(MWWorld::Ptr()); + if(snditer == mActiveSounds.end()) + return; + + IDMap::iterator iditer = snditer->second.find(soundId); + if(iditer != snditer->second.end()) { iditer->second->stop(); - mLooseSounds.erase(iditer); + snditer->second.erase(iditer); + if(snditer->second.empty()) + mActiveSounds.erase(snditer); } } @@ -415,15 +419,6 @@ namespace MWSound else snditer++; } - - IDMap::iterator iditer = mLooseSounds.begin(); - while(iditer != mLooseSounds.end()) - { - if(!iditer->second->isPlaying()) - mLooseSounds.erase(iditer++); - else - iditer++; - } } void SoundManager::update(float duration) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index b7c883a130..8d76ba1008 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -44,7 +44,6 @@ namespace MWSound typedef std::map IDMap; typedef std::map SoundMap; SoundMap mActiveSounds; - IDMap mLooseSounds; std::string lookup(const std::string &soundId, float &volume, float &min, float &max); From 633e80cded155919dd01a7f33f2181ce68e6b327 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 25 Mar 2012 16:12:23 +0200 Subject: [PATCH 166/488] Issue #225: Added cleanup of maps used in PhysicEngine. --- libs/openengine/bullet/physic.cpp | 53 +++++++++++++++++++++++++++---- libs/openengine/bullet/physic.hpp | 10 ++++-- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index 07bad30535..756f3b0c6d 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -173,6 +173,7 @@ namespace Physic mShapeLoader = shapeLoader; isDebugCreated = false; + mDebugDrawer = NULL; } void PhysicEngine::createDebugRendering() @@ -202,6 +203,35 @@ namespace Physic PhysicEngine::~PhysicEngine() { + + RigidBodyContainer::iterator rb_it = RigidBodyMap.begin(); + for (; rb_it != RigidBodyMap.end(); ++rb_it) + { + if (rb_it->second != NULL) + { + dynamicsWorld->removeRigidBody(rb_it->second); + + delete rb_it->second; + rb_it->second = NULL; + } + } + + PhysicActorContainer::iterator pa_it = PhysicActorMap.begin(); + for (; pa_it != PhysicActorMap.end(); ++pa_it) + { + if (pa_it->second != NULL) + { + dynamicsWorld->removeCollisionObject(pa_it->second->externalGhostObject); + dynamicsWorld->removeCollisionObject(pa_it->second->internalGhostObject); + dynamicsWorld->removeAction(pa_it->second->mCharacter); + + delete pa_it->second; + pa_it->second = NULL; + } + } + + delete mDebugDrawer; + delete dynamicsWorld; delete solver; delete collisionConfiguration; @@ -239,32 +269,39 @@ namespace Physic dynamicsWorld->addRigidBody(body,COL_WORLD,COL_NOTHING); } body->setActivationState(DISABLE_DEACTIVATION); + RigidBody* oldBody = RigidBodyMap[body->mName]; + if (oldBody != NULL) + { + dynamicsWorld->removeRigidBody(oldBody); + delete oldBody; + } + RigidBodyMap[body->mName] = body; } void PhysicEngine::removeRigidBody(std::string name) { - std::map::iterator it = RigidBodyMap.find(name); + RigidBodyContainer::iterator it = RigidBodyMap.find(name); if (it != RigidBodyMap.end() ) { RigidBody* body = it->second; if(body != NULL) { // broadphase->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(body->getBroadphaseProxy(),dispatcher); - /*std::map::iterator it2 = PhysicActorMap.begin(); + /*PhysicActorContainer::iterator it2 = PhysicActorMap.begin(); for(;it2!=PhysicActorMap.end();it++) { it2->second->internalGhostObject->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(body->getBroadphaseProxy(),dispatcher); it2->second->externalGhostObject->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(body->getBroadphaseProxy(),dispatcher); }*/ - dynamicsWorld->removeRigidBody(RigidBodyMap[name]); + dynamicsWorld->removeRigidBody(body); } } } void PhysicEngine::deleteRigidBody(std::string name) { - std::map::iterator it = RigidBodyMap.find(name); + RigidBodyContainer::iterator it = RigidBodyMap.find(name); if (it != RigidBodyMap.end() ) { RigidBody* body = it->second; @@ -293,6 +330,10 @@ namespace Physic void PhysicEngine::addCharacter(std::string name) { + // Remove character with given name, so we don't make memory + // leak when character would be added twice + removeCharacter(name); + PhysicActor* newActor = new PhysicActor(name); dynamicsWorld->addCollisionObject( newActor->externalGhostObject, COL_ACTOR_EXTERNAL, COL_WORLD |COL_ACTOR_EXTERNAL ); dynamicsWorld->addCollisionObject( newActor->internalGhostObject, COL_ACTOR_INTERNAL, COL_WORLD |COL_ACTOR_INTERNAL ); @@ -303,7 +344,7 @@ namespace Physic void PhysicEngine::removeCharacter(std::string name) { //std::cout << "remove"; - std::map::iterator it = PhysicActorMap.find(name); + PhysicActorContainer::iterator it = PhysicActorMap.find(name); if (it != PhysicActorMap.end() ) { PhysicActor* act = it->second; @@ -311,7 +352,7 @@ namespace Physic { /*broadphase->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(act->externalGhostObject->getBroadphaseHandle(),dispatcher); broadphase->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(act->internalGhostObject->getBroadphaseHandle(),dispatcher); - std::map::iterator it2 = PhysicActorMap.begin(); + PhysicActorContainer::iterator it2 = PhysicActorMap.begin(); for(;it2!=PhysicActorMap.end();it++) { it->second->internalGhostObject->getOverlappingPairCache()->removeOverlappingPairsContainingProxy(act->externalGhostObject->getBroadphaseHandle(),dispatcher); diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 88e3699aee..200b962074 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -42,6 +42,8 @@ namespace Physic :btPairCachingGhostObject(),mName(name) { } + virtual ~PairCachingGhostObject(){} + std::string mName; }; @@ -106,6 +108,7 @@ namespace Physic { public: RigidBody(btRigidBody::btRigidBodyConstructionInfo& CI,std::string name); + virtual ~RigidBody() {} std::string mName; //is this body used for raycasting only? @@ -217,8 +220,11 @@ namespace Physic //the NIF file loader. BulletShapeLoader* mShapeLoader; - std::map RigidBodyMap; - std::map PhysicActorMap; + typedef std::map RigidBodyContainer; + RigidBodyContainer RigidBodyMap; + + typedef std::map PhysicActorContainer; + PhysicActorContainer PhysicActorMap; //debug rendering BtOgre::DebugDrawer* mDebugDrawer; From a7ac0e526e2d942df619cddc737204f5c4b2d283 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 25 Mar 2012 18:12:00 +0200 Subject: [PATCH 167/488] Issue #225: Added cleanup of parts of PhysicEngine. Added cleanup of CMotionState inserted to RigidBody, and btSortedOverlappingPairCache inserted to btDbvtBroadphase in PhysicEngine. --- libs/openengine/bullet/physic.cpp | 13 +++++++++---- libs/openengine/bullet/physic.hpp | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index 756f3b0c6d..8b9f3dfecb 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -134,10 +134,15 @@ namespace Physic RigidBody::RigidBody(btRigidBody::btRigidBodyConstructionInfo& CI,std::string name) - :btRigidBody(CI),mName(name) + : btRigidBody(CI) + , mName(name) { + } - }; + RigidBody::~RigidBody() + { + delete getMotionState(); + } @@ -155,8 +160,7 @@ namespace Physic // The actual physics solver solver = new btSequentialImpulseConstraintSolver; - //TODO: memory leak? - btOverlappingPairCache* pairCache = new btSortedOverlappingPairCache(); + pairCache = new btSortedOverlappingPairCache(); //pairCache->setInternalGhostPairCallback( new btGhostPairCallback() ); broadphase = new btDbvtBroadphase(pairCache); @@ -237,6 +241,7 @@ namespace Physic delete collisionConfiguration; delete dispatcher; delete broadphase; + delete pairCache; delete mShapeLoader; } diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 200b962074..57ffe91305 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -108,7 +108,7 @@ namespace Physic { public: RigidBody(btRigidBody::btRigidBodyConstructionInfo& CI,std::string name); - virtual ~RigidBody() {} + virtual ~RigidBody(); std::string mName; //is this body used for raycasting only? @@ -211,6 +211,7 @@ namespace Physic std::list PEventList; //Bullet Stuff + btOverlappingPairCache* pairCache; btBroadphaseInterface* broadphase; btDefaultCollisionConfiguration* collisionConfiguration; btSequentialImpulseConstraintSolver* solver; From d3b88b9e34ae0d46153262ebd1acf2627bb15984 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 25 Mar 2012 20:37:05 +0200 Subject: [PATCH 168/488] Issue #225: Added cleanup of allocated memory in BulletNifLoader and BulletShapeLoader. --- components/nifbullet/bullet_nif_loader.cpp | 22 ++++++++++++++++++-- components/nifbullet/bullet_nif_loader.hpp | 2 +- libs/openengine/bullet/BulletShapeLoader.cpp | 1 + 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/components/nifbullet/bullet_nif_loader.cpp b/components/nifbullet/bullet_nif_loader.cpp index 82e9d7adc5..e9aa626dbe 100644 --- a/components/nifbullet/bullet_nif_loader.cpp +++ b/components/nifbullet/bullet_nif_loader.cpp @@ -51,7 +51,11 @@ using namespace Mangle::VFS; using namespace NifBullet; -//==================================================================================================== +ManualBulletShapeLoader::~ManualBulletShapeLoader() +{ + delete vfs; +} + Ogre::Matrix3 ManualBulletShapeLoader::getMatrix(Nif::Transformation* tr) { Ogre::Matrix3 rot(tr->rotation.v[0].array[0],tr->rotation.v[0].array[1],tr->rotation.v[0].array[2], @@ -135,7 +139,21 @@ void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource) handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,true); } - currentShape = new btBvhTriangleMeshShape(mTriMesh,true); + struct TriangleMeshShape : public btBvhTriangleMeshShape + { + TriangleMeshShape(btStridingMeshInterface* meshInterface, bool useQuantizedAabbCompression) + : btBvhTriangleMeshShape(meshInterface, useQuantizedAabbCompression) + { + } + + virtual ~TriangleMeshShape() + { + delete getTriangleInfoMap(); + delete m_meshInterface; + } + }; + + currentShape = new TriangleMeshShape(mTriMesh,true); cShape->Shape = currentShape; } diff --git a/components/nifbullet/bullet_nif_loader.hpp b/components/nifbullet/bullet_nif_loader.hpp index 1fa2b6aa5f..ed3aceac46 100644 --- a/components/nifbullet/bullet_nif_loader.hpp +++ b/components/nifbullet/bullet_nif_loader.hpp @@ -69,7 +69,7 @@ class ManualBulletShapeLoader : public BulletShapeLoader public: ManualBulletShapeLoader():resourceGroup("General"){vfs = 0;} - virtual ~ManualBulletShapeLoader() {} + virtual ~ManualBulletShapeLoader(); void warn(std::string msg) { diff --git a/libs/openengine/bullet/BulletShapeLoader.cpp b/libs/openengine/bullet/BulletShapeLoader.cpp index 48b87e1e8c..4593bad528 100644 --- a/libs/openengine/bullet/BulletShapeLoader.cpp +++ b/libs/openengine/bullet/BulletShapeLoader.cpp @@ -22,6 +22,7 @@ Ogre::Resource(creator, name, handle, group, isManual, loader) BulletShape::~BulletShape() { + deleteShape(Shape); } // farm out to BulletShapeLoader From 5185a28b6002d1e04b89632ff27a00a613634d54 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 25 Mar 2012 21:56:22 +0200 Subject: [PATCH 169/488] Issue #225: Initialize all class members in constructor. --- apps/openmw/mwgui/layouts.cpp | 16 ++++++++++ apps/openmw/mwgui/stats_window.cpp | 13 ++++++++ apps/openmw/mwgui/window_manager.cpp | 29 ++++++++++++++++-- apps/openmw/mwrender/animation.cpp | 25 ++++++++++++++- apps/openmw/mwrender/animation.hpp | 16 +++++----- libs/openengine/ogre/renderer.hpp | 46 +++++++++++++++++++++------- 6 files changed, 123 insertions(+), 22 deletions(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index 9c49c62ac3..dbd6154b7c 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -15,6 +15,22 @@ using namespace MWGui; HUD::HUD(int width, int height, int fpsLevel) : Layout("openmw_hud_layout.xml") + , health(NULL) + , magicka(NULL) + , stamina(NULL) + , weapImage(NULL) + , spellImage(NULL) + , weapStatus(NULL) + , spellStatus(NULL) + , effectBox(NULL) + , effect1(NULL) + , minimap(NULL) + , compass(NULL) + , crosshair(NULL) + , fpsbox(NULL) + , fpscounter(NULL) + , trianglecounter(NULL) + , batchcounter(NULL) { setCoord(0,0, width, height); diff --git a/apps/openmw/mwgui/stats_window.cpp b/apps/openmw/mwgui/stats_window.cpp index 243b6272a5..12b0dcc793 100644 --- a/apps/openmw/mwgui/stats_window.cpp +++ b/apps/openmw/mwgui/stats_window.cpp @@ -13,9 +13,22 @@ const int StatsWindow::lineHeight = 18; StatsWindow::StatsWindow (WindowManager& parWindowManager) : WindowBase("openmw_stats_window_layout.xml", parWindowManager) + , skillAreaWidget(NULL) + , skillClientWidget(NULL) + , skillScrollerWidget(NULL) , lastPos(0) + , clientHeight(0) + , majorSkills() + , minorSkills() + , miscSkills() + , skillValues() + , skillWidgetMap() + , factionWidgetMap() + , factions() + , birthSignId() , reputation(0) , bounty(0) + , skillWidgets() { setCoord(0,0,498, 342); diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index fa6dedc77e..a04e2dcb8b 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -22,15 +22,40 @@ using namespace MWGui; WindowManager::WindowManager(MWWorld::Environment& environment, const Compiler::Extensions& extensions, int fpsLevel, bool newGame, OEngine::Render::OgreRenderer *mOgre, const std::string logpath) - : environment(environment) + : mGuiManager(NULL) + , environment(environment) + , hud(NULL) + , map(NULL) + , menu(NULL) + , stats(NULL) + , mMessageBoxManager(NULL) + , console(NULL) + , mJournal(NULL) , dialogueWindow(nullptr) + , mCharGen(NULL) + , playerClass() + , playerName() + , playerRaceId() + , playerBirthSignId() + , playerAttributes() + , playerMajorSkills() + , playerMinorSkills() + , playerSkillValues() + , playerHealth() + , playerMagicka() + , playerFatigue() + , gui(NULL) , mode(GM_Game) , nextMode(GM_Game) , needModeChange(false) + , garbageDialogs() , shown(GW_ALL) , allowed(newGame ? GW_None : GW_ALL) + , showFPSLevel(fpsLevel) + , mFPS(0.0f) + , mTriangleCount(0) + , mBatchCount(0) { - showFPSLevel = fpsLevel; // Set up the GUI system mGuiManager = new OEngine::GUI::MyGUIManager(mOgre->getWindow(), mOgre->getScene(), false, logpath); diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index 7b0d7015c0..f3a8f64d55 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -4,7 +4,30 @@ namespace MWRender{ std::map Animation::mUniqueIDs; - Animation::~Animation(){ + Animation::Animation(MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend) + : insert(NULL) + , mRend(_rend) + , mEnvironment(_env) + , vecRotPos() + , shapeparts() + , time(0.0f) + , startTime(0.0f) + , stopTime(0.0f) + , animate(0) + , rindexI() + , tindexI() + , shapeNumber(0) + , shapeIndexI() + , shapes(NULL) + , entityparts() + , transformations(NULL) + , textmappings(NULL) + , base(NULL) + { + } + + Animation::~Animation() + { } std::string Animation::getUniqueID(std::string mesh){ diff --git a/apps/openmw/mwrender/animation.hpp b/apps/openmw/mwrender/animation.hpp index d1e8071f06..7692c71283 100644 --- a/apps/openmw/mwrender/animation.hpp +++ b/apps/openmw/mwrender/animation.hpp @@ -60,14 +60,14 @@ class Animation{ std::string getUniqueID(std::string mesh); public: - Animation(MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend): mRend(_rend), mEnvironment(_env), animate(0){}; - virtual void runAnimation(float timepassed) = 0; - void startScript(std::string groupname, int mode, int loops); - void stopScript(); - - - virtual ~Animation(); + Animation(MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend); + virtual void runAnimation(float timepassed) = 0; + void startScript(std::string groupname, int mode, int loops); + void stopScript(); + + + virtual ~Animation(); }; } -#endif \ No newline at end of file +#endif diff --git a/libs/openengine/ogre/renderer.hpp b/libs/openengine/ogre/renderer.hpp index 6516b0a80c..179515aa92 100644 --- a/libs/openengine/ogre/renderer.hpp +++ b/libs/openengine/ogre/renderer.hpp @@ -44,27 +44,51 @@ namespace Render Ogre::SceneManager *mScene; Ogre::Camera *mCamera; Ogre::Viewport *mView; - #ifdef ENABLE_PLUGIN_CgProgramManager +#ifdef ENABLE_PLUGIN_CgProgramManager Ogre::CgPlugin* mCgPlugin; - #endif - #ifdef ENABLE_PLUGIN_OctreeSceneManager +#endif +#ifdef ENABLE_PLUGIN_OctreeSceneManager Ogre::OctreePlugin* mOctreePlugin; - #endif - #ifdef ENABLE_PLUGIN_ParticleFX +#endif +#ifdef ENABLE_PLUGIN_ParticleFX Ogre::ParticleFXPlugin* mParticleFXPlugin; - #endif - #ifdef ENABLE_PLUGIN_GL +#endif +#ifdef ENABLE_PLUGIN_GL Ogre::GLPlugin* mGLPlugin; - #endif - #ifdef ENABLE_PLUGIN_Direct3D9 +#endif +#ifdef ENABLE_PLUGIN_Direct3D9 Ogre::D3D9Plugin* mD3D9Plugin; - #endif +#endif Fader* mFader; bool logging; public: OgreRenderer() - : mRoot(NULL), mWindow(NULL), mScene(NULL), mFader(NULL) {} + : mRoot(NULL) + , mWindow(NULL) + , mScene(NULL) + , mCamera(NULL) + , mView(NULL) +#ifdef ENABLE_PLUGIN_CgProgramManager + , mCgPlugin(NULL) +#endif +#ifdef ENABLE_PLUGIN_OctreeSceneManager + , mOctreePlugin(NULL) +#endif +#ifdef ENABLE_PLUGIN_ParticleFX + , mParticleFXPlugin(NULL) +#endif +#ifdef ENABLE_PLUGIN_GL + , mGLPlugin(NULL) +#endif +#ifdef ENABLE_PLUGIN_Direct3D9 + , mD3D9Plugin(NULL) +#endif + , mFader(NULL) + , logging(false) + { + } + ~OgreRenderer() { cleanup(); } /** Configure the renderer. This will load configuration files and From 2b9845a5b69de39203e970e326b5a15e22731732 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Sun, 25 Mar 2012 23:34:32 +0200 Subject: [PATCH 170/488] Issue #225: Free memory allocated for sending into HardwareVertexBuffer. Free memory allocated for sending into HardwareVertexBuffer in NIFLoader class. --- components/nifogre/ogre_nif_loader.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 2e68cfe905..1367c138a4 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -509,7 +509,8 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[index+1] = original.y; datamod[index+2] = original.z; } - vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); + vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); + delete datamod; } else { @@ -550,6 +551,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[index+2] = original.z; } vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); + delete datamod; } else { @@ -601,6 +603,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[i + 1] =y; } vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); + delete datamod; } else vbuf->writeData(0, vbuf->getSizeInBytes(), data->uvlist.ptr, false); @@ -644,15 +647,13 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std index += 3; } - ibuf->writeData(0, ibuf->getSizeInBytes(), datamod, false); + ibuf->writeData(0, ibuf->getSizeInBytes(), datamod, false); + delete datamod; } else - ibuf->writeData(0, ibuf->getSizeInBytes(), data->triangles.ptr, false); + ibuf->writeData(0, ibuf->getSizeInBytes(), data->triangles.ptr, false); sub->indexData->indexBuffer = ibuf; - - - } // Set material if one was given From 28dfba55e01bd84c82ddf9abea995e4e734d9d66 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 26 Mar 2012 20:29:07 +0200 Subject: [PATCH 171/488] delete fix --- apps/openmw/mwrender/localmap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index b83a982204..44be09eef6 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -32,7 +32,7 @@ void LocalMap::deleteBuffers() for (std::map::iterator it=mBuffers.begin(); it != mBuffers.end(); ++it) { - delete it->second; + delete[] it->second; } mBuffers.clear(); } From 2362d0a02929e457c218ead29610e7990c7a0390 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Mon, 26 Mar 2012 20:40:04 +0200 Subject: [PATCH 172/488] possible EOL problem --- OFL.txt | 186 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/OFL.txt b/OFL.txt index 619d1f429f..043e85e83b 100644 --- a/OFL.txt +++ b/OFL.txt @@ -1,93 +1,93 @@ -Copyright (c) 2010, 2011 Georg Duffner (http://www.georgduffner.at) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright (c) 2010, 2011 Georg Duffner (http://www.georgduffner.at) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. From 362e6cb9ed55d68b1142020e1b29c88b7beb870a Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Mon, 26 Mar 2012 23:21:51 +0400 Subject: [PATCH 173/488] Removed predefined SDK path. Found that it's generally not good idea to force it. Also -Wno-unused-but-set-parameter only set for gcc 4.6 or newer --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5f0bffa8f..7ff2872463 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,6 @@ if (APPLE) set(APP_BUNDLE_NAME "${CMAKE_PROJECT_NAME}.app") set(APP_BUNDLE_DIR "${OpenMW_BINARY_DIR}/${APP_BUNDLE_NAME}") - - # using 10.6 sdk - set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk") endif (APPLE) # Macros @@ -287,7 +284,13 @@ endif (APPLE) # Compiler settings if (CMAKE_COMPILER_IS_GNUCC) - add_definitions (-Wall -Wextra -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-reorder) + add_definitions (-Wall -Wextra -Wno-unused-parameter -Wno-reorder) + + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion + OUTPUT_VARIABLE GCC_VERSION) + if ("${GCC_VERSION}" VERSION_GREATER 4.6 OR "${GCC_VERSION}" VERSION_EQUAL 4.6) + add_definitions (-Wno-unused-but-set-parameter) + endif("${GCC_VERSION}" VERSION_GREATER 4.6 OR "${GCC_VERSION}" VERSION_EQUAL 4.6) endif (CMAKE_COMPILER_IS_GNUCC) if(DPKG_PROGRAM) From bb3f3ce1db69ab935320bd9ddff0d540ccc25bc0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 26 Mar 2012 21:52:38 +0200 Subject: [PATCH 174/488] bugfix --- apps/openmw/mwrender/occlusionquery.cpp | 39 ++++++++++++++++--------- apps/openmw/mwrender/occlusionquery.hpp | 1 + apps/openmw/mwrender/sky.cpp | 3 +- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 6718a588bc..c3285a3359 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -12,7 +12,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), - mQuerySingleObjectRequested(false), mResponding(true), mDelay(0) + mQuerySingleObjectRequested(false), mResponding(true), mDelay(0), mWasVisible(false), mObjectWasVisible(false) { mRendering = renderer; mSunNode = sunNode; @@ -93,7 +93,7 @@ OcclusionQuery::~OcclusionQuery() bool OcclusionQuery::supported() { - if (!mResponding) std::cout << "Occlusion query timed out" << std::endl; + //if (!mResponding) std::cout << "Occlusion query timed out" << std::endl; return mSupported && mResponding; } @@ -129,6 +129,7 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass mQuerySingleObjectStarted = true; mQuerySingleObjectRequested = false; mActiveQuery = mSingleObjectQuery; + mObjectWasVisible = true; } if (mActiveQuery != NULL) @@ -136,18 +137,29 @@ void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass } void OcclusionQuery::renderQueueEnded(uint8 queueGroupId, const String& invocation, bool& repeatThisInvocation) -{ - if (queueGroupId == RENDER_QUEUE_SKIES_LATE && mWasVisible == false && mDoQuery) +{ + /** + * for every beginOcclusionQuery(), we want a respective pullOcclusionQuery() and vice versa + * this also means that results can be wrong at other places if we pull, but beginOcclusionQuery() was never called + * this can happen for example if the object that is tested is outside of the view frustum + * to prevent this, check if the queries have been performed after everything has been rendered and if not, start them manually + */ + if (queueGroupId == RENDER_QUEUE_SKIES_LATE) { - // for some reason our single object query returns wrong results when the sun query was never executed - // (which can happen when we are in interiors, or when the sun is outside of the view frustum and gets culled) - // so we force it here once everything has been rendered - - mSunTotalAreaQuery->beginOcclusionQuery(); - mSunTotalAreaQuery->endOcclusionQuery(); - mSunVisibleAreaQuery->beginOcclusionQuery(); - mSunVisibleAreaQuery->endOcclusionQuery(); - + if (mWasVisible == false && mDoQuery) + { + mSunTotalAreaQuery->beginOcclusionQuery(); + mSunTotalAreaQuery->endOcclusionQuery(); + mSunVisibleAreaQuery->beginOcclusionQuery(); + mSunVisibleAreaQuery->endOcclusionQuery(); + } + if (mObjectWasVisible == false && mQuerySingleObjectRequested) + { + mSingleObjectQuery->beginOcclusionQuery(); + mSingleObjectQuery->endOcclusionQuery(); + mQuerySingleObjectStarted = true; + mQuerySingleObjectRequested = false; + } } } @@ -159,6 +171,7 @@ void OcclusionQuery::update(float duration) if (mDelay >= 2) mResponding = false; mWasVisible = false; + mObjectWasVisible = false; // Adjust the position of the sun billboards according to camera viewing distance // we need to do this to make sure that _everything_ can occlude the sun diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index 004190cd90..a9fa0b5e4a 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -78,6 +78,7 @@ namespace MWRender std::vector mObjectsInfo; bool mWasVisible; + bool mObjectWasVisible; bool mResponding; diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index a70913b239..954b462095 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -294,7 +294,8 @@ void SkyManager::ModVertexAlpha(Entity* ent, unsigned int meshType) } SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environment* env) : - mGlare(0), mGlareFade(0) + mGlare(0), mGlareFade(0), mCloudBlendFactor(0), + mCloudOpacity(0), mCloudColour(1,1,1), mSkyColour(1,1,1), mCloudSpeed(0), mStarsOpacity(0) { mEnvironment = env; mViewport = pCamera->getViewport(); From f8afc22f04f1224ccd17edf1552adac2555a0e7f Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Mon, 26 Mar 2012 23:16:59 +0200 Subject: [PATCH 175/488] Issue #225: Corrected wrong delete operator introduced by one of previous commit. --- components/nifogre/ogre_nif_loader.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index 1367c138a4..f943231d0d 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -510,7 +510,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[index+2] = original.z; } vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); - delete datamod; + delete [] datamod; } else { @@ -551,7 +551,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[index+2] = original.z; } vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); - delete datamod; + delete [] datamod; } else { @@ -603,7 +603,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std datamod[i + 1] =y; } vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false); - delete datamod; + delete [] datamod; } else vbuf->writeData(0, vbuf->getSizeInBytes(), data->uvlist.ptr, false); @@ -648,7 +648,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std } ibuf->writeData(0, ibuf->getSizeInBytes(), datamod, false); - delete datamod; + delete [] datamod; } else From bf421d2873344faa845507c47bde786b7dfb9814 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 27 Mar 2012 00:18:09 +0200 Subject: [PATCH 176/488] use vector instead of array --- apps/openmw/mwrender/localmap.cpp | 25 +++++++++---------------- apps/openmw/mwrender/localmap.hpp | 2 +- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 44be09eef6..ed218dc97d 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -29,11 +29,6 @@ LocalMap::~LocalMap() void LocalMap::deleteBuffers() { - for (std::map::iterator it=mBuffers.begin(); - it != mBuffers.end(); ++it) - { - delete[] it->second; - } mBuffers.clear(); } @@ -202,16 +197,16 @@ void LocalMap::render(const float x, const float y, TU_DYNAMIC_WRITE_ONLY_DISCARDABLE); // create a buffer to use for dynamic operations - uint32* buffer = new uint32[sFogOfWarResolution*sFogOfWarResolution]; + std::vector buffer; + buffer.resize(sFogOfWarResolution*sFogOfWarResolution); // initialize to (0, 0, 0, 1) - uint32* pointer = buffer; for (int p=0; pgetBuffer()->lock(HardwareBuffer::HBL_DISCARD), buffer, sFogOfWarResolution*sFogOfWarResolution*4); + memcpy(tex2->getBuffer()->lock(HardwareBuffer::HBL_DISCARD), &buffer[0], sFogOfWarResolution*sFogOfWarResolution*4); tex2->getBuffer()->unlock(); mBuffers[texture] = buffer; @@ -288,25 +283,23 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& { // get its buffer if (mBuffers.find(texName) == mBuffers.end()) return; - uint32* buffer = mBuffers[texName]; - uint32* pointer = buffer; + int i=0; for (int texV = 0; texV> 24); alpha = std::min( alpha, (uint8) (std::max(0.f, std::min(1.f, (sqrDist/sqrExploreRadius)))*255) ); - *((uint32*)pointer) = (alpha << 24); + mBuffers[texName][i] = (uint32) (alpha << 24); - // move to next texel - ++pointer; + ++i; } } // copy to the texture - memcpy(tex->getBuffer()->lock(HardwareBuffer::HBL_DISCARD), buffer, sFogOfWarResolution*sFogOfWarResolution*4); + memcpy(tex->getBuffer()->lock(HardwareBuffer::HBL_DISCARD), &mBuffers[texName][0], sFogOfWarResolution*sFogOfWarResolution*4); tex->getBuffer()->unlock(); } } diff --git a/apps/openmw/mwrender/localmap.hpp b/apps/openmw/mwrender/localmap.hpp index 3bef475ea9..efbccf8848 100644 --- a/apps/openmw/mwrender/localmap.hpp +++ b/apps/openmw/mwrender/localmap.hpp @@ -86,7 +86,7 @@ namespace MWRender // a buffer for the "fog of war" texture of the current cell. // interior cells could be divided into multiple textures, // so we store in a map. - std::map mBuffers; + std::map > mBuffers; void deleteBuffers(); From 6d6ed909bf62a328c927fbbdb52b6a98ef677e28 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Tue, 27 Mar 2012 00:31:15 +0200 Subject: [PATCH 177/488] Issue #225: Deallocate memory used by actors animations. --- apps/openmw/mwrender/actors.cpp | 10 ++++++++++ apps/openmw/mwrender/actors.hpp | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/actors.cpp b/apps/openmw/mwrender/actors.cpp index d8ca78e3a5..6eb4a182bd 100644 --- a/apps/openmw/mwrender/actors.cpp +++ b/apps/openmw/mwrender/actors.cpp @@ -8,6 +8,15 @@ using namespace Ogre; using namespace MWRender; using namespace NifOgre; +Actors::~Actors(){ + + std::map::iterator it = mAllActors.begin(); + for (; it != mAllActors.end(); ++it) { + delete it->second; + it->second = NULL; + } +} + void Actors::setMwRoot(Ogre::SceneNode* root){ mMwRoot = root; } @@ -61,6 +70,7 @@ void Actors::insertCreature (const MWWorld::Ptr& ptr){ insertBegin(ptr, true, true); CreatureAnimation* anim = new MWRender::CreatureAnimation(ptr, mEnvironment, mRend); //mAllActors.insert(std::pair(ptr,anim)); + delete mAllActors[ptr]; mAllActors[ptr] = anim; //mAllActors.push_back(&anim);*/ } diff --git a/apps/openmw/mwrender/actors.hpp b/apps/openmw/mwrender/actors.hpp index 7179c08fb4..d49c6e0f8d 100644 --- a/apps/openmw/mwrender/actors.hpp +++ b/apps/openmw/mwrender/actors.hpp @@ -30,7 +30,7 @@ namespace MWRender{ public: Actors(OEngine::Render::OgreRenderer& _rend, MWWorld::Environment& _env): mRend(_rend), mEnvironment(_env){} - ~Actors(){} + ~Actors(); void setMwRoot(Ogre::SceneNode* root); void insertBegin (const MWWorld::Ptr& ptr, bool enabled, bool static_); void insertCreature (const MWWorld::Ptr& ptr); From be94da15272937a8719a849a51162c2fd276374d Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Tue, 27 Mar 2012 00:34:06 +0200 Subject: [PATCH 178/488] Issue #225: Initialize class members in constructor. --- apps/openmw/mwrender/sky.cpp | 38 +++++++++++++++++++++++--- apps/openmw/mwsound/mpgsnd_decoder.cpp | 8 +++++- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp index 5e85780022..a41bc21e0f 100644 --- a/apps/openmw/mwrender/sky.cpp +++ b/apps/openmw/mwrender/sky.cpp @@ -254,7 +254,7 @@ void SkyManager::ModVertexAlpha(Entity* ent, unsigned int meshType) // Get a pointer to the vertex colour ves_diffuse->baseVertexPointerToElement( pData, ¤tVertex ); - unsigned char alpha; + unsigned char alpha=0; if (meshType == 0) alpha = i%2 ? 0 : 255; // this is a cylinder, so every second vertex belongs to the bottom-most row else if (meshType == 1) { @@ -292,10 +292,40 @@ void SkyManager::ModVertexAlpha(Entity* ent, unsigned int meshType) ent->getMesh()->getSubMesh(0)->vertexData->vertexBufferBinding->getBuffer(ves_diffuse->getSource())->unlock(); } -SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environment* env) : - mGlareFade(0), mGlareEnabled(false) +SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environment* env) + : mEnvironment(env) + , mHour(0.0f) + , mDay(0) + , mMonth(0) + , mSun(NULL) + , mSunGlare(NULL) + , mMasser(NULL) + , mSecunda(NULL) + , mViewport(NULL) + , mRootNode(NULL) + , mSceneMgr(NULL) + , mAtmosphereDay(NULL) + , mAtmosphereNight(NULL) + , mCloudMaterial() + , mAtmosphereMaterial() + , mCloudFragmentShader() + , mClouds() + , mNextClouds() + , mCloudBlendFactor(0.0f) + , mCloudOpacity(0.0f) + , mCloudSpeed(0.0f) + , mStarsOpacity(0.0f) + , mThunderOverlay(NULL) + , mThunderTextureUnit(NULL) + , mRemainingTransitionTime(0.0f) + , mGlareFade(0.0f) + , mEnabled(true) + , mGlareEnabled(true) + , mSunEnabled(true) + , mMasserEnabled(true) + , mSecundaEnabled(true) { - mEnvironment = env; + mViewport = pCamera->getViewport(); mSceneMgr = pMwRoot->getCreator(); mRootNode = pCamera->getParentSceneNode()->createChildSceneNode(); diff --git a/apps/openmw/mwsound/mpgsnd_decoder.cpp b/apps/openmw/mwsound/mpgsnd_decoder.cpp index f576833a82..9b91b4e74e 100644 --- a/apps/openmw/mwsound/mpgsnd_decoder.cpp +++ b/apps/openmw/mwsound/mpgsnd_decoder.cpp @@ -213,7 +213,13 @@ void MpgSnd_Decoder::rewind() } } -MpgSnd_Decoder::MpgSnd_Decoder() : mSndFile(NULL), mMpgFile(NULL) +MpgSnd_Decoder::MpgSnd_Decoder() + : mSndInfo() + , mSndFile(NULL) + , mMpgFile(NULL) + , mDataStream() + , mChanConfig(ChannelConfig_Stereo) + , mSampleRate(0) { static bool initdone = false; if(!initdone) From 55f1053b4fd9e813caa8838586fec895c6f42da6 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Tue, 27 Mar 2012 00:36:53 +0200 Subject: [PATCH 179/488] Windows fixes for compiling and linking --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwgui/messagebox.hpp | 1 + apps/openmw/mwgui/widgets.hpp | 3 +++ apps/openmw/mwsound/openal_output.cpp | 4 +++- apps/openmw/mwsound/soundmanager.hpp | 2 +- cmake/FindFFMPEG.cmake | 17 ++++++++++++++++- cmake/FindMyGUI.cmake | 2 +- 7 files changed, 26 insertions(+), 5 deletions(-) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2e9191e810..6dc9382d03 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -89,7 +89,7 @@ target_link_libraries(openmw ${SOUND_INPUT_LIBRARY} ${BULLET_LIBRARIES} ${MYGUI_LIBRARIES} - MyGUI.OgrePlatform #TODO MyGUI ogre platform is not added by the find script + ${MYGUI_PLATFORM_LIBRARIES} components ) diff --git a/apps/openmw/mwgui/messagebox.hpp b/apps/openmw/mwgui/messagebox.hpp index bf3307accf..33155b2a00 100644 --- a/apps/openmw/mwgui/messagebox.hpp +++ b/apps/openmw/mwgui/messagebox.hpp @@ -7,6 +7,7 @@ #include "window_base.hpp" #include "window_manager.hpp" +#undef MessageBox namespace MWGui { diff --git a/apps/openmw/mwgui/widgets.hpp b/apps/openmw/mwgui/widgets.hpp index 4d31ad5219..a7916285eb 100644 --- a/apps/openmw/mwgui/widgets.hpp +++ b/apps/openmw/mwgui/widgets.hpp @@ -7,6 +7,9 @@ #include "../mwmechanics/stat.hpp" +#undef MYGUI_EXPORT +#define MYGUI_EXPORT + /* This file contains various custom widgets used in OpenMW. */ diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index c069474034..edd923f433 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -65,7 +65,7 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) class OpenAL_SoundStream : public Sound { static const ALuint sNumBuffers = 6; - static const ALfloat sBufferLength = 0.125f; + static const ALfloat sBufferLength; OpenAL_Output &mOutput; @@ -95,6 +95,8 @@ public: bool process(); }; +const ALfloat OpenAL_SoundStream::sBufferLength = 0.125f; + // // A background streaming thread (keeps active streams processed) // diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index b7c883a130..a076c1cc01 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -24,7 +24,7 @@ namespace MWWorld namespace MWSound { class Sound_Output; - class Sound_Decoder; + struct Sound_Decoder; class Sound; typedef boost::shared_ptr DecoderPtr; diff --git a/cmake/FindFFMPEG.cmake b/cmake/FindFFMPEG.cmake index ff6d0c598d..2e755d047d 100644 --- a/cmake/FindFFMPEG.cmake +++ b/cmake/FindFFMPEG.cmake @@ -9,9 +9,23 @@ SET( FFMPEG_FOUND "NO" ) +FIND_PATH( FFMPEG_general_INCLUDE_DIR libavcodec/avcodec.h libavformat/avformat.h + HINTS + PATHS + /usr/include + /usr/local/include + /usr/include/ffmpeg + /usr/local/include/ffmpeg + /usr/include/ffmpeg/libavcodec + /usr/local/include/ffmpeg/libavcodec + /usr/include/libavcodec + /usr/local/include/libavcodec + ) + FIND_PATH( FFMPEG_avcodec_INCLUDE_DIR avcodec.h HINTS PATHS + ${FFMPEG_general_INCLUDE_DIR}/libavcodec /usr/include /usr/local/include /usr/include/ffmpeg @@ -25,6 +39,7 @@ FIND_PATH( FFMPEG_avcodec_INCLUDE_DIR avcodec.h FIND_PATH( FFMPEG_avformat_INCLUDE_DIR avformat.h HINTS PATHS + ${FFMPEG_general_INCLUDE_DIR}/libavformat /usr/include /usr/local/include /usr/include/ffmpeg @@ -35,7 +50,7 @@ FIND_PATH( FFMPEG_avformat_INCLUDE_DIR avformat.h /usr/local/include/libavformat ) -set(FFMPEG_INCLUDE_DIR ${FFMPEG_avcodec_INCLUDE_DIR} ${FFMPEG_avformat_INCLUDE_DIR}) +set(FFMPEG_INCLUDE_DIR ${FFMPEG_general_INCLUDE_DIR} ${FFMPEG_avcodec_INCLUDE_DIR} ${FFMPEG_avformat_INCLUDE_DIR}) IF( FFMPEG_INCLUDE_DIR ) diff --git a/cmake/FindMyGUI.cmake b/cmake/FindMyGUI.cmake index 339f494ddb..fa0b25383c 100644 --- a/cmake/FindMyGUI.cmake +++ b/cmake/FindMyGUI.cmake @@ -103,7 +103,7 @@ SEPARATE_ARGUMENTS(MYGUI_PLATFORM_LIBRARIES) SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS} CACHE PATH "") SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "") -SET(MYGUI_LIBRARIES ${MYGUI_PLATFORM_LIBRARIES} CACHE STRING "") +SET(MYGUI_PLATFORM_LIBRARIES ${MYGUI_PLATFORM_LIBRARIES} CACHE STRING "") SET(MYGUI_LIB_DIR ${MYGUI_LIB_DIR} CACHE PATH "") IF (MYGUI_INCLUDE_DIRS AND MYGUI_LIBRARIES) From bb09c2189ad2719f42572ad447a8456fb9aac044 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 27 Mar 2012 00:45:25 +0200 Subject: [PATCH 180/488] lower rendering distance for small objects (reduce batch count) --- apps/openmw/mwrender/objects.cpp | 70 ++++++++++++++++++++++++-------- apps/openmw/mwrender/objects.hpp | 1 + 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index e4e7212275..1c2873b4e7 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -88,35 +88,61 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) NifOgre::NIFLoader::load(mesh); Ogre::Entity *ent = mRenderer.getScene()->createEntity(mesh); + Ogre::Vector3 extents = ent->getBoundingBox().getSize(); + extents *= insert->getScale(); + float size = std::max(std::max(extents.x, extents.y), extents.z); + + bool small = (size < 250); /// \todo config value + + // do not fade out doors. that will cause holes and look stupid + if (ptr.getTypeName().find("Door") != std::string::npos) + small = false; + if(!mIsStatic) { insert->attachObject(ent); + + ent->setRenderingDistance(small ? 2500 : 0); /// \todo config value } else { Ogre::StaticGeometry* sg = 0; - if(mStaticGeometry.find(ptr.getCell()) == mStaticGeometry.end()) + + if (small) { - uniqueID = uniqueID +1; - sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); - //Create the scenenode and put it in the map - mStaticGeometry[ptr.getCell()] = sg; + if( mStaticGeometrySmall.find(ptr.getCell()) == mStaticGeometrySmall.end()) + { + uniqueID = uniqueID +1; + sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); + mStaticGeometrySmall[ptr.getCell()] = sg; - // This specifies the size of a single batch region. - // If it is set too high: - // - there will be problems choosing the correct lights - // - the culling will be more inefficient - // If it is set too low: - // - there will be too many batches. - sg->setRegionDimensions(Ogre::Vector3(2500,2500,2500)); - - mBounds[ptr.getCell()] = Ogre::AxisAlignedBox::BOX_NULL; - mBounds[ptr.getCell()].merge(ent->getBoundingBox()); + sg->setRenderingDistance(2500); /// \todo config value + } + else + sg = mStaticGeometrySmall[ptr.getCell()]; } else { - sg = mStaticGeometry[ptr.getCell()]; + if( mStaticGeometry.find(ptr.getCell()) == mStaticGeometry.end()) + { + + uniqueID = uniqueID +1; + sg = mRenderer.getScene()->createStaticGeometry( "sg" + Ogre::StringConverter::toString(uniqueID)); + mStaticGeometry[ptr.getCell()] = sg; + } + else + sg = mStaticGeometry[ptr.getCell()]; } + + // This specifies the size of a single batch region. + // If it is set too high: + // - there will be problems choosing the correct lights + // - the culling will be more inefficient + // If it is set too low: + // - there will be too many batches. + sg->setRegionDimensions(Ogre::Vector3(2500,2500,2500)); + + mBounds[ptr.getCell()].merge(ent->getBoundingBox()); sg->addEntity(ent,insert->_getDerivedPosition(),insert->_getDerivedOrientation(),insert->_getDerivedScale()); mBounds[ptr.getCell()].merge(insert->_getDerivedPosition()); @@ -206,6 +232,13 @@ void Objects::removeCell(MWWorld::Ptr::CellStore* store) mRenderer.getScene()->destroyStaticGeometry (sg); sg = 0; } + if(mStaticGeometrySmall.find(store) != mStaticGeometrySmall.end()) + { + Ogre::StaticGeometry* sg = mStaticGeometrySmall[store]; + mStaticGeometrySmall.erase(store); + mRenderer.getScene()->destroyStaticGeometry (sg); + sg = 0; + } if(mBounds.find(store) != mBounds.end()) mBounds.erase(store); @@ -218,6 +251,11 @@ void Objects::buildStaticGeometry(ESMS::CellStore& cell) Ogre::StaticGeometry* sg = mStaticGeometry[&cell]; sg->build(); } + if(mStaticGeometrySmall.find(&cell) != mStaticGeometrySmall.end()) + { + Ogre::StaticGeometry* sg = mStaticGeometrySmall[&cell]; + sg->build(); + } } Ogre::AxisAlignedBox Objects::getDimensions(MWWorld::Ptr::CellStore* cell) diff --git a/apps/openmw/mwrender/objects.hpp b/apps/openmw/mwrender/objects.hpp index 1ca81331d1..265de875be 100644 --- a/apps/openmw/mwrender/objects.hpp +++ b/apps/openmw/mwrender/objects.hpp @@ -14,6 +14,7 @@ class Objects{ OEngine::Render::OgreRenderer &mRenderer; std::map mCellSceneNodes; std::map mStaticGeometry; + std::map mStaticGeometrySmall; std::map mBounds; Ogre::SceneNode* mMwRoot; bool mIsStatic; From b76b62e5e4cbf2db27bd443362e10690305d7330 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Tue, 27 Mar 2012 09:20:22 +0100 Subject: [PATCH 181/488] Fixed a crash when there were cells with no data, refactored to remove non mutable data from CellStore --- apps/openmw/mwrender/renderingmanager.cpp | 3 +- apps/openmw/mwrender/terrain.cpp | 150 ++++++++++++++-------- apps/openmw/mwrender/terrain.hpp | 25 ++-- components/esm/loadland.cpp | 22 ++-- components/esm/loadland.hpp | 3 +- components/esm_store/cell_store.hpp | 36 ------ components/esm_store/reclists.hpp | 34 ++--- 7 files changed, 144 insertions(+), 129 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 386b368424..ddf7fe3b0a 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -23,7 +23,8 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const :mRendering(_rend), mObjects(mRendering), mActors(mRendering, environment), mAmbientMode(0), mDebugging(engine) { mRendering.createScene("PlayerCam", 55, 5); - mTerrainManager = new TerrainManager(mRendering.getScene()); + mTerrainManager = new TerrainManager(mRendering.getScene(), + environment); //The fog type must be set before any terrain objects are created as if the //fog type is set to FOG_NONE then the initially created terrain won't have any fog diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 64acd9fe38..1c7db2d8b1 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -1,12 +1,12 @@ #include #include +#include + +#include "../mwworld/world.hpp" #include "terrainmaterial.hpp" #include "terrain.hpp" -#include "components/esm/loadland.hpp" - -#include using namespace Ogre; @@ -15,7 +15,8 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - TerrainManager::TerrainManager(SceneManager* mgr) + TerrainManager::TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& evn) : + mEnvironment(evn) { mTerrainGlobals = OGRE_NEW TerrainGlobalOptions(); @@ -102,6 +103,12 @@ namespace MWRender const int cellX = store->cell->getGridX(); const int cellY = store->cell->getGridY(); + ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); + if ( land != NULL ) + { + land->loadData(); + } + //split the cell terrain into four segments const int numTextures = ESM::Land::LAND_TEXTURE_SIZE/2; @@ -122,22 +129,29 @@ namespace MWRender mLandSize*mLandSize, MEMCATEGORY_GEOMETRY); - //copy the height data row by row - for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) + if ( land != NULL ) { - //the offset of the current segment - const size_t yOffset = y * (mLandSize-1) * ESM::Land::LAND_SIZE + - //offset of the row - terrainCopyY * ESM::Land::LAND_SIZE; - const size_t xOffset = x * (mLandSize-1); + //copy the height data row by row + for ( int terrainCopyY = 0; terrainCopyY < mLandSize; terrainCopyY++ ) + { + //the offset of the current segment + const size_t yOffset = y * (mLandSize-1) * ESM::Land::LAND_SIZE + + //offset of the row + terrainCopyY * ESM::Land::LAND_SIZE; + const size_t xOffset = x * (mLandSize-1); - memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], - &store->land[1][1]->landData->heights[yOffset + xOffset], - mLandSize*sizeof(float)); + memcpy(&terrainData.inputFloat[terrainCopyY*mLandSize], + &land->landData->heights[yOffset + xOffset], + mLandSize*sizeof(float)); + } + } + else + { + memset(terrainData.inputFloat, 0, mLandSize*mLandSize*sizeof(float)); } std::map indexes; - initTerrainTextures(&terrainData, store, + initTerrainTextures(&terrainData, cellX, cellY, x * numTextures, y * numTextures, numTextures, indexes); @@ -148,16 +162,18 @@ namespace MWRender mTerrainGroup->loadTerrain(terrainX, terrainY, true); Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); - initTerrainBlendMaps(terrain, store, + initTerrainBlendMaps(terrain, + cellX, cellY, x * numTextures, y * numTextures, numTextures, indexes); - if ( store->land[1][1]->landData->usingColours ) + if ( land->landData->usingColours ) { // disable or enable global colour map (depends on available vertex colours) mActiveProfile->setGlobalColourMapEnabled(true); - TexturePtr vertex = getVertexColours(store, + TexturePtr vertex = getVertexColours(land, + cellX, cellY, x*(mLandSize-1), y*(mLandSize-1), mLandSize); @@ -197,11 +213,10 @@ namespace MWRender //---------------------------------------------------------------------------------------------- void TerrainManager::initTerrainTextures(Terrain::ImportData* terrainData, - MWWorld::Ptr::CellStore* store, + int cellX, int cellY, int fromX, int fromY, int size, std::map& indexes) { - assert(store != NULL && "store must be a valid pointer"); assert(terrainData != NULL && "Must have valid terrain data"); assert(fromX >= 0 && fromY >= 0 && "Can't get a terrain texture on terrain outside the current cell"); @@ -219,7 +234,7 @@ namespace MWRender { for ( int x = fromX - 1; x < fromX + size + 1; x++ ) { - ltexIndexes.insert(getLtexIndexAt(store, x, y)); + ltexIndexes.insert(getLtexIndexAt(cellX, cellY, x, y)); } } @@ -244,7 +259,7 @@ namespace MWRender { //NB: All vtex ids are +1 compared to the ltex ids - assert( (int)store->landTextures->ltex.size() >= (int)ltexIndex - 1 && + assert( (int)mEnvironment.mWorld->getStore().landTexts.getSize() >= (int)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); std::string texture; @@ -254,7 +269,7 @@ namespace MWRender } else { - texture = store->landTextures->ltex[ltexIndex-1].texture; + texture = mEnvironment.mWorld->getStore().landTexts.search(ltexIndex-1)->texture; //TODO this is needed due to MWs messed up texture handling texture = texture.substr(0, texture.rfind(".")) + ".dds"; } @@ -280,11 +295,10 @@ namespace MWRender //---------------------------------------------------------------------------------------------- void TerrainManager::initTerrainBlendMaps(Terrain* terrain, - MWWorld::Ptr::CellStore* store, + int cellX, int cellY, int fromX, int fromY, int size, const std::map& indexes) { - assert(store != NULL && "store must be a valid pointer"); assert(terrain != NULL && "Must have valid terrain"); assert(fromX >= 0 && fromY >= 0 && "Can't get a terrain texture on terrain outside the current cell"); @@ -313,7 +327,7 @@ namespace MWRender { for ( int texX = fromX - 1; texX < fromX + size + 1; texX++ ) { - const uint16_t ltexIndex = getLtexIndexAt(store, texX, texY); + const uint16_t ltexIndex = getLtexIndexAt(cellX, cellY, texX, texY); //check if it is the base texture (which isn't in the map) and //if it is don't bother altering the blend map for it @@ -332,8 +346,10 @@ namespace MWRender float* const pBlend = terrain->getLayerBlendMap(layerIndex) ->getBlendPointer(); - for ( int y = -1; y < splatSize + 1; y++ ){ - for ( int x = -1; x < splatSize + 1; x++ ){ + for ( int y = -1; y < splatSize + 1; y++ ) + { + for ( int x = -1; x < splatSize + 1; x++ ) + { //Note: Y is reversed const int splatY = blendMapSize - 1 - relY * splatSize - y; @@ -373,7 +389,7 @@ namespace MWRender //---------------------------------------------------------------------------------------------- - int TerrainManager::getLtexIndexAt(MWWorld::Ptr::CellStore* store, + int TerrainManager::getLtexIndexAt(int cellX, int cellY, int x, int y) { //check texture index falls within the 9 cell bounds @@ -386,12 +402,6 @@ namespace MWRender y < 2*ESM::Land::LAND_TEXTURE_SIZE && "Trying to get land textures that are out of bounds"); - assert(store != NULL && "Store pointer must be valid"); - - //default center cell is indexed at (1,1) - int cellX = 1; - int cellY = 1; - if ( x < 0 ) { cellX--; @@ -414,22 +424,32 @@ namespace MWRender y -= ESM::Land::LAND_TEXTURE_SIZE; } - return store->land[cellX][cellY] - ->landData - ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + + ESM::Land* land = mEnvironment.mWorld->getStore().lands.search(cellX, cellY); + if ( land != NULL ) + { + land->loadData(); + return land->landData + ->textures[y * ESM::Land::LAND_TEXTURE_SIZE + x]; + } + else + { + return 0; + } } //---------------------------------------------------------------------------------------------- - TexturePtr TerrainManager::getVertexColours(MWWorld::Ptr::CellStore* store, - int fromX, int fromY, int size) + TexturePtr TerrainManager::getVertexColours(ESM::Land* land, + int cellX, int cellY, + int fromX, int fromY, int size) { TextureManager* const texMgr = TextureManager::getSingletonPtr(); const std::string colourTextureName = "VtexColours_" + - boost::lexical_cast(store->cell->getGridX()) + + boost::lexical_cast(cellX) + "_" + - boost::lexical_cast(store->cell->getGridY()) + + boost::lexical_cast(cellY) + "_" + boost::lexical_cast(fromX) + "_" + @@ -451,26 +471,42 @@ namespace MWRender const PixelBox& pixelBox = pixelBuffer->getCurrentLock(); uint8* pDest = static_cast(pixelBox.data); - - const char* const colours = store->land[1][1]->landData->colours; - for ( int y = 0; y < size; y++ ) + + if ( land != NULL ) { - for ( int x = 0; x < size; x++ ) + const char* const colours = land->landData->colours; + for ( int y = 0; y < size; y++ ) { - const size_t colourOffset = (y+fromY)*3*65 + (x+fromX)*3; + for ( int x = 0; x < size; x++ ) + { + const size_t colourOffset = (y+fromY)*3*65 + (x+fromX)*3; - assert( colourOffset >= 0 && colourOffset < 65*65*3 && - "Colour offset is out of the expected bounds of record" ); + assert( colourOffset < 65*65*3 && + "Colour offset is out of the expected bounds of record" ); - const unsigned char r = colours[colourOffset + 0]; - const unsigned char g = colours[colourOffset + 1]; - const unsigned char b = colours[colourOffset + 2]; + const unsigned char r = colours[colourOffset + 0]; + const unsigned char g = colours[colourOffset + 1]; + const unsigned char b = colours[colourOffset + 2]; - //as is the case elsewhere we need to flip the y - const size_t imageOffset = (size - 1 - y)*size*4 + x*4; - pDest[imageOffset + 0] = b; - pDest[imageOffset + 1] = g; - pDest[imageOffset + 2] = r; + //as is the case elsewhere we need to flip the y + const size_t imageOffset = (size - 1 - y)*size*4 + x*4; + pDest[imageOffset + 0] = b; + pDest[imageOffset + 1] = g; + pDest[imageOffset + 2] = r; + } + } + } + else + { + for ( int y = 0; y < size; y++ ) + { + for ( int x = 0; x < size; x++ ) + { + for ( int k = 0; k < 3; k++ ) + { + *pDest++ = 0; + } + } } } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 397c0c473f..16c93d6f49 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -23,7 +23,7 @@ namespace MWRender{ */ class TerrainManager{ public: - TerrainManager(Ogre::SceneManager*); + TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& env); virtual ~TerrainManager(); void setDiffuse(const Ogre::ColourValue& diffuse); @@ -35,6 +35,8 @@ namespace MWRender{ Ogre::TerrainGlobalOptions* mTerrainGlobals; Ogre::TerrainGroup* mTerrainGroup; + const MWWorld::Environment& mEnvironment; + Ogre::TerrainMaterialGeneratorB::SM2Profile* mActiveProfile; /** @@ -53,7 +55,8 @@ namespace MWRender{ * layer * * @param terrainData the terrain data to setup the textures for - * @param store the cell store for the given terrain cell + * @param cellX the coord of the cell + * @param cellY the coord of the cell * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get @@ -61,7 +64,7 @@ namespace MWRender{ * can be used by initTerrainBlendMaps */ void initTerrainTextures(Ogre::Terrain::ImportData* terrainData, - MWWorld::Ptr::CellStore* store, + int cellX, int cellY, int fromX, int fromY, int size, std::map& indexes); @@ -69,14 +72,15 @@ namespace MWRender{ * Creates the blend (splatting maps) for the given terrain from the ltex data. * * @param terrain the terrain object for the current cell - * @param store the cell store for the given terrain cell + * @param cellX the coord of the cell + * @param cellY the coord of the cell * @param fromX the ltex index in the current cell to start making the texture from * @param fromY the ltex index in the current cell to start making the texture from * @param size the size (number of splats) to get * @param indexes the mapping of ltex to blend map produced by initTerrainTextures */ void initTerrainBlendMaps(Ogre::Terrain* terrain, - MWWorld::Ptr::CellStore* store, + int cellX, int cellY, int fromX, int fromY, int size, const std::map& indexes); @@ -85,22 +89,25 @@ namespace MWRender{ * starts at (0,0). This supports getting values from the surrounding * cells so negative x, y is acceptable * - * @param store the cell store for the current cell + * @param cellX the coord of the cell + * @param cellY the coord of the cell * @param x, y the splat position of the ltex index to get relative to the * first splat of the current cell */ - int getLtexIndexAt(MWWorld::Ptr::CellStore* store, int x, int y); + int getLtexIndexAt(int cellX, int cellY, int x, int y); /** * Due to the fact that Ogre terrain doesn't support vertex colours * we have to generate them manually * - * @param store the cell store for the given terrain cell + * @param cellX the coord of the cell + * @param cellY the coord of the cell * @param fromX the *vertex* index in the current cell to start making texture from * @param fromY the *vertex* index in the current cell to start making the texture from * @param size the size (number of vertexes) to get */ - Ogre::TexturePtr getVertexColours(MWWorld::Ptr::CellStore* store, + Ogre::TexturePtr getVertexColours(ESM::Land* land, + int cellX, int cellY, int fromX, int fromY, int size); }; diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp index 4fe6279d32..cd2cf1d917 100644 --- a/components/esm/loadland.cpp +++ b/components/esm/loadland.cpp @@ -4,6 +4,8 @@ namespace ESM { void Land::load(ESMReader &esm) { + mEsm = &esm; + // Get the grid location esm.getSubNameIs("INTV"); esm.getSubHeaderIs(8); @@ -51,7 +53,7 @@ void Land::load(ESMReader &esm) landData = NULL; } -void Land::loadData(ESMReader &esm) +void Land::loadData() { if (dataLoaded) { @@ -62,17 +64,17 @@ void Land::loadData(ESMReader &esm) if (hasData) { - esm.restoreContext(context); + mEsm->restoreContext(context); //esm.getHNExact(landData->normals, sizeof(VNML), "VNML"); - if (esm.isNextSub("VNML")) + if (mEsm->isNextSub("VNML")) { - esm.skipHSubSize(12675); + mEsm->skipHSubSize(12675); } VHGT rawHeights; - esm.getHNExact(&rawHeights, sizeof(VHGT), "VHGT"); + mEsm->getHNExact(&rawHeights, sizeof(VHGT), "VHGT"); int currentHeightOffset = rawHeights.heightOffset; for (int y = 0; y < LAND_SIZE; y++) { @@ -87,20 +89,20 @@ void Land::loadData(ESMReader &esm) } } - if (esm.isNextSub("WNAM")) + if (mEsm->isNextSub("WNAM")) { - esm.skipHSubSize(81); + mEsm->skipHSubSize(81); } - if (esm.isNextSub("VCLR")) + if (mEsm->isNextSub("VCLR")) { landData->usingColours = true; - esm.getHExact(&landData->colours, 3*LAND_NUM_VERTS); + mEsm->getHExact(&landData->colours, 3*LAND_NUM_VERTS); }else{ landData->usingColours = false; } //TODO fix magic numbers uint16_t vtex[512]; - esm.getHNExact(&vtex, 512, "VTEX"); + mEsm->getHNExact(&vtex, 512, "VTEX"); int readPos = 0; //bit ugly, but it works for ( int y1 = 0; y1 < 4; y1++ ) diff --git a/components/esm/loadland.hpp b/components/esm/loadland.hpp index eeb198e905..5ccd966d92 100644 --- a/components/esm/loadland.hpp +++ b/components/esm/loadland.hpp @@ -17,6 +17,7 @@ struct Land // File context. This allows the ESM reader to be 'reset' to this // location later when we are ready to load the full data set. + ESMReader* mEsm; ESM_Context context; bool hasData; @@ -70,7 +71,7 @@ struct Land /** * Actually loads data */ - void loadData(ESMReader &esm); + void loadData(); /** * Frees memory allocated for land data diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index b733a7ee86..c0a84c577d 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -124,9 +124,6 @@ namespace ESMS CellRefList statics; CellRefList weapons; - const Land* land[3][3]; - const LTexList* landTextures; - void load (const ESMStore &store, ESMReader &esm) { if (mState!=State_Loaded) @@ -138,21 +135,6 @@ namespace ESMS loadRefs (store, esm); - if ( ! (cell->data.flags & ESM::Cell::Interior) ) - { - for ( size_t x = 0; x < 3; x++ ) - { - for ( size_t y = 0; y < 3; y++ ) - { - land[x][y] = loadTerrain(cell->data.gridX + x - 1, - cell->data.gridY + y - 1, - store, - esm); - } - } - landTextures = &store.landTexts; - } - mState = State_Loaded; } } @@ -198,24 +180,6 @@ namespace ESMS private: - Land* loadTerrain(int X, int Y, const ESMStore &store, ESMReader &esm) - { - // load terrain - Land *land = store.lands.search(X, Y); - if (land != NULL) - { - land->loadData(esm); - } - - return land; - } - - void unloadTerrain(int X, int Y, const ESMStore &store) { - assert (false && - "This function is not implemented due to the fact that we now store overlapping land blocks so" && - "we cannot be sure that the land segment is not being used by another CellStore"); - } - template bool forEachImp (Functor& functor, List& list) { diff --git a/components/esm_store/reclists.hpp b/components/esm_store/reclists.hpp index cfbd23d75b..a991996be5 100644 --- a/components/esm_store/reclists.hpp +++ b/components/esm_store/reclists.hpp @@ -201,15 +201,21 @@ namespace ESMS // TODO: For multiple ESM/ESP files we need one list per file. std::vector ltex; - int count; - LTexList() : count(0) + LTexList() { // More than enough to hold Morrowind.esm. ltex.reserve(128); } - int getSize() { return count; } + const LandTexture* search(size_t index) const + { + assert(index < ltex.size()); + return <ex.at(index); + } + + int getSize() { return ltex.size(); } + int getSize() const { return ltex.size(); } virtual void listIdentifier (std::vector& identifier) const {} @@ -236,9 +242,9 @@ namespace ESMS virtual ~LandList() {} // Map containing all landscapes - typedef std::map LandsCol; - typedef std::map Lands; - Lands lands; + typedef std::pair LandCoord; + typedef std::map LandMap; + LandMap lands; int count; LandList() : count(0) {} @@ -249,15 +255,13 @@ namespace ESMS // Find land for the given coordinates. Return null if no data. Land *search(int x, int y) const { - Lands::const_iterator it = lands.find(x); - if(it==lands.end()) + LandMap::const_iterator itr = lands.find(std::make_pair(x, y)); + if ( itr == lands.end() ) + { return NULL; + } - LandsCol::const_iterator it2 = it->second.find(y); - if(it2 == it->second.end()) - return NULL; - - return it2->second; + return itr->second; } void load(ESMReader &esm, const std::string &id) @@ -266,11 +270,11 @@ namespace ESMS // Create the structure and load it. This actually skips the // landscape data and remembers the file position for later. - Land *land = new Land; + Land *land = new Land(); land->load(esm); // Store the structure - lands[land->X][land->Y] = land; + lands[std::make_pair(land->X, land->Y)] = land; } }; From c2611d035c44faa25a008f3842d5f043148b3b30 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 27 Mar 2012 02:50:45 -0700 Subject: [PATCH 182/488] Use a pair to match the MWWorld::Ptr object and sound ID, instead of nested maps --- apps/openmw/mwsound/soundmanager.cpp | 96 +++++++++++----------------- apps/openmw/mwsound/soundmanager.hpp | 8 +-- 2 files changed, 40 insertions(+), 64 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 4d47e5f2cc..f20bf736e1 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -114,14 +114,10 @@ namespace MWSound bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { - SoundMap::const_iterator snditer = mActiveSounds.find(ptr); + SoundMap::const_iterator snditer = mActiveSounds.find(std::make_pair(ptr, id)); if(snditer == mActiveSounds.end()) return false; - IDMap::const_iterator iditer = snditer->second.find(id); - if(iditer == snditer->second.end()) - return false; - return true; } @@ -185,7 +181,7 @@ namespace MWSound std::string filePath = std::string("Sound/")+filename; SoundPtr sound(mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false)); - mActiveSounds[ptr]["_say_sound"] = sound; + mActiveSounds[std::make_pair(ptr, std::string("_say_sound"))] = sound; } catch(std::exception &e) { @@ -205,8 +201,8 @@ namespace MWSound try { std::string file = lookup(soundId, volume, min, max); - Sound *sound = mOutput->playSound(file, volume, pitch, loop); - mActiveSounds[MWWorld::Ptr()][soundId] = SoundPtr(sound); + SoundPtr sound = SoundPtr(mOutput->playSound(file, volume, pitch, loop)); + mActiveSounds[std::make_pair(MWWorld::Ptr(), soundId)] = sound; } catch(std::exception &e) { @@ -225,7 +221,7 @@ namespace MWSound std::string file = lookup(soundId, volume, min, max); SoundPtr sound(mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop)); - mActiveSounds[untracked?MWWorld::Ptr():ptr][soundId] = sound; + mActiveSounds[std::make_pair((untracked?MWWorld::Ptr():ptr), soundId)] = sound; } catch(std::exception &e) { @@ -237,30 +233,28 @@ namespace MWSound { // Stop a sound and remove it from the list. If soundId="" then // stop all its sounds. - SoundMap::iterator snditer = mActiveSounds.find(ptr); - if(snditer == mActiveSounds.end()) - return; - if(!soundId.empty()) { - IDMap::iterator iditer = snditer->second.find(soundId); - if(iditer != snditer->second.end()) - { - iditer->second->stop(); - snditer->second.erase(iditer); - if(snditer->second.empty()) - mActiveSounds.erase(snditer); - } + SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(ptr, soundId)); + if(snditer == mActiveSounds.end()) + return; + + snditer->second->stop(); + mActiveSounds.erase(snditer); } else { - IDMap::iterator iditer = snditer->second.begin(); - while(iditer != snditer->second.end()) + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { - iditer->second->stop(); - iditer++; + if(snditer->first.first == ptr) + { + snditer->second->stop(); + mActiveSounds.erase(snditer++); + } + else + snditer++; } - mActiveSounds.erase(snditer); } } @@ -270,14 +264,10 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(snditer->first != MWWorld::Ptr() && snditer->first.getCell() == cell) + if(snditer->first.first != MWWorld::Ptr() && + snditer->first.first.getCell() == cell) { - IDMap::iterator iditer = snditer->second.begin(); - while(iditer != snditer->second.end()) - { - iditer->second->stop(); - iditer++; - } + snditer->second->stop(); mActiveSounds.erase(snditer++); } else @@ -287,18 +277,12 @@ namespace MWSound void SoundManager::stopSound(const std::string& soundId) { - SoundMap::iterator snditer = mActiveSounds.find(MWWorld::Ptr()); + SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(MWWorld::Ptr(), soundId)); if(snditer == mActiveSounds.end()) return; - IDMap::iterator iditer = snditer->second.find(soundId); - if(iditer != snditer->second.end()) - { - iditer->second->stop(); - snditer->second.erase(iditer); - if(snditer->second.empty()) - mActiveSounds.erase(snditer); - } + snditer->second->stop(); + mActiveSounds.erase(snditer); } bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const @@ -308,16 +292,16 @@ namespace MWSound void SoundManager::updateObject(MWWorld::Ptr ptr) { - SoundMap::iterator snditer = mActiveSounds.find(ptr); - if(snditer == mActiveSounds.end()) - return; - - const ESM::Position &pos = ptr.getCellRef().pos; - IDMap::iterator iditer = snditer->second.begin(); - while(iditer != snditer->second.end()) + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { - iditer->second->update(pos.pos); - iditer++; + if(snditer->first.first == ptr) + { + snditer->second->stop(); + mActiveSounds.erase(snditer++); + } + else + snditer++; } } @@ -406,15 +390,7 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - IDMap::iterator iditer = snditer->second.begin(); - while(iditer != snditer->second.end()) - { - if(!iditer->second->isPlaying()) - snditer->second.erase(iditer++); - else - iditer++; - } - if(snditer->second.empty()) + if(!snditer->second->isPlaying()) mActiveSounds.erase(snditer++); else snditer++; diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 8d76ba1008..b7b21b9459 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -2,11 +2,11 @@ #define GAME_SOUND_SOUNDMANAGER_H #include +#include +#include #include -#include - #include "../mwworld/ptr.hpp" @@ -41,8 +41,8 @@ namespace MWSound std::string mCurrentPlaylist; typedef boost::shared_ptr SoundPtr; - typedef std::map IDMap; - typedef std::map SoundMap; + typedef std::pair PtrIDPair; + typedef std::map SoundMap; SoundMap mActiveSounds; std::string lookup(const std::string &soundId, From 033faba9c41b45bd19240df280358d3f9aab6693 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 27 Mar 2012 03:00:04 -0700 Subject: [PATCH 183/488] Make a function parameter const --- apps/openmw/mwsound/soundmanager.cpp | 2 +- apps/openmw/mwsound/soundmanager.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index f20bf736e1..5450c113ae 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -258,7 +258,7 @@ namespace MWSound } } - void SoundManager::stopSound(MWWorld::Ptr::CellStore *cell) + void SoundManager::stopSound(const MWWorld::Ptr::CellStore *cell) { // Remove all references to objects belonging to a given cell SoundMap::iterator snditer = mActiveSounds.begin(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index b7b21b9459..7f20425afb 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -99,7 +99,7 @@ namespace MWSound ///< Stop the given object from playing the given sound, If no soundId is given, /// all sounds for this reference will stop. - void stopSound(MWWorld::Ptr::CellStore *cell); + void stopSound(const MWWorld::Ptr::CellStore *cell); ///< Stop all sounds for the given cell. void stopSound(const std::string& soundId); From f0db2ab82fb928a2c955750478b0a785f2d229ea Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 27 Mar 2012 03:20:50 -0700 Subject: [PATCH 184/488] Split stopSound3D into separate functions to deal with stopping all sounds on an object --- apps/openmw/mwsound/soundmanager.cpp | 37 ++++++++++++---------------- apps/openmw/mwsound/soundmanager.hpp | 8 +++--- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 5450c113ae..449b5100b0 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -231,36 +231,31 @@ namespace MWSound void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) { - // Stop a sound and remove it from the list. If soundId="" then - // stop all its sounds. - if(!soundId.empty()) - { - SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(ptr, soundId)); - if(snditer == mActiveSounds.end()) - return; + SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(ptr, soundId)); + if(snditer == mActiveSounds.end()) + return; - snditer->second->stop(); - mActiveSounds.erase(snditer); - } - else + snditer->second->stop(); + mActiveSounds.erase(snditer); + } + + void SoundManager::stopSound3D(MWWorld::Ptr ptr) + { + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) { - SoundMap::iterator snditer = mActiveSounds.begin(); - while(snditer != mActiveSounds.end()) + if(snditer->first.first == ptr) { - if(snditer->first.first == ptr) - { - snditer->second->stop(); - mActiveSounds.erase(snditer++); - } - else - snditer++; + snditer->second->stop(); + mActiveSounds.erase(snditer++); } + else + snditer++; } } void SoundManager::stopSound(const MWWorld::Ptr::CellStore *cell) { - // Remove all references to objects belonging to a given cell SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 7f20425afb..d79aface6a 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -95,9 +95,11 @@ namespace MWSound bool untracked=false); ///< Play a sound from an object - void stopSound3D(MWWorld::Ptr reference, const std::string& soundId=""); - ///< Stop the given object from playing the given sound, If no soundId is given, - /// all sounds for this reference will stop. + void stopSound3D(MWWorld::Ptr reference, const std::string& soundId); + ///< Stop the given object from playing the given sound, + + void stopSound3D(MWWorld::Ptr reference); + ///< Stop the given object from playing all sounds. void stopSound(const MWWorld::Ptr::CellStore *cell); ///< Stop all sounds for the given cell. From e398c51f8a9b641b43658d14639f67301f8d0e11 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 27 Mar 2012 13:13:28 +0200 Subject: [PATCH 185/488] remove unneeded render queue workaround --- apps/openmw/mwrender/occlusionquery.cpp | 24 ------------------------ apps/openmw/mwrender/occlusionquery.hpp | 8 -------- 2 files changed, 32 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index c3285a3359..43a742a548 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -225,14 +225,6 @@ void OcclusionQuery::update(float duration) mBBQuerySingleObject->setVisible(false); - // restore old render queues - for (std::vector::iterator it=mObjectsInfo.begin(); - it!=mObjectsInfo.end(); ++it) - { - if (!mRendering->getScene()->hasMovableObject((*it).name, (*it).typeName)) break; - mRendering->getScene()->getMovableObject((*it).name, (*it).typeName)->setRenderQueueGroup( (*it).oldRenderqueue ); - } - mQuerySingleObjectStarted = false; mQuerySingleObjectRequested = false; } @@ -245,22 +237,6 @@ void OcclusionQuery::occlusionTest(const Ogre::Vector3& position, Ogre::SceneNod mBBQuerySingleObject->setVisible(true); - // we don't want the object to occlude itself - // put it in a render queue _after_ the occlusion query - mObjectsInfo.clear(); - for (int i=0; inumAttachedObjects(); ++i) - { - ObjectInfo info; - MovableObject* obj = object->getAttachedObject(i); - info.name = obj->getName(); - info.typeName = obj->getMovableType(); - info.oldRenderqueue = obj->getRenderQueueGroup(); - - mObjectsInfo.push_back(info); - - object->getAttachedObject(i)->setRenderQueueGroup(RENDER_QUEUE_MAIN+5); - } - mObjectNode->setPosition(position); // scale proportional to camera distance, in order to always give the billboard the same size in screen-space mObjectNode->setScale( Vector3(1,1,1)*(position - mRendering->getCamera()->getRealPosition()).length() ); diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index a9fa0b5e4a..b3e5442cfe 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -18,13 +18,6 @@ namespace MWRender /// /// \brief Implements hardware occlusion queries on the GPU /// - struct ObjectInfo - { - int oldRenderqueue; - std::string name; - std::string typeName; - }; - class OcclusionQuery : public Ogre::RenderObjectListener, public Ogre::RenderQueueListener { public: @@ -75,7 +68,6 @@ namespace MWRender float mSunVisibility; Ogre::SceneNode* mObjectNode; - std::vector mObjectsInfo; bool mWasVisible; bool mObjectWasVisible; From ec21ff21cc6620ba60a947dcc7d7bf1ffcf12e36 Mon Sep 17 00:00:00 2001 From: Jacob Essex Date: Tue, 27 Mar 2012 13:58:12 +0100 Subject: [PATCH 186/488] Removed memory leak, allocated more on the stack --- apps/openmw/mwrender/terrain.cpp | 48 +++++++++++++------------------ apps/openmw/mwrender/terrain.hpp | 5 ++-- components/esm_store/reclists.hpp | 8 +++++- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index 1c7db2d8b1..ac60e63238 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -16,33 +16,32 @@ namespace MWRender //---------------------------------------------------------------------------------------------- TerrainManager::TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& evn) : - mEnvironment(evn) + mEnvironment(evn), mTerrainGroup(TerrainGroup(mgr, Terrain::ALIGN_X_Z, mLandSize, mWorldSize)) { - mTerrainGlobals = OGRE_NEW TerrainGlobalOptions(); TerrainMaterialGeneratorPtr matGen; TerrainMaterialGeneratorB* matGenP = new TerrainMaterialGeneratorB(); matGen.bind(matGenP); - mTerrainGlobals->setDefaultMaterialGenerator(matGen); + mTerrainGlobals.setDefaultMaterialGenerator(matGen); TerrainMaterialGenerator::Profile* const activeProfile = - mTerrainGlobals->getDefaultMaterialGenerator() + mTerrainGlobals.getDefaultMaterialGenerator() ->getActiveProfile(); mActiveProfile = static_cast(activeProfile); //The pixel error should be as high as possible without it being noticed //as it governs how fast mesh quality decreases. - mTerrainGlobals->setMaxPixelError(8); + mTerrainGlobals.setMaxPixelError(8); - mTerrainGlobals->setLayerBlendMapSize(32); - mTerrainGlobals->setDefaultGlobalColourMapSize(65); + mTerrainGlobals.setLayerBlendMapSize(32); + mTerrainGlobals.setDefaultGlobalColourMapSize(65); //10 (default) didn't seem to be quite enough - mTerrainGlobals->setSkirtSize(128); + mTerrainGlobals.setSkirtSize(128); //due to the sudden flick between composite and non composite textures, //this seemed the distance where it wasn't too noticeable - mTerrainGlobals->setCompositeMapDistance(mWorldSize*2); + mTerrainGlobals.setCompositeMapDistance(mWorldSize*2); mActiveProfile->setLightmapEnabled(false); mActiveProfile->setLayerSpecularMappingEnabled(false); @@ -54,16 +53,11 @@ namespace MWRender //disabled mActiveProfile->setCompositeMapEnabled(false); - mTerrainGroup = OGRE_NEW TerrainGroup(mgr, - Terrain::ALIGN_X_Z, - mLandSize, - mWorldSize); - - mTerrainGroup->setOrigin(Vector3(mWorldSize/2, + mTerrainGroup.setOrigin(Vector3(mWorldSize/2, 0, -mWorldSize/2)); - Terrain::ImportData& importSettings = mTerrainGroup->getDefaultImportSettings(); + Terrain::ImportData& importSettings = mTerrainGroup.getDefaultImportSettings(); importSettings.inputBias = 0; importSettings.terrainSize = mLandSize; @@ -78,22 +72,20 @@ namespace MWRender TerrainManager::~TerrainManager() { - OGRE_DELETE mTerrainGroup; - OGRE_DELETE mTerrainGlobals; } //---------------------------------------------------------------------------------------------- void TerrainManager::setDiffuse(const ColourValue& diffuse) { - mTerrainGlobals->setCompositeMapDiffuse(diffuse); + mTerrainGlobals.setCompositeMapDiffuse(diffuse); } //---------------------------------------------------------------------------------------------- void TerrainManager::setAmbient(const ColourValue& ambient) { - mTerrainGlobals->setCompositeMapAmbient(ambient); + mTerrainGlobals.setCompositeMapAmbient(ambient); } //---------------------------------------------------------------------------------------------- @@ -117,7 +109,7 @@ namespace MWRender for ( int y = 0; y < 2; y++ ) { Terrain::ImportData terrainData = - mTerrainGroup->getDefaultImportSettings(); + mTerrainGroup.getDefaultImportSettings(); const int terrainX = cellX * 2 + x; const int terrainY = cellY * 2 + y; @@ -155,13 +147,13 @@ namespace MWRender x * numTextures, y * numTextures, numTextures, indexes); - if (mTerrainGroup->getTerrain(terrainX, terrainY) == NULL) + if (mTerrainGroup.getTerrain(terrainX, terrainY) == NULL) { - mTerrainGroup->defineTerrain(terrainX, terrainY, &terrainData); + mTerrainGroup.defineTerrain(terrainX, terrainY, &terrainData); - mTerrainGroup->loadTerrain(terrainX, terrainY, true); + mTerrainGroup.loadTerrain(terrainX, terrainY, true); - Terrain* terrain = mTerrainGroup->getTerrain(terrainX, terrainY); + Terrain* terrain = mTerrainGroup.getTerrain(terrainX, terrainY); initTerrainBlendMaps(terrain, cellX, cellY, x * numTextures, y * numTextures, @@ -193,7 +185,7 @@ namespace MWRender } } - mTerrainGroup->freeTemporaryResources(); + mTerrainGroup.freeTemporaryResources(); } //---------------------------------------------------------------------------------------------- @@ -204,8 +196,8 @@ namespace MWRender { for ( int y = 0; y < 2; y++ ) { - mTerrainGroup->unloadTerrain(store->cell->getGridX() * 2 + x, - store->cell->getGridY() * 2 + y); + mTerrainGroup.unloadTerrain(store->cell->getGridX() * 2 + x, + store->cell->getGridY() * 2 + y); } } } diff --git a/apps/openmw/mwrender/terrain.hpp b/apps/openmw/mwrender/terrain.hpp index 16c93d6f49..29a4ba36b3 100644 --- a/apps/openmw/mwrender/terrain.hpp +++ b/apps/openmw/mwrender/terrain.hpp @@ -2,6 +2,7 @@ #define _GAME_RENDER_TERRAIN_H #include +#include #include "terrainmaterial.hpp" #include "../mwworld/ptr.hpp" @@ -32,8 +33,8 @@ namespace MWRender{ void cellAdded(MWWorld::Ptr::CellStore* store); void cellRemoved(MWWorld::Ptr::CellStore* store); private: - Ogre::TerrainGlobalOptions* mTerrainGlobals; - Ogre::TerrainGroup* mTerrainGroup; + Ogre::TerrainGlobalOptions mTerrainGlobals; + Ogre::TerrainGroup mTerrainGroup; const MWWorld::Environment& mEnvironment; diff --git a/components/esm_store/reclists.hpp b/components/esm_store/reclists.hpp index a991996be5..16d37bec71 100644 --- a/components/esm_store/reclists.hpp +++ b/components/esm_store/reclists.hpp @@ -239,7 +239,13 @@ namespace ESMS */ struct LandList : RecList { - virtual ~LandList() {} + virtual ~LandList() + { + for ( LandMap::iterator itr = lands.begin(); itr != lands.end(); ++itr ) + { + delete itr->second; + } + } // Map containing all landscapes typedef std::pair LandCoord; From c6c06f1140aadc0bfc7b5d2d109f00aedd6431d4 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 27 Mar 2012 05:59:09 -0700 Subject: [PATCH 187/488] Return SoundPtr objects from the playSound and streamSound methods --- apps/openmw/mwsound/openal_output.cpp | 28 +++++++++++++-------------- apps/openmw/mwsound/openal_output.hpp | 12 ++++++------ apps/openmw/mwsound/sound_output.hpp | 14 ++++++++------ apps/openmw/mwsound/soundmanager.cpp | 8 ++++---- apps/openmw/mwsound/soundmanager.hpp | 2 +- 5 files changed, 33 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index c069474034..bb083cb8b1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -559,11 +559,11 @@ void OpenAL_Output::bufferFinished(ALuint buf) } -Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, bool loop) +SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, bool loop) { throwALerror(); - std::auto_ptr sound; + boost::shared_ptr sound; ALuint src=0, buf=0; if(mFreeSources.empty()) @@ -604,15 +604,15 @@ Sound* OpenAL_Output::playSound(const std::string &fname, float volume, float pi alSourcePlay(src); throwALerror(); - return sound.release(); + return sound; } -Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max, bool loop) +SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max, bool loop) { throwALerror(); - std::auto_ptr sound; + boost::shared_ptr sound; ALuint src=0, buf=0; if(mFreeSources.empty()) @@ -653,15 +653,15 @@ Sound* OpenAL_Output::playSound3D(const std::string &fname, const float *pos, fl alSourcePlay(src); throwALerror(); - return sound.release(); + return sound; } -Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) +SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) { throwALerror(); - std::auto_ptr sound; + boost::shared_ptr sound; ALuint src; if(mFreeSources.empty()) @@ -697,15 +697,15 @@ Sound* OpenAL_Output::streamSound(const std::string &fname, float volume, float throwALerror(); sound->play(); - return sound.release(); + return sound; } -Sound* OpenAL_Output::streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max) +SoundPtr OpenAL_Output::streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max) { throwALerror(); - std::auto_ptr sound; + boost::shared_ptr sound; ALuint src; if(mFreeSources.empty()) @@ -741,7 +741,7 @@ Sound* OpenAL_Output::streamSound3D(const std::string &fname, const float *pos, throwALerror(); sound->play(); - return sound.release(); + return sound; } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index e8154e9063..2b0897bdbc 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -42,13 +42,13 @@ namespace MWSound virtual void init(const std::string &devname=""); virtual void deinit(); - virtual Sound *playSound(const std::string &fname, float volume, float pitch, bool loop); - virtual Sound *playSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max, bool loop); + virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop); + virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max, bool loop); - virtual Sound *streamSound(const std::string &fname, float volume, float pitch); - virtual Sound *streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max); + virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch); + virtual SoundPtr streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max); virtual void updateListener(const float *pos, const float *atdir, const float *updir); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 1722165e49..794383591b 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -4,6 +4,8 @@ #include #include +#include "soundmanager.hpp" + #include "../mwworld/ptr.hpp" namespace MWSound @@ -20,12 +22,12 @@ namespace MWSound virtual void init(const std::string &devname="") = 0; virtual void deinit() = 0; - virtual Sound *playSound(const std::string &fname, float volume, float pitch, bool loop) = 0; - virtual Sound *playSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max, bool loop) = 0; - virtual Sound *streamSound(const std::string &fname, float volume, float pitch) = 0; - virtual Sound *streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max) = 0; + virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop) = 0; + virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max, bool loop) = 0; + virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch) = 0; + virtual SoundPtr streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, + float min, float max) = 0; virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 449b5100b0..ce5f93acdb 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -136,7 +136,7 @@ namespace MWSound { if(mMusic) mMusic->stop(); - mMusic.reset(mOutput->streamSound(filename, 0.4f, 1.0f)); + mMusic = mOutput->streamSound(filename, 0.4f, 1.0f); } catch(std::exception &e) { @@ -180,7 +180,7 @@ namespace MWSound const ESM::Position &pos = ptr.getCellRef().pos; std::string filePath = std::string("Sound/")+filename; - SoundPtr sound(mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false)); + SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false); mActiveSounds[std::make_pair(ptr, std::string("_say_sound"))] = sound; } catch(std::exception &e) @@ -201,7 +201,7 @@ namespace MWSound try { std::string file = lookup(soundId, volume, min, max); - SoundPtr sound = SoundPtr(mOutput->playSound(file, volume, pitch, loop)); + SoundPtr sound = mOutput->playSound(file, volume, pitch, loop); mActiveSounds[std::make_pair(MWWorld::Ptr(), soundId)] = sound; } catch(std::exception &e) @@ -220,7 +220,7 @@ namespace MWSound const ESM::Position &pos = ptr.getCellRef().pos; std::string file = lookup(soundId, volume, min, max); - SoundPtr sound(mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop)); + SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop); mActiveSounds[std::make_pair((untracked?MWWorld::Ptr():ptr), soundId)] = sound; } catch(std::exception &e) diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index d79aface6a..539e818885 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -28,6 +28,7 @@ namespace MWSound class Sound; typedef boost::shared_ptr DecoderPtr; + typedef boost::shared_ptr SoundPtr; class SoundManager { @@ -40,7 +41,6 @@ namespace MWSound boost::shared_ptr mMusic; std::string mCurrentPlaylist; - typedef boost::shared_ptr SoundPtr; typedef std::pair PtrIDPair; typedef std::map SoundMap; SoundMap mActiveSounds; From 6c8be7205a712381067e59755dc1301a7820b2bf Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 27 Mar 2012 20:13:48 +0200 Subject: [PATCH 188/488] build fix --- cmake/FindMyGUI.cmake | 92 ++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/cmake/FindMyGUI.cmake b/cmake/FindMyGUI.cmake index fa0b25383c..cc97992084 100644 --- a/cmake/FindMyGUI.cmake +++ b/cmake/FindMyGUI.cmake @@ -19,57 +19,57 @@ include(FindPkgMacros) IF (WIN32) #Windows MESSAGE(STATUS "Looking for MyGUI") - SET(MYGUISDK $ENV{MYGUI_HOME}) +SET(MYGUISDK $ENV{MYGUI_HOME}) IF (MYGUISDK) - findpkg_begin ( "MYGUI" ) +findpkg_begin ( "MYGUI" ) MESSAGE(STATUS "Using MyGUI in OGRE SDK") - STRING(REGEX REPLACE "[\\]" "/" MYGUISDK "${MYGUISDK}" ) +STRING(REGEX REPLACE "[\\]" "/" MYGUISDK "${MYGUISDK}" ) - find_path ( MYGUI_INCLUDE_DIRS - MyGUI.h - "${MYGUISDK}/MyGUIEngine/include" - NO_DEFAULT_PATH ) - - find_path ( MYGUI_PLATFORM_INCLUDE_DIRS - MyGUI_OgrePlatform.h - "${MYGUISDK}/Platforms/Ogre/OgrePlatform/include" - NO_DEFAULT_PATH ) +find_path ( MYGUI_INCLUDE_DIRS +MyGUI.h +"${MYGUISDK}/MyGUIEngine/include" +NO_DEFAULT_PATH ) - SET ( MYGUI_LIB_DIR ${MYGUISDK}/*/lib ) - - find_library ( MYGUI_LIBRARIES_REL NAMES - MyGUIEngine.lib - MyGUI.OgrePlatform.lib - HINTS - ${MYGUI_LIB_DIR} - PATH_SUFFIXES "" release relwithdebinfo minsizerel ) +find_path ( MYGUI_PLATFORM_INCLUDE_DIRS +MyGUI_OgrePlatform.h +"${MYGUISDK}/Platforms/Ogre/OgrePlatform/include" +NO_DEFAULT_PATH ) - find_library ( MYGUI_LIBRARIES_DBG NAMES - MyGUIEngine_d.lib - MyGUI.OgrePlatform_d.lib - HINTS - ${MYGUI_LIB_DIR} - PATH_SUFFIXES "" debug ) +SET ( MYGUI_LIB_DIR ${MYGUISDK}/*/lib ) - find_library ( MYGUI_PLATFORM_LIBRARIES_REL NAMES - MyGUI.OgrePlatform.lib - HINTS - ${MYGUI_LIB_DIR} - PATH_SUFFIXES "" release relwithdebinfo minsizerel ) +find_library ( MYGUI_LIBRARIES_REL NAMES +MyGUIEngine.lib +MyGUI.OgrePlatform.lib +HINTS +${MYGUI_LIB_DIR} +PATH_SUFFIXES "" release relwithdebinfo minsizerel ) - find_library ( MYGUI_PLATFORM_LIBRARIES_DBG NAMES - MyGUI.OgrePlatform_d.lib - HINTS - ${MYGUI_LIB_DIR} - PATH_SUFFIXES "" debug ) - - make_library_set ( MYGUI_LIBRARIES ) - make_library_set ( MYGUI_PLATFORM_LIBRARIES ) - - MESSAGE ("${MYGUI_LIBRARIES}") - MESSAGE ("${MYGUI_PLATFORM_LIBRARIES}") +find_library ( MYGUI_LIBRARIES_DBG NAMES +MyGUIEngine_d.lib +MyGUI.OgrePlatform_d.lib +HINTS +${MYGUI_LIB_DIR} +PATH_SUFFIXES "" debug ) - findpkg_finish ( "MYGUI" ) +find_library ( MYGUI_PLATFORM_LIBRARIES_REL NAMES +MyGUI.OgrePlatform.lib +HINTS +${MYGUI_LIB_DIR} +PATH_SUFFIXES "" release relwithdebinfo minsizerel ) + +find_library ( MYGUI_PLATFORM_LIBRARIES_DBG NAMES +MyGUI.OgrePlatform_d.lib +HINTS +${MYGUI_LIB_DIR} +PATH_SUFFIXES "" debug ) + +make_library_set ( MYGUI_LIBRARIES ) +make_library_set ( MYGUI_PLATFORM_LIBRARIES ) + +MESSAGE ("${MYGUI_LIBRARIES}") +MESSAGE ("${MYGUI_PLATFORM_LIBRARIES}") + +findpkg_finish ( "MYGUI" ) ENDIF (MYGUISDK) IF (OGRESOURCE) @@ -87,9 +87,11 @@ ELSE (WIN32) #Unix SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS}) SET(MYGUI_LIB_DIR ${MYGUI_LIBDIR}) SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "") + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") ELSE (MYGUI_INCLUDE_DIRS) FIND_PATH(MYGUI_INCLUDE_DIRS MyGUI.h PATHS /usr/local/include /usr/include PATH_SUFFIXES MyGUI MYGUI) FIND_LIBRARY(MYGUI_LIBRARIES mygui PATHS /usr/lib /usr/local/lib) + SET(MYGUI_PLATFORM_LIBRARIES "MyGUI.OgrePlatform") SET(MYGUI_LIB_DIR ${MYGUI_LIBRARIES}) STRING(REGEX REPLACE "(.*)/.*" "\\1" MYGUI_LIB_DIR "${MYGUI_LIB_DIR}") STRING(REGEX REPLACE ".*/" "" MYGUI_LIBRARIES "${MYGUI_LIBRARIES}") @@ -111,7 +113,7 @@ IF (MYGUI_INCLUDE_DIRS AND MYGUI_LIBRARIES) ENDIF (MYGUI_INCLUDE_DIRS AND MYGUI_LIBRARIES) IF (MYGUI_FOUND) - MARK_AS_ADVANCED(MYGUI_LIB_DIR) +MARK_AS_ADVANCED(MYGUI_LIB_DIR) IF (NOT MYGUI_FIND_QUIETLY) MESSAGE(STATUS " libraries : ${MYGUI_LIBRARIES} from ${MYGUI_LIB_DIR}") MESSAGE(STATUS " includes : ${MYGUI_INCLUDE_DIRS}") @@ -122,4 +124,4 @@ ELSE (MYGUI_FOUND) ENDIF (MYGUI_FIND_REQUIRED) ENDIF (MYGUI_FOUND) -CMAKE_POLICY(POP) \ No newline at end of file +CMAKE_POLICY(POP) From 8f6d10f229a45bfa2c01364a4a0e9d1a2a78200e Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 27 Mar 2012 20:59:58 +0200 Subject: [PATCH 189/488] fix uninitalised stuff --- apps/openmw/mwrender/occlusionquery.cpp | 4 ++-- apps/openmw/mwworld/world.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 43a742a548..2c184c3451 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -11,7 +11,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), - mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), + mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), mTestResult(false), mQuerySingleObjectRequested(false), mResponding(true), mDelay(0), mWasVisible(false), mObjectWasVisible(false) { mRendering = renderer; @@ -211,7 +211,7 @@ void OcclusionQuery::update(float duration) mDoQuery = true; } - if (!mSingleObjectQuery->isStillOutstanding() && mQuerySingleObjectStarted) + if (mQuerySingleObjectStarted && !mSingleObjectQuery->isStillOutstanding()) { mDelay = 0; mResponding = true; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index f185e411f8..567ed8f90b 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -157,7 +157,8 @@ namespace MWWorld const std::string& master, const boost::filesystem::path& resDir, bool newGame, Environment& environment, const std::string& encoding) : mPlayer (0), mLocalScripts (mStore), mGlobalVariables (0), - mSky (true), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this) + mSky (true), mEnvironment (environment), mNextDynamicRecord (0), mCells (mStore, mEsm, *this), + mNumFacing(0) { mPhysics = new PhysicsSystem(renderer); mPhysEngine = mPhysics->getEngine(); From 43b1f896f42f986c6c19daaa3f3f78e6215e0953 Mon Sep 17 00:00:00 2001 From: scrawl Date: Tue, 27 Mar 2012 22:36:02 +0200 Subject: [PATCH 190/488] fix object pickup when player is very close to object --- apps/openmw/mwworld/physicssystem.cpp | 9 ++------- apps/openmw/mwworld/world.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwworld/physicssystem.cpp b/apps/openmw/mwworld/physicssystem.cpp index 1d8f14cc42..83c3ef2bab 100644 --- a/apps/openmw/mwworld/physicssystem.cpp +++ b/apps/openmw/mwworld/physicssystem.cpp @@ -57,8 +57,6 @@ namespace MWWorld Ray centerRay = mRender.getCamera()->getCameraToViewportRay( mRender.getViewport()->getWidth()/2, mRender.getViewport()->getHeight()/2); - //let's avoid the capsule shape of the player. - centerRay.setOrigin(centerRay.getOrigin() + 20*centerRay.getDirection()); btVector3 from(centerRay.getOrigin().x,-centerRay.getOrigin().z,centerRay.getOrigin().y); btVector3 to(centerRay.getPoint(500).x,-centerRay.getPoint(500).z,centerRay.getPoint(500).y); @@ -71,11 +69,8 @@ namespace MWWorld Ray centerRay = mRender.getCamera()->getCameraToViewportRay( mRender.getViewport()->getWidth()/2, mRender.getViewport()->getHeight()/2); - //let's avoid the capsule shape of the player. - centerRay.setOrigin(centerRay.getOrigin() + 20*centerRay.getDirection()); - btVector3 from(centerRay.getOrigin().x,-centerRay.getOrigin().z,centerRay.getOrigin().y); - btVector3 to(centerRay.getPoint(500).x,-centerRay.getPoint(500).z,centerRay.getPoint(500).y); - return from * (1-extent) + to * extent; + btVector3 result(centerRay.getPoint(500*extent).x,-centerRay.getPoint(500*extent).z,centerRay.getPoint(500*extent).y); + return result; } bool PhysicsSystem::castRay(const Vector3& from, const Vector3& to) diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 567ed8f90b..dd30447338 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -749,6 +749,17 @@ namespace MWWorld // figure out which object we want to test against std::vector < std::pair < float, std::string > > results = mPhysics->getFacedObjects(); + // ignore the player + for (std::vector < std::pair < float, std::string > >::iterator it = results.begin(); + it != results.end(); ++it) + { + if ( (*it).second == mPlayer->getPlayer().getRefData().getHandle() ) + { + results.erase(it); + break; + } + } + if (results.size() == 0) { mNumFacing = 0; From fa4c4b8f2129316697d9bbc88350946e0c3ff4db Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Tue, 27 Mar 2012 23:07:25 +0200 Subject: [PATCH 191/488] Issue #225: Initialize members in class constructor. --- apps/openmw/mwgui/layouts.cpp | 15 ++++++++++++++- apps/openmw/mwgui/layouts.hpp | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index dbd6154b7c..f2c650fb39 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -182,7 +182,9 @@ void HUD::setPlayerPos(const float x, const float y) } MapWindow::MapWindow() - : Layout("openmw_map_window_layout.xml"), mGlobal(false) + : Layout("openmw_map_window_layout.xml") + , mGlobal(false) + , mVisible(false) { setCoord(500,0,320,300); setText("WorldButton", "World"); @@ -272,6 +274,17 @@ void MapWindow::onWorldButtonClicked(MyGUI::Widget* _sender) mButton->setCaption( mGlobal ? "Local" : "World" ); } +LocalMapBase::LocalMapBase() + : mCurX(0) + , mCurY(0) + , mInterior(false) + , mLocalMap(NULL) + , mPrefix() + , mChanged(false) + , mLayout(NULL) +{ +} + void LocalMapBase::init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout) { mLocalMap = widget; diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 8d9a41a229..614479ccce 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -34,6 +34,7 @@ namespace MWGui class LocalMapBase { public: + LocalMapBase(); void init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout); void setCellPrefix(const std::string& prefix); @@ -85,6 +86,7 @@ namespace MWGui { public: MapWindow(); + virtual ~MapWindow(){} void setVisible(bool b); void setPlayerPos(const float x, const float y); From 4249d2c53699fe42fdc9da3553a7ac5fc9403b90 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 28 Mar 2012 03:15:10 +0200 Subject: [PATCH 192/488] add getNorthVector method --- apps/openmw/mwworld/world.cpp | 16 ++++++++++++++++ apps/openmw/mwworld/world.hpp | 3 +++ 2 files changed, 19 insertions(+) diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index a636ce2887..a1d5824917 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -701,6 +701,7 @@ namespace MWWorld void World::update (float duration) { + getNorthVector(mWorldScene->getCurrentCell()); mWorldScene->update (duration); mWeatherManager->update (duration); @@ -754,4 +755,19 @@ namespace MWWorld { return mRendering->getFader(); } + + Ogre::Vector2 World::getNorthVector(Ptr::CellStore* cell) + { + ESMS::CellRefList statics = cell->statics; + ESMS::LiveCellRef* ref = statics.find("northmarker"); + if (!ref) + { + std::cout << "No north marker found." << std::endl; + return Vector2(0, 1); + } + Ogre::SceneNode* node = ref->mData.getBaseNode(); + Vector3 dir = -node->_getDerivedOrientation().zAxis(); + Vector2 d = Vector2(dir.x, dir.z); + return d; + } } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 71cca3545d..2607c38300 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -129,6 +129,9 @@ namespace MWWorld bool isCellExterior() const; bool isCellQuasiExterior() const; + Ogre::Vector2 getNorthVector(Ptr::CellStore* cell); + ///< get north vector (OGRE coordinates) for given interior cell + Globals::Data& getGlobalVariable (const std::string& name); Globals::Data getGlobalVariable (const std::string& name) const; From 66b31d3d43f63b8c68d7025a90f38443d47e0afc Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Wed, 28 Mar 2012 12:04:42 +0400 Subject: [PATCH 193/488] Bug #229 (Fixed): On OS X Launcher cannot launch game if path to binary contains spaces --- apps/launcher/maindialog.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 49c0bd960e..b312357263 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -175,6 +175,7 @@ void MainDialog::play() QDir dir(QCoreApplication::applicationDirPath()); QString game = dir.absoluteFilePath("openmw"); QFile file(game); + game = "\"" + game + "\""; #else QString game = "./openmw"; QFile file(game); From 0c61f0d2942036d52a5703f9c17c968484d08dca Mon Sep 17 00:00:00 2001 From: gugus Date: Wed, 28 Mar 2012 11:45:46 +0200 Subject: [PATCH 194/488] test stuff --- apps/openmw/mwscript/docs/vmformat.txt | 3 +- apps/openmw/mwscript/statsextensions.cpp | 39 +++++++++++++++++ apps/openmw/mwworld/player.cpp | 53 +++++++++++++++++------- apps/openmw/mwworld/player.hpp | 14 ++++--- 4 files changed, 89 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index eab5bf846f..713ac43b06 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -123,4 +123,5 @@ op 0x200013d: FadeOut op 0x200013e: FadeTo op 0x200013f: GetCurrentWeather op 0x2000140: ChangeWeather -opcodes 0x2000141-0x3ffffff unused +op 0x2000141: OpPCJoinFaction +opcodes 0x2000142-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 0e97a39cf4..85ac54348a 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -8,6 +8,8 @@ #include #include "../mwworld/class.hpp" +#include "../mwworld/environment.hpp" +#include "../mwworld/player.hpp" #include "../mwmechanics/creaturestats.hpp" #include "../mwmechanics/npcstats.hpp" @@ -280,6 +282,36 @@ namespace MWScript } }; + class OpPCJoinFaction : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWScript::InterpreterContext& context + = static_cast (runtime.getContext()); + + std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + context.getEnvironment().mWorld->getPlayer().addFaction(factionID); + } + }; + + class OpPCRaiseRank : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWScript::InterpreterContext& context + = static_cast (runtime.getContext()); + + std::string factionID = runtime.getStringLiteral (runtime[0].mInteger); + runtime.pop(); + context.getEnvironment().mWorld->getPlayer().raiseRank(factionID); + } + }; + const int numberOfAttributes = 8; const int opcodeGetAttribute = 0x2000027; @@ -310,6 +342,8 @@ namespace MWScript const int opcodeSetSkillExplicit = 0x20000df; const int opcodeModSkill = 0x20000fa; const int opcodeModSkillExplicit = 0x2000115; + const int opcodePCJoinFaction = 0x2000141; + const int opcodePCRaiseRank = 0x2000142; void registerExtensions (Compiler::Extensions& extensions) { @@ -381,6 +415,8 @@ namespace MWScript extensions.registerInstruction (mod + skills[i], "l", opcodeModSkill+i, opcodeModSkillExplicit+i); } + extensions.registerInstruction("PCJoinFaction","S",opcodePCJoinFaction); + extensions.registerInstruction("PCRaiseRank","S",opcodePCRaiseRank); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -436,6 +472,9 @@ namespace MWScript interpreter.installSegment5 (opcodeModSkill+i, new OpModSkill (i)); interpreter.installSegment5 (opcodeModSkillExplicit+i, new OpModSkill (i)); } + + interpreter.installSegment5(opcodePCJoinFaction,new OpPCJoinFaction); + interpreter.installSegment5(opcodePCRaiseRank,new OpPCRaiseRank); } } } diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index 270ffa55ca..518b1d5198 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -90,11 +90,11 @@ namespace MWWorld MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); } - Player::Faction Player::getFaction(std::string faction) + Player::Faction Player::getFaction(std::string factionID) { for(std::list::iterator it = mFactions.begin(); it != mFactions.end();it++) { - if(it->name == faction) return *it; + if(it->name == factionID) return *it; } //faction was not found->dummy faction Player::Faction fact; @@ -105,41 +105,66 @@ namespace MWWorld return fact; } - void Player::addFaction(std::string faction) + void Player::addFaction(std::string factionID) { - if(getFaction(faction).name == "not found") + if(getFaction(factionID).name == "not found") { Player::Faction fact; - const ESM::Faction* eFact = mWorld.getStore().factions.find(faction); + const ESM::Faction* eFact = mWorld.getStore().factions.find(factionID); fact.expelled = false; fact.rank = 0; - fact.name = faction; + fact.name = eFact->name; fact.id = eFact->id; mFactions.push_back(fact); } } - int Player::getRank(std::string faction) + int Player::getRank(std::string factionID) { - Player::Faction fact = getFaction(faction); + Player::Faction fact = getFaction(factionID); return fact.rank; } - void Player::setRank(std::string faction,int rank) + void Player::setRank(std::string factionID,int rank) { - Player::Faction fact = getFaction(faction); + Player::Faction fact = getFaction(factionID); fact.rank = rank; } - bool Player::isExpelled(std::string faction) + void Player::raiseRank(std::string factionID) { - Player::Faction fact = getFaction(faction); + if(getFaction(factionID).name == "not found") + { + addFaction(factionID); + setRank(factionID,1); + } + else + { + setRank(factionID,getRank(factionID) + 1); + } + } + + void Player::lowerRank(std::string factionID) + { + if(getFaction(factionID).name == "not found") + { + std::cout << "cannot lower the rank of the player: faction no found. Faction: "<< factionID << std::endl; + } + else + { + setRank(factionID,getRank(factionID) - 1); + } + } + + bool Player::isExpelled(std::string factionID) + { + Player::Faction fact = getFaction(factionID); return fact.expelled; } - void Player::setExpelled(std::string faction,bool expelled) + void Player::setExpelled(std::string factionID,bool expelled) { - Player::Faction fact = getFaction(faction); + Player::Faction fact = getFaction(factionID); fact.expelled = expelled; } } diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index 8129c4d8ea..628a238266 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -119,15 +119,19 @@ namespace MWWorld void setAutoMove (bool enable); - void addFaction(std::string faction); + void addFaction(std::string factionID); - int getRank(std::string faction); + int getRank(std::string factionID); - void setRank(std::string faction,int rank); + void setRank(std::string factionID,int rank); - bool isExpelled(std::string faction); + void raiseRank(std::string factionID); - void setExpelled(std::string faction,bool expelled); + void lowerRank(std::string factionID); + + bool isExpelled(std::string factionID); + + void setExpelled(std::string factionID,bool expelled); void setLeftRight (int value); From 089c3409354dc776e7a921d4c0c34903c2322e22 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 03:48:51 -0700 Subject: [PATCH 195/488] Switch the map so the SoundPtr is used as a key --- apps/openmw/mwsound/soundmanager.cpp | 79 ++++++++++++++++------------ apps/openmw/mwsound/soundmanager.hpp | 2 +- 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index ce5f93acdb..a89c34ded0 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -114,11 +114,14 @@ namespace MWSound bool SoundManager::isPlaying(MWWorld::Ptr ptr, const std::string &id) const { - SoundMap::const_iterator snditer = mActiveSounds.find(std::make_pair(ptr, id)); - if(snditer == mActiveSounds.end()) - return false; - - return true; + SoundMap::const_iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) + { + if(snditer->second.first == ptr && snditer->second.second == id) + return snditer->first->isPlaying(); + snditer++; + } + return false; } @@ -181,7 +184,7 @@ namespace MWSound std::string filePath = std::string("Sound/")+filename; SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false); - mActiveSounds[std::make_pair(ptr, std::string("_say_sound"))] = sound; + mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); } catch(std::exception &e) { @@ -201,8 +204,9 @@ namespace MWSound try { std::string file = lookup(soundId, volume, min, max); + SoundPtr sound = mOutput->playSound(file, volume, pitch, loop); - mActiveSounds[std::make_pair(MWWorld::Ptr(), soundId)] = sound; + mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); } catch(std::exception &e) { @@ -221,7 +225,8 @@ namespace MWSound std::string file = lookup(soundId, volume, min, max); SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop); - mActiveSounds[std::make_pair((untracked?MWWorld::Ptr():ptr), soundId)] = sound; + mActiveSounds[sound] = (!untracked ? std::make_pair(ptr, soundId) : + std::make_pair(MWWorld::Ptr(), std::string())); } catch(std::exception &e) { @@ -231,12 +236,17 @@ namespace MWSound void SoundManager::stopSound3D(MWWorld::Ptr ptr, const std::string& soundId) { - SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(ptr, soundId)); - if(snditer == mActiveSounds.end()) - return; - - snditer->second->stop(); - mActiveSounds.erase(snditer); + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) + { + if(snditer->second.first == ptr && snditer->second.second == soundId) + { + snditer->first->stop(); + mActiveSounds.erase(snditer++); + } + else + snditer++; + } } void SoundManager::stopSound3D(MWWorld::Ptr ptr) @@ -244,9 +254,9 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(snditer->first.first == ptr) + if(snditer->second.first == ptr) { - snditer->second->stop(); + snditer->first->stop(); mActiveSounds.erase(snditer++); } else @@ -259,10 +269,10 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(snditer->first.first != MWWorld::Ptr() && - snditer->first.first.getCell() == cell) + if(snditer->second.first != MWWorld::Ptr() && + snditer->second.first.getCell() == cell) { - snditer->second->stop(); + snditer->first->stop(); mActiveSounds.erase(snditer++); } else @@ -272,12 +282,18 @@ namespace MWSound void SoundManager::stopSound(const std::string& soundId) { - SoundMap::iterator snditer = mActiveSounds.find(std::make_pair(MWWorld::Ptr(), soundId)); - if(snditer == mActiveSounds.end()) - return; - - snditer->second->stop(); - mActiveSounds.erase(snditer); + SoundMap::iterator snditer = mActiveSounds.begin(); + while(snditer != mActiveSounds.end()) + { + if(snditer->second.first == MWWorld::Ptr() && + snditer->second.second == soundId) + { + snditer->first->stop(); + mActiveSounds.erase(snditer++); + } + else + snditer++; + } } bool SoundManager::getSoundPlaying(MWWorld::Ptr ptr, const std::string& soundId) const @@ -287,16 +303,13 @@ namespace MWSound void SoundManager::updateObject(MWWorld::Ptr ptr) { + const ESM::Position &pos = ptr.getCellRef().pos; SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(snditer->first.first == ptr) - { - snditer->second->stop(); - mActiveSounds.erase(snditer++); - } - else - snditer++; + if(snditer->second.first == ptr) + snditer->first->update(pos.pos); + snditer++; } } @@ -385,7 +398,7 @@ namespace MWSound SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { - if(!snditer->second->isPlaying()) + if(!snditer->first->isPlaying()) mActiveSounds.erase(snditer++); else snditer++; diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 539e818885..5808b01421 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -42,7 +42,7 @@ namespace MWSound std::string mCurrentPlaylist; typedef std::pair PtrIDPair; - typedef std::map SoundMap; + typedef std::map SoundMap; SoundMap mActiveSounds; std::string lookup(const std::string &soundId, From c072babd17f5cfeec9f6608ab2725e30d44507dd Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 04:56:40 -0700 Subject: [PATCH 196/488] Better handle bad OpenAL source counts --- apps/openmw/mwsound/openal_output.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index bb083cb8b1..6e5806ee37 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -415,12 +415,12 @@ void OpenAL_Output::init(const std::string &devname) alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); throwALerror(); - ALCint maxmono, maxstereo; + ALCint maxmono=0, maxstereo=0; alcGetIntegerv(mDevice, ALC_MONO_SOURCES, 1, &maxmono); alcGetIntegerv(mDevice, ALC_STEREO_SOURCES, 1, &maxstereo); throwALCerror(mDevice); - mFreeSources.resize(std::min(maxmono+maxstereo, 256)); + mFreeSources.resize(std::min(maxmono+maxstereo, 256)); for(size_t i = 0;i < mFreeSources.size();i++) { ALuint src; From 7008bd2fe1e8b1e6e275bfd00d8025345af6b6f1 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 04:58:47 -0700 Subject: [PATCH 197/488] Store some sound properties in the Sound class --- apps/openmw/mwsound/sound.hpp | 12 +++++++++- apps/openmw/mwsound/soundmanager.cpp | 34 ++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index f9e7ab4278..a5617bc5a1 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -12,8 +12,18 @@ namespace MWSound Sound& operator=(const Sound &rhs); Sound(const Sound &rhs); + protected: + float mVolume; /* NOTE: Real volume = mVolume*mBaseVolume */ + float mBaseVolume; + float mMinDistance; + float mMaxDistance; + public: - Sound() { } + Sound() : mVolume(1.0f) + , mBaseVolume(1.0f) + , mMinDistance(20.0f) /* 1 * min_range_scale */ + , mMaxDistance(12750.0f) /* 255 * max_range_scale */ + { } virtual ~Sound() { } friend class OpenAL_Output; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index a89c34ded0..8e2ef3a278 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -140,6 +140,7 @@ namespace MWSound if(mMusic) mMusic->stop(); mMusic = mOutput->streamSound(filename, 0.4f, 1.0f); + mMusic->mBaseVolume = 0.4f; } catch(std::exception &e) { @@ -180,10 +181,13 @@ namespace MWSound try { // The range values are not tested - const ESM::Position &pos = ptr.getCellRef().pos; + float basevol = 1.0f; /* TODO: volume settings */ std::string filePath = std::string("Sound/")+filename; + const ESM::Position &pos = ptr.getCellRef().pos; + + SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, 20.0f, 12750.0f, false); + sound->mBaseVolume = basevol; - SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, 1.0f, 1.0f, 100.0f, 20000.0f, false); mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); } catch(std::exception &e) @@ -200,12 +204,18 @@ namespace MWSound void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) { - float min, max; try { - std::string file = lookup(soundId, volume, min, max); + float basevol = 1.0f; /* TODO: volume settings */ + float min, max; + std::string file = lookup(soundId, basevol, min, max); + + SoundPtr sound = mOutput->playSound(file, volume*basevol, pitch, loop); + sound->mVolume = volume; + sound->mBaseVolume = basevol; + sound->mMinDistance = min; + sound->mMaxDistance = max; - SoundPtr sound = mOutput->playSound(file, volume, pitch, loop); mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); } catch(std::exception &e) @@ -217,16 +227,22 @@ namespace MWSound void SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId, float volume, float pitch, bool loop, bool untracked) { - float min, max; try { // Look up the sound in the ESM data + float basevol = 1.0f; /* TODO: volume settings */ + float min, max; + std::string file = lookup(soundId, basevol, min, max); const ESM::Position &pos = ptr.getCellRef().pos; - std::string file = lookup(soundId, volume, min, max); - SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume, pitch, min, max, loop); + SoundPtr sound = mOutput->playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop); + sound->mVolume = volume; + sound->mBaseVolume = basevol; + sound->mMinDistance = min; + sound->mMaxDistance = max; + mActiveSounds[sound] = (!untracked ? std::make_pair(ptr, soundId) : - std::make_pair(MWWorld::Ptr(), std::string())); + std::make_pair(MWWorld::Ptr(), soundId)); } catch(std::exception &e) { From a3291ef360f3d16212252005f181c49e6efcef3e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 05:19:35 -0700 Subject: [PATCH 198/488] Add a sound method to update the volume --- apps/openmw/mwsound/openal_output.cpp | 16 ++++++++++++++++ apps/openmw/mwsound/sound.hpp | 1 + 2 files changed, 17 insertions(+) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 6e5806ee37..032d79ab84 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -89,6 +89,7 @@ public: virtual void stop(); virtual bool isPlaying(); + virtual void setVolume(float volume); virtual void update(const float *pos); void play(); @@ -252,6 +253,13 @@ bool OpenAL_SoundStream::isPlaying() return !mIsFinished; } +void OpenAL_SoundStream::setVolume(float volume) +{ + alSourcef(mSource, AL_GAIN, volume*mBaseVolume); + throwALerror(); + mVolume = volume; +} + void OpenAL_SoundStream::update(const float *pos) { alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); @@ -329,6 +337,7 @@ public: virtual void stop(); virtual bool isPlaying(); + virtual void setVolume(float volume); virtual void update(const float *pos); }; @@ -361,6 +370,13 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } +void OpenAL_Sound::setVolume(float volume) +{ + alSourcef(mSource, AL_GAIN, volume*mBaseVolume); + throwALerror(); + mVolume = volume; +} + void OpenAL_Sound::update(const float *pos) { alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index a5617bc5a1..b5d010aa00 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -7,6 +7,7 @@ namespace MWSound { virtual void stop() = 0; virtual bool isPlaying() = 0; + virtual void setVolume(float volume) = 0; virtual void update(const float *pos) = 0; Sound& operator=(const Sound &rhs); From 293f33914e78b8d8aeb44ff06a4cf487a194c85b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 05:35:51 -0700 Subject: [PATCH 199/488] Use a deque fpr OpenAL's free sources --- apps/openmw/mwsound/openal_output.cpp | 43 ++++++++++++++------------- apps/openmw/mwsound/openal_output.hpp | 8 ++--- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 032d79ab84..ea49eb2f20 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -436,19 +436,22 @@ void OpenAL_Output::init(const std::string &devname) alcGetIntegerv(mDevice, ALC_STEREO_SOURCES, 1, &maxstereo); throwALCerror(mDevice); - mFreeSources.resize(std::min(maxmono+maxstereo, 256)); - for(size_t i = 0;i < mFreeSources.size();i++) + try { - ALuint src; - alGenSources(1, &src); - if(alGetError() != AL_NO_ERROR) + ALCuint maxtotal = std::min(maxmono+maxstereo, 256); + for(size_t i = 0;i < maxtotal;i++) { - mFreeSources.resize(i); - break; + ALuint src = 0; + alGenSources(1, &src); + throwALerror(); + mFreeSources.push_back(src); } - mFreeSources[i] = src; } - if(mFreeSources.size() == 0) + catch(std::exception &e) + { + std::cout <<"Error: "<removeAll(); - if(!mFreeSources.empty()) + while(!mFreeSources.empty()) { - alDeleteSources(mFreeSources.size(), mFreeSources.data()); - mFreeSources.clear(); + alDeleteSources(1, &mFreeSources.front()); + mFreeSources.pop_front(); } mBufferRefs.clear(); @@ -584,8 +587,8 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float if(mFreeSources.empty()) fail("No free sources"); - src = mFreeSources.back(); - mFreeSources.pop_back(); + src = mFreeSources.front(); + mFreeSources.pop_front(); try { @@ -633,8 +636,8 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const float *pos, if(mFreeSources.empty()) fail("No free sources"); - src = mFreeSources.back(); - mFreeSources.pop_back(); + src = mFreeSources.front(); + mFreeSources.pop_front(); try { @@ -682,8 +685,8 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa if(mFreeSources.empty()) fail("No free sources"); - src = mFreeSources.back(); - mFreeSources.pop_back(); + src = mFreeSources.front(); + mFreeSources.pop_front(); try { @@ -726,8 +729,8 @@ SoundPtr OpenAL_Output::streamSound3D(const std::string &fname, const float *pos if(mFreeSources.empty()) fail("No free sources"); - src = mFreeSources.back(); - mFreeSources.pop_back(); + src = mFreeSources.front(); + mFreeSources.pop_front(); try { diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 2b0897bdbc..d288a62f39 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -21,8 +21,9 @@ namespace MWSound ALCdevice *mDevice; ALCcontext *mContext; - typedef std::vector IDVec; - IDVec mFreeSources; + typedef std::deque IDDq; + IDDq mFreeSources; + IDDq mUnusedBuffers; typedef std::map NameMap; NameMap mBufferCache; @@ -30,9 +31,6 @@ namespace MWSound typedef std::map IDRefMap; IDRefMap mBufferRefs; - typedef std::deque IDDq; - IDDq mUnusedBuffers; - uint64_t mBufferCacheMemSize; ALuint getBuffer(const std::string &fname); From be337ef7cc99bb5230105e8f19ba943dd06cb60c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Mar 2012 06:08:25 -0700 Subject: [PATCH 200/488] Return SoundPtr objects from playSound[3D] Note that each Sound object currently contains "precious" resources even after the sound is stopped. The reference should be reliquished as soon as it's no longer needed (the SoundManager will make sure the sound continues to play until it's finished). --- apps/openmw/mwsound/sound.hpp | 7 ++++--- apps/openmw/mwsound/soundmanager.cpp | 18 ++++++++++++------ apps/openmw/mwsound/soundmanager.hpp | 8 ++++---- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index b5d010aa00..2cbd48d961 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -5,9 +5,6 @@ namespace MWSound { class Sound { - virtual void stop() = 0; - virtual bool isPlaying() = 0; - virtual void setVolume(float volume) = 0; virtual void update(const float *pos) = 0; Sound& operator=(const Sound &rhs); @@ -20,6 +17,10 @@ namespace MWSound float mMaxDistance; public: + virtual void stop() = 0; + virtual bool isPlaying() = 0; + virtual void setVolume(float volume) = 0; + Sound() : mVolume(1.0f) , mBaseVolume(1.0f) , mMinDistance(20.0f) /* 1 * min_range_scale */ diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 8e2ef3a278..ad9e47f729 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -185,7 +185,8 @@ namespace MWSound std::string filePath = std::string("Sound/")+filename; const ESM::Position &pos = ptr.getCellRef().pos; - SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, 20.0f, 12750.0f, false); + SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, + 20.0f, 12750.0f, false); sound->mBaseVolume = basevol; mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); @@ -202,15 +203,16 @@ namespace MWSound } - void SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) + SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) { + SoundPtr sound; try { float basevol = 1.0f; /* TODO: volume settings */ float min, max; std::string file = lookup(soundId, basevol, min, max); - SoundPtr sound = mOutput->playSound(file, volume*basevol, pitch, loop); + sound = mOutput->playSound(file, volume*basevol, pitch, loop); sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; @@ -222,11 +224,14 @@ namespace MWSound { std::cout <<"Sound Error: "<playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop); + sound = mOutput->playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop); sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; @@ -248,6 +253,7 @@ namespace MWSound { std::cout <<"Sound Error: "< Date: Sat, 24 Mar 2012 14:46:48 +0100 Subject: [PATCH 201/488] ogre 1.8 fixes --- components/bsa/bsa_archive.cpp | 31 ++++++++++++++++++-- components/bsa/bsa_file.cpp | 4 +-- components/bsa/bsa_file.hpp | 4 +-- libs/openengine/bullet/BulletShapeLoader.cpp | 8 ++--- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 72d15944d5..80d92dd521 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -256,8 +256,12 @@ public: return DataStreamPtr(new Mangle2OgreStream(strm)); } +bool exists(const String& filename) { + return cexists(filename); +} + // Check if the file exists. - bool exists(const String& filename) { + bool cexists(const String& filename) const { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' || filename.at(filename.length() - 1) == '"' || filename.at(filename.length() - 1) == '>' || filename.at(filename.length() - 1) == ':' @@ -308,6 +312,29 @@ return arc.exists(passed.c_str()); located in BSAs. So instead we channel it through exists() and set up a single-element result list if the file is found. */ + FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, + bool dirs = false) const + { + FileInfoListPtr ptr = FileInfoListPtr(new FileInfoList()); + + // Check if the file exists (only works for single files - wild + // cards and recursive search isn't implemented.) + if(cexists(pattern)) + { + FileInfo fi; + fi.archive = this; + fi.filename = pattern; + // It apparently doesn't matter that we return bogus + // information + fi.path = ""; + fi.compressedSize = fi.uncompressedSize = 0; + + ptr->push_back(fi); + } + + return ptr; + } + FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, bool dirs = false) { @@ -315,7 +342,7 @@ return arc.exists(passed.c_str()); // Check if the file exists (only works for single files - wild // cards and recursive search isn't implemented.) - if(exists(pattern)) + if(cexists(pattern)) { FileInfo fi; fi.archive = this; diff --git a/components/bsa/bsa_file.cpp b/components/bsa/bsa_file.cpp index 95358a3628..f19606703c 100644 --- a/components/bsa/bsa_file.cpp +++ b/components/bsa/bsa_file.cpp @@ -148,9 +148,9 @@ void BSAFile::readHeader() } /// Get the index of a given file name, or -1 if not found -int BSAFile::getIndex(const char *str) +int BSAFile::getIndex(const char *str) const { - Lookup::iterator it; + Lookup::const_iterator it; it = lookup.find(str); if(it == lookup.end()) return -1; diff --git a/components/bsa/bsa_file.hpp b/components/bsa/bsa_file.hpp index f54a64d2af..95fac0f4d7 100644 --- a/components/bsa/bsa_file.hpp +++ b/components/bsa/bsa_file.hpp @@ -93,7 +93,7 @@ class BSAFile void readHeader(); /// Get the index of a given file name, or -1 if not found - int getIndex(const char *str); + int getIndex(const char *str) const; public: @@ -119,7 +119,7 @@ class BSAFile */ /// Check if a file exists - bool exists(const char *file) { return getIndex(file) != -1; } + bool exists(const char *file) const { return getIndex(file) != -1; } /** Open a file contained in the archive. Throws an exception if the file doesn't exist. diff --git a/libs/openengine/bullet/BulletShapeLoader.cpp b/libs/openengine/bullet/BulletShapeLoader.cpp index 4593bad528..59a414f301 100644 --- a/libs/openengine/bullet/BulletShapeLoader.cpp +++ b/libs/openengine/bullet/BulletShapeLoader.cpp @@ -63,17 +63,17 @@ size_t BulletShape::calculateSize() const //============================================================================================================= -template<> BulletShapeManager *Ogre::Singleton::ms_Singleton = 0; +template<> BulletShapeManager *Ogre::Singleton::msSingleton = 0; BulletShapeManager *BulletShapeManager::getSingletonPtr() { - return ms_Singleton; + return msSingleton; } BulletShapeManager &BulletShapeManager::getSingleton() { - assert(ms_Singleton); - return(*ms_Singleton); + assert(msSingleton); + return(*msSingleton); } BulletShapeManager::BulletShapeManager() From f86d53636d0611f9fd45c60f7507b69d6671db81 Mon Sep 17 00:00:00 2001 From: Lukasz Gromanowski Date: Wed, 28 Mar 2012 21:36:38 +0200 Subject: [PATCH 202/488] Issue #225: Correction to commit fa4c4b8. Correction to commit fa4c4b8 - memeber mChanged should be set to true, otherwise the map won't display if the game is started in (0, 0) cell. --- apps/openmw/mwgui/layouts.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index f2c650fb39..de74214eef 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -280,7 +280,7 @@ LocalMapBase::LocalMapBase() , mInterior(false) , mLocalMap(NULL) , mPrefix() - , mChanged(false) + , mChanged(true) , mLayout(NULL) { } From f2075c7f4fb3caebd7c8d0156ef55f39050719e9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Wed, 28 Mar 2012 21:40:06 +0200 Subject: [PATCH 203/488] temporarily silence warnigns in OGRE headers --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c531e475d..3273cfe0a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,7 +160,7 @@ endif (APPLE) # Dependencies -# Fix for not visible pthreads functions for linker with glibc 2.15 +# Fix for not visible pthreads functions for linker with glibc 2.15 if (UNIX AND NOT APPLE) find_package (Threads) endif() @@ -257,6 +257,9 @@ endif (APPLE) if (CMAKE_COMPILER_IS_GNUCC) add_definitions (-Wall -Wextra -Wno-unused-parameter -Wno-reorder) + # Silence warnings in OGRE headers. Remove once OGRE got fixed! + add_definitions (-Wno-ignored-qualifiers) + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if ("${GCC_VERSION}" VERSION_GREATER 4.6 OR "${GCC_VERSION}" VERSION_EQUAL 4.6) @@ -332,7 +335,7 @@ if(WIN32) SET(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO}) SET(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE}) SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW;esmtool;Esmtool;omwlauncher;OpenMW Launcher") - set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Readme.lnk' '\$INSTDIR\\\\readme.txt'") + set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '\$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Readme.lnk' '\$INSTDIR\\\\readme.txt'") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/readme.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${OpenMW_SOURCE_DIR}/GPL3.txt") SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") From 47c3e92db1b3264112657ea6f10178091fe0cf37 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 28 Mar 2012 21:42:41 +0200 Subject: [PATCH 204/488] removed the unused ray scene query --- apps/openmw/mwrender/renderingmanager.cpp | 3 --- apps/openmw/mwrender/renderingmanager.hpp | 1 - 2 files changed, 4 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 2dc35d8c84..00b43cf9fe 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -46,9 +46,6 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const mMwRoot->pitch(Degree(-90)); mObjects.setMwRoot(mMwRoot); mActors.setMwRoot(mMwRoot); - - //used to obtain ingame information of ogre objects (which are faced or selected) - mRaySceneQuery = mRendering.getScene()->createRayQuery(Ray()); Ogre::SceneNode *playerNode = mMwRoot->createChildSceneNode ("player"); playerNode->pitch(Degree(90)); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 569447bca3..edbc9aff27 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -158,7 +158,6 @@ class RenderingManager: private RenderingInterface { /// that the OGRE coordinate system matches that used internally in /// Morrowind. Ogre::SceneNode *mMwRoot; - Ogre::RaySceneQuery *mRaySceneQuery; OEngine::Physic::PhysicEngine* mPhysicsEngine; From e5a19209a4a8580dba93ca9560617e7dccf2306b Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 00:05:48 +0200 Subject: [PATCH 205/488] remove the timeout stuff --- apps/openmw/mwrender/occlusionquery.cpp | 13 ++----------- apps/openmw/mwrender/occlusionquery.hpp | 4 ---- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwrender/occlusionquery.cpp b/apps/openmw/mwrender/occlusionquery.cpp index 2c184c3451..228d8a4990 100644 --- a/apps/openmw/mwrender/occlusionquery.cpp +++ b/apps/openmw/mwrender/occlusionquery.cpp @@ -12,7 +12,7 @@ using namespace Ogre; OcclusionQuery::OcclusionQuery(OEngine::Render::OgreRenderer* renderer, SceneNode* sunNode) : mSunTotalAreaQuery(0), mSunVisibleAreaQuery(0), mSingleObjectQuery(0), mActiveQuery(0), mDoQuery(0), mSunVisibility(0), mQuerySingleObjectStarted(false), mTestResult(false), - mQuerySingleObjectRequested(false), mResponding(true), mDelay(0), mWasVisible(false), mObjectWasVisible(false) + mQuerySingleObjectRequested(false), mWasVisible(false), mObjectWasVisible(false) { mRendering = renderer; mSunNode = sunNode; @@ -94,7 +94,7 @@ OcclusionQuery::~OcclusionQuery() bool OcclusionQuery::supported() { //if (!mResponding) std::cout << "Occlusion query timed out" << std::endl; - return mSupported && mResponding; + return mSupported; } void OcclusionQuery::notifyRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, @@ -167,9 +167,6 @@ void OcclusionQuery::update(float duration) { if (!mSupported) return; - mDelay += duration; - if (mDelay >= 2) mResponding = false; - mWasVisible = false; mObjectWasVisible = false; @@ -189,9 +186,6 @@ void OcclusionQuery::update(float duration) if (!mSunTotalAreaQuery->isStillOutstanding() && !mSunVisibleAreaQuery->isStillOutstanding()) { - mDelay = 0; - mResponding = true; - unsigned int totalPixels; unsigned int visiblePixels; @@ -213,9 +207,6 @@ void OcclusionQuery::update(float duration) } if (mQuerySingleObjectStarted && !mSingleObjectQuery->isStillOutstanding()) { - mDelay = 0; - mResponding = true; - unsigned int result; mSingleObjectQuery->pullOcclusionQuery(&result); diff --git a/apps/openmw/mwrender/occlusionquery.hpp b/apps/openmw/mwrender/occlusionquery.hpp index b3e5442cfe..e81358eb6c 100644 --- a/apps/openmw/mwrender/occlusionquery.hpp +++ b/apps/openmw/mwrender/occlusionquery.hpp @@ -72,10 +72,6 @@ namespace MWRender bool mWasVisible; bool mObjectWasVisible; - bool mResponding; - - float mDelay; - bool mTestResult; bool mSupported; From 4488be33cef2182ca17a6bfac0f2b062181b9393 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Thu, 29 Mar 2012 00:12:34 +0200 Subject: [PATCH 206/488] Added missing slash to launcher CMakeLists.txt --- apps/launcher/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt index fd736e0112..ccefee1ee8 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/launcher/CMakeLists.txt @@ -95,5 +95,5 @@ else() "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.qss") configure_file(${CMAKE_SOURCE_DIR}/files/launcher.cfg - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}launcher.cfg") + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/launcher.cfg") endif() From 20f976ddc7aaa894aba85afc4d3776cc8cd8a874 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Thu, 29 Mar 2012 03:02:26 +0400 Subject: [PATCH 207/488] probably openal initialization fix --- apps/openmw/mwsound/openal_output.cpp | 37 ++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 5122b3a5a5..97a3996896 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -426,6 +426,12 @@ void OpenAL_Output::init(const std::string &devname) else std::cout << "Opened \""< attrs(size); +// alcGetIntegerv( mDevice, ALC_ALL_ATTRIBUTES, size, &attrs[0] ); +// for(int i=0; i(maxmono+maxstereo, 256); - for(size_t i = 0;i < maxtotal;i++) + ALCuint maxtotal = 256;//std::min(maxmono+maxstereo, 256); + bool stop = false; + for(size_t i = 0;i < maxtotal && !stop;i++) { ALuint src = 0; alGenSources(1, &src); - throwALerror(); - mFreeSources.push_back(src); + + ALenum err = alGetError(); + if(err != AL_NO_ERROR) + { + stop = true; + std::cout << "Stopping source generation at " << i << std::endl; + } + else + { + mFreeSources.push_back(src); + } + //throwALerror(); } } catch(std::exception &e) From 0d163d76ab2aca24a092f54a940132c17bf38679 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 03:59:24 +0200 Subject: [PATCH 208/488] Replaced some messy code with some differently messy code, this one at least seems to work --- components/bsa/bsa_archive.cpp | 158 ++++++++++++++------------------- 1 file changed, 69 insertions(+), 89 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 80d92dd521..0ba93d4ad2 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -45,6 +45,32 @@ struct ciLessBoost : std::binary_function } }; +struct mrComparer +{ +private: + int m_start, m_size; + + bool comparePortion(std::string file1, std::string file2, int start, int size) const + { + for(int i = start; i < start+size; i++) + { + char one = tolower(file1.at(i)); + char two = tolower(file2.at(i)); + if(one != two) + return (one < two); + } + return true; + } + +public: + mrComparer(int start, int size) : m_start(start), m_size(size) { } + + bool operator() (const std::string& first, const std::string& other) + { + return comparePortion(first, other, m_start, m_size); + } +}; + static bool fsstrict = false; /// An OGRE Archive wrapping a BSAFile archive @@ -55,16 +81,46 @@ class DirArchive: public Ogre::FileSystemArchive std::map, ciLessBoost> m; unsigned int cutoff; - bool comparePortion(std::string file1, std::string file2, int start, int size) const + bool findFile(const String& filename, std::string& copy) const { - for(int i = start; i < start+size; i++) + copy = filename; + + std::replace(copy.begin(), copy.end(), '\\', '/'); + + if(copy.at(0) == '/') + copy.erase(0, 1); + + if(fsstrict == true) + return true; + + std::string folder; + int delimiter = 0; + size_t lastSlash = copy.rfind('/'); + if (lastSlash != std::string::npos) { - char one = file1.at(i); - char two = file2.at(i); - if(tolower(one) != tolower(two) ) - return false; + folder = copy.substr(0, lastSlash); + delimiter = lastSlash+1; } - return true; + + std::vector current; + { + std::map,ciLessBoost>::const_iterator found = m.find(folder); + if (found == m.end()) + { + std::replace(folder.begin(), folder.end(), '/', '\\'); + found = m.find(folder); + } + + current = found->second; + } + + mrComparer comp(delimiter, copy.size() - delimiter-1); + std::vector::iterator found = std::lower_bound(current.begin(), current.end(), copy, comp); + + if (found != current.end() && !(comp(copy, current.front()))) + return true; + + return false; } public: @@ -120,97 +176,21 @@ class DirArchive: public Ogre::FileSystemArchive void unload() {} bool exists(const String& filename) { - std::string copy = filename; - - - - for (unsigned int i = 0; i < filename.size(); i++) - { - if(copy.at(i) == '\\' ){ - copy.replace(i, 1, "/"); - } - } - - - if(copy.at(0) == '\\' || copy.at(0) == '/') - { - copy.erase(0, 1); - } - if(fsstrict == true) - { - //std::cout << "fsstrict " << copy << "\n"; + std::string copy; + + if (findFile(filename, copy)) return FileSystemArchive::exists(copy); - } - - - int last = copy.size() - 1; - int i = last; - - for (;last >= 0; i--) - { - if(copy.at(i) == '/' || copy.at(i) == '\\') - break; - } - - std::string folder = copy.substr(0, i); //folder with no slash - - std::vector& current = m[folder]; - - for(std::vector::iterator iter = current.begin(); iter != current.end(); iter++) - { - if(comparePortion(*iter, copy, i + 1, copy.size() - i -1) == true){ - return FileSystemArchive::exists(*iter); - } - } - return false; } DataStreamPtr open(const String& filename, bool readonly = true) const { - std::map, ciLessBoost> mlocal = m; - std::string copy = filename; + std::string copy; - - - for (unsigned int i = 0; i < filename.size(); i++) - { - if(copy.at(i) == '\\' ){ - copy.replace(i, 1, "/"); - } - } - - - if(copy.at(0) == '\\' || copy.at(0) == '/') - { - copy.erase(0, 1); - } - - if(fsstrict == true) - { + if (findFile(filename, copy)) return FileSystemArchive::open(copy, readonly); - } - - - int last = copy.size() - 1; - int i = last; - - for (;last >= 0; i--) - { - if(copy.at(i) == '/' || copy.at(i) == '\\') - break; - } - - std::string folder = copy.substr(0, i); //folder with no slash - std::vector current = mlocal[folder]; - - for(std::vector::iterator iter = current.begin(); iter != current.end(); iter++) - { - if(comparePortion(*iter, copy, i + 1, copy.size() - i -1) == true){ - return FileSystemArchive::open(*iter, readonly); - } - } + DataStreamPtr p; return p; } From 42c5d515e652e43757f6e0c2e12d25d24fae6066 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 04:50:40 +0200 Subject: [PATCH 209/488] fixed interior water level --- components/esm/loadcell.cpp | 3 +-- components/esm/loadcell.hpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/components/esm/loadcell.cpp b/components/esm/loadcell.cpp index 80a0f3e5a4..6bc12c5cb1 100644 --- a/components/esm/loadcell.cpp +++ b/components/esm/loadcell.cpp @@ -22,8 +22,7 @@ void Cell::load(ESMReader &esm) { // Interior cells - if (esm.isNextSub("INTV") || esm.isNextSub("WHGT")) - esm.getHT(water); + esm.getHNT(water, "WHGT", 4); // Quasi-exterior cells have a region (which determines the // weather), pure interior cells have ambient lighting diff --git a/components/esm/loadcell.hpp b/components/esm/loadcell.hpp index 671f702cab..57d495e947 100644 --- a/components/esm/loadcell.hpp +++ b/components/esm/loadcell.hpp @@ -114,7 +114,7 @@ struct Cell ESM_Context context; // File position DATAstruct data; AMBIstruct ambi; - int water; // Water level + float water; // Water level int mapColor; void load(ESMReader &esm); From 71cb85dbc48118f49fc987be053e751d2b7a43b6 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 04:54:33 +0200 Subject: [PATCH 210/488] Performance enhancment and minor copy-paste fix. --- components/bsa/bsa_archive.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 0ba93d4ad2..3981780bcb 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -50,7 +50,7 @@ struct mrComparer private: int m_start, m_size; - bool comparePortion(std::string file1, std::string file2, int start, int size) const + bool comparePortion(const std::string& file1, const std::string& file2, int start, int size) const { for(int i = start; i < start+size; i++) { @@ -59,7 +59,7 @@ private: if(one != two) return (one < two); } - return true; + return false; } public: From 39b3afb98f3fd67da7183acdf64df71805893361 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 05:03:34 +0200 Subject: [PATCH 211/488] use camera height instead of player height for underwater check --- apps/openmw/mwrender/renderingmanager.cpp | 6 ++++-- apps/openmw/mwrender/renderingmanager.hpp | 2 +- apps/openmw/mwworld/world.cpp | 1 - 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 65665350f2..4e8118c02f 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -154,6 +154,8 @@ void RenderingManager::update (float duration){ mRendering.update(duration); mLocalMap->updatePlayer( mRendering.getCamera()->getRealPosition(), mRendering.getCamera()->getRealDirection() ); + + checkUnderwater(); } void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){ if(store->cell->data.flags & store->cell->HasWater){ @@ -311,9 +313,9 @@ void RenderingManager::toggleLight() setAmbientMode(); } -void RenderingManager::checkUnderwater(float y){ +void RenderingManager::checkUnderwater(){ if(mWater){ - mWater->checkUnderwater(y); + mWater->checkUnderwater( mRendering.getCamera()->getRealPosition().y ); } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 12d9cb3e9a..8800707171 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -91,7 +91,7 @@ class RenderingManager: private RenderingInterface { void moveObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& position); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); - void checkUnderwater(float y); + void checkUnderwater(); /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index f0b846c5aa..63d54ea92b 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -535,7 +535,6 @@ namespace MWWorld { //std::cout << "X:" << ptr.getRefData().getPosition().pos[0] << " Z: " << ptr.getRefData().getPosition().pos[1] << "\n"; - mRendering->checkUnderwater( ptr.getRefData().getPosition().pos[2]); Ptr::CellStore *currentCell = mWorldScene->getCurrentCell(); if (currentCell) { From f497813043cd62a96e2ac7c1180529ea6eba9c9b Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 15:49:24 +0200 Subject: [PATCH 212/488] formatting, added Water::setHeight --- apps/openmw/mwrender/renderingmanager.cpp | 6 + apps/openmw/mwrender/renderingmanager.hpp | 7 +- apps/openmw/mwrender/water.cpp | 152 +++++++++++----------- apps/openmw/mwrender/water.hpp | 2 +- apps/openmw/mwworld/world.cpp | 6 + apps/openmw/mwworld/world.hpp | 2 + 6 files changed, 91 insertions(+), 84 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4e8118c02f..4b197205af 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -171,6 +171,12 @@ void RenderingManager::waterAdded (MWWorld::Ptr::CellStore *store){ } +void RenderingManager::setWaterHeight(const float height) +{ + if (mWater) + mWater->setHeight(height); +} + void RenderingManager::skyEnable () { if(mSkyManager) diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 8800707171..8a6a7aed1b 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -92,6 +92,7 @@ class RenderingManager: private RenderingInterface { void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); void checkUnderwater(); + void setWaterHeight(const float height); /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); @@ -141,17 +142,13 @@ class RenderingManager: private RenderingInterface { SkyManager* mSkyManager; - Ogre::Camera* camera; - MWRender::Water *mWater; + MWRender::Water *mWater; - - OEngine::Render::OgreRenderer &mRendering; MWRender::Objects mObjects; MWRender::Actors mActors; - // 0 normal, 1 more bright, 2 max int mAmbientMode; diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 3075041577..c77a990066 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -1,92 +1,88 @@ #include "water.hpp" -namespace MWRender { - Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) { - try { - Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); - } catch(...) { +namespace MWRender +{ + Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) + { + try + { + Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + } catch(...) {} + + mTop = cell->water; + + mIsUnderwater = false; + + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); + + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + + + mWater = mSceneManager->createEntity("water"); + + mWater->setMaterialName("Examples/Water0"); + + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mWaterNode->setPosition(0, mTop, 0); + + if(!(cell->data.flags & cell->Interior)) + { + mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); + } + mWaterNode->attachObject(mWater); } - mTop = cell->water; - - - mIsUnderwater = false; - //mCamera->addListener(this); - - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); - - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); - - - mWater = mSceneManager->createEntity("water"); - - mWater->setMaterialName("Examples/Water0"); - - - - - mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); - mWaterNode->setPosition(0, mTop, 0); - - - if(!(cell->data.flags & cell->Interior)) - { - mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); - } - mWaterNode->attachObject(mWater); - - } - Water::~Water() { - Ogre::MeshManager::getSingleton().remove("water"); - - mWaterNode->detachObject(mWater); - mSceneManager->destroyEntity(mWater); - mSceneManager->destroySceneNode(mWaterNode); - - - Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); - } + Water::~Water() + { + Ogre::MeshManager::getSingleton().remove("water"); + + mWaterNode->detachObject(mWater); + mSceneManager->destroyEntity(mWater); + mSceneManager->destroySceneNode(mWaterNode); + + Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); + } + + void Water::changeCell(const ESM::Cell* cell) + { + mTop = cell->water; - void Water::changeCell(const ESM::Cell* cell){ - mTop = cell->water; - - - if(!(cell->data.flags & cell->Interior)) mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); else - mWaterNode->setPosition(0, mTop, 0); - } - - - - void Water::checkUnderwater(float y) { - - if (mIsUnderwater && y > mTop) { - try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); - } catch(...) { - } - mIsUnderwater = false; - } - - if (!mIsUnderwater && y < mTop) { - try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); - } catch(...) { - } - mIsUnderwater = true; + setHeight(mTop); + } + + void Water::setHeight(const float height) + { + mTop = height; + mWaterNode->setPosition(0, height, 0); } - } - - Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY){ - Ogre::Vector3 out = Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); - - return out; - } + void Water::checkUnderwater(float y) + { + if (mIsUnderwater && y > mTop) + { + try { + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + } catch(...) {} + mIsUnderwater = false; + } + if (!mIsUnderwater && y < mTop) + { + try { + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); + } catch(...) {} + mIsUnderwater = true; + } + } + + Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) + { + return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); + } } diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index 48b0af9847..fc644e265c 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -35,7 +35,7 @@ namespace MWRender { void checkUnderwater(float y); void changeCell(const ESM::Cell* cell); - + void setHeight(const float height); }; } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 63d54ea92b..c62e2e05d9 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -755,4 +755,10 @@ namespace MWWorld { return mRendering->getFader(); } + + void World::setWaterHeight(const float height) + { + mRendering->setWaterHeight(height); + } + } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 71cca3545d..5025fded4c 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -112,6 +112,8 @@ namespace MWWorld Ptr::CellStore *getExterior (int x, int y); Ptr::CellStore *getInterior (const std::string& name); + + void setWaterHeight(const float height); void adjustSky(); From 5a19d4ec45531f6d92238e323168868f18c243ae Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 15:50:15 +0200 Subject: [PATCH 213/488] implement water script functions and save water height in CellStore --- apps/openmw/mwscript/cellextensions.cpp | 57 +++++++++++++++++++++++++ apps/openmw/mwscript/docs/vmformat.txt | 5 ++- components/esm_store/cell_store.hpp | 7 ++- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwscript/cellextensions.cpp b/apps/openmw/mwscript/cellextensions.cpp index bb52632032..dec9e96456 100644 --- a/apps/openmw/mwscript/cellextensions.cpp +++ b/apps/openmw/mwscript/cellextensions.cpp @@ -133,11 +133,62 @@ namespace MWScript } }; + class OpGetWaterLevel : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context + = static_cast (runtime.getContext()); + + const ESM::Cell *cell = context.getWorld().getPlayer().getPlayer().getCell()->cell; + runtime.push (cell->water); + } + }; + + class OpSetWaterLevel : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context + = static_cast (runtime.getContext()); + + Interpreter::Type_Float level = runtime[0].mFloat; + + MWWorld::Ptr::CellStore *cell = context.getWorld().getPlayer().getPlayer().getCell(); + cell->mWaterLevel = level; + context.getEnvironment().mWorld->setWaterHeight(cell->mWaterLevel); + } + }; + + class OpModWaterLevel : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context + = static_cast (runtime.getContext()); + + Interpreter::Type_Float level = runtime[0].mFloat; + + MWWorld::Ptr::CellStore *cell = context.getWorld().getPlayer().getPlayer().getCell(); + cell->mWaterLevel +=level; + context.getEnvironment().mWorld->setWaterHeight(cell->mWaterLevel); + } + }; + const int opcodeCellChanged = 0x2000000; const int opcodeCOC = 0x2000026; const int opcodeCOE = 0x200008e; const int opcodeGetInterior = 0x2000131; const int opcodeGetPCCell = 0x2000136; + const int opcodeGetWaterLevel = 0x2000141; + const int opcodeSetWaterLevel = 0x2000142; + const int opcodeModWaterLevel = 0x2000143; void registerExtensions (Compiler::Extensions& extensions) { @@ -146,8 +197,11 @@ namespace MWScript extensions.registerInstruction ("centeroncell", "S", opcodeCOC); extensions.registerInstruction ("coe", "ll", opcodeCOE); extensions.registerInstruction ("centeronexterior", "ll", opcodeCOE); + extensions.registerInstruction ("setwaterlevel", "f", opcodeSetWaterLevel); + extensions.registerInstruction ("modwaterlevel", "f", opcodeModWaterLevel); extensions.registerFunction ("getinterior", 'l', "", opcodeGetInterior); extensions.registerFunction ("getpccell", 'l', "c", opcodeGetPCCell); + extensions.registerFunction ("getwaterlevel", 'f', "", opcodeGetWaterLevel); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -157,6 +211,9 @@ namespace MWScript interpreter.installSegment5 (opcodeCOE, new OpCOE); interpreter.installSegment5 (opcodeGetInterior, new OpGetInterior); interpreter.installSegment5 (opcodeGetPCCell, new OpGetPCCell); + interpreter.installSegment5 (opcodeGetWaterLevel, new OpGetWaterLevel); + interpreter.installSegment5 (opcodeSetWaterLevel, new OpSetWaterLevel); + interpreter.installSegment5 (opcodeModWaterLevel, new OpModWaterLevel); } } } diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index eab5bf846f..64bd43c6c7 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -123,4 +123,7 @@ op 0x200013d: FadeOut op 0x200013e: FadeTo op 0x200013f: GetCurrentWeather op 0x2000140: ChangeWeather -opcodes 0x2000141-0x3ffffff unused +op 0x2000141: GetWaterLevel +op 0x2000142: SetWaterLevel +op 0x2000143: ModWaterLevel +opcodes 0x2000142-0x3ffffff unused diff --git a/components/esm_store/cell_store.hpp b/components/esm_store/cell_store.hpp index c4bcf84d81..0244122916 100644 --- a/components/esm_store/cell_store.hpp +++ b/components/esm_store/cell_store.hpp @@ -95,12 +95,17 @@ namespace ESMS State_Unloaded, State_Preloaded, State_Loaded }; - CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded) {} + CellStore (const ESM::Cell *cell_) : cell (cell_), mState (State_Unloaded) + { + mWaterLevel = cell->water; + } const ESM::Cell *cell; State mState; std::vector mIds; + float mWaterLevel; + // Lists for each individual object type CellRefList activators; CellRefList potions; From 2f096e131da6f7122ddfeaeda2348aea2b0aef78 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 16:23:02 +0200 Subject: [PATCH 214/488] throw exception if water level is attempted to be modified in exterior --- apps/openmw/mwscript/cellextensions.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/openmw/mwscript/cellextensions.cpp b/apps/openmw/mwscript/cellextensions.cpp index dec9e96456..155393f9e6 100644 --- a/apps/openmw/mwscript/cellextensions.cpp +++ b/apps/openmw/mwscript/cellextensions.cpp @@ -159,6 +159,10 @@ namespace MWScript Interpreter::Type_Float level = runtime[0].mFloat; MWWorld::Ptr::CellStore *cell = context.getWorld().getPlayer().getPlayer().getCell(); + + if (!(cell->cell->data.flags & ESM::Cell::Interior)) + throw std::runtime_error("Can't set water level in exterior cell"); + cell->mWaterLevel = level; context.getEnvironment().mWorld->setWaterHeight(cell->mWaterLevel); } @@ -176,6 +180,10 @@ namespace MWScript Interpreter::Type_Float level = runtime[0].mFloat; MWWorld::Ptr::CellStore *cell = context.getWorld().getPlayer().getPlayer().getCell(); + + if (!(cell->cell->data.flags & ESM::Cell::Interior)) + throw std::runtime_error("Can't set water level in exterior cell"); + cell->mWaterLevel +=level; context.getEnvironment().mWorld->setWaterHeight(cell->mWaterLevel); } From f45c6509756c77f0b33087338d80e3ef470e10b7 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 16:47:59 +0200 Subject: [PATCH 215/488] bounds fix --- apps/openmw/mwrender/objects.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 1c2873b4e7..906e7e0a30 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -98,6 +98,13 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) if (ptr.getTypeName().find("Door") != std::string::npos) small = false; + if (mBounds.find(ptr.getCell()) == mBounds.end()) + mBounds[ptr.getCell()] = Ogre::AxisAlignedBox::BOX_NULL; + + Ogre::AxisAlignedBox bounds = ent->getBoundingBox(); + bounds.scale(insert->getScale()); + mBounds[ptr.getCell()].merge(bounds); + if(!mIsStatic) { insert->attachObject(ent); @@ -142,10 +149,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) // - there will be too many batches. sg->setRegionDimensions(Ogre::Vector3(2500,2500,2500)); - mBounds[ptr.getCell()].merge(ent->getBoundingBox()); - sg->addEntity(ent,insert->_getDerivedPosition(),insert->_getDerivedOrientation(),insert->_getDerivedScale()); - mBounds[ptr.getCell()].merge(insert->_getDerivedPosition()); mRenderer.getScene()->destroyEntity(ent); } From 19c801f53870d7c75a1bafdff65edff840ce0b99 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 16:56:30 +0200 Subject: [PATCH 216/488] disabled rendering distance for now --- apps/openmw/mwrender/objects.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 906e7e0a30..5594d623e1 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -92,11 +92,14 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) extents *= insert->getScale(); float size = std::max(std::max(extents.x, extents.y), extents.z); +/* bool small = (size < 250); /// \todo config value // do not fade out doors. that will cause holes and look stupid if (ptr.getTypeName().find("Door") != std::string::npos) small = false; +*/ + const bool small = false; if (mBounds.find(ptr.getCell()) == mBounds.end()) mBounds[ptr.getCell()] = Ogre::AxisAlignedBox::BOX_NULL; From 37e6db69d83a82892be8463b36daea5926b131cc Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 17:07:59 +0200 Subject: [PATCH 217/488] fix --- apps/openmw/mwworld/world.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index a1d5824917..5c661b4a24 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -766,7 +766,7 @@ namespace MWWorld return Vector2(0, 1); } Ogre::SceneNode* node = ref->mData.getBaseNode(); - Vector3 dir = -node->_getDerivedOrientation().zAxis(); + Vector3 dir = node->_getDerivedOrientation().yAxis(); Vector2 d = Vector2(dir.x, dir.z); return d; } From e22ae7c84045700d3f0f5cad89a4139e039f3829 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 17:30:13 +0200 Subject: [PATCH 218/488] bounds fix (again) --- apps/openmw/mwrender/objects.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 5594d623e1..c8727c7c2e 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -88,11 +88,11 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) NifOgre::NIFLoader::load(mesh); Ogre::Entity *ent = mRenderer.getScene()->createEntity(mesh); +/* Ogre::Vector3 extents = ent->getBoundingBox().getSize(); extents *= insert->getScale(); float size = std::max(std::max(extents.x, extents.y), extents.z); -/* bool small = (size < 250); /// \todo config value // do not fade out doors. that will cause holes and look stupid @@ -105,6 +105,11 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) mBounds[ptr.getCell()] = Ogre::AxisAlignedBox::BOX_NULL; Ogre::AxisAlignedBox bounds = ent->getBoundingBox(); + bounds = Ogre::AxisAlignedBox( + insert->_getDerivedPosition() + bounds.getMinimum(), + insert->_getDerivedPosition() + bounds.getMaximum() + ); + bounds.scale(insert->getScale()); mBounds[ptr.getCell()].merge(bounds); From ce38876a74b09195d6d20dd82d49e944318b4080 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 17:31:55 +0200 Subject: [PATCH 219/488] Oops, that could've crashed horribly --- components/bsa/bsa_archive.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 3981780bcb..9a325d1605 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -111,7 +111,8 @@ class DirArchive: public Ogre::FileSystemArchive found = m.find(folder); } - current = found->second; + if (found != m.end()) + current = found->second; } mrComparer comp(delimiter, copy.size() - delimiter-1); From 10b4c1d9046ff9e7ad0542709c25dc6bd6ef2827 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 29 Mar 2012 18:04:52 +0200 Subject: [PATCH 220/488] silenced a warning --- apps/openmw/mwrender/objects.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 5594d623e1..6b7956c3f2 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -90,7 +90,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) Ogre::Vector3 extents = ent->getBoundingBox().getSize(); extents *= insert->getScale(); - float size = std::max(std::max(extents.x, extents.y), extents.z); +// float size = std::max(std::max(extents.x, extents.y), extents.z); /* bool small = (size < 250); /// \todo config value @@ -143,7 +143,7 @@ void Objects::insertMesh (const MWWorld::Ptr& ptr, const std::string& mesh) else sg = mStaticGeometry[ptr.getCell()]; } - + // This specifies the size of a single batch region. // If it is set too high: // - there will be problems choosing the correct lights @@ -246,7 +246,7 @@ void Objects::removeCell(MWWorld::Ptr::CellStore* store) mRenderer.getScene()->destroyStaticGeometry (sg); sg = 0; } - + if(mBounds.find(store) != mBounds.end()) mBounds.erase(store); } From 35f40b99adb5cd6b04499b5c78f8909eccad27a4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 18:10:01 +0200 Subject: [PATCH 221/488] remove the bounding box hack, not needed because calculation is correct now --- apps/openmw/mwrender/localmap.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index ed218dc97d..2c0a4e76b9 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -65,9 +65,6 @@ void LocalMap::saveFogOfWar(MWWorld::Ptr::CellStore* cell) { Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); Vector2 max(mBounds.getMaximum().x, mBounds.getMaximum().z); - /// \todo why is this workaround needed? - min *= 1.3; - max *= 1.3; Vector2 length = max-min; // divide into segments @@ -108,10 +105,6 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, Vector2 min(bounds.getMinimum().x, bounds.getMinimum().z); Vector2 max(bounds.getMaximum().x, bounds.getMaximum().z); - /// \todo why is this workaround needed? - min *= 1.3; - max *= 1.3; - Vector2 length = max-min; Vector2 center(bounds.getCenter().x, bounds.getCenter().z); @@ -243,7 +236,6 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& else { Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); - min *= 1.3; x = std::ceil((pos.x - min.x)/sSize)-1; y = std::ceil((pos.y - min.y)/sSize)-1; @@ -264,7 +256,6 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& else { Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); - min *= 1.3; u = (pos.x - min.x - sSize*x)/sSize; v = (pos.y - min.y - sSize*y)/sSize; From 01ecf3e0be726f028bd662f89c2b26177c169a3d Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 18:16:11 +0200 Subject: [PATCH 222/488] attempt at rotation (BROKEN) --- apps/openmw/mwrender/localmap.cpp | 16 +++++++++++++--- apps/openmw/mwrender/localmap.hpp | 2 ++ apps/openmw/mwworld/world.cpp | 4 ---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 2c0a4e76b9..47b8171a5e 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -2,6 +2,7 @@ #include "renderingmanager.hpp" #include "../mwworld/environment.hpp" +#include "../mwworld/world.hpp" #include "../mwgui/window_manager.hpp" #include @@ -14,12 +15,17 @@ LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWWorld::Environment* en { mRendering = rend; mEnvironment = env; - + + mCameraRotNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); + mCameraNode = mCameraRotNode->createChildSceneNode(); + mCellCamera = mRendering->getScene()->createCamera("CellCamera"); mCellCamera->setProjectionType(PT_ORTHOGRAPHIC); // look down -y const float sqrt0pt5 = 0.707106781; mCellCamera->setOrientation(Quaternion(sqrt0pt5, -sqrt0pt5, 0, 0)); + + mCameraNode->attachObject(mCellCamera); } LocalMap::~LocalMap() @@ -100,11 +106,15 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, { mInterior = true; mBounds = bounds; - + Vector2 z(bounds.getMaximum().y, bounds.getMinimum().y); Vector2 min(bounds.getMinimum().x, bounds.getMinimum().z); Vector2 max(bounds.getMaximum().x, bounds.getMaximum().z); + const Vector2& north = mEnvironment->mWorld->getNorthVector(cell); + Radian angle(std::atan2(north.x, north.y)); + mCameraRotNode->setOrientation(Quaternion(Math::Cos(angle/2.f), 0, Math::Sin(angle/2.f), 0)); + Vector2 length = max-min; Vector2 center(bounds.getCenter().x, bounds.getCenter().z); @@ -141,7 +151,7 @@ void LocalMap::render(const float x, const float y, // make everything visible mRendering->getScene()->setAmbientLight(ColourValue(1,1,1)); - mCellCamera->setPosition(Vector3(x, zhigh+100000, y)); + mCameraNode->setPosition(Vector3(x, zhigh+100000, y)); //mCellCamera->setFarClipDistance( (zhigh-zlow) * 1.1 ); mCellCamera->setFarClipDistance(0); // infinite diff --git a/apps/openmw/mwrender/localmap.hpp b/apps/openmw/mwrender/localmap.hpp index efbccf8848..42603885a0 100644 --- a/apps/openmw/mwrender/localmap.hpp +++ b/apps/openmw/mwrender/localmap.hpp @@ -73,6 +73,8 @@ namespace MWRender static const int sSize = 8192; Ogre::Camera* mCellCamera; + Ogre::SceneNode* mCameraNode; + Ogre::SceneNode* mCameraRotNode; void render(const float x, const float y, const float zlow, const float zhigh, diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index 5c661b4a24..24d055c35f 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -701,7 +701,6 @@ namespace MWWorld void World::update (float duration) { - getNorthVector(mWorldScene->getCurrentCell()); mWorldScene->update (duration); mWeatherManager->update (duration); @@ -761,10 +760,7 @@ namespace MWWorld ESMS::CellRefList statics = cell->statics; ESMS::LiveCellRef* ref = statics.find("northmarker"); if (!ref) - { - std::cout << "No north marker found." << std::endl; return Vector2(0, 1); - } Ogre::SceneNode* node = ref->mData.getBaseNode(); Vector3 dir = node->_getDerivedOrientation().yAxis(); Vector2 d = Vector2(dir.x, dir.z); From 79c2a2e465a13bbe3d0cdbbcfaaffa4358152175 Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 18:33:08 +0200 Subject: [PATCH 223/488] implemented toggleWater (twa); formatting again --- apps/openmw/mwrender/renderingmanager.cpp | 17 ++- apps/openmw/mwrender/renderingmanager.hpp | 2 + apps/openmw/mwrender/water.cpp | 159 +++++++++++----------- apps/openmw/mwrender/water.hpp | 43 +++--- apps/openmw/mwscript/docs/vmformat.txt | 3 +- apps/openmw/mwscript/miscextensions.cpp | 17 +++ apps/openmw/mwworld/world.cpp | 5 + apps/openmw/mwworld/world.hpp | 1 + 8 files changed, 142 insertions(+), 105 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4b197205af..7750481107 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -92,19 +92,26 @@ OEngine::Render::Fader* RenderingManager::getFader() return mRendering.getFader(); } -void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store){ - - mObjects.removeCell(store); +void RenderingManager::removeCell (MWWorld::Ptr::CellStore *store) +{ + mObjects.removeCell(store); mActors.removeCell(store); - } -void RenderingManager::removeWater (){ + +void RenderingManager::removeWater () +{ if(mWater){ delete mWater; mWater = 0; } } +void RenderingManager::toggleWater() +{ + if (mWater) + mWater->toggle(); +} + void RenderingManager::cellAdded (MWWorld::Ptr::CellStore *store) { mObjects.buildStaticGeometry (*store); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 8a6a7aed1b..7d66aa3504 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -91,8 +91,10 @@ class RenderingManager: private RenderingInterface { void moveObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& position); void scaleObject (const MWWorld::Ptr& ptr, const Ogre::Vector3& scale); void rotateObject (const MWWorld::Ptr& ptr, const::Ogre::Quaternion& orientation); + void checkUnderwater(); void setWaterHeight(const float height); + void toggleWater(); /// \param store Cell the object was in previously (\a ptr has already been updated to the new cell). void moveObjectToCell (const MWWorld::Ptr& ptr, const Ogre::Vector3& position, MWWorld::Ptr::CellStore *store); diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index c77a990066..9de55e3a59 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -2,87 +2,94 @@ namespace MWRender { - Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()) + +Water::Water (Ogre::Camera *camera, const ESM::Cell* cell) : + mCamera (camera), mViewport (camera->getViewport()), mSceneManager (camera->getSceneManager()), + mIsUnderwater(false) +{ + try { - try - { - Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); + Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Water", -1); + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); + } catch(...) {} + + mTop = cell->water; + + mIsUnderwater = false; + + mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); + + Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); + + mWater = mSceneManager->createEntity("water"); + + mWater->setMaterialName("Examples/Water0"); + + mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mWaterNode->setPosition(0, mTop, 0); + + if(!(cell->data.flags & cell->Interior)) + { + mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); + } + mWaterNode->attachObject(mWater); +} + + +Water::~Water() +{ + Ogre::MeshManager::getSingleton().remove("water"); + + mWaterNode->detachObject(mWater); + mSceneManager->destroyEntity(mWater); + mSceneManager->destroySceneNode(mWaterNode); + + Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); +} + +void Water::changeCell(const ESM::Cell* cell) +{ + mTop = cell->water; + + if(!(cell->data.flags & cell->Interior)) + mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); + else + setHeight(mTop); +} + +void Water::setHeight(const float height) +{ + mTop = height; + mWaterNode->setPosition(0, height, 0); +} + +void Water::toggle() +{ + mWater->setVisible(!mWater->getVisible()); +} + +void Water::checkUnderwater(float y) +{ + if ((mIsUnderwater && y > mTop) || !mWater->isVisible()) + { + try { Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); } catch(...) {} - - mTop = cell->water; - mIsUnderwater = false; + } - mWaterPlane = Ogre::Plane(Ogre::Vector3::UNIT_Y, 0); - - Ogre::MeshManager::getSingleton().createPlane("water", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, mWaterPlane, CELL_SIZE*5, CELL_SIZE * 5, 10, 10, true, 1, 3,5, Ogre::Vector3::UNIT_Z); - - - mWater = mSceneManager->createEntity("water"); - - mWater->setMaterialName("Examples/Water0"); - - mWaterNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); - mWaterNode->setPosition(0, mTop, 0); - - if(!(cell->data.flags & cell->Interior)) - { - mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); - } - mWaterNode->attachObject(mWater); - } - - - Water::~Water() + if (!mIsUnderwater && y < mTop && mWater->isVisible()) { - Ogre::MeshManager::getSingleton().remove("water"); - - mWaterNode->detachObject(mWater); - mSceneManager->destroyEntity(mWater); - mSceneManager->destroySceneNode(mWaterNode); - - Ogre::CompositorManager::getSingleton().removeCompositorChain(mViewport); - } - - void Water::changeCell(const ESM::Cell* cell) - { - mTop = cell->water; - - if(!(cell->data.flags & cell->Interior)) - mWaterNode->setPosition(getSceneNodeCoordinates(cell->data.gridX, cell->data.gridY)); - else - setHeight(mTop); - } - - void Water::setHeight(const float height) - { - mTop = height; - mWaterNode->setPosition(0, height, 0); - } - - - void Water::checkUnderwater(float y) - { - if (mIsUnderwater && y > mTop) - { - try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", false); - } catch(...) {} - mIsUnderwater = false; - } - - if (!mIsUnderwater && y < mTop) - { - try { - Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); - } catch(...) {} - mIsUnderwater = true; - } - } - - Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) - { - return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); + try { + Ogre::CompositorManager::getSingleton().setCompositorEnabled(mViewport, "Water", true); + } catch(...) {} + mIsUnderwater = true; } } + +Ogre::Vector3 Water::getSceneNodeCoordinates(int gridX, int gridY) +{ + return Ogre::Vector3(gridX * CELL_SIZE + (CELL_SIZE / 2), mTop, -gridY * CELL_SIZE - (CELL_SIZE / 2)); +} + +} // namespace diff --git a/apps/openmw/mwrender/water.hpp b/apps/openmw/mwrender/water.hpp index fc644e265c..5a5d1cca09 100644 --- a/apps/openmw/mwrender/water.hpp +++ b/apps/openmw/mwrender/water.hpp @@ -7,37 +7,34 @@ namespace MWRender { /// Water rendering - class Water : Ogre::RenderTargetListener, Ogre::Camera::Listener { - static const int CELL_SIZE = 8192; - Ogre::Camera *mCamera; - Ogre::SceneManager *mSceneManager; - Ogre::Viewport *mViewport; + class Water : Ogre::RenderTargetListener, Ogre::Camera::Listener + { + static const int CELL_SIZE = 8192; + Ogre::Camera *mCamera; + Ogre::SceneManager *mSceneManager; + Ogre::Viewport *mViewport; - + Ogre::Plane mWaterPlane; + Ogre::SceneNode *mWaterNode; + Ogre::Entity *mWater; - Ogre::Plane mWaterPlane; - Ogre::SceneNode *mWaterNode; - Ogre::Entity *mWater; + bool mIsUnderwater; + int mTop; - Ogre::Vector3 mOldCameraPos; - bool mIsUnderwater; - int mTop; + Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); + public: + Water (Ogre::Camera *camera, const ESM::Cell* cell); + ~Water(); + void toggle(); - - Ogre::Vector3 getSceneNodeCoordinates(int gridX, int gridY); - - public: - - Water (Ogre::Camera *camera, const ESM::Cell* cell); - ~Water(); + void checkUnderwater(float y); + void changeCell(const ESM::Cell* cell); + void setHeight(const float height); - void checkUnderwater(float y); - void changeCell(const ESM::Cell* cell); - void setHeight(const float height); + }; - }; } #endif diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 64bd43c6c7..7ff60a2035 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -126,4 +126,5 @@ op 0x2000140: ChangeWeather op 0x2000141: GetWaterLevel op 0x2000142: SetWaterLevel op 0x2000143: ModWaterLevel -opcodes 0x2000142-0x3ffffff unused +op 0x2000144: ToggleWater, twa +opcodes 0x2000145-0x3ffffff unused diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 5bfffd3a26..5109319ed0 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -175,6 +175,19 @@ namespace MWScript } }; + class OpToggleWater : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + context.getWorld().toggleWater(); + } + }; + const int opcodeXBox = 0x200000c; const int opcodeOnActivate = 0x200000d; const int opcodeActivate = 0x2000075; @@ -187,6 +200,7 @@ namespace MWScript const int opcodeFadeIn = 0x200013c; const int opcodeFadeOut = 0x200013d; const int opcodeFadeTo = 0x200013e; + const int opcodeToggleWater = 0x2000144; void registerExtensions (Compiler::Extensions& extensions) { @@ -204,6 +218,8 @@ namespace MWScript extensions.registerInstruction ("fadein", "f", opcodeFadeIn); extensions.registerInstruction ("fadeout", "f", opcodeFadeOut); extensions.registerInstruction ("fadeto", "ff", opcodeFadeTo); + extensions.registerInstruction ("togglewater", "", opcodeToggleWater); + extensions.registerInstruction ("twa", "", opcodeToggleWater); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -220,6 +236,7 @@ namespace MWScript interpreter.installSegment5 (opcodeFadeIn, new OpFadeIn); interpreter.installSegment5 (opcodeFadeOut, new OpFadeOut); interpreter.installSegment5 (opcodeFadeTo, new OpFadeTo); + interpreter.installSegment5 (opcodeToggleWater, new OpToggleWater); } } } diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index c62e2e05d9..e6d44dd8cf 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -761,4 +761,9 @@ namespace MWWorld mRendering->setWaterHeight(height); } + void World::toggleWater() + { + mRendering->toggleWater(); + } + } diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index 5025fded4c..bfc33ae3df 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -114,6 +114,7 @@ namespace MWWorld Ptr::CellStore *getInterior (const std::string& name); void setWaterHeight(const float height); + void toggleWater(); void adjustSky(); From 0c2317ce9d7f9fb2877605301d53785dc3b472ac Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 19:20:09 +0200 Subject: [PATCH 224/488] player arrow works again --- apps/openmw/mwrender/localmap.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 47b8171a5e..ef21e26583 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -11,7 +11,8 @@ using namespace MWRender; using namespace Ogre; -LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWWorld::Environment* env) +LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWWorld::Environment* env) : + mInterior(false), mCellX(0), mCellY(0) { mRendering = rend; mEnvironment = env; @@ -93,6 +94,8 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell) { mInterior = false; + mCameraRotNode->setOrientation(Quaternion::IDENTITY); + std::string name = "Cell_"+coordStr(cell->cell->data.gridX, cell->cell->data.gridY); int x = cell->cell->data.gridX; @@ -235,7 +238,12 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& // retrieve the x,y grid coordinates the player is in int x,y; - Vector2 pos(position.x, position.z); + Vector3 _pos(position.x, 0, position.z); + _pos = mCameraRotNode->convertWorldToLocalPosition(_pos); + Vector2 pos(_pos.x, _pos.z); + + Vector3 playerdirection = mCameraRotNode->convertWorldToLocalPosition(direction); + if (!mInterior) { x = std::ceil(pos.x / sSize)-1; @@ -273,7 +281,7 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& texName = mInteriorName + "_" + coordStr(x,y); } mEnvironment->mWindowManager->setPlayerPos(u, v); - mEnvironment->mWindowManager->setPlayerDir(direction.x, -direction.z); + mEnvironment->mWindowManager->setPlayerDir(playerdirection.x, -playerdirection.z); // explore radius (squared) const float sqrExploreRadius = 0.01 * sFogOfWarResolution*sFogOfWarResolution; From 8d224f009fc34957572d4c8a3a8695936856197a Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 29 Mar 2012 19:45:19 +0200 Subject: [PATCH 225/488] toggleFogOfWar script command --- apps/openmw/mwgui/layouts.cpp | 35 ++++++++++++++++++++------ apps/openmw/mwgui/layouts.hpp | 5 ++++ apps/openmw/mwgui/window_manager.cpp | 6 +++++ apps/openmw/mwgui/window_manager.hpp | 2 ++ apps/openmw/mwrender/localmap.cpp | 1 - apps/openmw/mwscript/docs/vmformat.txt | 3 ++- apps/openmw/mwscript/guiextensions.cpp | 19 ++++++++++++++ 7 files changed, 62 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index de74214eef..223c072b7c 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -278,6 +278,7 @@ LocalMapBase::LocalMapBase() : mCurX(0) , mCurY(0) , mInterior(false) + , mFogOfWar(true) , mLocalMap(NULL) , mPrefix() , mChanged(true) @@ -297,6 +298,32 @@ void LocalMapBase::setCellPrefix(const std::string& prefix) mChanged = true; } +void LocalMapBase::toggleFogOfWar() +{ + mFogOfWar = !mFogOfWar; + applyFogOfWar(); +} + +void LocalMapBase::applyFogOfWar() +{ + for (int mx=0; mx<3; ++mx) + { + for (int my=0; my<3; ++my) + { + std::string name = "Map_" + boost::lexical_cast(mx) + "_" + + boost::lexical_cast(my); + std::string image = mPrefix+"_"+ boost::lexical_cast(mCurX + (mx-1)) + "_" + + boost::lexical_cast(mCurY + (mInterior ? (my-1) : -1*(my-1))); + MyGUI::ImageBox* fog; + mLayout->getWidget(fog, name+"_fog"); + fog->setImageTexture(mFogOfWar ? + ((MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) ? image+"_fog" + : "black.png" ) + : ""); + } + } +} + void LocalMapBase::setActiveCell(const int x, const int y, bool interior) { if (x==mCurX && y==mCurY && mInterior==interior && !mChanged) return; // don't do anything if we're still in the same cell @@ -312,23 +339,17 @@ void LocalMapBase::setActiveCell(const int x, const int y, bool interior) MyGUI::ImageBox* box; mLayout->getWidget(box, name); - MyGUI::ImageBox* fog; - mLayout->getWidget(fog, name+"_fog"); if (MyGUI::RenderManager::getInstance().getTexture(image) != 0) box->setImageTexture(image); else box->setImageTexture("black.png"); - - if (MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) - fog->setImageTexture(image+"_fog"); - else - fog->setImageTexture("black.png"); } } mInterior = interior; mCurX = x; mCurY = y; mChanged = false; + applyFogOfWar(); } diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 614479ccce..6719e967cd 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -40,12 +40,17 @@ namespace MWGui void setCellPrefix(const std::string& prefix); void setActiveCell(const int x, const int y, bool interior=false); + void toggleFogOfWar(); + protected: int mCurX, mCurY; bool mInterior; MyGUI::ScrollView* mLocalMap; std::string mPrefix; bool mChanged; + bool mFogOfWar; + + void applyFogOfWar(); OEngine::GUI::Layout* mLayout; }; diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index a04e2dcb8b..e7aa7690fc 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -469,3 +469,9 @@ void WindowManager::setPlayerDir(const float x, const float y) map->setPlayerDir(x,y); hud->setPlayerDir(x,y); } + +void WindowManager::toggleFogOfWar() +{ + map->toggleFogOfWar(); + hud->toggleFogOfWar(); +} diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index 582f438e8f..204774f5fe 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -156,6 +156,8 @@ namespace MWGui void changeCell(MWWorld::Ptr::CellStore* cell); ///< change the active cell void setPlayerPos(const float x, const float y); ///< set player position in map space void setPlayerDir(const float x, const float y); ///< set player view direction in map space + + void toggleFogOfWar(); void setInteriorMapTexture(const int x, const int y); ///< set the index of the map texture that should be used (for interiors) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index ef21e26583..803899110c 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -269,7 +269,6 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& u = std::abs((pos.x - (sSize*x))/sSize); v = 1-std::abs((pos.y + (sSize*y))/sSize); texName = "Cell_"+coordStr(x,y); - } else { diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index eab5bf846f..d7e81531d9 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -123,4 +123,5 @@ op 0x200013d: FadeOut op 0x200013e: FadeTo op 0x200013f: GetCurrentWeather op 0x2000140: ChangeWeather -opcodes 0x2000141-0x3ffffff unused +op 0x2000145: ToggleFogOfWar (tfow) +opcodes 0x2000146-0x3ffffff unused diff --git a/apps/openmw/mwscript/guiextensions.cpp b/apps/openmw/mwscript/guiextensions.cpp index 484c0d3ab5..426378efca 100644 --- a/apps/openmw/mwscript/guiextensions.cpp +++ b/apps/openmw/mwscript/guiextensions.cpp @@ -67,6 +67,19 @@ namespace MWScript } }; + class OpToggleFogOfWar : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + InterpreterContext& context = + static_cast (runtime.getContext()); + + context.getEnvironment().mWindowManager->toggleFogOfWar(); + } + }; + const int opcodeEnableBirthMenu = 0x200000e; const int opcodeEnableClassMenu = 0x200000f; const int opcodeEnableNameMenu = 0x2000010; @@ -79,6 +92,7 @@ namespace MWScript const int opcodeEnableRest = 0x2000017; const int opcodeShowRestMenu = 0x2000018; const int opcodeGetButtonPressed = 0x2000137; + const int opcodeToggleFogOfWar = 0x2000145; void registerExtensions (Compiler::Extensions& extensions) { @@ -100,6 +114,9 @@ namespace MWScript extensions.registerInstruction ("showrestmenu", "", opcodeShowRestMenu); extensions.registerFunction ("getbuttonpressed", 'l', "", opcodeGetButtonPressed); + + extensions.registerInstruction ("togglefogofwar", "", opcodeToggleFogOfWar); + extensions.registerInstruction ("tfow", "", opcodeToggleFogOfWar); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -135,6 +152,8 @@ namespace MWScript new OpShowDialogue (MWGui::GM_Rest)); interpreter.installSegment5 (opcodeGetButtonPressed, new OpGetButtonPressed); + + interpreter.installSegment5 (opcodeToggleFogOfWar, new OpToggleFogOfWar); } } } From 3d5384e2bb350d42f0331fa77f59e3d5c804bb97 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 29 Mar 2012 11:28:33 -0700 Subject: [PATCH 226/488] Remove some unneeded casts --- apps/openmw/mwsound/soundmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index ad9e47f729..f072e084db 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -108,7 +108,7 @@ namespace MWSound max = std::max(min, max); } - return std::string("Sound/")+snd->sound; + return "Sound/"+snd->sound; } @@ -182,7 +182,7 @@ namespace MWSound { // The range values are not tested float basevol = 1.0f; /* TODO: volume settings */ - std::string filePath = std::string("Sound/")+filename; + std::string filePath = "Sound/"+filename; const ESM::Position &pos = ptr.getCellRef().pos; SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, From c3944d3e1a48220d423849472eb5aebc746185ea Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 21:27:37 +0200 Subject: [PATCH 227/488] Use a normal binary search --- components/bsa/bsa_archive.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 9a325d1605..a68e91df1e 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -116,12 +116,7 @@ class DirArchive: public Ogre::FileSystemArchive } mrComparer comp(delimiter, copy.size() - delimiter-1); - std::vector::iterator found = std::lower_bound(current.begin(), current.end(), copy, comp); - - if (found != current.end() && !(comp(copy, current.front()))) - return true; - - return false; + return std::binary_search(current.begin(), current.end(), copy, comp); } public: From 6acd900577639bc4d83d0a0fcc444f806ab4c2c7 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 21:36:00 +0200 Subject: [PATCH 228/488] Better name --- components/bsa/bsa_archive.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index a68e91df1e..945aae0773 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -45,7 +45,7 @@ struct ciLessBoost : std::binary_function } }; -struct mrComparer +struct pathComparer { private: int m_start, m_size; @@ -63,7 +63,7 @@ private: } public: - mrComparer(int start, int size) : m_start(start), m_size(size) { } + pathComparer(int start, int size) : m_start(start), m_size(size) { } bool operator() (const std::string& first, const std::string& other) { @@ -115,7 +115,7 @@ class DirArchive: public Ogre::FileSystemArchive current = found->second; } - mrComparer comp(delimiter, copy.size() - delimiter-1); + pathComparer comp(delimiter, copy.size() - delimiter-1); return std::binary_search(current.begin(), current.end(), copy, comp); } From b6aa8925f49ae38958074549ea9722916ab6ebf8 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Fri, 30 Mar 2012 00:12:38 +0400 Subject: [PATCH 229/488] (Temporary) workaround for broken OpenAL implementations that doesn't return meaningful max counts of sources --- apps/openmw/mwsound/openal_output.cpp | 53 ++++++++++++--------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 97a3996896..0417596834 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -426,12 +426,6 @@ void OpenAL_Output::init(const std::string &devname) else std::cout << "Opened \""< attrs(size); -// alcGetIntegerv( mDevice, ALC_ALL_ATTRIBUTES, size, &attrs[0] ); -// for(int i=0; i(maxmono+maxstereo, 256); - bool stop = false; - for(size_t i = 0;i < maxtotal && !stop;i++) + ALCuint maxtotal = std::min(maxmono+maxstereo, 256); + if (maxtotal == 0) // workaround for broken implementations { - ALuint src = 0; - alGenSources(1, &src); - - ALenum err = alGetError(); - if(err != AL_NO_ERROR) + maxtotal = 256; + bool stop = false; + for(size_t i = 0;i < maxtotal && !stop;i++) // generate source until error returned { - stop = true; - std::cout << "Stopping source generation at " << i << std::endl; + ALuint src = 0; + alGenSources(1, &src); + ALenum err = alGetError(); + if(err != AL_NO_ERROR) + { + stop = true; + } + else + { + mFreeSources.push_back(src); + } } - else + } + else // normal case + { + for(size_t i = 0;i < maxtotal;i++) { + ALuint src = 0; + alGenSources(1, &src); + throwALerror(); mFreeSources.push_back(src); } - //throwALerror(); } } catch(std::exception &e) From 60b95e7992f04db17c2a50871e979e71c2ed29bd Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Thu, 29 Mar 2012 22:38:14 +0200 Subject: [PATCH 230/488] Sorting the file lists properly --- components/bsa/bsa_archive.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 945aae0773..64dc979803 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -155,6 +155,7 @@ class DirArchive: public Ogre::FileSystemArchive filesind.push_back(small); } } + std::sort(filesind.begin(), filesind.end(), ciLessBoost()); std::string small; std::string original = d.string(); if(cutoff < original.size()) From d5c49fa03648081f796f8cdbba4fefbf3e81c05e Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 10:12:28 +0200 Subject: [PATCH 231/488] getWaterLevel use CellStore ; attempted fix for morrowind without tribunal --- apps/openmw/mwscript/cellextensions.cpp | 4 ++-- components/esm/loadcell.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwscript/cellextensions.cpp b/apps/openmw/mwscript/cellextensions.cpp index 155393f9e6..d69c42ab34 100644 --- a/apps/openmw/mwscript/cellextensions.cpp +++ b/apps/openmw/mwscript/cellextensions.cpp @@ -142,8 +142,8 @@ namespace MWScript InterpreterContext& context = static_cast (runtime.getContext()); - const ESM::Cell *cell = context.getWorld().getPlayer().getPlayer().getCell()->cell; - runtime.push (cell->water); + MWWorld::Ptr::CellStore *cell = context.getWorld().getPlayer().getPlayer().getCell(); + runtime.push (cell->mWaterLevel); } }; diff --git a/components/esm/loadcell.cpp b/components/esm/loadcell.cpp index 6bc12c5cb1..158cc08673 100644 --- a/components/esm/loadcell.cpp +++ b/components/esm/loadcell.cpp @@ -21,8 +21,14 @@ void Cell::load(ESMReader &esm) if (data.flags & Interior) { // Interior cells - - esm.getHNT(water, "WHGT", 4); + if (esm.isNextSub("INTV")) + { + int waterl; + esm.getHT(waterl); + water = (float) waterl; + } + else if (esm.isNextSub("WHGT")) + esm.getHT(water); // Quasi-exterior cells have a region (which determines the // weather), pure interior cells have ambient lighting From d3f31c349838cd26a6bcd0f0304d0715975760c6 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 13:53:35 +0200 Subject: [PATCH 232/488] dialogue window enhancements --- apps/openmw/mwgui/dialogue.cpp | 6 ++---- files/mygui/openmw_dialogue_window_layout.xml | 17 ++++++----------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index d6c4ce4e57..ac6681e279 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -43,9 +43,6 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager,MWWorld::Environm // Centre dialog center(); - //WindowManager *wm = environment.mWindowManager; - setText("NpcName", "Name of character"); - //History view getWidget(history, "History"); history->setOverflowToTheLeft(true); @@ -116,7 +113,8 @@ void DialogueWindow::onSelectTopic(MyGUI::ListBox* _sender, size_t _index) void DialogueWindow::startDialogue(std::string npcName) { - setText("NpcName", npcName); + static_cast(mMainWidget)->setCaption(npcName); + adjustWindowCaption(); } void DialogueWindow::setKeywords(std::list keyWords) diff --git a/files/mygui/openmw_dialogue_window_layout.xml b/files/mygui/openmw_dialogue_window_layout.xml index 11ac41cb32..29a3b511ec 100644 --- a/files/mygui/openmw_dialogue_window_layout.xml +++ b/files/mygui/openmw_dialogue_window_layout.xml @@ -1,34 +1,29 @@ - - - - - - + - + - + - - + - + From 4bbedeb3e7b684d1c0023177fb9eb87d5589fd4c Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 14:01:43 +0200 Subject: [PATCH 233/488] made all dialogs semi transparent (like in morrowind) --- apps/openmw/mwgui/window_manager.cpp | 1 - files/mygui/openmw_windows.skin.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index a04e2dcb8b..4654674695 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -371,7 +371,6 @@ void WindowManager::updateSkillArea() void WindowManager::removeDialog(OEngine::GUI::Layout*dialog) { - std::cout << "dialogue a la poubelle"; assert(dialog); if (!dialog) return; diff --git a/files/mygui/openmw_windows.skin.xml b/files/mygui/openmw_windows.skin.xml index a986dcffc8..3ee33124ca 100644 --- a/files/mygui/openmw_windows.skin.xml +++ b/files/mygui/openmw_windows.skin.xml @@ -294,7 +294,7 @@ - + From 4a9a416d46bb0bd7f2b92615dbde3b81b4975745 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 30 Mar 2012 14:45:32 +0200 Subject: [PATCH 234/488] Can find files even if no .bsa file exists now --- apps/openmw/engine.cpp | 9 +++++++-- components/bsa/bsa_archive.cpp | 20 +++++++++++++++++++- components/files/collections.cpp | 5 +++++ components/files/collections.hpp | 2 ++ components/nifogre/ogre_nif_loader.cpp | 2 +- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 5e49ae2f72..9903561911 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -204,13 +204,18 @@ OMW::Engine::~Engine() void OMW::Engine::loadBSA() { const Files::MultiDirCollection& bsa = mFileCollections.getCollection (".bsa"); - std::string dataDirectory; + for (Files::MultiDirCollection::TIter iter(bsa.begin()); iter!=bsa.end(); ++iter) { std::cout << "Adding " << iter->second.string() << std::endl; Bsa::addBSA(iter->second.string()); + } - dataDirectory = iter->second.parent_path().string(); + const Files::PathContainer& dataDirs = mFileCollections.getPaths(); + std::string dataDirectory; + for (Files::PathContainer::const_iterator iter = dataDirs.begin(); iter != dataDirs.end(); ++iter) + { + dataDirectory = iter->string(); std::cout << "Data dir " << dataDirectory << std::endl; Bsa::addDir(dataDirectory, mFSStrict); } diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 64dc979803..36f4b423ce 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -52,8 +52,15 @@ private: bool comparePortion(const std::string& file1, const std::string& file2, int start, int size) const { + return lexicographical_compare(file1.substr(start,size), file2.substr(start,size), boost::algorithm::is_iless()); + for(int i = start; i < start+size; i++) { + if (i >= file1.size()) + return true; + else if (i >= file2.size()) + return false; + char one = tolower(file1.at(i)); char two = tolower(file2.at(i)); if(one != two) @@ -83,7 +90,18 @@ class DirArchive: public Ogre::FileSystemArchive bool findFile(const String& filename, std::string& copy) const { - copy = filename; + { + String passed = filename; + if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' + || filename.at(filename.length() - 1) == '"' || filename.at(filename.length() - 1) == '>' || filename.at(filename.length() - 1) == ':' + || filename.at(filename.length() - 1) == '|') + { + passed = filename.substr(0, filename.length() - 2); + } + if(filename.at(filename.length() - 2) == '>') + passed = filename.substr(0, filename.length() - 6); + copy = passed; + } std::replace(copy.begin(), copy.end(), '\\', '/'); diff --git a/components/files/collections.cpp b/components/files/collections.cpp index 424b558e60..50340dca4d 100644 --- a/components/files/collections.cpp +++ b/components/files/collections.cpp @@ -30,4 +30,9 @@ namespace Files return iter->second; } + + const Files::PathContainer& Collections::getPaths() const + { + return mDirectories; + } } diff --git a/components/files/collections.hpp b/components/files/collections.hpp index 1ddca9a5b7..70aaec55e3 100644 --- a/components/files/collections.hpp +++ b/components/files/collections.hpp @@ -21,6 +21,8 @@ namespace Files /// leading dot and must be all lower-case. const MultiDirCollection& getCollection(const std::string& extension) const; + const Files::PathContainer& getPaths() const; + private: typedef std::map MultiDirCollectionContainer; Files::PathContainer mDirectories; diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index f943231d0d..2ab6ae6211 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -1368,7 +1368,7 @@ void NIFLoader::loadResource(Resource *resource) if (!vfs->isFile(resourceName)) { - warn("File not found."); + warn("File "+resourceName+" not found."); return; } From d2f8539a4283bfd10c5a2639a64558d763adfd11 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 30 Mar 2012 14:50:39 +0200 Subject: [PATCH 235/488] Forgot to remove some old code that didn't do anything --- components/bsa/bsa_archive.cpp | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 36f4b423ce..eb392757b8 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -50,31 +50,12 @@ struct pathComparer private: int m_start, m_size; - bool comparePortion(const std::string& file1, const std::string& file2, int start, int size) const - { - return lexicographical_compare(file1.substr(start,size), file2.substr(start,size), boost::algorithm::is_iless()); - - for(int i = start; i < start+size; i++) - { - if (i >= file1.size()) - return true; - else if (i >= file2.size()) - return false; - - char one = tolower(file1.at(i)); - char two = tolower(file2.at(i)); - if(one != two) - return (one < two); - } - return false; - } - public: pathComparer(int start, int size) : m_start(start), m_size(size) { } bool operator() (const std::string& first, const std::string& other) { - return comparePortion(first, other, m_start, m_size); + return lexicographical_compare(first.substr(m_start,m_size), other.substr(m_start,m_size), boost::algorithm::is_iless()); } }; From de102cd27465c22f32a6e16277c45a850d13e34d Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 06:28:40 -0700 Subject: [PATCH 236/488] Simplify broken OpenAL workaround --- apps/openmw/mwsound/openal_output.cpp | 30 +++++---------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 0417596834..13ea49481d 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -442,33 +442,13 @@ void OpenAL_Output::init(const std::string &devname) { ALCuint maxtotal = std::min(maxmono+maxstereo, 256); if (maxtotal == 0) // workaround for broken implementations - { maxtotal = 256; - bool stop = false; - for(size_t i = 0;i < maxtotal && !stop;i++) // generate source until error returned - { - ALuint src = 0; - alGenSources(1, &src); - ALenum err = alGetError(); - if(err != AL_NO_ERROR) - { - stop = true; - } - else - { - mFreeSources.push_back(src); - } - } - } - else // normal case + for(size_t i = 0;i < maxtotal;i++) { - for(size_t i = 0;i < maxtotal;i++) - { - ALuint src = 0; - alGenSources(1, &src); - throwALerror(); - mFreeSources.push_back(src); - } + ALuint src = 0; + alGenSources(1, &src); + throwALerror(); + mFreeSources.push_back(src); } } catch(std::exception &e) From 71d9d7e94331df0ab05709cb00230b23fb836357 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 06:41:06 -0700 Subject: [PATCH 237/488] Store the current sound position with the Sound object --- apps/openmw/mwsound/sound.hpp | 6 +++++- apps/openmw/mwsound/soundmanager.cpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 2cbd48d961..f1b09875cd 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -1,6 +1,8 @@ #ifndef GAME_SOUND_SOUND_H #define GAME_SOUND_SOUND_H +#include + namespace MWSound { class Sound @@ -11,6 +13,7 @@ namespace MWSound Sound(const Sound &rhs); protected: + Ogre::Vector3 mPos; float mVolume; /* NOTE: Real volume = mVolume*mBaseVolume */ float mBaseVolume; float mMinDistance; @@ -21,7 +24,8 @@ namespace MWSound virtual bool isPlaying() = 0; virtual void setVolume(float volume) = 0; - Sound() : mVolume(1.0f) + Sound() : mPos(0.0f, 0.0f, 0.0f) + , mVolume(1.0f) , mBaseVolume(1.0f) , mMinDistance(20.0f) /* 1 * min_range_scale */ , mMaxDistance(12750.0f) /* 255 * max_range_scale */ diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index f072e084db..d2e52043ab 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -187,6 +187,7 @@ namespace MWSound SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, 20.0f, 12750.0f, false); + sound->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); sound->mBaseVolume = basevol; mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); @@ -241,6 +242,7 @@ namespace MWSound const ESM::Position &pos = ptr.getCellRef().pos; sound = mOutput->playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop); + sound->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; @@ -330,7 +332,10 @@ namespace MWSound while(snditer != mActiveSounds.end()) { if(snditer->second.first == ptr) + { snditer->first->update(pos.pos); + snditer->first->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); + } snditer++; } } From 557e97bab4872cca91e2770e80f5c4491b7bb75e Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 30 Mar 2012 15:52:09 +0200 Subject: [PATCH 238/488] fixed a terrain-related Redemption crash --- apps/openmw/mwrender/terrain.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwrender/terrain.cpp b/apps/openmw/mwrender/terrain.cpp index ac60e63238..8877215653 100644 --- a/apps/openmw/mwrender/terrain.cpp +++ b/apps/openmw/mwrender/terrain.cpp @@ -14,7 +14,7 @@ namespace MWRender { //---------------------------------------------------------------------------------------------- - + TerrainManager::TerrainManager(Ogre::SceneManager* mgr, const MWWorld::Environment& evn) : mEnvironment(evn), mTerrainGroup(TerrainGroup(mgr, Terrain::ALIGN_X_Z, mLandSize, mWorldSize)) { @@ -42,7 +42,7 @@ namespace MWRender //due to the sudden flick between composite and non composite textures, //this seemed the distance where it wasn't too noticeable mTerrainGlobals.setCompositeMapDistance(mWorldSize*2); - + mActiveProfile->setLightmapEnabled(false); mActiveProfile->setLayerSpecularMappingEnabled(false); mActiveProfile->setLayerNormalMappingEnabled(false); @@ -73,16 +73,16 @@ namespace MWRender TerrainManager::~TerrainManager() { } - + //---------------------------------------------------------------------------------------------- - + void TerrainManager::setDiffuse(const ColourValue& diffuse) { mTerrainGlobals.setCompositeMapDiffuse(diffuse); } - + //---------------------------------------------------------------------------------------------- - + void TerrainManager::setAmbient(const ColourValue& ambient) { mTerrainGlobals.setCompositeMapAmbient(ambient); @@ -160,7 +160,7 @@ namespace MWRender numTextures, indexes); - if ( land->landData->usingColours ) + if ( land && land->landData->usingColours ) { // disable or enable global colour map (depends on available vertex colours) mActiveProfile->setGlobalColourMapEnabled(true); @@ -253,7 +253,7 @@ namespace MWRender assert( (int)mEnvironment.mWorld->getStore().landTexts.getSize() >= (int)ltexIndex - 1 && "LAND.VTEX must be within the bounds of the LTEX array"); - + std::string texture; if ( ltexIndex == 0 ) { @@ -359,7 +359,7 @@ namespace MWRender } else { - //this provides a transition shading but also + //this provides a transition shading but also //rounds off the corners slightly pBlend[index] = std::min(1.0f, pBlend[index] + 0.5f); } @@ -458,10 +458,10 @@ namespace MWRender TEX_TYPE_2D, size, size, 0, PF_BYTE_BGR); HardwarePixelBufferSharedPtr pixelBuffer = tex->getBuffer(); - + pixelBuffer->lock(HardwareBuffer::HBL_DISCARD); const PixelBox& pixelBox = pixelBuffer->getCurrentLock(); - + uint8* pDest = static_cast(pixelBox.data); if ( land != NULL ) @@ -501,7 +501,7 @@ namespace MWRender } } } - + pixelBuffer->unlock(); return tex; From 479df78ea185bd56b8fe4f214beb1c1a8bc034cd Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 07:01:37 -0700 Subject: [PATCH 239/488] Update the actual sound position after the listener --- apps/openmw/mwsound/openal_output.cpp | 12 ++++++------ apps/openmw/mwsound/sound.hpp | 2 +- apps/openmw/mwsound/soundmanager.cpp | 9 +++++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 13ea49481d..ad0f7603ba 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -90,7 +90,7 @@ public: virtual void stop(); virtual bool isPlaying(); virtual void setVolume(float volume); - virtual void update(const float *pos); + virtual void update(); void play(); bool process(); @@ -262,9 +262,9 @@ void OpenAL_SoundStream::setVolume(float volume) mVolume = volume; } -void OpenAL_SoundStream::update(const float *pos) +void OpenAL_SoundStream::update() { - alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); throwALerror(); @@ -340,7 +340,7 @@ public: virtual void stop(); virtual bool isPlaying(); virtual void setVolume(float volume); - virtual void update(const float *pos); + virtual void update(); }; OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf) @@ -379,9 +379,9 @@ void OpenAL_Sound::setVolume(float volume) mVolume = volume; } -void OpenAL_Sound::update(const float *pos) +void OpenAL_Sound::update() { - alSource3f(mSource, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); throwALerror(); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index f1b09875cd..521d8dbca6 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -7,7 +7,7 @@ namespace MWSound { class Sound { - virtual void update(const float *pos) = 0; + virtual void update() = 0; Sound& operator=(const Sound &rhs); Sound(const Sound &rhs); diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index d2e52043ab..da7cb9d3b3 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -328,14 +328,12 @@ namespace MWSound void SoundManager::updateObject(MWWorld::Ptr ptr) { const ESM::Position &pos = ptr.getCellRef().pos; + const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); SoundMap::iterator snditer = mActiveSounds.begin(); while(snditer != mActiveSounds.end()) { if(snditer->second.first == ptr) - { - snditer->first->update(pos.pos); - snditer->first->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); - } + snditer->first->mPos = objpos; snditer++; } } @@ -428,7 +426,10 @@ namespace MWSound if(!snditer->first->isPlaying()) mActiveSounds.erase(snditer++); else + { + snditer->first->update(); snditer++; + } } } From a4576f043d110479a236f1c91659298582839c11 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 16:02:41 +0200 Subject: [PATCH 240/488] fixed the physics debug rendering now activates/deactivates properly --- apps/openmw/mwrender/debugging.cpp | 6 +----- libs/openengine/bullet/physic.cpp | 10 +++++++++- libs/openengine/bullet/physic.hpp | 3 +++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 60b299acd1..4221852730 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -27,11 +27,7 @@ bool Debugging::toggleRenderMode (int mode){ switch (mode) { case MWWorld::World::Render_CollisionDebug: - - // TODO use a proper function instead of accessing the member variable - // directly. - eng->setDebugRenderingMode (!eng->isDebugCreated); - return eng->isDebugCreated; + return eng->toggleDebugRendering(); } return false; diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index 8b9f3dfecb..cc1f907a01 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -151,7 +151,8 @@ namespace Physic - PhysicEngine::PhysicEngine(BulletShapeLoader* shapeLoader) + PhysicEngine::PhysicEngine(BulletShapeLoader* shapeLoader) : + mDebugActive(0) { // Set up the collision configuration and dispatcher collisionConfiguration = new btDefaultCollisionConfiguration(); @@ -203,6 +204,13 @@ namespace Physic createDebugRendering(); } mDebugDrawer->setDebugMode(mode); + mDebugActive = mode; + } + + bool PhysicEngine::toggleDebugRendering() + { + setDebugRenderingMode(!mDebugActive); + return mDebugActive; } PhysicEngine::~PhysicEngine() diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 57ffe91305..16dac96f4c 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -199,6 +199,8 @@ namespace Physic */ void setDebugRenderingMode(int mode); + bool toggleDebugRendering(); + /** * Return the closest object hit by a ray. If there are no objects, it will return ("",-1). */ @@ -230,6 +232,7 @@ namespace Physic //debug rendering BtOgre::DebugDrawer* mDebugDrawer; bool isDebugCreated; + bool mDebugActive; }; }} From fad27d99e66c6892f6e09d03691246ce833b3346 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 07:10:34 -0700 Subject: [PATCH 241/488] Update the actual sound volume with the position --- apps/openmw/mwsound/openal_output.cpp | 18 ++---------------- apps/openmw/mwsound/sound.hpp | 2 +- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index ad0f7603ba..d8945cf52b 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -89,7 +89,6 @@ public: virtual void stop(); virtual bool isPlaying(); - virtual void setVolume(float volume); virtual void update(); void play(); @@ -255,15 +254,9 @@ bool OpenAL_SoundStream::isPlaying() return !mIsFinished; } -void OpenAL_SoundStream::setVolume(float volume) -{ - alSourcef(mSource, AL_GAIN, volume*mBaseVolume); - throwALerror(); - mVolume = volume; -} - void OpenAL_SoundStream::update() { + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -339,7 +332,6 @@ public: virtual void stop(); virtual bool isPlaying(); - virtual void setVolume(float volume); virtual void update(); }; @@ -372,15 +364,9 @@ bool OpenAL_Sound::isPlaying() return state==AL_PLAYING; } -void OpenAL_Sound::setVolume(float volume) -{ - alSourcef(mSource, AL_GAIN, volume*mBaseVolume); - throwALerror(); - mVolume = volume; -} - void OpenAL_Sound::update() { + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index 521d8dbca6..d2c2d52091 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -22,7 +22,7 @@ namespace MWSound public: virtual void stop() = 0; virtual bool isPlaying() = 0; - virtual void setVolume(float volume) = 0; + void setVolume(float volume) { mVolume = volume; } Sound() : mPos(0.0f, 0.0f, 0.0f) , mVolume(1.0f) From d717b7b9dd3a73631a811bd243983bbd63860f7b Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 30 Mar 2012 16:18:58 +0200 Subject: [PATCH 242/488] factored out actor related game mechanics code into a separate class --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwmechanics/actors.cpp | 44 +++++++++++++++++++ apps/openmw/mwmechanics/actors.hpp | 45 ++++++++++++++++++++ apps/openmw/mwmechanics/mechanicsmanager.cpp | 26 +++-------- apps/openmw/mwmechanics/mechanicsmanager.hpp | 4 +- 5 files changed, 97 insertions(+), 24 deletions(-) create mode 100644 apps/openmw/mwmechanics/actors.cpp create mode 100644 apps/openmw/mwmechanics/actors.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2d49a414c4..e16bd181d0 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -54,7 +54,7 @@ add_openmw_dir (mwclass ) add_openmw_dir (mwmechanics - mechanicsmanager stat creaturestats magiceffects movement + mechanicsmanager stat creaturestats magiceffects movement actors ) # Main executable diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp new file mode 100644 index 0000000000..e4fba8a9c4 --- /dev/null +++ b/apps/openmw/mwmechanics/actors.cpp @@ -0,0 +1,44 @@ + +#include "actors.hpp" + +#include "../mwworld/class.hpp" + +namespace MWMechanics +{ + Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment) {} + + void Actors::addActor (const MWWorld::Ptr& ptr) + { + mActors.insert (ptr); + } + + void Actors::removeActor (const MWWorld::Ptr& ptr) + { + mActors.erase (ptr); + } + + void Actors::dropActors (const MWWorld::Ptr::CellStore *cellStore) + { + std::set::iterator iter = mActors.begin(); + + while (iter!=mActors.end()) + if (iter->getCell()==cellStore) + { + mActors.erase (iter++); + } + else + ++iter; + } + + void Actors::update (std::vector >& movement) + { + for (std::set::iterator iter (mActors.begin()); iter!=mActors.end(); + ++iter) + { + Ogre::Vector3 vector = MWWorld::Class::get (*iter).getMovementVector (*iter); + + if (vector!=Ogre::Vector3::ZERO) + movement.push_back (std::make_pair (iter->getRefData().getHandle(), vector)); + } + } +} diff --git a/apps/openmw/mwmechanics/actors.hpp b/apps/openmw/mwmechanics/actors.hpp new file mode 100644 index 0000000000..d3a3724726 --- /dev/null +++ b/apps/openmw/mwmechanics/actors.hpp @@ -0,0 +1,45 @@ +#ifndef GAME_MWMECHANICS_ACTORS_H +#define GAME_MWMECHANICS_ACTORS_H + +#include +#include +#include + +#include "../mwworld/ptr.hpp" + +namespace Ogre +{ + class Vector3; +} + +namespace MWWorld +{ + class Environment; +} + +namespace MWMechanics +{ + class Actors + { + MWWorld::Environment& mEnvironment; + std::set mActors; + + public: + + Actors (MWWorld::Environment& environment); + + void addActor (const MWWorld::Ptr& ptr); + ///< Register an actor for stats management + + void removeActor (const MWWorld::Ptr& ptr); + ///< Deregister an actor for stats management + + void dropActors (const MWWorld::Ptr::CellStore *cellStore); + ///< Deregister all actors in the given cell. + + void update (std::vector >& movement); + ///< Update actor stats and store desired velocity vectors in \a movement + }; +} + +#endif diff --git a/apps/openmw/mwmechanics/mechanicsmanager.cpp b/apps/openmw/mwmechanics/mechanicsmanager.cpp index 7ed81f7850..f669ea65ce 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.cpp @@ -222,14 +222,14 @@ namespace MWMechanics MechanicsManager::MechanicsManager (MWWorld::Environment& environment) : mEnvironment (environment), mUpdatePlayer (true), mClassSelected (false), - mRaceSelected (false) + mRaceSelected (false), mActors (environment) { buildPlayer(); } void MechanicsManager::addActor (const MWWorld::Ptr& ptr) { - mActors.insert (ptr); + mActors.addActor (ptr); } void MechanicsManager::removeActor (const MWWorld::Ptr& ptr) @@ -237,7 +237,7 @@ namespace MWMechanics if (ptr==mWatched) mWatched = MWWorld::Ptr(); - mActors.erase (ptr); + mActors.removeActor (ptr); } void MechanicsManager::dropActors (const MWWorld::Ptr::CellStore *cellStore) @@ -245,16 +245,7 @@ namespace MWMechanics if (!mWatched.isEmpty() && mWatched.getCell()==cellStore) mWatched = MWWorld::Ptr(); - std::set::iterator iter = mActors.begin(); - - while (iter!=mActors.end()) - if (iter->getCell()==cellStore) - { - //std::cout << "Erasing an actor"; - mActors.erase (iter++); - } - else - ++iter; + mActors.dropActors (cellStore); } void MechanicsManager::watchActor (const MWWorld::Ptr& ptr) @@ -345,14 +336,7 @@ namespace MWMechanics mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills); } - for (std::set::iterator iter (mActors.begin()); iter!=mActors.end(); - ++iter) - { - Ogre::Vector3 vector = MWWorld::Class::get (*iter).getMovementVector (*iter); - - if (vector!=Ogre::Vector3::ZERO) - movement.push_back (std::make_pair (iter->getRefData().getHandle(), vector)); - } + mActors.update (movement); } void MechanicsManager::setPlayerName (const std::string& name) diff --git a/apps/openmw/mwmechanics/mechanicsmanager.hpp b/apps/openmw/mwmechanics/mechanicsmanager.hpp index 2e2192638f..bf0a6215a1 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.hpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.hpp @@ -1,7 +1,6 @@ #ifndef GAME_MWMECHANICS_MECHANICSMANAGER_H #define GAME_MWMECHANICS_MECHANICSMANAGER_H -#include #include #include @@ -9,6 +8,7 @@ #include "creaturestats.hpp" #include "npcstats.hpp" +#include "actors.hpp" namespace Ogre { @@ -25,13 +25,13 @@ namespace MWMechanics class MechanicsManager { MWWorld::Environment& mEnvironment; - std::set mActors; MWWorld::Ptr mWatched; CreatureStats mWatchedCreature; NpcStats mWatchedNpc; bool mUpdatePlayer; bool mClassSelected; bool mRaceSelected; + Actors mActors; void buildPlayer(); ///< build player according to stored class/race/birthsign information. Will From 1ee8b963d06a17f58f4d28fac02ac3fefcab79bb Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 07:30:17 -0700 Subject: [PATCH 243/488] Store the sound listener position as well --- apps/openmw/mwsound/openal_output.cpp | 3 ++- apps/openmw/mwsound/sound_output.hpp | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index d8945cf52b..8d574b2f2b 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -760,8 +760,9 @@ void OpenAL_Output::updateListener(const float *pos, const float *atdir, const f atdir[0], atdir[2], -atdir[1], updir[0], updir[2], -updir[1] }; + mPos = Ogre::Vector3(pos[0], pos[1], pos[2]); - alListener3f(AL_POSITION, pos[0], pos[2], -pos[1]); + alListener3f(AL_POSITION, mPos[0], mPos[2], -mPos[1]); alListenerfv(AL_ORIENTATION, orient); throwALerror(); } diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 794383591b..3c1a3d3127 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -4,6 +4,8 @@ #include #include +#include + #include "soundmanager.hpp" #include "../mwworld/ptr.hpp" @@ -34,7 +36,13 @@ namespace MWSound Sound_Output& operator=(const Sound_Output &rhs); Sound_Output(const Sound_Output &rhs); - Sound_Output(SoundManager &mgr) : mManager(mgr) { } + protected: + Ogre::Vector3 mPos; + + Sound_Output(SoundManager &mgr) + : mManager(mgr) + , mPos(0.0f, 0.0f, 0.0f) + { } public: virtual ~Sound_Output() { } From fc5cd703bb189d774a1d843d44e508772389a1c7 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 16:34:36 +0200 Subject: [PATCH 244/488] maps are now rendered with correct rotation, however for interiors the arrow is wrong --- apps/openmw/mwrender/localmap.cpp | 37 +++++++++++++++++------ apps/openmw/mwrender/localmap.hpp | 5 +-- apps/openmw/mwrender/renderingmanager.cpp | 2 +- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 803899110c..063b253019 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -17,7 +17,8 @@ LocalMap::LocalMap(OEngine::Render::OgreRenderer* rend, MWWorld::Environment* en mRendering = rend; mEnvironment = env; - mCameraRotNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); + mCameraPosNode = mRendering->getScene()->getRootSceneNode()->createChildSceneNode(); + mCameraRotNode = mCameraPosNode->createChildSceneNode(); mCameraNode = mCameraRotNode->createChildSceneNode(); mCellCamera = mRendering->getScene()->createCamera("CellCamera"); @@ -101,6 +102,8 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell) int x = cell->cell->data.gridX; int y = cell->cell->data.gridY; + mCameraPosNode->setPosition(Vector3(0,0,0)); + render((x+0.5)*sSize, (-y-0.5)*sSize, -10000, 10000, sSize, sSize, name); } @@ -110,17 +113,26 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, mInterior = true; mBounds = bounds; - Vector2 z(bounds.getMaximum().y, bounds.getMinimum().y); - Vector2 min(bounds.getMinimum().x, bounds.getMinimum().z); - Vector2 max(bounds.getMaximum().x, bounds.getMaximum().z); + Vector2 z(mBounds.getMaximum().y, mBounds.getMinimum().y); const Vector2& north = mEnvironment->mWorld->getNorthVector(cell); - Radian angle(std::atan2(north.x, north.y)); + Radian angle(std::atan2(-north.x, -north.y)); mCameraRotNode->setOrientation(Quaternion(Math::Cos(angle/2.f), 0, Math::Sin(angle/2.f), 0)); - Vector2 length = max-min; + mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_LEFT_BOTTOM))); + mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::FAR_LEFT_BOTTOM))); + mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::NEAR_RIGHT_BOTTOM))); + mBounds.merge(mCameraRotNode->convertWorldToLocalPosition(bounds.getCorner(AxisAlignedBox::FAR_RIGHT_BOTTOM))); + Vector2 center(bounds.getCenter().x, bounds.getCenter().z); + Vector2 min(mBounds.getMinimum().x, mBounds.getMinimum().z); + Vector2 max(mBounds.getMaximum().x, mBounds.getMaximum().z); + + Vector2 length = max-min; + + mCameraPosNode->setPosition(Vector3(center.x, 0, center.y)); + // divide into segments const int segsX = std::ceil( length.x / sSize ); const int segsY = std::ceil( length.y / sSize ); @@ -134,7 +146,7 @@ void LocalMap::requestMap(MWWorld::Ptr::CellStore* cell, Vector2 start = min + Vector2(sSize*x,sSize*y); Vector2 newcenter = start + 4096; - render(newcenter.x, newcenter.y, z.y, z.x, sSize, sSize, + render(newcenter.x - center.x, newcenter.y - center.y, z.y, z.x, sSize, sSize, cell->cell->name + "_" + coordStr(x,y)); } } @@ -227,7 +239,7 @@ void LocalMap::render(const float x, const float y, mRendering->getScene()->setFog(FOG_LINEAR, clr, 0, fStart, fEnd); } -void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& direction) +void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Quaternion& orientation) { if (sFogOfWarSkip != 0) { @@ -240,9 +252,13 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& int x,y; Vector3 _pos(position.x, 0, position.z); _pos = mCameraRotNode->convertWorldToLocalPosition(_pos); + + //if (mInterior) + /// \todo + Vector2 pos(_pos.x, _pos.z); - Vector3 playerdirection = mCameraRotNode->convertWorldToLocalPosition(direction); + Vector3 playerdirection = -mCameraRotNode->convertWorldToLocalOrientation(orientation).zAxis(); if (!mInterior) { @@ -279,6 +295,9 @@ void LocalMap::updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& texName = mInteriorName + "_" + coordStr(x,y); } + + //std::cout << " x,y " << x << ", " << y << " u,v " << u << "," << v << std::endl; + mEnvironment->mWindowManager->setPlayerPos(u, v); mEnvironment->mWindowManager->setPlayerDir(playerdirection.x, -playerdirection.z); diff --git a/apps/openmw/mwrender/localmap.hpp b/apps/openmw/mwrender/localmap.hpp index 42603885a0..cb294a6568 100644 --- a/apps/openmw/mwrender/localmap.hpp +++ b/apps/openmw/mwrender/localmap.hpp @@ -44,9 +44,9 @@ namespace MWRender * @remarks This is used to draw a "fog of war" effect * to hide areas on the map the player has not discovered yet. * @param position (OGRE coordinates) - * @param view direction (OGRE coordinates) + * @param camera orientation (OGRE coordinates) */ - void updatePlayer (const Ogre::Vector3& position, const Ogre::Vector3& direction); + void updatePlayer (const Ogre::Vector3& position, const Ogre::Quaternion& orientation); /** * Save the fog of war for the current cell to disk. @@ -74,6 +74,7 @@ namespace MWRender Ogre::Camera* mCellCamera; Ogre::SceneNode* mCameraNode; + Ogre::SceneNode* mCameraPosNode; Ogre::SceneNode* mCameraRotNode; void render(const float x, const float y, diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index c947b67f5c..5df93ab32e 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -171,7 +171,7 @@ void RenderingManager::update (float duration){ mRendering.update(duration); - mLocalMap->updatePlayer( mRendering.getCamera()->getRealPosition(), mRendering.getCamera()->getRealDirection() ); + mLocalMap->updatePlayer( mRendering.getCamera()->getRealPosition(), mRendering.getCamera()->getRealOrientation() ); checkUnderwater(); } From 8ac9dd8e70116eb8adf3f1f34a50a4d9b776fd32 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 30 Mar 2012 16:59:19 +0200 Subject: [PATCH 245/488] Always use the same type of slashes --- components/bsa/bsa_archive.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index eb392757b8..e33f0ba49d 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -104,13 +104,10 @@ class DirArchive: public Ogre::FileSystemArchive std::vector current; { std::map,ciLessBoost>::const_iterator found = m.find(folder); - if (found == m.end()) - { - std::replace(folder.begin(), folder.end(), '/', '\\'); - found = m.find(folder); - } - if (found != m.end()) + if (found == m.end()) + return false; + else current = found->second; } @@ -134,16 +131,14 @@ class DirArchive: public Ogre::FileSystemArchive //need to cut off first boost::filesystem::directory_iterator dir_iter(d), dir_end; std::vector filesind; - boost::filesystem::path f; for(;dir_iter != dir_end; dir_iter++) { if(boost::filesystem::is_directory(*dir_iter)) populateMap(*dir_iter); else { - - f = *dir_iter; - std::string s = f.string(); + std::string s = dir_iter->path().string(); + std::replace(s.begin(), s.end(), '\\', '/'); std::string small; if(cutoff < s.size()) @@ -155,14 +150,16 @@ class DirArchive: public Ogre::FileSystemArchive } } std::sort(filesind.begin(), filesind.end(), ciLessBoost()); + std::string small; std::string original = d.string(); + std::replace(original.begin(), original.end(), '\\', '/'); if(cutoff < original.size()) small = original.substr(cutoff, original.size() - cutoff); else small = original.substr(cutoff - 1, original.size() - cutoff); - m[small] = filesind; + m[small] = filesind; } bool isCaseSensitive() const { return fsstrict; } From a1d3516e0a23c049eca4e787d8dc5e06193f1af9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 30 Mar 2012 17:01:23 +0200 Subject: [PATCH 246/488] constness fix --- apps/openmw/mwworld/ptr.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/ptr.hpp b/apps/openmw/mwworld/ptr.hpp index c31c531223..d6e485f419 100644 --- a/apps/openmw/mwworld/ptr.hpp +++ b/apps/openmw/mwworld/ptr.hpp @@ -39,7 +39,7 @@ namespace MWWorld return mPtr.empty(); } - const std::type_info& getType() + const std::type_info& getType() const { assert (!mPtr.empty()); return mPtr.type(); From 0892df0ad38ca0eddf0da8b0c46ba7676f4dc0a1 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 30 Mar 2012 17:01:55 +0200 Subject: [PATCH 247/488] framework for gamemechanics-realted actor updated --- apps/openmw/engine.cpp | 5 +-- apps/openmw/mwmechanics/actors.cpp | 34 ++++++++++++++++++-- apps/openmw/mwmechanics/actors.hpp | 12 +++++-- apps/openmw/mwmechanics/mechanicsmanager.cpp | 5 +-- apps/openmw/mwmechanics/mechanicsmanager.hpp | 6 +++- 5 files changed, 52 insertions(+), 10 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 441c227699..45ed0abd45 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -148,7 +148,8 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt) // update actors std::vector > movement; - mEnvironment.mMechanicsManager->update (movement); + mEnvironment.mMechanicsManager->update (movement, mEnvironment.mFrameDuration, + mEnvironment.mWindowManager->getMode()!=MWGui::GM_Game); if (mEnvironment.mWindowManager->getMode()==MWGui::GM_Game) mEnvironment.mWorld->doPhysics (movement, mEnvironment.mFrameDuration); @@ -317,7 +318,7 @@ void OMW::Engine::go() // to find core.xml here. //addResourcesDirectory(mResDir); - + addResourcesDirectory(mResDir / "mygui"); addResourcesDirectory(mResDir / "water"); diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index e4fba8a9c4..d532c6f091 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -1,11 +1,25 @@ #include "actors.hpp" +#include + +#include + #include "../mwworld/class.hpp" namespace MWMechanics { - Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment) {} + void Actors::updateActor (const MWWorld::Ptr& ptr, float duration) + { + + } + + void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused) + { + + } + + Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment), mDuration (0) {} void Actors::addActor (const MWWorld::Ptr& ptr) { @@ -30,8 +44,24 @@ namespace MWMechanics ++iter; } - void Actors::update (std::vector >& movement) + void Actors::update (std::vector >& movement, float duration, + bool paused) { + mDuration += duration; + + if (mDuration>=0.25) + { + for (std::set::iterator iter (mActors.begin()); iter!=mActors.end(); ++iter) + { + updateActor (*iter, mDuration); + + if (iter->getTypeName()==typeid (ESM::NPC).name()) + updateNpc (*iter, mDuration, paused); + } + + mDuration = 0; + } + for (std::set::iterator iter (mActors.begin()); iter!=mActors.end(); ++iter) { diff --git a/apps/openmw/mwmechanics/actors.hpp b/apps/openmw/mwmechanics/actors.hpp index d3a3724726..7ff33b63bd 100644 --- a/apps/openmw/mwmechanics/actors.hpp +++ b/apps/openmw/mwmechanics/actors.hpp @@ -21,8 +21,13 @@ namespace MWMechanics { class Actors { - MWWorld::Environment& mEnvironment; - std::set mActors; + MWWorld::Environment& mEnvironment; + std::set mActors; + float mDuration; + + void updateActor (const MWWorld::Ptr& ptr, float duration); + + void updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused); public: @@ -37,7 +42,8 @@ namespace MWMechanics void dropActors (const MWWorld::Ptr::CellStore *cellStore); ///< Deregister all actors in the given cell. - void update (std::vector >& movement); + void update (std::vector >& movement, + float duration, bool paused); ///< Update actor stats and store desired velocity vectors in \a movement }; } diff --git a/apps/openmw/mwmechanics/mechanicsmanager.cpp b/apps/openmw/mwmechanics/mechanicsmanager.cpp index f669ea65ce..3c93857ef9 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.cpp @@ -253,7 +253,8 @@ namespace MWMechanics mWatched = ptr; } - void MechanicsManager::update (std::vector >& movement) + void MechanicsManager::update (std::vector >& movement, + float duration, bool paused) { if (!mWatched.isEmpty()) { @@ -336,7 +337,7 @@ namespace MWMechanics mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills); } - mActors.update (movement); + mActors.update (movement, duration, paused); } void MechanicsManager::setPlayerName (const std::string& name) diff --git a/apps/openmw/mwmechanics/mechanicsmanager.hpp b/apps/openmw/mwmechanics/mechanicsmanager.hpp index bf0a6215a1..a7defe178a 100644 --- a/apps/openmw/mwmechanics/mechanicsmanager.hpp +++ b/apps/openmw/mwmechanics/mechanicsmanager.hpp @@ -60,8 +60,12 @@ namespace MWMechanics ///< On each update look for changes in a previously registered actor and update the /// GUI accordingly. - void update (std::vector >& movement); + void update (std::vector >& movement, float duration, + bool paused); ///< Update actor stats and store desired velocity vectors in \a movement + /// + /// \param paused In game type does not currently advance (this usually means some GUI + /// component is up). void setPlayerName (const std::string& name); ///< Set player name. From ff85006e7159aa808c23bd02f9fb83d24b277da0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Mar 2012 18:38:33 +0200 Subject: [PATCH 248/488] added untested interface --- components/CMakeLists.txt | 4 ++ components/settings/settings.cpp | 64 ++++++++++++++++++++++++++++++++ components/settings/settings.hpp | 35 +++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 components/settings/settings.cpp create mode 100644 components/settings/settings.hpp diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index c95efb37df..b48c50640c 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -2,6 +2,10 @@ project (Components) # source files +add_component_dir (settings + settings + ) + add_component_dir (bsa bsa_archive bsa_file ) diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp new file mode 100644 index 0000000000..157de0b4d0 --- /dev/null +++ b/components/settings/settings.cpp @@ -0,0 +1,64 @@ +#include "settings.hpp" + +#include + +#include +#include + +using namespace Settings; + +Ogre::ConfigFile Manager::mFile = Ogre::ConfigFile(); +Ogre::ConfigFile Manager::mDefaultFile = Ogre::ConfigFile(); + +void Manager::load(const std::string& file) +{ + mFile.load(file); +} + +void Manager::loadDefault(const std::string& file) +{ + mDefaultFile.load(file); +} + +void Manager::save(const std::string& file) +{ + std::fstream fout(file.c_str(), std::ios::out); + + Ogre::ConfigFile::SectionIterator seci = mFile.getSectionIterator(); + + while (seci.hasMoreElements()) + { + Ogre::String sectionName = seci.peekNextKey(); + + if (sectionName.length() > 0) + fout << '\n' << '[' << seci.peekNextKey() << ']' << '\n'; + + Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); + Ogre::ConfigFile::SettingsMultiMap::iterator i; + for (i = settings->begin(); i != settings->end(); ++i) + { + fout << i->first.c_str() << '=' << i->second.c_str() << '\n'; + } + } +} + +const std::string Manager::getString (const std::string& setting, const std::string& category) +{ + std::string defaultval = mDefaultFile.getSetting(setting, category); + return mFile.getSetting(setting, category, defaultval); +} + +const float Manager::getFloat (const std::string& setting, const std::string& category) +{ + return Ogre::StringConverter::parseReal( getString(setting, category) ); +} + +const int Manager::getInt (const std::string& setting, const std::string& category) +{ + return Ogre::StringConverter::parseInt( getString(setting, category) ); +} + +const bool Manager::getBool (const std::string& setting, const std::string& category) +{ + return Ogre::StringConverter::parseBool( getString(setting, category) ); +} diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp new file mode 100644 index 0000000000..ae6f1a9de7 --- /dev/null +++ b/components/settings/settings.hpp @@ -0,0 +1,35 @@ +#ifndef _COMPONENTS_SETTINGS_H +#define _COMPONENTS_SETTINGS_H + +#include + +namespace Settings +{ + + /// + /// \brief Settings management (can change during runtime) + /// + class Manager + { + public: + static Ogre::ConfigFile mFile; + static Ogre::ConfigFile mDefaultFile; + + void loadDefault (const std::string& file); + ///< load file as the default settings (can be overridden by user settings) + + void load (const std::string& file); + ///< load file as user settings + + void save (const std::string& file); + ///< save to file + + static const int getInt (const std::string& setting, const std::string& category); + static const float getFloat (const std::string& setting, const std::string& category); + static const std::string getString (const std::string& setting, const std::string& category); + static const bool getBool (const std::string& setting, const std::string& category); + }; + +} + +#endif // _COMPONENTS_SETTINGS_H From fc4e4dc336feb15584875f651e88f1cd0936a8e6 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 30 Mar 2012 19:05:58 +0200 Subject: [PATCH 249/488] Case sensitiviy? --- components/bsa/bsa_archive.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index e33f0ba49d..bd61e03395 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -112,7 +112,13 @@ class DirArchive: public Ogre::FileSystemArchive } pathComparer comp(delimiter, copy.size() - delimiter-1); - return std::binary_search(current.begin(), current.end(), copy, comp); + std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); + if (find != current.end() && !comp(copy, current.front())) + { + copy = *find; + return true; + } + return false; } public: From fefc8f86ab05f48cd5253a4939d96e9354c3fbd3 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 11:11:07 -0700 Subject: [PATCH 250/488] Remove the unused streamSound3D method --- apps/openmw/mwsound/openal_output.cpp | 44 --------------------------- apps/openmw/mwsound/openal_output.hpp | 3 -- apps/openmw/mwsound/sound_output.hpp | 2 -- 3 files changed, 49 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 8d574b2f2b..da1de3d147 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -709,50 +709,6 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa return sound; } -SoundPtr OpenAL_Output::streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max) -{ - throwALerror(); - - boost::shared_ptr sound; - ALuint src; - - if(mFreeSources.empty()) - fail("No free sources"); - src = mFreeSources.front(); - mFreeSources.pop_front(); - - try - { - DecoderPtr decoder = mManager.getDecoder(); - decoder->open(fname); - sound.reset(new OpenAL_SoundStream(*this, src, decoder)); - } - catch(std::exception &e) - { - mFreeSources.push_back(src); - throw; - } - - alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); - alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); - alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); - - alSourcef(src, AL_REFERENCE_DISTANCE, min); - alSourcef(src, AL_MAX_DISTANCE, max); - alSourcef(src, AL_ROLLOFF_FACTOR, 1.0f); - - alSourcef(src, AL_GAIN, volume); - alSourcef(src, AL_PITCH, pitch); - - alSourcei(src, AL_SOURCE_RELATIVE, AL_FALSE); - alSourcei(src, AL_LOOPING, AL_FALSE); - throwALerror(); - - sound->play(); - return sound; -} - void OpenAL_Output::updateListener(const float *pos, const float *atdir, const float *updir) { diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index d288a62f39..f37f72cabd 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -43,10 +43,7 @@ namespace MWSound virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop); virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop); - virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch); - virtual SoundPtr streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max); virtual void updateListener(const float *pos, const float *atdir, const float *updir); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index 3c1a3d3127..e54f9016da 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -28,8 +28,6 @@ namespace MWSound virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, float min, float max, bool loop) = 0; virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch) = 0; - virtual SoundPtr streamSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max) = 0; virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; From fc167dbc83b6312433d1469ec8222f22ac47e10b Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 30 Mar 2012 11:42:11 -0700 Subject: [PATCH 251/488] Pass Ogre Vector3s to playSound3D and updateListener --- apps/openmw/mwsound/openal_output.cpp | 16 ++++++++-------- apps/openmw/mwsound/openal_output.hpp | 6 +++--- apps/openmw/mwsound/sound_output.hpp | 6 +++--- apps/openmw/mwsound/soundmanager.cpp | 16 +++++++++------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index da1de3d147..9fda1470c6 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -616,7 +616,7 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float return sound; } -SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const float *pos, float volume, float pitch, +SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector3 &pos, float volume, float pitch, float min, float max, bool loop) { throwALerror(); @@ -643,7 +643,7 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const float *pos, throw; } - alSource3f(src, AL_POSITION, pos[0], pos[2], -pos[1]); + alSource3f(src, AL_POSITION, pos.x, pos.z, -pos.y); alSource3f(src, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(src, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -710,15 +710,15 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa } -void OpenAL_Output::updateListener(const float *pos, const float *atdir, const float *updir) +void OpenAL_Output::updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) { - float orient[6] = { - atdir[0], atdir[2], -atdir[1], - updir[0], updir[2], -updir[1] + ALfloat orient[6] = { + atdir.x, atdir.z, -atdir.y, + updir.x, updir.z, -updir.y }; - mPos = Ogre::Vector3(pos[0], pos[1], pos[2]); + mPos = pos; - alListener3f(AL_POSITION, mPos[0], mPos[2], -mPos[1]); + alListener3f(AL_POSITION, mPos.x, mPos.z, -mPos.y); alListenerfv(AL_ORIENTATION, orient); throwALerror(); } diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index f37f72cabd..f4d4e90afd 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -41,11 +41,11 @@ namespace MWSound virtual void deinit(); virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop); - virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max, bool loop); + virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, + float volume, float pitch, float min, float max, bool loop); virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch); - virtual void updateListener(const float *pos, const float *atdir, const float *updir); + virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir); OpenAL_Output& operator=(const OpenAL_Output &rhs); OpenAL_Output(const OpenAL_Output &rhs); diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index e54f9016da..ed3dda2f34 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -25,11 +25,11 @@ namespace MWSound virtual void deinit() = 0; virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop) = 0; - virtual SoundPtr playSound3D(const std::string &fname, const float *pos, float volume, float pitch, - float min, float max, bool loop) = 0; + virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, + float volume, float pitch, float min, float max, bool loop) = 0; virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch) = 0; - virtual void updateListener(const float *pos, const float *atdir, const float *updir) = 0; + virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) = 0; Sound_Output& operator=(const Sound_Output &rhs); Sound_Output(const Sound_Output &rhs); diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index da7cb9d3b3..005df3e7ef 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -184,10 +184,11 @@ namespace MWSound float basevol = 1.0f; /* TODO: volume settings */ std::string filePath = "Sound/"+filename; const ESM::Position &pos = ptr.getCellRef().pos; + const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); - SoundPtr sound = mOutput->playSound3D(filePath, pos.pos, basevol, 1.0f, + SoundPtr sound = mOutput->playSound3D(filePath, objpos, basevol, 1.0f, 20.0f, 12750.0f, false); - sound->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); + sound->mPos = objpos; sound->mBaseVolume = basevol; mActiveSounds[sound] = std::make_pair(ptr, std::string("_say_sound")); @@ -240,9 +241,10 @@ namespace MWSound float min, max; std::string file = lookup(soundId, basevol, min, max); const ESM::Position &pos = ptr.getCellRef().pos; + const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); - sound = mOutput->playSound3D(file, pos.pos, volume*basevol, pitch, min, max, loop); - sound->mPos = Ogre::Vector3(pos.pos[0], pos.pos[1], pos.pos[2]); + sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, loop); + sound->mPos = objpos; sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; @@ -414,9 +416,9 @@ namespace MWSound // The output handler is expecting vectors oriented like the game // (that is, -Z goes down, +Y goes forward), but that's not what we // get from Ogre's camera, so we have to convert. - float pos[3] = { nPos[0], -nPos[2], nPos[1] }; - float at[3] = { nDir[0], -nDir[2], nDir[1] }; - float up[3] = { nUp[0], -nUp[2], nUp[1] }; + const Ogre::Vector3 pos(nPos[0], -nPos[2], nPos[1]); + const Ogre::Vector3 at(nDir[0], -nDir[2], nDir[1]); + const Ogre::Vector3 up(nUp[0], -nUp[2], nUp[1]); mOutput->updateListener(pos, at, up); // Check if any sounds are finished playing, and trash them From fbd626baf69da248f64e0545d635799469a7a09e Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 30 Mar 2012 20:59:44 +0200 Subject: [PATCH 252/488] mwiniimporter --- CMakeLists.txt | 7 +++++- apps/mwiniimporter/CMakeLists.txt | 21 +++++++++++++++++ apps/mwiniimporter/importer.cpp | 6 +++++ apps/mwiniimporter/importer.hpp | 17 ++++++++++++++ apps/mwiniimporter/main.cpp | 39 +++++++++++++++++++++++++++++++ apps/mwiniimporter/main.hpp | 11 +++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 apps/mwiniimporter/CMakeLists.txt create mode 100644 apps/mwiniimporter/importer.cpp create mode 100644 apps/mwiniimporter/importer.hpp create mode 100644 apps/mwiniimporter/main.cpp create mode 100644 apps/mwiniimporter/main.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f007dbccf..552a6997a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -305,7 +305,7 @@ if(DPKG_PROGRAM) Data files from the original game is required to run it.") SET(CPACK_DEBIAN_PACKAGE_NAME "openmw") SET(CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}") - SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW esmtool;Esmtool omwlauncher;OMWLauncher") + SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW esmtool;Esmtool omwlauncher;OMWLauncher mwiniimporter;MWiniImporter") SET(CPACK_DEBIAN_PACKAGE_DEPENDS "nvidia-cg-toolkit (>= 2.1), libboost-filesystem1.46.1 (>= 1.46.1), libboost-program-options1.46.1 (>= 1.46.1), libboost-system1.46.1 (>= 1.46.1), libboost-thread1.46.1 (>= 1.46.1), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.3.0 (>= 1.3.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2), libqtgui4 (>= 4.7.0)") SET(CPACK_DEBIAN_PACKAGE_SECTION "Games") @@ -391,6 +391,11 @@ if (BUILD_LAUNCHER) add_subdirectory( apps/launcher ) endif() +option(BUILD_MWINIIMPORTER "build MWiniImporter inspector" ON) +if (BUILD_MWINIIMPORTER) + add_subdirectory( apps/mwiniimporter ) +endif() + if (WIN32) if (MSVC) if (USE_DEBUG_CONSOLE) diff --git a/apps/mwiniimporter/CMakeLists.txt b/apps/mwiniimporter/CMakeLists.txt new file mode 100644 index 0000000000..1d7b7b624c --- /dev/null +++ b/apps/mwiniimporter/CMakeLists.txt @@ -0,0 +1,21 @@ +set(MWINIIMPORT + main.cpp + importer.cpp +) + +set(MWINIIMPORT_HEADER + main.hpp + importer.hpp +) + +source_group(launcher FILES ${MWINIIMPORT} ${MWINIIMPORT_HEADER}) + +add_executable(mwiniimport + ${MWINIIMPORT} +) + +target_link_libraries(mwiniimport + ${Boost_LIBRARIES} + components +) + diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp new file mode 100644 index 0000000000..225b1667c4 --- /dev/null +++ b/apps/mwiniimporter/importer.cpp @@ -0,0 +1,6 @@ +#include "importer.hpp" + +void MwIniImporter::test() { + +} + diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp new file mode 100644 index 0000000000..026ed55bf9 --- /dev/null +++ b/apps/mwiniimporter/importer.hpp @@ -0,0 +1,17 @@ +#ifndef MWINIIMPORTER_IMPORTER +#define MWINIIMPORTER_IMPORTER 1 + +#include + +class MwIniImporter { + + public: + void test(); + + private: + + +}; + + +#endif diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp new file mode 100644 index 0000000000..46cb37e7f4 --- /dev/null +++ b/apps/mwiniimporter/main.cpp @@ -0,0 +1,39 @@ +#include "main.hpp" +#include "importer.hpp" + +int main(int argc, char *argv[]) { + + bpo::options_description desc("Syntax: mwiniimporter \nAllowed options"); + desc.add_options() + ("help,h", "produce help message") + ("in,i", bpo::value()->required(), "morrowind.ini input file") + ("out,o", bpo::value()->required(), "openmw.cfg output file") + ; + + bpo::variables_map vm; + try { + bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); + bpo::notify(vm); + + } + catch(std::exception& e) { + std::cout << "Error:" << e.what() << std::endl; + return -1; + } + catch(...) { + std::cout << "Error" << std::endl; + return -1; + } + + if(vm.count("help")) { + std::cout << desc; + return 0; + } + + std::cout << "in:" << vm["in"].as() << std::endl; + + MwIniImporter importer; + importer.test(); + + return 0; +} diff --git a/apps/mwiniimporter/main.hpp b/apps/mwiniimporter/main.hpp new file mode 100644 index 0000000000..f93de7b078 --- /dev/null +++ b/apps/mwiniimporter/main.hpp @@ -0,0 +1,11 @@ +#ifndef MWINIIMPORTER_MAIN +#define MWINIIMPORTER_MAIN 1 + +#include +#include +#include + +namespace bpo = boost::program_options; + + +#endif From c160bc708091039cccdea53bc584704713193852 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 30 Mar 2012 22:58:54 +0200 Subject: [PATCH 253/488] works, sort of --- apps/mwiniimporter/CMakeLists.txt | 1 - apps/mwiniimporter/importer.cpp | 94 ++++++++++++++++++++++++++++++- apps/mwiniimporter/importer.hpp | 18 +++++- apps/mwiniimporter/main.cpp | 58 +++++++++++++++---- apps/mwiniimporter/main.hpp | 11 ---- 5 files changed, 155 insertions(+), 27 deletions(-) delete mode 100644 apps/mwiniimporter/main.hpp diff --git a/apps/mwiniimporter/CMakeLists.txt b/apps/mwiniimporter/CMakeLists.txt index 1d7b7b624c..2a8c0f5fea 100644 --- a/apps/mwiniimporter/CMakeLists.txt +++ b/apps/mwiniimporter/CMakeLists.txt @@ -4,7 +4,6 @@ set(MWINIIMPORT ) set(MWINIIMPORT_HEADER - main.hpp importer.hpp ) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 225b1667c4..d0cfe4a04e 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -1,6 +1,96 @@ #include "importer.hpp" +#include +#include +#include -void MwIniImporter::test() { - +void MwIniImporter::setVerbose(bool verbose) { + mVerbose = verbose; } +strmap MwIniImporter::loadIniFile(std::string filename) { + std::cout << "load ini file: " << filename << std::endl; + + std::map map; + boost::iostreams::streamfile(filename.c_str()); + + std::string line; + while (std::getline(file, line)) { + + // ignore sections for now + if(line.empty() || line[0] == ';' || line[0] == '[') { + continue; + } + + int pos = line.find("="); + if(pos < 1) { + throw IniParseException(); + } + + map.insert(std::pair( + line.substr(0,pos), line.substr(pos+1) + )); + } + + return map; +} + +strmap MwIniImporter::loadCfgFile(std::string filename) { + std::cout << "load cfg file: " << filename << std::endl; + + std::map map; + boost::iostreams::streamfile(filename.c_str()); + + std::string line; + while (std::getline(file, line)) { + + if(line[0] == '[') { // section + continue; // ignore for now + } + + // we cant say comment by only looking at first char anymore + int comment_pos = line.find("#"); + if(comment_pos > 0) { + line = line.substr(0,comment_pos); + } + + if(line.empty()) { + continue; + } + + int pos = line.find("="); + if(pos < 1) { + throw IniParseException(); + } + + map.insert(std::pair( + line.substr(0,pos), line.substr(pos+1) + )); + } + + return map; +} + +void MwIniImporter::merge(strmap &cfg, strmap &ini) { + strmap::iterator ini_it; + for(strmap::iterator it=cfg.begin(); it != cfg.end(); it++) { + ini_it = ini.find(it->first); + + // found a key in both files + if(ini_it != ini.end()) { + cfg.erase(it); + cfg.insert(std::pair( + ini_it->first, ini_it->second + )); + } + } +} + +void MwIniImporter::writeToFile(std::string file, strmap &cfg) { + boost::iostreams::stream out(file); + + for(strmap::iterator it=cfg.begin(); it != cfg.end(); it++) { + out << (it->first) << "=" << (it->second) << std::endl; + } +} + + diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 026ed55bf9..1933830f21 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -2,14 +2,28 @@ #define MWINIIMPORTER_IMPORTER 1 #include +#include +#include + +typedef std::map strmap; + +class IniParseException : public std::exception { + virtual const char* what() const throw() { + return "unexpected end of line"; + } +}; class MwIniImporter { public: - void test(); + void setVerbose(bool verbose); + strmap loadIniFile(std::string filename); + strmap loadCfgFile(std::string filename); + void merge(strmap &cfg, strmap &ini); + void writeToFile(std::string file, strmap &cfg); private: - + bool mVerbose; }; diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 46cb37e7f4..fa7a5c512f 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -1,39 +1,75 @@ -#include "main.hpp" #include "importer.hpp" +#include +#include +#include +#include + +namespace bpo = boost::program_options; + int main(int argc, char *argv[]) { bpo::options_description desc("Syntax: mwiniimporter \nAllowed options"); desc.add_options() ("help,h", "produce help message") - ("in,i", bpo::value()->required(), "morrowind.ini input file") - ("out,o", bpo::value()->required(), "openmw.cfg output file") + ("verbose,v", "verbose output") + ("ini,i", bpo::value()->required(), "morrowind.ini file") + ("cfg,c", bpo::value()->required(), "openmw.cfg file") + ("output,o", bpo::value()->default_value(""), "openmw.cfg file") ; bpo::variables_map vm; try { bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); + + // parse help before calling notify because we dont want it to throw an error if help is set + if(vm.count("help")) { + std::cout << desc; + return 0; + } + bpo::notify(vm); } catch(std::exception& e) { - std::cout << "Error:" << e.what() << std::endl; + std::cerr << "Error:" << e.what() << std::endl; return -1; } catch(...) { - std::cout << "Error" << std::endl; - return -1; + std::cerr << "Error" << std::endl; + return -2; } - if(vm.count("help")) { - std::cout << desc; - return 0; + std::string iniFile = vm["ini"].as(); + std::string cfgFile = vm["cfg"].as(); + + // if no output is given, write back to cfg file + std::string outputFile(vm["output"].as()); + if(vm["output"].defaulted()) { + outputFile = vm["cfg"].as(); } - std::cout << "in:" << vm["in"].as() << std::endl; + if(!boost::filesystem::exists(iniFile)) { + std::cerr << "ini file does not exist" << std::endl; + return -3; + } + if(!boost::filesystem::exists(cfgFile)) { + std::cerr << "cfg file does not exist" << std::endl; + return -4; + } MwIniImporter importer; - importer.test(); + importer.setVerbose(vm.count("verbose")); + + std::mapini = importer.loadIniFile(iniFile); + std::mapcfg = importer.loadCfgFile(cfgFile); + + importer.merge(cfg, ini); + + std::cout << "write to: " << outputFile << std::endl; + importer.writeToFile(outputFile, cfg); return 0; } + + diff --git a/apps/mwiniimporter/main.hpp b/apps/mwiniimporter/main.hpp deleted file mode 100644 index f93de7b078..0000000000 --- a/apps/mwiniimporter/main.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef MWINIIMPORTER_MAIN -#define MWINIIMPORTER_MAIN 1 - -#include -#include -#include - -namespace bpo = boost::program_options; - - -#endif From 849c3a9bececfdeba8495f09dc057f62236027e8 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Fri, 30 Mar 2012 23:12:52 +0200 Subject: [PATCH 254/488] add the section to the ini-keys --- apps/mwiniimporter/importer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index d0cfe4a04e..f662f42d64 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -10,6 +10,7 @@ void MwIniImporter::setVerbose(bool verbose) { strmap MwIniImporter::loadIniFile(std::string filename) { std::cout << "load ini file: " << filename << std::endl; + std::string section(""); std::map map; boost::iostreams::streamfile(filename.c_str()); @@ -17,17 +18,25 @@ strmap MwIniImporter::loadIniFile(std::string filename) { while (std::getline(file, line)) { // ignore sections for now - if(line.empty() || line[0] == ';' || line[0] == '[') { + if(line.empty() || line[0] == ';') { continue; } + if(line[0] == '[') { + if(line.length() > 2) { + section = line.substr(1, line.length()-3); + continue; + } + throw IniParseException(); + } + int pos = line.find("="); if(pos < 1) { throw IniParseException(); } map.insert(std::pair( - line.substr(0,pos), line.substr(pos+1) + section + " " + line.substr(0,pos), line.substr(pos+1) )); } From 8d9100c77b7fd67df4c18a1642beffcf3bc68b72 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 30 Mar 2012 23:29:58 +0200 Subject: [PATCH 255/488] Debug output --- components/bsa/bsa_archive.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index bd61e03395..9d7212a5c4 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -101,12 +101,17 @@ class DirArchive: public Ogre::FileSystemArchive delimiter = lastSlash+1; } + std::cout << "Finding: " << copy; + std::vector current; { std::map,ciLessBoost>::const_iterator found = m.find(folder); if (found == m.end()) + { + std::cout << " failed, couldn't find folder." << std::endl; return false; + } else current = found->second; } @@ -115,9 +120,18 @@ class DirArchive: public Ogre::FileSystemArchive std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); if (find != current.end() && !comp(copy, current.front())) { + std::cout << " found"; + if (copy != *find) + if (lexicographical_compare(copy, *find, boost::algorithm::is_iless())) + std::cout << " case folded to " << *find << std::endl; + else + std::cout << " as different file " << *find << std::endl; + copy = *find; return true; } + + std::cout << " failed, couldn't find file." << std::endl; return false; } From 8e07b7e05002e246d785b3c6d7b35ace6bdb68b1 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 31 Mar 2012 00:54:49 +0200 Subject: [PATCH 256/488] Better (less) debug output --- components/bsa/bsa_archive.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 9d7212a5c4..6501271597 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -101,37 +101,34 @@ class DirArchive: public Ogre::FileSystemArchive delimiter = lastSlash+1; } - std::cout << "Finding: " << copy; - std::vector current; { std::map,ciLessBoost>::const_iterator found = m.find(folder); if (found == m.end()) { - std::cout << " failed, couldn't find folder." << std::endl; return false; } else current = found->second; } + std::cout << "Finding: " << copy; + pathComparer comp(delimiter, copy.size() - delimiter-1); std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); if (find != current.end() && !comp(copy, current.front())) { std::cout << " found"; - if (copy != *find) - if (lexicographical_compare(copy, *find, boost::algorithm::is_iless())) - std::cout << " case folded to " << *find << std::endl; - else - std::cout << " as different file " << *find << std::endl; + if (copy != *find && !lexicographical_compare(copy, *find, boost::algorithm::is_iless())) + std::cout << ", as different file " << *find; + std::cout << "." << std::endl; copy = *find; return true; } - std::cout << " failed, couldn't find file." << std::endl; + std::cout << " failed." << std::endl; return false; } From 5adeee20fd893f1c7b04206365b6b06a8bacaa9c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 00:57:29 -0700 Subject: [PATCH 257/488] Mute sounds that go outside the max distance --- apps/openmw/mwsound/openal_output.cpp | 34 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 9fda1470c6..1b90c62fa1 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -77,6 +77,7 @@ class OpenAL_SoundStream : public Sound ALuint mBufferSize; DecoderPtr mDecoder; + bool mIs3D; volatile bool mIsFinished; @@ -84,7 +85,7 @@ class OpenAL_SoundStream : public Sound OpenAL_SoundStream& operator=(const OpenAL_SoundStream &rhs); public: - OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder); + OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder, bool is3D); virtual ~OpenAL_SoundStream(); virtual void stop(); @@ -164,8 +165,8 @@ private: }; -OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder) - : mOutput(output), mSource(src), mDecoder(decoder), mIsFinished(true) +OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder, bool is3D) + : mOutput(output), mSource(src), mDecoder(decoder), mIs3D(is3D), mIsFinished(true) { throwALerror(); @@ -256,7 +257,10 @@ bool OpenAL_SoundStream::isPlaying() void OpenAL_SoundStream::update() { - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + if(mIs3D && mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) + alSourcef(mSource, AL_GAIN, 0.0f); + else + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -323,11 +327,13 @@ class OpenAL_Sound : public Sound ALuint mSource; ALuint mBuffer; + bool mIs3D; + OpenAL_Sound(const OpenAL_Sound &rhs); OpenAL_Sound& operator=(const OpenAL_Sound &rhs); public: - OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf); + OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf, bool is3D); virtual ~OpenAL_Sound(); virtual void stop(); @@ -335,8 +341,8 @@ public: virtual void update(); }; -OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf) - : mOutput(output), mSource(src), mBuffer(buf) +OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf, bool is3D) + : mOutput(output), mSource(src), mBuffer(buf), mIs3D(is3D) { } OpenAL_Sound::~OpenAL_Sound() @@ -366,7 +372,10 @@ bool OpenAL_Sound::isPlaying() void OpenAL_Sound::update() { - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + if(mIs3D && mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) + alSourcef(mSource, AL_GAIN, 0.0f); + else + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -583,7 +592,7 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float try { buf = getBuffer(fname); - sound.reset(new OpenAL_Sound(*this, src, buf)); + sound.reset(new OpenAL_Sound(*this, src, buf, false)); } catch(std::exception &e) { @@ -632,7 +641,7 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector try { buf = getBuffer(fname); - sound.reset(new OpenAL_Sound(*this, src, buf)); + sound.reset(new OpenAL_Sound(*this, src, buf, true)); } catch(std::exception &e) { @@ -651,7 +660,8 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector alSourcef(src, AL_MAX_DISTANCE, max); alSourcef(src, AL_ROLLOFF_FACTOR, 1.0f); - alSourcef(src, AL_GAIN, volume); + alSourcef(src, AL_GAIN, (pos.squaredDistance(mPos) > max*max) ? + 0.0f : volume); alSourcef(src, AL_PITCH, pitch); alSourcei(src, AL_SOURCE_RELATIVE, AL_FALSE); @@ -682,7 +692,7 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa { DecoderPtr decoder = mManager.getDecoder(); decoder->open(fname); - sound.reset(new OpenAL_SoundStream(*this, src, decoder)); + sound.reset(new OpenAL_SoundStream(*this, src, decoder, false)); } catch(std::exception &e) { From b01289128bb50e6216799cbb0e6427bb0df369d9 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 01:15:27 -0700 Subject: [PATCH 258/488] Split OpenAL_Sound into separate classes for 2D and 3D sounds --- apps/openmw/mwsound/openal_output.cpp | 57 ++++++++++++++++++--------- apps/openmw/mwsound/openal_output.hpp | 1 + 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 1b90c62fa1..3ed86cf2bc 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -77,7 +77,6 @@ class OpenAL_SoundStream : public Sound ALuint mBufferSize; DecoderPtr mDecoder; - bool mIs3D; volatile bool mIsFinished; @@ -85,7 +84,7 @@ class OpenAL_SoundStream : public Sound OpenAL_SoundStream& operator=(const OpenAL_SoundStream &rhs); public: - OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder, bool is3D); + OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder); virtual ~OpenAL_SoundStream(); virtual void stop(); @@ -165,8 +164,8 @@ private: }; -OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder, bool is3D) - : mOutput(output), mSource(src), mDecoder(decoder), mIs3D(is3D), mIsFinished(true) +OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, DecoderPtr decoder) + : mOutput(output), mSource(src), mDecoder(decoder), mIsFinished(true) { throwALerror(); @@ -257,10 +256,7 @@ bool OpenAL_SoundStream::isPlaying() void OpenAL_SoundStream::update() { - if(mIs3D && mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) - alSourcef(mSource, AL_GAIN, 0.0f); - else - alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); @@ -318,22 +314,22 @@ bool OpenAL_SoundStream::process() } // -// A regular OpenAL sound +// A regular 2D OpenAL sound // class OpenAL_Sound : public Sound { +protected: OpenAL_Output &mOutput; ALuint mSource; ALuint mBuffer; - bool mIs3D; - +private: OpenAL_Sound(const OpenAL_Sound &rhs); OpenAL_Sound& operator=(const OpenAL_Sound &rhs); public: - OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf, bool is3D); + OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf); virtual ~OpenAL_Sound(); virtual void stop(); @@ -341,8 +337,24 @@ public: virtual void update(); }; -OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf, bool is3D) - : mOutput(output), mSource(src), mBuffer(buf), mIs3D(is3D) +// +// A regular 3D OpenAL sound +// +class OpenAL_Sound3D : public OpenAL_Sound +{ + OpenAL_Sound3D(const OpenAL_Sound &rhs); + OpenAL_Sound3D& operator=(const OpenAL_Sound &rhs); + +public: + OpenAL_Sound3D(OpenAL_Output &output, ALuint src, ALuint buf) + : OpenAL_Sound(output, src, buf) + { } + + virtual void update(); +}; + +OpenAL_Sound::OpenAL_Sound(OpenAL_Output &output, ALuint src, ALuint buf) + : mOutput(output), mSource(src), mBuffer(buf) { } OpenAL_Sound::~OpenAL_Sound() @@ -372,7 +384,16 @@ bool OpenAL_Sound::isPlaying() void OpenAL_Sound::update() { - if(mIs3D && mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) + alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); + alSource3f(mSource, AL_POSITION, mPos[0], mPos[2], -mPos[1]); + alSource3f(mSource, AL_DIRECTION, 0.0f, 0.0f, 0.0f); + alSource3f(mSource, AL_VELOCITY, 0.0f, 0.0f, 0.0f); + throwALerror(); +} + +void OpenAL_Sound3D::update() +{ + if(mPos.squaredDistance(mOutput.mPos) > mMaxDistance*mMaxDistance) alSourcef(mSource, AL_GAIN, 0.0f); else alSourcef(mSource, AL_GAIN, mVolume*mBaseVolume); @@ -592,7 +613,7 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float try { buf = getBuffer(fname); - sound.reset(new OpenAL_Sound(*this, src, buf, false)); + sound.reset(new OpenAL_Sound(*this, src, buf)); } catch(std::exception &e) { @@ -641,7 +662,7 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector try { buf = getBuffer(fname); - sound.reset(new OpenAL_Sound(*this, src, buf, true)); + sound.reset(new OpenAL_Sound3D(*this, src, buf)); } catch(std::exception &e) { @@ -692,7 +713,7 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa { DecoderPtr decoder = mManager.getDecoder(); decoder->open(fname); - sound.reset(new OpenAL_SoundStream(*this, src, decoder, false)); + sound.reset(new OpenAL_SoundStream(*this, src, decoder)); } catch(std::exception &e) { diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index f4d4e90afd..35966cc29b 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -57,6 +57,7 @@ namespace MWSound std::auto_ptr mStreamThread; friend class OpenAL_Sound; + friend class OpenAL_Sound3D; friend class OpenAL_SoundStream; friend class SoundManager; }; From 4e908aa0954801549c5d0f8c30bad057e65c5c9e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 01:34:26 -0700 Subject: [PATCH 259/488] Add a method to set the sound's position --- apps/openmw/mwsound/sound.hpp | 1 + apps/openmw/mwsound/soundmanager.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index d2c2d52091..e23830cdb9 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -22,6 +22,7 @@ namespace MWSound public: virtual void stop() = 0; virtual bool isPlaying() = 0; + void setPosition(const Ogre::Vector3 &pos) { mPos = pos; } void setVolume(float volume) { mVolume = volume; } Sound() : mPos(0.0f, 0.0f, 0.0f) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 005df3e7ef..9c26f00846 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -335,7 +335,7 @@ namespace MWSound while(snditer != mActiveSounds.end()) { if(snditer->second.first == ptr) - snditer->first->mPos = objpos; + snditer->first->setPosition(objpos); snditer++; } } From 06a34b9e0d9edf3060690094ec8ed8a0c1194c77 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 31 Mar 2012 10:35:08 +0200 Subject: [PATCH 260/488] Strange problems call for strange solutions. --- components/bsa/bsa_archive.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 6501271597..660b24d560 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -71,6 +71,9 @@ class DirArchive: public Ogre::FileSystemArchive bool findFile(const String& filename, std::string& copy) const { + if (filename.find(".tga") != std::string::npos) + return false; + { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' @@ -120,8 +123,8 @@ class DirArchive: public Ogre::FileSystemArchive if (find != current.end() && !comp(copy, current.front())) { std::cout << " found"; - if (copy != *find && !lexicographical_compare(copy, *find, boost::algorithm::is_iless())) - std::cout << ", as different file " << *find; + if (copy != *find && !lexicographical_compare(copy, *find, boost::algorithm::is_iequal())) + std::cout << ", as different file " << *find; std::cout << "." << std::endl; copy = *find; From 28378c063b0b7601e2846d33963834473f35dad3 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 02:22:23 -0700 Subject: [PATCH 261/488] Minor OpenAL_SoundStream cleanups --- apps/openmw/mwsound/openal_output.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 3ed86cf2bc..c40b340c56 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -65,7 +65,7 @@ static ALenum getALFormat(ChannelConfig chans, SampleType type) class OpenAL_SoundStream : public Sound { static const ALuint sNumBuffers = 6; - static const ALfloat sBufferLength; + static const ALfloat sBufferLength = 0.125f; OpenAL_Output &mOutput; @@ -95,7 +95,6 @@ public: bool process(); }; -const ALfloat OpenAL_SoundStream::sBufferLength = 0.125f; // // A background streaming thread (keeps active streams processed) @@ -186,7 +185,6 @@ OpenAL_SoundStream::OpenAL_SoundStream(OpenAL_Output &output, ALuint src, Decode } catch(std::exception &e) { - mOutput.mFreeSources.push_back(mSource); alDeleteBuffers(sNumBuffers, mBuffers); alGetError(); throw; From 3b0dc408ae1866b5a0d702b8fce6e453eb697b47 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Sat, 31 Mar 2012 11:29:24 +0200 Subject: [PATCH 262/488] Debug-b-gone --- components/bsa/bsa_archive.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 660b24d560..41bff7e40a 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -71,9 +71,6 @@ class DirArchive: public Ogre::FileSystemArchive bool findFile(const String& filename, std::string& copy) const { - if (filename.find(".tga") != std::string::npos) - return false; - { String passed = filename; if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' @@ -116,22 +113,14 @@ class DirArchive: public Ogre::FileSystemArchive current = found->second; } - std::cout << "Finding: " << copy; - pathComparer comp(delimiter, copy.size() - delimiter-1); std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); if (find != current.end() && !comp(copy, current.front())) { - std::cout << " found"; - if (copy != *find && !lexicographical_compare(copy, *find, boost::algorithm::is_iequal())) - std::cout << ", as different file " << *find; - - std::cout << "." << std::endl; copy = *find; return true; } - std::cout << " failed." << std::endl; return false; } From 6eb3281c4c504dfc2d6398156ee5c449772325c8 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 31 Mar 2012 11:36:51 +0200 Subject: [PATCH 263/488] boost fix --- apps/mwiniimporter/main.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index fa7a5c512f..059703ea89 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -13,23 +13,23 @@ int main(int argc, char *argv[]) { desc.add_options() ("help,h", "produce help message") ("verbose,v", "verbose output") - ("ini,i", bpo::value()->required(), "morrowind.ini file") - ("cfg,c", bpo::value()->required(), "openmw.cfg file") + ("ini,i", bpo::value(), "morrowind.ini file") + ("cfg,c", bpo::value(), "openmw.cfg file") ("output,o", bpo::value()->default_value(""), "openmw.cfg file") ; - + bpo::variables_map vm; try { bpo::store(boost::program_options::parse_command_line(argc, argv, desc), vm); - + // parse help before calling notify because we dont want it to throw an error if help is set if(vm.count("help")) { std::cout << desc; return 0; } - + bpo::notify(vm); - + } catch(std::exception& e) { std::cerr << "Error:" << e.what() << std::endl; @@ -39,16 +39,16 @@ int main(int argc, char *argv[]) { std::cerr << "Error" << std::endl; return -2; } - + std::string iniFile = vm["ini"].as(); std::string cfgFile = vm["cfg"].as(); - + // if no output is given, write back to cfg file std::string outputFile(vm["output"].as()); if(vm["output"].defaulted()) { outputFile = vm["cfg"].as(); } - + if(!boost::filesystem::exists(iniFile)) { std::cerr << "ini file does not exist" << std::endl; return -3; @@ -57,19 +57,17 @@ int main(int argc, char *argv[]) { std::cerr << "cfg file does not exist" << std::endl; return -4; } - + MwIniImporter importer; importer.setVerbose(vm.count("verbose")); - + std::mapini = importer.loadIniFile(iniFile); std::mapcfg = importer.loadCfgFile(cfgFile); - + importer.merge(cfg, ini); - + std::cout << "write to: " << outputFile << std::endl; importer.writeToFile(outputFile, cfg); - + return 0; } - - From 7541e08909ee3be2655831bdf0a680ea45112a82 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 02:48:14 -0700 Subject: [PATCH 264/488] Don't reset the sound Output device if init fails --- apps/openmw/mwsound/soundmanager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 9c26f00846..d537a2bbd4 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -62,7 +62,6 @@ namespace MWSound catch(std::exception &e) { std::cout <<"Sound init failed: "< Date: Sat, 31 Mar 2012 03:31:41 -0700 Subject: [PATCH 265/488] Finally "fix" --nosound Expect degraded performance with it. Looping sounds are constantly checked to see if they're playing, and try to play it again when it's not. --- apps/openmw/mwsound/openal_output.cpp | 41 ++++++++++++++++----------- apps/openmw/mwsound/soundmanager.cpp | 5 ++-- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index c40b340c56..6a4e3fe570 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -25,14 +25,20 @@ static void throwALCerror(ALCdevice *device) { ALCenum err = alcGetError(device); if(err != ALC_NO_ERROR) - fail(alcGetString(device, err)); + { + const ALCchar *errstring = alcGetString(device, err); + fail(errstring ? errstring : ""); + } } static void throwALerror() { ALenum err = alGetError(); if(err != AL_NO_ERROR) - fail(alGetString(err)); + { + const ALchar *errstring = alGetString(err); + fail(errstring ? errstring : ""); + } } @@ -424,8 +430,7 @@ std::vector OpenAL_Output::enumerate() void OpenAL_Output::init(const std::string &devname) { - if(mDevice || mContext) - fail("Device already open"); + deinit(); mDevice = alcOpenDevice(devname.c_str()); if(!mDevice) @@ -442,7 +447,12 @@ void OpenAL_Output::init(const std::string &devname) mContext = alcCreateContext(mDevice, NULL); if(!mContext || alcMakeContextCurrent(mContext) == ALC_FALSE) + { + if(mContext) + alcDestroyContext(mContext); + mContext = 0; fail(std::string("Failed to setup context: ")+alcGetString(mDevice, alcGetError(mDevice))); + } alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); throwALerror(); @@ -598,8 +608,6 @@ void OpenAL_Output::bufferFinished(ALuint buf) SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, bool loop) { - throwALerror(); - boost::shared_ptr sound; ALuint src=0, buf=0; @@ -647,8 +655,6 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector3 &pos, float volume, float pitch, float min, float max, bool loop) { - throwALerror(); - boost::shared_ptr sound; ALuint src=0, buf=0; @@ -697,8 +703,6 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, float pitch) { - throwALerror(); - boost::shared_ptr sound; ALuint src; @@ -741,15 +745,18 @@ SoundPtr OpenAL_Output::streamSound(const std::string &fname, float volume, floa void OpenAL_Output::updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) { - ALfloat orient[6] = { - atdir.x, atdir.z, -atdir.y, - updir.x, updir.z, -updir.y - }; mPos = pos; - alListener3f(AL_POSITION, mPos.x, mPos.z, -mPos.y); - alListenerfv(AL_ORIENTATION, orient); - throwALerror(); + if(mContext) + { + ALfloat orient[6] = { + atdir.x, atdir.z, -atdir.y, + updir.x, updir.z, -updir.y + }; + alListener3f(AL_POSITION, mPos.x, mPos.z, -mPos.y); + alListenerfv(AL_ORIENTATION, orient); + throwALerror(); + } } diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index d537a2bbd4..534b5b6deb 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -41,6 +41,8 @@ namespace MWSound SoundManager::SoundManager(bool useSound, MWWorld::Environment& environment) : mResourceMgr(Ogre::ResourceGroupManager::getSingleton()) , mEnvironment(environment) + , mOutput(new DEFAULT_OUTPUT(*this)) + { if(!useSound) return; @@ -50,8 +52,6 @@ namespace MWSound try { - mOutput.reset(new DEFAULT_OUTPUT(*this)); - std::vector names = mOutput->enumerate(); std::cout <<"Enumerated output devices:"<< std::endl; for(size_t i = 0;i < names.size();i++) @@ -62,7 +62,6 @@ namespace MWSound catch(std::exception &e) { std::cout <<"Sound init failed: "< Date: Sat, 31 Mar 2012 14:50:10 +0400 Subject: [PATCH 266/488] Merge branch 'master' into pgrd-rendering Conflicts: apps/openmw/mwrender/debugging.cpp --- apps/openmw/engine.cpp | 9 +- apps/openmw/mwrender/debugging.cpp | 6 +- components/bsa/bsa_archive.cpp | 170 +++++++++++-------------- components/files/collections.cpp | 5 + components/files/collections.hpp | 2 + components/nifogre/ogre_nif_loader.cpp | 2 +- libs/openengine/bullet/physic.cpp | 10 +- libs/openengine/bullet/physic.hpp | 3 + 8 files changed, 104 insertions(+), 103 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 441c227699..38050e53b4 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -204,13 +204,18 @@ OMW::Engine::~Engine() void OMW::Engine::loadBSA() { const Files::MultiDirCollection& bsa = mFileCollections.getCollection (".bsa"); - std::string dataDirectory; + for (Files::MultiDirCollection::TIter iter(bsa.begin()); iter!=bsa.end(); ++iter) { std::cout << "Adding " << iter->second.string() << std::endl; Bsa::addBSA(iter->second.string()); + } - dataDirectory = iter->second.parent_path().string(); + const Files::PathContainer& dataDirs = mFileCollections.getPaths(); + std::string dataDirectory; + for (Files::PathContainer::const_iterator iter = dataDirs.begin(); iter != dataDirs.end(); ++iter) + { + dataDirectory = iter->string(); std::cout << "Data dir " << dataDirectory << std::endl; Bsa::addDir(dataDirectory, mFSStrict); } diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index aa98f433fd..ea7f143bb2 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -121,11 +121,7 @@ bool Debugging::toggleRenderMode (int mode){ switch (mode) { case MWWorld::World::Render_CollisionDebug: - - // TODO use a proper function instead of accessing the member variable - // directly. - mEngine->setDebugRenderingMode (!mEngine->isDebugCreated); - return mEngine->isDebugCreated; + return mEngine->toggleDebugRendering(); case MWWorld::World::Render_Pathgrid: togglePathgrid(); return mPathgridEnabled; diff --git a/components/bsa/bsa_archive.cpp b/components/bsa/bsa_archive.cpp index 80d92dd521..41bff7e40a 100644 --- a/components/bsa/bsa_archive.cpp +++ b/components/bsa/bsa_archive.cpp @@ -45,6 +45,20 @@ struct ciLessBoost : std::binary_function } }; +struct pathComparer +{ +private: + int m_start, m_size; + +public: + pathComparer(int start, int size) : m_start(start), m_size(size) { } + + bool operator() (const std::string& first, const std::string& other) + { + return lexicographical_compare(first.substr(m_start,m_size), other.substr(m_start,m_size), boost::algorithm::is_iless()); + } +}; + static bool fsstrict = false; /// An OGRE Archive wrapping a BSAFile archive @@ -55,16 +69,59 @@ class DirArchive: public Ogre::FileSystemArchive std::map, ciLessBoost> m; unsigned int cutoff; - bool comparePortion(std::string file1, std::string file2, int start, int size) const + bool findFile(const String& filename, std::string& copy) const { - for(int i = start; i < start+size; i++) { - char one = file1.at(i); - char two = file2.at(i); - if(tolower(one) != tolower(two) ) - return false; + String passed = filename; + if(filename.at(filename.length() - 1) == '*' || filename.at(filename.length() - 1) == '?' || filename.at(filename.length() - 1) == '<' + || filename.at(filename.length() - 1) == '"' || filename.at(filename.length() - 1) == '>' || filename.at(filename.length() - 1) == ':' + || filename.at(filename.length() - 1) == '|') + { + passed = filename.substr(0, filename.length() - 2); + } + if(filename.at(filename.length() - 2) == '>') + passed = filename.substr(0, filename.length() - 6); + copy = passed; } - return true; + + std::replace(copy.begin(), copy.end(), '\\', '/'); + + if(copy.at(0) == '/') + copy.erase(0, 1); + + if(fsstrict == true) + return true; + + std::string folder; + int delimiter = 0; + size_t lastSlash = copy.rfind('/'); + if (lastSlash != std::string::npos) + { + folder = copy.substr(0, lastSlash); + delimiter = lastSlash+1; + } + + std::vector current; + { + std::map,ciLessBoost>::const_iterator found = m.find(folder); + + if (found == m.end()) + { + return false; + } + else + current = found->second; + } + + pathComparer comp(delimiter, copy.size() - delimiter-1); + std::vector::iterator find = std::lower_bound(current.begin(), current.end(), copy, comp); + if (find != current.end() && !comp(copy, current.front())) + { + copy = *find; + return true; + } + + return false; } public: @@ -83,16 +140,14 @@ class DirArchive: public Ogre::FileSystemArchive //need to cut off first boost::filesystem::directory_iterator dir_iter(d), dir_end; std::vector filesind; - boost::filesystem::path f; for(;dir_iter != dir_end; dir_iter++) { if(boost::filesystem::is_directory(*dir_iter)) populateMap(*dir_iter); else { - - f = *dir_iter; - std::string s = f.string(); + std::string s = dir_iter->path().string(); + std::replace(s.begin(), s.end(), '\\', '/'); std::string small; if(cutoff < s.size()) @@ -103,14 +158,17 @@ class DirArchive: public Ogre::FileSystemArchive filesind.push_back(small); } } + std::sort(filesind.begin(), filesind.end(), ciLessBoost()); + std::string small; std::string original = d.string(); + std::replace(original.begin(), original.end(), '\\', '/'); if(cutoff < original.size()) small = original.substr(cutoff, original.size() - cutoff); else small = original.substr(cutoff - 1, original.size() - cutoff); - m[small] = filesind; + m[small] = filesind; } bool isCaseSensitive() const { return fsstrict; } @@ -120,97 +178,21 @@ class DirArchive: public Ogre::FileSystemArchive void unload() {} bool exists(const String& filename) { - std::string copy = filename; - - - - for (unsigned int i = 0; i < filename.size(); i++) - { - if(copy.at(i) == '\\' ){ - copy.replace(i, 1, "/"); - } - } - - - if(copy.at(0) == '\\' || copy.at(0) == '/') - { - copy.erase(0, 1); - } - if(fsstrict == true) - { - //std::cout << "fsstrict " << copy << "\n"; + std::string copy; + + if (findFile(filename, copy)) return FileSystemArchive::exists(copy); - } - - - int last = copy.size() - 1; - int i = last; - - for (;last >= 0; i--) - { - if(copy.at(i) == '/' || copy.at(i) == '\\') - break; - } - - std::string folder = copy.substr(0, i); //folder with no slash - - std::vector& current = m[folder]; - - for(std::vector::iterator iter = current.begin(); iter != current.end(); iter++) - { - if(comparePortion(*iter, copy, i + 1, copy.size() - i -1) == true){ - return FileSystemArchive::exists(*iter); - } - } - return false; } DataStreamPtr open(const String& filename, bool readonly = true) const { - std::map, ciLessBoost> mlocal = m; - std::string copy = filename; + std::string copy; - - - for (unsigned int i = 0; i < filename.size(); i++) - { - if(copy.at(i) == '\\' ){ - copy.replace(i, 1, "/"); - } - } - - - if(copy.at(0) == '\\' || copy.at(0) == '/') - { - copy.erase(0, 1); - } - - if(fsstrict == true) - { + if (findFile(filename, copy)) return FileSystemArchive::open(copy, readonly); - } - - - int last = copy.size() - 1; - int i = last; - - for (;last >= 0; i--) - { - if(copy.at(i) == '/' || copy.at(i) == '\\') - break; - } - - std::string folder = copy.substr(0, i); //folder with no slash - std::vector current = mlocal[folder]; - - for(std::vector::iterator iter = current.begin(); iter != current.end(); iter++) - { - if(comparePortion(*iter, copy, i + 1, copy.size() - i -1) == true){ - return FileSystemArchive::open(*iter, readonly); - } - } + DataStreamPtr p; return p; } diff --git a/components/files/collections.cpp b/components/files/collections.cpp index 424b558e60..50340dca4d 100644 --- a/components/files/collections.cpp +++ b/components/files/collections.cpp @@ -30,4 +30,9 @@ namespace Files return iter->second; } + + const Files::PathContainer& Collections::getPaths() const + { + return mDirectories; + } } diff --git a/components/files/collections.hpp b/components/files/collections.hpp index 1ddca9a5b7..70aaec55e3 100644 --- a/components/files/collections.hpp +++ b/components/files/collections.hpp @@ -21,6 +21,8 @@ namespace Files /// leading dot and must be all lower-case. const MultiDirCollection& getCollection(const std::string& extension) const; + const Files::PathContainer& getPaths() const; + private: typedef std::map MultiDirCollectionContainer; Files::PathContainer mDirectories; diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index f943231d0d..2ab6ae6211 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -1368,7 +1368,7 @@ void NIFLoader::loadResource(Resource *resource) if (!vfs->isFile(resourceName)) { - warn("File not found."); + warn("File "+resourceName+" not found."); return; } diff --git a/libs/openengine/bullet/physic.cpp b/libs/openengine/bullet/physic.cpp index 8b9f3dfecb..cc1f907a01 100644 --- a/libs/openengine/bullet/physic.cpp +++ b/libs/openengine/bullet/physic.cpp @@ -151,7 +151,8 @@ namespace Physic - PhysicEngine::PhysicEngine(BulletShapeLoader* shapeLoader) + PhysicEngine::PhysicEngine(BulletShapeLoader* shapeLoader) : + mDebugActive(0) { // Set up the collision configuration and dispatcher collisionConfiguration = new btDefaultCollisionConfiguration(); @@ -203,6 +204,13 @@ namespace Physic createDebugRendering(); } mDebugDrawer->setDebugMode(mode); + mDebugActive = mode; + } + + bool PhysicEngine::toggleDebugRendering() + { + setDebugRenderingMode(!mDebugActive); + return mDebugActive; } PhysicEngine::~PhysicEngine() diff --git a/libs/openengine/bullet/physic.hpp b/libs/openengine/bullet/physic.hpp index 57ffe91305..16dac96f4c 100644 --- a/libs/openengine/bullet/physic.hpp +++ b/libs/openengine/bullet/physic.hpp @@ -199,6 +199,8 @@ namespace Physic */ void setDebugRenderingMode(int mode); + bool toggleDebugRendering(); + /** * Return the closest object hit by a ray. If there are no objects, it will return ("",-1). */ @@ -230,6 +232,7 @@ namespace Physic //debug rendering BtOgre::DebugDrawer* mDebugDrawer; bool isDebugCreated; + bool mDebugActive; }; }} From 006e1cde850ea81e44b4758934a300ec2aae2018 Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sat, 31 Mar 2012 14:56:54 +0400 Subject: [PATCH 267/488] some updates after terrain merge --- apps/openmw/mwrender/debugging.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index ea7f143bb2..179c6e0a4d 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -180,12 +180,10 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) if (!pathgrid) return; Vector3 cellPathGridPos; - /// \todo replace tests like this with isExterior method of ESM::Cell after merging with terrain branch - if (!(store->cell->data.flags & ESM::Cell::Interior)) + if (store->cell->isExterior()) { - /// \todo Replace with ESM::Land::REAL_SIZE after merging with terrain branch - cellPathGridPos.x = store->cell->data.gridX * 8192; - cellPathGridPos.y = store->cell->data.gridY * 8192; + cellPathGridPos.x = store->cell->data.gridX * ESM::Land::REAL_SIZE; + cellPathGridPos.y = store->cell->data.gridY * ESM::Land::REAL_SIZE; } SceneNode *cellPathGrid = mPathGridRoot->createChildSceneNode(cellPathGridPos); ESM::Pathgrid::PointList points = pathgrid->points; @@ -207,7 +205,7 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) Vector3(p2.x, p2.y, p2.z))); } - if (!(store->cell->data.flags & ESM::Cell::Interior)) + if (store->cell->isExterior()) { mExteriorPathgridNodes[std::make_pair(store->cell->data.gridX, store->cell->data.gridY)] = cellPathGrid; } @@ -220,7 +218,7 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) void Debugging::disableCellPathgrid(MWWorld::Ptr::CellStore *store) { - if (!(store->cell->data.flags & ESM::Cell::Interior)) + if (store->cell->isExterior()) { ExteriorPathgridNodes::iterator it = mExteriorPathgridNodes.find(std::make_pair(store->cell->data.gridX, store->cell->data.gridY)); From 82429d69316ae8c12c6633d414aadbfec2e694f4 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 31 Mar 2012 13:35:40 +0200 Subject: [PATCH 268/488] finished interface --- components/settings/settings.cpp | 42 +++++++++++++++++++++++++++++--- components/settings/settings.hpp | 14 ++++++++--- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index 157de0b4d0..500d3c6e63 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -10,17 +10,22 @@ using namespace Settings; Ogre::ConfigFile Manager::mFile = Ogre::ConfigFile(); Ogre::ConfigFile Manager::mDefaultFile = Ogre::ConfigFile(); -void Manager::load(const std::string& file) +void Manager::loadUser (const std::string& file) { mFile.load(file); } -void Manager::loadDefault(const std::string& file) +void Manager::loadDefault (const std::string& file) { mDefaultFile.load(file); } -void Manager::save(const std::string& file) +void Manager::copyDefaultToUserSettings () +{ + mFile = mDefaultFile; +} + +void Manager::saveUser(const std::string& file) { std::fstream fout(file.c_str(), std::ios::out); @@ -39,6 +44,8 @@ void Manager::save(const std::string& file) { fout << i->first.c_str() << '=' << i->second.c_str() << '\n'; } + + seci.getNext(); } } @@ -62,3 +69,32 @@ const bool Manager::getBool (const std::string& setting, const std::string& cate { return Ogre::StringConverter::parseBool( getString(setting, category) ); } + +void Manager::setString (const std::string& setting, const std::string& category, const std::string& value) +{ + Ogre::ConfigFile::SettingsIterator it = mFile.getSettingsIterator(category); + while (it.hasMoreElements()) + { + Ogre::ConfigFile::SettingsMultiMap::iterator i = it.current(); + + if ((*i).first == setting) + (*i).second = value; + + it.getNext(); + } +} + +void Manager::setInt (const std::string& setting, const std::string& category, const int value) +{ + setString(setting, category, Ogre::StringConverter::toString(value)); +} + +void Manager::setFloat (const std::string& setting, const std::string& category, const float value) +{ + setString(setting, category, Ogre::StringConverter::toString(value)); +} + +void Manager::setBool (const std::string& setting, const std::string& category, const bool value) +{ + setString(setting, category, Ogre::StringConverter::toString(value)); +} diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index ae6f1a9de7..46f8139c49 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -18,16 +18,24 @@ namespace Settings void loadDefault (const std::string& file); ///< load file as the default settings (can be overridden by user settings) - void load (const std::string& file); + void copyDefaultToUserSettings (); + ///< copy the default settings to the user settings (useful when there are no user settings yet) + + void loadUser (const std::string& file); ///< load file as user settings - void save (const std::string& file); - ///< save to file + void saveUser (const std::string& file); + ///< save user settings to file static const int getInt (const std::string& setting, const std::string& category); static const float getFloat (const std::string& setting, const std::string& category); static const std::string getString (const std::string& setting, const std::string& category); static const bool getBool (const std::string& setting, const std::string& category); + + static void setInt (const std::string& setting, const std::string& category, const int value); + static void setFloat (const std::string& setting, const std::string& category, const float value); + static void setString (const std::string& setting, const std::string& category, const std::string& value); + static void setBool (const std::string& setting, const std::string& category, const bool value); }; } From 5e829362cb2d7cb12b14c3316f854da5920aa6ea Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sat, 31 Mar 2012 16:22:55 +0400 Subject: [PATCH 269/488] Feature #37 (In Progress) Render Path Grid more similar to vanilla path grid rendering --- apps/openmw/mwrender/debugging.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/debugging.cpp b/apps/openmw/mwrender/debugging.cpp index 179c6e0a4d..f768de661f 100644 --- a/apps/openmw/mwrender/debugging.cpp +++ b/apps/openmw/mwrender/debugging.cpp @@ -201,8 +201,13 @@ void Debugging::enableCellPathgrid(MWWorld::Ptr::CellStore *store) { ESM::Pathgrid::Edge edge = *it; ESM::Pathgrid::Point p1 = points[edge.v0], p2 = points[edge.v1]; - cellPathGrid->attachObject(createPathgridLine(Vector3(p1.x, p1.y, p1.z), - Vector3(p2.x, p2.y, p2.z))); + + Vector3 direction = (Vector3(p2.x, p2.y, p2.z) - Vector3(p1.x, p1.y, p1.z)); + Vector3 lineDisplacement = direction.crossProduct(Vector3::UNIT_Z).normalisedCopy(); + lineDisplacement = lineDisplacement * POINT_MESH_BASE/2 + + Vector3(0, 0, 10); // move lines up a little, so they will be less covered by meshes/landscape + cellPathGrid->attachObject(createPathgridLine(Vector3(p1.x, p1.y, p1.z) + lineDisplacement, + Vector3(p2.x, p2.y, p2.z) + lineDisplacement)); } if (store->cell->isExterior()) From e35670c6cba25e055b6cda9dc2e3ad2ae005997d Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 14:28:19 +0200 Subject: [PATCH 270/488] ignore syntax errors and empty lines; fixed merge function --- apps/mwiniimporter/importer.cpp | 37 +++++++++++++++------------------ apps/mwiniimporter/importer.hpp | 14 ++++++------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index f662f42d64..9a76adeed8 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -25,19 +25,16 @@ strmap MwIniImporter::loadIniFile(std::string filename) { if(line[0] == '[') { if(line.length() > 2) { section = line.substr(1, line.length()-3); - continue; } - throw IniParseException(); + continue; } int pos = line.find("="); if(pos < 1) { - throw IniParseException(); + continue; } - map.insert(std::pair( - section + " " + line.substr(0,pos), line.substr(pos+1) - )); + map.insert(STRPAIR(section + ":" + line.substr(0,pos), line.substr(pos+1))); } return map; @@ -68,32 +65,32 @@ strmap MwIniImporter::loadCfgFile(std::string filename) { int pos = line.find("="); if(pos < 1) { - throw IniParseException(); + continue; } - map.insert(std::pair( - line.substr(0,pos), line.substr(pos+1) - )); + map.insert(STRPAIR(line.substr(0,pos), line.substr(pos+1))); } return map; } void MwIniImporter::merge(strmap &cfg, strmap &ini) { - strmap::iterator ini_it; - for(strmap::iterator it=cfg.begin(); it != cfg.end(); it++) { - ini_it = ini.find(it->first); - - // found a key in both files - if(ini_it != ini.end()) { - cfg.erase(it); - cfg.insert(std::pair( - ini_it->first, ini_it->second - )); + strmap::iterator cfgIt; + strmap::iterator iniIt; + for(strmap::iterator it=mMergeMap.begin(); it!=mMergeMap.end(); it++) { + if((iniIt = ini.find(it->second)) != ini.end()) { + cfg.erase(it->first); + if(!this->specialMerge(it->first, it->second, cfg, ini)) { + cfg.insert(STRPAIR(it->first, iniIt->second)); + } } } } +bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap cfg, strmap ini) { + return false; +} + void MwIniImporter::writeToFile(std::string file, strmap &cfg) { boost::iostreams::stream out(file); diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 1933830f21..3ab1d892ee 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -5,17 +5,16 @@ #include #include -typedef std::map strmap; -class IniParseException : public std::exception { - virtual const char* what() const throw() { - return "unexpected end of line"; - } -}; +typedef std::map strmap; +#define STRPAIR std::make_pair class MwIniImporter { public: + MwIniImporter() { + mMergeMap.insert(STRPAIR("fps", "General:Show FPS")); + }; void setVerbose(bool verbose); strmap loadIniFile(std::string filename); strmap loadCfgFile(std::string filename); @@ -23,8 +22,9 @@ class MwIniImporter { void writeToFile(std::string file, strmap &cfg); private: + bool specialMerge(std::string cfgKey, std::string iniKey, strmap cfg, strmap ini); bool mVerbose; - + strmap mMergeMap; }; From b7635b3d4a12bacf31a0c4d7aad92bfaacd2b711 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 14:34:00 +0200 Subject: [PATCH 271/488] pass maps by reference --- apps/mwiniimporter/importer.cpp | 2 +- apps/mwiniimporter/importer.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 9a76adeed8..041712b216 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -87,7 +87,7 @@ void MwIniImporter::merge(strmap &cfg, strmap &ini) { } } -bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap cfg, strmap ini) { +bool MwIniImporter::specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini) { return false; } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index 3ab1d892ee..d0034a13d4 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -22,7 +22,7 @@ class MwIniImporter { void writeToFile(std::string file, strmap &cfg); private: - bool specialMerge(std::string cfgKey, std::string iniKey, strmap cfg, strmap ini); + bool specialMerge(std::string cfgKey, std::string iniKey, strmap &cfg, strmap &ini); bool mVerbose; strmap mMergeMap; }; From e48d125a84165489825103ddfeabfb6e1095f74a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 05:57:03 -0700 Subject: [PATCH 272/488] Only allow one instance of a given tracked soundid The untracked flag should probably be broken up and combined with the loop boolean into a set of flags. --- apps/openmw/mwsound/soundmanager.cpp | 42 +++++++++++++++++++++++++--- apps/openmw/mwsound/soundmanager.hpp | 3 ++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 534b5b6deb..9a71ef4210 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -67,6 +67,7 @@ namespace MWSound SoundManager::~SoundManager() { + mSingleSounds.clear(); mActiveSounds.clear(); mMusic.reset(); mOutput.reset(); @@ -231,15 +232,29 @@ namespace MWSound float volume, float pitch, bool loop, bool untracked) { + const ESM::Position &pos = ptr.getCellRef().pos; + const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); SoundPtr sound; + + if(!untracked) + { + IDSoundMap::iterator inviter = mSingleSounds.find(soundId); + if(inviter != mSingleSounds.end()) + { + if(inviter->second->mPos.squaredDistance(mOutput->mPos) < + objpos.squaredDistance(mOutput->mPos)) + return sound; + inviter->second->stop(); + mSingleSounds.erase(inviter); + } + } + try { // Look up the sound in the ESM data float basevol = 1.0f; /* TODO: volume settings */ float min, max; std::string file = lookup(soundId, basevol, min, max); - const ESM::Position &pos = ptr.getCellRef().pos; - const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, loop); sound->mPos = objpos; @@ -248,8 +263,13 @@ namespace MWSound sound->mMinDistance = min; sound->mMaxDistance = max; - mActiveSounds[sound] = (!untracked ? std::make_pair(ptr, soundId) : - std::make_pair(MWWorld::Ptr(), soundId)); + if(untracked) + mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); + else + { + mActiveSounds[sound] = std::make_pair(ptr, soundId); + mSingleSounds[soundId] = sound; + } } catch(std::exception &e) { @@ -265,6 +285,9 @@ namespace MWSound { if(snditer->second.first == ptr && snditer->second.second == soundId) { + IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); + if(inviter != mSingleSounds.end() && inviter->second == snditer->first) + mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -280,6 +303,9 @@ namespace MWSound { if(snditer->second.first == ptr) { + IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); + if(inviter != mSingleSounds.end() && inviter->second == snditer->first) + mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -296,6 +322,9 @@ namespace MWSound if(snditer->second.first != MWWorld::Ptr() && snditer->second.first.getCell() == cell) { + IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); + if(inviter != mSingleSounds.end() && inviter->second == snditer->first) + mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -424,7 +453,12 @@ namespace MWSound while(snditer != mActiveSounds.end()) { if(!snditer->first->isPlaying()) + { + IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); + if(inviter != mSingleSounds.end() && inviter->second == snditer->first) + mSingleSounds.erase(inviter); mActiveSounds.erase(snditer++); + } else { snditer->first->update(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 3ab1e881c3..3ab2b569ea 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -45,6 +45,9 @@ namespace MWSound typedef std::map SoundMap; SoundMap mActiveSounds; + typedef std::map IDSoundMap; + IDSoundMap mSingleSounds; + std::string lookup(const std::string &soundId, float &volume, float &min, float &max); void streamMusicFull(const std::string& filename); From ae308b9b5fc4c73859167d4390cb61a2b264bc2f Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 07:31:55 -0700 Subject: [PATCH 273/488] Use a set of flags instead of separate booleans --- apps/openmw/mwclass/apparatus.cpp | 2 +- apps/openmw/mwclass/armor.cpp | 2 +- apps/openmw/mwclass/book.cpp | 2 +- apps/openmw/mwclass/clothing.cpp | 2 +- apps/openmw/mwclass/container.cpp | 4 ++-- apps/openmw/mwclass/door.cpp | 6 +++--- apps/openmw/mwclass/ingredient.cpp | 2 +- apps/openmw/mwclass/light.cpp | 4 ++-- apps/openmw/mwclass/lockpick.cpp | 2 +- apps/openmw/mwclass/misc.cpp | 2 +- apps/openmw/mwclass/potion.cpp | 2 +- apps/openmw/mwclass/probe.cpp | 2 +- apps/openmw/mwclass/repair.cpp | 2 +- apps/openmw/mwclass/weapon.cpp | 2 +- apps/openmw/mwscript/soundextensions.cpp | 4 ++-- apps/openmw/mwsound/soundmanager.cpp | 13 ++++++------- apps/openmw/mwsound/soundmanager.hpp | 21 ++++++++++++++++++--- 17 files changed, 44 insertions(+), 30 deletions(-) diff --git a/apps/openmw/mwclass/apparatus.cpp b/apps/openmw/mwclass/apparatus.cpp index e95fb572f3..d27d0bc71d 100644 --- a/apps/openmw/mwclass/apparatus.cpp +++ b/apps/openmw/mwclass/apparatus.cpp @@ -56,7 +56,7 @@ namespace MWClass boost::shared_ptr Apparatus::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/armor.cpp b/apps/openmw/mwclass/armor.cpp index e1c2734f0e..9956a56fb5 100644 --- a/apps/openmw/mwclass/armor.cpp +++ b/apps/openmw/mwclass/armor.cpp @@ -60,7 +60,7 @@ namespace MWClass boost::shared_ptr Armor::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/book.cpp b/apps/openmw/mwclass/book.cpp index 0a81ebafb7..76370dc5c0 100644 --- a/apps/openmw/mwclass/book.cpp +++ b/apps/openmw/mwclass/book.cpp @@ -58,7 +58,7 @@ namespace MWClass { // TODO implement reading - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/clothing.cpp b/apps/openmw/mwclass/clothing.cpp index 4fe19ada40..2357851d75 100644 --- a/apps/openmw/mwclass/clothing.cpp +++ b/apps/openmw/mwclass/clothing.cpp @@ -57,7 +57,7 @@ namespace MWClass boost::shared_ptr Clothing::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index c58a25c03e..29b3331ba9 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -85,7 +85,7 @@ namespace MWClass { // TODO check for key std::cout << "Locked container" << std::endl; - environment.mSoundManager->playSound3D (ptr, lockedSound, 1.0, 1.0, false); + environment.mSoundManager->playSound3D (ptr, lockedSound, 1.0, 1.0); return boost::shared_ptr (new MWWorld::NullAction); } else @@ -100,7 +100,7 @@ namespace MWClass { // Trap activation goes here std::cout << "Activated trap: " << ptr.getCellRef().trap << std::endl; - environment.mSoundManager->playSound3D (ptr, trapActivationSound, 1.0, 1.0, false); + environment.mSoundManager->playSound3D (ptr, trapActivationSound, 1.0, 1.0); ptr.getCellRef().trap = ""; return boost::shared_ptr (new MWWorld::NullAction); } diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index 5654dff698..9d6c6a78dc 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -73,7 +73,7 @@ namespace MWClass // TODO check for key // TODO report failure to player (message, sound?). Look up behaviour of original MW. std::cout << "Locked!" << std::endl; - environment.mSoundManager->playSound3D (ptr, lockedSound, 1.0, 1.0, false); + environment.mSoundManager->playSound3D (ptr, lockedSound, 1.0, 1.0); return boost::shared_ptr (new MWWorld::NullAction); } @@ -81,7 +81,7 @@ namespace MWClass { // Trap activation std::cout << "Activated trap: " << ptr.getCellRef().trap << std::endl; - environment.mSoundManager->playSound3D(ptr, trapActivationSound, 1.0, 1.0, false); + environment.mSoundManager->playSound3D(ptr, trapActivationSound, 1.0, 1.0); ptr.getCellRef().trap = ""; return boost::shared_ptr (new MWWorld::NullAction); } @@ -110,7 +110,7 @@ namespace MWClass // TODO return action for rotating the door // This is a little pointless, but helps with testing - environment.mSoundManager->playSound3D (ptr, openSound, 1.0, 1.0, false); + environment.mSoundManager->playSound3D (ptr, openSound, 1.0, 1.0); return boost::shared_ptr (new MWWorld::NullAction); } } diff --git a/apps/openmw/mwclass/ingredient.cpp b/apps/openmw/mwclass/ingredient.cpp index 1a7edf6325..cbe153ba3a 100644 --- a/apps/openmw/mwclass/ingredient.cpp +++ b/apps/openmw/mwclass/ingredient.cpp @@ -54,7 +54,7 @@ namespace MWClass boost::shared_ptr Ingredient::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/light.cpp b/apps/openmw/mwclass/light.cpp index e2e63a89bb..71e4775916 100644 --- a/apps/openmw/mwclass/light.cpp +++ b/apps/openmw/mwclass/light.cpp @@ -59,7 +59,7 @@ namespace MWClass if (!ref->base->sound.empty()) { - environment.mSoundManager->playSound3D (ptr, ref->base->sound, 1.0, 1.0, true); + environment.mSoundManager->playSound3D (ptr, ref->base->sound, 1.0, 1.0, MWSound::Play_Loop); } } @@ -83,7 +83,7 @@ namespace MWClass if (!(ref->base->data.flags & ESM::Light::Carry)) return boost::shared_ptr (new MWWorld::NullAction); - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/lockpick.cpp b/apps/openmw/mwclass/lockpick.cpp index 3dda2f4af0..1eef0db8ba 100644 --- a/apps/openmw/mwclass/lockpick.cpp +++ b/apps/openmw/mwclass/lockpick.cpp @@ -58,7 +58,7 @@ namespace MWClass boost::shared_ptr Lockpick::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/misc.cpp b/apps/openmw/mwclass/misc.cpp index 864fc1e382..def1a90a86 100644 --- a/apps/openmw/mwclass/misc.cpp +++ b/apps/openmw/mwclass/misc.cpp @@ -56,7 +56,7 @@ namespace MWClass boost::shared_ptr Miscellaneous::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/potion.cpp b/apps/openmw/mwclass/potion.cpp index 4ab3745900..ed1733e2d2 100644 --- a/apps/openmw/mwclass/potion.cpp +++ b/apps/openmw/mwclass/potion.cpp @@ -56,7 +56,7 @@ namespace MWClass boost::shared_ptr Potion::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/probe.cpp b/apps/openmw/mwclass/probe.cpp index 4b4d79a73e..8013e2e80f 100644 --- a/apps/openmw/mwclass/probe.cpp +++ b/apps/openmw/mwclass/probe.cpp @@ -57,7 +57,7 @@ namespace MWClass boost::shared_ptr Probe::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/repair.cpp b/apps/openmw/mwclass/repair.cpp index 758bf40797..d49979861b 100644 --- a/apps/openmw/mwclass/repair.cpp +++ b/apps/openmw/mwclass/repair.cpp @@ -56,7 +56,7 @@ namespace MWClass boost::shared_ptr Repair::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwclass/weapon.cpp b/apps/openmw/mwclass/weapon.cpp index 20db0cf38f..e36e9202fa 100644 --- a/apps/openmw/mwclass/weapon.cpp +++ b/apps/openmw/mwclass/weapon.cpp @@ -57,7 +57,7 @@ namespace MWClass boost::shared_ptr Weapon::activate (const MWWorld::Ptr& ptr, const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const { - environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, false, true); + environment.mSoundManager->playSound3D (ptr, getUpSoundId(ptr, environment), 1.0, 1.0, MWSound::Play_NoTrack); return boost::shared_ptr ( new MWWorld::ActionTake (ptr)); diff --git a/apps/openmw/mwscript/soundextensions.cpp b/apps/openmw/mwscript/soundextensions.cpp index d5cc41b76f..7ae109075d 100644 --- a/apps/openmw/mwscript/soundextensions.cpp +++ b/apps/openmw/mwscript/soundextensions.cpp @@ -130,7 +130,7 @@ namespace MWScript std::string sound = runtime.getStringLiteral (runtime[0].mInteger); runtime.pop(); - context.getSoundManager().playSound3D (ptr, sound, 1.0, 1.0, mLoop); + context.getSoundManager().playSound3D (ptr, sound, 1.0, 1.0, MWSound::Play_Single | (mLoop ? MWSound::Play_Loop : 0)); } }; @@ -159,7 +159,7 @@ namespace MWScript Interpreter::Type_Float pitch = runtime[0].mFloat; runtime.pop(); - context.getSoundManager().playSound3D (ptr, sound, volume, pitch, mLoop); + context.getSoundManager().playSound3D (ptr, sound, volume, pitch, MWSound::Play_Single | (mLoop ? MWSound::Play_Loop : 0)); } }; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 9a71ef4210..2d743d9cbf 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -204,7 +204,7 @@ namespace MWSound } - SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, bool loop) + SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, int mode) { SoundPtr sound; try @@ -213,7 +213,7 @@ namespace MWSound float min, max; std::string file = lookup(soundId, basevol, min, max); - sound = mOutput->playSound(file, volume*basevol, pitch, loop); + sound = mOutput->playSound(file, volume*basevol, pitch, mode&Play_Loop); sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; @@ -229,14 +229,13 @@ namespace MWSound } SoundPtr SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId, - float volume, float pitch, bool loop, - bool untracked) + float volume, float pitch, int mode) { const ESM::Position &pos = ptr.getCellRef().pos; const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); SoundPtr sound; - if(!untracked) + if((mode&Play_Single)) { IDSoundMap::iterator inviter = mSingleSounds.find(soundId); if(inviter != mSingleSounds.end()) @@ -256,14 +255,14 @@ namespace MWSound float min, max; std::string file = lookup(soundId, basevol, min, max); - sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, loop); + sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, mode&Play_Loop); sound->mPos = objpos; sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; sound->mMaxDistance = max; - if(untracked) + if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); else { diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 3ab2b569ea..03cacca237 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -30,6 +30,22 @@ namespace MWSound typedef boost::shared_ptr DecoderPtr; typedef boost::shared_ptr SoundPtr; + enum PlayMode { + Play_Normal = 0, /* tracked, non-looping, multi-instance, environment */ + Play_Loop = 1<<0, /* Sound will continually loop until explicitly stopped */ + Play_NoEnv = 1<<1, /* Do not apply environment effects (eg, underwater filters) */ + Play_NoTrack = 1<<2, /* (3D only) Play the sound at the given object's position + * but do not keep it updated (the sound will not move with + * the object and will not stop when the object is deleted. */ + Play_Single = 1<<3, /* (3D only) Play only a single instance of the given sound id. + * Sounds not marked as Single will not count, and all but the + * closest to the listener's position will be stopped. */ + }; + static inline int operator|(const PlayMode &a, const PlayMode &b) + { return (int)a | (int)b; } + static inline int operator&(const PlayMode &a, const PlayMode &b) + { return (int)a & (int)b; } + class SoundManager { Ogre::ResourceGroupManager& mResourceMgr; @@ -90,12 +106,11 @@ namespace MWSound bool sayDone(MWWorld::Ptr reference) const; ///< Is actor not speaking? - SoundPtr playSound(const std::string& soundId, float volume, float pitch, bool loop=false); + SoundPtr playSound(const std::string& soundId, float volume, float pitch, int mode=Play_Normal); ///< Play a sound, independently of 3D-position SoundPtr playSound3D(MWWorld::Ptr reference, const std::string& soundId, - float volume, float pitch, bool loop, - bool untracked=false); + float volume, float pitch, int mode=Play_Normal); ///< Play a sound from an object void stopSound3D(MWWorld::Ptr reference, const std::string& soundId); From 977e7ac9a3c49a4771c2f8ede2193429399a5ee0 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 07:41:26 -0700 Subject: [PATCH 274/488] Remove the Play_Single flag. It's not correct. --- apps/openmw/mwscript/soundextensions.cpp | 4 +-- apps/openmw/mwsound/soundmanager.cpp | 36 ++---------------------- apps/openmw/mwsound/soundmanager.hpp | 6 ---- 3 files changed, 4 insertions(+), 42 deletions(-) diff --git a/apps/openmw/mwscript/soundextensions.cpp b/apps/openmw/mwscript/soundextensions.cpp index 7ae109075d..b4386a8a0d 100644 --- a/apps/openmw/mwscript/soundextensions.cpp +++ b/apps/openmw/mwscript/soundextensions.cpp @@ -130,7 +130,7 @@ namespace MWScript std::string sound = runtime.getStringLiteral (runtime[0].mInteger); runtime.pop(); - context.getSoundManager().playSound3D (ptr, sound, 1.0, 1.0, MWSound::Play_Single | (mLoop ? MWSound::Play_Loop : 0)); + context.getSoundManager().playSound3D (ptr, sound, 1.0, 1.0, mLoop ? MWSound::Play_Loop : 0); } }; @@ -159,7 +159,7 @@ namespace MWScript Interpreter::Type_Float pitch = runtime[0].mFloat; runtime.pop(); - context.getSoundManager().playSound3D (ptr, sound, volume, pitch, MWSound::Play_Single | (mLoop ? MWSound::Play_Loop : 0)); + context.getSoundManager().playSound3D (ptr, sound, volume, pitch, mLoop ? MWSound::Play_Loop : 0); } }; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 2d743d9cbf..6249c4e4df 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -67,7 +67,6 @@ namespace MWSound SoundManager::~SoundManager() { - mSingleSounds.clear(); mActiveSounds.clear(); mMusic.reset(); mOutput.reset(); @@ -231,29 +230,15 @@ namespace MWSound SoundPtr SoundManager::playSound3D(MWWorld::Ptr ptr, const std::string& soundId, float volume, float pitch, int mode) { - const ESM::Position &pos = ptr.getCellRef().pos; - const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); SoundPtr sound; - - if((mode&Play_Single)) - { - IDSoundMap::iterator inviter = mSingleSounds.find(soundId); - if(inviter != mSingleSounds.end()) - { - if(inviter->second->mPos.squaredDistance(mOutput->mPos) < - objpos.squaredDistance(mOutput->mPos)) - return sound; - inviter->second->stop(); - mSingleSounds.erase(inviter); - } - } - try { // Look up the sound in the ESM data float basevol = 1.0f; /* TODO: volume settings */ float min, max; std::string file = lookup(soundId, basevol, min, max); + const ESM::Position &pos = ptr.getCellRef().pos; + const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, mode&Play_Loop); sound->mPos = objpos; @@ -265,10 +250,7 @@ namespace MWSound if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); else - { mActiveSounds[sound] = std::make_pair(ptr, soundId); - mSingleSounds[soundId] = sound; - } } catch(std::exception &e) { @@ -284,9 +266,6 @@ namespace MWSound { if(snditer->second.first == ptr && snditer->second.second == soundId) { - IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); - if(inviter != mSingleSounds.end() && inviter->second == snditer->first) - mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -302,9 +281,6 @@ namespace MWSound { if(snditer->second.first == ptr) { - IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); - if(inviter != mSingleSounds.end() && inviter->second == snditer->first) - mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -321,9 +297,6 @@ namespace MWSound if(snditer->second.first != MWWorld::Ptr() && snditer->second.first.getCell() == cell) { - IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); - if(inviter != mSingleSounds.end() && inviter->second == snditer->first) - mSingleSounds.erase(inviter); snditer->first->stop(); mActiveSounds.erase(snditer++); } @@ -452,12 +425,7 @@ namespace MWSound while(snditer != mActiveSounds.end()) { if(!snditer->first->isPlaying()) - { - IDSoundMap::iterator inviter = mSingleSounds.find(snditer->second.second); - if(inviter != mSingleSounds.end() && inviter->second == snditer->first) - mSingleSounds.erase(inviter); mActiveSounds.erase(snditer++); - } else { snditer->first->update(); diff --git a/apps/openmw/mwsound/soundmanager.hpp b/apps/openmw/mwsound/soundmanager.hpp index 03cacca237..de5cca839c 100644 --- a/apps/openmw/mwsound/soundmanager.hpp +++ b/apps/openmw/mwsound/soundmanager.hpp @@ -37,9 +37,6 @@ namespace MWSound Play_NoTrack = 1<<2, /* (3D only) Play the sound at the given object's position * but do not keep it updated (the sound will not move with * the object and will not stop when the object is deleted. */ - Play_Single = 1<<3, /* (3D only) Play only a single instance of the given sound id. - * Sounds not marked as Single will not count, and all but the - * closest to the listener's position will be stopped. */ }; static inline int operator|(const PlayMode &a, const PlayMode &b) { return (int)a | (int)b; } @@ -61,9 +58,6 @@ namespace MWSound typedef std::map SoundMap; SoundMap mActiveSounds; - typedef std::map IDSoundMap; - IDSoundMap mSingleSounds; - std::string lookup(const std::string &soundId, float &volume, float &min, float &max); void streamMusicFull(const std::string& filename); From ceedae4a1af3c155f31221376ac9ef66c3e9dca8 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Sat, 31 Mar 2012 16:54:53 +0200 Subject: [PATCH 275/488] technical corrections --- apps/mwiniimporter/importer.cpp | 18 +++++++++++++++--- apps/mwiniimporter/importer.hpp | 5 +---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/mwiniimporter/importer.cpp b/apps/mwiniimporter/importer.cpp index 041712b216..09088774b4 100644 --- a/apps/mwiniimporter/importer.cpp +++ b/apps/mwiniimporter/importer.cpp @@ -3,6 +3,18 @@ #include #include +MwIniImporter::MwIniImporter() { + const char *map[][2] = + { + { "fps", "General:Show FPS" }, + { 0, 0 } + }; + + for(int i=0; map[i][0]; i++) { + mMergeMap.insert(std::make_pair(map[i][0], map[i][1])); + } +} + void MwIniImporter::setVerbose(bool verbose) { mVerbose = verbose; } @@ -34,7 +46,7 @@ strmap MwIniImporter::loadIniFile(std::string filename) { continue; } - map.insert(STRPAIR(section + ":" + line.substr(0,pos), line.substr(pos+1))); + map.insert(std::make_pair(section + ":" + line.substr(0,pos), line.substr(pos+1))); } return map; @@ -68,7 +80,7 @@ strmap MwIniImporter::loadCfgFile(std::string filename) { continue; } - map.insert(STRPAIR(line.substr(0,pos), line.substr(pos+1))); + map.insert(std::make_pair(line.substr(0,pos), line.substr(pos+1))); } return map; @@ -81,7 +93,7 @@ void MwIniImporter::merge(strmap &cfg, strmap &ini) { if((iniIt = ini.find(it->second)) != ini.end()) { cfg.erase(it->first); if(!this->specialMerge(it->first, it->second, cfg, ini)) { - cfg.insert(STRPAIR(it->first, iniIt->second)); + cfg.insert(std::make_pair(it->first, iniIt->second)); } } } diff --git a/apps/mwiniimporter/importer.hpp b/apps/mwiniimporter/importer.hpp index d0034a13d4..ad5aaacde3 100644 --- a/apps/mwiniimporter/importer.hpp +++ b/apps/mwiniimporter/importer.hpp @@ -7,14 +7,11 @@ typedef std::map strmap; -#define STRPAIR std::make_pair class MwIniImporter { public: - MwIniImporter() { - mMergeMap.insert(STRPAIR("fps", "General:Show FPS")); - }; + MwIniImporter(); void setVerbose(bool verbose); strmap loadIniFile(std::string filename); strmap loadCfgFile(std::string filename); From 575474ff69459e52e0d7bba14fadc86da4fd8f84 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 31 Mar 2012 08:14:39 -0700 Subject: [PATCH 276/488] Pass the mode flags to the sound output play methods --- apps/openmw/mwsound/openal_output.cpp | 8 ++++---- apps/openmw/mwsound/openal_output.hpp | 4 ++-- apps/openmw/mwsound/sound.hpp | 2 ++ apps/openmw/mwsound/sound_output.hpp | 4 ++-- apps/openmw/mwsound/soundmanager.cpp | 8 +++++--- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwsound/openal_output.cpp b/apps/openmw/mwsound/openal_output.cpp index 6a4e3fe570..ddf4df7057 100644 --- a/apps/openmw/mwsound/openal_output.cpp +++ b/apps/openmw/mwsound/openal_output.cpp @@ -606,7 +606,7 @@ void OpenAL_Output::bufferFinished(ALuint buf) } -SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, bool loop) +SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float pitch, int flags) { boost::shared_ptr sound; ALuint src=0, buf=0; @@ -642,7 +642,7 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float alSourcef(src, AL_PITCH, pitch); alSourcei(src, AL_SOURCE_RELATIVE, AL_TRUE); - alSourcei(src, AL_LOOPING, (loop?AL_TRUE:AL_FALSE)); + alSourcei(src, AL_LOOPING, (flags&Play_Loop) ? AL_TRUE : AL_FALSE); throwALerror(); alSourcei(src, AL_BUFFER, buf); @@ -653,7 +653,7 @@ SoundPtr OpenAL_Output::playSound(const std::string &fname, float volume, float } SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector3 &pos, float volume, float pitch, - float min, float max, bool loop) + float min, float max, int flags) { boost::shared_ptr sound; ALuint src=0, buf=0; @@ -690,7 +690,7 @@ SoundPtr OpenAL_Output::playSound3D(const std::string &fname, const Ogre::Vector alSourcef(src, AL_PITCH, pitch); alSourcei(src, AL_SOURCE_RELATIVE, AL_FALSE); - alSourcei(src, AL_LOOPING, (loop?AL_TRUE:AL_FALSE)); + alSourcei(src, AL_LOOPING, (flags&Play_Loop) ? AL_TRUE : AL_FALSE); throwALerror(); alSourcei(src, AL_BUFFER, buf); diff --git a/apps/openmw/mwsound/openal_output.hpp b/apps/openmw/mwsound/openal_output.hpp index 35966cc29b..a709576bae 100644 --- a/apps/openmw/mwsound/openal_output.hpp +++ b/apps/openmw/mwsound/openal_output.hpp @@ -40,9 +40,9 @@ namespace MWSound virtual void init(const std::string &devname=""); virtual void deinit(); - virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop); + virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, int flags); virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, - float volume, float pitch, float min, float max, bool loop); + float volume, float pitch, float min, float max, int flags); virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch); virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir); diff --git a/apps/openmw/mwsound/sound.hpp b/apps/openmw/mwsound/sound.hpp index e23830cdb9..ca12ec5571 100644 --- a/apps/openmw/mwsound/sound.hpp +++ b/apps/openmw/mwsound/sound.hpp @@ -18,6 +18,7 @@ namespace MWSound float mBaseVolume; float mMinDistance; float mMaxDistance; + int mFlags; public: virtual void stop() = 0; @@ -30,6 +31,7 @@ namespace MWSound , mBaseVolume(1.0f) , mMinDistance(20.0f) /* 1 * min_range_scale */ , mMaxDistance(12750.0f) /* 255 * max_range_scale */ + , mFlags(Play_Normal) { } virtual ~Sound() { } diff --git a/apps/openmw/mwsound/sound_output.hpp b/apps/openmw/mwsound/sound_output.hpp index ed3dda2f34..1507e18472 100644 --- a/apps/openmw/mwsound/sound_output.hpp +++ b/apps/openmw/mwsound/sound_output.hpp @@ -24,9 +24,9 @@ namespace MWSound virtual void init(const std::string &devname="") = 0; virtual void deinit() = 0; - virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, bool loop) = 0; + virtual SoundPtr playSound(const std::string &fname, float volume, float pitch, int flags) = 0; virtual SoundPtr playSound3D(const std::string &fname, const Ogre::Vector3 &pos, - float volume, float pitch, float min, float max, bool loop) = 0; + float volume, float pitch, float min, float max, int flags) = 0; virtual SoundPtr streamSound(const std::string &fname, float volume, float pitch) = 0; virtual void updateListener(const Ogre::Vector3 &pos, const Ogre::Vector3 &atdir, const Ogre::Vector3 &updir) = 0; diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 6249c4e4df..2c2e6e9f91 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -185,7 +185,7 @@ namespace MWSound const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); SoundPtr sound = mOutput->playSound3D(filePath, objpos, basevol, 1.0f, - 20.0f, 12750.0f, false); + 20.0f, 12750.0f, Play_Normal); sound->mPos = objpos; sound->mBaseVolume = basevol; @@ -212,11 +212,12 @@ namespace MWSound float min, max; std::string file = lookup(soundId, basevol, min, max); - sound = mOutput->playSound(file, volume*basevol, pitch, mode&Play_Loop); + sound = mOutput->playSound(file, volume*basevol, pitch, mode); sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; sound->mMaxDistance = max; + sound->mFlags = mode; mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); } @@ -240,12 +241,13 @@ namespace MWSound const ESM::Position &pos = ptr.getCellRef().pos; const Ogre::Vector3 objpos(pos.pos[0], pos.pos[1], pos.pos[2]); - sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, mode&Play_Loop); + sound = mOutput->playSound3D(file, objpos, volume*basevol, pitch, min, max, mode); sound->mPos = objpos; sound->mVolume = volume; sound->mBaseVolume = basevol; sound->mMinDistance = min; sound->mMaxDistance = max; + sound->mFlags = mode; if((mode&Play_NoTrack)) mActiveSounds[sound] = std::make_pair(MWWorld::Ptr(), soundId); From 751e7d2199d595b2024d8172aef1e03670d0eaa9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 31 Mar 2012 17:26:15 +0200 Subject: [PATCH 277/488] basic auto-equipping (picks the first matching item --- apps/openmw/mwmechanics/actors.cpp | 5 ++- apps/openmw/mwworld/inventorystore.cpp | 58 +++++++++++++++++++++++++- apps/openmw/mwworld/inventorystore.hpp | 14 ++++++- 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index d532c6f091..e68b99597e 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -6,6 +6,7 @@ #include #include "../mwworld/class.hpp" +#include "../mwworld/inventorystore.hpp" namespace MWMechanics { @@ -16,7 +17,9 @@ namespace MWMechanics void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused) { - + if (!paused) + MWWorld::Class::get (ptr).getInventoryStore (ptr).autoEquip ( + MWWorld::Class::get (ptr).getNpcStats (ptr)); } Actors::Actors (MWWorld::Environment& environment) : mEnvironment (environment), mDuration (0) {} diff --git a/apps/openmw/mwworld/inventorystore.cpp b/apps/openmw/mwworld/inventorystore.cpp index e64c9785f4..aedd119c8a 100644 --- a/apps/openmw/mwworld/inventorystore.cpp +++ b/apps/openmw/mwworld/inventorystore.cpp @@ -6,6 +6,8 @@ #include "class.hpp" +#include /// \todo remove after rendering is implemented + void MWWorld::InventoryStore::copySlots (const InventoryStore& store) { // some const-trickery, required because of a flaw in the handling of MW-references and the @@ -24,10 +26,15 @@ void MWWorld::InventoryStore::copySlots (const InventoryStore& store) } } -MWWorld::InventoryStore::InventoryStore() +void MWWorld::InventoryStore::initSlots (TSlots& slots) { for (int i=0; i, bool> itemsSlots = + MWWorld::Class::get (*iter).getEquipmentSlots (*iter); + + for (std::vector::const_iterator iter2 (itemsSlots.first.begin()); + iter2!=itemsSlots.first.end(); ++iter2) + { + /// \todo comapre item with item in slot + if (slots.at (*iter2)==end()) + { + /// \todo unstack, if reqquired (itemsSlots.second) + + slots[*iter2] = iter; + break; + } + } + } + + bool changed = false; + + for (std::size_t i=0; i mSlots; + typedef std::vector TSlots; + + mutable TSlots mSlots; void copySlots (const InventoryStore& store); + void initSlots (TSlots& slots); + public: InventoryStore(); @@ -52,6 +61,9 @@ namespace MWWorld ///< \note \a iteartor can be an end-iterator ContainerStoreIterator getSlot (int slot); + + void autoEquip (const MWMechanics::NpcStats& stats); + ///< Auto equip items according to stats and item value. }; } From 2a7885b514ab183edc3bfd8f1654cbfcaa501c3f Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Sat, 31 Mar 2012 19:36:07 +0400 Subject: [PATCH 278/488] Synchronized OS X icon with our current app icon --- files/mac/openmw.icns | Bin 153405 -> 134980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/files/mac/openmw.icns b/files/mac/openmw.icns index dfea24660669401eb1a2ae9fb81c142891c7be03..3ff899a799e17fa69258323be59c470633cfec68 100644 GIT binary patch literal 134980 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