sdf-2d/src/graphics/rendering/renderer/renderer.ts

97 lines
3 KiB
TypeScript

import { ReadonlyVec2, vec2 } from 'gl-matrix';
import { Drawable } from '../../../drawables/drawable';
import { RuntimeSettings } from '../settings/runtime-settings';
import { RendererInfo } from './renderer-info';
/**
* The main interface through which rendering can be achieved.
*
* Multiple renderers are permitted on a single page.
*/
export interface Renderer {
/**
* Get the actual resolution of the canvas without triggering a reflow.
*
* A ResizeObserver is used to achieve this.
*/
readonly canvasSize: ReadonlyVec2;
/**
* Get the viewArea size set by the last `setViewArea`.
*
* By default, `canvasSize` is used for the view area size.
*/
readonly viewAreaSize: ReadonlyVec2;
/**
* Set the camera transformation.
*
* @param topLeft top (!) left. By default, equal to [0, canvasHeight].
* @param size need not be equal to the canvas size, though their aspect ratio
* should be the same to avoid stretching.
*/
setViewArea(topLeft: ReadonlyVec2, size: ReadonlyVec2): void;
/**
* The inverse of `worldToDisplayCoordinates`, returns the world coordinates
* from a pixel's position.
*
* The view area coordinates are also given in world coordinates.
*
* Useful for picking.
*
* @param displayCoordinates The origin is in the display's top left corner.
* Just as in mouse events' clientX and clientY.
*/
displayToWorldCoordinates(displayCoordinates: ReadonlyVec2): vec2;
/**
* The inverse of `displayToWorldCoordinates`, returns the screen space position
* of a point given in world space coordinates.
*
* While the origin for worldCoordinates resides in the bottom-left corner,
* the origin of the returned display coordinates is placed in the top left.
*
* @param worldCoordinates Coordinates used when drawing objects.
*/
worldToDisplayCoordinates(worldCoordinates: ReadonlyVec2): vec2;
/**
* Patch the current runtime settings with new values.
* @param overrides
*/
setRuntimeSettings(overrides: Partial<RuntimeSettings>): void;
/**
* Schedule a drawable to be rendered during the next `renderDrawables` call.
*
* @param drawable Must be a subclass of drawable and its class must contain a
* static descriptor property of type [[DrawableDescriptor]].
*/
addDrawable<T extends Drawable>(drawable: T): void;
/**
* Render every drawable added since the last `renderDrawables` call.
*
* Resizing of framebuffers and the canvas also takes effect
* when calling `renderDrawables`.
*/
renderDrawables(): void;
/**
* Let go of every GPU resource held by the renderer.
*
* It's up to the browser and driver whether these resources are actually freed.
* Nonetheless, when a renderer is no longer needed, this method should be called.
*/
destroy(): void;
/**
* Get useful information about the hardware and the SDF2D renderer.
*
* Its schema is subject to change.
*
* During a context-lost event, it might be null.
*/
readonly insights: RendererInfo | null;
}