2015-01-10 2 views
4

WebGL 버텍스 쉐이더에서 정수 속성을 사용할 수 있습니까? 내 정점 데이터는 정수를 포함하고 내가 정점을 정의하려면이 같은 속성이 가능한 경우WebGL : GLSL에서 정수 속성을 사용하는 방법

attribute vec3 POSITION; 
attribute int INDEX[8]; 
attribute float WEIGHT[8]; 

, 어떻게 내가 gl.bufferData를 사용하여 JS에서 셰이더 혼합 정점 데이터를 전달 것인가?

이것이 가능하지 않은 경우 동일한 결과 (CPU에서 쉐이더로 인덱스 전달 및 셰이더에서 정수로 사용)를 얻는 가장 좋은 방법은 무엇입니까?

답변

8

WebGL은 정수 속성을 지원하지 않습니다. 일부 예외가 사양 (https://www.khronos.org/registry/webgl/specs/1.0/)에 나열된 WebGL은 OpenGL ES 2.0과 거의 동일한 GLSL 기능 세트를 사용합니다.

(ES 2.0에 사용되는 GLSL 버전입니다)는 OpenGL ES 쉐이딩 언어 1.00의 사양 문서는 "4.3.3 특성"절에서, 30 페이지 말한다 :

속성 한정자가 될 수 있습니다 데이터 유형이 float, vec2, vec3, vec4, mat2, mat3 및 mat4 인 경우에만 사용됩니다. 속성 변수는 배열이나 구조로 선언 할 수 없습니다.

가장 좋은 방법은 소수 부분이없는 수레를 사용하는 것입니다. 정확하게 표현 될 수있는 값의 범위는 동일한 저장 공간을 사용하는 정수보다 더 제한됩니다. 예를 들어, 16 비트 플로트 (하프 플로트)는 11 비트의 정밀도를 가지며 0에서 2048까지의 정수를 정확하게 나타낼 수 있습니다.

관련 문제