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版本开始。
令人不安的是,某些显示驱动程序将愉快地编译并使用
顶部没有
桌面OpenGL和OpenGL ES不是同一件事。不能保证通过桌面GL实现提供ES着色器。因此,您必须相应地修改着色器。