1# This test checks that values sent to gl_ClipDistance by the vertex 2# shader are correctly received by the geometry shader. 3 4[require] 5GL >= 2.0 6GLSL >= 1.30 7GL_ARB_geometry_shader4 8 9[vertex shader] 10#version 130 11 12in vec4 vertex; 13in float offset; 14out float offset_to_gs; 15out float gl_ClipDistance[gl_MaxClipDistances]; 16 17void main() 18{ 19 gl_Position = vertex; 20 offset_to_gs = offset; 21 for (int i = 0; i < gl_MaxClipDistances; i++) { 22 gl_ClipDistance[i] = offset + float(i); 23 } 24} 25 26[geometry shader] 27#version 130 28#extension GL_ARB_geometry_shader4: enable 29 30in float offset_to_gs[3]; 31in float gl_ClipDistanceIn[3][gl_MaxClipDistances]; 32flat out int ok_to_fs; 33 34void main() 35{ 36 bool ok = true; 37 for (int i = 0; i < 3; i++) { 38 for (int j = 0; j < gl_MaxClipDistances; j++) { 39 if (gl_ClipDistanceIn[i][j] != offset_to_gs[i] + float(j)) 40 ok = false; 41 } 42 } 43 for (int i = 0; i < 3; i++) { 44 gl_Position = gl_PositionIn[i]; 45 ok_to_fs = int(ok); 46 EmitVertex(); 47 } 48} 49 50[geometry layout] 51input type GL_TRIANGLES 52output type GL_TRIANGLE_STRIP 53vertices out 3 54 55[fragment shader] 56#version 130 57 58flat in int ok_to_fs; 59 60void main() 61{ 62 if (ok_to_fs != 0) 63 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); 64 else 65 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 66} 67 68[vertex data] 69vertex/float/2 offset/float/1 70-1.0 -1.0 1.0 71 1.0 -1.0 2.0 72 1.0 1.0 3.0 73-1.0 1.0 4.0 74 75[test] 76draw arrays GL_TRIANGLE_FAN 0 4 77probe all rgba 0.0 1.0 0.0 1.0 78