No, I disagree. When we start with something extremely simple like a heightmap and extend from there, we’ll get a real mess. It’s better to start with as much flexibility as possible, but try to stay within reasonable limits.
Perhaps vertex programs should run for every vertex generated by a geometry program?
Of course. I think that’s one of the few things we all agree on in this thread
I’m not sure if it’s a good idea to actually store the vertices somewhere, because this can defeat parallelism. It’s the same problem that’s currently discussed in the “map vs. no-map” thread in the advanced forum. Better directly feed the output to the next stage (at least semantically, the driver may allocate a buffer if it really needs to).
I do not agree with then idea en/disable should affect vertices sent to the server.
Aehm, you do realize that we have this already? When you enable a vertex program, vertices are sent to this program, when you disable it vertices are sent to the fixed function pipe. It’s exactly the same, just one step earlier. Enabled: vertices are sent to the geometry shader, disabled: vertices are passed through (one could see pass-through as the “fixed-function” geometry processing).
After thinking about it, I think it would be better to not use glEnable/Disable, but a special program with ID 0 to disable the geometry shader. It’s semantically the same, but consistent with the vertex/fragment shader spec.