Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.11",
"protocolVersion": 774,
"x": -1,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23644
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.11",
"protocolVersion": 774,
"x": 0,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23659
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.11",
"protocolVersion": 774,
"x": 0,
"z": 177,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 25720
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.5",
"protocolVersion": 770,
"x": -1,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23695
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.5",
"protocolVersion": 770,
"x": 0,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23710
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "1.21.5",
"protocolVersion": 770,
"x": 0,
"z": 177,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 25769
}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.1",
"protocolVersion": 775,
"x": 0,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23707
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.1",
"protocolVersion": 775,
"x": 0,
"z": 177,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 25766
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.1",
"protocolVersion": 775,
"x": 0,
"z": 178,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 21666
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.3",
"protocolVersion": 777,
"x": 0,
"z": 176,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 23682
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.3",
"protocolVersion": 777,
"x": 0,
"z": 177,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 25741
}

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "26.3",
"protocolVersion": 777,
"x": 0,
"z": 178,
"packetName": "map_chunk",
"source": "vanilla client recording",
"byteLength": 21627
}

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions src/wasm-mesher/bridge/convertChunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,26 @@ export const getBlockMeta = (version: string): BlockMeta => {
return meta
}

const ceilLog2 = (count: number) => (count <= 1 ? 0 : 32 - Math.clz32(count - 1))

const globalPaletteBitsCache = new Map<string, { blocks: number; biomes: number }>()

/**
* Bits of the global block state and biome palettes, vanilla's
* `Strategy.globalPaletteBitsInMemory`: ceillog2 of the registry size.
* map_chunk stores direct (unpaletted) containers with them. The biome count
* is minecraft-data's vanilla registry; a server's own biomes can change it.
*/
export const getGlobalPaletteBits = (version: string) => {
const cached = globalPaletteBitsCache.get(version)
if (cached) return cached
const mcData = MinecraftData(version)
const blockStates = mcData.blocksArray.reduce((max, block) => Math.max(max, block.maxStateId ?? 0), 0) + 1
const bits = { blocks: ceilLog2(blockStates), biomes: ceilLog2(mcData.biomesArray.length) }
globalPaletteBitsCache.set(version, bits)
return bits
}

