vulkan直接绘制CPU端的数据

相比于在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改成取顶点的个数的函数。

你可能感兴趣的:(算法,数据结构)