@lightningjs/renderer 2.8.0 → 2.9.0-beta2
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.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.js +1 -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/canvas/CanvasCoreRenderer.js +10 -5
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +3 -3
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -2
- 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 +12 -13
- 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.js +4 -4
- 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.js +6 -4
- 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 +1 -2
- 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 +55 -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/Inspector.js +1 -1
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.js.map +1 -1
- package/dist/src/main-api/utils.js.map +1 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +10 -11
- package/src/core/CoreTextureManager.ts +188 -10
- package/src/core/lib/ImageWorker.ts +63 -11
- package/src/core/lib/WebGlContextWrapper.ts +16 -0
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +15 -5
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +11 -5
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +93 -0
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +12 -19
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +12 -5
- package/src/core/renderers/webgl/WebGlCoreShader.ts +7 -1
- package/src/core/renderers/webgl/internal/RendererUtils.ts +5 -3
- 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/text-rendering/renderers/CanvasTextRenderer.ts +3 -4
- package/src/core/textures/ImageTexture.ts +82 -45
- package/src/main-api/Inspector.ts +1 -1
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- 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/ICoreDriver.d.ts +0 -27
- package/dist/src/main-api/ICoreDriver.js +0 -20
- package/dist/src/main-api/ICoreDriver.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/main-api/RendererMain.d.ts +0 -375
- package/dist/src/main-api/RendererMain.js +0 -365
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
- package/dist/src/render-drivers/main/MainOnlyNode.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/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
- package/dist/src/render-drivers/main/MainOnlyTextNode.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/NodeStruct.d.ts +0 -90
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
- package/dist/src/render-drivers/threadx/ThreadXMainNode.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/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.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
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -69
- package/dist/src/render-drivers/utils.js.map +0 -1
|
@@ -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,
|
|
@@ -73,7 +78,6 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
reset(): void {
|
|
76
|
-
// eslint-disable-next-line no-self-assign
|
|
77
81
|
this.canvas.width = this.canvas.width; // quick reset canvas
|
|
78
82
|
|
|
79
83
|
const ctx = this.context;
|
|
@@ -166,7 +170,7 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
166
170
|
|
|
167
171
|
if (radius) {
|
|
168
172
|
const path = new Path2D();
|
|
169
|
-
|
|
173
|
+
roundRect.call(path, tx, ty, width, height, radius);
|
|
170
174
|
ctx.clip(path);
|
|
171
175
|
}
|
|
172
176
|
|
|
@@ -186,7 +190,12 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
186
190
|
height,
|
|
187
191
|
);
|
|
188
192
|
} else {
|
|
189
|
-
|
|
193
|
+
try {
|
|
194
|
+
ctx.drawImage(image, tx, ty, width, height);
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
196
|
+
} catch (error) {
|
|
197
|
+
// noop
|
|
198
|
+
}
|
|
190
199
|
}
|
|
191
200
|
ctx.globalAlpha = 1;
|
|
192
201
|
} else if (hasGradient) {
|
|
@@ -224,7 +233,8 @@ export class CanvasCoreRenderer extends CoreRenderer {
|
|
|
224
233
|
ctx.strokeStyle = borderColor;
|
|
225
234
|
ctx.globalAlpha = alpha;
|
|
226
235
|
if (radius) {
|
|
227
|
-
|
|
236
|
+
roundRect.call(
|
|
237
|
+
ctx,
|
|
228
238
|
tx + borderInnerWidth,
|
|
229
239
|
ty + borderInnerWidth,
|
|
230
240
|
width - borderWidth,
|
|
@@ -23,7 +23,11 @@ import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
|
23
23
|
import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
|
|
24
24
|
|
|
25
25
|
export class CanvasCoreTexture extends CoreContextTexture {
|
|
26
|
-
protected image:
|
|
26
|
+
protected image:
|
|
27
|
+
| ImageBitmap
|
|
28
|
+
| HTMLCanvasElement
|
|
29
|
+
| HTMLImageElement
|
|
30
|
+
| undefined;
|
|
27
31
|
protected tintCache:
|
|
28
32
|
| {
|
|
29
33
|
key: string;
|
|
@@ -68,7 +72,9 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
68
72
|
return this.image !== undefined;
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
getImage(
|
|
75
|
+
getImage(
|
|
76
|
+
color: IParsedColor,
|
|
77
|
+
): ImageBitmap | HTMLCanvasElement | HTMLImageElement {
|
|
72
78
|
const image = this.image;
|
|
73
79
|
assertTruthy(image, 'Attempt to get unloaded image texture');
|
|
74
80
|
|
|
@@ -94,7 +100,7 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
protected tintTexture(
|
|
97
|
-
source: ImageBitmap | HTMLCanvasElement,
|
|
103
|
+
source: ImageBitmap | HTMLCanvasElement | HTMLImageElement,
|
|
98
104
|
color: string,
|
|
99
105
|
) {
|
|
100
106
|
const { width, height } = source;
|
|
@@ -132,8 +138,8 @@ export class CanvasCoreTexture extends CoreContextTexture {
|
|
|
132
138
|
this.image = canvas;
|
|
133
139
|
return { width: data.width, height: data.height };
|
|
134
140
|
} else if (
|
|
135
|
-
typeof ImageBitmap !== 'undefined' &&
|
|
136
|
-
data instanceof
|
|
141
|
+
(typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
|
|
142
|
+
data instanceof HTMLImageElement
|
|
137
143
|
) {
|
|
138
144
|
this.image = data;
|
|
139
145
|
return { width: data.width, height: data.height };
|
|
@@ -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,
|
|
@@ -140,32 +140,31 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
140
140
|
|
|
141
141
|
assertTruthy(this._nativeCtxTexture);
|
|
142
142
|
glw.activeTexture(0);
|
|
143
|
+
const tdata = textureData.data;
|
|
143
144
|
// If textureData is null, the texture is empty (0, 0) and we don't need to
|
|
144
145
|
// upload any data to the GPU.
|
|
145
146
|
if (
|
|
146
|
-
(typeof ImageBitmap !== 'undefined' &&
|
|
147
|
-
|
|
148
|
-
textureData.data instanceof ImageData ||
|
|
147
|
+
(typeof ImageBitmap !== 'undefined' && tdata instanceof ImageBitmap) ||
|
|
148
|
+
tdata instanceof ImageData ||
|
|
149
149
|
// not using typeof HTMLImageElement due to web worker
|
|
150
|
-
isHTMLImageElement(
|
|
150
|
+
isHTMLImageElement(tdata)
|
|
151
151
|
) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
height = data.height;
|
|
152
|
+
width = tdata.width;
|
|
153
|
+
height = tdata.height;
|
|
155
154
|
glw.bindTexture(this._nativeCtxTexture);
|
|
156
155
|
glw.pixelStorei(
|
|
157
156
|
glw.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
|
|
158
157
|
!!textureData.premultiplyAlpha,
|
|
159
158
|
);
|
|
160
159
|
|
|
161
|
-
glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE,
|
|
160
|
+
glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, tdata);
|
|
162
161
|
this.setTextureMemUse(width * height * 4);
|
|
163
162
|
|
|
164
163
|
// generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
|
|
165
164
|
if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
|
|
166
165
|
glw.generateMipmap();
|
|
167
166
|
}
|
|
168
|
-
} else if (
|
|
167
|
+
} else if (tdata === null) {
|
|
169
168
|
width = 0;
|
|
170
169
|
height = 0;
|
|
171
170
|
// Reset to a 1x1 transparent texture
|
|
@@ -182,14 +181,8 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
182
181
|
TRANSPARENT_TEXTURE_DATA,
|
|
183
182
|
);
|
|
184
183
|
this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
|
|
185
|
-
} else if ('mipmaps' in
|
|
186
|
-
const {
|
|
187
|
-
mipmaps,
|
|
188
|
-
width = 0,
|
|
189
|
-
height = 0,
|
|
190
|
-
type,
|
|
191
|
-
glInternalFormat,
|
|
192
|
-
} = textureData.data;
|
|
184
|
+
} else if ('mipmaps' in tdata && tdata.mipmaps) {
|
|
185
|
+
const { mipmaps, width = 0, height = 0, type, glInternalFormat } = tdata;
|
|
193
186
|
const view =
|
|
194
187
|
type === 'ktx'
|
|
195
188
|
? new DataView(mipmaps[0] ?? new ArrayBuffer(0))
|
|
@@ -204,7 +197,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
204
197
|
glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
|
|
205
198
|
|
|
206
199
|
this.setTextureMemUse(view.byteLength);
|
|
207
|
-
} else if (
|
|
200
|
+
} else if (tdata && tdata instanceof Uint8Array) {
|
|
208
201
|
// Color Texture
|
|
209
202
|
width = 1;
|
|
210
203
|
height = 1;
|
|
@@ -223,7 +216,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
223
216
|
0,
|
|
224
217
|
glw.RGBA,
|
|
225
218
|
glw.UNSIGNED_BYTE,
|
|
226
|
-
|
|
219
|
+
tdata,
|
|
227
220
|
);
|
|
228
221
|
|
|
229
222
|
this.setTextureMemUse(width * height * 4);
|
|
@@ -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 {
|
|
@@ -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
|
|
|
@@ -141,9 +141,11 @@ export function createIndexBuffer(glw: WebGlContextWrapper, size: number) {
|
|
|
141
141
|
export function isHTMLImageElement(obj: unknown): obj is HTMLImageElement {
|
|
142
142
|
return (
|
|
143
143
|
obj !== null &&
|
|
144
|
-
typeof obj === 'object' &&
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
((typeof obj === 'object' &&
|
|
145
|
+
obj.constructor &&
|
|
146
|
+
obj.constructor.name === 'HTMLImageElement') ||
|
|
147
|
+
(typeof HTMLImageElement !== 'undefined' &&
|
|
148
|
+
obj instanceof HTMLImageElement))
|
|
147
149
|
);
|
|
148
150
|
}
|
|
149
151
|
|
|
@@ -100,8 +100,14 @@ export function createShader(
|
|
|
100
100
|
) {
|
|
101
101
|
const shader = glw.createShader(type);
|
|
102
102
|
if (!shader) {
|
|
103
|
-
|
|
103
|
+
const glError = glw.getError();
|
|
104
|
+
throw new Error(
|
|
105
|
+
`Unable to create the shader: ${
|
|
106
|
+
type === glw.VERTEX_SHADER ? 'VERTEX_SHADER' : 'FRAGMENT_SHADER'
|
|
107
|
+
}.${glError ? ` WebGlContext Error: ${glError}` : ''}`,
|
|
108
|
+
);
|
|
104
109
|
}
|
|
110
|
+
|
|
105
111
|
glw.shaderSource(shader, source);
|
|
106
112
|
glw.compileShader(shader);
|
|
107
113
|
const success = !!glw.getShaderParameter(shader, glw.COMPILE_STATUS);
|
|
@@ -109,7 +115,7 @@ export function createShader(
|
|
|
109
115
|
return shader;
|
|
110
116
|
}
|
|
111
117
|
|
|
112
|
-
console.
|
|
118
|
+
console.error(glw.getShaderInfoLog(shader));
|
|
113
119
|
glw.deleteShader(shader);
|
|
114
120
|
}
|
|
115
121
|
|
|
@@ -131,7 +137,7 @@ export function createProgram(
|
|
|
131
137
|
return program;
|
|
132
138
|
}
|
|
133
139
|
|
|
134
|
-
console.
|
|
140
|
+
console.warn(glw.getProgramInfoLog(program));
|
|
135
141
|
glw.deleteProgram(program);
|
|
136
142
|
return undefined;
|
|
137
143
|
}
|
|
@@ -93,7 +93,9 @@ export class SdfTrFontFace<
|
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
// Pre-load it
|
|
96
|
-
|
|
96
|
+
stage.txManager.once('initialized', () => {
|
|
97
|
+
this.texture.ctxTexture.load();
|
|
98
|
+
});
|
|
97
99
|
|
|
98
100
|
// Set this.data to the fetched data from dataUrl
|
|
99
101
|
fetch(atlasDataUrl)
|
|
@@ -102,7 +104,7 @@ export class SdfTrFontFace<
|
|
|
102
104
|
(this.data as SdfFontData) = await response.json();
|
|
103
105
|
assertTruthy(this.data);
|
|
104
106
|
// Add all the glyphs to the glyph map
|
|
105
|
-
|
|
107
|
+
|
|
106
108
|
let maxCharHeight = 0;
|
|
107
109
|
this.data.chars.forEach((glyph) => {
|
|
108
110
|
this.glyphMap.set(glyph.id, glyph);
|
|
@@ -111,10 +113,10 @@ export class SdfTrFontFace<
|
|
|
111
113
|
maxCharHeight = charHeight;
|
|
112
114
|
}
|
|
113
115
|
});
|
|
114
|
-
|
|
116
|
+
|
|
115
117
|
(this.maxCharHeight as number) = maxCharHeight;
|
|
116
118
|
// We know `data` is defined here, because we just set it
|
|
117
|
-
|
|
119
|
+
|
|
118
120
|
(this.shaper as FontShaper) = new SdfFontShaper(
|
|
119
121
|
this.data,
|
|
120
122
|
this.glyphMap,
|
|
@@ -26,8 +26,7 @@ import {
|
|
|
26
26
|
getNormalizedRgbaComponents,
|
|
27
27
|
getNormalizedAlphaComponent,
|
|
28
28
|
} from '../../lib/utils.js';
|
|
29
|
-
import type
|
|
30
|
-
import { TrFontManager, type FontFamilyMap } from '../TrFontManager.js';
|
|
29
|
+
import { type FontFamilyMap } from '../TrFontManager.js';
|
|
31
30
|
import type { TrFontFace } from '../font-face-types/TrFontFace.js';
|
|
32
31
|
import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
|
|
33
32
|
import {
|
|
@@ -47,7 +46,7 @@ const resolvedGlobal = typeof self === 'undefined' ? globalThis : self;
|
|
|
47
46
|
/**
|
|
48
47
|
* Global font set regardless of if run in the main thread or a web worker
|
|
49
48
|
*/
|
|
50
|
-
const globalFontSet = (
|
|
49
|
+
const globalFontSet: FontFaceSet = (resolvedGlobal.document?.fonts ||
|
|
51
50
|
(resolvedGlobal as any).fonts) as FontFaceSet;
|
|
52
51
|
|
|
53
52
|
declare module './TextRenderer.js' {
|
|
@@ -99,7 +98,7 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
|
|
|
99
98
|
} else {
|
|
100
99
|
this.canvas = document.createElement('canvas');
|
|
101
100
|
}
|
|
102
|
-
|
|
101
|
+
|
|
103
102
|
let context = this.canvas.getContext('2d', {
|
|
104
103
|
willReadFrequently: true,
|
|
105
104
|
}) as OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;
|