私はグラフィックプログラミングに不慣れで、作成しているデモのレンダリングバックエンドを追加する必要があります。皆さんが私を正しい方向に向けてくれることを願っています。
短いバージョン:要素ごとに個別に描画コマンドを発行することなく、OpenGLに個別の要素のデータの配列を送信する方法はありますか?
ロングバージョン:CUDAプログラム(最終的にはOpenCLになる)があり、オブジェクトの束のデータの束を計算します。次に、OpenGLなどを使用してこれらのオブジェクトをレンダリングする必要があります。
CUDAカーネルは頂点を生成でき、OpenGL相互運用機能を使用して、これらをOpenGL VBOに押し込み、データをホストデバイスメモリに転送する必要がありません。しかし、問題は、多数の(100万以上が私たちの目標です)別個のオブジェクトがあることです。ここでの最善の策は、1つのVBOを割り当て、すべてのオブジェクトの頂点をそこに配置することのようです。次に、そのVBO内の各要素のオフセットと長さを使用してglDrawArraysを呼び出すことができます。
ただし、各オブジェクトには可変数の頂点がある場合があります(ただし、シーン内の頂点の総数は制限できます)。特に、フレームごとにCUDA->CPUから開始インデックスと長さのリストを転送する必要はありません。これらの描画コマンドはGPUに直接戻ります。
OpenGLへの呼び出しを1回だけ発行してバッファーをレンダリングし、そのバッファーからいくつかの異なる要素をレンダリングできるように、バッファーにデータをパックする方法はありますか?
(うまくいけば、ここでXY問題を回避するのに十分な情報を提供しました。)