关于ios:gl_PointCoord在Mac上不可用?

gl_PointCoord unavailable on Mac?

我想为点精灵制作一个着色器-到目前为止,一切都可以在iOS上运行。 但不适用于Mac OSX。
我的顶点着色器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
attribute vec4 position;
attribute vec4 color;
attribute vec2 texcoord;

varying vec4 colorVarying;

uniform mat4 modelViewProjectionMatrix;
uniform float pointSize;

void main()
{
    gl_Position = modelViewProjectionMatrix * position;
    colorVarying = color;
    gl_PointSize = pointSize;
}

我的片段着色器:

1
2
3
4
5
6
7
8
9
10
varying lowp vec4 colorVarying;
uniform lowp float textureFlag;
uniform sampler2D texture;

void main()
{
    gl_FragColor = textureFlag * texture2D(texture, gl_PointCoord) * colorVarying +
    (1.0 - textureFlag) * colorVarying;

}

由于" gl_PointCoord",片段着色器无法在Mac上编译。 在Mac上,我在着色器中添加了" #define lowp"作为预处理器。

如果在着色器顶部添加" #version 120 \ n",则它在Mac上可以正常编译,但不显示任何内容(但是在iOS上,如果我在顶部使用#version标签,则无法正常工作 着色器-也许是因为1.2版会错过" lowp")。

那么,原因是什么呢? 我的Mac说,它使用GLSL 1.2(我认为添加了gl_PointCoord)。
有任何想法吗?!?


线程坏死了一点,但是在移植一些GLES20代码时我也遇到了同样的问题。

gl_PointCoord手册明确指出版本1.10支持gl_PointCoord,但是GLSL 1.10规范甚至没有提及该功能。

此外,1.20规范的第1.2节明确指出已添加gl_PointCoord支持。

是的,这看起来像glsl手册是错误的,并且对gl_PointCoord的支持从1.2版本开始。

令人不安的是,某些显示驱动程序将愉快地编译并使用#version 110和调用gl_PointCoord来运行GLSL着色器,而其他显示驱动程序(最近的NVidia)将禁止使用漂亮的error C7532: global variable gl_PointCoord requires"#version 120" or later


顶部没有#version指令的GLSL着色器假定为1.10。那可能永远不是您真正想要的,所以请始终使用#version指令。

桌面OpenGL和OpenGL ES不是同一件事。不能保证通过桌面GL实现提供ES着色器。因此,您必须相应地修改着色器。