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