OpenGLでGL_ELEMENT_ARRAY_BUFFERのメモリを予約するには、std :: vectorの.reserved(int)やCudaのthrust :: device_vectorのような方法がありますか?OpenGLで予約されたメモリ
私はフレーム1に200個の三角形(600個のインデックス)がありますが、フレーム2に250個の完全に新しい三角形(750個のインデックス)があります。どのように私は最初に一度予約し、毎フレーム更新することができますか?
OpenGLでGL_ELEMENT_ARRAY_BUFFERのメモリを予約するには、std :: vectorの.reserved(int)やCudaのthrust :: device_vectorのような方法がありますか?OpenGLで予約されたメモリ
私はフレーム1に200個の三角形(600個のインデックス)がありますが、フレーム2に250個の完全に新しい三角形(750個のインデックス)があります。どのように私は最初に一度予約し、毎フレーム更新することができますか?
バッファオブジェクトを割り当ててglBufferData()
呼び出しを行うと、それを戻すメモリが割り当てられます。最初のglBufferData()
コールにヌルデータポインタを渡して、データアップロードなしで割り当て専用バッファを作成することができます。
glBufferSubData()
を使用して再割り当てせずに既存のバッファにパッチを適用することはできますが、既存の描画呼び出しでまだ参照されているバッファにパッチを適用しないようにしてください。詳細については...
を参照してください。
ありがとうございますが、同じ数の点を描いていますが、より多くのメモリを予約すると実行時間が増えるようです。 – huyluu11
リソースの更新を十分にパイプライン化していることを確認してください(たとえば、まだドローによって参照されているバッファを更新しないでください)。あなたが十分に深くパイプライン化していないなら、より大きなバッファをリソースにゴーストすると処理が遅くなります(メモリ割り当てが増え、コピー数が増えます)。 – solidpixel