2

我正在 xcode 5 中试用 opengl 3.0

这就是我编译着色器的方式

*shader = glCreateShader(type);
glShaderSource(*shader, 1, &source, NULL);
glCompileShader(*shader);

这是我的着色器

#version 140
attribute vec4 position; 
attribute vec4 color;

varying vec4 colorVarying;

attribute vec2 TexCoordIn;
varying vec2 TexCoordOut;
out int rowIndex;
out int colIndex;

void main(void) { 
    colorVarying = color;
    gl_Position = position;
    TexCoordOut = TexCoordIn;
}

我尝试:

glGetString(GL_SHADING_LANGUAGE_VERSION);

返回 235,这是预期的。但我明白了

ERROR: 0:1: '' :  version '140' is not supported

从编译日志中,我尝试了很多版本号,只有 100 个有效。然后我得到

Invalid qualifiers 'out' in global variable context

怎么了?我在 iphone 4 64 位模拟器上运行它,在我的 mac air 上使用 Intel HD Graphics 3000 384 MB 图形

4

1 回答 1

4

我对你想要做什么感到困惑。你说你想使用 OpenGL 3.0,但你已经标记了 OpenGL ES 3.0 的问题。由于您在谈论 iPhone 模拟器,我假设您想使用 OpenGL ES 3.0。您应该注意,在 Apple 移动设备上,只有 iPhone 5S 具有支持 OpenGL ES 3.0 的 GPU。我不知道 ES 3.0 在模拟器中的效果如何——如果有这样的东西可用的话,至少你应该试试 iPhone 5S 模拟器。

至于你的着色器,它看起来像是不同语言版本的混合。首先,对于 OpenGL ES 3.0,您需要 #version 300 es. OpenGL ES 中唯一允许的其他版本是#version 100ES 2.0。我不知道您为什么要尝试#version 140,因为它仅适用于(桌面)OpenGL 3.1。我不知道你为什么期待并从 GL_SHADING_LANGUAGE_VERSION 获得 235?根据规范,它应该返回OpenGL ES GLSL ES N.M ...,其中 N 是主要语言版本号,M 是次要语言版本号。

然后,如 SurvivalMachine 所述,您需要将varyings替换为 sout并将attributes替换为in

于 2013-10-19T07:44:12.583 回答