I would like to create smooth curves using the tessellation shader. First, I tried to create Bezier curves with tessellation (patch number = 4), but if I have a line with more than 4 control points, then there are gaps at every 4 vertices. This is why it is recommended to use B-splines. This is the B-spline formula, where Pi is the control point i:
(u is just gl_TessCoord.x
)
So if we have 8 control points for example, then we would need:
P0 P1 P2 P3
P1 P2 P3 P4
P2 P3 P4 P5 etc.
However, the tessellation stage takes 4 vertices at a time, which means it would take:
P0 P1 P2 P3
P4 P5 P6 P7
There is no overlap in the way the tessellator takes the vertices, correct? If that’s true then how am I going to create the B-splines?
One solution would be instead of using the initial buffer:
[P0 , P1 , P2 , P3 , P4 , P5 , P6 ,P7]
to pass this buffer (new control points):
[P0 , P1 , P2 , P3 , P1 , P2 , P3 , P4 , P2 , P3 , P4 , P5 … ]
But isn’t that a waste of space, because the new buffer has more than 2x the size of the initial control points?