尝试使用一些简单的教程级着色器为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。
想知道我错过了什么。
答案 0 :(得分:0)
尝试从以下位置切换这两行的顺序:
ARBShaderObjects.glUniform1fARB(loc, 1.0f);
ARBShaderObjects.glUseProgramObjectARB(program);
要:
ARBShaderObjects.glUseProgramObjectARB(program);
ARBShaderObjects.glUniform1fARB(loc, 1.0f);
您需要在上传统一值之前开始使用该程序。