diff --git a/assets/4096_bayer.frag b/assets/4096_bayer.frag index c48986a2f..7b24de03e 100644 --- a/assets/4096_bayer.frag +++ b/assets/4096_bayer.frag @@ -9,290 +9,6 @@ #endif -varying vec4 v_color; -varying vec2 v_texCoords; -uniform sampler2D u_texture; - -vec4 bayerTex[256] = vec4[]( -vec4(205, 111, 82, 65), -vec4(255, 65, 133, 0), -vec4( 25, 88, 9, 134), -vec4(105, 231, 39, 185), -vec4(161, 152, 139, 66), -vec4( 91, 170, 203, 35), -vec4(247, 78, 3, 115), -vec4( 22, 193, 59, 144), -vec4(165, 156, 148, 157), -vec4(114, 131, 233, 245), -vec4(192, 202, 132, 57), -vec4( 30, 162, 31, 15), -vec4(217, 17, 63, 83), -vec4(147, 189, 214, 39), -vec4( 71, 168, 106, 129), -vec4(135, 1, 195, 243), -vec4(173, 213, 232, 75), -vec4(122, 175, 161, 233), -vec4(142, 26, 213, 203), -vec4(234, 118, 251, 21), -vec4( 1, 7, 70, 86), -vec4(218, 222, 113, 162), -vec4(150, 105, 244, 249), -vec4(186, 51, 124, 49), -vec4( 41, 229, 183, 11), -vec4( 65, 4, 22, 90), -vec4(252, 43, 115, 186), -vec4(131, 141, 166, 165), -vec4( 53, 221, 239, 202), -vec4( 20, 69, 1, 228), -vec4(226, 230, 123, 173), -vec4( 39, 130, 43, 29), -vec4( 15, 251, 28, 124), -vec4(216, 79, 90, 98), -vec4( 47, 137, 53, 145), -vec4(198, 203, 197, 225), -vec4( 60, 190, 25, 54), -vec4(133, 38, 172, 130), -vec4( 75, 143, 46, 218), -vec4(124, 243, 97, 105), -vec4(227, 115, 218, 201), -vec4( 84, 81, 68, 123), -vec4( 4, 97, 207, 32), -vec4(179, 254, 84, 133), -vec4( 79, 55, 50, 99), -vec4(160, 119, 184, 9), -vec4(189, 92, 141, 108), -vec4( 86, 47, 246, 194), -vec4(111, 185, 67, 48), -vec4(157, 14, 147, 170), -vec4( 70, 54, 122, 12), -vec4( 98, 235, 105, 110), -vec4(180, 70, 155, 197), -vec4( 31, 94, 85, 177), -vec4(239, 21, 224, 4), -vec4( 14, 167, 30, 78), -vec4(106, 183, 162, 172), -vec4(209, 212, 6, 234), -vec4(144, 151, 254, 221), -vec4(235, 178, 103, 73), -vec4(101, 23, 151, 250), -vec4(119, 205, 221, 60), -vec4(248, 154, 13, 156), -vec4( 59, 31, 168, 217), -vec4(238, 144, 209, 238), -vec4(177, 223, 227, 37), -vec4( 11, 165, 182, 154), -vec4(249, 108, 5, 254), -vec4(164, 153, 238, 74), -vec4(112, 253, 128, 30), -vec4(201, 126, 190, 239), -vec4( 49, 59, 145, 139), -vec4(172, 11, 78, 63), -vec4(156, 32, 200, 20), -vec4( 27, 72, 135, 46), -vec4( 44, 107, 38, 148), -vec4(196, 192, 193, 180), -vec4( 9, 6, 72, 24), -vec4(208, 242, 96, 140), -vec4(138, 102, 114, 84), -vec4( 34, 199, 19, 182), -vec4( 81, 122, 45, 64), -vec4(128, 91, 79, 208), -vec4(211, 28, 36, 92), -vec4( 23, 44, 212, 122), -vec4( 83, 187, 58, 44), -vec4(139, 216, 11, 190), -vec4(223, 85, 241, 96), -vec4( 92, 198, 117, 159), -vec4( 58, 232, 55, 113), -vec4(129, 136, 173, 193), -vec4(215, 238, 15, 85), -vec4( 69, 62, 125, 211), -vec4(166, 129, 243, 118), -vec4( 26, 172, 54, 242), -vec4( 95, 73, 179, 6), -vec4(224, 57, 129, 106), -vec4(199, 8, 252, 127), -vec4(145, 247, 164, 227), -vec4( 43, 209, 201, 18), -vec4(229, 173, 137, 168), -vec4(154, 0, 71, 150), -vec4( 67, 140, 177, 216), -vec4( 3, 104, 102, 14), -vec4(194, 160, 41, 206), -vec4(245, 121, 229, 252), -vec4(181, 41, 93, 128), -vec4(110, 164, 236, 1), -vec4(241, 25, 160, 166), -vec4(149, 86, 29, 40), -vec4( 50, 225, 204, 70), -vec4(183, 40, 143, 198), -vec4( 64, 159, 231, 163), -vec4( 2, 179, 104, 26), -vec4(115, 133, 91, 79), -vec4( 56, 63, 23, 188), -vec4( 97, 116, 112, 58), -vec4(187, 77, 247, 246), -vec4(254, 226, 158, 114), -vec4( 37, 50, 18, 82), -vec4(120, 249, 205, 53), -vec4( 78, 19, 150, 33), -vec4( 13, 95, 186, 224), -vec4( 36, 219, 64, 103), -vec4( 87, 197, 110, 55), -vec4(127, 147, 216, 230), -vec4(213, 114, 87, 95), -vec4(108, 208, 2, 137), -vec4(236, 233, 192, 251), -vec4(169, 20, 57, 50), -vec4(193, 84, 153, 204), -vec4(242, 149, 188, 142), -vec4(125, 240, 225, 101), -vec4( 19, 36, 48, 8), -vec4(176, 194, 86, 132), -vec4(103, 15, 215, 232), -vec4(162, 67, 121, 181), -vec4(220, 206, 26, 143), -vec4(140, 180, 80, 69), -vec4(171, 74, 7, 171), -vec4(230, 52, 140, 189), -vec4( 6, 250, 42, 149), -vec4( 77, 13, 175, 215), -vec4(155, 98, 74, 16), -vec4(136, 68, 34, 176), -vec4( 21, 195, 217, 116), -vec4( 88, 48, 14, 241), -vec4( 33, 220, 66, 38), -vec4(210, 182, 171, 222), -vec4( 76, 96, 32, 175), -vec4(134, 155, 131, 71), -vec4( 54, 127, 185, 41), -vec4(206, 171, 61, 158), -vec4( 24, 145, 248, 91), -vec4( 99, 112, 167, 22), -vec4(202, 2, 222, 244), -vec4( 62, 125, 196, 10), -vec4(188, 184, 250, 121), -vec4(253, 35, 120, 34), -vec4( 40, 139, 157, 88), -vec4(102, 106, 107, 152), -vec4( 72, 255, 134, 68), -vec4(219, 123, 240, 2), -vec4(151, 30, 118, 160), -vec4(163, 10, 146, 89), -vec4( 8, 109, 99, 210), -vec4(222, 236, 230, 27), -vec4(237, 214, 0, 196), -vec4(148, 87, 144, 120), -vec4( 68, 37, 108, 219), -vec4(250, 246, 49, 199), -vec4( 48, 228, 130, 111), -vec4(132, 158, 98, 80), -vec4(116, 83, 60, 236), -vec4( 18, 215, 24, 61), -vec4(175, 169, 237, 192), -vec4( 52, 5, 181, 231), -vec4(244, 157, 47, 97), -vec4(184, 90, 81, 187), -vec4(109, 204, 208, 126), -vec4( 61, 142, 10, 51), -vec4(190, 53, 255, 109), -vec4(117, 71, 73, 147), -vec4( 42, 24, 199, 240), -vec4( 89, 188, 89, 3), -vec4( 10, 58, 234, 59), -vec4(182, 101, 33, 135), -vec4(158, 135, 211, 47), -vec4( 29, 27, 12, 155), -vec4( 93, 64, 149, 207), -vec4(221, 239, 88, 131), -vec4(207, 45, 202, 42), -vec4(123, 132, 4, 13), -vec4( 7, 227, 165, 138), -vec4(141, 60, 95, 200), -vec4( 45, 174, 194, 226), -vec4(251, 244, 40, 19), -vec4( 96, 163, 178, 253), -vec4( 28, 201, 52, 183), -vec4(197, 120, 163, 77), -vec4(168, 224, 20, 104), -vec4(126, 12, 180, 164), -vec4(107, 166, 154, 248), -vec4(225, 196, 76, 179), -vec4(195, 207, 189, 28), -vec4(143, 93, 170, 100), -vec4( 82, 117, 228, 167), -vec4(159, 191, 69, 220), -vec4( 32, 75, 142, 112), -vec4(200, 210, 245, 56), -vec4( 85, 34, 27, 31), -vec4( 16, 113, 152, 81), -vec4(130, 80, 219, 169), -vec4(231, 3, 127, 62), -vec4(146, 134, 109, 136), -vec4( 80, 42, 136, 45), -vec4(243, 148, 210, 205), -vec4(214, 237, 65, 17), -vec4( 38, 76, 119, 87), -vec4( 73, 49, 242, 223), -vec4(246, 9, 51, 67), -vec4( 0, 150, 111, 5), -vec4( 63, 176, 37, 255), -vec4(233, 22, 126, 76), -vec4(113, 100, 56, 146), -vec4(153, 146, 223, 214), -vec4(228, 16, 116, 247), -vec4(170, 186, 62, 119), -vec4(212, 217, 77, 153), -vec4( 66, 99, 16, 7), -vec4(178, 252, 226, 94), -vec4( 5, 177, 35, 229), -vec4(137, 89, 249, 174), -vec4( 57, 110, 101, 125), -vec4( 17, 181, 8, 36), -vec4(174, 124, 220, 141), -vec4(121, 218, 138, 195), -vec4( 46, 234, 17, 117), -vec4(167, 56, 253, 184), -vec4(185, 248, 206, 23), -vec4( 94, 200, 21, 161), -vec4( 55, 161, 100, 178), -vec4( 74, 241, 187, 43), -vec4(191, 46, 169, 102), -vec4( 35, 128, 235, 235), -vec4(118, 61, 94, 209), -vec4( 51, 29, 159, 191), -vec4(204, 211, 191, 25), -vec4(100, 18, 83, 72), -vec4(232, 66, 44, 213), -vec4(152, 245, 174, 107), -vec4( 90, 33, 198, 237), -vec4(203, 103, 92, 151), -vec4(104, 82, 156, 52), -vec4(240, 138, 75, 212), -vec4( 12, 39, 176, 93) -); - -float bayerSize = 16.0; -float bayerDivider = bayerSize * bayerSize; - -float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 -vec4 quantiser = vec4(quant); -vec4 quantiserDivider = vec4(1.0 / quant); - -vec2 boolean = vec2(0.0, 1.0); -vec4 halfvec = vec4(0.5); - -vec4 nearestColour(vec4 inColor) { - return floor(quantiser * inColor + halfvec) * quantiserDivider; -} - -vec4 getDitherredDot(vec4 inColor) { - vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - int index = int(entry.y) * int(bayerSize) + int(entry.x); - vec4 bayerThreshold = vec4(bayerTex[index] / bayerDivider - 0.5); - return nearestColour(inColor + bayerThreshold * quantiserDivider); -} - vec4 gammaIn(vec4 col) { return pow(col, vec4(2.2)); } @@ -301,10 +17,35 @@ vec4 gammaOut(vec4 col) { return pow(col, vec4(1.0 / 2.2)); } +varying vec4 v_color; +varying vec2 v_texCoords; +uniform sampler2D u_texture; +uniform sampler2D u_pattern; + +float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 +vec4 quantiser = vec4(quant); +vec4 quantiserDivider = vec4(1.0 / quant); + +vec2 boolean = vec2(0.0, 1.0); +vec4 halfvec = vec4(0.5); + +vec2 patternsize = vec2(1.0/512.0, 1.0/512.0); + +vec4 nearestColour(vec4 inColor) { + return floor(quantiser * inColor + halfvec) * quantiserDivider; +} + +vec4 getDitherredDot(vec4 inColor) { + vec4 bayerThreshold = vec4(texture2D(u_pattern, gl_FragCoord.xy * patternsize) - 0.5); + return nearestColour(inColor + bayerThreshold * quantiserDivider); +} + + void main(void) { // create texture coordinates based on pixelSize // - vec4 inColor = v_color * (texture2D(u_texture, v_texCoords)); + vec4 inColor = v_color * texture2D(u_texture, v_texCoords); vec4 selvec = getDitherredDot(inColor); +// gl_FragColor = inColor * boolean.yyyx + boolean.xxxy; gl_FragColor = selvec * boolean.yyyx + inColor * boolean.xxxy; // use quantised RGB but not the A } \ No newline at end of file diff --git a/assets/4096_bayer_aaa1.frag b/assets/4096_bayer_aaa1.frag index 251c742b5..d41149a3f 100644 --- a/assets/4096_bayer_aaa1.frag +++ b/assets/4096_bayer_aaa1.frag @@ -12,268 +12,7 @@ varying vec4 v_color; varying vec2 v_texCoords; uniform sampler2D u_texture; - -vec4 bayerTex[256] = vec4[]( -vec4( 65, 205, 111, 82), -vec4( 0, 255, 65, 133), -vec4(134, 25, 88, 9), -vec4(185, 105, 231, 39), -vec4( 66, 161, 152, 139), -vec4( 35, 91, 170, 203), -vec4(115, 247, 78, 3), -vec4(144, 22, 193, 59), -vec4(157, 165, 156, 148), -vec4(245, 114, 131, 233), -vec4( 57, 192, 202, 132), -vec4( 15, 30, 162, 31), -vec4( 83, 217, 17, 63), -vec4( 39, 147, 189, 214), -vec4(129, 71, 168, 106), -vec4(243, 135, 1, 195), -vec4( 75, 173, 213, 232), -vec4(233, 122, 175, 161), -vec4(203, 142, 26, 213), -vec4( 21, 234, 118, 251), -vec4( 86, 1, 7, 70), -vec4(162, 218, 222, 113), -vec4(249, 150, 105, 244), -vec4( 49, 186, 51, 124), -vec4( 11, 41, 229, 183), -vec4( 90, 65, 4, 22), -vec4(186, 252, 43, 115), -vec4(165, 131, 141, 166), -vec4(202, 53, 221, 239), -vec4(228, 20, 69, 1), -vec4(173, 226, 230, 123), -vec4( 29, 39, 130, 43), -vec4(124, 15, 251, 28), -vec4( 98, 216, 79, 90), -vec4(145, 47, 137, 53), -vec4(225, 198, 203, 197), -vec4( 54, 60, 190, 25), -vec4(130, 133, 38, 172), -vec4(218, 75, 143, 46), -vec4(105, 124, 243, 97), -vec4(201, 227, 115, 218), -vec4(123, 84, 81, 68), -vec4( 32, 4, 97, 207), -vec4(133, 179, 254, 84), -vec4( 99, 79, 55, 50), -vec4( 9, 160, 119, 184), -vec4(108, 189, 92, 141), -vec4(194, 86, 47, 246), -vec4( 48, 111, 185, 67), -vec4(170, 157, 14, 147), -vec4( 12, 70, 54, 122), -vec4(110, 98, 235, 105), -vec4(197, 180, 70, 155), -vec4(177, 31, 94, 85), -vec4( 4, 239, 21, 224), -vec4( 78, 14, 167, 30), -vec4(172, 106, 183, 162), -vec4(234, 209, 212, 6), -vec4(221, 144, 151, 254), -vec4( 73, 235, 178, 103), -vec4(250, 101, 23, 151), -vec4( 60, 119, 205, 221), -vec4(156, 248, 154, 13), -vec4(217, 59, 31, 168), -vec4(238, 238, 144, 209), -vec4( 37, 177, 223, 227), -vec4(154, 11, 165, 182), -vec4(254, 249, 108, 5), -vec4( 74, 164, 153, 238), -vec4( 30, 112, 253, 128), -vec4(239, 201, 126, 190), -vec4(139, 49, 59, 145), -vec4( 63, 172, 11, 78), -vec4( 20, 156, 32, 200), -vec4( 46, 27, 72, 135), -vec4(148, 44, 107, 38), -vec4(180, 196, 192, 193), -vec4( 24, 9, 6, 72), -vec4(140, 208, 242, 96), -vec4( 84, 138, 102, 114), -vec4(182, 34, 199, 19), -vec4( 64, 81, 122, 45), -vec4(208, 128, 91, 79), -vec4( 92, 211, 28, 36), -vec4(122, 23, 44, 212), -vec4( 44, 83, 187, 58), -vec4(190, 139, 216, 11), -vec4( 96, 223, 85, 241), -vec4(159, 92, 198, 117), -vec4(113, 58, 232, 55), -vec4(193, 129, 136, 173), -vec4( 85, 215, 238, 15), -vec4(211, 69, 62, 125), -vec4(118, 166, 129, 243), -vec4(242, 26, 172, 54), -vec4( 6, 95, 73, 179), -vec4(106, 224, 57, 129), -vec4(127, 199, 8, 252), -vec4(227, 145, 247, 164), -vec4( 18, 43, 209, 201), -vec4(168, 229, 173, 137), -vec4(150, 154, 0, 71), -vec4(216, 67, 140, 177), -vec4( 14, 3, 104, 102), -vec4(206, 194, 160, 41), -vec4(252, 245, 121, 229), -vec4(128, 181, 41, 93), -vec4( 1, 110, 164, 236), -vec4(166, 241, 25, 160), -vec4( 40, 149, 86, 29), -vec4( 70, 50, 225, 204), -vec4(198, 183, 40, 143), -vec4(163, 64, 159, 231), -vec4( 26, 2, 179, 104), -vec4( 79, 115, 133, 91), -vec4(188, 56, 63, 23), -vec4( 58, 97, 116, 112), -vec4(246, 187, 77, 247), -vec4(114, 254, 226, 158), -vec4( 82, 37, 50, 18), -vec4( 53, 120, 249, 205), -vec4( 33, 78, 19, 150), -vec4(224, 13, 95, 186), -vec4(103, 36, 219, 64), -vec4( 55, 87, 197, 110), -vec4(230, 127, 147, 216), -vec4( 95, 213, 114, 87), -vec4(137, 108, 208, 2), -vec4(251, 236, 233, 192), -vec4( 50, 169, 20, 57), -vec4(204, 193, 84, 153), -vec4(142, 242, 149, 188), -vec4(101, 125, 240, 225), -vec4( 8, 19, 36, 48), -vec4(132, 176, 194, 86), -vec4(232, 103, 15, 215), -vec4(181, 162, 67, 121), -vec4(143, 220, 206, 26), -vec4( 69, 140, 180, 80), -vec4(171, 171, 74, 7), -vec4(189, 230, 52, 140), -vec4(149, 6, 250, 42), -vec4(215, 77, 13, 175), -vec4( 16, 155, 98, 74), -vec4(176, 136, 68, 34), -vec4(116, 21, 195, 217), -vec4(241, 88, 48, 14), -vec4( 38, 33, 220, 66), -vec4(222, 210, 182, 171), -vec4(175, 76, 96, 32), -vec4( 71, 134, 155, 131), -vec4( 41, 54, 127, 185), -vec4(158, 206, 171, 61), -vec4( 91, 24, 145, 248), -vec4( 22, 99, 112, 167), -vec4(244, 202, 2, 222), -vec4( 10, 62, 125, 196), -vec4(121, 188, 184, 250), -vec4( 34, 253, 35, 120), -vec4( 88, 40, 139, 157), -vec4(152, 102, 106, 107), -vec4( 68, 72, 255, 134), -vec4( 2, 219, 123, 240), -vec4(160, 151, 30, 118), -vec4( 89, 163, 10, 146), -vec4(210, 8, 109, 99), -vec4( 27, 222, 236, 230), -vec4(196, 237, 214, 0), -vec4(120, 148, 87, 144), -vec4(219, 68, 37, 108), -vec4(199, 250, 246, 49), -vec4(111, 48, 228, 130), -vec4( 80, 132, 158, 98), -vec4(236, 116, 83, 60), -vec4( 61, 18, 215, 24), -vec4(192, 175, 169, 237), -vec4(231, 52, 5, 181), -vec4( 97, 244, 157, 47), -vec4(187, 184, 90, 81), -vec4(126, 109, 204, 208), -vec4( 51, 61, 142, 10), -vec4(109, 190, 53, 255), -vec4(147, 117, 71, 73), -vec4(240, 42, 24, 199), -vec4( 3, 89, 188, 89), -vec4( 59, 10, 58, 234), -vec4(135, 182, 101, 33), -vec4( 47, 158, 135, 211), -vec4(155, 29, 27, 12), -vec4(207, 93, 64, 149), -vec4(131, 221, 239, 88), -vec4( 42, 207, 45, 202), -vec4( 13, 123, 132, 4), -vec4(138, 7, 227, 165), -vec4(200, 141, 60, 95), -vec4(226, 45, 174, 194), -vec4( 19, 251, 244, 40), -vec4(253, 96, 163, 178), -vec4(183, 28, 201, 52), -vec4( 77, 197, 120, 163), -vec4(104, 168, 224, 20), -vec4(164, 126, 12, 180), -vec4(248, 107, 166, 154), -vec4(179, 225, 196, 76), -vec4( 28, 195, 207, 189), -vec4(100, 143, 93, 170), -vec4(167, 82, 117, 228), -vec4(220, 159, 191, 69), -vec4(112, 32, 75, 142), -vec4( 56, 200, 210, 245), -vec4( 31, 85, 34, 27), -vec4( 81, 16, 113, 152), -vec4(169, 130, 80, 219), -vec4( 62, 231, 3, 127), -vec4(136, 146, 134, 109), -vec4( 45, 80, 42, 136), -vec4(205, 243, 148, 210), -vec4( 17, 214, 237, 65), -vec4( 87, 38, 76, 119), -vec4(223, 73, 49, 242), -vec4( 67, 246, 9, 51), -vec4( 5, 0, 150, 111), -vec4(255, 63, 176, 37), -vec4( 76, 233, 22, 126), -vec4(146, 113, 100, 56), -vec4(214, 153, 146, 223), -vec4(247, 228, 16, 116), -vec4(119, 170, 186, 62), -vec4(153, 212, 217, 77), -vec4( 7, 66, 99, 16), -vec4( 94, 178, 252, 226), -vec4(229, 5, 177, 35), -vec4(174, 137, 89, 249), -vec4(125, 57, 110, 101), -vec4( 36, 17, 181, 8), -vec4(141, 174, 124, 220), -vec4(195, 121, 218, 138), -vec4(117, 46, 234, 17), -vec4(184, 167, 56, 253), -vec4( 23, 185, 248, 206), -vec4(161, 94, 200, 21), -vec4(178, 55, 161, 100), -vec4( 43, 74, 241, 187), -vec4(102, 191, 46, 169), -vec4(235, 35, 128, 235), -vec4(209, 118, 61, 94), -vec4(191, 51, 29, 159), -vec4( 25, 204, 211, 191), -vec4( 72, 100, 18, 83), -vec4(213, 232, 66, 44), -vec4(107, 152, 245, 174), -vec4(237, 90, 33, 198), -vec4(151, 203, 103, 92), -vec4( 52, 104, 82, 156), -vec4(212, 240, 138, 75), -vec4( 93, 12, 39, 176) -); - -float bayerSize = 16.0; -float bayerDivider = bayerSize * bayerSize; +uniform sampler2D u_pattern; float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 vec4 quantiser = vec4(quant); @@ -282,24 +21,17 @@ vec4 quantiserDivider = vec4(1.0 / quant); vec2 boolean = vec2(0.0, 1.0); vec4 halfvec = vec4(0.5); +vec2 patternsize = vec2(1.0/512.0, 1.0/512.0); + vec4 nearestColour(vec4 inColor) { return floor(quantiser * inColor + halfvec) * quantiserDivider; } vec4 getDitherredDot(vec4 inColor) { - vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - int index = int(entry.y) * int(bayerSize) + int(entry.x); - vec4 bayerThreshold = vec4(bayerTex[index] / bayerDivider - 0.5); + vec4 bayerThreshold = vec4(texture2D(u_pattern, gl_FragCoord.xy * patternsize) - 0.5); return nearestColour(inColor + bayerThreshold * quantiserDivider); } -vec4 gammaIn(vec4 col) { - return pow(col, vec4(2.2)); -} - -vec4 gammaOut(vec4 col) { - return pow(col, vec4(1.0 / 2.2)); -} void main(void) { // create texture coordinates based on pixelSize // diff --git a/assets/4096_bayer_rgb1.frag b/assets/4096_bayer_rgb1.frag index 1b5e7816f..1d5974878 100644 --- a/assets/4096_bayer_rgb1.frag +++ b/assets/4096_bayer_rgb1.frag @@ -12,268 +12,7 @@ varying vec4 v_color; varying vec2 v_texCoords; uniform sampler2D u_texture; - -vec4 bayerTex[256] = vec4[]( -vec4(111, 82, 65, 205), -vec4( 65, 133, 0, 255), -vec4( 88, 9, 134, 25), -vec4(231, 39, 185, 105), -vec4(152, 139, 66, 161), -vec4(170, 203, 35, 91), -vec4( 78, 3, 115, 247), -vec4(193, 59, 144, 22), -vec4(156, 148, 157, 165), -vec4(131, 233, 245, 114), -vec4(202, 132, 57, 192), -vec4(162, 31, 15, 30), -vec4( 17, 63, 83, 217), -vec4(189, 214, 39, 147), -vec4(168, 106, 129, 71), -vec4( 1, 195, 243, 135), -vec4(213, 232, 75, 173), -vec4(175, 161, 233, 122), -vec4( 26, 213, 203, 142), -vec4(118, 251, 21, 234), -vec4( 7, 70, 86, 1), -vec4(222, 113, 162, 218), -vec4(105, 244, 249, 150), -vec4( 51, 124, 49, 186), -vec4(229, 183, 11, 41), -vec4( 4, 22, 90, 65), -vec4( 43, 115, 186, 252), -vec4(141, 166, 165, 131), -vec4(221, 239, 202, 53), -vec4( 69, 1, 228, 20), -vec4(230, 123, 173, 226), -vec4(130, 43, 29, 39), -vec4(251, 28, 124, 15), -vec4( 79, 90, 98, 216), -vec4(137, 53, 145, 47), -vec4(203, 197, 225, 198), -vec4(190, 25, 54, 60), -vec4( 38, 172, 130, 133), -vec4(143, 46, 218, 75), -vec4(243, 97, 105, 124), -vec4(115, 218, 201, 227), -vec4( 81, 68, 123, 84), -vec4( 97, 207, 32, 4), -vec4(254, 84, 133, 179), -vec4( 55, 50, 99, 79), -vec4(119, 184, 9, 160), -vec4( 92, 141, 108, 189), -vec4( 47, 246, 194, 86), -vec4(185, 67, 48, 111), -vec4( 14, 147, 170, 157), -vec4( 54, 122, 12, 70), -vec4(235, 105, 110, 98), -vec4( 70, 155, 197, 180), -vec4( 94, 85, 177, 31), -vec4( 21, 224, 4, 239), -vec4(167, 30, 78, 14), -vec4(183, 162, 172, 106), -vec4(212, 6, 234, 209), -vec4(151, 254, 221, 144), -vec4(178, 103, 73, 235), -vec4( 23, 151, 250, 101), -vec4(205, 221, 60, 119), -vec4(154, 13, 156, 248), -vec4( 31, 168, 217, 59), -vec4(144, 209, 238, 238), -vec4(223, 227, 37, 177), -vec4(165, 182, 154, 11), -vec4(108, 5, 254, 249), -vec4(153, 238, 74, 164), -vec4(253, 128, 30, 112), -vec4(126, 190, 239, 201), -vec4( 59, 145, 139, 49), -vec4( 11, 78, 63, 172), -vec4( 32, 200, 20, 156), -vec4( 72, 135, 46, 27), -vec4(107, 38, 148, 44), -vec4(192, 193, 180, 196), -vec4( 6, 72, 24, 9), -vec4(242, 96, 140, 208), -vec4(102, 114, 84, 138), -vec4(199, 19, 182, 34), -vec4(122, 45, 64, 81), -vec4( 91, 79, 208, 128), -vec4( 28, 36, 92, 211), -vec4( 44, 212, 122, 23), -vec4(187, 58, 44, 83), -vec4(216, 11, 190, 139), -vec4( 85, 241, 96, 223), -vec4(198, 117, 159, 92), -vec4(232, 55, 113, 58), -vec4(136, 173, 193, 129), -vec4(238, 15, 85, 215), -vec4( 62, 125, 211, 69), -vec4(129, 243, 118, 166), -vec4(172, 54, 242, 26), -vec4( 73, 179, 6, 95), -vec4( 57, 129, 106, 224), -vec4( 8, 252, 127, 199), -vec4(247, 164, 227, 145), -vec4(209, 201, 18, 43), -vec4(173, 137, 168, 229), -vec4( 0, 71, 150, 154), -vec4(140, 177, 216, 67), -vec4(104, 102, 14, 3), -vec4(160, 41, 206, 194), -vec4(121, 229, 252, 245), -vec4( 41, 93, 128, 181), -vec4(164, 236, 1, 110), -vec4( 25, 160, 166, 241), -vec4( 86, 29, 40, 149), -vec4(225, 204, 70, 50), -vec4( 40, 143, 198, 183), -vec4(159, 231, 163, 64), -vec4(179, 104, 26, 2), -vec4(133, 91, 79, 115), -vec4( 63, 23, 188, 56), -vec4(116, 112, 58, 97), -vec4( 77, 247, 246, 187), -vec4(226, 158, 114, 254), -vec4( 50, 18, 82, 37), -vec4(249, 205, 53, 120), -vec4( 19, 150, 33, 78), -vec4( 95, 186, 224, 13), -vec4(219, 64, 103, 36), -vec4(197, 110, 55, 87), -vec4(147, 216, 230, 127), -vec4(114, 87, 95, 213), -vec4(208, 2, 137, 108), -vec4(233, 192, 251, 236), -vec4( 20, 57, 50, 169), -vec4( 84, 153, 204, 193), -vec4(149, 188, 142, 242), -vec4(240, 225, 101, 125), -vec4( 36, 48, 8, 19), -vec4(194, 86, 132, 176), -vec4( 15, 215, 232, 103), -vec4( 67, 121, 181, 162), -vec4(206, 26, 143, 220), -vec4(180, 80, 69, 140), -vec4( 74, 7, 171, 171), -vec4( 52, 140, 189, 230), -vec4(250, 42, 149, 6), -vec4( 13, 175, 215, 77), -vec4( 98, 74, 16, 155), -vec4( 68, 34, 176, 136), -vec4(195, 217, 116, 21), -vec4( 48, 14, 241, 88), -vec4(220, 66, 38, 33), -vec4(182, 171, 222, 210), -vec4( 96, 32, 175, 76), -vec4(155, 131, 71, 134), -vec4(127, 185, 41, 54), -vec4(171, 61, 158, 206), -vec4(145, 248, 91, 24), -vec4(112, 167, 22, 99), -vec4( 2, 222, 244, 202), -vec4(125, 196, 10, 62), -vec4(184, 250, 121, 188), -vec4( 35, 120, 34, 253), -vec4(139, 157, 88, 40), -vec4(106, 107, 152, 102), -vec4(255, 134, 68, 72), -vec4(123, 240, 2, 219), -vec4( 30, 118, 160, 151), -vec4( 10, 146, 89, 163), -vec4(109, 99, 210, 8), -vec4(236, 230, 27, 222), -vec4(214, 0, 196, 237), -vec4( 87, 144, 120, 148), -vec4( 37, 108, 219, 68), -vec4(246, 49, 199, 250), -vec4(228, 130, 111, 48), -vec4(158, 98, 80, 132), -vec4( 83, 60, 236, 116), -vec4(215, 24, 61, 18), -vec4(169, 237, 192, 175), -vec4( 5, 181, 231, 52), -vec4(157, 47, 97, 244), -vec4( 90, 81, 187, 184), -vec4(204, 208, 126, 109), -vec4(142, 10, 51, 61), -vec4( 53, 255, 109, 190), -vec4( 71, 73, 147, 117), -vec4( 24, 199, 240, 42), -vec4(188, 89, 3, 89), -vec4( 58, 234, 59, 10), -vec4(101, 33, 135, 182), -vec4(135, 211, 47, 158), -vec4( 27, 12, 155, 29), -vec4( 64, 149, 207, 93), -vec4(239, 88, 131, 221), -vec4( 45, 202, 42, 207), -vec4(132, 4, 13, 123), -vec4(227, 165, 138, 7), -vec4( 60, 95, 200, 141), -vec4(174, 194, 226, 45), -vec4(244, 40, 19, 251), -vec4(163, 178, 253, 96), -vec4(201, 52, 183, 28), -vec4(120, 163, 77, 197), -vec4(224, 20, 104, 168), -vec4( 12, 180, 164, 126), -vec4(166, 154, 248, 107), -vec4(196, 76, 179, 225), -vec4(207, 189, 28, 195), -vec4( 93, 170, 100, 143), -vec4(117, 228, 167, 82), -vec4(191, 69, 220, 159), -vec4( 75, 142, 112, 32), -vec4(210, 245, 56, 200), -vec4( 34, 27, 31, 85), -vec4(113, 152, 81, 16), -vec4( 80, 219, 169, 130), -vec4( 3, 127, 62, 231), -vec4(134, 109, 136, 146), -vec4( 42, 136, 45, 80), -vec4(148, 210, 205, 243), -vec4(237, 65, 17, 214), -vec4( 76, 119, 87, 38), -vec4( 49, 242, 223, 73), -vec4( 9, 51, 67, 246), -vec4(150, 111, 5, 0), -vec4(176, 37, 255, 63), -vec4( 22, 126, 76, 233), -vec4(100, 56, 146, 113), -vec4(146, 223, 214, 153), -vec4( 16, 116, 247, 228), -vec4(186, 62, 119, 170), -vec4(217, 77, 153, 212), -vec4( 99, 16, 7, 66), -vec4(252, 226, 94, 178), -vec4(177, 35, 229, 5), -vec4( 89, 249, 174, 137), -vec4(110, 101, 125, 57), -vec4(181, 8, 36, 17), -vec4(124, 220, 141, 174), -vec4(218, 138, 195, 121), -vec4(234, 17, 117, 46), -vec4( 56, 253, 184, 167), -vec4(248, 206, 23, 185), -vec4(200, 21, 161, 94), -vec4(161, 100, 178, 55), -vec4(241, 187, 43, 74), -vec4( 46, 169, 102, 191), -vec4(128, 235, 235, 35), -vec4( 61, 94, 209, 118), -vec4( 29, 159, 191, 51), -vec4(211, 191, 25, 204), -vec4( 18, 83, 72, 100), -vec4( 66, 44, 213, 232), -vec4(245, 174, 107, 152), -vec4( 33, 198, 237, 90), -vec4(103, 92, 151, 203), -vec4( 82, 156, 52, 104), -vec4(138, 75, 212, 240), -vec4( 39, 176, 93, 12) -); - -float bayerSize = 16.0; -float bayerDivider = bayerSize * bayerSize; +uniform sampler2D u_pattern; float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 vec4 quantiser = vec4(quant); @@ -282,24 +21,17 @@ vec4 quantiserDivider = vec4(1.0 / quant); vec2 boolean = vec2(0.0, 1.0); vec4 halfvec = vec4(0.5); +vec2 patternsize = vec2(1.0/512.0, 1.0/512.0); + vec4 nearestColour(vec4 inColor) { return floor(quantiser * inColor + halfvec) * quantiserDivider; } vec4 getDitherredDot(vec4 inColor) { - vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - int index = int(entry.y) * int(bayerSize) + int(entry.x); - vec4 bayerThreshold = vec4(bayerTex[index] / bayerDivider - 0.5); + vec4 bayerThreshold = vec4(texture2D(u_pattern, gl_FragCoord.xy * patternsize) - 0.5); return nearestColour(inColor + bayerThreshold * quantiserDivider); } -vec4 gammaIn(vec4 col) { - return pow(col, vec4(2.2)); -} - -vec4 gammaOut(vec4 col) { - return pow(col, vec4(1.0 / 2.2)); -} void main(void) { // create texture coordinates based on pixelSize // diff --git a/assets/4096_bayer_skyboxfill.frag b/assets/4096_bayer_skyboxfill.frag index dee44d95e..2762c5c8a 100644 --- a/assets/4096_bayer_skyboxfill.frag +++ b/assets/4096_bayer_skyboxfill.frag @@ -7,306 +7,50 @@ varying vec4 v_color; varying vec2 v_texCoords; uniform sampler2D u_texture; +uniform sampler2D u_pattern; -uniform vec3 topColor; -uniform vec3 bottomColor; +uniform vec4 topColor; +uniform vec4 bottomColor; uniform float parallax = 0.0; // +1.0: all top col, -1.0: all bototm col, 0.0: normal grad uniform float parallax_size = 1.0/3.0; // 0: no parallax // inverted zoom; this value must set to (1f/zoom) uniform float zoomInv = 1.0; -vec4 bayerTex[256] = vec4[]( -vec4(205, 111, 82, 65), -vec4(255, 65, 133, 0), -vec4( 25, 88, 9, 134), -vec4(105, 231, 39, 185), -vec4(161, 152, 139, 66), -vec4( 91, 170, 203, 35), -vec4(247, 78, 3, 115), -vec4( 22, 193, 59, 144), -vec4(165, 156, 148, 157), -vec4(114, 131, 233, 245), -vec4(192, 202, 132, 57), -vec4( 30, 162, 31, 15), -vec4(217, 17, 63, 83), -vec4(147, 189, 214, 39), -vec4( 71, 168, 106, 129), -vec4(135, 1, 195, 243), -vec4(173, 213, 232, 75), -vec4(122, 175, 161, 233), -vec4(142, 26, 213, 203), -vec4(234, 118, 251, 21), -vec4( 1, 7, 70, 86), -vec4(218, 222, 113, 162), -vec4(150, 105, 244, 249), -vec4(186, 51, 124, 49), -vec4( 41, 229, 183, 11), -vec4( 65, 4, 22, 90), -vec4(252, 43, 115, 186), -vec4(131, 141, 166, 165), -vec4( 53, 221, 239, 202), -vec4( 20, 69, 1, 228), -vec4(226, 230, 123, 173), -vec4( 39, 130, 43, 29), -vec4( 15, 251, 28, 124), -vec4(216, 79, 90, 98), -vec4( 47, 137, 53, 145), -vec4(198, 203, 197, 225), -vec4( 60, 190, 25, 54), -vec4(133, 38, 172, 130), -vec4( 75, 143, 46, 218), -vec4(124, 243, 97, 105), -vec4(227, 115, 218, 201), -vec4( 84, 81, 68, 123), -vec4( 4, 97, 207, 32), -vec4(179, 254, 84, 133), -vec4( 79, 55, 50, 99), -vec4(160, 119, 184, 9), -vec4(189, 92, 141, 108), -vec4( 86, 47, 246, 194), -vec4(111, 185, 67, 48), -vec4(157, 14, 147, 170), -vec4( 70, 54, 122, 12), -vec4( 98, 235, 105, 110), -vec4(180, 70, 155, 197), -vec4( 31, 94, 85, 177), -vec4(239, 21, 224, 4), -vec4( 14, 167, 30, 78), -vec4(106, 183, 162, 172), -vec4(209, 212, 6, 234), -vec4(144, 151, 254, 221), -vec4(235, 178, 103, 73), -vec4(101, 23, 151, 250), -vec4(119, 205, 221, 60), -vec4(248, 154, 13, 156), -vec4( 59, 31, 168, 217), -vec4(238, 144, 209, 238), -vec4(177, 223, 227, 37), -vec4( 11, 165, 182, 154), -vec4(249, 108, 5, 254), -vec4(164, 153, 238, 74), -vec4(112, 253, 128, 30), -vec4(201, 126, 190, 239), -vec4( 49, 59, 145, 139), -vec4(172, 11, 78, 63), -vec4(156, 32, 200, 20), -vec4( 27, 72, 135, 46), -vec4( 44, 107, 38, 148), -vec4(196, 192, 193, 180), -vec4( 9, 6, 72, 24), -vec4(208, 242, 96, 140), -vec4(138, 102, 114, 84), -vec4( 34, 199, 19, 182), -vec4( 81, 122, 45, 64), -vec4(128, 91, 79, 208), -vec4(211, 28, 36, 92), -vec4( 23, 44, 212, 122), -vec4( 83, 187, 58, 44), -vec4(139, 216, 11, 190), -vec4(223, 85, 241, 96), -vec4( 92, 198, 117, 159), -vec4( 58, 232, 55, 113), -vec4(129, 136, 173, 193), -vec4(215, 238, 15, 85), -vec4( 69, 62, 125, 211), -vec4(166, 129, 243, 118), -vec4( 26, 172, 54, 242), -vec4( 95, 73, 179, 6), -vec4(224, 57, 129, 106), -vec4(199, 8, 252, 127), -vec4(145, 247, 164, 227), -vec4( 43, 209, 201, 18), -vec4(229, 173, 137, 168), -vec4(154, 0, 71, 150), -vec4( 67, 140, 177, 216), -vec4( 3, 104, 102, 14), -vec4(194, 160, 41, 206), -vec4(245, 121, 229, 252), -vec4(181, 41, 93, 128), -vec4(110, 164, 236, 1), -vec4(241, 25, 160, 166), -vec4(149, 86, 29, 40), -vec4( 50, 225, 204, 70), -vec4(183, 40, 143, 198), -vec4( 64, 159, 231, 163), -vec4( 2, 179, 104, 26), -vec4(115, 133, 91, 79), -vec4( 56, 63, 23, 188), -vec4( 97, 116, 112, 58), -vec4(187, 77, 247, 246), -vec4(254, 226, 158, 114), -vec4( 37, 50, 18, 82), -vec4(120, 249, 205, 53), -vec4( 78, 19, 150, 33), -vec4( 13, 95, 186, 224), -vec4( 36, 219, 64, 103), -vec4( 87, 197, 110, 55), -vec4(127, 147, 216, 230), -vec4(213, 114, 87, 95), -vec4(108, 208, 2, 137), -vec4(236, 233, 192, 251), -vec4(169, 20, 57, 50), -vec4(193, 84, 153, 204), -vec4(242, 149, 188, 142), -vec4(125, 240, 225, 101), -vec4( 19, 36, 48, 8), -vec4(176, 194, 86, 132), -vec4(103, 15, 215, 232), -vec4(162, 67, 121, 181), -vec4(220, 206, 26, 143), -vec4(140, 180, 80, 69), -vec4(171, 74, 7, 171), -vec4(230, 52, 140, 189), -vec4( 6, 250, 42, 149), -vec4( 77, 13, 175, 215), -vec4(155, 98, 74, 16), -vec4(136, 68, 34, 176), -vec4( 21, 195, 217, 116), -vec4( 88, 48, 14, 241), -vec4( 33, 220, 66, 38), -vec4(210, 182, 171, 222), -vec4( 76, 96, 32, 175), -vec4(134, 155, 131, 71), -vec4( 54, 127, 185, 41), -vec4(206, 171, 61, 158), -vec4( 24, 145, 248, 91), -vec4( 99, 112, 167, 22), -vec4(202, 2, 222, 244), -vec4( 62, 125, 196, 10), -vec4(188, 184, 250, 121), -vec4(253, 35, 120, 34), -vec4( 40, 139, 157, 88), -vec4(102, 106, 107, 152), -vec4( 72, 255, 134, 68), -vec4(219, 123, 240, 2), -vec4(151, 30, 118, 160), -vec4(163, 10, 146, 89), -vec4( 8, 109, 99, 210), -vec4(222, 236, 230, 27), -vec4(237, 214, 0, 196), -vec4(148, 87, 144, 120), -vec4( 68, 37, 108, 219), -vec4(250, 246, 49, 199), -vec4( 48, 228, 130, 111), -vec4(132, 158, 98, 80), -vec4(116, 83, 60, 236), -vec4( 18, 215, 24, 61), -vec4(175, 169, 237, 192), -vec4( 52, 5, 181, 231), -vec4(244, 157, 47, 97), -vec4(184, 90, 81, 187), -vec4(109, 204, 208, 126), -vec4( 61, 142, 10, 51), -vec4(190, 53, 255, 109), -vec4(117, 71, 73, 147), -vec4( 42, 24, 199, 240), -vec4( 89, 188, 89, 3), -vec4( 10, 58, 234, 59), -vec4(182, 101, 33, 135), -vec4(158, 135, 211, 47), -vec4( 29, 27, 12, 155), -vec4( 93, 64, 149, 207), -vec4(221, 239, 88, 131), -vec4(207, 45, 202, 42), -vec4(123, 132, 4, 13), -vec4( 7, 227, 165, 138), -vec4(141, 60, 95, 200), -vec4( 45, 174, 194, 226), -vec4(251, 244, 40, 19), -vec4( 96, 163, 178, 253), -vec4( 28, 201, 52, 183), -vec4(197, 120, 163, 77), -vec4(168, 224, 20, 104), -vec4(126, 12, 180, 164), -vec4(107, 166, 154, 248), -vec4(225, 196, 76, 179), -vec4(195, 207, 189, 28), -vec4(143, 93, 170, 100), -vec4( 82, 117, 228, 167), -vec4(159, 191, 69, 220), -vec4( 32, 75, 142, 112), -vec4(200, 210, 245, 56), -vec4( 85, 34, 27, 31), -vec4( 16, 113, 152, 81), -vec4(130, 80, 219, 169), -vec4(231, 3, 127, 62), -vec4(146, 134, 109, 136), -vec4( 80, 42, 136, 45), -vec4(243, 148, 210, 205), -vec4(214, 237, 65, 17), -vec4( 38, 76, 119, 87), -vec4( 73, 49, 242, 223), -vec4(246, 9, 51, 67), -vec4( 0, 150, 111, 5), -vec4( 63, 176, 37, 255), -vec4(233, 22, 126, 76), -vec4(113, 100, 56, 146), -vec4(153, 146, 223, 214), -vec4(228, 16, 116, 247), -vec4(170, 186, 62, 119), -vec4(212, 217, 77, 153), -vec4( 66, 99, 16, 7), -vec4(178, 252, 226, 94), -vec4( 5, 177, 35, 229), -vec4(137, 89, 249, 174), -vec4( 57, 110, 101, 125), -vec4( 17, 181, 8, 36), -vec4(174, 124, 220, 141), -vec4(121, 218, 138, 195), -vec4( 46, 234, 17, 117), -vec4(167, 56, 253, 184), -vec4(185, 248, 206, 23), -vec4( 94, 200, 21, 161), -vec4( 55, 161, 100, 178), -vec4( 74, 241, 187, 43), -vec4(191, 46, 169, 102), -vec4( 35, 128, 235, 235), -vec4(118, 61, 94, 209), -vec4( 51, 29, 159, 191), -vec4(204, 211, 191, 25), -vec4(100, 18, 83, 72), -vec4(232, 66, 44, 213), -vec4(152, 245, 174, 107), -vec4( 90, 33, 198, 237), -vec4(203, 103, 92, 151), -vec4(104, 82, 156, 52), -vec4(240, 138, 75, 212), -vec4( 12, 39, 176, 93) -); - -float bayerSize = 16.0; -float bayerDivider = bayerSize * bayerSize; float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 -vec4 quantizer = vec4(quant); -vec4 quantizerDivider = vec4(1.0 / quant); +vec4 quantiser = vec4(quant); +vec4 quantiserDivider = vec4(1.0 / quant); vec2 boolean = vec2(0.0, 1.0); vec4 halfvec = vec4(0.5); +vec2 patternsize = vec2(1.0/512.0, 1.0/512.0); + vec4 nearestColour(vec4 inColor) { - return floor(quantizer * inColor + halfvec) * quantizerDivider; + return floor(quantiser * inColor + halfvec) * quantiserDivider; } +vec4 getDitherredDot(vec4 inColor) { + vec4 bayerThreshold = vec4(texture2D(u_pattern, gl_FragCoord.xy * patternsize) - 0.5); + return nearestColour(inColor + bayerThreshold * quantiserDivider); +} + + void main(void) { float scale = v_texCoords.y * (1.0 - parallax_size) + (parallax_size / 2.0) + (parallax * parallax_size / 2.0); float zoomSamplePoint = (1.0 - zoomInv) / 2.0;// will never quite exceed 0.5 // I don't even know if it works, and also not sure if I actually want it - vec3 newBottom = mix(bottomColor, topColor, zoomSamplePoint); - vec3 newTop = mix(topColor, bottomColor, zoomSamplePoint); + vec4 newBottom = mix(bottomColor, topColor, zoomSamplePoint); + vec4 newTop = mix(topColor, bottomColor, zoomSamplePoint); - vec4 inColor = v_color * vec4(mix(newBottom, newTop, scale), 1.0); - vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - int index = int(entry.y) * int(bayerSize) + int(entry.x); + vec4 inColor = v_color * mix(newBottom, newTop, scale); + vec4 selvec = getDitherredDot(inColor); - vec4 bayerThreshold = vec4(bayerTex[index] / bayerDivider - 0.5); - vec4 selvec = nearestColour(inColor + bayerThreshold * quantizerDivider); - - gl_FragColor = selvec * boolean.yyyx + inColor * boolean.xxxy; // use quantised RGB but not the A + gl_FragColor = selvec; } /* diff --git a/assets/LDR_512_RGBA_0.tga b/assets/LDR_512_RGBA_0.tga new file mode 100644 index 000000000..ec34f50d4 --- /dev/null +++ b/assets/LDR_512_RGBA_0.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c83b05f6605e56a2f2af4a9c5b3821d11426e60517e3ec81f6edac87ecc6ffd +size 1048620 diff --git a/assets/alphadither.frag b/assets/alphadither.frag index 550fe571a..125ac1fd8 100644 --- a/assets/alphadither.frag +++ b/assets/alphadither.frag @@ -1,17 +1,22 @@ #version 120 #ifdef GL_ES -precision mediump float; + precision mediump float; #endif varying vec4 v_color; varying vec2 v_texCoords; uniform sampler2D u_texture; -//int bayer[14 * 14] = int[](131,187,8,78,50,18,134,89,155,102,29,95,184,73,22,86,113,171,142,105,34,166,9,60,151,128,40,110,168,137,45,28,64,188,82,54,124,189,80,13,156,56,7,61,186,121,154,6,108,177,24,100,38,176,93,123,83,148,96,17,88,133,44,145,69,161,139,72,30,181,115,27,163,47,178,65,164,14,120,48,5,127,153,52,190,58,126,81,116,21,106,77,173,92,191,63,99,12,76,144,4,185,37,149,192,39,135,23,117,31,170,132,35,172,103,66,129,79,3,97,57,159,70,141,53,94,114,20,49,158,19,146,169,122,183,11,104,180,2,165,152,87,182,118,91,42,67,25,84,147,43,85,125,68,16,136,71,10,193,112,160,138,51,111,162,26,194,46,174,107,41,143,33,74,1,101,195,15,75,140,109,90,32,62,157,98,167,119,179,59,36,130,175,55,0,150); -//float bayerSize = 14.0; -int bayer[4*4] = int[](0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5); -float bayerSize = 4.0; -float bayerDivider = bayerSize * bayerSize; +int bayer[36] = int[]( +192,78,21,120,163,14, +234,142,184,248,56,106, +64,7,92,35,149,206, +128,170,220,199,85,28, +241,49,113,0,135,177, +42,156,213,71,227,99 +); +float bayerSize = 6.0; +float bayerDivider = 256; vec2 boolean = vec2(0.0, 1.0); @@ -19,12 +24,10 @@ void main() { vec4 inColor = v_color * (texture2D(u_texture, v_texCoords)); vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - float bayerThreshold = bayer[int(entry.y) * int(bayerSize) + int(entry.x)] / bayerDivider; + float bayerThreshold = float(bayer[int(entry.y) * int(bayerSize) + int(entry.x)]) / bayerDivider; float alpha = inColor.a; - vec4 selvec0 = vec4(0.0, 0.0, 0.0, (alpha > 1.0 / bayerDivider) ? 1.0 : 0.0); - vec4 selvec = vec4(1.0, 1.0, 1.0, (alpha >= bayerThreshold) ? 1.0 : 0.0); + vec4 selvec = vec4(0.0, 0.0, 0.0, (alpha > bayerThreshold) ? 1.0 : 0.0); - vec4 out0 = inColor * boolean.yyyx + selvec0; - gl_FragColor = out0 * selvec; + gl_FragColor = inColor * boolean.yyyx + selvec; } \ No newline at end of file diff --git a/assets/blur_dither.frag b/assets/blur_dither.frag index b8298937c..6dc06ad3d 100644 --- a/assets/blur_dither.frag +++ b/assets/blur_dither.frag @@ -1,274 +1,16 @@ +/** + * Blue Noise texture created by Christoph Peters, released under CC0 + * http://momentsingraphics.de/BlueNoise.html + */ +#version 120 #ifdef GL_ES precision mediump float; #endif - varying vec4 v_color; varying vec2 v_texCoords; uniform sampler2D u_texture; - - -vec4 bayerTex[256] = vec4[]( -vec4( 82, 65, 205, 111), -vec4(133, 0, 255, 65), -vec4( 9, 134, 25, 88), -vec4( 39, 185, 105, 231), -vec4(139, 66, 161, 152), -vec4(203, 35, 91, 170), -vec4( 3, 115, 247, 78), -vec4( 59, 144, 22, 193), -vec4(148, 157, 165, 156), -vec4(233, 245, 114, 131), -vec4(132, 57, 192, 202), -vec4( 31, 15, 30, 162), -vec4( 63, 83, 217, 17), -vec4(214, 39, 147, 189), -vec4(106, 129, 71, 168), -vec4(195, 243, 135, 1), -vec4(232, 75, 173, 213), -vec4(161, 233, 122, 175), -vec4(213, 203, 142, 26), -vec4(251, 21, 234, 118), -vec4( 70, 86, 1, 7), -vec4(113, 162, 218, 222), -vec4(244, 249, 150, 105), -vec4(124, 49, 186, 51), -vec4(183, 11, 41, 229), -vec4( 22, 90, 65, 4), -vec4(115, 186, 252, 43), -vec4(166, 165, 131, 141), -vec4(239, 202, 53, 221), -vec4( 1, 228, 20, 69), -vec4(123, 173, 226, 230), -vec4( 43, 29, 39, 130), -vec4( 28, 124, 15, 251), -vec4( 90, 98, 216, 79), -vec4( 53, 145, 47, 137), -vec4(197, 225, 198, 203), -vec4( 25, 54, 60, 190), -vec4(172, 130, 133, 38), -vec4( 46, 218, 75, 143), -vec4( 97, 105, 124, 243), -vec4(218, 201, 227, 115), -vec4( 68, 123, 84, 81), -vec4(207, 32, 4, 97), -vec4( 84, 133, 179, 254), -vec4( 50, 99, 79, 55), -vec4(184, 9, 160, 119), -vec4(141, 108, 189, 92), -vec4(246, 194, 86, 47), -vec4( 67, 48, 111, 185), -vec4(147, 170, 157, 14), -vec4(122, 12, 70, 54), -vec4(105, 110, 98, 235), -vec4(155, 197, 180, 70), -vec4( 85, 177, 31, 94), -vec4(224, 4, 239, 21), -vec4( 30, 78, 14, 167), -vec4(162, 172, 106, 183), -vec4( 6, 234, 209, 212), -vec4(254, 221, 144, 151), -vec4(103, 73, 235, 178), -vec4(151, 250, 101, 23), -vec4(221, 60, 119, 205), -vec4( 13, 156, 248, 154), -vec4(168, 217, 59, 31), -vec4(209, 238, 238, 144), -vec4(227, 37, 177, 223), -vec4(182, 154, 11, 165), -vec4( 5, 254, 249, 108), -vec4(238, 74, 164, 153), -vec4(128, 30, 112, 253), -vec4(190, 239, 201, 126), -vec4(145, 139, 49, 59), -vec4( 78, 63, 172, 11), -vec4(200, 20, 156, 32), -vec4(135, 46, 27, 72), -vec4( 38, 148, 44, 107), -vec4(193, 180, 196, 192), -vec4( 72, 24, 9, 6), -vec4( 96, 140, 208, 242), -vec4(114, 84, 138, 102), -vec4( 19, 182, 34, 199), -vec4( 45, 64, 81, 122), -vec4( 79, 208, 128, 91), -vec4( 36, 92, 211, 28), -vec4(212, 122, 23, 44), -vec4( 58, 44, 83, 187), -vec4( 11, 190, 139, 216), -vec4(241, 96, 223, 85), -vec4(117, 159, 92, 198), -vec4( 55, 113, 58, 232), -vec4(173, 193, 129, 136), -vec4( 15, 85, 215, 238), -vec4(125, 211, 69, 62), -vec4(243, 118, 166, 129), -vec4( 54, 242, 26, 172), -vec4(179, 6, 95, 73), -vec4(129, 106, 224, 57), -vec4(252, 127, 199, 8), -vec4(164, 227, 145, 247), -vec4(201, 18, 43, 209), -vec4(137, 168, 229, 173), -vec4( 71, 150, 154, 0), -vec4(177, 216, 67, 140), -vec4(102, 14, 3, 104), -vec4( 41, 206, 194, 160), -vec4(229, 252, 245, 121), -vec4( 93, 128, 181, 41), -vec4(236, 1, 110, 164), -vec4(160, 166, 241, 25), -vec4( 29, 40, 149, 86), -vec4(204, 70, 50, 225), -vec4(143, 198, 183, 40), -vec4(231, 163, 64, 159), -vec4(104, 26, 2, 179), -vec4( 91, 79, 115, 133), -vec4( 23, 188, 56, 63), -vec4(112, 58, 97, 116), -vec4(247, 246, 187, 77), -vec4(158, 114, 254, 226), -vec4( 18, 82, 37, 50), -vec4(205, 53, 120, 249), -vec4(150, 33, 78, 19), -vec4(186, 224, 13, 95), -vec4( 64, 103, 36, 219), -vec4(110, 55, 87, 197), -vec4(216, 230, 127, 147), -vec4( 87, 95, 213, 114), -vec4( 2, 137, 108, 208), -vec4(192, 251, 236, 233), -vec4( 57, 50, 169, 20), -vec4(153, 204, 193, 84), -vec4(188, 142, 242, 149), -vec4(225, 101, 125, 240), -vec4( 48, 8, 19, 36), -vec4( 86, 132, 176, 194), -vec4(215, 232, 103, 15), -vec4(121, 181, 162, 67), -vec4( 26, 143, 220, 206), -vec4( 80, 69, 140, 180), -vec4( 7, 171, 171, 74), -vec4(140, 189, 230, 52), -vec4( 42, 149, 6, 250), -vec4(175, 215, 77, 13), -vec4( 74, 16, 155, 98), -vec4( 34, 176, 136, 68), -vec4(217, 116, 21, 195), -vec4( 14, 241, 88, 48), -vec4( 66, 38, 33, 220), -vec4(171, 222, 210, 182), -vec4( 32, 175, 76, 96), -vec4(131, 71, 134, 155), -vec4(185, 41, 54, 127), -vec4( 61, 158, 206, 171), -vec4(248, 91, 24, 145), -vec4(167, 22, 99, 112), -vec4(222, 244, 202, 2), -vec4(196, 10, 62, 125), -vec4(250, 121, 188, 184), -vec4(120, 34, 253, 35), -vec4(157, 88, 40, 139), -vec4(107, 152, 102, 106), -vec4(134, 68, 72, 255), -vec4(240, 2, 219, 123), -vec4(118, 160, 151, 30), -vec4(146, 89, 163, 10), -vec4( 99, 210, 8, 109), -vec4(230, 27, 222, 236), -vec4( 0, 196, 237, 214), -vec4(144, 120, 148, 87), -vec4(108, 219, 68, 37), -vec4( 49, 199, 250, 246), -vec4(130, 111, 48, 228), -vec4( 98, 80, 132, 158), -vec4( 60, 236, 116, 83), -vec4( 24, 61, 18, 215), -vec4(237, 192, 175, 169), -vec4(181, 231, 52, 5), -vec4( 47, 97, 244, 157), -vec4( 81, 187, 184, 90), -vec4(208, 126, 109, 204), -vec4( 10, 51, 61, 142), -vec4(255, 109, 190, 53), -vec4( 73, 147, 117, 71), -vec4(199, 240, 42, 24), -vec4( 89, 3, 89, 188), -vec4(234, 59, 10, 58), -vec4( 33, 135, 182, 101), -vec4(211, 47, 158, 135), -vec4( 12, 155, 29, 27), -vec4(149, 207, 93, 64), -vec4( 88, 131, 221, 239), -vec4(202, 42, 207, 45), -vec4( 4, 13, 123, 132), -vec4(165, 138, 7, 227), -vec4( 95, 200, 141, 60), -vec4(194, 226, 45, 174), -vec4( 40, 19, 251, 244), -vec4(178, 253, 96, 163), -vec4( 52, 183, 28, 201), -vec4(163, 77, 197, 120), -vec4( 20, 104, 168, 224), -vec4(180, 164, 126, 12), -vec4(154, 248, 107, 166), -vec4( 76, 179, 225, 196), -vec4(189, 28, 195, 207), -vec4(170, 100, 143, 93), -vec4(228, 167, 82, 117), -vec4( 69, 220, 159, 191), -vec4(142, 112, 32, 75), -vec4(245, 56, 200, 210), -vec4( 27, 31, 85, 34), -vec4(152, 81, 16, 113), -vec4(219, 169, 130, 80), -vec4(127, 62, 231, 3), -vec4(109, 136, 146, 134), -vec4(136, 45, 80, 42), -vec4(210, 205, 243, 148), -vec4( 65, 17, 214, 237), -vec4(119, 87, 38, 76), -vec4(242, 223, 73, 49), -vec4( 51, 67, 246, 9), -vec4(111, 5, 0, 150), -vec4( 37, 255, 63, 176), -vec4(126, 76, 233, 22), -vec4( 56, 146, 113, 100), -vec4(223, 214, 153, 146), -vec4(116, 247, 228, 16), -vec4( 62, 119, 170, 186), -vec4( 77, 153, 212, 217), -vec4( 16, 7, 66, 99), -vec4(226, 94, 178, 252), -vec4( 35, 229, 5, 177), -vec4(249, 174, 137, 89), -vec4(101, 125, 57, 110), -vec4( 8, 36, 17, 181), -vec4(220, 141, 174, 124), -vec4(138, 195, 121, 218), -vec4( 17, 117, 46, 234), -vec4(253, 184, 167, 56), -vec4(206, 23, 185, 248), -vec4( 21, 161, 94, 200), -vec4(100, 178, 55, 161), -vec4(187, 43, 74, 241), -vec4(169, 102, 191, 46), -vec4(235, 235, 35, 128), -vec4( 94, 209, 118, 61), -vec4(159, 191, 51, 29), -vec4(191, 25, 204, 211), -vec4( 83, 72, 100, 18), -vec4( 44, 213, 232, 66), -vec4(174, 107, 152, 245), -vec4(198, 237, 90, 33), -vec4( 92, 151, 203, 103), -vec4(156, 52, 104, 82), -vec4( 75, 212, 240, 138), -vec4(176, 93, 12, 39) -); - -float bayerSize = 16.0; -float bayerDivider = bayerSize * bayerSize; +uniform sampler2D u_pattern; float quant = 63.0; // 64 steps -> 63.0; 256 steps -> 255.0 vec4 quantiser = vec4(quant); @@ -277,17 +19,18 @@ vec4 quantiserDivider = vec4(1.0 / quant); vec2 boolean = vec2(0.0, 1.0); vec4 halfvec = vec4(0.5); +vec2 patternsize = vec2(1.0/512.0, 1.0/512.0); + vec4 nearestColour(vec4 inColor) { return floor(quantiser * inColor + halfvec) * quantiserDivider; } vec4 getDitherredDot(vec4 inColor) { - vec2 entry = mod(gl_FragCoord.xy, vec2(bayerSize, bayerSize)); - int index = int(entry.y) * int(bayerSize) + int(entry.x); - vec4 bayerThreshold = vec4(bayerTex[index] / bayerDivider - 0.5); + vec4 bayerThreshold = vec4(texture2D(u_pattern, gl_FragCoord.xy * patternsize) - 0.5); return nearestColour(inColor + bayerThreshold * quantiserDivider); } + uniform vec2 iResolution; uniform float flip; uniform vec2 direction; @@ -311,5 +54,5 @@ void main() { vec4 inColor = blur(u_texture, uv, iResolution.xy, direction); vec4 selvec = getDitherredDot(inColor); - gl_FragColor = selvec * boolean.yyyx + inColor * boolean.xxxy; // use quantised RGB but not the A + gl_FragColor = selvec; // quantise all four RGBA } \ No newline at end of file diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index b76333c3c..3531cf1a6 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -215,6 +215,7 @@ public class App implements ApplicationListener { + public static Texture ditherPattern; private static ShaderProgram shaderBayerSkyboxFill; // ONLY to be used by the splash screen public static ShaderProgram shaderHicolour; public static ShaderProgram shaderPassthruRGB; @@ -405,6 +406,7 @@ public class App implements ApplicationListener { CommonResourcePool.INSTANCE.addToLoadingList("title_health2", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_distance.tga"))); // set GL graphics constants + ditherPattern = new Texture(Gdx.files.internal("assets/LDR_512_RGBA_0.tga")); shaderBayerSkyboxFill = loadShaderFromFile("assets/4096.vert", "assets/4096_bayer_skyboxfill.frag"); shaderHicolour = loadShaderFromFile("assets/4096.vert", "assets/hicolour.frag"); shaderPassthruRGB = SpriteBatch.createDefaultShader(); @@ -582,11 +584,13 @@ public class App implements ApplicationListener { } private void drawSplash() { + ditherPattern.bind(0); shaderBayerSkyboxFill.bind(); shaderBayerSkyboxFill.setUniformMatrix("u_projTrans", camera.combined); + shaderBayerSkyboxFill.setUniformi("u_texture", 0); shaderBayerSkyboxFill.setUniformf("parallax_size", 0f); - shaderBayerSkyboxFill.setUniformf("topColor", gradWhiteTop.r, gradWhiteTop.g, gradWhiteTop.b); - shaderBayerSkyboxFill.setUniformf("bottomColor", gradWhiteBottom.r, gradWhiteBottom.g, gradWhiteBottom.b); + shaderBayerSkyboxFill.setUniformf("topColor", gradWhiteTop.r, gradWhiteTop.g, gradWhiteTop.b, 1f); + shaderBayerSkyboxFill.setUniformf("bottomColor", gradWhiteBottom.r, gradWhiteBottom.g, gradWhiteBottom.b, 1f); fullscreenQuad.render(shaderBayerSkyboxFill, GL20.GL_TRIANGLES); @@ -706,6 +710,7 @@ public class App implements ApplicationListener { //FloatDrawer.INSTANCE.dispose(); + ditherPattern.dispose(); shaderBayerSkyboxFill.dispose(); shaderHicolour.dispose(); shaderPassthruRGB.dispose(); diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 95fd6c50f..e3598e9d1 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -55,6 +55,13 @@ object IngameRenderer : Disposable { private lateinit var lightTex: TextureRegion private lateinit var blurTex: TextureRegion + val ditherPattern = App.ditherPattern + + init { + ditherPattern.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Linear) + ditherPattern.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat) + } + // you must have lightMixed FBO; otherwise you'll be reading from unbaked FBO and it freaks out GPU inline fun isDither() = App.getConfigBoolean("fx_dither") @@ -469,6 +476,9 @@ object IngameRenderer : Disposable { gdxSetBlend() + ditherPattern.bind(1) + Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it + batch.inUse { blendNormal(batch) @@ -486,6 +496,7 @@ object IngameRenderer : Disposable { blendMul(batch) batch.shader = shaderRGBOnly + batch.shader.setUniformi("u_pattern", 1) batch.draw(lightTex, xrem, yrem, lightTex.regionWidth * lightmapDownsample, @@ -553,6 +564,9 @@ object IngameRenderer : Disposable { setCameraPosition(0f, 0f) val (xrem, yrem) = worldCamToRenderPos() + ditherPattern.bind(1) + Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it + batch.inUse { // draw world batch.draw(fboA.colorBufferTexture, 0f, 0f) @@ -567,6 +581,7 @@ object IngameRenderer : Disposable { blendMul(batch) batch.shader = shaderAtoGrey + batch.shader.setUniformi("u_pattern", 1) batch.draw(lightTex, xrem, yrem, lightTex.regionWidth * lightmapDownsample, @@ -664,12 +679,15 @@ object IngameRenderer : Disposable { blurWriteBuffer.inAction(camera, batch) { + blurTex.texture = blurReadBuffer.colorBufferTexture blurTex.texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) blurTex.texture.bind(0) + ditherPattern.bind(1) // order is important! shaderBlur.bind() shaderBlur.setUniformMatrix("u_projTrans", camera.combined) + shaderBlur.setUniformi("u_pattern", 1) shaderBlur.setUniformi("u_texture", 0) shaderBlur.setUniformf("iResolution", blurWriteBuffer.width.toFloat(), blurWriteBuffer.height.toFloat()) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index 3513892de..6abb281dd 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -3,20 +3,18 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.gdx.graphics.Cvec import net.torvald.random.HQRNG -import net.torvald.spriteanimation.SpriteAnimation -import net.torvald.terrarum.* +import net.torvald.terrarum.BlockCodex +import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.ModMgr +import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block -import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.Hitbox import net.torvald.terrarum.gameactors.Luminous import net.torvald.terrarum.gameparticles.ParticleVanishingSprite -import net.torvald.terrarum.gameparticles.ParticleVanishingText import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack -import java.util.* -import kotlin.math.roundToInt /** * Created by minjaesong on 2016-06-17. @@ -45,7 +43,7 @@ internal class FixtureTikiTorch : FixtureBase, Luminous { TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32) } CommonResourcePool.addToLoadingList("particles-tiki_smoke.tga") { - TextureRegionPack(ModMgr.getGdxFile("basegame", "particles/tiki_smoke.tga"), 10, 10) + TextureRegionPack(ModMgr.getGdxFile("basegame", "particles/bigger_smoke.tga"), 16, 16) } CommonResourcePool.loadAll() @@ -70,7 +68,7 @@ internal class FixtureTikiTorch : FixtureBase, Luminous { if (spawnTimer >= nextDelay) { (Terrarum.ingame as TerrarumIngame).addParticle(ParticleVanishingSprite( CommonResourcePool.getAsTextureRegionPack("particles-tiki_smoke.tga"), - 0.25f, true, hitbox.centeredX, hitbox.startY, false, rng.nextInt(256) + 25f, true, hitbox.centeredX, hitbox.startY, false, rng.nextInt(256) )) spawnTimer -= nextDelay diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index d3fb63400..b9b6168bb 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -14,6 +14,7 @@ import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.fillRect import net.torvald.terrarum.modulebasegame.IngameRenderer import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack +import org.lwjgl.opengl.GL20 /** @@ -101,12 +102,20 @@ object Toolkit : Disposable { } fun blurEntireScreen(batch: SpriteBatch, camera: OrthographicCamera, blurRadius: Float, x: Int, y: Int, w: Int, h: Int) { + + batch.end() + + IngameRenderer.ditherPattern.bind(1) + Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it + + batch.begin() for (i in 0 until 6) { val scalar = blurRadius * (1 shl i.ushr(1)) batch.shader = shaderBlur shaderBlur.setUniformMatrix("u_projTrans", camera.combined) shaderBlur.setUniformi("u_texture", 0) + shaderBlur.setUniformi("u_pattern", 1) shaderBlur.setUniformf("iResolution", w.toFloat(), h.toFloat()) IngameRenderer.shaderBlur.setUniformf("flip", 1f) if (i % 2 == 0) diff --git a/src/net/torvald/terrarum/weather/WeatherMixer.kt b/src/net/torvald/terrarum/weather/WeatherMixer.kt index e92030abd..4760603ed 100644 --- a/src/net/torvald/terrarum/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/weather/WeatherMixer.kt @@ -20,7 +20,6 @@ import net.torvald.terrarum.modulebasegame.gameactors.ParticleMegaRain import net.torvald.terrarum.utils.JsonFetcher import net.torvald.terrarum.worlddrawer.WorldCamera import java.io.File -import java.util.* /** * @@ -177,8 +176,17 @@ internal object WeatherMixer : RNGConsumer { skyboxTexture.dispose() skyboxTexture = Texture(skyboxPixmap); skyboxTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - IngameRenderer.batch.shader = if (App.getConfigBoolean("fx_dither")) IngameRenderer.shaderBayer else null + + if (App.getConfigBoolean("fx_dither")) { + IngameRenderer.ditherPattern.bind(1) + Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it + } + batch.inUse { + it.shader = if (App.getConfigBoolean("fx_dither")) IngameRenderer.shaderBayer else null + if (App.getConfigBoolean("fx_dither")) { + it.shader.setUniformi("u_pattern", 1) + } it.draw(skyboxTexture, 0f, -App.scr.halfhf, App.scr.wf, App.scr.hf * 2f) // because of how the linear filter works, we extend the image by two }