MCPcopy Index your code
hub / github.com/CapSoftware/Cap / renderNv12FrameWebGPU

Function renderNv12FrameWebGPU

apps/desktop/src/utils/webgpu-renderer.ts:409–544  ·  view source on GitHub ↗
(
	renderer: WebGPURenderer,
	data: Uint8ClampedArray,
	width: number,
	height: number,
	yStride: number,
	fullRange = false,
)

Source from the content-addressed store, hash-verified

407}
408
409export function renderNv12FrameWebGPU(
410 renderer: WebGPURenderer,
411 data: Uint8ClampedArray,
412 width: number,
413 height: number,
414 yStride: number,
415 fullRange = false,
416): WebGPURenderTiming {
417 const totalStart = performance.now();
418 let resizeMs = 0;
419 let textureSetupMs = 0;
420 let uploadMs = 0;
421 let drawMs = 0;
422 const {
423 device,
424 context,
425 nv12Pipeline,
426 nv12FullPipeline,
427 sampler,
428 nv12BindGroupLayout,
429 canvas,
430 } = renderer;
431
432 if (canvas.width !== width || canvas.height !== height) {
433 const start = performance.now();
434 canvas.width = width;
435 canvas.height = height;
436 const format = navigator.gpu.getPreferredCanvasFormat();
437 context.configure({
438 device,
439 format,
440 alphaMode: "opaque",
441 });
442 resizeMs = performance.now() - start;
443 }
444
445 if (
446 renderer.cachedNv12Width !== width ||
447 renderer.cachedNv12Height !== height
448 ) {
449 const start = performance.now();
450 renderer.yTexture?.destroy();
451 renderer.uvTexture?.destroy();
452
453 renderer.yTexture = device.createTexture({
454 size: { width, height },
455 format: "r8unorm",
456 usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
457 });
458
459 renderer.uvTexture = device.createTexture({
460 size: { width: width / 2, height: height / 2 },
461 format: "rg8unorm",
462 usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
463 });
464
465 renderer.nv12BindGroup = device.createBindGroup({
466 layout: nv12BindGroupLayout,

Callers 3

renderBorrowedWebGPUFunction · 0.90
renderLoopFunction · 0.90
renderPendingNv12FrameFunction · 0.90

Calls 4

createEmptyTimingFunction · 0.85
configureMethod · 0.80
destroyMethod · 0.80
finishMethod · 0.80

Tested by

no test coverage detected