@lightningjs/renderer 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +1 -1
  2. package/dist/src/common/CommonTypes.d.ts +8 -0
  3. package/dist/src/core/CoreNode.d.ts +63 -15
  4. package/dist/src/core/CoreNode.js +266 -117
  5. package/dist/src/core/CoreNode.js.map +1 -1
  6. package/dist/src/core/CoreTextNode.d.ts +11 -0
  7. package/dist/src/core/CoreTextNode.js +58 -0
  8. package/dist/src/core/CoreTextNode.js.map +1 -1
  9. package/dist/src/core/CoreTextureManager.d.ts +3 -1
  10. package/dist/src/core/CoreTextureManager.js +4 -1
  11. package/dist/src/core/CoreTextureManager.js.map +1 -1
  12. package/dist/src/core/Stage.d.ts +12 -2
  13. package/dist/src/core/Stage.js +36 -24
  14. package/dist/src/core/Stage.js.map +1 -1
  15. package/dist/src/core/animations/CoreAnimation.js +11 -2
  16. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  17. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  18. package/dist/src/core/lib/ContextSpy.js +38 -0
  19. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  20. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  21. package/dist/src/core/lib/ImageWorker.js +111 -0
  22. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  23. package/dist/src/core/lib/WebGlContext.d.ts +414 -0
  24. package/dist/src/core/lib/WebGlContext.js +640 -0
  25. package/dist/src/core/lib/WebGlContext.js.map +1 -0
  26. package/dist/src/core/lib/WebGlContextWrapper.d.ts +500 -0
  27. package/dist/src/core/lib/WebGlContextWrapper.js +784 -0
  28. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  29. package/dist/src/core/platform.js +4 -0
  30. package/dist/src/core/platform.js.map +1 -1
  31. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +2 -1
  32. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +2 -2
  33. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  34. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +3 -2
  35. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +23 -21
  36. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +3 -2
  38. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +9 -13
  39. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +4 -1
  41. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +33 -31
  42. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -1
  44. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +24 -24
  45. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +8 -5
  47. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +11 -13
  48. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  49. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -2
  50. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +15 -15
  51. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  52. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  53. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +3 -3
  55. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  56. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +1 -0
  57. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +32 -12
  58. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  59. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +3 -3
  60. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  61. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +3 -3
  62. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  63. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +14 -1
  65. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +15 -5
  66. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -1
  67. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +7 -8
  68. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  69. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +2 -1
  70. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +4 -2
  71. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
  72. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +40 -13
  73. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -1
  75. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +6 -6
  76. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  77. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  78. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +82 -50
  79. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  80. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.d.ts +8 -0
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js +29 -0
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js.map +1 -0
  83. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +4 -3
  84. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +15 -11
  85. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
  86. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +3 -2
  87. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +30 -26
  88. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  89. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.d.ts +19 -0
  90. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js +84 -0
  91. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js.map +1 -0
  92. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.d.ts +8 -0
  93. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js +40 -0
  94. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js.map +1 -0
  95. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.d.ts +2 -0
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js +41 -0
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js.map +1 -0
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.d.ts +1 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js +4 -0
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js.map +1 -0
  101. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.d.ts +1 -0
  102. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js +2 -0
  103. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js.map +1 -0
  104. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.d.ts +9 -0
  105. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js +32 -0
  106. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js.map +1 -0
  107. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  108. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  109. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  110. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  111. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
  112. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  113. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +50 -0
  114. package/dist/src/core/text-rendering/renderers/TextRenderer.js +19 -0
  115. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  116. package/dist/src/core/textures/ImageTexture.js +14 -9
  117. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  118. package/dist/src/core/utils.d.ts +1 -6
  119. package/dist/src/core/utils.js +3 -2
  120. package/dist/src/core/utils.js.map +1 -1
  121. package/dist/src/main-api/ICoreDriver.d.ts +2 -1
  122. package/dist/src/main-api/RendererMain.d.ts +25 -0
  123. package/dist/src/main-api/RendererMain.js +14 -5
  124. package/dist/src/main-api/RendererMain.js.map +1 -1
  125. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +2 -1
  126. package/dist/src/render-drivers/main/MainCoreDriver.js +6 -4
  127. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
  128. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +10 -0
  129. package/dist/src/render-drivers/main/MainOnlyTextNode.js +45 -0
  130. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  131. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +10 -0
  132. package/dist/src/render-drivers/threadx/TextNodeStruct.js +45 -0
  133. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
  134. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +2 -1
  135. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +8 -1
  136. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  137. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +5 -0
  138. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +5 -0
  139. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -1
  140. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +4 -1
  141. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -1
  142. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +5 -0
  143. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +10 -0
  144. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  145. package/dist/src/render-drivers/threadx/worker/renderer.js +5 -3
  146. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  147. package/dist/src/utils.d.ts +2 -1
  148. package/dist/src/utils.js +22 -3
  149. package/dist/src/utils.js.map +1 -1
  150. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  151. package/package.json +3 -2
  152. package/src/common/CommonTypes.ts +9 -0
  153. package/src/core/CoreNode.ts +325 -148
  154. package/src/core/CoreTextNode.ts +72 -0
  155. package/src/core/CoreTextureManager.ts +4 -2
  156. package/src/core/Stage.ts +60 -34
  157. package/src/core/animations/CoreAnimation.ts +11 -2
  158. package/src/core/lib/ContextSpy.ts +41 -0
  159. package/src/core/lib/ImageWorker.ts +124 -0
  160. package/src/core/lib/WebGlContextWrapper.ts +965 -0
  161. package/src/core/platform.ts +5 -0
  162. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +3 -2
  163. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +29 -28
  164. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +10 -14
  165. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +34 -63
  166. package/src/core/renderers/webgl/WebGlCoreShader.ts +34 -25
  167. package/src/core/renderers/webgl/internal/RendererUtils.ts +13 -16
  168. package/src/core/renderers/webgl/internal/ShaderUtils.ts +16 -15
  169. package/src/core/renderers/webgl/shaders/DefaultShader.ts +3 -7
  170. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +3 -3
  171. package/src/core/renderers/webgl/shaders/DynamicShader.ts +42 -14
  172. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +3 -3
  173. package/src/core/renderers/webgl/shaders/SdfShader.ts +3 -3
  174. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +1 -1
  175. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +35 -5
  176. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +7 -8
  177. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +9 -3
  178. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +4 -2
  179. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +44 -15
  180. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +7 -7
  181. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +115 -63
  182. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +26 -18
  183. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +40 -28
  184. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +6 -1
  185. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
  186. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/{makeRenderWindow.ts → setRenderWindow.ts} +50 -21
  187. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
  188. package/src/core/text-rendering/renderers/TextRenderer.ts +73 -0
  189. package/src/core/textures/ImageTexture.ts +17 -9
  190. package/src/core/utils.ts +87 -85
  191. package/src/env.d.ts +7 -0
  192. package/src/main-api/ICoreDriver.ts +2 -1
  193. package/src/main-api/RendererMain.ts +43 -5
  194. package/src/render-drivers/main/MainCoreDriver.ts +8 -5
  195. package/src/render-drivers/main/MainOnlyTextNode.ts +55 -1
  196. package/src/render-drivers/threadx/TextNodeStruct.ts +45 -0
  197. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +10 -2
  198. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +10 -0
  199. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +5 -1
  200. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +15 -0
  201. package/src/render-drivers/threadx/worker/renderer.ts +6 -4
  202. package/src/utils.ts +25 -4
  203. package/src/core/scene/Scene.ts +0 -120
  204. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.test.ts +0 -136
