diff --git a/src/compile.ts b/src/compile.ts new file mode 100644 index 0000000..8fa78ff --- /dev/null +++ b/src/compile.ts @@ -0,0 +1,37 @@ +import { ContextAwareRenderer } from './graphics/rendering/renderer/context-aware-renderer'; +import { StartupSettings } from './graphics/rendering/settings/startup-settings'; +import { DrawableDescriptor, Renderer } from './main'; + +/** + * Compiles a new renderer instance. There can multiple renderers on a single page. + * > Asynchronous behaviour is required for parallel shader compiling. + * > Trying to draw before the returned promise resolves, results in no action taken. + * > Settings can be set before promise resolution and they will be applied later. + * + * The descriptors of every to-be-drawn objects are required before creating the renderer, + * allowing the compiler to only create the shaders that will actually be used. + * + * Example usage: + * + * ```js + * import { compile, hsl, CircleFactory, CircleLight } from 'sdf-2d'; + * + * const canvas = document.querySelector('canvas'); + * const Circle = CircleFactory(hsl(30, 66, 50)); + * const renderer = await compile(canvas, [Circle.descriptor, CircleLight.descriptor]); + * ``` + * + * @param canvas The returned renderer will only be able to draw to this canvas. + * @param descriptors The descriptor of every single object (and light) that + * ever needs to be drawn by this renderer has to be given before compiling. + * @param settingsOverrides Sensible defaults are provided, but these can be overridden. + */ +export async function compile( + canvas: HTMLCanvasElement, + descriptors: Array, + settingsOverrides: Partial = {} +): Promise { + const renderer = new ContextAwareRenderer(canvas, descriptors, settingsOverrides); + await renderer.initializedPromise; + return renderer; +}