@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.
Files changed (136) hide show
  1. package/dist/contract.d.ts +9 -6
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +9 -6
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableGlColorAdjustmentGuards.js +2 -2
  6. package/dist/enableGlColorAdjustmentGuards.js.map +1 -1
  7. package/dist/enableGlStrokePathTessellation.d.ts +3 -0
  8. package/dist/enableGlStrokePathTessellation.d.ts.map +1 -0
  9. package/dist/enableGlStrokePathTessellation.js +8 -0
  10. package/dist/enableGlStrokePathTessellation.js.map +1 -0
  11. package/dist/explainGlScene2DCoverage.d.ts +4 -0
  12. package/dist/explainGlScene2DCoverage.d.ts.map +1 -0
  13. package/dist/explainGlScene2DCoverage.js +63 -0
  14. package/dist/explainGlScene2DCoverage.js.map +1 -0
  15. package/dist/glBitmapText.d.ts.map +1 -1
  16. package/dist/glBitmapText.js +20 -15
  17. package/dist/glBitmapText.js.map +1 -1
  18. package/dist/glCache.d.ts +2 -2
  19. package/dist/glCache.d.ts.map +1 -1
  20. package/dist/glCache.js +24 -92
  21. package/dist/glCache.js.map +1 -1
  22. package/dist/glClipContours.js +3 -3
  23. package/dist/glClipContours.js.map +1 -1
  24. package/dist/glClipRectangle.js +10 -8
  25. package/dist/glClipRectangle.js.map +1 -1
  26. package/dist/glColorAdjustmentMaterialFeature.d.ts.map +1 -1
  27. package/dist/glColorAdjustmentMaterialFeature.js +79 -76
  28. package/dist/glColorAdjustmentMaterialFeature.js.map +1 -1
  29. package/dist/glMeshShapeRenderer.d.ts +4 -0
  30. package/dist/glMeshShapeRenderer.d.ts.map +1 -0
  31. package/dist/glMeshShapeRenderer.js +89 -0
  32. package/dist/glMeshShapeRenderer.js.map +1 -0
  33. package/dist/glNode2D.js +2 -2
  34. package/dist/glNode2D.js.map +1 -1
  35. package/dist/glParticleEmitter2D.js +10 -9
  36. package/dist/glParticleEmitter2D.js.map +1 -1
  37. package/dist/glQuadBatch.d.ts.map +1 -1
  38. package/dist/glQuadBatch.js +18 -12
  39. package/dist/glQuadBatch.js.map +1 -1
  40. package/dist/{glSpriteBatch.d.ts → glQuadBatchWriter.d.ts} +6 -6
  41. package/dist/glQuadBatchWriter.d.ts.map +1 -0
  42. package/dist/{glSpriteBatch.js → glQuadBatchWriter.js} +84 -73
  43. package/dist/glQuadBatchWriter.js.map +1 -0
  44. package/dist/glRasterShapeRenderer.d.ts +4 -0
  45. package/dist/glRasterShapeRenderer.d.ts.map +1 -0
  46. package/dist/glRasterShapeRenderer.js +103 -0
  47. package/dist/glRasterShapeRenderer.js.map +1 -0
  48. package/dist/glRichText.js +2 -2
  49. package/dist/glRichText.js.map +1 -1
  50. package/dist/glScale9Shape.d.ts +1 -3
  51. package/dist/glScale9Shape.d.ts.map +1 -1
  52. package/dist/glScale9Shape.js +27 -29
  53. package/dist/glScale9Shape.js.map +1 -1
  54. package/dist/glShape.d.ts +2 -1
  55. package/dist/glShape.d.ts.map +1 -1
  56. package/dist/glShape.js +19 -135
  57. package/dist/glShape.js.map +1 -1
  58. package/dist/glShapeData.d.ts +7 -0
  59. package/dist/glShapeData.d.ts.map +1 -0
  60. package/dist/glShapeData.js +57 -0
  61. package/dist/glShapeData.js.map +1 -0
  62. package/dist/glShapeMesh.js +5 -5
  63. package/dist/glShapeMesh.js.map +1 -1
  64. package/dist/glShapeRasterizer.d.ts +4 -0
  65. package/dist/glShapeRasterizer.d.ts.map +1 -0
  66. package/dist/glShapeRasterizer.js +11 -0
  67. package/dist/glShapeRasterizer.js.map +1 -0
  68. package/dist/glSprite.d.ts +3 -2
  69. package/dist/glSprite.d.ts.map +1 -1
  70. package/dist/glSprite.js +64 -24
  71. package/dist/glSprite.js.map +1 -1
  72. package/dist/glStandardMaterial.d.ts +1 -1
  73. package/dist/glStandardMaterial.js +2 -2
  74. package/dist/glStandardMaterial.js.map +1 -1
  75. package/dist/glTestHelper.d.ts +1 -0
  76. package/dist/glTestHelper.d.ts.map +1 -1
  77. package/dist/glTestHelper.js +1 -0
  78. package/dist/glTestHelper.js.map +1 -1
  79. package/dist/glTextLabel.d.ts.map +1 -1
  80. package/dist/glTextLabel.js +14 -12
  81. package/dist/glTextLabel.js.map +1 -1
  82. package/dist/glTilemap.d.ts.map +1 -1
  83. package/dist/glTilemap.js +19 -17
  84. package/dist/glTilemap.js.map +1 -1
  85. package/dist/glVelocity.js +2 -2
  86. package/dist/glVelocity.js.map +1 -1
  87. package/dist/index.d.ts +2 -1
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +2 -1
  90. package/dist/index.js.map +1 -1
  91. package/package.json +22 -19
  92. package/src/enableGlColorAdjustmentGuards.test.ts +4 -4
  93. package/src/enableGlStrokePathTessellation.test.ts +16 -0
  94. package/src/explainGlScene2DCoverage.test.ts +99 -0
  95. package/src/glBitmapText.test.ts +18 -17
  96. package/src/glCache.test.ts +24 -11
  97. package/src/glClipContours.test.ts +57 -2
  98. package/src/glClipRectangle.test.ts +9 -0
  99. package/src/glColorAdjustmentMaterialFeature.test.ts +74 -71
  100. package/src/glMeshShapeRenderer.test.ts +112 -0
  101. package/src/glParticleEmitter2D.test.ts +38 -22
  102. package/src/glQuadBatch.test.ts +40 -28
  103. package/src/{glSpriteBatch.test.ts → glQuadBatchWriter.test.ts} +74 -53
  104. package/src/glRasterShapeRenderer.test.ts +109 -0
  105. package/src/glScale9Shape.test.ts +0 -13
  106. package/src/glShape.test.ts +166 -21
  107. package/src/glShapeData.test.ts +74 -0
  108. package/src/glShapeMesh.test.ts +1 -1
  109. package/src/glShapeRasterizer.test.ts +32 -0
  110. package/src/glSprite.test.ts +71 -62
  111. package/src/glStandardMaterial.test.ts +3 -3
  112. package/src/glTextLabel.test.ts +16 -16
  113. package/src/glTilemap.test.ts +44 -47
  114. package/src/glVelocity.test.ts +4 -4
  115. package/dist/glBitmap.d.ts +0 -4
  116. package/dist/glBitmap.d.ts.map +0 -1
  117. package/dist/glBitmap.js +0 -93
  118. package/dist/glBitmap.js.map +0 -1
  119. package/dist/glRenderTargetNode2D.d.ts +0 -11
  120. package/dist/glRenderTargetNode2D.d.ts.map +0 -1
  121. package/dist/glRenderTargetNode2D.js +0 -78
  122. package/dist/glRenderTargetNode2D.js.map +0 -1
  123. package/dist/glSpriteBatch.d.ts.map +0 -1
  124. package/dist/glSpriteBatch.js.map +0 -1
  125. package/dist/glSpriteRenderer.d.ts +0 -3
  126. package/dist/glSpriteRenderer.d.ts.map +0 -1
  127. package/dist/glSpriteRenderer.js +0 -54
  128. package/dist/glSpriteRenderer.js.map +0 -1
  129. package/dist/glVideo.d.ts +0 -6
  130. package/dist/glVideo.d.ts.map +0 -1
  131. package/dist/glVideo.js +0 -63
  132. package/dist/glVideo.js.map +0 -1
  133. package/src/glBitmap.test.ts +0 -136
  134. package/src/glRenderTargetNode2D.test.ts +0 -328
  135. package/src/glSpriteRenderer.test.ts +0 -89
  136. 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 { flushGlSpriteBatch } from './glSpriteBatch';
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
- flushGlSpriteBatch(state);
34
+ flushGlQuadBatchWriter(state);
35
35
  clipHooks?.finalize(state);
