2016-11-27 25 views
1

glDrawElements関数の "index"パラメータの説明が少し異なる2つのOpenGLドキュメントページがあります。glDrawElementsのインデックス引数の意味は?

indices 
    Specifies a pointer to the location where the indices are stored. 

そして、それは言うwww.khronos.org/opengles/sdk/docs/man3上:

indices 
    Specifies a byte offset (cast to a pointer type) into the buffer bound 
    to GL_ELEMENT_ARRAY_BUFFER to start reading indices from. If no buffer 
    is bound, specifies a pointer to the location where the indices are stored. 

私はそれが言うwww.opengl.org/sdk/docs/man4/オンWindowsでは、OpenGL 4+を使用しています。

私が作成した要素バッファオブジェクトにインデックス配列をコピーしました。私が供給する必要があるインデックスポインタの引数は、最初のインデックスのバイト単位のオフセットですか?だから私がインデックス3で描画を開始したい場合、引数は2 * sizeof(GLuint)で、ポインタとしてキャストされますか?

私は実際にEBOを作成しようと努力しましたが、EBOがバインドされていないと、ポインタがEBOではなくインデックスがある場所をまっすぐに指していると言われています。これはシステムRAM上の配列を指すことを意味するのでしょうか? (編集:ポインタが0x00000008であれば、これは意味をなさないことに気付きました。システムメモリ内のそのアドレスに移動することはできません)。もしそうなら、インデックスアレイを毎回グラフィックスカードにコピーしますそれを使用できるようにするには?ありがとう。 OpenGLの4.5、コアプロファイル1として

+1

インデックス:インデックス配列のベースアドレス。基本アドレスを入力するだけです。 3番目のパラメータは、各インデックスのサイズを指定します。これは通常GL_UNSIGNED_INTに設定されています – Asesh

+0

@Aseshありがとう、私はそれを得ると思います。しかし、要素バッファオブジェクトがバインドされていない場合、インデックスポインタは、インデックス配列が格納されている場所を直接指しています。それで私はシステムRAMと思うのですが、それは理にかなっていません。常にGPU上の要素バッファオブジェクトからインデックスを取得しませんか?混乱している。 – Zebrafish

答えて

2

、クライアントのメモリからの読み出しがサポートされていない(§10.3.10のOpenGL 4.5コア仕様):

DrawElementsDrawRangeElements、及びソースそのインデックスをDrawElementsInstanced ELEMENT_ARRAY_BUFFERにバインドされたバッファオブジェクトから、インデックスパラメータをオフセットとして使用して、10.3.9項で説明したのと同じ方法でバッファオブジェクトに挿入します。 [...]ゼロがELEMENT_ARRAY_BUFFERにバインドされている場合、これらの描画コマンドの結果は未定義です。

EBOを作成するあなたのアプローチは正しいです。 0番目のインデックスがオフセット0にある場合を除き、3番目のインデックスはオフセット3*sizeof(type)にあります。

2番目の見積もり:古いOpenGLバージョンでは、(物理アドレスではなくプロセス仮想アドレス空間内の)クライアントメモリへのポインタを渡し、ELEMENT_ARRAY_BUFFERをバインドしないことができます。

+0

@ybundaloBill最初のインデックスはオフセット0にあり、2番目のインデックスはオフセット4にあり、3番目のインデックスはオフセット8にありますか? – Zebrafish

+0

あなたが1から数えるなら、はい。私はあなたが0から数え始めることをお勧めします。次に、オフセットがn * sizeof(type)のn番目のインデックスです。 'type'は' GLuint'である必要はなく、8ビットまたは16ビットのインデックスも使用できます。 – ybungalobill

関連する問題