2012-01-07 22 views
1

複数の頂点バッファからの描画がOpenGL ES 2.0でサポートされているかどうかに関する情報はありません(つまり、位置データ用に1つの頂点バッファを使用します。このページhttp://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.htmlとリスティング9.4は、特にあなたができるはずのことを意味しますが、自分のプログラムで動作させることができません。OpenGL ES 2.0、複数の頂点バッファを使用した描画

glBindBuffer(GL_ARRAY_BUFFER, mPositionBuffer->openglID); 
glVertexAttribPointer(0, 4, GL_FLOAT, 0, 16, NULL); 
glEnableVertexAttribArray(0); 

glBindBuffer(GL_ARRAY_BUFFER, mTexCoordBuffer->openglID); 
glVertexAttribPointer(1, 2, GL_FLOAT, 0, 76, NULL); 
glEnableVertexAttribArray(1); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer->openglID); 
glDrawElements(GL_TRIANGLES, 10788, GL_UNSIGNED_SHORT, NULL); 

このドローコールは、(OpenGLはランダムな三角形を描画したり、以前にレンダリングされたフレームを提示)、ストールやシミュレータ上でEXC_BAD_ACCESSでクラッシュし、デバイス上で非常に奇妙な行動を与えます。問題のある描画呼び出しのためのコード。 OpenGL呼び出しはエラーを返すことはなく、私は頂点バッファを広範に検査し、正しいサイズとデータを持っていると確信しています。

誰もが複数の頂点バッファを使ってレンダリングに成功していますが、なぜこれが機能しないのかの経験を共有できますか?どのようなエラーコードも返さないストール/失敗したドローコールのデバッグを開始する場所に関する情報は非常に高く評価されます。

答えて

1

はい、1回の描画で複数の頂点バッファオブジェクト(VBO)を使用できます。 OpenGL ES 2.0 specはセクション2.9.1でそう言います。

コードにこれらのハードコードされた定数がありますか?その76はどこから来たのですか?

デバッグに役立つ場合は、バッファを初期化するコード(glGenBuffersglBufferDataを呼び出すコード)を送信する必要があります。また、EXC_BAD_ACCESSのスタックトレースを送信する必要があります。

3596個の三角形の代わりに、1つの三角形のような簡単なものを描くと、デバッグが簡単になる場合もあります。

2

一般に、アクセス違反とは、バッファに割り当てたよりも多くの三角形を描画しようとしていることを意味します。

http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml

は、私はあなたの問題はあなたがオフセット切り替えてきたのどちらかということだと思う:あなたがバッファを設定した方法は、あなたのパラメータが正しく設定されている場合、私がチェックされるだろう、まったく問題ありと動作するはずですあなたのglVertexAttribPointerコールでストライドしているか、または描画しているインデックスの数を無効にした

関連する問題