UNPKG

@lightningtv/renderer

Version:
92 lines (91 loc) 3.43 kB
import { type BoundWithValid, type RectWithValid } from '../../../lib/utils.js'; import { TextRenderer, type TrProps, type TextRendererState, type TrFontProps, type TrPropSetters } from '../TextRenderer.js'; import { SdfTrFontFace } from '../../font-face-types/SdfTrFontFace/SdfTrFontFace.js'; import { type SdfRenderWindow } from './internal/setRenderWindow.js'; import type { TrFontFace } from '../../font-face-types/TrFontFace.js'; import type { Stage } from '../../../Stage.js'; import { BufferCollection } from '../../../renderers/webgl/internal/BufferCollection.js'; import type { CoreTextNode } from '../../../CoreTextNode.js'; declare module '../TextRenderer.js' { interface TextRendererMap { sdf: SdfTextRenderer; } interface TextRendererDebugProps { sdfShaderDebug: boolean; } } export interface LineCacheItem { codepointIndex: number; maxY: number; maxX: number; } export interface SdfTextRendererState extends TextRendererState { /** * Cache for layout resume points indexed by the `curY` for each line * in the render sequence. * * Allows faster rendering by skipping parts of the layout loop that are * outside of the renderWindow. */ lineCache: LineCacheItem[]; renderWindow: SdfRenderWindow; elementBounds: BoundWithValid; clippingRect: RectWithValid; bufferNumFloats: number; bufferNumQuads: number; vertexBuffer: Float32Array | undefined; webGlBuffers: BufferCollection | null; bufferUploaded: boolean; distanceRange: number; trFontFace: SdfTrFontFace | undefined; /** * Resolved line height in logical screen pixel units */ resLineHeight: number | undefined; } /** * Singleton class for rendering text using signed distance fields. * * @remarks * SdfTextRenderer supports both single-channel and multi-channel signed distance fields. */ export declare class SdfTextRenderer extends TextRenderer<SdfTextRendererState> { /** * Map of font family names to a set of font faces. */ private ssdfFontFamilies; private msdfFontFamilies; private fontFamilyArray; private sdfShader; private rendererBounds; type: 'canvas' | 'sdf'; constructor(stage: Stage); getPropertySetters(): Partial<TrPropSetters<SdfTextRendererState>>; canRenderFont(props: TrFontProps): boolean; isFontFaceSupported(fontFace: TrFontFace): boolean; addFontFace(fontFace: TrFontFace): void; createState(props: TrProps): SdfTextRendererState; updateState(state: SdfTextRendererState): void; renderQuads(node: CoreTextNode): void; setIsRenderable(state: SdfTextRendererState, renderable: boolean): void; destroyState(state: SdfTextRendererState): void; resolveFontFace(props: TrFontProps): SdfTrFontFace | undefined; /** * Release the loaded SDF font face * * @param state */ protected releaseFontFace(state: SdfTextRendererState): void; /** * Invalidate the layout cache stored in the state. This will cause the text * to be re-layed out on the next update. * * @remarks * This also invalidates the visible window cache. * * @param state */ protected invalidateLayoutCache(state: SdfTextRendererState): void; protected setElementBoundsX(state: SdfTextRendererState): void; protected setElementBoundsY(state: SdfTextRendererState): void; }