Qt Quick 2 を使用してリアルタイム ログ プロッターを開発しています。ミリ秒ごとにログ データを受け取ります。カスタム QQuickItem を使用して、(パラメトリック曲線に) 段階的にプロットしたいと思います。
現在、QSGGeometry を使用して、頂点データを GPU に送信することを計画しています。ただし、QSGGeometry は頂点の増分アップロードをサポートしていないため、フレームごとにすべての頂点を送信する必要があります。ログの長さは約 100 秒なので、フレームごとに数十万の頂点を送信します。60秒ごとにそれを行うのはばかげていると感じています。
もちろん、不要な頂点 (他の頂点に近すぎる頂点) を削除して、頂点バッファー サイズを 1/30 にすることもできますが、それは単に GPU タスクを CPU に取り込んでいることに気付きました。(または、30 個のデータのすべてを取得して送信することもできますが、ユーザーはグラフを拡大することができ、見苦しくなります。)
代わりに、QQuickPaintedItem を使用して FrameBufferObject をインクリメンタルに描画することもできますが、ユーザーがグラフをドラッグしてグラフを再描画すると、1 つのフレームで 10 万回の gl-call が送信されます (または CPU で実行されますが、とにかく遅くなります)。 )。
どちらがより速い方法ですか?またはこれを行うためのより良い方法はありますか?
編集:もっと良い解決策を見つけたと思います。データを再帰的に分割し、十分に滑らかになるまでポイントを適応的に追加できます。このようにして、データを約 500 ポイントに減らすことができます。これは、CPU で必要なポイントにのみアクセスしながら、フレームごとに GPU に送信するのに十分安価です。唯一の懸念は、g++ が低オーバーヘッドのために再帰呼び出しを最適化できるかどうかです。