webvas 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,11 +4,35 @@ const pendingEvents = [];
4
4
 
5
5
  globalThis.window = {
6
6
  requestAnimationFrame(callback) {
7
- return setTimeout(() => callback(performance.now()), 1000 / 60);
7
+ return setTimeout(() => {
8
+ const now = performance.now();
9
+ const started = now;
10
+ callback(now);
11
+ frameMetrics(now, performance.now() - started);
12
+ }, 1000 / 60);
8
13
  }
9
14
  };
10
15
  globalThis.requestAnimationFrame ||= callback => globalThis.window.requestAnimationFrame(callback);
11
16
 
17
+ let metricFrames = 0;
18
+ let metricStarted;
19
+ let callbackTime = 0;
20
+
21
+ function frameMetrics(now, elapsed) {
22
+ metricStarted ??= now;
23
+ metricFrames += 1;
24
+ callbackTime += elapsed;
25
+ if (metricFrames < 60) return;
26
+ const duration = now - metricStarted;
27
+ send("metrics", {
28
+ fps: (metricFrames - 1) * 1000 / duration,
29
+ callbackMs: callbackTime / metricFrames
30
+ });
31
+ metricFrames = 0;
32
+ callbackTime = 0;
33
+ metricStarted = now;
34
+ }
35
+
12
36
  function send(type, payload = {}) {
13
37
  globalThis.postMessage({ type: "webvas:" + type, ...payload });
14
38
  }
@@ -18,7 +42,11 @@ globalThis.addEventListener("message", async event => {
18
42
  try {
19
43
  if (message?.type === "webvas:init") {
20
44
  await import(message.bridgeUrl);
21
- globalThis.WebvasCanvases = { [message.selector]: message.canvas };
45
+ await import(message.shaderUrl);
46
+ globalThis.WebvasCanvases = {
47
+ [message.screenSelector || "#screen"]: message.screen,
48
+ [message.gpuSelector || "#gpu"]: message.gpu
49
+ };
22
50
  pendingEvents.splice(0).forEach(input => globalThis.WebvasBridge.pushEvent(input));
23
51
  send("loading", { message: "Downloading the Ruby drawing machine…" });
24
52
  const { DefaultRubyVM } = await import("https://cdn.jsdelivr.net/npm/@ruby/wasm-wasi@2.10.1/dist/browser/+esm");
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webvas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yudai Takada
8
- bindir: bin
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
@@ -29,6 +29,26 @@ dependencies:
29
29
  - - "<"
30
30
  - !ruby/object:Gem::Version
31
31
  version: '2'
32
+ - !ruby/object:Gem::Dependency
33
+ name: glaze
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 0.1.0
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.2'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.1.0
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '0.2'
32
52
  - !ruby/object:Gem::Dependency
33
53
  name: base64
34
54
  requirement: !ruby/object:Gem::Requirement
@@ -113,28 +133,43 @@ dependencies:
113
133
  - - "~>"
114
134
  - !ruby/object:Gem::Version
115
135
  version: '3.6'
116
- description: An RBGL canvas backend and browser loader powered by ruby.wasm.
136
+ description: An RBGL canvas backend, WebGPU shader bridge, and browser playground
137
+ powered by ruby.wasm.
117
138
  email:
118
139
  - t.yudai92@gmail.com
119
- executables: []
140
+ executables:
141
+ - webvas
120
142
  extensions: []
121
143
  extra_rdoc_files: []
122
144
  files:
123
145
  - CHANGELOG.md
124
146
  - LICENSE.txt
125
147
  - README.md
148
+ - docs/performance.md
149
+ - docs/security.md
150
+ - docs/spikes.md
151
+ - exe/webvas
126
152
  - js/bridge.js
127
153
  - js/loader.js
128
- - js/worker.js
129
154
  - lib/webvas.rb
130
155
  - lib/webvas/backend.rb
131
156
  - lib/webvas/bridge.rb
132
157
  - lib/webvas/input.rb
133
158
  - lib/webvas/key_map.rb
134
159
  - lib/webvas/runner.rb
160
+ - lib/webvas/shader.rb
135
161
  - lib/webvas/version.rb
162
+ - patches/psych-wasi.patch
163
+ - runtime/Gemfile
164
+ - runtime/Gemfile.lock
165
+ - script/build_site
136
166
  - sig/rbgl.rbs
137
167
  - sig/webvas.rbs
168
+ - site/app.js
169
+ - site/index.html
170
+ - site/loader-example.html
171
+ - site/style.css
172
+ - site/worker.js
138
173
  homepage: https://github.com/rbgfx/webvas
139
174
  licenses:
140
175
  - MIT