【问题标题】:glVertexAttribPointer raising GL_INVALID_OPERATION on OpenGL 3.2 on OS XglVertexAttribPointer 在 OS X 上的 OpenGL 3.2 上提高 GL_INVALID_OPERATION
【发布时间】:2013-06-21 21:15:37
【问题描述】:

glVertexAttribPointer 在我的 OpenGL 3.2 程序中提升 GL_INVALID_OPERATION,该程序在 Cocoa for OS X 10.8.3 中运行。

我已经使用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

有没有其他人经历过这种情况或可能知道是什么原因造成的?

【问题讨论】:

  • VAO 自 3.0 以来一直是核心,为什么要使用扩展入口点?
  • 你能测试glGetAttribLocation返回的值吗?具体来说,不是(-1)
  • @genpfault 老实说,我已经开始使用 OSXGLEssentials,它使用了 APPLE 的扩展。删除扩展名(并找到正确的头文件)后,错误消失了。
  • @BrettHale 我做了,它确实返回了一个有效值。

标签: opengl opengl-3


【解决方案1】:

回答并感谢genpfault 指出显而易见的问题。

我错过了引用条件 #define 中的 #else 块,该块将在 pre-3 OpenGL 中使用 APPLE 扩展。

解决办法是去掉APPLE扩展,使用原生OpenGL。

  • glGenVertexArrays
  • glBindVertexArrays

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多