iOS上的着色器差异

bot*_*ptr 8 opengl-es ios

我正在学习关于3D编程的学习现代3D图形编程,但我对iOS中的着色器和GLES 2.0没有好运.我正在使用xcode 4 opengl游戏模板,尽管对书中的第一个例子进行了修改.

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

#version 330

layout(location = 0) in vec4 position;
void main()
{
    gl_Position = position;
}
Run Code Online (Sandbox Code Playgroud)

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

attribute vec4 position;
void main()
{
    gl_Position = position;
}
Run Code Online (Sandbox Code Playgroud)

同样,第一个片段着色器由于版本而拒绝构建,并且不允许全局段中的输出

#version 330
out vec4 outputColor;
void main()
{
   outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)

随着错误

ERROR: 0:10: Invalid qualifiers 'out' in global variable context
Run Code Online (Sandbox Code Playgroud)

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

顶点着色器

#version 100
void main()
{
    gl_FragColor = vec4(1.0,1.0,1.0,1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器

attribute vec4 position;
void main()
{
    gl_Position = position;
}
Run Code Online (Sandbox Code Playgroud)

所以那些工作,我尝试了下一章的第一个彩色例子.

#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);
}
Run Code Online (Sandbox Code Playgroud)

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

ERROR: 0:13: 'float' : declaration must include a precision qualifier for type
Run Code Online (Sandbox Code Playgroud)

实际上它抱怨浮动.

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

Or *_*bel 14

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

要么 precision highp float;

取决于您的需求.