VK_DEFINE_NON_DISPATCHABLE_HANDLE 是什么意思

Fri*_*esh 3 c++ vulkan

我知道这VK_DEFINE_NON_DISPATCHABLE_HANDLE是一个struct object##_T *objectuint64_t object取决于架构。

明白的是为什么使用它以及它有什么好处和/或效果。

例如,如果我想pCode从我那里得到 ,VkShaderModule为什么我不能去myShaderModule.pCode

djg*_*ndy 5

在许多领域,Vulkan API 实现了不透明句柄。从本质上讲,这意味着实现者几乎可以做任何他们喜欢的事情,并且在对象的内存布局甚至句柄是一个真正的指针方面不受任何合同的约束。

如果你想pCode从你的VkShaderModule我建议你在创建它时自己存储它,而不是依靠实现来为你存储它。

Vulkan 的目的是消除图形 API 的负担并消除膨胀。存储用户提供的数据并提供 API 来获取所述用户数据是膨胀的。如果你想保留这些东西,请制作一张VkShaderModules你想保留的参数的映射VkShaderModuleCreateInfo

  • `glGetShaderSource` 是你真正要问的 OpenGL 等价物。这真的是一个毫无意义的函数调用。如果客户需要这些信息,他们可以按照他们最初提供的方式自行存储!实际上,由于驱动程序必须存储这些字符串,因此系统中的每个图形应用程序都会浪费内存。在 GL 中有很多这样的废话,它已从 Vulkan 中删除。 (3认同)