因此,我试图做一个非常简单的事情,我有一个4x4的图像,并且试图制作一个可以改变该图像颜色的着色器。这是用于颜色选择器。 (渐变图像叠加和单独的HSV轮)着色器实际上只是一个统一的输出,它在不使用统一的情况下有效。 shaderProgram正确编译,并使用shaderProgram.hasUniform("pickedColour")
返回true
这里是着色器(片段)
#version 300 es
precision mediump float;
uniform vec4 pickedColour;
out vec4 colour;
void main() {
colour = pickedColour;//doesn't work
//colour = vec4(0, 0, 0, 1);//does work
}
我使用此设置制服:shaderProgram.setUniformf("pickedColour", 0.0f, 0.0f, 0.0f, 1.0f);
。我在网上看了一下,发现shaderProgram会扔掉未使用的制服,但是由于spritebatch的问题,我将pedantic设置为false,因此无法检查情况是否如此。顶点着色器中没有pickleColour(也没有其他任何东西),但那里还是没有用。
您应该阅读wiki article on shaders。
这里的问题是您没有使用正确的变量来设置输出颜色。您需要使用预定义的gl_FragColor
:
#version 300 es
precision mediump float;
uniform vec4 pickedColour;
void main() {
gl_FragColor = pickedColour;
}