#version 120 #extension GL_EXT_geometry_shader4: enable uniform int NumSubdivisions; void main() { /* num is the number of subdivisions * can be anything between 1 and infinity */ int num = NumSubdivisions; float dt = 1. / float(num); float t = 0.; for (int i = 0; i <= num; i++) { float omt = 1. - t; float omt2 = omt * omt; float omt3 = omt * omt2; float t2 = t * t; float t3 = t * t2; vec4 xyzw = omt3 * gl_PositionIn[0].xyzw + 3. * t * omt2 * gl_PositionIn[1].xyzw + 3. * t2 * omt * gl_PositionIn[2].xyzw + t3 * gl_PositionIn[3].xyzw; gl_Position = xyzw; gl_FrontColor = vec4(1, 1, 1, 1); EmitVertex(); t += dt; } }