2013-03-10 95 views
0

試圖獲得一些簡單的教程級着色器用於LWJGL。我有一個工作設置,當我在着色器中指定所有顏色時,可以簡單地在一個塊中着色,但現在我試圖將一個浮點值傳遞給着色器以指定簡單的灰度。無法將統一值傳遞給LWJGL中的着色器

破片着色器看起來是這樣的:

varying vec4 vertColor; 
uniform float light; 

void main() 
{ 
    gl_FragColor = vec4(light, light, light, 1); 
} 

和代碼正確渲染塊之前:

if(useShader) 
{ 
    int loc = ARBShaderObjects.glGetUniformLocationARB(program, "light"); 
    System.out.println("LOC: " + loc); 
    ARBShaderObjects.glUniform1fARB(loc, 1.0f); 
    ARBShaderObjects.glUseProgramObjectARB(program); 
} 

破片着色器最初指定gl_FragColor = vertColor,其工作方式,我可以在vec4更換light與任何浮點值和它的作品。但就我所知,無論我傳遞給ARBShaderObjects.glUniform1fARB,當我渲染廣場時,廣場總是黑色的;我假設這是由於uniform float light默認爲0.0f,這聽起來像我的統一變量沒有被設置。

如果在所有相關的,我打印出來時,看到LOC爲0。

想知道我錯過了什麼。

回答

0

嘗試從切換這兩條線的順序:

ARBShaderObjects.glUniform1fARB(loc, 1.0f); 
ARBShaderObjects.glUseProgramObjectARB(program); 

要:

ARBShaderObjects.glUseProgramObjectARB(program); 
ARBShaderObjects.glUniform1fARB(loc, 1.0f); 

你需要你上傳的均勻值之前開始使用該程序。

+0

不能相信我沒有嘗試過那個,但它的工作。謝謝! – user2154199 2013-03-10 17:32:07

相關問題