diff --git a/.gitignore b/.gitignore index ecc6d51..9621f52 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,7 @@ target/ /wasm-pack.log .vscode/ .idea/ + +# WASM build artifacts +.rsw/ +static/level-editor/ diff --git a/README.md b/README.md index c54e12e..cbc7843 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,36 @@ # yawn + yet another webgl ngine +### Building + +Run + +``` +npm run dev +``` + +- Open http://localhost:8080 +- Write rust and see it in the browser + ## accepted plans -- most of the logic in service workers -- ts / webgl based + +- most of the logic in workers and wasm +- rust / wgpu based - as declarative as possible - no backwards compatibility until v1.0 - as much geometric algebra as reasonable ## planned milestone -- connect events from main thread to service worker -- share canvas b/w sw -- render triangle +- [done] connect events from main thread to worker +- [done] share canvas b/w worker +- [done] render triangle ## Goal: All the good algorithms + What algorithms are we planning to have, + - gpu picking? - HZB occlusion + frustum/portal culling? - deferred + forward lighting? @@ -52,16 +67,3 @@ What algorithms are we planning to have, - vr/ar? - dynamic textures? - shadow casting? - -## are we gon use ogl or start from scratch? - -## we need to decide architecture -- ECS? -- babylon-like -- threejs-like - -- message passing? -- observables? -- events? -- runnable on a server? -- worker/main thread adaptable? or just worker? \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ab4d659..64bd18c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "rimraf": "^5.0.1", "rollup-plugin-copy": "^3.5.0", "vite": "^7.1.10", + "vite-plugin-rsw": "^2.0.11", "vite-plugin-wasm": "^3.3.0" } }, @@ -3601,6 +3602,16 @@ } } }, + "node_modules/vite-plugin-rsw": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/vite-plugin-rsw/-/vite-plugin-rsw-2.0.11.tgz", + "integrity": "sha512-OqbGAtdDfK88gDoxA9wVdGowCmlzLSXEyRvD8CgTu9IP5O7tx8Tg2CtIzKOyOWZtHHZPhtdYiN+5Il6rTZCkzw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vite": ">2.8.0-0" + } + }, "node_modules/vite-plugin-wasm": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz", diff --git a/package.json b/package.json index 76983e9..c4a7f60 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,15 @@ "name": "basic", "version": "0.1.0", "scripts": { - "wasm-dev": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --dev --out-name wasm-index --target web level-editor -- --features atomics,bulk-memory -Z build-std=panic_abort,std", - "wasm-release": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --release --out-name wasm-index --target web level-editor -- --features atomics,bulk-memory -Z build-std=panic_abort,std", - "wasm-renderer-dev": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --dev --out-name wasm-index --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std", - "wasm-renderer-release": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --release --out-name wasm-index --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std", + "dev": "run-s rsw:build dev:watch", + "dev:watch": "run-p rsw:watch dev:vite", + "dev:vite": "vite dev", + "rsw:watch": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' rsw watch", + "rsw:build": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' rsw build", + "wasm-dev": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --dev --target web level-editor -- --features atomics,bulk-memory -Z build-std=panic_abort,std", + "wasm-release": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --release --target web level-editor -- --features atomics,bulk-memory -Z build-std=panic_abort,std", + "wasm-renderer-dev": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --dev --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std", + "wasm-renderer-release": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --release --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std", "bundle-dev": "vite build --mode development", "bundle-release": "vite build", "build": "run-s clean wasm-dev bundle-dev", @@ -20,10 +25,11 @@ }, "devDependencies": { "@wasm-tool/wasm-pack-plugin": "^1.7.0", - "vite": "^7.1.10", - "vite-plugin-wasm": "^3.3.0", - "rollup-plugin-copy": "^3.5.0", + "npm-run-all": "^4.1.5", "rimraf": "^5.0.1", - "npm-run-all": "^4.1.5" + "rollup-plugin-copy": "^3.5.0", + "vite": "^7.1.10", + "vite-plugin-rsw": "^2.0.11", + "vite-plugin-wasm": "^3.3.0" } } diff --git a/renderer/src/platform/web/worker/mainWorker.js b/renderer/src/platform/web/worker/mainWorker.js index d863a92..1e136be 100644 --- a/renderer/src/platform/web/worker/mainWorker.js +++ b/renderer/src/platform/web/worker/mainWorker.js @@ -1,6 +1,6 @@ // Generic worker that imports the app's WASM module relative to the generated pkg folder. // Works for any application because the relative depth from this file to pkg is stable. -import initWasm, { worker_entrypoint } from "../../../../../../wasm-index.js"; +import initWasm, { worker_entrypoint } from "/level-editor/pkg/level_editor.js"; export function attachMain() {} diff --git a/rsw.toml b/rsw.toml new file mode 100644 index 0000000..bc2bea7 --- /dev/null +++ b/rsw.toml @@ -0,0 +1,47 @@ +name = "rsw" +version = "0.1.0" + +#! time interval for file changes to trigger wasm-pack build, default `50` milliseconds +interval = 50 + +#! link +#! npm link @see https://docs.npmjs.com/cli/v8/commands/npm-link +#! yarn link @see https://classic.yarnpkg.com/en/docs/cli/link +#! pnpm link @see https://pnpm.io/cli/link +#! The link command will only be executed if `[[crates]] link = true` +#! cli: `npm` | `yarn` | `pnpm`, default is `npm` +cli = "npm" + +#! --------------------------- + +#! rsw new +[new] +#! @see https://rustwasm.github.io/docs/wasm-pack/commands/new.html +#! using: `wasm-pack` | `rsw` | `user`, default is `wasm-pack` +#! 1. wasm-pack: `rsw new --template