shadows flag in Renderer
This commit is contained in:
@@ -99,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) {
|
||||
@@ -352,24 +354,26 @@ 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);
|
||||
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);
|
||||
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 +526,17 @@ void Renderer::renderScene() {
|
||||
}
|
||||
phase.end();
|
||||
|
||||
/// cone shadows and shadow matrix
|
||||
phase.begin("shadows cone");
|
||||
renderConeShadows();
|
||||
phase.end();
|
||||
if (shadows_enabled) {
|
||||
/// 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");
|
||||
@@ -729,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
|
||||
|
||||
Reference in New Issue
Block a user