1

假设我想在一次绘图调用中将无符号整数浮点数据上传到显卡。我使用标准 VBO(不是 VAO,我使用的是 OpenGL 2.0),将各种顶点属性数组组合成单个GL_ARRAY_BUFFER,并分别指向 using glVertexAttribPointer(...),因此:

    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId);
    glEnableVertexAttribArray(positionAttributeId);
    glEnableVertexAttribArray(myIntAttributeId);
    glVertexAttribPointer(positionAttributeId, 4, GL_FLOAT, false, 0, 0);
    glVertexAttribPointer(colorAttributeId, 4, GL_UNSIGNED_INT, false, 0, 128);

    glClear(...);
    glDraw*(...);

我在这里遇到的问题vertexBufferId是我的缓冲区(由其他方式 - 它是一个或另一个,因为缓冲区不能是两种类型)。FloatBufferGL_FLOATGL_INT

有任何想法吗?这将如何在本机 C 代码中处理?

4

1 回答 1

2

这将在 C 中(以安全的方式)通过以下方式处理:

GLfloat *positions = malloc(sizeof(GLfloat) * 4 * numVertices);
GLuint *colors = malloc(sizeof(GLuint) * 4 * numVertices);

//Fill in data here.

//Allocate buffer memory
glBufferData(..., (sizeof(GLfloat) + sizeof(GLuint)) * 4 * numVertices, NULL, ...);
//Upload arrays
glBufferSubData(..., 0, sizeof(GLfloat) * 4 * numVertices, positions);
glBufferSubData(..., sizeof(GLfloat) * 4 * numVertices, sizeof(GLuint) * 4 * numVertices, colors);

free(positions);
free(colors);

还有其他方法可以做到这一点,其中涉及大量的铸造等。但是此代码模拟了您在 LWJGL 中必须执行的操作。

于 2012-07-23T17:44:36.843 回答