Set up a basic "front-end" for the webassembly module to be tested locally from a data folder (I use python -m http.server). The WebAssembly application is now responsible for all setup/rendering through the WebGL2 context.
This commit is contained in:
73
data/std_functions.js
Normal file
73
data/std_functions.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
File: std_functions.c
|
||||
Author: Taylor Robbins
|
||||
Date: 09\01\2025
|
||||
Description:
|
||||
** Contains all the functions that are required as imports by the C standard library implementation in the std folder
|
||||
*/
|
||||
|
||||
import { WASM_MEMORY_PAGE_SIZE, appGlobals } from './globals.js'
|
||||
import { wasmPntrToJsString, wasmPntrAndLengthToJsString } from './wasm_functions.js'
|
||||
|
||||
export function jsStdPrint(level, messageStrPntr, messageLength)
|
||||
{
|
||||
let messageStr = wasmPntrAndLengthToJsString(messageStrPntr, messageLength);
|
||||
if (level == 0) { console.debug(messageStr); }
|
||||
else if (level == 1) { console.info(messageStr); }
|
||||
else if (level == 2) { console.warn(messageStr); }
|
||||
else if (level == 3) { console.error(messageStr); }
|
||||
else { console.log(messageStr); }
|
||||
}
|
||||
|
||||
export function jsStdAbort(messageStrPntr, exitCode)
|
||||
{
|
||||
let messageStr = wasmPntrToJsString(messageStrPntr);
|
||||
let exitStr = "Abort [" + exitCode + "]: " + messageStr;
|
||||
console.error(exitStr);
|
||||
throw new Error(exitStr);
|
||||
}
|
||||
|
||||
export function jsStdAssertFailure(filePathPntr, fileLineNum, funcNamePntr, conditionStrPntr, messageStrPntr)
|
||||
{
|
||||
let filePath = wasmPntrToJsString(filePathPntr);
|
||||
let funcName = wasmPntrToJsString(funcNamePntr);
|
||||
let conditionStr = wasmPntrToJsString(conditionStrPntr);
|
||||
let outputMessage = "";
|
||||
if (messageStrPntr != 0)
|
||||
{
|
||||
let messageStr = wasmPntrToJsString(messageStrPntr);
|
||||
outputMessage = "Assertion failed, " + messageStr + " (" + conditionStr + ") is not true! In " + filePath + ":" + fileLineNum + " " + funcName + "(...)";
|
||||
}
|
||||
else
|
||||
{
|
||||
outputMessage = "Assertion failed! (" + conditionStr + ") is not true! In " + filePath + ":" + fileLineNum + " " + funcName + "(...)";
|
||||
}
|
||||
console.error(outputMessage);
|
||||
throw new Error(outputMessage);
|
||||
}
|
||||
|
||||
export function jsStdDebugBreak()
|
||||
{
|
||||
//TODO: This is not a proper solution, really. Can we somehow notify the debugger in Firefox/Chrome/Safari/etc.?
|
||||
alert("A debug breakpoint has been hit!");
|
||||
}
|
||||
|
||||
//TODO: Can we use these inside the Wasm module rather than calling out to javascript??
|
||||
// __builtin_wasm_memory_size(0); // the number of 64Kb pages we have
|
||||
// __builtin_wasm_memory_grow(0, blocks); // increases amount of pages
|
||||
// __builtin_huge_valf(); // similar to Infinity in JS
|
||||
export function jsStdGrowMemory(numPages)
|
||||
{
|
||||
let currentPageCount = appGlobals.wasmModule.exports.memory.buffer.byteLength / WASM_MEMORY_PAGE_SIZE;
|
||||
// console.log("Memory growing by " + numPages + " pages (" + currentPageCount + " -> " + (currentPageCount + numPages) + ")");
|
||||
appGlobals.wasmModule.exports.memory.grow(numPages);
|
||||
appGlobals.memDataView = new DataView(new Uint8Array(appGlobals.wasmModule.exports.memory.buffer).buffer);
|
||||
}
|
||||
|
||||
export let jsStdFunctions = {
|
||||
jsStdPrint: jsStdPrint,
|
||||
jsStdAbort: jsStdAbort,
|
||||
jsStdAssertFailure: jsStdAssertFailure,
|
||||
jsStdDebugBreak: jsStdDebugBreak,
|
||||
jsStdGrowMemory: jsStdGrowMemory,
|
||||
};
|
||||
Reference in New Issue
Block a user