From c06c3025f28e351935fbc6da7058b0169c9eb9e8 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 27 May 2026 15:35:04 +0000 Subject: [PATCH] fix(addon-webgl): delete VAOs on renderer dispose Register vertex array objects for disposal in GlyphRenderer and RectangleRenderer, matching existing buffer and program cleanup. Fixes #5918 Co-authored-by: Daniel Imms --- addons/addon-webgl/src/GlyphRenderer.ts | 1 + addons/addon-webgl/src/RectangleRenderer.ts | 1 + addons/addon-webgl/src/Types.ts | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/addon-webgl/src/GlyphRenderer.ts b/addons/addon-webgl/src/GlyphRenderer.ts index 46b8efeb9..7a7e98496 100644 --- a/addons/addon-webgl/src/GlyphRenderer.ts +++ b/addons/addon-webgl/src/GlyphRenderer.ts @@ -137,6 +137,7 @@ export class GlyphRenderer extends Disposable { // Create and set the vertex array object this._vertexArrayObject = gl.createVertexArray(); + this._register(toDisposable(() => gl.deleteVertexArray(this._vertexArrayObject))); gl.bindVertexArray(this._vertexArrayObject); // Setup a_unitquad, this defines the 4 vertices of a rectangle diff --git a/addons/addon-webgl/src/RectangleRenderer.ts b/addons/addon-webgl/src/RectangleRenderer.ts index 81e129e5c..b2225de3a 100644 --- a/addons/addon-webgl/src/RectangleRenderer.ts +++ b/addons/addon-webgl/src/RectangleRenderer.ts @@ -103,6 +103,7 @@ export class RectangleRenderer extends Disposable { // Create and set the vertex array object this._vertexArrayObject = gl.createVertexArray(); + this._register(toDisposable(() => gl.deleteVertexArray(this._vertexArrayObject))); gl.bindVertexArray(this._vertexArrayObject); // Setup a_unitquad, this defines the 4 vertices of a rectangle diff --git a/addons/addon-webgl/src/Types.ts b/addons/addon-webgl/src/Types.ts index 67c9408d6..b3c51e842 100644 --- a/addons/addon-webgl/src/Types.ts +++ b/addons/addon-webgl/src/Types.ts @@ -28,7 +28,8 @@ export interface ICursorRenderModel { export interface IWebGL2RenderingContext extends WebGLRenderingContext { vertexAttribDivisor(index: number, divisor: number): void; createVertexArray(): IWebGLVertexArrayObject; - bindVertexArray(vao: IWebGLVertexArrayObject): void; + deleteVertexArray(vao: IWebGLVertexArrayObject | null): void; + bindVertexArray(vao: IWebGLVertexArrayObject | null): void; drawElementsInstanced(mode: number, count: number, type: number, offset: number, instanceCount: number): void; }