From 07020ceeae31caa59cfd61ee4da4603872e1e660 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Sun, 23 Jul 2023 21:35:02 -0600 Subject: [PATCH] lightpreview: add "Show Tris (See Through)" option --- lightpreview/glview.cpp | 56 ++++++++++++++++++++++--------------- lightpreview/glview.h | 2 ++ lightpreview/mainwindow.cpp | 4 +++ 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/lightpreview/glview.cpp b/lightpreview/glview.cpp index e36dc75c..76088198 100644 --- a/lightpreview/glview.cpp +++ b/lightpreview/glview.cpp @@ -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(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(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; diff --git a/lightpreview/glview.h b/lightpreview/glview.h index f61ca99a..e7088a76 100644 --- a/lightpreview/glview.h +++ b/lightpreview/glview.h @@ -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); diff --git a/lightpreview/mainwindow.cpp b/lightpreview/mainwindow.cpp index 040eb803..d5422e3f 100644 --- a/lightpreview/mainwindow.cpp +++ b/lightpreview/mainwindow.cpp @@ -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); });