use init render events

This commit is contained in:
NULL511
2023-09-10 03:14:03 -04:00
parent 22281d477c
commit a37b0abd18
8 changed files with 57 additions and 78 deletions
@@ -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();
}
@@ -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);
}
@@ -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() {}
}
@@ -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();
@@ -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();
@@ -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);
@@ -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();
}
}
@@ -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)));