OpenGLウィンドウ(幅*高さ)にglReadPixelを使用しています。 私のアルゴリズムを適用するには、深度バッファを2回、カラーバッファ(フレーム)を1回読み込む必要があります。しかし、glReadPixelsを使用する代わりにOpenGLでピクセル値を読み取る方法はありますか?
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
は使いすぎです。 早送りする方法はありますか?
OpenGLウィンドウ(幅*高さ)にglReadPixelを使用しています。 私のアルゴリズムを適用するには、深度バッファを2回、カラーバッファ(フレーム)を1回読み込む必要があります。しかし、glReadPixelsを使用する代わりにOpenGLでピクセル値を読み取る方法はありますか?
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
は使いすぎです。 早送りする方法はありますか?
glReadPixels(j ,i ,1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &value);
'i'と 'j'はループ変数の一般的な名前です。あなたのユースケースの許容待ち時間として1〜2秒を言及していることに加えて、ループ内で一度に1つずつ多くのピクセルを読み取っているという結論にジャンプします。例えばあなたはglReadPixelsを1280 * 720 = 921600回呼んでいます。それが間違っていたら謝罪します。
通常、GPUがレンダリングを終了するまでCPUが強制的に停止するため、glReadPixelsは低速であるとみなされます。この文脈では、glReadPixelsは数ミリ秒間ストールし、リアルタイムのフレームレートに悪影響を及ぼすことがありますが、最大50〜100ミリ秒以上の遅延は期待できません。
あなたのケースでは、glReadPixelsの呼び出しごとのオーバーヘッドが大きいため、遅いと思います。大量のピクセルを読み込む必要がある場合は、より大きなメモリのチャンクを割り当て、幅と高さのパラメータを使用してglReadPixelsを1回呼び出すだけでメモリを読み込みます。それは数倍の速さになります。
どの程度の遅延が許容されますか? – genpfault
リアルタイムでピクセル値にアクセスできる場合は、それが最適です。ただし、ピクセルを読み取るには、指定されたフレームで1〜2秒かかることは問題ありません。 (例えば、1280 720ウィンドウ) – Wooni