목차

WebGLFundamentals.org

Fix, Fork, Contribute

WebGL readPixels

WebGL에서는 포맷/타입 쌍을 readPixels에 전달합니다. 주어진 텍스처 내부 포맷(프레임 버퍼에 첨부된)의 경우, 단 2개의 포맷/타입 조합만 유효합니다

명세서을 보면:

정규화된 고정 소수점 렌더링 표면의 경우, 포맷 RGBA와 타입 UNSIGNED_BYTE 조합이 유효합니다. 부호있는 정수형 렌더링 표면의 경우, 포맷 RGBA_INTEGER와 타입 INT 조합이 유효합니다. 부호없는 정수형 렌더링 표면의 경우, 포맷 RGBA_INTEGER와 타입 UNSIGNED_INT가 유효합니다.

두 번째 조합은 구현이 정의되어 있으므로 코드를 이식 가능하게 하려면 사용하지 않아야 합니다. 포맷/타입 조합이 뭔지 물어볼 수 있는데

// 첨부된 읽기 텍스처와 함께 프레임 버퍼가 바인딩되어 있다고 가정
const format = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT);
const type = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE);

또한 프레임 버퍼에 첨부하고 렌더링할 수 있음을 의미하는, 렌더링 가능한 텍스처 포맷도, 어느정도 구현이 정의되어 있는지 확인하세요. WebGL1은 렌더링할 수 있는 RGBA/UNSIGNED_BYTE 조합, 하나만을 필요로 합니다. 나머지는 모두 선택 사항(예를 들어 LUMINANCE)이며, 일부(예를 들어 RGBA/FLOAT)는 확장으로 렌더링할 수 있습니다.

아래 표는 라이브입니다. 아마 기기, OS, GPU, 브라우저에 따라 다른 결과를 준다는 걸 눈치채셨을 겁니다. 제 컴퓨터에선 Chrome과 Firefox가 일부 구현 정의 값에 대해 다른 결과를 제공하고 있습니다.

이슈/버그는? Github에 이슈를 만들어주세요.
코드 블록은 <pre><code>여기에 코드 입력</code></pre>를 사용해주세요
comments powered by Disqus