SomeUser:
だから、通常のOpenGLであなたはこのようなVAOを作成することができます
glGenVetrexArray();
そしてあなたのためVAOを作成するには、この機能を期待して、あなたにVAO IDでint型を与えます。
問題
アンドロイドではこの関数は、このようなものです:
glGenVetrexArray(int n , int[] array, int offset);
私は、これらのパラメータが何であるかを知らないと私はVAOを作成し、この上記の方法を使用してIDを取得する方法がわかりませんか?
alexrnov:
N - VAOsの数(量)が返されます。
アレイ - 作成されたオブジェクトの識別子を持つn型素子のアレイ。
= 0のオフセット。
VAOを作成する場合には、関数を使用して、現在行われている。GLES30.glBindVertexArray(VAO [0])。VAO、などのすべてのコール、結合後:glBindBuffer、glEnableVertexAttribArray、glVertexAttribPointerを、現在のVAOに影響を与えます。
public class Renderer implements GLSurfaceView.Renderer {
private int[] VBOIds = new int[2]; // VertexBufferObject Ids
private int[] VAOId = new int[1]; // VertexArrayObject Id
public Renderer(...) {
// create vertex buffer objects
VBOIds[0] = 0;
VBOIds[1] = 0;
GLES30.glGenBuffers(2, VBO, 0);
...
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, VBO[0]);
GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, verticesData.length * 4,
vertices, GLES30.GL_STATIC_DRAW);
...
GLES30.glBindBuffer(GLES30.GL_ELEMENT_ARRAY_BUFFER, VBO[1]);
GLES30.glBufferData(GLES30.GL_ELEMENT_ARRAY_BUFFER, indicesData.length * 2, indices, GLES30.GL_STATIC_DRAW);
...
}
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
GLES30.glGenVertexArrays(1, VAOId, 0); // Generate VAO Id
GLES30.glBindVertexArray(VAOId[0]); // Bind the VAO
// invokes commands glBindBuffer, glEnableVertexAttribArray,
// glVertexAttribPointer for VBOs
...
// Reset to the default VAO (default VAO always is 0)
GLES30.glBindVertexArray(0);
}
public void onDrawFrame() {
...
GLES30.glBindVertexArray(VAOId[0]); // active VAO
// Draw on base the VAO settings
GLES30.glDrawElements(GLES30.GL_TRIANGLES, indicesData.length,
GLES30.GL_UNSIGNED_SHORT, 0);
// Return to the default VAO
GLES30.glBindVertexArray(0);
}
}
あなたはVAOを使用しての良い例を見ることができ、ここで