murow 0.0.71 → 0.0.72
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/README.md +7 -5
- package/dist/cjs/renderer/{base-2d-renderer.js → base/renderer-2d.js} +1 -1
- package/dist/cjs/renderer/{base-3d-renderer.js → base/renderer-3d.js} +1 -1
- package/dist/cjs/renderer/gltf/helpers.js +1 -0
- package/dist/cjs/renderer/gltf/parser.js +1 -0
- package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
- package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
- package/dist/cjs/renderer/index.js +1 -1
- package/dist/cjs/renderer/math.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
- package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
- package/dist/cjs/renderer/spritesheet/parser.js +1 -0
- package/dist/cjs/renderer/types.js +1 -1
- package/dist/esm/renderer/base/renderer-2d.js +1 -0
- package/dist/esm/renderer/base/renderer-3d.js +1 -0
- package/dist/esm/renderer/gltf/helpers.js +1 -0
- package/dist/esm/renderer/gltf/parser.js +1 -0
- package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
- package/dist/esm/renderer/gltf/skin-parser.js +1 -0
- package/dist/esm/renderer/index.js +1 -1
- package/dist/esm/renderer/math.js +1 -0
- package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
- package/dist/esm/renderer/prefab-bucket/index.js +1 -0
- package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
- package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
- package/dist/esm/renderer/spritesheet/helpers.js +1 -0
- package/dist/esm/renderer/spritesheet/parser.js +1 -0
- package/dist/types/renderer/{base-2d-renderer.d.ts → base/renderer-2d.d.ts} +2 -2
- package/dist/types/renderer/{base-3d-renderer.d.ts → base/renderer-3d.d.ts} +2 -2
- package/dist/types/renderer/{base-renderer.d.ts → base/renderer.d.ts} +1 -1
- package/dist/types/renderer/gltf/helpers.d.ts +43 -0
- package/dist/types/renderer/gltf/parser.d.ts +49 -0
- package/dist/{webgpu/types/3d → types/renderer/gltf}/skeletal-animation.d.ts +8 -2
- package/dist/{webgpu/types/3d/gltf-skin-parser.d.ts → types/renderer/gltf/skin-parser.d.ts} +11 -5
- package/dist/types/renderer/index.d.ts +14 -3
- package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
- package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
- package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
- package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
- package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
- package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
- package/dist/types/renderer/types.d.ts +17 -7
- package/dist/webgpu/cjs/index.js +479 -1082
- package/dist/webgpu/esm/index.js +485 -1079
- package/dist/webgpu/types/2d/renderer.d.ts +34 -3
- package/dist/webgpu/types/2d/sprite-accessor.d.ts +1 -1
- package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
- package/dist/webgpu/types/3d/renderer.d.ts +64 -14
- package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +1 -1
- package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +19 -2
- package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +1 -1
- package/dist/webgpu/types/camera/camera-2d.d.ts +1 -1
- package/dist/webgpu/types/camera/camera-3d.d.ts +1 -1
- package/dist/webgpu/types/index.d.ts +15 -12
- package/dist/webgpu/types/particle/emitter.d.ts +1 -1
- package/dist/webgpu/types/spritesheet/spritesheet.d.ts +5 -34
- package/package.json +1 -1
- package/dist/esm/renderer/base-2d-renderer.js +0 -1
- package/dist/esm/renderer/base-3d-renderer.js +0 -1
- /package/dist/cjs/renderer/{base-renderer.js → base/renderer.js} +0 -0
- /package/dist/esm/renderer/{base-renderer.js → base/renderer.js} +0 -0
- /package/dist/{webgpu/types/core → types/renderer}/math.d.ts +0 -0
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import { Base2DRenderer } from 'murow/renderer
|
|
1
|
+
import { Base2DRenderer } from 'murow/renderer';
|
|
2
2
|
import type { Renderer2DOptions, SpriteHandle, SpriteOptions, SpritesheetHandle, SpritesheetSource } from 'murow/renderer';
|
|
3
3
|
import { Camera2D } from '../camera/camera-2d';
|
|
4
|
+
import { type ParsedSpritesheet } from 'murow/renderer';
|
|
4
5
|
import { GeometryBuilder, type GeometryOptions } from '../geometry/geometry-builder';
|
|
5
6
|
import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
|
|
7
|
+
import type { PrefabBucket2D, Prefab2D } from 'murow/renderer';
|
|
8
|
+
export interface WebGPU2DRendererOptions extends Renderer2DOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Pre-loaded prefab bucket. When provided, the renderer uploads each prefab
|
|
11
|
+
* to the GPU during `init()`, and `addSprite({ prefab: bucket.get('id') })`
|
|
12
|
+
* resolves to the right spritesheet handle. The bucket must have `load()`
|
|
13
|
+
* resolved before being passed in.
|
|
14
|
+
*/
|
|
15
|
+
prefabs?: PrefabBucket2D;
|
|
16
|
+
/**
|
|
17
|
+
* How many sprite instances you intend to spawn. Used to size buffers when
|
|
18
|
+
* `maxSprites` is not given explicitly. Defaults to 1024.
|
|
19
|
+
*/
|
|
20
|
+
maxInstances?: number;
|
|
21
|
+
}
|
|
6
22
|
export declare class WebGPU2DRenderer extends Base2DRenderer {
|
|
7
23
|
private root;
|
|
8
24
|
private _device;
|
|
@@ -36,8 +52,15 @@ export declare class WebGPU2DRenderer extends Base2DRenderer {
|
|
|
36
52
|
private uniformData;
|
|
37
53
|
private resizeObserver;
|
|
38
54
|
private resizeCallbacks;
|
|
39
|
-
|
|
55
|
+
private readonly _prefabs;
|
|
56
|
+
constructor(canvas: HTMLCanvasElement, options: WebGPU2DRendererOptions);
|
|
40
57
|
init(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Upload every prefab in the bucket to the GPU and stash the resulting
|
|
60
|
+
* SpritesheetHandle on each prefab so `bucket.get(id)` returns something
|
|
61
|
+
* usable as a sprite source.
|
|
62
|
+
*/
|
|
63
|
+
private uploadPrefabBucket;
|
|
41
64
|
private setupResizeObserver;
|
|
42
65
|
/**
|
|
43
66
|
* Register a callback that fires when the canvas resizes.
|
|
@@ -45,7 +68,15 @@ export declare class WebGPU2DRenderer extends Base2DRenderer {
|
|
|
45
68
|
*/
|
|
46
69
|
onResize(callback: (width: number, height: number) => void): void;
|
|
47
70
|
loadSpritesheet(source: SpritesheetSource): Promise<SpritesheetHandle>;
|
|
48
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Upload a previously-parsed spritesheet to the GPU. Returns a SpritesheetHandle.
|
|
73
|
+
* Splitting parse (CPU) from upload (GPU) lets callers parse spritesheets in parallel
|
|
74
|
+
* before a renderer exists.
|
|
75
|
+
*/
|
|
76
|
+
uploadParsedSpritesheet(parsed: ParsedSpritesheet): SpritesheetHandle;
|
|
77
|
+
addSprite(opts: Omit<SpriteOptions, 'sheet'> & {
|
|
78
|
+
sheet: SpritesheetHandle | Prefab2D;
|
|
79
|
+
}): SpriteHandle;
|
|
49
80
|
removeSprite(sprite: SpriteHandle): void;
|
|
50
81
|
storePreviousState(): void;
|
|
51
82
|
createGeometry(name: string, options: GeometryOptions): GeometryBuilder;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridges the bucket's `clips-changed` events to per-skin resync work in the
|
|
3
|
+
* renderer. The renderer registers `prefabId → skinIndex` at upload time;
|
|
4
|
+
* subsequent events flag affected skins in a pending set the renderer drains
|
|
5
|
+
* each frame.
|
|
6
|
+
*/
|
|
7
|
+
import type { PrefabBucket } from 'murow';
|
|
8
|
+
export declare class GltfClipResyncCoordinator {
|
|
9
|
+
private bucket;
|
|
10
|
+
private readonly skinIndexByPrefabId;
|
|
11
|
+
private readonly _pending;
|
|
12
|
+
constructor(bucket: PrefabBucket);
|
|
13
|
+
/** Map a prefab id to its index in the renderer's `skinnedModels` list. */
|
|
14
|
+
registerSkin(prefabId: string, skinIndex: number): void;
|
|
15
|
+
/** Skin indices whose clip set has changed since the last `clear()`. */
|
|
16
|
+
get pending(): ReadonlySet<number>;
|
|
17
|
+
clear(): void;
|
|
18
|
+
/** Unsubscribe from the bucket and reset its animation clip sets. */
|
|
19
|
+
dispose(): void;
|
|
20
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Base3DRenderer } from 'murow/renderer
|
|
2
|
-
import type { Renderer3DOptions } from 'murow/renderer
|
|
1
|
+
import { Base3DRenderer } from 'murow/renderer';
|
|
2
|
+
import type { Renderer3DOptions } from 'murow/renderer';
|
|
3
3
|
import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
|
|
4
4
|
import { Camera3D } from '../camera/camera-3d';
|
|
5
|
-
import { type PlayOptions } from '
|
|
5
|
+
import { type ParsedGltf, type PrefabBucket3D, type Prefab3D, type PlayOptions } from 'murow/renderer';
|
|
6
6
|
export interface ModelData {
|
|
7
7
|
positions: Float32Array;
|
|
8
8
|
normals?: Float32Array;
|
|
@@ -46,21 +46,40 @@ export interface InstanceHandle {
|
|
|
46
46
|
readonly skinned: boolean;
|
|
47
47
|
}
|
|
48
48
|
export interface MeshInstanceOptions {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
/**
|
|
50
|
+
* The model to instance. Either a renderer-internal handle (from `loadGltf`,
|
|
51
|
+
* `loadModel`, `createGrid`) or a prefab fetched from a `PrefabBucket3D` —
|
|
52
|
+
* `bucket.get('my-id')`.
|
|
53
|
+
*/
|
|
54
|
+
model: ModelHandle | GltfModel | Prefab3D;
|
|
55
|
+
/** World position. Defaults to `[0, 0, 0]`. */
|
|
56
|
+
position?: readonly [x: number, y: number, z: number];
|
|
57
|
+
/** Euler rotation in radians. Defaults to `[0, 0, 0]`. */
|
|
58
|
+
rotation?: readonly [x: number, y: number, z: number];
|
|
59
|
+
/** Per-axis scale. Pass a single number to scale uniformly. Defaults to `[1, 1, 1]`. */
|
|
60
|
+
scale?: number | readonly [x: number, y: number, z: number];
|
|
61
|
+
/** Tint color RGB. Defaults to `[1, 1, 1]`. */
|
|
62
|
+
color?: readonly [r: number, g: number, b: number];
|
|
60
63
|
}
|
|
61
64
|
export interface WebGPU3DRendererOptions extends Renderer3DOptions {
|
|
62
65
|
maxSkinnedInstances?: number;
|
|
63
66
|
maxBonesPerSkin?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Pre-loaded prefab bucket. When provided, the renderer self-sizes its
|
|
69
|
+
* skinned-instance + bone buffers from the bucket's prefab stats, and
|
|
70
|
+
* uploads each prefab to the GPU during `init()`. The bucket must have
|
|
71
|
+
* `load()` resolved before being passed in.
|
|
72
|
+
*
|
|
73
|
+
* `maxSkinnedInstances` defaults to `maxInstances * maxSkinnedPartsPerPrefab`.
|
|
74
|
+
* `maxBonesPerSkin` defaults to the maximum joint count across all prefabs.
|
|
75
|
+
*/
|
|
76
|
+
prefabs?: PrefabBucket3D;
|
|
77
|
+
/**
|
|
78
|
+
* How many instances you intend to spawn. Used together with `prefabs` to
|
|
79
|
+
* size the skinned-instance budget. Ignored if `maxSkinnedInstances` is set
|
|
80
|
+
* explicitly. Defaults to `maxModels` when only `prefabs` is provided.
|
|
81
|
+
*/
|
|
82
|
+
maxInstances?: number;
|
|
64
83
|
}
|
|
65
84
|
export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
66
85
|
private root;
|
|
@@ -92,6 +111,7 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
92
111
|
private models;
|
|
93
112
|
private nextModelId;
|
|
94
113
|
private skinnedModels;
|
|
114
|
+
private clipResync;
|
|
95
115
|
private skinnedMeshLayout;
|
|
96
116
|
private rawSkinnedPipeline;
|
|
97
117
|
private rawSkinnedTexturedPipeline;
|
|
@@ -103,6 +123,7 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
103
123
|
private packedAnimData;
|
|
104
124
|
private animComputeKernel;
|
|
105
125
|
private animComputeNeedsRebuild;
|
|
126
|
+
private animKernelBudgets;
|
|
106
127
|
private animClipTableOffset;
|
|
107
128
|
private animChannelTableOffset;
|
|
108
129
|
private animJointLookupOffset;
|
|
@@ -129,8 +150,16 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
129
150
|
readonly camera: Camera3D;
|
|
130
151
|
private uniformData;
|
|
131
152
|
private lastRenderTime;
|
|
153
|
+
private readonly _prefabs;
|
|
132
154
|
constructor(canvas: HTMLCanvasElement, options: WebGPU3DRendererOptions);
|
|
133
155
|
init(): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Upload every prefab in the bucket to the GPU and stash the handle on
|
|
158
|
+
* each prefab so `bucket.get(id)` resolves to a usable model. Also
|
|
159
|
+
* subscribes the resync coordinator to the bucket's `clips-changed`
|
|
160
|
+
* channel for lazy load/unload.
|
|
161
|
+
*/
|
|
162
|
+
private uploadPrefabBucket;
|
|
134
163
|
private setupResizeObserver;
|
|
135
164
|
/**
|
|
136
165
|
* Register a callback that fires when the canvas resizes.
|
|
@@ -187,6 +216,13 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
187
216
|
loadGltf(url: string, opts?: {
|
|
188
217
|
animations?: string[];
|
|
189
218
|
}): Promise<GltfModel>;
|
|
219
|
+
/**
|
|
220
|
+
* Upload a previously-parsed glTF to the GPU. Returns a GltfModel handle.
|
|
221
|
+
* Splitting parse (CPU) from upload (GPU) lets callers parse models in parallel
|
|
222
|
+
* before a renderer exists and inspect joint counts / vertex totals to size the
|
|
223
|
+
* renderer appropriately.
|
|
224
|
+
*/
|
|
225
|
+
uploadParsedGltf(parsed: ParsedGltf): GltfModel;
|
|
190
226
|
/**
|
|
191
227
|
* Add an instance. For skinned models, pass `linkedTo` to share bone matrices
|
|
192
228
|
* with another instance (e.g., when spawning all parts of a character).
|
|
@@ -194,6 +230,20 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
194
230
|
addInstance(opts: MeshInstanceOptions): InstanceHandle;
|
|
195
231
|
private addGltfInstance;
|
|
196
232
|
private addSkinnedInstance;
|
|
233
|
+
/**
|
|
234
|
+
* Drain pending resyncs from the coordinator. Per affected skin: rebuild
|
|
235
|
+
* its `SkeletalAnimation` clip list densely, remap in-flight animStates,
|
|
236
|
+
* then full-repack `packedAnimData`. Falls back to a kernel rebuild only
|
|
237
|
+
* when the new data exceeds the kernel's allocated budgets.
|
|
238
|
+
*
|
|
239
|
+
* The dense renumbering is load-bearing: the kernel reads each clip by
|
|
240
|
+
* its per-skin index, which must equal `SkeletalAnimation`'s clip id.
|
|
241
|
+
*/
|
|
242
|
+
private syncLazyAnimationChanges;
|
|
243
|
+
/** Doubling-growth budgets for kernel storage buffers, with sensible floors. */
|
|
244
|
+
private growBudgetsForPacked;
|
|
245
|
+
/** Upload `packedAnimData` to the existing kernel iff it fits the current budgets. Returns false to force a rebuild. */
|
|
246
|
+
private tryUploadInPlace;
|
|
197
247
|
/**
|
|
198
248
|
* Update skeletal animations for all skinned instances. Call once per tick.
|
|
199
249
|
*/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { buildAnimationKernel } from './kernel';
|
|
1
|
+
export { buildAnimationKernel, uploadPackedToKernel, type AnimationKernelBudgets } from './kernel';
|
|
2
2
|
export { packAnimationData, type PackedBuffers } from './packer';
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
import { type ComputeKernel } from '../../compute/compute-builder';
|
|
2
2
|
import type { TgpuRoot } from 'typegpu';
|
|
3
3
|
import { type PackedBuffers } from './packer';
|
|
4
|
-
import type { PackedAnimationData } from '
|
|
5
|
-
|
|
4
|
+
import type { PackedAnimationData } from 'murow/renderer';
|
|
5
|
+
/**
|
|
6
|
+
* Capacity headroom for each storage buffer. Over-allocating is harmless —
|
|
7
|
+
* the kernel only ever reads as far as the uploaded data describes — and
|
|
8
|
+
* lets resyncs upload via `writeBuffer` instead of rebuilding the kernel.
|
|
9
|
+
*/
|
|
10
|
+
export interface AnimationKernelBudgets {
|
|
11
|
+
skelI32Capacity: number;
|
|
12
|
+
animF32Capacity: number;
|
|
13
|
+
matricesCapacity: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function buildAnimationKernel(root: TgpuRoot, packed: PackedAnimationData, maxInstances: number, maxTotalBones: number, budgets: AnimationKernelBudgets): {
|
|
6
16
|
kernel: ComputeKernel;
|
|
7
17
|
packedBuffers: PackedBuffers;
|
|
18
|
+
budgets: AnimationKernelBudgets;
|
|
8
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Re-upload packed animation data into an already-built kernel. Uses
|
|
22
|
+
* `device.queue.writeBuffer` directly against the typed arrays — TypeGPU's
|
|
23
|
+
* per-element write path is dramatically slower for big buffers.
|
|
24
|
+
*/
|
|
25
|
+
export declare function uploadPackedToKernel(root: TgpuRoot, kernel: ComputeKernel, pb: PackedBuffers): void;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Packs animation data into flat typed arrays for GPU consumption.
|
|
3
3
|
* Separated from the kernel so packing logic can be tested independently.
|
|
4
4
|
*/
|
|
5
|
-
import type { PackedAnimationData } from '
|
|
5
|
+
import type { PackedAnimationData } from 'murow/renderer';
|
|
6
6
|
export interface PackedBuffers {
|
|
7
7
|
skelI32: Int32Array;
|
|
8
8
|
animF32: Float32Array;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Ray3D } from "murow/core/ray";
|
|
2
|
-
import type { Camera3DState } from 'murow/renderer
|
|
2
|
+
import type { Camera3DState } from 'murow/renderer';
|
|
3
3
|
export declare class Camera3D implements Camera3DState {
|
|
4
4
|
position: [number, number, number];
|
|
5
5
|
target: [number, number, number];
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @murow/webgpu — WebGPU rendering backend for murow.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* This package supplies the **concrete WebGPU renderers** (2D + 3D), camera
|
|
5
|
+
* implementations, and the GPU-bound pieces (textures, compute, geometry
|
|
6
|
+
* builders, TypeGPU shader authoring).
|
|
7
|
+
*
|
|
8
|
+
* Renderer-agnostic primitives — `PrefabBucket`, parsers, skeletal animation,
|
|
9
|
+
* spritesheet helpers — live in the top-level `murow` package and should be
|
|
10
|
+
* imported from there.
|
|
5
11
|
*/
|
|
6
12
|
export { d, std } from './shaders/typegpu';
|
|
7
13
|
export { WebGPU2DRenderer } from './2d/renderer';
|
|
14
|
+
export type { WebGPU2DRendererOptions } from './2d/renderer';
|
|
8
15
|
export { SpriteAccessor } from './2d/sprite-accessor';
|
|
16
|
+
export { AnimationController } from './2d/animation';
|
|
17
|
+
export type { AnimationClip, AnimationState, AnimationClipConfig } from './2d/animation';
|
|
9
18
|
export { WebGPU3DRenderer } from './3d/renderer';
|
|
10
|
-
export type { ModelData, ModelHandle, GltfModel, InstanceHandle, MeshInstanceHandle, MeshInstanceOptions } from './3d/renderer';
|
|
19
|
+
export type { ModelData, ModelHandle, GltfModel, InstanceHandle, MeshInstanceHandle, MeshInstanceOptions, } from './3d/renderer';
|
|
11
20
|
export { MorphAnimation } from './3d/morph-animation';
|
|
12
21
|
export type { MorphClip, MorphState, MorphClipConfig } from './3d/morph-animation';
|
|
13
|
-
export { SkeletalAnimation } from './3d/skeletal-animation';
|
|
14
|
-
export type { SkeletalClip, SkeletalAnimState, PlayOptions } from './3d/skeletal-animation';
|
|
15
|
-
export type { SkinData, AnimationClipData, AnimationChannel } from './3d/gltf-skin-parser';
|
|
16
22
|
export { Camera2D } from './camera/camera-2d';
|
|
17
23
|
export { Camera3D } from './camera/camera-3d';
|
|
18
|
-
export { GeometryBuilder, CustomGeometry, InstanceAccessor, InstanceContext, getFieldFloats, createGeometryDataLayout } from './geometry/geometry-builder';
|
|
19
|
-
export type { GeometryOptions, InstanceLayoutConfig, CustomGeometryLayout, GeometryDataLayout, ShaderContext } from './geometry/geometry-builder';
|
|
24
|
+
export { GeometryBuilder, CustomGeometry, InstanceAccessor, InstanceContext, getFieldFloats, createGeometryDataLayout, } from './geometry/geometry-builder';
|
|
25
|
+
export type { GeometryOptions, InstanceLayoutConfig, CustomGeometryLayout, GeometryDataLayout, ShaderContext, } from './geometry/geometry-builder';
|
|
20
26
|
export { resolveBuiltInGeometry } from './geometry/built-in';
|
|
21
27
|
export type { BuiltInGeometry, GeometryData } from './geometry/built-in';
|
|
22
|
-
export { Spritesheet,
|
|
23
|
-
export type { SpritesheetConfig, TexturePackerData } from './spritesheet/spritesheet';
|
|
28
|
+
export { Spritesheet, createTextureFromBitmap } from './spritesheet/spritesheet';
|
|
24
29
|
export { ParticleEmitter } from './particle/emitter';
|
|
25
30
|
export type { ParticleEmitterConfig, Range } from './particle/emitter';
|
|
26
|
-
export { AnimationController } from './2d/animation';
|
|
27
|
-
export type { AnimationClip, AnimationState, AnimationClipConfig } from './2d/animation';
|
|
28
31
|
export { ComputeBuilder, ComputeKernel } from './compute/compute-builder';
|
|
29
32
|
export type { ComputeOptions, ComputeBufferDef, ComputeInput } from './compute/compute-builder';
|
|
30
33
|
export { rotate2d, worldToClip2d, worldToClip3d, remap, scaleRotate2d, inverseLerp } from './shaders/utils';
|
|
31
34
|
export * from './core/constants';
|
|
32
|
-
export { DynamicSprite, StaticSprite, SpriteUniforms, DynamicInstance3D, StaticInstance3D, DynamicMesh, StaticMesh, SkinnedStaticMesh, MeshUniforms } from './core/types';
|
|
35
|
+
export { DynamicSprite, StaticSprite, SpriteUniforms, DynamicInstance3D, StaticInstance3D, DynamicMesh, StaticMesh, SkinnedStaticMesh, MeshUniforms, } from './core/types';
|
|
@@ -1,39 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* GPU-bound parts of spritesheet handling. Pure helpers (UV math, image loading)
|
|
3
|
+
* live in `murow/renderer/spritesheet-helpers`; they're re-exported here for
|
|
4
|
+
* backwards compatibility with code that did `import { ... } from 'murow/webgpu'`.
|
|
4
5
|
*
|
|
5
6
|
* Texture creation uses the raw GPUDevice (accessed via root.device)
|
|
6
7
|
* since TypeGPU's texture API is unstable and we need copyExternalImageToTexture.
|
|
7
8
|
*/
|
|
8
|
-
import type { SpritesheetHandle, SpriteUV } from 'murow/renderer
|
|
9
|
-
export
|
|
10
|
-
image: string;
|
|
11
|
-
frameWidth: number;
|
|
12
|
-
frameHeight: number;
|
|
13
|
-
}
|
|
14
|
-
export interface TexturePackerFrame {
|
|
15
|
-
frame: {
|
|
16
|
-
x: number;
|
|
17
|
-
y: number;
|
|
18
|
-
w: number;
|
|
19
|
-
h: number;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
export interface TexturePackerData {
|
|
23
|
-
frames: Record<string, TexturePackerFrame>;
|
|
24
|
-
meta: {
|
|
25
|
-
size: {
|
|
26
|
-
w: number;
|
|
27
|
-
h: number;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export interface SpritesheetConfig {
|
|
32
|
-
image: string;
|
|
33
|
-
frameWidth?: number;
|
|
34
|
-
frameHeight?: number;
|
|
35
|
-
data?: string;
|
|
36
|
-
}
|
|
9
|
+
import type { SpritesheetHandle, SpriteUV } from 'murow/renderer';
|
|
10
|
+
export { computeGridUVs, computeTexturePackerUVs, loadImage, type GridSpritesheetConfig, type SpritesheetConfig, type TexturePackerData, type TexturePackerFrame, } from 'murow/renderer';
|
|
37
11
|
export declare class Spritesheet implements SpritesheetHandle {
|
|
38
12
|
readonly id: number;
|
|
39
13
|
readonly frameCount: number;
|
|
@@ -48,9 +22,6 @@ export declare class Spritesheet implements SpritesheetHandle {
|
|
|
48
22
|
get width(): number;
|
|
49
23
|
get height(): number;
|
|
50
24
|
}
|
|
51
|
-
export declare function computeGridUVs(imageWidth: number, imageHeight: number, frameWidth: number, frameHeight: number): SpriteUV[];
|
|
52
|
-
export declare function computeTexturePackerUVs(data: TexturePackerData): SpriteUV[];
|
|
53
|
-
export declare function loadImage(url: string): Promise<ImageBitmap>;
|
|
54
25
|
export declare function createTextureFromBitmap(device: GPUDevice, bitmap: ImageBitmap): {
|
|
55
26
|
texture: GPUTexture;
|
|
56
27
|
view: GPUTextureView;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{BaseRenderer as t}from"./base-renderer";class p extends t{constructor(r,e){super(r,e),this.maxSprites=e.maxSprites}}export{p as Base2DRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{BaseRenderer as a}from"./base-renderer";class n extends a{constructor(r,e){super(r,e),this.maxModels=e.maxModels}}export{n as Base3DRenderer};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|