ios - iOS 上的着色器差异

标签 ios opengl-es

我正在通过这本书学习 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/

相关文章:

ios - 如何通过 CocoaPods 安装后 Hook 修改 OTHER_LDFLAGS?

iphone - 从 iPhone 应用程序在 iCloud 上创建文件夹

iphone - 通知未在 IOS 设备之一中显示

android - 改变正交投影矩阵的问题

java - 围绕球体移动相机

android - 在 iOS 和 Android 上将(非交互式)动画(使用 Maya 制作)加载到 OpenGL ES 的推荐方法

ios - 节中的行数

iphone - OpenGL 从另一个 View 返回后绘制黑屏

vector - openGL 中的一颗行星 : vector data or texture mapping?

iphone - Paint 和 OpenGL - 深色无法正常工作