【问题标题】:glDrawElements throws error code GL_INVALID_ENUM (0x500)glDrawElements 抛出错误代码 GL_INVALID_ENUM (0x500)
【发布时间】:2015-08-05 14:42:23
【问题描述】:

我尝试使用 OpenGL 和索引绘制带纹理的正方形。首先,我使用 VAO 和 VBO 绘制了一个简单的白色正方形。之后,我尝试创建一个索引缓冲区对象来绘制相同的简单白色方块,但它不绘制任何内容,并且会抛出错误核心GL_INVALID_ENUM (0x500)。调用glDrawElements后抛出此错误码。

这是我的代码的一些部分:

创建索引缓冲区对象、VAO 和 VBO 的函数:

void Object::loadObject(const float *lpfVertices, size_t uVerticesSize, const char *lpbElementsList, size_t uNumElements) {
    this->uNumElements = uNumElements;

    glGenVertexArrays(1, &uVertexArrayID);
    glBindVertexArray(uVertexArrayID);

    glGenBuffers(1, &uVertexBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, uVertexBufferID);
    glBufferData(GL_ARRAY_BUFFER, uVerticesSize, (void *)lpfVertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, NULL);
    glEnableVertexAttribArray(0);

    glGenBuffers(1, &uElemetsListID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, uElemetsListID);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, uNumElements, lpbElementsList, GL_STATIC_DRAW);
}

渲染我的对象的函数:

void Object::renderObject() {
    glBindVertexArray(uVertexArrayID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, uElemetsListID);
    glDrawElements(GL_TRIANGLES, uNumElements, GL_BYTE, NULL);
}

部分主要代码:

object.loadObject(lpfTriangleVertices, sizeof(lpfTriangleVertices), lpbElementsList, sizeof(lpbElementsList));

uProgID = loadShader("default.vs", "default.fs");

while(!glfwWindowShouldClose(lpstWndID)) {
    glfwPollEvents();

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(uProgID);

    object.renderObject();

    glfwSwapBuffers(lpstWndID);
}

【问题讨论】:

  • 更频繁地添加错误检查代码,以便您识别导致错误的代码行。确定特定行后,检查其文档以确保您传递的参数有效,此特定错误意味着您传递了一个它不期望的 GL_ 枚举。
  • 关于本网站的说明:您应该接受答案并从问题中删除(已解决)。

标签: opengl opengl-3


【解决方案1】:
glDrawElements(GL_TRIANGLES, uNumElements, GL_BYTE, NULL);
                                           ^^^^^^^

GL_BYTE 不是typeglDrawElements() 中的有效参数:

type

指定indices 中值的类型。必须是 GL_UNSIGNED_BYTEGL_UNSIGNED_SHORTGL_UNSIGNED_INT 之一。

【讨论】:

  • 太尴尬了……谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多