diff --git a/src/main/java/me/cortex/voxy/client/core/model/bakery/BakedBlockEntityModel.java b/src/main/java/me/cortex/voxy/client/core/model/bakery/BakedBlockEntityModel.java index 5f722936..ab622bcc 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/bakery/BakedBlockEntityModel.java +++ b/src/main/java/me/cortex/voxy/client/core/model/bakery/BakedBlockEntityModel.java @@ -56,7 +56,7 @@ public class BakedBlockEntityModel { entity.setWorld(MinecraftClient.getInstance().world); if (renderer != null) { try { - renderer.render(entity, 0.0f, new MatrixStack(), layer->map.computeIfAbsent(layer, rl -> new LayerConsumer(rl, new ReuseVertexConsumer())).consumer, 0, 0, new Vec3d(0,0,0)); + renderer.render(entity, 0.0f, new MatrixStack(), layer->map.computeIfAbsent(layer, rl -> new LayerConsumer(rl, new ReuseVertexConsumer().setDefaultMeta(ModelTextureBakery.getMetaFromLayer(rl)))).consumer, 0, 0, new Vec3d(0,0,0)); } catch (Exception e) { Logger.error("Unable to bake block entity: " + entity, e); } diff --git a/src/main/java/me/cortex/voxy/client/core/model/bakery/ModelTextureBakery.java b/src/main/java/me/cortex/voxy/client/core/model/bakery/ModelTextureBakery.java index 7a72232b..65aaa88a 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/bakery/ModelTextureBakery.java +++ b/src/main/java/me/cortex/voxy/client/core/model/bakery/ModelTextureBakery.java @@ -42,15 +42,28 @@ public class ModelTextureBakery { this.height = height; } + public static int getMetaFromLayer(RenderLayer layer) { + boolean hasDiscard = layer == RenderLayer.getCutout() || + layer == RenderLayer.getCutoutMipped() || + layer == RenderLayer.getTripwire(); + + boolean isMipped = layer == RenderLayer.getCutoutMipped() || + layer == RenderLayer.getSolid() || + layer == RenderLayer.getTranslucent() || + layer == RenderLayer.getTripwire(); + + int meta = hasDiscard?1:0; + meta |= isMipped?2:0; + return meta; + } + private void bakeBlockModel(BlockState state, RenderLayer layer) { var model = MinecraftClient.getInstance() .getBakedModelManager() .getBlockModels() .getModel(state); - boolean hasDiscard = layer == RenderLayer.getCutout() || - layer == RenderLayer.getCutoutMipped() || - layer == RenderLayer.getTripwire(); + int meta = getMetaFromLayer(layer); for (Direction direction : new Direction[]{Direction.DOWN, Direction.UP, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST, null}) { for (var part : model.getParts(new LocalRandom(42L))) { @@ -58,7 +71,6 @@ public class ModelTextureBakery { for (var quad : quads) { //TODO: add meta specifiying quad has a tint - int meta = hasDiscard?1:0; this.vc.quad(quad, meta); } } @@ -66,7 +78,8 @@ public class ModelTextureBakery { } - private void bakeFluidState(BlockState state, int face) { + private void bakeFluidState(BlockState state, RenderLayer layer, int face) { + this.vc.setDefaultMeta(getMetaFromLayer(layer));//Set the meta while baking MinecraftClient.getInstance().getBlockRenderManager().renderFluid(BlockPos.ORIGIN, new BlockRenderView() { @Override public float getBrightness(Direction direction, boolean shaded) { @@ -131,6 +144,7 @@ public class ModelTextureBakery { return 0; } }, this.vc, state, state.getFluidState()); + this.vc.setDefaultMeta(0);//Reset default meta } private static boolean shouldReturnAirForFluid(BlockPos pos, int face) { @@ -220,7 +234,7 @@ public class ModelTextureBakery { var mat = new Matrix4f(); for (int i = 0; i < VIEWS.length; i++) { this.vc.reset(); - this.bakeFluidState(state, i); + this.bakeFluidState(state, layer, i); if (this.vc.isEmpty()) continue; BudgetBufferRenderer.setup(this.vc.getAddress(), this.vc.quadCount(), blockTextureId); diff --git a/src/main/java/me/cortex/voxy/client/core/model/bakery/ReuseVertexConsumer.java b/src/main/java/me/cortex/voxy/client/core/model/bakery/ReuseVertexConsumer.java index 0c13ca84..36894bcc 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/bakery/ReuseVertexConsumer.java +++ b/src/main/java/me/cortex/voxy/client/core/model/bakery/ReuseVertexConsumer.java @@ -12,15 +12,22 @@ public final class ReuseVertexConsumer implements VertexConsumer { private MemoryBuffer buffer = new MemoryBuffer(8192); private long ptr; private int count; + private int defaultMeta; public ReuseVertexConsumer() { this.reset(); } + public ReuseVertexConsumer setDefaultMeta(int meta) { + this.defaultMeta = meta; + return this; + } + @Override public ReuseVertexConsumer vertex(float x, float y, float z) { this.ensureCanPut(); this.ptr += VERTEX_FORMAT_SIZE; this.count++; //Goto next vertex + this.meta(this.defaultMeta); MemoryUtil.memPutFloat(this.ptr, x); MemoryUtil.memPutFloat(this.ptr + 4, y); MemoryUtil.memPutFloat(this.ptr + 8, z); @@ -90,6 +97,7 @@ public final class ReuseVertexConsumer implements VertexConsumer { } public ReuseVertexConsumer reset() { + this.defaultMeta = 0;//RESET THE DEFAULT META this.count = 0; this.ptr = this.buffer.address - VERTEX_FORMAT_SIZE;//the thing is first time this gets incremented by FORMAT_STRIDE return this; diff --git a/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh b/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh index b55b592f..e49efe30 100644 --- a/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh +++ b/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh @@ -6,7 +6,7 @@ in vec2 texCoord; out vec4 colour; void main() { - colour = texture(tex, texCoord); + colour = texture(tex, texCoord, ((~metadata>>1)&1u)*-16.0f); if (colour.a < 0.001f && ((metadata&1u)!=0)) { discard; }