lightpreview: add "Show Tris (See Through)" option

This commit is contained in:
Eric Wasylishen 2023-07-23 21:35:02 -06:00
parent 4994ab4f1d
commit 07020ceeae
3 changed files with 39 additions and 23 deletions

View File

@ -427,29 +427,6 @@ void GLView::paintGL()
QMatrix4x4 MVP = projectionMatrix * viewMatrix * modelMatrix;
// wireframe
if (m_showTris) {
m_program_wireframe->bind();
m_program_wireframe->setUniformValue(m_program_wireframe_mvp_location, MVP);
glEnable(GL_POLYGON_OFFSET_FILL);
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-0.8, 1.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
for (auto &draw : m_drawcalls) {
glDrawElements(GL_TRIANGLES, draw.index_count, GL_UNSIGNED_INT,
reinterpret_cast<void *>(draw.first_index * sizeof(uint32_t)));
}
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glDisable(GL_POLYGON_OFFSET_FILL);
glDisable(GL_POLYGON_OFFSET_LINE);
m_program_wireframe->release();
}
QOpenGLShaderProgram *active_program = nullptr;
m_program->bind();
@ -539,6 +516,33 @@ void GLView::paintGL()
m_program->release();
// wireframe
if (m_showTris || m_showTrisSeeThrough) {
m_program_wireframe->bind();
m_program_wireframe->setUniformValue(m_program_wireframe_mvp_location, MVP);
if (m_showTrisSeeThrough)
glDisable(GL_DEPTH_TEST);
glEnable(GL_POLYGON_OFFSET_FILL);
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-0.8, 1.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
for (auto &draw : m_drawcalls) {
glDrawElements(GL_TRIANGLES, draw.index_count, GL_UNSIGNED_INT,
reinterpret_cast<void *>(draw.first_index * sizeof(uint32_t)));
}
if (m_showTrisSeeThrough)
glEnable(GL_DEPTH_TEST);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glDisable(GL_POLYGON_OFFSET_FILL);
glDisable(GL_POLYGON_OFFSET_LINE);
m_program_wireframe->release();
}
if (m_drawLeak && num_leak_points) {
m_program_simple->bind();
m_program_simple->setUniformValue(m_program_simple_mvp_location, MVP);
@ -619,6 +623,12 @@ void GLView::setShowTris(bool showtris)
update();
}
void GLView::setShowTrisSeeThrough(bool showtris)
{
m_showTrisSeeThrough = showtris;
update();
}
void GLView::setDrawFlat(bool drawflat)
{
m_drawFlat = drawflat;

View File

@ -80,6 +80,7 @@ private:
bool m_fullbright = false;
bool m_drawNormals = false;
bool m_showTris = false;
bool m_showTrisSeeThrough = false;
bool m_drawFlat = false;
bool m_keepOrigin = false;
bool m_drawPortals = false;
@ -170,6 +171,7 @@ public:
void setFullbright(bool fullbright);
void setDrawNormals(bool drawnormals);
void setShowTris(bool showtris);
void setShowTrisSeeThrough(bool showtris);
void setDrawFlat(bool drawflat);
void setKeepOrigin(bool keeporigin);
void setDrawPortals(bool drawportals);

View File

@ -172,6 +172,7 @@ void MainWindow::createPropertiesSidebar()
auto *drawleak = new QCheckBox(tr("Draw Leak (PTS/LIN)"));
auto *showtris = new QCheckBox(tr("Show Tris"));
auto *showtris_seethrough = new QCheckBox(tr("Show Tris (See Through)"));
auto *keepposition = new QCheckBox(tr("Keep Camera Pos"));
@ -191,6 +192,7 @@ void MainWindow::createPropertiesSidebar()
formLayout->addRow(drawportals);
formLayout->addRow(drawleak);
formLayout->addRow(showtris);
formLayout->addRow(showtris_seethrough);
formLayout->addRow(keepposition);
formLayout->addRow(nearest);
formLayout->addRow(bspx_decoupled_lm);
@ -236,6 +238,8 @@ void MainWindow::createPropertiesSidebar()
connect(fullbright, &QAbstractButton::toggled, this, [=](bool checked) { glView->setFullbright(checked); });
connect(normals, &QAbstractButton::toggled, this, [=](bool checked) { glView->setDrawNormals(checked); });
connect(showtris, &QAbstractButton::toggled, this, [=](bool checked) { glView->setShowTris(checked); });
connect(showtris_seethrough, &QAbstractButton::toggled, this,
[=](bool checked) { glView->setShowTrisSeeThrough(checked); });
connect(drawflat, &QAbstractButton::toggled, this, [=](bool checked) { glView->setDrawFlat(checked); });
connect(drawportals, &QAbstractButton::toggled, this, [=](bool checked) { glView->setDrawPortals(checked); });
connect(drawleak, &QAbstractButton::toggled, this, [=](bool checked) { glView->setDrawLeak(checked); });