@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta9
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/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -1
- package/dist/exports/utils.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +24 -49
- package/dist/src/core/CoreNode.js +257 -255
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +1 -1
- package/dist/src/core/CoreTextNode.js +14 -15
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +4 -9
- package/dist/src/core/CoreTextureManager.js +41 -78
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +12 -27
- package/dist/src/core/Stage.js +50 -37
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +10 -1
- package/dist/src/core/TextureMemoryManager.js +103 -50
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.js +5 -0
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +11 -4
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +19 -2
- package/dist/src/core/lib/WebGlContextWrapper.js +56 -25
- package/dist/src/core/lib/WebGlContextWrapper.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/CoreShaderNode.d.ts +1 -0
- package/dist/src/core/renderers/CoreShaderNode.js +9 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +4 -2
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +31 -13
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +1 -1
- package/dist/src/core/textures/ImageTexture.js +1 -1
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +12 -0
- package/dist/src/core/textures/Texture.js +19 -0
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/main-api/Inspector.d.ts +6 -1
- package/dist/src/main-api/Inspector.js +42 -4
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +62 -43
- package/dist/src/main-api/Renderer.js +119 -31
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/utils.ts +7 -1
- package/package.json +1 -1
- package/src/core/CoreNode.ts +307 -313
- package/src/core/CoreTextNode.ts +23 -20
- package/src/core/CoreTextureManager.ts +40 -99
- package/src/core/Stage.ts +68 -65
- package/src/core/TextureMemoryManager.ts +135 -67
- package/src/core/animations/CoreAnimation.ts +7 -0
- package/src/core/animations/CoreAnimationController.ts +13 -4
- package/src/core/lib/WebGlContextWrapper.ts +69 -75
- package/src/core/renderers/CoreRenderer.ts +1 -0
- package/src/core/renderers/CoreShaderNode.ts +10 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
- package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
- package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +37 -14
- package/src/core/shaders/canvas/LinearGradient.ts +8 -6
- package/src/core/shaders/canvas/RadialGradient.ts +22 -36
- package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
- package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
- package/src/core/shaders/templates/BorderTemplate.ts +1 -1
- package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
- package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
- package/src/core/shaders/webgl/HolePunch.ts +4 -7
- package/src/core/shaders/webgl/LinearGradient.ts +5 -4
- package/src/core/shaders/webgl/RadialGradient.ts +7 -6
- package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
- package/src/core/textures/ImageTexture.ts +17 -16
- package/src/core/textures/Texture.ts +23 -0
- package/src/main-api/Inspector.ts +52 -5
- package/src/main-api/Renderer.ts +222 -77
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -56
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/temp.d.ts +0 -1
- package/dist/src/core/temp.js +0 -77
- package/dist/src/core/temp.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { isProductionEnvironment } from '../utils.js';
|
|
20
20
|
import type { Stage } from './Stage.js';
|
|
21
|
-
import { TextureType, type
|
|
21
|
+
import { Texture, TextureType, type TextureState } from './textures/Texture.js';
|
|
22
22
|
import { bytesToMb } from './utils.js';
|
|
23
23
|
|
|
24
24
|
export interface TextureMemoryManagerSettings {
|
|
@@ -117,15 +117,21 @@ export class TextureMemoryManager {
|
|
|
117
117
|
private memUsed = 0;
|
|
118
118
|
private loadedTextures: Map<Texture, number> = new Map();
|
|
119
119
|
private orphanedTextures: Texture[] = [];
|
|
120
|
-
private criticalThreshold: number;
|
|
121
|
-
private targetThreshold: number;
|
|
122
|
-
private cleanupInterval: number;
|
|
123
|
-
private debugLogging: boolean;
|
|
120
|
+
private criticalThreshold: number = 124e6;
|
|
121
|
+
private targetThreshold: number = 0.5;
|
|
122
|
+
private cleanupInterval: number = 5000;
|
|
123
|
+
private debugLogging: boolean = false;
|
|
124
|
+
private loggingID: ReturnType<typeof setInterval> =
|
|
125
|
+
0 as unknown as ReturnType<typeof setInterval>;
|
|
124
126
|
private lastCleanupTime = 0;
|
|
125
|
-
private baselineMemoryAllocation: number;
|
|
127
|
+
private baselineMemoryAllocation: number = 26e6;
|
|
126
128
|
|
|
127
129
|
public criticalCleanupRequested = false;
|
|
128
|
-
public doNotExceedCriticalThreshold: boolean;
|
|
130
|
+
public doNotExceedCriticalThreshold: boolean = false;
|
|
131
|
+
private originalSetTextureMemUse: (
|
|
132
|
+
texture: Texture,
|
|
133
|
+
byteSize: number,
|
|
134
|
+
) => void;
|
|
129
135
|
|
|
130
136
|
/**
|
|
131
137
|
* The current frame time in milliseconds
|
|
@@ -138,46 +144,9 @@ export class TextureMemoryManager {
|
|
|
138
144
|
public frameTime = 0;
|
|
139
145
|
|
|
140
146
|
constructor(private stage: Stage, settings: TextureMemoryManagerSettings) {
|
|
141
|
-
|
|
142
|
-
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
143
|
-
this.criticalThreshold = Math.round(criticalThreshold);
|
|
144
|
-
const targetFraction = Math.max(
|
|
145
|
-
0,
|
|
146
|
-
Math.min(1, settings.targetThresholdLevel),
|
|
147
|
-
);
|
|
148
|
-
this.cleanupInterval = settings.cleanupInterval;
|
|
149
|
-
this.debugLogging = settings.debugLogging;
|
|
150
|
-
this.baselineMemoryAllocation = Math.round(
|
|
151
|
-
settings.baselineMemoryAllocation,
|
|
152
|
-
);
|
|
153
|
-
this.targetThreshold = Math.max(
|
|
154
|
-
Math.round(criticalThreshold * targetFraction),
|
|
155
|
-
this.baselineMemoryAllocation,
|
|
156
|
-
);
|
|
157
|
-
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
158
|
-
|
|
159
|
-
if (settings.debugLogging) {
|
|
160
|
-
let lastMemUse = 0;
|
|
161
|
-
setInterval(() => {
|
|
162
|
-
if (lastMemUse !== this.memUsed) {
|
|
163
|
-
lastMemUse = this.memUsed;
|
|
164
|
-
console.log(
|
|
165
|
-
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
166
|
-
this.memUsed,
|
|
167
|
-
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
168
|
-
(this.memUsed / this.criticalThreshold) *
|
|
169
|
-
100
|
|
170
|
-
).toFixed(1)}%)`,
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
}, 1000);
|
|
174
|
-
}
|
|
147
|
+
this.originalSetTextureMemUse = this.setTextureMemUse;
|
|
175
148
|
|
|
176
|
-
|
|
177
|
-
// setTextureMemUse method with a no-op function.
|
|
178
|
-
if (criticalThreshold === 0) {
|
|
179
|
-
this.setTextureMemUse = () => {};
|
|
180
|
-
}
|
|
149
|
+
this.updateSettings(settings);
|
|
181
150
|
}
|
|
182
151
|
|
|
183
152
|
/**
|
|
@@ -248,14 +217,14 @@ export class TextureMemoryManager {
|
|
|
248
217
|
|
|
249
218
|
cleanupQuick(critical: boolean) {
|
|
250
219
|
// Free non-renderable textures until we reach the target threshold
|
|
220
|
+
const platform = this.stage.platform;
|
|
251
221
|
const memTarget = this.targetThreshold;
|
|
252
|
-
const
|
|
253
|
-
const timestamp = this.stage.platform.getTimeStamp();
|
|
222
|
+
const timestamp = platform.getTimeStamp();
|
|
254
223
|
|
|
255
224
|
while (
|
|
256
225
|
this.memUsed >= memTarget &&
|
|
257
226
|
this.orphanedTextures.length > 0 &&
|
|
258
|
-
(critical ||
|
|
227
|
+
(critical || platform.getTimeStamp() - timestamp < 10)
|
|
259
228
|
) {
|
|
260
229
|
const texture = this.orphanedTextures.shift();
|
|
261
230
|
|
|
@@ -268,15 +237,40 @@ export class TextureMemoryManager {
|
|
|
268
237
|
continue;
|
|
269
238
|
}
|
|
270
239
|
|
|
271
|
-
|
|
272
|
-
|
|
240
|
+
// Skip textures that are in transitional states - we only want to clean up
|
|
241
|
+
// textures that are in a stable state (loaded, failed, or freed)
|
|
242
|
+
if (Texture.TRANSITIONAL_TEXTURE_STATES.includes(texture.state)) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
this.destroyTexture(texture);
|
|
273
247
|
}
|
|
274
248
|
}
|
|
275
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Destroy a texture and remove it from the memory manager
|
|
252
|
+
*
|
|
253
|
+
* @param texture - The texture to destroy
|
|
254
|
+
*/
|
|
255
|
+
destroyTexture(texture: Texture) {
|
|
256
|
+
if (this.debugLogging === true) {
|
|
257
|
+
console.log(
|
|
258
|
+
`[TextureMemoryManager] Destroying texture. State: ${texture.state}`,
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const txManager = this.stage.txManager;
|
|
263
|
+
txManager.removeTextureFromQueue(texture);
|
|
264
|
+
txManager.removeTextureFromCache(texture);
|
|
265
|
+
|
|
266
|
+
texture.destroy();
|
|
267
|
+
|
|
268
|
+
this.removeFromOrphanedTextures(texture);
|
|
269
|
+
this.loadedTextures.delete(texture);
|
|
270
|
+
}
|
|
276
271
|
cleanupDeep(critical: boolean) {
|
|
277
272
|
// Free non-renderable textures until we reach the target threshold
|
|
278
273
|
const memTarget = critical ? this.criticalThreshold : this.targetThreshold;
|
|
279
|
-
const txManager = this.stage.txManager;
|
|
280
274
|
|
|
281
275
|
// sort by renderability
|
|
282
276
|
const filteredAndSortedTextures: Texture[] = [];
|
|
@@ -314,21 +308,27 @@ export class TextureMemoryManager {
|
|
|
314
308
|
break;
|
|
315
309
|
}
|
|
316
310
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
311
|
+
// Skip textures that are in transitional states - we only want to clean up
|
|
312
|
+
// textures that are in a stable state (loaded, failed, or freed)
|
|
313
|
+
if (Texture.TRANSITIONAL_TEXTURE_STATES.includes(texture.state)) {
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
this.destroyTexture(texture);
|
|
321
318
|
}
|
|
322
319
|
}
|
|
323
320
|
|
|
324
321
|
cleanup(aggressive: boolean = false) {
|
|
325
322
|
const critical = this.criticalCleanupRequested;
|
|
323
|
+
const criticalThreshold = this.criticalThreshold;
|
|
324
|
+
const memUsed = this.memUsed;
|
|
325
|
+
const stage = this.stage;
|
|
326
326
|
this.lastCleanupTime = this.frameTime;
|
|
327
327
|
|
|
328
328
|
if (critical === true) {
|
|
329
|
-
|
|
329
|
+
stage.queueFrameEvent('criticalCleanup', {
|
|
330
330
|
memUsed: this.memUsed,
|
|
331
|
-
criticalThreshold:
|
|
331
|
+
criticalThreshold: criticalThreshold,
|
|
332
332
|
});
|
|
333
333
|
}
|
|
334
334
|
|
|
@@ -338,23 +338,32 @@ export class TextureMemoryManager {
|
|
|
338
338
|
);
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
+
// Note: We skip textures in transitional states during cleanup:
|
|
342
|
+
// - 'initial': These textures haven't started loading yet
|
|
343
|
+
// - 'fetching': These textures are in the process of being fetched
|
|
344
|
+
// - 'fetched': These textures have been fetched but not yet uploaded to GPU
|
|
345
|
+
// - 'loading': These textures are being uploaded to the GPU
|
|
346
|
+
//
|
|
347
|
+
// For 'failed' and 'freed' states, we only remove them from the tracking
|
|
348
|
+
// arrays without trying to free GPU resources that don't exist.
|
|
349
|
+
|
|
341
350
|
// try a quick cleanup first
|
|
342
351
|
this.cleanupQuick(critical);
|
|
343
352
|
|
|
344
353
|
// if we're still above the target threshold, do a deep cleanup
|
|
345
|
-
if (aggressive === true &&
|
|
354
|
+
if (aggressive === true && memUsed >= criticalThreshold) {
|
|
346
355
|
this.cleanupDeep(critical);
|
|
347
356
|
}
|
|
348
357
|
|
|
349
|
-
if (
|
|
350
|
-
|
|
351
|
-
memUsed:
|
|
352
|
-
criticalThreshold:
|
|
358
|
+
if (memUsed >= criticalThreshold) {
|
|
359
|
+
stage.queueFrameEvent('criticalCleanupFailed', {
|
|
360
|
+
memUsed: memUsed,
|
|
361
|
+
criticalThreshold: criticalThreshold,
|
|
353
362
|
});
|
|
354
363
|
|
|
355
364
|
if (this.debugLogging === true || isProductionEnvironment === false) {
|
|
356
365
|
console.warn(
|
|
357
|
-
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${
|
|
366
|
+
`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${memUsed}`,
|
|
358
367
|
);
|
|
359
368
|
}
|
|
360
369
|
} else {
|
|
@@ -374,9 +383,9 @@ export class TextureMemoryManager {
|
|
|
374
383
|
const renderableMemUsed = [...this.loadedTextures.keys()].reduce(
|
|
375
384
|
(acc, texture) => {
|
|
376
385
|
renderableTexturesLoaded += texture.renderable ? 1 : 0;
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
);
|
|
386
|
+
// Get the memory used by the texture, defaulting to 0 if not found
|
|
387
|
+
const textureMemory = this.loadedTextures.get(texture) ?? 0;
|
|
388
|
+
return acc + (texture.renderable ? textureMemory : 0);
|
|
380
389
|
},
|
|
381
390
|
this.baselineMemoryAllocation,
|
|
382
391
|
);
|
|
@@ -391,4 +400,63 @@ export class TextureMemoryManager {
|
|
|
391
400
|
baselineMemoryAllocation: this.baselineMemoryAllocation,
|
|
392
401
|
};
|
|
393
402
|
}
|
|
403
|
+
|
|
404
|
+
public updateSettings(settings: TextureMemoryManagerSettings): void {
|
|
405
|
+
const { criticalThreshold, doNotExceedCriticalThreshold } = settings;
|
|
406
|
+
|
|
407
|
+
this.doNotExceedCriticalThreshold = doNotExceedCriticalThreshold || false;
|
|
408
|
+
this.criticalThreshold = Math.round(criticalThreshold);
|
|
409
|
+
|
|
410
|
+
if (this.memUsed === 0) {
|
|
411
|
+
this.memUsed = Math.round(settings.baselineMemoryAllocation);
|
|
412
|
+
} else {
|
|
413
|
+
const memUsedExBaseline = this.memUsed - this.baselineMemoryAllocation;
|
|
414
|
+
this.memUsed = Math.round(
|
|
415
|
+
settings.baselineMemoryAllocation + memUsedExBaseline,
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
this.baselineMemoryAllocation = Math.round(
|
|
419
|
+
settings.baselineMemoryAllocation,
|
|
420
|
+
);
|
|
421
|
+
const targetFraction = Math.max(
|
|
422
|
+
0,
|
|
423
|
+
Math.min(1, settings.targetThresholdLevel),
|
|
424
|
+
);
|
|
425
|
+
this.targetThreshold = Math.max(
|
|
426
|
+
Math.round(criticalThreshold * targetFraction),
|
|
427
|
+
this.baselineMemoryAllocation,
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
this.cleanupInterval = settings.cleanupInterval;
|
|
431
|
+
this.debugLogging = settings.debugLogging;
|
|
432
|
+
|
|
433
|
+
if (this.loggingID && !settings.debugLogging) {
|
|
434
|
+
clearInterval(this.loggingID);
|
|
435
|
+
this.loggingID = 0 as unknown as ReturnType<typeof setInterval>;
|
|
436
|
+
}
|
|
437
|
+
if (settings.debugLogging && !this.loggingID) {
|
|
438
|
+
let lastMemUse = 0;
|
|
439
|
+
this.loggingID = setInterval(() => {
|
|
440
|
+
if (lastMemUse !== this.memUsed) {
|
|
441
|
+
lastMemUse = this.memUsed;
|
|
442
|
+
console.log(
|
|
443
|
+
`[TextureMemoryManager] Memory used: ${bytesToMb(
|
|
444
|
+
this.memUsed,
|
|
445
|
+
)} mb / ${bytesToMb(this.criticalThreshold)} mb (${(
|
|
446
|
+
(this.memUsed / this.criticalThreshold) *
|
|
447
|
+
100
|
|
448
|
+
).toFixed(1)}%)`,
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
}, 1000);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// If the threshold is 0, we disable the memory manager by replacing the
|
|
455
|
+
// setTextureMemUse method with a no-op function.
|
|
456
|
+
if (criticalThreshold === 0) {
|
|
457
|
+
this.setTextureMemUse = () => {};
|
|
458
|
+
} else {
|
|
459
|
+
this.setTextureMemUse = this.originalSetTextureMemUse;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
394
462
|
}
|
|
@@ -215,6 +215,13 @@ export class CoreAnimation extends EventEmitter {
|
|
|
215
215
|
update(dt: number) {
|
|
216
216
|
const { duration, loop, easing, stopMethod } = this.settings;
|
|
217
217
|
const { delayFor } = this;
|
|
218
|
+
|
|
219
|
+
if (this.node.destroyed) {
|
|
220
|
+
// cleanup
|
|
221
|
+
this.emit('destroyed', {});
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
218
225
|
if (duration === 0 && delayFor === 0) {
|
|
219
226
|
this.emit('finished', {});
|
|
220
227
|
return;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
1
|
/*
|
|
3
2
|
* If not stated otherwise in this file or this component's LICENSE file the
|
|
4
3
|
* following copyright and licenses apply:
|
|
@@ -52,6 +51,7 @@ export class CoreAnimationController
|
|
|
52
51
|
this.onAnimating = this.onAnimating.bind(this);
|
|
53
52
|
this.onFinished = this.onFinished.bind(this);
|
|
54
53
|
this.onTick = this.onTick.bind(this);
|
|
54
|
+
this.onDestroy = this.onDestroy.bind(this);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
start(): IAnimationController {
|
|
@@ -96,6 +96,7 @@ export class CoreAnimationController
|
|
|
96
96
|
this.animation.once('finished', this.onFinished);
|
|
97
97
|
this.animation.on('animating', this.onAnimating);
|
|
98
98
|
this.animation.on('tick', this.onTick);
|
|
99
|
+
this.animation.on('destroyed', this.onDestroy);
|
|
99
100
|
// Then register the animation
|
|
100
101
|
this.manager.registerAnimation(this.animation);
|
|
101
102
|
}
|
|
@@ -107,6 +108,7 @@ export class CoreAnimationController
|
|
|
107
108
|
this.animation.off('finished', this.onFinished);
|
|
108
109
|
this.animation.off('animating', this.onAnimating);
|
|
109
110
|
this.animation.off('tick', this.onTick);
|
|
111
|
+
this.animation.off('destroy', this.onDestroy);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
private makeStoppedPromise(): void {
|
|
@@ -117,8 +119,12 @@ export class CoreAnimationController
|
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
122
|
+
private onDestroy(this: CoreAnimationController): void {
|
|
123
|
+
this.unregisterAnimation();
|
|
124
|
+
this.state = 'stopped';
|
|
125
|
+
}
|
|
126
|
+
|
|
120
127
|
private onFinished(this: CoreAnimationController): void {
|
|
121
|
-
assertTruthy(this.stoppedResolve);
|
|
122
128
|
// If the animation is looping, then we need to restart it.
|
|
123
129
|
const { loop, stopMethod } = this.animation.settings;
|
|
124
130
|
|
|
@@ -136,8 +142,11 @@ export class CoreAnimationController
|
|
|
136
142
|
this.unregisterAnimation();
|
|
137
143
|
|
|
138
144
|
// resolve promise
|
|
139
|
-
this.stoppedResolve
|
|
140
|
-
|
|
145
|
+
if (this.stoppedResolve !== null) {
|
|
146
|
+
this.stoppedResolve();
|
|
147
|
+
this.stoppedResolve = null;
|
|
148
|
+
}
|
|
149
|
+
|
|
141
150
|
this.emit('stopped', this);
|
|
142
151
|
this.state = 'stopped';
|
|
143
152
|
}
|
|
@@ -50,6 +50,7 @@ export class WebGlContextWrapper {
|
|
|
50
50
|
private boundArrayBuffer: WebGLBuffer | null;
|
|
51
51
|
private boundElementArrayBuffer: WebGLBuffer | null;
|
|
52
52
|
private curProgram: WebGLProgram | null;
|
|
53
|
+
private curUniformLocations: Record<string, WebGLUniformLocation> = {};
|
|
53
54
|
//#endregion Cached WebGL State
|
|
54
55
|
|
|
55
56
|
//#region Canvas
|
|
@@ -689,16 +690,23 @@ export class WebGlContextWrapper {
|
|
|
689
690
|
* @param program
|
|
690
691
|
* @returns object with numbers
|
|
691
692
|
*/
|
|
692
|
-
getUniformLocations(
|
|
693
|
+
getUniformLocations(
|
|
694
|
+
program: WebGLProgram,
|
|
695
|
+
): Record<string, WebGLUniformLocation> {
|
|
693
696
|
const gl = this.gl;
|
|
694
697
|
const length = gl.getProgramParameter(
|
|
695
698
|
program,
|
|
696
699
|
gl.ACTIVE_UNIFORMS,
|
|
697
700
|
) as number;
|
|
698
|
-
const result = {} as Record<string,
|
|
701
|
+
const result = {} as Record<string, WebGLUniformLocation>;
|
|
699
702
|
for (let i = 0; i < length; i++) {
|
|
700
|
-
const
|
|
701
|
-
|
|
703
|
+
const info = gl.getActiveUniform(program, i) as WebGLActiveInfo;
|
|
704
|
+
//remove bracket + value from uniform name;
|
|
705
|
+
let name = info.name.replace(/\[.*?\]/g, '');
|
|
706
|
+
result[name] = gl.getUniformLocation(
|
|
707
|
+
program,
|
|
708
|
+
name,
|
|
709
|
+
) as WebGLUniformLocation;
|
|
702
710
|
}
|
|
703
711
|
return result;
|
|
704
712
|
}
|
|
@@ -730,12 +738,16 @@ export class WebGlContextWrapper {
|
|
|
730
738
|
* @param program
|
|
731
739
|
* @returns
|
|
732
740
|
*/
|
|
733
|
-
useProgram(
|
|
741
|
+
useProgram(
|
|
742
|
+
program: WebGLProgram | null,
|
|
743
|
+
uniformLocations: Record<string, WebGLUniformLocation>,
|
|
744
|
+
) {
|
|
734
745
|
if (this.curProgram === program) {
|
|
735
746
|
return;
|
|
736
747
|
}
|
|
737
748
|
this.gl.useProgram(program);
|
|
738
749
|
this.curProgram = program;
|
|
750
|
+
this.curUniformLocations = uniformLocations;
|
|
739
751
|
}
|
|
740
752
|
|
|
741
753
|
/**
|
|
@@ -745,10 +757,7 @@ export class WebGlContextWrapper {
|
|
|
745
757
|
* @param v0 - The value to set.
|
|
746
758
|
*/
|
|
747
759
|
uniform1f(location: string, v0: number) {
|
|
748
|
-
this.gl.uniform1f(
|
|
749
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
750
|
-
v0,
|
|
751
|
-
);
|
|
760
|
+
this.gl.uniform1f(this.curUniformLocations[location] || null, v0);
|
|
752
761
|
}
|
|
753
762
|
|
|
754
763
|
/**
|
|
@@ -758,10 +767,7 @@ export class WebGlContextWrapper {
|
|
|
758
767
|
* @param value - The array of values to set.
|
|
759
768
|
*/
|
|
760
769
|
uniform1fv(location: string, value: Float32Array) {
|
|
761
|
-
this.gl.uniform1fv(
|
|
762
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
763
|
-
value,
|
|
764
|
-
);
|
|
770
|
+
this.gl.uniform1fv(this.curUniformLocations[location] || null, value);
|
|
765
771
|
}
|
|
766
772
|
|
|
767
773
|
/**
|
|
@@ -771,10 +777,7 @@ export class WebGlContextWrapper {
|
|
|
771
777
|
* @param v0 - The value to set.
|
|
772
778
|
*/
|
|
773
779
|
uniform1i(location: string, v0: number) {
|
|
774
|
-
this.gl.uniform1i(
|
|
775
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
776
|
-
v0,
|
|
777
|
-
);
|
|
780
|
+
this.gl.uniform1i(this.curUniformLocations[location] || null, v0);
|
|
778
781
|
}
|
|
779
782
|
|
|
780
783
|
/**
|
|
@@ -784,10 +787,7 @@ export class WebGlContextWrapper {
|
|
|
784
787
|
* @param value - The array of values to set.
|
|
785
788
|
*/
|
|
786
789
|
uniform1iv(location: string, value: Int32Array) {
|
|
787
|
-
this.gl.uniform1iv(
|
|
788
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
789
|
-
value,
|
|
790
|
-
);
|
|
790
|
+
this.gl.uniform1iv(this.curUniformLocations[location] || null, value);
|
|
791
791
|
}
|
|
792
792
|
|
|
793
793
|
/**
|
|
@@ -798,11 +798,7 @@ export class WebGlContextWrapper {
|
|
|
798
798
|
* @param v1 - The second component of the vector.
|
|
799
799
|
*/
|
|
800
800
|
uniform2f(location: string, v0: number, v1: number) {
|
|
801
|
-
this.gl.uniform2f(
|
|
802
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
803
|
-
v0,
|
|
804
|
-
v1,
|
|
805
|
-
);
|
|
801
|
+
this.gl.uniform2f(this.curUniformLocations[location] || null, v0, v1);
|
|
806
802
|
}
|
|
807
803
|
|
|
808
804
|
/**
|
|
@@ -813,7 +809,7 @@ export class WebGlContextWrapper {
|
|
|
813
809
|
*/
|
|
814
810
|
uniform2fa(location: string, value: Vec2) {
|
|
815
811
|
this.gl.uniform2f(
|
|
816
|
-
this.
|
|
812
|
+
this.curUniformLocations[location] || null,
|
|
817
813
|
value[0],
|
|
818
814
|
value[1],
|
|
819
815
|
);
|
|
@@ -826,10 +822,7 @@ export class WebGlContextWrapper {
|
|
|
826
822
|
* @param value - The array of vec2 values to set.
|
|
827
823
|
*/
|
|
828
824
|
uniform2fv(location: string, value: Float32Array) {
|
|
829
|
-
this.gl.uniform2fv(
|
|
830
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
831
|
-
value,
|
|
832
|
-
);
|
|
825
|
+
this.gl.uniform2fv(this.curUniformLocations[location] || null, value);
|
|
833
826
|
}
|
|
834
827
|
|
|
835
828
|
/**
|
|
@@ -840,11 +833,7 @@ export class WebGlContextWrapper {
|
|
|
840
833
|
* @param v1 - The second component of the vector.
|
|
841
834
|
*/
|
|
842
835
|
uniform2i(location: string, v0: number, v1: number) {
|
|
843
|
-
this.gl.uniform2i(
|
|
844
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
845
|
-
v0,
|
|
846
|
-
v1,
|
|
847
|
-
);
|
|
836
|
+
this.gl.uniform2i(this.curUniformLocations[location] || null, v0, v1);
|
|
848
837
|
}
|
|
849
838
|
|
|
850
839
|
/**
|
|
@@ -854,10 +843,7 @@ export class WebGlContextWrapper {
|
|
|
854
843
|
* @param value - The array of ivec2 values to set.
|
|
855
844
|
*/
|
|
856
845
|
uniform2iv(location: string, value: Int32Array) {
|
|
857
|
-
this.gl.uniform2iv(
|
|
858
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
859
|
-
value,
|
|
860
|
-
);
|
|
846
|
+
this.gl.uniform2iv(this.curUniformLocations[location] || null, value);
|
|
861
847
|
}
|
|
862
848
|
|
|
863
849
|
/**
|
|
@@ -869,12 +855,7 @@ export class WebGlContextWrapper {
|
|
|
869
855
|
* @param v2 - The third component of the vector.
|
|
870
856
|
*/
|
|
871
857
|
uniform3f(location: string, v0: number, v1: number, v2: number) {
|
|
872
|
-
this.gl.uniform3f(
|
|
873
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
874
|
-
v0,
|
|
875
|
-
v1,
|
|
876
|
-
v2,
|
|
877
|
-
);
|
|
858
|
+
this.gl.uniform3f(this.curUniformLocations[location] || null, v0, v1, v2);
|
|
878
859
|
}
|
|
879
860
|
|
|
880
861
|
/**
|
|
@@ -885,7 +866,7 @@ export class WebGlContextWrapper {
|
|
|
885
866
|
*/
|
|
886
867
|
uniform3fa(location: string, value: Vec3) {
|
|
887
868
|
this.gl.uniform3f(
|
|
888
|
-
this.
|
|
869
|
+
this.curUniformLocations[location] || null,
|
|
889
870
|
value[0],
|
|
890
871
|
value[1],
|
|
891
872
|
value[2],
|
|
@@ -899,10 +880,7 @@ export class WebGlContextWrapper {
|
|
|
899
880
|
* @param value - The array of vec3 values to set.
|
|
900
881
|
*/
|
|
901
882
|
uniform3fv(location: string, value: Float32Array) {
|
|
902
|
-
this.gl.uniform3fv(
|
|
903
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
904
|
-
value,
|
|
905
|
-
);
|
|
883
|
+
this.gl.uniform3fv(this.curUniformLocations[location] || null, value);
|
|
906
884
|
}
|
|
907
885
|
|
|
908
886
|
/**
|
|
@@ -914,12 +892,7 @@ export class WebGlContextWrapper {
|
|
|
914
892
|
* @param v2 - The third component of the vector.
|
|
915
893
|
*/
|
|
916
894
|
uniform3i(location: string, v0: number, v1: number, v2: number) {
|
|
917
|
-
this.gl.uniform3i(
|
|
918
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
919
|
-
v0,
|
|
920
|
-
v1,
|
|
921
|
-
v2,
|
|
922
|
-
);
|
|
895
|
+
this.gl.uniform3i(this.curUniformLocations[location] || null, v0, v1, v2);
|
|
923
896
|
}
|
|
924
897
|
|
|
925
898
|
/**
|
|
@@ -929,10 +902,7 @@ export class WebGlContextWrapper {
|
|
|
929
902
|
* @param value - The array of ivec3 values to set.
|
|
930
903
|
*/
|
|
931
904
|
uniform3iv(location: string, value: Int32Array) {
|
|
932
|
-
this.gl.uniform3iv(
|
|
933
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
934
|
-
value,
|
|
935
|
-
);
|
|
905
|
+
this.gl.uniform3iv(this.curUniformLocations[location] || null, value);
|
|
936
906
|
}
|
|
937
907
|
|
|
938
908
|
/**
|
|
@@ -946,7 +916,7 @@ export class WebGlContextWrapper {
|
|
|
946
916
|
*/
|
|
947
917
|
uniform4f(location: string, v0: number, v1: number, v2: number, v3: number) {
|
|
948
918
|
this.gl.uniform4f(
|
|
949
|
-
this.
|
|
919
|
+
this.curUniformLocations[location] || null,
|
|
950
920
|
v0,
|
|
951
921
|
v1,
|
|
952
922
|
v2,
|
|
@@ -962,7 +932,7 @@ export class WebGlContextWrapper {
|
|
|
962
932
|
*/
|
|
963
933
|
uniform4fa(location: string, value: Vec4) {
|
|
964
934
|
this.gl.uniform4f(
|
|
965
|
-
this.
|
|
935
|
+
this.curUniformLocations[location] || null,
|
|
966
936
|
value[0],
|
|
967
937
|
value[1],
|
|
968
938
|
value[2],
|
|
@@ -977,10 +947,7 @@ export class WebGlContextWrapper {
|
|
|
977
947
|
* @param value - The array of vec4 values to set.
|
|
978
948
|
*/
|
|
979
949
|
uniform4fv(location: string, value: Float32Array) {
|
|
980
|
-
this.gl.uniform4fv(
|
|
981
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
982
|
-
value,
|
|
983
|
-
);
|
|
950
|
+
this.gl.uniform4fv(this.curUniformLocations[location] || null, value);
|
|
984
951
|
}
|
|
985
952
|
|
|
986
953
|
/**
|
|
@@ -994,7 +961,7 @@ export class WebGlContextWrapper {
|
|
|
994
961
|
*/
|
|
995
962
|
uniform4i(location: string, v0: number, v1: number, v2: number, v3: number) {
|
|
996
963
|
this.gl.uniform4i(
|
|
997
|
-
this.
|
|
964
|
+
this.curUniformLocations[location] || null,
|
|
998
965
|
v0,
|
|
999
966
|
v1,
|
|
1000
967
|
v2,
|
|
@@ -1009,10 +976,7 @@ export class WebGlContextWrapper {
|
|
|
1009
976
|
* @param value - The array of ivec4 values to set.
|
|
1010
977
|
*/
|
|
1011
978
|
uniform4iv(location: string, value: Int32Array) {
|
|
1012
|
-
this.gl.uniform4iv(
|
|
1013
|
-
this.gl.getUniformLocation(this.curProgram!, location),
|
|
1014
|
-
value,
|
|
1015
|
-
);
|
|
979
|
+
this.gl.uniform4iv(this.curUniformLocations[location] || null, value);
|
|
1016
980
|
}
|
|
1017
981
|
|
|
1018
982
|
/**
|
|
@@ -1024,7 +988,7 @@ export class WebGlContextWrapper {
|
|
|
1024
988
|
*/
|
|
1025
989
|
uniformMatrix2fv(location: string, value: Float32Array) {
|
|
1026
990
|
this.gl.uniformMatrix2fv(
|
|
1027
|
-
this.
|
|
991
|
+
this.curUniformLocations[location] || null,
|
|
1028
992
|
false,
|
|
1029
993
|
value,
|
|
1030
994
|
);
|
|
@@ -1037,7 +1001,7 @@ export class WebGlContextWrapper {
|
|
|
1037
1001
|
*/
|
|
1038
1002
|
uniformMatrix3fv(location: string, value: Float32Array) {
|
|
1039
1003
|
this.gl.uniformMatrix3fv(
|
|
1040
|
-
this.
|
|
1004
|
+
this.curUniformLocations[location] || null,
|
|
1041
1005
|
false,
|
|
1042
1006
|
value,
|
|
1043
1007
|
);
|
|
@@ -1050,7 +1014,7 @@ export class WebGlContextWrapper {
|
|
|
1050
1014
|
*/
|
|
1051
1015
|
uniformMatrix4fv(location: string, value: Float32Array) {
|
|
1052
1016
|
this.gl.uniformMatrix4fv(
|
|
1053
|
-
this.
|
|
1017
|
+
this.curUniformLocations[location] || null,
|
|
1054
1018
|
false,
|
|
1055
1019
|
value,
|
|
1056
1020
|
);
|
|
@@ -1319,6 +1283,36 @@ export class WebGlContextWrapper {
|
|
|
1319
1283
|
deleteShader(shader: WebGLShader) {
|
|
1320
1284
|
this.gl.deleteShader(shader);
|
|
1321
1285
|
}
|
|
1286
|
+
|
|
1287
|
+
/**
|
|
1288
|
+
* ```
|
|
1289
|
+
* gl.deleteBuffer(buffer);
|
|
1290
|
+
* ```
|
|
1291
|
+
*
|
|
1292
|
+
* @param buffer - The buffer to delete
|
|
1293
|
+
*/
|
|
1294
|
+
deleteBuffer(buffer: WebGLBuffer) {
|
|
1295
|
+
const { gl } = this;
|
|
1296
|
+
gl.deleteBuffer(buffer);
|
|
1297
|
+
|
|
1298
|
+
// Reset bound buffers if they match the deleted buffer
|
|
1299
|
+
if (this.boundArrayBuffer === buffer) {
|
|
1300
|
+
this.boundArrayBuffer = null;
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
/**
|
|
1305
|
+
* ```
|
|
1306
|
+
* gl.deleteVertexArray(vertexArray);
|
|
1307
|
+
* ```
|
|
1308
|
+
*
|
|
1309
|
+
* @param vertexArray - The vertex array object to delete
|
|
1310
|
+
*/
|
|
1311
|
+
deleteVertexArray(vertexArray: WebGLVertexArrayObject) {
|
|
1312
|
+
if (this.isWebGl2()) {
|
|
1313
|
+
(this.gl as WebGL2RenderingContext).deleteVertexArray(vertexArray);
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1322
1316
|
}
|
|
1323
1317
|
|
|
1324
1318
|
// prettier-ignore
|
|
@@ -104,6 +104,7 @@ export abstract class CoreRenderer {
|
|
|
104
104
|
abstract renderToTexture(node: CoreNode): void;
|
|
105
105
|
abstract getBufferInfo(): BufferInfo | null;
|
|
106
106
|
abstract getQuadCount(): number | null;
|
|
107
|
+
abstract updateViewport(): void;
|
|
107
108
|
abstract updateClearColor(color: number): void;
|
|
108
109
|
getTextureCoords?(node: CoreNode): TextureCoords;
|
|
109
110
|
}
|