您的位置:首页 > 编程语言

Vulkan编程指南翻译 第五章 展现 第6节 清扫工作

2017-03-03 16:05 253 查看
5.6 清扫工作

不管你在应用程序中用什么方法来呈现,你都需要正确的做清扫工作。第一,你应该销毁正在呈现的交换链。需要

调用vkDestroySwapchainKHR()函数,其原型如下:
void vkDestroySwapchainKHR(
VkDevice device,
VkSwapchainKHR
swapchain,
const VkAllocationCallbacks*
pAllocator);

拥有该交换链的设备通过device传递,需要被销毁的交换链通过swapchain传递。如果之前用

自定义的内存分配器来创建交换链,那么就需要一个配对的内存分配器通过pAllocator传入。

当交换链被销毁,所有与其关联的可显示的图像都被销毁了。因此,你需要保证没有将向这些画幕写入

的待命的任务,也没有从画幕读取数据的待命操作。最简单的方式是调用

vkDeviceWaitIdle()。通常是不被推荐的,因为销毁交换链通常并不会在应用程序性能苛刻的部分出现,

所以,在这种情况下,简单的就是最好的。

当使用vkAcquireNextImageKHR()从交换链中取得图像时,或者使用vkQueuePresentKHR()呈现

图像时,信号量头传递到这些函数中去激发或等待。需要注意,信号量需要存活的时间需要比交换链在

被销毁前完成任何激发操作所需时间都要长。为了保证这条,最好在销毁任何信号量之前销毁可能使用这些

信号量的交换链。

总结

在本章,你学习了如何包图像放到显示器的Vulkan操作。我们讲解了各种窗口系统的展现操作,你如何

确定图像该往哪个显示器渲染的机制,如何遍历和控制连接到系统的显示器设备。我们简单的介绍了呈现

相关的同步,将在后面章节继续深入同步原语。我们也讨论了配置显示器同步的方法。依本章的

信息,你应对如何把图像展示给用户有了相当的理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: