問題タブ [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.
opengl - CUDA OPENGL 相互運用性: 遅いマッピング
私のアプリケーションは、openGL からレンダリングされた結果 (深度マップとレンダリングされた 2D イメージ情報の両方) を CUDA に渡して処理します。
私が行った 1 つの方法は、glReadPixel(..., image_array_HOST/depth_array_Host)* でイメージ/深度マップを取得し、cudaMemcpy(..., cudaMemcpyHostToDevice) で image_HOST/depth_HOST を CUDA に渡すことです。冗長に聞こえますが、この部分は実行しました。(GPU>CPU>GPU から)。*image_array_HOST/depth_array_Host は、ホストで定義する配列です。
別の方法は、openGL<>cuda interpol を使用することです。最初のステップは、openGL で 1 つのバッファーを作成し、そのピクセル バッファーに画像/深度情報を渡すことです。また、1 つの cuda トークンが登録され、そのバッファーにリンクされます。次に、CUDA のマトリックスをその cuda トークンにリンクします。(私が知る限り、ピクセル バッファを cuda マトリックスにリンクする直接的な方法はないようです。openGL が認識する cudatoken が必要です。間違っている場合は修正してください。)
この部分もやりました。CUDA が処理しているデータはどこにも転送されず、openGL 上のどこにでも転送されるため、かなり効率的であると考えられました。デバイス(GPU)内部のデータ処理です。
ただし、2 番目の方法で得た所要時間は、最初の方法よりも (わずかに) 長くなります (GPU>CPU>GPU)。それは本当に私を混乱させます。
見逃した部分があるのか、それとも効率的な方法でやらなかったのかはわかりません。
私もよくわからないことの1つは、glReadPixel(...、* data)です。私の理解では、*data が HOST 上のメモリにリンクするポインタである場合、GPU>CPU からのデータ転送を行います。*data=0 で 1 つのバッファーがバインドされている場合、データはそのバッファーに転送され、GPU>GPU のようになります。
おそらく、glReadPixel(..,0) よりも効率的にデータを渡すことができる他の方法があります。
何人かが私の質問を説明してくれることを願っています。
以下は私のコードです:
--
multithreading - PBO と VBO の使用
私のアプリケーション (QT/OpenGL) は、25fps で IP カメラから一連のビデオをアップロードし、それを適用して処理する必要があります。
- 各ビデオには、デモザイク フィルター、シャープ化フィルター、LUT、および歪みドキュメントが含まれます。
- 次に、以前に処理された 1 つまたは複数のフレームを選択して、opengl (テクスチャ プロジェクションなど) でレンダリングする必要があります。
- 次に、いくつかのウィジェット (QGLWidget) に結果を表示し、ピクセルを読み取ってムービー ファイルに書き込む必要があります。
私は PBO と FBO の長所と短所を理解しようとしています。あなたの助けを借りて検証したい次のアーキテクチャを思い浮かべます。
- ビデオごとに 1 つのスレッドを作成して、バッファ (画像の配列) にキャプチャします。ビデオ用のバッファが 1 つあります。
- a) フレームを GPU にアップロードする、b) フィルターを GPU に適用する、c) コンポジションを適用してテクスチャにレンダリングすることを目的とした Upload-filter-render スレッドを作成します。
- GUI スレッドに、前の手順で作成したテクスチャをウィジェットでレンダリングさせます。
Upload-Frames-to-GPUプロセスの場合、各ビデオに PBO (おそらく 2 つの PBOS) を使用して、フレームを非同期的にロードするのが最善の方法だと思います。
Apply-Filter-info-GPUには、Render-to-Texture を行うのに最適と思われる FBO を使用したいと考えています。最初に PBO によってアップロードされたテクスチャをバインドし、次に別のテクスチャ (フィルター処理された画像) にレンダリングします。FBO を 1 つだけ使用して、ビデオのアップロードに応じてバインディング テクスチャ入力とバインディング テクスチャ ターゲットを変更するか、アップロードするビデオと同じ数の FBOS を使用するかはわかりません。
最後に、結果をウィジェットに表示するために、FBO によってレンダリングされた最終的なテクスチャを使用します。ムービー ファイルに書き込むために、PBO を使用して GPU から CPU にピクセルを非同期的にコピーします。
それは正しいようですか?
c# - OpenGL でテクスチャ/スプライトを使用する最良の方法 (PBO を含む)
主に固定スプライト (ディスクからロードされたビットマップ) といくつかのビデオを使用する C# の小さなゲームがあります。
現在のアプローチは
読み込み中:
描く
そして更新:
すべてのテクスチャは使用されるまで保持されるため、ロードは起動時に 1 回だけ行われます (一般的に)。ここで、PBO を適切に使用してテクスチャを更新したいと思います (主にビデオ用) A) PBO を使用して (bmp から) テクスチャを追加するのは良い考えですか? pbo を作成し、bmp から pbo にデータをコピーしてから、TexSubImage2D を使用します。そのためのパフォーマンスポイントはありますか、それともオーバーヘッドが高いですか? B) 更新も同じ: 現在のコード:
これは実際に機能しますか、それともメリットはありませんか?
私はhttp://www.opengl.org/wiki/Pixel_Buffer_Objectとhttp://www.songho.ca/opengl/gl_pbo.htmlを読み、ダウンロードと使用に関する最初の記事では、データをアップロードしてすぐにそのテクスチャを描画する (または TexSubImage2D を使用しますか?) と、PBO によって速度が向上しません。これは正しいですか?したがって、PBO を使用する場合、2 番目の PBO を使用して、1 フレーム遅れてフレームを描画する必要がありますか?
私のメインループは次のようなものです:
別のスレッドでビデオをデコードします。
かなり素朴なアプローチですが、機能しています。これを行う正しい/より良い方法は何ですか?
opengl - glReadPixels または glCopyTexSubImage2D が遅すぎますか?
N パスを描画する必要があり、パスごとに fbo から 1 ピクセルを読み取りますが、パスごとに 1 ピクセルを読み取るには遅すぎることがわかりました。次に、別のテクスチャ (rectange:N*1) を使用してピクセルをキャッシュします。つまり、パスごとに 1 つのピクセルを結果のテクスチャにコピーします。N パス後、結果のテクスチャを 1 回読み込みます。ただし、TOO SLOW もあります。たとえば、結果のテクスチャ (200*1) を読み取るには、13 ミリ秒かかりました。
この問題を解決する別の方法があるかどうか疑問に思っています。
また、非同期で動作するピクセル バッファ オブジェクトに関するいくつかの投稿も解決しました。ただし、最後のパスが完了した後、すぐに結果テクスチャの結果が必要です。CPU と GPU の両方で動作するものは他にありません。
opengl - PBO に (そしてそこからファイルに) レンダリングするように既存の opengl アプリケーションを変更しますか?
既存の OpenGL アプリケーションを変更して PBO にレンダリングし、PBO を読み取って、元々画面にレンダリングされる予定だったもののエンコードされたビデオを生成したいと考えています。パフォーマンスが重要であるため、以前のようにバックバッファーから glReadPixels を実行してパイプラインを停止させることはできません。レンダリングされたすべてのものをフレームバッファにリダイレクトし、代わりに PBO に移動させる単純または直接的な方法があるかどうか疑問に思っています。つまり、画面に表示されなくても構いません。実際のところ、画面に何も表示されない方がいいと思います。
opengl - OpenGL + PBO + FBO + 一部の ATI カード - 色とピクセルのシフト
スライドショー作成用のソフトウェアを開発しており、OpenGLを使用しています。VGA から RAM への高速データ読み取りには FBO + PBO を使用しますが、ATI の一部のビデオ カードでは次の問題に直面しました。
- RGB コンポーネントの交換
- ピクセルシフト
PBOを使わなくても問題ありません。また、PBO/FBO (4:3) のアスペクト比がピクセル シフトの問題を解決することにも気付きました。
何か考えや提案はありますか?
詳細は次のとおりです。
- ATI Radeon HD 3650
PBO コード:
... PBO 読み取りデータをメモリに戻す
FBO の初期化
opengl - OpenGL PBO が nVidia グラフィックス カードで動作しない
openGL を使用して RGB フレームをレンダリングしようとしています。CPU にメモリが割り当てられると、コードは正常に動作します。ただし、Pixel Buffer Objects の概念を使用して GPU にメモリを割り当てると、フレームのレンダリング中に問題が発生します。
問題は、表示ウィンドウが完全に白いことです。同じコードを他のグラフィックス カードで実行すると、コードは正常に動作します。ただし、nVidia グラフィックス カードを搭載したシステムで実行すると、この白い画面の問題に直面します。
以下は私のコードです:
がアドレスを返すかどうかをデバッグして確認しましglMapBufferARB
た。有効なアドレスが返されます。つまり、BadPtr
問題はありません。3 つの異なるモデルの nVidia グラフィックス カードを搭載した 3 つのシステムで確認しましたが、出力は同じで、白い画面が表示されます。
ただし、他のグラフィックカードを搭載したシステムでもコードを試してみましたが、コードは機能します。なお、OpenGL版では問題ありません。
上記のコードを機能させるための変更または何かを提案してください。
php - これは安全なロック ファイルとして渡すことができますか?
人々が特定のページにログインしているかどうかを確認するためのロック ファイルを作成しましたが、実際に公開するのに十分な安全性があるかどうか、または人々がこのロックを簡単に回避できるかどうかに興味がありました。
現在、私のコードは次のとおりです。
データベースでユーザーとパスワードの一致をチェックするので、これを回避する方法は実際にはないように感じますが、同時に私はPHPに少し慣れておらず、よくわかりません。