132001f49Smrg#version 120 232001f49Smrg#extension GL_EXT_geometry_shader4: enable 332001f49Smrg 432001f49Smrguniform int NumSubdivisions; 532001f49Smrg 632001f49Smrgvoid main() 732001f49Smrg{ 832001f49Smrg /* num is the number of subdivisions 932001f49Smrg * can be anything between 1 and infinity 1032001f49Smrg */ 1132001f49Smrg int num = NumSubdivisions; 1232001f49Smrg 1332001f49Smrg float dt = 1. / float(num); 1432001f49Smrg float t = 0.; 1532001f49Smrg for (int i = 0; i <= num; i++) { 1632001f49Smrg float omt = 1. - t; 1732001f49Smrg float omt2 = omt * omt; 1832001f49Smrg float omt3 = omt * omt2; 1932001f49Smrg float t2 = t * t; 2032001f49Smrg float t3 = t * t2; 2132001f49Smrg vec4 xyzw = 2232001f49Smrg omt3 * gl_PositionIn[0].xyzw + 2332001f49Smrg 3. * t * omt2 * gl_PositionIn[1].xyzw + 2432001f49Smrg 3. * t2 * omt * gl_PositionIn[2].xyzw + 2532001f49Smrg t3 * gl_PositionIn[3].xyzw; 2632001f49Smrg gl_Position = xyzw; 2732001f49Smrg gl_FrontColor = vec4(1, 1, 1, 1); 2832001f49Smrg EmitVertex(); 2932001f49Smrg t += dt; 3032001f49Smrg } 3132001f49Smrg} 32