我正在通过这本书学习 3D 编程 Learning Modern 3D Graphics Programming ,但我对 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;
}
所以这些都奏效了,我尝试了下一章中的第一个彩色示例。</p>
#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);
}
即使解决了 eariler 中已修复的问题,版本中的 f 不允许 float ,着色器仍然拒绝构建并出现此错误
ERROR: 0:13: 'float' : declaration must include a precision qualifier for type
实际上它是在提示 float 。
我曾尝试通过谷歌搜索来找到对这些差异的解释,但都没有找到。我还通读了苹果文档以寻求建议,但没有找到任何帮助。我不确定还有什么地方可以看,或者我真正做错了什么。
最佳答案
在着色器的顶部添加:precision mediump float;
或precision highp float;
取决于您的需求。
关于ios - iOS 上的着色器差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788049/