2
0
Эх сурвалжийг харах

Use sigma instead of blur radius for blur filter

Michael Ragazzon 1 жил өмнө
parent
commit
0d16980555

+ 1 - 1
Backends/RmlUi_Renderer_GL3.cpp

@@ -1506,7 +1506,7 @@ Rml::CompiledFilterHandle RenderInterface_GL3::CompileFilter(const Rml::String&
 	else if (name == "blur")
 	{
 		filter.type = FilterType::Blur;
-		filter.sigma = 0.5f * Rml::Get(parameters, "radius", 1.0f);
+		filter.sigma = Rml::Get(parameters, "sigma", 1.0f);
 	}
 	else if (name == "drop-shadow")
 	{

+ 10 - 10
Source/Core/FilterBlur.cpp

@@ -35,34 +35,34 @@
 
 namespace Rml {
 
-bool FilterBlur::Initialise(NumericValue in_radius)
+bool FilterBlur::Initialise(NumericValue in_sigma)
 {
-	radius_value = in_radius;
-	return Any(in_radius.unit & Unit::LENGTH);
+	sigma_value = in_sigma;
+	return Any(in_sigma.unit & Unit::LENGTH);
 }
 
 CompiledFilter FilterBlur::CompileFilter(Element* element) const
 {
-	const float radius = element->ResolveLength(radius_value);
-	return element->GetRenderManager()->CompileFilter("blur", Dictionary{{"radius", Variant(radius)}});
+	const float radius = element->ResolveLength(sigma_value);
+	return element->GetRenderManager()->CompileFilter("blur", Dictionary{{"sigma", Variant(radius)}});
 }
 
 void FilterBlur::ExtendInkOverflow(Element* element, Rectanglef& scissor_region) const
 {
-	const float radius = element->ResolveLength(radius_value);
-	const float blur_extent = 1.5f * Math::Max(radius, 1.f);
+	const float sigma = element->ResolveLength(sigma_value);
+	const float blur_extent = 3.0f * Math::Max(sigma, 1.f);
 	scissor_region.Extend(blur_extent);
 }
 
 FilterBlurInstancer::FilterBlurInstancer()
 {
-	ids.radius = RegisterProperty("radius", "0px").AddParser("length").GetId();
-	RegisterShorthand("filter", "radius", ShorthandType::FallThrough);
+	ids.sigma = RegisterProperty("sigma", "0px").AddParser("length").GetId();
+	RegisterShorthand("filter", "sigma", ShorthandType::FallThrough);
 }
 
 SharedPtr<Filter> FilterBlurInstancer::InstanceFilter(const String& /*name*/, const PropertyDictionary& properties)
 {
-	const Property* p_radius = properties.GetProperty(ids.radius);
+	const Property* p_radius = properties.GetProperty(ids.sigma);
 	if (!p_radius)
 		return nullptr;
 

+ 3 - 3
Source/Core/FilterBlur.h

@@ -37,14 +37,14 @@ namespace Rml {
 
 class FilterBlur : public Filter {
 public:
-	bool Initialise(NumericValue radius);
+	bool Initialise(NumericValue sigma);
 
 	CompiledFilter CompileFilter(Element* element) const override;
 
 	void ExtendInkOverflow(Element* element, Rectanglef& scissor_region) const override;
 
 private:
-	NumericValue radius_value;
+	NumericValue sigma_value;
 };
 
 class FilterBlurInstancer : public FilterInstancer {
@@ -55,7 +55,7 @@ public:
 
 private:
 	struct PropertyIds {
-		PropertyId radius;
+		PropertyId sigma;
 	};
 	PropertyIds ids;
 };

+ 1 - 2
Source/Core/FilterDropShadow.cpp

@@ -67,8 +67,7 @@ void FilterDropShadow::ExtendInkOverflow(Element* element, Rectanglef& scissor_r
 		element->ResolveLength(value_offset_y),
 	};
 
-	const float blur_radius = 2.f * sigma;
-	const float blur_extent = 1.5f * blur_radius;
+	const float blur_extent = 3.f * sigma;
 	scissor_region.ExtendTopLeft(Math::Max(-offset, Vector2f(0.f)) + Vector2f(blur_extent));
 	scissor_region.ExtendBottomRight(Math::Max(offset, Vector2f(0.f)) + Vector2f(blur_extent));
 }

+ 2 - 2
Source/Core/GeometryBoxShadow.cpp

@@ -170,9 +170,9 @@ void GeometryBoxShadow::Generate(Geometry& out_shadow_geometry, CallbackTexture&
 			}
 
 			CompiledFilter blur;
-			if (blur_radius > 0.5f)
+			if (blur_radius >= 0.5f)
 			{
-				blur = render_manager.CompileFilter("blur", Dictionary{{"radius", Variant(blur_radius)}});
+				blur = render_manager.CompileFilter("blur", Dictionary{{"sigma", Variant(2.f * blur_radius)}});
 				if (blur)
 					render_manager.PushLayer();
 			}