問題タブ [pbo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android Opengl ES 3.0 ピクセル バッファ オブジェクトと glReadPixel
glReadPixels() のパフォーマンスを PBO (for Android 4.3+) を使用して改善したいのですが、glReadPixels はテスト デバイスのフレームごとに約 30 ~ 50ms (1280*960) かかるため、Java で直接 glReadPixels を使用することはできません。最後のパラメーターをゼロまたは「null」にすることはできません。ここで述べたように、ndkも使用しようとしています。しかし、ndk の GLES3/gl3.h のいずれかで、最後のパラメーターを (void*) にする必要があります。問題は、glReadPixels を使用して PBO を機能させるにはどうすればよいかということです。これはパフォーマンスを向上させるための適切なソリューションですか?
android - PBO で glReadPixels を使用してもパフォーマンスが向上しない (GLES3)
データを非同期で読み取るために、(Androidアプリで)PBO
ロジックを実装しようとしています。glReadPixels
これの動機は、アプリが画面にビデオをレンダリングすることであり、画面上のレンダリングを遅らせることなく、そのビデオのスクリーンショットを撮りたいと考えています。
PBO を使用した glReadPixels はすぐに返されるはずだと思っていましたが、返されるまでに最大 250 ミリ秒かかります (pbo を使用しない通常の glReadPixels と同様)。
理由はありますか?(これは実際に を使用してデータを読み取らなくても発生しますglMapBufferRange
。これは実際にはかなり高速です)
これは私のコードです:
opengl - ピクセル バッファ オブジェクトを使用して GPU から CPU にテクスチャをコピーする
私は OpenGL を初めて使用し、現在、次のように 2D テクスチャの内容を CPU メモリにコピーしています。
私はこれが非常に遅いことに気付き、PBO について読み始め、それが物事を少しスムーズにするかどうかを試してみようと考えました。したがって、次のように PBO を作成します。
上記の行は、PBO を初期化するために 1 回だけ実行する必要があると思います。
私の質問は、テクスチャからこの PBO オブジェクトにデータを実際にマップするにはどうすればよいですか? その後、ある時点で呼び出す必要があることはわかっていますglMapBuffer
が、このテクスチャを PBO にアタッチする方法がわかりません。
android - glreadpixels use pbo が機能しない - cpu を使用するのではなく、pbo を使用して画像を保存したい
CPUを使用するのではなく、pboを使用して画像を保存したい。そのため、glreadpixels では bytebuff を使用せず、GLES30.glReadPixels(0, 0, getWidth(), getHeight(), GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null); を使用しました。
しかし、それは機能しません...
これは私のセットのfboとpboコードです:
画像を描画した後、私の pbo readpixels が機能せず、fbo が間違って読み取られ、最終的な画像ではなく、元の fbo[0] または fbo[1] が取得されます。
glreadpixels に関するエラー:
ありがとうございました!
android - Android の PBO で glReadPixels のパフォーマンスが向上しない
さらに処理するために OpenGL で現在のフレームのスクリーンショットを撮りたいのですが、PBO を使用してフレームバッファを非同期に読み取ることにより、glReadPixels のパフォーマンスを改善しようとしています。
GL_PIXEL_PACK_BUFFERがバッファにバインドされた後のglReadPixelsはすぐに返されるはずですが、実際にはPBOを使用しない場合と同じかそれ以上の時間がかかります。
ここに私のコードのサンプルがあります:
この記事に基づいて、スローダウンの原因は、GL_BGRA である可能性のある内部形式と、私のコードでは GL_RGBA であるピクセル転送形式との間の変換が原因である可能性があります。転送形式を GL_RGB に変更すると、glReadPixels のレイテンシが約 100 ミリ秒に短縮されますが、バッファを GLES30.glMapBufferRange でマップすると、出力フレームが正しくレンダリングされないように見えます。GLES11Ext で GL_BGRA フォーマットも試しましたが、glReadPixel で GL_INVALID_OPERATION が発生します。
Android で glReadPixels をすぐに返して、PBO のパフォーマンスを向上させる方法は他にありますか?
macos - PBO による GPU へのテクスチャのアップロードが機能しない (OpenGL バージョン 4.1)
有名なチュートリアルOpenGL Pixel Buffer Object (PBO)を読みました。サンプル コードを自分のコンピューターでテストしたところ、動作しました (ただし、PBO をオンにしてもパフォーマンスは向上しませんでしたが、少なくとも正しくレンダリングされています)。
問題は、サンプル コードの OpenGL コンテキスト バージョンがかなり古い ( Version: 2.1 INTEL-10.22.29
) ことです。私のプロジェクトの OpenGL コンテキスト バージョンは、version: 4.1 INTEL-10.22.29
拡張機能をサポートしていませんGL_ARB_pixel_buffer_object
。
このマップを読み、PBO (OpenGL 3.3) を使用してテクスチャを塗りつぶしたので、コードを次のように変更します。
そしてレンダリングループ:
私のコードは単色のテクスチャをレンダリングするだけです。ブロックをコメントする======== start process PBO =========
と========= end process PBO ==========
、すべてうまくいきますが、このブロックでは失敗し、黒い画面しか表示されません。私はすでにglMapBuffer
正しく動作することを確認しており、テクスチャデータを が指すメモリに正常に書き込んでいますptr
(その値を出力してチェックしています)が、期待した結果が得られなかった理由がわかりません。
前もって感謝します。
私の環境: