0

试图让一些简单的教程级着色器适用于 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,它可以工作,我可以用任何浮点值替换lightvec4,它可以工作。但是正如我所拥有的,无论我传递什么ARBShaderObjects.glUniform1fARB,当我渲染它时,正方形总是黑色的;我假设这是由于uniform float light默认为0.0f,这听起来像我的统一变量没有被设置。

如果完全相关,我确实看到 LOC 在打印出来时为 0。

想知道我错过了什么。

4

1 回答 1

0

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

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

到:

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

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

于 2013-03-10T17:18:54.153 回答