我正在 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 显卡
Best Answer-推荐答案 strong>
我对你想要做什么感到困惑。你说你想使用 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 中唯一允许的其他版本是 ES 2.0 的 #version 100 。我不知道您为什么要尝试 #version 140 ,因为它仅适用于(桌面)OpenGL 3.1。我不知道你为什么期待并从 GL_SHADING_LANGUAGE_VERSION 获得 235?根据规范,它应该返回 OpenGL ES GLSL ES N.M ... ,其中 N 是主要语言版本号,M 是次要语言版本号。
然后,如 SurvivalMachine 所述,您需要将 variing 替换为 out 并将 attribute 替换为 in .
关于ios opengl 3.0 不编译版本,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/19337332/
|