@lightningjs/renderer 0.8.3 → 0.8.4

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 (133) hide show
  1. package/dist/src/core/CoreNode.d.ts +27 -1
  2. package/dist/src/core/CoreNode.js +130 -5
  3. package/dist/src/core/CoreNode.js.map +1 -1
  4. package/dist/src/core/CoreShaderManager.js +3 -2
  5. package/dist/src/core/CoreShaderManager.js.map +1 -1
  6. package/dist/src/core/CoreTextNode.js +20 -1
  7. package/dist/src/core/CoreTextNode.js.map +1 -1
  8. package/dist/src/core/CoreTextureManager.d.ts +2 -0
  9. package/dist/src/core/CoreTextureManager.js +2 -0
  10. package/dist/src/core/CoreTextureManager.js.map +1 -1
  11. package/dist/src/core/Stage.js +25 -9
  12. package/dist/src/core/Stage.js.map +1 -1
  13. package/dist/src/core/TextureMemoryManager.d.ts +1 -0
  14. package/dist/src/core/TextureMemoryManager.js +3 -1
  15. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  16. package/dist/src/core/lib/ImageWorker.d.ts +2 -1
  17. package/dist/src/core/lib/ImageWorker.js +10 -6
  18. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  19. package/dist/src/core/lib/WebGlContextWrapper.d.ts +26 -1
  20. package/dist/src/core/lib/WebGlContextWrapper.js +37 -1
  21. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  22. package/dist/src/core/renderers/CoreRenderer.d.ts +11 -0
  23. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  24. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +10 -4
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +18 -7
  27. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -2
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +8 -6
  30. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  31. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -1
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +1 -1
  33. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  34. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +4 -4
  35. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  36. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +1 -1
  37. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +2 -2
  38. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -1
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +11 -0
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +51 -0
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +11 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +22 -11
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  45. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +4 -1
  46. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +7 -2
  47. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +16 -1
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +119 -27
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +19 -4
  52. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +4 -6
  54. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  55. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +6 -1
  56. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  57. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  58. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  59. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  60. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -1
  61. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +4 -3
  62. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  63. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +2 -1
  64. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  65. package/dist/src/core/textures/RenderTexture.d.ts +28 -0
  66. package/dist/src/core/textures/RenderTexture.js +52 -0
  67. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  68. package/dist/src/core/utils.d.ts +6 -1
  69. package/dist/src/core/utils.js +74 -82
  70. package/dist/src/core/utils.js.map +1 -1
  71. package/dist/src/main-api/INode.d.ts +9 -0
  72. package/dist/src/main-api/RendererMain.js +2 -1
  73. package/dist/src/main-api/RendererMain.js.map +1 -1
  74. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +3 -0
  75. package/dist/src/render-drivers/main/MainOnlyNode.js +29 -0
  76. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  77. package/dist/src/render-drivers/main/MainOnlyTextNode.js +1 -0
  78. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  79. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +3 -0
  80. package/dist/src/render-drivers/threadx/NodeStruct.js +9 -0
  81. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
  82. package/dist/src/render-drivers/threadx/SharedNode.d.ts +1 -0
  83. package/dist/src/render-drivers/threadx/SharedNode.js +1 -0
  84. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
  85. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -0
  86. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  87. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +3 -0
  88. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +7 -0
  89. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
  90. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +1 -0
  91. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  92. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +1 -0
  93. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  94. package/dist/src/render-drivers/threadx/worker/renderer.js +1 -0
  95. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  96. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  97. package/package.json +1 -1
  98. package/src/core/CoreNode.ts +164 -8
  99. package/src/core/CoreShaderManager.ts +6 -3
  100. package/src/core/CoreTextNode.ts +25 -0
  101. package/src/core/CoreTextureManager.ts +3 -0
  102. package/src/core/Stage.ts +32 -11
  103. package/src/core/TextureMemoryManager.ts +3 -1
  104. package/src/core/lib/ImageWorker.ts +12 -7
  105. package/src/core/lib/WebGlContextWrapper.ts +51 -1
  106. package/src/core/renderers/CoreRenderer.ts +15 -1
  107. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +59 -14
  108. package/src/core/renderers/canvas/CanvasCoreTexture.ts +24 -18
  109. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +6 -3
  110. package/src/core/renderers/canvas/internal/ColorUtils.ts +6 -6
  111. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +2 -3
  112. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +79 -0
  113. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +26 -24
  114. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +4 -2
  115. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +166 -33
  116. package/src/core/renderers/webgl/WebGlCoreShader.ts +29 -4
  117. package/src/core/renderers/webgl/shaders/DefaultShader.ts +4 -6
  118. package/src/core/renderers/webgl/shaders/SdfShader.ts +6 -1
  119. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +8 -1
  120. package/src/core/text-rendering/renderers/TextRenderer.ts +3 -0
  121. package/src/core/textures/RenderTexture.ts +81 -0
  122. package/src/core/utils.ts +101 -93
  123. package/src/main-api/INode.ts +11 -0
  124. package/src/main-api/RendererMain.ts +2 -1
  125. package/src/render-drivers/main/MainOnlyNode.ts +44 -0
  126. package/src/render-drivers/main/MainOnlyTextNode.ts +1 -0
  127. package/src/render-drivers/threadx/NodeStruct.ts +10 -0
  128. package/src/render-drivers/threadx/SharedNode.ts +2 -0
  129. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +2 -0
  130. package/src/render-drivers/threadx/ThreadXMainNode.ts +9 -0
  131. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +1 -0
  132. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +1 -0
  133. package/src/render-drivers/threadx/worker/renderer.ts +1 -0
