我正在学习使用本书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
实际上它抱怨浮动。
我曾尝试谷歌搜索找到差异的解释,但没有一个出现。我也读过苹果文档寻求建议,但没有找到帮助。我不确定在哪里看,或者我真的做错了。
答案 0 :(得分:14)
在着色器顶部添加:precision mediump float;
或precision highp float;
取决于您的需求。