Open2

vulkanをやるときにつまづいたこと

hatemotohatemoto

VUID-vkCmdDrawIndexed-None-08600

エラー内容

VUID-vkCmdDrawIndexed-None-08600(ERROR / SPEC): msgNum: 941228658 - 検証エラーです: [オブジェクト 0: handle = 0x5c5283000000003e, type = VK_OBJECT_TYPE_PIPELINE; オブジェクト 1: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_PIPELINE_LAYOUT; | MessageID = 0x381a0272 | vkCmdDrawIndexed(): VkPipeline 0x5c5283000000003e[] (VkPipelineLayout 0x59ffe0000000003d[] で作成) は、現在バインドされている記述子セットのパイプラインレイアウト (VkPipelineLayout 0x0[]) と互換性のない記述子セット (インデックス #0) を静的に使用します: バインドされたシェーダによって静的に使用される各セット n に対して、現在の VkPipeline または VkShaderEXT を作成するために使用された VkPipelineLayout または VkDescriptorSetLayout 配列と、セット n に対して互換性のある VkPipelineLayout で、同じパイプライン バインド ポイントで n にバインドされた記述子セットが必要です。

解決策

描画ループにvkCmdBindDescriptorSets()を追加したらエラーが解消した.

hatemotohatemoto

メッシュごとにマテリアルを変更したい

メッシュごとにマテリアルを変更する方法がわからない.

解決策?

1回の描画中にマテリアル(UniformBuffer)を変更したいときは,別のUniformBufferを作成して,メッシュ毎にvkCmdDescriptorSets()を実行する必要がある.この時VkDescriptorBufferInfoのbufferには作成したUniformBufferを指定することでメッシュごとにマテリアルを変更することができた.