fix Optifine Shaders integration
use the low-level call on SVertexBuilder to set apparent block ID for the current draw
This commit is contained in:
@@ -2,8 +2,6 @@ package mods.betterfoliage.client.integration
|
|||||||
|
|
||||||
import mods.betterfoliage.BetterFoliage
|
import mods.betterfoliage.BetterFoliage
|
||||||
import mods.betterfoliage.client.config.BlockConfig
|
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.betterfoliage.client.texture.LeafRegistry
|
||||||
import mods.octarinecore.*
|
import mods.octarinecore.*
|
||||||
import mods.octarinecore.client.render.CombinedContext
|
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.BlockRenderType.MODEL
|
||||||
import net.minecraft.block.BlockState
|
import net.minecraft.block.BlockState
|
||||||
import net.minecraft.block.Blocks
|
import net.minecraft.block.Blocks
|
||||||
import net.minecraft.client.renderer.BufferBuilder
|
|
||||||
import net.minecraft.util.math.BlockPos
|
import net.minecraft.util.math.BlockPos
|
||||||
import net.minecraft.world.IEnviromentBlockReader
|
import net.minecraft.world.IEnviromentBlockReader
|
||||||
import org.apache.logging.log4j.Level.INFO
|
import org.apache.logging.log4j.Level.INFO
|
||||||
@@ -23,7 +20,7 @@ import org.apache.logging.log4j.Level.INFO
|
|||||||
*/
|
*/
|
||||||
object ShadersModIntegration {
|
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 defaultLeaves = Blocks.OAK_LEAVES.defaultState
|
||||||
val defaultGrass = Blocks.GRASS.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) {
|
inline fun renderAs(ctx: CombinedContext, state: BlockState, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) {
|
||||||
if (isAvailable && enabled) {
|
if (isAvailable && enabled) {
|
||||||
val buffer = ctx.renderCtx.renderBuffer
|
val buffer = ctx.renderCtx.renderBuffer
|
||||||
|
val aliasBlockId = BlockAliases.getAliasBlockId.invokeStatic(state)
|
||||||
val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder]
|
val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder]
|
||||||
SVertexBuilder.pushState.invoke(sVertexBuilder, ctx.state, ctx.pos, ctx.world, buffer)
|
SVertexBuilder.pushState.invoke(sVertexBuilder, aliasBlockId)
|
||||||
func()
|
func()
|
||||||
SVertexBuilder.pop.invoke(sVertexBuilder)
|
SVertexBuilder.popState.invoke(sVertexBuilder)
|
||||||
} else {
|
} else {
|
||||||
func()
|
func()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,9 +60,12 @@ object CustomColors : ClassRef<Any>("net.optifine.CustomColors") {
|
|||||||
|
|
||||||
// Optifine shaders
|
// Optifine shaders
|
||||||
object SVertexBuilder : ClassRef<Any>("net.optifine.shaders.SVertexBuilder") {
|
object SVertexBuilder : ClassRef<Any>("net.optifine.shaders.SVertexBuilder") {
|
||||||
val pushState = MethodRef(this, "pushEntity", void, BlockState, BlockPos, IEnvironmentBlockReader, BufferBuilder)
|
val pushState = MethodRef(this, "pushEntity", void, long)
|
||||||
val pushNum = MethodRef(this, "pushEntity", void, long)
|
val popState = MethodRef(this, "popEntity", void)
|
||||||
val pop = MethodRef(this, "popEntity", void)
|
}
|
||||||
|
|
||||||
|
object BlockAliases : ClassRef<Any>("net.optifine.shaders.BlockAliases") {
|
||||||
|
val getAliasBlockId = MethodRef(this, "getAliasBlockId", int, BlockState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user