render sky in null framebuffer (with clipping)

This commit is contained in:
Bixilon 2021-12-15 20:33:02 +01:00
parent 52a1a119da
commit e14ec86809
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
9 changed files with 41 additions and 24 deletions

View File

@ -345,25 +345,12 @@ class RenderWindow(
renderSystem.framebuffer = renderer.framebuffer
renderer.prepareDraw()
}
renderAll(rendererList, false)
for (phase in RenderPhases.VALUES) { // ToDo: Move this up after frame buffers
for (renderer in rendererList) {
if (renderer is SkipAll && renderer.skipAll) {
continue
}
if (!phase.type.java.isAssignableFrom(renderer::class.java)) {
continue
}
if (phase.invokeSkip(renderer)) {
continue
}
renderSystem.framebuffer = renderer.framebuffer
phase.invokeSetup(renderer)
phase.invokeDraw(renderer)
}
}
framebufferManager.draw()
renderSystem.framebuffer = null
framebufferManager.draw()
renderAll(rendererList, true)
renderSystem.reset() // Reset to enable depth mask, etc again
renderStats.endDraw()
@ -418,4 +405,23 @@ class RenderWindow(
operator fun <T : Renderer> get(renderer: RendererBuilder<T>): T? {
return rendererMap[renderer.RESOURCE_LOCATION].unsafeCast()
}
private fun renderAll(rendererList: Collection<Renderer>, post: Boolean) {
for (phase in RenderPhases.VALUES) {
for (renderer in rendererList) {
if ((renderer.post != post) || renderer is SkipAll && renderer.skipAll) {
continue
}
if (!phase.type.java.isAssignableFrom(renderer::class.java)) {
continue
}
if (phase.invokeSkip(renderer)) {
continue
}
renderSystem.framebuffer = renderer.framebuffer
phase.invokeSetup(renderer)
phase.invokeDraw(renderer)
}
}
}
}

View File

@ -19,8 +19,10 @@ import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
interface Renderer {
val renderWindow: RenderWindow
val renderSystem: RenderSystem
val framebuffer: Framebuffer
val framebuffer: Framebuffer?
get() = renderWindow.framebufferManager.default.framebuffer
val post: Boolean
get() = false
fun init() = Unit

View File

@ -5,7 +5,6 @@ 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.modding.events.ResizeWindowEvent
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
class FramebufferManager(
@ -34,7 +33,6 @@ class FramebufferManager(
override fun draw() {
default.draw()
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER, IntegratedBufferTypes.STENCIL_BUFFER)
gui.draw()
}
}

View File

@ -29,6 +29,7 @@ interface IntegratedFramebuffer : Drawable {
override fun draw() {
renderWindow.renderSystem.framebuffer = null
renderWindow.renderSystem.reset(blending = true)
framebuffer.bindTexture()
shader.use()
mesh.draw()

View File

@ -22,9 +22,9 @@ 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.texture.texture.AbstractTexture
import de.bixilon.minosoft.gui.rendering.util.mesh.SimpleTextureMesh
@ -48,6 +48,8 @@ class SkyRenderer(
private lateinit var sunTexture: AbstractTexture
private var updateSun: Boolean = true
var baseColor = RenderConstants.DEFAULT_SKY_COLOR
override val framebuffer: Framebuffer? = null
override val post: Boolean = true
override fun init() {
@ -135,13 +137,13 @@ class SkyRenderer(
}
private fun drawSkybox() {
renderSystem.setBlendFunc(BlendingFunctions.SOURCE_ALPHA, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ZERO) // ToDo
checkSkyColor()
skyboxShader.use()
skyboxMesh.draw()
}
override fun drawCustom() {
renderWindow.renderSystem.reset(depth = DepthFunctions.LESS_OR_EQUAL)
drawSkybox()
drawSun()
}

View File

@ -22,4 +22,8 @@ uniform sampler2D uTexture;
void main() {
foutColor = texture(uTexture, finUV);
if (foutColor.a == 0.0f) {
discard;
}
}

View File

@ -22,4 +22,8 @@ uniform sampler2D uTexture;
void main() {
foutColor = texture(uTexture, finUV);
if (foutColor.a == 0.0f) {
discard;
}
}

View File

@ -19,6 +19,6 @@ layout (location = 1) in vec2 vinUV;
out vec2 finUV;
void main() {
gl_Position = vec4(vinPosition, 0.0f, 1.0f);
gl_Position = vec4(vinPosition, -0.1f, 1.0f);
finUV = vinUV;
}

View File

@ -22,7 +22,7 @@ uniform mat4 uSkyViewProjectionMatrix;
uniform vec4 uSkyColor;
void main() {
gl_Position = (uSkyViewProjectionMatrix * vec4(vinPosition, 1.0)).xyww;
gl_Position = uSkyViewProjectionMatrix * vec4(vinPosition, 1.0);
finColor = uSkyColor;
}