Skip to content

Commit 4f3e9ce

Browse files
committed
rendering safety wrappers
1 parent 2b4288d commit 4f3e9ce

8 files changed

Lines changed: 109 additions & 0 deletions

File tree

src/main/java/com/falsepattern/falsetweaks/config/FalseTweaksGuiConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ private static List<IConfigElement> getConfigElements() throws ConfigException {
7777
result.add(category("occlusion", OcclusionConfig.class));
7878
result.add(category("threading", ThreadingConfig.class));
7979
}
80+
if (ModuleConfig.RENDERING_SAFETY) {
81+
result.add(category("rendering_safety", RenderingSafetyConfig.class));
82+
}
8083
return result;
8184
}
8285

src/main/java/com/falsepattern/falsetweaks/config/ModuleConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,11 @@ public class ModuleConfig {
128128
@Config.RequiresMcRestart
129129
public static boolean DYNAMIC_LIGHTS;
130130

131+
@Config.Comment("Wraps block renderer code and tile entity renderer code in extra opengl state guards.")
132+
@Config.DefaultBoolean(true)
133+
@Config.RequiresMcRestart
134+
public static boolean RENDERING_SAFETY;
135+
131136
@Config.Comment("Gets rid of that obnoxious burst of minecart sounds when joining a world.")
132137
@Config.DefaultBoolean(true)
133138
public static boolean MINECART_EAR_BLAST_FIX;
@@ -154,6 +159,7 @@ public class ModuleConfig {
154159
OcclusionConfig.init();
155160
ThreadingConfig.init();
156161
DynamicLightsConfig.init();
162+
RenderingSafetyConfig.init();
157163
}
158164

159165
public static boolean TRIANGULATOR() {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.falsepattern.falsetweaks.config;
2+
3+
import com.falsepattern.falsetweaks.Tags;
4+
import com.falsepattern.lib.config.Config;
5+
import com.falsepattern.lib.config.ConfigurationManager;
6+
7+
@Config(modid = Tags.MOD_ID,
8+
category = "rendering_safety")
9+
public class RenderingSafetyConfig {
10+
@Config.Comment("Enable safety wrapper for inventory blocks.")
11+
@Config.LangKey("config.falsetweaks.rendering_safety.block")
12+
@Config.DefaultBoolean(true)
13+
public static boolean ENABLE_BLOCK;
14+
@Config.Comment("Enable safety wrapper for tile entities.")
15+
@Config.LangKey("config.falsetweaks.rendering_safety.tesr")
16+
@Config.DefaultBoolean(true)
17+
public static boolean ENABLE_TESR;
18+
19+
static {
20+
ConfigurationManager.selfInit();
21+
}
22+
23+
public static void init() {
24+
25+
}
26+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.falsepattern.falsetweaks.mixin.mixins.client.rendersafety;
2+
3+
import com.falsepattern.falsetweaks.config.RenderingSafetyConfig;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
6+
import lombok.val;
7+
import org.lwjgl.opengl.GL11;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
11+
import net.minecraft.block.Block;
12+
import net.minecraft.client.renderer.RenderBlocks;
13+
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
14+
import cpw.mods.fml.client.registry.RenderingRegistry;
15+
16+
@Mixin(value = RenderingRegistry.class,
17+
remap = false)
18+
public abstract class RenderingRegistryMixin {
19+
@WrapOperation(method = "renderInventoryBlock",
20+
at = @At(value = "INVOKE",
21+
target = "Lcpw/mods/fml/client/registry/ISimpleBlockRenderingHandler;renderInventoryBlock(Lnet/minecraft/block/Block;IILnet/minecraft/client/renderer/RenderBlocks;)V"),
22+
require = 1)
23+
private void wrapBlock(ISimpleBlockRenderingHandler instance, Block block, int metadata, int modelID, RenderBlocks renderer, Operation<Void> original) {
24+
val enable = RenderingSafetyConfig.ENABLE_BLOCK;
25+
if (enable)
26+
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
27+
original.call(instance, block, metadata, modelID, renderer);
28+
if (enable)
29+
GL11.glPopAttrib();
30+
}
31+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.falsepattern.falsetweaks.mixin.mixins.client.rendersafety;
2+
3+
import com.falsepattern.falsetweaks.config.RenderingSafetyConfig;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
6+
import lombok.val;
7+
import org.lwjgl.opengl.GL11;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
11+
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
12+
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
13+
import net.minecraft.tileentity.TileEntity;
14+
15+
@Mixin(TileEntityRendererDispatcher.class)
16+
public abstract class TileEntityRendererDispatcherMixin {
17+
@WrapOperation(method = "renderTileEntityAt",
18+
at = @At(value = "INVOKE",
19+
target = "Lnet/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer;renderTileEntityAt(Lnet/minecraft/tileentity/TileEntity;DDDF)V"),
20+
require = 1)
21+
private void wrapTESR(TileEntitySpecialRenderer instance, TileEntity entity, double x, double y, double z, float tickDelta, Operation<Void> original) {
22+
val enable = RenderingSafetyConfig.ENABLE_TESR;
23+
if (enable)
24+
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
25+
original.call(instance, entity, x, y, z, tickDelta);
26+
if (enable)
27+
GL11.glPopAttrib();
28+
}
29+
}

src/main/java/com/falsepattern/falsetweaks/mixin/plugin/standard/Mixin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,10 @@ public enum Mixin implements IMixin {
345345
Debug_Occlusion_Neodymium_GPUMemoryManagerMixin(Side.CLIENT, THREADING.and(require(NEODYMIUM)).and(condition(() -> Debug.ENABLED)), "debug.occlusion.neodymium.GPUMemoryManagerMixin"),
346346
//endregion Debug
347347

348+
//region Render Safety
349+
RenderingSafety_RenderingRegistryMixin(Side.CLIENT, condition(() -> ModuleConfig.RENDERING_SAFETY), "rendersafety.RenderingRegistryMixin"),
350+
RenderingSafety_TileEntityRendererDispatcherMixin(Side.CLIENT, condition(() -> ModuleConfig.RENDERING_SAFETY), "rendersafety.TileEntityRendererDispatcherMixin"),
351+
348352
;
349353
// @formatter:on
350354

src/main/resources/assets/falsetweaks/lang/en_US.lang

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ config.falsetweaks.threading.fastThreadedBlockBounds=Fast threaded block bounds
6161
config.falsetweaks.threading.fastSafety=Faster safety checks
6262
config.falsetweaks.threading.tessellatorReplaceEverything=Tessellator replace everything
6363

64+
config.falsetweaks.rendering_safety.category=Rendering Safety
65+
config.falsetweaks.rendering_safety.category.tooltip=OpenGL state leakage fixes for inventory block renderers and tile entities
66+
config.falsetweaks.rendering_safety.block=Enable for inventory blocks
67+
config.falsetweaks.rendering_safety.tesr=Enable for tile entities
68+
6469
gui.triangulator.calibrationdescription.line0=Click the Toggle button until the
6570
gui.triangulator.calibrationdescription.line1=yellow and the blue squares look the same,
6671
gui.triangulator.calibrationdescription.line2=then press the Apply button.

src/main/resources/assets/falsetweaks/lang/zh_CN.lang

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ config.falsetweaks.threading.logISBRHErrors=记录 ISimpleBlockRenderingHandler
6262
#TODO config.falsetweaks.threading.fastSafety=Faster safety checks
6363
#TODO config.falsetweaks.threading.tessellatorReplaceEverything=Tessellator replace everything
6464

65+
#TODO config.falsetweaks.rendering_safety.category=Rendering Safety
66+
#TODO config.falsetweaks.rendering_safety.category.tooltip=OpenGL state leakage fixes for inventory block renderers and tile entities
67+
#TODO config.falsetweaks.rendering_safety.block=Enable for inventory blocks
68+
#TODO config.falsetweaks.rendering_safety.tesr=Enable for tile entities
69+
6570
gui.triangulator.calibrationdescription.line0=点击切换按钮直到
6671
gui.triangulator.calibrationdescription.line1=黄色和蓝色方块看起来一样,
6772
gui.triangulator.calibrationdescription.line2=然后按应用按钮。

0 commit comments

Comments
 (0)