当前位置: 首页 > news >正文

创建mvp ubo(uniform buffer object)

创建过程:

  1. 创建一个uniform buffer
  2. 查找buffer memory requirements
  3. 分配、绑定buffer memory
  4. map buffer memory
  5. 拷贝mvp data to buffer memory
  6. unmap buffer memory

示例代码:

glm::mat4 projection = glm::perspective(glm::radians(45.0f), 1.0f, 0.1f, 100.0f);
glm::mat4 view = glm::lookAt(glm::vec3(-5, 3, -10),  // 相机在世界坐标系中的位置glm::vec3(0, 0, 0),     // 看向的目标位置glm::vec3(0, -1, 0)     // 相机up方向向量);
glm::mat4 model = glm::mat4(1.0f);
glm::mat4 clip = glm::mat4(1.0f, 0.0f, 0.0f, 0.0f,0.0f,-1.0f, 0.0f, 0.0f,0.0f, 0.0f, 0.5f, 0.0f,0.0f, 0.0f, 0.5f, 1.0f);
glm::mat4 mvp = clip * projection * view * model;VkBuffer ubo;
VkBufferCreateInfo buf_info = {};
buf_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
buf_info.pNext = NULL;
buf_info.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
buf_info.size = sizeof(mvp);
buf_info.queueFamilyIndexCount = 0;
buf_info.pQueueFamilyIndices = NULL;
buf_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
buf_info.flags = 0;
vkCreateBuffer(device, &buf_info, NULL, &ubo);VkMemoryRequirements mem_reqs;
vkGetBufferMemoryRequirements(device, ubo, &mem_reqs);VkDeviceMemory mem;
VkMemoryAllocateInfo alloc_info = {};
alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
alloc_info.pNext = NULL;
alloc_info.memoryTypeIndex = 0;
alloc_info.allocationSize = mem_reqs.size;
vkAllocateMemory(device, &alloc_info, NULL, &mem);vkBindBufferMemory(device, ubo, mem, 0);uint8_t *pData;
vkMapMemory(device, mem, 0, mem_reqs.size, 0, (void **)&pData);memcpy(pData, &mvp, sizeof(mvp));vkUnmapMemory(device, mem);

http://www.lryc.cn/news/412046.html

相关文章:

  • 1.GPIO
  • C++必修:STL之vector的了解与使用
  • 【MySQL】索引 【上】 {没有索引的查询/磁盘/mysql与磁盘IO/初识索引}
  • GO goroutine状态流转
  • DLMS/COSEM中的信息安全:DLMS/COSEM安全概念(上)
  • C语言第九天笔记
  • 智慧环卫可视化:科技赋能城市清洁管理
  • 【力扣】SQL题库练习5
  • 永结无间Ⅸ--你不需要LLM Agent
  • Simulink|基于粒子群算法的永磁同步电机多参数辨识
  • 程序如何自动点击亚马逊商户后台的“邀请评论”按钮
  • 大模型算法面试题(十八)
  • 手机在网状态接口如何对接?(二)
  • 力扣-3232. 判断是否可以赢得数字游戏
  • Table SQL connectors以及FileSystem、JDBC connector
  • Animate软件基础:“分散到图层”创建的新图层
  • ffmpeg命令-Windows下常用最全
  • 反序列化漏洞靶机实战-serial
  • 医疗器械产品没有互联网连接,就不适用于网络安全要求吗?
  • 可视掏耳勺安全吗?独家揭示六大风险弊病!
  • JavaScript 变量声明var、let、const
  • ipvlan: operation not supported 导致的POD不断重启
  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 操作文件-Path
  • RAC(Teamcenter )开发,Bom行解包和打包的方法
  • log4j2漏洞练习
  • OpenEuler安装部署教程
  • Canto - hackmyvm
  • 【数据结构进阶】手撕红黑树
  • 【C++从小白到大牛】类和对象