@flighthq/render-gl 0.3.0-next.1032.e2b99fc → 0.3.0-next.1220.6982c21

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 (96) hide show
  1. package/dist/contract.d.ts +4 -0
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +4 -0
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableGlRenderStateGuards.d.ts +4 -0
  6. package/dist/enableGlRenderStateGuards.d.ts.map +1 -0
  7. package/dist/enableGlRenderStateGuards.js +30 -0
  8. package/dist/enableGlRenderStateGuards.js.map +1 -0
  9. package/dist/enableGlTextureResolverGuards.d.ts +4 -0
  10. package/dist/enableGlTextureResolverGuards.d.ts.map +1 -0
  11. package/dist/enableGlTextureResolverGuards.js +8 -0
  12. package/dist/enableGlTextureResolverGuards.js.map +1 -0
  13. package/dist/explainGlTextureResolution.d.ts +3 -0
  14. package/dist/explainGlTextureResolution.d.ts.map +1 -0
  15. package/dist/explainGlTextureResolution.js +12 -0
  16. package/dist/explainGlTextureResolution.js.map +1 -0
  17. package/dist/glCompressedTexture.js +1 -1
  18. package/dist/glCompressedTexture.js.map +1 -1
  19. package/dist/glDraw.d.ts +2 -2
  20. package/dist/glDraw.d.ts.map +1 -1
  21. package/dist/glDraw.js +17 -14
  22. package/dist/glDraw.js.map +1 -1
  23. package/dist/glExternalTexture.d.ts.map +1 -1
  24. package/dist/glExternalTexture.js +23 -18
  25. package/dist/glExternalTexture.js.map +1 -1
  26. package/dist/glFullscreenPass.js +3 -4
  27. package/dist/glFullscreenPass.js.map +1 -1
  28. package/dist/glLinearToSrgbPass.js +3 -3
  29. package/dist/glLinearToSrgbPass.js.map +1 -1
  30. package/dist/glPresentRenderTarget.js +3 -3
  31. package/dist/glPresentRenderTarget.js.map +1 -1
  32. package/dist/glRenderPass.d.ts.map +1 -1
  33. package/dist/glRenderPass.js +82 -36
  34. package/dist/glRenderPass.js.map +1 -1
  35. package/dist/glRenderState.d.ts +11 -1
  36. package/dist/glRenderState.d.ts.map +1 -1
  37. package/dist/glRenderState.js +180 -5
  38. package/dist/glRenderState.js.map +1 -1
  39. package/dist/glRenderStateBracket.d.ts.map +1 -1
  40. package/dist/glRenderStateBracket.js +16 -4
  41. package/dist/glRenderStateBracket.js.map +1 -1
  42. package/dist/glRenderTarget.d.ts +10 -1
  43. package/dist/glRenderTarget.d.ts.map +1 -1
  44. package/dist/glRenderTarget.js +129 -60
  45. package/dist/glRenderTarget.js.map +1 -1
  46. package/dist/glRenderTargetPool.d.ts +4 -1
  47. package/dist/glRenderTargetPool.d.ts.map +1 -1
  48. package/dist/glRenderTargetPool.js +32 -23
  49. package/dist/glRenderTargetPool.js.map +1 -1
  50. package/dist/glRenderTexture.d.ts +4 -1
  51. package/dist/glRenderTexture.d.ts.map +1 -1
  52. package/dist/glRenderTexture.js +75 -17
  53. package/dist/glRenderTexture.js.map +1 -1
  54. package/dist/glRenderTexturePool.d.ts +7 -0
  55. package/dist/glRenderTexturePool.d.ts.map +1 -0
  56. package/dist/glRenderTexturePool.js +87 -0
  57. package/dist/glRenderTexturePool.js.map +1 -0
  58. package/dist/glTestHelper.js +2 -2
  59. package/dist/glTestHelper.js.map +1 -1
  60. package/dist/glTextureResolver.d.ts +3 -3
  61. package/dist/glTextureResolver.d.ts.map +1 -1
  62. package/dist/glTextureResolver.js +32 -31
  63. package/dist/glTextureResolver.js.map +1 -1
  64. package/dist/glTextureUpload.d.ts +2 -2
  65. package/dist/glTextureUpload.d.ts.map +1 -1
  66. package/dist/glTextureUpload.js +1 -1
  67. package/dist/glTextureUpload.js.map +1 -1
  68. package/dist/glTextureVideoUpload.d.ts +2 -2
  69. package/dist/glTextureVideoUpload.d.ts.map +1 -1
  70. package/dist/glTextureVideoUpload.js +3 -3
  71. package/dist/glTextureVideoUpload.js.map +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +1 -1
  75. package/dist/index.js.map +1 -1
  76. package/package.json +9 -7
  77. package/src/enableGlRenderStateGuards.test.ts +27 -0
  78. package/src/enableGlTextureResolverGuards.test.ts +58 -0
  79. package/src/explainGlTextureResolution.test.ts +32 -0
  80. package/src/glCompressedTexture.test.ts +2 -2
  81. package/src/glDraw.test.ts +17 -18
  82. package/src/glExternalTexture.test.ts +3 -3
  83. package/src/glFullscreenPass.test.ts +13 -0
  84. package/src/glLinearToSrgbPass.test.ts +13 -0
  85. package/src/glPresentRenderTarget.test.ts +15 -1
  86. package/src/glReadback.test.ts +13 -0
  87. package/src/glRenderPass.test.ts +63 -0
  88. package/src/glRenderState.test.ts +135 -0
  89. package/src/glRenderStateBracket.test.ts +31 -1
  90. package/src/glRenderTarget.test.ts +186 -3
  91. package/src/glRenderTargetPool.test.ts +110 -5
  92. package/src/glRenderTexture.test.ts +71 -11
  93. package/src/glRenderTexturePool.test.ts +112 -0
  94. package/src/glTextureResolver.test.ts +73 -51
  95. package/src/glTextureUpload.test.ts +2 -2
  96. package/src/glTextureVideoUpload.test.ts +5 -5
