0

OpenGL + GLSL を使用した GPGPU プログラミングを調査しています。1つ問題は、完成までに時間がかかるシェーダーがあると、キャンセルができそうにないことです。

すべてを設定した後、glReadPixelsすべてのピクセルがフレーム バッファーにレンダリングされるまでブロックする最終呼び出しを発行します。シェーダーによっては、これには長い時間、場合によっては数秒かかる場合があります。(別のスレッドから) 呼び出しをキャンセルしたり、進行状況を照会したりする方法はありますか? シェーダーに無限ループを設定するとどうなりますか?

4

2 に答える 2

3

glReadPixelsの代わりに、ブロックしていないPixelBufferObjectsを使用できます。glReadPixelsは(メインスレッドで)結果を待ちますが、PBOは続行します...コードのどこかで、PBOのデータが利用可能かどうかを確認できます。

http://www.songho.ca/opengl/gl_pbo.html

http://www.opengl.org/wiki/Pixel_Buffer_Object

より高度な計算が必要な場合は、OpenCLを使用することをお勧めします。これにより、柔軟性が向上します。

于 2012-12-29T10:06:46.567 に答える
0

シェーダーに無限ループを設定するとどうなりますか?

ビデオドライバーがクラッシュすると思います。

于 2012-12-29T10:08:49.593 に答える