@lightningjs/renderer 2.7.2 → 2.9.0-beta1
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.
- package/README.md +7 -4
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +2 -0
- package/dist/src/core/CoreNode.js +27 -8
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +13 -1
- package/dist/src/core/CoreTextureManager.js +163 -7
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +1 -0
- package/dist/src/core/Stage.js +5 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -1
- package/dist/src/core/lib/ImageWorker.js +40 -11
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +10 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +15 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +6 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +11 -3
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +38 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +9 -3
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +8 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +29 -8
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +6 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +4 -3
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +3 -4
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +4 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +8 -0
- package/dist/src/core/textures/ImageTexture.js +52 -39
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/DynamicShaderController.js.map +1 -1
- package/dist/src/main-api/ICoreDriver.d.ts +1 -4
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +6 -0
- package/dist/src/main-api/Renderer.js +8 -0
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/RendererMain.d.ts +5 -2
- package/dist/src/main-api/RendererMain.js +6 -4
- package/dist/src/main-api/RendererMain.js.map +1 -1
- package/dist/src/main-api/ShaderController.js.map +1 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -1
- package/dist/src/main-api/utils.js.map +1 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +1 -4
- package/dist/src/render-drivers/main/MainCoreDriver.js +1 -4
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +8 -6
- package/dist/src/render-drivers/main/MainOnlyNode.js +30 -1
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +1 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +2 -3
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +3 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js +9 -0
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +1 -0
- package/dist/src/render-drivers/threadx/SharedNode.js +1 -0
- package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +3 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +1 -4
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -4
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +8 -4
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +53 -24
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +7 -5
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +8 -2
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +7 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +1 -0
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +2 -0
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
- package/dist/src/render-drivers/utils.js +6 -1
- package/dist/src/render-drivers/utils.js.map +1 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -11
- package/src/core/CoreNode.ts +30 -9
- package/src/core/CoreTextureManager.ts +188 -10
- package/src/core/Stage.ts +5 -0
- package/src/core/lib/ImageWorker.ts +63 -11
- package/src/core/lib/WebGlContextWrapper.ts +16 -0
- package/src/core/renderers/CoreRenderer.ts +1 -0
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +18 -3
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +93 -0
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +12 -5
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +35 -5
- package/src/core/renderers/webgl/WebGlCoreShader.ts +7 -1
- package/src/core/renderers/webgl/internal/RendererUtils.ts +5 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +9 -3
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +6 -4
- package/src/core/textures/ImageTexture.ts +78 -45
- package/src/main-api/Renderer.ts +9 -0
- package/dist/src/core/CoreStuff.d.ts +0 -1
- package/dist/src/core/CoreStuff.js +0 -138
- package/dist/src/core/CoreStuff.js.map +0 -1
- package/dist/src/core/LngNode.d.ts +0 -736
- package/dist/src/core/LngNode.js +0 -1174
- package/dist/src/core/LngNode.js.map +0 -1
- package/dist/src/core/Matrix2DContext.d.ts +0 -15
- package/dist/src/core/Matrix2DContext.js +0 -45
- package/dist/src/core/Matrix2DContext.js.map +0 -1
- package/dist/src/core/ShaderNode.d.ts +0 -10
- package/dist/src/core/ShaderNode.js +0 -30
- package/dist/src/core/ShaderNode.js.map +0 -1
- package/dist/src/core/TextNode.d.ts +0 -103
- package/dist/src/core/TextNode.js +0 -331
- package/dist/src/core/TextNode.js.map +0 -1
- package/dist/src/core/lib/Coords.d.ts +0 -14
- package/dist/src/core/lib/Coords.js +0 -55
- package/dist/src/core/lib/Coords.js.map +0 -1
- package/dist/src/core/lib/glm/common.d.ts +0 -162
- package/dist/src/core/lib/glm/common.js +0 -81
- package/dist/src/core/lib/glm/common.js.map +0 -1
- package/dist/src/core/lib/glm/index.d.ts +0 -11
- package/dist/src/core/lib/glm/index.js +0 -30
- package/dist/src/core/lib/glm/index.js.map +0 -1
- package/dist/src/core/lib/glm/mat2.d.ts +0 -219
- package/dist/src/core/lib/glm/mat2.js +0 -396
- package/dist/src/core/lib/glm/mat2.js.map +0 -1
- package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
- package/dist/src/core/lib/glm/mat2d.js +0 -442
- package/dist/src/core/lib/glm/mat2d.js.map +0 -1
- package/dist/src/core/lib/glm/mat3.d.ts +0 -283
- package/dist/src/core/lib/glm/mat3.js +0 -680
- package/dist/src/core/lib/glm/mat3.js.map +0 -1
- package/dist/src/core/lib/glm/mat4.d.ts +0 -550
- package/dist/src/core/lib/glm/mat4.js +0 -1802
- package/dist/src/core/lib/glm/mat4.js.map +0 -1
- package/dist/src/core/lib/glm/quat.d.ts +0 -363
- package/dist/src/core/lib/glm/quat.js +0 -693
- package/dist/src/core/lib/glm/quat.js.map +0 -1
- package/dist/src/core/lib/glm/quat2.d.ts +0 -356
- package/dist/src/core/lib/glm/quat2.js +0 -754
- package/dist/src/core/lib/glm/quat2.js.map +0 -1
- package/dist/src/core/lib/glm/vec2.d.ts +0 -365
- package/dist/src/core/lib/glm/vec2.js +0 -569
- package/dist/src/core/lib/glm/vec2.js.map +0 -1
- package/dist/src/core/lib/glm/vec3.d.ts +0 -406
- package/dist/src/core/lib/glm/vec3.js +0 -720
- package/dist/src/core/lib/glm/vec3.js.map +0 -1
- package/dist/src/core/lib/glm/vec4.d.ts +0 -330
- package/dist/src/core/lib/glm/vec4.js +0 -608
- package/dist/src/core/lib/glm/vec4.js.map +0 -1
- package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
- package/dist/src/core/renderers/CoreShaderManager.js +0 -33
- package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
- package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
- package/dist/src/core/scene/Scene.d.ts +0 -59
- package/dist/src/core/scene/Scene.js +0 -106
- package/dist/src/core/scene/Scene.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
- package/dist/src/main-api/IRenderDriver.d.ts +0 -20
- package/dist/src/main-api/IRenderDriver.js +0 -20
- package/dist/src/main-api/IRenderDriver.js.map +0 -1
- package/dist/src/main-api/IShaderController.d.ts +0 -14
- package/dist/src/main-api/IShaderController.js +0 -30
- package/dist/src/main-api/IShaderController.js.map +0 -1
- package/dist/src/main-api/IShaderNode.d.ts +0 -17
- package/dist/src/main-api/IShaderNode.js +0 -19
- package/dist/src/main-api/IShaderNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
- package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
- package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
- package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
- package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
- package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
- package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
- package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
- package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
|
@@ -25,6 +25,7 @@ import { NoiseTexture } from './textures/NoiseTexture.js';
|
|
|
25
25
|
import { SubTexture } from './textures/SubTexture.js';
|
|
26
26
|
import { RenderTexture } from './textures/RenderTexture.js';
|
|
27
27
|
import type { Texture } from './textures/Texture.js';
|
|
28
|
+
import { EventEmitter } from '../common/EventEmitter.js';
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
31
|
* Augmentable map of texture class types
|
|
@@ -42,6 +43,12 @@ export interface TextureMap {
|
|
|
42
43
|
RenderTexture: typeof RenderTexture;
|
|
43
44
|
}
|
|
44
45
|
|
|
46
|
+
export interface CreateImageBitmapSupport {
|
|
47
|
+
basic: boolean; // Supports createImageBitmap(image)
|
|
48
|
+
options: boolean; // Supports createImageBitmap(image, options)
|
|
49
|
+
full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
|
|
50
|
+
}
|
|
51
|
+
|
|
45
52
|
export type ExtractProps<Type> = Type extends { z$__type__Props: infer Props }
|
|
46
53
|
? Props
|
|
47
54
|
: never;
|
|
@@ -138,7 +145,7 @@ export interface TextureOptions {
|
|
|
138
145
|
resizeMode?: ResizeModeOptions;
|
|
139
146
|
}
|
|
140
147
|
|
|
141
|
-
export class CoreTextureManager {
|
|
148
|
+
export class CoreTextureManager extends EventEmitter {
|
|
142
149
|
/**
|
|
143
150
|
* Map of textures by cache key
|
|
144
151
|
*/
|
|
@@ -156,6 +163,12 @@ export class CoreTextureManager {
|
|
|
156
163
|
|
|
157
164
|
imageWorkerManager: ImageWorkerManager | null = null;
|
|
158
165
|
hasCreateImageBitmap = !!self.createImageBitmap;
|
|
166
|
+
imageBitmapSupported = {
|
|
167
|
+
basic: false,
|
|
168
|
+
options: false,
|
|
169
|
+
full: false,
|
|
170
|
+
};
|
|
171
|
+
|
|
159
172
|
hasWorker = !!self.Worker;
|
|
160
173
|
/**
|
|
161
174
|
* Renderer that this texture manager is associated with
|
|
@@ -178,16 +191,44 @@ export class CoreTextureManager {
|
|
|
178
191
|
frameTime = 0;
|
|
179
192
|
|
|
180
193
|
constructor(numImageWorkers: number) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
super();
|
|
195
|
+
this.validateCreateImageBitmap()
|
|
196
|
+
.then((result) => {
|
|
197
|
+
this.hasCreateImageBitmap =
|
|
198
|
+
result.basic || result.options || result.full;
|
|
199
|
+
this.imageBitmapSupported = result;
|
|
185
200
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
201
|
+
if (!this.hasCreateImageBitmap) {
|
|
202
|
+
console.warn(
|
|
203
|
+
'[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (
|
|
208
|
+
this.hasCreateImageBitmap &&
|
|
209
|
+
this.hasWorker &&
|
|
210
|
+
numImageWorkers > 0
|
|
211
|
+
) {
|
|
212
|
+
this.imageWorkerManager = new ImageWorkerManager(
|
|
213
|
+
numImageWorkers,
|
|
214
|
+
result,
|
|
215
|
+
);
|
|
216
|
+
} else {
|
|
217
|
+
console.warn(
|
|
218
|
+
'[Lightning] Imageworker is 0 or not supported on this browser. Image loading will be slower.',
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
this.emit('initialized');
|
|
223
|
+
})
|
|
224
|
+
.catch((e) => {
|
|
225
|
+
console.warn(
|
|
226
|
+
'[Lightning] createImageBitmap is not supported on this browser. ImageTexture will be slower.',
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
// initialized without image worker manager and createImageBitmap
|
|
230
|
+
this.emit('initialized');
|
|
231
|
+
});
|
|
191
232
|
|
|
192
233
|
this.registerTextureType('ImageTexture', ImageTexture);
|
|
193
234
|
this.registerTextureType('ColorTexture', ColorTexture);
|
|
@@ -196,6 +237,143 @@ export class CoreTextureManager {
|
|
|
196
237
|
this.registerTextureType('RenderTexture', RenderTexture);
|
|
197
238
|
}
|
|
198
239
|
|
|
240
|
+
private async validateCreateImageBitmap(): Promise<CreateImageBitmapSupport> {
|
|
241
|
+
// Test if createImageBitmap is supported using a simple 1x1 PNG image
|
|
242
|
+
// prettier-ignore (this is a binary PNG image)
|
|
243
|
+
const pngBinaryData = new Uint8Array([
|
|
244
|
+
0x89,
|
|
245
|
+
0x50,
|
|
246
|
+
0x4e,
|
|
247
|
+
0x47,
|
|
248
|
+
0x0d,
|
|
249
|
+
0x0a,
|
|
250
|
+
0x1a,
|
|
251
|
+
0x0a, // PNG signature
|
|
252
|
+
0x00,
|
|
253
|
+
0x00,
|
|
254
|
+
0x00,
|
|
255
|
+
0x0d, // IHDR chunk length
|
|
256
|
+
0x49,
|
|
257
|
+
0x48,
|
|
258
|
+
0x44,
|
|
259
|
+
0x52, // "IHDR" chunk type
|
|
260
|
+
0x00,
|
|
261
|
+
0x00,
|
|
262
|
+
0x00,
|
|
263
|
+
0x01, // Width: 1
|
|
264
|
+
0x00,
|
|
265
|
+
0x00,
|
|
266
|
+
0x00,
|
|
267
|
+
0x01, // Height: 1
|
|
268
|
+
0x01, // Bit depth: 1
|
|
269
|
+
0x03, // Color type: Indexed
|
|
270
|
+
0x00, // Compression method: Deflate
|
|
271
|
+
0x00, // Filter method: None
|
|
272
|
+
0x00, // Interlace method: None
|
|
273
|
+
0x25,
|
|
274
|
+
0xdb,
|
|
275
|
+
0x56,
|
|
276
|
+
0xca, // CRC for IHDR
|
|
277
|
+
0x00,
|
|
278
|
+
0x00,
|
|
279
|
+
0x00,
|
|
280
|
+
0x03, // PLTE chunk length
|
|
281
|
+
0x50,
|
|
282
|
+
0x4c,
|
|
283
|
+
0x54,
|
|
284
|
+
0x45, // "PLTE" chunk type
|
|
285
|
+
0x00,
|
|
286
|
+
0x00,
|
|
287
|
+
0x00, // Palette entry: Black
|
|
288
|
+
0xa7,
|
|
289
|
+
0x7a,
|
|
290
|
+
0x3d,
|
|
291
|
+
0xda, // CRC for PLTE
|
|
292
|
+
0x00,
|
|
293
|
+
0x00,
|
|
294
|
+
0x00,
|
|
295
|
+
0x01, // tRNS chunk length
|
|
296
|
+
0x74,
|
|
297
|
+
0x52,
|
|
298
|
+
0x4e,
|
|
299
|
+
0x53, // "tRNS" chunk type
|
|
300
|
+
0x00, // Transparency for black: Fully transparent
|
|
301
|
+
0x40,
|
|
302
|
+
0xe6,
|
|
303
|
+
0xd8,
|
|
304
|
+
0x66, // CRC for tRNS
|
|
305
|
+
0x00,
|
|
306
|
+
0x00,
|
|
307
|
+
0x00,
|
|
308
|
+
0x0a, // IDAT chunk length
|
|
309
|
+
0x49,
|
|
310
|
+
0x44,
|
|
311
|
+
0x41,
|
|
312
|
+
0x54, // "IDAT" chunk type
|
|
313
|
+
0x08,
|
|
314
|
+
0xd7, // Deflate header
|
|
315
|
+
0x63,
|
|
316
|
+
0x60,
|
|
317
|
+
0x00,
|
|
318
|
+
0x00,
|
|
319
|
+
0x00,
|
|
320
|
+
0x02,
|
|
321
|
+
0x00,
|
|
322
|
+
0x01, // Zlib-compressed data
|
|
323
|
+
0xe2,
|
|
324
|
+
0x21,
|
|
325
|
+
0xbc,
|
|
326
|
+
0x33, // CRC for IDAT
|
|
327
|
+
0x00,
|
|
328
|
+
0x00,
|
|
329
|
+
0x00,
|
|
330
|
+
0x00, // IEND chunk length
|
|
331
|
+
0x49,
|
|
332
|
+
0x45,
|
|
333
|
+
0x4e,
|
|
334
|
+
0x44, // "IEND" chunk type
|
|
335
|
+
0xae,
|
|
336
|
+
0x42,
|
|
337
|
+
0x60,
|
|
338
|
+
0x82, // CRC for IEND
|
|
339
|
+
]);
|
|
340
|
+
|
|
341
|
+
const support: CreateImageBitmapSupport = {
|
|
342
|
+
basic: false,
|
|
343
|
+
options: false,
|
|
344
|
+
full: false,
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
// Test basic createImageBitmap support
|
|
348
|
+
const blob = new Blob([pngBinaryData], { type: 'image/png' });
|
|
349
|
+
const bitmap = await createImageBitmap(blob);
|
|
350
|
+
bitmap.close?.();
|
|
351
|
+
support.basic = true;
|
|
352
|
+
|
|
353
|
+
// Test createImageBitmap with options support
|
|
354
|
+
try {
|
|
355
|
+
const options = { premultiplyAlpha: 'none' as const };
|
|
356
|
+
const bitmapWithOptions = await createImageBitmap(blob, options);
|
|
357
|
+
bitmapWithOptions.close?.();
|
|
358
|
+
support.options = true;
|
|
359
|
+
} catch (e) {
|
|
360
|
+
/* ignore */
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Test createImageBitmap with full options support
|
|
364
|
+
try {
|
|
365
|
+
const bitmapWithFullOptions = await createImageBitmap(blob, 0, 0, 1, 1, {
|
|
366
|
+
premultiplyAlpha: 'none',
|
|
367
|
+
});
|
|
368
|
+
bitmapWithFullOptions.close?.();
|
|
369
|
+
support.full = true;
|
|
370
|
+
} catch (e) {
|
|
371
|
+
/* ignore */
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
return support;
|
|
375
|
+
}
|
|
376
|
+
|
|
199
377
|
registerTextureType<Type extends keyof TextureMap>(
|
|
200
378
|
textureType: Type,
|
|
201
379
|
textureClass: TextureMap[Type],
|
package/src/core/Stage.ts
CHANGED
|
@@ -266,6 +266,11 @@ export class Stage {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
+
setClearColor(color: number) {
|
|
270
|
+
this.renderer.updateClearColor(color);
|
|
271
|
+
this.renderRequested = true;
|
|
272
|
+
}
|
|
273
|
+
|
|
269
274
|
updateFrameTime() {
|
|
270
275
|
const newFrameTime = getTimeStamp();
|
|
271
276
|
this.lastFrameTime = this.currentFrameTime;
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
import type { CreateImageBitmapSupport } from '../CoreTextureManager.js';
|
|
20
21
|
import { type TextureData } from '../textures/Texture.js';
|
|
21
22
|
|
|
22
23
|
type MessageCallback = [(value: any) => void, (reason: any) => void];
|
|
@@ -47,6 +48,9 @@ interface ImageWorkerMessage {
|
|
|
47
48
|
|
|
48
49
|
/* eslint-disable */
|
|
49
50
|
function createImageWorker() {
|
|
51
|
+
var supportsOptionsCreateImageBitmap = false;
|
|
52
|
+
var supportsFullCreateImageBitmap = false;
|
|
53
|
+
|
|
50
54
|
function hasAlphaChannel(mimeType: string) {
|
|
51
55
|
return mimeType.indexOf('image/png') !== -1;
|
|
52
56
|
}
|
|
@@ -75,7 +79,12 @@ function createImageWorker() {
|
|
|
75
79
|
? premultiplyAlpha
|
|
76
80
|
: hasAlphaChannel(blob.type);
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
// createImageBitmap with crop and options
|
|
83
|
+
if (
|
|
84
|
+
supportsFullCreateImageBitmap === true &&
|
|
85
|
+
width !== null &&
|
|
86
|
+
height !== null
|
|
87
|
+
) {
|
|
79
88
|
createImageBitmap(blob, x || 0, y || 0, width, height, {
|
|
80
89
|
premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
|
|
81
90
|
colorSpaceConversion: 'none',
|
|
@@ -90,11 +99,25 @@ function createImageWorker() {
|
|
|
90
99
|
return;
|
|
91
100
|
}
|
|
92
101
|
|
|
93
|
-
createImageBitmap
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
// createImageBitmap without crop but with options
|
|
103
|
+
if (supportsOptionsCreateImageBitmap === true) {
|
|
104
|
+
createImageBitmap(blob, {
|
|
105
|
+
premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
|
|
106
|
+
colorSpaceConversion: 'none',
|
|
107
|
+
imageOrientation: 'none',
|
|
108
|
+
})
|
|
109
|
+
.then(function (data) {
|
|
110
|
+
resolve({ data, premultiplyAlpha: premultiplyAlpha });
|
|
111
|
+
})
|
|
112
|
+
.catch(function (error) {
|
|
113
|
+
reject(error);
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Fallback for browsers that do not support createImageBitmap with options
|
|
119
|
+
// this is supported for Chrome v50 to v52/54 that doesn't support options
|
|
120
|
+
createImageBitmap(blob)
|
|
98
121
|
.then(function (data) {
|
|
99
122
|
resolve({ data, premultiplyAlpha: premultiplyAlpha });
|
|
100
123
|
})
|
|
@@ -140,8 +163,14 @@ export class ImageWorkerManager {
|
|
|
140
163
|
workerIndex = 0;
|
|
141
164
|
nextId = 0;
|
|
142
165
|
|
|
143
|
-
constructor(
|
|
144
|
-
|
|
166
|
+
constructor(
|
|
167
|
+
numImageWorkers: number,
|
|
168
|
+
createImageBitmapSupport: CreateImageBitmapSupport,
|
|
169
|
+
) {
|
|
170
|
+
this.workers = this.createWorkers(
|
|
171
|
+
numImageWorkers,
|
|
172
|
+
createImageBitmapSupport,
|
|
173
|
+
);
|
|
145
174
|
this.workers.forEach((worker) => {
|
|
146
175
|
worker.onmessage = this.handleMessage.bind(this);
|
|
147
176
|
});
|
|
@@ -161,8 +190,23 @@ export class ImageWorkerManager {
|
|
|
161
190
|
}
|
|
162
191
|
}
|
|
163
192
|
|
|
164
|
-
private createWorkers(
|
|
165
|
-
|
|
193
|
+
private createWorkers(
|
|
194
|
+
numWorkers = 1,
|
|
195
|
+
createImageBitmapSupport: CreateImageBitmapSupport,
|
|
196
|
+
): Worker[] {
|
|
197
|
+
let workerCode = `(${createImageWorker.toString()})()`;
|
|
198
|
+
|
|
199
|
+
// Replace placeholders with actual initialization values
|
|
200
|
+
const supportsOptions = createImageBitmapSupport.options ? 'true' : 'false';
|
|
201
|
+
const supportsFull = createImageBitmapSupport.full ? 'true' : 'false';
|
|
202
|
+
workerCode = workerCode.replace(
|
|
203
|
+
'var supportsOptionsCreateImageBitmap = false;',
|
|
204
|
+
`var supportsOptionsCreateImageBitmap = ${supportsOptions};`,
|
|
205
|
+
);
|
|
206
|
+
workerCode = workerCode.replace(
|
|
207
|
+
'var supportsFullCreateImageBitmap = false;',
|
|
208
|
+
`var supportsFullCreateImageBitmap = ${supportsFull};`,
|
|
209
|
+
);
|
|
166
210
|
|
|
167
211
|
const blob: Blob = new Blob([workerCode.replace('"use strict";', '')], {
|
|
168
212
|
type: 'application/javascript',
|
|
@@ -170,7 +214,15 @@ export class ImageWorkerManager {
|
|
|
170
214
|
const blobURL: string = (self.URL ? URL : webkitURL).createObjectURL(blob);
|
|
171
215
|
const workers: Worker[] = [];
|
|
172
216
|
for (let i = 0; i < numWorkers; i++) {
|
|
173
|
-
|
|
217
|
+
const worker = new Worker(blobURL);
|
|
218
|
+
|
|
219
|
+
// Pass `createImageBitmap` support level during worker initialization
|
|
220
|
+
worker.postMessage({
|
|
221
|
+
type: 'init',
|
|
222
|
+
support: createImageBitmapSupport,
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
workers.push(worker);
|
|
174
226
|
}
|
|
175
227
|
return workers;
|
|
176
228
|
}
|
|
@@ -84,6 +84,8 @@ export class WebGlContextWrapper {
|
|
|
84
84
|
public readonly LINK_STATUS;
|
|
85
85
|
public readonly DYNAMIC_DRAW;
|
|
86
86
|
public readonly COLOR_ATTACHMENT0;
|
|
87
|
+
public readonly INVALID_ENUM: number;
|
|
88
|
+
public readonly INVALID_OPERATION: number;
|
|
87
89
|
//#endregion WebGL Enums
|
|
88
90
|
|
|
89
91
|
constructor(private gl: WebGLRenderingContext | WebGL2RenderingContext) {
|
|
@@ -175,6 +177,8 @@ export class WebGlContextWrapper {
|
|
|
175
177
|
this.LINK_STATUS = gl.LINK_STATUS;
|
|
176
178
|
this.DYNAMIC_DRAW = gl.DYNAMIC_DRAW;
|
|
177
179
|
this.COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;
|
|
180
|
+
this.INVALID_ENUM = gl.INVALID_ENUM;
|
|
181
|
+
this.INVALID_OPERATION = gl.INVALID_OPERATION;
|
|
178
182
|
}
|
|
179
183
|
/**
|
|
180
184
|
* Returns true if the WebGL context is WebGL2
|
|
@@ -1020,6 +1024,18 @@ export class WebGlContextWrapper {
|
|
|
1020
1024
|
return gl.getExtension(name);
|
|
1021
1025
|
}
|
|
1022
1026
|
|
|
1027
|
+
/**
|
|
1028
|
+
* ```
|
|
1029
|
+
* gl.getError(type);
|
|
1030
|
+
* ```
|
|
1031
|
+
*
|
|
1032
|
+
* @returns
|
|
1033
|
+
*/
|
|
1034
|
+
getError() {
|
|
1035
|
+
const { gl } = this;
|
|
1036
|
+
return gl.getError();
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1023
1039
|
/**
|
|
1024
1040
|
* ```
|
|
1025
1041
|
* gl.createVertexArray();
|
|
@@ -30,7 +30,12 @@ import {
|
|
|
30
30
|
type QuadOptions,
|
|
31
31
|
} from '../CoreRenderer.js';
|
|
32
32
|
import { CanvasCoreTexture } from './CanvasCoreTexture.js';
|
|
33
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
getBorder,
|
|
35
|
+
getRadius,
|
|
36
|
+
roundRect,
|
|
37
|
+
strokeLine,
|
|
38
|
+
} from './internal/C2DShaderUtils.js';
|
|
34
39
|
import {
|
|
35
40
|
formatRgba,
|
|
36
41
|
parseColorRgba,
|
|
@@ -166,7 +171,7 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
166
171
|
|
|
167
172
|
if (radius) {
|
|
168
173
|
const path = new Path2D();
|
|
169
|
-
|
|
174
|
+
roundRect.call(path, tx, ty, width, height, radius);
|
|
170
175
|
ctx.clip(path);
|
|
171
176
|
}
|
|
172
177
|
|
|
@@ -224,7 +229,8 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
224
229
|
ctx.strokeStyle = borderColor;
|
|
225
230
|
ctx.globalAlpha = alpha;
|
|
226
231
|
if (radius) {
|
|
227
|
-
|
|
232
|
+
roundRect.call(
|
|
233
|
+
ctx,
|
|
228
234
|
tx + borderInnerWidth,
|
|
229
235
|
ty + borderInnerWidth,
|
|
230
236
|
width - borderWidth,
|
|
@@ -331,4 +337,13 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
331
337
|
getBufferInfo(): null {
|
|
332
338
|
return null;
|
|
333
339
|
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Updates the clear color of the canvas renderer.
|
|
343
|
+
*
|
|
344
|
+
* @param color - The color to set as the clear color.
|
|
345
|
+
*/
|
|
346
|
+
updateClearColor(color: number) {
|
|
347
|
+
this.clearColor = color ? getRgbaComponents(color) : undefined;
|
|
348
|
+
}
|
|
334
349
|
}
|
|
@@ -84,6 +84,99 @@ export function getBorder(
|
|
|
84
84
|
return undefined;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
export function roundRect(
|
|
88
|
+
this: CanvasRenderingContext2D | Path2D,
|
|
89
|
+
x: number,
|
|
90
|
+
y: number,
|
|
91
|
+
width: number,
|
|
92
|
+
height: number,
|
|
93
|
+
radius: number | DOMPointInit | (number | DOMPointInit)[],
|
|
94
|
+
) {
|
|
95
|
+
const context = Object.getPrototypeOf(this) as Path2D;
|
|
96
|
+
if (!context.roundRect) {
|
|
97
|
+
const fixOverlappingCorners = (radii: {
|
|
98
|
+
topLeft: number;
|
|
99
|
+
topRight: number;
|
|
100
|
+
bottomRight: number;
|
|
101
|
+
bottomLeft: number;
|
|
102
|
+
}) => {
|
|
103
|
+
const maxRadius = Math.min(width / 2, height / 2);
|
|
104
|
+
const totalHorizontal =
|
|
105
|
+
radii.topLeft + radii.topRight + radii.bottomRight + radii.bottomLeft;
|
|
106
|
+
|
|
107
|
+
if (totalHorizontal > width || totalHorizontal > height) {
|
|
108
|
+
const scale =
|
|
109
|
+
maxRadius /
|
|
110
|
+
Math.max(
|
|
111
|
+
radii.topLeft,
|
|
112
|
+
radii.topRight,
|
|
113
|
+
radii.bottomRight,
|
|
114
|
+
radii.bottomLeft,
|
|
115
|
+
);
|
|
116
|
+
radii.topLeft *= scale;
|
|
117
|
+
radii.topRight *= scale;
|
|
118
|
+
radii.bottomRight *= scale;
|
|
119
|
+
radii.bottomLeft *= scale;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const radii =
|
|
123
|
+
typeof radius === 'number'
|
|
124
|
+
? {
|
|
125
|
+
topLeft: radius,
|
|
126
|
+
topRight: radius,
|
|
127
|
+
bottomRight: radius,
|
|
128
|
+
bottomLeft: radius,
|
|
129
|
+
}
|
|
130
|
+
: { topLeft: 0, topRight: 0, bottomRight: 0, bottomLeft: 0, ...radius };
|
|
131
|
+
|
|
132
|
+
fixOverlappingCorners(radii);
|
|
133
|
+
|
|
134
|
+
this.moveTo(x + radii.topLeft, y);
|
|
135
|
+
this.lineTo(x + width - radii.topRight, y);
|
|
136
|
+
this.ellipse(
|
|
137
|
+
x + width - radii.topRight,
|
|
138
|
+
y + radii.topRight,
|
|
139
|
+
radii.topRight,
|
|
140
|
+
radii.topRight,
|
|
141
|
+
0,
|
|
142
|
+
1.5 * Math.PI,
|
|
143
|
+
2 * Math.PI,
|
|
144
|
+
);
|
|
145
|
+
this.lineTo(x + width, y + height - radii.bottomRight);
|
|
146
|
+
this.ellipse(
|
|
147
|
+
x + width - radii.bottomRight,
|
|
148
|
+
y + height - radii.bottomRight,
|
|
149
|
+
radii.bottomRight,
|
|
150
|
+
radii.bottomRight,
|
|
151
|
+
0,
|
|
152
|
+
0,
|
|
153
|
+
0.5 * Math.PI,
|
|
154
|
+
);
|
|
155
|
+
this.lineTo(x + radii.bottomLeft, y + height);
|
|
156
|
+
this.ellipse(
|
|
157
|
+
x + radii.bottomLeft,
|
|
158
|
+
y + height - radii.bottomLeft,
|
|
159
|
+
radii.bottomLeft,
|
|
160
|
+
radii.bottomLeft,
|
|
161
|
+
0,
|
|
162
|
+
0.5 * Math.PI,
|
|
163
|
+
Math.PI,
|
|
164
|
+
);
|
|
165
|
+
this.lineTo(x, y + radii.topLeft);
|
|
166
|
+
this.ellipse(
|
|
167
|
+
x + radii.topLeft,
|
|
168
|
+
y + radii.topLeft,
|
|
169
|
+
radii.topLeft,
|
|
170
|
+
radii.topLeft,
|
|
171
|
+
0,
|
|
172
|
+
Math.PI,
|
|
173
|
+
1.5 * Math.PI,
|
|
174
|
+
);
|
|
175
|
+
} else {
|
|
176
|
+
this.roundRect(x, y, width, height, radius);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
87
180
|
export function strokeLine(
|
|
88
181
|
ctx: CanvasRenderingContext2D,
|
|
89
182
|
x: number,
|
|
@@ -23,11 +23,9 @@ import type { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
|
|
|
23
23
|
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
|
-
import type {
|
|
26
|
+
import type { RectWithValid } from '../../lib/utils.js';
|
|
27
27
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
28
28
|
|
|
29
|
-
const MAX_TEXTURES = 8; // TODO: get from gl
|
|
30
|
-
|
|
31
29
|
/**
|
|
32
30
|
* Can render multiple quads with multiple textures (up to vertex shader texture limit)
|
|
33
31
|
*
|
|
@@ -95,13 +93,22 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
|
|
|
95
93
|
// Clipping
|
|
96
94
|
if (this.clippingRect.valid) {
|
|
97
95
|
const { x, y, width, height } = this.clippingRect;
|
|
98
|
-
const pixelRatio = options.pixelRatio;
|
|
96
|
+
const pixelRatio = this.parentHasRenderTexture ? 1 : options.pixelRatio;
|
|
99
97
|
const canvasHeight = options.canvas.height;
|
|
100
98
|
|
|
101
99
|
const clipX = Math.round(x * pixelRatio);
|
|
102
100
|
const clipWidth = Math.round(width * pixelRatio);
|
|
103
101
|
const clipHeight = Math.round(height * pixelRatio);
|
|
104
|
-
|
|
102
|
+
let clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
|
|
103
|
+
|
|
104
|
+
// if parent has render texture, we need to adjust the scissor rect
|
|
105
|
+
// to be relative to the parent's framebuffer
|
|
106
|
+
if (this.parentHasRenderTexture) {
|
|
107
|
+
clipY = this.framebufferDimensions
|
|
108
|
+
? this.framebufferDimensions.height - this.dimensions.height
|
|
109
|
+
: 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
105
112
|
glw.setScissorTest(true);
|
|
106
113
|
glw.scissor(clipX, clipY, clipWidth, clipHeight);
|
|
107
114
|
} else {
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
type CoreWebGlExtensions,
|
|
33
33
|
getWebGlParameters,
|
|
34
34
|
getWebGlExtensions,
|
|
35
|
+
type WebGlColor,
|
|
35
36
|
} from './internal/RendererUtils.js';
|
|
36
37
|
import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
|
|
37
38
|
import { Texture, TextureType } from '../../textures/Texture.js';
|
|
@@ -86,6 +87,11 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
86
87
|
defaultShader: WebGlCoreShader;
|
|
87
88
|
quadBufferCollection: BufferCollection;
|
|
88
89
|
|
|
90
|
+
clearColor: WebGlColor = {
|
|
91
|
+
raw: 0x00000000,
|
|
92
|
+
normalized: [0, 0, 0, 0],
|
|
93
|
+
};
|
|
94
|
+
|
|
89
95
|
/**
|
|
90
96
|
* White pixel texture used by default when no texture is specified.
|
|
91
97
|
*/
|
|
@@ -127,10 +133,10 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
127
133
|
options.contextSpy,
|
|
128
134
|
);
|
|
129
135
|
const glw = (this.glw = new WebGlContextWrapper(gl));
|
|
130
|
-
|
|
131
|
-
const color = getNormalizedRgbaComponents(clearColor);
|
|
132
136
|
glw.viewport(0, 0, canvas.width, canvas.height);
|
|
133
|
-
|
|
137
|
+
|
|
138
|
+
this.updateClearColor(clearColor);
|
|
139
|
+
|
|
134
140
|
glw.setBlend(true);
|
|
135
141
|
glw.blendFunc(glw.ONE, glw.ONE_MINUS_SRC_ALPHA);
|
|
136
142
|
|
|
@@ -754,9 +760,9 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
754
760
|
node.hasRTTupdates = false;
|
|
755
761
|
}
|
|
756
762
|
|
|
757
|
-
const
|
|
763
|
+
const clearColor = this.clearColor.normalized;
|
|
758
764
|
// Restore the default clear color
|
|
759
|
-
glw.clearColor(
|
|
765
|
+
glw.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
|
|
760
766
|
|
|
761
767
|
// Bind the default framebuffer
|
|
762
768
|
glw.bindFramebuffer(null);
|
|
@@ -784,4 +790,28 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
784
790
|
override getDefShaderCtr(): BaseShaderController {
|
|
785
791
|
return this.defShaderCtrl;
|
|
786
792
|
}
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* Updates the WebGL context's clear color and clears the color buffer.
|
|
796
|
+
*
|
|
797
|
+
* @param color - The color to set as the clear color, represented as a 32-bit integer.
|
|
798
|
+
*/
|
|
799
|
+
updateClearColor(color: number) {
|
|
800
|
+
if (this.clearColor.raw === color) {
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
const glw = this.glw;
|
|
804
|
+
const normalizedColor = getNormalizedRgbaComponents(color);
|
|
805
|
+
glw.clearColor(
|
|
806
|
+
normalizedColor[0],
|
|
807
|
+
normalizedColor[1],
|
|
808
|
+
normalizedColor[2],
|
|
809
|
+
normalizedColor[3],
|
|
810
|
+
);
|
|
811
|
+
this.clearColor = {
|
|
812
|
+
raw: color,
|
|
813
|
+
normalized: normalizedColor,
|
|
814
|
+
};
|
|
815
|
+
glw.clear();
|
|
816
|
+
}
|
|
787
817
|
}
|
|
@@ -142,9 +142,15 @@ export abstract class WebGlCoreShader extends CoreShader {
|
|
|
142
142
|
glw.FRAGMENT_SHADER,
|
|
143
143
|
fragmentSource,
|
|
144
144
|
);
|
|
145
|
+
|
|
145
146
|
if (!vertexShader || !fragmentShader) {
|
|
146
147
|
throw new Error(
|
|
147
|
-
`Unable to create
|
|
148
|
+
`Unable to create the following shader(s): ${[
|
|
149
|
+
!vertexShader && 'VERTEX_SHADER',
|
|
150
|
+
!fragmentShader && 'FRAGMENT_SHADER',
|
|
151
|
+
]
|
|
152
|
+
.filter(Boolean)
|
|
153
|
+
.join(' and ')}`,
|
|
148
154
|
);
|
|
149
155
|
}
|
|
150
156
|
|