@@ -17,23 +17,32 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import type { CoreShaderManager } from "../../CoreShaderManager.js";
21
- import { getRgbaComponents, type RGBA } from "../../lib/utils.js";
22
- import { SubTexture } from "../../textures/SubTexture.js";
23
- import type { Texture } from "../../textures/Texture.js";
24
- import type { CoreContextTexture } from "../CoreContextTexture.js";
25
- import { CoreRenderer, type CoreRendererOptions, type QuadOptions } from "../CoreRenderer.js";
26
- import { CanvasCoreTexture } from "./CanvasCoreTexture.js";
27
- import { getRadius } from "./internal/C2DShaderUtils.js";
28
- import { formatRgba, parseColor, type IParsedColor } from "./internal/ColorUtils.js";
20
+ import type { CoreNode } from '../../CoreNode.js';
21
+ import type { CoreShaderManager } from '../../CoreShaderManager.js';
22
+ import { getRgbaComponents, type RGBA } from '../../lib/utils.js';
23
+ import { SubTexture } from '../../textures/SubTexture.js';
24
+ import type { Texture } from '../../textures/Texture.js';
25
+ import type { CoreContextTexture } from '../CoreContextTexture.js';
26
+ import {
27
+ CoreRenderer,
28
+ type CoreRendererOptions,
29
+ type QuadOptions,
30
+ } from '../CoreRenderer.js';
31
+ import { CanvasCoreTexture } from './CanvasCoreTexture.js';
32
+ import { getRadius } from './internal/C2DShaderUtils.js';
33
+ import {
34
+ formatRgba,
35
+ parseColor,
36
+ type IParsedColor,
37
+ } from './internal/ColorUtils.js';
29
38
 
