选择交换链图像的转换
在某些(特别是移动)设备上,可以从不同的方向查看图像。有时希望能够指定图像在屏幕上显示的方向。在Vulkan中我们有这样的可能性。创建交换链时,需要指定在呈现图像之前应该用于图像的转换。
译者注:示例代码点击此处
怎么做...
1.获取呈现表面的功能(请参阅呈现表面的功能)。将它们储存在名为surface_capabilities的VkSurfaceCapabilitiesKHR类型的变脸中。
2.将所需的转换储存在名为desired_transform的VkSurfaceTransformFlagBitsKHRnamed位字段类型变脸中。
3.创建一个名为surface_transform的VkSurfaceTransformFlagBitsKHR类型的变量,我们将在其中储存最终支持的转型。
4.检查desired_transform变脸中所有的所有位是否也在supportedTransforms中设置的呈现表面功能。如果是,则指定desired_transform变量的值到surface_transform变量。
5.如果不支持所有所需的转换,请通过将surface_capabilities.currentTransform的值赋给surface_transform变量,会退到使用当前转换。
这个怎么运作...
呈现表面的supportedTransforms成员的功能定义了给定平台上可用的所有图像转换列表。转换定义图像在屏幕上显示前应该如何旋转或镜像,在交换链创建期间,我们可以指定所需的转换,并且呈现引擎将作为显示过程的一部分应用于图像。
我们可以选择任何支持的值。下面是一个代码的示例,如果可用,则选择所需的转换,或者只选择当前转换:
if( surface_capabilities.supportedTransforms & desired_transform ) {
surface_transform = desired_transform;
} else {
surface_transform = surface_capabilities.currentTransform;
}