피드로 돌아가기
Putting your live windows on an infinite canvas: the "park & swap" trick (C++ / WGC / D3D11)
Dev.toDev.to
Infrastructure

DWM 제약을 극복한 2px Park & Swap 기반 무한 캔버스 윈도우 관리 도구 구현

Putting your live windows on an infinite canvas: the "park & swap" trick (C++ / WGC / D3D11)

Batuhan Demirbilek2026년 6월 13일2advanced

Context

Windows OS의 Compositor 교체 불가능한 제약으로 인해 기존 윈도우들을 공간적 캔버스에 배치하는 시스템 설계 필요. 단순 캡처 및 숨김 처리 시 DWM(Desktop Window Manager)이 렌더링을 중단하여 검은 화면이 발생하는 기술적 한계 직면.

Technical Solution

  • DWM의 렌더링 유지 조건 충족을 위해 모든 윈도우를 주 모니터 하단 2px 높이의 가시 영역에 배치하는 Park 구조 설계
  • Windows.Graphics.Capture의 FreeThreaded 프레임 풀과 폴링 방식을 통한 D3D11 텍스처 실시간 업데이트 구현
  • 전체 화면 D3D11 Swapchain 상에 1:1 픽셀 텍스처 쿼드를 배치하고 카메라 Transform으로 Pan/Zoom 처리
  • 특정 임계값 진입 시 SetWindowPos를 통해 실제 HWND를 쿼드 위치로 이동시켜 입력 프록시 없는 직접 상호작용 구현
  • TryGetNextFrame과 Full CopyResource 조합을 통한 캡처 프레임 누락 및 블랙 타일 현상 해결
  • Vertex 및 Pixel Shader 각 단계에 맞는 Constant Buffer 바인딩으로 알파 채널 렌더링 오류 해결

OS 레벨의 최적화 메커니즘(DWM 렌더링 생략 등)이 시스템 제약이 될 때, 최소 가시성 확보와 같은 트릭을 통해 기능을 유지하는 우회 설계 검토 필요

원문 읽기