From 0997370eb0f768a96377c6bd047132addede1375 Mon Sep 17 00:00:00 2001 From: Mat Groves Date: Wed, 22 May 2024 21:07:17 +0100 Subject: [PATCH] fix sdf multiple text issue --- src/scene/text-bitmap/BitmapTextPipe.ts | 21 +++++++++++---------- src/scene/text/sdfShader/SdfShader.ts | 9 +++++++-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/scene/text-bitmap/BitmapTextPipe.ts b/src/scene/text-bitmap/BitmapTextPipe.ts index 33da073bf0..b13c9f2ecd 100644 --- a/src/scene/text-bitmap/BitmapTextPipe.ts +++ b/src/scene/text-bitmap/BitmapTextPipe.ts @@ -27,7 +27,7 @@ export class BitmapTextPipe implements RenderPipe private _renderer: Renderer; private _gpuBitmapText: Record = {}; - private _sdfShader: SdfShader; + // private _sdfShader: SdfShader; constructor(renderer: Renderer) { @@ -81,6 +81,15 @@ export class BitmapTextPipe implements RenderPipe private _destroyRenderableByUid(renderableUid: number) { + const context = this._gpuBitmapText[renderableUid].context; + + if (context.customShader) + { + BigPool.return(context.customShader as PoolItem); + + context.customShader = null; + } + BigPool.return(this._gpuBitmapText[renderableUid] as PoolItem); this._gpuBitmapText[renderableUid] = null; } @@ -112,12 +121,7 @@ export class BitmapTextPipe implements RenderPipe { if (!context.customShader) { - if (!this._sdfShader) - { - this._sdfShader = new SdfShader(); - } - - context.customShader = this._sdfShader; + context.customShader = BigPool.get(SdfShader); } } @@ -221,9 +225,6 @@ export class BitmapTextPipe implements RenderPipe this._gpuBitmapText = null; - this._sdfShader?.destroy(true); - this._sdfShader = null; - this._renderer = null; } } diff --git a/src/scene/text/sdfShader/SdfShader.ts b/src/scene/text/sdfShader/SdfShader.ts index f66bf55b32..0ff4ddb737 100644 --- a/src/scene/text/sdfShader/SdfShader.ts +++ b/src/scene/text/sdfShader/SdfShader.ts @@ -16,6 +16,11 @@ import { maxRecommendedTextures } from '../../../rendering/renderers/shared/text import { localUniformMSDFBit, localUniformMSDFBitGl } from './shader-bits/localUniformMSDFBit'; import { mSDFBit, mSDFBitGl } from './shader-bits/mSDFBit'; +import type { GlProgram, GpuProgram } from '../../../rendering'; + +let gpuProgram: GpuProgram; +let glProgram: GlProgram; + export class SdfShader extends Shader { constructor() @@ -29,7 +34,7 @@ export class SdfShader extends Shader const maxTextures = maxRecommendedTextures(); - const gpuProgram = compileHighShaderGpuProgram({ + gpuProgram ??= compileHighShaderGpuProgram({ name: 'sdf-shader', bits: [ colorBit, @@ -40,7 +45,7 @@ export class SdfShader extends Shader ] }); - const glProgram = compileHighShaderGlProgram({ + glProgram ??= compileHighShaderGlProgram({ name: 'sdf-shader', bits: [ colorBitGl,