make tileserver better

This commit is contained in:
HF 2022-06-20 16:47:23 +02:00
parent 0fba279f64
commit 6eaea5b00c
3 changed files with 21 additions and 15 deletions

View File

@ -90,9 +90,10 @@ function addIndexedSubtiletoTile(
const [dx, dy] = cell;
const chunkOffset = (dx + dy * subtilesInTile * TILE_SIZE) * TILE_SIZE;
const emptyR = palette.rgb[0];
const emptyB = palette.rgb[1];
const emptyG = palette.rgb[1];
const { rgb } = palette;
const emptyR = rgb[0];
const emptyB = rgb[1];
const emptyG = rgb[1];
let pos = 0;
let clr;
@ -102,9 +103,9 @@ function addIndexedSubtiletoTile(
while (channelOffset < max) {
if (pos < subtile.length) {
clr = (subtile[pos++] & 0x3F) * 3;
buffer[channelOffset++] = palette.rgb[clr++];
buffer[channelOffset++] = palette.rgb[clr++];
buffer[channelOffset++] = palette.rgb[clr];
buffer[channelOffset++] = rgb[clr++];
buffer[channelOffset++] = rgb[clr++];
buffer[channelOffset++] = rgb[clr];
} else {
buffer[channelOffset++] = emptyR;
buffer[channelOffset++] = emptyB;
@ -137,8 +138,9 @@ export async function createZoomTileFromChunk(
canvas,
canvasTileFolder,
cell,
gPalette = null,
) {
const palette = new Palette(canvas.colors);
const palette = gPalette || new Palette(canvas.colors);
const canvasSize = canvas.size;
const [x, y] = cell;
const maxTiledZoom = getMaxTiledZoom(canvasSize);
@ -221,8 +223,9 @@ export async function createZoomedTile(
canvas,
canvasTileFolder,
cell,
gPalette = null,
) {
const palette = new Palette(canvas.colors);
const palette = gPalette || new Palette(canvas.colors);
const tileRGBBuffer = new Uint8Array(
TILE_SIZE * TILE_SIZE * TILE_ZOOM_LEVEL * TILE_ZOOM_LEVEL * 3,
);
@ -461,11 +464,11 @@ export async function initializeTiles(
const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`;
if (force || !fs.existsSync(filename)) {
const ret = await createZoomTileFromChunk(
canvasSize,
canvasId,
canvas,
canvasTileFolder,
palette,
[cx, cy],
palette,
);
if (ret) cnts += 1;
cnt += 1;
@ -490,9 +493,10 @@ export async function initializeTiles(
const filename = `${canvasTileFolder}/${zoom}/${cx}/${cy}.png`;
if (force || !fs.existsSync(filename)) {
const ret = await createZoomedTile(
canvas,
canvasTileFolder,
palette,
[zoom, cx, cy],
palette,
);
if (ret) cnts += 1;
cnt += 1;

View File

@ -42,7 +42,6 @@ class CanvasUpdater {
this.canvasTileFolder = `${TILE_FOLDER}/${id}`;
this.firstZoomtileWidth = this.canvas.size / TILE_SIZE / TILE_ZOOM_LEVEL;
this.maxTiledZoom = getMaxTiledZoom(this.canvas.size);
this.startReloadingLoops();
}
/*
@ -140,7 +139,7 @@ class CanvasUpdater {
/*
* initialize queues and start loops for updating tiles
*/
async startReloadingLoops() {
async initialize() {
logger.info(`Tiling: Using folder ${this.canvasTileFolder}`);
if (!fs.existsSync(`${this.canvasTileFolder}/0`)) {
if (!fs.existsSync(this.canvasTileFolder)) {
@ -177,7 +176,7 @@ RedisCanvas.setChunkChangeCallback(registerChunkChange);
/*
* starting update loops for canvases
*/
export function startAllCanvasLoops() {
export async function startAllCanvasLoops() {
if (!fs.existsSync(`${TILE_FOLDER}`)) fs.mkdirSync(`${TILE_FOLDER}`);
const ids = Object.keys(canvases);
for (let i = 0; i < ids.length; i += 1) {
@ -186,7 +185,9 @@ export function startAllCanvasLoops() {
if (!canvas.v) {
// just 2D canvases
const updater = new CanvasUpdater(id);
CanvasUpdaters[ids[i]] = updater;
// eslint-disable-next-line no-await-in-loop
await updater.initialize();
CanvasUpdaters[id] = updater;
}
}
}

View File

@ -47,6 +47,7 @@ connectRedis()
// eslint-disable-next-line max-len
`Tiling: Error on executing task ${task} args ${args}: ${error.message}`,
);
parentPort.postMessage('Failure!');
}
});
});