@lightningjs/renderer 3.0.0-beta17 → 3.0.0-beta19

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 (151) hide show
  1. package/dist/src/core/Autosizer.d.ts +29 -0
  2. package/dist/src/core/Autosizer.js +178 -0
  3. package/dist/src/core/Autosizer.js.map +1 -0
  4. package/dist/src/core/CoreNode.d.ts +44 -26
  5. package/dist/src/core/CoreNode.js +253 -150
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -0
  8. package/dist/src/core/CoreTextNode.js +8 -4
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +16 -2
  11. package/dist/src/core/CoreTextureManager.js +38 -51
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +18 -2
  14. package/dist/src/core/Stage.js +46 -15
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureError.d.ts +11 -0
  17. package/dist/src/core/TextureError.js +37 -0
  18. package/dist/src/core/TextureError.js.map +1 -0
  19. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  20. package/dist/src/core/TextureMemoryManager.js +80 -95
  21. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  22. package/dist/src/core/lib/WebGlContextWrapper.d.ts +11 -0
  23. package/dist/src/core/lib/WebGlContextWrapper.js +34 -0
  24. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  25. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  26. package/dist/src/core/lib/textureCompression.js +320 -67
  27. package/dist/src/core/lib/textureCompression.js.map +1 -1
  28. package/dist/src/core/platforms/web/WebPlatform.js +2 -2
  29. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  30. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  31. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  32. package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
  33. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  34. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  35. package/dist/src/core/renderers/CoreShaderNode.d.ts +6 -0
  36. package/dist/src/core/renderers/CoreShaderNode.js +2 -0
  37. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  38. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -0
  39. package/dist/src/core/renderers/canvas/CanvasTexture.js +4 -1
  40. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  41. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  42. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +6 -0
  43. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +11 -0
  45. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +51 -14
  46. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -1
  48. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +2 -0
  49. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -1
  51. package/dist/src/core/renderers/webgl/WebGlRenderer.js +57 -61
  52. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +12 -0
  55. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  56. package/dist/src/core/shaders/canvas/RadialGradient.js +1 -1
  57. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  58. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +6 -4
  59. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  60. package/dist/src/core/shaders/webgl/LinearGradient.js +2 -1
  61. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  62. package/dist/src/core/shaders/webgl/RadialGradient.js +8 -7
  63. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  64. package/dist/src/core/shaders/webgl/Rounded.js +3 -1
  65. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  66. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +3 -2
  67. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  68. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +3 -2
  69. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  70. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +2 -1
  71. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  72. package/dist/src/core/text-rendering/CanvasTextRenderer.js +1 -1
  73. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  74. package/dist/src/core/text-rendering/SdfFontHandler.js +1 -1
  75. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  76. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  77. package/dist/src/core/textures/ColorTexture.js +2 -3
  78. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  79. package/dist/src/core/textures/ImageTexture.d.ts +7 -1
  80. package/dist/src/core/textures/ImageTexture.js +20 -36
  81. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  82. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  83. package/dist/src/core/textures/NoiseTexture.js +2 -2
  84. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  85. package/dist/src/core/textures/RenderTexture.d.ts +1 -1
  86. package/dist/src/core/textures/RenderTexture.js +2 -2
  87. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  88. package/dist/src/core/textures/SubTexture.d.ts +2 -4
  89. package/dist/src/core/textures/SubTexture.js +13 -31
  90. package/dist/src/core/textures/SubTexture.js.map +1 -1
  91. package/dist/src/core/textures/Texture.d.ts +67 -8
  92. package/dist/src/core/textures/Texture.js +127 -15
  93. package/dist/src/core/textures/Texture.js.map +1 -1
  94. package/dist/src/core/utils.d.ts +1 -1
  95. package/dist/src/main-api/Renderer.d.ts +15 -2
  96. package/dist/src/main-api/Renderer.js +19 -12
  97. package/dist/src/main-api/Renderer.js.map +1 -1
  98. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  99. package/package.json +1 -1
  100. package/src/core/CoreNode.test.ts +0 -1
  101. package/src/core/CoreNode.ts +296 -177
  102. package/src/core/CoreTextNode.ts +9 -4
  103. package/src/core/CoreTextureManager.ts +69 -57
  104. package/src/core/Stage.ts +54 -18
  105. package/src/core/TextureError.ts +46 -0
  106. package/src/core/TextureMemoryManager.ts +95 -122
  107. package/src/core/lib/WebGlContextWrapper.ts +40 -0
  108. package/src/core/lib/collectionUtils.ts +118 -0
  109. package/src/core/lib/textureCompression.ts +433 -77
  110. package/src/core/platforms/web/WebPlatform.ts +2 -2
  111. package/src/core/renderers/CoreContextTexture.ts +1 -0
  112. package/src/core/renderers/CoreRenderer.ts +3 -2
  113. package/src/core/renderers/CoreShaderNode.ts +7 -0
  114. package/src/core/renderers/canvas/CanvasTexture.ts +5 -1
  115. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +8 -0
  116. package/src/core/renderers/webgl/WebGlCtxTexture.ts +58 -15
  117. package/src/core/renderers/webgl/WebGlRenderOp.ts +4 -1
  118. package/src/core/renderers/webgl/WebGlRenderer.ts +66 -68
  119. package/src/core/renderers/webgl/WebGlShaderProgram.ts +16 -0
  120. package/src/core/shaders/canvas/RadialGradient.ts +1 -1
  121. package/src/core/shaders/templates/RadialGradientTemplate.ts +6 -4
  122. package/src/core/shaders/webgl/LinearGradient.ts +2 -1
  123. package/src/core/shaders/webgl/RadialGradient.ts +8 -7
  124. package/src/core/shaders/webgl/Rounded.ts +3 -1
  125. package/src/core/shaders/webgl/RoundedWithBorder.ts +3 -2
  126. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +3 -2
  127. package/src/core/shaders/webgl/RoundedWithShadow.ts +2 -1
  128. package/src/core/text-rendering/CanvasTextRenderer.ts +1 -1
  129. package/src/core/text-rendering/SdfFontHandler.ts +1 -1
  130. package/src/core/textures/ColorTexture.ts +6 -4
  131. package/src/core/textures/ImageTexture.ts +35 -42
  132. package/src/core/textures/NoiseTexture.ts +6 -4
  133. package/src/core/textures/RenderTexture.ts +6 -4
  134. package/src/core/textures/SubTexture.ts +17 -38
  135. package/src/core/textures/Texture.ts +159 -20
  136. package/src/main-api/Renderer.ts +36 -14
  137. package/dist/src/core/animations/Animation.d.ts +0 -16
  138. package/dist/src/core/animations/Animation.js +0 -111
  139. package/dist/src/core/animations/Animation.js.map +0 -1
  140. package/dist/src/core/animations/CoreTransition.d.ts +0 -24
  141. package/dist/src/core/animations/CoreTransition.js +0 -63
  142. package/dist/src/core/animations/CoreTransition.js.map +0 -1
  143. package/dist/src/core/animations/Playback.d.ts +0 -62
  144. package/dist/src/core/animations/Playback.js +0 -155
  145. package/dist/src/core/animations/Playback.js.map +0 -1
  146. package/dist/src/core/animations/Transition.d.ts +0 -25
  147. package/dist/src/core/animations/Transition.js +0 -63
  148. package/dist/src/core/animations/Transition.js.map +0 -1
  149. package/dist/src/core/animations/utils.d.ts +0 -2
  150. package/dist/src/core/animations/utils.js +0 -137
  151. package/dist/src/core/animations/utils.js.map +0 -1
