@flighthq/render-gl 0.2.1-next.841.373388f → 0.3.0-next.1032.e2b99fc

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 (113) hide show
  1. package/dist/contract.d.ts +25 -0
  2. package/dist/contract.d.ts.map +1 -0
  3. package/dist/contract.js +25 -0
  4. package/dist/contract.js.map +1 -0
  5. package/dist/enableGlRenderTextureGuards.d.ts +4 -0
  6. package/dist/enableGlRenderTextureGuards.d.ts.map +1 -0
  7. package/dist/enableGlRenderTextureGuards.js +34 -0
  8. package/dist/enableGlRenderTextureGuards.js.map +1 -0
  9. package/dist/glBackground.d.ts +1 -1
  10. package/dist/glBackground.d.ts.map +1 -1
  11. package/dist/glBackground.js +2 -2
  12. package/dist/glBackground.js.map +1 -1
  13. package/dist/glCompressedTexture.d.ts +1 -1
  14. package/dist/glCompressedTexture.d.ts.map +1 -1
  15. package/dist/glCompressedTexture.js +8 -13
  16. package/dist/glCompressedTexture.js.map +1 -1
  17. package/dist/glDraw.d.ts +6 -3
  18. package/dist/glDraw.d.ts.map +1 -1
  19. package/dist/glDraw.js +94 -107
  20. package/dist/glDraw.js.map +1 -1
  21. package/dist/glExternalTexture.d.ts +4 -0
  22. package/dist/glExternalTexture.d.ts.map +1 -0
  23. package/dist/glExternalTexture.js +41 -0
  24. package/dist/glExternalTexture.js.map +1 -0
  25. package/dist/glFullscreenPass.d.ts +1 -1
  26. package/dist/glFullscreenPass.d.ts.map +1 -1
  27. package/dist/glFullscreenPass.js +2 -2
  28. package/dist/glFullscreenPass.js.map +1 -1
  29. package/dist/glLinearToSrgbPass.d.ts +1 -1
  30. package/dist/glLinearToSrgbPass.d.ts.map +1 -1
  31. package/dist/glMaterialRegistry.d.ts +1 -1
  32. package/dist/glMaterialRegistry.d.ts.map +1 -1
  33. package/dist/glMaterialRegistry.js +3 -3
  34. package/dist/glMaterialRegistry.js.map +1 -1
  35. package/dist/glPresentRenderTarget.d.ts +1 -1
  36. package/dist/glPresentRenderTarget.d.ts.map +1 -1
  37. package/dist/glReadback.d.ts +1 -1
  38. package/dist/glReadback.d.ts.map +1 -1
  39. package/dist/glRenderPass.d.ts +2 -2
  40. package/dist/glRenderPass.d.ts.map +1 -1
  41. package/dist/glRenderPass.js +136 -22
  42. package/dist/glRenderPass.js.map +1 -1
  43. package/dist/glRenderState.d.ts +1 -1
  44. package/dist/glRenderState.d.ts.map +1 -1
  45. package/dist/glRenderState.js +30 -27
  46. package/dist/glRenderState.js.map +1 -1
  47. package/dist/glRenderStateBracket.d.ts +5 -0
  48. package/dist/glRenderStateBracket.d.ts.map +1 -0
  49. package/dist/glRenderStateBracket.js +111 -0
  50. package/dist/glRenderStateBracket.js.map +1 -0
  51. package/dist/glRenderTarget.d.ts +1 -1
  52. package/dist/glRenderTarget.d.ts.map +1 -1
  53. package/dist/glRenderTarget.js +26 -10
  54. package/dist/glRenderTarget.js.map +1 -1
  55. package/dist/glRenderTargetPool.d.ts +1 -1
  56. package/dist/glRenderTargetPool.d.ts.map +1 -1
  57. package/dist/glRenderTargetPool.js.map +1 -1
  58. package/dist/glRenderTexture.d.ts +13 -0
  59. package/dist/glRenderTexture.d.ts.map +1 -0
  60. package/dist/glRenderTexture.js +109 -0
  61. package/dist/glRenderTexture.js.map +1 -0
  62. package/dist/glShader.d.ts +2 -2
  63. package/dist/glShader.d.ts.map +1 -1
  64. package/dist/glShaderBinding.d.ts +2 -2
  65. package/dist/glShaderBinding.d.ts.map +1 -1
  66. package/dist/glShaderBinding.js +2 -2
  67. package/dist/glShaderBinding.js.map +1 -1
  68. package/dist/glShaderRegistry.d.ts +2 -2
  69. package/dist/glShaderRegistry.d.ts.map +1 -1
  70. package/dist/glSkinPaletteTexture.d.ts +1 -1
  71. package/dist/glSkinPaletteTexture.d.ts.map +1 -1
  72. package/dist/glTestHelper.d.ts +2 -2
  73. package/dist/glTestHelper.d.ts.map +1 -1
  74. package/dist/glTestHelper.js +16 -13
  75. package/dist/glTestHelper.js.map +1 -1
  76. package/dist/glTextureResolver.d.ts +9 -0
  77. package/dist/glTextureResolver.d.ts.map +1 -0
  78. package/dist/glTextureResolver.js +68 -0
  79. package/dist/glTextureResolver.js.map +1 -0
  80. package/dist/glTextureUpload.d.ts +1 -1
  81. package/dist/glTextureUpload.d.ts.map +1 -1
  82. package/dist/glTextureUpload.js +3 -9
  83. package/dist/glTextureUpload.js.map +1 -1
  84. package/dist/glTextureVideoUpload.d.ts +2 -2
  85. package/dist/glTextureVideoUpload.d.ts.map +1 -1
  86. package/dist/glTextureVideoUpload.js +10 -10
  87. package/dist/glTextureVideoUpload.js.map +1 -1
  88. package/dist/index.d.ts +1 -19
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +1 -19
  91. package/dist/index.js.map +1 -1
  92. package/package.json +11 -5
  93. package/src/enableGlRenderTextureGuards.test.ts +22 -0
  94. package/src/glBackground.test.ts +10 -1
  95. package/src/glCompressedTexture.test.ts +7 -17
  96. package/src/glDraw.test.ts +130 -79
  97. package/src/glExternalTexture.test.ts +30 -0
  98. package/src/glFullscreenPass.test.ts +4 -4
  99. package/src/glLinearToSrgbPass.test.ts +1 -1
  100. package/src/glMaterialRegistry.test.ts +4 -4
  101. package/src/glPresentRenderTarget.test.ts +1 -1
  102. package/src/glReadback.test.ts +1 -1
  103. package/src/glRenderPass.test.ts +145 -6
  104. package/src/glRenderState.test.ts +2 -2
  105. package/src/glRenderStateBracket.test.ts +319 -0
  106. package/src/glRenderTarget.test.ts +61 -3
  107. package/src/glRenderTexture.test.ts +252 -0
  108. package/src/glShader.test.ts +25 -25
  109. package/src/glShaderBinding.test.ts +2 -2
  110. package/src/glSkinPaletteTexture.test.ts +1 -1
  111. package/src/glTextureResolver.test.ts +182 -0
  112. package/src/glTextureUpload.test.ts +2 -10
  113. package/src/glTextureVideoUpload.test.ts +15 -15
