Skip to content

Commit 31669cb

Browse files
committed
Expose texture atlas as API and use in demo
Part of #2623
1 parent 050d9ff commit 31669cb

5 files changed

Lines changed: 22 additions & 4 deletions

File tree

addons/xterm-addon-webgl/src/WebglAddon.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { IColorSet } from 'browser/Types';
1010

1111
export class WebglAddon implements ITerminalAddon {
1212
private _terminal?: Terminal;
13+
private _renderer?: WebglRenderer;
1314

1415
constructor(
1516
private _preserveDrawingBuffer?: boolean
@@ -22,7 +23,8 @@ export class WebglAddon implements ITerminalAddon {
2223
this._terminal = terminal;
2324
const renderService: IRenderService = (<any>terminal)._core._renderService;
2425
const colors: IColorSet = (<any>terminal)._core._colorManager.colors;
25-
renderService.setRenderer(new WebglRenderer(terminal, colors, this._preserveDrawingBuffer));
26+
this._renderer = new WebglRenderer(terminal, colors, this._preserveDrawingBuffer);
27+
renderService.setRenderer(this._renderer);
2628
}
2729

2830
public dispose(): void {
@@ -32,5 +34,10 @@ export class WebglAddon implements ITerminalAddon {
3234
const renderService: IRenderService = (<any>this._terminal)._core._renderService;
3335
renderService.setRenderer((<any>this._terminal)._core._createRenderer());
3436
renderService.onResize(this._terminal.cols, this._terminal.rows);
37+
this._renderer = undefined;
38+
}
39+
40+
public get textureAtlas(): HTMLCanvasElement | undefined {
41+
return this._renderer?.textureAtlas;
3542
}
3643
}

addons/xterm-addon-webgl/src/WebglRenderer.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ export class WebglRenderer extends Disposable implements IRenderer {
100100
super.dispose();
101101
}
102102

103+
public get textureAtlas(): HTMLCanvasElement | undefined {
104+
return this._charAtlas?.cacheCanvas;
105+
}
106+
103107
public setColors(colors: IColorSet): void {
104108
this._colors = colors;
105109
// Clear layers and force a full render

addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,6 @@ export class WebglCharAtlas implements IDisposable {
8686
this._tmpCanvas.width = this._config.scaledCharWidth * 2 + TMP_CANVAS_GLYPH_PADDING * 2;
8787
this._tmpCanvas.height = this._config.scaledCharHeight + TMP_CANVAS_GLYPH_PADDING * 2;
8888
this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {alpha: this._config.allowTransparency}));
89-
90-
// This is useful for debugging
91-
document.body.appendChild(this.cacheCanvas);
9289
}
9390

9491
public dispose(): void {

addons/xterm-addon-webgl/typings/xterm-addon-webgl.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ declare module 'xterm-addon-webgl' {
1010
* An xterm.js addon that provides search functionality.
1111
*/
1212
export class WebglAddon implements ITerminalAddon {
13+
public textureAtlas?: HTMLCanvasElement;
14+
1315
constructor(preserveDrawingBuffer?: boolean);
1416

1517
/**

demo/client.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,15 @@ function initAddons(term: TerminalType): void {
343343
if (checkbox.checked) {
344344
addon.instance = new addon.ctor();
345345
term.loadAddon(addon.instance);
346+
if (name === 'webgl') {
347+
setTimeout(() => {
348+
document.body.appendChild((addon.instance as WebglAddon).textureAtlas);
349+
}, 0);
350+
}
346351
} else {
352+
if (name === 'webgl') {
353+
document.body.removeChild((addon.instance as WebglAddon).textureAtlas);
354+
}
347355
addon.instance!.dispose();
348356
addon.instance = undefined;
349357
}

0 commit comments

Comments
 (0)