mirror of
https://github.com/minetest/minetest.git
synced 2025-03-13 13:52:35 +01:00
Fix wireframe mode in opengl3 driver (#15626)
`GL_LINES` isn't suitable, because it makes lines between pairs of 2 vertices, not loops around 3 vertices. Support for OpenGL ES isn't simple, as it has no `glPolygonMode`. And showing broken wireframe (i.e. with `GL_LINES`) would cause confusion.
This commit is contained in:
@ -1032,9 +1032,7 @@ void COpenGL3DriverBase::drawGeneric(const void *vertices, const void *indexList
|
|||||||
GL.DrawElements(GL_TRIANGLE_FAN, primitiveCount + 2, indexSize, indexList);
|
GL.DrawElements(GL_TRIANGLE_FAN, primitiveCount + 2, indexSize, indexList);
|
||||||
break;
|
break;
|
||||||
case scene::EPT_TRIANGLES:
|
case scene::EPT_TRIANGLES:
|
||||||
GL.DrawElements((LastMaterial.Wireframe) ? GL_LINES : (LastMaterial.PointCloud) ? GL_POINTS
|
GL.DrawElements(GL_TRIANGLES, primitiveCount * 3, indexSize, indexList);
|
||||||
: GL_TRIANGLES,
|
|
||||||
primitiveCount * 3, indexSize, indexList);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1313,6 +1311,17 @@ void COpenGL3DriverBase::setBasicRenderStates(const SMaterial &material, const S
|
|||||||
getGLBlend(srcAlphaFact), getGLBlend(dstAlphaFact));
|
getGLBlend(srcAlphaFact), getGLBlend(dstAlphaFact));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fillmode
|
||||||
|
if (Version.Spec != OpenGLSpec::ES && // not supported in gles
|
||||||
|
(resetAllRenderStates ||
|
||||||
|
lastmaterial.Wireframe != material.Wireframe ||
|
||||||
|
lastmaterial.PointCloud != material.PointCloud)) {
|
||||||
|
GL.PolygonMode(GL_FRONT_AND_BACK,
|
||||||
|
material.Wireframe ? GL_LINE :
|
||||||
|
material.PointCloud ? GL_POINT :
|
||||||
|
GL_FILL);
|
||||||
|
}
|
||||||
|
|
||||||
// Polygon Offset
|
// Polygon Offset
|
||||||
if (resetAllRenderStates ||
|
if (resetAllRenderStates ||
|
||||||
lastmaterial.PolygonOffsetDepthBias != material.PolygonOffsetDepthBias ||
|
lastmaterial.PolygonOffsetDepthBias != material.PolygonOffsetDepthBias ||
|
||||||
|
@ -2256,16 +2256,20 @@ void Game::toggleDebug()
|
|||||||
smgr->setGlobalDebugData(state == 4 ? bbox_debug_flag : 0,
|
smgr->setGlobalDebugData(state == 4 ? bbox_debug_flag : 0,
|
||||||
state == 4 ? 0 : bbox_debug_flag);
|
state == 4 ? 0 : bbox_debug_flag);
|
||||||
|
|
||||||
if (state == 1)
|
if (state == 1) {
|
||||||
m_game_ui->showTranslatedStatusText("Debug info shown");
|
m_game_ui->showTranslatedStatusText("Debug info shown");
|
||||||
else if (state == 2)
|
} else if (state == 2) {
|
||||||
m_game_ui->showTranslatedStatusText("Profiler graph shown");
|
m_game_ui->showTranslatedStatusText("Profiler graph shown");
|
||||||
else if (state == 3)
|
} else if (state == 3) {
|
||||||
m_game_ui->showTranslatedStatusText("Wireframe shown");
|
if (driver->getDriverType() == video::EDT_OGLES2)
|
||||||
else if (state == 4)
|
m_game_ui->showTranslatedStatusText("Wireframe not supported by video driver");
|
||||||
|
else
|
||||||
|
m_game_ui->showTranslatedStatusText("Wireframe shown");
|
||||||
|
} else if (state == 4) {
|
||||||
m_game_ui->showTranslatedStatusText("Bounding boxes shown");
|
m_game_ui->showTranslatedStatusText("Bounding boxes shown");
|
||||||
else
|
} else {
|
||||||
m_game_ui->showTranslatedStatusText("All debug info hidden");
|
m_game_ui->showTranslatedStatusText("All debug info hidden");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user