2

我有一个二维数组 (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 } };
4

2 回答 2

2
  1. 创建适当的 USAGE_TRANSFER_SRC VkBuffer(或 TILING_LINEAR USAGE_TRANSFER_SRC VkImage 也可以使用,但不太规范)。

  2. 查询它的内存需求。然后根据主机可见内存中的内存分配它并将该内存绑定到缓冲区(或图像)。

  3. 映射内存。vkGetImageSubresourceLayout()复制您的数据(如果您选择使用图像,请观察信息)。取消映射内存。

  4. vkCmdCopyBufferToImage()通过(或)将数据复制到您最终想要的(理想优化的)VkImage 中vkCmdCopyImage()

  5. 完毕。那里可能需要一些同步和其他样板文件......

如果你不确定,就劫持别人的代码,例如https://github.com/SaschaWillems/Vulkan

于 2016-04-18T15:31:43.200 回答
0
  1. 创建VkImage然后getMemoryRequirements,分配内存和vkBindImageMemory。
  2. 通过映射此内存来填充内容。

  3. 创建命令缓冲区并记录它以转换图像布局并提交。

  4. 从图像创建采样器和图像视图。

我这里有一个代码链接

检查函数:InitTexture 和 CreateSampler

于 2016-11-30T22:26:03.343 回答