목차

WebGL2Fundamentals.org

Fix, Fork, Contribute

WebGL2 readPixels

WebGL에서는 format/type 쌍을 readPixels에 전달합니다. 주어진 텍스처 내부 format(framebuffer에 첨부된)의 경우, 단 2개의 format/type 조합만 유효합니다

명세서을 보면:

normalized fixed-point rendering surface의 경우, format RGBA와 type UNSIGNED_BYTE 조합이 유효합니다. signed integer rendering surface의 경우, format RGBA_INTEGER와 type INT 조합이 유효합니다. unsigned integer rendering surface의 경우, format RGBA_INTEGER와 type UNSIGNED_INT가 유효합니다.

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

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

또한 framebuffer에 첨부하고 렌더링할 수 있음을 의미하는, 렌더링 가능한 texture format도, 어느정도 구현이 정의되어 있는지 확인하세요. WebGL2에는 여러 format이 포함되어 있지만 일부(예를 들어 LUMINANCE)는 선택 사항이고, 일부(예를 들어 RGBA32F)는 기본적으로 렌더링할 수 없지만 extension으로 렌더링할 수 있습니다.

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

이슈나 버그가 있나요? 깃헙에서 이슈 만들기.
comments powered by Disqus