shadertown 0.12.0 → 0.13.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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,26 @@ deploys, not by this file.
6
6
  This project follows [semantic versioning](https://semver.org). Before 1.0 the
7
7
  minor number carries breaking changes, so pin it if that matters to you.
8
8
 
9
+ ## 0.13.0 — 2026-09-05
10
+
11
+ Auto judges a phone by its GPU, not by being a phone.
12
+
13
+ ### Changed
14
+
15
+ - **The device check uses detect-gpu.** `@pmndrs/detect-gpu` is now a
16
+ dependency, imported after the first frame is on screen, the way vgpu's
17
+ `adaptive-quality` example does it. Blocklisted GPUs and benchmark tiers 0
18
+ and 1 ask for Low; a software adapter still does so at once. The rule that
19
+ sent every mobile device to Low is gone: it put an iPhone 14 on Low before
20
+ it had drawn a frame, when its GPU benchmarks at the top tier. A GPU the
21
+ tables do not know keeps High and leaves the verdict to the frame rate.
22
+
23
+ ### Added
24
+
25
+ - **`configureQuality({ benchmarksUrl })`.** Serve detect-gpu's benchmark
26
+ tables from your own origin instead of unpkg. Call it before the first
27
+ canvas mounts.
28
+
9
29
  ## 0.12.0 — 2026-09-05
10
30
 
11
31
  Two quality tiers, and an Auto that picks between them.
package/dist/index.d.ts CHANGED
@@ -7,7 +7,8 @@ export type { ShaderSourceImage, ShaderSourceInput, ShaderSourceLayer, ShaderSou
7
7
  export { createShaderRenderer } from "./renderer.js";
8
8
  export type { ShaderRenderer, ShaderRendererOptions, RendererStatus } from "./renderer.js";
9
9
  export { getStage, isWebGpuSupported } from "./stage.js";
10
- export { setQualityTier, qualityTier, onQualityTier } from "./quality.js";
10
+ export { setQualityTier, qualityTier, onQualityTier, configureQuality } from "./quality.js";
11
+ export type { QualityConfig } from "./quality.js";
11
12
  export { diffParams, toConfigSource, toReactSource, toVanillaSource, toExampleSource, toReadme, toLicense, toWgslSource, toInstallCommand, } from "./export.js";
12
13
  export type { LicenceHolder } from "./export.js";
13
14
  export { shaderSources } from "./generated/sources.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5F,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ export { defineShader, defineShadertownConfig } from "./config.js";
3
3
  export { defaultParams, resolveUniforms, parseColor, formatColor, encodeParams, decodeParams, } from "./params.js";
4
4
  export { createShaderRenderer } from "./renderer.js";
5
5
  export { getStage, isWebGpuSupported } from "./stage.js";
6
- export { setQualityTier, qualityTier, onQualityTier } from "./quality.js";
6
+ export { setQualityTier, qualityTier, onQualityTier, configureQuality } from "./quality.js";
7
7
  export { diffParams, toConfigSource, toReactSource, toVanillaSource, toExampleSource, toReadme, toLicense, toWgslSource, toInstallCommand, } from "./export.js";
8
8
  export { shaderSources } from "./generated/sources.js";
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/quality.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { TierResult } from "@pmndrs/detect-gpu";
1
2
  import type { Gpu } from "vgpu";
2
3
  import type { DowngradeReason, QualityPreference, QualityTier } from "./types.js";
3
4
  /**
@@ -14,6 +15,17 @@ export declare function setQualityTier(tier: QualityPreference): void;
14
15
  export declare function qualityTier(): QualityPreference;
15
16
  /** Hear every change to the page's tier. Returns the unsubscribe. */
16
17
  export declare function onQualityTier(listener: (tier: QualityPreference) => void): () => void;
18
+ export interface QualityConfig {
19
+ /**
20
+ * Where detect-gpu's benchmark tables are served from: a directory holding
21
+ * its `dist/benchmarks/*.json`. Defaults to detect-gpu's own CDN copy on
22
+ * unpkg. Point it at a same-origin copy to keep the page free of third-party
23
+ * requests; a fetch that fails keeps High.
24
+ */
25
+ readonly benchmarksUrl?: string;
26
+ }
27
+ /** Settings for Auto's device check. Call before the first canvas mounts. */
28
+ export declare function configureQuality(next: QualityConfig): void;
17
29
  /** The tier a preference starts on. Auto begins High and earns Low. */
18
30
  export declare function initialTier(preference: QualityPreference): QualityTier;
19
31
  /** The device pixel ratio clamp for a tier. Low renders one texel per CSS pixel at most. */
@@ -45,16 +57,24 @@ interface BatteryManagerLike extends EventTarget {
45
57
  readonly level: number;
46
58
  }
47
59
  /**
48
- * Whether the device class alone asks for Low.
60
+ * Whether the adapter alone asks for Low, before anything is fetched.
61
+ *
62
+ * A software adapter cannot draw a raymarch at any size, and the browser says
63
+ * so up front. Everything else waits for the benchmark.
64
+ */
65
+ export declare function adapterRequestsLow(gpu: Gpu): boolean;
66
+ /**
67
+ * Whether detect-gpu's verdict on the GPU asks for Low.
49
68
  *
50
- * The example consults detect-gpu's benchmark tables for this. Those are a
51
- * dependency and a network request, which a background library should not
52
- * carry, so this reads what the browser already knows: a phone or tablet
53
- * (whose pixel ratio is three and whose GPU shares a thermal budget with the
54
- * radio), or a software adapter, which cannot draw a raymarch at any size.
55
- * Everything else keeps High and lets the frame rate decide.
69
+ * The example's rule, less one clause. It sends every mobile device to Low
70
+ * as well; that rule put an iPhone 14 on Low before it had drawn a frame, when
71
+ * its GPU benchmarks at the top tier. Phones are judged by their GPU here like
72
+ * everything else. Blocklisted GPUs and benchmark tiers 0 and 1 under 30
73
+ * frames a second in detect-gpu's tables ask for Low. A GPU the tables do
74
+ * not know, or a table that could not be fetched, keeps High and leaves the
75
+ * verdict to the frame rate.
56
76
  */
57
- export declare function deviceRequestsLow(gpu: Gpu): boolean;
77
+ export declare function gpuTierRequestsLow(result: Pick<TierResult, "tier" | "type">): boolean;
58
78
  /** Inclusive threshold, ignored while the device is plugged in. */
59
79
  export declare function batteryRequestsLow(battery: Pick<BatteryManagerLike, "charging" | "level">): boolean;
60
80
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwBlF;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAI5D;AAED,sCAAsC;AACtC,wBAAgB,WAAW,IAAI,iBAAiB,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAKrF;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,UAAU,EAAE,iBAAiB,GAAG,WAAW,CAEtE;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CACrB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAG3B;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAErD;AAYD,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,+FAA+F;IAC/F,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC3C,4DAA4D;IAC5D,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAuD7D;AAwBD,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAOnD;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,OAAO,CAEnG;AAID;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;IACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,GAAG,EAAE,GAAG;IAIpB,6DAA6D;IAC7D,IAAI,UAAU,IAAI,eAAe,GAAG,SAAS,CAE5C;IAED,0DAA0D;IAC1D,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAS9D,+CAA+C;IAC/C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAMjD,6FAA6F;IAC7F,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,GAAG;IAiBX,OAAO,CAAC,KAAK;IAkCb,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGxB;IAEF,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,UAAU;CAYnB"}
1
+ {"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"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"}
package/dist/quality.js CHANGED
@@ -44,6 +44,11 @@ export function onQualityTier(listener) {
44
44
  pageTierListeners.delete(listener);
45
45
  };
46
46
  }
47
+ let config = {};
48
+ /** Settings for Auto's device check. Call before the first canvas mounts. */
49
+ export function configureQuality(next) {
50
+ config = { ...config, ...next };
51
+ }
47
52
  /** The tier a preference starts on. Auto begins High and earns Low. */
48
53
  export function initialTier(preference) {
49
54
  return preference === "low" ? "low" : "high";
@@ -148,25 +153,28 @@ function updatedRefreshFps(current, samples, deltaMs) {
148
153
  // --- device and battery -----------------------------------------------------------
149
154
  const LOW_BATTERY_LEVEL = 0.3;
150
155
  /**
151
- * Whether the device class alone asks for Low.
156
+ * Whether the adapter alone asks for Low, before anything is fetched.
152
157
  *
153
- * The example consults detect-gpu's benchmark tables for this. Those are a
154
- * dependency and a network request, which a background library should not
155
- * carry, so this reads what the browser already knows: a phone or tablet
156
- * (whose pixel ratio is three and whose GPU shares a thermal budget with the
157
- * radio), or a software adapter, which cannot draw a raymarch at any size.
158
- * Everything else keeps High and lets the frame rate decide.
158
+ * A software adapter cannot draw a raymarch at any size, and the browser says
159
+ * so up front. Everything else waits for the benchmark.
159
160
  */
160
- export function deviceRequestsLow(gpu) {
161
- if (typeof navigator === "undefined")
162
- return false;
161
+ export function adapterRequestsLow(gpu) {
163
162
  const info = gpu.gpu.adapterInfo;
164
- if (info?.isFallbackAdapter === true)
165
- return true;
166
- const data = navigator.userAgentData;
167
- if (data && typeof data.mobile === "boolean")
168
- return data.mobile;
169
- return /Android|iPhone|iPod|Mobile/i.test(navigator.userAgent);
163
+ return info?.isFallbackAdapter === true;
164
+ }
165
+ /**
166
+ * Whether detect-gpu's verdict on the GPU asks for Low.
167
+ *
168
+ * The example's rule, less one clause. It sends every mobile device to Low
169
+ * as well; that rule put an iPhone 14 on Low before it had drawn a frame, when
170
+ * its GPU benchmarks at the top tier. Phones are judged by their GPU here like
171
+ * everything else. Blocklisted GPUs and benchmark tiers 0 and 1 — under 30
172
+ * frames a second in detect-gpu's tables — ask for Low. A GPU the tables do
173
+ * not know, or a table that could not be fetched, keeps High and leaves the
174
+ * verdict to the frame rate.
175
+ */
176
+ export function gpuTierRequestsLow(result) {
177
+ return result.type === "BLOCKLISTED" || (result.type === "BENCHMARK" && result.tier <= 1);
170
178
  }
171
179
  /** Inclusive threshold, ignored while the device is plugged in. */
172
180
  export function batteryRequestsLow(battery) {
@@ -249,10 +257,24 @@ export class QualityMonitor {
249
257
  return;
250
258
  this.armed = true;
251
259
  this.health.reset();
252
- if (deviceRequestsLow(this.gpu)) {
260
+ if (adapterRequestsLow(this.gpu)) {
253
261
  this.requestLow("device");
254
262
  return;
255
263
  }
264
+ // detect-gpu is imported here and not at the top, so its code and its
265
+ // benchmark fetch cost the page nothing until the first frame is on
266
+ // screen — and nothing at all on a page that pins its tier.
267
+ void import("@pmndrs/detect-gpu")
268
+ .then(({ getGPUTier }) => getGPUTier(config.benchmarksUrl ? { benchmarksURL: config.benchmarksUrl } : {}))
269
+ .then((result) => {
270
+ if (!this.armed || this.verdict)
271
+ return;
272
+ if (gpuTierRequestsLow(result))
273
+ this.requestLow("device");
274
+ })
275
+ .catch(() => {
276
+ /* advisory: a GPU that cannot be judged keeps High */
277
+ });
256
278
  const nav = typeof navigator === "undefined"
257
279
  ? undefined
258
280
  : navigator;
@@ -1 +1 @@
1
- {"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,kFAAkF;AAElF,IAAI,QAAQ,GAAsB,MAAM,CAAC;AACzC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAqC,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO;IAC9B,QAAQ,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,iBAAiB,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,QAA2C;IACvE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE;QACV,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAYD,IAAI,MAAM,GAAkB,EAAE,CAAC;AAE/B,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,UAA6B;IACvD,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,OAAO,CACrB,IAAiB,EACjB,GAA8B;IAE9B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,kFAAkF;AAElF,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,eAAe,GAAG,GAAG,CAAC;AAgB5B;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,UAAU,GAAG,mBAAmB,CAAC;IACrC,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,YAAgC,CAAC;IACrC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,YAAY,GAAG,EAAE,CAAC;QAClB,gBAAgB,GAAG,CAAC,CAAC;QACrB,YAAY,GAAG,SAAS,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,CAAC,MAAM;YACX,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC;YACzB,IACE,CAAC,MAAM,CAAC,MAAM;gBACd,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;gBAChC,MAAM,CAAC,OAAO,IAAI,CAAC;gBACnB,MAAM,CAAC,OAAO,GAAG,eAAe,EAChC,CAAC;gBACD,WAAW,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,eAAe,GAAG,UAAU,CAAC;YACnC,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,cAAc,CAAC,MAAM,GAAG,mBAAmB;gBAAE,cAAc,CAAC,KAAK,EAAE,CAAC;YAExE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YACzD,wEAAwE;YACxE,uDAAuD;YACvD,IAAI,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,GAAG;gBAAE,WAAW,EAAE,CAAC;YAC9F,YAAY,GAAG,MAAM,CAAC;YAEtB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC;YACnC,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAE,IAAI,gBAAgB,EAAE,CAAC;gBAC1F,gBAAgB,IAAI,YAAY,CAAC,KAAK,EAAG,CAAC;YAC5C,CAAC;YAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;YACrE,IAAI,gBAAgB,IAAI,gBAAgB,IAAI,WAAW,GAAG,MAAM,GAAG,YAAY;gBAAE,OAAO,GAAG,IAAI,CAAC;YAChG,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK;YACH,UAAU,GAAG,mBAAmB,CAAC;YACjC,cAAc,GAAG,EAAE,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC;YAChB,WAAW,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,OAA0B,EAAE,OAAe;IACrF,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB;QAAE,OAAO,OAAO,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAE,CAAC;IACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI;QAAE,OAAO,OAAO,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,OAAO,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC;AAED,qFAAqF;AAErF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAO9B;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,MAAM,IAAI,GAAI,GAAG,CAAC,GAAyD,CAAC,WAAW,CAAC;IACxF,OAAO,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyC;IAC1E,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,OAAuD;IACxF,OAAO,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,iBAAiB,CAAC;AAC5G,CAAC;AAED,mFAAmF;AAEnF;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IACR,GAAG,CAAM;IACT,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAC;IACxD,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC7C,OAAO,CAAiC;IACxC,KAAK,GAAG,KAAK,CAAC;IACd,MAAM,CAA4C;IAClD,WAAW,GAAG,CAAC,CAAC;IAChB,OAAO,CAA8B;IAE7C,YAAY,GAAQ;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,6DAA6D;IAC7D,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,0DAA0D;IAC1D,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAA2C;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,WAAW,CAAC,OAAe,EAAE,IAAa;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACxC,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,OAAO,EAAE,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAChG,CAAC;IAED,6FAA6F;IAC7F,WAAW;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAEO,GAAG;QACT,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACxF,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,wEAAwE;QACxE,oBAAoB;QACpB,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACnE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,oEAAoE;QACpE,4DAA4D;QAC5D,KAAK,MAAM,CAAC,oBAAoB,CAAC;aAC9B,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CACvB,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChF;aACA,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACxC,IAAI,kBAAkB,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,sDAAsD;QACxD,CAAC,CAAC,CAAC;QAEL,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,WAAW;YAC1C,CAAC,CAAC,SAAS;YACX,CAAC,CAAE,SAAgE,CAAC;QACtE,IAAI,CAAC,GAAG,EAAE,UAAU;YAAE,OAAO;QAC7B,IAAI,OAAoC,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,OAAO;aACT,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACzB,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACxD,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,gDAAgD;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAEgB,SAAS,GAAG,GAAS,EAAE;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACzC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC,CAAC;IAEM,MAAM;QACZ,IAAI,IAAI,CAAC,WAAW;YAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEO,UAAU,CAAC,MAAuB;QACxC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,2EAA2E;QAC3E,0EAA0E;QAC1E,2DAA2D;QAC3D,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shadertown",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "keywords": [
5
5
  "webgpu",
6
6
  "shader",
@@ -50,6 +50,7 @@
50
50
  "./package.json": "./package.json"
51
51
  },
52
52
  "dependencies": {
53
+ "@pmndrs/detect-gpu": "6.0.19",
53
54
  "vgpu": "0.3.0"
54
55
  },
55
56
  "peerDependencies": {
@@ -65,8 +66,8 @@
65
66
  }
66
67
  },
67
68
  "devDependencies": {
68
- "@types/react": "19.2.18",
69
69
  "@types/node": "24.10.1",
70
+ "@types/react": "19.2.18",
70
71
  "@webgpu/types": "0.1.69",
71
72
  "typescript": "5.9.3"
72
73
  },