@@ -1,3 +1,4 @@
1
+ import { resolveRenderTargetDescriptor } from '@flighthq/render/contract';
1
2
  import { applyGlSamplerState } from './glDraw';
2
3
  import { beginGlRenderPass, endGlRenderPass } from './glRenderPass';
3
4
  import { getGlRenderStateRuntime } from './glRenderState';
@@ -34,7 +35,7 @@ export function destroyGlRenderTexture(state, renderTexture) {
34
35
  }
35
36
  export function explainGlRenderTexture(state, renderTexture) {
36
37
  const entry = getEntry(state, renderTexture);
37
- const descriptor = renderTexture.storage.target;
38
+ const descriptor = renderTexture.source;
38
39
  return {
39
40
  height: entry?.target.height ?? descriptor?.height ?? 0,
40
41
  status: entry?.status ?? 'unrendered',
@@ -44,6 +45,20 @@ export function explainGlRenderTexture(state, renderTexture) {
44
45
  export function getGlRenderTextureColorSpace(state, renderTexture) {
45
46
  return getEntry(state, renderTexture)?.target.colorSpace ?? renderTexture.colorSpace;
46
47
  }
48
+ // Resolves the hidden target only while the handle owns completed content. This is the backend bridge
49
+ // used by target-to-target effect wrappers; app-level composition keeps using RenderTexture.
50
+ export function getGlRenderTextureTarget(state, renderTexture) {
51
+ const entry = getEntry(state, renderTexture);
52
+ if (entry?.status === 'ready')
53
+ return entry.target;
54
+ notifyGuard(state, renderTexture);
55
+ return null;
56
+ }
57
+ export function invalidateGlRenderTexture(state, renderTexture, status = 'unrendered') {
58
+ const entry = getEntry(state, renderTexture);
59
+ if (entry !== undefined)
60
+ entry.status = status;
61
+ }
47
62
  export function isGlRenderTextureReady(state, renderTexture) {
48
63
  const ready = getEntry(state, renderTexture)?.status === 'ready';
49
64
  if (!ready)
@@ -55,34 +70,47 @@ export function isGlRenderTextureReady(state, renderTexture) {
55
70
  * rendering commands; framebuffer and fixed-function state are restored even when it throws.
56
71
  */
57
72
  export function renderIntoGlRenderTexture(state, renderTexture, callback) {
58
- const entry = ensureEntry(state, renderTexture);
59
- entry.status = 'writing';
60
- let rendered = false;
61
- pushGlRenderState(state);
62
- try {
63
- beginGlRenderPass(state, entry.target);
73
+ writeGlRenderTextureTarget(state, renderTexture, (target) => {
74
+ pushGlRenderState(state);
64
75
  try {
65
- callback(state);
66
- rendered = true;
76
+ beginGlRenderPass(state, target);
77
+ try {
78
+ callback(state);
79
+ }
80
+ finally {
81
+ endGlRenderPass(state);
82
+ }
67
83
  }
68
84
  finally {
69
- endGlRenderPass(state);
85
+ popGlRenderState(state);
70
86
  }
87
+ });
88
+ }
89
+ export function setGlRenderTextureGuard(state, guard) {
90
+ getGlRenderStateRuntime(state).glRenderTextureGuard = guard;
91
+ }
92
+ // Gives a backend recipe the hidden destination without opening a pass. The recipe may run several
93
+ // target passes; success atomically publishes the RenderTexture, while failure invalidates it.
94
+ export function writeGlRenderTextureTarget(state, renderTexture, callback) {
95
+ const entry = ensureEntry(state, renderTexture);
96
+ const previousStatus = entry.status;
97
+ entry.status = 'writing';
98
+ let rendered = false;
99
+ try {
100
+ const result = callback(entry.target);
101
+ rendered = true;
102
+ return result;
71
103
  }
72
104
  finally {
73
- popGlRenderState(state);
74
- entry.status = rendered ? 'ready' : 'unrendered';
105
+ entry.status = rendered ? 'ready' : previousStatus === 'writing' ? 'writing' : 'unrendered';
75
106
  if (rendered) {
76
107
  renderTexture.colorSpace = entry.target.colorSpace;
77
108
  renderTexture.version = (renderTexture.version + 1) >>> 0;
78
109
  }
79
110
  }
80
111
  }
81
- export function setGlRenderTextureGuard(state, guard) {
82
- getGlRenderStateRuntime(state).glRenderTextureGuard = guard;
83
- }
84
112
  function ensureEntry(state, renderTexture) {
85
- const descriptor = renderTexture.storage.target;
113
+ const descriptor = renderTexture.source;
86
114
  const entries = getEntries(state);
87
115
  let entry = entries.get(renderTexture);
88
116
  if (entry === undefined) {
@@ -93,10 +121,40 @@ function ensureEntry(state, renderTexture) {
93
121
  entries.set(renderTexture, entry);
94
122
  }
95
123
  else {
96
- resizeGlRenderTarget(state, entry.target, descriptor.width, descriptor.height);
124
+ const requested = resolveRenderTargetDescriptor(descriptor);
125
+ if (matchesGlRenderTextureAllocation(entry.target, requested)) {
126
+ resizeGlRenderTarget(state, entry.target, descriptor.width, descriptor.height);
127
+ entry.target.requestedAxes = {
128
+ width: requested.width,
129
+ height: requested.height,
130
+ format: requested.format,
131
+ colorAttachments: requested.colorAttachments,
132
+ colorFormats: [...requested.colorFormats],
133
+ sampleCount: requested.sampleCount,
134
+ depth: requested.depth,
135
+ colorSpace: requested.colorSpace,
136
+ };
137
+ entry.target.clearColors = [...requested.clearColors];
138
+ entry.target.clearDepth = requested.clearDepth;
139
+ }
140
+ else {
141
+ destroyGlRenderTarget(state, entry.target);
142
+ entry.target = createGlRenderTarget(state, descriptor);
143
+ entry.status = 'unrendered';
144
+ }
97
145
  }
98
146
  return entry;
99
147
  }
148
+ function matchesGlRenderTextureAllocation(target, descriptor) {
149
+ const requested = target.requestedAxes;
150
+ return (requested.format === descriptor.format &&
151
+ requested.colorAttachments === descriptor.colorAttachments &&
152
+ requested.colorFormats.length === descriptor.colorFormats.length &&
153
+ requested.colorFormats.every((format, index) => format === descriptor.colorFormats[index]) &&
154
+ requested.sampleCount === descriptor.sampleCount &&
155
+ requested.depth === descriptor.depth &&
156
+ requested.colorSpace === descriptor.colorSpace);
157
+ }
100
158
  function getEntries(state) {
101
159
  return (getGlRenderStateRuntime(state).glRenderTextureCache ??= new WeakMap());
102
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glRenderTexture.js","sourceRoot":"","sources":["../src/glRenderTexture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glRenderTexture.js","sourceRoot":"","sources":["../src/glRenderTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAW1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAErG,qGAAqG;AACrG,mGAAmG;AACnG,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CACjC,KAAoB,EACpB,aAAsC,EACtC,OAAsC;IAEtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACpD,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;QAC9B,OAAO,CAAC,2BAA2B,GAAG,KAAK,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IACrC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC;IACjC,OAAO,CAAC,2BAA2B,GAAG,KAAK,CAAC;IAC5C,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB,EAAE,aAAsC;IACjG,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,aAAsC;IAEtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IACxC,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,CAAC;QACvD,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY;QACrC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAoB,EACpB,aAAsC;IAEtC,OAAO,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC;AACvF,CAAC;AAED,sGAAsG;AACtG,6FAA6F;AAC7F,MAAM,UAAU,wBAAwB,CACtC,KAAoB,EACpB,aAAsC;IAEtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACnD,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAoB,EACpB,aAAsC,EACtC,SAAoC,YAAY;IAEhD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB,EAAE,aAAsC;IACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,IAAI,CAAC,KAAK;QAAE,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAoB,EACpB,aAA4B,EAC5B,QAAwC;IAExC,0BAA0B,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1D,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;oBAAS,CAAC;gBACT,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAoB,EAAE,KAAkC;IAC9F,uBAAuB,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAC9D,CAAC;AAED,mGAAmG;AACnG,+FAA+F;AAC/F,MAAM,UAAU,0BAA0B,CACxC,KAAoB,EACpB,aAA4B,EAC5B,QAAuD;IAEvD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;IACpC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QAC5F,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YACnD,aAAa,CAAC,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB,EAAE,aAAsC;IAC/E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG;YACN,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC;SAChD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YAC9D,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC/E,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG;gBAC3B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC;gBACzC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,UAAU,EAAE,SAAS,CAAC,UAAU;aACjC,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACtD,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gCAAgC,CACvC,MAAgD,EAChD,UAA4D;IAE5D,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;IACvC,OAAO,CACL,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QACtC,SAAS,CAAC,gBAAgB,KAAK,UAAU,CAAC,gBAAgB;QAC1D,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY,CAAC,MAAM;QAChE,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1F,SAAS,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;QAChD,SAAS,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;QACpC,SAAS,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAoB;IACtC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,oBAAoB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAoB,EAAE,aAAsC;IAC5E,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB,EAAE,aAAsC;IAC/E,uBAAuB,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CACnD,KAAK,EACL,aAAa,EACb,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,CAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { GlRenderState, GlRenderTexturePool, RenderTargetDescriptor, RenderTexture } from '@flighthq/types/contract';
2
+ export declare function acquireGlRenderTexture(state: GlRenderState, pool: GlRenderTexturePool, descriptor: Readonly<RenderTargetDescriptor>): RenderTexture;
3
+ export declare function createGlRenderTexturePool(): GlRenderTexturePool;
4
+ export declare function destroyGlRenderTexturePool(state: GlRenderState, pool: GlRenderTexturePool): void;
5
+ export declare function releaseGlRenderTexture(state: GlRenderState, pool: GlRenderTexturePool, renderTexture: RenderTexture): void;
6
+ export declare function withGlRenderTextures<T>(state: GlRenderState, pool: GlRenderTexturePool, descriptors: ReadonlyArray<Readonly<RenderTargetDescriptor>>, callback: (textures: ReadonlyArray<RenderTexture>) => T): T;
7
+ //# sourceMappingURL=glRenderTexturePool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderTexturePool.d.ts","sourceRoot":"","sources":["../src/glRenderTexturePool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EAEnB,sBAAsB,EACtB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,aAAa,CAQf;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,CAQ/D;AAID,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAShG;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,mBAAmB,EACzB,aAAa,EAAE,aAAa,GAC3B,IAAI,CAON;AAID,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,mBAAmB,EACzB,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAC5D,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,GACtD,CAAC,CAWH"}
@@ -0,0 +1,87 @@
1
+ import { createRenderTexture } from '@flighthq/texture/contract';
2
+ import { createGlRenderTargetPool, destroyGlRenderTargetPool } from './glRenderTargetPool';
3
+ import { destroyGlRenderTexture, invalidateGlRenderTexture } from './glRenderTexture';
4
+ export function acquireGlRenderTexture(state, pool, descriptor) {
5
+ assertUsablePool(state, pool);
6
+ const renderTexture = pool.free.pop() ?? createRenderTexture(descriptor);
7
+ applyRenderTargetDescriptor(renderTexture.source, descriptor);
8
+ renderTexture.colorSpace = descriptor.colorSpace ?? 'srgb';
9
+ invalidateGlRenderTexture(state, renderTexture);
10
+ pool.leased.add(renderTexture);
11
+ return renderTexture;
12
+ }
13
+ export function createGlRenderTexturePool() {
14
+ return {
15
+ context: null,
16
+ destroyed: false,
17
+ effectTargets: createGlRenderTargetPool(),
18
+ free: [],
19
+ leased: new Set(),
20
+ };
21
+ }
22
+ // Destroys free and currently leased handles. A shutdown caller need not recover every outstanding
23
+ // display lease first; after this call the pool cannot be acquired again.
24
+ export function destroyGlRenderTexturePool(state, pool) {
25
+ if (pool.destroyed)
26
+ return;
27
+ assertPoolContext(state, pool);
28
+ const textures = new Set([...pool.free, ...pool.leased]);
29
+ for (const renderTexture of textures)
30
+ destroyGlRenderTexture(state, renderTexture);
31
+ pool.free.length = 0;
32
+ pool.leased.clear();
33
+ destroyGlRenderTargetPool(state, pool.effectTargets);
34
+ pool.destroyed = true;
35
+ }
36
+ export function releaseGlRenderTexture(state, pool, renderTexture) {
37
+ assertUsablePool(state, pool);
38
+ if (!pool.leased.delete(renderTexture)) {
39
+ throw new Error('releaseGlRenderTexture: texture is not leased from this pool');
40
+ }
41
+ invalidateGlRenderTexture(state, renderTexture, 'released');
42
+ pool.free.push(renderTexture);
43
+ }
44
+ // Exception-safe bracket for source/scratch/result sets whose ownership ends together. A result shown
45
+ // by Sprite must instead remain manually leased until that frame's consumer is finished.
46
+ export function withGlRenderTextures(state, pool, descriptors, callback) {
47
+ const textures = [];
48
+ try {
49
+ for (const descriptor of descriptors)
50
+ textures.push(acquireGlRenderTexture(state, pool, descriptor));
51
+ return callback(textures);
52
+ }
53
+ finally {
54
+ for (let i = textures.length - 1; i >= 0; i--) {
55
+ const texture = textures[i];
56
+ if (pool.leased.has(texture))
57
+ releaseGlRenderTexture(state, pool, texture);
58
+ }
59
+ }
60
+ }
61
+ function applyRenderTargetDescriptor(target, descriptor) {
62
+ target.width = descriptor.width;
63
+ target.height = descriptor.height;
64
+ target.format = descriptor.format;
65
+ target.colorAttachments = descriptor.colorAttachments;
66
+ target.colorFormats = descriptor.colorFormats === undefined ? undefined : [...descriptor.colorFormats];
67
+ target.sampleCount = descriptor.sampleCount;
68
+ target.depth = descriptor.depth;
69
+ target.colorSpace = descriptor.colorSpace ?? 'srgb';
70
+ target.clearColors = descriptor.clearColors === undefined ? undefined : [...descriptor.clearColors];
71
+ target.clearDepth = descriptor.clearDepth;
72
+ target.version = (target.version + 1) >>> 0;
73
+ }
74
+ function assertUsablePool(state, pool) {
75
+ if (pool.destroyed)
76
+ throw new Error('GlRenderTexturePool has been destroyed');
77
+ assertPoolContext(state, pool);
78
+ }
79
+ function assertPoolContext(state, pool) {
80
+ if (pool.context === null) {
81
+ pool.context = state.gl;
82
+ }
83
+ else if (pool.context !== state.gl) {
84
+ throw new Error('GlRenderTexturePool cannot cross WebGL contexts');
85
+ }
86
+ }
87
+ //# sourceMappingURL=glRenderTexturePool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderTexturePool.js","sourceRoot":"","sources":["../src/glRenderTexturePool.ts"],"names":[],"mappings":"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"}
@@ -31,8 +31,8 @@ export function createGlState(options) {
31
31
  flushPendingDraws: null,
32
32
  renderTargetViewport: null,
33
33
  textureCache: new WeakMap(),
34
- imageBackingPremultipliedTextureCache: new WeakMap(),
35
- imageBackingStraightTextureCache: new WeakMap(),
34
+ textureSourcePremultipliedTextureCache: new WeakMap(),
35
+ textureSourceStraightTextureCache: new WeakMap(),
36
36
  shaderLoc,
37
37
  defaultBitmapShader: { locations: shaderLoc, program: shaderLoc.program, bind: vi.fn() },
38
38
  quadVertexBuffer: {},
@@ -1 +1 @@
1
- {"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { GlRenderState, GlTextureResolver, TextureBackingKind, TextureLike } from '@flighthq/types/contract';
1
+ import type { GlRenderState, GlTextureResolver, TextureSourceKind, TextureLike } from '@flighthq/types/contract';
2
2
  export declare function registerGlBitmapTextureResolver(state: GlRenderState): void;
3
3
  export declare function registerGlCompressedImageTextureResolver(state: GlRenderState): void;
4
4
  export declare function registerGlImageTextureResolver(state: GlRenderState): void;
5
5
  export declare function registerGlRenderTextureResolver(state: GlRenderState): void;
6
- export declare function registerGlTextureResolver(state: GlRenderState, backingKind: TextureBackingKind, resolver: GlTextureResolver | null): void;
7
- export declare function registerGlVideoTextureResolver(state: GlRenderState): void;
6
+ export declare function registerGlTextureResolver(state: GlRenderState, sourceKind: TextureSourceKind, resolver: GlTextureResolver | null): void;
7
+ export declare function registerStandardGlTextureResolvers(state: GlRenderState): void;
8
8
  export declare function resolveGlTexture(state: GlRenderState, texture: Readonly<TextureLike>, premultiply?: boolean): WebGLTexture | null;
9
9
  //# sourceMappingURL=glTextureResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureResolver.d.ts","sourceRoot":"","sources":["../src/glTextureResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAGjB,kBAAkB,EAClB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAkBlC,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEnF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE;AAGD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E;AAID,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GACjC,IAAI,CAKN;AAGD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE;AAOD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,WAAW,UAAQ,GAClB,YAAY,GAAG,IAAI,CAMrB"}
1
+ {"version":3,"file":"glTextureResolver.d.ts","sourceRoot":"","sources":["../src/glTextureResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAGjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAalC,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEnF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE;AAGD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E;AAID,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,iBAAiB,EAC7B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GACjC,IAAI,CAKN;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAI7E;AAOD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,WAAW,UAAQ,GAClB,YAAY,GAAG,IAAI,CAYrB"}
@@ -1,68 +1,69 @@
1
- import { getTextureBackingKind } from '@flighthq/texture/contract';
2
- import { BitmapTextureBackingKind, CompressedImageTextureBackingKind, ImageTextureBackingKind, RenderTextureBackingKind, VideoTextureBackingKind, } from '@flighthq/types/contract';
3
- import { bindGlBitmapTexture, bindGlCompressedImageTexture, bindGlImageResourceTexture, bindGlVideoTexture, } from './glDraw';
1
+ import { emitSignal } from '@flighthq/signals/contract';
2
+ import { getTextureSource, getTextureSourceKind } from '@flighthq/texture/contract';
3
+ import { BitmapTextureSourceKind, CompressedImageTextureSourceKind, ImageTextureSourceKind, RenderRegistry, RenderTargetTextureSourceKind, } from '@flighthq/types/contract';
4
+ import { bindGlBitmapTexture, bindGlCompressedImageTexture, bindGlImageResourceTexture } from './glDraw';
4
5
  import { getGlRenderStateRuntime } from './glRenderState';
5
6
  import { bindGlRenderTexture } from './glRenderTexture';
6
7
  export function registerGlBitmapTextureResolver(state) {
7
- registerGlTextureResolver(state, BitmapTextureBackingKind, resolveGlBitmapTexture);
8
+ registerGlTextureResolver(state, BitmapTextureSourceKind, resolveGlBitmapTexture);
8
9
  }
9
10
  export function registerGlCompressedImageTextureResolver(state) {
10
- registerGlTextureResolver(state, CompressedImageTextureBackingKind, resolveGlCompressedImageTexture);
11
+ registerGlTextureResolver(state, CompressedImageTextureSourceKind, resolveGlCompressedImageTexture);
11
12
  }
12
13
  export function registerGlImageTextureResolver(state) {
13
- registerGlTextureResolver(state, ImageTextureBackingKind, resolveGlImageTexture);
14
+ registerGlTextureResolver(state, ImageTextureSourceKind, resolveGlImageTexture);
14
15
  }
15
16
  // Installs the render-target realization.
16
17
  export function registerGlRenderTextureResolver(state) {
17
- registerGlTextureResolver(state, RenderTextureBackingKind, resolveGlRenderTexture);
18
+ registerGlTextureResolver(state, RenderTargetTextureSourceKind, resolveGlRenderTexture);
18
19
  }
19
- // Registers or replaces one declared backing-kind resolver on this render state. Map.set is
20
+ // Registers or replaces one declared source-kind resolver on this render state. Map.set is
20
21
  // last-write-wins; passing null removes the key. No registration ordering or matcher scan exists.
21
- export function registerGlTextureResolver(state, backingKind, resolver) {
22
+ export function registerGlTextureResolver(state, sourceKind, resolver) {
22
23
  const runtime = getGlRenderStateRuntime(state);
23
24
  const registry = (runtime.glTextureResolverRegistry ??= new Map());
24
25
  if (resolver === null)
25
- registry.delete(backingKind);
26
+ registry.delete(sourceKind);
26
27
  else
27
- registry.set(backingKind, resolver);
28
+ registry.set(sourceKind, resolver);
28
29
  }
29
- // Installs the dynamic host-video specialization.
30
- export function registerGlVideoTextureResolver(state) {
31
- registerGlTextureResolver(state, VideoTextureBackingKind, resolveGlVideoTexture);
30
+ export function registerStandardGlTextureResolvers(state) {
31
+ registerGlBitmapTextureResolver(state);
32
+ registerGlImageTextureResolver(state);
33
+ registerGlRenderTextureResolver(state);
32
34
  }
33
- // Resolves through one keyed lookup using the backing's declared kind. Resolution is deliberately not
35
+ // Resolves through one keyed lookup using the source's declared kind. Resolution is deliberately not
34
36
  // pure: each built-in resolver leaves its result bound to TEXTURE_2D on the active texture unit because
35
37
  // GL upload and sampler application require that binding. Callers must not reorder this call across
36
- // activeTexture/bind operations as though it only returned a handle. The CPU backing owns its kind; a
37
- // GPU-origin target owns its own. An unbound or undeclared backing is the null sentinel.
38
+ // activeTexture/bind operations as though it only returned a handle. The CPU source owns its kind; a
39
+ // GPU-origin target owns its own. An unbound or undeclared source is the null sentinel.
38
40
  export function resolveGlTexture(state, texture, premultiply = false) {
39
- const registry = getGlRenderStateRuntime(state).glTextureResolverRegistry;
40
- if (registry == null)
41
+ const sourceKind = getTextureSourceKind(texture);
42
+ if (sourceKind === null)
41
43
  return null;
42
- const backingKind = getTextureBackingKind(texture);
43
- if (backingKind === null)
44
+ const runtime = getGlRenderStateRuntime(state);
45
+ const resolver = runtime.glTextureResolverRegistry?.get(sourceKind);
46
+ if (resolver === undefined) {
47
+ if (runtime.registrySignals !== null) {
48
+ emitSignal(runtime.registrySignals.onRegistryMiss, RenderRegistry.TextureResolver, sourceKind);
49
+ }
44
50
  return null;
45
- return registry.get(backingKind)?.(state, texture, premultiply) ?? null;
51
+ }
52
+ return resolver(state, texture, premultiply);
46
53
  }
47
54
  function resolveGlBitmapTexture(state, texture, premultiply) {
48
- const bitmap = texture.storage.image;
55
+ const bitmap = getTextureSource(texture);
49
56
  return bitmap === null ? null : bindGlBitmapTexture(state, bitmap, texture.sampler, null, premultiply);
50
57
  }
51
58
  function resolveGlCompressedImageTexture(state, texture) {
52
- const image = texture.storage.image;
59
+ const image = getTextureSource(texture);
53
60
  return image === null ? null : bindGlCompressedImageTexture(state, image, texture.sampler);
54
61
  }
55
62
  function resolveGlImageTexture(state, texture, premultiply) {
56
- const image = texture.storage.image;
63
+ const image = getTextureSource(texture);
57
64
  return image === null ? null : bindGlImageResourceTexture(state, image, texture.sampler, null, premultiply);
58
65
  }
59
66
  function resolveGlRenderTexture(state, texture) {
60
67
  return bindGlRenderTexture(state, texture);
61
68
  }
62
- function resolveGlVideoTexture(state, texture) {
63
- const source = texture.storage.image?.source;
64
- if (source == null || source.readyState < 2 || source.videoWidth <= 0 || source.videoHeight <= 0)
65
- return null;
66
- return bindGlVideoTexture(state, texture);
67
- }
68
69
  //# sourceMappingURL=glTextureResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureResolver.js","sourceRoot":"","sources":["../src/glTextureResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glTextureResolver.js","sourceRoot":"","sources":["../src/glTextureResolver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { ImageResource } from '@flighthq/types/contract';
1
+ import type { Image } from '@flighthq/types/contract';
2
2
  export declare function uploadGlTextureData(gl: WebGL2RenderingContext, target: number, width: number, height: number, data: Readonly<Uint8ClampedArray<ArrayBuffer>>): void;
3
3
  export declare function uploadGlTextureElement(gl: WebGL2RenderingContext, target: number, source: TexImageSource): void;
4
- export declare function uploadGlTextureImageResource(gl: WebGL2RenderingContext, target: number, image: Readonly<ImageResource>): void;
4
+ export declare function uploadGlTextureImageResource(gl: WebGL2RenderingContext, target: number, image: Readonly<Image>): void;
5
5
  //# sourceMappingURL=glTextureUpload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureUpload.d.ts","sourceRoot":"","sources":["../src/glTextureUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAW9D,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,sBAAsB,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,GAC7C,IAAI,CAYN;AAID,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAE/G;AAGD,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,sBAAsB,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC7B,IAAI,CAEN"}
1
+ {"version":3,"file":"glTextureUpload.d.ts","sourceRoot":"","sources":["../src/glTextureUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAWtD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,sBAAsB,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,GAC7C,IAAI,CAYN;AAID,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAE/G;AAGD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAErH"}
@@ -14,7 +14,7 @@ export function uploadGlTextureData(gl, target, width, height, data) {
14
14
  export function uploadGlTextureElement(gl, target, source) {
15
15
  gl.texImage2D(target, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
16
16
  }
17
- // Uploads a host-backed ImageResource through the decoded-element fast path.
17
+ // Uploads a host-backed Image through the decoded-element fast path.
18
18
  export function uploadGlTextureImageResource(gl, target, image) {
19
19
  uploadGlTextureElement(gl, target, image.source);
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureUpload.js","sourceRoot":"","sources":["../src/glTextureUpload.ts"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,yGAAyG;AACzG,wGAAwG;AACxG,0GAA0G;AAC1G,4EAA4E;AAE5E,wGAAwG;AACxG,2GAA2G;AAC3G,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CACjC,EAA0B,EAC1B,MAAc,EACd,KAAa,EACb,MAAc,EACd,IAA8C;IAE9C,EAAE,CAAC,UAAU,CACX,MAAM,EACN,CAAC,EACD,EAAE,CAAC,IAAI,EACP,KAAK,EACL,MAAM,EACN,CAAC,EACD,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,aAAa,EAChB,IAAsC,CACvC,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,2GAA2G;AAC3G,MAAM,UAAU,sBAAsB,CAAC,EAA0B,EAAE,MAAc,EAAE,MAAsB;IACvG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,4BAA4B,CAC1C,EAA0B,EAC1B,MAAc,EACd,KAA8B;IAE9B,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAwB,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"glTextureUpload.js","sourceRoot":"","sources":["../src/glTextureUpload.ts"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,yGAAyG;AACzG,wGAAwG;AACxG,0GAA0G;AAC1G,4EAA4E;AAE5E,wGAAwG;AACxG,2GAA2G;AAC3G,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CACjC,EAA0B,EAC1B,MAAc,EACd,KAAa,EACb,MAAc,EACd,IAA8C;IAE9C,EAAE,CAAC,UAAU,CACX,MAAM,EACN,CAAC,EACD,EAAE,CAAC,IAAI,EACP,KAAK,EACL,MAAM,EACN,CAAC,EACD,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,aAAa,EAChB,IAAsC,CACvC,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,2GAA2G;AAC3G,MAAM,UAAU,sBAAsB,CAAC,EAA0B,EAAE,MAAc,EAAE,MAAsB;IACvG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,4BAA4B,CAAC,EAA0B,EAAE,MAAc,EAAE,KAAsB;IAC7G,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAwB,CAAC,CAAC;AACrE,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { ImageResource } from '@flighthq/types/contract';
2
- export declare function uploadGlTextureVideoFrame(gl: WebGL2RenderingContext, image: Readonly<ImageResource>, uploadedVersion: number): number;
1
+ import type { Image } from '@flighthq/types/contract';
2
+ export declare function uploadGlTextureVideoFrame(gl: WebGL2RenderingContext, image: Readonly<Image>, uploadedVersion: number): number;
3
3
  //# sourceMappingURL=glTextureVideoUpload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureVideoUpload.d.ts","sourceRoot":"","sources":["../src/glTextureVideoUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAc9D,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,eAAe,EAAE,MAAM,GACtB,MAAM,CAUR"}
1
+ {"version":3,"file":"glTextureVideoUpload.d.ts","sourceRoot":"","sources":["../src/glTextureVideoUpload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AActD,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAUR"}
@@ -1,9 +1,9 @@
1
1
  import { uploadGlTextureElement } from './glTextureUpload';
2
- // The per-frame video-to-GPU upload path. An ImageResource's borrowed HTMLVideoElement decodes new pixels
2
+ // The per-frame video-to-GPU upload path. An Image's borrowed HTMLVideoElement decodes new pixels
3
3
  // continuously, so a driver re-uploads the currently-bound GL texture whenever the element's frame
4
4
  // advances — but not on frames where nothing changed (a paused or stalled stream), which would waste a
5
- // full-frame DMA. `uploadedVersion` is the backing revision the caller last uploaded; this compares it to the
6
- // backing's `version` and re-uploads through the element fast-path only on a change, returning the
5
+ // full-frame DMA. `uploadedVersion` is the source revision the caller last uploaded; this compares it to the
6
+ // source's `version` and re-uploads through the element fast-path only on a change, returning the
7
7
  // id now on the GPU so the caller stores it for the next frame.
8
8
  //
9
9
  // The caller owns creating, binding, and setting sampler/pixel-store state on the texture; this writes
@@ -1 +1 @@
1
- {"version":3,"file":"glTextureVideoUpload.js","sourceRoot":"","sources":["../src/glTextureVideoUpload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,0GAA0G;AAC1G,mGAAmG;AACnG,uGAAuG;AACvG,8GAA8G;AAC9G,mGAAmG;AACnG,gEAAgE;AAChE,EAAE;AACF,uGAAuG;AACvG,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,UAAU,yBAAyB,CACvC,EAA0B,EAC1B,KAA8B,EAC9B,eAAuB;IAEvB,IAAI,KAAK,CAAC,OAAO,KAAK,eAAe;QAAE,OAAO,eAAe,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAiC,CAAC;IACxD,qGAAqG;IACrG,+FAA+F;IAC/F,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QACtG,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,OAAoC,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"glTextureVideoUpload.js","sourceRoot":"","sources":["../src/glTextureVideoUpload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,kGAAkG;AAClG,mGAAmG;AACnG,uGAAuG;AACvG,6GAA6G;AAC7G,kGAAkG;AAClG,gEAAgE;AAChE,EAAE;AACF,uGAAuG;AACvG,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,UAAU,yBAAyB,CACvC,EAA0B,EAC1B,KAAsB,EACtB,eAAuB;IAEvB,IAAI,KAAK,CAAC,OAAO,KAAK,eAAe;QAAE,OAAO,eAAe,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAiC,CAAC;IACxD,qGAAqG;IACrG,+FAA+F;IAC/F,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QACtG,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,OAAoC,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { beginGlRenderPass, bindGlImageResourceTexture, bindGlRenderTexture, bindGlTexture, createGlCanvasElement, createExternalGlTexture, createGlRenderState, createGlRenderTarget, destroyGlRenderTexture, disposeExternalGlTexture, enableGlRenderTextureGuards, enableGlBlendModeSupport, endGlRenderPass, explainGlRenderTexture, registerGlBitmapTextureResolver, registerGlCompressedTextureDecoder, registerGlCompressedImageTextureResolver, registerGlCompressedTextureUpload, registerGlImageTextureResolver, registerGlRenderTextureResolver, registerGlTextureResolver, registerGlVideoTextureResolver, renderGlBackground, renderIntoGlRenderTexture, resolveGlTexture, uploadGlCompressedTextureContainer, } from './contract';
1
+ export { acquireGlRenderTexture, beginGlRenderPass, bindGlImageResourceTexture, bindGlRenderTexture, bindGlTexture, copyGlRenderStateRegistrations, createGlCanvasElement, createExternalGlTexture, createGlOffscreenRenderState, createGlRenderState, createGlRenderTexturePool, createGlRenderTarget, destroyGlRenderTexture, destroyGlRenderTexturePool, destroyGlRenderState, disposeExternalGlTexture, enableGlRenderTextureGuards, enableGlRenderStateGuards, enableGlTextureResolverGuards, enableGlBlendModeSupport, endGlRenderPass, explainGlRenderTarget, explainGlRenderTexture, explainGlTextureResolution, isGlRenderTargetFormatSupported, registerGlBitmapTextureResolver, registerGlCompressedTextureDecoder, registerGlCompressedImageTextureResolver, registerGlCompressedTextureUpload, registerGlImageTextureResolver, registerGlRenderTextureResolver, registerStandardGlTextureResolvers, registerGlTextureResolver, renderGlBackground, renderIntoGlRenderTexture, releaseGlRenderTexture, resolveGlRenderTargetAxes, resolveGlTexture, uploadGlCompressedTextureContainer, withGlRenderTextures, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,+BAA+B,EAC/B,kCAAkC,EAClC,wCAAwC,EACxC,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,yBAAyB,EACzB,8BAA8B,EAC9B,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,+BAA+B,EAC/B,+BAA+B,EAC/B,kCAAkC,EAClC,wCAAwC,EACxC,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,kCAAkC,EAClC,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,kCAAkC,EAClC,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { beginGlRenderPass, bindGlImageResourceTexture, bindGlRenderTexture, bindGlTexture, createGlCanvasElement, createExternalGlTexture, createGlRenderState, createGlRenderTarget, destroyGlRenderTexture, disposeExternalGlTexture, enableGlRenderTextureGuards, enableGlBlendModeSupport, endGlRenderPass, explainGlRenderTexture, registerGlBitmapTextureResolver, registerGlCompressedTextureDecoder, registerGlCompressedImageTextureResolver, registerGlCompressedTextureUpload, registerGlImageTextureResolver, registerGlRenderTextureResolver, registerGlTextureResolver, registerGlVideoTextureResolver, renderGlBackground, renderIntoGlRenderTexture, resolveGlTexture, uploadGlCompressedTextureContainer, } from './contract';
1
+ export { acquireGlRenderTexture, beginGlRenderPass, bindGlImageResourceTexture, bindGlRenderTexture, bindGlTexture, copyGlRenderStateRegistrations, createGlCanvasElement, createExternalGlTexture, createGlOffscreenRenderState, createGlRenderState, createGlRenderTexturePool, createGlRenderTarget, destroyGlRenderTexture, destroyGlRenderTexturePool, destroyGlRenderState, disposeExternalGlTexture, enableGlRenderTextureGuards, enableGlRenderStateGuards, enableGlTextureResolverGuards, enableGlBlendModeSupport, endGlRenderPass, explainGlRenderTarget, explainGlRenderTexture, explainGlTextureResolution, isGlRenderTargetFormatSupported, registerGlBitmapTextureResolver, registerGlCompressedTextureDecoder, registerGlCompressedImageTextureResolver, registerGlCompressedTextureUpload, registerGlImageTextureResolver, registerGlRenderTextureResolver, registerStandardGlTextureResolvers, registerGlTextureResolver, renderGlBackground, renderIntoGlRenderTexture, releaseGlRenderTexture, resolveGlRenderTargetAxes, resolveGlTexture, uploadGlCompressedTextureContainer, withGlRenderTextures, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,+BAA+B,EAC/B,kCAAkC,EAClC,wCAAwC,EACxC,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,yBAAyB,EACzB,8BAA8B,EAC9B,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,+BAA+B,EAC/B,+BAA+B,EAC/B,kCAAkC,EAClC,wCAAwC,EACxC,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,kCAAkC,EAClC,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,kCAAkC,EAClC,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/render-gl",
3
- "version": "0.3.0-next.1032.e2b99fc",
3
+ "version": "0.3.0-next.1220.6982c21",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/flighthq/flight.git",
@@ -36,12 +36,14 @@
36
36
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
37
  },
38
38
  "dependencies": {
39
- "@flighthq/log": "0.3.0-next.1032.e2b99fc",
40
- "@flighthq/scene2d": "0.3.0-next.1032.e2b99fc",
41
- "@flighthq/geometry": "0.3.0-next.1032.e2b99fc",
42
- "@flighthq/render": "0.3.0-next.1032.e2b99fc",
43
- "@flighthq/texture": "0.3.0-next.1032.e2b99fc",
44
- "@flighthq/types": "0.3.0-next.1032.e2b99fc"
39
+ "@flighthq/entity": "0.3.0-next.1220.6982c21",
40
+ "@flighthq/log": "0.3.0-next.1220.6982c21",
41
+ "@flighthq/scene2d": "0.3.0-next.1220.6982c21",
42
+ "@flighthq/geometry": "0.3.0-next.1220.6982c21",
43
+ "@flighthq/render": "0.3.0-next.1220.6982c21",
44
+ "@flighthq/signals": "0.3.0-next.1220.6982c21",
45
+ "@flighthq/texture": "0.3.0-next.1220.6982c21",
46
+ "@flighthq/types": "0.3.0-next.1220.6982c21"
45
47
  },
46
48
  "devDependencies": {
47
49
  "typescript": "^5.3.0"
@@ -0,0 +1,27 @@
1
+ import { areGlRenderStateGuardsEnabled, enableGlRenderStateGuards } from './enableGlRenderStateGuards';
2
+ import { createGlRenderState } from './glRenderState';
3
+ import { makeGL } from './glTestHelper';
4
+
5
+ function createState() {
6
+ const canvas = document.createElement('canvas');
7
+ canvas.getContext = vi.fn().mockReturnValue(makeGL()) as typeof canvas.getContext;
8
+ return createGlRenderState(canvas);
9
+ }
10
+
11
+ describe('areGlRenderStateGuardsEnabled', () => {
12
+ it('reports whether the state-local multiple-root guard is installed', () => {
13
+ const state = createState();
14
+ expect(areGlRenderStateGuardsEnabled(state)).toBe(false);
15
+ enableGlRenderStateGuards(state);
16
+ expect(areGlRenderStateGuardsEnabled(state)).toBe(true);
17
+ });
18
+ });
19
+
20
+ describe('enableGlRenderStateGuards', () => {
21
+ it('installs the state-local multiple-root guard idempotently', () => {
22
+ const state = createState();
23
+ enableGlRenderStateGuards(state);
24
+ enableGlRenderStateGuards(state);
25
+ expect(areGlRenderStateGuardsEnabled(state)).toBe(true);
26
+ });
27
+ });