36
36
  }
37
37
  export const defaultGlScene2DRenderer = {
@@ -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,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,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,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1B,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
+ {"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 { flushGlSpriteBatch } from './glSpriteBatch';
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.image === null || !hasImageResourcePixels(atlas.image) || particleCount === 0)
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
- bindGlImageResourceTexture(state, atlas.image, null, null, true);
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.image.width || 1);
133
- const ih = 1 / (atlas.image.height || 1);
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
- flushGlSpriteBatch(state);
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":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,8CAA8C;AAC9C,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,wBAAwB;AACxB,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,eAAe,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,QAAQ;AAErD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BlB,CAAC;AAEH,2EAA2E;AAC3E,uFAAuF;AACvF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;EAgBlB,CAAC;AAEH,SAAS,qBAAqB,CAAC,EAA0B;IACvD,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAClF,OAAO;QACL,OAAO;QACP,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC;QACpD,MAAM,EAAE,CAAC,EAAE,uBAAuB;QAClC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,cAAc,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAE;QAC1D,UAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAE;QACxD,uBAAuB,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,CAAE;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAoB;IAChD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,cAAc,CAAC;IAE1D,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,OAAO,CAAC,cAAc,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAEnD,gDAAgD;IAChD,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,EAAG,CAAC;IACrC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IAC3D,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAEzC,0DAA0D;IAC1D,OAAO,CAAC,sBAAsB,GAAG,EAAE,CAAC,YAAY,EAAG,CAAC;IACpD,OAAO,CAAC,oBAAoB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,OAAO,CAAC,cAAc,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IACjE,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,KAAK,GAAG,eAAe,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM;QAAE,OAAO;IAClE,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,oBAAoB,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACzD,8BAA8B;IAC9B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAuB,CAAC,CAAC;IAChE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAoB,EAAE,WAA0B;IACtF,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,MAA2B,CAAC;IACvD,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,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAE7C,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEjE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,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,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC;IAC9D,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,iCAAiC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,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,kEAAkE;QAClE,0DAA0D;QAC1D,wEAAwE;QACxE,oEAAoE;QACpE,0EAA0E;QAC1E,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,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,CAAC,CAAC;QAC3B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,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,wBAAwB;IACxB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAuB,CAAC,CAAC;IAChE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;IAEnF,oCAAoC;IACpC,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9C,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,iEAAiE;IACjE,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;IACD,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,6BAA6B;IAC7B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,oBAAqB,CAAC,CAAC;IAC9D,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE5C,iCAAiC;IACjC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,sBAAuB,CAAC,CAAC;IAEhE,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAC9E,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzC,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IACnF,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE9C,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACpF,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE9C,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACjF,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE3C,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IAClF,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE5C,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IAChF,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE1C,sCAAsC;IACtC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAChE,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAE3E,sDAAsD;IACtD,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5C,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAmB;IAChE,UAAU,EAAE,gBAAgB;IAC5B,MAAM,CAAC,KAAoB,EAAE,IAAmB;QAC9C,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}
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":"AAIA,OAAO,KAAK,EAKV,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAiHlC,eAAO,MAAM,0BAA0B,EAAE,cAIxC,CAAC"}
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"}
@@ -1,9 +1,10 @@
1
- import { hasImageResourcePixels } from '@flighthq/image/contract';
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, packGlSpriteBatchMaterialInstance, prepareGlSpriteBatchWrite, recordGlSpriteBatchColorScaleBias, } from './glSpriteBatch';
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.image === null || !hasImageResourcePixels(atlas.image) || instanceCount === 0)
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.spriteBatchCount;
32
- const base = prepareGlSpriteBatchWrite(state, atlas.image, quadBatch.blendMode, material, materialRenderer, instanceCount);
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 / (atlas.image.width || 1);
36
- const ih = 1 / (atlas.image.height || 1);
37
- const instanceData = runtime.spriteBatchInstanceData;
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
- packGlSpriteBatchMaterialInstance(state, nodeMaterialData, startCount + drawCount);
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
- recordGlSpriteBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
90
+ recordGlQuadBatchColorScaleBias(state, colorScaleBias, startCount + drawCount);
85
91
  writeBase += INSTANCE_FLOATS;
