From fbabebcecd6b20bd87da16aa2a18dcc2caf8635d Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 16 Dec 2021 20:22:43 +0100 Subject: [PATCH] rename default frame buffer to world buffer, changes --- .../minosoft/gui/rendering/RenderWindow.kt | 23 +++++++++++++++---- .../minosoft/gui/rendering/Renderer.kt | 4 +--- .../framebuffer/FramebufferManager.kt | 12 +++++----- .../WorldFramebuffer.kt} | 6 ++--- .../minosoft/gui/rendering/sky/SkyRenderer.kt | 12 ++++------ .../gui/rendering/system/base/RenderSystem.kt | 2 +- .../system/base/phases/PostDrawable.kt | 10 ++++++++ .../{default/default.fsh => world/world.fsh} | 0 .../{default/default.vsh => world/world.vsh} | 0 9 files changed, 44 insertions(+), 25 deletions(-) rename src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/{defaultf/DefaultFramebuffer.kt => world/WorldFramebuffer.kt} (81%) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt rename src/main/resources/assets/minosoft/rendering/shader/framebuffer/{default/default.fsh => world/world.fsh} (100%) rename src/main/resources/assets/minosoft/rendering/shader/framebuffer/{default/default.vsh => world/world.vsh} (100%) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt index 5517a4248..340409550 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt @@ -46,6 +46,7 @@ import de.bixilon.minosoft.gui.rendering.stats.RenderStats import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem +import de.bixilon.minosoft.gui.rendering.system.base.phases.PostDrawable import de.bixilon.minosoft.gui.rendering.system.base.phases.RenderPhases import de.bixilon.minosoft.gui.rendering.system.base.phases.SkipAll import de.bixilon.minosoft.gui.rendering.system.opengl.OpenGLRenderSystem @@ -246,7 +247,7 @@ class RenderWindow( ), )) { val nextMode = it.decide(PolygonModes.LINE, PolygonModes.FILL) - renderSystem.framebuffer = framebufferManager.default.framebuffer + renderSystem.framebuffer = framebufferManager.world.framebuffer renderSystem.polygonMode = nextMode sendDebugMessage("Polygon mode: ${nextMode.format()}") } @@ -345,11 +346,23 @@ class RenderWindow( renderSystem.framebuffer = renderer.framebuffer renderer.prepareDraw() } - renderAll(rendererList, false) + renderAll(rendererList) renderSystem.framebuffer = null framebufferManager.draw() - renderAll(rendererList, true) + for (renderer in rendererList) { + if (renderer is SkipAll && renderer.skipAll) { + continue + } + if (renderer !is PostDrawable) { + continue + } + if (renderer.skipPost) { + continue + } + renderSystem.framebuffer = renderer.framebuffer + renderer.drawPost() + } renderSystem.reset() // Reset to enable depth mask, etc again @@ -406,10 +419,10 @@ class RenderWindow( return rendererMap[renderer.RESOURCE_LOCATION].unsafeCast() } - private fun renderAll(rendererList: Collection, post: Boolean) { + private fun renderAll(rendererList: Collection) { for (phase in RenderPhases.VALUES) { for (renderer in rendererList) { - if ((renderer.post != post) || renderer is SkipAll && renderer.skipAll) { + if (renderer is SkipAll && renderer.skipAll) { continue } if (!phase.type.java.isAssignableFrom(renderer::class.java)) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt index 455cfa474..87d50e53f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt @@ -20,9 +20,7 @@ interface Renderer { val renderWindow: RenderWindow val renderSystem: RenderSystem val framebuffer: Framebuffer? - get() = renderWindow.framebufferManager.default.framebuffer - val post: Boolean - get() = false + get() = renderWindow.framebufferManager.world.framebuffer fun init() = Unit diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt index 6a1a5de22..565f33f4d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/FramebufferManager.kt @@ -2,37 +2,37 @@ package de.bixilon.minosoft.gui.rendering.framebuffer import de.bixilon.minosoft.gui.rendering.Drawable import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.framebuffer.defaultf.DefaultFramebuffer import de.bixilon.minosoft.gui.rendering.framebuffer.gui.GUIFramebuffer +import de.bixilon.minosoft.gui.rendering.framebuffer.world.WorldFramebuffer import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker class FramebufferManager( private val renderWindow: RenderWindow, ) : Drawable { - val default = DefaultFramebuffer(renderWindow) + val world = WorldFramebuffer(renderWindow) val gui = GUIFramebuffer(renderWindow) fun init() { - default.init() + world.init() gui.init() renderWindow.connection.registerEvent(CallbackEventInvoker.of { - default.framebuffer.resize(it.size) + world.framebuffer.resize(it.size) gui.framebuffer.resize(it.size) }) } fun clear() { - default.clear() + world.clear() gui.clear() } override fun draw() { - default.draw() + world.draw() gui.draw() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/defaultf/DefaultFramebuffer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/WorldFramebuffer.kt similarity index 81% rename from src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/defaultf/DefaultFramebuffer.kt rename to src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/WorldFramebuffer.kt index 4a36947aa..d6267e610 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/defaultf/DefaultFramebuffer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/WorldFramebuffer.kt @@ -1,4 +1,4 @@ -package de.bixilon.minosoft.gui.rendering.framebuffer.defaultf +package de.bixilon.minosoft.gui.rendering.framebuffer.world import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.framebuffer.FramebufferMesh @@ -6,10 +6,10 @@ import de.bixilon.minosoft.gui.rendering.framebuffer.IntegratedFramebuffer import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation -class DefaultFramebuffer( +class WorldFramebuffer( override val renderWindow: RenderWindow, ) : IntegratedFramebuffer { - override val shader = renderWindow.renderSystem.createShader("minosoft:framebuffer/default".toResourceLocation()) + override val shader = renderWindow.renderSystem.createShader("minosoft:framebuffer/world".toResourceLocation()) override val framebuffer: Framebuffer = renderWindow.renderSystem.createFramebuffer() override val mesh = FramebufferMesh(renderWindow) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt index 798917b72..44f8259d1 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/SkyRenderer.kt @@ -22,10 +22,11 @@ import de.bixilon.minosoft.gui.rendering.Renderer import de.bixilon.minosoft.gui.rendering.RendererBuilder import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions +import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer -import de.bixilon.minosoft.gui.rendering.system.base.phases.CustomDrawable +import de.bixilon.minosoft.gui.rendering.system.base.phases.PostDrawable import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture import de.bixilon.minosoft.gui.rendering.util.mesh.SimpleTextureMesh import de.bixilon.minosoft.modding.event.events.TimeChangeEvent @@ -39,7 +40,7 @@ import glm_.vec3.Vec3 class SkyRenderer( private val connection: PlayConnection, override val renderWindow: RenderWindow, -) : Renderer, CustomDrawable { +) : Renderer, PostDrawable { override val renderSystem: RenderSystem = renderWindow.renderSystem private val skyboxShader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "sky/skybox")) private val skySunShader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "sky/sun")) @@ -49,8 +50,6 @@ class SkyRenderer( private var updateSun: Boolean = true var baseColor = RenderConstants.DEFAULT_SKY_COLOR override val framebuffer: Framebuffer? = null - override val post: Boolean = true - override fun init() { skyboxShader.load() @@ -109,7 +108,6 @@ class SkyRenderer( ) skySunMesh.load() updateSun = false - } renderSystem.enable(RenderingCapabilities.BLENDING) renderSystem.setBlendFunction(BlendingFunctions.SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ONE, BlendingFunctions.ZERO) @@ -137,13 +135,13 @@ class SkyRenderer( } private fun drawSkybox() { - renderSystem.setBlendFunction(BlendingFunctions.ONE_MINUS_CONSTANT_COLOR, BlendingFunctions.ONE_MINUS_SOURCE_COLOR, BlendingFunctions.ONE, BlendingFunctions.ZERO) // ToDo checkSkyColor() skyboxShader.use() skyboxMesh.draw() } - override fun drawCustom() { + override fun drawPost() { + renderWindow.renderSystem.reset(depth = DepthFunctions.LESS_OR_EQUAL) drawSkybox() drawSun() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt index 044ce4fdc..992528006 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt @@ -63,7 +63,7 @@ interface RenderSystem { operator fun set(source: BlendingFunctions, destination: BlendingFunctions) - fun setBlendFunction(sourceRGB: BlendingFunctions, destinationRGB: BlendingFunctions, sourceAlpha: BlendingFunctions, destinationAlpha: BlendingFunctions) + fun setBlendFunction(sourceRGB: BlendingFunctions = BlendingFunctions.SOURCE_ALPHA, destinationRGB: BlendingFunctions = BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, sourceAlpha: BlendingFunctions = BlendingFunctions.ONE, destinationAlpha: BlendingFunctions = BlendingFunctions.ZERO) var depth: DepthFunctions var depthMask: Boolean diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt new file mode 100644 index 000000000..3c5acffb5 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/phases/PostDrawable.kt @@ -0,0 +1,10 @@ +package de.bixilon.minosoft.gui.rendering.system.base.phases + +import de.bixilon.minosoft.gui.rendering.Renderer + +interface PostDrawable : Renderer { + val skipPost: Boolean + get() = false + + fun drawPost() +} diff --git a/src/main/resources/assets/minosoft/rendering/shader/framebuffer/default/default.fsh b/src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/world.fsh similarity index 100% rename from src/main/resources/assets/minosoft/rendering/shader/framebuffer/default/default.fsh rename to src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/world.fsh diff --git a/src/main/resources/assets/minosoft/rendering/shader/framebuffer/default/default.vsh b/src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/world.vsh similarity index 100% rename from src/main/resources/assets/minosoft/rendering/shader/framebuffer/default/default.vsh rename to src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/world.vsh