Con*_*tin 2 opengl-es glsl ios opengl-es-2.0
我想为点精灵制作一个着色器 - 到目前为止,一切都在 iOS 上运行。但不是在 Mac OS X 上。我的顶点着色器:
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;
}
Run Code Online (Sandbox Code Playgroud)
我的片段着色器:
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;
}
Run Code Online (Sandbox Code Playgroud)
由于“gl_PointCoord”,片段着色器无法在 mac 上编译。在 Mac 上,我在着色器中添加了一个“#define lowp”作为预处理器。
如果我在着色器顶部添加一个“#version 120\n”,它在 Mac 上编译得很好,但不显示任何东西(但是在 iOS 上,如果我在顶部使用 #version 标签,它就不起作用着色器 - 也许,因为 1.2 版会错过“lowp”)。
那么,可能是什么原因呢?我的 Mac 说,它使用 GLSL 1.2(我认为添加了 gl_PointCoord)。有任何想法吗?!?
#version
顶部没有指令的GLSL 着色器假定为 1.10。这可能永远不是你真正想要的,所以总是使用#version
指令。
桌面 OpenGL 和 OpenGL ES 不是一回事。尝试通过桌面 GL 实现提供 ES 着色器并不能保证工作。所以你必须相应地修改着色器。