MCPcopy Create free account
hub / github.com/CapSoftware/Cap / initCanvas

Function initCanvas

apps/desktop/src/utils/frame-worker.ts:885–977  ·  view source on GitHub ↗
(canvas: OffscreenCanvas)

Source from the content-addressed store, hash-verified

883initWorker();
884
885async function initCanvas(canvas: OffscreenCanvas): Promise<void> {
886 if (isInitializing) {
887 return initializationPromise ?? Promise.resolve();
888 }
889 isInitializing = true;
890
891 const doInit = async () => {
892 offscreenCanvas = canvas;
893
894 const webgpuSupported = await isWebGPUSupported();
895
896 if (webgpuSupported) {
897 try {
898 webgpuRenderer = await initWebGPU(canvas);
899 renderMode = "webgpu";
900 self.postMessage({
901 type: "renderer-mode",
902 mode: "webgpu",
903 } satisfies RendererModeMessage);
904 } catch (e) {
905 console.error("[frame-worker] WebGPU init failed:", e);
906 renderMode = "canvas2d";
907 offscreenCtx = canvas.getContext("2d", {
908 alpha: false,
909 desynchronized: true,
910 });
911 self.postMessage({
912 type: "renderer-mode",
913 mode: "canvas2d",
914 } satisfies RendererModeMessage);
915 }
916 } else {
917 renderMode = "canvas2d";
918 offscreenCtx = canvas.getContext("2d", {
919 alpha: false,
920 desynchronized: true,
921 });
922 self.postMessage({
923 type: "renderer-mode",
924 mode: "canvas2d",
925 } satisfies RendererModeMessage);
926 }
927
928 let frameRendered = false;
929 if (
930 renderMode === "webgpu" &&
931 webgpuRenderer &&
932 lastRawFrameData &&
933 lastRawFrameWidth > 0 &&
934 lastRawFrameHeight > 0
935 ) {
936 renderFrameWebGPU(
937 webgpuRenderer,
938 lastRawFrameData,
939 lastRawFrameWidth,
940 lastRawFrameHeight,
941 lastRawFrameWidth * 4,
942 );

Callers 2

initWorkerFunction · 0.85
frame-worker.tsFile · 0.85

Calls 1

doInitFunction · 0.85

Tested by

no test coverage detected