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가 일부 구현 정의 값에 대해 다른 결과를 제공하고 있습니다.