diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/SSAORenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/SSAORenderer.java index a3e9f2c09..0cbb038d1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/SSAORenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/SSAORenderer.java @@ -106,13 +106,13 @@ public class SSAORenderer this.createFramebuffer(width, height); } - ScreenQuad.INSTANCE.bind(); - - SSAOShader.INSTANCE.render(partialTicks, ssaoFramebuffer); + SSAOShader.INSTANCE.ssaoFramebuffer = this.ssaoFramebuffer; + SSAOShader.INSTANCE.render(partialTicks); primaryState.RestoreFrameBuffer(); - SSAOApplyShader.INSTANCE.render(partialTicks, ssaoTexture); + SSAOApplyShader.INSTANCE.ssaoTexture = this.ssaoTexture; + SSAOApplyShader.INSTANCE.render(partialTicks); state.restore(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/ScreenQuad.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/ScreenQuad.java index 774a3a289..aa3014b1b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/ScreenQuad.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/ScreenQuad.java @@ -67,16 +67,13 @@ public class ScreenQuad this.createBuffer(); } - public void bind() + public void render() { this.init(); this.va.bind(); this.va.bindBufferToAllBindingPoint(this.boxBuffer.getId()); - } - - public void render() - { + GL32.glDrawArrays(GL32.GL_TRIANGLES, 0, 6); } 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 7c84e180a..c707b7092 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 @@ -37,12 +37,33 @@ public abstract class AbstractShaderRenderer public void init() { - //if (init) return false; + if (this.init) return; this.init = true; + + this.onInit(); + } + + public void render(float partialTicks) + { + this.init(); + + this.shader.bind(); + + this.onApplyUniforms(partialTicks); + + this.onRender(); + + this.shader.unbind(); } public void free() { this.shader.free(); } + + protected void onInit() {} + + protected void onApplyUniforms(float partialTicks) {} + + protected void onRender() {} } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DarkShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DarkShader.java index 0c5070317..d13a023d1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DarkShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DarkShader.java @@ -30,11 +30,8 @@ public class DarkShader extends AbstractShaderRenderer @Override - public void init() + public void onInit() { - if (this.init) return; - super.init(); - this.shader = new ShaderProgram( "shaders/normal.vert", "shaders/test/dark.frag", @@ -42,17 +39,17 @@ public class DarkShader extends AbstractShaderRenderer new String[]{"vPosition", "color"}); } - void setShaderUniforms() + @Override + protected void onApplyUniforms(float partialTicks) { GL32.glActiveTexture(GL32.GL_TEXTURE0); GL32.glBindTexture(GL32.GL_TEXTURE_2D, MC_RENDER.getDepthTextureId()); } - public void render() + @Override + protected void onRender() { GLState state = new GLState(); - - this.init(); int width = MC_RENDER.getTargetFrameBufferViewportWidth(); int height = MC_RENDER.getTargetFrameBufferViewportHeight(); @@ -60,15 +57,9 @@ public class DarkShader extends AbstractShaderRenderer GL32.glViewport(0, 0, width, height); GL32.glDisable(GL32.GL_DEPTH_TEST); GL32.glDisable(GL32.GL_SCISSOR_TEST); - - shader.bind(); - - this.setShaderUniforms(); - - ScreenQuad.INSTANCE.bind(); - GL32.glEnable(GL32.GL_BLEND); GL32.glBlendFunc(GL32.GL_SRC_ALPHA, GL32.GL_ONE_MINUS_SRC_ALPHA); + ScreenQuad.INSTANCE.render(); state.restore(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java index 4e1ed2f30..183bbbe74 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java @@ -63,11 +63,8 @@ public class FogShader extends AbstractShaderRenderer } @Override - public void init() + public void onInit() { - if (this.init) return; - super.init(); - this.shader = new ShaderProgram( // TODO rename normal.vert to something like "postProcess.vert" () -> Shader.loadFile("shaders/normal.vert", false, new StringBuilder()).toString(), @@ -92,8 +89,8 @@ public class FogShader extends AbstractShaderRenderer this.nearFogLengthUniform = this.shader.tryGetUniformLocation("nearFogLength"); } - //@Override - void setShaderUniforms(float partialTicks) + @Override + protected void onApplyUniforms(float partialTicks) { this.shader.bind(); @@ -152,30 +149,23 @@ public class FogShader extends AbstractShaderRenderer this.shader.unbind(); } - public void render(float partialTicks) + @Override + protected void onRender() { GLState state = new GLState(); - this.init(); - int width = MC_RENDER.getTargetFrameBufferViewportWidth(); int height = MC_RENDER.getTargetFrameBufferViewportHeight(); GL32.glViewport(0, 0, width, height); GL32.glDisable(GL32.GL_DEPTH_TEST); GL32.glDisable(GL32.GL_SCISSOR_TEST); - - shader.bind(); - - this.setShaderUniforms(partialTicks); - - ScreenQuad.INSTANCE.bind(); + GL32.glEnable(GL32.GL_BLEND); + GL32.glBlendFunc(GL32.GL_SRC_ALPHA, GL32.GL_ONE_MINUS_SRC_ALPHA); GL32.glActiveTexture(GL32.GL_TEXTURE0); GL32.glBindTexture(GL32.GL_TEXTURE_2D, MC_RENDER.getDepthTextureId()); - GL32.glEnable(GL32.GL_BLEND); - GL32.glBlendFunc(GL32.GL_SRC_ALPHA, GL32.GL_ONE_MINUS_SRC_ALPHA); ScreenQuad.INSTANCE.render(); state.restore(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOApplyShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOApplyShader.java index 288e8414c..44140cb56 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOApplyShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOApplyShader.java @@ -30,6 +30,7 @@ public class SSAOApplyShader extends AbstractShaderRenderer { public static SSAOApplyShader INSTANCE = new SSAOApplyShader(); + public int ssaoTexture; // apply uniforms private final ApplyShaderUniforms applyShaderUniforms = new ApplyShaderUniforms(); @@ -46,11 +47,8 @@ public class SSAOApplyShader extends AbstractShaderRenderer @Override - public void init() + public void onInit() { - if (this.init) return; - super.init(); - this.shader = new ShaderProgram( "shaders/normal.vert", "shaders/ssao/apply.frag", @@ -66,14 +64,15 @@ public class SSAOApplyShader extends AbstractShaderRenderer this.applyShaderUniforms.gFarUniform = this.shader.tryGetUniformLocation("gFar"); } - private void setShaderUniforms(float partialTicks, int ssaoTexture) + @Override + protected void onApplyUniforms(float partialTicks) { GL32.glActiveTexture(GL32.GL_TEXTURE0); GL32.glBindTexture(GL32.GL_TEXTURE_2D, MC_RENDER.getDepthTextureId()); GL32.glUniform1i(this.applyShaderUniforms.gDepthMapUniform, 0); GL32.glActiveTexture(GL32.GL_TEXTURE1); - GL32.glBindTexture(GL32.GL_TEXTURE_2D, ssaoTexture); + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.ssaoTexture); GL32.glUniform1i(this.applyShaderUniforms.gSSAOMapUniform, 1); int blurRadius = Config.Client.Advanced.Graphics.Ssao.blurRadius.get(); @@ -99,18 +98,14 @@ public class SSAOApplyShader extends AbstractShaderRenderer } } + //========// // render // //========// - public void render(float partialTicks, int ssaoTexture) + @Override + protected void onRender() { - this.init(); - - this.shader.bind(); - - setShaderUniforms(partialTicks, ssaoTexture); - GL32.glEnable(GL32.GL_BLEND); GL32.glBlendEquation(GL32.GL_FUNC_ADD); GL32.glBlendFuncSeparate(GL32.GL_ZERO, GL32.GL_SRC_ALPHA, GL32.GL_ZERO, GL32.GL_ONE); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOShader.java index 27a49f268..d79ecc446 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/SSAOShader.java @@ -31,6 +31,7 @@ public class SSAOShader extends AbstractShaderRenderer { public static SSAOShader INSTANCE = new SSAOShader(); + public int ssaoFramebuffer; // uniforms private final SsaoShaderUniforms ssaoShaderUniforms = new SsaoShaderUniforms(); @@ -46,14 +47,11 @@ public class SSAOShader extends AbstractShaderRenderer public int gBiasUniform; public int gDepthMapUniform; } - + @Override - public void init() + public void onInit() { - if (this.init) return; - super.init(); - this.shader = new ShaderProgram("shaders/normal.vert", "shaders/ssao/ao.frag", "fragColor", new String[]{"vPosition"}); @@ -68,7 +66,8 @@ public class SSAOShader extends AbstractShaderRenderer this.ssaoShaderUniforms.gDepthMapUniform = this.shader.getUniformLocation("gDepthMap"); } - void setShaderUniforms(float partialTicks) + @Override + protected void onApplyUniforms(float partialTicks) { int width = MC_RENDER.getTargetFrameBufferViewportWidth(); int height = MC_RENDER.getTargetFrameBufferViewportHeight(); @@ -113,25 +112,18 @@ public class SSAOShader extends AbstractShaderRenderer // render // //========// - public void render(float partialTicks, int ssaoFramebuffer) + @Override + protected void onRender() { - this.init(); - int width = MC_RENDER.getTargetFrameBufferViewportWidth(); int height = MC_RENDER.getTargetFrameBufferViewportHeight(); - this.shader.bind(); - - setShaderUniforms(partialTicks); - - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, ssaoFramebuffer); + GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, this.ssaoFramebuffer); GL32.glViewport(0, 0, width, height); GL32.glDisable(GL32.GL_SCISSOR_TEST); GL32.glDisable(GL32.GL_DEPTH_TEST); GL32.glDisable(GL32.GL_BLEND); ScreenQuad.INSTANCE.render(); - - shader.unbind(); } } diff --git a/core/src/main/resources/shaders/flat_shaded.frag b/core/src/main/resources/shaders/flat_shaded.frag index 574192f19..edcddbcca 100644 --- a/core/src/main/resources/shaders/flat_shaded.frag +++ b/core/src/main/resources/shaders/flat_shaded.frag @@ -28,10 +28,6 @@ vec3 quantize(vec3 val, int stepSize) { return floor(val * stepSize) / stepSize; } -vec3 RgbToLinear(const in vec3 color) { - return pow(color, vec3(2.2)); -} - /** * Fragment Shader @@ -44,9 +40,6 @@ void main() { fragColor = vertexColor; - // WARN: DEBUG TEST! - //fragColor.rgb = RgbToLinear(fragColor.rgb) * 3.0; - // TODO: Move into its own function instead of in an if statement if (noiseEnabled) { vec3 vertexNormal = normalize(cross(dFdy(vPos.xyz), dFdx(vPos.xyz)));