The uniform value takes the window mouse coordinates.
The shader gets rendered as a single quad over a 1024x1024 framebuffer.
The output lines are the values sampled across the grid.

Here's the result:

I want each pixel within the field to have its color value calculated based on its coordinate. From this result it looks like the fragments are calculated as larger 128x128[?] patches. How do I calculate per pixel?

The buffers are 32bit Float RGBA. It turns out there's not much wrong with my first shader. It's in how I get my data back to the CPU. Because of geometry quirks, I'm going to have to use another shader and a different upload path to ensure I get the correct data back.

So, I've managed to get my project in a working state.
I've had to turn off PBO async reads for my data (using glGetTexImage for now).
...And I've run into a bug with GLSL. See my earlier edited post for the project so far.

The demo so far calculates the a force at every point on the vector field using the GPU (frag shader). I've tried doing this calculation on the CPU previously and, let me tell you, the results are dramatically faster on the GPU. What you see in this demo is the force evaluated at points across the grid. While the force is calculated at each point in the field, only 1 point is displayed per 32x32 square. The force is displayed as a line away from the point evaluated.

The current program just creates a force towards the mouse that gets weaker by half every 20px away. While the points evaluated are in a grid in this demo, the code supports arbitrary sampling of the field... So that means you can have particles flying around the field interacting with the forces you create in it! Eventually I hope to make a nice little game or screen saver or something with this.

The bug: So, I've got my 32bitFloat texture vector field loaded as a texture unit in my GLSL fragment shader. But, I can't resolve indices bigger than about 768px. So, if I want to poll a 1024x1024 texture at 800x200, I get garbage back from texture2D().

You can see this behavior for yourself by editing line18 of Renderer.mm, line 78 in CRenderer.cc, and line 9 of pollField.frag. (change 512 to 1024 for all instances).
I've looked at the data coming out and it seems that the problem is just that the precision goes all out of whack when you start dividing 1.0 by 1024.0 in the shader (to scale to the tex).

Anyone got any idea on how to fix this? Ideally I'd use rectangle textures, but I don't know how to with GLSL. Anyone? Anyone? Arrekusu?

vertexData is a 64x64 float pixel texture that contains coordinates for target pixels in sourceField (a 1024x1024 float pixel texture). For any coordinates above a certain height and width, I get the glClear color instead of the data in that portion of sourceField. Even in the case of 16bit floats, I still should have a 10bit mantissa (which would accommodate 1024 coordinates).