gpt4 book ai didi

vulkan - 表面格式是 B8G8R8A8_UNORM,但是 vkCmdClearColorImage 需要 float ?

转载 作者:行者123 更新时间:2023-12-01 02:00:23 28 4
gpt4 key购买 nike

我用 vkGetPhysicalDeviceSurfaceFormatsKHR获取交换链支持的图像格式,并且(在 Linux+Nvidia 上,使用 SDL)我得到 VK_FORMAT_B8G8R8A8_UNORM作为第一个选项,我继续使用该格式创建交换链:

VkSwapchainCreateInfoKHR swapchain_info = {
...
.imageFormat = format, /* taken from vkGetPhysicalDeviceSurfaceFormatsKHR */
...
};

到目前为止,这一切都说得通。用于在屏幕上绘制的图像格式是通常的每 channel 8 位 BGRA。

作为我学习过程的一部分,到目前为止,我已经设置了很多东西,但还没有设置图形管道1。所以我正在尝试我可以使用的唯一不需要管道的命令: vkCmdClearColorImage 2.
VkClearColorValue用于定义清晰的颜色可以取颜色为 float , uint32_tint32_t ,取决于图像的格式。根据提供给交换链的图像格式,我本来希望我应该给它 uint32_t值,但这似乎不正确。我知道是因为屏幕颜色没有改变。我试着给它 float s,它的工作原理。

我的问题是,为什么需要在 float 中指定清晰的颜色s 当图像格式为 VK_FORMAT_B8G8R8A8_UNORM ?

1 其实我有,但我想我会先尝试更简单的没有管道的情况。我正在尝试逐步使用 Vulkan(考虑到它的冗长性),特别是因为我也在写 tutorials on it当我学习。

2 实际上,它在技术上不需要渲染 channel ,但我想嘿,我在这里没有使用任何管道的东西,所以让我们在没有管道的情况下尝试它并且它起作用了。

我的渲染循环本质上如下:
  • 从交换链获取图像
  • 使用以下命令创建命令缓冲区:
  • VK_IMAGE_LAYOUT_UNDEFINED 过渡至 VK_IMAGE_LAYOUT_GENERAL (因为我正在清除渲染 channel 外的图像)
  • 清除图像
  • VK_IMAGE_LAYOUT_GENERAL 过渡至 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
  • 将命令缓冲区提交到队列(使用信号量处理与交换链的同步)
  • 提交演示
  • 最佳答案

    My question is, why does the clear color need to be specified in floats when the image format is VK_FORMAT_B8G8R8A8_UNORM?



    因为 normalized 、缩放或 sRGB 图像格式实际上只是浮点压缩的各种形式。归一化整数是一种在 [0, 1] 或 [-1, 1] 范围内存储浮点值的方法,但使用的数据量甚至比 16 位浮点数要少得多。缩放整数是一种在 [0, MAX] 或 [-MIN, MAX] 范围内存储浮点值的方法。 sRGB 只是一种在 [0, 1] 范围内存储线性颜色值的压缩方式,但在 Gamma 校正颜色空间中,将精度放在与线性颜色值不同的地方。

    对于顶点着色器的输入,您会看到相同的内容。一个 vec4输入类型可以由规范化格式以及浮点格式提供。

    关于vulkan - 表面格式是 B8G8R8A8_UNORM,但是 vkCmdClearColorImage 需要 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063416/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com