shadows global switch
This commit is contained in:
@@ -31,6 +31,8 @@
|
|||||||
#include <piqt.h>
|
#include <piqt.h>
|
||||||
#include <qad_types.h>
|
#include <qad_types.h>
|
||||||
|
|
||||||
|
#define SHADERS_DIR ":"
|
||||||
|
|
||||||
|
|
||||||
using namespace QGLEngineShaders;
|
using namespace QGLEngineShaders;
|
||||||
|
|
||||||
@@ -167,7 +169,7 @@ void Renderer::reloadShaders() {
|
|||||||
shader_fxaa = nullptr;
|
shader_fxaa = nullptr;
|
||||||
if (tone_proc.shader_sum) delete tone_proc.shader_sum;
|
if (tone_proc.shader_sum) delete tone_proc.shader_sum;
|
||||||
tone_proc.shader_sum = nullptr;
|
tone_proc.shader_sum = nullptr;
|
||||||
QString dir = ":/shaders/";
|
QString dir = SHADERS_DIR "/shaders/";
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
it.next();
|
it.next();
|
||||||
loadShadersMulti(shaders[it.key()], dir + it.value(), true, shader_defines.value(it.key()), obr_defines);
|
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_decay", qMax(view->fogDecay(), 0.001f));
|
||||||
prog->setUniformValue("fog_density", view->fogDensity());
|
prog->setUniformValue("fog_density", view->fogDensity());
|
||||||
prog->setUniformValue("view_mat", cam->viewMatrix().inverted().toGenericMatrix<3, 3>());
|
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("noise_size", noise_size);
|
||||||
prog->setUniformValue("soft_shadows_enabled", view->soft_shadows);
|
prog->setUniformValue("shadows_enabled", view->shadows());
|
||||||
prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples);
|
if (view->shadows()) {
|
||||||
prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality);
|
prog->setUniformValue("shadow_size", view->shadow_map_size);
|
||||||
prog->setUniformValue("tex_shadows_cone", (int)tarShadowsCone);
|
prog->setUniformValue("soft_shadows_enabled", view->soft_shadows);
|
||||||
prog->setUniformValue("tex_shadows_omni", (int)tarShadowsOmni);
|
prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples);
|
||||||
prog->setUniformValue("tex_depths_cone", (int)tarDepthsCone);
|
prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality);
|
||||||
prog->setUniformValue("tex_depths_omni", (int)tarDepthsOmni);
|
prog->setUniformValue("tex_shadows_cone", (int)tarShadowsCone);
|
||||||
GLenum filter = view->softShadows() ? GL_NEAREST : GL_LINEAR;
|
prog->setUniformValue("tex_shadows_omni", (int)tarShadowsOmni);
|
||||||
shadow_maps_cone.bind(view, tarShadowsCone);
|
prog->setUniformValue("tex_depths_cone", (int)tarDepthsCone);
|
||||||
view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filter);
|
prog->setUniformValue("tex_depths_omni", (int)tarDepthsOmni);
|
||||||
view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filter);
|
GLenum filter = view->softShadows() ? GL_NEAREST : GL_LINEAR;
|
||||||
shadow_maps_omni.bind(view, tarShadowsOmni);
|
shadow_maps_cone.bind(view, tarShadowsCone);
|
||||||
view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, filter);
|
view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filter);
|
||||||
view->glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, filter);
|
view->glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filter);
|
||||||
depth_maps_cone.bind(view, tarDepthsCone);
|
shadow_maps_omni.bind(view, tarShadowsOmni);
|
||||||
depth_maps_omni.bind(view, tarDepthsOmni);
|
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);
|
renderQuad(prog, quad, cam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -522,15 +527,17 @@ void Renderer::renderScene() {
|
|||||||
}
|
}
|
||||||
phase.end();
|
phase.end();
|
||||||
|
|
||||||
/// cone shadows and shadow matrix
|
if (view->shadows()) {
|
||||||
phase.begin("shadows cone");
|
/// cone shadows and shadow matrix
|
||||||
renderConeShadows();
|
phase.begin("shadows cone");
|
||||||
phase.end();
|
renderConeShadows();
|
||||||
|
phase.end();
|
||||||
|
|
||||||
/// omni shadows and shadow matrix
|
/// omni shadows and shadow matrix
|
||||||
phase.begin("shadows omni");
|
phase.begin("shadows omni");
|
||||||
renderOmniShadows();
|
renderOmniShadows();
|
||||||
phase.end();
|
phase.end();
|
||||||
|
}
|
||||||
|
|
||||||
/// lights
|
/// lights
|
||||||
phase.begin("lights prepare");
|
phase.begin("lights prepare");
|
||||||
@@ -666,11 +673,12 @@ void Renderer::renderScene() {
|
|||||||
fbo_out.release();
|
fbo_out.release();
|
||||||
|
|
||||||
/// apply hovers and selection frame
|
/// apply hovers and selection frame
|
||||||
phase.begin("service");
|
|
||||||
if (edit_mode) {
|
if (edit_mode) {
|
||||||
|
phase.begin("service");
|
||||||
rend_selection.drawSelection(fbo_out, cur_write_plane);
|
rend_selection.drawSelection(fbo_out, cur_write_plane);
|
||||||
rend_service.renderService();
|
rend_service.renderService();
|
||||||
} else {
|
} else {
|
||||||
|
phase.begin("blit to screen");
|
||||||
fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize()));
|
fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize()));
|
||||||
}
|
}
|
||||||
phase.end();
|
phase.end();
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ QGLView::QGLView(): OpenGLWindow(), renderer_(this), mouse(this) {
|
|||||||
soft_shadows_quality = 1.;
|
soft_shadows_quality = 1.;
|
||||||
soft_shadows_samples = 32;
|
soft_shadows_samples = 32;
|
||||||
soft_shadows = false;
|
soft_shadows = false;
|
||||||
|
shadows_ = false;
|
||||||
fps_tm = fps_ = 0.;
|
fps_tm = fps_ = 0.;
|
||||||
fogColor_ = Qt::darkGray;
|
fogColor_ = Qt::darkGray;
|
||||||
fogDensity_ = 0.;
|
fogDensity_ = 0.;
|
||||||
|
|||||||
@@ -173,6 +173,8 @@ public:
|
|||||||
void setSoftShadowsQuality(float s) { soft_shadows_quality = s; }
|
void setSoftShadowsQuality(float s) { soft_shadows_quality = s; }
|
||||||
bool softShadows() const { return soft_shadows; }
|
bool softShadows() const { return soft_shadows; }
|
||||||
void setSoftShadows(bool on) { soft_shadows = on; }
|
void setSoftShadows(bool on) { soft_shadows = on; }
|
||||||
|
bool shadows() const { return shadows_; }
|
||||||
|
void setShadows(bool on) { shadows_ = on; }
|
||||||
|
|
||||||
GLfloat aspect, iaspect;
|
GLfloat aspect, iaspect;
|
||||||
Renderer renderer_;
|
Renderer renderer_;
|
||||||
@@ -218,7 +220,7 @@ private:
|
|||||||
bool fogEnabled_, lightEnabled_, FXAA_;
|
bool fogEnabled_, lightEnabled_, FXAA_;
|
||||||
bool shaders_supported, shaders_bind;
|
bool shaders_supported, shaders_bind;
|
||||||
bool hoverHalo_, selectionHalo_;
|
bool hoverHalo_, selectionHalo_;
|
||||||
bool is_init, soft_shadows;
|
bool is_init, shadows_, soft_shadows;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void __destroyed();
|
void __destroyed();
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ void ViewEditor::assignQGLView(QGLView * v) {
|
|||||||
ui->colorFogBack->setColor(view->fogColor());
|
ui->colorFogBack->setColor(view->fogColor());
|
||||||
ui->spinFogDecay->setValue(view->fogDecay());
|
ui->spinFogDecay->setValue(view->fogDecay());
|
||||||
ui->spinFogDensity->setValue(view->fogDensity());
|
ui->spinFogDensity->setValue(view->fogDensity());
|
||||||
|
ui->groupShadows->setChecked(view->shadows());
|
||||||
ui->checkSoftShadows->setChecked(view->softShadows());
|
ui->checkSoftShadows->setChecked(view->softShadows());
|
||||||
ui->spinSoftShadowSamples->setValue(view->softShadowsSamples());
|
ui->spinSoftShadowSamples->setValue(view->softShadowsSamples());
|
||||||
ui->spinSoftShadowQuality->setValue(view->softShadowsQuality());
|
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) {
|
void ViewEditor::on_groupHalos_clicked(bool val) {
|
||||||
if (!view || !active) return;
|
if (!view || !active) return;
|
||||||
view->setHoverHaloEnabled(val && ui->checkHoverHalo->isChecked());
|
view->setHoverHaloEnabled(val && ui->checkHoverHalo->isChecked());
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ private slots:
|
|||||||
void on_spinDepthStart_valueChanged(double val);
|
void on_spinDepthStart_valueChanged(double val);
|
||||||
void on_spinViewGamma_valueChanged(double val);
|
void on_spinViewGamma_valueChanged(double val);
|
||||||
void on_comboViewRenderMode_currentIndexChanged(int val);
|
void on_comboViewRenderMode_currentIndexChanged(int val);
|
||||||
|
void on_groupShadows_clicked(bool val);
|
||||||
void on_groupHalos_clicked(bool val);
|
void on_groupHalos_clicked(bool val);
|
||||||
void on_checkHoverHalo_clicked(bool val);
|
void on_checkHoverHalo_clicked(bool val);
|
||||||
void on_checkSelectionHalo_clicked(bool val);
|
void on_checkSelectionHalo_clicked(bool val);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>453</width>
|
<width>453</width>
|
||||||
<height>807</height>
|
<height>885</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
@@ -205,70 +205,78 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QCheckBox" name="checkSoftShadows">
|
|
||||||
<property name="text">
|
|
||||||
<string>Soft shadows</string>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="formLayout_2">
|
<widget class="QGroupBox" name="groupShadows">
|
||||||
<property name="labelAlignment">
|
<property name="title">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<string>Shadows</string>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="0">
|
<property name="checkable">
|
||||||
<widget class="QLabel" name="label_9">
|
<bool>true</bool>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Soft shadow samples:</string>
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
</property>
|
<property name="labelAlignment">
|
||||||
</widget>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
</item>
|
</property>
|
||||||
<item row="0" column="1">
|
<item row="1" column="0">
|
||||||
<widget class="SpinSlider" name="spinSoftShadowSamples">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="minimum">
|
<property name="text">
|
||||||
<double>1.000000000000000</double>
|
<string>Soft shadow samples:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
</widget>
|
||||||
<double>256.000000000000000</double>
|
</item>
|
||||||
</property>
|
<item row="1" column="1">
|
||||||
<property name="value">
|
<widget class="SpinSlider" name="spinSoftShadowSamples">
|
||||||
<double>32.000000000000000</double>
|
<property name="minimum">
|
||||||
</property>
|
<double>1.000000000000000</double>
|
||||||
<property name="decimals">
|
</property>
|
||||||
<number>0</number>
|
<property name="maximum">
|
||||||
</property>
|
<double>256.000000000000000</double>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
<property name="value">
|
||||||
<item row="1" column="0">
|
<double>32.000000000000000</double>
|
||||||
<widget class="QLabel" name="label_10">
|
</property>
|
||||||
<property name="text">
|
<property name="decimals">
|
||||||
<string>Soft shadow quality:</string>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="0">
|
||||||
<widget class="SpinSlider" name="spinSoftShadowQuality">
|
<widget class="QLabel" name="label_10">
|
||||||
<property name="minimum">
|
<property name="text">
|
||||||
<double>0.100000000000000</double>
|
<string>Soft shadow quality:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
</widget>
|
||||||
<double>10.000000000000000</double>
|
</item>
|
||||||
</property>
|
<item row="2" column="1">
|
||||||
<property name="value">
|
<widget class="SpinSlider" name="spinSoftShadowQuality">
|
||||||
<double>1.000000000000000</double>
|
<property name="minimum">
|
||||||
</property>
|
<double>0.100000000000000</double>
|
||||||
<property name="decimals">
|
</property>
|
||||||
<number>1</number>
|
<property name="maximum">
|
||||||
</property>
|
<double>10.000000000000000</double>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
<property name="value">
|
||||||
</layout>
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="checkSoftShadows">
|
||||||
|
<property name="text">
|
||||||
|
<string>Soft shadows</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupCamera">
|
<widget class="QGroupBox" name="groupCamera">
|
||||||
|
|||||||
Reference in New Issue
Block a user