import type { ImageRenderOptions } from "./ImageRender.ts"; import ImageRender from "./ImageRender.ts"; import type VideoProgram from "./webgl/program/VideoProgram.ts"; import { type AVFrame } from "@libmedia/avutil"; import { type Timeout } from "@libmedia/common"; export interface WebGLRenderOptions extends ImageRenderOptions { } export default abstract class WebGLRender extends ImageRender { protected options: WebGLRenderOptions; protected gl: WebGLRenderingContext | WebGL2RenderingContext; protected vbo: WebGLBuffer; protected program: VideoProgram; protected vertex: number[]; protected webglContextLostTimer: Timeout; protected onWebglContextLost: ((event: Event) => void) | void; protected onWebglContextRestored: ((event: Event) => void) | void; protected fragmentSource: string; protected vertexSource: string; constructor(canvas: HTMLCanvasElement | OffscreenCanvas, options: WebGLRenderOptions); init(): Promise; viewport(width: number, height: number): void; protected useProgram(): void; protected abstract checkFrame(frame: pointer): void; clear(): void; protected layout(): void; setRotate(angle: number, clear?: boolean): void; destroy(): void; }