mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 11:54:59 -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
|
renderSystem.framebuffer = renderer.framebuffer
|
||||||
renderer.prepareDraw()
|
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
|
renderSystem.framebuffer = null
|
||||||
|
framebufferManager.draw()
|
||||||
|
renderAll(rendererList, true)
|
||||||
|
|
||||||
renderSystem.reset() // Reset to enable depth mask, etc again
|
renderSystem.reset() // Reset to enable depth mask, etc again
|
||||||
|
|
||||||
renderStats.endDraw()
|
renderStats.endDraw()
|
||||||
@ -418,4 +405,23 @@ class RenderWindow(
|
|||||||
operator fun <T : Renderer> get(renderer: RendererBuilder<T>): T? {
|
operator fun <T : Renderer> get(renderer: RendererBuilder<T>): T? {
|
||||||
return rendererMap[renderer.RESOURCE_LOCATION].unsafeCast()
|
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 {
|
interface Renderer {
|
||||||
val renderWindow: RenderWindow
|
val renderWindow: RenderWindow
|
||||||
val renderSystem: RenderSystem
|
val renderSystem: RenderSystem
|
||||||
val framebuffer: Framebuffer
|
val framebuffer: Framebuffer?
|
||||||
get() = renderWindow.framebufferManager.default.framebuffer
|
get() = renderWindow.framebufferManager.default.framebuffer
|
||||||
|
val post: Boolean
|
||||||
|
get() = false
|
||||||
|
|
||||||
fun init() = Unit
|
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.defaultf.DefaultFramebuffer
|
||||||
import de.bixilon.minosoft.gui.rendering.framebuffer.gui.GUIFramebuffer
|
import de.bixilon.minosoft.gui.rendering.framebuffer.gui.GUIFramebuffer
|
||||||
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
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
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
|
|
||||||
class FramebufferManager(
|
class FramebufferManager(
|
||||||
@ -34,7 +33,6 @@ class FramebufferManager(
|
|||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
default.draw()
|
default.draw()
|
||||||
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER, IntegratedBufferTypes.STENCIL_BUFFER)
|
|
||||||
gui.draw()
|
gui.draw()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ interface IntegratedFramebuffer : Drawable {
|
|||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
renderWindow.renderSystem.framebuffer = null
|
renderWindow.renderSystem.framebuffer = null
|
||||||
|
renderWindow.renderSystem.reset(blending = true)
|
||||||
framebuffer.bindTexture()
|
framebuffer.bindTexture()
|
||||||
shader.use()
|
shader.use()
|
||||||
mesh.draw()
|
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.RendererBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent
|
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.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.RenderSystem
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
|
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.CustomDrawable
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.SimpleTextureMesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.SimpleTextureMesh
|
||||||
@ -48,6 +48,8 @@ class SkyRenderer(
|
|||||||
private lateinit var sunTexture: AbstractTexture
|
private lateinit var sunTexture: AbstractTexture
|
||||||
private var updateSun: Boolean = true
|
private var updateSun: Boolean = true
|
||||||
var baseColor = RenderConstants.DEFAULT_SKY_COLOR
|
var baseColor = RenderConstants.DEFAULT_SKY_COLOR
|
||||||
|
override val framebuffer: Framebuffer? = null
|
||||||
|
override val post: Boolean = true
|
||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
@ -135,13 +137,13 @@ class SkyRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun drawSkybox() {
|
private fun drawSkybox() {
|
||||||
|
renderSystem.setBlendFunc(BlendingFunctions.SOURCE_ALPHA, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ZERO) // ToDo
|
||||||
checkSkyColor()
|
checkSkyColor()
|
||||||
skyboxShader.use()
|
skyboxShader.use()
|
||||||
skyboxMesh.draw()
|
skyboxMesh.draw()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun drawCustom() {
|
override fun drawCustom() {
|
||||||
renderWindow.renderSystem.reset(depth = DepthFunctions.LESS_OR_EQUAL)
|
|
||||||
drawSkybox()
|
drawSkybox()
|
||||||
drawSun()
|
drawSun()
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,8 @@ uniform sampler2D uTexture;
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
foutColor = texture(uTexture, finUV);
|
foutColor = texture(uTexture, finUV);
|
||||||
|
|
||||||
|
if (foutColor.a == 0.0f) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,8 @@ uniform sampler2D uTexture;
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
foutColor = texture(uTexture, finUV);
|
foutColor = texture(uTexture, finUV);
|
||||||
|
|
||||||
|
if (foutColor.a == 0.0f) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,6 @@ layout (location = 1) in vec2 vinUV;
|
|||||||
out vec2 finUV;
|
out vec2 finUV;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = vec4(vinPosition, 0.0f, 1.0f);
|
gl_Position = vec4(vinPosition, -0.1f, 1.0f);
|
||||||
finUV = vinUV;
|
finUV = vinUV;
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ uniform mat4 uSkyViewProjectionMatrix;
|
|||||||
uniform vec4 uSkyColor;
|
uniform vec4 uSkyColor;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = (uSkyViewProjectionMatrix * vec4(vinPosition, 1.0)).xyww;
|
gl_Position = uSkyViewProjectionMatrix * vec4(vinPosition, 1.0);
|
||||||
|
|
||||||
finColor = uSkyColor;
|
finColor = uSkyColor;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user