0
点赞
收藏
分享

微信扫一扫

vulkan管线学习11


装好了commandbuffer之后,就是每一帧提交。

但是提交这个就牵扯到同步了,在这之前....先修改renderpass

renderpass的subpass要加一个dependency进行指定

vulkan管线学习11_vulkan

dst要比src大,VK_SUBPASS_EXTERNAL应该是最终绘制到哪

vulkan管线学习11_着色器_02

首先是present的内容可能还在vertexShader好像就可以读了,所以要设置一个等画完了才能把内容拿来present

然后就是CPU如果提交比GPU处理的快了,就需要同步一下,不然一直堆积任务,会GG。

vulkan管线学习11_着色器_03

这里用了fence和semaphore这两个东西来做这个事情,区别就是前者可以自己手动操作,后者没给你接口。

vulkan管线学习11_着色器_04

一个等可用,一个等绘制结束

然后还有双缓冲的时候,那么就需要2个imagevailable和2个renderfinish的

这里解释draw那里教程最后实现的代码,然后dependency代码加在了创建renderpass里。

第一行,等currframe解锁,说明GPU这一次跑完了,然后可以往下了,

然后获取image的index,然后index对应的fence有可能还没解锁,也就是这个图可能还在被使用,再等待,然后拿到这个图了,标记他,给currframe的fence记录在imageinflight里

然后填semaphore,这里用colorattachment作为标识,是用来确保片元着色器都走完了,内容可用了,然后开始写进Image

vulkan管线学习11_双缓冲_05

然后还有一个记录渲染结束的semaphore,用来标识graphicqueue做完事情了,保证image写完成了,能用来present。

vulkan管线学习11_vulkan_06

然后标记了fence,提交了commandbuffer给graphic queue,然后构建显示部分VkPresentInfoKHR,给他的等待信号就是标记渲染结束那个semaphore,然后传入swapchain,index

执行显示vkQueuePresentKHR(presentQueue, &presentInfo);

然后currframe+1 %缓冲数

 

vulkan管线学习11_双缓冲_07

举报

相关推荐

0 条评论