export interface ChunkConversionResult {
blockStates: Uint16Array
blockLight: Uint8Array
Expand Down
22 changes: 11 additions & 11 deletions src/wasm-mesher/runtime-build/wasm_mesher.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,23 +226,23 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl

export interface InitOutput {
readonly memory: WebAssembly.Memory;
readonly computeWireframeEdges: (a: number, b: number, c: number, d: number) => [number, number];
readonly computeWireframeEdgesU16: (a: number, b: number, c: number, d: number) => [number, number];
readonly generateGeometryFromDump118: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number, i1: number, j1: number, k1: number) => any;
readonly generateGeometryFromMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => any;
readonly generateGeometryFromMapChunkV18PlusMulti: (a: any, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number) => any;
readonly generateGeometryFromParsedV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number) => any;
readonly generateGeometryFromParsedV16V17Multi: (a: any, b: number, c: number, d: number, e: number, f: number, g: any, h: number, i: any, j: any, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number) => any;
readonly generate_geometry: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => any;
readonly generate_geometry_multi: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number) => any;
readonly parseChunkDump118: (a: number, b: number, c: number, d: number, e: number) => any;
readonly unpackLightSection118: (a: number, b: number) => [number, number];
readonly parseChunkDump118NoMarshal: (a: number, b: number, c: number, d: number, e: number) => number;
readonly parseChunkDump118FullColumnAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => any;
readonly generateGeometryFromDump118: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number, i1: number, j1: number, k1: number) => any;
readonly parseChunkDump118FullColumn: (a: number, b: number, c: number, d: number, e: number) => any;
readonly generateGeometryFromMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => any;
readonly parseMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
readonly parseChunkDump118FullColumnAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => any;
readonly parseChunkDump118NoMarshal: (a: number, b: number, c: number, d: number, e: number) => number;
readonly parseChunkSectionsV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => any;
readonly generateGeometryFromParsedV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number) => any;
readonly generateGeometryFromMapChunkV18PlusMulti: (a: any, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number) => any;
readonly generateGeometryFromParsedV16V17Multi: (a: any, b: number, c: number, d: number, e: number, f: number, g: any, h: number, i: any, j: any, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number) => any;
readonly computeWireframeEdges: (a: number, b: number, c: number, d: number) => [number, number];
readonly computeWireframeEdgesU16: (a: number, b: number, c: number, d: number) => [number, number];
readonly parseMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
readonly parseUpdateLightV17: (a: number, b: number, c: number) => any;
readonly unpackLightSection118: (a: number, b: number) => [number, number];
readonly __wbindgen_malloc: (a: number, b: number) => number;
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
readonly __wbindgen_exn_store: (a: number) => void;
Expand Down
Binary file modified src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm
Binary file not shown.
22 changes: 11 additions & 11 deletions src/wasm-mesher/runtime-build/wasm_mesher_bg.wasm.d.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export const computeWireframeEdges: (a: number, b: number, c: number, d: number) => [number, number];
export const computeWireframeEdgesU16: (a: number, b: number, c: number, d: number) => [number, number];
export const generateGeometryFromDump118: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number, i1: number, j1: number, k1: number) => any;
export const generateGeometryFromMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => any;
export const generateGeometryFromMapChunkV18PlusMulti: (a: any, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number) => any;
export const generateGeometryFromParsedV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number) => any;
export const generateGeometryFromParsedV16V17Multi: (a: any, b: number, c: number, d: number, e: number, f: number, g: any, h: number, i: any, j: any, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number) => any;
export const generate_geometry: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => any;
export const generate_geometry_multi: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number) => any;
export const parseChunkDump118: (a: number, b: number, c: number, d: number, e: number) => any;
export const unpackLightSection118: (a: number, b: number) => [number, number];
export const parseChunkDump118NoMarshal: (a: number, b: number, c: number, d: number, e: number) => number;
export const parseChunkDump118FullColumnAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => any;
export const generateGeometryFromDump118: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number, i1: number, j1: number, k1: number) => any;
export const parseChunkDump118FullColumn: (a: number, b: number, c: number, d: number, e: number) => any;
export const generateGeometryFromMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => any;
export const parseMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
export const parseChunkDump118FullColumnAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => any;
export const parseChunkDump118NoMarshal: (a: number, b: number, c: number, d: number, e: number) => number;
export const parseChunkSectionsV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => any;
export const generateGeometryFromParsedV16V17: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number) => any;
export const generateGeometryFromMapChunkV18PlusMulti: (a: any, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number) => any;
export const generateGeometryFromParsedV16V17Multi: (a: any, b: number, c: number, d: number, e: number, f: number, g: any, h: number, i: any, j: any, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number, d1: number, e1: number, f1: number, g1: number, h1: number) => any;
export const computeWireframeEdges: (a: number, b: number, c: number, d: number) => [number, number];
export const computeWireframeEdgesU16: (a: number, b: number, c: number, d: number) => [number, number];
export const parseMapChunkV18Plus: (a: number, b: number, c: number, d: number, e: number, f: number) => any;
export const parseUpdateLightV17: (a: number, b: number, c: number) => any;
export const unpackLightSection118: (a: number, b: number) => [number, number];
export const __wbindgen_malloc: (a: number, b: number) => number;
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
export const __wbindgen_exn_store: (a: number) => void;
Expand Down
16 changes: 16 additions & 0 deletions src/wasm-mesher/tests/globalPaletteBits.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { describe, expect, test } from 'vitest'
import { getGlobalPaletteBits } from '../bridge/convertChunk'

describe('getGlobalPaletteBits', () => {
test('is ceillog2 of the block state and biome registry sizes', () => {
// 20342 states, 61 biomes
expect(getGlobalPaletteBits('1.18.2')).toEqual({ blocks: 15, biomes: 6 })
// 65 biomes need a seventh bit
expect(getGlobalPaletteBits('1.21.4')).toEqual({ blocks: 15, biomes: 7 })
})

test('needs no extra bit for a power-of-two registry', () => {
// 64 biomes fit in 6 bits (Mth.ceillog2(64) = 6)
expect(getGlobalPaletteBits('1.20.4').biomes).toBe(6)
})
})
Loading
Loading