@@ -0,0 +1,25 @@
1
+ export * from './glBackground';
2
+ export * from './glCompressedTexture';
3
+ export * from './glDraw';
4
+ export * from './glExternalTexture';
5
+ export * from './glElement';
6
+ export * from './enableGlRenderTextureGuards';
7
+ export * from './glFullscreenPass';
8
+ export * from './glLinearToSrgbPass';
9
+ export * from './glMaterialRegistry';
10
+ export * from './glPresentRenderTarget';
11
+ export * from './glProgram';
12
+ export * from './glReadback';
13
+ export * from './glRenderPass';
14
+ export * from './glRenderState';
15
+ export * from './glRenderStateBracket';
16
+ export * from './glRenderTarget';
17
+ export * from './glRenderTexture';
18
+ export * from './glRenderTargetPool';
19
+ export * from './glShader';
20
+ export * from './glShaderBinding';
21
+ export * from './glSkinPaletteTexture';
22
+ export * from './glTextureUpload';
23
+ export * from './glTextureResolver';
24
+ export * from './glTextureVideoUpload';
25
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,25 @@
1
+ export * from './glBackground';
2
+ export * from './glCompressedTexture';
3
+ export * from './glDraw';
4
+ export * from './glExternalTexture';
5
+ export * from './glElement';
6
+ export * from './enableGlRenderTextureGuards';
7
+ export * from './glFullscreenPass';
8
+ export * from './glLinearToSrgbPass';
9
+ export * from './glMaterialRegistry';
10
+ export * from './glPresentRenderTarget';
11
+ export * from './glProgram';
12
+ export * from './glReadback';
13
+ export * from './glRenderPass';
14
+ export * from './glRenderState';
15
+ export * from './glRenderStateBracket';
16
+ export * from './glRenderTarget';
17
+ export * from './glRenderTexture';
18
+ export * from './glRenderTargetPool';
19
+ export * from './glShader';
20
+ export * from './glShaderBinding';
21
+ export * from './glSkinPaletteTexture';
22
+ export * from './glTextureUpload';
23
+ export * from './glTextureResolver';
24
+ export * from './glTextureVideoUpload';
25
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderState } from '@flighthq/types/contract';
2
+ export declare function areGlRenderTextureGuardsEnabled(state: GlRenderState): boolean;
3
+ export declare function enableGlRenderTextureGuards(state: GlRenderState): void;
4
+ //# sourceMappingURL=enableGlRenderTextureGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableGlRenderTextureGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderTextureGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,0BAA0B,CAAC;AAKzG,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAM7E;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGtE"}
@@ -0,0 +1,34 @@
1
+ import { logOnce } from '@flighthq/log/contract';
2
+ import { LogLevel } from '@flighthq/types/contract';
3
+ import { setGlRenderTextureGuard } from './glRenderTexture';
4
+ export function areGlRenderTextureGuardsEnabled(state) {
5
+ let enabled = false;
6
+ setGlRenderTextureGuardProbe(state, () => {
7
+ enabled = true;
8
+ });
9
+ return enabled;
10
+ }
11
+ // Installs diagnostics for the two silent sentinel cases: sampling before the first completed
12
+ // renderInto, and sampling the same attachment while it is bound for writing.
13
+ export function enableGlRenderTextureGuards(state) {
14
+ setGlRenderTextureGuard(state, warnGlRenderTextureUnavailable);
15
+ _guardedContexts.add(state.gl);
16
+ }
17
+ function setGlRenderTextureGuardProbe(state, onEnabled) {
18
+ if (_guardedContexts.has(state.gl))
19
+ onEnabled();
20
+ }
21
+ function warnGlRenderTextureUnavailable(_state, renderTexture, explanation) {
22
+ const writing = explanation.status === 'writing';
23
+ logOnce(`render-gl:render-texture-${explanation.status}`, LogLevel.Warn, {
24
+ height: explanation.height,
25
+ message: writing
26
+ ? 'bindGlRenderTexture: the render Texture is still bound for writing; sampling it would be a read-after-write feedback hazard.'
27
+ : 'bindGlRenderTexture: the render Texture has not completed renderIntoGlRenderTexture; sampling uses the empty sentinel.',
28
+ renderTexture,
29
+ status: explanation.status,
30
+ width: explanation.width,
31
+ }, 'render-gl');
32
+ }
33
+ const _guardedContexts = new WeakSet();
34
+ //# sourceMappingURL=enableGlRenderTextureGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableGlRenderTextureGuards.js","sourceRoot":"","sources":["../src/enableGlRenderTextureGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAAC,KAAoB;IAClE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE;QACvC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8FAA8F;AAC9F,8EAA8E;AAC9E,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC9D,uBAAuB,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IAC/D,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAoB,EAAE,SAAqB;IAC/E,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,SAAS,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,8BAA8B,CACrC,MAAqB,EACrB,aAAsC,EACtC,WAAiD;IAEjD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC;IACjD,OAAO,CACL,4BAA4B,WAAW,CAAC,MAAM,EAAE,EAChD,QAAQ,CAAC,IAAI,EACb;QACE,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,8HAA8H;YAChI,CAAC,CAAC,wHAAwH;QAC5H,aAAa;QACb,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,KAAK,EAAE,WAAW,CAAC,KAAK;KACzB,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAA0B,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { GlRenderState } from '@flighthq/types';
1
+ import type { GlRenderState } from '@flighthq/types/contract';
2
2
  export declare function renderGlBackground(state: GlRenderState): void;
