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