원문: HTML-in-Canvas updates: Iterating toward a better Web API — Chrome Developers 원문은 CC-BY-4.0 라이선스로 제공되며, 이 글은 한국어로 번역한 2차 저작물입니다.
Chrome 150 및 155에서 HTML-in-Canvas API에 몇 가지 변경 사항이 도입되었습니다. 이러한 변경은 커뮤니티 및 표준 피드백에 대한 응답으로 API의 사용 편의성을 개선하는 것을 목표로 했습니다. 이 블로그 게시물에서는 변경 사항과 구현을 최신 상태로 유지하는 방법을 설명합니다.
업데이트에는 속성 및 메서드 이름 변경, 명시적 텍스처 메모리 사전 할당 요구, DOM 동기화 모델 업데이트가 포함됩니다. 또한 HTML-in-Canvas Origin Trial이 연장되었습니다. 이어지는 내용은 변경 사항, 그 이유 및 코드베이스를 업데이트하는 방법에 대한 설명입니다.
Chrome 150의 변경 사항
Chrome 150에서는 WebGL 및 WebGPU 전반에 걸쳐 인자 시그니처를 변경하여 중복을 제거하고 최신 그래픽 규칙에 맞게 조정했습니다.
WebGL
WebGPU
Chrome 155의 변경 사항
Chrome 155는 개발자 피드백을 기반으로 추가적인 개선 사항을 도입합니다. 메서드 이름을 업데이트하고, 명시적 텍스처 메모리 사전 할당을 요구하며, 복잡한 DOM 하위 트리를 지원하고, DOM 동기화를 분리합니다.
WebGPU
WebGPU 메서드 이름이
copyElementImageToTexture에서 drawElementImageToTexture로 변경되었습니다. 이름 변경과 함께 매개변수 좌표가 확장되고(sourceX, sourceWidth), 대상 경계가 표준 size(GPUExtent3D) 객체로 그룹화됩니다.WebGL
HTML-in-Canvas의 WebGL 변경 사항에는 세 가지 측면이 있습니다.
- 메서드 이름이
에서texElementImage2D
로 변경됩니다.texElementSubImage2D - 메서드 시그니처가 변경되며, 가장 중요한 점은 요소가 그려질 대상 텍스처의 오프셋을 선택적으로 지정할 수 있도록
및xoffset
인자가 추가되었다는 것입니다.yoffset - 메서드는 더 이상 대상 텍스처에 대한 버퍼 스토리지를 자동으로 할당하지 않습니다. API를 사용하기 전에 스토리지을 명시적으로 할당해야 합니다. 이는
의 동작과 유사합니다.texSubImage2D
Canvas 속성 및 그릴 수 있는 자식 요소
HTML을 렌더링하기 위해 canvas를 준비하는 방법을 업데이트하고 있습니다.
layoutsubtree
을 content="drawable"
로 이름 변경
layoutsubtreecontent="drawable"HTML 속성 이름 규칙에 맞추기 위해
<canvas> 요소의 부울 layoutsubtree 속성 이름이 content="drawable"로 변경되었습니다(자세한 논의는 WICG Issue #169 참조).조상 요소에 대한 drawable
속성
drawable이전에는 canvas의 직계 자식만 렌더링되었습니다. 마크업을 평면화하지 않고 복잡한 DOM 계층 구조를 지원하려면 독립적으로 그리려는 모든 조상 요소에
drawable 속성을 명시적으로 추가할 수 있습니다.drawable 속성이 있는 요소는 drawable을 명시적으로 지정하는 중첩된 조상 요소를 제외한 전체 하위 트리를 캡처합니다. 이를 통해 부모 컨테이너와 버튼과 같은 자식 요소를 별도의 그리기 호출로 애니메이션하고 그릴 수 있습니다.히트 테스트 동기화
이전에는 개발자가 그리기 메서드의 반환 값을 캡처하여
element.style.transform으로 파이핑해야 했습니다. drawElementImage() 메서드는 이제 void를 반환하며, 동기화는 컨텍스트에 따라 달라집니다.2D 컨텍스트: 자동 동기화
2D canvas에서는 브라우저가 DOM 히트 테스트 경계와 화면 판독기 포커스 링을 그려진 좌표에 자동으로 동기화합니다. 모든 수동 변환 파이핑을 제거할 수 있습니다.
2D에서 기하학적 모양을 수동으로 관리하려면
{ preserveElementGeometry: true }를 drawElementImage()에 전달하고 canvas.updateElementGeometry()를 사용하여 변환을 적용합니다.3D 컨텍스트: 명시적 updateElementGeometry()
updateElementGeometry()WebGL 또는 WebGPU 컨텍스트에서 DOM을 동기화하려면
DOMMatrix 변환을 구성하고 canvas.updateElementGeometry()에 전달합니다.버전 간 호환성
전환 기간 동안 여러 Chrome 버전의 사용자를 지원해야 하는 애플리케이션의 경우, 프로토타입에서 업데이트된 메서드의 존재 여부를 확인하고 구현을 조정해야 합니다.
모든 브라우저 버전에서 올바른
<canvas> 요소 속성을 설정해야 합니다.2D 컨텍스트의 경우,
drawElementImage()의 반환 값을 검사하고 canvas 프로토타입 속성을 확인하여 두 버전을 모두 지원합니다.WebGL의 경우 호환되는 메서드 시그니처와 이름을 사용합니다.
WebGL의 브라우저 호환성을 확인해야 합니다.
Origin Trial 연장
HTML-in-Canvas Origin Trial이 Chrome 160까지 연장되었습니다. HTML-in-Canvas 기능을 사용자에게 계속 제공하려면 origin trial 토큰을 갱신해야 합니다. 자세한 내용은 Origin Trial 기사를 참조하세요.
WICG GitHub 저장소에 이슈를 제기하여 애플리케이션에서 이러한 업데이트가 어떻게 작동하는지 알려주세요. 개발자 뉴스레터에 가입하여 HTML-in-Canvas 관련 소식을 계속 받아보세요.