@@ -26,6 +26,11 @@ export const startLoop = (stage: Stage) => {
26
26
  const runLoop = () => {
27
27
  stage.updateAnimations();
28
28
 
29
+ if (!stage.hasSceneUpdates()) {
30
+ setTimeout(runLoop, 16.666666666666668);
31
+ return;
32
+ }
33
+
29
34
  stage.drawFrame();
30
35
  requestAnimationFrame(runLoop);
31
36
  };
@@ -18,12 +18,13 @@
18
18
  */
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
+ import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
21
22
  import type { SubTexture } from '../../textures/SubTexture.js';
22
23
  import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
23
24
 
24
25
  export class WebGlCoreCtxSubTexture extends WebGlCoreCtxTexture {
25
- constructor(gl: WebGLRenderingContext, textureSource: SubTexture) {
26
- super(gl, textureSource);
26
+ constructor(glw: WebGlContextWrapper, textureSource: SubTexture) {
27
+ super(glw, textureSource);
27
28
  }
28
29
 
29
30
  override async onLoadRequest(): Promise<Dimensions> {
@@ -19,10 +19,10 @@
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
21
  import { assertTruthy } from '../../../utils.js';
22
+ import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
22
23
  import type { Texture } from '../../textures/Texture.js';
23
24
  import { isPowerOfTwo } from '../../utils.js';
24
25
  import { CoreContextTexture } from '../CoreContextTexture.js';
25
- import { isWebGl2 } from './internal/WebGlUtils.js';
26
26
 
27
27
  const TRANSPARENT_TEXTURE_DATA = new Uint8Array([0, 0, 0, 0]);
28
28
 
@@ -43,7 +43,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
43
43
  private _w = 0;
44
44
  private _h = 0;
45
45
 
46
- constructor(protected gl: WebGLRenderingContext, textureSource: Texture) {
46
+ constructor(protected glw: WebGlContextWrapper, textureSource: Texture) {
47
47
  super(textureSource);
48
48
  }
49
49
 
@@ -100,30 +100,29 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
100
100
  */
101
101
  async onLoadRequest(): Promise<Dimensions> {
102
102
  this._nativeCtxTexture = this.createNativeCtxTexture();
103
- const { gl } = this;
103
+ const { glw } = this;
104
104
 
105
105
  // On initial load request, create a 1x1 transparent texture to use until
106
106
  // the texture data is finally loaded.
107
- gl.bindTexture(gl.TEXTURE_2D, this._nativeCtxTexture);
107
+ glw.activeTexture(0);
108
+ glw.bindTexture(this._nativeCtxTexture);
108
109
 
109
110
  // linear texture filtering
110
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
111
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
111
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
112
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
112
113
 
113
114
  // texture wrapping method
114
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
115
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
115
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
116
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
116
117
 
117
- gl.bindTexture(gl.TEXTURE_2D, this._nativeCtxTexture);
118
- gl.texImage2D(
119
- gl.TEXTURE_2D,
118
+ glw.texImage2D(
120
119
  0,
121
- gl.RGBA,
120
+ glw.RGBA,
122
121
  1,
123
122
  1,
124
123
  0,
125
- gl.RGBA,
126
- gl.UNSIGNED_BYTE,
124
+ glw.RGBA,
125
+ glw.UNSIGNED_BYTE,
127
126
  TRANSPARENT_TEXTURE_DATA,
128
127
  );
129
128
 
@@ -131,6 +130,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
131
130
  let width = 0;
132
131
  let height = 0;
133
132
  assertTruthy(this._nativeCtxTexture);
133
+ glw.activeTexture(0);
134
134
  // If textureData is null, the texture is empty (0, 0) and we don't need to
135
135
  // upload any data to the GPU.
136
136
  if (
@@ -140,33 +140,32 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
140
140
  const data = textureData.data;
141
141
  width = data.width;
142
142
  height = data.height;
143
- gl.bindTexture(gl.TEXTURE_2D, this._nativeCtxTexture);
143
+ glw.bindTexture(this._nativeCtxTexture);
144
144
 
145
- gl.pixelStorei(
146
- gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
145
+ glw.pixelStorei(
146
+ glw.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
147
147
  !!textureData.premultiplyAlpha,
148
148
  );
149
149
 
150
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, data);
150
+ glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, data);
151
151
 
152
152
  // generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
153
- if (isWebGl2(gl) || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
154
- gl.generateMipmap(gl.TEXTURE_2D);
153
+ if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
154
+ glw.generateMipmap();
155
155
  }
156
156
  } else if (textureData.data === null) {
157
157
  width = 0;
158
158
  height = 0;
159
159
  // Reset to a 1x1 transparent texture
160
- gl.bindTexture(gl.TEXTURE_2D, this._nativeCtxTexture);
161
- gl.texImage2D(
162
- gl.TEXTURE_2D,
160
+ glw.bindTexture(this._nativeCtxTexture);
161
+ glw.texImage2D(
163
162
  0,
164
- gl.RGBA,
163
+ glw.RGBA,
165
164
  1,
166
165
  1,
167
166
  0,
168
- gl.RGBA,
169
- gl.UNSIGNED_BYTE,
167
+ glw.RGBA,
168
+ glw.UNSIGNED_BYTE,
170
169
  TRANSPARENT_TEXTURE_DATA,
171
170
  );
172
171
  } else {
@@ -196,12 +195,14 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
196
195
  if (!this._nativeCtxTexture) {
197
196
  return;
198
197
  }
199
- this.gl.deleteTexture(this._nativeCtxTexture);
198
+ const { glw } = this;
199
+ glw.deleteTexture(this._nativeCtxTexture);
200
200
  this._nativeCtxTexture = null;
201
201
  }
202
202
 
203
203
  private createNativeCtxTexture() {
204
- const nativeTexture = this.gl.createTexture();
204
+ const { glw } = this;
205
+ const nativeTexture = glw.createTexture();
205
206
  if (!nativeTexture) {
206
207
  throw new Error('Could not create WebGL Texture');
207
208
  }
@@ -24,6 +24,7 @@ import type { WebGlCoreRendererOptions } from './WebGlCoreRenderer.js';
24
24
  import type { BufferCollection } from './internal/BufferCollection.js';
25
25
  import type { Dimensions } from '../../../common/CommonTypes.js';
26
26
  import type { Rect } from '../../lib/utils.js';
27
+ import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
27
28
 
28
29
  const MAX_TEXTURES = 8; // TODO: get from gl
29
30
 
@@ -38,7 +39,7 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
38
39
  readonly maxTextures: number;
39
40
 
40
41
  constructor(
41
- readonly gl: WebGLRenderingContext | WebGL2RenderingContext,
42
+ readonly glw: WebGlContextWrapper,
42
43
  readonly options: WebGlCoreRendererOptions,
43
44
  readonly buffers: BufferCollection,
44
45
  readonly shader: WebGlCoreShader,
@@ -50,9 +51,8 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
50
51
  readonly zIndex: number,
51
52
  ) {
52
53
  super();
53
- this.gl = gl;
54
54
  this.maxTextures = shader.supportsIndexedTextures
55
- ? (gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) as number)
55
+ ? (glw.getParameter(glw.MAX_VERTEX_TEXTURE_IMAGE_UNITS) as number)
56
56
  : 1;
57
57
  }
58
58
 
@@ -71,7 +71,7 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
71
71
  }
72
72
 
73
73
  draw() {
74
- const { gl, shader, shaderProps, options } = this;
74
+ const { glw, shader, shaderProps, options } = this;
75
75
  // shaderOp.draw(this);
76
76
 
77
77
  const { shManager } = options;
@@ -81,10 +81,6 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
81
81
  // TODO: Reduce calculations required
82
82
  const quadIdx = (this.bufferIdx / 24) * 6 * 2;
83
83
 
84
- // TODO: Move these somewhere else?
85
- gl.enable(gl.BLEND);
86
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
87
-
88
84
  // Clipping
89
85
  if (this.clippingRect) {
90
86
  const { x, y, width, height } = this.clippingRect;
@@ -95,16 +91,16 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
95
91
  const clipWidth = Math.round(width * pixelRatio);
96
92
  const clipHeight = Math.round(height * pixelRatio);
97
93
  const clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
98
- gl.enable(gl.SCISSOR_TEST);
99
- gl.scissor(clipX, clipY, clipWidth, clipHeight);
94
+ glw.setScissorTest(true);
95
+ glw.scissor(clipX, clipY, clipWidth, clipHeight);
100
96
  } else {
101
- gl.disable(gl.SCISSOR_TEST);
97
+ glw.setScissorTest(false);
102
98
  }
103
99
 
104
- gl.drawElements(
105
- gl.TRIANGLES,
100
+ glw.drawElements(
101
+ glw.TRIANGLES,
106
102
  6 * this.numQuads,
107
- gl.UNSIGNED_SHORT,
103
+ glw.UNSIGNED_SHORT,
108
104
  quadIdx,
109
105
  );
110
106
  }
@@ -54,6 +54,8 @@ import {
54
54
  import type { Dimensions } from '../../../common/CommonTypes.js';
55
55
  import { WebGlCoreShader } from './WebGlCoreShader.js';
56
56
  import { RoundedRectangle } from './shaders/RoundedRectangle.js';
57
+ import { ContextSpy } from '../../lib/ContextSpy.js';
58
+ import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
57
59
 
58
60
  const WORDS_PER_QUAD = 24;
59
61
  const BYTES_PER_QUAD = WORDS_PER_QUAD * 4;
@@ -66,6 +68,7 @@ export interface WebGlCoreRendererOptions {
66
68
  shManager: CoreShaderManager;
67
69
  clearColor: number;
68
70
  bufferMemory: number;
71
+ contextSpy: ContextSpy | null;
69
72
  }
70
73
 
71
74
  interface CoreWebGlSystem {
@@ -75,7 +78,7 @@ interface CoreWebGlSystem {
75
78
 
76
79
  export class WebGlCoreRenderer extends CoreRenderer {
77
80
  //// WebGL Native Context and Data
78
- gl: WebGLRenderingContext;
81
+ glw: WebGlContextWrapper;
79
82
  system: CoreWebGlSystem;
80
83
 
81
84
  //// Core Managers
@@ -113,25 +116,24 @@ export class WebGlCoreRenderer extends CoreRenderer {
113
116
  this.shManager = options.shManager;
114
117
  this.defaultTexture = new ColorTexture(this.txManager);
115
118
 
116
- const gl = createWebGLContext(canvas);
117
- if (!gl) {
118
- throw new Error('Unable to create WebGL context');
119
- }
120
- this.gl = gl;
119
+ const gl = createWebGLContext(canvas, options.contextSpy);
120
+ const glw = (this.glw = new WebGlContextWrapper(gl));
121
121
 
122
122
  const color = getNormalizedRgbaComponents(clearColor);
123
- gl.viewport(0, 0, canvas.width, canvas.height);
124
- gl.clearColor(color[0]!, color[1]!, color[2]!, color[3]!);
123
+ glw.viewport(0, 0, canvas.width, canvas.height);
124
+ glw.clearColor(color[0]!, color[1]!, color[2]!, color[3]!);
125
+ glw.setBlend(true);
126
+ glw.blendFunc(glw.ONE, glw.ONE_MINUS_SRC_ALPHA);
125
127
 
126
- createIndexBuffer(gl, bufferMemory);
128
+ createIndexBuffer(glw, bufferMemory);
127
129
 
128
130
  this.system = {
129
- parameters: getWebGlParameters(gl),
130
- extensions: getWebGlExtensions(gl),
131
+ parameters: getWebGlParameters(this.glw),
132
+ extensions: getWebGlExtensions(this.glw),
131
133
  };
132
134
  this.shManager.renderer = this;
133
135
  this.defaultShader = this.shManager.loadShader('DefaultShader').shader;
134
- const quadBuffer = gl.createBuffer();
136
+ const quadBuffer = glw.createBuffer();
135
137
  assertTruthy(quadBuffer);
136
138
  const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
137
139
  this.quadBufferCollection = new BufferCollection([
@@ -141,7 +143,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
141
143
  a_position: {
142
144
  name: 'a_position',
143
145
  size: 2, // 2 components per iteration
144
- type: gl.FLOAT, // the data is 32bit floats
146
+ type: glw.FLOAT, // the data is 32bit floats
145
147
  normalized: false, // don't normalize the data
146
148
  stride, // 0 = move forward size * sizeof(type) each iteration to get the next position
147
149
  offset: 0, // start at the beginning of the buffer
@@ -149,7 +151,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
149
151
  a_textureCoordinate: {
150
152
  name: 'a_textureCoordinate',
151
153
  size: 2,
152
- type: gl.FLOAT,
154
+ type: glw.FLOAT,
153
155
  normalized: false,
154
156
  stride,
155
157
  offset: 2 * Float32Array.BYTES_PER_ELEMENT,
@@ -157,7 +159,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
157
159
  a_color: {
158
160
  name: 'a_color',
159
161
  size: 4,
160
- type: gl.UNSIGNED_BYTE,
162
+ type: glw.UNSIGNED_BYTE,
161
163
  normalized: true,
162
164
  stride,
163
165
  offset: 4 * Float32Array.BYTES_PER_ELEMENT,
@@ -165,7 +167,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
165
167
  a_textureIndex: {
166
168
  name: 'a_textureIndex',
167
169
  size: 1,
168
- type: gl.FLOAT,
170
+ type: glw.FLOAT,
169
171
  normalized: false,
170
172
  stride,
171
173
  offset: 5 * Float32Array.BYTES_PER_ELEMENT,
@@ -176,10 +178,12 @@ export class WebGlCoreRenderer extends CoreRenderer {
176
178
  }
177
179
 
178
180
  reset() {
181
+ const { glw } = this;
179
182
  this.curBufferIdx = 0;
180
183
  this.curRenderOp = null;
181
184
  this.renderOps.length = 0;
182
- this.gl.clear(this.gl.COLOR_BUFFER_BIT);
185
+ glw.setScissorTest(false);
186
+ glw.clear();
183
187
  }
184
188
 
185
189
  override getShaderManager(): CoreShaderManager {
@@ -188,9 +192,9 @@ export class WebGlCoreRenderer extends CoreRenderer {
188
192
 
189
193
  override createCtxTexture(textureSource: Texture): CoreContextTexture {
190
194
  if (textureSource instanceof SubTexture) {
191
- return new WebGlCoreCtxSubTexture(this.gl, textureSource);
195
+ return new WebGlCoreCtxSubTexture(this.glw, textureSource);
192
196
  }
193
- return new WebGlCoreCtxTexture(this.gl, textureSource);
197
+ return new WebGlCoreCtxTexture(this.glw, textureSource);
194
198
  }
195
199
 
196
200
  /**
@@ -325,11 +329,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
325
329
  fQuadBuffer[bufferIdx++] = ty; // vertexY
326
330
  fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
327
331
  fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
328
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
329
- colorTl,
330
- alpha,
331
- true,
332
- ); // color
332
+ uiQuadBuffer[bufferIdx++] = colorTl; // color
333
333
  fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
334
334
 
335
335
  // Upper-Right
@@ -337,11 +337,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
337
337
  fQuadBuffer[bufferIdx++] = ty + width * tc;
338
338
  fQuadBuffer[bufferIdx++] = texCoordX2;
339
339
  fQuadBuffer[bufferIdx++] = texCoordY1;
340
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
341
- colorTr,
342
- alpha,
343
- true,
344
- );
340
+ uiQuadBuffer[bufferIdx++] = colorTr;
345
341
  fQuadBuffer[bufferIdx++] = textureIdx;
346
342
 
347
343
  // Lower-Left
@@ -349,11 +345,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
349
345
  fQuadBuffer[bufferIdx++] = ty + height * td;
350
346
  fQuadBuffer[bufferIdx++] = texCoordX1;
351
347
  fQuadBuffer[bufferIdx++] = texCoordY2;
352
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
353
- colorBl,
354
- alpha,
355
- true,
356
- );
348
+ uiQuadBuffer[bufferIdx++] = colorBl;
357
349
  fQuadBuffer[bufferIdx++] = textureIdx;
358
350
 
359
351
  // Lower-Right
@@ -361,11 +353,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
361
353
  fQuadBuffer[bufferIdx++] = ty + width * tc + height * td;
362
354
  fQuadBuffer[bufferIdx++] = texCoordX2;
363
355
  fQuadBuffer[bufferIdx++] = texCoordY2;
364
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
365
- colorBr,
366
- alpha,
367
- true,
368
- );
356
+ uiQuadBuffer[bufferIdx++] = colorBr;
369
357
  fQuadBuffer[bufferIdx++] = textureIdx;
370
358
  } else {
371
359
  // Calculate the right corner of the quad
@@ -378,11 +366,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
378
366
  fQuadBuffer[bufferIdx++] = ty; // vertexY
379
367
  fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
380
368
  fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
381
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
382
- colorTl,
383
- alpha,
384
- true,
385
- ); // color
369
+ uiQuadBuffer[bufferIdx++] = colorTl; // color
386
370
  fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
387
371
 
388
372
  // Upper-Right
@@ -390,11 +374,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
390
374
  fQuadBuffer[bufferIdx++] = ty;
391
375
  fQuadBuffer[bufferIdx++] = texCoordX2;
392
376
  fQuadBuffer[bufferIdx++] = texCoordY1;
393
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
394
- colorTr,
395
- alpha,
396
- true,
397
- );
377
+ uiQuadBuffer[bufferIdx++] = colorTr;
398
378
  fQuadBuffer[bufferIdx++] = textureIdx;
399
379
 
400
380
  // Lower-Left
@@ -402,11 +382,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
402
382
  fQuadBuffer[bufferIdx++] = rightCornerY;
403
383
  fQuadBuffer[bufferIdx++] = texCoordX1;
404
384
  fQuadBuffer[bufferIdx++] = texCoordY2;
405
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
406
- colorBl,
407
- alpha,
408
- true,
409
- );
385
+ uiQuadBuffer[bufferIdx++] = colorBl;
410
386
  fQuadBuffer[bufferIdx++] = textureIdx;
411
387
 
412
388
  // Lower-Right
@@ -414,11 +390,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
414
390
  fQuadBuffer[bufferIdx++] = rightCornerY;
415
391
  fQuadBuffer[bufferIdx++] = texCoordX2;
416
392
  fQuadBuffer[bufferIdx++] = texCoordY2;
417
- uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied(
418
- colorBr,
419
- alpha,
420
- true,
421
- );
393
+ uiQuadBuffer[bufferIdx++] = colorBr;
422
394
  fQuadBuffer[bufferIdx++] = textureIdx;
423
395
  }
424
396
 
@@ -444,7 +416,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
444
416
  bufferIdx: number,
445
417
  ) {
446
418
  const curRenderOp = new WebGlCoreRenderOp(
447
- this.gl,
419
+ this.glw,
448
420
  this.options,
449
421
  this.quadBufferCollection,
450
422
  shader,
@@ -516,13 +488,12 @@ export class WebGlCoreRenderer extends CoreRenderer {
516
488
  * @param surface
517
489
  */
518
490
  render(surface: 'screen' | CoreContextTexture = 'screen'): void {
519
- const { gl, quadBuffer } = this;
491
+ const { glw, quadBuffer } = this;
520
492
 
521
493
  const arr = new Float32Array(quadBuffer, 0, this.curBufferIdx);
522
494
 
523
495
  const buffer = this.quadBufferCollection.getBuffer('a_position') ?? null;
524
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
525
- gl.bufferData(gl.ARRAY_BUFFER, arr, gl.DYNAMIC_DRAW);
496
+ glw.arrayBufferData(buffer, arr, glw.STATIC_DRAW);
526
497
 
527
498
  const doLog = false; // idx++ % 100 === 0;
528
499
  if (doLog) {
@@ -19,6 +19,7 @@
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
21
  import { assertTruthy, hasOwn } from '../../../utils.js';
22
+ import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
22
23
  import { CoreShader } from '../CoreShader.js';
23
24
  import type { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
24
25
  import type { WebGlCoreRenderOp } from './WebGlCoreRenderOp.js';
@@ -76,7 +77,7 @@ export abstract class WebGlCoreShader extends CoreShader {
76
77
  */
77
78
  protected vao: WebGLVertexArrayObject | undefined;
78
79
  protected renderer: WebGlCoreRenderer;
79
- protected gl: WebGLRenderingContext;
80
+ protected glw: WebGlContextWrapper;
80
81
  protected attributeBuffers: Record<string, WebGLBuffer>;
81
82
  protected attributeLocations: Record<string, number>;
82
83
  protected attributeNames: string[];
@@ -87,18 +88,18 @@ export abstract class WebGlCoreShader extends CoreShader {
87
88
  constructor(options: ShaderOptions) {
88
89
  super();
89
90
  const renderer = (this.renderer = options.renderer);
90
- const gl = (this.gl = this.renderer.gl);
91
+ const glw = (this.glw = this.renderer.glw);
91
92
  this.supportsIndexedTextures = options.supportsIndexedTextures || false;
92
93
 
93
94
  // Check that extensions are supported
94
- const webGl2 = isWebGl2(gl);
95
+ const webGl2 = glw.isWebGl2();
95
96
  const requiredExtensions =
96
97
  (webGl2 && options.webgl2Extensions) ||
97
98
  (!webGl2 && options.webgl1Extensions) ||
98
99
  [];
99
100
  const glVersion = webGl2 ? '2.0' : '1.0';
100
101
  requiredExtensions.forEach((extensionName) => {
101
- if (!gl.getExtension(extensionName)) {
102
+ if (!glw.getExtension(extensionName)) {
102
103
  throw new Error(
103
104
  `Shader "${this.constructor.name}" requires extension "${extensionName}" for WebGL ${glVersion} but wasn't found`,
104
105
  );
@@ -136,26 +137,30 @@ export abstract class WebGlCoreShader extends CoreShader {
136
137
  ? shaderSources.fragment(textureUnits)
137
138
  : shaderSources.fragment;
138
139
 
139
- const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);
140
- const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
140
+ const vertexShader = createShader(glw, glw.VERTEX_SHADER, vertexSource);
141
+ const fragmentShader = createShader(
142
+ glw,
143
+ glw.FRAGMENT_SHADER,
144
+ fragmentSource,
145
+ );
141
146
  if (!vertexShader || !fragmentShader) {
142
147
  throw new Error();
143
148
  }
144
149
 
145
- const program = createProgram(gl, vertexShader, fragmentShader);
150
+ const program = createProgram(glw, vertexShader, fragmentShader);
146
151
  if (!program) {
147
152
  throw new Error();
148
153
  }
149
154
  this.program = program;
150
155
 
151
156
  if (webGl2) {
152
- const vao = gl.createVertexArray();
157
+ const vao = glw.createVertexArray();
153
158
  if (!vao) {
154
159
  throw new Error();
155
160
  }
156
161
  this.vao = vao;
157
162
 
158
- gl.bindVertexArray(this.vao);
163
+ glw.bindVertexArray(this.vao);
159
164
  }
160
165
 
161
166
  this.attributeLocations = {} as Record<string, number>;
@@ -163,13 +168,13 @@ export abstract class WebGlCoreShader extends CoreShader {
163
168
  this.attributeNames = [];
164
169
 
165
170
  [...options.attributes].forEach((attributeName) => {
166
- const location = gl.getAttribLocation(this.program, attributeName);
171
+ const location = glw.getAttribLocation(this.program, attributeName);
167
172
  if (location < 0) {
168
173
  throw new Error(
169
174
  `${this.constructor.name}: Vertex shader must have an attribute "${attributeName}"!`,
170
175
  );
171
176
  }
172
- const buffer = gl.createBuffer();
177
+ const buffer = glw.createBuffer();
173
178
  if (!buffer) {
174
179
  throw new Error(
175
180
  `${this.constructor.name}: Could not create buffer for attribute "${attributeName}"`,
@@ -184,7 +189,7 @@ export abstract class WebGlCoreShader extends CoreShader {
184
189
  this.uniformLocations = {} as Record<string, WebGLRenderingContext>;
185
190
  this.uniformTypes = {} as Record<string, keyof UniformMethodMap>;
186
191
  options.uniforms.forEach((uniform: UniformInfo) => {
187
- const location = gl.getUniformLocation(this.program, uniform.name);
192
+ const location = glw.getUniformLocation(this.program, uniform.name);
188
193
  this.uniformTypes[uniform.name] = uniform.uniform;
189
194
  if (!location) {
190
195
  console.warn(
@@ -201,12 +206,11 @@ export abstract class WebGlCoreShader extends CoreShader {
201
206
  buffer: WebGLBuffer,
202
207
  attribute: AttributeInfo,
203
208
  ) {
204
- const gl = this.gl;
205
- gl.enableVertexAttribArray(location);
206
-
207
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
209
+ const { glw } = this;
210
+ glw.enableVertexAttribArray(location);
208
211
 
209
- gl.vertexAttribPointer(
212
+ glw.vertexAttribPointer(
213
+ buffer,
210
214
  location,
211
215
  attribute.size,
212
216
  attribute.type,
@@ -217,7 +221,7 @@ export abstract class WebGlCoreShader extends CoreShader {
217
221
  }
218
222
 
219
223
  disableAttribute(location: number) {
220
- this.gl.disableVertexAttribArray(location);
224
+ this.glw.disableVertexAttribArray(location);
221
225
  }
222
226
 
223
227
  disableAttributes() {
@@ -257,9 +261,9 @@ export abstract class WebGlCoreShader extends CoreShader {
257
261
  if (renderOp.textures.length > 0) {
258
262
  this.bindTextures(renderOp.textures);
259
263
  }
260
- const { gl } = renderOp;
264
+ const { glw } = renderOp;
261
265
  // Bind standard automatic uniforms
262
- this.setUniform('u_resolution', [gl.canvas.width, gl.canvas.height]); // !!!
266
+ this.setUniform('u_resolution', [glw.canvas.width, glw.canvas.height]);
263
267
  this.setUniform('u_pixelRatio', renderOp.options.pixelRatio);
264
268
  if (props) {
265
269
  // Bind optional automatic uniforms
@@ -283,8 +287,12 @@ export abstract class WebGlCoreShader extends CoreShader {
283
287
  }
284
288
 
285
289
  setUniform(name: string, ...value: any[]): void {
286
- // @ts-expect-error Typing of args is too funky apparently for TS
287
- this.gl[this.uniformTypes[name]](this.uniformLocations[name], ...value);
290
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unsafe-argument
291
+ this.glw.setUniform(
292
+ this.uniformTypes[name]!,
293
+ this.uniformLocations[name]!,
294
+ ...(value as any),
295
+ );
288
296
  }
289
297
 
290
298
  bindBufferCollection(buffer: BufferCollection) {
@@ -314,9 +322,10 @@ export abstract class WebGlCoreShader extends CoreShader {
314
322
  }
315
323
 
316
324
  override attach(): void {
317
- this.gl.useProgram(this.program);
318
- if (isWebGl2(this.gl) && this.vao) {
319
- this.gl.bindVertexArray(this.vao);
325
+ this.glw.useProgram(this.program);
326
+ this.glw.useProgram(this.program);
327
+ if (this.glw.isWebGl2() && this.vao) {
328
+ this.glw.bindVertexArray(this.vao);
320
329
  }
321
330
  }
322
331