diff --git a/assets/mods/basegame/blocks/Terrain - Air tile must have black transparent tile, NOT white.txt b/assets/mods/basegame/blocks/Terrain - Air tile must have black transparent tile, NOT white.txt index d12a7d694..4b6026d38 100644 --- a/assets/mods/basegame/blocks/Terrain - Air tile must have black transparent tile, NOT white.txt +++ b/assets/mods/basegame/blocks/Terrain - Air tile must have black transparent tile, NOT white.txt @@ -1 +1,3 @@ -Air tile (tile 0,0) must have colour of 0x00000000, NOT 0xFFFFFF00. You can modify the tga file directly to correct bad exporter behaviour. \ No newline at end of file +Air tile (tile 0,0) must have colour of 0x00000000, NOT 0xFFFFFF00. You can modify the tga file directly to correct bad exporter behaviour. + +All TGA must have alpha premultiplied. \ No newline at end of file diff --git a/assets/mods/basegame/blocks/blocks.csv b/assets/mods/basegame/blocks/blocks.csv index 7a855b38b..8eabf78b6 100644 --- a/assets/mods/basegame/blocks/blocks.csv +++ b/assets/mods/basegame/blocks/blocks.csv @@ -1,5 +1,6 @@ "id";"drop";"name" ; "shdr"; "shdg"; "shdb"; "shduv";"str";"dsty";"mate";"solid";"plat";"clear";"wall";"fall";"dlfn";"vscs";"fv";"fr"; "lumr"; "lumg"; "lumb"; "lumuv" "0"; "0";"BLOCK_AIR" ;"0.0312";"0.0312";"0.0312";"0.0312"; "1"; "1";"NULL"; "0"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000" + "1"; "1";"BLOCK_MIASMA" ;"0.0312";"0.0312";"0.0312";"0.0312"; "1"; "1";"NULL"; "0"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000" "16"; "17";"BLOCK_STONE" ;"0.1252";"0.1252";"0.1252";"0.1252"; "48";"2400";"ROCK"; "1"; "0"; "0"; "1"; "0"; "0"; "N/A"; "4";"16";"0.0000";"0.0000";"0.0000";"0.0000" "17"; "17";"BLOCK_STONE_QUARRIED" ;"0.1252";"0.1252";"0.1252";"0.1252"; "48";"2400";"ROCK"; "1"; "0"; "0"; "1"; "0"; "0"; "N/A"; "4";"16";"0.0000";"0.0000";"0.0000";"0.0000" "18"; "18";"BLOCK_STONE_TILE_WHITE" ;"0.1252";"0.1252";"0.1252";"0.1252"; "48";"2400";"ROCK"; "1"; "0"; "0"; "1"; "0"; "0"; "N/A"; "4";"16";"0.0000";"0.0000";"0.0000";"0.0000" diff --git a/assets/mods/basegame/blocks/terrain.tga.gz b/assets/mods/basegame/blocks/terrain.tga.gz index 7f0f4b467..68acbef94 100644 --- a/assets/mods/basegame/blocks/terrain.tga.gz +++ b/assets/mods/basegame/blocks/terrain.tga.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ceed30eba1fa56849747a60fc427b5fdbb1209d2227a7a6beec5ef2be12f9ee -size 338613 +oid sha256:a81058e06c98e88c9b2f485843b6ce41138836214f70f9dce2d2959103b8d951 +size 338580 diff --git a/assets/mods/basegame/blocks/terrain_autumn.tga.gz b/assets/mods/basegame/blocks/terrain_autumn.tga.gz index b313ab918..bb56de3b5 100644 --- a/assets/mods/basegame/blocks/terrain_autumn.tga.gz +++ b/assets/mods/basegame/blocks/terrain_autumn.tga.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f43b5ca28c728b4252e7c4a89e5a8ca765bee70236b0f782620c33757ab811a -size 338578 +oid sha256:1fd6419700d7c5a0cf7e5d838a554f237972727fe91dbf8d8d1075770a42915f +size 338545 diff --git a/assets/mods/basegame/blocks/terrain_spring.tga.gz b/assets/mods/basegame/blocks/terrain_spring.tga.gz index c75bd3a6d..018a529fa 100644 --- a/assets/mods/basegame/blocks/terrain_spring.tga.gz +++ b/assets/mods/basegame/blocks/terrain_spring.tga.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fb01f1c7ae6ea2da405f6a8e8f382707b98a33881fe868188c02f1247e14cdc -size 338742 +oid sha256:f2df8c9d47d956f3baeb8806d24276beb82bb1fa947e4e7da4f81b4e5d6d9987 +size 338709 diff --git a/assets/mods/basegame/blocks/terrain_winter.tga.gz b/assets/mods/basegame/blocks/terrain_winter.tga.gz index bf23cebd6..3cb998642 100644 --- a/assets/mods/basegame/blocks/terrain_winter.tga.gz +++ b/assets/mods/basegame/blocks/terrain_winter.tga.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db1aef13523681938ab391829de02c8915b8ccda69defed5df281d33c253d85c -size 338602 +oid sha256:b5c3678f5f10236efa160897337f97cecfbe3386f9a61b52628999ff891e34b9 +size 338569 diff --git a/lib/gdx-backend-lwjgl-natives.jar b/lib/gdx-backend-lwjgl-natives.jar index 0a965e6ab..bd9b36e8e 100644 Binary files a/lib/gdx-backend-lwjgl-natives.jar and b/lib/gdx-backend-lwjgl-natives.jar differ diff --git a/lib/gdx-backend-lwjgl.jar b/lib/gdx-backend-lwjgl.jar index ea204f459..a783cfaaf 100644 Binary files a/lib/gdx-backend-lwjgl.jar and b/lib/gdx-backend-lwjgl.jar differ diff --git a/lib/gdx-backend-lwjgl3.jar b/lib/gdx-backend-lwjgl3.jar index 182c160a5..492ac9aaa 100644 Binary files a/lib/gdx-backend-lwjgl3.jar and b/lib/gdx-backend-lwjgl3.jar differ diff --git a/lib/gdx-natives.jar b/lib/gdx-natives.jar index 15e5f9995..1bec32c5c 100644 Binary files a/lib/gdx-natives.jar and b/lib/gdx-natives.jar differ diff --git a/lib/gdx-nightly-20190112.zip b/lib/gdx-nightly-20190112.zip new file mode 100644 index 000000000..9aa2ea6a8 Binary files /dev/null and b/lib/gdx-nightly-20190112.zip differ diff --git a/lib/gdx.jar b/lib/gdx.jar index 22d26cb06..d90e4bac7 100644 Binary files a/lib/gdx.jar and b/lib/gdx.jar differ diff --git a/lib/source/gdx-backend-lwjgl-sources.jar b/lib/source/gdx-backend-lwjgl-sources.jar index 10599dc3a..c9e868cd4 100644 Binary files a/lib/source/gdx-backend-lwjgl-sources.jar and b/lib/source/gdx-backend-lwjgl-sources.jar differ diff --git a/lib/source/gdx-backend-lwjgl3-sources.jar b/lib/source/gdx-backend-lwjgl3-sources.jar index 7fff4170a..f2d12f464 100644 Binary files a/lib/source/gdx-backend-lwjgl3-sources.jar and b/lib/source/gdx-backend-lwjgl3-sources.jar differ diff --git a/lib/source/gdx-sources.jar b/lib/source/gdx-sources.jar index 85757081d..51aed0797 100644 Binary files a/lib/source/gdx-sources.jar and b/lib/source/gdx-sources.jar differ diff --git a/src/net/torvald/terrarum/AppLoader.java b/src/net/torvald/terrarum/AppLoader.java index bfe41e8cd..a2cc37471 100644 --- a/src/net/torvald/terrarum/AppLoader.java +++ b/src/net/torvald/terrarum/AppLoader.java @@ -157,7 +157,7 @@ public class AppLoader implements ApplicationListener { ShaderProgram.pedantic = false; LwjglApplicationConfiguration appConfig = new LwjglApplicationConfiguration(); - appConfig.useGL30 = true; + //appConfig.useGL30 = true; // used: loads GL 3.2, unused: loads GL 4.6; what the fuck? appConfig.vSyncEnabled = false; appConfig.resizable = false;//true; //appConfig.width = 1072; // IMAX ratio diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 1491099ab..bdaf02f59 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -577,26 +577,25 @@ fun SpriteBatch.drawStraightLine(x: Float, y: Float, otherEnd: Float, thickness: infix fun Color.mul(other: Color): Color = this.cpy().mul(other) - -/*inline fun Color.toRGB10(): RGB10 { - val bits = this.toIntBits() // ABGR - // 0bxxRRRRRRRRRRGGGGGGGGGGBBBBBBBBBB - // 0bAAAAAAAABBBBBBBBGGGGGGGGRRRRRRRR - return bits.and(0x0000FF).shl(20) or bits.and(0x00FF00).shl(2) or bits.and(0xFF0000).ushr(16) -}*/ - - - fun blendMul(batch: SpriteBatch? = null) { // will break if the colour image contains semitransparency (batch ?: Terrarum.batch).enableBlending() (batch ?: Terrarum.batch).setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_ONE_MINUS_SRC_ALPHA) - Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD) // batch.flush does not touch blend equation +} + +fun blendScreen(batch: SpriteBatch? = null) { + // will break if the colour image contains semitransparency + (batch ?: Terrarum.batch).enableBlending() + (batch ?: Terrarum.batch).setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_COLOR) +} + +fun blendDisable(batch: SpriteBatch? = null) { + (batch ?: Terrarum.batch).disableBlending() } fun blendNormal(batch: SpriteBatch? = null) { (batch ?: Terrarum.batch).enableBlending() - (batch ?: Terrarum.batch).setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA) + (batch ?: Terrarum.batch).setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_SRC_ALPHA, GL20.GL_ONE) // ALPHA *MUST BE* PREMULTIPLIED // @@ -613,17 +612,6 @@ fun blendNormal(batch: SpriteBatch? = null) { // - https://www.andersriggelsen.dk/glblendfunc.php } -fun blendScreen(batch: SpriteBatch? = null) { - // will break if the colour image contains semitransparency - (batch ?: Terrarum.batch).enableBlending() - (batch ?: Terrarum.batch).setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_COLOR) - Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD) // batch.flush does not touch blend equation -} - -fun blendDisable(batch: SpriteBatch? = null) { - (batch ?: Terrarum.batch).disableBlending() -} - fun gdxClearAndSetBlend(r: Float, g: Float, b: Float, a: Float) { Gdx.gl.glClearColor(r,g,b,a) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) @@ -637,8 +625,8 @@ fun gdxSetBlend() { fun gdxSetBlendNormal() { gdxSetBlend() - Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA) - Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD) + Gdx.gl.glBlendFuncSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_SRC_ALPHA, GL20.GL_ONE) + //Gdx.gl.glBlendEquationSeparate(GL20.GL_FUNC_ADD, GL30.GL_MAX) // batch.flush does not touch blend equation // ALPHA *MUST BE* PREMULTIPLIED // diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 427ac9ec8..5da3d58ec 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -94,7 +94,7 @@ object IngameRenderer { // clear main or whatever super-FBO being used //clearBuffer() - gdxClearAndSetBlend(.64f, .754f, .84f, 1f) + gdxClearAndSetBlend(.64f, .754f, .84f, 0f) /////////////////////////////////////////////////////////////////////// @@ -544,21 +544,21 @@ object IngameRenderer { lightmapFboB.dispose() } - fboRGB = FrameBuffer(Pixmap.Format.RGBA8888, width, height, false) - fboRGB_lightMixed = FrameBuffer(Pixmap.Format.RGBA8888, width, height, false) - fboA = FrameBuffer(Pixmap.Format.RGBA8888, width, height, false) - fboA_lightMixed = FrameBuffer(Pixmap.Format.RGBA8888, width, height, false) + fboRGB = FrameBuffer(Pixmap.Format.RGBA8888, width, height, true) + fboRGB_lightMixed = FrameBuffer(Pixmap.Format.RGBA8888, width, height, true) + fboA = FrameBuffer(Pixmap.Format.RGBA8888, width, height, true) + fboA_lightMixed = FrameBuffer(Pixmap.Format.RGBA8888, width, height, true) lightmapFboA = FrameBuffer( Pixmap.Format.RGBA8888, LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(), LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(), - false + true ) lightmapFboB = FrameBuffer( Pixmap.Format.RGBA8888, LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(), LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(), - false + true ) BlocksDrawer.resize(width, height) diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt index ebe61ffd5..15cabaf2d 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt @@ -190,14 +190,15 @@ object LightmapRenderer { * Updating order: * ,--------. ,--+-----. ,-----+--. ,--------. - * |↘ | | | 3| |3 | | | ↙| ↕︎ overscan_open / overscan_opaque - * | +-----+ | | 2 | | 2 | | +-----+ | - depending on the noop_mask - * | |1 | → | |1 | → | 1| | → | 1| | - * | | 2 | | +-----+ +-----+ | | 2 | | + * | ,-----+ | | 2 | | 2 | | +-----. | - depending on the noop_mask + * | |1 | | |1 | | 1| | | 1| | + * | | 2 | | `-----+ +-----' | | 2 | | * | | 3| |↗ | | ↖| |3 | | * `--+-----' `--------' `--------' `-----+--' * round: 1 2 3 4 - * for all lightmap[y][x], run in this order: 2-3-4-1 - * for some reason, this setup removes (or mitigates) directional artefacts. + * for all lightmap[y][x], run in this order: 2-3-4-1-2 + * If you run only 4 sets, orthogonal/diagonal artefacts are bound to occur, + * it seems 5-pass is mandatory */ AppLoader.debugTimers["Renderer.Lanterns"] = measureNanoTime { @@ -247,11 +248,21 @@ object LightmapRenderer { } } + // Round 2 + AppLoader.debugTimers["Renderer.Light5"] = measureNanoTime { + for (y in for_y_end + overscan_open downTo for_y_start) { + for (x in for_x_start - overscan_open..for_x_end) { + setLight(x, y, calculate(x, y, 5)) + } + } + } + AppLoader.debugTimers["Renderer.LightSequential"] = (AppLoader.debugTimers["Renderer.Light1"]!! as Long) + (AppLoader.debugTimers["Renderer.Light2"]!! as Long) + (AppLoader.debugTimers["Renderer.Light3"]!! as Long) + - (AppLoader.debugTimers["Renderer.Light4"]!! as Long) + (AppLoader.debugTimers["Renderer.Light4"]!! as Long) + + (AppLoader.debugTimers["Renderer.Light5"]!! as Long) } else { AppLoader.debugTimers["Renderer.LightPre"] = measureNanoTime { diff --git a/work_files/graphics/terrain/terrain.psd.gz b/work_files/graphics/terrain/terrain.psd.gz index 5cecbb381..d3e220d50 100644 --- a/work_files/graphics/terrain/terrain.psd.gz +++ b/work_files/graphics/terrain/terrain.psd.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de91a8032493897244dfa9156350df355d7f81dd16412835bcfd61d68c709da4 -size 480292 +oid sha256:ea9cacf93b855fdacec6317e669529118763de6e610158e8af1b093440807670 +size 484251 diff --git a/work_files/graphics/terrain/terrain_autumn.psd.gz b/work_files/graphics/terrain/terrain_autumn.psd.gz index f7d9a681c..5c850350f 100644 --- a/work_files/graphics/terrain/terrain_autumn.psd.gz +++ b/work_files/graphics/terrain/terrain_autumn.psd.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09b7572139a120970463991262d86463f654741f837392043ebc9212e744e829 -size 997709 +oid sha256:aba202f5c7622b0c98bdfcd9e8335647598639ec6184ae474f9030876aaa3e87 +size 1004234 diff --git a/work_files/graphics/terrain/terrain_spring.psd.gz b/work_files/graphics/terrain/terrain_spring.psd.gz index 7d9c1e969..934fe0bd2 100644 --- a/work_files/graphics/terrain/terrain_spring.psd.gz +++ b/work_files/graphics/terrain/terrain_spring.psd.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00c96dd1930cfca88454e1a07591941407ab79a3c20f20a61b3ece28554d4346 -size 997493 +oid sha256:edd1186614e83f68b330d5129d74b5835cc0249177430037eba85348d1801cda +size 1005195 diff --git a/work_files/graphics/terrain/terrain_winter.psd.gz b/work_files/graphics/terrain/terrain_winter.psd.gz index cd718bdca..777cbcbed 100644 --- a/work_files/graphics/terrain/terrain_winter.psd.gz +++ b/work_files/graphics/terrain/terrain_winter.psd.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a021e317ad14e3ad4fff3fdaceb8b7053f45df53e6fcb697acb421a39766599 -size 997731 +oid sha256:59fd89728661fbbceb45ec19c272cc686c5d63a344fa726c6b8c532fee3393e6 +size 1004299