您的位置:首页 > 健康 > 美食 > 网站排行榜_云南文山州_百度问问_seo是啥软件

网站排行榜_云南文山州_百度问问_seo是啥软件

2025/4/24 5:47:58 来源:https://blog.csdn.net/patronwa/article/details/144215644  浏览:    关键词:网站排行榜_云南文山州_百度问问_seo是啥软件
网站排行榜_云南文山州_百度问问_seo是啥软件

目录

  • 先叨叨
  • 搭建开发环境
  • Git信息
  • 主要逻辑
    • VulkanEnv
  • 代码编译和执行

先叨叨

上一篇从宏观上介绍了Vulkan中各对象的关系。接下来开始实践。
我也是Vulkan的初学者,在这里也是现学现卖,如果发现错误或有建议的话还请大家指教。
目前我在从事车辆软件的开发,因此我打算用Vulkan开发一个车辆仪表UI的显示引擎。本系列也作为这个UI引擎的开发笔记。由于工作原因更新不会很频繁,如果大家多多点赞的话会给我很大的创作动力哈哈哈。

搭建开发环境

我使用的开发环境是Ubuntu22.04。其他平台环境搭建请大家参考其他教程。
用Ubuntu开发Vulkan环境搭建很简单只要执行以下三条指令即可。

sudo apt install vulkan-tools
sudo apt install libvulkan-dev
sudo apt install vulkan-validationlayers-dev spirv-tools

Git信息

  • reporsitory:https://gitee.com/J8_series/easy-car-ui
  • branch: master
  • tag:00-VkInstance
  • url: https://gitee.com/J8_series/easy-car-ui/tree/00-VkInstance/

主要逻辑

VulkanEnv

VulkanEnv为Vulkan环境和资源的管理类。它的**Initalize()方法用于初始化Vulkan环境。在Initalize()**的第一步就是创建VkInstance。代码如下:

void VulkanEnv::CreateVkInstance()
{//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkApplicationInfoVkApplicationInfo appInfo;appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;appInfo.pNext = nullptr;appInfo.pApplicationName = "EasyCarUI";appInfo.applicationVersion = VK_MAKE_VERSION(0, 0, 1);appInfo.pEngineName = "EasyCarUIEngine";appInfo.engineVersion = VK_MAKE_VERSION(0, 0, 1);appInfo.apiVersion = VK_API_VERSION_1_0;//https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkInstanceCreateInfoVkInstanceCreateInfo createInfo;createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;createInfo.pNext = nullptr;createInfo.flags = 0;createInfo.pApplicationInfo = &appInfo;createInfo.enabledLayerCount = 0;createInfo.ppEnabledLayerNames = nullptr;createInfo.enabledExtensionCount = 0;createInfo.ppEnabledExtensionNames = nullptr;if (VK_SUCCESS != vkCreateInstance(&createInfo, nullptr, &m_vkInstance)){throw std::runtime_error("To create VkInstance is failed"); }
}
  • Vulkan中绝大多数的对象的创将都遵循这个逻辑。首先填充一个VkXXXCreateInfo的结构体,然后调用vkCreateXXX()方法。
  • Vulkan中所有结构都包含一个sType属性,目的是表明当前结构的类型。这样作的目的是为了在C语言接口中实现多态机制。
  • Vulkan跟OpenGL一样是一个图形API的标准(定义),因此不同的厂商都可以有自己的实现。除了核心接口外,厂商还可以实现一些扩展功能,如果需要使用这些扩展功能,需要在创将VkInstance时通过createInfo.enabledExtensionCountcreateInfo.ppEnabledLayerNames指定。目前我们不需要任何扩展。
  • Vulkan的另一种扩展机制称为Layer。Layer可以将自己插入到Vulkan的Command中,也可提供一些新的扩展。所有教程中最常提到的Layer应该当属validationlayers了。它可以检测和跟踪Vulkan的执行。在使用OpenGL最大的痛苦就是当屏幕是黑的时候我们很难调查是什么原因导致的。但在Vulkan中,我们可以通过validationlayers更方便的调查出原因。目前我们不需要任何Layer

代码编译和执行

Clone并进入代码目录执行

mkdir build
cd build
cmake ..
make
./EasyCarUI

如果没有输出任何log,则表明创建成功了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com