1

1回の描画呼び出しで、符号なし整数浮動小数点データをグラフィックカードにアップロードするとします。私は標準のVBO(VAOではなくOpenGL 2.0を使用しています)を使用し、さまざまな頂点属性配列を1つGL_ARRAY_BUFFERに結合し、を使用して個別にポイントしている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)をLWJGLで作成する必要があることです。これFloatBufferにより、タイプの属性をサポートできるようになります。GL_FLOATこれにより、GL_INTここ(または逆の場合-バッファを2つのタイプにすることはできないため、どちらか一方になります)。

何か案は?これはネイティブ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 に答える