#version 120 #extension GL_EXT_geometry_shader4: enable void main(void) { //increment variable int i,j; float rnd1,rnd2; rnd1 = 0.0216767863321334264; // seed rnd2 = 0.0475785688678678345; for(j=0; j< 40; j++) { rnd1 = fract(124.321345312123465*rnd1) -0.5; // easy way to generated pseudo random number rnd2 = fract(5234.43532345435245*rnd2) -0.5; //draw 40 time the same geometry, but with small shift in it's position for(i=0; i< gl_VerticesIn; i++) { gl_FrontColor = gl_FrontColorIn[i]; gl_TexCoord[0] = gl_TexCoordIn[i][0]; gl_Position = gl_PositionIn[i]; // get position of the original point gl_Position.xy += vec2(rnd1,rnd2)/3.; // add small random // the geometry as already been transform in 2d, so we jut have to move it in X and Y EmitVertex(); } EndPrimitive(); } }