86
92
  drawCount++;
87
93
  }
88
- runtime.spriteBatchCount += drawCount;
94
+ runtime.quadBatchWriterCount += drawCount;
89
95
  }
90
96
  export const defaultGlQuadBatchRenderer = {
91
97
  format: BatchFormat.Quad,
@@ -1 +1 @@
1
- {"version":3,"file":"glQuadBatch.js","sourceRoot":"","sources":["../src/glQuadBatch.ts"],"names":[],"mappings":"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"}
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, ImageResource, Material, MaterialData } from '@flighthq/types/contract';
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 flushGlSpriteBatch(state: GlRenderState): void;
6
- export declare function packGlSpriteBatchMaterialInstance(state: GlRenderState, materialData: MaterialData | null, instanceIndex: number): void;
7
- export declare function prepareGlSpriteBatchWrite(state: GlRenderState, texture: Readonly<ImageResource>, blendMode: BlendMode | null, material: Material | null, materialRenderer: GlMaterialRenderer, maxInstances: number, smoothing?: boolean | null): number;
8
- export declare function recordGlSpriteBatchColorScaleBias(state: GlRenderState, colorScaleBias: ColorScaleBias | TintMaterialData | readonly number[] | null | undefined, instanceIndex: number): void;
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=glSpriteBatch.d.ts.map
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 { bindGlImageResourceTexture } from '@flighthq/render-gl/contract';
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 SPRITE_INSTANCE_FLOATS = 13;
15
- const SPRITE_INSTANCE_STRIDE = SPRITE_INSTANCE_FLOATS * 4;
16
- // Highest per-instance attribute location any sprite-batch material or the opt-in color-adjustment
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 compileSpriteBatchShader(gl) {
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 sprite-batch instance buffer. Shared by every
79
- // sprite-batch material renderer regardless of its program, since the base layout is fixed.
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 = SPRITE_INSTANCE_STRIDE;
88
- gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
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 = compileSpriteBatchShader(gl);
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 flushGlSpriteBatch(state) {
121
+ export function flushGlQuadBatchWriter(state) {
122
122
  const runtime = getGlRenderStateRuntime(state);
123
- const count = runtime.spriteBatchCount;
123
+ const count = runtime.quadBatchWriterCount;
124
124
  if (count === 0)
125
125
  return;
126
- const texture = runtime.spriteBatchTexture;
127
- const blendMode = runtime.spriteBatchBlendMode;
128
- const material = runtime.spriteBatchMaterial;
129
- const renderer = runtime.spriteBatchMaterialRenderer;
130
- const floats = runtime.spriteBatchMaterialFloats;
131
- const smoothing = runtime.spriteBatchSmoothing;
132
- runtime.spriteBatchCount = 0;
133
- runtime.spriteBatchTexture = null;
134
- runtime.spriteBatchSmoothing = null;
135
- runtime.spriteBatchBlendMode = null;
136
- runtime.spriteBatchMaterial = null;
137
- runtime.spriteBatchMaterialRenderer = null;
138
- runtime.spriteBatchMaterialFloats = 0;
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.spriteBatchInstanceBuffer === null) {
141
- runtime.spriteBatchInstanceBuffer = gl.createBuffer();
142
- gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
143
- gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceData.byteLength, gl.DYNAMIC_DRAW);
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.spriteBatchInstanceBuffer);
150
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterInstanceBuffer);
147
151
  }
