2016-08-22 5 views
1

私はちょうどvulkanの学習を始め、いくつかのチュートリアル/サンプルを見てみました:誰もが一様な読み込みのために1つの構造体を使用し、すべての関連データ(モデル、等。)。これらの構造体は、フレームごとに完全に更新されます。複数のDescriptorSetsの使用より多くのユニフォームの更新

私の質問:これは、ライターが「怠け者」であり、別個の周波数に対して別々のアンフォフォームを作成するのではなく(例:投射のように1回だけロードする必要があるためです)、追加セットアップ、または1つの "大きな"構造体を複数のセットを作成するよりも頻繁にロードするとパフォーマンスが向上するためです。

+0

私は私の例だけ話すことができ、私はそれを単純に(Vulkanで可能な限り)維持しようとします。そのため、私はUBOごとに1つのディスクリプタセットしか使用しません。複数のセットを示す例がリストにありますが、まだ完成していません。しかし、投影行列のような静的なものでは、専用DSの代わりにプッシュ定数を使うことができます。 –

+1

@SaschaWillems私が参照していたのはあなたの例(Alexander Overvoordeのもの)でした。一見すると、彼らはかなり怪物ですが、コードを読めば、彼らはかなりシンプルです。彼らはvulkanで始めるための大きな助けでしたので、私はこれらの例を提供するためにあなたに個人的に感謝したいと思います。 – Dynamitos

答えて

2

ほとんどのデモ/サンプルコードは怠惰です。通常、結果に必要ではない概念でコードを複雑にすることを避けるためです。

また、デモでは一般に1つの描画呼び出し(1つのモデルのレンダリングのみ)があるため、デモではディスクリプタセットを変更する必要はありません。

また、変更の頻度は、単一のコマンドバッファの記録内にあります。したがって、フレームの長さに対して一定のままであるビュー行列がある場合は、投影行列とともにレイアウトの先頭に配置できます。

+0

ありがとう "レイアウトの開始"とは、レンダリングの始まりを意味しますか?とにかく、ありがとう – Dynamitos

+0

いいえ、私はバインディング番号0を意味し、それは(ほぼ)すべての描画呼び出しでコマンドバッファに使用されます。 –

+0

私は最後の質問が1つあります。シェーダがより多くの変数(10-20)で大きくなる場合は、別のバッファを作成し始めますか?それとも、単一のバッファとプッシュ定数で単純なアプローチに固執しますか? – Dynamitos

関連する問題