From 5bf60cfa824de6894a75c5af72ad3ca4c93061b0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 24 Nov 2024 13:19:20 +0900 Subject: [PATCH] now terrain also lives on its own framebuffer --- .../terrarum/modulebasegame/IngameRenderer.kt | 20 +++++++++++++++---- .../modulebasegame/console/ExportFBO.kt | 9 +++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 394482e0e..e7313ac2b 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -77,7 +77,8 @@ object IngameRenderer : Disposable { private lateinit var fboMixedOut: Float16FrameBuffer private lateinit var fboRGBactorsBehind: Float16FrameBuffer // for small shadow eff; A channel is for glow effects so they don't get shadow effects - private lateinit var fboRGBactorsMiddle: Float16FrameBuffer // for large shadew eff; A channel is for glow effects so they don't get shadow effects + private lateinit var fboRGBactorsMiddle: Float16FrameBuffer // for large shadow eff; A channel is for glow effects so they don't get shadow effects + private lateinit var fboRGBterrain: Float16FrameBuffer // for large shadow eff; A channel is for glow effects so they don't get shadow effects private lateinit var rgbTex: TextureRegion private lateinit var aTex: TextureRegion @@ -526,6 +527,12 @@ object IngameRenderer : Disposable { } } + fboRGBterrain.inAction(camera, batch) { + clearBuffer() + setCameraPosition(0f, 0f) + BlocksDrawer.drawTerrain(batch.projectionMatrix, false) + } + fboRGB.inAction(camera, batch) { setCameraPosition(0f, 0f) @@ -546,10 +553,13 @@ object IngameRenderer : Disposable { particlesContainer?.forEach { it.drawBody(frameDelta, batch) } } - setCameraPosition(0f, 0f) - BlocksDrawer.drawTerrain(batch.projectionMatrix, false) + batch.inUse { + batch.shader = null + batch.color = Color.WHITE + setCameraPosition(0f, 0f) + batch.drawFlipped(fboRGBterrain.colorBufferTexture, 0f, 0f) + } - batch.shader = shaderForActors batch.inUse { batch.shader = shaderForActors batch.color = Color.WHITE @@ -1250,6 +1260,7 @@ object IngameRenderer : Disposable { fboMixedOut = Float16FrameBuffer(width, height, false) fboRGBactorsBehind = Float16FrameBuffer(width, height, false) fboRGBactorsMiddle = Float16FrameBuffer(width, height, false) + fboRGBterrain = Float16FrameBuffer(width, height, false) lightmapFbo = Float16FrameBuffer( LightmapRenderer.lightBuffer.width * LightmapRenderer.DRAW_TILE_SIZE.toInt(), LightmapRenderer.lightBuffer.height * LightmapRenderer.DRAW_TILE_SIZE.toInt(), @@ -1314,6 +1325,7 @@ object IngameRenderer : Disposable { if (::lightmapFbo.isInitialized) lightmapFbo.tryDispose() if (::fboRGBactorsBehind.isInitialized) fboRGBactorsBehind.tryDispose() if (::fboRGBactorsMiddle.isInitialized) fboRGBactorsMiddle.tryDispose() + if (::fboRGBterrain.isInitialized) fboRGBterrain.tryDispose() blurtex0.tryDispose() diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportFBO.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportFBO.kt index 383d1ae15..e3b8fd215 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ExportFBO.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportFBO.kt @@ -104,14 +104,19 @@ internal object ExportFBO : ConsoleCommand { } @ExportFBOCmd("Framebuffer for render-behind actors used for creating shallow shadow effects") - fun fboergbactorsbehind(): FrameBuffer { + fun fborgbactorsbehind(): FrameBuffer { return IngameRenderer.extortField("fboRGBactorsBehind")!! } @ExportFBOCmd("Framebuffer for render-middle actors used for creating large shadow effects") - fun fboergbactorsmiddle(): FrameBuffer { + fun fborgbactorsmiddle(): FrameBuffer { return IngameRenderer.extortField("fboRGBactorsMiddle")!! } + + @ExportFBOCmd("Framebuffer for terrain blocks used for creating large shadow effects") + fun fborgbterrain(): FrameBuffer { + return IngameRenderer.extortField("fboRGBterrain")!! + } } internal annotation class ExportFBOCmd(val description: String) \ No newline at end of file