@flighthq/scene2d-gl 0.3.0-next.906.07cea63 → 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/contract.d.ts +9 -6
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +9 -6
- package/dist/contract.js.map +1 -1
- package/dist/enableGlColorAdjustmentGuards.js +2 -2
- package/dist/enableGlColorAdjustmentGuards.js.map +1 -1
- package/dist/enableGlStrokePathTessellation.d.ts +3 -0
- package/dist/enableGlStrokePathTessellation.d.ts.map +1 -0
- package/dist/enableGlStrokePathTessellation.js +8 -0
- package/dist/enableGlStrokePathTessellation.js.map +1 -0
- package/dist/explainGlScene2DCoverage.d.ts +4 -0
- package/dist/explainGlScene2DCoverage.d.ts.map +1 -0
- package/dist/explainGlScene2DCoverage.js +63 -0
- package/dist/explainGlScene2DCoverage.js.map +1 -0
- package/dist/glBitmapText.d.ts.map +1 -1
- package/dist/glBitmapText.js +20 -15
- package/dist/glBitmapText.js.map +1 -1
- package/dist/glCache.d.ts +2 -2
- package/dist/glCache.d.ts.map +1 -1
- package/dist/glCache.js +24 -92
- package/dist/glCache.js.map +1 -1
- package/dist/glClipContours.js +3 -3
- package/dist/glClipContours.js.map +1 -1
- package/dist/glClipRectangle.js +10 -8
- package/dist/glClipRectangle.js.map +1 -1
- package/dist/glColorAdjustmentMaterialFeature.d.ts.map +1 -1
- package/dist/glColorAdjustmentMaterialFeature.js +79 -76
- package/dist/glColorAdjustmentMaterialFeature.js.map +1 -1
- package/dist/glMeshShapeRenderer.d.ts +4 -0
- package/dist/glMeshShapeRenderer.d.ts.map +1 -0
- package/dist/glMeshShapeRenderer.js +89 -0
- package/dist/glMeshShapeRenderer.js.map +1 -0
- package/dist/glNode2D.js +2 -2
- package/dist/glNode2D.js.map +1 -1
- package/dist/glParticleEmitter2D.js +10 -9
- package/dist/glParticleEmitter2D.js.map +1 -1
- package/dist/glQuadBatch.d.ts.map +1 -1
- package/dist/glQuadBatch.js +18 -12
- package/dist/glQuadBatch.js.map +1 -1
- package/dist/{glSpriteBatch.d.ts → glQuadBatchWriter.d.ts} +6 -6
- package/dist/glQuadBatchWriter.d.ts.map +1 -0
- package/dist/{glSpriteBatch.js → glQuadBatchWriter.js} +84 -73
- package/dist/glQuadBatchWriter.js.map +1 -0
- package/dist/glRasterShapeRenderer.d.ts +4 -0
- package/dist/glRasterShapeRenderer.d.ts.map +1 -0
- package/dist/glRasterShapeRenderer.js +103 -0
- package/dist/glRasterShapeRenderer.js.map +1 -0
- package/dist/glRichText.js +2 -2
- package/dist/glRichText.js.map +1 -1
- package/dist/glScale9Shape.d.ts +1 -3
- package/dist/glScale9Shape.d.ts.map +1 -1
- package/dist/glScale9Shape.js +27 -29
- package/dist/glScale9Shape.js.map +1 -1
- package/dist/glShape.d.ts +2 -1
- package/dist/glShape.d.ts.map +1 -1
- package/dist/glShape.js +19 -135
- package/dist/glShape.js.map +1 -1
- package/dist/glShapeData.d.ts +7 -0
- package/dist/glShapeData.d.ts.map +1 -0
- package/dist/glShapeData.js +57 -0
- package/dist/glShapeData.js.map +1 -0
- package/dist/glShapeMesh.js +5 -5
- package/dist/glShapeMesh.js.map +1 -1
- package/dist/glShapeRasterizer.d.ts +4 -0
- package/dist/glShapeRasterizer.d.ts.map +1 -0
- package/dist/glShapeRasterizer.js +11 -0
- package/dist/glShapeRasterizer.js.map +1 -0
- package/dist/glSprite.d.ts +3 -2
- package/dist/glSprite.d.ts.map +1 -1
- package/dist/glSprite.js +64 -24
- package/dist/glSprite.js.map +1 -1
- package/dist/glStandardMaterial.d.ts +1 -1
- package/dist/glStandardMaterial.js +2 -2
- package/dist/glStandardMaterial.js.map +1 -1
- package/dist/glTestHelper.d.ts +1 -0
- package/dist/glTestHelper.d.ts.map +1 -1
- package/dist/glTestHelper.js +1 -0
- package/dist/glTestHelper.js.map +1 -1
- package/dist/glTextLabel.d.ts.map +1 -1
- package/dist/glTextLabel.js +14 -12
- package/dist/glTextLabel.js.map +1 -1
- package/dist/glTilemap.d.ts.map +1 -1
- package/dist/glTilemap.js +19 -17
- package/dist/glTilemap.js.map +1 -1
- package/dist/glVelocity.js +2 -2
- package/dist/glVelocity.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +22 -19
- package/src/enableGlColorAdjustmentGuards.test.ts +4 -4
- package/src/enableGlStrokePathTessellation.test.ts +16 -0
- package/src/explainGlScene2DCoverage.test.ts +99 -0
- package/src/glBitmapText.test.ts +18 -17
- package/src/glCache.test.ts +24 -11
- package/src/glClipContours.test.ts +57 -2
- package/src/glClipRectangle.test.ts +9 -0
- package/src/glColorAdjustmentMaterialFeature.test.ts +74 -71
- package/src/glMeshShapeRenderer.test.ts +112 -0
- package/src/glParticleEmitter2D.test.ts +38 -22
- package/src/glQuadBatch.test.ts +40 -28
- package/src/{glSpriteBatch.test.ts → glQuadBatchWriter.test.ts} +74 -53
- package/src/glRasterShapeRenderer.test.ts +109 -0
- package/src/glScale9Shape.test.ts +0 -13
- package/src/glShape.test.ts +166 -21
- package/src/glShapeData.test.ts +74 -0
- package/src/glShapeMesh.test.ts +1 -1
- package/src/glShapeRasterizer.test.ts +32 -0
- package/src/glSprite.test.ts +71 -62
- package/src/glStandardMaterial.test.ts +3 -3
- package/src/glTextLabel.test.ts +16 -16
- package/src/glTilemap.test.ts +44 -47
- package/src/glVelocity.test.ts +4 -4
- package/dist/glBitmap.d.ts +0 -4
- package/dist/glBitmap.d.ts.map +0 -1
- package/dist/glBitmap.js +0 -93
- package/dist/glBitmap.js.map +0 -1
- package/dist/glRenderTargetNode2D.d.ts +0 -11
- package/dist/glRenderTargetNode2D.d.ts.map +0 -1
- package/dist/glRenderTargetNode2D.js +0 -78
- package/dist/glRenderTargetNode2D.js.map +0 -1
- package/dist/glSpriteBatch.d.ts.map +0 -1
- package/dist/glSpriteBatch.js.map +0 -1
- package/dist/glSpriteRenderer.d.ts +0 -3
- package/dist/glSpriteRenderer.d.ts.map +0 -1
- package/dist/glSpriteRenderer.js +0 -54
- package/dist/glSpriteRenderer.js.map +0 -1
- package/dist/glVideo.d.ts +0 -6
- package/dist/glVideo.d.ts.map +0 -1
- package/dist/glVideo.js +0 -63
- package/dist/glVideo.js.map +0 -1
- package/src/glBitmap.test.ts +0 -136
- package/src/glRenderTargetNode2D.test.ts +0 -328
- package/src/glSpriteRenderer.test.ts +0 -89
- package/src/glVideo.test.ts +0 -99
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { getNodeLocalContentRevision } from '@flighthq/node/contract';
|
|
2
|
+
import { tessellatePath } from '@flighthq/path/contract';
|
|
3
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
|
+
import { getShapeFillRegions, getShapeStrokeOutlineRegions, getShapeStrokeRegions } from '@flighthq/shape/contract';
|
|
5
|
+
import { BatchFormat, RenderRegistry, ShapeKind } from '@flighthq/types/contract';
|
|
6
|
+
import { createGlShapeData, destroyGlShapeData, getGlShapeData } from './glShapeData';
|
|
7
|
+
import { drawGlShapeMeshes } from './glShapeMesh';
|
|
8
|
+
// Draws the shape through the GPU mesh path alone, and reports whether it did. Returns false when any
|
|
9
|
+
// fill or stroke has no tessellated form — a gradient, a texture fill, or a closed stroke the active
|
|
10
|
+
// tessellator rejects — which is the signal drawGlShape uses to fall through to the raster strategy.
|
|
11
|
+
//
|
|
12
|
+
// Resolution-independent: the meshes are cached against the node's content revision and drawn crisp at
|
|
13
|
+
// any zoom, so nothing here allocates a canvas or depends on pixelRatio.
|
|
14
|
+
export function drawGlMeshShape(state, renderProxy) {
|
|
15
|
+
const source = renderProxy.source;
|
|
16
|
+
const { commands } = source.data;
|
|
17
|
+
if (commands.length === 0 || renderProxy.rendererData === null)
|
|
18
|
+
return false;
|
|
19
|
+
// Compact open outlines are the default. Explicitly enabling stroke-path tessellation adds hollow
|
|
20
|
+
// closed rings and pathological-geometry rejection to this state only.
|
|
21
|
+
const strokePathTessellator = getGlRenderStateRuntime(state).strokeTessellator;
|
|
22
|
+
const regions = resolveGlShapeMeshRegions(commands, strokePathTessellator !== null);
|
|
23
|
+
if (regions === null || regions.length === 0)
|
|
24
|
+
return false;
|
|
25
|
+
const version = getNodeLocalContentRevision(source);
|
|
26
|
+
const meshData = getGlShapeData(renderProxy.rendererData);
|
|
27
|
+
if (meshData.meshVersion !== version) {
|
|
28
|
+
const meshes = [];
|
|
29
|
+
let supported = true;
|
|
30
|
+
for (let i = 0; i < regions.length; i++) {
|
|
31
|
+
const region = regions[i];
|
|
32
|
+
const mesh = strokePathTessellator !== null && isShapeStrokeRegion(region)
|
|
33
|
+
? strokePathTessellator(region.path, region.style)
|
|
34
|
+
: tessellatePath(region.path);
|
|
35
|
+
if (mesh === null) {
|
|
36
|
+
supported = false;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
meshes.push({
|
|
40
|
+
vertices: new Float32Array(mesh.vertices),
|
|
41
|
+
indices: new Uint16Array(mesh.indices),
|
|
42
|
+
color: region.color,
|
|
43
|
+
alpha: region.alpha,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
meshData.meshes = supported ? meshes : null;
|
|
47
|
+
meshData.meshVersion = version;
|
|
48
|
+
}
|
|
49
|
+
if (meshData.meshes === null)
|
|
50
|
+
return false;
|
|
51
|
+
drawGlShapeMeshes(state, renderProxy, meshData.meshes);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
// The GPU-only shape strategy: everything is tessellated, nothing is ever rasterized, and this module
|
|
55
|
+
// never references the canvas replay — so registering this renderer instead of defaultGlShapeRenderer
|
|
56
|
+
// leaves @flighthq/scene2d-canvas out of the bundle entirely and needs no shape commands registered.
|
|
57
|
+
//
|
|
58
|
+
// A fill with no tessellated form does not draw. That is the deliberate consequence of choosing this
|
|
59
|
+
// strategy rather than a defect, so it reports the same ShapeRasterizer miss the hybrid reports when no
|
|
60
|
+
// rasterizer is registered: the shape needs raster and this state will not do it.
|
|
61
|
+
export const defaultGlMeshShapeRenderer = {
|
|
62
|
+
format: BatchFormat.Quad,
|
|
63
|
+
createData: createGlShapeData,
|
|
64
|
+
destroyData: destroyGlShapeData,
|
|
65
|
+
submit(state, renderProxy) {
|
|
66
|
+
if (drawGlMeshShape(state, renderProxy))
|
|
67
|
+
return;
|
|
68
|
+
getGlRenderStateRuntime(state).registryMiss?.(RenderRegistry.ShapeRasterizer, ShapeKind);
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
// Resolves every solid fill and solid stroke into one fill-before-stroke source list. The default lane
|
|
72
|
+
// uses compact fillable open-stroke outlines; the opt-in ring lane retains styled centerlines for the
|
|
73
|
+
// heavier direct stroke tessellator.
|
|
74
|
+
function resolveGlShapeMeshRegions(commands, strokePathTessellatorEnabled) {
|
|
75
|
+
const fillRegions = getShapeFillRegions(commands);
|
|
76
|
+
if (fillRegions === null)
|
|
77
|
+
return null;
|
|
78
|
+
const strokeRegions = strokePathTessellatorEnabled
|
|
79
|
+
? getShapeStrokeRegions(commands)
|
|
80
|
+
: getShapeStrokeOutlineRegions(commands);
|
|
81
|
+
if (strokeRegions === null)
|
|
82
|
+
return null;
|
|
83
|
+
const regions = [...fillRegions, ...strokeRegions];
|
|
84
|
+
return regions.length > 0 ? regions : null;
|
|
85
|
+
}
|
|
86
|
+
function isShapeStrokeRegion(region) {
|
|
87
|
+
return 'style' in region;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=glMeshShapeRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glMeshShapeRenderer.js","sourceRoot":"","sources":["../src/glMeshShapeRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/glNode2D.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getRenderProxy2D, isRenderProxyVisible, noopRendererData } from '@flighthq/render/contract';
|
|
3
3
|
import { getNode2DRuntime } from '@flighthq/scene2d/contract';
|
|
4
|
-
import {
|
|
4
|
+
import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
5
5
|
export function drawGlScene2D(_state, _renderProxy) {
|
|
6
6
|
// Plain display objects have no visual geometry of their own.
|
|
7
7
|
}
|
|
@@ -31,7 +31,7 @@ export function renderGlScene2D(state, source) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
flushGlQuadBatchWriter(state);
|
|
35
35
|
clipHooks?.finalize(state);
|
|
36
36
|
}
|
|
37
37
|
export const defaultGlScene2DRenderer = {
|
package/dist/glNode2D.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glNode2D.js","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glNode2D.js","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,YAA2B;IAC9E,8DAA8D;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB,EAAE,MAAc;IAClE,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,CAAC;IAE/C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAEtB,OAAO,WAAW,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,WAAW,CAAW,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,SAAS;QAE/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,aAAa;CACtB,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { hasImageResourcePixels } from '@flighthq/image/contract';
|
|
2
|
-
import { bindGlImageResourceTexture } from '@flighthq/render-gl/contract';
|
|
3
1
|
import { createGlProgram } from '@flighthq/render-gl/contract';
|
|
4
|
-
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
2
|
+
import { getGlRenderStateRuntime, resolveGlTexture } from '@flighthq/render-gl/contract';
|
|
3
|
+
import { SCENE2D_WORKING_COLOR_SPACE } from '@flighthq/render/contract';
|
|
5
4
|
import { noopRendererData } from '@flighthq/render/contract';
|
|
6
|
-
import {
|
|
5
|
+
import { getTextureHeight, getTextureWidth, hasTextureSource } from '@flighthq/texture/contract';
|
|
6
|
+
import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
7
7
|
// Per-instance layout (14 floats = 56 bytes):
|
|
8
8
|
// [0] px float
|
|
9
9
|
// [1] py float
|
|
@@ -117,20 +117,21 @@ export function drawGlParticleEmitter2D(state, renderProxy) {
|
|
|
117
117
|
const runtime = getGlRenderStateRuntime(state);
|
|
118
118
|
const source = renderProxy.source;
|
|
119
119
|
const { atlas, alphas, colors, ids, particleCount, transforms } = source.data;
|
|
120
|
-
if (atlas === null || atlas.
|
|
120
|
+
if (atlas === null || atlas.texture === null || !hasTextureSource(atlas.texture) || particleCount === 0)
|
|
121
121
|
return;
|
|
122
122
|
const shader = ensureParticleShader(state);
|
|
123
123
|
ensureInstanceCapacity(state, particleCount);
|
|
124
124
|
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
125
|
-
|
|
125
|
+
if (resolveGlTexture(state, atlas.texture, true, SCENE2D_WORKING_COLOR_SPACE) === null)
|
|
126
|
+
return;
|
|
126
127
|
const gl = state.gl;
|
|
127
128
|
const regions = atlas.regions;
|
|
128
129
|
const numRegions = regions.length;
|
|
129
130
|
const nodeAlpha = renderProxy.alpha;
|
|
130
131
|
const t = renderProxy.transform2D;
|
|
131
132
|
const viewport = runtime.renderTargetViewport ?? state.canvas;
|
|
132
|
-
const iw = 1 / (atlas.
|
|
133
|
-
const ih = 1 / (atlas.
|
|
133
|
+
const iw = 1 / Math.max(1, getTextureWidth(atlas.texture));
|
|
134
|
+
const ih = 1 / Math.max(1, getTextureHeight(atlas.texture));
|
|
134
135
|
const instanceData = runtime.particleInstanceData;
|
|
135
136
|
// Build per-instance CPU buffer.
|
|
136
137
|
let base = 0;
|
|
@@ -256,7 +257,7 @@ export function drawGlParticleEmitter2D(state, renderProxy) {
|
|
|
256
257
|
export const defaultGlParticleEmitter2DRenderer = {
|
|
257
258
|
createData: noopRendererData,
|
|
258
259
|
submit(state, node) {
|
|
259
|
-
|
|
260
|
+
flushGlQuadBatchWriter(state);
|
|
260
261
|
drawGlParticleEmitter2D(state, node);
|
|
261
262
|
},
|
|
262
263
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glParticleEmitter2D.js","sourceRoot":"","sources":["../src/glParticleEmitter2D.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"glParticleEmitter2D.js","sourceRoot":"","sources":["../src/glParticleEmitter2D.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glQuadBatch.d.ts","sourceRoot":"","sources":["../src/glQuadBatch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glQuadBatch.d.ts","sourceRoot":"","sources":["../src/glQuadBatch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAKV,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAuHlC,eAAO,MAAM,0BAA0B,EAAE,cAIxC,CAAC"}
|
package/dist/glQuadBatch.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveGlMaterialRenderer } from '@flighthq/render-gl/contract';
|
|
1
|
+
import { resolveGlMaterialRenderer, resolveGlTexture } from '@flighthq/render-gl/contract';
|
|
3
2
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
|
+
import { SCENE2D_WORKING_COLOR_SPACE } from '@flighthq/render/contract';
|
|
4
4
|
import { noopRendererData } from '@flighthq/render/contract';
|
|
5
|
+
import { getTextureHeight, getTextureWidth, hasTextureSource } from '@flighthq/texture/contract';
|
|
5
6
|
import { BatchFormat } from '@flighthq/types/contract';
|
|
6
|
-
import { ensureGlQuadBatchShader,
|
|
7
|
+
import { ensureGlQuadBatchShader, packGlQuadBatchMaterialInstance, prepareGlQuadBatchWrite, recordGlQuadBatchColorScaleBias, } from './glQuadBatchWriter';
|
|
7
8
|
// Per-instance layout (13 floats = 52 bytes, world-space transforms + per-instance alpha):
|
|
8
9
|
// [0-3] a, b, c, d — world-space 2D matrix
|
|
9
10
|
// [4-5] tx, ty — world-space translation
|
|
@@ -16,25 +17,30 @@ function submitGlQuadBatch(state, quadBatch) {
|
|
|
16
17
|
const source = quadBatch.source;
|
|
17
18
|
const data = source.data;
|
|
18
19
|
const { atlas, instanceCount, ids, transforms } = data;
|
|
19
|
-
if (atlas === null || atlas.
|
|
20
|
+
if (atlas === null || atlas.texture === null || !hasTextureSource(atlas.texture) || instanceCount === 0)
|
|
20
21
|
return;
|
|
21
22
|
ensureGlQuadBatchShader(state);
|
|
22
23
|
const material = quadBatch.material;
|
|
23
24
|
const materialRenderer = resolveGlMaterialRenderer(state, material);
|
|
24
25
|
if (materialRenderer === null)
|
|
25
26
|
return;
|
|
27
|
+
const texture = atlas.texture;
|
|
28
|
+
const glTexture = resolveGlTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE);
|
|
29
|
+
if (glTexture === null)
|
|
30
|
+
return;
|
|
31
|
+
const straightAlpha = runtime.currentTextureStraightAlpha;
|
|
26
32
|
const nodeMaterialData = quadBatch.materialData;
|
|
27
33
|
// Per-quad color adjustments, overriding the node-level tint for the quads that carry one.
|
|
28
34
|
const perQuadColorScaleBias = data.materialData;
|
|
29
35
|
const nodeColorScaleBias = quadBatch.colorScaleBias;
|
|
30
36
|
const nodeColorMatrix = quadBatch.colorMatrix;
|
|
31
|
-
const startCount = runtime.
|
|
32
|
-
const base =
|
|
37
|
+
const startCount = runtime.quadBatchWriterCount;
|
|
38
|
+
const base = prepareGlQuadBatchWrite(state, glTexture, straightAlpha, texture.sampler, quadBatch.blendMode, material, materialRenderer, instanceCount);
|
|
33
39
|
const regions = atlas.regions;
|
|
34
40
|
const numRegions = regions.length;
|
|
35
|
-
const iw = 1 / (
|
|
36
|
-
const ih = 1 / (
|
|
37
|
-
const instanceData = runtime.
|
|
41
|
+
const iw = 1 / Math.max(1, getTextureWidth(texture));
|
|
42
|
+
const ih = 1 / Math.max(1, getTextureHeight(texture));
|
|
43
|
+
const instanceData = runtime.quadBatchWriterInstanceData;
|
|
38
44
|
const isVector2 = data.transformType === 'vector2';
|
|
39
45
|
const pt = quadBatch.transform2D;
|
|
40
46
|
const pa = pt.a, pb = pt.b, pc = pt.c, pd = pt.d, ptx = pt.tx, pty = pt.ty;
|
|
@@ -76,16 +82,16 @@ function submitGlQuadBatch(state, quadBatch) {
|
|
|
76
82
|
instanceData[writeBase + 10] = (region.x + region.width) * iw;
|
|
77
83
|
instanceData[writeBase + 11] = (region.y + region.height) * ih;
|
|
78
84
|
instanceData[writeBase + 12] = alpha;
|
|
79
|
-
|
|
85
|
+
packGlQuadBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
|
|
80
86
|
// Per-quad tint overrides the node-level tint (null → the node's, itself possibly null → untinted).
|
|
81
87
|
const colorScaleBias = perQuadColorScaleBias?.[i] ??
|
|
82
88
|
nodeColorMatrix ??
|
|
83
89
|
nodeColorScaleBias;
|
|
84
|
-
|
|
90
|
+
recordGlQuadBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
|
|
85
91
|
writeBase += INSTANCE_FLOATS;
|
|
86
92
|
drawCount++;
|
|
87
93
|
}
|
|
88
|
-
runtime.
|
|
94
|
+
runtime.quadBatchWriterCount += drawCount;
|
|
89
95
|
}
|
|
90
96
|
export const defaultGlQuadBatchRenderer = {
|
|
91
97
|
format: BatchFormat.Quad,
|
package/dist/glQuadBatch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glQuadBatch.js","sourceRoot":"","sources":["../src/glQuadBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glQuadBatch.js","sourceRoot":"","sources":["../src/glQuadBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { BlendMode, ColorScaleBias, TintMaterialData, GlMaterialRenderer, GlQuadBatchShader, GlRenderState,
|
|
1
|
+
import type { BlendMode, ColorScaleBias, TintMaterialData, GlMaterialRenderer, GlQuadBatchShader, GlRenderState, Material, MaterialData, SamplerLike } from '@flighthq/types/contract';
|
|
2
2
|
export declare const QUAD_BATCH_VS = "#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec2 a_corner;\nlayout(location = 1) in vec2 a_matAB;\nlayout(location = 2) in vec2 a_matCD;\nlayout(location = 3) in vec2 a_matTXTY;\nlayout(location = 4) in vec2 a_size;\nlayout(location = 5) in vec4 a_uvRect;\nlayout(location = 6) in float a_alpha;\n\nuniform mat3 u_world;\n\nout vec2 v_texCoord;\nout float v_alpha;\n\nvoid main() {\n vec2 local = a_corner * a_size;\n vec2 worldPos = vec2(\n a_matAB.x * local.x + a_matCD.x * local.y + a_matTXTY.x,\n a_matAB.y * local.x + a_matCD.y * local.y + a_matTXTY.y\n );\n vec3 clip = u_world * vec3(worldPos, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_texCoord = mix(a_uvRect.xy, a_uvRect.zw, a_corner);\n v_alpha = a_alpha;\n}";
|
|
3
3
|
export declare function bindGlQuadBatchBaseAttributes(state: GlRenderState, locCorner: number): void;
|
|
4
4
|
export declare function ensureGlQuadBatchShader(state: GlRenderState): GlQuadBatchShader;
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
5
|
+
export declare function flushGlQuadBatchWriter(state: GlRenderState): void;
|
|
6
|
+
export declare function packGlQuadBatchMaterialInstance(state: GlRenderState, materialData: MaterialData | null, instanceIndex: number): void;
|
|
7
|
+
export declare function prepareGlQuadBatchWrite(state: GlRenderState, texture: WebGLTexture, straightAlpha: boolean, sampler: Readonly<SamplerLike> | null, blendMode: BlendMode | null, material: Material | null, materialRenderer: GlMaterialRenderer, maxInstances: number, smoothing?: boolean | null): number;
|
|
8
|
+
export declare function recordGlQuadBatchColorScaleBias(state: GlRenderState, colorScaleBias: ColorScaleBias | TintMaterialData | readonly number[] | null | undefined, instanceIndex: number): void;
|
|
9
9
|
export declare function setGlQuadBatchWorldAndTexture(state: GlRenderState, locWorldMatrix: WebGLUniformLocation, locTexture: WebGLUniformLocation, locStraightTextureAlpha?: WebGLUniformLocation): void;
|
|
10
10
|
export declare function useGlQuadBatchProgram(state: GlRenderState, program: WebGLProgram): void;
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=glQuadBatchWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glQuadBatchWriter.d.ts","sourceRoot":"","sources":["../src/glQuadBatchWriter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAoBlC,eAAO,MAAM,aAAa,kwBA0BxB,CAAC;AAqCH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA4B3F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAc/E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAiEjE;AAMD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,aAAa,EAAE,MAAM,GACpB,IAAI,CAUN;AASD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,OAAO,EACtB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,EACrC,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,gBAAgB,EAAE,kBAAkB,EACpC,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,OAAO,GAAG,IAAW,GAC/B,MAAM,CAgDR;AAOD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EACxF,aAAa,EAAE,MAAM,GACpB,IAAI,CAQN;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,oBAAoB,EACpC,UAAU,EAAE,oBAAoB,EAChC,uBAAuB,CAAC,EAAE,oBAAoB,GAC7C,IAAI,CAqBN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAMvF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyGlSamplerState } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { createGlProgram } from '@flighthq/render-gl/contract';
|
|
3
3
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
4
|
// Base per-instance layout (13 floats = 52 bytes, world-space transforms + per-instance alpha):
|
|
@@ -11,9 +11,9 @@ import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
|
11
11
|
// Attribute locations 0 (a_corner) and 1-6 are a fixed contract; material shaders extend from
|
|
12
12
|
// location 7. The base buffer and a material's own per-instance buffer share only the instance
|
|
13
13
|
// count and divisor convention.
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
// Highest per-instance attribute location any
|
|
14
|
+
const QUAD_BATCH_INSTANCE_FLOATS = 13;
|
|
15
|
+
const QUAD_BATCH_INSTANCE_STRIDE = QUAD_BATCH_INSTANCE_FLOATS * 4;
|
|
16
|
+
// Highest per-instance attribute location any quad-batch writer material or the opt-in color-adjustment
|
|
17
17
|
// fold (a_colorScale/a_colorBias at 7/8) may use. Divisors for locations 1..this are reset after each flush so
|
|
18
18
|
// later non-instanced draws are not corrupted.
|
|
19
19
|
const MAX_INSTANCE_ATTRIB_LOCATION = 8;
|
|
@@ -58,7 +58,7 @@ void main() {
|
|
|
58
58
|
if (color.a <= 0.0) discard;
|
|
59
59
|
fragColor = color;
|
|
60
60
|
}`;
|
|
61
|
-
function
|
|
61
|
+
function compileQuadBatchWriterShader(gl) {
|
|
62
62
|
const program = createGlProgram(gl, QUAD_BATCH_VS, QUAD_BATCH_FS, 'Sprite-batch');
|
|
63
63
|
return {
|
|
64
64
|
program,
|
|
@@ -75,8 +75,8 @@ function compileSpriteBatchShader(gl) {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
// Binds the corner buffer (location `locCorner`, divisor 0) and the base instance attributes
|
|
78
|
-
// (locations 1-6, divisor 1) from the active
|
|
79
|
-
//
|
|
78
|
+
// (locations 1-6, divisor 1) from the active quad-batch writer instance buffer. Shared by every
|
|
79
|
+
// quad-batch writer material renderer regardless of its program, since the base layout is fixed.
|
|
80
80
|
export function bindGlQuadBatchBaseAttributes(state, locCorner) {
|
|
81
81
|
const runtime = getGlRenderStateRuntime(state);
|
|
82
82
|
const gl = state.gl;
|
|
@@ -84,8 +84,8 @@ export function bindGlQuadBatchBaseAttributes(state, locCorner) {
|
|
|
84
84
|
gl.enableVertexAttribArray(locCorner);
|
|
85
85
|
gl.vertexAttribPointer(locCorner, 2, gl.FLOAT, false, 8, 0);
|
|
86
86
|
gl.vertexAttribDivisor(locCorner, 0);
|
|
87
|
-
const stride =
|
|
88
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
87
|
+
const stride = QUAD_BATCH_INSTANCE_STRIDE;
|
|
88
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceBuffer);
|
|
89
89
|
gl.enableVertexAttribArray(1);
|
|
90
90
|
gl.vertexAttribPointer(1, 2, gl.FLOAT, false, stride, 0);
|
|
91
91
|
gl.vertexAttribDivisor(1, 1);
|
|
@@ -110,7 +110,7 @@ export function ensureGlQuadBatchShader(state) {
|
|
|
110
110
|
if (runtime.quadBatchShader)
|
|
111
111
|
return runtime.quadBatchShader;
|
|
112
112
|
const gl = state.gl;
|
|
113
|
-
runtime.quadBatchShader =
|
|
113
|
+
runtime.quadBatchShader = compileQuadBatchWriterShader(gl);
|
|
114
114
|
const cornerData = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
|
|
115
115
|
const cornerBuf = gl.createBuffer();
|
|
116
116
|
gl.bindBuffer(gl.ARRAY_BUFFER, cornerBuf);
|
|
@@ -118,51 +118,58 @@ export function ensureGlQuadBatchShader(state) {
|
|
|
118
118
|
runtime.quadBatchCornerBuffer = cornerBuf;
|
|
119
119
|
return runtime.quadBatchShader;
|
|
120
120
|
}
|
|
121
|
-
export function
|
|
121
|
+
export function flushGlQuadBatchWriter(state) {
|
|
122
122
|
const runtime = getGlRenderStateRuntime(state);
|
|
123
|
-
const count = runtime.
|
|
123
|
+
const count = runtime.quadBatchWriterCount;
|
|
124
124
|
if (count === 0)
|
|
125
125
|
return;
|
|
126
|
-
const texture = runtime.
|
|
127
|
-
const
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
const
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
runtime.
|
|
135
|
-
runtime.
|
|
136
|
-
runtime.
|
|
137
|
-
runtime.
|
|
138
|
-
runtime.
|
|
126
|
+
const texture = runtime.quadBatchWriterTexture;
|
|
127
|
+
const sampler = runtime.quadBatchWriterSampler;
|
|
128
|
+
const straightAlpha = runtime.quadBatchWriterStraightAlpha;
|
|
129
|
+
const blendMode = runtime.quadBatchWriterBlendMode;
|
|
130
|
+
const material = runtime.quadBatchWriterMaterial;
|
|
131
|
+
const renderer = runtime.quadBatchWriterMaterialRenderer;
|
|
132
|
+
const floats = runtime.quadBatchWriterMaterialFloats;
|
|
133
|
+
const smoothing = runtime.quadBatchWriterSmoothing;
|
|
134
|
+
runtime.quadBatchWriterCount = 0;
|
|
135
|
+
runtime.quadBatchWriterTexture = null;
|
|
136
|
+
runtime.quadBatchWriterSampler = null;
|
|
137
|
+
runtime.quadBatchWriterStraightAlpha = false;
|
|
138
|
+
runtime.quadBatchWriterSmoothing = null;
|
|
139
|
+
runtime.quadBatchWriterBlendMode = null;
|
|
140
|
+
runtime.quadBatchWriterMaterial = null;
|
|
141
|
+
runtime.quadBatchWriterMaterialRenderer = null;
|
|
142
|
+
runtime.quadBatchWriterMaterialFloats = 0;
|
|
139
143
|
const gl = state.gl;
|
|
140
|
-
if (runtime.
|
|
141
|
-
runtime.
|
|
142
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
143
|
-
gl.bufferData(gl.ARRAY_BUFFER, runtime.
|
|
144
|
+
if (runtime.quadBatchWriterInstanceBuffer === null) {
|
|
145
|
+
runtime.quadBatchWriterInstanceBuffer = gl.createBuffer();
|
|
146
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceBuffer);
|
|
147
|
+
gl.bufferData(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceData.byteLength, gl.DYNAMIC_DRAW);
|
|
144
148
|
}
|
|
145
149
|
else {
|
|
146
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
150
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceBuffer);
|
|
147
151
|
}
|
|
148
|
-
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.
|
|
152
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.quadBatchWriterInstanceData, 0, count * QUAD_BATCH_INSTANCE_FLOATS);
|
|
149
153
|
state.applyBlendMode?.(state, blendMode);
|
|
150
|
-
|
|
154
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
155
|
+
runtime.currentTexture = texture;
|
|
156
|
+
runtime.currentTextureStraightAlpha = straightAlpha;
|
|
157
|
+
applyGlSamplerState(state, runtime, texture, sampler, smoothing);
|
|
151
158
|
// The color-adjustment fold is opt-in (registerGlColorAdjustmentMaterialFeature): when installed it selects and binds
|
|
152
159
|
// its program for a tinted batch, returning true; when absent, or for an untinted batch, the lean
|
|
153
160
|
// material path runs and no fold code is linked into this module.
|
|
154
161
|
const ctHandled = runtime.glColorAdjustmentMaterialFeature?.flush(state, count) ?? false;
|
|
155
162
|
if (!ctHandled) {
|
|
156
163
|
if (floats > 0) {
|
|
157
|
-
if (runtime.
|
|
158
|
-
runtime.
|
|
159
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
160
|
-
gl.bufferData(gl.ARRAY_BUFFER, runtime.
|
|
164
|
+
if (runtime.quadBatchWriterMaterialBuffer === null) {
|
|
165
|
+
runtime.quadBatchWriterMaterialBuffer = gl.createBuffer();
|
|
166
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterMaterialBuffer);
|
|
167
|
+
gl.bufferData(gl.ARRAY_BUFFER, runtime.quadBatchWriterMaterialData.byteLength, gl.DYNAMIC_DRAW);
|
|
161
168
|
}
|
|
162
169
|
else {
|
|
163
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
170
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterMaterialBuffer);
|
|
164
171
|
}
|
|
165
|
-
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.
|
|
172
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.quadBatchWriterMaterialData, 0, count * floats);
|
|
166
173
|
}
|
|
167
174
|
// Resolved renderer owns program selection, uniforms, and all attribute setup (base + its own).
|
|
168
175
|
renderer.bind(state, material);
|
|
@@ -176,67 +183,71 @@ export function flushGlSpriteBatch(state) {
|
|
|
176
183
|
// Writes one instance's per-instance material floats into the active material buffer at the given
|
|
177
184
|
// instance index, converting the supplied per-instance materialData. No-op for uniform-only
|
|
178
185
|
// materials (no packInstance / floats === 0). Color transform is folded separately by
|
|
179
|
-
//
|
|
180
|
-
export function
|
|
186
|
+
// recordGlQuadBatchColorScaleBias — it is not a material.
|
|
187
|
+
export function packGlQuadBatchMaterialInstance(state, materialData, instanceIndex) {
|
|
181
188
|
const runtime = getGlRenderStateRuntime(state);
|
|
182
|
-
const renderer = runtime.
|
|
189
|
+
const renderer = runtime.quadBatchWriterMaterialRenderer;
|
|
183
190
|
if (renderer === null || renderer.packInstance === undefined)
|
|
184
191
|
return;
|
|
185
|
-
renderer.packInstance(state, materialData, runtime.
|
|
192
|
+
renderer.packInstance(state, materialData, runtime.quadBatchWriterMaterialData, instanceIndex * runtime.quadBatchWriterMaterialFloats);
|
|
186
193
|
}
|
|
187
|
-
// Ensures the
|
|
194
|
+
// Ensures the quad-batch writer can accept up to `maxInstances` more instances for the given texture,
|
|
188
195
|
// blend mode, material, and smoothing. Flushes the current batch when any of the four changes (material
|
|
189
196
|
// is compared by reference) or capacity is exceeded. `smoothing` is a per-bitmap sampling preference
|
|
190
197
|
// (`true`/`false` force LINEAR/NEAREST, `null` uses the global `allowSmoothing` default); it keys the
|
|
191
198
|
// batch because filtering is a per-texture-bind property. The color adjustment is orthogonal — it never
|
|
192
|
-
// keys the batch. Returns the float index in
|
|
193
|
-
// writing base instance data; the caller increments state.
|
|
194
|
-
export function
|
|
199
|
+
// keys the batch. Returns the float index in quadBatchWriterInstanceData where the caller should begin
|
|
200
|
+
// writing base instance data; the caller increments state.quadBatchWriterCount and records per-instance data.
|
|
201
|
+
export function prepareGlQuadBatchWrite(state, texture, straightAlpha, sampler, blendMode, material, materialRenderer, maxInstances, smoothing = null) {
|
|
195
202
|
const runtime = getGlRenderStateRuntime(state);
|
|
196
|
-
runtime.flushPendingDraws =
|
|
197
|
-
if (texture !== runtime.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
203
|
+
runtime.flushPendingDraws = flushGlQuadBatchWriter;
|
|
204
|
+
if (texture !== runtime.quadBatchWriterTexture ||
|
|
205
|
+
straightAlpha !== runtime.quadBatchWriterStraightAlpha ||
|
|
206
|
+
sampler !== runtime.quadBatchWriterSampler ||
|
|
207
|
+
blendMode !== runtime.quadBatchWriterBlendMode ||
|
|
208
|
+
material !== runtime.quadBatchWriterMaterial ||
|
|
209
|
+
smoothing !== runtime.quadBatchWriterSmoothing) {
|
|
210
|
+
flushGlQuadBatchWriter(state);
|
|
202
211
|
}
|
|
203
|
-
runtime.
|
|
204
|
-
runtime.
|
|
205
|
-
runtime.
|
|
206
|
-
runtime.
|
|
207
|
-
runtime.
|
|
212
|
+
runtime.quadBatchWriterTexture = texture;
|
|
213
|
+
runtime.quadBatchWriterSampler = sampler;
|
|
214
|
+
runtime.quadBatchWriterStraightAlpha = straightAlpha;
|
|
215
|
+
runtime.quadBatchWriterSmoothing = smoothing;
|
|
216
|
+
runtime.quadBatchWriterBlendMode = blendMode;
|
|
217
|
+
runtime.quadBatchWriterMaterial = material;
|
|
218
|
+
runtime.quadBatchWriterMaterialRenderer = materialRenderer;
|
|
208
219
|
const floats = materialRenderer.instanceFloatCount;
|
|
209
|
-
runtime.
|
|
210
|
-
const needed = (runtime.
|
|
211
|
-
if (needed > runtime.
|
|
212
|
-
const newSize = Math.max(needed, runtime.
|
|
213
|
-
runtime.
|
|
214
|
-
if (runtime.
|
|
220
|
+
runtime.quadBatchWriterMaterialFloats = floats;
|
|
221
|
+
const needed = (runtime.quadBatchWriterCount + maxInstances) * QUAD_BATCH_INSTANCE_FLOATS;
|
|
222
|
+
if (needed > runtime.quadBatchWriterInstanceData.length) {
|
|
223
|
+
const newSize = Math.max(needed, runtime.quadBatchWriterInstanceData.length * 2);
|
|
224
|
+
runtime.quadBatchWriterInstanceData = new Float32Array(newSize);
|
|
225
|
+
if (runtime.quadBatchWriterInstanceBuffer !== null) {
|
|
215
226
|
const gl = state.gl;
|
|
216
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
227
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceBuffer);
|
|
217
228
|
gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
|
|
218
229
|
}
|
|
219
230
|
}
|
|
220
231
|
if (floats > 0) {
|
|
221
|
-
const materialNeeded = (runtime.
|
|
222
|
-
if (materialNeeded > runtime.
|
|
223
|
-
const newSize = Math.max(materialNeeded, runtime.
|
|
224
|
-
runtime.
|
|
225
|
-
if (runtime.
|
|
232
|
+
const materialNeeded = (runtime.quadBatchWriterCount + maxInstances) * floats;
|
|
233
|
+
if (materialNeeded > runtime.quadBatchWriterMaterialData.length) {
|
|
234
|
+
const newSize = Math.max(materialNeeded, runtime.quadBatchWriterMaterialData.length * 2);
|
|
235
|
+
runtime.quadBatchWriterMaterialData = new Float32Array(newSize);
|
|
236
|
+
if (runtime.quadBatchWriterMaterialBuffer !== null) {
|
|
226
237
|
const gl = state.gl;
|
|
227
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.
|
|
238
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterMaterialBuffer);
|
|
228
239
|
gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
|
|
229
240
|
}
|
|
230
241
|
}
|
|
231
242
|
}
|
|
232
|
-
return runtime.
|
|
243
|
+
return runtime.quadBatchWriterCount * QUAD_BATCH_INSTANCE_FLOATS;
|
|
233
244
|
}
|
|
234
245
|
// Folds instance `instanceIndex`'s effective color adjustment into the active batch through the opt-in
|
|
235
246
|
// color-adjustment fold, without ever splitting the batch. When the capability was not enabled
|
|
236
247
|
// (registerGlColorAdjustmentMaterialFeature), the fold slot is null and the tint is skipped — the batch draws untinted
|
|
237
248
|
// (the sentinel behavior); an installed guard reports the miss. `colorScaleBias` is null for an
|
|
238
249
|
// untinted instance, which is a no-op whether or not the fold is enabled.
|
|
239
|
-
export function
|
|
250
|
+
export function recordGlQuadBatchColorScaleBias(state, colorScaleBias, instanceIndex) {
|
|
240
251
|
const runtime = getGlRenderStateRuntime(state);
|
|
241
252
|
const fold = runtime.glColorAdjustmentMaterialFeature;
|
|
242
253
|
if (fold != null) {
|
|
@@ -275,4 +286,4 @@ export function useGlQuadBatchProgram(state, program) {
|
|
|
275
286
|
runtime.currentProgram = program;
|
|
276
287
|
}
|
|
277
288
|
}
|
|
278
|
-
//# sourceMappingURL=
|
|
289
|
+
//# sourceMappingURL=glQuadBatchWriter.js.map
|