我在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图形
答案 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
。