无法将统一值传递给LWJGL中的着色器

时间:2013-03-10 16:33:47

标签: shader lwjgl

尝试使用一些简单的教程级着色器为LWJGL工作。当我在着色器本身中指定所有颜色时,我有一个可以简单地在块中着色的工作设置,但现在我尝试将浮点值传递到着色器以指定简单的灰度。

Frag shader看起来像这样:

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,它有效,我可以使用任何浮点值替换light中的vec4并且它可以正常工作。但正如我所知,无论我传递给ARBShaderObjects.glUniform1fARB,当我渲染它时,方块总是黑色的;我假设这是由于uniform float light默认为0.0f,这听起来像我的统一变量没有被设置。

如果相关的话,我确实看到LOC打印出来时为0。

想知道我错过了什么。

1 个答案:

答案 0 :(得分:0)

尝试从以下位置切换这两行的顺序:

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

要:

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

您需要在上传统一值之前开始使用该程序。