sách gpt4 ai đã đi

Vulkan 描述符绑定(bind)

In lại 作者:行者123 更新时间:2023-12-05 07:32:47 25 4
mua khóa gpt4 Nike

在我的 vulkan 应用程序中,当所有网格都使用相同的纹理时,我曾经像这样绘制网格

Updatedescriptorsets(texture)

Command buffer record
{
For each mesh
Bind transformubo
Draw mesh
}

但现在我希望每个网格都有一个独特的纹理,所以我尝试了这个

Command buffer record
{
For each mesh
Bind transformubo
Updatedescriptorsets (textures[meshindex])
Draw mesh
}

但是它给出了一个错误,说 descriptorset 被销毁或更新了。我查看了 vulkan 文档,发现我无法在命令缓冲区记录期间更新描述符集。那么我怎样才能让每个网格都有独特的纹理呢?

1 Câu trả lời

vkUpdateDescriptorSets 未与任何内容同步。因此,您无法更新正在使用的描述符集。您必须确保所有使用相关描述符集的渲染操作都已完成,并且没有任何命令被放置在使用相关描述符集的命令缓冲区中。

它基本上就像一个全局变量;你不能让人们在没有某种同步的情况下从多个线程访问全局变量。并且 Vulkan 不会同步对描述符集的访问。

有几种方法可以解决这个问题。您可以为每个对象提供自己的描述符集。这通常是通过使频繁更改的描述符集数据具有比不频繁更改的数据更高的索引来完成的。这样,您就不会更改每个对象的每个描述符,而只会更改每个对象的描述符。

您可以使用推送常量数据来索引大型表/数组纹理。所以描述符集将有一个纹理数组或一个纹理数组(如果你有纹理数组的动态索引)。推送常量将提供一个索引,着色器使用该索引从纹理数组/纹理数组中获取特定对象的纹理。这使得频繁更改的成本相当低,而且相同的索引也可用于为每个对象提供自己的转换矩阵(通过提取到矩阵数组中)。

如果您有可用的扩展 VK_KHR_push_descriptor,那么您可以将对描述符的更改直接集成到命令缓冲区中。这比推送常量机制好多少当然取决于实现。

关于Vulkan 描述符绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024194/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com