使用in关键字从缓冲区获取数据
(去掉了gl_VertexIndex,这个应该是顶点序号)
在shader上传到GPU前,我们需要把数据传到shader中。我们需要设置两种结构
通过vertexInputInfo,将顶点数据传输到渲染管线中。
Vulkan中的缓冲区存取的数据可以被显卡读取,可以用于传送坐标或其他数据,但是它并不会自动分配内存空间,所以要手动创建。
最高效地内存有VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
的标记,并且其一般不能被CPU直接访问
所以我们需要创建两个vertex buffer,一个在CPU上由CPU读取并存放数据,另外一个在GPU上。
创建一个独立的command pool,因为这是一个短周期的
[vkAllocateMemory]
资源有限,不应该为每个独立的缓冲区都建立,而是要统一管理。通过VkPhysicalDeviceLimits::maxMemoryAllocationCount来查看。
这个序号也需要创建一个buffer,和之前的顶点buffer一样,不同的是,这里使用了VK_BUFFER_USAGE_INDEX_BUFFER_BIT。
然后就是使用indexbuffer了:
完成
拓展:
当然这两个buffer也用一个buffer来代替,使用offset来确定不同的数据。这样临近的结构无疑对缓存更加友好。如果在相同的渲染操作期间没有使用它们,甚至可以为多个资源重用相同的内存块,当然前提是它们的数据被刷新。
文章摘录:Vulkan内存管理
前言
OpenGL会帮我们做大部分内存管理的工作,所以开发起来方便快捷。
但是Vulkan里面,我们需要自己去实现,而且要具体问题具体分析。
这里有几个情形,帮助我们更好地利用内存:
内存结构
Heap:硬件相关的存储结构
Memory type:你需要选择正确的类型来适应相应的资源
等 使用in关键字从缓冲区获取数据
(去掉了gl_VertexIndex,这个应该是顶点序号)
在shader上传到GPU前,我们需要把数据传到shader中。我们需要设置两种结构
通过vertexInputInfo,将顶点数据传输到渲染管线中。
Vulkan中的缓冲区存取的数据可以被显卡读取,可以用于传送坐标或其他数据,但是它并不会自动分配内存空间,所以要手动创建。
最高效地内存有VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
的标记,并且其一般不能被CPU直接访问
所以我们需要创建两个vertex buffer,一个在CPU上由CPU读取并存放数据,另外一个在GPU上。
创建一个独立的command pool,因为这是一个短周期的
[vkAllocateMemory]
资源有限,不应该为每个独立的缓冲区都建立,而是要统一管理。通过VkPhysicalDeviceLimits::maxMemoryAllocationCount来查看。
这个序号也需要创建一个buffer,和之前的顶点buffer一样,不同的是,这里使用了VK_BUFFER_USAGE_INDEX_BUFFER_BIT。
然后就是使用indexbuffer了:
完成
拓展:
当然这两个buffer也用一个buffer来代替,使用offset来确定不同的数据。这样临近的结构无疑对缓存更加友好。如果在相同的渲染操作期间没有使用它们,甚至可以为多个资源重用相同的内存块,当然前提是它们的数据被刷新。
文章摘录:Vulkan内存管理
前言
OpenGL会帮我们做大部分内存管理的工作,所以开发起来方便快捷。
但是Vulkan里面,我们需要自己去实现,而且要具体问题具体分析。
这里有几个情形,帮助我们更好地利用内存:
内存结构
Heap:硬件相关的存储结构
Memory type:你需要选择正确的类型来适应相应的资源
等