lightpreview: add "Draw Translucency as Opaque" checkbox
This commit is contained in:
parent
44dadd87b2
commit
6c6bed2597
|
|
@ -581,9 +581,17 @@ void GLView::paintGL()
|
|||
m_skybox_program->setUniformValue(m_skybox_program_drawnormals_location, m_drawNormals);
|
||||
m_skybox_program->setUniformValue(m_skybox_program_drawflat_location, m_drawFlat);
|
||||
|
||||
// resolves whether to render a particular drawcall as opaque
|
||||
auto draw_as_opaque = [&](const drawcall_t &draw) -> bool {
|
||||
if (m_drawTranslucencyAsOpaque)
|
||||
return true;
|
||||
|
||||
return draw.key.opacity == 1.0f;
|
||||
};
|
||||
|
||||
// opaque draws
|
||||
for (auto &draw : m_drawcalls) {
|
||||
if (draw.key.opacity != 1.0f)
|
||||
if (!draw_as_opaque(draw))
|
||||
continue;
|
||||
|
||||
if (active_program != draw.key.program) {
|
||||
|
|
@ -603,6 +611,12 @@ void GLView::paintGL()
|
|||
face_visibility_texture->bind(2 /* texture unit */);
|
||||
}
|
||||
|
||||
if (active_program == m_program) {
|
||||
m_program->setUniformValue(m_program_opacity_location, 1.0f);
|
||||
} else {
|
||||
m_skybox_program->setUniformValue(m_skybox_program_opacity_location, 1.0f);
|
||||
}
|
||||
|
||||
QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
|
||||
|
||||
glDrawElements(GL_TRIANGLES, draw.index_count, GL_UNSIGNED_INT,
|
||||
|
|
@ -615,7 +629,7 @@ void GLView::paintGL()
|
|||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
for (auto &draw : m_drawcalls) {
|
||||
if (draw.key.opacity == 1.0f)
|
||||
if (draw_as_opaque(draw))
|
||||
continue;
|
||||
|
||||
if (active_program != draw.key.program) {
|
||||
|
|
@ -823,6 +837,12 @@ void GLView::setMagFilter(QOpenGLTexture::Filter filter)
|
|||
update();
|
||||
}
|
||||
|
||||
void GLView::setDrawTranslucencyAsOpaque(bool drawopaque)
|
||||
{
|
||||
m_drawTranslucencyAsOpaque = drawopaque;
|
||||
update();
|
||||
}
|
||||
|
||||
void GLView::takeScreenshot(QString destPath, int w, int h)
|
||||
{
|
||||
// update aspect ratio
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ private:
|
|||
bool m_drawPortals = false;
|
||||
bool m_drawLeak = false;
|
||||
QOpenGLTexture::Filter m_filter = QOpenGLTexture::Linear;
|
||||
bool m_drawTranslucencyAsOpaque = false;
|
||||
|
||||
QOpenGLVertexArrayObject m_vao;
|
||||
QOpenGLBuffer m_vbo;
|
||||
|
|
@ -207,6 +208,7 @@ public:
|
|||
void setLightStyleIntensity(int style_id, int intensity);
|
||||
void setMagFilter(QOpenGLTexture::Filter filter);
|
||||
const bool &getKeepOrigin() const { return m_keepOrigin; }
|
||||
void setDrawTranslucencyAsOpaque(bool drawopaque);
|
||||
|
||||
void takeScreenshot(QString destPath, int w, int h);
|
||||
|
||||
|
|
|
|||
|
|
@ -187,6 +187,8 @@ void MainWindow::createPropertiesSidebar()
|
|||
bspx_normals = new QCheckBox(tr("BSPX: Face Normals"));
|
||||
bspx_normals->setChecked(true);
|
||||
|
||||
auto *draw_opaque = new QCheckBox(tr("Draw Translucency as Opaque"));
|
||||
|
||||
formLayout->addRow(tr("common"), common_options);
|
||||
formLayout->addRow(tr("qbsp"), qbsp_options);
|
||||
formLayout->addRow(vis_checkbox, vis_options);
|
||||
|
|
@ -202,6 +204,7 @@ void MainWindow::createPropertiesSidebar()
|
|||
formLayout->addRow(nearest);
|
||||
formLayout->addRow(bspx_decoupled_lm);
|
||||
formLayout->addRow(bspx_normals);
|
||||
formLayout->addRow(draw_opaque);
|
||||
|
||||
lightstyles = new QVBoxLayout();
|
||||
|
||||
|
|
@ -253,6 +256,8 @@ void MainWindow::createPropertiesSidebar()
|
|||
connect(keepposition, &QAbstractButton::toggled, this, [=](bool checked) { glView->setKeepOrigin(checked); });
|
||||
connect(nearest, &QAbstractButton::toggled, this,
|
||||
[=](bool checked) { glView->setMagFilter(checked ? QOpenGLTexture::Nearest : QOpenGLTexture::Linear); });
|
||||
connect(draw_opaque, &QAbstractButton::toggled, this,
|
||||
[=](bool checked) { glView->setDrawTranslucencyAsOpaque(checked); });
|
||||
connect(glView, &GLView::cameraMoved, this, &MainWindow::displayCameraPositionInfo);
|
||||
|
||||
// set up load timer
|
||||
|
|
|
|||
Loading…
Reference in New Issue