2013-03-10 2 views
0

Попытка получить некоторые простые шейдеры уровня учебника, работающие на LWJGL. У меня есть рабочая настройка, которая может просто окрашиваться в блок, когда я укажу все цвета в самом шейдере, но теперь я пытаюсь передать значение float в шейдер, чтобы указать простую шкалу серого.Невозможно передать равномерные значения шейдеру в LWJGL

Frag шейдер выглядит следующим образом:

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); 
} 

Frag шейдер первоначально указанный gl_FragColor = vertColor, который работает, и я могу заменить light в vec4 с любым значением float, и он работает. Но, как и у меня, независимо от того, что я перехожу на ARBShaderObjects.glUniform1fARB, квадрат всегда будет черным, когда я его отрисую; Я предполагаю, что это связано с тем, что uniform float light по умолчанию имеет значение 0.0f, что звучит так, как моя однородная переменная не установлена.

Если это действительно так, я вижу, что LOC будет 0 при его распечатке.

Хотелось бы узнать, чего у меня нет.

ответ

0

Try переключая порядок этих двух линий от:

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

To:

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

Вы должны начать использовать программу, прежде чем загрузить единообразное значение.

+0

Не могу поверить, что я не пробовал это уже, но он сработал. Благодаря! – user2154199

Смежные вопросы