wip2 faster rendering system

This commit is contained in:
Lukas 2020-10-03 13:06:14 +02:00
parent 7c4c377809
commit 790dc92634
3 changed files with 12 additions and 18 deletions

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.game.datatypes.world;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks;
import de.bixilon.minosoft.render.blockModels.Face.RenderConstants;
import java.util.HashMap;
@ -32,6 +33,9 @@ public class Chunk {
public Block getBlock(int x, int y, int z) {
byte section = (byte) (y / RenderConstants.SECTION_HEIGHT);
if (! nibbles.containsKey(section)) {
return Blocks.nullBlock;
}
return nibbles.get(section).getBlock(x, y % RenderConstants.SECTION_HEIGHT, z);
}

View File

@ -96,6 +96,7 @@ public class GameWindow {
GameWindow.connection = connection;
running = true;
playerController = new PlayerController(openGLWindow.getWindow());
renderer.startChunkPreparation(connection);
}
public static void pause() {

View File

@ -14,26 +14,22 @@
package de.bixilon.minosoft.render;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks;
import de.bixilon.minosoft.game.datatypes.world.*;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation;
import javafx.util.Pair;
import org.apache.commons.collections.primitives.ArrayFloatList;
import de.bixilon.minosoft.render.blockModels.Face.RenderConstants;
import java.lang.reflect.Array;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import static org.lwjgl.opengl.GL11.*;
public class WorldRenderer {
private final ConcurrentHashMap<ChunkLocation, ConcurrentHashMap<Byte, ArrayFloatList>> faces;
private ConcurrentHashMap<ChunkLocation, ConcurrentHashMap<Byte, ArrayFloatList>> faces;
private AssetsLoader assetsLoader;
private LinkedBlockingQueue<Runnable> queuedMapData;
@ -60,7 +56,6 @@ public class WorldRenderer {
});
chunkLoadThread.setName(String.format("%d/ChunkLoading", connection.getConnectionId()));
chunkLoadThread.start();
assetsLoader = new AssetsLoader();
}
public void queueChunkBulk(HashMap<ChunkLocation, Chunk> chunks) {
@ -79,6 +74,9 @@ public class WorldRenderer {
queuedMapData.add(() -> prepareBlock(position, block, false));
}
private void prepareBlock(BlockPosition position, Block block, boolean b) {
}
private void prepareChunk(ChunkLocation location, Chunk chunk) {
// clear or create current chunk
ConcurrentHashMap<Byte, ArrayFloatList> chunkFaces = new ConcurrentHashMap<>();
@ -94,7 +92,7 @@ public class WorldRenderer {
ConcurrentHashMap<ChunkLocation, Chunk> world = GameWindow.getConnection().getPlayer().getWorld().getAllChunks();
// clear or create current chunk nibble
ArrayFloatList nibbleMap = new ArrayFloatList();
faces.get(chunkLocation).put(sectionHeight, nibbleMap);
//faces.get(chunkLocation).put(sectionHeight, nibbleMap);
ConcurrentHashMap<ChunkNibbleLocation, Block> nibbleBlocks = nibble.getBlocks();
nibbleBlocks.forEach((location, block) -> {
HashSet<FaceOrientation> facesToDraw = new HashSet<>();
@ -170,7 +168,7 @@ public class WorldRenderer {
yield nibbleBlocks.get(new ChunkNibbleLocation(location.getX(), location.getY(), location.getZ() + 1));
}
};
if (dependedBlock == null || !assetsLoader.getBlockModelLoader().isFull(dependedBlock)) {
if (dependedBlock == null ||!assetsLoader.getBlockModelLoader().isFull(dependedBlock)) {
facesToDraw.add(orientation);
}
}
@ -182,15 +180,6 @@ public class WorldRenderer {
}
private void prepareBlock(BlockPosition position, Block block, boolean trustEdges) {
// TODO
}
private void prepareBlock(BlockPosition position, boolean trustEdges) {
prepareBlock(position, GameWindow.getConnection().getPlayer().getWorld().getBlock(position), trustEdges);
}
public void draw() {
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, assetsLoader.getTextureLoader().getTextureID());