我有一个2D数组(256x16),我需要加载到Vulkan样式纹理中进行采样。在OpenGL中,这可以通过glTexImage2D或glTexSubImage2D完成。但是,我不知道如何在Vulkan中做同样的事情。
数组定义如下:
static const int triTable[256][16] =
{ { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
...
...
{ 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } };
答案 0 :(得分:1)
创建适当的USAGE_TRANSFER_SRC VkBuffer(或TILING_LINEAR USAGE_TRANSFER_SRC也可以使用VkImage,但规则方式较少)。
查询它的内存要求。然后根据Host可见内存中的内容分配它,并将该内存绑定到Buffer(或Image)。
映射内存。复制数据(如果您选择使用Image,请观察vkGetImageSubresourceLayout()
信息)。取消映射内存。
按vkCmdCopyBufferToImage()
(或vkCmdCopyImage()
)将数据复制到最终所需(理想最佳化)VkImage。
完成。在那里可能需要一些同步和其他样板......
如果您不确定,只需劫持别人的代码,例如https://github.com/SaschaWillems/Vulkan
答案 1 :(得分:0)
通过映射此内存来填充内容。
创建命令缓冲区并记录它以转换布局 图像并提交。
从图像创建采样器和图像视图。
我这里有一段代码link
检查功能:InitTexture和CreateSampler