diff --git a/src/renderer/gl_engine/tvgGlCommon.h b/src/renderer/gl_engine/tvgGlCommon.h index 3de75e48..547d69ce 100644 --- a/src/renderer/gl_engine/tvgGlCommon.h +++ b/src/renderer/gl_engine/tvgGlCommon.h @@ -161,7 +161,9 @@ struct GlCompositor : RenderCompositor GlCompositor(const RenderRegion& box) : bbox(box) {} }; +#define GL_GAUSSIAN_MAX_LEVEL 3 struct GlGaussianBlur { + int level{}; float sigma{}; float scale{}; float extend{}; diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index a821acdc..5f72f1e9 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -953,6 +953,7 @@ void GlRenderer::effectGaussianBlurUpdate(RenderEffectGaussianBlur* effect, cons blur->sigma = effect->sigma; blur->scale = std::sqrt(transform.e11 * transform.e11 + transform.e12 * transform.e12); blur->extend = 2 * blur->sigma * blur->scale; + blur->level = int(GL_GAUSSIAN_MAX_LEVEL * ((effect->quality - 1) * 0.01f)) + 1; effect->rd = blur; effect->valid = (blur->extend > 0); } @@ -971,6 +972,7 @@ void GlRenderer::effectDropShadowUpdate(RenderEffectDropShadow* effect, const Ma }; dropShadow->sigma = sigma; dropShadow->scale = scale; + dropShadow->level = int(GL_GAUSSIAN_MAX_LEVEL * ((effect->quality - 1) * 0.01f)) + 1; dropShadow->color[3] = effect->color[3] / 255.0f; //Drop shadow effect applies blending in the shader (GL_BLEND disabled), so the color should be premultiplied: dropShadow->color[0] = effect->color[0] / 255.0f * dropShadow->color[3]; @@ -1186,8 +1188,8 @@ bool GlRenderer::render(TVG_UNUSED RenderCompositor* cmp, const RenderEffect* ef task->setDrawRange(ioffset, 6); // add task to render pipeline pass->addRenderTask(task); - } else return false; - return true; + } + return false; } diff --git a/src/renderer/gl_engine/tvgGlShaderSrc.cpp b/src/renderer/gl_engine/tvgGlShaderSrc.cpp index 0cdb004d..fe4dc1e9 100644 --- a/src/renderer/gl_engine/tvgGlShaderSrc.cpp +++ b/src/renderer/gl_engine/tvgGlShaderSrc.cpp @@ -740,6 +740,7 @@ void main() const char* GAUSSIAN_VERTICAL = R"( uniform sampler2D uSrcTexture; layout(std140) uniform Gaussian { + int level; float sigma; float scale; float extend; @@ -775,6 +776,7 @@ void main() const char* GAUSSIAN_HORIZONTAL = R"( uniform sampler2D uSrcTexture; layout(std140) uniform Gaussian { + int level; float sigma; float scale; float extend; @@ -811,6 +813,7 @@ const char* EFFECT_DROPSHADOW = R"( uniform sampler2D uSrcTexture; uniform sampler2D uBlrTexture; layout(std140) uniform DropShadow { + int level; float sigma; float scale; float extend;