Skip to content

Commit 77f9ebd

Browse files
committed
fix: optifine shader compat
1 parent 5331298 commit 77f9ebd

3 files changed

Lines changed: 63 additions & 7 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package net.optifine.shaders;
2+
3+
import net.minecraft.util.BlockRenderLayer;
4+
5+
/// Adapted and minimized from OptiFine
6+
public class ShadersRender {
7+
8+
public static void preRenderChunkLayer(BlockRenderLayer blockLayerIn) {}
9+
10+
public static void postRenderChunkLayer(BlockRenderLayer blockLayerIn) {}
11+
12+
public static void setupArrayPointersVbo() {}
13+
14+
}

src/main/java/gregtech/client/renderer/scene/VBOWorldSceneRenderer.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package gregtech.client.renderer.scene;
22

3+
import gregtech.api.util.Mods;
4+
import gregtech.client.utils.OptiFineHelper;
5+
36
import net.minecraft.client.Minecraft;
47
import net.minecraft.client.renderer.*;
58
import net.minecraft.client.renderer.texture.TextureMap;
@@ -13,6 +16,7 @@
1316
import net.minecraftforge.client.MinecraftForgeClient;
1417
import net.minecraftforge.fml.relauncher.Side;
1518
import net.minecraftforge.fml.relauncher.SideOnly;
19+
import net.optifine.shaders.ShadersRender;
1620

1721
import org.lwjgl.opengl.GL11;
1822

@@ -34,6 +38,8 @@ private void uploadVBO() {
3438
try { // render block in each layer
3539
for (BlockRenderLayer layer : BlockRenderLayer.values()) {
3640

41+
OptiFineHelper.preRenderChunkLayer(layer);
42+
3743
renderBlockLayer(layer);
3844

3945
// Get the buffer again
@@ -45,6 +51,8 @@ private void uploadVBO() {
4551
var vbo = VBOS[i];
4652
if (vbo == null) vbo = VBOS[i] = new VertexBuffer(DefaultVertexFormats.BLOCK);
4753
vbo.bufferData(buffer.getByteBuffer());
54+
55+
OptiFineHelper.postRenderChunkLayer(layer);
4856
}
4957
} finally {
5058
ForgeHooksClient.setRenderLayer(oldRenderLayer);
@@ -79,6 +87,8 @@ protected void drawWorld() {
7987
int pass = layer == BlockRenderLayer.TRANSLUCENT ? 1 : 0;
8088
setDefaultPassRenderState(pass);
8189

90+
OptiFineHelper.preRenderChunkLayer(layer);
91+
8292
GlStateManager.pushMatrix();
8393
{
8494
int i = layer.ordinal();
@@ -91,6 +101,8 @@ protected void drawWorld() {
91101
vbo.unbindBuffer();
92102
}
93103
GlStateManager.popMatrix();
104+
105+
OptiFineHelper.postRenderChunkLayer(layer);
94106
}
95107
ForgeHooksClient.setRenderLayer(oldRenderLayer);
96108

@@ -139,12 +151,16 @@ protected void disableClientStates() {
139151
}
140152

141153
protected void setupArrayPointers() {
142-
// 28 == DefaultVertexFormats.BLOCK.getSize();
143-
GlStateManager.glVertexPointer(3, GL11.GL_FLOAT, 28, 0);
144-
GlStateManager.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 28, 12);
145-
GlStateManager.glTexCoordPointer(2, GL11.GL_FLOAT, 28, 16);
146-
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
147-
GlStateManager.glTexCoordPointer(2, GL11.GL_SHORT, 28, 24);
148-
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
154+
if (Mods.Optifine.isModLoaded()) {
155+
ShadersRender.setupArrayPointersVbo();
156+
} else {
157+
// 28 == DefaultVertexFormats.BLOCK.getSize();
158+
GlStateManager.glVertexPointer(3, GL11.GL_FLOAT, 28, 0);
159+
GlStateManager.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 28, 12);
160+
GlStateManager.glTexCoordPointer(2, GL11.GL_FLOAT, 28, 16);
161+
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
162+
GlStateManager.glTexCoordPointer(2, GL11.GL_SHORT, 28, 24);
163+
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
164+
}
149165
}
150166
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package gregtech.client.utils;
2+
3+
import gregtech.api.util.Mods;
4+
5+
import net.minecraft.util.BlockRenderLayer;
6+
import net.optifine.shaders.ShadersRender;
7+
8+
public class OptiFineHelper {
9+
10+
public static BlockRenderLayer getOFSafeLayer(BlockRenderLayer layer) {
11+
if (!Mods.Optifine.isModLoaded()) return layer;
12+
return layer == BloomEffectUtil.getBloomLayer() ? BloomEffectUtil.getEffectiveBloomLayer() : layer;
13+
}
14+
15+
public static void preRenderChunkLayer(BlockRenderLayer layer) {
16+
if (Mods.Optifine.isModLoaded()) {
17+
ShadersRender.preRenderChunkLayer(getOFSafeLayer(layer));
18+
}
19+
}
20+
21+
public static void postRenderChunkLayer(BlockRenderLayer layer) {
22+
if (Mods.Optifine.isModLoaded()) {
23+
ShadersRender.postRenderChunkLayer(getOFSafeLayer(layer));
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)