| 1 | R""( |
| 2 |
|
| 3 | #version 460 core |
| 4 |
|
| 5 |
|
| 6 | in vec4 gl_FragCoord; |
| 7 | layout(rgba32f, binding = 0) uniform image2D texture0; |
| 8 | uniform int it_count; |
| 9 | uniform ivec2 screensize; |
| 10 | uniform float brightness; |
| 11 | uniform bool enable_interlacing; |
| 12 | uniform int interlace_layer; |
| 13 | uniform bool first_interlace; |
| 14 | out vec4 fragColor; |
| 15 |
|
| 16 | const float INTERLACE_COLOR_MULTIPLIERS[7] = {3., 3., 2., 2., 2., 1., 1.}; |
| 17 |
|
| 18 | void main() |
| 19 | { |
| 20 | ivec2 texcoord = ivec2(gl_FragCoord.xy); |
| 21 | bool point_contains_data = imageLoad(texture0, texcoord).r >= 0.9; |
| 22 | if (enable_interlacing && first_interlace && !point_contains_data) |
| 23 | { |
| 24 | int nearest_x = 8; |
| 25 | int nearest_y = 8; |
| 26 | int offset_x = 0; |
| 27 | int offset_y = 0; |
| 28 | switch (interlace_layer) |
| 29 | { |
| 30 | case 1: |
| 31 | nearest_x = 8; |
| 32 | nearest_y = 8; |
| 33 | int offset_x = 8; |
| 34 | int offset_y = 8; |
| 35 | break; |
| 36 | case 2: |
| 37 | nearest_x = 8; |
| 38 | nearest_y = 8; |
| 39 | offset_x = 4; |
| 40 | break; |
| 41 | case 3: |
| 42 | nearest_x = 4; |
| 43 | nearest_y = 8; |
| 44 | offset_y = 4; |
| 45 | break; |
| 46 | case 4: |
| 47 | nearest_x = 4; |
| 48 | nearest_y = 4; |
| 49 | offset_x = 2; |
| 50 | break; |
| 51 | case 5: |
| 52 | nearest_x = 2; |
| 53 | nearest_y = 4; |
| 54 | offset_y = 2; |
| 55 | break; |
| 56 | case 6: |
| 57 | nearest_x = 2; |
| 58 | nearest_y = 2; |
| 59 | offset_x = 1; |
| 60 | break; |
| 61 | case 7: |
| 62 | nearest_x = 1; |
| 63 | nearest_y = 2; |
| 64 | offset_y = 1; |
| 65 | break; |
| 66 | } |
| 67 |
|
| 68 | int xpos = (int(gl_FragCoord.x) - (int(gl_FragCoord.x) % nearest_x)) + offset_x; |
| 69 | int ypos = (int(gl_FragCoord.y) - (int(gl_FragCoord.y) % nearest_y)) + offset_y; |
| 70 |
|
| 71 | texcoord = ivec2(xpos, ypos).xy; |
| 72 | } |
| 73 |
|
| 74 | float iterations = imageLoad(texture0, texcoord).r; |
| 75 | float col = iterations; |
| 76 | if (enable_interlacing && first_interlace) { col *= INTERLACE_COLOR_MULTIPLIERS[interlace_layer - 1]; } |
| 77 |
|
| 78 | if (iterations <= 0.6) |
| 79 | { |
| 80 | fragColor = vec4(0.0, 0.0, 0.0, 0.0); |
| 81 | } |
| 82 | else |
| 83 | { |
| 84 | col = clamp(col/it_count*brightness, 0.0, 1.0); |
| 85 | fragColor = vec4(col*0.65, col*0.35, col*0.7, 0.0); |
| 86 | } |
| 87 | } |
| 88 |
|
| 89 | )"" |
| 90 |
|