rename default frame buffer to world buffer, changes

This commit is contained in:
Bixilon 2021-12-16 20:22:43 +01:00
parent 95f86982e1
commit fbabebcecd
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
9 changed files with 44 additions and 25 deletions

View File

@ -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<Renderer>, post: Boolean) {
private fun renderAll(rendererList: Collection<Renderer>) {
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)) {

View File

@ -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

View File

@ -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<ResizeWindowEvent> {
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()
}
}

View File

@ -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)
}

View File

@ -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()
}

View File

@ -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

View File

@ -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()
}