3
3
  //# sourceMappingURL=glBackground.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBackground.d.ts","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAa7D"}
1
+ {"version":3,"file":"glBackground.d.ts","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAkB7D"}
@@ -2,8 +2,8 @@ import { getGlRenderStateRuntime } from './glRenderState';
2
2
  export function renderGlBackground(state) {
3
3
  const runtime = getGlRenderStateRuntime(state);
4
4
  const gl = state.gl;
5
- const viewport = runtime.renderTargetViewport ?? state.canvas;
6
- gl.viewport(0, 0, viewport.width, viewport.height);
5
+ const viewport = runtime.renderTargetViewport;
6
+ gl.viewport(viewport?.x ?? 0, viewport?.y ?? 0, viewport?.width ?? state.canvas.width, viewport?.height ?? state.canvas.height);
7
7
  const rgba = state.backgroundColorRgba;
8
8
  if (rgba.length >= 4 && rgba[3] > 0) {
9
9
  gl.clearColor(rgba[0], rgba[1], rgba[2], rgba[3]);
@@ -1 +1 @@
1
- {"version":3,"file":"glBackground.js","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC;IAC9D,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"glBackground.js","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAC9C,EAAE,CAAC,QAAQ,CACT,QAAQ,EAAE,CAAC,IAAI,CAAC,EAChB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAChB,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EACrC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CACxC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAClC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { GlCompressedTextureDecoder, GlCompressedTextureSupport, GlRenderState, TextureContainer, TextureContainerFormat } from '@flighthq/types';
1
+ import type { GlCompressedTextureDecoder, GlCompressedTextureSupport, GlRenderState, TextureContainer, TextureContainerFormat } from '@flighthq/types/contract';
2
2
  export declare function detectGlCompressedTextureSupport(gl: WebGL2RenderingContext): GlCompressedTextureSupport;
3
3
  export declare function getGlCompressedTextureFormat(gl: WebGL2RenderingContext, format: TextureContainerFormat): number;
4
4
  export declare function hasGlCompressedTextureFormat(support: Readonly<GlCompressedTextureSupport>, format: TextureContainerFormat): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"glCompressedTexture.d.ts","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EAEb,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAmBzB,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,sBAAsB,GAAG,0BAA0B,CAWvG;AAQD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAqG/G;AAKD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EAC7C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAuCT;AAOD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,0BAA0B,GAAG,IAAI,GACxC,IAAI,CAEN;AASD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7F;AAmBD,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,sBAAsB,EAC1B,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACrC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,MAAM,CAAC,EAAE,0BAA0B,GAClC,OAAO,CA8DT"}
1
+ {"version":3,"file":"glCompressedTexture.d.ts","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,sBAAsB,GAAG,0BAA0B,CAWvG;AAQD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAqG/G;AAKD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EAC7C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAuCT;AAOD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,0BAA0B,GAAG,IAAI,GACxC,IAAI,CAEN;AAOD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7F;AAmBD,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,sBAAsB,EAC1B,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACrC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,MAAM,CAAC,EAAE,0BAA0B,GAClC,OAAO,CA8DT"}
@@ -183,13 +183,11 @@ export function registerGlCompressedTextureDecoder(state, decode) {
183
183
  }
184
184
  // Installs the block-compressed upload seam on a render state, opting the ~40-format
185
185
  // uploadGlCompressedTextureContainer path into the bundle only for a state that actually draws a
186
- // compressed texture. The 2D display draw path (uploadGlBoundImageResource) reads the installed handler off
187
- // the runtime and skips a compressed-only resource when none is registered, so a plain element/data
188
- // bitmap never carries the compression enum table. Opt-in and last-write-wins; pass null to clear a
189
- // previously installed uploader. The installed handler bridges a compressed ImageResource to
190
- // uploadGlCompressedTextureContainer, threading through any registered RGBA decode fallback.
186
+ // CompressedImage. The 2D display draw path reads the installed handler off the runtime and skips the
187
+ // backing when none is registered, so ImageResource/Bitmap bundles do not carry the compression enum
188
+ // table. Opt-in and last-write-wins; pass null to clear a previously installed uploader.
191
189
  export function registerGlCompressedTextureUpload(state, uploader) {
192
- getGlRenderStateRuntime(state).compressedTextureUpload = uploader === null ? null : uploadGlCompressedImageResource;
190
+ getGlRenderStateRuntime(state).compressedTextureUpload = uploader === null ? null : uploadGlCompressedImage;
193
191
  }
194
192
  // Uploads every stored sub-image of a compressed container to the texture the caller has bound. Takes
195
193
  // the GPU-native `compressedTexImage2D`/`compressedTexImage3D` path when the device supports the
@@ -272,15 +270,12 @@ function isSupportedGlCompressedTextureContainerShape(container) {
272
270
  return true;
273
271
  return container.faces === 6 && container.layers === 1;
274
272
  }
275
- // The installed GlCompressedTextureUploader: bridges a compressed ImageResource to the container upload,
276
- // threading through any registered RGBA decode fallback. Returns false when the resource carries no
277
- // compressed payload so the display path leaves the texture as-is rather than uploading garbage.
278
- function uploadGlCompressedImageResource(gl, image, decode) {
273
+ // The installed GlCompressedTextureUploader bridges a CompressedImage to the container upload while
274
+ // threading through any registered RGBA decode fallback.
275
+ function uploadGlCompressedImage(gl, image, decode) {
279
276
  const compressed = image.compressed;
280
- if (compressed === null)
281
- return false;
282
277
  const container = compressed.container;
283
- // bindGlImageResourceTexture installs this bridge while TEXTURE_2D is bound. Cube, array, and volume
278
+ // bindGlCompressedImageTexture calls this bridge while TEXTURE_2D is bound. Cube, array, and volume
284
279
  // resources require their own entity/binder families; forwarding one here would address an unbound
285
280
  // target even though the low-level container uploader supports caller-bound cube and 2D-array targets.
286
281
  if (container.depth !== 1 || container.faces !== 1 || container.layers !== 1)
@@ -1 +1 @@
1
- {"version":3,"file":"glCompressedTexture.js","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glCompressedTexture.js","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,sGAAsG;AACtG,sFAAsF;AACtF,gFAAgF;AAChF,oGAAoG;AACpG,+FAA+F;AAC/F,8EAA8E;AAC9E,EAAE;AACF,gGAAgG;AAChG,qGAAqG;AACrG,sGAAsG;AACtG,iGAAiG;AAEjG,0FAA0F;AAC1F,2GAA2G;AAC3G,mGAAmG;AACnG,MAAM,UAAU,gCAAgC,CAAC,EAA0B;IACzE,OAAO;QACL,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,KAAK,IAAI;QAC/D,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAC,KAAK,IAAI;QAC9D,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAC,KAAK,IAAI;QAC7D,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,KAAK,IAAI;QACjE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAC,KAAK,IAAI;QAC9D,IAAI,EACF,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,KAAK,IAAI;YACzD,EAAE,CAAC,YAAY,CAAC,oCAAoC,CAAC,KAAK,IAAI;KACjE,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,iGAAiG;AACjG,sGAAsG;AACtG,uGAAuG;AACvG,mFAAmF;AACnF,6CAA6C;AAC7C,MAAM,UAAU,4BAA4B,CAAC,EAA0B,EAAE,MAA8B;IACrG,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAkC,CAAC;IAC/F,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,oCAAoC,CAAkC,CAAC;IACxG,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAkC,CAAC;IAC9F,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAkC,CAAC;IAC9F,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAkC,CAAC;IAC7F,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAkC,CAAC;IAC/F,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAkC,CAAC;IACjG,MAAM,WAAW,GAAG,CAAC,GAA8C,EAAE,GAAW,EAAU,EAAE,CAC1F,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;QACtE,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;QACtE,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;QACtE,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;QACvD,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;QAC9D,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC7D,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;QACpE,KAAK,YAAY;YACf,OAAO,WAAW,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;QACrE,KAAK,YAAY;YACf,OAAO,WAAW,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC;QACnE,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC7D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAClD,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;QACvD,KAAK,cAAc;YACjB,OAAO,WAAW,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;QAC9D,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;QACtE,KAAK,eAAe;YAClB,OAAO,WAAW,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;QACvE,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAChD,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;QACvD,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QACjD,KAAK,cAAc;YACjB,OAAO,WAAW,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QACxD,KAAK,cAAc;YACjB,OAAO,WAAW,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QAC/D,KAAK,eAAe;YAClB,OAAO,WAAW,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC;QAChE,KAAK,cAAc;YACjB,OAAO,WAAW,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QAC/D,KAAK,eAAe;YAClB,OAAO,WAAW,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC;QAChE,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC3D,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC7D;YACE,iFAAiF;YACjF,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,oGAAoG;AACpG,sGAAsG;AACtG,MAAM,UAAU,4BAA4B,CAC1C,OAA6C,EAC7C,MAA8B;IAE9B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,KAAK,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc,CAAC;QACpB,KAAK,WAAW,CAAC;QACjB,KAAK,eAAe,CAAC;QACrB,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe,CAAC;QACrB,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe;YAClB,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB;YACE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;AACH,CAAC;AAED,wGAAwG;AACxG,uGAAuG;AACvG,wGAAwG;AACxG,sGAAsG;AACtG,6EAA6E;AAC7E,MAAM,UAAU,kCAAkC,CAChD,KAAoB,EACpB,MAAyC;IAEzC,uBAAuB,CAAC,KAAK,CAAC,CAAC,wBAAwB,GAAG,MAAM,CAAC;AACnE,CAAC;AAED,qFAAqF;AACrF,iGAAiG;AACjG,sGAAsG;AACtG,qGAAqG;AACrG,yFAAyF;AACzF,MAAM,UAAU,iCAAiC,CAAC,KAAoB,EAAE,QAAe;IACrF,uBAAuB,CAAC,KAAK,CAAC,CAAC,uBAAuB,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;AAC9G,CAAC;AAED,sGAAsG;AACtG,iGAAiG;AACjG,wGAAwG;AACxG,qGAAqG;AACrG,uGAAuG;AACvG,qGAAqG;AACrG,iGAAiG;AACjG,wGAAwG;AACxG,+EAA+E;AAC/E,+FAA+F;AAC/F,wFAAwF;AACxF,EAAE;AACF,uGAAuG;AACvG,yFAAyF;AACzF,oGAAoG;AACpG,uGAAuG;AACvG,mFAAmF;AACnF,MAAM,UAAU,kCAAkC,CAChD,EAA0B,EAC1B,SAAqC,EACrC,OAA6B,EAC7B,MAAmC;IAEnC,8FAA8F;IAC9F,oGAAoG;IACpG,qGAAqG;IACrG,IAAI,CAAC,4CAA4C,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,sGAAsG;IACtG,qGAAqG;IACrG,gDAAgD;IAChD,IAAI,SAAS,CAAC,gBAAgB,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,YAAY,GAAG,4BAA4B,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAEtC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,wFAAwF;QACxF,mGAAmG;QACnG,4FAA4F;QAC5F,mDAAmD;QACnD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3G,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACrG,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;YAC9B,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;YAC5C,MAAM,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,EAAE,CAAC,uBAAuB,CACxB,EAAE,CAAC,gBAAgB,EACnB,GAAG,EACH,CAAC,EACD,CAAC,EACD,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,YAAY,EACZ,IAAI,CACL,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;gBACnF,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mGAAmG;IACnG,kFAAkF;IAClF,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACrG,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,MAA8B;IAClD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,4CAA4C,CAAC,SAAqC;IACzF,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACvG,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,SAAS,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,oGAAoG;AACpG,yDAAyD;AACzD,SAAS,uBAAuB,CAC9B,EAA0B,EAC1B,KAAgC,EAChC,MAAyC;IAEzC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,oGAAoG;IACpG,mGAAmG;IACnG,uGAAuG;IACvG,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3F,OAAO,kCAAkC,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;AACpG,CAAC"}
package/dist/glDraw.d.ts CHANGED
@@ -1,9 +1,12 @@
1
- import type { GlBitmapShader, GlBlendRealization, GlRenderState, ImageResource, SamplerLike, VideoTexture } from '@flighthq/types';
2
- import { BlendMode } from '@flighthq/types';
1
+ import type { Bitmap, CompressedImage, GlBitmapShader, GlBlendRealization, GlRenderState, GlRenderStateRuntime, ImageResource, SamplerLike, TextureLike } from '@flighthq/types/contract';
2
+ import { BlendMode } from '@flighthq/types/contract';
3
3
  export declare function applyGlBlendMode(state: GlRenderState, blendMode: BlendMode | null): void;
4
+ export declare function applyGlSamplerState(state: GlRenderState, runtime: GlRenderStateRuntime, texture: WebGLTexture, sampler: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null): void;
5
+ export declare function bindGlBitmapTexture(state: GlRenderState, bitmap: Readonly<Bitmap>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null, premultiply?: boolean): WebGLTexture;
6
+ export declare function bindGlCompressedImageTexture(state: GlRenderState, image: Readonly<CompressedImage>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null): WebGLTexture;
4
7
  export declare function bindGlImageResourceTexture(state: GlRenderState, image: Readonly<ImageResource>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null, premultiply?: boolean): WebGLTexture;
5
8
  export declare function bindGlTexture(state: GlRenderState, imageSource: CanvasImageSource, sampler?: Readonly<SamplerLike> | null): WebGLTexture;
6
- export declare function bindGlVideoTexture(state: GlRenderState, videoTexture: Readonly<VideoTexture>, sampler?: Readonly<SamplerLike> | null): WebGLTexture;
9
+ export declare function bindGlVideoTexture(state: GlRenderState, texture: Readonly<TextureLike>, sampler?: Readonly<SamplerLike> | null): WebGLTexture;
7
10
  export declare function createGlTexture(state: GlRenderState): WebGLTexture;
8
11
  export declare function drawGlQuad(state: GlRenderState, x0: number, y0: number, x1: number, y1: number, u0: number, v0: number, u1: number, v1: number): void;
9
12
  export declare function enableGlBlendModeSupport(state: GlRenderState): void;
@@ -1 +1 @@
1
- {"version":3,"file":"glDraw.d.ts","sourceRoot":"","sources":["../src/glDraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,EAEb,aAAa,EACb,WAAW,EAGX,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAY5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAQxF;AAqBD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,EACtC,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,EAClC,WAAW,UAAQ,GAClB,YAAY,CAoBd;AAWD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,GACrC,YAAY,CAiCd;AAWD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,EACpC,OAAO,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,GACrC,YAAY,CAiBd;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,CAalE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,aAAa,EACpB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,IAAI,CA0BN;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGnE;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAExF;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEtE;AAKD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAGrH;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,IAAI,CAcN;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAgB5G;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAShF"}
1
+ {"version":3,"file":"glDraw.d.ts","sourceRoot":"","sources":["../src/glDraw.ts"],"names":[],"mappings":"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"}
package/dist/glDraw.js CHANGED
@@ -1,4 +1,4 @@
1
- import { BlendMode } from '@flighthq/types';
1
+ import { BlendMode } from '@flighthq/types/contract';
2
2
  import { getGlRenderStateRuntime } from './glRenderState';
3
3
  import { setGlAttributes, setGlMatrixFromValues } from './glShader';
4
4
  import { uploadGlTextureData, uploadGlTextureElement } from './glTextureUpload';
@@ -18,31 +18,69 @@ export function applyGlBlendMode(state, blendMode) {
18
18
  gl.blendEquation(gl[realization.equation ?? 'FUNC_ADD']);
19
19
  gl.blendFunc(gl[realization.src], gl[realization.dst]);
20
20
  }
21
- // Binds (uploading + caching on first use, re-uploading when the pixels change) the GL texture for an
22
- // ImageResource a bitmap, sprite atlas, or material map and applies the sampler's full state. The
23
- // resource-level sibling of bindGlTexture (which takes a raw element): it accepts an element-backed OR a
24
- // data-only generated Surface (source-or-data upload via uploadGlBoundImageResource), and caches by the
25
- // resource entity in imageResourcePremultipliedTextureCache, keyed with the uploaded `version` so an in-place Surface
26
- // edit (which bumps version) re-uploads without the caller tracking it. Sampler state is re-applied every
27
- // bind so a resource reused by two materials with different samplers follows the current draw.
21
+ // Applies a sampler's wrap, filtering, anisotropy, and mip chain to the currently-bound TEXTURE_2D.
22
+ // Without a sampler it falls back to the clamp-to-edge, no-mips 2D bitmap/sprite default, filtered by
23
+ // `smoothingOverride` when the caller supplies one (a per-bitmap `smoothing` flag) and otherwise by the
24
+ // state's global `allowSmoothing`. With a sampler, every field comes from the descriptor. The mip chain
25
+ // is generated once per texture (tracked in runtime.mipmappedTextures) the first time a mip-sampling
26
+ // filter asks for it, so a shared texture first bound without mips and later with them still generates
27
+ // its chain. Filtering and wrap are set every bind (cheap) so a texture shared across samplers follows
28
+ // the current draw; only the one-time mip generation is gated.
29
+ export function applyGlSamplerState(state, runtime, texture, sampler, smoothingOverride = null) {
30
+ const gl = state.gl;
31
+ if (!sampler) {
32
+ const smooth = smoothingOverride ?? state.allowSmoothing;
33
+ const filter = smooth ? gl.LINEAR : gl.NEAREST;
34
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
35
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
36
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
37
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
38
+ return;
39
+ }
40
+ const useMips = sampler.mipmaps && isGlMipmapFilter(sampler.minFilter);
41
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glMinFilterValue(gl, sampler.minFilter, useMips));
42
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glMagFilterValue(gl, sampler.magFilter));
43
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, glTextureWrapValue(gl, sampler.wrapU));
44
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, glTextureWrapValue(gl, sampler.wrapV));
45
+ const ext = ensureGlAnisotropyExt(state, runtime);
46
+ if (ext) {
47
+ // Clamp the requested level to [1, hardware max]; 1 disables anisotropy and also resets a texture
48
+ // that a previous anisotropic sampler left elevated.
49
+ const level = Math.max(1, Math.min(sampler.anisotropy, runtime.maxAnisotropy ?? 1));
50
+ gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, level);
51
+ }
52
+ if (useMips) {
53
+ const mipped = (runtime.mipmappedTextures ??= new WeakSet());
54
+ if (!mipped.has(texture)) {
55
+ gl.generateMipmap(gl.TEXTURE_2D);
56
+ mipped.add(texture);
57
+ }
58
+ }
59
+ }
60
+ export function bindGlBitmapTexture(state, bitmap, sampler, smoothingOverride, premultiply = false) {
61
+ return bindGlImageBackingTexture(state, bitmap, sampler, smoothingOverride, premultiply, false, uploadGlBitmap);
62
+ }
63
+ export function bindGlCompressedImageTexture(state, image, sampler, smoothingOverride) {
64
+ return bindGlImageBackingTexture(state, image, sampler, smoothingOverride, false, true, uploadGlCompressedImage);
65
+ }
66
+ // Binds (uploading + caching on first use, re-uploading when the host image changes) the GL texture for
67
+ // an ImageResource and applies the sampler's full state. The Bitmap and CompressedImage siblings below
68
+ // share only the identity/version cache bracket; each backing keeps a representation-specific uploader.
69
+ // Sampler state is re-applied every bind so a resource reused by two materials with different samplers
70
+ // follows the current draw.
28
71
  //
