2

我正在尝试通过 OS X 上的 ArcSynthesis 教程,并且在调用 glEnableVertexAttribArray 后出现 OpenGL 错误“无效操作”。根据glEnableClientState 和 glEnableVertexAttribArray的讨论,我已经检查了我确实有一个 VBO 绑定,并且不确定接下来要检查什么。

我正在使用 OS X 10.8、OpenGL 3.2 配置文件和 Xcode 4.6。

我正在尝试编写一个将加载到教程中使用的 XML 模型文件中的类,并且我认为我正在按照与绘制编码模型的早期程序相同的顺序执行相同的操作。但我一定是在做一些不同或错误的事情,而且不知道是什么。参考 OpenGL 3.2 文档说,通过发送超过 OpenGL 实现允许的最大值的索引值,您会得到一个无效的操作,但我使用的是我以前使用过的 0 和 1。

这是代码,为了清楚起见,所有的 OpenGL 错误检查都被编辑了:

    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject);
    for (int iAttribLoop = 0; iAttribLoop < [attributeAnalyzers count]; iAttribLoop++) {
        AttributeAnalyzer *theAnalyzer = [attributeAnalyzers objectAtIndex:iAttribLoop];
        GLuint theIndex = [theAnalyzer index];
        NSLog(@"theIndex is %d", theIndex);
        glEnableVertexAttribArray(theIndex);
        glVertexAttribPointer(theIndex, [theAnalyzer size], theType, GL_FALSE, 0, dataOffset);
        dataOffset += sizeof(theType)*[theAnalyzer size]*[theAnalyzer vertexCount];
    }
4

1 回答 1

6

参考 OpenGL 3.2 文档说,您通过发送超过 OpenGL 实现允许的最大值的索引值来获得无效操作

不,它没有。这样做会给你GL_INVALID_VALUE。仅当您调用它并且没有绑定 VAOGL_INVALID_OPERATION时才给出。glEnableVertexAttribArray

所以你可能应该这样做。

于 2013-02-27T01:01:34.827 回答