always push shader metadata for block models

This commit is contained in:
octarine-noise
2016-08-09 09:23:55 +02:00
parent 913496473d
commit 1bd353577f
3 changed files with 120 additions and 115 deletions

View File

@@ -46,11 +46,11 @@ object ShadersModIntegration {
} }
} }
/** Quads rendered inside this block will behave as tallgrass blocks in shader programs. */ /** Quads rendered inside this block will use the given block entity data in shader programs. */
inline fun grass(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) { inline fun renderAs(blockEntityData: Long, renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) {
if ((isPresent && enabled)) { if ((isPresent && enabled)) {
val vertexBuilder = Refs.sVertexBuilder.get(renderer)!! val vertexBuilder = Refs.sVertexBuilder.get(renderer)!!
Refs.pushEntity_num.invoke(vertexBuilder, tallGrassEntityData) Refs.pushEntity_num.invoke(vertexBuilder, blockEntityData)
func() func()
Refs.popEntity.invoke(vertexBuilder) Refs.popEntity.invoke(vertexBuilder)
} else { } else {
@@ -58,15 +58,15 @@ object ShadersModIntegration {
} }
} }
/** Quads rendered inside this block will use the given block entity data in shader programs. */
inline fun renderAs(state: IBlockState, renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) =
renderAs(entityDataFor(state), renderer, enabled, func)
/** Quads rendered inside this block will behave as tallgrass blocks in shader programs. */
inline fun grass(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) =
renderAs(tallGrassEntityData, renderer, enabled, func)
/** Quads rendered inside this block will behave as leaf blocks in shader programs. */ /** Quads rendered inside this block will behave as leaf blocks in shader programs. */
inline fun leaves(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) { inline fun leaves(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) =
if ((isPresent && enabled)) { renderAs(leavesEntityData, renderer, enabled, func)
val vertexBuilder = Refs.sVertexBuilder.get(renderer)!!
Refs.pushEntity_num.invoke(vertexBuilder, leavesEntityData.toLong())
func()
Refs.popEntity.invoke(vertexBuilder)
} else {
func()
}
}
} }

View File

@@ -2,6 +2,7 @@ package mods.betterfoliage.client.render
import mods.betterfoliage.client.config.BlockMatcher import mods.betterfoliage.client.config.BlockMatcher
import mods.betterfoliage.client.integration.OptifineCTM import mods.betterfoliage.client.integration.OptifineCTM
import mods.betterfoliage.client.integration.ShadersModIntegration
import mods.betterfoliage.client.render.AbstractRenderColumn.BlockType.* import mods.betterfoliage.client.render.AbstractRenderColumn.BlockType.*
import mods.betterfoliage.client.render.AbstractRenderColumn.QuadrantType.* import mods.betterfoliage.client.render.AbstractRenderColumn.QuadrantType.*
import mods.octarinecore.client.render.* import mods.octarinecore.client.render.*
@@ -158,6 +159,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl
val quadrantsBottom = Array(4) { SMALL_RADIUS } val quadrantsBottom = Array(4) { SMALL_RADIUS }
if (downType == PARALLEL) quadrantsBottom.checkNeighbors(ctx, baseRotation, logAxis, -1) if (downType == PARALLEL) quadrantsBottom.checkNeighbors(ctx, baseRotation, logAxis, -1)
ShadersModIntegration.renderAs(ctx.blockState(Int3.zero), renderer) {
quadrantRotations.forEachIndexed { idx, quadrantRotation -> quadrantRotations.forEachIndexed { idx, quadrantRotation ->
// set rotation for the current quadrant // set rotation for the current quadrant
val rotation = baseRotation + quadrantRotation val rotation = baseRotation + quadrantRotation
@@ -261,7 +263,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl
} }
) )
} }
}
return true return true
} }

View File

@@ -64,6 +64,7 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) {
modelRenderer.updateShading(Int3.zero, allFaces) modelRenderer.updateShading(Int3.zero, allFaces)
// render full grass block // render full grass block
ShadersModIntegration.renderAs(ctx.blockState(Int3.zero), renderer) {
modelRenderer.render( modelRenderer.render(
renderer, renderer,
fullCube, fullCube,
@@ -72,10 +73,12 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) {
icon = { ctx, qi, q -> grassTopTexture }, icon = { ctx, qi, q -> grassTopTexture },
postProcess = { ctx, qi, q, vi, v -> postProcess = { ctx, qi, q, vi, v ->
rotateUV(2) rotateUV(2)
if (isSnowed) { if(!ctx.aoEnabled) setGrey(1.4f) } if (isSnowed) {
else if (ctx.aoEnabled) multiplyColor(blockColor) if (!ctx.aoEnabled) setGrey(1.4f)
} else if (ctx.aoEnabled) multiplyColor(blockColor)
} }
) )
}
} else { } else {
renderWorldBlockBase(ctx, dispatcher, renderer, null) renderWorldBlockBase(ctx, dispatcher, renderer, null)