mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 10:55:01 -04:00
render sky in null framebuffer (with clipping)
This commit is contained in:
parent
52a1a119da
commit
e14ec86809
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -22,4 +22,8 @@ uniform sampler2D uTexture;
|
||||
|
||||
void main() {
|
||||
foutColor = texture(uTexture, finUV);
|
||||
|
||||
if (foutColor.a == 0.0f) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
|
@ -22,4 +22,8 @@ uniform sampler2D uTexture;
|
||||
|
||||
void main() {
|
||||
foutColor = texture(uTexture, finUV);
|
||||
|
||||
if (foutColor.a == 0.0f) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user