diff options
Diffstat (limited to 'apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts')
| -rw-r--r-- | apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts b/apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts new file mode 100644 index 00000000..89dcb2ae --- /dev/null +++ b/apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts @@ -0,0 +1,35 @@ +import { getWebGLContext, readResult } from "./webgl-context"; +import { applyMultiPassEffect } from "./webgl-utils"; +import type { EffectPassData } from "./webgl-utils"; + +export interface ApplyEffectParams { + source: CanvasImageSource; + width: number; + height: number; + passes: EffectPassData[]; +} + +function applyEffect({ + source, + width, + height, + passes, +}: ApplyEffectParams): CanvasImageSource { + if (passes.length === 0) { + return source; + } + const { context, programCache } = getWebGLContext({ width, height }); + applyMultiPassEffect({ + context, + source, + width, + height, + passes, + programCache, + }); + return readResult({ width, height }); +} + +export const webglEffectRenderer = { + applyEffect, +}; |
