2013-06-21 46 views
0

glVertexAttribPointer在运行于Cocoa for OS X 10.8.3的OpenGL 3.2程序中正在提升GL_INVALID_OPERATIONglVertexAttribPointer在OS X上的OpenGL 3.2上提升GL_INVALID_OPERATION

我已经使用APPLE功能设置了vao,并使用glGetAttribLocation拉下了属性位置。

尽管绑定了vao,vbo,并启用了该属性,但它导致无效操作。

我可以成功修改清除颜色,并且不关心GL上下文的完整性。

对于标头,我有这些定义:

GLuint _vao; 
GLuint _vbo; 

还可以这里假设positionAttribute是一个vec3参考不透明物体。

在实现中,我运行以下命令:

glGenVertexArraysAPPLE(1, &_vao); 
glBindVertexArrayAPPLE(_vao); 

static GLfloat vertices[] = { 
    0.f, 0.f, 0.f, 
    1.f, 0.f, 0.f, 
    0.f, 1.f, 0.f, 
    1.f, 1.f, 0.f 
}; 

glGenBuffers(1, &_vbo); 
glBindBuffer(GL_ARRAY_BUFFER, _vbo); 
glBufferData(GL_ARRAY_BUFFER, 4 * 3 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); 

glEnableVertexAttribArray(positionAttribute.location); 

glVertexAttribPointer(positionAttribute.location, 3, GL_FLOAT, GL_FALSE, 0, NULL); 

// Error here 

有其他人遇到这样或可能知道是什么引起的?

+2

VAOs 3.0以来一直核心,你为什么要使用扩展入口点? – genpfault

+0

你可以测试'glGetAttribLocation'返回的值吗?具体来说,它不是'(-1)'? –

+0

@genpfault老实说,我已经开始使用OSXGLEssentials,它使用了APPLE的扩展。删除扩展名(并找到正确的头文件)后,错误消失。 – adamRenny

回答

0

回答并感谢genpfault指出明显。

我错过了在参考条件#define中使用APPLE扩展名在前3个OpenGL中的#else块。

解决方案是删除APPLE扩展名并使用原生OpenGL。

  • glGenVertexArrays
  • glBindVertexArrays