From 359c4b702d4327d92704201fc2977dbf9d179dd7 Mon Sep 17 00:00:00 2001 From: makamys Date: Thu, 30 Jun 2022 08:43:04 +0200 Subject: Don't do face culling for translucent quads Order matters when quads are translucent. Partial fix for incorrect water rendering. --- src/main/java/makamys/neodymium/renderer/ChunkMesh.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/makamys/neodymium/renderer/ChunkMesh.java b/src/main/java/makamys/neodymium/renderer/ChunkMesh.java index 3971c65..df4f9f7 100644 --- a/src/main/java/makamys/neodymium/renderer/ChunkMesh.java +++ b/src/main/java/makamys/neodymium/renderer/ChunkMesh.java @@ -178,20 +178,24 @@ public class ChunkMesh extends Mesh { ByteBuffer buffer = BufferUtils.createByteBuffer(quadCount * 4 * MeshQuad.getStride()); BufferWriter out = new BufferWriter(buffer); - quads.sort(MESH_QUAD_RENDER_COMPARATOR); + boolean sortByNormals = pass == 0; + + if(sortByNormals) { + quads.sort(MESH_QUAD_RENDER_COMPARATOR); + } try { int i = 0; for(MeshQuad quad : quads) { if(i < quadCount) { if(MeshQuad.isValid(quad)) { - int subMeshStartIdx = QUAD_NORMAL_TO_NORMAL_ORDER[quad.normal.ordinal()]; + int subMeshStartIdx = sortByNormals ? QUAD_NORMAL_TO_NORMAL_ORDER[quad.normal.ordinal()] : 0; if(subMeshStart[subMeshStartIdx] == -1) { subMeshStart[subMeshStartIdx] = i; } quad.writeToBuffer(out); i++; - } else { + } else if(sortByNormals){ break; } } -- cgit