@aardworx/wombat.rendering 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/pipelineState.d.ts +93 -23
- package/dist/core/pipelineState.d.ts.map +1 -1
- package/dist/core/pipelineState.js +83 -1
- package/dist/core/pipelineState.js.map +1 -1
- package/dist/core/renderObject.d.ts +11 -4
- package/dist/core/renderObject.d.ts.map +1 -1
- package/dist/resources/preparedRenderObject.d.ts +37 -3
- package/dist/resources/preparedRenderObject.d.ts.map +1 -1
- package/dist/resources/preparedRenderObject.js +274 -91
- package/dist/resources/preparedRenderObject.js.map +1 -1
- package/dist/runtime/scenePass.d.ts.map +1 -1
- package/dist/runtime/scenePass.js +6 -1
- package/dist/runtime/scenePass.js.map +1 -1
- package/package.json +1 -1
- package/src/core/index.ts +10 -1
- package/src/core/pipelineState.ts +178 -24
- package/src/core/renderObject.ts +11 -4
- package/src/resources/preparedRenderObject.ts +358 -92
- package/src/runtime/scenePass.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenePass.js","sourceRoot":"","sources":["../../src/runtime/scenePass.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,mEAAmE;AACnE,qDAAqD;AACrD,0DAA0D;AAC1D,yBAAyB;AACzB,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,gEAAgE;AAChE,iDAAiD;AACjD,EAAE;AACF,+DAA+D;AAC/D,qEAAqE;AACrE,mEAAmE;AACnE,kEAAkE;AAClE,4BAA4B;AAE5B,OAAO,EAIL,MAAM,GAKP,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAMN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAkB/B,MAAe,UAAU;CAOxB;AAED,MAAM,WAAY,SAAQ,UAAU;IAClC,MAAM,KAAU,CAAC;IACjB,IAAI,KAAU,CAAC;IACf,OAAO,KAAU,CAAC;CACnB;AAED,MAAM,UAAW,SAAQ,UAAU;IAChB,QAAQ,CAAuB;IAChD,YAAY,GAAiB,EAAE,GAAiB;QAC9C,KAAK,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE;YACvE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,
|
|
1
|
+
{"version":3,"file":"scenePass.js","sourceRoot":"","sources":["../../src/runtime/scenePass.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aardworx/wombat.rendering",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "WebGPU rendering layer for the Wombat TypeScript stack — RenderObject/RenderTask/runtime + window glue, port of Aardvark.Rendering's lower layers on top of WebGPU and wombat.shader.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "krauthaufen",
|
package/src/core/index.ts
CHANGED
|
@@ -47,15 +47,24 @@ export type {
|
|
|
47
47
|
BlendComponentState,
|
|
48
48
|
BlendState,
|
|
49
49
|
CullMode,
|
|
50
|
+
DepthBiasState,
|
|
50
51
|
DepthState,
|
|
51
52
|
FrontFace,
|
|
52
|
-
|
|
53
|
+
PlainBlendComponentState,
|
|
54
|
+
PlainBlendState,
|
|
55
|
+
PlainDepthState,
|
|
56
|
+
PlainPipelineState,
|
|
57
|
+
PlainRasterizerState,
|
|
58
|
+
PlainStencilFaceState,
|
|
59
|
+
PlainStencilState,
|
|
53
60
|
RasterizerState,
|
|
54
61
|
StencilFaceState,
|
|
55
62
|
StencilState,
|
|
56
63
|
Topology,
|
|
57
64
|
} from "./pipelineState.js";
|
|
58
65
|
|
|
66
|
+
export { PipelineState } from "./pipelineState.js";
|
|
67
|
+
|
|
59
68
|
export type {
|
|
60
69
|
RenderObject,
|
|
61
70
|
} from "./renderObject.js";
|
|
@@ -2,63 +2,217 @@
|
|
|
2
2
|
// RenderObject. Vertex layout, blending, depth/stencil, raster.
|
|
3
3
|
// Combined with a CompiledEffect + FramebufferSignature this is
|
|
4
4
|
// enough to bake a GPURenderPipeline.
|
|
5
|
+
//
|
|
6
|
+
// All fields are `aval<T>` so wombat.dom's render-state scopes can
|
|
7
|
+
// flow through without forcing. The shader (`Effect`) stays a plain
|
|
8
|
+
// non-aval value; only uniforms and pipeline state are reactive.
|
|
5
9
|
|
|
6
|
-
import
|
|
10
|
+
import { AVal, HashMap, type aval } from "@aardworx/wombat.adaptive";
|
|
7
11
|
|
|
8
12
|
export type CullMode = "none" | "front" | "back";
|
|
9
13
|
export type FrontFace = "ccw" | "cw";
|
|
10
14
|
export type Topology = GPUPrimitiveTopology;
|
|
11
15
|
|
|
16
|
+
export interface DepthBiasState {
|
|
17
|
+
readonly constant: number;
|
|
18
|
+
readonly slopeScale: number;
|
|
19
|
+
readonly clamp: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
12
22
|
export interface RasterizerState {
|
|
23
|
+
readonly topology: aval<Topology>;
|
|
24
|
+
readonly cullMode: aval<CullMode>;
|
|
25
|
+
readonly frontFace: aval<FrontFace>;
|
|
26
|
+
/** `undefined` value disables polygon offset. */
|
|
27
|
+
readonly depthBias?: aval<DepthBiasState | undefined>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface DepthState {
|
|
31
|
+
readonly write: aval<boolean>;
|
|
32
|
+
readonly compare: aval<GPUCompareFunction>;
|
|
33
|
+
/** unclippedDepth — requires the WebGPU adapter feature. */
|
|
34
|
+
readonly clamp?: aval<boolean>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface StencilFaceState {
|
|
38
|
+
readonly compare: aval<GPUCompareFunction>;
|
|
39
|
+
readonly failOp: aval<GPUStencilOperation>;
|
|
40
|
+
readonly depthFailOp: aval<GPUStencilOperation>;
|
|
41
|
+
readonly passOp: aval<GPUStencilOperation>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface StencilState {
|
|
45
|
+
readonly enabled: aval<boolean>;
|
|
46
|
+
/** Per-frame, NOT pipeline rebuild. */
|
|
47
|
+
readonly reference: aval<number>;
|
|
48
|
+
readonly readMask: aval<number>;
|
|
49
|
+
readonly writeMask: aval<number>;
|
|
50
|
+
readonly front: StencilFaceState;
|
|
51
|
+
readonly back: StencilFaceState;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface BlendComponentState {
|
|
55
|
+
readonly operation: aval<GPUBlendOperation>;
|
|
56
|
+
readonly srcFactor: aval<GPUBlendFactor>;
|
|
57
|
+
readonly dstFactor: aval<GPUBlendFactor>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface BlendState {
|
|
61
|
+
readonly color: BlendComponentState;
|
|
62
|
+
readonly alpha: BlendComponentState;
|
|
63
|
+
/** RGBA channel write mask (bitmask: R=1, G=2, B=4, A=8). */
|
|
64
|
+
readonly writeMask: aval<number>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface PipelineState {
|
|
68
|
+
readonly rasterizer: RasterizerState;
|
|
69
|
+
readonly depth?: DepthState;
|
|
70
|
+
readonly stencil?: StencilState;
|
|
71
|
+
/**
|
|
72
|
+
* Per-color-attachment blend state, keyed by the attachment name
|
|
73
|
+
* from the `FramebufferSignature`. Missing entries default to
|
|
74
|
+
* "no blending, write all channels".
|
|
75
|
+
*/
|
|
76
|
+
readonly blends?: aval<HashMap<string, BlendState>>;
|
|
77
|
+
/** Multi-sample alpha-to-coverage. Default `false`. */
|
|
78
|
+
readonly alphaToCoverage?: aval<boolean>;
|
|
79
|
+
/** Per-frame, not pipeline-rebuild. */
|
|
80
|
+
readonly blendConstant?: aval<{ r: number; g: number; b: number; a: number }>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// Plain (non-aval) mirror types — handy for the `PipelineState.constant`
|
|
85
|
+
// helper. Callers that already hold avals construct `PipelineState`
|
|
86
|
+
// directly; callers that have plain values use the helper to wrap.
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
|
|
89
|
+
export interface PlainRasterizerState {
|
|
13
90
|
readonly topology: Topology;
|
|
14
91
|
readonly cullMode: CullMode;
|
|
15
92
|
readonly frontFace: FrontFace;
|
|
16
|
-
|
|
17
|
-
readonly depthBias?: { readonly constant: number; readonly slopeScale: number; readonly clamp: number };
|
|
93
|
+
readonly depthBias?: DepthBiasState;
|
|
18
94
|
}
|
|
19
95
|
|
|
20
|
-
export interface
|
|
96
|
+
export interface PlainDepthState {
|
|
21
97
|
readonly write: boolean;
|
|
22
98
|
readonly compare: GPUCompareFunction;
|
|
99
|
+
readonly clamp?: boolean;
|
|
23
100
|
}
|
|
24
101
|
|
|
25
|
-
export interface
|
|
102
|
+
export interface PlainStencilFaceState {
|
|
26
103
|
readonly compare: GPUCompareFunction;
|
|
27
104
|
readonly failOp: GPUStencilOperation;
|
|
28
105
|
readonly depthFailOp: GPUStencilOperation;
|
|
29
106
|
readonly passOp: GPUStencilOperation;
|
|
30
107
|
}
|
|
31
108
|
|
|
32
|
-
export interface
|
|
109
|
+
export interface PlainStencilState {
|
|
110
|
+
readonly enabled: boolean;
|
|
111
|
+
readonly reference: number;
|
|
33
112
|
readonly readMask: number;
|
|
34
113
|
readonly writeMask: number;
|
|
35
|
-
readonly front:
|
|
36
|
-
readonly back:
|
|
114
|
+
readonly front: PlainStencilFaceState;
|
|
115
|
+
readonly back: PlainStencilFaceState;
|
|
37
116
|
}
|
|
38
117
|
|
|
39
|
-
export interface
|
|
118
|
+
export interface PlainBlendComponentState {
|
|
40
119
|
readonly operation: GPUBlendOperation;
|
|
41
120
|
readonly srcFactor: GPUBlendFactor;
|
|
42
121
|
readonly dstFactor: GPUBlendFactor;
|
|
43
122
|
}
|
|
44
123
|
|
|
45
|
-
export interface
|
|
46
|
-
readonly color:
|
|
47
|
-
readonly alpha:
|
|
48
|
-
/** RGBA channel write mask (bitmask: R=1, G=2, B=4, A=8). */
|
|
124
|
+
export interface PlainBlendState {
|
|
125
|
+
readonly color: PlainBlendComponentState;
|
|
126
|
+
readonly alpha: PlainBlendComponentState;
|
|
49
127
|
readonly writeMask: number;
|
|
50
128
|
}
|
|
51
129
|
|
|
52
|
-
export interface
|
|
53
|
-
readonly rasterizer:
|
|
54
|
-
readonly depth?:
|
|
55
|
-
readonly stencil?:
|
|
56
|
-
|
|
57
|
-
* Per-color-attachment blend state, keyed by the attachment name
|
|
58
|
-
* from the `FramebufferSignature`. Missing entries default to
|
|
59
|
-
* "no blending, write all channels".
|
|
60
|
-
*/
|
|
61
|
-
readonly blends?: HashMap<string, BlendState>;
|
|
62
|
-
/** Multi-sample alpha-to-coverage. Default `false`. */
|
|
130
|
+
export interface PlainPipelineState {
|
|
131
|
+
readonly rasterizer: PlainRasterizerState;
|
|
132
|
+
readonly depth?: PlainDepthState;
|
|
133
|
+
readonly stencil?: PlainStencilState;
|
|
134
|
+
readonly blends?: HashMap<string, PlainBlendState>;
|
|
63
135
|
readonly alphaToCoverage?: boolean;
|
|
136
|
+
readonly blendConstant?: { r: number; g: number; b: number; a: number };
|
|
64
137
|
}
|
|
138
|
+
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Helpers
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
function blendStateFromPlain(b: PlainBlendState): BlendState {
|
|
144
|
+
return {
|
|
145
|
+
color: {
|
|
146
|
+
operation: AVal.constant(b.color.operation),
|
|
147
|
+
srcFactor: AVal.constant(b.color.srcFactor),
|
|
148
|
+
dstFactor: AVal.constant(b.color.dstFactor),
|
|
149
|
+
},
|
|
150
|
+
alpha: {
|
|
151
|
+
operation: AVal.constant(b.alpha.operation),
|
|
152
|
+
srcFactor: AVal.constant(b.alpha.srcFactor),
|
|
153
|
+
dstFactor: AVal.constant(b.alpha.dstFactor),
|
|
154
|
+
},
|
|
155
|
+
writeMask: AVal.constant(b.writeMask),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function stencilFaceFromPlain(f: PlainStencilFaceState): StencilFaceState {
|
|
160
|
+
return {
|
|
161
|
+
compare: AVal.constant(f.compare),
|
|
162
|
+
failOp: AVal.constant(f.failOp),
|
|
163
|
+
depthFailOp: AVal.constant(f.depthFailOp),
|
|
164
|
+
passOp: AVal.constant(f.passOp),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Wrap a plain `PlainPipelineState` into the aval-shaped
|
|
170
|
+
* `PipelineState` by lifting every leaf with `AVal.constant`. Useful
|
|
171
|
+
* for tests and for callers that don't carry avals yet — wombat.dom's
|
|
172
|
+
* `derivePipelineState` constructs the aval-shape directly.
|
|
173
|
+
*/
|
|
174
|
+
export const PipelineState = {
|
|
175
|
+
constant(plain: PlainPipelineState): PipelineState {
|
|
176
|
+
const rast: RasterizerState = {
|
|
177
|
+
topology: AVal.constant(plain.rasterizer.topology),
|
|
178
|
+
cullMode: AVal.constant(plain.rasterizer.cullMode),
|
|
179
|
+
frontFace: AVal.constant(plain.rasterizer.frontFace),
|
|
180
|
+
...(plain.rasterizer.depthBias !== undefined
|
|
181
|
+
? { depthBias: AVal.constant<DepthBiasState | undefined>(plain.rasterizer.depthBias) }
|
|
182
|
+
: {}),
|
|
183
|
+
};
|
|
184
|
+
let blends: aval<HashMap<string, BlendState>> | undefined;
|
|
185
|
+
if (plain.blends !== undefined) {
|
|
186
|
+
let m = HashMap.empty<string, BlendState>();
|
|
187
|
+
for (const [k, v] of plain.blends) m = m.add(k, blendStateFromPlain(v));
|
|
188
|
+
blends = AVal.constant(m);
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
rasterizer: rast,
|
|
192
|
+
...(plain.depth !== undefined
|
|
193
|
+
? {
|
|
194
|
+
depth: {
|
|
195
|
+
write: AVal.constant(plain.depth.write),
|
|
196
|
+
compare: AVal.constant(plain.depth.compare),
|
|
197
|
+
...(plain.depth.clamp !== undefined ? { clamp: AVal.constant(plain.depth.clamp) } : {}),
|
|
198
|
+
},
|
|
199
|
+
}
|
|
200
|
+
: {}),
|
|
201
|
+
...(plain.stencil !== undefined
|
|
202
|
+
? {
|
|
203
|
+
stencil: {
|
|
204
|
+
enabled: AVal.constant(plain.stencil.enabled),
|
|
205
|
+
reference: AVal.constant(plain.stencil.reference),
|
|
206
|
+
readMask: AVal.constant(plain.stencil.readMask),
|
|
207
|
+
writeMask: AVal.constant(plain.stencil.writeMask),
|
|
208
|
+
front: stencilFaceFromPlain(plain.stencil.front),
|
|
209
|
+
back: stencilFaceFromPlain(plain.stencil.back),
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
: {}),
|
|
213
|
+
...(blends !== undefined ? { blends } : {}),
|
|
214
|
+
...(plain.alphaToCoverage !== undefined ? { alphaToCoverage: AVal.constant(plain.alphaToCoverage) } : {}),
|
|
215
|
+
...(plain.blendConstant !== undefined ? { blendConstant: AVal.constant(plain.blendConstant) } : {}),
|
|
216
|
+
};
|
|
217
|
+
},
|
|
218
|
+
};
|
package/src/core/renderObject.ts
CHANGED
|
@@ -38,10 +38,17 @@ export interface RenderObject {
|
|
|
38
38
|
readonly effect: Effect;
|
|
39
39
|
readonly pipelineState: PipelineState;
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
/**
|
|
42
|
+
* name → vertex buffer view; e.g. "position", "normal", "uv".
|
|
43
|
+
*
|
|
44
|
+
* Reactive: the whole map (set of names AND values) is an aval.
|
|
45
|
+
* The buffers AND the set of attribute names are allowed to change
|
|
46
|
+
* over time. The shader's required-input set is fixed at compile;
|
|
47
|
+
* a frame's map must contain at least those names.
|
|
48
|
+
*/
|
|
49
|
+
readonly vertexAttributes: aval<HashMap<string, aval<BufferView>>>;
|
|
50
|
+
/** name → instance buffer view; e.g. "modelMatrix", "instanceColor". Reactive set. */
|
|
51
|
+
readonly instanceAttributes?: aval<HashMap<string, aval<BufferView>>>;
|
|
45
52
|
/** name → uniform value; runtime packs into UBO based on shader layout. */
|
|
46
53
|
readonly uniforms: HashMap<string, aval<unknown>>;
|
|
47
54
|
/** name → texture source (CPU image or pre-built GPUTexture). */
|