2012-02-03 2 views
1

내 버텍스 쉐이더가 왜 내 휴대 전화 (Casio Commando, Android 2.3.3)에서 동작하는지 알아 내려고했지만 내 타블렛 (Motorola Xoom, Android 3.2.4)에서 테스트 한 이유는 무엇입니까? t 작업 ...안드로이드에서 GLSL의 배열

버텍스 쉐이더 :

uniform mat4 uMVPMatrix; 
uniform mat4[4] uBoneMatrix; 
attribute vec4 vPosition; 
attribute vec4 vBoneIndex; 
attribute vec4 vBoneWeight; 

void main() { 
gl_Position = uMVPMatrix * ((vBoneWeight.x * uBoneMatrix[int(vBoneIndex.x)]) + 
           (vBoneWeight.y * uBoneMatrix[int(vBoneIndex.y)]) + 
           (vBoneWeight.z * uBoneMatrix[int(vBoneIndex.z)]) + 
           (vBoneWeight.w * uBoneMatrix[int(vBoneIndex.w)])) * vPosition; 
} 

내 태블릿 인쇄에 glGetShaderInfoLog() :

(2) : error C7551: OpenGL first class arrays require #version 120 

프로젝트 목표 8 안드로이드, 나는 setEGLContextClientVersion(2)를 호출하고 있습니다. 태블릿 GL_VERSIONOpenGL ES 2.0이고 전화 번호는 OpenGL ES 2.0.1566933입니다. 두 기기의 GL_SHADING_LANGUAGE_VERSIONOpenGL ES GLSL 1.00입니다.

(2) : error C0201: unsupported version 120 
(3) : error C7532: global type mat4 requires "#version 100" or later 
(4) : error C7551: OpenGL first class arrays require #version 120 
(5) : error C7532: global type vec4 requires "#version 100" or later 
(10) : error C7532: global variable gl_Position requires "#version 100" or later 
(10) : error C7532: global type int requires "#version 100" or later 

그래서 나는 그것이 드라이버 사이에 단지 차이 같아요 : 그럼 내가 더 오류를 얻을 내 쉐이더에 #version 120 라인을 앞에 추가 할 때

심지어 낯선 사람은? 내가 태블릿의 운전 기사가 #version 120을 추가하는 것에 대해 알고 있고, 내가 그것을 추가 할 때 불평하는 것은 나에게 이상하게 보인다.

+0

(대신 vBoneIndex를 ivec4로 설정하고 W의 무게를 너무 늘리고 싶습니까?) – Will

+1

@Will : 그는 OpenGL ES를 사용하고 있습니다. 그들은'ivec4'를 아직 가지고 있지 않습니다. 또는 적어도, 그들은 진짜 정수가 아직 없다. 그들은 여전히 ​​내부적으로 떠있을 것입니다. –

답변

3
uniform mat4[4] uBoneMatrix; 

[4]은 항상 GLSL의 변수 이름 뒤에옵니다. 귀하의 카시오 코만도도 오류가 발생합니다.

NVIDIA가 별도의 컴파일러를 작성하지 못하는 것은 슬픈 일입니다. 따라서 컴파일러는 오류에 대한 부적절한 메시지를 추출합니다.

+3

C [4]도 이름 뒤에 가야한다 –

+0

고마워! 그것은 그것을 고쳤다. 자바에서 []는 타입 식별자 뒤에옵니다. – John

관련 문제