From dac7fa0b423b6081c7abb441e703c898aa44dc3c Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Mon, 26 Apr 2021 17:07:31 +0200 Subject: [PATCH] fix Optifine Shaders integration use the low-level call on SVertexBuilder to set apparent block ID for the current draw --- .../client/integration/ShadersModIntegration.kt | 10 ++++------ src/main/kotlin/mods/octarinecore/CommonRefs.kt | 9 ++++++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt index 0119521..a21b4f9 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt @@ -2,8 +2,6 @@ package mods.betterfoliage.client.integration import mods.betterfoliage.BetterFoliage import mods.betterfoliage.client.config.BlockConfig -import mods.betterfoliage.client.config.Config -import mods.betterfoliage.client.texture.GrassRegistry import mods.betterfoliage.client.texture.LeafRegistry import mods.octarinecore.* import mods.octarinecore.client.render.CombinedContext @@ -13,7 +11,6 @@ import net.minecraft.block.BlockRenderType import net.minecraft.block.BlockRenderType.MODEL import net.minecraft.block.BlockState import net.minecraft.block.Blocks -import net.minecraft.client.renderer.BufferBuilder import net.minecraft.util.math.BlockPos import net.minecraft.world.IEnviromentBlockReader import org.apache.logging.log4j.Level.INFO @@ -23,7 +20,7 @@ import org.apache.logging.log4j.Level.INFO */ object ShadersModIntegration { - @JvmStatic val isAvailable = allAvailable(SVertexBuilder, SVertexBuilder.pushState, SVertexBuilder.pushNum, SVertexBuilder.pop) + @JvmStatic val isAvailable = allAvailable(SVertexBuilder, SVertexBuilder.pushState, SVertexBuilder.popState, BlockAliases.getAliasBlockId) val defaultLeaves = Blocks.OAK_LEAVES.defaultState val defaultGrass = Blocks.GRASS.defaultState @@ -49,10 +46,11 @@ object ShadersModIntegration { inline fun renderAs(ctx: CombinedContext, state: BlockState, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) { if (isAvailable && enabled) { val buffer = ctx.renderCtx.renderBuffer + val aliasBlockId = BlockAliases.getAliasBlockId.invokeStatic(state) val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder] - SVertexBuilder.pushState.invoke(sVertexBuilder, ctx.state, ctx.pos, ctx.world, buffer) + SVertexBuilder.pushState.invoke(sVertexBuilder, aliasBlockId) func() - SVertexBuilder.pop.invoke(sVertexBuilder) + SVertexBuilder.popState.invoke(sVertexBuilder) } else { func() } diff --git a/src/main/kotlin/mods/octarinecore/CommonRefs.kt b/src/main/kotlin/mods/octarinecore/CommonRefs.kt index 5149bbb..e5b5d45 100644 --- a/src/main/kotlin/mods/octarinecore/CommonRefs.kt +++ b/src/main/kotlin/mods/octarinecore/CommonRefs.kt @@ -60,9 +60,12 @@ object CustomColors : ClassRef("net.optifine.CustomColors") { // Optifine shaders object SVertexBuilder : ClassRef("net.optifine.shaders.SVertexBuilder") { - val pushState = MethodRef(this, "pushEntity", void, BlockState, BlockPos, IEnvironmentBlockReader, BufferBuilder) - val pushNum = MethodRef(this, "pushEntity", void, long) - val pop = MethodRef(this, "popEntity", void) + val pushState = MethodRef(this, "pushEntity", void, long) + val popState = MethodRef(this, "popEntity", void) +} + +object BlockAliases : ClassRef("net.optifine.shaders.BlockAliases") { + val getAliasBlockId = MethodRef(this, "getAliasBlockId", int, BlockState) }