X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=equations.vert;h=731e1599170499c6776f4b37b05d4b0ef8e58b91;hb=c015224d38abb896d92c55f1b4517f0600828f68;hp=6ace5775e0017f69261dd20f35a9ca68602c651d;hpb=632cf18d06090795ea725117b4c48bd230dda72f;p=nageru diff --git a/equations.vert b/equations.vert index 6ace577..731e159 100644 --- a/equations.vert +++ b/equations.vert @@ -1,9 +1,12 @@ #version 450 core +#extension GL_ARB_shader_viewport_layer_array : require layout(location=0) in vec2 position; -out vec2 tc, tc_left, tc_down; +out vec3 tc0, tc_left0, tc_down0; +out vec3 tc1, tc_left1, tc_down1; +out float line_offset; -uniform sampler2D diffusivity_tex; +uniform sampler2DArray diffusivity_tex; void main() { @@ -14,7 +17,22 @@ 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); + gl_Layer = gl_InstanceID; + + const vec2 half_texel = 0.5f / textureSize(diffusivity_tex, 0).xy; + + 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 = vec3(tc.x - half_texel.x, tc.y, gl_InstanceID); + tc_left0 = vec3(tc_left.x - half_texel.x, tc_left.y, gl_InstanceID); + tc_down0 = vec3(tc_down.x - half_texel.x, tc_down.y, gl_InstanceID); + + tc1 = vec3(tc.x + half_texel.x, tc.y, gl_InstanceID); + tc_left1 = vec3(tc_left.x + half_texel.x, tc_left.y, gl_InstanceID); + tc_down1 = vec3(tc_down.x + half_texel.x, tc_down.y, gl_InstanceID); + + line_offset = position.y * textureSize(diffusivity_tex, 0).y - 0.5f; }