fix diffuse shading being too dark with shaders
This commit is contained in:
@@ -77,6 +77,13 @@ object CustomColors : ClassRef<Any>("net.optifine.CustomColors") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Optifine shaders
|
// Optifine shaders
|
||||||
|
object Shaders : ClassRef<Any>("net.optifine.shaders.Shaders") {
|
||||||
|
val shaderPackLoaded = FieldRef(this, "shaderPackLoaded", boolean)
|
||||||
|
val blockLightLevel05 = FieldRef(this, "blockLightLevel05", float)
|
||||||
|
val blockLightLevel06 = FieldRef(this, "blockLightLevel06", float)
|
||||||
|
val blockLightLevel08 = FieldRef(this, "blockLightLevel08", float)
|
||||||
|
}
|
||||||
|
|
||||||
object SVertexBuilder : ClassRef<Any>("net.optifine.shaders.SVertexBuilder") {
|
object SVertexBuilder : ClassRef<Any>("net.optifine.shaders.SVertexBuilder") {
|
||||||
val pushState = MethodRef(this, "pushEntity", void, long)
|
val pushState = MethodRef(this, "pushEntity", void, long)
|
||||||
val popState = MethodRef(this, "popEntity", void)
|
val popState = MethodRef(this, "popEntity", void)
|
||||||
|
|||||||
@@ -1,30 +1,40 @@
|
|||||||
package mods.betterfoliage.integration
|
package mods.betterfoliage.integration
|
||||||
|
|
||||||
import mods.betterfoliage.config.BlockConfig
|
|
||||||
import mods.betterfoliage.render.pipeline.RenderCtxBase
|
import mods.betterfoliage.render.pipeline.RenderCtxBase
|
||||||
import mods.betterfoliage.render.pipeline.RenderCtxForge
|
|
||||||
import mods.betterfoliage.render.pipeline.RenderCtxVanilla
|
import mods.betterfoliage.render.pipeline.RenderCtxVanilla
|
||||||
|
import mods.betterfoliage.resource.discovery.BakeWrapperManager
|
||||||
import mods.betterfoliage.util.HasLogger
|
import mods.betterfoliage.util.HasLogger
|
||||||
import mods.betterfoliage.util.allAvailable
|
import mods.betterfoliage.util.allAvailable
|
||||||
import mods.betterfoliage.util.get
|
import mods.betterfoliage.util.get
|
||||||
|
import mods.betterfoliage.util.mapArray
|
||||||
import mods.octarinecore.*
|
import mods.octarinecore.*
|
||||||
import net.minecraft.block.BlockRenderType
|
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.client.renderer.BufferBuilder
|
||||||
|
import net.minecraft.util.Direction
|
||||||
|
import net.minecraft.util.Direction.DOWN
|
||||||
|
import net.minecraft.util.Direction.EAST
|
||||||
|
import net.minecraft.util.Direction.NORTH
|
||||||
|
import net.minecraft.util.Direction.SOUTH
|
||||||
|
import net.minecraft.util.Direction.WEST
|
||||||
import net.minecraft.util.math.BlockPos
|
import net.minecraft.util.math.BlockPos
|
||||||
import net.minecraft.world.ILightReader
|
import net.minecraft.world.ILightReader
|
||||||
|
import net.minecraftforge.client.model.pipeline.LightUtil
|
||||||
import org.apache.logging.log4j.Level.INFO
|
import org.apache.logging.log4j.Level.INFO
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration for ShadersMod.
|
* Integration for ShadersMod.
|
||||||
*/
|
*/
|
||||||
object ShadersModIntegration : HasLogger() {
|
object ShadersModIntegration : HasLogger() {
|
||||||
@JvmStatic val isAvailable = allAvailable(SVertexBuilder, SVertexBuilder.pushState, SVertexBuilder.popState, BlockAliases.getAliasBlockId)
|
@JvmStatic val isEffectsAvailable = allAvailable(SVertexBuilder.pushState, SVertexBuilder.popState, BlockAliases.getAliasBlockId)
|
||||||
|
@JvmStatic val isDiffuseAvailable = allAvailable(Shaders.shaderPackLoaded, Shaders.blockLightLevel05, Shaders.blockLightLevel06, Shaders.blockLightLevel08)
|
||||||
|
|
||||||
val defaultLeaves = Blocks.OAK_LEAVES.defaultState
|
@JvmStatic val defaultLeaves = Blocks.OAK_LEAVES.defaultState!!
|
||||||
val defaultGrass = Blocks.GRASS.defaultState
|
@JvmStatic val defaultGrass = Blocks.GRASS.defaultState!!
|
||||||
|
|
||||||
|
@JvmStatic var diffuseShades = Direction.values().mapArray { LightUtil.diffuseLight(it) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called from transformed ShadersMod code.
|
* Called from transformed ShadersMod code.
|
||||||
@@ -37,12 +47,29 @@ object ShadersModIntegration : HasLogger() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
logger.log(INFO, "ShadersMod integration is ${if (isAvailable) "enabled" else "disabled" }")
|
logger.log(INFO, "ShadersMod diffuse shading integration is ${if (isDiffuseAvailable) "enabled" else "disabled" }")
|
||||||
|
logger.log(INFO, "ShadersMod vertex shader integration is ${if (isEffectsAvailable) "enabled" else "disabled" }")
|
||||||
|
|
||||||
|
// Recalculate the diffsuse shading values used when resources are reloaded
|
||||||
|
if (isDiffuseAvailable) BakeWrapperManager.onInvalidate {
|
||||||
|
if (Shaders.shaderPackLoaded.getStatic()) {
|
||||||
|
diffuseShades = Direction.values().mapArray { face ->
|
||||||
|
when(face) {
|
||||||
|
DOWN -> Shaders.blockLightLevel05.getStatic()
|
||||||
|
WEST, EAST -> Shaders.blockLightLevel06.getStatic()
|
||||||
|
NORTH, SOUTH -> Shaders.blockLightLevel08.getStatic()
|
||||||
|
else -> LightUtil.diffuseLight(face)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
diffuseShades = Direction.values().mapArray { LightUtil.diffuseLight(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Quads rendered inside this block will use the given block entity data in shader programs. */
|
/** Quads rendered inside this block will use the given block entity data in shader programs. */
|
||||||
inline fun renderAs(buffer: BufferBuilder, state: BlockState, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) {
|
inline fun renderAs(buffer: BufferBuilder, state: BlockState, renderType: BlockRenderType, enabled: Boolean = true, func: ()->Unit) {
|
||||||
if (isAvailable && enabled) {
|
if (isEffectsAvailable && enabled) {
|
||||||
val aliasBlockId = BlockAliases.getAliasBlockId.invokeStatic(state)
|
val aliasBlockId = BlockAliases.getAliasBlockId.invokeStatic(state)
|
||||||
val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder]
|
val sVertexBuilder = buffer[BufferBuilder_sVertexBuilder]
|
||||||
SVertexBuilder.pushState.invoke(sVertexBuilder, aliasBlockId)
|
SVertexBuilder.pushState.invoke(sVertexBuilder, aliasBlockId)
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package mods.betterfoliage.render.lighting
|
package mods.betterfoliage.render.lighting
|
||||||
|
|
||||||
|
import mods.betterfoliage.integration.ShadersModIntegration
|
||||||
import mods.betterfoliage.model.HalfBakedQuad
|
import mods.betterfoliage.model.HalfBakedQuad
|
||||||
import mods.betterfoliage.util.Double3
|
import mods.betterfoliage.util.Double3
|
||||||
import mods.betterfoliage.util.EPSILON_ONE
|
import mods.betterfoliage.util.EPSILON_ONE
|
||||||
import mods.betterfoliage.util.EPSILON_ZERO
|
import mods.betterfoliage.util.EPSILON_ZERO
|
||||||
|
import mods.betterfoliage.util.get
|
||||||
import mods.betterfoliage.util.minBy
|
import mods.betterfoliage.util.minBy
|
||||||
import net.minecraft.client.renderer.color.BlockColors
|
import net.minecraft.client.renderer.color.BlockColors
|
||||||
import net.minecraft.util.Direction
|
import net.minecraft.util.Direction
|
||||||
import net.minecraft.util.Direction.*
|
import net.minecraft.util.Direction.*
|
||||||
import net.minecraft.util.Direction.Axis
|
|
||||||
import net.minecraftforge.client.model.pipeline.LightUtil
|
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class VanillaQuadLighting {
|
class VanillaQuadLighting {
|
||||||
@@ -34,7 +34,7 @@ class VanillaQuadLighting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun applyDiffuseLighting(face: Direction) {
|
fun applyDiffuseLighting(face: Direction) {
|
||||||
val factor = LightUtil.diffuseLight(face)
|
val factor = ShadersModIntegration.diffuseShades[face]
|
||||||
tint[0] *= factor; tint[1] *= factor; tint[2] *= factor
|
tint[0] *= factor; tint[1] *= factor; tint[2] *= factor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user