mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-22 12:01:38 -04:00
rename default frame buffer to world buffer, changes
This commit is contained in:
parent
95f86982e1
commit
fbabebcecd
@ -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)) {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user