Commit Graph

387 Commits (master)

Author SHA1 Message Date
glassmancody.info 2c52695361 fix regression where LEQUAL was used instead of LESS for depth function 3 years ago
Cody Glassman d85f772269 Depth refactor 3 years ago
Bo Svensson 5f1bf89369
improves groundcover view distance (#3219)
This PR aims to solve all issues with `Groundcover` view distance handling in a satisfying way while preserving other optimisations that benefit other features. The main idea here is not to rely on `ViewData` updates for distance culling calculations because we can not accurately determine distance against lazily updated views. Instead, we perform an accurate measurement in a cull callback we can run every frame in `Groundcover` itself. While we do have to add some code to handle this feature, it is quite loosely coupled code that could be useful elsewhere in the future. These changes should address a performance regression @akortunov experienced.
3 years ago
Bo Svensson d88d006984
fixes getViewDistance (#3207)
I have been informed by @akortunov that my addition of `Groundcover::getViewDistance` is not working in some cases. Investigations revealed that some `ViewData` code interacting with my additions had been quite thoroughly optimised in a way that was not sufficiently documented and interfered with the new feature. With this PR we repair `getViewDistance` while preserving such optimisations and add a necessary comment to avoid issues in the future. In addition, we now rebuild views when the global `mViewDistance` changes.
3 years ago
Bo Svensson 41318a585f
fixes enable and disable commands (#3186)
This PR fixes a recent regression concerning enable and disable commands with object paging. In addition, we add a necessary comment to avoid such issues in the future.
3 years ago
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`.
3 years ago
Bo Svensson 01605433cb
quadtreeworld.cpp (#3174)
Currently, we disable a paging root node that we only need in exterior cells by setting its node mask to 0 when transitioning into an interior cell. Node masks are not ideal for this usage case because Node::getBound is unaware of masks. With this PR we just detach the unused node from the scene graph. _shadowedScene->getBound() in the MWShadowTechnique should return a much better value in interior cells with these changes.
3 years ago
Bo Svensson 98f8295765
allows to skip ComputeLightSpaceBounds traversal (#3152)
Currently, we always traverse the scene graph an additional time with a ComputeLightSpaceBounds visitor during shadow casting. ComputeLightSpaceBounds is only useful when the shadow casting mask allows us to shrink the bounds of the rendered scene, so we guard its traversal with a check against getCastsShadowTraversalMask. In practice, this guard never works because we build the traversal mask inclusively.

With this PR we limit the getCastsShadowTraversalMask check to relevant masks. This new check allows us to skip a superfluous ComputeLightSpaceBounds traversal with most settings.
3 years ago
Bo Svensson b2af81bc18
converts remaining osg::NodeCallback (#3147)
With this PR we convert remaining instantiations of the deprecated osg::NodeCallback in Open MW to SceneUtil::NodeCallback.
3 years ago
Bo Svensson 3f731cd102
attempts to fix spellcasting freezes (#3146)
Firstly, this PR reintroduces commit "Recreate a special case for IntersectionVisitor on QuadTreeWorld" we forgot to reapply while reverting a revert commit. Secondly, in cases we still need to build a view for an intersection visitor, we now use the available `osgUtil::IntersectionVisitor::getReferenceEyePoint` instead of falling back to the origin position that was previously causing long rebuild times.
3 years ago
Bret Curtis b7c1d9edb0 remove unnecessary includes 3 years ago
Bo Svensson d8707a763f
fixes build (#3134)
* quadtreeworld.cpp

* renderingmanager.cpp [ci skip]

* quadtreeworld.hpp

* cellborder.hpp

* cellborder.cpp
3 years ago
Bret Curtis 803195a05f add back some explicit includes 3 years ago
Bret Curtis 9fabf99250 remove mDebugChunks from chunkManager 3 years ago
Bo Svensson 01cc61087b
improves paging preloader (#3126)
* Return check for distance when we try to reuse data

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* cellpreloader.cpp

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* [ci skip]

* quadtreeworld.cpp

* chunkmanager.cpp

* chunkmanager.cpp

* cellpreloader.cpp

* jvoisin

* whitespace

* whitespace
3 years ago
Bo Svensson 3f68ddd8f4
alternate debug chunks (#3127)
* quadtreeworld.cpp

* chunkmanager.cpp

* chunkmanager.hpp

* quadtreeworld.hpp

* chunkmanager.cpp

* quadtreeworld.cpp

* quadtreeworld.cpp

* quadtreeworld.cpp [ci skip]

* quadtreeworld.hpp

* quadtreeworld.cpp

* quadtreeworld.cpp

* quadtreeworld.cpp

* chunkmanager.cpp

* chunkmanager.cpp
3 years ago
Bo Svensson d38c8c6dcb
optimise chunk drawing order (#3116)
* material.cpp

* material.cpp
3 years ago
Bo Svensson 095f4b2ed5
material.cpp (#3117) 3 years ago
Cédric Mocquillon d7352ded36 Add configurable color and offset 3 years ago
Cédric Mocquillon 4b7d0bba53 Avoid adding redundant osg;;Group in non debug mode 3 years ago
Cédric Mocquillon 98a0819d52 Debug terrain chunks 3 years ago
Bo Svensson ac72f3d636
reduces virtual function calls in a hotspot of cache retrieval (#3100)
* chunkmanager.cpp static_cast [ci skip]

* groundcover.cpp static_cast [ci skip]

* Update objectpaging.cpp

objectpaging.cpp static_cast [ci skip]
3 years ago
Bo Svensson 9d661359a1
Groundcover consolidation (#3096)
* chunkmanager.hpp viewdistance

* chunkmanager.cpp viewdistance

* chunkmanager.hpp viewdistance

* quadtreeworld.cpp viewdistance

* quadtreeworld.cpp consolidate

* quadtreeworld.hpp consolidate

* renderingmanager.cpp groundcover consolidate

* renderingmanager.hpp groundcover consolidate

* renderingmanager.cpp updater move

* renderingmanager.hpp updater move

* groundcover.hpp activegrid consolidation

* groundcover.cpp activegrid consolidation

* settings-default.cfg dead settings remove

* viewdata.cpp revert

* wrong file paste mistake

* wrong file paste mistake

* wrong file paste mistake

* renderingmanager.cpp updatecallback fix

* renderingmanager.cpp namespace fix

* groundcover.hpp redefinition fix

* groundcover.cpp redefinition fix

* renderingmanager.cpp crash fix

* renderingmanager.cpp euclidean groundcover distance

* viewdata.hpp getreusedistance

* quadtreeworld.cpp reusedistance

* groundcover.rst [ci skip]
3 years ago
elsid 605cb8db7c
Make sync terrain preloading sleep free
This reduces average time spent on in. 5 milliseconds as a base precision is
quite a lot considering that for 60 FPS frame time is 1000/16 = ~16.67 ms
when it's a cell loading frame and there is more important work to do rather
than sleeping.
3 years ago
jvoisin cb08f490d7 Sprinkle some const-ref in loop
This was done on the good advices of clang-tidy
3 years ago
Bret Curtis 436c640da2 the old switch-a-roo because we shoudl only StopTraversal when the node size is larger than 1 and not the other way around 3 years ago
glassmancody.info 09e03fde2e refactor and fix wobbly shores 3 years ago
glassmancody.info cad0b151cb enable shaders path and dehardcode depth formats 3 years ago
glassmancody.info 70fac33940 initial reverse-z depth implementation 3 years ago
Andrei Kortunov 54c8375672 Recreate a special case for IntersectionVisitor on QuadTreeWorld 4 years ago
Andrei Kortunov 3e281f625d Return check for distance when we try to reuse data (bug #6026) 4 years ago
psi29a e94181b2b2 Merge branch 'constexpr' into 'master'
Sprinkle a couple of constexpr found by VS

See merge request OpenMW/openmw!800

(cherry picked from commit 5e8ea624bc85acebf457592dd10b790124ecf6ef)

5704b2ac Sprinkle a couple of constexpr found by VS
4 years ago
Andrei Kortunov 2d869ca9ff Fix node masks signed/unsigned mismatch 4 years ago
Andrei Kortunov 14cf0ce1dc Implement instanced groundcover 4 years ago
AnyOldName3 eb80c997b8 Avoid OSG setting array binding from multiple threads 4 years ago
Andrei Kortunov 8e5f26c109 Code cleanup 4 years ago
Andrei Kortunov 8084a336b5 Replace zeroes and nulls by nullptrs 4 years ago
Alexei Dobrohotov 53f91a3aa5
Merge pull request #3018 from akortunov/emplace
Use emplace_back instead of push_back
4 years ago
Andrei Kortunov 065ed5138e Use emplace_back instead of push_back 4 years ago
Andrei Kortunov 8ca3c3b123 Mark overrided methods by override keyword 4 years ago
elsid 40ad87bc4d
Replace OpenThreads by std types 5 years ago
Andrei Kortunov 808c905e1f Initialize fields to avoid undefined behaviour 5 years ago
Andrei Kortunov 0e810c8d32 Fix cell borders color 5 years ago
Andrei Kortunov 805d826d5b Fix Clang warnings about invalid overrides 5 years ago
bzzt lost a hitlab login 4238fbccdf view fix
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login 65cd2c77aa static intersections
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login c7fda6d280 activegrid paging = 2xfps
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login b4af2ac672 avoid blocking on pagerebuild
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login 17637c6575 pagerebuild on disable
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login ffbed7ee38 loadingscreen
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login da92ad329b move renderbin
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login b7b31926a8 fix map glitch + cleanup
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login 77b92aee9c fix shadowsglitch by bounds overflow
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login 1f891ca46d billboarding support for tree mods
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login cf439581e1 comply by elsid review
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt lost a hitlab login ce505a9bb3 crashfix + optimiziation
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
bzzt d684f1a78f terrainbased objectpaging
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
Andrei Kortunov 6de97e6bc2 Remove redundant variables from RenderingManager 5 years ago
Capostrophic 1bf2ddac4d Cleanup
Move static variable declaration out of the loop
Remove redundant boolean argument from applyDrawableProperties()
Improve HeightCullCallback class formatting
5 years ago
Bret Curtis ed970f4d17 Apply suggestion to components/terrain/terraingrid.hpp 5 years ago
Bret Curtis 756ec7117b make mGrid (and friends) private again, create accessor method to return bool of mGrid.empty() 5 years ago
Bret Curtis 48713915cb re-use bzzts waterplane overlay for debug; makes it easier to test. To use this, set the env OPENMW_WATER_CULLING_DEBUG=1; You will see blue rectangles corresponding to water outlines. Once there are no more outlines, water is culled. You can further see this by pressing F3 3 times to check the the amount of quads. Before culling it should be around 1600, after culling it should drop to 0. 5 years ago
Bret Curtis 407fbe320e cleanup and use C++ version of FLT_MAX 5 years ago
bzzt ed20d869b4 waterculling for both terrain 5 years ago
Bret Curtis a4d1068d1a Merge branch '13' into 'master'
terrainshadowclusterculling

See merge request OpenMW/openmw!141
5 years ago
Bret Curtis 8a8107e837 as it says; revert vismask and uncomplicate openmw 5 years ago
fredzio 39a55318b0 Remove unused variable 5 years ago
Andrei Kortunov a68d9aed4c Fix issues, found by CoverityScan 5 years ago
Andrei Kortunov 84979fa8b7 Move VisMask to components 5 years ago
Andrei Kortunov f4291ea948 Fix intersector usage (bug #5283) 5 years ago
Andrei Kortunov eec82f676a
Merge pull request #2602 from elsid/clang_tidy
Fix clang-tidy issues
5 years ago
Andrei Kortunov 5daf602256 Fix iterator usage when destroying cell borders (bug #5218) 5 years ago
bzzt 480302d634 terrainclusterculling 5 years ago
elsid 4cd2ff9a3d
Avoid virtual call in TerrainGrid dtor
/home/elsid/dev/openmw/components/terrain/terraingrid.cpp:31:9: warning: Call to virtual function during destruction [clang-analyzer-optin.cplusplus.VirtualCall]
        unloadCell(mGrid.begin()->first.first, mGrid.begin()->first.second);
        ^
/home/elsid/dev/openmw/components/terrain/terraingrid.cpp:29:12: note: Assuming the condition is true
    while (!mGrid.empty())
           ^
/home/elsid/dev/openmw/components/terrain/terraingrid.cpp:29:5: note: Loop condition is true.  Entering loop body
    while (!mGrid.empty())
    ^
/home/elsid/dev/openmw/components/terrain/terraingrid.cpp:31:9: note: This destructor of an object of type '~TerrainGrid' has not returned when the virtual method was called
        unloadCell(mGrid.begin()->first.first, mGrid.begin()->first.second);
        ^
/home/elsid/dev/openmw/components/terrain/terraingrid.cpp:31:9: note: Call to virtual function during destruction
5 years ago
Andrei Kortunov af41e9acc1 Initialize variables to avoid undefined values 5 years ago
elsid d42b5fd28e
Fix warning -Woverloaded-virtual
In file included from openmw/components/terrain/quadtreeworld.cpp:10:
openmw/components/terrain/quadtreenode.hpp:95:14: warning: 'Terrain::QuadTreeNode::traverse' hides overloaded virtual function [-Woverloaded-virtual]
        void traverse(ViewData* vd, const osg::Vec3f& viewPoint, LodCallback* lodCallback, float maxDist);
             ^
OpenSceneGraph/build/clang/release/include/osg/Group:43:22: note: hidden overloaded virtual function 'osg::Group::traverse' declared here: different number of parameters (1 vs 4)
        virtual void traverse(NodeVisitor& nv);
                     ^
1 warning generated.
5 years ago
elsid 751accad0f
Remove unused field QuadTreeBuilder::mLodFactor 5 years ago
bzzt a730365ea1 Creanup Distant Terrain code
- Cull terrain in the stock osg::CullVisitor
- Do not compile composite maps for shadow camera
- Do not abuse userdata for composite maps
6 years ago
bzzt e4ba6ecf15 Do not store a LOD callback in the every QuadTreeNode 6 years ago
bzzt a61c0aaee1 Do not load height data to the qued tree since we do not need it now 6 years ago
bzzt ebcf8ca062 Do not store a ViewDataMap in the every QuadTreeNode 6 years ago
bzzt cb6d27fb12 Use the custom LineSegmentIntersector for QuadTree to simplify traversal
code
6 years ago
bzzt ce4e8be9ac Move traverse methods to the QuadTreeNode 6 years ago
Andrei Kortunov 1da012f6ee Optimize blendmap generation 6 years ago
elsid 4500f01efd
Remove unused field 6 years ago
bzzt 391f6faffb Remove unused defaultViewer / defaultViewPoint 6 years ago
bzzt e908790584 Inherit the view point from main camera for water RTT cameras 6 years ago
Andrei Kortunov 489e5c6cce Store preloaded terrain view in the main thread 6 years ago
bzzt 63ab7345be Reuse traversal result for different traversal with same view point
Rename eyePoint to viewPoint to match OSG conventions (eyePoint is the camera position, viewPoint is for LOD handling)
6 years ago
bzzt c8d2107b80 Do not store Viewer reference in the ViewData 6 years ago
Bret Curtis 1e9eac568f
Merge pull request #2249 from akortunov/cache
Implement generic caching system
6 years ago
Capostrophic 786f3e5fc3 Remove unused and unfinished blendmap packing feature 6 years ago
Andrei Kortunov 0e1f5f68b6 Do not allow different threads to compile the same composite map 6 years ago
Andrei Kortunov cad45e96ac Remove redundant mCompile set - we do not use data from it anyway 6 years ago
bzzt c2986b3bd7 Do not block the loading thread while compiling composite maps in the
draw thread
6 years ago
Bret Curtis b819690e82
Merge pull request #2264 from akortunov/optimize_terrain
Delete composite map layers in the background thread
6 years ago
bzzt aa5a071aef Delete composite map layers in the background thread 6 years ago
Bret Curtis d56733149c
Merge pull request #2201 from akortunov/optimize_terrain
Optimize terrain
6 years ago
bzzt 6029ed4ecc Reject empty quad tree nodes at the cell level without land data 6 years ago
bzzt 36fa51b6ad Fix bounding box calculation for terrain shapes 6 years ago