1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-27 03:35:27 +00:00

18002 Commits

Author SHA1 Message Date
Petr Mikheev
9adc190209 Redesign LuaUtil::ScriptsContainer to work with ScriptsConfiguration 2021-10-26 21:32:48 +02:00
Petr Mikheev
33d71be81f Add LuaUtil::ScriptsConfiguration 2021-10-26 21:32:02 +02:00
Petr Mikheev
6aab246879 Add ESM records that are needed to store Lua scripts configuration;
Use ptr.getType() (i.e. esm record names) instead of typeid(ptr.getClass()) in apps/openmw/mwlua.
2021-10-26 21:32:02 +02:00
psi29a
c0dca5371b Merge branch 'recalc_mana' into 'master'
Don't wait a frame to recalculate magicka

Closes #3792

See merge request OpenMW/openmw!1323
2021-10-26 08:58:04 +00:00
psi29a
2765bcee5e Merge branch 'serialization' into 'master'
Add helpers for binary serialization

See merge request OpenMW/openmw!1319
2021-10-26 08:25:17 +00:00
Evil Eye
289e1544d2 Don't wait a frame to recalculate magicka 2021-10-25 16:54:50 +02:00
Bret Curtis
3d0da9b9b2
Merge pull request #3191 from akortunov/warnfix
Fix some MSVC warnings
2021-10-25 15:17:05 +02:00
Bo Svensson
1ff8318a52
refactors premultiplied alpha (#3189)
With this PR we refactor a `premultiplied alpha` user string set by `characterpreview.cpp` into a more flexible mechanism allowing us to assign any state to GUI textures. We can consider these changes more future proof than the previous approach.
2021-10-25 09:28:32 +02:00
Bo Svensson
7f9beac3a7
refactors a case insensitive map (#3184)
This PR aims to spark the retirement of a questionable pattern I have found all over our code base. I will illustrate how this pattern encourages code duplication, lacks type safety, requires documentation and can be prone to bugs.
```
std::map<std::string, Object> mMap; // Stored in all lowercase for a case-insensitive lookup

std::string lowerKey = Misc::StringUtils::lowerCase(key);
mMap.emplace(lowerKey, object);

std::string lowerKey = Misc::StringUtils::lowerCase(key);
mMap.find(lowerKey);

mMap.find(key); // Not found. Oops!
```
An alternative approach produces no such issues.
```
std::unordered_map<std::string, Object, Misc::StringUtils::CiHash, Misc::StringUtils::CiEqual> mMap;

mMap.emplace(key, object);

mMap.find(key);
```
Of course, such an alternative will work for a `map` as well, but an `unordered_map` is generally preferable over a `map` with these changes because we have moved `lowerCase` into the comparison operator. 

In this PR I have refactored `Animation::mNodeMap` accordingly. I have reviewed and adapted all direct and indirect usage of `Animation::mNodeMap` to ensure we do not change behaviour with this PR.
2021-10-25 09:18:26 +02:00
Bo Svensson
6fb376f1cf
templatise ptr.hpp (#3185)
With this PR we consolidate identical logic for Ptr and ConstPtr with the help of a template.
2021-10-25 09:08:50 +02:00
Andrei Kortunov
107a9ecb17 Fix variables hiding 2021-10-24 18:45:04 +04:00
elsid
a58f1a94e3
Add helpers for binary serialization
To construct serializer from given entities:
* Data source/destination - any value that has to be serialized/deserialized,
  usually already existing type.
* Format - functional object to define high level serialization logic to
  define specific format and data schema. Like order of fields, allocation.
* Visitor - functional object to define low level serialization logic to
  operator on given data part.
  * BinaryWriter - copies given value into provided buffer.
  * BinaryReader - copies value into given destination from provided buffer.
  * SizeAccumulator - calculates required buffer size for given data.
2021-10-24 14:20:44 +02:00
Evil Eye
f70a154195 Merge branch 'place' of github.com:akortunov/openmw into master 2021-10-23 11:34:42 +02:00
psi29a
217d17adeb Merge branch 'ugly_rounding' into 'master'
Prevent floating point issues accumulating

See merge request OpenMW/openmw!1306
2021-10-23 08:39:26 +00:00
Bo Svensson
c9c8d02332
fixes a crash (#3183)
This PR fixes a crash caused by the improperly ensured lifetime of RigGeometry::mSourceGeometry. mSourceGeometry was not adequate to ensure mSourceGeometry would outlive mGeometry because we extend mGeometrys lifetime beyond this lifetime by passing mGeometry to the draw traversal instead of this.
In addition,

We add important comments.
We detect and prevent generally unsafe operations in high level code.
We add a sprinkling of const to help clarify intentions.
2021-10-23 10:31:46 +02:00
Evil Eye
b5c876299d Round to a power of two 2021-10-23 09:29:16 +02:00
psi29a
1ffa02b2fd Merge branch 'fix_windows_tests' into 'master'
Fix tests on windows

See merge request OpenMW/openmw!1313
2021-10-22 12:35:10 +00:00
psi29a
a4899d72f4 Merge branch 'deduplicate_swim_speed' into 'master'
Deduplicate swim speed formula implementation

See merge request OpenMW/openmw!1310
2021-10-22 12:34:19 +00:00
psi29a
ed811176bc Merge branch 'fix_esm_loader' into 'master'
Fix logic expression for not found value in EsmLoader::getModel

See merge request OpenMW/openmw!1308
2021-10-22 12:33:39 +00:00
psi29a
0d810fe41c Merge branch 'init_gmst' into 'master'
Use lambda instead of bool to make sure GMST initialized once

See merge request OpenMW/openmw!1309
2021-10-21 21:41:29 +00:00
Alexei Kotov
156f2a471a Merge branch 'self_target' into 'master'
Apply on self effects on projectiles to the target instead

Closes #6321

See merge request OpenMW/openmw!1312
2021-10-21 20:37:11 +00:00
elsid
b5f0057ac9
Fix tests on windows 2021-10-21 19:48:31 +02:00
Evil Eye
63fa6d3b7c Apply on self effects on projectiles to the target instead 2021-10-21 17:28:36 +02:00
Evil Eye
31a7c83cc7 Fix a regression involving default arguments 2021-10-21 17:22:15 +02:00
elsid
68ed8487b5
Use lambda instead of bool to make sure GMST initialized once
This is less expensive than having 2 static variables and thread-safe.
2021-10-21 03:19:12 +02:00
elsid
2a0e1697b6
Deduplicate swim speed formula implementation 2021-10-21 01:25:09 +02:00
Bo Svensson
a854a6e04a
removes UnrefQueue (#3181)
Currently, we use an `UnrefQueue` which supposedly aims to transfer destruction costs to another thread. The implications of this unusual pattern can not be well understood because some allocators might free resources more efficiently if they are freed by the same thread that allocated them. In addition, `UnrefQueue` complicates the validation of thread safety in our engine. Lastly, our current usage of `UnrefQueue` triggers `ref()`, `unref()` atomic operations as objects are passed into the queue. These operations could be more expensive than the actual destruction.

With this PR we thus remove `UnrefQueue`. We can expect these changes to have a minor impact at most because we free most resources elsewhere in `ResourceSystem::updateCache`.
2021-10-20 23:02:15 +02:00
elsid
a3b6bc7263
Fix logic expression for not found value 2021-10-20 17:48:10 +02:00
Evil Eye
dd4d8b2649 Prevent floating point issues accumulating 2021-10-19 21:38:07 +02:00
psi29a
a5b9c9160d Merge branch 'compression' into 'master'
Add functions to compress/decompress vector of bytes

See merge request OpenMW/openmw!1305
2021-10-19 08:07:22 +00:00
elsid
1da9c75692
Add missing initialization for Enchanting::mObjectType 2021-10-18 22:11:48 +02:00
elsid
e5413c0664
Add functions to compress/decompress vector of bytes 2021-10-18 20:46:22 +02:00
Petr Mikheev
17f7a1a2ea Merge branch 'fix_lua_test' into 'master'
Fix LuaUtilPackageTest.Transform

See merge request OpenMW/openmw!1302
2021-10-18 07:16:10 +00:00
elsid
bb26ba30b6
Add progress reporter type
To log/report progress of long duration operations using given time period.
2021-10-18 01:26:10 +02:00
elsid
23026caacc
Fix LuaUtilPackageTest.Transform
It can fail due to float arithmetic precision with error:
Expected equality of these values:
  getAsString(lua, "moveAndScale")
    Which is: "TransformM{ move(6, 22, 18) scale(0.5, 1, 0.5) rotation(angle=8.53284e-17, axis=(1, 0, 0)) }"
  "TransformM{ move(6, 22, 18) scale(0.5, 1, 0.5) }"
2021-10-17 22:47:18 +02:00
psi29a
d8d16a52e1 Merge branch 'esm_loader' into 'master'
Add ESM data loader

See merge request OpenMW/openmw!1301
2021-10-17 19:21:32 +00:00
elsid
046b5f83ee
Add ESM data loader
A component to load ESM content files with limited support for record types and
selection which of them to load. Supported record types are:
ACTI, CELL, CONT, DOOR, GMST, LAND, STAT.
2021-10-17 19:55:29 +02:00
elsid
18d3102148
Do not use union to access FIXED_STRING<4> as int
https://en.cppreference.com/w/cpp/language/union:
> It's undefined behavior to read from the member of the union that wasn't most recently written.
2021-10-17 17:16:21 +02:00
Andrei Kortunov
362c124e8f Allow to place levelled creatures to the game world (bug 6347) 2021-10-17 17:58:54 +04:00
psi29a
00b28d2665 Merge branch 'over_time' into 'master'
Fix particles and magnitudes for (damage) over time effects

See merge request OpenMW/openmw!1298
2021-10-17 12:12:22 +00:00
psi29a
2f0484f4fc Merge branch 'clear_me_not' into 'master'
Do not clear depth buffer in first person (#6078)

Closes #6078

See merge request OpenMW/openmw!1119
2021-10-17 09:30:30 +00:00
glassmancody.info
cc009d246f do not clear depth buffer in first person 2021-10-16 18:37:34 -07:00
unknown
add6eb9c95 Fix particles and magnitudes for (damage) over time effects 2021-10-16 21:40:41 +02:00
psi29a
c051298848 Merge branch 'sqlite3_helpers' into 'master'
Add sqlite3 helpers

See merge request OpenMW/openmw!1299
2021-10-16 18:48:02 +00:00
elsid
c88367b6a6
Add sqlite3 helpers 2021-10-16 17:43:08 +02:00
elsid
501316a9f7
Add missing initialization in MWPhysics::Object
==16218== Conditional jump or move depends on uninitialised value(s)
==16218==    at 0xCDBC27: MWPhysics::Object::commitPositionChange() (object.cpp:68)
==16218==    by 0xCE5B64: MWPhysics::PhysicsTaskScheduler::updatePtrAabb(std::shared_ptr<MWPhysics::PtrHolder> const&) (mtphysics.cpp:446)
==16218==    by 0xCE5CC3: operator() (mtphysics.cpp:432)
==16218==    by 0xCE5CC3: for_each<std::_Rb_tree_const_iterator<std::shared_ptr<MWPhysics::PtrHolder> >, MWPhysics::PhysicsTaskScheduler::updateAabbs()::<lambda(const std::shared_ptr<MWPhysics::PtrHolder>&)> > (stl_algo.h:3820)
==16218==    by 0xCE5CC3: MWPhysics::PhysicsTaskScheduler::updateAabbs() (mtphysics.cpp:431)
==16218==    by 0xCE5E35: MWPhysics::PhysicsTaskScheduler::afterPreStep() (mtphysics.cpp:586)
==16218==    by 0xCE6238: operator() (mtphysics.cpp:533)
==16218==    by 0xCE6238: wait<MWPhysics::PhysicsTaskScheduler::doSimulation()::<lambda()> > (barrier.hpp:33)
==16218==    by 0xCE6238: MWPhysics::PhysicsTaskScheduler::doSimulation() (mtphysics.cpp:533)
==16218==    by 0xCE6377: MWPhysics::PhysicsTaskScheduler::worker() (mtphysics.cpp:464)
==16218==    by 0x74523C3: execute_native_thread_routine (thread.cc:82)
==16218==    by 0x76FF258: start_thread (in /usr/lib/libpthread-2.33.so)
==16218==    by 0x78155E2: clone (in /usr/lib/libc-2.33.so)
==16218==

==16218== Conditional jump or move depends on uninitialised value(s)
==16218==    at 0xCDBC30: MWPhysics::Object::commitPositionChange() (object.cpp:73)
==16218==    by 0xCE5B64: MWPhysics::PhysicsTaskScheduler::updatePtrAabb(std::shared_ptr<MWPhysics::PtrHolder> const&) (mtphysics.cpp:446)
==16218==    by 0xCE5CC3: operator() (mtphysics.cpp:432)
==16218==    by 0xCE5CC3: for_each<std::_Rb_tree_const_iterator<std::shared_ptr<MWPhysics::PtrHolder> >, MWPhysics::PhysicsTaskScheduler::updateAabbs()::<lambda(const std::shared_ptr<MWPhysics::PtrHolder>&)> > (stl_algo.h:3820)
==16218==    by 0xCE5CC3: MWPhysics::PhysicsTaskScheduler::updateAabbs() (mtphysics.cpp:431)
==16218==    by 0xCE5E35: MWPhysics::PhysicsTaskScheduler::afterPreStep() (mtphysics.cpp:586)
==16218==    by 0xCE6238: operator() (mtphysics.cpp:533)
==16218==    by 0xCE6238: wait<MWPhysics::PhysicsTaskScheduler::doSimulation()::<lambda()> > (barrier.hpp:33)
==16218==    by 0xCE6238: MWPhysics::PhysicsTaskScheduler::doSimulation() (mtphysics.cpp:533)
==16218==    by 0xCE6377: MWPhysics::PhysicsTaskScheduler::worker() (mtphysics.cpp:464)
==16218==    by 0x74523C3: execute_native_thread_routine (thread.cc:82)
==16218==    by 0x76FF258: start_thread (in /usr/lib/libpthread-2.33.so)
==16218==    by 0x78155E2: clone (in /usr/lib/libc-2.33.so)
==16218==
2021-10-16 00:43:50 +02:00
elsid
d06e697356
Initialize RenderingManager fields before use
PostProcessor is constructed before mNearClip, mViewDistance, mFieldOfView are
initialized and the constructor calls updateProjectionMatrix that uses these
fields.

==16218== Conditional jump or move depends on uninitialised value(s)
==16218==    at 0x722EBE: min<float> (stl_algobase.h:235)
==16218==    by 0x722EBE: MWRender::RenderingManager::updateProjectionMatrix() (renderingmanager.cpp:1183)
==16218==    by 0x7D022F: MWRender::PostProcessor::PostProcessor(MWRender::RenderingManager&, osgViewer::Viewer*, osg::Group*) (postprocessor.cpp:144)
==16218==    by 0x728B41: MWRender::RenderingManager::RenderingManager(osgViewer::Viewer*, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, SceneUtil::WorkQueue*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DetourNavigator::Navigator&) (renderingmanager.cpp:452)
==16218==    by 0xBB5E65: MWWorld::World::World(osgViewer::Viewer*, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, SceneUtil::WorkQueue*, Files::Collections const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, ToUTF8::Utf8Encoder*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (worldimp.cpp:190)
==16218==    by 0xDEEA6F: OMW::Engine::prepareEngine(Settings::Manager&) (engine.cpp:789)
==16218==    by 0xDF2068: OMW::Engine::go() (engine.cpp:959)
==16218==    by 0xDE7B8F: runApplication(int, char**) (main.cpp:220)
==16218==    by 0x1006593: wrapApplication(int (*)(int, char**), int, char**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (debugging.cpp:205)
==16218==    by 0x7152C3: main (main.cpp:232)
==16218==

==17455== Conditional jump or move depends on uninitialised value(s)
==17455==    at 0x4F8613F: osg::Matrixd::makeFrustum(double, double, double, double, double, double) (Matrix_implementation.cpp:916)
==17455==    by 0x4EC0E11: osg::Camera::setProjectionMatrixAsPerspective(double, double, double, double) (Matrixd:580)
==17455==    by 0x722DDA: MWRender::RenderingManager::updateProjectionMatrix() (renderingmanager.cpp:1167)
==17455==    by 0x7D01EF: MWRender::PostProcessor::PostProcessor(MWRender::RenderingManager&, osgViewer::Viewer*, osg::Group*) (postprocessor.cpp:144)
==17455==    by 0x728BA1: MWRender::RenderingManager::RenderingManager(osgViewer::Viewer*, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, SceneUtil::WorkQueue*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DetourNavigator::Navigator&) (renderingmanager.cpp:453)
==17455==    by 0xBB5E25: MWWorld::World::World(osgViewer::Viewer*, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, SceneUtil::WorkQueue*, Files::Collections const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, ToUTF8::Utf8Encoder*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (worldimp.cpp:190)
==17455==    by 0xDEEA3F: OMW::Engine::prepareEngine(Settings::Manager&) (engine.cpp:789)
==17455==    by 0xDF2038: OMW::Engine::go() (engine.cpp:959)
==17455==    by 0xDE7B5F: runApplication(int, char**) (main.cpp:220)
==17455==    by 0x1006563: wrapApplication(int (*)(int, char**), int, char**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (debugging.cpp:205)
==17455==    by 0x7152C3: main (main.cpp:232)
==17455==
2021-10-16 00:43:31 +02:00
psi29a
ac3c02496c Merge branch 'terrainselectionoptimize' into 'master'
Terrain selection optimizations

See merge request OpenMW/openmw!1261
2021-10-15 20:46:20 +00:00
Chris Djali
9c040d1ff7
Merge pull request #3175 from bosvensson1/patch-52
removes sky bounds
2021-10-15 20:12:32 +01:00
unelsson
14c4bba4a3 Remove unused include 2021-10-15 21:54:00 +03:00