From 52bb06d2508b9d70aa200a3f95a4b5d0f5d36554 Mon Sep 17 00:00:00 2001 From: ToadDev <748280+Toad-Dev@users.noreply.github.com> Date: Thu, 10 Jun 2021 01:07:29 -0700 Subject: [PATCH] Add a shader mod compatibility check to the MonitorRenderer.BEST option. Will need to fill in the shader mod ids after some testing. --- .../peripheral/monitor/MonitorRenderer.java | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorRenderer.java b/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorRenderer.java index 6d0dc360f..43a65da96 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorRenderer.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorRenderer.java @@ -7,9 +7,12 @@ package dan200.computercraft.shared.peripheral.monitor; import dan200.computercraft.ComputerCraft; import dan200.computercraft.client.render.TileEntityMonitorRenderer; +import net.fabricmc.loader.api.FabricLoader; import org.lwjgl.opengl.GL; import javax.annotation.Nonnull; +import java.util.Arrays; +import java.util.List; /** * The render type to use for monitors. @@ -38,6 +41,9 @@ public enum MonitorRenderer private static boolean initialised = false; private static boolean textureBuffer = false; + private static boolean shaderMod = false; + //TODO find out which shader mods do better with VBOs and add them here. + private static List shaderModIds = Arrays.asList("aShaderModThatWouldPreferVBOs"); /** * Get the current renderer to use. @@ -69,18 +75,30 @@ public enum MonitorRenderer private static MonitorRenderer best() { - checkCapabilities(); - return textureBuffer ? TBO : VBO; + if ( !initialised ) + { + checkCapabilities(); + checkForShaderMods(); + if ( textureBuffer && shaderMod ) + { + ComputerCraft.log.warn("Shader mod detected. Enabling VBO renderer for compatibility."); + } + + initialised = true; + } + + return textureBuffer && !shaderMod ? TBO : VBO; } private static void checkCapabilities() { - if( initialised ) - { - return; - } - textureBuffer = GL.getCapabilities().OpenGL31; - initialised = true; + } + + private static void checkForShaderMods() + { + shaderMod = FabricLoader.getInstance().getAllMods().stream() + .map( modContainer -> modContainer.getMetadata().getId() ) + .anyMatch( id -> shaderModIds.contains( id ) ); } }