2016-04-23 6 views
0

単一のVBOで同じフォーマットの頂点データを結合し、これらのオブジェクトが使用するマテリアルに基づいて頂点属性を割り当て、それらを単一のglDrawArrays()呼び出しでレンダリングしています。OpenGLのバッチ処理とオブジェクトの無効化

実行時にレンダリングされないオブジェクト(例:object1)を無効にするまでは、すばらしいことです。私はすでにすべての頂点の属性やものを設定していると仮定して、これも可能ですか?バッチ処理を使わない方がいいですか?オブジェクトごとにvbo/vaoを設定してください(オブジェクトが無効になっている場合は、glDraw*()を呼び出さないでください)。

答えて

0

バッチ処理では、すべてのデータを1つのバッファに格納する必要がありますが、バッチ処理はに限定されています。です。バッチ処理は描画呼び出しの回数を減らすことです。あなたのデータを1つのバッファに入れることは、が必要です。それには、が必要です。

すべての頂点データを1つのバッファに入れます。だけを使用すると、バッファと頂点のフォーマットを切り替える必要がなく、パフォーマンスが向上します。個々のオブジェクトごとにバッファを使用してパフォーマンスを向上させるために、すべてを一回の描画呼び出しでバッチ処理する必要はありません。

OpenGLのas discussed in this videoでは、複数の描画呼び出しの主なコストは描画呼び出し自体ではありません。あなたが通常行う変更は、の間で行われます。

頂点データを同じバッファに入れておき、1回の描画呼び出しですべてをレンダリングできる場合は、オブジェクト間のステージの変更を排除するように管理する必要があります。その時点で、あなたはすでにあなたが行っているパフォーマンスのほとんどを得ています。それを受け入れ、他の低い吊るした果物に移動してください。