Does this sound right?
- Make a buffer with 8 attributes – a vec4 for each of the 8 points in the marched cube. That's a lot of attrib pointer function calls, but it should be fine… hopefully better than using a whole bunch of texture bindings.
- Use a geometry shader to take points as input, and outputs a triangle strip of max 5*3 = 15 vertices.
- Disable fragment shader: glDisable(GL_FRAGMENT_PROGRAM);
- Draw the points.
- Output the triangles to the CPU using transform feedback.
- Re-enable the fragment shader.
P.S. One implementation that I found used texture sampling, instead of giant …