30
39
  export class CanvasCoreRenderer extends CoreRenderer {
31
-
32
40
  private context: CanvasRenderingContext2D;
33
41
  private canvas: HTMLCanvasElement;
34
42
  private pixelRatio: number;
35
43
  private clearColor: RGBA | undefined;
36
-
44
+ public renderToTextureActive = false;
45
+ activeRttNode: CoreNode | null = null;
37
46
  constructor(options: CoreRendererOptions) {
38
47
  super(options);
39
48
 
@@ -69,11 +78,25 @@ export class CanvasCoreRenderer extends CoreRenderer {
69
78
  addQuad(quad: QuadOptions): void {
70
79
  const ctx = this.context;
71
80
  const {
72
- tx, ty, width, height, alpha, colorTl, colorTr, colorBr, ta, tb, tc, td, clippingRect
81
+ tx,
82
+ ty,
83
+ width,
84
+ height,
85
+ alpha,
86
+ colorTl,
87
+ colorTr,
88
+ colorBr,
89
+ ta,
90
+ tb,
91
+ tc,
92
+ td,
93
+ clippingRect,
73
94
  } = quad;
74
95
  let texture = quad.texture;
75
96
  let ctxTexture: CanvasCoreTexture | undefined = undefined;
76
- let frame: { x: number, y: number, width: number, height: number } | undefined;
97
+ let frame:
98
+ | { x: number; y: number; width: number; height: number }
99
+ | undefined;
77
100
 
78
101
  if (texture) {
79
102
  if (texture instanceof SubTexture) {
@@ -133,7 +156,17 @@ export class CanvasCoreRenderer extends CoreRenderer {
133
156
  const image = ctxTexture.getImage(color);
134
157
  ctx.globalAlpha = alpha;
135
158
  if (frame) {
136
- ctx.drawImage(image, frame.x, frame.y, frame.width, frame.height, tx, ty, width, height);
159
+ ctx.drawImage(
160
+ image,
161
+ frame.x,
162
+ frame.y,
163
+ frame.width,
164
+ frame.height,
165
+ tx,
166
+ ty,
167
+ width,
168
+ height,
169
+ );
137
170
  } else {
138
171
  ctx.drawImage(image, tx, ty, width, height);
139
172
  }
@@ -175,4 +208,16 @@ export class CanvasCoreRenderer extends CoreRenderer {
175
208
  getShaderManager(): CoreShaderManager {
176
209
  return this.shManager;
177
210
  }
211
+
212
+ renderRTTNodes(): void {
213
+ // noop
214
+ }
215
+
216
+ removeRTTNode(node: CoreNode): void {
217
+ // noop
218
+ }
219
+
220
+ renderToTexture(node: CoreNode): void {
221
+ // noop
222
+ }
178
223
  }
@@ -17,30 +17,33 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import type { Dimensions } from "../../../common/CommonTypes.js";
21
- import { assertTruthy } from "../../../utils.js";
22
- import { CoreContextTexture } from "../CoreContextTexture.js";
23
- import { formatRgba, type IParsedColor } from "./internal/ColorUtils.js";
20
+ import type { Dimensions } from '../../../common/CommonTypes.js';
21
+ import { assertTruthy } from '../../../utils.js';
22
+ import { CoreContextTexture } from '../CoreContextTexture.js';
23
+ import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
24
 
25
25
  export class CanvasCoreTexture extends CoreContextTexture {
26
-
27
26
  protected image: ImageBitmap | HTMLCanvasElement | undefined;
28
- protected tintCache: {
29
- key: string;
30
- image: HTMLCanvasElement
31
- } | undefined;
27
+ protected tintCache:
28
+ | {
29
+ key: string;
30
+ image: HTMLCanvasElement;
31
+ }
32
+ | undefined;
32
33
 
33
34
  load(): void {
34
35
  if (this.textureSource.state !== 'freed') {
35
36
  return;
36
37
  }
37
38
  this.textureSource.setState('loading');
38
- this.onLoadRequest().then((size) => {
39
- this.textureSource.setState('loaded', size);
40
- this.updateMemSize();
41
- }).catch((err) => {
42
- this.textureSource.setState('failed', err as Error);
43
- });
39
+ this.onLoadRequest()
40
+ .then((size) => {
41
+ this.textureSource.setState('loaded', size);
42
+ this.updateMemSize();
43
+ })
44
+ .catch((err) => {
45
+ this.textureSource.setState('failed', err as Error);
46
+ });
44
47
  }
45
48
 
46
49
  free(): void {
@@ -84,13 +87,16 @@ export class CanvasCoreTexture extends CoreContextTexture {
84
87
  const tintedImage = this.tintTexture(image, key);
85
88
  this.tintCache = {
86
89
  key,
87
- image: tintedImage
88
- }
90
+ image: tintedImage,
91
+ };
89
92
  this.updateMemSize();
90
93
  return tintedImage;
91
94
  }
92
95
 
93
- protected tintTexture(source: ImageBitmap | HTMLCanvasElement, color: string) {
96
+ protected tintTexture(
97
+ source: ImageBitmap | HTMLCanvasElement,
98
+ color: string,
99
+ ) {
94
100
  const { width, height } = source;
95
101
  const canvas = document.createElement('canvas');
96
102
  canvas.width = width;
@@ -17,8 +17,11 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import type { QuadOptions } from "../../CoreRenderer.js";
21
- import { ROUNDED_RECTANGLE_SHADER_TYPE, UnsupportedShader } from "../shaders/UnsupportedShader.js";
20
+ import type { QuadOptions } from '../../CoreRenderer.js';
21
+ import {
22
+ ROUNDED_RECTANGLE_SHADER_TYPE,
23
+ UnsupportedShader,
24
+ } from '../shaders/UnsupportedShader.js';
22
25
 
23
26
  /**
24
27
  * Extract `RoundedRectangle` shader radius to apply as a clipping
@@ -27,7 +30,7 @@ export function getRadius(quad: QuadOptions): number {
27
30
  if (quad.shader instanceof UnsupportedShader) {
28
31
  const shType = quad.shader.shType;
29
32
  if (shType === ROUNDED_RECTANGLE_SHADER_TYPE) {
30
- return quad.shaderProps?.radius as number ?? 0;
33
+ return (quad.shaderProps?.radius as number) ?? 0;
31
34
  }
32
35
  }
33
36
  return 0;
@@ -30,8 +30,8 @@ const WHITE: IParsedColor = {
30
30
  a: 1,
31
31
  r: 0xff,
32
32
  g: 0xff,
33
- b: 0xff
34
- }
33
+ b: 0xff,
34
+ };
35
35
 
36
36
  /**
37
37
  * Extract color components
@@ -41,10 +41,10 @@ export function parseColor(abgr: number): IParsedColor {
41
41
  return WHITE;
42
42
  }
43
43
  const a = ((abgr >>> 24) & 0xff) / 255;
44
- const b = ((abgr >>> 16) & 0xff) & 0xff;
45
- const g = ((abgr >>> 8) & 0xff) & 0xff;
46
- const r = (abgr & 0xff) & 0xff;
47
- return { isWhite: false, a, r, g, b }
44
+ const b = (abgr >>> 16) & 0xff & 0xff;
45
+ const g = (abgr >>> 8) & 0xff & 0xff;
46
+ const r = abgr & 0xff & 0xff;
47
+ return { isWhite: false, a, r, g, b };
48
48
  }
49
49
 
50
50
  /**
@@ -17,12 +17,11 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import { CoreShader } from "../../CoreShader.js";
20
+ import { CoreShader } from '../../CoreShader.js';
21
21
 
22
- export const ROUNDED_RECTANGLE_SHADER_TYPE = "RoundedRectangle"
22
+ export const ROUNDED_RECTANGLE_SHADER_TYPE = 'RoundedRectangle';
23
23
 
24
24
  export class UnsupportedShader extends CoreShader {
25
-
26
25
  public shType: string;
27
26
 
28
27
  constructor(shType: string) {
@@ -0,0 +1,79 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2024 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+
20
+ import type { Dimensions } from '../../../common/CommonTypes.js';
21
+ import { assertTruthy } from '../../../utils.js';
22
+ import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
+ import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
+ import type { RenderTexture } from '../../textures/RenderTexture.js';
25
+ import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
26
+
27
+ export class WebGlCoreCtxRenderTexture extends WebGlCoreCtxTexture {
28
+ declare textureSource: RenderTexture;
29
+
30
+ readonly framebuffer: WebGLFramebuffer;
31
+
32
+ constructor(
33
+ glw: WebGlContextWrapper,
34
+ memManager: TextureMemoryManager,
35
+ textureSource: RenderTexture,
36
+ ) {
37
+ super(glw, memManager, textureSource);
38
+ // Create Framebuffer object
39
+ const framebuffer = glw.createFramebuffer();
40
+ assertTruthy(framebuffer, 'Unable to create framebuffer');
41
+ this.framebuffer = framebuffer;
42
+ }
43
+
44
+ override async onLoadRequest(): Promise<Dimensions> {
45
+ const { glw, memManager } = this;
46
+ const nativeTexture = (this._nativeCtxTexture =
47
+ this.createNativeCtxTexture());
48
+ const { width, height } = this.textureSource;
49
+
50
+ // Set the dimensions of the render texture
51
+ glw.texImage2D(
52
+ 0,
53
+ glw.RGBA,
54
+ width,
55
+ height,
56
+ 0,
57
+ glw.RGBA,
58
+ glw.UNSIGNED_BYTE,
59
+ null,
60
+ );
61
+
62
+ // Update the texture memory manager
63
+ memManager.setTextureMemUse(this, width * height * 4);
64
+
65
+ // Bind the framebuffer
66
+ glw.bindFramebuffer(this.framebuffer);
67
+
68
+ // Attach the texture to the framebuffer
69
+ glw.framebufferTexture2D(glw.COLOR_ATTACHMENT0, nativeTexture, 0);
70
+
71
+ // Unbind the framebuffer
72
+ glw.bindFramebuffer(null);
73
+
74
+ return {
75
+ width,
76
+ height,
77
+ };
78
+ }
79
+ }
@@ -115,29 +115,8 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
115
115
  async onLoadRequest(): Promise<Dimensions> {
116
116
  const { glw, memManager } = this;
117
117
 
118
- // On initial load request, create a 1x1 transparent texture to use until
119
- // the texture data is finally loaded.
120
- glw.activeTexture(0);
121
- glw.bindTexture(this._nativeCtxTexture);
122
-
123
- // linear texture filtering
124
- glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
125
- glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
126
-
127
- // texture wrapping method
128
- glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
129
- glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
130
-
131
- glw.texImage2D(
132
- 0,
133
- glw.RGBA,
134
- 1,
135
- 1,
136
- 0,
137
- glw.RGBA,
138
- glw.UNSIGNED_BYTE,
139
- TRANSPARENT_TEXTURE_DATA,
140
- );
118
+ // Set to a 1x1 transparent texture
119
+ glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
141
120
  memManager.setTextureMemUse(this, TRANSPARENT_TEXTURE_DATA.byteLength);
142
121
 
143
122
  const textureData = await this.textureSource?.getTextureData();
@@ -250,12 +229,35 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
250
229
  this._nativeCtxTexture = null;
251
230
  }
252
231
 
253
- private createNativeCtxTexture() {
232
+ /**
233
+ * Create native context texture
234
+ *
235
+ * @remarks
236
+ * When this method returns the returned texture will be bound to the GL context state.
237
+ *
238
+ * @param width
239
+ * @param height
240
+ * @returns
241
+ */
242
+ protected createNativeCtxTexture() {
254
243
  const { glw } = this;
255
244
  const nativeTexture = glw.createTexture();
256
245
  if (!nativeTexture) {
257
246
  throw new Error('Could not create WebGL Texture');
258
247
  }
248
+
249
+ // On initial load request, create a 1x1 transparent texture to use until
250
+ // the texture data is finally loaded.
251
+ glw.activeTexture(0);
252
+ glw.bindTexture(nativeTexture);
253
+
254
+ // linear texture filtering
255
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
256
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
257
+
258
+ // texture wrapping method
259
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
260
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
259
261
  return nativeTexture;
260
262
  }
261
263
  }
@@ -49,6 +49,9 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
49
49
  readonly dimensions: Dimensions,
50
50
  readonly bufferIdx: number,
51
51
  readonly zIndex: number,
52
+ readonly renderToTexture: boolean | undefined,
53
+ readonly parentHasRenderTexture: boolean | undefined,
54
+ readonly framebufferDimensions: Dimensions | undefined,
52
55
  ) {
53
56
  super();
54
57
  this.maxTextures = shader.supportsIndexedTextures
@@ -72,9 +75,8 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
72
75
 
73
76
  draw() {
74
77
  const { glw, shader, shaderProps, options } = this;
75
- // shaderOp.draw(this);
76
-
77
78
  const { shManager } = options;
79
+
78
80
  shManager.useShader(shader);
79
81
  shader.bindRenderOp(this, shaderProps);
80
82