return WebAssembly.instantiate(wasm_code, import_object);
})
.then(function(wasm_module) {
- // @ROBUSTNESS: This only allows for 1 Onyx program to running at a time in the window.
- // This probably iesn't a limitation that needs to be worried about, but it is a limitation.
window.ONYX_MEMORY = wasm_module.instance.exports.memory;
window.ONYX_INSTANCE = wasm_module.instance;
use package core
+#private_file events :: package js_events
+#private_file gl :: package gl
+#private_file gfx :: package immediate_mode
+
main :: (args: [] cstr) {
println("Hello World!");
+
+ gl.init("game");
+ events.init();
+ gfx.immediate_renderer_init();
+
+ start_loop :: () -> void #foreign "game" "start_loop" ---
+ start_loop();
+}
+
+#export "loop" () {
+ poll_events();
+ draw();
+}
+
+poll_events :: () {
+ for event: events.consume() do switch event.kind {
+ case .MouseDown do println("Mouse was down!");
+
+ case .Resize {
+ printf("Window was resized to: %i %i\n", event.resize.width, event.resize.height);
+
+ gl.setSize(event.resize.width, event.resize.height);
+ gl.viewport(0, 0, event.resize.width, event.resize.height);
+ gfx.use_ortho_projection(0, ~~event.resize.width, 0, ~~event.resize.height);
+ }
+ }
+}
+
+draw :: () {
+ gl.clearColor(0, 0, 0, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gfx.quad(.{ 0, 0 }, .{ 400, 400 }, color=.{ 1, 0, 1 });
+ gfx.flush();
}
+