1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add debug mode that shows mesh buffer bounding boxes

This commit is contained in:
sfan5 2025-01-02 11:18:37 +01:00
parent 9554e3d43a
commit 4e2ca05f08
8 changed files with 70 additions and 46 deletions

View file

@ -276,9 +276,6 @@ void CAnimatedMeshSceneNode::render()
debug_mat.ZBuffer = video::ECFN_DISABLED;
driver->setMaterial(debug_mat);
if (DebugDataVisible & scene::EDS_BBOX)
driver->draw3DBox(Box, video::SColor(255, 255, 255, 255));
// show bounding box
if (DebugDataVisible & scene::EDS_BBOX_BUFFERS) {
for (u32 g = 0; g < m->getMeshBufferCount(); ++g) {
@ -290,6 +287,9 @@ void CAnimatedMeshSceneNode::render()
}
}
if (DebugDataVisible & scene::EDS_BBOX)
driver->draw3DBox(Box, video::SColor(255, 255, 255, 255));
// show skeleton
if (DebugDataVisible & scene::EDS_SKELETON) {
if (Mesh->getMeshType() == EAMT_SKINNED) {

View file

@ -110,11 +110,9 @@ void CMeshSceneNode::render()
if (DebugDataVisible && PassCount == 1) {
video::SMaterial m;
m.AntiAliasing = 0;
m.ZBuffer = video::ECFN_DISABLED;
driver->setMaterial(m);
if (DebugDataVisible & scene::EDS_BBOX) {
driver->draw3DBox(Box, video::SColor(255, 255, 255, 255));
}
if (DebugDataVisible & scene::EDS_BBOX_BUFFERS) {
for (u32 g = 0; g < Mesh->getMeshBufferCount(); ++g) {
driver->draw3DBox(
@ -123,6 +121,10 @@ void CMeshSceneNode::render()
}
}
if (DebugDataVisible & scene::EDS_BBOX) {
driver->draw3DBox(Box, video::SColor(255, 255, 255, 255));
}
if (DebugDataVisible & scene::EDS_NORMALS) {
// draw normals
const f32 debugNormalLength = 1.f;

View file

@ -490,13 +490,19 @@ void CSceneManager::drawAll()
// let all nodes register themselves
OnRegisterSceneNode();
const auto &render_node = [this] (ISceneNode *node) {
u32 flags = node->isDebugDataVisible();
node->setDebugDataVisible((flags & DebugDataMask) | DebugDataBits);
node->render();
};
// render camera scenes
{
CurrentRenderPass = ESNRP_CAMERA;
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);
for (auto *node : CameraList)
node->render();
render_node(node);
CameraList.clear();
}
@ -507,7 +513,7 @@ void CSceneManager::drawAll()
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);
for (auto *node : SkyBoxList)
node->render();
render_node(node);
SkyBoxList.clear();
}
@ -520,7 +526,7 @@ void CSceneManager::drawAll()
std::sort(SolidNodeList.begin(), SolidNodeList.end());
for (auto &it : SolidNodeList)
it.Node->render();
render_node(it.Node);
SolidNodeList.clear();
}
@ -533,7 +539,7 @@ void CSceneManager::drawAll()
std::sort(TransparentNodeList.begin(), TransparentNodeList.end());
for (auto &it : TransparentNodeList)
it.Node->render();
render_node(it.Node);
TransparentNodeList.clear();
}
@ -546,7 +552,7 @@ void CSceneManager::drawAll()
std::sort(TransparentEffectNodeList.begin(), TransparentEffectNodeList.end());
for (auto &it : TransparentEffectNodeList)
it.Node->render();
render_node(it.Node);
TransparentEffectNodeList.clear();
}
@ -557,7 +563,7 @@ void CSceneManager::drawAll()
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);
for (auto *node : GuiNodeList)
node->render();
render_node(node);
GuiNodeList.clear();
}

View file

@ -179,6 +179,11 @@ public:
//! Set current render time.
void setCurrentRenderPass(E_SCENE_NODE_RENDER_PASS nextPass) override { CurrentRenderPass = nextPass; }
void setGlobalDebugData(u16 setBits, u16 unsetBits) override {
DebugDataMask = ~unsetBits;
DebugDataBits = setBits;
}
//! returns if node is culled
bool isCulled(const ISceneNode *node) const override;
@ -268,6 +273,9 @@ private:
//! Mesh cache
IMeshCache *MeshCache;
//! Global debug render state
u16 DebugDataMask = 0, DebugDataBits = 0;
E_SCENE_NODE_RENDER_PASS CurrentRenderPass;
};