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