2017-02-13 48 views
-2

我被困在編程3D引擎中。我有很多着色器在工作,並且我創建了一個新的着色器。但由於某種原因,我的統一變量顯示出一種奇怪的行爲。GLSL中的統一消失

我知道如果不使用制服,該變量的位置將被設置爲-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); 
} 

「半徑」的位置被設置爲-1(因爲它不使用)。相同的視圖。但我的「投影矩陣」的位置也設置爲-1!這對我來說毫無意義。現在是最奇怪的部分;當我刪除線條:gl_Position = projectionMatrix * vec4(position,1.0);時,投影矩陣的位置大於-1。

我的Java調用看起來是這樣的:

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函數中使用着色器中的半徑,它將返回有效的位置值。