12345678910111213141516171819202122232425262728293031323334353637 |
- #version 310 es
- #extension GL_EXT_tessellation_shader : require
- #extension GL_EXT_gpu_shader5 : require
- layout(triangles, equal_spacing) in;
- layout(location = 0) in highp vec2 in_te_position[];
- layout(location = 0) out mediump vec4 in_f_color;
- precise gl_Position;
- void main(void) {
- highp vec2 pos = gl_TessCoord.x * in_te_position[0] +
- gl_TessCoord.y * in_te_position[1] +
- gl_TessCoord.z * in_te_position[2];
- highp float f =
- sqrt(3.0 * min(gl_TessCoord.x, min(gl_TessCoord.y, gl_TessCoord.z))) *
- 0.5 +
- 0.5;
- in_f_color = vec4(gl_TessCoord * f, 1.0);
- // Offset the position slightly, based on the parity of the bits in the float
- // representation.
- // This is done to detect possible small differences in edge vertex positions
- // between patches.
- uvec2 bits = floatBitsToUint(pos);
- uint numBits = 0u;
- for (uint i = 0u; i < 32u; i++)
- numBits +=
- ((bits[0] << i) & 1u) + ((bits[1] << i) & 1u);
- pos += float(numBits & 1u) * 0.04;
- gl_Position = vec4(pos, 0.0, 1.0);
- }
|