Look ma! hot reload! (#16)
This commit is contained in:
@@ -42,3 +42,7 @@ target/
|
||||
/wasm-pack.log
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# WASM build artifacts
|
||||
.rsw/
|
||||
static/level-editor/
|
||||
|
||||
@@ -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?
|
||||
Generated
+11
@@ -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",
|
||||
|
||||
+14
-8
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
|
||||
@@ -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 <name>
|
||||
[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 <name> --template <template> --mode <normal|noinstall|force>`
|
||||
#! 2. rsw: `rsw new <name>`, built-in templates
|
||||
#! 3. user: `rsw new <name>`, if `dir` is not configured, use `wasm-pack new <name>` to initialize the project
|
||||
using = "wasm-pack"
|
||||
#! this field needs to be configured when `using = "user"`
|
||||
#! `using = "wasm-pack"` or `using = "rsw"`, this field will be ignored
|
||||
#! copy all files in this directory
|
||||
dir = "my-template"
|
||||
|
||||
#! ################# NPM Package #################
|
||||
|
||||
#! When there is only `name`, other fields will use the default configuration
|
||||
|
||||
[[crates]]
|
||||
name = "level-editor"
|
||||
root = "."
|
||||
out-dir = "pkg"
|
||||
target = "web"
|
||||
link = false
|
||||
|
||||
[crates.watch]
|
||||
run = true
|
||||
profile = "dev"
|
||||
|
||||
[crates.build]
|
||||
run = true
|
||||
profile = "release"
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
import wbg_init, { main } from "../level-editor/pkg/wasm-index.js";
|
||||
import wbg_init, { main } from "../level-editor/pkg/level_editor.js";
|
||||
|
||||
const start = async () => {
|
||||
await wbg_init();
|
||||
@@ -6,8 +6,8 @@ const start = async () => {
|
||||
};
|
||||
|
||||
// Wait for DOM to be ready before starting
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', start);
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", start);
|
||||
} else {
|
||||
start();
|
||||
}
|
||||
|
||||
+20
-6
@@ -1,5 +1,12 @@
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { defineConfig } from "vite";
|
||||
import { ViteRsw } from "vite-plugin-rsw";
|
||||
import wasm from "vite-plugin-wasm";
|
||||
import copy from "rollup-plugin-copy";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
export default defineConfig({
|
||||
build: {
|
||||
@@ -20,10 +27,17 @@ export default defineConfig({
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'pkg': 'pkg'
|
||||
}
|
||||
pkg: path.resolve(__dirname, "level-editor/pkg"),
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
copy({
|
||||
targets: [
|
||||
{ src: "level-editor/pkg/*", dest: "static/level-editor/pkg" },
|
||||
],
|
||||
hook: "buildStart",
|
||||
}),
|
||||
ViteRsw(),
|
||||
// Makes us be able to use top level await for wasm.
|
||||
// Otherwise, we can restrict build.target to 'es2022', which allows top level await.
|
||||
wasm(),
|
||||
@@ -31,8 +45,8 @@ export default defineConfig({
|
||||
server: {
|
||||
port: 8080,
|
||||
headers: {
|
||||
'Cross-Origin-Embedder-Policy': 'require-corp',
|
||||
'Cross-Origin-Opener-Policy': 'same-origin',
|
||||
"Cross-Origin-Embedder-Policy": "require-corp",
|
||||
"Cross-Origin-Opener-Policy": "same-origin",
|
||||
},
|
||||
fs: {
|
||||
strict: false,
|
||||
@@ -41,8 +55,8 @@ export default defineConfig({
|
||||
preview: {
|
||||
port: 8080,
|
||||
headers: {
|
||||
'Cross-Origin-Embedder-Policy': 'require-corp',
|
||||
'Cross-Origin-Opener-Policy': 'same-origin',
|
||||
"Cross-Origin-Embedder-Policy": "require-corp",
|
||||
"Cross-Origin-Opener-Policy": "same-origin",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1690,12 +1690,17 @@ validate-npm-package-license@^3.0.1:
|
||||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
vite-plugin-rsw@^2.0.11:
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmjs.org/vite-plugin-rsw/-/vite-plugin-rsw-2.0.11.tgz"
|
||||
integrity sha512-OqbGAtdDfK88gDoxA9wVdGowCmlzLSXEyRvD8CgTu9IP5O7tx8Tg2CtIzKOyOWZtHHZPhtdYiN+5Il6rTZCkzw==
|
||||
|
||||
vite-plugin-wasm@^3.3.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz"
|
||||
integrity sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==
|
||||
|
||||
"vite@^2 || ^3 || ^4 || ^5 || ^6 || ^7", vite@^7.1.10:
|
||||
"vite@^2 || ^3 || ^4 || ^5 || ^6 || ^7", vite@^7.1.10, vite@>2.8.0-0:
|
||||
version "7.1.11"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz"
|
||||
integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==
|
||||
|
||||
Reference in New Issue
Block a user