VulkanTutorialCN icon indicating copy to clipboard operation
VulkanTutorialCN copied to clipboard

代码错误:纹理图像格式错误

Open AnpyDX opened this issue 2 years ago • 2 comments

错误简要

28节纹理 中创建 图像(Image)图像视图(ImageView) 时填写的格式(foramt)参数错误,原先填写的 VK_FORMAT_R8G8B8A8_UNORM 应全部改为 VK_FORMAT_R8G8B8A8_SRGB

该错误会造成纹理颜色显示异常。不知道是不是原作者进行了更新。

错误详细

1 - 28.5 纹理图像 ->> 创建图像时填写的 VkImageCreateInfo imageInfo{} 格式(format)参数错误

  • 位于 PDF 213页
imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM;

更改为

imageInfo.format = VK_FORMAT_R8G8B8A8_SRGB;

2 - 28.5 纹理图像 ->> 封装 createImage 函数后的格式(format)参数错误

  • 位于 PDF 218页
createImage(texWidth, texHeight, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);

更改为

createImage(texWidth, texHeight, VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);

3 - 28.8 准备纹理图像 ->> 两次调用函数 transitionImageLayout 时填的写格式(format)参数错误

  • 位于 PDF 223页
transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
copyBufferToImage(stagingBuffer, textureImage, static_cast<uint32_t>(texWidth), static_cast<uint32_t>(texHeight));

transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

更改为

transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
copyBufferToImage(stagingBuffer, textureImage, static_cast<uint32_t>(texWidth), static_cast<uint32_t>(texHeight));

transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

4 - 28.10 清理 ->> 函数 transitionImageLayout 格式(format)参数错误

  • 位于 PDF 225页
transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

    vkDestroyBuffer(device, stagingBuffer, nullptr);
    vkFreeMemory(device, stagingBufferMemory, nullptr);

更改为

transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

    vkDestroyBuffer(device, stagingBuffer, nullptr);
    vkFreeMemory(device, stagingBufferMemory, nullptr);

AnpyDX avatar Aug 11 '22 14:08 AnpyDX

Thanks.

fangcun010 avatar Feb 12 '23 07:02 fangcun010

你可以提交一个PR吗?我来合并~感谢~。

fangcun010 avatar Feb 12 '23 07:02 fangcun010