根据vkGetPhysicalDeviceSurfaceFormatsKHR,参数pSurfaceFormats
是指向VkSurfaceFormatKHR
结构数组的指针。如果pSurfaceFormats
为NULL,则在pSurfaceFormatCount
中返回给定曲面支持的格式对数。支持的格式对数量将大于或等于1.
我使用vkGetPhysicalDeviceSurfaceFormatsKHR
函数,pSurfaceFormats
具有NULL值,以返回名为surface_formats
的数组。我使用vulkan做了这个,它是Vulkan的python包装器。
vkGetPhysicalDeviceSurfaceFormatsKHR = vkGetInstanceProcAddr(
instance, "vkGetPhysicalDeviceSurfaceFormatsKHR")
surface_formats = vkGetPhysicalDeviceSurfaceFormatsKHR (
physicalDevice = physical_device,
surface = surface )
for f in surface_formats:
print(' format = ', f )
print(' format.format = ', f.format )
print(' format.colorSpace = ', f.colorSpace )
下面是数组surface_formats
的打印输出:
format = <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f60>
format.format = 44
format.colorSpace = 0
format = <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f68>
format.format = 50
format.colorSpace = 0
我的问题:
为什么surface_formats
数组有两个索引,而不只是1个索引或更多索引,如3,4,5,...?指数的数量与什么有关?例如,它与物理设备中VkQueueFamilyProperties
的索引数有关吗?
VkColorSpaceKHR
(即f.colorSpace)是否仅从下面列出的允许值中返回一个结果或几个可能的结果?例如。可以返回VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
和VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
而不只是VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
吗?
typedef enum VkColorSpaceKHR { VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003, VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, } VkColorSpaceKHR
答案 0 :(得分:1)
格式描述了如何将颜色通道编码到存储器中,这包括每个通道有多少位。
Colorspace描述了从编码颜色到实际线性sRGB颜色空间的映射,您希望颜色可用于基于物理的东西。
这不是一组标志,而是一个值,如果格式支持多个颜色空间,则每对在数组中需要一个单独的值。