ios opengl 3.0无法编译版本

时间:2013-10-12 17:49:41

标签: ios xcode5 opengl-es-3.0

我在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 64bit模拟器上运行它,在我的Mac Air上使用Intel HD Graphics 3000 384 MB图形

1 个答案:

答案 0 :(得分: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。对于ES 2.0,OpenGL ES中唯一允许的其他版本为#version 100。我不知道你为什么要尝试#version 140,因为它只适用于(桌面)OpenGL 3.1。我不知道为什么你期待并从GL_SHADING_LANGUAGE_VERSION得到235?根据规范,它应该返回OpenGL ES GLSL ES N.M ...,其中N是主要版本和M次要语言版本号。

然后,正如SurvivalMachine所述,您需要将varying替换为out,将attribute替换为in