具有 3 个组件的 Vulkan vkCreateImage
Vulkan vkCreateImage with 3 components
我正在尝试将 vkCreateImage
与 3 分量图像 (rgb
) 结合使用。
但是所有 rgb
格式都给出:
vkCreateImage format parameter (VK_FORMAT_R8G8B8_xxxx) is an unsupported format
这是否意味着我必须重塑内存中的数据?所以每3个后面加一个空字节,然后加载为RGBA
?
我还注意到 R8
和 R8G8
格式确实有效,所以我猜想不支持 RGB
的唯一原因是因为 3 不是 2 的幂。
在我真正对数据进行重塑之前,我想确定这是唯一的方法,因为它对性能不是很好,也许某处有一些偏移或填充值会有所帮助将 RGB
数据加载为 RGBA
格式。那么有人可以确认重塑为 RGBA
是加载 RGB
格式的必要步骤(尽管有 33% 的开销)吗?
提前致谢。
首先,您应该在尝试创建图像之前检查支持的内容。您不应该依靠验证层来阻止您;这只是一种调试辅助工具,可以在您忘记检查时捕获某些内容。支持和不支持的是动态的,而不是静态的。它基于您的实施。所以你每次启动应用程序的时候都要询问你打算使用的格式是否可用。
如果不是,那么您必须做出相应的计划。
其次,是的,如果您的实现不支持 3 通道格式,那么您需要使用 4 通道格式来模拟它们。您必须重新调整数据以适应新格式。
如果您不喜欢这样做,我相信可以使用图像编辑器来加载您的图像,添加 1.0 的不透明 alpha,然后再次保存。
我正在尝试将 vkCreateImage
与 3 分量图像 (rgb
) 结合使用。
但是所有 rgb
格式都给出:
vkCreateImage format parameter (VK_FORMAT_R8G8B8_xxxx) is an unsupported format
这是否意味着我必须重塑内存中的数据?所以每3个后面加一个空字节,然后加载为RGBA
?
我还注意到 R8
和 R8G8
格式确实有效,所以我猜想不支持 RGB
的唯一原因是因为 3 不是 2 的幂。
在我真正对数据进行重塑之前,我想确定这是唯一的方法,因为它对性能不是很好,也许某处有一些偏移或填充值会有所帮助将 RGB
数据加载为 RGBA
格式。那么有人可以确认重塑为 RGBA
是加载 RGB
格式的必要步骤(尽管有 33% 的开销)吗?
提前致谢。
首先,您应该在尝试创建图像之前检查支持的内容。您不应该依靠验证层来阻止您;这只是一种调试辅助工具,可以在您忘记检查时捕获某些内容。支持和不支持的是动态的,而不是静态的。它基于您的实施。所以你每次启动应用程序的时候都要询问你打算使用的格式是否可用。
如果不是,那么您必须做出相应的计划。
其次,是的,如果您的实现不支持 3 通道格式,那么您需要使用 4 通道格式来模拟它们。您必须重新调整数据以适应新格式。
如果您不喜欢这样做,我相信可以使用图像编辑器来加载您的图像,添加 1.0 的不透明 alpha,然后再次保存。