12

GL_ARRAY_BUFFER または GL_ELEMENT_ARRAY_BUFFER にバインドされた頂点バッファー オブジェクトの最大サイズはありますか?

もともと、16 個のサブメッシュで構成されるメッシュを描いていました。サブメッシュごとに頂点バッファーを作成し、レンダリング フェーズ中に glDrawElements を呼び出しました。これは iOS シミュレーターでは正常に機能しましたが、デバイスにレンダリングしようとすると、画面が絶えず点滅し、メッシュが表示されません。

次に、いくつか読んだところ、レンダリング段階で glDrawElements を何度も呼び出すべきではないことがわかりました。すべてのサブメッシュを 1 つの頂点バッファーに結合しようとしました。GL_ARRAY_BUFFER にバインドされたバッファーには 3969 個の頂点が含まれ、各頂点には 20 個の float が含まれます。したがって、このバッファのサイズは 317520 バイトです。GL_ELEMENT_ARRAY_BUFFER にバインドされたインデックスは 16425 ショートです。したがって、このバッファのサイズは 32850 バイトです。

OpenGL wiki では、Vertex Buffer Object の「1 つの nVidia ドキュメントによると、1MB から 4MB が適切なサイズです」と書かれています。

各バッファ オブジェクトをバインドし、glDrawElements を呼び出した後、glGetError の結果を出力しましたが、エラーは表示されません。ただし、メッシュが正しく表示されません。最初のメッシュだけが正しく描画されるようです。私がこれを実装した方法に怪しいものはありますか? この質問を長くしたくなかったので、この質問に答えるために必要な追加情報があれば教えてください。理論的に間違っていると思われるものが何もない場合、おそらく私はそれを実装する際に間違いを犯しただけです.

4

3 に答える 3

5

GPUが常にGL_OUT_OF_MEMORYエラーを発行できるという意味で、最大サイズがあります。しかしそれ以外は違います

于 2011-09-10T03:20:09.653 に答える
2

これを参照してください:

http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es

short をインデックスとして使用する場合は明らかに ~65000 のように、より小さいデータ型を使用する場合、いくつかの自然な制限があります。

しかし、さらに重要なことは、リンクにいくつかの追加のヘルプがあり、これは非常に優れたチュートリアルであり、自然な機能制限の作業を短縮するいくつかの事例証拠が含まれています.

于 2011-09-29T05:51:17.747 に答える