vkCmdCopyBufferToImage 用于 Texture2DArray

问题描述 投票:0回答:0

我正在尝试使用单通道从 576x112 纹理创建图像数组。 我尝试每层创建 48x112,因此 arrayLevel 设置为 12.

然后我使用暂存缓冲区上传数据,它看起来像这样

我尝试了不同的bufferRowLength,最终图像变得更丑陋,而bufferImageHeight不影响最终结果

vk::BufferImageCopy buffer_image_copies[12] = {};
for (u32 i = 0; i < 12; ++i) {
    // Copy only the first layer of the texture
    buffer_image_copies[i].bufferOffset = 0;
    buffer_image_copies[i].bufferRowLength = 48;
    buffer_image_copies[i].bufferImageHeight = 112;
    buffer_image_copies[i].imageSubresource.aspectMask = vk::ImageAspectFlagBits::eColor;
    buffer_image_copies[i].imageSubresource.mipLevel = 0;
    buffer_image_copies[i].imageSubresource.baseArrayLayer = i;
    buffer_image_copies[i].imageSubresource.layerCount = 1;
    buffer_image_copies[i].imageOffset = vk::Offset3D(0, 0, 0);
    buffer_image_copies[i].imageExtent = vk::Extent3D(48, height, 1);
}
command_buffer.copyBufferToImage(staging_buffer, car_volume_texture.image, vk::ImageLayout::eTransferDstOptimal, 12, buffer_image_copies);

vulkan texture2d
© www.soinside.com 2019 - 2024. All rights reserved.