diff --git a/config.nims b/config.nims index 8236e24..8b6d784 100644 --- a/config.nims +++ b/config.nims @@ -1,5 +1,5 @@ -when defined(emscripten): +when defined( emscripten ): --define:GraphicsApiOpenGlEs2 # --define:NaylibWebResources # switch("define", "NaylibWebResourcesPath=resources") @@ -8,20 +8,27 @@ when defined(emscripten): --os:linux --cpu:wasm32 --cc:clang - --clang.exe:emcc - --clang.linkerexe:emcc - --clang.cpp.exe:emcc - --clang.cpp.linkerexe:emcc + 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.linkerexe:emcc + --clang.cpp.exe:emcc + --clang.cpp.linkerexe:emcc --mm:arc --threads:on --panics:on --exceptions:goto --define:noSignalHandler - --passL:"-03" + --passL:"-Oz" # Production build + # --passL:"-O0 -gDebug -gsource-map" # Debug build # --passL:"-s EXPORT_NAME=Test1Module" # --passL:"-s MODULARIZE=1" --passL:"-s ASYNCIFY" # async support # --passL:"-s JSPI" # async support - --passL:"-o index.html" - # --passL:"--shell-file minshell.html" + --passL:"-o build/index.html" + --passL:"--shell-file minshell.html" diff --git a/nim_wasm_test.nimble b/nim_wasm_test.nimble index 348faa8..a4a3739 100644 --- a/nim_wasm_test.nimble +++ b/nim_wasm_test.nimble @@ -1,10 +1,10 @@ # Package -version = "0.1.0" -author = "Mahlon E. Smith" -description = "Dinking around with raylib and wasm target" -license = "MIT" -srcDir = "src" +version = "0.1.0" +author = "Mahlon E. Smith" +description = "Dinking around with raylib and wasm target" +license = "MIT" +srcDir = "src" requires "nim >= 2.2.4" requires "naylib >= 25.33.0" @@ -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" 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": - 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/" diff --git a/src/nim_wasm_test.nim b/src/nim_wasm_test.nim index f679ca2..0122203 100644 --- a/src/nim_wasm_test.nim +++ b/src/nim_wasm_test.nim @@ -4,31 +4,45 @@ import std/os import raylib # Emscripten specific imports -proc emscripten_set_main_loop(f: proc() {.cdecl.}, a: cint, b: bool) {.importc.} -proc emscripten_sleep(a: cuint) {.importc.} +proc emscripten_set_main_loop( f: proc() {.cdecl.}, a: cint, b: bool ) {.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() - initWindow( 600, 400, "raylib nim playground" ) + initWindow( 800, 600, "raylib nim playground" ) while not windowShouldClose(): - if defined(emscripten): + + 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 ): emscripten_sleep 10 + echo "wasm: hi" else: sleep 10 - -main() + echo "native: hi" + + +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)