2013-10-12 53 views
2

我在Xcode 5IOS OpenGL 3.0的不编译版本

尝试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 

怎么了?我与英特尔高清显卡3000个384 MB显卡

+0

AFAIK Mac上的图形适配器几乎没有任何作用,因为Apple在模拟器内实现了一个模拟设备(纯软件)的GL/ES硬件的抽象层 - 换句话说,GL/ES调用不要直接访问Mac的设备驱动程序。 – Till

+0

您是否尝试过_#版本300 es_与标签:APIWinHTTP和_varying_与_out_更换_attribute_? – SurvivalMachine

+0

@换句话说,我必须在设备本身上尝试它? – tzl

回答

4

我很困惑你想要做什么对iPhone 4的64位模拟器中运行这个,在我的Mac空气。你说你想使用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指出的,你需要用inoutattribute s到取代你varying秒。

+0

我的不好。我的意思是opengl ES 3.0。并且从GL_SHADING_LANGUAGE_VERSION获取235也是由我的代码中的错误引起的。 #version 300 es在64位iphone模拟器中编译得很好。谢谢! – tzl

+0

“按照规范,它应该返回的OpenGL ES GLSL ES牛米......” - 这规范呢? – tower120