OUTPUT uniform UBOOL useStipple; uniform int stipple[128]; varying vec4 var_color; void main() { if (UBOOL_TEST(useStipple)) { // Calculate the 32x32 pattern coordinates ivec2 coord = ivec2(gl_FragCoord.xy); // Calculate the byte position and bit position within that byte int x = int(mod(float(coord.x), 32.)); int y = int(mod(float(coord.y), 32.)); // Each row in the 32x32 pattern is represented by 4 bytes (4 * 8 bits = 32 bits) int byteIndex = y * 4 + (x / 8); int bitIndex = int(mod(float(x), 8.)); // Get the stipple pattern byte int patternByte = 0; for (int i = 0; i < 128; i++) { if (i == byteIndex) { patternByte = stipple[i]; break; } } for (int i = 0; i < 7; i++) { if (i >= 7 - bitIndex) break; patternByte = patternByte / 2; } if (int(mod(float(patternByte), 2.)) == 0) discard; } outColor = var_color; }