diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java index 8e1c39210..fe5b23da6 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java @@ -74,7 +74,6 @@ public class ClientApi private static final DhLogger LOGGER = new DhLoggerBuilder().build(); public static final ClientApi INSTANCE = new ClientApi(); - public static final TestRenderer TEST_RENDERER = new TestRenderer(); private static final IMinecraftClientWrapper MC_CLIENT = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final IMinecraftRenderWrapper MC_RENDER = SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class); @@ -553,6 +552,11 @@ public class ClientApi return; } + if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DISABLED) + { + return; + } + ///endregion @@ -568,24 +572,15 @@ public class ClientApi if (!renderingDeferredLayer) { - if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DEFAULT) + boolean renderingCancelled = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderEvent.class, renderParams); + if (!renderingCancelled) { - boolean renderingCancelledForThisFrame = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderEvent.class, renderParams); - if (!renderingCancelledForThisFrame) - { - LodRenderer.INSTANCE.render(renderParams, profiler); - } - - if (!DhApi.Delayed.renderProxy.getDeferTransparentRendering()) - { - ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterRenderEvent.class, null); - } + LodRenderer.INSTANCE.render(renderParams, profiler); } - else if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DEBUG) + + if (!DhApi.Delayed.renderProxy.getDeferTransparentRendering()) { - profiler.push("Render Debug"); - ClientApi.TEST_RENDERER.render(); - profiler.pop(); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterRenderEvent.class, null); } } else @@ -638,7 +633,7 @@ public class ClientApi public void renderFadeOpaque() // TODO is this actually the transparent pass in MC 1.21.11? { // only fade when DH is rendering - if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DEFAULT + if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED && ( // only fade when requested @@ -660,7 +655,7 @@ public class ClientApi public void renderFadeTransparent() // TODO is this actually the opaque pass in MC 1.21.11? { // only fade when DH is rendering - if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DEFAULT) + if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED) { boolean renderFade = ( diff --git a/core/src/main/java/com/seibel/distanthorizons/core/jar/installer/WebDownloader.java b/core/src/main/java/com/seibel/distanthorizons/core/jar/installer/WebDownloader.java index db7b87554..0ff7cd8a4 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/jar/installer/WebDownloader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/jar/installer/WebDownloader.java @@ -85,7 +85,6 @@ public class WebDownloader totalDataRead = totalDataRead + i; bout.write(data, 0, i); - // TODO: Link this to an atomic integer rather than printing it to log int newPercent = (int) ((totalDataRead * 100) / filesize); if (percent != newPercent) { @@ -100,7 +99,6 @@ public class WebDownloader public static String downloadAsString(URL url) throws Exception { StringBuilder stringBuilder = new StringBuilder(); -// URL url = new URL(urlS); URLConnection urlConnection = url.openConnection(); urlConnection.setConnectTimeout(1000); 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 3e389e41c..829d5f9a5 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 @@ -19,11 +19,13 @@ package com.seibel.distanthorizons.core.render.renderer; +import com.seibel.distanthorizons.api.enums.rendering.EDhApiRendererMode; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiFramebuffer; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiShaderProgram; import com.seibel.distanthorizons.api.methods.events.abstractEvents.*; import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiTextureCreatedParam; +import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; @@ -116,6 +118,7 @@ public class LodRenderer //===========// // rendering // //===========// + //region /** * This will draw both opaque and transparent LODs if @@ -361,11 +364,14 @@ public class LodRenderer profiler.pop(); } + //endregion + //=================// // Setup Functions // //=================// + //region private void setGLState( DhApiRenderParam renderEventParam, @@ -590,11 +596,14 @@ public class LodRenderer ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterColorDepthTextureCreatedEvent.class, textureCreatedParam); } + //endregion + //===============// // LOD rendering // //===============// + //region private void renderLodPass(IDhApiShaderProgram shaderProgram, RenderBufferHandler lodBufferHandler, RenderParams renderEventParam, boolean opaquePass) { @@ -644,40 +653,49 @@ public class LodRenderer GLMC.enableFaceCulling(); } - - SortedArraySet lodBufferContainer = lodBufferHandler.getColumnRenderBuffers(); - if (lodBufferContainer != null) + if (Config.Client.Advanced.Debugging.rendererMode.get() == EDhApiRendererMode.DEFAULT) { - for (int lodIndex = 0; lodIndex < lodBufferContainer.size(); lodIndex++) + // Normal LOD rendering + + SortedArraySet lodBufferContainer = lodBufferHandler.getColumnRenderBuffers(); + if (lodBufferContainer != null) { - LodBufferContainer bufferContainer = lodBufferContainer.get(lodIndex); - this.setShaderProgramMvmOffset(bufferContainer.minCornerBlockPos, shaderProgram, renderEventParam); - - GLVertexBuffer[] vbos = opaquePass ? bufferContainer.vbos : bufferContainer.vbosTransparent; - for (int vboIndex = 0; vboIndex < vbos.length; vboIndex++) + for (int lodIndex = 0; lodIndex < lodBufferContainer.size(); lodIndex++) { - GLVertexBuffer vbo = vbos[vboIndex]; - if (vbo == null) - { - continue; - } + LodBufferContainer bufferContainer = lodBufferContainer.get(lodIndex); + this.setShaderProgramMvmOffset(bufferContainer.minCornerBlockPos, shaderProgram, renderEventParam); - if (vbo.getVertexCount() == 0) + GLVertexBuffer[] vbos = opaquePass ? bufferContainer.vbos : bufferContainer.vbosTransparent; + for (int vboIndex = 0; vboIndex < vbos.length; vboIndex++) { - continue; - } - - vbo.bind(); - shaderProgram.bindVertexBuffer(vbo.getId()); - GL32.glDrawElements( + GLVertexBuffer vbo = vbos[vboIndex]; + if (vbo == null) + { + continue; + } + + if (vbo.getVertexCount() == 0) + { + continue; + } + + vbo.bind(); + shaderProgram.bindVertexBuffer(vbo.getId()); + GL32.glDrawElements( GL32.GL_TRIANGLES, (vbo.getVertexCount() / 4) * 6, // TODO what does the 4 and 6 here represent? this.quadIBO.getType(), 0); - vbo.unbind(); + vbo.unbind(); + } } } } - + else + { + // basic quad rendering + + TestRenderer.INSTANCE.render(); + } //=========================// @@ -711,11 +729,14 @@ public class LodRenderer ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, new DhApiBeforeBufferRenderEvent.EventParam(renderEventParam, modelPos)); } + //endregion + //===============// // API functions // //===============// + //region /** @return -1 if no frame buffer has been bound yet */ public int getActiveFramebufferId() { return this.activeFramebufferId; } @@ -726,6 +747,8 @@ public class LodRenderer /** @return -1 if no texture has been bound yet */ public int getActiveDepthTextureId() { return this.activeDepthTextureId; } + //endregion + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/TestRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/TestRenderer.java index b9787ff0a..feed4c2bb 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/TestRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/TestRenderer.java @@ -35,7 +35,11 @@ import org.lwjgl.opengl.GL32; import java.nio.ByteBuffer; import java.nio.ByteOrder; - +/** + * Renders a UV colored quad + * to the center of the screen to confirm DH's + * apply shader is running correctly + */ public class TestRenderer { public static final DhLogger LOGGER = new DhLoggerBuilder().build(); @@ -43,6 +47,17 @@ public class TestRenderer private static final IMinecraftRenderWrapper MC_RENDER = SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class); private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class); + public static final TestRenderer INSTANCE = new TestRenderer(); + + // Render a square with uv color + private static final float[] VERTICES = { + // PosX,Y, ColorR,G,B,A + -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, + 0.4f, -0.4f, 1.0f, 0.0f, 0.0f, 1.0f, + 0.3f, 0.3f, 1.0f, 1.0f, 0.0f, 0.0f, + -0.2f, 0.2f, 0.0f, 1.0f, 1.0f, 1.0f + }; + ShaderProgram basicShader; @@ -52,8 +67,12 @@ public class TestRenderer + //=============// + // constructor // + //=============// + //region - public TestRenderer() { } + private TestRenderer() { } public void init() { @@ -71,48 +90,39 @@ public class TestRenderer // Color this.va.setVertexAttribute(0, 1, VertexPointer.addVec4Pointer(false)); this.va.completeAndCheck(Float.BYTES * 6); - this.basicShader = new ShaderProgram("shaders/test/vert.vert", "shaders/test/frag.frag", - "fragColor", new String[]{"vPosition", "color"}); + this.basicShader = new ShaderProgram( + "shaders/test/vert.vert", "shaders/test/frag.frag", + "fragColor", new String[]{"vPosition", "color"}); this.createBuffer(); } - // Render a square with uv color - private static final float[] vertices = { - // PosX,Y, ColorR,G,B,A - -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, - 0.4f, -0.4f, 1.0f, 0.0f, 0.0f, 1.0f, - 0.3f, 0.3f, 1.0f, 1.0f, 0.0f, 0.0f, - -0.2f, 0.2f, 0.0f, 1.0f, 1.0f, 1.0f - }; - private void createBuffer() { - ByteBuffer buffer = ByteBuffer.allocateDirect(vertices.length * Float.BYTES); + ByteBuffer buffer = ByteBuffer.allocateDirect(VERTICES.length * Float.BYTES); // Fill buffer with vertices. buffer.order(ByteOrder.nativeOrder()); - buffer.asFloatBuffer().put(vertices); + buffer.asFloatBuffer().put(VERTICES); buffer.rewind(); this.vbo = new GLVertexBuffer(false); this.vbo.bind(); - this.vbo.uploadBuffer(buffer, 4, EDhApiGpuUploadMethod.DATA, vertices.length * Float.BYTES); + this.vbo.uploadBuffer(buffer, 4, EDhApiGpuUploadMethod.DATA, VERTICES.length * Float.BYTES); } + //endregion + + + + //========// + // render // + //========// + //region + public void render() { - // TODO fix for MC 1.21.5+ this.init(); - GLMC.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFramebuffer()); - GL32.glViewport(0, 0, MC_RENDER.getTargetFramebufferViewportWidth(), MC_RENDER.getTargetFramebufferViewportHeight()); - GL32.glPolygonMode(GL32.GL_FRONT_AND_BACK, GL32.GL_FILL); - - GLMC.disableFaceCulling(); - GLMC.disableDepthTest(); - GLMC.disableBlend(); - GLMC.disableScissorTest(); - this.basicShader.bind(); this.va.bind(); @@ -121,9 +131,10 @@ public class TestRenderer // Render the square GL32.glDrawArrays(GL32.GL_TRIANGLE_FAN, 0, 4); - GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT); } + //endregion + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java index fce227877..c6716b70d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/ThreadUtil.java @@ -40,8 +40,6 @@ public class ThreadUtil public static final String THREAD_NAME_PREFIX = ModInfo.THREAD_NAME_PREFIX; - // TODO move all "Runtime.getRuntime().availableProcessors()" calls here - //===============//