@@ -41,8 +41,8 @@ export class WebglRenderer extends Disposable implements IRenderer {
4141
4242 private _canvas : HTMLCanvasElement ;
4343 private _gl : IWebGL2RenderingContext ;
44- private _rectangleRenderer ?: RectangleRenderer ;
45- private _glyphRenderer ?: GlyphRenderer ;
44+ private _rectangleRenderer : MutableDisposable < RectangleRenderer > = this . register ( new MutableDisposable ( ) ) ;
45+ private _glyphRenderer : MutableDisposable < GlyphRenderer > = this . register ( new MutableDisposable ( ) ) ;
4646
4747 public readonly dimensions : IRenderDimensions ;
4848
@@ -128,7 +128,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
128128
129129 this . _core . screenElement ! . appendChild ( this . _canvas ) ;
130130
131- [ this . _rectangleRenderer , this . _glyphRenderer ] = this . _initializeWebGLState ( ) ;
131+ [ this . _rectangleRenderer . value , this . _glyphRenderer . value ] = this . _initializeWebGLState ( ) ;
132132
133133 this . _isAttached = this . _coreBrowserService . window . document . body . contains ( this . _core . screenElement ! ) ;
134134
@@ -182,10 +182,10 @@ export class WebglRenderer extends Disposable implements IRenderer {
182182 this . _core . screenElement ! . style . width = `${ this . dimensions . css . canvas . width } px` ;
183183 this . _core . screenElement ! . style . height = `${ this . dimensions . css . canvas . height } px` ;
184184
185- this . _rectangleRenderer ?. setDimensions ( this . dimensions ) ;
186- this . _rectangleRenderer ?. handleResize ( ) ;
187- this . _glyphRenderer ?. setDimensions ( this . dimensions ) ;
188- this . _glyphRenderer ?. handleResize ( ) ;
185+ this . _rectangleRenderer . value ?. setDimensions ( this . dimensions ) ;
186+ this . _rectangleRenderer . value ?. handleResize ( ) ;
187+ this . _glyphRenderer . value ?. setDimensions ( this . dimensions ) ;
188+ this . _glyphRenderer . value ?. handleResize ( ) ;
189189
190190 this . _refreshCharAtlas ( ) ;
191191
@@ -241,17 +241,14 @@ export class WebglRenderer extends Disposable implements IRenderer {
241241 * Initializes members dependent on WebGL context state.
242242 */
243243 private _initializeWebGLState ( ) : [ RectangleRenderer , GlyphRenderer ] {
244- // Dispose any previous rectangle and glyph renderers before creating new ones.
245- this . _rectangleRenderer ?. dispose ( ) ;
246- this . _glyphRenderer ?. dispose ( ) ;
247-
248- this . _rectangleRenderer = this . register ( new RectangleRenderer ( this . _terminal , this . _gl , this . dimensions , this . _themeService ) ) ;
249- this . _glyphRenderer = this . register ( new GlyphRenderer ( this . _terminal , this . _gl , this . dimensions ) ) ;
244+ this . _rectangleRenderer . value = new RectangleRenderer ( this . _terminal , this . _gl , this . dimensions , this . _themeService ) ;
245+ this . _glyphRenderer . value = new GlyphRenderer ( this . _terminal , this . _gl , this . dimensions ) ;
250246
251247 // Update dimensions and acquire char atlas
252248 this . handleCharSizeChanged ( ) ;
253249
254- return [ this . _rectangleRenderer , this . _glyphRenderer ] ;
250+ return [ this . _rectangleRenderer . value , this . _glyphRenderer . value
251+ ] ;
255252 }
256253
257254 /**
@@ -284,7 +281,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
284281 }
285282 this . _charAtlas = atlas ;
286283 this . _charAtlas . warmUp ( ) ;
287- this . _glyphRenderer ?. setAtlas ( this . _charAtlas ) ;
284+ this . _glyphRenderer . value ?. setAtlas ( this . _charAtlas ) ;
288285 }
289286
290287 /**
@@ -340,14 +337,14 @@ export class WebglRenderer extends Disposable implements IRenderer {
340337 l . handleGridChanged ( this . _terminal , start , end ) ;
341338 }
342339
343- if ( ! this . _glyphRenderer || ! this . _rectangleRenderer ) {
340+ if ( ! this . _glyphRenderer . value || ! this . _rectangleRenderer . value ) {
344341 return ;
345342 }
346343
347344 // Tell renderer the frame is beginning
348345 // upon a model clear also refresh the full viewport model
349346 // (also triggered by an atlas page merge, part of #4480)
350- if ( this . _glyphRenderer . beginFrame ( ) ) {
347+ if ( this . _glyphRenderer . value . beginFrame ( ) ) {
351348 this . _clearModel ( true ) ;
352349 this . _updateModel ( 0 , this . _terminal . rows - 1 ) ;
353350 } else {
@@ -356,10 +353,10 @@ export class WebglRenderer extends Disposable implements IRenderer {
356353 }
357354
358355 // Render
359- this . _rectangleRenderer ? .renderBackgrounds ( ) ;
360- this . _glyphRenderer ? .render ( this . _model ) ;
356+ this . _rectangleRenderer . value . renderBackgrounds ( ) ;
357+ this . _glyphRenderer . value . render ( this . _model ) ;
361358 if ( ! this . _cursorBlinkStateManager . value || this . _cursorBlinkStateManager . value . isCursorVisible ) {
362- this . _rectangleRenderer ? .renderCursor ( ) ;
359+ this . _rectangleRenderer . value . renderCursor ( ) ;
363360 }
364361 }
365362
@@ -502,7 +499,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
502499 this . _model . cells [ i + RENDER_MODEL_FG_OFFSET ] = this . _cellColorResolver . result . fg ;
503500 this . _model . cells [ i + RENDER_MODEL_EXT_OFFSET ] = this . _cellColorResolver . result . ext ;
504501
505- this . _glyphRenderer ! . updateCell ( x , y , code , this . _cellColorResolver . result . bg , this . _cellColorResolver . result . fg , this . _cellColorResolver . result . ext , chars , lastBg ) ;
502+ this . _glyphRenderer . value ! . updateCell ( x , y , code , this . _cellColorResolver . result . bg , this . _cellColorResolver . result . fg , this . _cellColorResolver . result . ext , chars , lastBg ) ;
506503
507504 if ( isJoined ) {
508505 // Restore work cell
@@ -511,7 +508,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
511508 // Null out non-first cells
512509 for ( x ++ ; x < lastCharX ; x ++ ) {
513510 j = ( ( y * terminal . cols ) + x ) * RENDER_MODEL_INDICIES_PER_CELL ;
514- this . _glyphRenderer ! . updateCell ( x , y , NULL_CELL_CODE , 0 , 0 , 0 , NULL_CELL_CHAR , 0 ) ;
511+ this . _glyphRenderer . value ! . updateCell ( x , y , NULL_CELL_CODE , 0 , 0 , 0 , NULL_CELL_CHAR , 0 ) ;
515512 this . _model . cells [ j ] = NULL_CELL_CODE ;
516513 this . _model . cells [ j + RENDER_MODEL_BG_OFFSET ] = this . _cellColorResolver . result . bg ;
517514 this . _model . cells [ j + RENDER_MODEL_FG_OFFSET ] = this . _cellColorResolver . result . fg ;
@@ -521,9 +518,9 @@ export class WebglRenderer extends Disposable implements IRenderer {
521518 }
522519 }
523520 if ( modelUpdated ) {
524- this . _rectangleRenderer ! . updateBackgrounds ( this . _model ) ;
521+ this . _rectangleRenderer . value ! . updateBackgrounds ( this . _model ) ;
525522 }
526- this . _rectangleRenderer ! . updateCursor ( this . _model ) ;
523+ this . _rectangleRenderer . value ! . updateCursor ( this . _model ) ;
527524 }
528525
529526 /**
0 commit comments