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 74d690f8..affb820f 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 @@ -130,7 +130,10 @@ public class ModelTextureBakery { glBlendFuncSeparate(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); } else { glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_BLEND); } + boolean hasDiscard = renderLayer == RenderLayer.getCutout() || + renderLayer == RenderLayer.getCutoutMipped(); //glBlendFunc(GL_ONE, GL_ONE); @@ -150,7 +153,7 @@ public class ModelTextureBakery { if (entityModel!=null&&!renderFluid) { entityModel.renderOut(transform, tex); } - this.rasterView(state, model, transform, randomValue, i, renderFluid, tex); + this.rasterView(state, model, transform, randomValue, i, renderFluid, tex, hasDiscard); } glViewport(viewdat[0], viewdat[1], viewdat[2], viewdat[3]); @@ -173,20 +176,25 @@ public class ModelTextureBakery { //SOMEBODY PLEASE FUCKING EXPLAIN TO ME WHY MUST CLEAR THE FRAMEBUFFER HERE WHEN IT IS LITERALLY CLEARED AT THE START OF THE FRAME // WITHOUT THIS, WATER DOESNT RENDER //TODO: FIXME, WHAT THE ACTUAL FUCK - glBindFramebuffer(GL_FRAMEBUFFER, this.capture.framebuffer.id); - glClearDepth(1); - glClear(GL_DEPTH_BUFFER_BIT); + //glBindFramebuffer(GL_FRAMEBUFFER, this.capture.framebuffer.id); + //glClearDepth(1); + //glClear(GL_DEPTH_BUFFER_BIT); glBindFramebuffer(GL_FRAMEBUFFER, 0); } private final BufferAllocator allocator = new BufferAllocator(786432); - private void rasterView(BlockState state, BlockStateModel model, Matrix4f transform, long randomValue, int face, boolean renderFluid, GpuTexture texture) { + private void rasterView(BlockState state, BlockStateModel model, Matrix4f transform, long randomValue, int face, boolean renderFluid, GpuTexture texture, boolean hasDiscard) { var bb = new BufferBuilder(this.allocator, VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR) { @Override public void vertex(float x, float y, float z, int color, float u, float v, int overlay, int light, float normalX, float normalY, float normalZ) { - super.vertex(x, y, z, ColorHelper.getArgb(0,0,1), u, v, overlay, light, normalX, normalY, normalZ); + int colour = color; + colour |= hasDiscard?2:0; + if (renderFluid) { + colour = ColorHelper.getArgb(0,0,1); + } + super.vertex(x, y, z, colour, u, v, overlay, light, normalX, normalY, normalZ); } @Override 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 799c09e1..e6950991 100644 --- a/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh +++ b/src/main/resources/assets/voxy/shaders/bakery/position_tex.fsh @@ -7,4 +7,7 @@ out vec4 colour; void main() { colour = texture(tex, texCoord)*(metadata&1); + if (colour.a <0.0001f) { + discard; + } }