X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=densify.vert;h=1859dfc2a0a33e0638ffd393263f7fa426116944;hb=670611b5a707fb8dcebf60fcfcd0930545d14875;hp=4fbab1803b9b22fcdb400092d3ac15ac01eabadc;hpb=9972c0232a1979f41c81c99b639a8f3b61394125;p=nageru diff --git a/densify.vert b/densify.vert index 4fbab18..1859dfc 100644 --- a/densify.vert +++ b/densify.vert @@ -5,15 +5,19 @@ out vec2 image_pos; flat out vec2 flow_du; flat out float mean_diff; -uniform int width_patches; uniform vec2 patch_size; // In 0..1 coordinates. uniform vec2 patch_spacing; // In 0..1 coordinates. uniform sampler2D flow_tex; void main() { - int patch_x = gl_InstanceID % width_patches; - int patch_y = gl_InstanceID / width_patches; + int patch_x = gl_InstanceID % textureSize(flow_tex, 0).x; + int patch_y = gl_InstanceID / textureSize(flow_tex, 0).x; + + // Convert the patch index to being the full 0..1 range, to match where + // the motion search puts the patches. We don't bother with the locking + // to texel centers, though. + vec2 patch_center = ivec2(patch_x, patch_y) / (textureSize(flow_tex, 0) - 1.0); // Increase the patch size a bit; since patch spacing is not necessarily // an integer number of pixels, and we don't use conservative rasterization, @@ -24,9 +28,9 @@ void main() // // This maps [0.0,1.0] to [-0.25,1.25], ie. extends the patch by 25% in // all directions. - vec2 grown_pos = (position * 1.5) - vec2(0.25, 0.25); + vec2 grown_pos = (position * 1.5) - 0.25; - image_pos = patch_spacing * ivec2(patch_x, patch_y) + patch_size * grown_pos; + image_pos = patch_center + patch_size * (grown_pos - 0.5f); // Find the flow value for this patch, and send it on to the fragment shader. vec3 flow_du_and_mean_diff = texelFetch(flow_tex, ivec2(patch_x, patch_y), 0).xyz;