2016-09-18 2 views
2

フレームバッファはレンダリングパイプラインの最終的な宛先であり、スワップチェーンには多くのイメージが含まれていることがわかっています。では、これら2つのことの関係はどうですか?どちらが実際のレンダーターゲットですか?フレームバッファは、後で現在のフレームの最後の画像を画像ビューに添付しますか?もしそうなら、どのように転送するのですか?Vulkanのフレームバッファとイメージの違いは何ですか?

これをペイントまたはダイアグラムで説明することは喜ばしいことです。

+2

"フレームバッファがレンダリングパイプラインの最終的な宛先であることはわかっています*" VkFramebufferは "最終目的地ではありません。あなたがレンダリングするのは、 'VkFramebuffer'の画像を参照するサブパスによって定義されます。しかし、 'VkFramebuffer'自体は本当に何もしません。あなたがOpenGLのデフォルトフレームバッファのようなものについてもっと話しているように思えます。 –

+0

まあ、たぶん私はOpenGLに慣れただけかもしれません。どの人が画像を収集するのですか?私はスワップチェーンがそれらを集めると思った。私は何かを誤解しましたか? – EkBumYe

答えて

11
  • VkFramebuffer + VkRenderPassレンダーターゲットを定義します。

  • レンダリングパスはの添付ファイルが色で書かれています。

  • VkFramebufferは、VkImageViewとなるものを定義します。添付ファイルです。

  • VkImageViewは、VkImageのどの部分を使用するかを定義します。

  • VkImageは、VkMemoryが使用されるものとテクセルのフォーマットを定義します。


それとも逆の順序で

  • VkMemoryは、メモリ内のNバイトだけのシーケンスです。

  • VkImageオブジェクトに追加します。形式に関する情報(バイトではなくテクセルで扱うことができるように)

  • VkImageViewオブジェクトは、stringView、arrayView、whathaveyouのような一部の選択も、互換性のないインターフェイスに一致するのに役立ちます(オンザフライでフォーマットを変換することによって)。

  • VkFramebuffer添付VkImageViewをバインドします。

  • VkRenderpass添付だから、あなたがイメージを使用していないようではない

に引き込まれるかを定義します。あなたは、Vulkanフレームバッファを通して行います。

スワップチェーンイメージは他のイメージと変わりません。ドライバーは画像のオーナーです。直接破壊することも、自分で割り当てることもできません。取得と現在の操作の間、ドライバからそれを借りるだけです。

バッファリングとレンダリングの目的で、スワップチェーンイメージが(通常は)さらにあります。 AFAIKでは、画像ごとに別々のVkFramebufferが必要です(ですが、実際には何が起きているのかは分かりません)。

(この中にはかなりの図は間違いなくありますたぶん後で...。)

+2

良い説明。その美しい図も提供してください。 – pcoder

3

おそらくフレームバッファを記述するバルカン仕様から最良の単一の文は次のとおりです。

になり、特定の画像ビュー添付ファイルに使用され、 のディメンションは、VkFramebufferオブジェクトで指定されます。

はい、あなたはswapchainで各画像のVkFramebufferオブジェクトが必要になりますが、あなたは一般的に深度バッファVkImage 1つだけVkMemoryを割り当て、その後のすべてにその単一の深度バッファVkImageためVkImageViewを追加する必要がありますあなたのフレームバッファ。

関連する問題