Opengl 是否仅在libGDX中使用片段着色器?

Opengl 是否仅在libGDX中使用片段着色器?,opengl,shader,libgdx,Opengl,Shader,Libgdx,我正在将我的项目从纯LWJGL移植到libGDX,我想知道是否有办法只使用片段着色器创建程序 我想做的是将纹理的颜色(灰色)更改为作为参数接收的颜色。该着色器以前工作得很好,但现在,似乎我需要添加一个顶点着色器-这对我来说没有任何意义。所以我写了这个: void main() { gl_Position = ftransform(); } 根据互联网的说法,这是最简单的VS:它什么都不做,而且真的不应该。但它不起作用:不显示任何内容,也不抛出编译错误或警告。我试图用一个更简单的片段着色

我正在将我的项目从纯LWJGL移植到libGDX,我想知道是否有办法只使用片段着色器创建程序

我想做的是将纹理的颜色(灰色)更改为作为参数接收的颜色。该着色器以前工作得很好,但现在,似乎我需要添加一个顶点着色器-这对我来说没有任何意义。所以我写了这个:

void main() {
    gl_Position = ftransform();
}
根据互联网的说法,这是最简单的VS:它什么都不做,而且真的不应该。但它不起作用:不显示任何内容,也不抛出编译错误或警告。我试图用一个更简单的片段着色器替换我的片段着色器,但结果更奇怪:

void main() {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

这只会把所有东西都漆成红色。但是当我运行时,程序崩溃,没有抛出错误,没有异常,非常奇怪的行为。我知道libGDX添加了倾斜,但我认为它也不起作用,因为我只需要替换灰度颜色,并且根据强度,我需要正确调制正确的颜色(这是变化的)。我正在使用的另一个着色器(同样仅限片段)是将整个场景设置为灰度(当在“暂停”菜单上时)。它也不起作用。

在现代OpenGL中使用着色器时,您必须至少提供一个顶点和一个片段着色器。OpenGL-2给了您一些余地,缺点是,您仍然需要与神秘的固定函数状态机进行斗争

根据互联网的说法,这是最简单的VS:它什么都不做,而且真的不应该


是什么让你认为它“什么都没做”。当然,它会做一些事情:它会将传入的原始数字转换为一些有意义的东西,即剪辑空间中的顶点。

我的意思是,它应该具有与完全没有着色器相同的行为;我不想改变顶点的位置,所以我以前没有VS…@Luanico:顶点着色器不会“改变”顶点的位置。它将原始数字(可能意味着任何东西)转换为GPU可以处理的实际顶点数据。如果没有在顶点转换阶段运行的东西,GPU实际上就不会变成像素。所以你绝对需要一个顶点着色器<代码>ftTransform()模拟固定函数管道行为。如果你能接受它,就使用它。但是它限制了你使用固定的管道状态变量,这非常麻烦。好吧,我想我理解了:如果没有提供着色器,仍然会有一个“着色器”,它只会调用fransform()来做默认的事情。我的问题应该在另一个着色器中,那么…您使用的是什么libgdxapi?你只是在使用原始的OpenGL包装器吗?或者您正在使用更高级别的API,如
SpriteBatch
ShaderProgram
?您是否正在检查着色器是否正确编译并检查其日志输出?您是否使用了高级类,包括SpriteBatch和ShaderProgramm。我也在使用纹理,但不是雪碧或Scene2D。当我创建着色器时,它通过getLog()方法不会给出任何错误和警告。我不知道预言意味着什么(如果你是这个意思的话,也不知道精确性)。