@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,57 @@
|
|
|
1
|
+
import { createImageResource } from '@flighthq/image/contract';
|
|
2
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
|
+
// Allocates the rasterization surface on first use. The canvas wrapped as an Image (its `source`) is
|
|
4
|
+
// what lets the shared quad-batch writer treat a canvas-backed shape uniformly with bitmaps and atlases;
|
|
5
|
+
// re-rendering the canvas bumps the resource's version (invalidateImageResource), which the batch's
|
|
6
|
+
// version-aware cache uses to re-upload.
|
|
7
|
+
export function acquireGlShapeRasterSurface(data) {
|
|
8
|
+
const existing = data.surface;
|
|
9
|
+
if (existing !== null)
|
|
10
|
+
return existing;
|
|
11
|
+
const canvas = document.createElement('canvas');
|
|
12
|
+
canvas.width = 1;
|
|
13
|
+
canvas.height = 1;
|
|
14
|
+
const surface = {
|
|
15
|
+
canvas,
|
|
16
|
+
ctx: canvas.getContext('2d'),
|
|
17
|
+
image: createImageResource(canvas),
|
|
18
|
+
};
|
|
19
|
+
data.surface = surface;
|
|
20
|
+
return surface;
|
|
21
|
+
}
|
|
22
|
+
// Shared by all three shape strategies so a node keeps one cache whichever one draws it. Both halves
|
|
23
|
+
// start empty: nothing is allocated until a strategy needs it.
|
|
24
|
+
export function createGlShapeData(_state, _source) {
|
|
25
|
+
return toGlShapeRendererData({
|
|
26
|
+
surface: null,
|
|
27
|
+
lastContentId: -1,
|
|
28
|
+
lastPixelRatio: 0,
|
|
29
|
+
lastW: 0,
|
|
30
|
+
lastH: 0,
|
|
31
|
+
meshVersion: -1,
|
|
32
|
+
meshes: null,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// The batch uploads this shape's canvas-backed resource into the shared cache; free that GPU texture when
|
|
36
|
+
// the shape is torn down so it does not leak past the resource it was keyed on. A shape that only ever
|
|
37
|
+
// tessellated has no surface and so no texture to free.
|
|
38
|
+
export function destroyGlShapeData(state, data) {
|
|
39
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
40
|
+
const surface = getGlShapeData(data).surface;
|
|
41
|
+
if (surface === null)
|
|
42
|
+
return;
|
|
43
|
+
const entry = runtime.textureSourcePremultipliedTextureCache.get(surface.image);
|
|
44
|
+
if (entry !== undefined) {
|
|
45
|
+
state.gl.deleteTexture(entry.texture);
|
|
46
|
+
runtime.textureSourcePremultipliedTextureCache.delete(surface.image);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// RendererData is opaque by design, so the two casts that reinterpret it live here as a named pair
|
|
50
|
+
// rather than being scattered at every callsite.
|
|
51
|
+
export function getGlShapeData(data) {
|
|
52
|
+
return data;
|
|
53
|
+
}
|
|
54
|
+
export function toGlShapeRendererData(data) {
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=glShapeData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShapeData.js","sourceRoot":"","sources":["../src/glShapeData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AASvE,qGAAqG;AACrG,yGAAyG;AACzG,oGAAoG;AACpG,yCAAyC;AACzC,MAAM,UAAU,2BAA2B,CAAC,IAAyB;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAyB;QACpC,MAAM;QACN,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;QAC7B,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC;KACnC,CAAC;IACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qGAAqG;AACrG,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,OAAmB;IAC1E,OAAO,qBAAqB,CAAC;QAC3B,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,CAAC,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAED,0GAA0G;AAC1G,uGAAuG;AACvG,wDAAwD;AACxD,MAAM,UAAU,kBAAkB,CAAC,KAAoB,EAAE,IAAkB;IACzE,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,sCAAsC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,sCAAsC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,iDAAiD;AACjD,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,IAAsC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAyB;IAC7D,OAAO,IAA+B,CAAC;AACzC,CAAC"}
|
package/dist/glShapeMesh.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createGlProgram } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
|
-
import {
|
|
3
|
+
import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
4
4
|
// GPU tessellated solid-fill path for Shape — the replacement for the canvas-raster-to-texture shortcut
|
|
5
5
|
// (which is resolution-bound, so circles go jagged when scaled up). Each fill region is tessellated to a
|
|
6
6
|
// triangle mesh (CPU, cached by content version in webglShape) and drawn here with a flat-color program,
|
|
7
7
|
// transformed by the node world transform in the vertex shader so it stays crisp at any zoom. Gradient/
|
|
8
|
-
//
|
|
9
|
-
// Draws the shape's tessellated fill meshes through `binding`. Flushes the
|
|
8
|
+
// texture styles and pathological stroke centerlines still take the raster path.
|
|
9
|
+
// Draws the shape's tessellated fill meshes through `binding`. Flushes the quad-batch writer first (these go
|
|
10
10
|
// through a separate program), honors the node blend mode and alpha, and is gated by any active clip
|
|
11
11
|
// stencil (GL state set by the clip hooks is left untouched). Records the program as currentProgram so
|
|
12
12
|
// the next content draw re-binds its own program (same hazard the clip path guards against). Uploads
|
|
@@ -17,7 +17,7 @@ export function drawGlShapeMeshBatch(state, renderProxy, meshes, binding, onProg
|
|
|
17
17
|
if (meshes.length === 0)
|
|
18
18
|
return;
|
|
19
19
|
const runtime = getGlRenderStateRuntime(state);
|
|
20
|
-
|
|
20
|
+
flushGlQuadBatchWriter(state);
|
|
21
21
|
const gl = state.gl;
|
|
22
22
|
gl.useProgram(binding.program);
|
|
23
23
|
runtime.currentProgram = binding.program;
|
|
@@ -98,7 +98,7 @@ function compileShapeMeshProgram(gl) {
|
|
|
98
98
|
return createGlProgram(gl, VERTEX_SOURCE, FRAGMENT_SOURCE, 'Shape-mesh');
|
|
99
99
|
}
|
|
100
100
|
// Column-major mat3 = projection · world transform, mapping shape-local points to clip space — identical
|
|
101
|
-
// to the
|
|
101
|
+
// to the quad-batch writer's projection so the mesh aligns with everything else.
|
|
102
102
|
function shapeMeshMatrix(state, renderProxy) {
|
|
103
103
|
const viewport = getGlRenderStateRuntime(state).renderTargetViewport ?? state.canvas;
|
|
104
104
|
const iw = 2 / (viewport.width || 1);
|
package/dist/glShapeMesh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glShapeMesh.js","sourceRoot":"","sources":["../src/glShapeMesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glShapeMesh.js","sourceRoot":"","sources":["../src/glShapeMesh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlRenderState, ShapeRasterizer } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getGlShapeRasterizer(state: GlRenderState): ShapeRasterizer | null;
|
|
3
|
+
export declare function registerGlShapeRasterizer(state: GlRenderState, rasterizer: ShapeRasterizer | null): void;
|
|
4
|
+
//# sourceMappingURL=glShapeRasterizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShapeRasterizer.d.ts","sourceRoot":"","sources":["../src/glShapeRasterizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,GAAG,IAAI,CAEjF;AAKD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAExG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
2
|
+
export function getGlShapeRasterizer(state) {
|
|
3
|
+
return getGlRenderStateRuntime(state).shapeRasterizer ?? null;
|
|
4
|
+
}
|
|
5
|
+
// Installs the fallback that draws fills the mesh path cannot express. Registration is the opt-in: a
|
|
6
|
+
// state without one draws its solid shapes and reports the rest as a registry miss, and nothing here
|
|
7
|
+
// reaches for a rasterizer the caller did not name. Pass null to remove one.
|
|
8
|
+
export function registerGlShapeRasterizer(state, rasterizer) {
|
|
9
|
+
getGlRenderStateRuntime(state).shapeRasterizer = rasterizer;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=glShapeRasterizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glShapeRasterizer.js","sourceRoot":"","sources":["../src/glShapeRasterizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;AAChE,CAAC;AAED,qGAAqG;AACrG,qGAAqG;AACrG,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CAAC,KAAoB,EAAE,UAAkC;IAChG,uBAAuB,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC;AAC9D,CAAC"}
|
package/dist/glSprite.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
1
|
+
import type { GlRenderState, RenderProxy2D, Scene2DRenderer } from '@flighthq/types/contract';
|
|
2
|
+
export declare function drawGlSprite(state: GlRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare const defaultGlSpriteRenderer: Scene2DRenderer;
|
|
3
4
|
//# sourceMappingURL=glSprite.d.ts.map
|
package/dist/glSprite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glSprite.d.ts","sourceRoot":"","sources":["../src/glSprite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glSprite.d.ts","sourceRoot":"","sources":["../src/glSprite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAU,MAAM,0BAA0B,CAAC;AAUtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CA4DnF;AAED,eAAO,MAAM,uBAAuB,EAAE,eAKrC,CAAC"}
|
package/dist/glSprite.js
CHANGED
|
@@ -1,28 +1,68 @@
|
|
|
1
|
+
import { resolveGlMaterialRenderer, resolveGlTexture } from '@flighthq/render-gl/contract';
|
|
1
2
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
import { SCENE2D_WORKING_COLOR_SPACE } from '@flighthq/render/contract';
|
|
4
|
+
import { createSpriteRendererData, isSpriteRendererDirty } from '@flighthq/scene2d/contract';
|
|
5
|
+
import { getTextureHeight, getTextureSourceKind, getTextureWidth, hasTextureSource } from '@flighthq/texture/contract';
|
|
6
|
+
import { BatchFormat, RenderTargetTextureSourceKind } from '@flighthq/types/contract';
|
|
7
|
+
import { ensureGlQuadBatchShader, packGlQuadBatchMaterialInstance, prepareGlQuadBatchWrite, recordGlQuadBatchColorScaleBias, } from './glQuadBatchWriter';
|
|
8
|
+
export function drawGlSprite(state, renderProxy) {
|
|
9
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
10
|
+
const texture = renderProxy.source.data.texture;
|
|
11
|
+
if (texture === null || texture.dimension !== '2d' || !hasTextureSource(texture))
|
|
12
|
+
return;
|
|
13
|
+
const width = Math.max(0, getTextureWidth(texture)) * Math.abs(texture.uvScale.x);
|
|
14
|
+
const height = Math.max(0, getTextureHeight(texture)) * Math.abs(texture.uvScale.y);
|
|
15
|
+
if (width <= 0 || height <= 0)
|
|
16
|
+
return;
|
|
17
|
+
const material = renderProxy.material;
|
|
18
|
+
const materialRenderer = resolveGlMaterialRenderer(state, material);
|
|
19
|
+
if (materialRenderer === null)
|
|
20
|
+
return;
|
|
21
|
+
const glTexture = resolveGlTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE);
|
|
22
|
+
if (glTexture === null)
|
|
23
|
+
return;
|
|
24
|
+
const straightAlpha = runtime.currentTextureStraightAlpha;
|
|
25
|
+
ensureGlQuadBatchShader(state);
|
|
26
|
+
let u0 = texture.uvOffset.x;
|
|
27
|
+
let v0 = texture.uvOffset.y;
|
|
28
|
+
let u1 = u0 + texture.uvScale.x;
|
|
29
|
+
let v1 = v0 + texture.uvScale.y;
|
|
30
|
+
if (texture.flipX)
|
|
31
|
+
[u0, u1] = [u1, u0];
|
|
32
|
+
if (texture.flipY)
|
|
33
|
+
[v0, v1] = [v1, v0];
|
|
34
|
+
// Texture view coordinates are top-origin, while GL render attachments are bottom-origin. Reflect
|
|
35
|
+
// both endpoints so a sub-view keeps selecting the same logical rows (a swap alone only works for
|
|
36
|
+
// the full [0, 1] view).
|
|
37
|
+
if (getTextureSourceKind(texture) === RenderTargetTextureSourceKind) {
|
|
38
|
+
v0 = 1 - v0;
|
|
39
|
+
v1 = 1 - v1;
|
|
25
40
|
}
|
|
26
|
-
|
|
41
|
+
const instanceIndex = runtime.quadBatchWriterCount;
|
|
42
|
+
const base = prepareGlQuadBatchWrite(state, glTexture, straightAlpha, texture.sampler, renderProxy.blendMode, material, materialRenderer, 1);
|
|
43
|
+
const data = runtime.quadBatchWriterInstanceData;
|
|
44
|
+
const transform = renderProxy.transform2D;
|
|
45
|
+
data[base] = transform.a;
|
|
46
|
+
data[base + 1] = transform.b;
|
|
47
|
+
data[base + 2] = transform.c;
|
|
48
|
+
data[base + 3] = transform.d;
|
|
49
|
+
data[base + 4] = transform.tx;
|
|
50
|
+
data[base + 5] = transform.ty;
|
|
51
|
+
data[base + 6] = width;
|
|
52
|
+
data[base + 7] = height;
|
|
53
|
+
data[base + 8] = u0;
|
|
54
|
+
data[base + 9] = v0;
|
|
55
|
+
data[base + 10] = u1;
|
|
56
|
+
data[base + 11] = v1;
|
|
57
|
+
data[base + 12] = renderProxy.alpha;
|
|
58
|
+
packGlQuadBatchMaterialInstance(state, renderProxy.materialData, instanceIndex);
|
|
59
|
+
recordGlQuadBatchColorScaleBias(state, renderProxy.colorMatrix ?? renderProxy.colorScaleBias, instanceIndex);
|
|
60
|
+
runtime.quadBatchWriterCount++;
|
|
27
61
|
}
|
|
62
|
+
export const defaultGlSpriteRenderer = {
|
|
63
|
+
format: BatchFormat.Quad,
|
|
64
|
+
createData: createSpriteRendererData,
|
|
65
|
+
isDirty: isSpriteRendererDirty,
|
|
66
|
+
submit: drawGlSprite,
|
|
67
|
+
};
|
|
28
68
|
//# sourceMappingURL=glSprite.js.map
|
package/dist/glSprite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glSprite.js","sourceRoot":"","sources":["../src/glSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glSprite.js","sourceRoot":"","sources":["../src/glSprite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { GlMaterialRenderer, GlRenderState } from '@flighthq/types/contract';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function registerGlStandardMaterial(state: GlRenderState): void;
|
|
3
3
|
export declare const standardGlMaterialRenderer: GlMaterialRenderer;
|
|
4
4
|
//# sourceMappingURL=glStandardMaterial.d.ts.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { registerGlMaterialRenderer } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { StandardMaterialKind } from '@flighthq/types/contract';
|
|
3
|
-
import { bindGlQuadBatchBaseAttributes, ensureGlQuadBatchShader, setGlQuadBatchWorldAndTexture, useGlQuadBatchProgram, } from './
|
|
3
|
+
import { bindGlQuadBatchBaseAttributes, ensureGlQuadBatchShader, setGlQuadBatchWorldAndTexture, useGlQuadBatchProgram, } from './glQuadBatchWriter';
|
|
4
4
|
// Registers the bundled default material (the plain textured-quad pipeline) under StandardMaterialKind.
|
|
5
5
|
// It is a bundled material like any other — it has no privileged status in the render path; a node
|
|
6
6
|
// with no material renders only if a renderer is registered for StandardMaterialKind. A user can copy
|
|
7
7
|
// this file, swap the shader, and register their own default the same way.
|
|
8
|
-
export function
|
|
8
|
+
export function registerGlStandardMaterial(state) {
|
|
9
9
|
registerGlMaterialRenderer(state, StandardMaterialKind, standardGlMaterialRenderer);
|
|
10
10
|
}
|
|
11
11
|
export const standardGlMaterialRenderer = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glStandardMaterial.js","sourceRoot":"","sources":["../src/glStandardMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"glStandardMaterial.js","sourceRoot":"","sources":["../src/glStandardMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,wGAAwG;AACxG,mGAAmG;AACnG,sGAAsG;AACtG,2EAA2E;AAC3E,MAAM,UAAU,0BAA0B,CAAC,KAAoB;IAC7D,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAuB;IAC5D,kBAAkB,EAAE,CAAC;IACrB,IAAI,CAAC,KAAoB;QACvB,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC9C,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC/G,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
|
package/dist/glTestHelper.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTestHelper.d.ts","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"glTestHelper.d.ts","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAC1F,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,sBAAsB,CAAC;IAC3B,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAUA"}
|
package/dist/glTestHelper.js
CHANGED
|
@@ -11,6 +11,7 @@ export function createGlState(options) {
|
|
|
11
11
|
const state = createGlRenderState(canvas, {
|
|
12
12
|
backgroundColor: 0x00000000,
|
|
13
13
|
imageSmoothingEnabled: options?.allowSmoothing ?? true,
|
|
14
|
+
pixelRatio: options?.pixelRatio,
|
|
14
15
|
});
|
|
15
16
|
return { state, gl: state.gl, canvas };
|
|
16
17
|
}
|
package/dist/glTestHelper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,+EAA+E;AAC/E,2FAA2F;AAC3F,yFAAyF;AACzF,qFAAqF;AACrF,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,+EAA+E;AAC/E,2FAA2F;AAC3F,yFAAyF;AACzF,qFAAqF;AACrF,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,OAA2D;IAKvF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE;QACxC,eAAe,EAAE,UAAU;QAC3B,qBAAqB,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI;QACtD,UAAU,EAAE,OAAO,EAAE,UAAU;KAChC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTextLabel.d.ts","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAIb,aAAa,EAId,MAAM,0BAA0B,CAAC;AAgElC,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"glTextLabel.d.ts","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAIb,aAAa,EAId,MAAM,0BAA0B,CAAC;AAgElC,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CA6GtF;AAED,eAAO,MAAM,0BAA0B,EAAE,eAKxC,CAAC"}
|
package/dist/glTextLabel.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { computeRgbHexString } from '@flighthq/color/contract';
|
|
2
|
-
import { createImageResource,
|
|
2
|
+
import { createImageResource, invalidateImageResource } from '@flighthq/image/contract';
|
|
3
3
|
import { getNodeLocalContentRevision } from '@flighthq/node/contract';
|
|
4
|
-
import { resolveGlMaterialRenderer } from '@flighthq/render-gl/contract';
|
|
4
|
+
import { bindGlImageResourceTexture, resolveGlMaterialRenderer } from '@flighthq/render-gl/contract';
|
|
5
5
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
6
6
|
import { computeTextFormatFontString } from '@flighthq/text/contract';
|
|
7
7
|
import { getTextLabelRuntime } from '@flighthq/text/contract';
|
|
8
8
|
import { computeTextLayout, createTextFormatRange, getTextLayoutResult } from '@flighthq/textlayout/contract';
|
|
9
9
|
import { BatchFormat } from '@flighthq/types/contract';
|
|
10
|
-
import { ensureGlQuadBatchShader,
|
|
10
|
+
import { ensureGlQuadBatchShader, packGlQuadBatchMaterialInstance, prepareGlQuadBatchWrite, recordGlQuadBatchColorScaleBias, } from './glQuadBatchWriter';
|
|
11
11
|
function getGlTextLabelData(data) {
|
|
12
12
|
return data;
|
|
13
13
|
}
|
|
@@ -33,10 +33,10 @@ function createGlTextLabelData(_state, _source) {
|
|
|
33
33
|
function destroyGlTextLabelData(state, data) {
|
|
34
34
|
const runtime = getGlRenderStateRuntime(state);
|
|
35
35
|
const { image } = getGlTextLabelData(data);
|
|
36
|
-
const entry = runtime.
|
|
36
|
+
const entry = runtime.textureSourcePremultipliedTextureCache.get(image);
|
|
37
37
|
if (entry !== undefined) {
|
|
38
38
|
state.gl.deleteTexture(entry.texture);
|
|
39
|
-
runtime.
|
|
39
|
+
runtime.textureSourcePremultipliedTextureCache.delete(image);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
export function drawGlTextLabel(state, renderProxy) {
|
|
@@ -104,16 +104,18 @@ export function drawGlTextLabel(state, renderProxy) {
|
|
|
104
104
|
ctx.fillText(slice, group.offsetX, group.offsetY + group.ascent * 0.815);
|
|
105
105
|
}
|
|
106
106
|
// Re-read canvas dimensions and bump the resource version so the batch's version-aware cache re-uploads.
|
|
107
|
-
|
|
107
|
+
invalidateImageResource(textData.image);
|
|
108
108
|
textData.logW = w;
|
|
109
109
|
textData.logH = h;
|
|
110
110
|
}
|
|
111
111
|
if (textData.logW <= 0 || textData.logH <= 0)
|
|
112
112
|
return;
|
|
113
113
|
ensureGlQuadBatchShader(state);
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const
|
|
114
|
+
const texture = bindGlImageResourceTexture(state, textData.image, null, null, true);
|
|
115
|
+
const straightAlpha = runtime.currentTextureStraightAlpha;
|
|
116
|
+
const startCount = runtime.quadBatchWriterCount;
|
|
117
|
+
const base = prepareGlQuadBatchWrite(state, texture, straightAlpha, null, renderProxy.blendMode, material, materialRenderer, 1);
|
|
118
|
+
const d = runtime.quadBatchWriterInstanceData;
|
|
117
119
|
const t = renderProxy.transform2D;
|
|
118
120
|
d[base] = t.a;
|
|
119
121
|
d[base + 1] = t.b;
|
|
@@ -128,9 +130,9 @@ export function drawGlTextLabel(state, renderProxy) {
|
|
|
128
130
|
d[base + 10] = 1;
|
|
129
131
|
d[base + 11] = 1;
|
|
130
132
|
d[base + 12] = renderProxy.alpha;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
runtime.
|
|
133
|
+
packGlQuadBatchMaterialInstance(state, renderProxy.materialData, startCount);
|
|
134
|
+
recordGlQuadBatchColorScaleBias(state, renderProxy.colorMatrix ?? renderProxy.colorScaleBias, startCount);
|
|
135
|
+
runtime.quadBatchWriterCount++;
|
|
134
136
|
}
|
|
135
137
|
export const defaultGlTextLabelRenderer = {
|
|
136
138
|
format: BatchFormat.Quad,
|
package/dist/glTextLabel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTextLabel.js","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"glTextLabel.js","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"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"}
|
package/dist/glTilemap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTilemap.d.ts","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glTilemap.d.ts","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIV,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAuGlC,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAC"}
|
package/dist/glTilemap.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
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
|
const INSTANCE_FLOATS = 13;
|
|
8
9
|
function submitGlTilemap(state, tilemapNode) {
|
|
9
10
|
const runtime = getGlRenderStateRuntime(state);
|
|
10
11
|
const source = tilemapNode.source;
|
|
11
|
-
const {
|
|
12
|
-
if (
|
|
13
|
-
return;
|
|
14
|
-
const atlas = tileset.atlas;
|
|
15
|
-
if (atlas === null || atlas.image === null || !hasImageResourcePixels(atlas.image))
|
|
12
|
+
const { atlas, columns, rows, tileHeight, tileWidth, tiles } = source.data;
|
|
13
|
+
if (atlas === null || atlas.texture === null || !hasTextureSource(atlas.texture))
|
|
16
14
|
return;
|
|
17
15
|
if (columns === 0 || rows === 0)
|
|
18
16
|
return;
|
|
@@ -21,19 +19,23 @@ function submitGlTilemap(state, tilemapNode) {
|
|
|
21
19
|
const materialRenderer = resolveGlMaterialRenderer(state, material);
|
|
22
20
|
if (materialRenderer === null)
|
|
23
21
|
return;
|
|
22
|
+
const texture = atlas.texture;
|
|
23
|
+
const glTexture = resolveGlTexture(state, texture, true, SCENE2D_WORKING_COLOR_SPACE);
|
|
24
|
+
if (glTexture === null)
|
|
25
|
+
return;
|
|
26
|
+
const straightAlpha = runtime.currentTextureStraightAlpha;
|
|
24
27
|
const nodeMaterialData = tilemapNode.materialData;
|
|
25
28
|
// Per-tile color adjustments, overriding the node-level tint for the tiles that carry one.
|
|
26
29
|
const perTileColorScaleBias = source.data.materialData;
|
|
27
30
|
const nodeColorScaleBias = tilemapNode.colorScaleBias;
|
|
28
31
|
const nodeColorMatrix = tilemapNode.colorMatrix;
|
|
29
|
-
const startCount = runtime.
|
|
30
|
-
const base =
|
|
32
|
+
const startCount = runtime.quadBatchWriterCount;
|
|
33
|
+
const base = prepareGlQuadBatchWrite(state, glTexture, straightAlpha, texture.sampler, tilemapNode.blendMode, material, materialRenderer, columns * rows);
|
|
31
34
|
const regions = atlas.regions;
|
|
32
35
|
const numRegions = regions.length;
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const instanceData = runtime.spriteBatchInstanceData;
|
|
36
|
+
const iw = 1 / Math.max(1, getTextureWidth(texture));
|
|
37
|
+
const ih = 1 / Math.max(1, getTextureHeight(texture));
|
|
38
|
+
const instanceData = runtime.quadBatchWriterInstanceData;
|
|
37
39
|
const pt = tilemapNode.transform2D;
|
|
38
40
|
const pa = pt.a, pb = pt.b, pc = pt.c, pd = pt.d, ptx = pt.tx, pty = pt.ty;
|
|
39
41
|
const alpha = tilemapNode.alpha;
|
|
@@ -62,17 +64,17 @@ function submitGlTilemap(state, tilemapNode) {
|
|
|
62
64
|
instanceData[writeBase + 10] = (region.x + region.width) * iw;
|
|
63
65
|
instanceData[writeBase + 11] = (region.y + region.height) * ih;
|
|
64
66
|
instanceData[writeBase + 12] = alpha;
|
|
65
|
-
|
|
67
|
+
packGlQuadBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
|
|
66
68
|
// Per-tile tint overrides the node-level tint (null → the node's, itself possibly null → untinted).
|
|
67
69
|
const colorScaleBias = perTileColorScaleBias?.[row * columns + col] ??
|
|
68
70
|
nodeColorMatrix ??
|
|
69
71
|
nodeColorScaleBias;
|
|
70
|
-
|
|
72
|
+
recordGlQuadBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
|
|
71
73
|
writeBase += INSTANCE_FLOATS;
|
|
72
74
|
drawCount++;
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
|
-
runtime.
|
|
77
|
+
runtime.quadBatchWriterCount += drawCount;
|
|
76
78
|
}
|
|
77
79
|
export const defaultGlTilemapRenderer = {
|
|
78
80
|
format: BatchFormat.Quad,
|
package/dist/glTilemap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTilemap.js","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"glTilemap.js","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"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"}
|
package/dist/glVelocity.js
CHANGED
|
@@ -266,7 +266,7 @@ export function renderGlVelocity(state, root, field, target) {
|
|
|
266
266
|
gl.disableVertexAttribArray(program.locCorner);
|
|
267
267
|
}
|
|
268
268
|
function ensureGlVelocityProgram(state) {
|
|
269
|
-
let program = _velocityPrograms.get(state);
|
|
269
|
+
let program = _velocityPrograms.get(state.gl);
|
|
270
270
|
if (program !== undefined)
|
|
271
271
|
return program;
|
|
272
272
|
const gl = state.gl;
|
|
@@ -281,7 +281,7 @@ function ensureGlVelocityProgram(state) {
|
|
|
281
281
|
locClipRect: gl.getUniformLocation(glProgram, 'u_clipRect'),
|
|
282
282
|
locVelocity: gl.getUniformLocation(glProgram, 'u_velocity'),
|
|
283
283
|
};
|
|
284
|
-
_velocityPrograms.set(state, program);
|
|
284
|
+
_velocityPrograms.set(state.gl, program);
|
|
285
285
|
return program;
|
|
286
286
|
}
|
|
287
287
|
function visitGlVelocity(ctx, node) {
|