1#Basic test of gs 2d input arrays 2[require] 3GL >= 2.0 4GLSL >= 1.20 5GL_ARB_geometry_shader4 6 7[vertex shader] 8#version 120 9 10attribute vec4 vertex; 11attribute float offset; 12 13varying float gs_input[6]; 14varying float gs_offset; 15 16void main() 17{ 18 for (int i = 0; i < 6; i++) 19 gs_input[i] = offset + float(i); 20 gs_offset = offset; 21 gl_Position = vertex; 22} 23 24[geometry shader] 25#version 120 26#extension GL_ARB_geometry_shader4: enable 27 28uniform int zero; 29 30varying in float gs_offset[]; 31varying in float gs_input[][6]; 32 33varying out float fs_ok; 34 35void main() 36{ 37 bool ok = true; 38 39 for (int i = 0; i < gl_VerticesIn; i++) { 40 for (int j = 0; j < 6; j++) { 41 if (gs_input[i][j] != gs_offset[i] + float(j)) 42 ok = false; 43 } 44 } 45 46 for (int i = 0; i < gl_VerticesIn; i++) { 47 fs_ok = float(ok); 48 gl_Position = gl_PositionIn[i]; 49 EmitVertex(); 50 } 51} 52 53[geometry layout] 54input type GL_TRIANGLES 55output type GL_TRIANGLE_STRIP 56vertices out 3 57 58[fragment shader] 59#version 120 60 61const int gs_VerticesIn = 3; 62 63varying float fs_ok; 64 65void main() 66{ 67 if (distance(fs_ok, 1.0) < 1e-6) 68 gl_FragColor = vec4(0, 1, 0, 1); 69 else 70 gl_FragColor = vec4(1, 0, 0, 1); 71} 72 73[vertex data] 74vertex/float/2 offset/float/1 75-1.0 -1.0 1.0 76 1.0 -1.0 2.0 77 1.0 1.0 3.0 78-1.0 1.0 4.0 79 80[test] 81draw arrays GL_TRIANGLE_FAN 0 4 82probe all rgb 0 1 0 83