iOS上的着色器差异

时间:2012-01-09 11:55:59

标签: ios opengl-es

我正在学习使用本书Learning Modern 3D Graphics Programming进行3D编程,但我对iOS中的着色器和GLES 2.0没有好运。我正在使用xcode 4 opengl游戏模板,尽管对书中的第一个例子进行了修改。

本书中的第一个着色器不会编译出许多不同的错误。第一个顶点着色器

#version 330

layout(location = 0) in vec4 position;
void main()
{
    gl_Position = position;
}

抱怨版本声明并拒绝允许使用布局作为说明符。我终于设法让这个建立。

attribute vec4 position;
void main()
{
    gl_Position = position;
}

第一个片段着色器再次因版本而拒绝构建,并且不允许全局片段中的输出

#version 330
out vec4 outputColor;
void main()
{
   outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
}

错误

ERROR: 0:10: Invalid qualifiers 'out' in global variable context

好的,所以我设法得到第一个例子(一个简单的三角形)来处理以下着色器。

顶点着色器

#version 100
void main()
{
    gl_FragColor = vec4(1.0,1.0,1.0,1.0);
}

片段着色器

attribute vec4 position;
void main()
{
    gl_Position = position;
}

所以那些有用,我在下一章尝试了第一个彩色例子。

#version 330
out vec4 outputColor;
void main() {
    float lerpValue = gl_FragCoord.y / 500.0f;
    outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f),
        vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue);
}

即使解决了来自预告片的固定问题,版本,浮点数不允许,着色器仍然拒绝使用此错误构建

ERROR: 0:13: 'float' : declaration must include a precision qualifier for type

实际上它抱怨浮动。

我曾尝试谷歌搜索找到差异的解释,但没有一个出现。我也读过苹果文档寻求建议,但没有找到帮助。我不确定在哪里看,或者我真的做错了。

1 个答案:

答案 0 :(得分:14)

在着色器顶部添加:precision mediump float;

precision highp float;

取决于您的需求。