2016-07-15 95 views
2

我正在尝试使用vkCreateImage以及3分量图像(rgb)。 但所有的rgb格式给出:具有3个组件的Vulkan vkCreateImage

vkCreateImage format parameter (VK_FORMAT_R8G8B8_xxxx) is an unsupported format

这是否意味着我必须重塑内存中的数据?因此,在每个3之后添加一个空字节,然后将其加载为RGBA? 我也注意到R8R8G8格式可以工作,所以我猜想RGB不支持的唯一原因是因为3不是2的幂。

在我真正对数据进行整形之前,我想确切地知道这是唯一的方法,因为它对性能不是很好,也许在某处有一些偏移或填充值会帮助加载将RGB数据转换为RGBA格式。那么有人可以确认重塑为RGBA是加载RGB格式(尽管有33%的开销)的必要步骤?

在此先感谢。

回答

1

首先,您应该检查之前是否支持您尝试创建图像。你不应该依赖验证层来阻止你;这只是一个调试帮助,当你忘记检查时可以抓到一些东西。什么是和不支持是动态的,而不是静态的。它基于您的实施。因此,每次应用程序启动时,您都必须询问您打算使用的格式是否可用。

如果他们不是,那么你必须做相应的规划。其次,是的,如果你的实现不支持3声道格式,那么你需要用4声道格式来模拟它们。您将不得不重新调整您的数据以适应您的新格式。

如果你不喜欢这样做,我确定有图像编辑器可以用来加载你的图像,添加一个不透明的1.0 alpha,并再次保存。

+0

而一个典型的支持检查可能是:? https://i.gyazo.com/7f56cdef5023147ac7bacf7264ead096.png(假设你想要最佳平铺) – Aedoro