@flighthq/displayobject-wgpu 0.1.0 → 0.2.1-next.410.a23f189
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/enableWgpuColorAdjustmentGuards.d.ts +4 -0
- package/dist/enableWgpuColorAdjustmentGuards.d.ts.map +1 -0
- package/dist/enableWgpuColorAdjustmentGuards.js +21 -0
- package/dist/enableWgpuColorAdjustmentGuards.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/wgpuBitmap.d.ts.map +1 -1
- package/dist/wgpuBitmap.js +7 -5
- package/dist/wgpuBitmap.js.map +1 -1
- package/dist/wgpuCache.d.ts.map +1 -1
- package/dist/wgpuCache.js +11 -6
- package/dist/wgpuCache.js.map +1 -1
- package/dist/wgpuColorAdjustment.d.ts +3 -0
- package/dist/wgpuColorAdjustment.d.ts.map +1 -0
- package/dist/wgpuColorAdjustment.js +198 -0
- package/dist/wgpuColorAdjustment.js.map +1 -0
- package/dist/wgpuParticleEmitter.d.ts.map +1 -1
- package/dist/wgpuParticleEmitter.js +4 -3
- package/dist/wgpuParticleEmitter.js.map +1 -1
- package/dist/wgpuQuadBatch.d.ts.map +1 -1
- package/dist/wgpuQuadBatch.js +11 -6
- package/dist/wgpuQuadBatch.js.map +1 -1
- package/dist/wgpuRichText.js +2 -1
- package/dist/wgpuRichText.js.map +1 -1
- package/dist/wgpuShape.d.ts.map +1 -1
- package/dist/wgpuShape.js +10 -19
- package/dist/wgpuShape.js.map +1 -1
- package/dist/wgpuSpriteBatch.d.ts +3 -2
- package/dist/wgpuSpriteBatch.d.ts.map +1 -1
- package/dist/wgpuSpriteBatch.js +33 -11
- package/dist/wgpuSpriteBatch.js.map +1 -1
- package/dist/wgpuSpriteRenderer.d.ts.map +1 -1
- package/dist/wgpuSpriteRenderer.js +5 -3
- package/dist/wgpuSpriteRenderer.js.map +1 -1
- package/dist/wgpuTextInput.js +1 -1
- package/dist/wgpuTextInput.js.map +1 -1
- package/dist/wgpuTextLabel.d.ts.map +1 -1
- package/dist/wgpuTextLabel.js +12 -20
- package/dist/wgpuTextLabel.js.map +1 -1
- package/dist/wgpuTilemap.d.ts.map +1 -1
- package/dist/wgpuTilemap.js +11 -6
- package/dist/wgpuTilemap.js.map +1 -1
- package/dist/wgpuVelocity.js +5 -5
- package/dist/wgpuVelocity.js.map +1 -1
- package/package.json +23 -15
- package/src/enableWgpuColorAdjustmentGuards.test.ts +82 -0
- package/src/wgpuCache.test.ts +5 -2
- package/src/wgpuColorAdjustment.test.ts +120 -0
- package/src/wgpuParticleEmitter.test.ts +1 -1
- package/src/wgpuShape.test.ts +2 -1
- package/src/wgpuSpriteBatch.test.ts +74 -9
- package/src/wgpuTextLabel.test.ts +12 -1
- package/src/wgpuVelocity.test.ts +2 -1
- package/dist/wgpuColorTransformMaterial.d.ts +0 -5
- package/dist/wgpuColorTransformMaterial.d.ts.map +0 -1
- package/dist/wgpuColorTransformMaterial.js +0 -97
- package/dist/wgpuColorTransformMaterial.js.map +0 -1
- package/dist/wgpuMaterials.d.ts +0 -15
- package/dist/wgpuMaterials.d.ts.map +0 -1
- package/dist/wgpuMaterials.js +0 -34
- package/dist/wgpuMaterials.js.map +0 -1
- package/src/wgpuColorTransformMaterial.test.ts +0 -62
- package/src/wgpuMaterials.test.ts +0 -44
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare function areWgpuColorAdjustmentGuardsEnabled(state: WgpuRenderState): boolean;
|
|
3
|
+
export declare function enableWgpuColorAdjustmentGuards(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=enableWgpuColorAdjustmentGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuColorAdjustmentGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuColorAdjustmentGuards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEnF;AAOD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE5E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log';
|
|
2
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
3
|
+
import { LogLevel } from '@flighthq/types';
|
|
4
|
+
// Returns whether color-adjustment guards are installed on `state` (enableWgpuColorAdjustmentGuards).
|
|
5
|
+
export function areWgpuColorAdjustmentGuardsEnabled(state) {
|
|
6
|
+
return getWgpuRenderStateRuntime(state).wgpuColorAdjustmentGuard != null;
|
|
7
|
+
}
|
|
8
|
+
// Installs the shakeable color-adjustment guard on `state`: when a node carries a color transform but
|
|
9
|
+
// enableWgpuColorAdjustment was never called, recordWgpuSpriteBatchColorTransform reaches this guard
|
|
10
|
+
// through its nullable runtime slot and warns once (the tint is skipped, drawn untinted — the sentinel
|
|
11
|
+
// behavior, never a throw). Not calling this — the production default — costs the batch nothing, since
|
|
12
|
+
// the message and @flighthq/log dependency live only in this separately-imported module. Idempotent.
|
|
13
|
+
export function enableWgpuColorAdjustmentGuards(state) {
|
|
14
|
+
getWgpuRenderStateRuntime(state).wgpuColorAdjustmentGuard = warnWgpuColorAdjustmentNotEnabled;
|
|
15
|
+
}
|
|
16
|
+
function warnWgpuColorAdjustmentNotEnabled() {
|
|
17
|
+
logOnce('displayobject-wgpu:color-adjustment-not-enabled', LogLevel.Warn, {
|
|
18
|
+
message: 'recordWgpuSpriteBatchColorTransform: color transform present but WGPU color adjustment not enabled — call enableWgpuColorAdjustment(state)',
|
|
19
|
+
}, 'displayobject-wgpu');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=enableWgpuColorAdjustmentGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWgpuColorAdjustmentGuards.js","sourceRoot":"","sources":["../src/enableWgpuColorAdjustmentGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,sGAAsG;AACtG,MAAM,UAAU,mCAAmC,CAAC,KAAsB;IACxE,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,wBAAwB,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,sGAAsG;AACtG,qGAAqG;AACrG,uGAAuG;AACvG,uGAAuG;AACvG,qGAAqG;AACrG,MAAM,UAAU,+BAA+B,CAAC,KAAsB;IACpE,yBAAyB,CAAC,KAAK,CAAC,CAAC,wBAAwB,GAAG,iCAAiC,CAAC;AAChG,CAAC;AAED,SAAS,iCAAiC;IACxC,OAAO,CACL,iDAAiD,EACjD,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,4IAA4I;KAC/I,EACD,oBAAoB,CACrB,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
export * from './enableWgpuColorAdjustmentGuards';
|
|
1
2
|
export * from './wgpuBitmap';
|
|
2
3
|
export * from './wgpuCache';
|
|
3
4
|
export * from './wgpuClip';
|
|
4
5
|
export * from './wgpuClipContours';
|
|
5
6
|
export * from './wgpuClipRectangle';
|
|
6
|
-
export * from './
|
|
7
|
+
export * from './wgpuColorAdjustment';
|
|
7
8
|
export * from './wgpuDefaultMaterial';
|
|
8
9
|
export * from './wgpuDisplayObject';
|
|
9
|
-
export * from './wgpuMaterials';
|
|
10
10
|
export * from './wgpuParticleEmitter';
|
|
11
11
|
export * from './wgpuQuadBatch';
|
|
12
12
|
export * from './wgpuRegistration';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,4BAA4B,IAAI,0BAA0B,EAC1D,sBAAsB,IAAI,oBAAoB,EAC9C,8BAA8B,IAAI,4BAA4B,EAC9D,yBAAyB,IAAI,uBAAuB,EACpD,oBAAoB,IAAI,kBAAkB,EAC1C,uBAAuB,IAAI,qBAAqB,EAChD,wBAAwB,IAAI,sBAAsB,EAClD,0BAA0B,IAAI,wBAAwB,EACtD,+BAA+B,IAAI,6BAA6B,EAChE,oBAAoB,IAAI,kBAAkB,EAC1C,sBAAsB,IAAI,oBAAoB,EAC9C,mBAAmB,IAAI,iBAAiB,EACxC,mBAAmB,IAAI,iBAAiB,EACxC,0BAA0B,IAAI,wBAAwB,EACtD,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
export * from './enableWgpuColorAdjustmentGuards';
|
|
1
2
|
export * from './wgpuBitmap';
|
|
2
3
|
export * from './wgpuCache';
|
|
3
4
|
export * from './wgpuClip';
|
|
4
5
|
export * from './wgpuClipContours';
|
|
5
6
|
export * from './wgpuClipRectangle';
|
|
6
|
-
export * from './
|
|
7
|
+
export * from './wgpuColorAdjustment';
|
|
7
8
|
export * from './wgpuDefaultMaterial';
|
|
8
9
|
export * from './wgpuDisplayObject';
|
|
9
|
-
export * from './wgpuMaterials';
|
|
10
10
|
export * from './wgpuParticleEmitter';
|
|
11
11
|
export * from './wgpuQuadBatch';
|
|
12
12
|
export * from './wgpuRegistration';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,4BAA4B,IAAI,0BAA0B,EAC1D,sBAAsB,IAAI,oBAAoB,EAC9C,8BAA8B,IAAI,4BAA4B,EAC9D,yBAAyB,IAAI,uBAAuB,EACpD,oBAAoB,IAAI,kBAAkB,EAC1C,uBAAuB,IAAI,qBAAqB,EAChD,wBAAwB,IAAI,sBAAsB,EAClD,0BAA0B,IAAI,wBAAwB,EACtD,+BAA+B,IAAI,6BAA6B,EAChE,oBAAoB,IAAI,kBAAkB,EAC1C,sBAAsB,IAAI,oBAAoB,EAC9C,mBAAmB,IAAI,iBAAiB,EACxC,mBAAmB,IAAI,iBAAiB,EACxC,0BAA0B,IAAI,wBAAwB,EACtD,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,gCAAgC,CAAC"}
|
package/dist/wgpuBitmap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuBitmap.d.ts","sourceRoot":"","sources":["../src/wgpuBitmap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuBitmap.d.ts","sourceRoot":"","sources":["../src/wgpuBitmap.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAU,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAWrG,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAqEvF;AAED,eAAO,MAAM,yBAAyB,EAAE,qBAIvC,CAAC"}
|
package/dist/wgpuBitmap.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
1
2
|
import { noopRendererData } from '@flighthq/render';
|
|
2
|
-
import {
|
|
3
|
+
import { bindWgpuImageResourceTexture } from '@flighthq/render-wgpu';
|
|
3
4
|
import { resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu';
|
|
4
5
|
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
5
6
|
import { resolveWgpuShader } from '@flighthq/render-wgpu';
|
|
6
7
|
import { BatchFormat } from '@flighthq/types';
|
|
7
|
-
import { ensureWgpuQuadBatchResources, flushWgpuSpriteBatch, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, } from './wgpuSpriteBatch';
|
|
8
|
+
import { ensureWgpuQuadBatchResources, flushWgpuSpriteBatch, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, recordWgpuSpriteBatchColorTransform, } from './wgpuSpriteBatch';
|
|
8
9
|
export function drawWgpuBitmap(state, renderProxy) {
|
|
9
10
|
const runtime = getWgpuRenderStateRuntime(state);
|
|
10
11
|
if (runtime.renderPass === null)
|
|
11
12
|
return;
|
|
12
13
|
const source = renderProxy.source;
|
|
13
14
|
const imageSource = source.data.image;
|
|
14
|
-
if (imageSource === null || imageSource
|
|
15
|
+
if (imageSource === null || !hasImageResourcePixels(imageSource))
|
|
15
16
|
return;
|
|
16
17
|
// Custom per-node shader: flush pending batch to preserve painter's order, then draw immediately.
|
|
17
18
|
const shader = resolveWgpuShader(state, renderProxy);
|
|
18
19
|
if (shader !== null) {
|
|
19
20
|
flushWgpuSpriteBatch(state);
|
|
20
21
|
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
21
|
-
|
|
22
|
+
bindWgpuImageResourceTexture(state, imageSource);
|
|
22
23
|
shader.bind(state, renderProxy);
|
|
23
24
|
return;
|
|
24
25
|
}
|
|
@@ -53,7 +54,7 @@ export function drawWgpuBitmap(state, renderProxy) {
|
|
|
53
54
|
v1 = (sr.y + sr.height) * ih;
|
|
54
55
|
}
|
|
55
56
|
const startCount = runtime.spriteBatchCount;
|
|
56
|
-
const base = prepareWgpuSpriteBatchWrite(state, imageSource
|
|
57
|
+
const base = prepareWgpuSpriteBatchWrite(state, imageSource, renderProxy.blendMode, material, materialRenderer, 1);
|
|
57
58
|
const d = runtime.spriteBatchInstanceData;
|
|
58
59
|
const t = renderProxy.transform2D;
|
|
59
60
|
d[base] = t.a;
|
|
@@ -70,6 +71,7 @@ export function drawWgpuBitmap(state, renderProxy) {
|
|
|
70
71
|
d[base + 11] = v1;
|
|
71
72
|
d[base + 12] = renderProxy.alpha;
|
|
72
73
|
packWgpuSpriteBatchMaterialInstance(state, renderProxy.materialData, startCount);
|
|
74
|
+
recordWgpuSpriteBatchColorTransform(state, renderProxy.colorTransform, startCount);
|
|
73
75
|
runtime.spriteBatchCount++;
|
|
74
76
|
}
|
|
75
77
|
export const defaultWgpuBitmapRenderer = {
|
package/dist/wgpuBitmap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuBitmap.js","sourceRoot":"","sources":["../src/wgpuBitmap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wgpuBitmap.js","sourceRoot":"","sources":["../src/wgpuBitmap.ts"],"names":[],"mappings":"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"}
|
package/dist/wgpuCache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuCache.d.ts","sourceRoot":"","sources":["../src/wgpuCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuCache.d.ts","sourceRoot":"","sources":["../src/wgpuCache.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EAErB,WAAW,EACX,yBAAyB,EAEzB,eAAe,EACf,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,eAAe,GAAG,eAAe,CAqFlF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAElE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,gBAAgB,CAUlB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAE5G;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC5C,OAAO,CAmET;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAOvF;AA0BD,eAAO,MAAM,8BAA8B,EAAE,qBAG5C,CAAC"}
|
package/dist/wgpuCache.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createMatrix, createRectangle, multiplyMatrix } from '@flighthq/geometr
|
|
|
2
2
|
import { computeNodeBoundsRectangle } from '@flighthq/node';
|
|
3
3
|
import { computeDisplayObjectRenderTargetTransform, computeRenderCacheTransform, computeRenderTargetSize, copyAllRenderersFromRenderState, createRenderState, getRenderProxyCache, noopRendererData, prepareDisplayObjectRender, registerRenderCacheRenderer, } from '@flighthq/render';
|
|
4
4
|
import { createWgpuRenderStateRuntime, getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
5
|
-
import {
|
|
5
|
+
import { beginWgpuRenderPass, createWgpuRenderTarget, destroyWgpuRenderTarget, drawWgpuRenderTargetResult, endWgpuRenderPass, resizeWgpuRenderTarget, setWgpuRenderTransform2D, } from '@flighthq/render-wgpu';
|
|
6
6
|
import { EntityRuntimeKey } from '@flighthq/types';
|
|
7
7
|
import { renderWgpuDisplayObject } from './wgpuDisplayObject';
|
|
8
8
|
import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
|
|
@@ -48,7 +48,6 @@ export function createWgpuCacheState(screenState) {
|
|
|
48
48
|
cacheRuntime.nearestSampler = screenRuntime.nearestSampler;
|
|
49
49
|
cacheRuntime.textureCache = screenRuntime.textureCache;
|
|
50
50
|
cacheRuntime.defaultBitmapShader = screenRuntime.defaultBitmapShader;
|
|
51
|
-
cacheRuntime.colorTransformBitmapShader = screenRuntime.colorTransformBitmapShader;
|
|
52
51
|
cacheRuntime.particleInstanceBuffer = screenRuntime.particleInstanceBuffer;
|
|
53
52
|
cacheRuntime.particleInstanceData = screenRuntime.particleInstanceData;
|
|
54
53
|
cacheRuntime.particleInstanceCapacity = screenRuntime.particleInstanceCapacity;
|
|
@@ -81,6 +80,10 @@ export function createWgpuCacheState(screenState) {
|
|
|
81
80
|
cacheRuntime.spriteBatchInstanceData = new Float32Array(0);
|
|
82
81
|
cacheRuntime.spriteBatchMaterialData = new Float32Array(0);
|
|
83
82
|
cacheRuntime.spriteBatchTexture = null;
|
|
83
|
+
// Propagate the opt-in color-adjustment fold + guard so tinted nodes inside a cached subtree fold the
|
|
84
|
+
// same way when baked offscreen. Their per-batch CT data lives on cacheRuntime, lazily grown.
|
|
85
|
+
cacheRuntime.wgpuColorAdjustmentFold = screenRuntime.wgpuColorAdjustmentFold;
|
|
86
|
+
cacheRuntime.wgpuColorAdjustmentGuard = screenRuntime.wgpuColorAdjustmentGuard;
|
|
84
87
|
// The bake state owns its own buffer pool (its flushes record into the same frame, so they must
|
|
85
88
|
// not share slots with the screen's batch either).
|
|
86
89
|
cacheRuntime.spriteBatchBufferPool = [];
|
|
@@ -163,14 +166,16 @@ export function refreshWgpuRenderCache(cacheState, cache, source, options) {
|
|
|
163
166
|
// Reclaim the bake state's buffer pool from the start of this bake; the previous bake's submit
|
|
164
167
|
// has been queued, so its slots are safe to reuse.
|
|
165
168
|
cacheRuntime.spriteBatchBufferCursor = 0;
|
|
166
|
-
|
|
169
|
+
// The pass clears to transparent by default (target.clearColors is empty); the Y-inverted bake
|
|
170
|
+
// transform is a display-object draw concern, set explicitly rather than carried by the pass.
|
|
171
|
+
beginWgpuRenderPass(cacheState, target);
|
|
172
|
+
setWgpuRenderTransform2D(cacheState, _bakeTransform);
|
|
167
173
|
const dirty = prepareDisplayObjectRender(cacheState, source);
|
|
168
174
|
if (dirty || resized) {
|
|
169
|
-
// The render-target pass begins with a 'clear' load op, so the target starts transparent.
|
|
170
175
|
renderWgpuDisplayObject(cacheState, source);
|
|
171
176
|
}
|
|
172
|
-
|
|
173
|
-
//
|
|
177
|
+
endWgpuRenderPass(cacheState);
|
|
178
|
+
// endWgpuRenderPass reopened a fresh canvas pass on the cache state — hand the live encoder
|
|
174
179
|
// and pass back to the screen state so its subsequent draws continue in the same frame.
|
|
175
180
|
screenRuntime.commandEncoder = cacheRuntime.commandEncoder;
|
|
176
181
|
screenRuntime.renderPass = cacheRuntime.renderPass;
|
package/dist/wgpuCache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuCache.js","sourceRoot":"","sources":["../src/wgpuCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,yCAAyC,EACzC,2BAA2B,EAC3B,uBAAuB,EACvB,+BAA+B,EAC/B,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"wgpuCache.js","sourceRoot":"","sources":["../src/wgpuCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuColorAdjustment.d.ts","sourceRoot":"","sources":["../src/wgpuColorAdjustment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAOtE"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { getWgpuQuadBatchPreludeWGSL } from './wgpuSpriteBatch';
|
|
3
|
+
// Enables the opt-in inline color-adjustment fold on a WebGPU render state: the fused-color-matrix
|
|
4
|
+
// stage the sprite/quad batch draws through so a color transform (and, later, other pointwise
|
|
5
|
+
// adjustments) folds into the batch as per-instance storage data at @group(3) — replicated across the
|
|
6
|
+
// batch for a whole-batch tint, or varied per instance — without ever splitting the batch. Until a
|
|
7
|
+
// state calls this, its batch renderer carries none of this module's WGSL (it tree-shakes out) and
|
|
8
|
+
// recordWgpuSpriteBatchColorTransform silently skips every tint. Idempotent; safe to call per state.
|
|
9
|
+
export function enableWgpuColorAdjustment(state) {
|
|
10
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
11
|
+
runtime.wgpuColorAdjustmentFold = wgpuColorAdjustmentFold;
|
|
12
|
+
if (runtime.spriteBatchColorTransformMode === undefined)
|
|
13
|
+
runtime.spriteBatchColorTransformMode = CT_MODE_NONE;
|
|
14
|
+
if (runtime.spriteBatchColorTransformData === undefined) {
|
|
15
|
+
runtime.spriteBatchColorTransformData = new Float32Array(COLOR_TRANSFORM_FLOATS * 256);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Per-instance color-transform data (8 floats = 4 multiplier + 4 offset). Wgpu carries every tint
|
|
19
|
+
// through the per-instance storage buffer, so a whole-batch (uniform) tint is the same value on each
|
|
20
|
+
// instance — there is no separate hardware-uniform path.
|
|
21
|
+
const COLOR_TRANSFORM_FLOATS = 8;
|
|
22
|
+
// Color-adjustment fold modes for the active sprite batch. NONE keeps the base module; UNIFORM defers
|
|
23
|
+
// per-instance fill while one tint covers the whole batch; PER_INSTANCE packs a tint per instance.
|
|
24
|
+
const CT_MODE_NONE = 0;
|
|
25
|
+
const CT_MODE_UNIFORM = 1;
|
|
26
|
+
const CT_MODE_PER_INSTANCE = 2;
|
|
27
|
+
// Folds instance `instanceIndex`'s effective color transform into the active batch. See the fold-mode
|
|
28
|
+
// constants for the promotion rules. `colorTransform` is null for an untinted instance.
|
|
29
|
+
function recordWgpuColorAdjustment(runtime, colorTransform, instanceIndex) {
|
|
30
|
+
if (runtime.spriteBatchColorTransformData === undefined) {
|
|
31
|
+
runtime.spriteBatchColorTransformData = new Float32Array(COLOR_TRANSFORM_FLOATS * 256);
|
|
32
|
+
}
|
|
33
|
+
const mode = runtime.spriteBatchColorTransformMode ?? CT_MODE_NONE;
|
|
34
|
+
const tint = colorTransform ?? null;
|
|
35
|
+
if (mode === CT_MODE_NONE) {
|
|
36
|
+
if (tint === null)
|
|
37
|
+
return;
|
|
38
|
+
if (instanceIndex === 0) {
|
|
39
|
+
runtime.spriteBatchColorTransformMode = CT_MODE_UNIFORM;
|
|
40
|
+
runtime.spriteBatchUniformColorTransform = tint;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
promoteWgpuSpriteBatchColorTransformToPerInstance(runtime, instanceIndex, null);
|
|
44
|
+
writeWgpuColorTransformInstance(runtime, tint, instanceIndex);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (mode === CT_MODE_UNIFORM) {
|
|
48
|
+
const uniform = runtime.spriteBatchUniformColorTransform ?? null;
|
|
49
|
+
if (equalsRecordedColorTransform(tint, uniform))
|
|
50
|
+
return;
|
|
51
|
+
promoteWgpuSpriteBatchColorTransformToPerInstance(runtime, instanceIndex, uniform);
|
|
52
|
+
writeWgpuColorTransformInstance(runtime, tint, instanceIndex);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
writeWgpuColorTransformInstance(runtime, tint, instanceIndex);
|
|
56
|
+
}
|
|
57
|
+
// Resolves the active batch's folded realization: replicates a whole-batch uniform tint across the
|
|
58
|
+
// batch, then returns the per-instance storage data + the folded shader module. Returns null when the
|
|
59
|
+
// batch carried no tint, so flushWgpuSpriteBatch runs the lean material path. Resets the fold mode for
|
|
60
|
+
// the next batch.
|
|
61
|
+
function resolveWgpuColorAdjustmentFlush(state, count) {
|
|
62
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
63
|
+
const ctMode = runtime.spriteBatchColorTransformMode ?? CT_MODE_NONE;
|
|
64
|
+
if (ctMode === CT_MODE_NONE)
|
|
65
|
+
return null;
|
|
66
|
+
if (ctMode === CT_MODE_UNIFORM) {
|
|
67
|
+
fillWgpuSpriteBatchUniformColorTransform(runtime, runtime.spriteBatchUniformColorTransform, count);
|
|
68
|
+
}
|
|
69
|
+
runtime.spriteBatchColorTransformMode = CT_MODE_NONE;
|
|
70
|
+
runtime.spriteBatchUniformColorTransform = null;
|
|
71
|
+
return {
|
|
72
|
+
data: runtime.spriteBatchColorTransformData,
|
|
73
|
+
floats: COLOR_TRANSFORM_FLOATS,
|
|
74
|
+
module: getWgpuSpriteBatchColorTransformModule(state),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Value equality for the whole-batch uniform check: reference-equal short-circuits (every glyph of a
|
|
78
|
+
// bitmap-text node shares one node-level tint), else compares all eight fields.
|
|
79
|
+
function equalsRecordedColorTransform(a, b) {
|
|
80
|
+
if (a === b)
|
|
81
|
+
return true;
|
|
82
|
+
if (a === null || b === null)
|
|
83
|
+
return false;
|
|
84
|
+
return (a.redMultiplier === b.redMultiplier &&
|
|
85
|
+
a.greenMultiplier === b.greenMultiplier &&
|
|
86
|
+
a.blueMultiplier === b.blueMultiplier &&
|
|
87
|
+
a.alphaMultiplier === b.alphaMultiplier &&
|
|
88
|
+
a.redOffset === b.redOffset &&
|
|
89
|
+
a.greenOffset === b.greenOffset &&
|
|
90
|
+
a.blueOffset === b.blueOffset &&
|
|
91
|
+
a.alphaOffset === b.alphaOffset);
|
|
92
|
+
}
|
|
93
|
+
// Grows the color-transform data array to hold `floatsNeeded` floats, preserving already-recorded
|
|
94
|
+
// per-instance data.
|
|
95
|
+
function ensureWgpuColorTransformCapacity(runtime, floatsNeeded) {
|
|
96
|
+
const existing = runtime.spriteBatchColorTransformData;
|
|
97
|
+
if (existing !== undefined && floatsNeeded <= existing.length)
|
|
98
|
+
return;
|
|
99
|
+
const newSize = Math.max(floatsNeeded, (existing?.length ?? 0) * 2, COLOR_TRANSFORM_FLOATS * 256);
|
|
100
|
+
const grown = new Float32Array(newSize);
|
|
101
|
+
if (existing !== undefined)
|
|
102
|
+
grown.set(existing);
|
|
103
|
+
runtime.spriteBatchColorTransformData = grown;
|
|
104
|
+
}
|
|
105
|
+
// Replicates a whole-batch uniform tint across `count` instances at flush time — Wgpu has no separate
|
|
106
|
+
// hardware-uniform tint path, so a uniform is the same value on every instance of the storage buffer.
|
|
107
|
+
function fillWgpuSpriteBatchUniformColorTransform(runtime, colorTransform, count) {
|
|
108
|
+
ensureWgpuColorTransformCapacity(runtime, count * COLOR_TRANSFORM_FLOATS);
|
|
109
|
+
for (let i = 0; i < count; i++)
|
|
110
|
+
writeWgpuColorTransformInstance(runtime, colorTransform, i);
|
|
111
|
+
}
|
|
112
|
+
// The folded per-instance color-transform shader module (cached per device): the base sprite-batch
|
|
113
|
+
// prelude plus a stage that reads 8 per-instance floats from the material storage buffer (@group(3))
|
|
114
|
+
// and applies `color * mult + offset` in unpremultiplied space. Reused verbatim from the former
|
|
115
|
+
// color-transform material so premultiplied-alpha handling is unchanged.
|
|
116
|
+
function getWgpuSpriteBatchColorTransformModule(state) {
|
|
117
|
+
const cached = _colorTransformModules.get(state.device);
|
|
118
|
+
if (cached !== undefined)
|
|
119
|
+
return cached;
|
|
120
|
+
const module = state.device.createShaderModule({
|
|
121
|
+
code: getWgpuQuadBatchPreludeWGSL() + COLOR_TRANSFORM_WGSL,
|
|
122
|
+
});
|
|
123
|
+
_colorTransformModules.set(state.device, module);
|
|
124
|
+
return module;
|
|
125
|
+
}
|
|
126
|
+
// Switches the batch to per-instance mode and back-fills every already-recorded instance
|
|
127
|
+
// [0, instanceCount) with `fill` (a prior uniform value, or null → identity).
|
|
128
|
+
function promoteWgpuSpriteBatchColorTransformToPerInstance(runtime, instanceCount, fill) {
|
|
129
|
+
runtime.spriteBatchColorTransformMode = CT_MODE_PER_INSTANCE;
|
|
130
|
+
for (let i = 0; i < instanceCount; i++)
|
|
131
|
+
writeWgpuColorTransformInstance(runtime, fill, i);
|
|
132
|
+
}
|
|
133
|
+
// Writes one instance's eight color-transform floats (multiplier rgba, then offset rgba normalized by
|
|
134
|
+
// 255) at its slot, growing the array as needed. A null transform writes the identity.
|
|
135
|
+
function writeWgpuColorTransformInstance(runtime, colorTransform, instanceIndex) {
|
|
136
|
+
const offset = instanceIndex * COLOR_TRANSFORM_FLOATS;
|
|
137
|
+
ensureWgpuColorTransformCapacity(runtime, offset + COLOR_TRANSFORM_FLOATS);
|
|
138
|
+
const out = runtime.spriteBatchColorTransformData;
|
|
139
|
+
if (colorTransform !== null) {
|
|
140
|
+
out[offset] = colorTransform.redMultiplier;
|
|
141
|
+
out[offset + 1] = colorTransform.greenMultiplier;
|
|
142
|
+
out[offset + 2] = colorTransform.blueMultiplier;
|
|
143
|
+
out[offset + 3] = colorTransform.alphaMultiplier;
|
|
144
|
+
out[offset + 4] = colorTransform.redOffset / 255;
|
|
145
|
+
out[offset + 5] = colorTransform.greenOffset / 255;
|
|
146
|
+
out[offset + 6] = colorTransform.blueOffset / 255;
|
|
147
|
+
out[offset + 7] = colorTransform.alphaOffset / 255;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
out[offset] = 1;
|
|
151
|
+
out[offset + 1] = 1;
|
|
152
|
+
out[offset + 2] = 1;
|
|
153
|
+
out[offset + 3] = 1;
|
|
154
|
+
out[offset + 4] = 0;
|
|
155
|
+
out[offset + 5] = 0;
|
|
156
|
+
out[offset + 6] = 0;
|
|
157
|
+
out[offset + 7] = 0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const COLOR_TRANSFORM_WGSL = /* wgsl */ `
|
|
161
|
+
@group(3) @binding(0) var<storage, read> ctData : array<f32>;
|
|
162
|
+
|
|
163
|
+
struct VertexOut {
|
|
164
|
+
@builtin(position) position : vec4f,
|
|
165
|
+
@location(0) uv : vec2f,
|
|
166
|
+
@location(1) alpha : f32,
|
|
167
|
+
@location(2) ctMult : vec4f,
|
|
168
|
+
@location(3) ctOff : vec4f,
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@vertex
|
|
172
|
+
fn vs_main(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> VertexOut {
|
|
173
|
+
let bv = quadBaseVertex(vi, ii);
|
|
174
|
+
let b = ii * 8u;
|
|
175
|
+
let ctMult = vec4f(ctData[b + 0u], ctData[b + 1u], ctData[b + 2u], ctData[b + 3u]);
|
|
176
|
+
let ctOff = vec4f(ctData[b + 4u], ctData[b + 5u], ctData[b + 6u], ctData[b + 7u]);
|
|
177
|
+
return VertexOut(bv.position, bv.uv, bv.alpha, ctMult, ctOff);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@fragment
|
|
181
|
+
fn fs_main(in : VertexOut) -> @location(0) vec4f {
|
|
182
|
+
var color = textureSample(tex, smp, in.uv);
|
|
183
|
+
if (color.a <= 0.0) { discard; }
|
|
184
|
+
color = color * clamp(in.alpha, 0.0, 1.0);
|
|
185
|
+
if (color.a > 0.0) {
|
|
186
|
+
color = vec4f(color.rgb / color.a, color.a);
|
|
187
|
+
color = clamp(color * in.ctMult + in.ctOff, vec4f(0.0), vec4f(1.0));
|
|
188
|
+
color = vec4f(color.rgb * color.a, color.a);
|
|
189
|
+
}
|
|
190
|
+
return color;
|
|
191
|
+
}
|
|
192
|
+
`;
|
|
193
|
+
const _colorTransformModules = new WeakMap();
|
|
194
|
+
const wgpuColorAdjustmentFold = {
|
|
195
|
+
record: recordWgpuColorAdjustment,
|
|
196
|
+
resolveFlush: resolveWgpuColorAdjustmentFlush,
|
|
197
|
+
};
|
|
198
|
+
//# sourceMappingURL=wgpuColorAdjustment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuColorAdjustment.js","sourceRoot":"","sources":["../src/wgpuColorAdjustment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuParticleEmitter.d.ts","sourceRoot":"","sources":["../src/wgpuParticleEmitter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuParticleEmitter.d.ts","sourceRoot":"","sources":["../src/wgpuParticleEmitter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAmLvG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAgIhG;AAED,eAAO,MAAM,kCAAkC,EAAE,cAMhD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
1
2
|
import { noopRendererData } from '@flighthq/render';
|
|
2
|
-
import {
|
|
3
|
+
import { bindWgpuImageResourceTexture } from '@flighthq/render-wgpu';
|
|
3
4
|
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
4
5
|
import { flushWgpuSpriteBatch } from './wgpuSpriteBatch';
|
|
5
6
|
// Per-instance layout in the instance buffer (14 floats = 56 bytes):
|
|
@@ -163,12 +164,12 @@ export function drawWgpuParticleEmitter(state, renderProxy) {
|
|
|
163
164
|
return;
|
|
164
165
|
const source = renderProxy.source;
|
|
165
166
|
const { atlas, alphas, colors, ids, particleCount, transforms } = source.data;
|
|
166
|
-
if (atlas === null || atlas.image === null || atlas.image
|
|
167
|
+
if (atlas === null || atlas.image === null || !hasImageResourcePixels(atlas.image) || particleCount === 0)
|
|
167
168
|
return;
|
|
168
169
|
const resources = ensureParticleResources(state);
|
|
169
170
|
ensureParticleInstanceBuffer(state, particleCount);
|
|
170
171
|
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
171
|
-
const textureEntry =
|
|
172
|
+
const textureEntry = bindWgpuImageResourceTexture(state, atlas.image);
|
|
172
173
|
const regions = atlas.regions;
|
|
173
174
|
const numRegions = regions.length;
|
|
174
175
|
const nodeAlpha = renderProxy.alpha;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuParticleEmitter.js","sourceRoot":"","sources":["../src/wgpuParticleEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wgpuParticleEmitter.js","sourceRoot":"","sources":["../src/wgpuParticleEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qEAAqE;AACrE,2CAA2C;AAC3C,+BAA+B;AAC/B,iCAAiC;AACjC,0BAA0B;AAC1B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,eAAe,GAAG,eAAe,GAAG,CAAC,CAAC;AAE5C,yCAAyC;AACzC,MAAM,mBAAmB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DtC,CAAC;AAWF,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAoC,CAAC;AAE3E,SAAS,uBAAuB,CAAC,KAAsB;IACrD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC;IAEnE,MAAM,uBAAuB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC3D,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,cAAc,CAAC,MAAM;gBACjC,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;aACtC;SACF;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;QACjD,gBAAgB,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;KAC5F,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAExE,MAAM,SAAS,GAA0B;QACvC,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,cAAc;QACd,MAAM;QACN,uBAAuB;KACxB,CAAC;IACF,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,0GAA0G;AAC1G,SAAS,mBAAmB,CAAC,KAAsB,EAAE,SAAgC;IACnF,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;IACnF,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACjD,MAAM,EAAE,SAAS,CAAC,cAAc;QAChC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;QAC3D,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE;gBACP;oBACE,MAAM;oBACN,KAAK,EAAE;wBACL,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,KAAK,EAAE;wBAC/E,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,KAAK,EAAE;qBAChF;iBACF;aACF;SACF;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,sBAAsB;YAC9B,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,QAAQ;YACtB,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;YACxF,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;YACvF,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;SACvB;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;KACzC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAsB,EAAE,KAAa;IACzE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,GAAG,eAAe,CAAC;IACvC,IAAI,OAAO,CAAC,wBAAwB,IAAI,MAAM,IAAI,OAAO,CAAC,sBAAsB,KAAK,IAAI;QAAE,OAAO;IAElG,kGAAkG;IAClG,8EAA8E;IAC9E,IAAI,OAAO,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;QAC5C,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QACzD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC;QAC5C,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;KACxD,CAAC,CAAC;IACH,OAAO,CAAC,wBAAwB,GAAG,WAAW,CAAC;IAC/C,OAAO,CAAC,oBAAoB,GAAG,IAAI,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB,EAAE,WAA0B;IACxF,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAyB,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC;QAAE,OAAO;IAElH,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACjD,4BAA4B,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEnD,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAqB,CAAC;IAEnD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,UAAU;YAAE,SAAS;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;YAAE,SAAS;QAEtD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAExC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACvC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACvC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACzD,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1D,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxC,IAAI,IAAI,eAAe,CAAC;QACxB,SAAS,EAAE,CAAC;IACd,CAAC;IAED,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,uBAAuB;IACvB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAuB,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;IAElH,6FAA6F;IAC7F,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC5C,MAAM,SAAS,GAAG,aAAa,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC;IAC9D,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC;IAElC,IAAI,GAAW,EAAE,GAAW,CAAC;IAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,+EAA+E;QAC/E,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1B,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACrB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC5B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC5B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QAChC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACjC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7C,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,yCAAyC;IAC1E,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAE/C,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,MAAM,CAAC,eAAe,CAAC;QAC/C,MAAM,EAAE,SAAS,CAAC,uBAAuB;QACzC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,sBAAuB,EAAE,EAAE,CAAC;KACjF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,UAAW,CAAC;IACjC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAmB;IAChE,UAAU,EAAE,gBAAgB;IAC5B,MAAM,CAAC,KAAsB,EAAE,IAAmB;QAChD,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuQuadBatch.d.ts","sourceRoot":"","sources":["../src/wgpuQuadBatch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuQuadBatch.d.ts","sourceRoot":"","sources":["../src/wgpuQuadBatch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA4C,cAAc,EAAmB,MAAM,iBAAiB,CAAC;AAGjH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EAKzB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,sBAAsB,EAAE,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,CAAC;AAiGlE,eAAO,MAAM,4BAA4B,EAAE,cAI1C,CAAC"}
|
package/dist/wgpuQuadBatch.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
1
2
|
import { noopRendererData } from '@flighthq/render';
|
|
2
3
|
import { resolveWgpuMaterialRenderer } from '@flighthq/render-wgpu';
|
|
3
4
|
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
4
5
|
import { BatchFormat } from '@flighthq/types';
|
|
5
|
-
import { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, SPRITE_INSTANCE_FLOATS, } from './wgpuSpriteBatch';
|
|
6
|
+
import { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline, packWgpuSpriteBatchMaterialInstance, prepareWgpuSpriteBatchWrite, recordWgpuSpriteBatchColorTransform, SPRITE_INSTANCE_FLOATS, } from './wgpuSpriteBatch';
|
|
6
7
|
export { ensureWgpuQuadBatchResources, getWgpuQuadBatchPipeline };
|
|
7
8
|
// Each quad writes the 13 base instance floats; any material packs its own per-instance data into the
|
|
8
9
|
// parallel material buffer.
|
|
@@ -14,16 +15,18 @@ function submitWgpuQuadBatch(state, quadBatch) {
|
|
|
14
15
|
const source = quadBatch.source;
|
|
15
16
|
const data = source.data;
|
|
16
17
|
const { atlas, instanceCount, ids, transforms } = data;
|
|
17
|
-
if (atlas === null || atlas.image === null || atlas.image
|
|
18
|
+
if (atlas === null || atlas.image === null || !hasImageResourcePixels(atlas.image) || instanceCount === 0)
|
|
18
19
|
return;
|
|
19
20
|
const material = quadBatch.material;
|
|
20
21
|
const materialRenderer = resolveWgpuMaterialRenderer(state, material);
|
|
21
22
|
if (materialRenderer === null)
|
|
22
23
|
return;
|
|
23
|
-
const perQuadMaterialData = data.materialData;
|
|
24
24
|
const nodeMaterialData = quadBatch.materialData;
|
|
25
|
+
// Per-quad color transforms, overriding the node-level tint for the quads that carry one.
|
|
26
|
+
const perQuadColorTransform = data.materialData;
|
|
27
|
+
const nodeColorTransform = quadBatch.colorTransform;
|
|
25
28
|
const startCount = runtime.spriteBatchCount;
|
|
26
|
-
const base = prepareWgpuSpriteBatchWrite(state, atlas.image
|
|
29
|
+
const base = prepareWgpuSpriteBatchWrite(state, atlas.image, quadBatch.blendMode, material, materialRenderer, instanceCount);
|
|
27
30
|
const regions = atlas.regions;
|
|
28
31
|
const numRegions = regions.length;
|
|
29
32
|
const iw = 1 / (atlas.image.width || 1);
|
|
@@ -70,8 +73,10 @@ function submitWgpuQuadBatch(state, quadBatch) {
|
|
|
70
73
|
instanceData[writeBase + 10] = (region.x + region.width) * iw;
|
|
71
74
|
instanceData[writeBase + 11] = (region.y + region.height) * ih;
|
|
72
75
|
instanceData[writeBase + 12] = alpha;
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
packWgpuSpriteBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
|
|
77
|
+
// Per-quad tint overrides the node-level tint (null → the node's, itself possibly null → untinted).
|
|
78
|
+
const colorTransform = perQuadColorTransform?.[i] ?? nodeColorTransform;
|
|
79
|
+
recordWgpuSpriteBatchColorTransform(state, colorTransform, startCount + drawCount);
|
|
75
80
|
writeBase += INSTANCE_STRIDE_FLOATS;
|
|
76
81
|
drawCount++;
|
|
77
82
|
}
|