abse/gameboy-advance
A tscircuit package created by abse.
- Version
- 0.0.45
- License
- unset
- Stars
- 0
web/src/platform_web.c
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include <emscripten.h>
#include "game_platform.h"
EM_JS(int, read_buttons, (), { return Module.buttons || 0; });
EM_JS(double, read_clock, (), { return Module.clock(); });
EM_JS(int, is_paused, (), { return Module.paused; });
EM_JS(void, present, (const uint8_t *pixels, const uint32_t *palette), {
const rgba = new Uint8ClampedArray(320 * 200 * 4);
for (let i = 0; i < 320 * 200; i++) {
const c = HEAPU32[(palette >>> 2) + HEAPU8[pixels + i]];
const j = i * 4;
rgba[j] = (c >>> 16) & 255;
rgba[j+1] = (c >>> 8) & 255;
rgba[j+2] = c & 255;
rgba[j+3] = 255;
}
postMessage({type:'frame', pixels:rgba.buffer}, [rgba.buffer]);
});
uint16_t platform_buttons(void) { return read_buttons(); }
uint32_t platform_millis(void) { return (uint32_t)read_clock(); }
void platform_sleep(uint32_t ms) {
emscripten_sleep(ms);
while (is_paused()) emscripten_sleep(50);
}
void platform_present(const uint8_t *pixels, const uint32_t *palette) {
present(pixels, palette);
platform_sleep(0);
}