From 2e0f55567f5b945db5fe0b10704ff5d03419199b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 30 Aug 2022 01:53:16 +0900 Subject: [PATCH] halved the number of dither pattern textures and added even more variations using the swizzling --- .../basegame/sprites/fixtures/typewriter.tga | 2 +- src/net/torvald/terrarum/App.java | 2 +- .../torvald/terrarum/TerrarumPostProcessor.kt | 33 +++++++++++++++++-- .../gameactors/FixtureTypewriter.kt | 10 ++++++ src/shaders/dither_512_0.tga | 2 +- src/shaders/dither_512_1.tga | 2 +- src/shaders/dither_512_2.tga | 2 +- src/shaders/dither_512_3.tga | 2 +- src/shaders/dither_512_4.tga | 3 -- src/shaders/dither_512_5.tga | 3 -- src/shaders/dither_512_6.tga | 3 -- src/shaders/dither_512_7.tga | 3 -- src/shaders/postproc_dither.frag | 16 +++++++-- .../graphics/sprites/fixtures/typewriter.kra | 4 +-- 14 files changed, 62 insertions(+), 25 deletions(-) delete mode 100644 src/shaders/dither_512_4.tga delete mode 100644 src/shaders/dither_512_5.tga delete mode 100644 src/shaders/dither_512_6.tga delete mode 100644 src/shaders/dither_512_7.tga diff --git a/assets/mods/basegame/sprites/fixtures/typewriter.tga b/assets/mods/basegame/sprites/fixtures/typewriter.tga index 404b70be8..bbd00ace1 100644 --- a/assets/mods/basegame/sprites/fixtures/typewriter.tga +++ b/assets/mods/basegame/sprites/fixtures/typewriter.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0baeb8a3b7ccaf80e420e9ac14fb6bb8059384c4cdd5495188534ba1cbf9151b +oid sha256:2ec06a150c8fc10be97b096e694f2cbeb201175c5cb6b63406a141500dd7d559 size 24594 diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 07721146d..1335ce6f5 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -228,7 +228,7 @@ public class App implements ApplicationListener { - public static Texture[] ditherPatterns = new Texture[8]; + public static Texture[] ditherPatterns = new Texture[4]; private static ShaderProgram shaderBayerSkyboxFill; // ONLY to be used by the splash screen public static ShaderProgram shaderHicolour; public static ShaderProgram shaderDebugDiff; diff --git a/src/net/torvald/terrarum/TerrarumPostProcessor.kt b/src/net/torvald/terrarum/TerrarumPostProcessor.kt index b675acc40..decf77b07 100644 --- a/src/net/torvald/terrarum/TerrarumPostProcessor.kt +++ b/src/net/torvald/terrarum/TerrarumPostProcessor.kt @@ -160,6 +160,36 @@ object TerrarumPostProcessor : Disposable { } private val rng = HQRNG() + private val swizzler = intArrayOf( + 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, + 1,0,0,0, 0,1,0,0, 0,0,0,1, 0,0,1,0, + 1,0,0,0, 0,0,1,0, 0,1,0,0, 0,0,0,1, + 1,0,0,0, 0,0,1,0, 0,0,0,1, 0,1,0,0, + 1,0,0,0, 0,0,0,1, 0,1,0,0, 0,0,1,0, + 1,0,0,0, 0,0,0,1, 0,0,1,0, 0,1,0,0, + + 0,1,0,0, 1,0,0,0, 0,0,1,0, 0,0,0,1, + 0,1,0,0, 1,0,0,0, 0,0,0,1, 0,0,1,0, + 0,1,0,0, 0,0,1,0, 1,0,0,0, 0,0,0,1, + 0,1,0,0, 0,0,1,0, 0,0,0,1, 1,0,0,0, + 0,1,0,0, 0,0,0,1, 1,0,0,0, 0,0,1,0, + 0,1,0,0, 0,0,0,1, 0,0,1,0, 1,0,0,0, + + 0,0,1,0, 1,0,0,0, 0,1,0,0, 0,0,0,1, + 0,0,1,0, 1,0,0,0, 0,0,0,1, 0,1,0,0, + 0,0,1,0, 0,1,0,0, 1,0,0,0, 0,0,0,1, + 0,0,1,0, 0,1,0,0, 0,0,0,1, 1,0,0,0, + 0,0,1,0, 0,0,0,1, 1,0,0,0, 0,1,0,0, + 0,0,1,0, 0,0,0,1, 0,1,0,0, 1,0,0,0, + + 0,0,0,1, 1,0,0,0, 0,1,0,0, 0,0,1,0, + 0,0,0,1, 1,0,0,0, 0,0,1,0, 0,1,0,0, + 0,0,0,1, 0,1,0,0, 1,0,0,0, 0,0,1,0, + 0,0,0,1, 0,1,0,0, 0,0,1,0, 1,0,0,0, + 0,0,0,1, 0,0,1,0, 1,0,0,0, 0,1,0,0, + 0,0,0,1, 0,0,1,0, 0,1,0,0, 1,0,0,0, + ).map { it.toFloat() }.toFloatArray() + private fun postShader(projMat: Matrix4, fbo: FrameBuffer) { val shader = if (App.getConfigBoolean("fx_dither")) @@ -176,10 +206,9 @@ object TerrarumPostProcessor : Disposable { shader.setUniformi("rnd", rng.nextInt(8192), rng.nextInt(8192)) shader.setUniformi("u_pattern", 1) shader.setUniformf("quant", shaderQuant[App.getConfigInt("displaycolourdepth")] ?: 255f) + shader.setUniformMatrix4fv("swizzler", swizzler, rng.nextInt(24), 16*4) App.fullscreenQuad.render(shader, GL20.GL_TRIANGLES) - - Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt index 1c9d206c6..4405e1ba6 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt @@ -1,7 +1,9 @@ package net.torvald.terrarum.modulebasegame.gameactors +import net.torvald.spriteanimation.SheetSpriteAnimation import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang +import kotlin.math.roundToInt /** * Created by minjaesong on 2022-08-26. @@ -12,6 +14,7 @@ class FixtureTypewriter : FixtureBase { private set private var carriagePosition = 0 + private val textBuffer = Array(TYPEWRITER_ROWS) { "" } // constructor used when new typewriter is created constructor(keymapName: String) : this() { @@ -35,8 +38,15 @@ class FixtureTypewriter : FixtureBase { actorValue[AVKey.BASEMASS] = 3.6 } + override fun update(delta: Float) { + super.update(delta) + + (sprite as SheetSpriteAnimation).currentRow = 1 + (carriagePosition.toFloat() / TYPEWRITER_COLUMNS * 10).roundToInt() + } + companion object { const val TYPEWRITER_COLUMNS = 64 + const val TYPEWRITER_ROWS = 30 } } \ No newline at end of file diff --git a/src/shaders/dither_512_0.tga b/src/shaders/dither_512_0.tga index 1f265e4d3..47e3017b7 100644 --- a/src/shaders/dither_512_0.tga +++ b/src/shaders/dither_512_0.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88fb8042914f4879ab89d08af798184173814f99de7d8cb0d30188fb0b1c3a1d +oid sha256:79b17b40227a8dbe77530a3461db4d75efd91ffaa4dbb57457ed1b7b97dc8d1e size 1048594 diff --git a/src/shaders/dither_512_1.tga b/src/shaders/dither_512_1.tga index 47e3017b7..01e606ac4 100644 --- a/src/shaders/dither_512_1.tga +++ b/src/shaders/dither_512_1.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79b17b40227a8dbe77530a3461db4d75efd91ffaa4dbb57457ed1b7b97dc8d1e +oid sha256:290d8424446415652bfc446428616dc1eba1cb131ad7143ebe4e0e0c3ea5a312 size 1048594 diff --git a/src/shaders/dither_512_2.tga b/src/shaders/dither_512_2.tga index 01e606ac4..7e764bc6c 100644 --- a/src/shaders/dither_512_2.tga +++ b/src/shaders/dither_512_2.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:290d8424446415652bfc446428616dc1eba1cb131ad7143ebe4e0e0c3ea5a312 +oid sha256:4a93baf3445e9612ae2b0f03e093e01cadc2f1f3e39d456971d8807aef9f6dd7 size 1048594 diff --git a/src/shaders/dither_512_3.tga b/src/shaders/dither_512_3.tga index 34c46ee7f..59c61b476 100644 --- a/src/shaders/dither_512_3.tga +++ b/src/shaders/dither_512_3.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b08ae2fd248dda70205199cdaad97a3b813a6707be642633c09f1b34330d739f +oid sha256:df0be85f764a8b0cf889b030ba1d91cd4eb263197d9ea6e6bc8d1e07a9562d46 size 1048594 diff --git a/src/shaders/dither_512_4.tga b/src/shaders/dither_512_4.tga deleted file mode 100644 index 7e764bc6c..000000000 --- a/src/shaders/dither_512_4.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a93baf3445e9612ae2b0f03e093e01cadc2f1f3e39d456971d8807aef9f6dd7 -size 1048594 diff --git a/src/shaders/dither_512_5.tga b/src/shaders/dither_512_5.tga deleted file mode 100644 index 40962121d..000000000 --- a/src/shaders/dither_512_5.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02e1e1866e03dfad0463532be76a4d02e139454a17c87e2ea98230db65619914 -size 1048594 diff --git a/src/shaders/dither_512_6.tga b/src/shaders/dither_512_6.tga deleted file mode 100644 index 59c61b476..000000000 --- a/src/shaders/dither_512_6.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df0be85f764a8b0cf889b030ba1d91cd4eb263197d9ea6e6bc8d1e07a9562d46 -size 1048594 diff --git a/src/shaders/dither_512_7.tga b/src/shaders/dither_512_7.tga deleted file mode 100644 index aabebf35a..000000000 --- a/src/shaders/dither_512_7.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2b14fa1f06256a1a5a29fc16ff56a9a42de65a12ef0a7aaa30e7997224faa9c -size 1048594 diff --git a/src/shaders/postproc_dither.frag b/src/shaders/postproc_dither.frag index d2f23b877..05824bfef 100644 --- a/src/shaders/postproc_dither.frag +++ b/src/shaders/postproc_dither.frag @@ -22,7 +22,12 @@ varying vec2 v_texCoords; uniform sampler2D u_texture; uniform sampler2D u_pattern; uniform ivec2 rnd = ivec2(0,0); - +uniform mat4 swizzler = mat4( +1.0,0.0,0.0,0.0, +0.0,1.0,0.0,0.0, +0.0,0.0,1.0,0.0, +0.0,0.0,0.0,1.0 +); uniform float quant = 255.0; // 64 steps -> 63.0; 256 steps -> 255.0 vec2 boolean = vec2(0.0, 1.0); @@ -50,7 +55,7 @@ vec4 nearestColour(vec4 inColor) { } vec4 getDitherredDot(vec4 inColor) { - vec4 bayerThreshold = vec4(matrixNormaliser + texture2D(u_pattern, (gl_FragCoord.xy + rnd) * patternsize)); + vec4 bayerThreshold = swizzler * vec4(matrixNormaliser + texture2D(u_pattern, (gl_FragCoord.xy + rnd) * patternsize)); return nearestColour(bayerThreshold * vec4(1.0 / quant) + inColor); } @@ -71,5 +76,10 @@ void main(void) { // Dither the output vec4 graded = ycocg_to_rgb * newColour; vec4 selvec = getDitherredDot(graded); - gl_FragColor = selvec * boolean.yyyx + boolean.xxxy; // use quantised RGB but not the A + vec4 outcol = selvec * boolean.yyyx + boolean.xxxy; // use quantised RGB but not the A + + gl_FragColor = outcol; +// ivec4 bytes = ivec4(255.0 * outcol); +// ivec4 mask = ivec4(0x55); +// gl_FragColor = (bytes ^ mask) / 255.0; } \ No newline at end of file diff --git a/work_files/graphics/sprites/fixtures/typewriter.kra b/work_files/graphics/sprites/fixtures/typewriter.kra index 5f04153ac..2c5ef8b4c 100644 --- a/work_files/graphics/sprites/fixtures/typewriter.kra +++ b/work_files/graphics/sprites/fixtures/typewriter.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6acee84531bcf2a4fae6586e67227b8c54d8f3b6358ed131526b6973cc9d87e -size 118348 +oid sha256:d946b0541f102afa93fc2342bc3e0b4811914c094849aab878f6f9ce3a4c320e +size 117745