blob: 874ea84088846c484308eafa87f295b0f19595e2 [file] [log] [blame]
qining9220dbb2016-05-04 17:34:38 -04001#version 310 es
2#extension GL_EXT_tessellation_shader : require
3#extension GL_EXT_gpu_shader5 : require
4
5layout(triangles, equal_spacing) in;
6
7layout(location = 0) in highp vec2 in_te_position[];
8
9layout(location = 0) out mediump vec4 in_f_color;
10
11precise gl_Position;
12
13void main(void) {
14 highp vec2 pos = gl_TessCoord.x * in_te_position[0] +
15 gl_TessCoord.y * in_te_position[1] +
16 gl_TessCoord.z * in_te_position[2];
17
18 highp float f =
19 sqrt(3.0 * min(gl_TessCoord.x, min(gl_TessCoord.y, gl_TessCoord.z))) *
20 0.5 +
21 0.5;
22 in_f_color = vec4(gl_TessCoord * f, 1.0);
23
24 // Offset the position slightly, based on the parity of the bits in the float
25 // representation.
26 // This is done to detect possible small differences in edge vertex positions
27 // between patches.
28 uvec2 bits = floatBitsToUint(pos);
29 uint numBits = 0u;
30 for (uint i = 0u; i < 32u; i++)
31 numBits +=
32 ((bits[0] << i) & 1u) + ((bits[1] << i) & 1u);
33 pos += float(numBits & 1u) * 0.04;
34
35 gl_Position = vec4(pos, 0.0, 1.0);
36}