Skip to content

Commit

Permalink
refactor(driver): text render
Browse files Browse the repository at this point in the history
  • Loading branch information
atty303 committed May 16, 2024
1 parent e6074c5 commit 228ccd3
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
2 changes: 1 addition & 1 deletion packages/driver/src/js/renderer/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export { Renderer } from "./renderer.ts";
export { TextRasterizer } from "./text.ts";
export * from "./text.ts";
export { WebGL1Backend } from "./webgl_backend.ts";
34 changes: 24 additions & 10 deletions packages/driver/src/js/renderer/text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,17 +64,19 @@ export class TextMetrics {
}
}

export class TextRasterizer {
private readonly cache: Map<string, { width: number; bitmap: TextureBitmap | undefined }> = new Map();
private readonly maxTextureSize: number;
export interface TextRender {
width: number;
bitmap: TextureBitmap | undefined;
}

constructor(readonly textMetrics: TextMetrics) {
const canvas = new OffscreenCanvas(1, 1);
const gl = canvas.getContext("webgl");
if (gl) {
this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) as number;
}
}
export interface TextRasterizer {
get(size: number, fontNum: number, text: string): TextRender;
}

export class SimpleTextRasterizer implements TextRasterizer {
private readonly cache: Map<string, TextRender> = new Map();

constructor(readonly textMetrics: TextMetrics) {}

get(size: number, fontNum: number, text: string) {
const key = `${size}:${fontNum}:${text}`;
Expand Down Expand Up @@ -104,3 +106,15 @@ export class TextRasterizer {
return bitmap;
}
}

export class BinPackingTextRasterizer {
private readonly maxTextureSize: number;

constructor(readonly textMetrics: TextMetrics) {
const canvas = new OffscreenCanvas(1, 1);
const gl = canvas.getContext("webgl");
if (gl) {
this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) as number;
}
}
}
5 changes: 2 additions & 3 deletions packages/driver/src/js/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import type { UIState } from "./event.ts";
import { ImageRepository } from "./image";
// @ts-ignore
import { createNODEFS } from "./nodefs.js";
import { Renderer, TextRasterizer, WebGL1Backend } from "./renderer";
import { TextMetrics, loadFonts } from "./renderer/text.ts";
import { Renderer, SimpleTextRasterizer, TextMetrics, type TextRasterizer, WebGL1Backend, loadFonts } from "./renderer";

interface DriverModule extends EmscriptenModule {
FS: typeof FS;
Expand Down Expand Up @@ -84,7 +83,7 @@ export class DriverWorker {

await loadFonts();
this.textMetrics = new TextMetrics();
this.textRasterizer = new TextRasterizer(this.textMetrics);
this.textRasterizer = new SimpleTextRasterizer(this.textMetrics);

this.renderer = new Renderer(this.imageRepo, this.textRasterizer, this.screenSize);
this.hostCallbacks = {
Expand Down

0 comments on commit 228ccd3

Please sign in to comment.