浏览代码

libobs: Fix dark lines using Lanczos

When texel samples are not exactly on texel centers, weight calculations
will involve a divide by a number very close to zero, resulting in
precision issues. Restore normalization of weights to compensate.
jpark37 6 年之前
父节点
当前提交
93f1ab789d
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      libobs/data/lanczos_scale.effect

+ 10 - 0
libobs/data/lanczos_scale.effect

@@ -111,6 +111,16 @@ float4 DrawLanczos(FragData f_in, bool undistort)
 	float3 coltap024 = weight3(f_rev_half.y);
 	float3 coltap135 = weight3(f_rev_half.y + 0.5);
 
+	// Need normalization if divided value near zero
+	float rowsum = rowtap024.x + rowtap024.y + rowtap024.z;
+	rowsum += rowtap135.x + rowtap135.y + rowtap135.z;
+	rowtap024 = rowtap024 / rowsum;
+	rowtap135 = rowtap135 / rowsum;
+	float colsum = coltap024.x + coltap024.y + coltap024.z;
+	colsum += coltap135.x + coltap135.y + coltap135.z;
+	coltap024 = coltap024 / colsum;
+	coltap135 = coltap135 / colsum;
+
 	float2 uv0 = (-2.5 - f) * stepxy + pos;
 	float2 uv1 = uv0 + stepxy;
 	float2 uv2 = uv1 + stepxy;