vulkanscenegraph显示倾斜模型(5.8)-视景器编译

前言

     上一章深入剖析了Vulkan渲染过程中的核心组件VkPipeline,以及vsg中针对图形渲染管线的封装GraphicsPipeline,本章将继续深入探讨视景器准备过程中的最后一章视景器编译,并进一步深入vsg中显存的传输机制,即vsg::TransferTask的设计。vsg中GPU数据的传递包含编译(Compile)和数据传递(transfer)两个过程。由于篇幅有限,后续内容将分为三章进行分析,GPU资源内存及其管理、vsg中vulkan资源的编译(包含视景器编译)、vsg::TransferTask机制。本章作为开篇,将分析GPU资源内存及其管理,vsg中为了提高设备内存的利用率,同时减少内存(GPU)碎片,采用GPU资源内存池机制(vsg::MemoryBufferPools)管理逻辑缓存(VkBuffer)与物理内存(VkDeviceMemory),本章作为后续文章的基础,方便更好理解vsg的编译(Compile)与数据传输(Transfer)机制。


目录

  • 1 Vulkan中创建顶点和图元缓冲对象
  • 2 vsg::DeviceMemory与vsg::Buffer
  • 3 GPU资源内存池---vsg::MemoryBufferPools

1 Vulkan中创建顶点缓冲对象

       本小节以Vulkan中创建顶点缓冲对象为例分析vulkan中资源的分配与创建过程。

       创建顶点缓冲区(VkBuffer),VK_BUFFER_USAGE_VERTEX_BUFFER_BIT 表示是一个顶点缓冲区,VK_SHARING_MODE_EXCLUSIVE 表示该缓冲区由一个QueueFamily占用。

VkBufferCreateInfo bufferInfo {
    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,  // 结构体类型
    nullptr,                              // 扩展信息(无)
    0,                                    // 标志位(无特殊标志)
    sizeof(Vertex) * vertices.size(),     // 缓冲区大小(顶点数据总大小)
    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,    // 用途:顶点缓冲区
    VK_SHARING_MODE_EXCLUSIVE,            // 共享模式:独占访问
    0, nullptr                            // 队列家族索引(无)
};

VkBuffer vertexBuffer = nullptr;
VkResult result = vkCreateBuffer(_device, &bufferInfo, nullptr, &vertexBuffer);
if (result != VK_SUCCESS) {
    printf("Failed to create vertex buffer.\n");
    return nullptr;
}

       查询内存需求

VkMemoryRequirements memRequirements;
vkGetBufferMemoryRequirements(_device, vertexBuffer, &memRequirements);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHPCWWHSU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值