問題タブ [buffer-objects]

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.

0 投票する
1 に答える
649 参照

opengl - バインディング ポイント インデックスを明示的に指定しない複数の UBO

OpenGL Uniform Buffer Objects と Shader Storage Buffers を調べています。質問は両方に当てはまると思いますが、UBO に焦点を当てましょう。

チュートリアルでは、「ブロック インデックス」と「バインディング ポイント インデックス」は別物だと言っているようで、シェーダーに複数の UBO がある場合は、バインディング インデックスを指定する必要があります。

ブロック インデックスはリンカによって決定されglGetUniformBlockIndex、.binding=NglBindBufferBase(GL_UNIFORM_BUFFER, N, ubo_handle)

ブロック インデックスとバインディング ポイントの違いは何ですか?

binding=Nレイアウトでを省略できますか? ではどうなりglBindBufferBaseますか?

これはSSBOでも同じですか?

0 投票する
1 に答える
3611 参照

opengl - シェーダー ストレージ バッファー オブジェクトとしての動的長配列

OpenGL シェーダーでアクセスしたい動的な数の「ボール」があるとします。C++ では、データは次のようになります。

フラグメント シェーダーで繰り返し処理する場合all_ballsは、シェーダー ストレージ バッファー オブジェクトが必要になると思います。

このドキュメントは配列に触れていますが、著しく不完全です。

このようにデータをバッファに送信できると思います

GLSL では、バッファが配列であることを指定するにはどうすればよいですか? また、シェーダはこの配列のサイズをどのように認識しますか?

0 投票する
1 に答える
256 参照

opengl - PBO ストリーミング、同期は正確にいつ行われますか?

ffmpeg でピクセルをデコードして rgb8 形式に変換し、マップされたピクセル バッファーに書き込み、ストリーミングを使用して opengl テクスチャを更新し、それを sdl ウィンドウにレンダリングしようとしていました。

デコードとアップロードは専用スレッド (make sws_scale がマップされたバッファーに書き込む) で行われ、レンダリングは共有を伴う別のコンテキストのレンダリング スレッドで行われます。(PBO は実際には複数のフレームを保持し、テクスチャは位置を切り離すために 2D 配列テクスチャです。)

デコード スレッドでマップされた範囲をフラッシュし、レンダリング スレッドで glTextureSubImage3D を使用して、必要なインデックスでテクスチャを更新すると、問題なく動作します。このシナリオでは、統合された Intel GPU はかなり高速に動作します (そうあるべきです) が、NV ドライバーは次のように文句を言います。Pixel-path performance warning: Pixel transfer is synchronized with 3D rendering.

glTextureSubImage3D だけが実際にアップロードを行うのではないかと考えたので、フラッシュ操作の直後に glTextureSubImage3D を移動しました。今回は、NV GPU は正常に動作し、警告は消えますが、Intel GPU では黒いウィンドウが表示され、閉じるときにデコードされたコンテンツのみが表示されます。

コードは次のようなものです。

クライアント側のメモリのアイデアと、ドライバーがテクスチャを非同期にアップロードする方法、アップロードが行われる正確な場所、および GL_PIXEL_UNPACK_BUFFER がバインドされているときに glTextureSubImage3D が実際に行うことについて、私は本当に混乱していますか?

編集:

各アップロード後にアップロード コンテキストのコマンド キューをフラッシュする glFlush() コマンドを追加した後、Intel バージョンはブラック スクリーンなしで適切に動作します。

アップデート:

glFlush() を追加すると、NV GPU が「ピクセル パス パフォーマンスの警告: ピクセル転送が 3D レンダリングと同期されます」という警告を発するようです。再び、同じビデオ サンプルの GPU 使用率が 8% から 10% に増加しました。glFlush() が何らかの内部同期をトリガーしているようで、おそらく物事がビジー待機状態になりますか? Intel GPU は glFlush なしでは動作しないため、クライアント待機同期バージョンで flush コマンド ビットが設定されていても、レンダリング側で明示的に flush を呼び出しても動作しません。では、両方のドライバーを満足させる (そして使用率を下げる) にはどうすればよいでしょうか?

0 投票する
1 に答える
481 参照

opengl - OpenGL 4 - トライアングル ストリップ キューブの UV 座標

三角形のストリップで作成された立方体があり、その UV 座標を見つけようとしています。

彼らが何になるか知っている人はいますか?