From dd520c4caefdcdef5a50ce8805ffad8d591f8ebc Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 9 Dec 2020 19:43:22 +0300 Subject: [PATCH] Deferred renderer: fix shadows behind transparent objects --- libs/gfx/source/renderer/deferred.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/gfx/source/renderer/deferred.cpp b/libs/gfx/source/renderer/deferred.cpp index 23ed82de..2744e85d 100644 --- a/libs/gfx/source/renderer/deferred.cpp +++ b/libs/gfx/source/renderer/deferred.cpp @@ -777,6 +777,9 @@ void main() if (o.mat.lit && o.mat.transparent) throw std::runtime_error("Materials that are both tit & transparent are not supported"); + if (o.casts_shadow && o.mat.transparent) + throw std::runtime_error("Transparent objects cannot cast shadow"); + objects_by_mask[mask(objects[i])].push_back(i); if (o.mat.lit) lit_bbox |= o.bbox; @@ -900,7 +903,7 @@ void main() impl().transparent_pass_program["u_max_intensity"] = opts.max_intensity; gl::Enable(gl::BLEND); - gl::BlendFuncSeparate(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA, gl::ONE, gl::ZERO); + gl::BlendFuncSeparate(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA, gl::ZERO, gl::ONE); gl::DepthMask(gl::FALSE);