mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-19 03:39:58 +00:00
Use state sets without transparency support for recast mesh and agents paths
This commit is contained in:
parent
98d530d8cb
commit
4b8897e33e
@ -8,6 +8,7 @@
|
|||||||
#include <components/sceneutil/agentpath.hpp>
|
#include <components/sceneutil/agentpath.hpp>
|
||||||
#include <components/sceneutil/detourdebugdraw.hpp>
|
#include <components/sceneutil/detourdebugdraw.hpp>
|
||||||
|
|
||||||
|
#include <osg/LineWidth>
|
||||||
#include <osg/Material>
|
#include <osg/Material>
|
||||||
#include <osg/PositionAttitudeTransform>
|
#include <osg/PositionAttitudeTransform>
|
||||||
#include <osg/StateSet>
|
#include <osg/StateSet>
|
||||||
@ -30,13 +31,21 @@ namespace MWRender
|
|||||||
stateSet->setAttribute(material);
|
stateSet->setAttribute(material);
|
||||||
return stateSet;
|
return stateSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::StateSet> makeDebugDrawStateSet()
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet;
|
||||||
|
stateSet->setAttributeAndModes(new osg::LineWidth());
|
||||||
|
|
||||||
|
return stateSet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ActorsPaths::ActorsPaths(const osg::ref_ptr<osg::Group>& root, bool enabled)
|
ActorsPaths::ActorsPaths(const osg::ref_ptr<osg::Group>& root, bool enabled)
|
||||||
: mRootNode(root)
|
: mRootNode(root)
|
||||||
, mEnabled(enabled)
|
, mEnabled(enabled)
|
||||||
, mGroupStateSet(makeGroupStateSet())
|
, mGroupStateSet(makeGroupStateSet())
|
||||||
, mDebugDrawStateSet(SceneUtil::DebugDraw::makeStateSet())
|
, mDebugDrawStateSet(makeDebugDrawStateSet())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,10 +7,13 @@
|
|||||||
#include <components/detournavigator/settings.hpp>
|
#include <components/detournavigator/settings.hpp>
|
||||||
#include <components/resource/resourcesystem.hpp>
|
#include <components/resource/resourcesystem.hpp>
|
||||||
#include <components/resource/scenemanager.hpp>
|
#include <components/resource/scenemanager.hpp>
|
||||||
|
#include <components/sceneutil/depth.hpp>
|
||||||
#include <components/sceneutil/detourdebugdraw.hpp>
|
#include <components/sceneutil/detourdebugdraw.hpp>
|
||||||
#include <components/sceneutil/navmesh.hpp>
|
#include <components/sceneutil/navmesh.hpp>
|
||||||
#include <components/sceneutil/workqueue.hpp>
|
#include <components/sceneutil/workqueue.hpp>
|
||||||
|
|
||||||
|
#include <osg/BlendFunc>
|
||||||
|
#include <osg/LineWidth>
|
||||||
#include <osg/PositionAttitudeTransform>
|
#include <osg/PositionAttitudeTransform>
|
||||||
#include <osg/StateSet>
|
#include <osg/StateSet>
|
||||||
|
|
||||||
@ -23,6 +26,29 @@
|
|||||||
|
|
||||||
namespace MWRender
|
namespace MWRender
|
||||||
{
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::StateSet> makeDebugDrawStateSet()
|
||||||
|
{
|
||||||
|
const osg::ref_ptr<osg::LineWidth> lineWidth = new osg::LineWidth();
|
||||||
|
|
||||||
|
const osg::ref_ptr<osg::BlendFunc> blendFunc = new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
const osg::ref_ptr<SceneUtil::AutoDepth> depth = new SceneUtil::AutoDepth;
|
||||||
|
depth->setWriteMask(false);
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet;
|
||||||
|
stateSet->setMode(GL_BLEND, osg::StateAttribute::ON);
|
||||||
|
stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||||
|
stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||||
|
stateSet->setAttributeAndModes(lineWidth);
|
||||||
|
stateSet->setAttributeAndModes(blendFunc);
|
||||||
|
stateSet->setAttributeAndModes(depth);
|
||||||
|
|
||||||
|
return stateSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct NavMesh::LessByTilePosition
|
struct NavMesh::LessByTilePosition
|
||||||
{
|
{
|
||||||
bool operator()(const DetourNavigator::TilePosition& lhs,
|
bool operator()(const DetourNavigator::TilePosition& lhs,
|
||||||
@ -169,7 +195,7 @@ namespace MWRender
|
|||||||
: mRootNode(root)
|
: mRootNode(root)
|
||||||
, mWorkQueue(workQueue)
|
, mWorkQueue(workQueue)
|
||||||
, mGroupStateSet(SceneUtil::makeDetourGroupStateSet())
|
, mGroupStateSet(SceneUtil::makeDetourGroupStateSet())
|
||||||
, mDebugDrawStateSet(SceneUtil::DebugDraw::makeStateSet())
|
, mDebugDrawStateSet(makeDebugDrawStateSet())
|
||||||
, mEnabled(enabled)
|
, mEnabled(enabled)
|
||||||
, mMode(mode)
|
, mMode(mode)
|
||||||
, mId(std::numeric_limits<std::size_t>::max())
|
, mId(std::numeric_limits<std::size_t>::max())
|
||||||
|
@ -17,11 +17,22 @@
|
|||||||
|
|
||||||
namespace MWRender
|
namespace MWRender
|
||||||
{
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::StateSet> makeDebugDrawStateSet()
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet;
|
||||||
|
stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||||
|
|
||||||
|
return stateSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RecastMesh::RecastMesh(const osg::ref_ptr<osg::Group>& root, bool enabled)
|
RecastMesh::RecastMesh(const osg::ref_ptr<osg::Group>& root, bool enabled)
|
||||||
: mRootNode(root)
|
: mRootNode(root)
|
||||||
, mEnabled(enabled)
|
, mEnabled(enabled)
|
||||||
, mGroupStateSet(SceneUtil::makeDetourGroupStateSet())
|
, mGroupStateSet(SceneUtil::makeDetourGroupStateSet())
|
||||||
, mDebugDrawStateSet(SceneUtil::DebugDraw::makeStateSet())
|
, mDebugDrawStateSet(makeDebugDrawStateSet())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,18 +108,6 @@ namespace SceneUtil
|
|||||||
mColors->push_back(value);
|
mColors->push_back(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::ref_ptr<osg::StateSet> DebugDraw::makeStateSet()
|
|
||||||
{
|
|
||||||
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet;
|
|
||||||
stateSet->setMode(GL_BLEND, osg::StateAttribute::ON);
|
|
||||||
stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
|
||||||
stateSet->setMode(GL_DEPTH, osg::StateAttribute::OFF);
|
|
||||||
stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
|
||||||
stateSet->setAttributeAndModes(new osg::LineWidth());
|
|
||||||
stateSet->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
|
||||||
return stateSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
osg::ref_ptr<osg::StateSet> makeDetourGroupStateSet()
|
osg::ref_ptr<osg::StateSet> makeDetourGroupStateSet()
|
||||||
{
|
{
|
||||||
osg::ref_ptr<osg::Material> material = new osg::Material;
|
osg::ref_ptr<osg::Material> material = new osg::Material;
|
||||||
|
@ -18,8 +18,6 @@ namespace SceneUtil
|
|||||||
explicit DebugDraw(osg::Group& group, const osg::ref_ptr<osg::StateSet>& stateSet, const osg::Vec3f& shift,
|
explicit DebugDraw(osg::Group& group, const osg::ref_ptr<osg::StateSet>& stateSet, const osg::Vec3f& shift,
|
||||||
float recastInvertedScaleFactor);
|
float recastInvertedScaleFactor);
|
||||||
|
|
||||||
static osg::ref_ptr<osg::StateSet> makeStateSet();
|
|
||||||
|
|
||||||
void depthMask(bool state) override;
|
void depthMask(bool state) override;
|
||||||
|
|
||||||
void texture(bool state) override;
|
void texture(bool state) override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user