2012-01-09 57 views
7

我正在学习有关使用书籍Learning Modern 3D Graphics Programming进行3D编程的知识,但我对iOS中着色器和GLES 2.0没有任何好运。我正在从xcode 4 opengl游戏模板开始工作,但是对本书第一个例子的修改是有意义的。iOS上的着色器差异

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

#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 

有效则抱怨浮动。

我试着用Google找到差异的解释,但没有一个出现。我也通读了苹果文档寻找建议,但没有找到任何帮助。我不知道还有什么可以看的,或者我真的做错了什么。

回答

13

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

precision highp float;

取决于你的需要。