OpenGLES 2로 앱을 만들려고합니다. 테스트 용 장치가 2 개 있습니다. 불행히도 둘 사이에 차이가있는 것으로 보입니다.OpenGL ES - 벡터 유니폼을 찾을 수 없습니다 - 행렬 만 작동합니다
// vertex shader
uniform mat4 uVMatrix; // View Matrix
uniform mat4 uPMatrix; // perspective Matrix
uniform vec3 uLight1Pos; // LightPos
attribute vec4 aPosition;
attribute vec4 aColor;
varying vec4 vColor;
void main() {
vColor = aColor;
mat4 MVPMatrix = uPMatrix * uVMatrix;
gl_Position = MVPMatrix * aPosition;
}
// fragment shader
uniform mat4 uVMatrix;
uniform vec3 uLight1Pos;
varying vec4 vColor;
varying vec3 vPosition;
void main() {
vec3 light2Pos = uLight1Pos;
gl_FragColor = vColor;
}
문제는, 어떤 유니폼을 찾을 수 없습니다
내가 테스트를 위해 다음과 같은 "기본"쉐이더 코드가 있습니다.
나는 연결하고 평소와 같이 쉐이더를 연결하지만, 같은 ID를 확인 :
uVMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uVMatrix");
uPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uPMatrix");
uLight1PosHandle = GLES20.glGetUniformLocation(mProgram, "uLight1Pos");
나는 다른 값을 얻는다. 내 갤럭시 S1에서는 2, 1, 3입니다 (따라서 모든 유효한 값 - 이상한 주문 임에도 불구하고). 내 Galaxy S3에서는 0, 1, -1입니다 (마지막 하나를 찾을 수 없습니다).
내가 뭘 잘못하고 있니? S3 (말리 GPU)에서 제복을 다르게 선언해야합니까? 참조를 얻으려면 유니폼을 "사용해야"한다는 것을 깨달았습니다. 그것이 내가 쓴 이유입니다. vec3 light2Pos = uLight1Pos;이 작업을 수행하지 않으면 S1에 대한 참조도 얻지 못합니다.
도움 주셔서 감사합니다.
토비아스
- 편집이 - 충분한이상한, 나는 mat4에 VEC3에서 버텍스 쉐이더의 유니폼을 변경하려고 :
uniform mat4 uLight1Pos;
mat4 lPos = uLight1Pos;
그것은 나타납니다 그 매트릭스 잘 작동 그리고 엄마를 사용할 때 그것에 대한 핸들을 얻을 수 있습니다 trix. 어째서?
아, 알겠습니다. 그래서 비록 내가 그들을 "사용"한다고해도 그들은 실제로 사용되거나 제거되지 않았습니다. 고마워. 마치 내 잘못이었던 것처럼 보입니다! :디 –