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

Function renderLoop

apps/desktop/src/utils/frame-worker.ts:604–807  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

602}
603
604function renderLoop() {
605 _rafId = null;
606
607 const hasRenderer =
608 renderMode === "webgpu"
609 ? webgpuRenderer !== null
610 : offscreenCanvas !== null && offscreenCtx !== null;
611
612 if (!hasRenderer) {
613 if (renderMode === "pending" && frameQueue.length > 0) {
614 _rafId = requestAnimationFrame(renderLoop);
615 return;
616 }
617 rafRunning = false;
618 return;
619 }
620
621 if (useSharedBuffer && consumer && !consumer.isShutdown()) {
622 if (renderMode === "webgpu" && webgpuRenderer) {
623 const rendered = drainAndRenderLatestSharedWebGPU(8);
624 if (rendered) {
625 _rafId = requestAnimationFrame(renderLoop);
626 return;
627 }
628 }
629
630 let polled = 0;
631 while (polled < 4 && tryPollSharedBuffer()) {
632 polled++;
633 }
634 }
635
636 let frameToRender: PendingFrame | null = null;
637 let frameIndex = -1;
638
639 for (let i = 0; i < frameQueue.length; i++) {
640 const frame = frameQueue[i];
641 if (
642 frameToRender === null ||
643 frame.timing.frameNumber > frameToRender.timing.frameNumber
644 ) {
645 frameToRender = frame;
646 frameIndex = i;
647 }
648 }
649
650 if (frameToRender !== null) {
651 for (let i = frameQueue.length - 1; i >= 0; i--) {
652 if (i !== frameIndex) {
653 const oldFrame = frameQueue[i];
654 if (oldFrame.mode === "webgpu" && oldFrame.releaseCallback) {
655 oldFrame.releaseCallback();
656 }
657 frameQueue.splice(i, 1);
658 if (i < frameIndex) {
659 frameIndex--;
660 }
661 }

Callers

nothing calls this directly

Calls 6

renderNv12FrameWebGPUFunction · 0.90
renderFrameWebGPUFunction · 0.90
tryPollSharedBufferFunction · 0.85
isShutdownMethod · 0.80
convertNv12ToRgbaFunction · 0.70

Tested by

no test coverage detected