Compare commits
1 Commits
c179bc95cf
...
shadows_sw
| Author | SHA1 | Date | |
|---|---|---|---|
|
2e6df6c08b
|
@@ -21,14 +21,16 @@ uniform float z_near;
|
||||
uniform sampler2D tex_coeff_brdf, tex_noise;
|
||||
uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4, tex_5, tex_sh;
|
||||
//uniform sampler2DShadow tex_shadow[16];
|
||||
#ifdef SHADOWS
|
||||
uniform vec2 shadow_size;
|
||||
uniform sampler2DArrayShadow tex_shadows_cone;
|
||||
uniform sampler2DArray tex_depths_cone;
|
||||
uniform samplerCubeArrayShadow tex_shadows_omni;
|
||||
uniform samplerCubeArray tex_depths_omni;
|
||||
uniform bool soft_shadows_enabled = false, shadows_enabled = false;
|
||||
uniform bool soft_shadows_enabled = false;
|
||||
uniform float soft_shadows_quality = 1.;
|
||||
uniform int soft_shadows_samples = 16, noise_size = 64;
|
||||
#endif
|
||||
uniform samplerCube tex_env;
|
||||
uniform int lights_start, lights_count;
|
||||
uniform vec4 fog_color = vec4(0.5, 0.5, 0.5, 1.);
|
||||
@@ -55,6 +57,7 @@ vec4 mapScreenToShadow(in int light_index, in vec3 offset) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef SHADOWS
|
||||
#ifdef SPOT
|
||||
|
||||
float getShadowCone(in vec3 uvz, in int layer) {
|
||||
@@ -142,6 +145,7 @@ float rand(vec2 co) {
|
||||
float e = sin(mod(d, 3.14)) * c;
|
||||
return fract(e) - 0.5;
|
||||
}
|
||||
#endif // SHADOWS
|
||||
|
||||
vec4 qgl_lightTexture(int index, vec2 coord, vec4 tex_shift) {
|
||||
coord *= qgl_light_parameter[index].map.scale;
|
||||
@@ -174,7 +178,8 @@ void calcLight(in int index, in vec3 n, in vec3 v) {
|
||||
spot *= light_map_pix.a;
|
||||
#endif
|
||||
|
||||
if (shadows_enabled && (int(round(qgl_light_parameter[index].flags)) == 1) && (bitfieldExtract(flags, 3, 1) == 1) && (spot > 1E-4)) {
|
||||
#ifdef SHADOWS
|
||||
if (int(round(qgl_light_parameter[index].flags)) == 1 && bitfieldExtract(flags, 3, 1) == 1 && (spot > 1E-4)) {
|
||||
#ifndef SPOT
|
||||
vec3 odir = -(view_mat * ldir);
|
||||
#endif
|
||||
@@ -261,6 +266,7 @@ void calcLight(in int index, in vec3 n, in vec3 v) {
|
||||
//shadow += getShadowCone(shp.xyz, layer, vec2(0));
|
||||
|
||||
}
|
||||
#endif // SHADOWS
|
||||
|
||||
vec3 dist_decay = vec3(1., ldist, ldist*ldist);
|
||||
spot /= dot(qgl_light_parameter[index].decay_intensity.xyz, dist_decay);
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
#include <piqt.h>
|
||||
#include <qad_types.h>
|
||||
|
||||
#define SHADERS_DIR ":"
|
||||
|
||||
|
||||
using namespace QGLEngineShaders;
|
||||
|
||||
@@ -101,6 +99,8 @@ Renderer::Renderer(QGLView * view_)
|
||||
shader_defines[srGeometrySolidPass] << "SOLID";
|
||||
shader_defines[srLightSpotPass] << "SPOT";
|
||||
shader_defines[srShadowOmniPass] << "OMNI";
|
||||
shader_defines[srLightSpotPass] << "SHADOWS";
|
||||
shader_defines[srLightOmniPass] << "SHADOWS";
|
||||
|
||||
PICodeInfo::EnumInfo * obre = PICodeInfo::enumsInfo->value("Renderer::DeferredBufferRole");
|
||||
if (obre) {
|
||||
@@ -169,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_DIR "/shaders/";
|
||||
QString dir = ":/shaders/";
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
loadShadersMulti(shaders[it.key()], dir + it.value(), true, shader_defines.value(it.key()), obr_defines);
|
||||
@@ -354,10 +354,9 @@ 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("noise_size", noise_size);
|
||||
prog->setUniformValue("shadows_enabled", view->shadows());
|
||||
if (view->shadows()) {
|
||||
if (shadows_enabled) {
|
||||
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);
|
||||
@@ -527,7 +526,7 @@ void Renderer::renderScene() {
|
||||
}
|
||||
phase.end();
|
||||
|
||||
if (view->shadows()) {
|
||||
if (shadows_enabled) {
|
||||
/// cone shadows and shadow matrix
|
||||
phase.begin("shadows cone");
|
||||
renderConeShadows();
|
||||
@@ -673,12 +672,11 @@ 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();
|
||||
@@ -737,3 +735,14 @@ void Renderer::addFramebufferEffect(FramebufferEffectBase * e) {
|
||||
e->r = this;
|
||||
fb_effects << e;
|
||||
}
|
||||
|
||||
void Renderer::setSadowsEnabled(bool on) {
|
||||
shader_defines[srLightSpotPass].removeAll("SHADOWS");
|
||||
shader_defines[srLightOmniPass].removeAll("SHADOWS");
|
||||
if (on) {
|
||||
shader_defines[srLightSpotPass] << "SHADOWS";
|
||||
shader_defines[srLightOmniPass] << "SHADOWS";
|
||||
}
|
||||
shadows_enabled = on;
|
||||
reloadShaders();
|
||||
}
|
||||
|
||||
@@ -110,6 +110,9 @@ public:
|
||||
QImage materialThumbnail(Material * m) { return rend_mat.materialThumbnail(m); }
|
||||
void recreateMaterialThumbnails(bool force_all = false) { rend_mat.recreateMaterialThumbnails(force_all); }
|
||||
|
||||
void setSadowsEnabled(bool on);
|
||||
bool isShadowsEnabled() const { return shadows_enabled; }
|
||||
|
||||
protected:
|
||||
void fillObjectsBuffer(const ObjectBaseList & ol, RenderPass pass);
|
||||
void renderObjects(Scene & scene, RenderPass pass);
|
||||
@@ -157,7 +160,8 @@ private:
|
||||
QVector<FramebufferEffectBase *> fb_effects;
|
||||
QImage last_img;
|
||||
QString obr_defines, timings;
|
||||
bool is_grabbing = false;
|
||||
bool shadows_enabled = true;
|
||||
bool is_grabbing = false;
|
||||
};
|
||||
|
||||
#endif // RENDERER_H
|
||||
|
||||
@@ -46,7 +46,6 @@ 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.;
|
||||
|
||||
@@ -173,8 +173,6 @@ 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_;
|
||||
@@ -220,7 +218,7 @@ private:
|
||||
bool fogEnabled_, lightEnabled_, FXAA_;
|
||||
bool shaders_supported, shaders_bind;
|
||||
bool hoverHalo_, selectionHalo_;
|
||||
bool is_init, shadows_, soft_shadows;
|
||||
bool is_init, soft_shadows;
|
||||
|
||||
private slots:
|
||||
void __destroyed();
|
||||
|
||||
@@ -64,7 +64,6 @@ 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());
|
||||
@@ -116,12 +115,6 @@ 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());
|
||||
|
||||
@@ -47,7 +47,6 @@ 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);
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>453</width>
|
||||
<height>885</height>
|
||||
<height>807</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
@@ -205,78 +205,70 @@
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupShadows">
|
||||
<property name="title">
|
||||
<string>Shadows</string>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Soft shadow samples:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="SpinSlider" name="spinSoftShadowSamples">
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>256.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>32.000000000000000</double>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Soft shadow quality:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="SpinSlider" name="spinSoftShadowQuality">
|
||||
<property name="minimum">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>10.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<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 row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Soft shadow samples:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="SpinSlider" name="spinSoftShadowSamples">
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>256.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>32.000000000000000</double>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Soft shadow quality:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="SpinSlider" name="spinSoftShadowQuality">
|
||||
<property name="minimum">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>10.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupCamera">
|
||||
|
||||
Reference in New Issue
Block a user