小编Sey*_*o97的帖子

使用 glBufferData 后可以删除浮点数组吗?

我正在研究 OpenGL API,我想问你是否可以在将它传递给 OpenGL 后删除一个浮点数组顶点。

示例代码:

GLuint VBO;
float *vertices = new float[2];
vertices[0] = 0.0f;
vertices[1] = 1.0f;

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

delete[] vertices;
Run Code Online (Sandbox Code Playgroud)

你能告诉我这样做的后果吗?

opengl buffer object vertices

5
推荐指数
1
解决办法
1386
查看次数

glDrawElements抛出错误代码GL_INVALID_ENUM(0x500)

我尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

渲染我的对象的函数:

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

部分主要代码:

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); …
Run Code Online (Sandbox Code Playgroud)

opengl opengl-3

3
推荐指数
1
解决办法
1344
查看次数

标签 统计

opengl ×2

buffer ×1

object ×1

opengl-3 ×1

vertices ×1