Look ma! hot reload! (#16)
This commit is contained in:
@@ -42,3 +42,7 @@ target/
|
|||||||
/wasm-pack.log
|
/wasm-pack.log
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
# WASM build artifacts
|
||||||
|
.rsw/
|
||||||
|
static/level-editor/
|
||||||
|
|||||||
@@ -1,21 +1,36 @@
|
|||||||
# yawn
|
# yawn
|
||||||
|
|
||||||
yet another webgl ngine
|
yet another webgl ngine
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
Run
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
- Open http://localhost:8080
|
||||||
|
- Write rust and see it in the browser
|
||||||
|
|
||||||
## accepted plans
|
## 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
|
- as declarative as possible
|
||||||
- no backwards compatibility until v1.0
|
- no backwards compatibility until v1.0
|
||||||
- as much geometric algebra as reasonable
|
- as much geometric algebra as reasonable
|
||||||
|
|
||||||
## planned milestone
|
## planned milestone
|
||||||
|
|
||||||
- connect events from main thread to service worker
|
- [done] connect events from main thread to worker
|
||||||
- share canvas b/w sw
|
- [done] share canvas b/w worker
|
||||||
- render triangle
|
- [done] render triangle
|
||||||
|
|
||||||
## Goal: All the good algorithms
|
## Goal: All the good algorithms
|
||||||
|
|
||||||
What algorithms are we planning to have,
|
What algorithms are we planning to have,
|
||||||
|
|
||||||
- gpu picking?
|
- gpu picking?
|
||||||
- HZB occlusion + frustum/portal culling?
|
- HZB occlusion + frustum/portal culling?
|
||||||
- deferred + forward lighting?
|
- deferred + forward lighting?
|
||||||
@@ -52,16 +67,3 @@ What algorithms are we planning to have,
|
|||||||
- vr/ar?
|
- vr/ar?
|
||||||
- dynamic textures?
|
- dynamic textures?
|
||||||
- shadow casting?
|
- 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",
|
"rimraf": "^5.0.1",
|
||||||
"rollup-plugin-copy": "^3.5.0",
|
"rollup-plugin-copy": "^3.5.0",
|
||||||
"vite": "^7.1.10",
|
"vite": "^7.1.10",
|
||||||
|
"vite-plugin-rsw": "^2.0.11",
|
||||||
"vite-plugin-wasm": "^3.3.0"
|
"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": {
|
"node_modules/vite-plugin-wasm": {
|
||||||
"version": "3.5.0",
|
"version": "3.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz",
|
||||||
|
|||||||
+14
-8
@@ -4,10 +4,15 @@
|
|||||||
"name": "basic",
|
"name": "basic",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"scripts": {
|
"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",
|
"dev": "run-s rsw:build dev:watch",
|
||||||
"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",
|
"dev:watch": "run-p rsw:watch dev:vite",
|
||||||
"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",
|
"dev:vite": "vite dev",
|
||||||
"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",
|
"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-dev": "vite build --mode development",
|
||||||
"bundle-release": "vite build",
|
"bundle-release": "vite build",
|
||||||
"build": "run-s clean wasm-dev bundle-dev",
|
"build": "run-s clean wasm-dev bundle-dev",
|
||||||
@@ -20,10 +25,11 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@wasm-tool/wasm-pack-plugin": "^1.7.0",
|
"@wasm-tool/wasm-pack-plugin": "^1.7.0",
|
||||||
"vite": "^7.1.10",
|
"npm-run-all": "^4.1.5",
|
||||||
"vite-plugin-wasm": "^3.3.0",
|
|
||||||
"rollup-plugin-copy": "^3.5.0",
|
|
||||||
"rimraf": "^5.0.1",
|
"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.
|
// 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.
|
// 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() {}
|
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 () => {
|
const start = async () => {
|
||||||
await wbg_init();
|
await wbg_init();
|
||||||
@@ -6,8 +6,8 @@ const start = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Wait for DOM to be ready before starting
|
// Wait for DOM to be ready before starting
|
||||||
if (document.readyState === 'loading') {
|
if (document.readyState === "loading") {
|
||||||
document.addEventListener('DOMContentLoaded', start);
|
document.addEventListener("DOMContentLoaded", start);
|
||||||
} else {
|
} else {
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-6
@@ -1,5 +1,12 @@
|
|||||||
|
import path from "node:path";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
|
import { ViteRsw } from "vite-plugin-rsw";
|
||||||
import wasm from "vite-plugin-wasm";
|
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({
|
export default defineConfig({
|
||||||
build: {
|
build: {
|
||||||
@@ -20,10 +27,17 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'pkg': 'pkg'
|
pkg: path.resolve(__dirname, "level-editor/pkg"),
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
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.
|
// Makes us be able to use top level await for wasm.
|
||||||
// Otherwise, we can restrict build.target to 'es2022', which allows top level await.
|
// Otherwise, we can restrict build.target to 'es2022', which allows top level await.
|
||||||
wasm(),
|
wasm(),
|
||||||
@@ -31,8 +45,8 @@ export default defineConfig({
|
|||||||
server: {
|
server: {
|
||||||
port: 8080,
|
port: 8080,
|
||||||
headers: {
|
headers: {
|
||||||
'Cross-Origin-Embedder-Policy': 'require-corp',
|
"Cross-Origin-Embedder-Policy": "require-corp",
|
||||||
'Cross-Origin-Opener-Policy': 'same-origin',
|
"Cross-Origin-Opener-Policy": "same-origin",
|
||||||
},
|
},
|
||||||
fs: {
|
fs: {
|
||||||
strict: false,
|
strict: false,
|
||||||
@@ -41,8 +55,8 @@ export default defineConfig({
|
|||||||
preview: {
|
preview: {
|
||||||
port: 8080,
|
port: 8080,
|
||||||
headers: {
|
headers: {
|
||||||
'Cross-Origin-Embedder-Policy': 'require-corp',
|
"Cross-Origin-Embedder-Policy": "require-corp",
|
||||||
'Cross-Origin-Opener-Policy': 'same-origin',
|
"Cross-Origin-Opener-Policy": "same-origin",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1690,12 +1690,17 @@ validate-npm-package-license@^3.0.1:
|
|||||||
spdx-correct "^3.0.0"
|
spdx-correct "^3.0.0"
|
||||||
spdx-expression-parse "^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:
|
vite-plugin-wasm@^3.3.0:
|
||||||
version "3.5.0"
|
version "3.5.0"
|
||||||
resolved "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz"
|
resolved "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz"
|
||||||
integrity sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==
|
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"
|
version "7.1.11"
|
||||||
resolved "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz"
|
resolved "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz"
|
||||||
integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==
|
integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==
|
||||||
|
|||||||
Reference in New Issue
Block a user