2017-02-13 3 views
-2

3D 엔진을 프로그래밍하는 데 어려움이 있습니다. 셰이더가 많이 작동하고 새로운 셰이더를 만들었습니다. 그러나 어떤 이유로, 제 유니폼 변수가 이상한 행동을 보입니다.GLSL의 유니폼이 사라짐

제복을 사용하지 않으면 해당 변수의 위치가 -1로 설정됩니다. 하지만 제 유니폼이 사용되고 있다는 것을 압니다. 이것이 제가 얻은 것입니다.

"반경"의 위치가 -1로 설정되어
#version 150 

in vec3 position; 
in vec2 texCoords; 

out mat4 hilf; 

uniform mat4 projectionMatrix; 
uniform mat4 viewMatrix; 

uniform float radius; 

void main(void){ 
    hilf = projectionMatrix; 
    gl_Position = projectionMatrix * vec4(position,1.0); 
} 

(이 사용되지 않기 때문에) :

버텍스 쉐이더 (즉, 쉐이더는 이해되지 않는다하지만 여전히 작동합니다). viewmatrix와 동일합니다. 하지만 내 "projectionMatrix"의 위치도 -1로 설정됩니다! 그건 내 말이 맞지 않아. 이제 이상한 부분이 있습니다. 줄을 제거하면 gl_Position = projectionMatrix * vec4(position,1.0);, 영사 매트릭스의 위치가 -1보다 커집니다.

내 자바 호출은 다음과 같습니다

location_projectionMatrix = super.getUniformLocation("projectionMatrix"); 
location_viewMatrix = super.getUniformLocation("viewMatrix"); 
location_radius = super.getUniformLocation("radius"); 

//----------------- 
protected int getUniformLocation(String uniformName){ 
    return GL20.glGetUniformLocation(programID, uniformName); 
} 

이 버그인가요? 내가 놓친 게 있니? 여기서 무슨 일이 일어나고있는거야?

+0

또한 OpenGL 코드를 표시하십시오. – eldo

+2

위치 코드를 설정/가져 오지 않으면 이는 단지 추측 일뿐입니다. 즉, 동일한 위치와 같은 위치를 두 번 설정하려고합니다. – Ripi2

답변

0

변수 radius을 사용하지 않으므로 셰이더를 컴파일하면 생략 (최적화)됩니다. 따라서 컴파일 후 셰이더에는 해당 변수가 포함되지 않습니다. 따라서 위치가 잘못된 값 -1으로 설정됩니다.

main 함수 내에서 쉐이더의 반지름을 사용하면 유효한 위치 값이 반환됩니다.