Optimize renderer
This commit is contained in:
@@ -6,8 +6,23 @@ import type { SortType } from "./translucent_sort.ts";
|
||||
|
||||
// messages between the main thread and the chunk workers
|
||||
|
||||
// position 3, uv 2, color 4 (directional shade and ambient occlusion, alpha), lightmap coordinates 2
|
||||
export const TERRAIN_VERTEX_FLOATS = 11;
|
||||
// a terrain vertex, 24 bytes: position as float32x3, atlas uv as unorm16x2, directional shade times ambient occlusion
|
||||
// and alpha as unorm8x4 (shade repeated in rgb), and lightmap coordinates as unorm8x2 plus two unused bytes
|
||||
export const TERRAIN_VERTEX_BYTES = 24;
|
||||
export const TERRAIN_QUAD_BYTES = 4 * TERRAIN_VERTEX_BYTES;
|
||||
|
||||
// solid and cutout quads are grouped by the way they face, so groups facing away from the camera can be skipped, like
|
||||
// sodium's block face culling. the groups follow FACE_NORMALS' order, then the quads that aren't axis aligned
|
||||
export const FACE_GROUPS = 7;
|
||||
export const UNALIGNED_GROUP = 6;
|
||||
|
||||
export interface FaceGroup {
|
||||
first: number;
|
||||
count: number;
|
||||
// the lowest and highest plane the group's quads lie on, along its axis
|
||||
min: number;
|
||||
max: number;
|
||||
}
|
||||
|
||||
export type ToChunkWorker =
|
||||
| {
|
||||
@@ -44,10 +59,12 @@ export type ToChunkWorker =
|
||||
camera: number[];
|
||||
};
|
||||
|
||||
// 4 vertices per quad
|
||||
// 4 vertices per quad, TERRAIN_VERTEX_BYTES each
|
||||
export interface LayerMesh {
|
||||
vertices: Float32Array;
|
||||
vertices: Uint8Array<ArrayBuffer>;
|
||||
quad_count: number;
|
||||
// solid and cutout only, see FACE_GROUPS. the quads are stored group after group
|
||||
groups?: FaceGroup[];
|
||||
}
|
||||
|
||||
export type FromChunkWorker =
|
||||
@@ -64,6 +81,9 @@ export type FromChunkWorker =
|
||||
chunk_x: number;
|
||||
chunk_z: number;
|
||||
version: number;
|
||||
// the lowest and highest y of the chunk's quads, for frustum culling
|
||||
min_y: number;
|
||||
max_y: number;
|
||||
solid: LayerMesh;
|
||||
cutout: LayerMesh;
|
||||
translucent: LayerMesh & {
|
||||
|
||||
Reference in New Issue
Block a user