From faf51a57e7e52fdfbd95f017c37aa65e477b0a20 Mon Sep 17 00:00:00 2001 From: NULL511 Date: Sat, 9 Sep 2023 04:39:34 -0400 Subject: [PATCH] fix ssao frame buffer binding --- .../core/render/glObject/GLState.java | 25 ++++++++++++++++--- .../core/render/renderer/LodRenderer.java | 4 +-- .../shaders/AbstractShaderRenderer.java | 4 +-- .../render/renderer/shaders/SSAORenderer.java | 5 ++-- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/glObject/GLState.java b/core/src/main/java/com/seibel/distanthorizons/core/render/glObject/GLState.java index 87cce1d35..d6f8cb4c0 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/glObject/GLState.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/glObject/GLState.java @@ -23,11 +23,13 @@ import org.lwjgl.opengl.GL32; public class GLState { + private static final int FBO_MAX = 4; + public int program; public int vao; public int vbo; public int ebo; - public int fbo; + public int[] fbo; public int texture2D; /** IE: GL_TEXTURE0, GL_TEXTURE1, etc. */ public int activeTextureNumber; @@ -54,6 +56,8 @@ public class GLState public GLState() { + this.fbo = new int[FBO_MAX]; + this.saveState(); } @@ -63,7 +67,8 @@ public class GLState this.vao = GL32.glGetInteger(GL32.GL_VERTEX_ARRAY_BINDING); this.vbo = GL32.glGetInteger(GL32.GL_ARRAY_BUFFER_BINDING); this.ebo = GL32.glGetInteger(GL32.GL_ELEMENT_ARRAY_BUFFER_BINDING); - this.fbo = GL32.glGetInteger(GL32.GL_FRAMEBUFFER_BINDING); + + GL32.glGetIntegerv(GL32.GL_FRAMEBUFFER_BINDING, this.fbo); this.texture2D = GL32.glGetInteger(GL32.GL_TEXTURE_BINDING_2D); this.activeTextureNumber = GL32.glGetInteger(GL32.GL_ACTIVE_TEXTURE); @@ -101,7 +106,7 @@ public class GLState public String toString() { return "GLState{" + - "program=" + this.program + ", vao=" + this.vao + ", vbo=" + this.vbo + ", ebo=" + this.ebo + ", fbo=" + this.fbo + + "program=" + this.program + ", vao=" + this.vao + ", vbo=" + this.vbo + ", ebo=" + this.ebo + ", fbo=" + this.fbo[0] + ", text=" + GLEnums.getString(this.texture2D) + "@" + this.activeTextureNumber + ", text0=" + GLEnums.getString(this.texture0) + ", blend=" + this.blend + ", blendMode=" + GLEnums.getString(this.blendSrcColor) + "," + GLEnums.getString(this.blendDstColor) + ", depth=" + this.depth + @@ -113,9 +118,21 @@ public class GLState '}'; } + public void RestoreFrameBuffer() + { + for (int i = 0; i < FBO_MAX; i++) + { + int buffer = this.fbo[i]; + if (i > 0 && buffer == 0) break; + + GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, GL32.glIsFramebuffer(buffer) ? buffer : 0); + } + } + public void restore() { - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, GL32.glIsFramebuffer(this.fbo) ? this.fbo : 0); + this.RestoreFrameBuffer(); + if (this.blend) { GL32.glEnable(GL32.GL_BLEND); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java index 5c201dcd1..dee4ede60 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java @@ -176,8 +176,6 @@ public class LodRenderer return; } - - if (!renderLock.tryLock()) { // never lock the render thread, if the lock isn't available don't wait for it @@ -285,7 +283,7 @@ public class LodRenderer if (Config.Client.Advanced.Graphics.Ssao.enabled.get()) { profiler.popPush("LOD SSAO"); - SSAORenderer.INSTANCE.render(partialTicks); + SSAORenderer.INSTANCE.render(minecraftGlState, partialTicks); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/AbstractShaderRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/AbstractShaderRenderer.java index 19993049a..ce29fdfd2 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/AbstractShaderRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/AbstractShaderRenderer.java @@ -99,7 +99,7 @@ public abstract class AbstractShaderRenderer int width = MC_RENDER.getTargetFrameBufferViewportWidth(); int height = MC_RENDER.getTargetFrameBufferViewportHeight(); - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer()); + //GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer()); GL32.glViewport(0, 0, width, height); GL32.glDisable(GL32.GL_DEPTH_TEST); GL32.glDisable(GL32.GL_SCISSOR_TEST); @@ -118,7 +118,7 @@ public abstract class AbstractShaderRenderer GL32.glDrawArrays(GL32.GL_TRIANGLES, 0, 6); // explicitly unbinding the frame buffer is necessary to prevent GL_CLEAR calls from hitting the wrong buffer - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, 0); + //GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, 0); state.restore(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAORenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAORenderer.java index 5ff116e9e..4542e20d5 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAORenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAORenderer.java @@ -179,7 +179,7 @@ public class SSAORenderer // render // //========// - public void render(float partialTicks) + public void render(GLState primaryState, float partialTicks) { GLState state = new GLState(); @@ -239,7 +239,8 @@ public class SSAORenderer this.applyShader.bind(); - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer()); + //GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer()); + primaryState.RestoreFrameBuffer(); GL32.glEnable(GL11.GL_BLEND); GL32.glBlendEquation(GL32.GL_FUNC_ADD);