@aardworx/wombat.rendering 0.1.0 → 0.1.1
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/dist/commands/clear.d.ts +3 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +69 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +5 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/render.d.ts +16 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +93 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/core/acquire.d.ts +3 -0
- package/dist/core/acquire.d.ts.map +1 -0
- package/dist/core/acquire.js +22 -0
- package/dist/core/acquire.js.map +1 -0
- package/dist/core/adaptiveResource.d.ts +29 -0
- package/dist/core/adaptiveResource.d.ts.map +1 -0
- package/dist/core/adaptiveResource.js +73 -0
- package/dist/core/adaptiveResource.js.map +1 -0
- package/dist/core/buffer.d.ts +20 -0
- package/dist/core/buffer.d.ts.map +1 -0
- package/dist/core/buffer.js +30 -0
- package/dist/core/buffer.js.map +1 -0
- package/dist/core/bufferView.d.ts +15 -0
- package/dist/core/bufferView.d.ts.map +1 -0
- package/dist/core/bufferView.js +12 -0
- package/dist/core/bufferView.js.map +1 -0
- package/dist/core/clear.d.ts +9 -0
- package/dist/core/clear.d.ts.map +1 -0
- package/dist/core/clear.js +7 -0
- package/dist/core/clear.js.map +1 -0
- package/dist/core/command.d.ts +45 -0
- package/dist/core/command.d.ts.map +1 -0
- package/dist/core/command.js +12 -0
- package/dist/core/command.js.map +1 -0
- package/dist/core/drawCall.d.ts +17 -0
- package/dist/core/drawCall.d.ts.map +1 -0
- package/dist/core/drawCall.js +5 -0
- package/dist/core/drawCall.js.map +1 -0
- package/dist/core/framebuffer.d.ts +32 -0
- package/dist/core/framebuffer.d.ts.map +1 -0
- package/dist/core/framebuffer.js +6 -0
- package/dist/core/framebuffer.js.map +1 -0
- package/dist/core/framebufferSignature.d.ts +12 -0
- package/dist/core/framebufferSignature.d.ts.map +1 -0
- package/dist/core/framebufferSignature.js +7 -0
- package/dist/core/framebufferSignature.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipelineState.d.ts +56 -0
- package/dist/core/pipelineState.d.ts.map +1 -0
- package/dist/core/pipelineState.js +6 -0
- package/dist/core/pipelineState.js.map +1 -0
- package/dist/core/renderContext.d.ts +8 -0
- package/dist/core/renderContext.d.ts.map +1 -0
- package/dist/core/renderContext.js +39 -0
- package/dist/core/renderContext.js.map +1 -0
- package/dist/core/renderObject.d.ts +45 -0
- package/dist/core/renderObject.d.ts.map +1 -0
- package/dist/core/renderObject.js +11 -0
- package/dist/core/renderObject.js.map +1 -0
- package/dist/core/renderTask.d.ts +12 -0
- package/dist/core/renderTask.d.ts.map +1 -0
- package/dist/core/renderTask.js +5 -0
- package/dist/core/renderTask.js.map +1 -0
- package/dist/core/renderTree.d.ts +35 -0
- package/dist/core/renderTree.d.ts.map +1 -0
- package/dist/core/renderTree.js +17 -0
- package/dist/core/renderTree.js.map +1 -0
- package/dist/core/sampler.d.ts +12 -0
- package/dist/core/sampler.d.ts.map +1 -0
- package/dist/core/sampler.js +8 -0
- package/dist/core/sampler.js.map +1 -0
- package/dist/core/shader.d.ts +3 -0
- package/dist/core/shader.d.ts.map +1 -0
- package/dist/core/shader.js +6 -0
- package/dist/core/shader.js.map +1 -0
- package/dist/core/texture.d.ts +34 -0
- package/dist/core/texture.d.ts.map +1 -0
- package/dist/core/texture.js +29 -0
- package/dist/core/texture.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/adaptiveBuffer.d.ts +22 -0
- package/dist/resources/adaptiveBuffer.d.ts.map +1 -0
- package/dist/resources/adaptiveBuffer.js +99 -0
- package/dist/resources/adaptiveBuffer.js.map +1 -0
- package/dist/resources/adaptiveSampler.d.ts +4 -0
- package/dist/resources/adaptiveSampler.d.ts.map +1 -0
- package/dist/resources/adaptiveSampler.js +73 -0
- package/dist/resources/adaptiveSampler.js.map +1 -0
- package/dist/resources/adaptiveTexture.d.ts +14 -0
- package/dist/resources/adaptiveTexture.d.ts.map +1 -0
- package/dist/resources/adaptiveTexture.js +265 -0
- package/dist/resources/adaptiveTexture.js.map +1 -0
- package/dist/resources/framebuffer.d.ts +14 -0
- package/dist/resources/framebuffer.d.ts.map +1 -0
- package/dist/resources/framebuffer.js +144 -0
- package/dist/resources/framebuffer.js.map +1 -0
- package/dist/resources/framebufferSignature.d.ts +10 -0
- package/dist/resources/framebufferSignature.d.ts.map +1 -0
- package/dist/resources/framebufferSignature.js +22 -0
- package/dist/resources/framebufferSignature.js.map +1 -0
- package/dist/resources/index.d.ts +14 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +24 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/mipGen.d.ts +17 -0
- package/dist/resources/mipGen.d.ts.map +1 -0
- package/dist/resources/mipGen.js +125 -0
- package/dist/resources/mipGen.js.map +1 -0
- package/dist/resources/preparedComputeShader.d.ts +104 -0
- package/dist/resources/preparedComputeShader.d.ts.map +1 -0
- package/dist/resources/preparedComputeShader.js +341 -0
- package/dist/resources/preparedComputeShader.js.map +1 -0
- package/dist/resources/preparedRenderObject.d.ts +61 -0
- package/dist/resources/preparedRenderObject.d.ts.map +1 -0
- package/dist/resources/preparedRenderObject.js +430 -0
- package/dist/resources/preparedRenderObject.js.map +1 -0
- package/dist/resources/renderPipeline.d.ts +27 -0
- package/dist/resources/renderPipeline.d.ts.map +1 -0
- package/dist/resources/renderPipeline.js +102 -0
- package/dist/resources/renderPipeline.js.map +1 -0
- package/dist/resources/shaderDiagnostics.d.ts +14 -0
- package/dist/resources/shaderDiagnostics.d.ts.map +1 -0
- package/dist/resources/shaderDiagnostics.js +40 -0
- package/dist/resources/shaderDiagnostics.js.map +1 -0
- package/dist/resources/sourceMapDecoder.d.ts +23 -0
- package/dist/resources/sourceMapDecoder.d.ts.map +1 -0
- package/dist/resources/sourceMapDecoder.js +116 -0
- package/dist/resources/sourceMapDecoder.js.map +1 -0
- package/dist/resources/uniformBuffer.d.ts +23 -0
- package/dist/resources/uniformBuffer.d.ts.map +1 -0
- package/dist/resources/uniformBuffer.js +149 -0
- package/dist/resources/uniformBuffer.js.map +1 -0
- package/dist/resources/webgpuFlags.d.ts +32 -0
- package/dist/resources/webgpuFlags.d.ts.map +1 -0
- package/dist/resources/webgpuFlags.js +40 -0
- package/dist/resources/webgpuFlags.js.map +1 -0
- package/dist/runtime/copy.d.ts +3 -0
- package/dist/runtime/copy.d.ts.map +1 -0
- package/dist/runtime/copy.js +12 -0
- package/dist/runtime/copy.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/renderTask.d.ts +10 -0
- package/dist/runtime/renderTask.d.ts.map +1 -0
- package/dist/runtime/renderTask.js +119 -0
- package/dist/runtime/renderTask.js.map +1 -0
- package/dist/runtime/renderTo.d.ts +40 -0
- package/dist/runtime/renderTo.d.ts.map +1 -0
- package/dist/runtime/renderTo.js +97 -0
- package/dist/runtime/renderTo.js.map +1 -0
- package/dist/runtime/runtime.d.ts +48 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +100 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/scenePass.d.ts +25 -0
- package/dist/runtime/scenePass.d.ts.map +1 -0
- package/dist/runtime/scenePass.js +250 -0
- package/dist/runtime/scenePass.js.map +1 -0
- package/dist/window/canvas.d.ts +38 -0
- package/dist/window/canvas.d.ts.map +1 -0
- package/dist/window/canvas.js +194 -0
- package/dist/window/canvas.js.map +1 -0
- package/dist/window/index.d.ts +3 -0
- package/dist/window/index.d.ts.map +1 -0
- package/dist/window/index.js +4 -0
- package/dist/window/index.js.map +1 -0
- package/dist/window/loop.d.ts +16 -0
- package/dist/window/loop.d.ts.map +1 -0
- package/dist/window/loop.js +43 -0
- package/dist/window/loop.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { HashMap } from "@aardworx/wombat.adaptive";
|
|
2
|
+
import type { FramebufferSignature } from "./framebufferSignature.js";
|
|
3
|
+
export interface IFramebuffer {
|
|
4
|
+
readonly signature: FramebufferSignature;
|
|
5
|
+
/**
|
|
6
|
+
* name → color attachment view used inside the render pass.
|
|
7
|
+
* For `sampleCount > 1` these are views into the multisample
|
|
8
|
+
* textures; the resolve target views live in `resolveColors`.
|
|
9
|
+
*/
|
|
10
|
+
readonly colors: HashMap<string, GPUTextureView>;
|
|
11
|
+
readonly depthStencil?: GPUTextureView;
|
|
12
|
+
/**
|
|
13
|
+
* Underlying GPU textures suitable for *sampling* downstream.
|
|
14
|
+
* - `sampleCount = 1`: same textures as `colors`.
|
|
15
|
+
* - `sampleCount > 1`: the resolve textures (single-sample);
|
|
16
|
+
* the multisample textures are not sampleable.
|
|
17
|
+
* Populated by `allocateFramebuffer`; used by `renderTo` to
|
|
18
|
+
* expose results as `ITexture.fromGPU(...)`.
|
|
19
|
+
*/
|
|
20
|
+
readonly colorTextures?: HashMap<string, GPUTexture>;
|
|
21
|
+
/**
|
|
22
|
+
* name → resolve target view, only present when
|
|
23
|
+
* `signature.sampleCount > 1`. Wired into the render pass
|
|
24
|
+
* descriptor as `resolveTarget` so the GPU resolves
|
|
25
|
+
* multisample → single-sample at end of pass.
|
|
26
|
+
*/
|
|
27
|
+
readonly resolveColors?: HashMap<string, GPUTextureView>;
|
|
28
|
+
readonly depthStencilTexture?: GPUTexture;
|
|
29
|
+
readonly width: number;
|
|
30
|
+
readonly height: number;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=framebuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framebuffer.d.ts","sourceRoot":"","sources":["../../src/core/framebuffer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;IACvC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// IFramebuffer — a concrete render target. The signature describes
|
|
2
|
+
// the *shape*; the framebuffer pairs that shape with concrete
|
|
3
|
+
// texture views. Both color and depth/stencil views are addressed
|
|
4
|
+
// by the same names declared in the signature.
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=framebuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framebuffer.js","sourceRoot":"","sources":["../../src/core/framebuffer.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,8DAA8D;AAC9D,kEAAkE;AAClE,+CAA+C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HashMap } from "@aardworx/wombat.adaptive";
|
|
2
|
+
export interface DepthStencilAttachmentSignature {
|
|
3
|
+
readonly format: GPUTextureFormat;
|
|
4
|
+
readonly hasDepth: boolean;
|
|
5
|
+
readonly hasStencil: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface FramebufferSignature {
|
|
8
|
+
readonly colors: HashMap<string, GPUTextureFormat>;
|
|
9
|
+
readonly depthStencil?: DepthStencilAttachmentSignature;
|
|
10
|
+
readonly sampleCount: number;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=framebufferSignature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framebufferSignature.d.ts","sourceRoot":"","sources":["../../src/core/framebufferSignature.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,+BAA+B,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// FramebufferSignature — the typed shape of a render target.
|
|
2
|
+
// Attachments are addressed by name (never by index). The runtime
|
|
3
|
+
// maps names → WebGPU attachment slots using a shader's
|
|
4
|
+
// ProgramInterface, so users only ever talk about names like
|
|
5
|
+
// "albedo" / "normal" / "objectId", not location indices.
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=framebufferSignature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framebufferSignature.js","sourceRoot":"","sources":["../../src/core/framebufferSignature.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,kEAAkE;AAClE,wDAAwD;AACxD,6DAA6D;AAC7D,0DAA0D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { IBuffer, } from "./buffer.js";
|
|
2
|
+
export type { HostBufferSource, } from "./buffer.js";
|
|
3
|
+
export type { BufferView, } from "./bufferView.js";
|
|
4
|
+
export type { ClearColor, ClearValues, } from "./clear.js";
|
|
5
|
+
export type { Command, CopySpec, BufferCopy, TextureCopy, BufferCopyRange, } from "./command.js";
|
|
6
|
+
export type { DrawCall, IndexedDrawCall, NonIndexedDrawCall, } from "./drawCall.js";
|
|
7
|
+
export type { IFramebuffer, } from "./framebuffer.js";
|
|
8
|
+
export type { DepthStencilAttachmentSignature, FramebufferSignature, } from "./framebufferSignature.js";
|
|
9
|
+
export type { BlendComponentState, BlendState, CullMode, DepthState, FrontFace, PipelineState, RasterizerState, StencilFaceState, StencilState, Topology, } from "./pipelineState.js";
|
|
10
|
+
export type { RenderObject, } from "./renderObject.js";
|
|
11
|
+
export { RenderTree, } from "./renderTree.js";
|
|
12
|
+
export type { IRenderTask, } from "./renderTask.js";
|
|
13
|
+
export { ISampler, } from "./sampler.js";
|
|
14
|
+
export { ITexture, } from "./texture.js";
|
|
15
|
+
export type { ExternalTextureSource, HostTextureSource, RawTextureSource, } from "./texture.js";
|
|
16
|
+
export type { AttributeInfo, CompiledEffect, CompiledStage, ComputeShader, Effect, HoleGetter, HoleGetters, LooseUniformInfo, OutputInfo, ProgramInterface, SamplerInfo, Stage, StageInfo, StorageBufferInfo, Target, TextureInfo, UniformBlockInfo, UniformFieldInfo, } from "./shader.js";
|
|
17
|
+
export { AdaptiveResource, } from "./adaptiveResource.js";
|
|
18
|
+
export { tryAcquire, tryRelease, } from "./acquire.js";
|
|
19
|
+
export { RenderContext, } from "./renderContext.js";
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,QAAQ,EACR,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,+BAA+B,EAC/B,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,QAAQ,GACT,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,MAAM,EACN,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,GACd,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Public API of @aardworx/wombat.rendering-core.
|
|
2
|
+
//
|
|
3
|
+
// Phase 0: types only. Implementations of `compileEffect`,
|
|
4
|
+
// `prepareRenderObject`, `runRenderTask`, etc. live in higher
|
|
5
|
+
// packages (`resources`, `commands`, `runtime`).
|
|
6
|
+
export { IBuffer, } from "./buffer.js";
|
|
7
|
+
export { RenderTree, } from "./renderTree.js";
|
|
8
|
+
export { ISampler, } from "./sampler.js";
|
|
9
|
+
export { ITexture, } from "./texture.js";
|
|
10
|
+
export { AdaptiveResource, } from "./adaptiveResource.js";
|
|
11
|
+
export { tryAcquire, tryRelease, } from "./acquire.js";
|
|
12
|
+
export { RenderContext, } from "./renderContext.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,2DAA2D;AAC3D,8DAA8D;AAC9D,iDAAiD;AAEjD,OAAO,EACL,OAAO,GACR,MAAM,aAAa,CAAC;AAsDrB,OAAO,EACL,UAAU,GACX,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,QAAQ,GACT,MAAM,cAAc,CAAC;AA4BtB,OAAO,EACL,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,GACd,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { HashMap } from "@aardworx/wombat.adaptive";
|
|
2
|
+
export type CullMode = "none" | "front" | "back";
|
|
3
|
+
export type FrontFace = "ccw" | "cw";
|
|
4
|
+
export type Topology = GPUPrimitiveTopology;
|
|
5
|
+
export interface RasterizerState {
|
|
6
|
+
readonly topology: Topology;
|
|
7
|
+
readonly cullMode: CullMode;
|
|
8
|
+
readonly frontFace: FrontFace;
|
|
9
|
+
/** "none" disables polygon offset. */
|
|
10
|
+
readonly depthBias?: {
|
|
11
|
+
readonly constant: number;
|
|
12
|
+
readonly slopeScale: number;
|
|
13
|
+
readonly clamp: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface DepthState {
|
|
17
|
+
readonly write: boolean;
|
|
18
|
+
readonly compare: GPUCompareFunction;
|
|
19
|
+
}
|
|
20
|
+
export interface StencilFaceState {
|
|
21
|
+
readonly compare: GPUCompareFunction;
|
|
22
|
+
readonly failOp: GPUStencilOperation;
|
|
23
|
+
readonly depthFailOp: GPUStencilOperation;
|
|
24
|
+
readonly passOp: GPUStencilOperation;
|
|
25
|
+
}
|
|
26
|
+
export interface StencilState {
|
|
27
|
+
readonly readMask: number;
|
|
28
|
+
readonly writeMask: number;
|
|
29
|
+
readonly front: StencilFaceState;
|
|
30
|
+
readonly back: StencilFaceState;
|
|
31
|
+
}
|
|
32
|
+
export interface BlendComponentState {
|
|
33
|
+
readonly operation: GPUBlendOperation;
|
|
34
|
+
readonly srcFactor: GPUBlendFactor;
|
|
35
|
+
readonly dstFactor: GPUBlendFactor;
|
|
36
|
+
}
|
|
37
|
+
export interface BlendState {
|
|
38
|
+
readonly color: BlendComponentState;
|
|
39
|
+
readonly alpha: BlendComponentState;
|
|
40
|
+
/** RGBA channel write mask (bitmask: R=1, G=2, B=4, A=8). */
|
|
41
|
+
readonly writeMask: number;
|
|
42
|
+
}
|
|
43
|
+
export interface PipelineState {
|
|
44
|
+
readonly rasterizer: RasterizerState;
|
|
45
|
+
readonly depth?: DepthState;
|
|
46
|
+
readonly stencil?: StencilState;
|
|
47
|
+
/**
|
|
48
|
+
* Per-color-attachment blend state, keyed by the attachment name
|
|
49
|
+
* from the `FramebufferSignature`. Missing entries default to
|
|
50
|
+
* "no blending, write all channels".
|
|
51
|
+
*/
|
|
52
|
+
readonly blends?: HashMap<string, BlendState>;
|
|
53
|
+
/** Multi-sample alpha-to-coverage. Default `false`. */
|
|
54
|
+
readonly alphaToCoverage?: boolean;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=pipelineState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelineState.d.ts","sourceRoot":"","sources":["../../src/core/pipelineState.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;AACrC,MAAM,MAAM,QAAQ,GAAG,oBAAoB,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACzG;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,uDAAuD;IACvD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// PipelineState — the fixed-function bits the user picks per
|
|
2
|
+
// RenderObject. Vertex layout, blending, depth/stencil, raster.
|
|
3
|
+
// Combined with a CompiledEffect + FramebufferSignature this is
|
|
4
|
+
// enough to bake a GPURenderPipeline.
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=pipelineState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelineState.js","sourceRoot":"","sources":["../../src/core/pipelineState.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,gEAAgE;AAChE,gEAAgE;AAChE,sCAAsC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface RenderContextSlot {
|
|
2
|
+
encoder: GPUCommandEncoder | null;
|
|
3
|
+
withEncoder<R>(encoder: GPUCommandEncoder, fn: () => R): R;
|
|
4
|
+
requireEncoder(): GPUCommandEncoder;
|
|
5
|
+
}
|
|
6
|
+
export declare const RenderContext: RenderContextSlot;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=renderContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderContext.d.ts","sourceRoot":"","sources":["../../src/core/renderContext.ts"],"names":[],"mappings":"AAUA,UAAU,iBAAiB;IACzB,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3D,cAAc,IAAI,iBAAiB,CAAC;CACrC;AAED,eAAO,MAAM,aAAa,EAAE,iBA+B3B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// RenderContext — ambient state available to AdaptiveResources
|
|
2
|
+
// during evaluation. The runtime sets `encoder` before walking a
|
|
3
|
+
// task's resources so that `compute(token)` calls inside an
|
|
4
|
+
// AdaptiveResource can encode commands (uploads, compute passes,
|
|
5
|
+
// render-to-texture) onto the current frame's encoder.
|
|
6
|
+
//
|
|
7
|
+
// Outside a frame (`encoder === null`) AdaptiveResources should
|
|
8
|
+
// either return their cached handle or throw — they cannot do
|
|
9
|
+
// GPU work without an encoder.
|
|
10
|
+
export const RenderContext = {
|
|
11
|
+
encoder: null,
|
|
12
|
+
/**
|
|
13
|
+
* Run `fn` with `encoder` exposed as the current frame encoder.
|
|
14
|
+
* Restores the previous value on exit. Nestable.
|
|
15
|
+
*/
|
|
16
|
+
withEncoder(encoder, fn) {
|
|
17
|
+
const prev = RenderContext.encoder;
|
|
18
|
+
RenderContext.encoder = encoder;
|
|
19
|
+
try {
|
|
20
|
+
return fn();
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
RenderContext.encoder = prev;
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
/**
|
|
27
|
+
* Convenience: throws if no encoder is active. Use inside
|
|
28
|
+
* `compute(token)` of an AdaptiveResource that genuinely needs
|
|
29
|
+
* to encode work.
|
|
30
|
+
*/
|
|
31
|
+
requireEncoder() {
|
|
32
|
+
if (RenderContext.encoder === null) {
|
|
33
|
+
throw new Error("RenderContext: no active encoder. AdaptiveResource.compute() " +
|
|
34
|
+
"was called outside RenderContext.withEncoder(...).");
|
|
35
|
+
}
|
|
36
|
+
return RenderContext.encoder;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=renderContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderContext.js","sourceRoot":"","sources":["../../src/core/renderContext.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,iEAAiE;AACjE,4DAA4D;AAC5D,iEAAiE;AACjE,uDAAuD;AACvD,EAAE;AACF,gEAAgE;AAChE,8DAA8D;AAC9D,+BAA+B;AAQ/B,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,OAAO,EAAE,IAAI;IAEb;;;OAGG;IACH,WAAW,CAAI,OAA0B,EAAE,EAAW;QACpD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,+DAA+D;gBAC/D,oDAAoD,CACrD,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { HashMap, aval } from "@aardworx/wombat.adaptive";
|
|
2
|
+
import type { IBuffer } from "./buffer.js";
|
|
3
|
+
import type { BufferView } from "./bufferView.js";
|
|
4
|
+
import type { DrawCall } from "./drawCall.js";
|
|
5
|
+
import type { ISampler } from "./sampler.js";
|
|
6
|
+
import type { ITexture } from "./texture.js";
|
|
7
|
+
import type { PipelineState } from "./pipelineState.js";
|
|
8
|
+
import type { Effect } from "./shader.js";
|
|
9
|
+
export interface RenderObject {
|
|
10
|
+
/**
|
|
11
|
+
* A wombat.shader `Effect` — produced by the `vertex(...) /
|
|
12
|
+
* fragment(...) / effect(...)` markers (transformed at build
|
|
13
|
+
* time by `@aardworx/wombat.shader-vite`) or hand-built via
|
|
14
|
+
* `stage(module, ...)`. The runtime calls
|
|
15
|
+
* `effect.compile({ target: "wgsl" })` (Effect's own
|
|
16
|
+
* hole-value-keyed cache makes this free per frame).
|
|
17
|
+
*
|
|
18
|
+
* `Effect.id` (stable build-time hash) feeds the pipeline cache
|
|
19
|
+
* key, which means renaming a captured value invalidates only
|
|
20
|
+
* its specialization; everything else stays cached.
|
|
21
|
+
*
|
|
22
|
+
* For users with a precompiled `CompiledEffect` (e.g. from
|
|
23
|
+
* `compileShaderSource(...)`), wrap it with the test helper
|
|
24
|
+
* `fakeEffectFromCompiled` or call `stage(module)` to produce
|
|
25
|
+
* a real Effect.
|
|
26
|
+
*/
|
|
27
|
+
readonly effect: Effect;
|
|
28
|
+
readonly pipelineState: PipelineState;
|
|
29
|
+
/** name → vertex buffer view; e.g. "position", "normal", "uv". */
|
|
30
|
+
readonly vertexAttributes: HashMap<string, aval<BufferView>>;
|
|
31
|
+
/** name → instance buffer view; e.g. "modelMatrix", "instanceColor". */
|
|
32
|
+
readonly instanceAttributes?: HashMap<string, aval<BufferView>>;
|
|
33
|
+
/** name → uniform value; runtime packs into UBO based on shader layout. */
|
|
34
|
+
readonly uniforms: HashMap<string, aval<unknown>>;
|
|
35
|
+
/** name → texture source (CPU image or pre-built GPUTexture). */
|
|
36
|
+
readonly textures: HashMap<string, aval<ITexture>>;
|
|
37
|
+
/** name → sampler source (descriptor or pre-built GPUSampler). */
|
|
38
|
+
readonly samplers: HashMap<string, aval<ISampler>>;
|
|
39
|
+
/** name → storage buffer source. */
|
|
40
|
+
readonly storageBuffers?: HashMap<string, aval<IBuffer>>;
|
|
41
|
+
/** Index buffer for indexed draws. */
|
|
42
|
+
readonly indices?: aval<BufferView>;
|
|
43
|
+
readonly drawCall: aval<DrawCall>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=renderObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderObject.d.ts","sourceRoot":"","sources":["../../src/core/renderObject.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC,kEAAkE;IAClE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,wEAAwE;IACxE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,oCAAoC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzD,sCAAsC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// RenderObject — the user-facing primitive: an effect + a bag of
|
|
2
|
+
// named inputs + a draw call. Names are matched against the
|
|
3
|
+
// shader's ProgramInterface during preparation; extras are
|
|
4
|
+
// silently ignored, missing required bindings are an error.
|
|
5
|
+
//
|
|
6
|
+
// Every input is `aval<T>` over a *source* type (IBuffer, ITexture,
|
|
7
|
+
// ISampler, …). The runtime (resources package) wraps these into
|
|
8
|
+
// internal AdaptiveResources for upload + ref-counting; the user
|
|
9
|
+
// never instantiates an AdaptiveResource directly.
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=renderObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderObject.js","sourceRoot":"","sources":["../../src/core/renderObject.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4DAA4D;AAC5D,2DAA2D;AAC3D,4DAA4D;AAC5D,EAAE;AACF,oEAAoE;AACpE,iEAAiE;AACjE,iEAAiE;AACjE,mDAAmD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AdaptiveToken } from "@aardworx/wombat.adaptive";
|
|
2
|
+
export interface IRenderTask {
|
|
3
|
+
/**
|
|
4
|
+
* Encode all commands into the GPU queue using the current
|
|
5
|
+
* adaptive state read via `token`. Returns once submission has
|
|
6
|
+
* been queued (does not wait for GPU completion).
|
|
7
|
+
*/
|
|
8
|
+
run(token: AdaptiveToken): void;
|
|
9
|
+
/** Tear down resources owned by the task. Idempotent. */
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=renderTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderTask.d.ts","sourceRoot":"","sources":["../../src/core/renderTask.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAEhC,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderTask.js","sourceRoot":"","sources":["../../src/core/renderTask.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,kEAAkE;AAClE,2CAA2C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { aval, alist, aset } from "@aardworx/wombat.adaptive";
|
|
2
|
+
import type { RenderObject } from "./renderObject.js";
|
|
3
|
+
export type RenderTree = {
|
|
4
|
+
readonly kind: "Empty";
|
|
5
|
+
} | {
|
|
6
|
+
readonly kind: "Leaf";
|
|
7
|
+
readonly object: RenderObject;
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: "Ordered";
|
|
10
|
+
readonly children: readonly RenderTree[];
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "Unordered";
|
|
13
|
+
readonly children: readonly RenderTree[];
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "Adaptive";
|
|
16
|
+
readonly tree: aval<RenderTree>;
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: "OrderedFromList";
|
|
19
|
+
readonly children: alist<RenderTree>;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: "UnorderedFromSet";
|
|
22
|
+
readonly children: aset<RenderTree>;
|
|
23
|
+
};
|
|
24
|
+
export declare const RenderTree: {
|
|
25
|
+
readonly empty: {
|
|
26
|
+
readonly kind: "Empty";
|
|
27
|
+
};
|
|
28
|
+
readonly leaf: (object: RenderObject) => RenderTree;
|
|
29
|
+
readonly ordered: (...children: RenderTree[]) => RenderTree;
|
|
30
|
+
readonly unordered: (...children: RenderTree[]) => RenderTree;
|
|
31
|
+
readonly adaptive: (tree: aval<RenderTree>) => RenderTree;
|
|
32
|
+
readonly orderedFromList: (children: alist<RenderTree>) => RenderTree;
|
|
33
|
+
readonly unorderedFromSet: (children: aset<RenderTree>) => RenderTree;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=renderTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderTree.d.ts","sourceRoot":"","sources":["../../src/core/renderTree.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC;AAE/E,eAAO,MAAM,UAAU;;;;4BAEN,YAAY,KAAG,UAAU;oCACjB,UAAU,EAAE,KAAG,UAAU;sCACvB,UAAU,EAAE,KAAG,UAAU;8BACjC,IAAI,CAAC,UAAU,CAAC,KAAG,UAAU;yCAClB,KAAK,CAAC,UAAU,CAAC,KAAG,UAAU;0CAC7B,IAAI,CAAC,UAAU,CAAC,KAAG,UAAU;CAClD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// RenderTree — intra-pass ordering structure for RenderObjects.
|
|
2
|
+
//
|
|
3
|
+
// `Ordered` children execute left-to-right; `Unordered` children
|
|
4
|
+
// can be reordered by the backend to minimise pipeline / bind-
|
|
5
|
+
// group / vertex-buffer state changes. The Adaptive variants
|
|
6
|
+
// fold reactive containers (alist, aset, aval) directly into the
|
|
7
|
+
// tree.
|
|
8
|
+
export const RenderTree = {
|
|
9
|
+
empty: { kind: "Empty" },
|
|
10
|
+
leaf: (object) => ({ kind: "Leaf", object }),
|
|
11
|
+
ordered: (...children) => ({ kind: "Ordered", children }),
|
|
12
|
+
unordered: (...children) => ({ kind: "Unordered", children }),
|
|
13
|
+
adaptive: (tree) => ({ kind: "Adaptive", tree }),
|
|
14
|
+
orderedFromList: (children) => ({ kind: "OrderedFromList", children }),
|
|
15
|
+
unorderedFromSet: (children) => ({ kind: "UnorderedFromSet", children }),
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=renderTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderTree.js","sourceRoot":"","sources":["../../src/core/renderTree.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,iEAAiE;AACjE,+DAA+D;AAC/D,6DAA6D;AAC7D,iEAAiE;AACjE,QAAQ;AAcR,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAgC;IACtD,IAAI,EAAE,CAAC,MAAoB,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACtE,OAAO,EAAE,CAAC,GAAG,QAAsB,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACnF,SAAS,EAAE,CAAC,GAAG,QAAsB,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IACvF,QAAQ,EAAE,CAAC,IAAsB,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9E,eAAe,EAAE,CAAC,QAA2B,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IACrG,gBAAgB,EAAE,CAAC,QAA0B,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;CAC9F,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ISampler = {
|
|
2
|
+
readonly kind: "gpu";
|
|
3
|
+
readonly sampler: GPUSampler;
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "desc";
|
|
6
|
+
readonly descriptor: GPUSamplerDescriptor;
|
|
7
|
+
};
|
|
8
|
+
export declare const ISampler: {
|
|
9
|
+
readonly fromGPU: (sampler: GPUSampler) => ISampler;
|
|
10
|
+
readonly fromDescriptor: (descriptor: GPUSamplerDescriptor) => ISampler;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=sampler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampler.d.ts","sourceRoot":"","sources":["../../src/core/sampler.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEzE,eAAO,MAAM,QAAQ;gCACF,UAAU,KAAG,QAAQ;0CACX,oBAAoB,KAAG,QAAQ;CAClD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// ISampler — sampler source. Either a pre-built `GPUSampler` or a
|
|
2
|
+
// descriptor for the runtime to materialise (samplers are cheap
|
|
3
|
+
// and dedupable, so descriptors are the common path).
|
|
4
|
+
export const ISampler = {
|
|
5
|
+
fromGPU(sampler) { return { kind: "gpu", sampler }; },
|
|
6
|
+
fromDescriptor(descriptor) { return { kind: "desc", descriptor }; },
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=sampler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../src/core/sampler.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gEAAgE;AAChE,sDAAsD;AAMtD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,CAAC,OAAmB,IAAc,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,cAAc,CAAC,UAAgC,IAAc,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;CAC3F,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { Effect, ComputeShader, Stage, HoleGetter, HoleGetters, CompiledEffect, CompiledStage, Target, } from "@aardworx/wombat.shader";
|
|
2
|
+
export type { ProgramInterface, StageInfo, AttributeInfo, OutputInfo, LooseUniformInfo, UniformBlockInfo, UniformFieldInfo, SamplerInfo, TextureInfo, StorageBufferInfo, } from "@aardworx/wombat.shader";
|
|
3
|
+
//# sourceMappingURL=shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader.d.ts","sourceRoot":"","sources":["../../src/core/shader.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,MAAM,EACN,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,MAAM,GACP,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Re-exports of the wombat.shader runtime types consumed by the
|
|
2
|
+
// rendering layer. We do NOT duplicate or re-shape these — the
|
|
3
|
+
// rendering layer is just a consumer of wombat.shader's
|
|
4
|
+
// `Effect` / `CompiledEffect` / `ProgramInterface`.
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader.js","sourceRoot":"","sources":["../../src/core/shader.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,+DAA+D;AAC/D,wDAAwD;AACxD,oDAAoD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface RawTextureSource {
|
|
2
|
+
readonly kind: "raw";
|
|
3
|
+
readonly data: ArrayBuffer | ArrayBufferView;
|
|
4
|
+
readonly width: number;
|
|
5
|
+
readonly height: number;
|
|
6
|
+
readonly depthOrArrayLayers?: number;
|
|
7
|
+
readonly format: GPUTextureFormat;
|
|
8
|
+
readonly mipLevelCount?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ExternalTextureSource {
|
|
11
|
+
readonly kind: "external";
|
|
12
|
+
readonly source: ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | ImageData;
|
|
13
|
+
/** Override the format the runtime should allocate (default: "rgba8unorm"). */
|
|
14
|
+
readonly format?: GPUTextureFormat;
|
|
15
|
+
/** Generate a mip chain on upload. Default `false`. */
|
|
16
|
+
readonly generateMips?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type HostTextureSource = RawTextureSource | ExternalTextureSource;
|
|
19
|
+
export type ITexture = {
|
|
20
|
+
readonly kind: "gpu";
|
|
21
|
+
readonly texture: GPUTexture;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "host";
|
|
24
|
+
readonly source: HostTextureSource;
|
|
25
|
+
};
|
|
26
|
+
export declare const ITexture: {
|
|
27
|
+
readonly fromGPU: (texture: GPUTexture) => ITexture;
|
|
28
|
+
readonly fromExternal: (source: ExternalTextureSource["source"], opts?: {
|
|
29
|
+
format?: GPUTextureFormat;
|
|
30
|
+
generateMips?: boolean;
|
|
31
|
+
}) => ITexture;
|
|
32
|
+
readonly fromRaw: (raw: Omit<RawTextureSource, "kind">) => ITexture;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=texture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texture.d.ts","sourceRoot":"","sources":["../../src/core/texture.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EACX,WAAW,GACX,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,SAAS,CAAC;IACd,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,qBAAqB,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAElE,eAAO,MAAM,QAAQ;gCACF,UAAU,KAAG,QAAQ;oCAI5B,qBAAqB,CAAC,QAAQ,CAAC,SACjC;QAAE,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KAC1D,QAAQ;4BASE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAG,QAAQ;CAG9C,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// ITexture — texture source that can be either a real GPU texture
|
|
2
|
+
// or a host-side image. Mirrors the IBuffer pattern.
|
|
3
|
+
//
|
|
4
|
+
// Host sources cover everything WebGPU's `copyExternalImageToTexture`
|
|
5
|
+
// or `writeTexture` can accept:
|
|
6
|
+
// - `ImageBitmap`, `HTMLImageElement`, `HTMLVideoElement`,
|
|
7
|
+
// `HTMLCanvasElement`, `OffscreenCanvas`, `ImageData` —
|
|
8
|
+
// uploaded via `copyExternalImageToTexture`.
|
|
9
|
+
// - Raw `{ data, width, height, format }` — uploaded via
|
|
10
|
+
// `queue.writeTexture` (one mip; runtime can synthesise the
|
|
11
|
+
// rest if requested).
|
|
12
|
+
export const ITexture = {
|
|
13
|
+
fromGPU(texture) {
|
|
14
|
+
return { kind: "gpu", texture };
|
|
15
|
+
},
|
|
16
|
+
fromExternal(source, opts = {}) {
|
|
17
|
+
const ext = {
|
|
18
|
+
kind: "external",
|
|
19
|
+
source,
|
|
20
|
+
...(opts.format !== undefined ? { format: opts.format } : {}),
|
|
21
|
+
...(opts.generateMips !== undefined ? { generateMips: opts.generateMips } : {}),
|
|
22
|
+
};
|
|
23
|
+
return { kind: "host", source: ext };
|
|
24
|
+
},
|
|
25
|
+
fromRaw(raw) {
|
|
26
|
+
return { kind: "host", source: { kind: "raw", ...raw } };
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=texture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texture.js","sourceRoot":"","sources":["../../src/core/texture.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qDAAqD;AACrD,EAAE;AACF,sEAAsE;AACtE,gCAAgC;AAChC,6DAA6D;AAC7D,4DAA4D;AAC5D,iDAAiD;AACjD,2DAA2D;AAC3D,gEAAgE;AAChE,0BAA0B;AAiC1B,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,CAAC,OAAmB;QACzB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IACD,YAAY,CACV,MAAuC,EACvC,OAA8D,EAAE;QAEhE,MAAM,GAAG,GAA0B;YACjC,IAAI,EAAE,UAAU;YAChB,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAmC;QACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC;IAC3D,CAAC;CACO,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Public API of `@aardworx/wombat.rendering`.
|
|
2
|
+
//
|
|
3
|
+
// Default entry re-exports everything: types, resource preparers,
|
|
4
|
+
// command-stream functions, runtime, and the window/canvas glue.
|
|
5
|
+
// Subpath exports give granular access for advanced consumers.
|
|
6
|
+
//
|
|
7
|
+
// import { ... } from "@aardworx/wombat.rendering"; // everything
|
|
8
|
+
// import { ... } from "@aardworx/wombat.rendering/core"; // types only
|
|
9
|
+
// import { ... } from "@aardworx/wombat.rendering/resources";
|
|
10
|
+
// import { ... } from "@aardworx/wombat.rendering/commands";
|
|
11
|
+
// import { ... } from "@aardworx/wombat.rendering/runtime";
|
|
12
|
+
// import { ... } from "@aardworx/wombat.rendering/window";
|
|
13
|
+
export * from "./core/index.js";
|
|
14
|
+
export * from "./resources/index.js";
|
|
15
|
+
export * from "./commands/index.js";
|
|
16
|
+
export * from "./runtime/index.js";
|
|
17
|
+
export * from "./window/index.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,gEAAgE;AAChE,+DAA+D;AAC/D,8DAA8D;AAC9D,6DAA6D;AAE7D,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AdaptiveResource, type IBuffer } from "../core/index.js";
|
|
2
|
+
import { type aval } from "@aardworx/wombat.adaptive";
|
|
3
|
+
export interface PrepareAdaptiveBufferOptions {
|
|
4
|
+
/** Bitwise OR of GPUBufferUsage flags. `COPY_DST` is added automatically when needed. */
|
|
5
|
+
readonly usage: GPUBufferUsageFlags;
|
|
6
|
+
/** Optional debug label forwarded to created GPUBuffers. */
|
|
7
|
+
readonly label?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Reuse the existing GPUBuffer when the new host data fits in
|
|
10
|
+
* the current allocation. Default `true`. Set `false` to force
|
|
11
|
+
* a fresh buffer on every host-side change (rarely useful).
|
|
12
|
+
*/
|
|
13
|
+
readonly reuseOnFit?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Wrap an `aval<IBuffer>` as a ref-counted, adaptively-uploaded
|
|
17
|
+
* `AdaptiveResource<GPUBuffer>`. The resource is itself an
|
|
18
|
+
* `aval<GPUBuffer>` — downstream consumers can `getValue(token)`
|
|
19
|
+
* inside their own adaptive evaluation.
|
|
20
|
+
*/
|
|
21
|
+
export declare function prepareAdaptiveBuffer(device: GPUDevice, source: aval<IBuffer>, opts: PrepareAdaptiveBufferOptions): AdaptiveResource<GPUBuffer>;
|
|
22
|
+
//# sourceMappingURL=adaptiveBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptiveBuffer.d.ts","sourceRoot":"","sources":["../../src/resources/adaptiveBuffer.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,gBAAgB,EAGhB,KAAK,OAAO,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,IAAI,EACV,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,4BAA4B;IAC3C,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AA6ED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,EACrB,IAAI,EAAE,4BAA4B,GACjC,gBAAgB,CAAC,SAAS,CAAC,CAE7B"}
|