私はVBOとしてレンダリングする簡単なテクスチャ付きクワッドを取得しようとしています。 VBOを使用しないときは、すべてが期待どおりに機能します(ただし、静的オブジェクトの場合は、フレームごとに頂点データを更新しています(無意味なので、VBOに切り替えます)。Android OpenGL ES 2. 0 VBOレンダリングしない
しかし、私は何も得ないので、私は何かをしなければならない、絶対にzilch、画面にレンダリングされます。
コンストラクタ:
レンダリングpublic VBO() {
updateVertexData();
vertexBuf = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexBuf.put(vertices);
vertexBuf.position(0);
//Create buffers array for VBO (I'm using interleaved data so only 1 needed here??
final int buffers[] = new int[1];
GLES20.glGenBuffers(1, buffers, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buffers[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexBuf.capacity() * 4, vertexBuf, GLES20.GL_STATIC_DRAW);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
mBufferIdx = buffers[0];
vertexBuf.limit(0);
vertexBuf = null;
}
頂点を更新
public void updateVertexData(){
vertices[0]=-1;
vertices[1]=1f;
vertices[2]=0;
vertices[3]=0;
vertices[4]=0;
vertices[5]=1;
vertices[6]=1f;
vertices[7]=0;
vertices[8]=1;
vertices[9]=0;
vertices[10]=-1;
vertices[11]=-1f;
vertices[12]=0;
vertices[13]=0;
vertices[14]=1;
vertices[15]=1;
vertices[16]=-1f;
vertices[17]=0;
vertices[18]=1;
vertices[19]=1;
}
ここ
は、私が持っている、関連するコードです
public void drawVBO(){
GLES20.glUseProgram(iProgId);
mMVPMatrixHandle = GLES20.glGetUniformLocation(iProgId, "uMVPMatrix");
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mBufferIdx);
GLES20.glEnableVertexAttribArray(iPosition);
GLES20.glVertexAttribPointer(iPosition, 3, GLES20.GL_FLOAT, false, 5 * 4, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mBufferIdx);
GLES20.glEnableVertexAttribArray(iTexCoords);
GLES20.glVertexAttribPointer(iTexCoords, 2, GLES20.GL_FLOAT, false, 5 * 4, 3);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
}
は、私はVBOコードを取り除くと、戻って私のdrawメソッドにupdateVertexDataからコードを移動する場合、私は、言うように、その後、すべてのはOKに動作します。誰かが私がここで間違っていることを説明することができれば感謝します....
HI @RetoKoradi、コメントへの感謝は、私はちょうど* 4せずにそれを試してみましたが、それは違いはありません、私はまだ何もレンダリングされません取得します。しかし、私は最後に 'asFloatBuffer'を追加したので、VertexBufはByteBufferではなくFloatBufferになりますか?ありがとう。 – Zippy
ああ、私は線が可視領域を越えて伸びたことを忘れていたので、私は水平にスクロールしなければならなかった。 –
probs @ RetoKoradi、私はそれがうまくいかなかった理由を考え出しました:-) – Zippy