29
72
  // `premultiply` states whether the caller wants a premultiplied GPU texture — bind never premultiplies on
30
73
  // its own. The 2D display and particle pipelines blend premultiplied (ONE, ONE_MINUS_SRC_ALPHA) and pass
31
- // true; the 3D forward path blends straight (SRC_ALPHA) and reads baseColor.rgb as un-premultiplied
32
- // albedo, so it leaves the default false. The request is honest about the data's declared alphaType: the
33
- // premultiply is applied on upload only when the pixels are not already premultiplied
34
- // (`premultiply && alphaType !== 'premultiplied'`), so an already-premultiplied resource uploads as-is
35
- // instead of double-premultiplying, and false never transforms. The two request modes cache separate GL
36
- // textures (imageResourcePremultipliedTextureCache for premultiply, imageResourceStraightTextureCache otherwise), keyed
37
- // by the request so one ImageResource bound by both a premultiplied 2D sprite and a straight 3D material
38
- // keeps a correct texture for each — and the 2D teardown paths that reach imageResourcePremultipliedTextureCache
39
- // directly always find their (premultiply-requested) texture there.
74
+ // true; the 3D forward path blends straight (SRC_ALPHA) and leaves the default false. The two request
75
+ // modes cache separate GL textures so one backing can be sampled by both paths without rewriting its
76
+ // other realization.
40
77
  export function bindGlImageResourceTexture(state, image, sampler, smoothingOverride, premultiply = false) {
78
+ return bindGlImageBackingTexture(state, image, sampler, smoothingOverride, premultiply, false, uploadGlImageResource);
79
+ }
80
+ function bindGlImageBackingTexture(state, image, sampler, smoothingOverride, premultiply, straightAlpha, upload) {
41
81
  const runtime = getGlRenderStateRuntime(state);
42
82
  const gl = state.gl;
43
- const cache = premultiply
44
- ? runtime.imageResourcePremultipliedTextureCache
45
- : runtime.imageResourceStraightTextureCache;
83
+ const cache = premultiply ? runtime.imageBackingPremultipliedTextureCache : runtime.imageBackingStraightTextureCache;
46
84
  let entry = cache.get(image);
47
85
  if (entry === undefined) {
48
86
  entry = { texture: gl.createTexture(), version: -1 };
@@ -50,9 +88,9 @@ export function bindGlImageResourceTexture(state, image, sampler, smoothingOverr
50
88
  }
51
89
  gl.bindTexture(gl.TEXTURE_2D, entry.texture);
52
90
  runtime.currentTexture = entry.texture;
53
- runtime.currentTextureStraightAlpha = image.compressed !== null && image.alphaType === 'straight';
91
+ runtime.currentTextureStraightAlpha = straightAlpha;
54
92
  if (entry.version !== image.version) {
55
- uploadGlBoundImageResource(state, image, premultiply && image.alphaType !== 'premultiplied');
93
+ upload(state, image, premultiply);
56
94
  entry.version = image.version;
57
95
  }
58
96
  applyGlSamplerState(state, runtime, entry.texture, sampler ?? null, smoothingOverride ?? null);
@@ -91,7 +129,7 @@ export function bindGlTexture(state, imageSource, sampler) {
91
129
  // texture bound to whatever unit was active THEN, but callers change the active unit between binds
92
130
  // (a material binds its maps to units 0..4 via gl.activeTexture). Binding one image source to two
93
131
  // units — e.g. a map reused as both normal and metallic-roughness — would otherwise leave the
94
- // second unit unbound. A rebind is one cheap GL call; the sprite batch binds once per batch, so the
132
+ // second unit unbound. A rebind is one cheap GL call; the quad-batch writer binds once per batch, so the
95
133
  // dropped skip costs nothing meaningful.
96
134
  gl.bindTexture(gl.TEXTURE_2D, texture);
97
135
  runtime.currentTexture = texture;
@@ -102,31 +140,31 @@ export function bindGlTexture(state, imageSource, sampler) {
102
140
  applyGlSamplerState(state, runtime, texture, sampler ?? null);
103
141
  return texture;
104
142
  }
105
- // Binds the GL texture for a VideoTexture and re-uploads the backing element's current frame only when
106
- // its `frameId` has advanced past the one last uploaded — the dynamic, per-frame sibling of
143
+ // Binds the GL texture for a video-backed Texture and re-uploads the backing element's current frame
144
+ // only when its ImageResource `version` has advanced — the dynamic, per-frame sibling of
107
145
  // bindGlImageResourceTexture (settled ImageResource) and bindGlTexture (raw element). The GL texture is
108
- // cached by the VideoTexture entity in the runtime's videoTextureCache (lazily created), so it persists
109
- // across frames while the frameId dirty-gate keeps a paused or stalled stream from re-uploading. Applies
110
- // the VideoTexture's sampler every bind so a stream shared by two samplers follows the current draw.
111
- // Leaves the texture bound at the active unit for the caller to sample. Callers advance `frameId` via
112
- // advanceVideoTexture when the element reports a fresh decoded frame; this reads the current frame
146
+ // cached by the ImageResource backing in the runtime's videoTextureCache (lazily created), so two
147
+ // sampled Textures share one upload while their samplers remain draw-local.
148
+ // Leaves the texture bound at the active unit for the caller to sample. Callers advance the backing
149
+ // version via advanceVideoTexture when the element reports a fresh decoded frame; this reads the current frame
113
150
  // through uploadGlTextureElement's zero-copy element fast-path.
114
- export function bindGlVideoTexture(state, videoTexture, sampler) {
151
+ export function bindGlVideoTexture(state, texture, sampler) {
152
+ const image = texture.storage.image;
115
153
  const runtime = getGlRenderStateRuntime(state);
116
154
  const gl = state.gl;
117
155
  const cache = (runtime.videoTextureCache ??= new WeakMap());
118
- let entry = cache.get(videoTexture);
156
+ let entry = cache.get(image);
119
157
  if (entry === undefined) {
120
- entry = { texture: gl.createTexture(), uploadedFrameId: -1 };
121
- cache.set(videoTexture, entry);
158
+ entry = { texture: gl.createTexture(), uploadedVersion: -1 };
159
+ cache.set(image, entry);
122
160
  }
123
161
  gl.bindTexture(gl.TEXTURE_2D, entry.texture);
124
162
  runtime.currentTexture = entry.texture;
125
163
  runtime.currentTextureStraightAlpha = false;
126
164
  // Straight-alpha element under premultiplied blend would blow out RGB; match the bitmap/element path.
127
165
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
128
- entry.uploadedFrameId = uploadGlTextureVideoFrame(gl, videoTexture, entry.uploadedFrameId);
129
- applyGlSamplerState(state, runtime, entry.texture, sampler ?? videoTexture.sampler ?? null);
166
+ entry.uploadedVersion = uploadGlTextureVideoFrame(gl, image, entry.uploadedVersion);
167
+ applyGlSamplerState(state, runtime, entry.texture, sampler ?? texture.sampler);
130
168
  return entry.texture;
131
169
  }
132
170
  export function createGlTexture(state) {
@@ -216,43 +254,21 @@ export function updateGlTexture(state, texture, canvas) {
216
254
  if (runtime.mipmappedTextures?.has(texture))
217
255
  gl.generateMipmap(gl.TEXTURE_2D);
218
256
  }
219
- export function useGlProgram(state, shader) {
257
+ function uploadGlBitmap(state, image, premultiply) {
258
+ const bitmap = image;
259
+ const gl = state.gl;
260
+ const transform = premultiply && bitmap.alphaType !== 'premultiplied';
261
+ const data = transform ? premultiplyStraightRgba8(bitmap.data) : bitmap.data;
262
+ uploadGlTextureData(gl, gl.TEXTURE_2D, bitmap.width, bitmap.height, data);
263
+ }
264
+ function uploadGlCompressedImage(state, image) {
220
265
  const runtime = getGlRenderStateRuntime(state);
221
- const resolved = shader ?? runtime.defaultBitmapShader;
222
- runtime.shaderLoc = resolved.locations;
223
- const program = resolved.program;
224
- if (runtime.currentProgram !== program) {
225
- state.gl.useProgram(program);
226
- runtime.currentProgram = program;
227
- }
266
+ runtime.compressedTextureUpload?.(state.gl, image, runtime.compressedTextureDecoder ?? null);
228
267
  }
229
- // Uploads an ImageResource into the currently-bound TEXTURE_2D. `premultiply` is the caller's already
230
- // alphaType-resolved decision (see bindGlImageResourceTexture) to produce a premultiplied GPU texture:
231
- // when set, the element fast-path premultiplies via UNPACK_PREMULTIPLY_ALPHA_WEBGL and raw `data` (for
232
- // which that flag is ignored) is premultiplied on the CPU. When clear, both upload the pixels as-is, so
233
- // the straight-blend 3D forward path gets its albedo untouched and no data map (normal/roughness) is
234
- // corrupted. The data path is what makes a memory-generated Surface a first-class texture. A resource
235
- // that carries only a block-`compressed` payload (no element or data) uploads through the GPU-native
236
- // compressed path — falling back to the state's registered RGBA decoder when the device lacks the block
237
- // format; compressed blocks are never premultiplied here (the display shader premultiplies a straight
238
- // sample at draw time instead).
239
- function uploadGlBoundImageResource(state, image, premultiply) {
268
+ function uploadGlImageResource(state, image, premultiply) {
240
269
  const gl = state.gl;
241
- if (image.source !== null) {
242
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiply);
243
- uploadGlTextureElement(gl, gl.TEXTURE_2D, image.source);
244
- return;
245
- }
246
- if (image.data === null && image.compressed !== null) {
247
- // The compressed-container upload path is an opt-in seam (registerGlCompressedTextureUpload), so a
248
- // state that only draws element/data bitmaps never carries its ~40-format enum table. When unset,
249
- // skip rather than upload garbage — the texture stays empty until an uploader is registered.
250
- const runtime = getGlRenderStateRuntime(state);
251
- runtime.compressedTextureUpload?.(gl, image, runtime.compressedTextureDecoder ?? null);
252
- return;
253
- }
254
- const data = premultiply ? premultiplyStraightRgba8(image.data) : image.data;
255
- uploadGlTextureData(gl, gl.TEXTURE_2D, image.width, image.height, data);
270
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiply);
271
+ uploadGlTextureElement(gl, gl.TEXTURE_2D, image.source);
256
272
  }
257
273
  // Returns a new premultiplied rgba8 buffer from a straight-alpha one (rgb *= a/255). Allocates, but runs
258
274
  // only on a texture upload (cache miss or content change), never in the per-frame draw path.
@@ -267,43 +283,14 @@ function premultiplyStraightRgba8(data) {
267
283
  }
268
284
  return out;
269
285
  }
270
- // Applies a sampler's wrap, filtering, anisotropy, and mip chain to the currently-bound TEXTURE_2D.
271
- // Without a sampler it falls back to the clamp-to-edge, no-mips 2D bitmap/sprite default, filtered by
272
- // `smoothingOverride` when the caller supplies one (a per-bitmap `smoothing` flag) and otherwise by the
273
- // state's global `allowSmoothing`. With a sampler, every field comes from the descriptor. The mip chain
274
- // is generated once per texture (tracked in runtime.mipmappedTextures) the first time a mip-sampling
275
- // filter asks for it, so a shared texture first bound without mips and later with them still generates
276
- // its chain. Filtering and wrap are set every bind (cheap) so a texture shared across samplers follows
277
- // the current draw; only the one-time mip generation is gated.
278
- function applyGlSamplerState(state, runtime, texture, sampler, smoothingOverride = null) {
279
- const gl = state.gl;
280
- if (!sampler) {
281
- const smooth = smoothingOverride ?? state.allowSmoothing;
282
- const filter = smooth ? gl.LINEAR : gl.NEAREST;
283
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
284
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
285
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
286
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
287
- return;
288
- }
289
- const useMips = sampler.mipmaps && isGlMipmapFilter(sampler.minFilter);
290
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glMinFilterValue(gl, sampler.minFilter, useMips));
291
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glMagFilterValue(gl, sampler.magFilter));
292
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, glTextureWrapValue(gl, sampler.wrapU));
293
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, glTextureWrapValue(gl, sampler.wrapV));
294
- const ext = ensureGlAnisotropyExt(state, runtime);
295
- if (ext) {
296
- // Clamp the requested level to [1, hardware max]; 1 disables anisotropy and also resets a texture
297
- // that a previous anisotropic sampler left elevated.
298
- const level = Math.max(1, Math.min(sampler.anisotropy, runtime.maxAnisotropy ?? 1));
299
- gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, level);
300
- }
301
- if (useMips) {
302
- const mipped = (runtime.mipmappedTextures ??= new WeakSet());
303
- if (!mipped.has(texture)) {
304
- gl.generateMipmap(gl.TEXTURE_2D);
305
- mipped.add(texture);
306
- }
286
+ export function useGlProgram(state, shader) {
287
+ const runtime = getGlRenderStateRuntime(state);
288
+ const resolved = shader ?? runtime.defaultBitmapShader;
289
+ runtime.shaderLoc = resolved.locations;
290
+ const program = resolved.program;
291
+ if (runtime.currentProgram !== program) {
292
+ state.gl.useProgram(program);
293
+ runtime.currentProgram = program;
307
294
  }
308
295
  }
309
296
  // Resolves and caches EXT_texture_filter_anisotropic on the runtime: anisotropyExt is undefined until