]> git.sesse.net Git - nageru/blobdiff - equations.vert
Split the equation texture in two, which speeds up SOR by ~30%.
[nageru] / equations.vert
index 6ace5775e0017f69261dd20f35a9ca68602c651d..eec3c170aa6c7cb2361d1d2a6daa744ff0ad85fd 100644 (file)
@@ -1,7 +1,9 @@
 #version 450 core
 
 layout(location=0) in vec2 position;
-out vec2 tc, tc_left, tc_down;
+out vec2 tc0, tc_left0, tc_down0;
+out vec2 tc1, tc_left1, tc_down1;
+out float line_offset;
 
 uniform sampler2D diffusivity_tex;
 
@@ -14,7 +16,21 @@ void main()
        //   0.000  0.000 -2.000 -1.000
        //   0.000  0.000  0.000  1.000
        gl_Position = vec4(2.0 * position.x - 1.0, 2.0 * position.y - 1.0, -1.0, 1.0);
-       tc = position;
-       tc_left = vec2(tc.x - 0.5f / textureSize(diffusivity_tex, 0).x, tc.y);
-       tc_down = vec2(tc.x, tc.y - 0.5f / textureSize(diffusivity_tex, 0).y);
+
+       const vec2 half_texel = 0.5f / textureSize(diffusivity_tex, 0);
+
+       vec2 tc = position;
+       vec2 tc_left = vec2(tc.x - half_texel.x, tc.y);
+       vec2 tc_down = vec2(tc.x, tc.y - half_texel.y);
+
+       // Adjust for different texel centers.
+       tc0 = vec2(tc.x - half_texel.x, tc.y);
+       tc_left0 = vec2(tc_left.x - half_texel.x, tc_left.y);
+       tc_down0 = vec2(tc_down.x - half_texel.x, tc_down.y);
+
+       tc1 = vec2(tc.x + half_texel.x, tc.y);
+       tc_left1 = vec2(tc_left.x + half_texel.x, tc_left.y);
+       tc_down1 = vec2(tc_down.x + half_texel.x, tc_down.y);
+
+       line_offset = position.y * textureSize(diffusivity_tex, 0).y - 0.5f;
 }