From bddb288586200be9d1467fd0daab0eb7342381f2 Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 16 Mar 2023 12:11:55 +0300 Subject: [PATCH] shadows global switch --- src/core/render/renderer.cpp | 62 +++++++++-------- src/core/view/qglview.cpp | 1 + src/core/view/qglview.h | 4 +- src/widgets/view_editor.cpp | 7 ++ src/widgets/view_editor.h | 1 + src/widgets/view_editor.ui | 130 +++++++++++++++++++---------------- 6 files changed, 116 insertions(+), 89 deletions(-) diff --git a/src/core/render/renderer.cpp b/src/core/render/renderer.cpp index decc031..c2b51ba 100644 --- a/src/core/render/renderer.cpp +++ b/src/core/render/renderer.cpp @@ -31,6 +31,8 @@ #include #include +#define SHADERS_DIR ":" + using namespace QGLEngineShaders; @@ -167,7 +169,7 @@ void Renderer::reloadShaders() { shader_fxaa = nullptr; if (tone_proc.shader_sum) delete tone_proc.shader_sum; tone_proc.shader_sum = nullptr; - QString dir = ":/shaders/"; + QString dir = SHADERS_DIR "/shaders/"; while (it.hasNext()) { it.next(); loadShadersMulti(shaders[it.key()], dir + it.value(), true, shader_defines.value(it.key()), obr_defines); @@ -352,24 +354,27 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) { prog->setUniformValue("fog_decay", qMax(view->fogDecay(), 0.001f)); prog->setUniformValue("fog_density", view->fogDensity()); prog->setUniformValue("view_mat", cam->viewMatrix().inverted().toGenericMatrix<3, 3>()); - prog->setUniformValue("shadow_size", view->shadow_map_size); prog->setUniformValue("noise_size", noise_size); - prog->setUniformValue("soft_shadows_enabled", view->soft_shadows); - prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples); - prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality); - prog->setUniformValue("tex_shadows_cone", (int)tarShadowsCone); - prog->setUniformValue("tex_shadows_omni", (int)tarShadowsOmni); - prog->setUniformValue("tex_depths_cone", (int)tarDepthsCone); - prog->setUniformValue("tex_depths_omni", (int)tarDepthsOmni); - GLenum filter = view->softShadows() ? GL_NEAREST : GL_LINEAR; - shadow_maps_cone.bind(view, tarShadowsCone); - view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filter); - view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filter); - shadow_maps_omni.bind(view, tarShadowsOmni); - view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, filter); - view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, filter); - depth_maps_cone.bind(view, tarDepthsCone); - depth_maps_omni.bind(view, tarDepthsOmni); + prog->setUniformValue("shadows_enabled", view->shadows()); + if (view->shadows()) { + prog->setUniformValue("shadow_size", view->shadow_map_size); + prog->setUniformValue("soft_shadows_enabled", view->soft_shadows); + prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples); + prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality); + prog->setUniformValue("tex_shadows_cone", (int)tarShadowsCone); + prog->setUniformValue("tex_shadows_omni", (int)tarShadowsOmni); + prog->setUniformValue("tex_depths_cone", (int)tarDepthsCone); + prog->setUniformValue("tex_depths_omni", (int)tarDepthsOmni); + GLenum filter = view->softShadows() ? GL_NEAREST : GL_LINEAR; + shadow_maps_cone.bind(view, tarShadowsCone); + view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filter); + view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filter); + shadow_maps_omni.bind(view, tarShadowsOmni); + view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, filter); + view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, filter); + depth_maps_cone.bind(view, tarDepthsCone); + depth_maps_omni.bind(view, tarDepthsOmni); + } renderQuad(prog, quad, cam); } } @@ -522,15 +527,17 @@ void Renderer::renderScene() { } phase.end(); - /// cone shadows and shadow matrix - phase.begin("shadows cone"); - renderConeShadows(); - phase.end(); + if (view->shadows()) { + /// cone shadows and shadow matrix + phase.begin("shadows cone"); + renderConeShadows(); + phase.end(); - /// omni shadows and shadow matrix - phase.begin("shadows omni"); - renderOmniShadows(); - phase.end(); + /// omni shadows and shadow matrix + phase.begin("shadows omni"); + renderOmniShadows(); + phase.end(); + } /// lights phase.begin("lights prepare"); @@ -666,11 +673,12 @@ void Renderer::renderScene() { fbo_out.release(); /// apply hovers and selection frame - phase.begin("service"); if (edit_mode) { + phase.begin("service"); rend_selection.drawSelection(fbo_out, cur_write_plane); rend_service.renderService(); } else { + phase.begin("blit to screen"); fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize())); } phase.end(); diff --git a/src/core/view/qglview.cpp b/src/core/view/qglview.cpp index d3aea2c..928fba2 100644 --- a/src/core/view/qglview.cpp +++ b/src/core/view/qglview.cpp @@ -46,6 +46,7 @@ QGLView::QGLView(): OpenGLWindow(), renderer_(this), mouse(this) { soft_shadows_quality = 1.; soft_shadows_samples = 32; soft_shadows = false; + shadows_ = false; fps_tm = fps_ = 0.; fogColor_ = Qt::darkGray; fogDensity_ = 0.; diff --git a/src/core/view/qglview.h b/src/core/view/qglview.h index e15590e..e9763d3 100644 --- a/src/core/view/qglview.h +++ b/src/core/view/qglview.h @@ -173,6 +173,8 @@ public: void setSoftShadowsQuality(float s) { soft_shadows_quality = s; } bool softShadows() const { return soft_shadows; } void setSoftShadows(bool on) { soft_shadows = on; } + bool shadows() const { return shadows_; } + void setShadows(bool on) { shadows_ = on; } GLfloat aspect, iaspect; Renderer renderer_; @@ -218,7 +220,7 @@ private: bool fogEnabled_, lightEnabled_, FXAA_; bool shaders_supported, shaders_bind; bool hoverHalo_, selectionHalo_; - bool is_init, soft_shadows; + bool is_init, shadows_, soft_shadows; private slots: void __destroyed(); diff --git a/src/widgets/view_editor.cpp b/src/widgets/view_editor.cpp index 7faacf0..51e202d 100644 --- a/src/widgets/view_editor.cpp +++ b/src/widgets/view_editor.cpp @@ -64,6 +64,7 @@ void ViewEditor::assignQGLView(QGLView * v) { ui->colorFogBack->setColor(view->fogColor()); ui->spinFogDecay->setValue(view->fogDecay()); ui->spinFogDensity->setValue(view->fogDensity()); + ui->groupShadows->setChecked(view->shadows()); ui->checkSoftShadows->setChecked(view->softShadows()); ui->spinSoftShadowSamples->setValue(view->softShadowsSamples()); ui->spinSoftShadowQuality->setValue(view->softShadowsQuality()); @@ -115,6 +116,12 @@ void ViewEditor::on_comboViewRenderMode_currentIndexChanged(int val) { } +void ViewEditor::on_groupShadows_clicked(bool val) { + if (!view || !active) return; + view->setShadows(val); +} + + void ViewEditor::on_groupHalos_clicked(bool val) { if (!view || !active) return; view->setHoverHaloEnabled(val && ui->checkHoverHalo->isChecked()); diff --git a/src/widgets/view_editor.h b/src/widgets/view_editor.h index fd29022..627a8eb 100644 --- a/src/widgets/view_editor.h +++ b/src/widgets/view_editor.h @@ -47,6 +47,7 @@ private slots: void on_spinDepthStart_valueChanged(double val); void on_spinViewGamma_valueChanged(double val); void on_comboViewRenderMode_currentIndexChanged(int val); + void on_groupShadows_clicked(bool val); void on_groupHalos_clicked(bool val); void on_checkHoverHalo_clicked(bool val); void on_checkSelectionHalo_clicked(bool val); diff --git a/src/widgets/view_editor.ui b/src/widgets/view_editor.ui index 6e7867d..26fd5d5 100644 --- a/src/widgets/view_editor.ui +++ b/src/widgets/view_editor.ui @@ -37,7 +37,7 @@ 0 0 453 - 807 + 885 @@ -205,70 +205,78 @@ - - - - Soft shadows - - - true - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Shadows - - - - Soft shadow samples: - - - - - - - 1.000000000000000 - - - 256.000000000000000 - - - 32.000000000000000 - - - 0 - - - - - - - Soft shadow quality: - - - - - - - 0.100000000000000 - - - 10.000000000000000 - - - 1.000000000000000 - - - 1 - - - - + + true + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Soft shadow samples: + + + + + + + 1.000000000000000 + + + 256.000000000000000 + + + 32.000000000000000 + + + 0 + + + + + + + Soft shadow quality: + + + + + + + 0.100000000000000 + + + 10.000000000000000 + + + 1.000000000000000 + + + 1 + + + + + + + Soft shadows + + + true + + + + +