@@ -25,104 +25,357 @@ import {} from '../textures/Texture.js';
25
25
  * and only supports the following extensions: .ktx and .pvr
26
26
  * @returns
27
27
  */
28
- export function isCompressedTextureContainer(url) {
29
- return /\.(ktx|pvr)$/.test(url);
28
+ export function isCompressedTextureContainer(src) {
29
+ return /\.(ktx|pvr)$/.test(src);
30
30
  }
31
+ const PVR_MAGIC = 0x03525650; // 'PVR3' in little-endian
32
+ const PVR_TO_GL_INTERNAL_FORMAT = {
33
+ 0: 0x8c01,
34
+ 1: 0x8c03,
35
+ 2: 0x8c00,
36
+ 3: 0x8c02, // PVRTC1
37
+ 6: 0x8d64, // ETC1
38
+ 7: 0x83f0,
39
+ 8: 0x83f2,
40
+ 9: 0x83f2,
41
+ 10: 0x83f3,
42
+ 11: 0x83f3, // DXT variants
43
+ };
44
+ const ASTC_MAGIC = 0x5ca1ab13;
45
+ const ASTC_TO_GL_INTERNAL_FORMAT = {
46
+ '4x4': 0x93b0, // COMPRESSED_RGBA_ASTC_4x4_KHR
47
+ '5x5': 0x93b1, // COMPRESSED_RGBA_ASTC_5x5_KHR
48
+ '6x6': 0x93b2, // COMPRESSED_RGBA_ASTC_6x6_KHR
49
+ '8x8': 0x93b3, // COMPRESSED_RGBA_ASTC_8x8_KHR
50
+ '10x10': 0x93b4, // COMPRESSED_RGBA_ASTC_10x10_KHR
51
+ '12x12': 0x93b5, // COMPRESSED_RGBA_ASTC_12x12_KHR
52
+ };
53
+ // KTX file identifier
54
+ const KTX_IDENTIFIER = [
55
+ 0xab, 0x4b, 0x54, 0x58, 0x20, 0x31, 0x31, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a,
56
+ ];
31
57
  /**
32
58
  * Loads a compressed texture container
33
59
  * @param url
34
60
  * @returns
35
61
  */
36
62
  export const loadCompressedTexture = async (url) => {
37
- const response = await fetch(url);
38
- const arrayBuffer = await response.arrayBuffer();
39
- if (url.indexOf('.ktx') !== -1) {
40
- return loadKTXData(arrayBuffer);
63
+ try {
64
+ const response = await fetch(url);
65
+ if (!response.ok) {
66
+ throw new Error(`Failed to fetch compressed texture: ${response.status} ${response.statusText}`);
67
+ }
68
+ const arrayBuffer = await response.arrayBuffer();
69
+ // Ensure we have enough data to check magic numbers
70
+ if (arrayBuffer.byteLength < 16) {
71
+ throw new Error(`File too small to be a valid compressed texture (${arrayBuffer.byteLength} bytes). Expected at least 16 bytes for header inspection.`);
72
+ }
73
+ const view = new DataView(arrayBuffer);
74
+ const magic = view.getUint32(0, true);
75
+ if (magic === PVR_MAGIC) {
76
+ return loadPVR(view);
77
+ }
78
+ if (magic === ASTC_MAGIC) {
79
+ return loadASTC(view);
80
+ }
81
+ let isKTX = true;
82
+ for (let i = 0; i < KTX_IDENTIFIER.length; i++) {
83
+ if (view.getUint8(i) !== KTX_IDENTIFIER[i]) {
84
+ isKTX = false;
85
+ break;
86
+ }
87
+ }
88
+ if (isKTX === true) {
89
+ return loadKTX(view);
90
+ }
91
+ else {
92
+ throw new Error('Unrecognized compressed texture format');
93
+ }
94
+ }
95
+ catch (error) {
96
+ throw new Error(`Failed to load compressed texture from ${url}: ${error}`);
41
97
  }
42
- return loadPVRData(arrayBuffer);
43
98
  };
99
+ function readUint24(view, offset) {
100
+ return (view.getUint8(offset) +
101
+ (view.getUint8(offset + 1) << 8) +
102
+ (view.getUint8(offset + 2) << 16));
103
+ }
44
104
  /**
45
- * Loads a KTX texture container and returns the texture data
46
- * @param buffer
105
+ * Loads an ASTC texture container and returns the texture data
106
+ * @param view
47
107
  * @returns
48
108
  */
49
- const loadKTXData = async (buffer) => {
50
- const view = new DataView(buffer);
51
- const littleEndian = view.getUint32(12) === 16909060 ? true : false;
52
- const mipmaps = [];
53
- const data = {
54
- glInternalFormat: view.getUint32(28, littleEndian),
55
- pixelWidth: view.getUint32(36, littleEndian),
56
- pixelHeight: view.getUint32(40, littleEndian),
57
- numberOfMipmapLevels: view.getUint32(56, littleEndian),
58
- bytesOfKeyValueData: view.getUint32(60, littleEndian),
59
- };
60
- let offset = 64;
61
- // Key Value Pairs of data start at byte offset 64
62
- // But the only known kvp is the API version, so skipping parsing.
63
- offset += data.bytesOfKeyValueData;
64
- for (let i = 0; i < data.numberOfMipmapLevels; i++) {
65
- const imageSize = view.getUint32(offset);
66
- offset += 4;
67
- mipmaps.push(view.buffer.slice(offset, imageSize));
68
- offset += imageSize;
109
+ const loadASTC = async function (view) {
110
+ const blockX = view.getUint8(4);
111
+ const blockY = view.getUint8(5);
112
+ const sizeX = readUint24(view, 7);
113
+ const sizeY = readUint24(view, 10);
114
+ if (sizeX === 0 || sizeY === 0) {
115
+ throw new Error(`Invalid ASTC texture dimensions: ${sizeX}x${sizeY}`);
116
+ }
117
+ const expected = Math.ceil(sizeX / blockX) * Math.ceil(sizeY / blockY) * 16;
118
+ const dataSize = view.byteLength - 16;
119
+ if (expected !== dataSize) {
120
+ throw new Error(`Invalid ASTC texture data size: expected ${expected}, got ${dataSize}`);
69
121
  }
122
+ const internalFormat = ASTC_TO_GL_INTERNAL_FORMAT[`${blockX}x${blockY}`];
123
+ if (internalFormat === undefined) {
124
+ throw new Error(`Unsupported ASTC block size: ${blockX}x${blockY}`);
125
+ }
126
+ const buffer = view.buffer;
127
+ const mipmaps = [];
128
+ mipmaps.push(buffer.slice(16));
70
129
  return {
71
130
  data: {
72
- glInternalFormat: data.glInternalFormat,
131
+ blockInfo: blockInfoMap[internalFormat],
132
+ glInternalFormat: internalFormat,
73
133
  mipmaps,
74
- w: data.pixelWidth || 0,
75
- h: data.pixelHeight || 0,
76
- type: 'ktx',
134
+ w: sizeX,
135
+ h: sizeY,
136
+ type: 'astc',
77
137
  },
78
138
  premultiplyAlpha: false,
79
139
  };
80
140
  };
141
+ const uploadASTC = function (glw, texture, data) {
142
+ if (glw.getExtension('WEBGL_compressed_texture_astc') === null) {
143
+ throw new Error('ASTC compressed textures not supported by this device');
144
+ }
145
+ glw.bindTexture(texture);
146
+ const { glInternalFormat, mipmaps, w, h } = data;
147
+ if (mipmaps === undefined) {
148
+ return;
149
+ }
150
+ const view = new Uint8Array(mipmaps[0]);
151
+ glw.compressedTexImage2D(0, glInternalFormat, w, h, 0, view);
152
+ // ASTC textures MUST use no mipmaps unless stored
153
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
154
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
155
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
156
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
157
+ };
81
158
  /**
82
- * Loads a PVR texture container and returns the texture data
83
- * @param buffer
159
+ * Loads a KTX texture container and returns the texture data
160
+ * @param view
84
161
  * @returns
85
162
  */
86
- const loadPVRData = async (buffer) => {
87
- // pvr header length in 32 bits
88
- const pvrHeaderLength = 13;
89
- // for now only we only support: COMPRESSED_RGB_ETC1_WEBGL
90
- const pvrFormatEtc1 = 0x8d64;
91
- const pvrWidth = 7;
92
- const pvrHeight = 6;
93
- const pvrMipmapCount = 11;
94
- const pvrMetadata = 12;
95
- const arrayBuffer = buffer;
96
- const header = new Int32Array(arrayBuffer, 0, pvrHeaderLength);
97
- // @ts-expect-error Object possibly undefined
98
- const dataOffset = header[pvrMetadata] + 52;
99
- const pvrtcData = new Uint8Array(arrayBuffer, dataOffset);
163
+ const loadKTX = async function (view) {
164
+ const endianness = view.getUint32(12, true);
165
+ const littleEndian = endianness === 0x04030201;
166
+ if (littleEndian === false && endianness !== 0x01020304) {
167
+ throw new Error('Invalid KTX endianness value');
168
+ }
169
+ const glType = view.getUint32(16, littleEndian);
170
+ const glFormat = view.getUint32(24, littleEndian);
171
+ if (glType !== 0 || glFormat !== 0) {
172
+ throw new Error(`KTX texture is not compressed (glType: ${glType}, glFormat: ${glFormat})`);
173
+ }
174
+ const glInternalFormat = view.getUint32(28, littleEndian);
175
+ if (blockInfoMap[glInternalFormat] === undefined) {
176
+ throw new Error(`Unsupported KTX compressed texture format: 0x${glInternalFormat.toString(16)}`);
177
+ }
178
+ const width = view.getUint32(36, littleEndian);
179
+ const height = view.getUint32(40, littleEndian);
180
+ if (width === 0 || height === 0) {
181
+ throw new Error(`Invalid KTX texture dimensions: ${width}x${height}`);
182
+ }
183
+ const mipmapLevels = view.getUint32(56, littleEndian);
184
+ if (mipmapLevels === 0) {
185
+ throw new Error('KTX texture has no mipmap levels');
186
+ }
187
+ const bytesOfKeyValueData = view.getUint32(60, littleEndian);
100
188
  const mipmaps = [];
101
- const data = {
102
- pixelWidth: header[pvrWidth],
103
- pixelHeight: header[pvrHeight],
104
- numberOfMipmapLevels: header[pvrMipmapCount] || 0,
189
+ const buffer = view.buffer;
190
+ let offset = 64 + bytesOfKeyValueData;
191
+ if (offset > view.byteLength) {
192
+ throw new Error('Invalid KTX file: key/value data exceeds file size');
193
+ }
194
+ for (let i = 0; i < mipmapLevels; i++) {
195
+ const imageSize = view.getUint32(offset, littleEndian);
196
+ offset += 4;
197
+ const end = offset + imageSize;
198
+ mipmaps.push(buffer.slice(offset, end));
199
+ offset = end;
200
+ if (offset % 4 !== 0) {
201
+ offset += 4 - (offset % 4);
202
+ }
203
+ }
204
+ return {
205
+ data: {
206
+ blockInfo: blockInfoMap[glInternalFormat],
207
+ glInternalFormat: glInternalFormat,
208
+ mipmaps,
209
+ w: width,
210
+ h: height,
211
+ type: 'ktx',
212
+ },
213
+ premultiplyAlpha: false,
105
214
  };
106
- let offset = 0;
107
- let width = data.pixelWidth || 0;
108
- let height = data.pixelHeight || 0;
109
- for (let i = 0; i < data.numberOfMipmapLevels; i++) {
110
- const level = ((width + 3) >> 2) * ((height + 3) >> 2) * 8;
111
- const view = new Uint8Array(arrayBuffer, pvrtcData.byteOffset + offset, level);
112
- mipmaps.push(view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength));
113
- offset += level;
114
- width = width >> 1;
115
- height = height >> 1;
215
+ };
216
+ const uploadKTX = function (glw, texture, data) {
217
+ const { glInternalFormat, mipmaps, w: width, h: height, blockInfo } = data;
218
+ if (mipmaps === undefined) {
219
+ return;
220
+ }
221
+ glw.bindTexture(texture);
222
+ const blockWidth = blockInfo.width;
223
+ const blockHeight = blockInfo.height;
224
+ let w = width;
225
+ let h = height;
226
+ for (let i = 0; i < mipmaps.length; i++) {
227
+ let view = new Uint8Array(mipmaps[i]);
228
+ const uploadW = Math.ceil(w / blockWidth) * blockWidth;
229
+ const uploadH = Math.ceil(h / blockHeight) * blockHeight;
230
+ const expectedBytes = Math.ceil(w / blockWidth) * Math.ceil(h / blockHeight) * blockInfo.bytes;
231
+ if (view.byteLength < expectedBytes) {
232
+ const padded = new Uint8Array(expectedBytes);
233
+ padded.set(view);
234
+ view = padded;
235
+ }
236
+ glw.compressedTexImage2D(i, glInternalFormat, uploadW, uploadH, 0, view);
237
+ w = Math.max(1, w >> 1);
238
+ h = Math.max(1, h >> 1);
239
+ }
240
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
241
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
242
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
243
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, mipmaps.length > 1 ? glw.LINEAR_MIPMAP_LINEAR : glw.LINEAR);
244
+ };
245
+ function pvrtcMipSize(width, height, bpp) {
246
+ const minW = bpp === 2 ? 16 : 8;
247
+ const minH = 8;
248
+ const w = Math.max(width, minW);
249
+ const h = Math.max(height, minH);
250
+ return (w * h * bpp) / 8;
251
+ }
252
+ const loadPVR = async function (view) {
253
+ const pixelFormatLow = view.getUint32(8, true);
254
+ const internalFormat = PVR_TO_GL_INTERNAL_FORMAT[pixelFormatLow];
255
+ if (internalFormat === undefined) {
256
+ throw new Error(`Unsupported PVR pixel format: 0x${pixelFormatLow.toString(16)}`);
257
+ }
258
+ const height = view.getInt32(24, true);
259
+ const width = view.getInt32(28, true);
260
+ // validate dimensions
261
+ if (width === 0 || height === 0) {
262
+ throw new Error(`Invalid PVR texture dimensions: ${width}x${height}`);
263
+ }
264
+ const mipmapLevels = view.getInt32(44, true);
265
+ const metadataSize = view.getUint32(48, true);
266
+ const buffer = view.buffer;
267
+ let offset = 52 + metadataSize;
268
+ if (offset > buffer.byteLength) {
269
+ throw new Error('Invalid PVR file: metadata exceeds file size');
270
+ }
271
+ const mipmaps = [];
272
+ const block = blockInfoMap[internalFormat];
273
+ for (let i = 0; i < mipmapLevels; i++) {
274
+ const declaredSize = view.getUint32(offset, true);
275
+ const max = buffer.byteLength - (offset + 4);
276
+ if (declaredSize > 0 && declaredSize <= max) {
277
+ offset += 4;
278
+ const start = offset;
279
+ const end = offset + declaredSize;
280
+ mipmaps.push(buffer.slice(start, end));
281
+ offset = end;
282
+ offset = (offset + 3) & ~3; // align to 4 bytes
283
+ continue;
284
+ }
285
+ if (pixelFormatLow === 0 ||
286
+ pixelFormatLow === 1 ||
287
+ pixelFormatLow === 2 ||
288
+ pixelFormatLow === 3) {
289
+ const bpp = pixelFormatLow === 0 || pixelFormatLow === 1 ? 2 : 4;
290
+ const computed = pvrtcMipSize(width >> i, height >> i, bpp);
291
+ mipmaps.push(buffer.slice(offset, offset + computed));
292
+ offset += computed;
293
+ offset = (offset + 3) & ~3; // align to 4 bytes
294
+ continue;
295
+ }
296
+ if (block !== undefined) {
297
+ const blockW = Math.ceil((width >> i) / block.width);
298
+ const blockH = Math.ceil((height >> i) / block.height);
299
+ const computed = blockW * blockH * block.bytes;
300
+ mipmaps.push(buffer.slice(offset, offset + computed));
301
+ offset += computed;
302
+ offset = (offset + 3) & ~3;
303
+ }
116
304
  }
117
305
  return {
118
306
  data: {
119
- glInternalFormat: pvrFormatEtc1,
120
- mipmaps: mipmaps,
121
- w: data.pixelWidth || 0,
122
- h: data.pixelHeight || 0,
307
+ blockInfo: blockInfoMap[internalFormat],
308
+ glInternalFormat: internalFormat,
309
+ mipmaps,
310
+ w: width,
311
+ h: height,
123
312
  type: 'pvr',
124
313
  },
125
314
  premultiplyAlpha: false,
126
315
  };
127
316
  };
317
+ const uploadPVR = function (glw, texture, data) {
318
+ const { glInternalFormat, mipmaps, w: width, h: height } = data;
319
+ if (mipmaps === undefined) {
320
+ return;
321
+ }
322
+ glw.bindTexture(texture);
323
+ let w = width;
324
+ let h = height;
325
+ for (let i = 0; i < mipmaps.length; i++) {
326
+ glw.compressedTexImage2D(i, glInternalFormat, w, h, 0, new Uint8Array(mipmaps[i]));
327
+ w = Math.max(1, w >> 1);
328
+ h = Math.max(1, h >> 1);
329
+ }
330
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
331
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
332
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
333
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, mipmaps.length > 1 ? glw.LINEAR_MIPMAP_LINEAR : glw.LINEAR);
334
+ };
335
+ // Predefined block info for common compressed texture formats
336
+ const BLOCK_4x4x8 = { width: 4, height: 4, bytes: 8 };
337
+ const BLOCK_4x4x16 = { width: 4, height: 4, bytes: 16 };
338
+ const BLOCK_5x5x16 = { width: 5, height: 5, bytes: 16 };
339
+ const BLOCK_6x6x16 = { width: 6, height: 6, bytes: 16 };
340
+ const BLOCK_8x4x8 = { width: 8, height: 4, bytes: 8 };
341
+ const BLOCK_8x8x16 = { width: 8, height: 8, bytes: 16 };
342
+ const BLOCK_10x10x16 = { width: 10, height: 10, bytes: 16 };
343
+ const BLOCK_12x12x16 = { width: 12, height: 12, bytes: 16 };
344
+ // Map of GL internal formats to their corresponding block info
345
+ export const blockInfoMap = {
346
+ // S3TC / DXTn (WEBGL_compressed_texture_s3tc, sRGB variants)
347
+ 0x83f0: BLOCK_4x4x8, // COMPRESSED_RGB_S3TC_DXT1_EXT
348
+ 0x83f1: BLOCK_4x4x8, // COMPRESSED_RGBA_S3TC_DXT1_EXT
349
+ 0x83f2: BLOCK_4x4x16, // COMPRESSED_RGBA_S3TC_DXT3_EXT
350
+ 0x83f3: BLOCK_4x4x16, // COMPRESSED_RGBA_S3TC_DXT5_EXT
351
+ // ETC1 / ETC2 / EAC
352
+ 0x8d64: BLOCK_4x4x8, // COMPRESSED_RGB_ETC1_WEBGL
353
+ 0x9274: BLOCK_4x4x8, // COMPRESSED_RGB8_ETC2
354
+ 0x9275: BLOCK_4x4x8, // COMPRESSED_SRGB8_ETC2
355
+ 0x9278: BLOCK_4x4x16, // COMPRESSED_RGBA8_ETC2_EAC
356
+ 0x9279: BLOCK_4x4x16, // COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
357
+ // PVRTC (WEBGL_compressed_texture_pvrtc)
358
+ 0x8c00: BLOCK_4x4x8, // COMPRESSED_RGB_PVRTC_4BPPV1_IMG
359
+ 0x8c02: BLOCK_4x4x8, // COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
360
+ 0x8c01: BLOCK_8x4x8, // COMPRESSED_RGB_PVRTC_2BPPV1_IMG
361
+ 0x8c03: BLOCK_8x4x8,
362
+ // ASTC (WEBGL_compressed_texture_astc)
363
+ 0x93b0: BLOCK_4x4x16, // COMPRESSED_RGBA_ASTC_4x4_KHR
364
+ 0x93d0: BLOCK_4x4x16, // COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
365
+ 0x93b1: BLOCK_5x5x16, // 5x5
366
+ 0x93d1: BLOCK_5x5x16,
367
+ 0x93b2: BLOCK_6x6x16, // 6x6
368
+ 0x93d2: BLOCK_6x6x16,
369
+ 0x93b3: BLOCK_8x8x16, // 8x8
370
+ 0x93d3: BLOCK_8x8x16,
371
+ 0x93b4: BLOCK_10x10x16, // 10x10
372
+ 0x93d4: BLOCK_10x10x16,
373
+ 0x93b5: BLOCK_12x12x16, // 12x12
374
+ 0x93d5: BLOCK_12x12x16,
375
+ };
376
+ export const uploadCompressedTexture = {
377
+ ktx: uploadKTX,
378
+ pvr: uploadPVR,
379
+ astc: uploadASTC,
380
+ };
128
381
  //# sourceMappingURL=textureCompression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textureCompression.js","sourceRoot":"","sources":["../../../../src/core/lib/textureCompression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textureCompression.js","sourceRoot":"","sources":["../../../../src/core/lib/textureCompression.ts"],"names":[],"mappings":"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"}
@@ -39,13 +39,13 @@ export class WebPlatform extends Platform {
39
39
  // Use standard idle timeout when not throttling
40
40
  setTimeout(() => requestAnimationFrame(runLoop), 16.666666666666668);
41
41
  }
42
- if (!isIdle) {
42
+ if (isIdle === false) {
43
43
  stage.shManager.cleanup();
44
44
  stage.eventBus.emit('idle');
45
45
  isIdle = true;
46
46
  }
47
47
  if (stage.txMemManager.checkCleanup() === true) {
48
- stage.txMemManager.cleanup(false);
48
+ stage.txMemManager.cleanup();
49
49
  }
50
50
  stage.flushFrameEvents();
51
51
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"WebPlatform.js","sourceRoot":"","sources":["../../../../../src/core/platforms/web/WebPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU1C,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,wBAAwB;IACxB,4BAA4B;IAC5B,wBAAwB;IAEf,YAAY;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,cAAc,CAAC,EAAU;QAChC,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,cAAc;IACd,wBAAwB;IAEf,SAAS,CAAC,KAAY;QAC7B,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,cAAsB,CAAC,EAAE,EAAE;YAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;YAE9C,yCAAyC;YACzC,IACE,eAAe,GAAG,CAAC;gBACnB,WAAW,GAAG,aAAa,GAAG,eAAe,EAC7C,CAAC;gBACD,wEAAwE;gBACxE,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC;gBAC9D,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YAED,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAEzB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC7B,0EAA0E;gBAC1E,KAAK,CAAC,YAAY,EAAE,CAAC;gBAErB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;oBACxB,2CAA2C;oBAC3C,UAAU,CACR,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EACpC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAC9C,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,gDAAgD;oBAChD,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC1B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC5B,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC;gBAED,IAAI,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;oBAC/C,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAED,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAEzB,sBAAsB;YACtB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,2DAA2D;gBAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,CAAC,EACD,eAAe,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CACpD,CAAC;gBACF,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QACF,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,wBAAwB;IACxB,cAAc;IACd,wBAAwB;IAEf,iBAAiB,CACxB,IAAuB,EACvB,WAAyC,EACzC,EAAW,EACX,EAAW,EACX,EAAW,EACX,OAA4B;QAE5B,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,iBAAiB,CACtB,IAAI,EACJ,WAAW,EACX,EAAE,IAAI,CAAC,EACP,EAAE,IAAI,CAAC,EACP,EAAE,IAAI,CAAC,EACP,OAAO,CACR,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,CAAC;IAEQ,OAAO,CAAC,IAAc;QAC5B,QAAQ,CAAC,KAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;CACF"}
1
+ {"version":3,"file":"WebPlatform.js","sourceRoot":"","sources":["../../../../../src/core/platforms/web/WebPlatform.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare abstract class CoreContextTexture {
7
7
  constructor(memManager: TextureMemoryManager, textureSource: Texture);
8
8
  protected setTextureMemUse(byteSize: number): void;
9
9
  abstract load(): Promise<void>;
10
+ abstract release(): void;
10
11
  abstract free(): void;
11
12
  get renderable(): boolean;
12
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CoreContextTexture.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreContextTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,OAAgB,kBAAkB;IAC7B,aAAa,CAAU;IACxB,UAAU,CAAuB;IAClC,KAAK,GAA8C,OAAO,CAAC;IAElE,YAAY,UAAgC,EAAE,aAAsB;QAClE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAES,gBAAgB,CAAC,QAAgB;QACzC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAKD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"CoreContextTexture.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreContextTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,OAAgB,kBAAkB;IAC7B,aAAa,CAAU;IACxB,UAAU,CAAuB;IAClC,KAAK,GAA8C,OAAO,CAAC;IAElE,YAAY,UAAgC,EAAE,aAAsB;QAClE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAES,gBAAgB,CAAC,QAAgB;QACzC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAMD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACvC,CAAC;CACF"}
@@ -33,6 +33,7 @@ export interface QuadOptions {
33
33
  rtt: boolean;
34
34
  parentHasRenderTexture: boolean;
35
35
  framebufferDimensions: Dimensions | null;
36
+ time?: number | null;
36
37
  }
37
38
  export interface CoreRendererOptions {
38
39
  stage: Stage;
@@ -47,6 +48,7 @@ export interface BufferInfo {
47
48
  export declare abstract class CoreRenderer {
48
49
  options: CoreRendererOptions;
49
50
  mode: 'webgl' | 'canvas' | undefined;
51
+ defaultTextureCoords: TextureCoords | undefined;
50
52
  readonly stage: Stage;
51
53
  rttNodes: CoreNode[];
52
54
  constructor(options: CoreRendererOptions);
@@ -67,5 +69,5 @@ export declare abstract class CoreRenderer {
67
69
  abstract getQuadCount(): number | null;
68
70
  abstract updateViewport(): void;
69
71
  abstract updateClearColor(color: number): void;
70
- getTextureCoords?(node: CoreNode): TextureCoords;
72
+ getTextureCoords?(node: CoreNode): TextureCoords | undefined;
71
73
  }
@@ -20,6 +20,7 @@ import { CoreContextTexture } from './CoreContextTexture.js';
20
20
  export class CoreRenderer {
21
21
  options;
22
22
  mode;
23
+ defaultTextureCoords = undefined;
23
24
  stage;
24
25
  //// Core Managers
25
26
  rttNodes = [];
@@ -1 +1 @@
1
- {"version":3,"file":"CoreRenderer.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAyC7D,MAAM,OAAgB,YAAY;IACzB,OAAO,CAAsB;IAC7B,IAAI,CAAiC;IAEnC,KAAK,CAAQ;IAEtB,kBAAkB;IAClB,QAAQ,GAAe,EAAE,CAAC;IAE1B,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CA4BF"}
1
+ {"version":3,"file":"CoreRenderer.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA0C7D,MAAM,OAAgB,YAAY;IACzB,OAAO,CAAsB;IAC7B,IAAI,CAAiC;IAC5C,oBAAoB,GAA8B,SAAS,CAAC;IACnD,KAAK,CAAQ;IAEtB,kBAAkB;IAClB,QAAQ,GAAe,EAAE,CAAC;IAE1B,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CA4BF"}
@@ -35,6 +35,11 @@ export interface CoreShaderType<Props extends object = any> {
35
35
  * used for making a cache key to check for reusability, currently only used for webgl ShaderTypes but might be needed for other types of renderer
36
36
  */
37
37
  getCacheMarkers?: (props: Props) => string;
38
+ /**
39
+ * timer that updates every loop, by default uses the stage elapsed time If you want to do a special calculation you can define a function.
40
+ * When you calculate your own value you can use the Stage timing values deltaTime, lastFrameTime, and currentFrameTime;
41
+ */
42
+ time?: boolean | ((stage: Stage) => number);
38
43
  }
39
44
  /**
40
45
  * CoreShaderNode is a base class that manages the shader prop values.
@@ -49,6 +54,7 @@ export declare class CoreShaderNode<Props extends object = Record<string, unknow
49
54
  readonly resolvedProps: Props | undefined;
50
55
  protected definedProps: Props | undefined;
51
56
  protected node: CoreNode | null;
57
+ readonly time: CoreShaderType['time'];
52
58
  update: (() => void) | undefined;
53
59
  constructor(shaderKey: string, type: CoreShaderType<Props>, stage: Stage, props?: Props);
54
60
  private defineProps;
@@ -42,11 +42,13 @@ export class CoreShaderNode {
42
42
  resolvedProps = undefined;
43
43
  definedProps = undefined;
44
44
  node = null;
45
+ time = undefined;
45
46
  update = undefined;
46
47
  constructor(shaderKey, type, stage, props) {
47
48
  this.shaderKey = shaderKey;
48
49
  this.stage = stage;
49
50
  this.shaderType = type;
51
+ this.time = type.time;
50
52
  if (props !== undefined) {
51
53
  /**
52
54
  * props are already resolved by shadermanager
@@ -1 +1 @@
1
- {"version":3,"file":"CoreShaderNode.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreShaderNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoreShaderNode.js","sourceRoot":"","sources":["../../../../src/core/renderers/CoreShaderNode.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare class CanvasTexture extends CoreContextTexture {
7
7
  image: HTMLCanvasElement;
8
8
  } | undefined;
9
9
  load(): Promise<void>;
10
+ release(): void;
10
11
  free(): void;
11
12
  updateMemSize(): void;
12
13
  hasImage(): boolean;
@@ -36,9 +36,12 @@ export class CanvasTexture extends CoreContextTexture {
36
36
  throw err;
37
37
  }
38
38
  }
39
- free() {
39
+ release() {
40
40
  this.image = undefined;
41
41
  this.tintCache = undefined;
42
+ }
43
+ free() {
44
+ this.release();
42
45
  this.textureSource.setState('freed');
43
46
  this.setTextureMemUse(0);
44
47
  this.textureSource.freeTextureData();