148
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchInstanceData, 0, count * SPRITE_INSTANCE_FLOATS);
152
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.quadBatchWriterInstanceData, 0, count * QUAD_BATCH_INSTANCE_FLOATS);
149
153
  state.applyBlendMode?.(state, blendMode);
150
- bindGlImageResourceTexture(state, texture, null, smoothing, true);
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.spriteBatchMaterialBuffer === null) {
158
- runtime.spriteBatchMaterialBuffer = gl.createBuffer();
159
- gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
160
- gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialData.byteLength, gl.DYNAMIC_DRAW);
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.spriteBatchMaterialBuffer);
170
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchWriterMaterialBuffer);
164
171
  }
165
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchMaterialData, 0, count * floats);
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
- // recordGlSpriteBatchColorScaleBias — it is not a material.
180
- export function packGlSpriteBatchMaterialInstance(state, materialData, instanceIndex) {
186
+ // recordGlQuadBatchColorScaleBias — it is not a material.
187
+ export function packGlQuadBatchMaterialInstance(state, materialData, instanceIndex) {
181
188
  const runtime = getGlRenderStateRuntime(state);
182
- const renderer = runtime.spriteBatchMaterialRenderer;
189
+ const renderer = runtime.quadBatchWriterMaterialRenderer;
183
190
  if (renderer === null || renderer.packInstance === undefined)
184
191
  return;
185
- renderer.packInstance(state, materialData, runtime.spriteBatchMaterialData, instanceIndex * runtime.spriteBatchMaterialFloats);
192
+ renderer.packInstance(state, materialData, runtime.quadBatchWriterMaterialData, instanceIndex * runtime.quadBatchWriterMaterialFloats);
186
193
  }
187
- // Ensures the sprite batch can accept up to `maxInstances` more instances for the given texture,
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 spriteBatchInstanceData where the caller should begin
193
- // writing base instance data; the caller increments state.spriteBatchCount and records per-instance data.
194
- export function prepareGlSpriteBatchWrite(state, texture, blendMode, material, materialRenderer, maxInstances, smoothing = null) {
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 = flushGlSpriteBatch;
197
- if (texture !== runtime.spriteBatchTexture ||
198
- blendMode !== runtime.spriteBatchBlendMode ||
199
- material !== runtime.spriteBatchMaterial ||
200
- smoothing !== runtime.spriteBatchSmoothing) {
201
- flushGlSpriteBatch(state);
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.spriteBatchTexture = texture;
204
- runtime.spriteBatchSmoothing = smoothing;
205
- runtime.spriteBatchBlendMode = blendMode;
206
- runtime.spriteBatchMaterial = material;
207
- runtime.spriteBatchMaterialRenderer = materialRenderer;
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.spriteBatchMaterialFloats = floats;
210
- const needed = (runtime.spriteBatchCount + maxInstances) * SPRITE_INSTANCE_FLOATS;
211
- if (needed > runtime.spriteBatchInstanceData.length) {
212
- const newSize = Math.max(needed, runtime.spriteBatchInstanceData.length * 2);
213
- runtime.spriteBatchInstanceData = new Float32Array(newSize);
214
- if (runtime.spriteBatchInstanceBuffer !== null) {
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.spriteBatchInstanceBuffer);
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.spriteBatchCount + maxInstances) * floats;
222
- if (materialNeeded > runtime.spriteBatchMaterialData.length) {
223
- const newSize = Math.max(materialNeeded, runtime.spriteBatchMaterialData.length * 2);
224
- runtime.spriteBatchMaterialData = new Float32Array(newSize);
225
- if (runtime.spriteBatchMaterialBuffer !== null) {
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.spriteBatchMaterialBuffer);
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.spriteBatchCount * SPRITE_INSTANCE_FLOATS;
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 recordGlSpriteBatchColorScaleBias(state, colorScaleBias, instanceIndex) {
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=glSpriteBatch.js.map
289
+ //# sourceMappingURL=glQuadBatchWriter.js.map