我正在 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 显卡
我对你想要做什么感到困惑。你说你想使用 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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |