相比于在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改成取顶点的个数的函数。
本文探讨了在GPU shader中使用固定顶点数据与从CPU传递数据的差异,涉及同步机制、CommandBuffer管理、顶点数据处理、shader调整、数据结构变化和VertexBuffer创建。重点在于效率优化和MAX_FRAMES_IN_FLIGHT设置的影响。

被折叠的 条评论
为什么被折叠?



