feat: Blit LOD framebuffer to MC's rendertarget framebuffer

Currently non-functional, since it renders black.
This commit is contained in:
Steveplays28
2023-09-28 20:42:02 +02:00
parent d12d132e4c
commit adae64f42c
2 changed files with 15 additions and 14 deletions
@@ -20,11 +20,13 @@
package com.seibel.distanthorizons.core.config.gui;
import com.seibel.distanthorizons.api.enums.config.EGpuUploadMethod;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.render.glObject.GLProxy;
import com.seibel.distanthorizons.core.render.glObject.GLState;
import com.seibel.distanthorizons.core.render.glObject.buffer.GLVertexBuffer;
import com.seibel.distanthorizons.core.render.glObject.shader.ShaderProgram;
import com.seibel.distanthorizons.core.render.glObject.vertexAttribute.VertexAttribute;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import org.lwjgl.opengl.GL32;
import java.nio.ByteBuffer;
@@ -92,7 +94,6 @@ public class OpenGLConfigScreen extends AbstractScreen
System.out.println("Updated config screen with the delta of " + delta);
GLState state = new GLState();
// GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer());
GL32.glViewport(0, 0, width, height);
GL32.glPolygonMode(GL32.GL_FRONT_AND_BACK, GL32.GL_FILL);
GL32.glDisable(GL32.GL_CULL_FACE);
@@ -119,7 +120,7 @@ public class OpenGLConfigScreen extends AbstractScreen
GL32.glDrawArrays(GL32.GL_TRIANGLE_FAN, 0, 4);
GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT);
//state.restore(MC_RENDER.getTargetFrameBuffer());
state.restore(SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).getTargetFrameBuffer());
}
@Override
@@ -231,8 +231,6 @@ public class LodRenderer
return;
}
// Save Minecraft's GL state so it can be restored at the end of LOD rendering
LagSpikeCatcher drawSaveGLState = new LagSpikeCatcher();
GLState minecraftGlState = new GLState();
@@ -243,6 +241,7 @@ public class LodRenderer
drawSaveGLState.end("drawSaveGLState");
//===================//
// draw params setup //
//===================//
@@ -270,13 +269,12 @@ public class LodRenderer
GL32.glDepthFunc(GL32.GL_LESS);
transparencyEnabled = Config.Client.Advanced.Graphics.Quality.transparency.get().transparencyEnabled;
fakeOceanFloor = Config.Client.Advanced.Graphics.Quality.transparency.get().fakeTransparencyEnabled;
GL32.glDisable(GL32.GL_BLEND); // We render opaque first, then transparent
GL32.glDepthMask(true);
//GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT);
/*---------Bind required objects--------*/
// Setup LodRenderProgram and the LightmapTexture if it has not yet been done
@@ -346,7 +344,7 @@ public class LodRenderer
FogShader.INSTANCE.setModelViewProjectionMatrix(modelViewProjectionMatrix);
//FogShader.INSTANCE.render(partialTicks);
// DarkShader.INSTANCE.render(partialTicks); // A test shader to make the world darker
//DarkShader.INSTANCE.render(partialTicks); // A test shader to make the world darker
if (Config.Client.Advanced.Graphics.Quality.transparency.get().transparencyEnabled)
@@ -364,6 +362,14 @@ public class LodRenderer
drawLagSpikeCatcher.end("LodDraw");
// Blit the LOD framebuffer onto Minecraft's framebuffer
GL32.glBindFramebuffer(GL32.GL_READ_FRAMEBUFFER, framebufferId);
GL32.glBindFramebuffer(GL32.GL_DRAW_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer());
GL32.glBlitFramebuffer(0, 0, MC_RENDER.getScreenWidth(), MC_RENDER.getScreenHeight(),
0, 0, MC_RENDER.getScreenWidth(), MC_RENDER.getScreenHeight(),
GL32.GL_COLOR_BUFFER_BIT,
GL32.GL_NEAREST);
//================//
// render cleanup //
@@ -387,13 +393,7 @@ public class LodRenderer
profiler.popPush("LOD cleanup");
}
//GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT);
//GL32.glBindTexture(GL32.GL_TEXTURE_2D, 0);
//GL32.glBindBuffer(GL32.GL_ARRAY_BUFFER, 0);
//GL32.glViewport(0,0, MC_RENDER.getTargetFrameBufferViewportWidth(), MC_RENDER.getTargetFrameBufferViewportHeight());
minecraftGlState.restore(MC_RENDER.getTargetFrameBuffer());
//minecraftGlState.restore(MC_RENDER.getTargetFrameBuffer());
drawCleanup.end("LodDrawCleanup");
// end of internal LOD profiling