在Vulkan中从数组创建纹理的步骤是什么?

时间:2016-04-15 12:21:00

标签: textures vulkan

我有一个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 } };

2 个答案:

答案 0 :(得分:1)

  1. 创建适当的USAGE_TRANSFER_SRC VkBuffer(或TILING_LINEAR USAGE_TRANSFER_SRC也可以使用VkImage,但规则方式较少)。

  2. 查询它的内存要求。然后根据Host可见内存中的内容分配它,并将该内存绑定到Buffer(或Image)。

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

  4. vkCmdCopyBufferToImage()(或vkCmdCopyImage())将数据复制到最终所需(理想最佳化)VkImage。

  5. 完成。在那里可能需要一些同步和其他样板......

  6. 如果您不确定,只需劫持别人的代码,例如https://github.com/SaschaWillems/Vulkan

答案 1 :(得分:0)

  1. 创建VkImage然后getMemoryRequirements,分配内存和 vkBindImageMemory。
  2. 通过映射此内存来填充内容。

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

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

  5. 我这里有一段代码link

    检查功能:InitTexture和CreateSampler