vulkan直接绘制CPU端的数据

本文探讨了在GPU shader中使用固定顶点数据与从CPU传递数据的差异,涉及同步机制、CommandBuffer管理、顶点数据处理、shader调整、数据结构变化和VertexBuffer创建。重点在于效率优化和MAX_FRAMES_IN_FLIGHT设置的影响。

相比于在shader中直接将顶点数据写死,这种从CPU端直接读取数据绘制,区别在于:

1、同步对象:

在shader中写固定顶点数据时,所做的同步都是一个变量,如教程中用的imageAvailableSemaphore、renderFinishedSemaphore和inFlightFence。而在CPU输入顶点数据的代码则是将这些改为了数组,教程中用的是MAX_FRAMES_IN_FLIGHT = 2;为什么是2而不是其它的值,没有说明,只是在查其它资料时,有说明不会大于64。

2、创建的CommandBuffer的数量

在Shader中写固定的顶点数据时,CommandBuffer的数量为1。而在CPU端输入顶点数据时,数量为MAX_FRAMES_IN_FLIGHT这个值 。

3、在每一帧的处理函数中增加了currentFrame的处理。在总帧数为MAX_FRAMES_IN_FLIGHT的情况下,每次绘制一帧。

4、修改shader

这个是必须的,将顶点shader中的固定顶点数据删除,增加两个输入,输入一个顶点,一个颜色。再增加输入mvp矩阵,那么顶点的位置计算就是输入的顶点位置乘上MVP矩阵。颜色就是输入的顶点颜色。

5、增加顶点和颜色的数据结构

增加关于顶点数据和颜色的数据结构,并在创建Pipeline的地方,将修改关于VkVertexInputBindingDescription和VkVertexInputAttributeDescription中的相关的值:顶点的binding、location、format、offset、stride等。

6、增加关于vertexBuffer的创建

增加关于VertexBuffer的创建,以及在每帧中处理时,将顶点数据的Buffer拷贝给VkBuffer,在vkCmdDraw中的参数,顶点个数,由固定值3改成取顶点的个数的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值