Hey, nice. Lots to learn still, but this is working.

This commit is contained in:
Mahlon E. Smith 2025-08-19 13:26:36 -07:00
parent eb25270d34
commit 740211ed4c
Signed by: mahlon
SSH key fingerprint: SHA256:dP84sRGKZRpOOiPD/+GuOq+SHSxEw9qi5BWLQobaHm0
3 changed files with 53 additions and 32 deletions

View file

@ -8,6 +8,12 @@ when defined(emscripten):
--os:linux --os:linux
--cpu:wasm32 --cpu:wasm32
--cc:clang --cc:clang
when defined( windows ):
--clang.exe:emcc.bat # Replace C
--clang.linkerexe:emcc.bat # Replace C linker
--clang.cpp.exe:emcc.bat # Replace C++
--clang.cpp.linkerexe:emcc.bat # Replace C++ linker.
else:
--clang.exe:emcc --clang.exe:emcc
--clang.linkerexe:emcc --clang.linkerexe:emcc
--clang.cpp.exe:emcc --clang.cpp.exe:emcc
@ -17,11 +23,12 @@ when defined(emscripten):
--panics:on --panics:on
--exceptions:goto --exceptions:goto
--define:noSignalHandler --define:noSignalHandler
--passL:"-03" --passL:"-Oz" # Production build
# --passL:"-O0 -gDebug -gsource-map" # Debug build
# --passL:"-s EXPORT_NAME=Test1Module" # --passL:"-s EXPORT_NAME=Test1Module"
# --passL:"-s MODULARIZE=1" # --passL:"-s MODULARIZE=1"
--passL:"-s ASYNCIFY" # async support --passL:"-s ASYNCIFY" # async support
# --passL:"-s JSPI" # async support # --passL:"-s JSPI" # async support
--passL:"-o index.html" --passL:"-o build/index.html"
# --passL:"--shell-file minshell.html" --passL:"--shell-file minshell.html"

View file

@ -14,9 +14,9 @@ task make, "Native build":
exec "mkdir -p build && nim c --outdir:build -d:release --opt:speed src/nim_wasm_test.nim" exec "mkdir -p build && nim c --outdir:build -d:release --opt:speed src/nim_wasm_test.nim"
task makeweb, "Emscripten build": task makeweb, "Emscripten build":
exec "mkdir -p build && nim c --outdir:build -d:emscripten src/nim_wasm_test.nim" exec "mkdir -p build && nim c -d:emscripten -d:release src/nim_wasm_test.nim"
task runweb, "Run a local webserver for the wasm build": task runweb, "Run a local webserver for the wasm build":
exec "nimhttpd -H:'Cross-Origin-Opener-Policy: same-origin' -H:'Cross-Origin-Embedder-Policy: require-corp'" exec "nimhttpd -H:'Cross-Origin-Opener-Policy: same-origin' -H:'Cross-Origin-Embedder-Policy: require-corp' build/"

View file

@ -7,28 +7,42 @@ import raylib
proc emscripten_set_main_loop( f: proc() {.cdecl.}, a: cint, b: bool ) {.importc.} proc emscripten_set_main_loop( f: proc() {.cdecl.}, a: cint, b: bool ) {.importc.}
proc emscripten_sleep( a: cuint ) {.importc.} proc emscripten_sleep( a: cuint ) {.importc.}
var camera = Camera(
position: Vector3(x: 5, y: 5, z: 10), # Camera position
target: Vector3(x: 0, y: 0, z: 0), # Camera target it looks-at
up: Vector3(x: 0, y: 1, z: 0), # Camera up vector (rotation over its axis)
fovy: 45, # Camera field-of-view apperture in Y (degrees)
projection: Perspective # Defines projection type, see CameraProjection
)
proc main() = proc mainLoop() {.cdecl.} =
defer: closeWindow() defer: closeWindow()
initWindow( 600, 400, "raylib nim playground" ) initWindow( 800, 600, "raylib nim playground" )
while not windowShouldClose(): while not windowShouldClose():
beginDrawing();
clearBackground( RAYWHITE );
beginMode3D( camera );
drawGrid( 10, 1.0f );
endMode3D();
var col = if isCursorOnScreen(): BLUE else: GRAY
drawText( "OH SNAP IT'S WORKING", 10, 10, 20, col );
endDrawing();
if defined( emscripten ): if defined( emscripten ):
emscripten_sleep 10 emscripten_sleep 10
echo "wasm: hi"
else: else:
sleep 10 sleep 10
echo "native: hi"
main()
if defined( emscripten ):
emscripten_set_main_loop( mainLoop, 0, true );
else:
mainLoop()
# when defined(emscripten):
# # Emscripten can't block so it will call this callback instead.
# emscripten_set_main_loop(main_loop, 0, true);
# else:
# # When running native code we can block in an infinite loop.
# while windowShouldClose(window) == 0:
# mainLoop()
# # If you get ESC key quit.
# if window.getKey(KEY_ESCAPE) == 1:
# window.setWindowShouldClose(1)