openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

这篇具有很好参考价值的文章主要介绍了openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

monado系列文章索引汇总:
openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读
openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程
openxr runtime Monado 源码解析 源码分析:CreateInstance流程(设备系统和合成器系统)Compositor comp_main client compositor
openxr runtime Monado 源码解析 源码分析:Prober设备发现和管理 system device HMD target instance
openxr runtime Monado 源码解析 源码分析:InitializeSession client native multi_compositor client_compositor
openxr runtime Monado 源码解析 源码分析:CreateSwapchain 画布 HardwareBuffer共享纹理 渲染线程 xrEndeFrame comp_renderer

目录

简介

Implements Khronos OpenXR™

Open Source

Create your XR device

Your XR laboratory

源码目录和功能概要

src/xrt/compositor 合成器系统

src/xrt/ipc

src/xrt/state_trackers/oxr

src/xrt/include

src/xrt/targets

src/xrt/state_trackers/prober

src/xrt/drivers

src/xrt/auxiliary

src/external

so库和组织关系

按照源码目录产生的so库

按照进程维度so组合方式

三个重要线程

接口层次图

总流程


简介

Monado的功能和介绍,官方定义非常精确和全面,我做下概述:

  • 开源的,模块化设计,非常容易定制和扩展,如更优性能的主合成器系统Compositor。
  • 实现了Khronos定义的OpenXR API规范
  • 支持移动、PC等多种设备。

具体参见官网:

https://monado.dev/

https://gitlab.freedesktop.org/monado/monado

Implements Khronos OpenXR™

Monado is the first OpenXR™ runtime for GNU/Linux. Monado aims to jump-start development of an open source XR ecosystem and provide the fundamental building blocks for device vendors to target the GNU/Linux platform.

Open Source

Monado is fully open source and under a convenient license. This means the entire ecosystem can collaborate beyond the open standard and on a common code base.

Create your XR device

Monado enables XR hardware developers to focus on their product development. Simply develop and deploy with Monado without having to worry about the software.

Your XR laboratory

With its modular and open design, Monado is the perfect place to try out new XR technologies. With Monado you can, on your own or with the community, optimize your new SLAM algorithm, experiment new XR UX concepts, test your new controller, and much more.

源码目录和功能概要

在详细阅读代码之前,需要了解每个模块的功能,知道每个模块的目的:

src/xrt/compositor 合成器系统

非常重要的模块:合成器系统。每个部分都是要点!分为3个重要模块,2个辅助模块。

  • main(重要模块1):Runtime核心模块,用Vulkan渲染。App侧来的渲染多层画面(Layer)最终在这里合成处理;distortion等算法也在这里使用。
  • client(重要模块2):客户端(App侧)可以用GL GLES VK D3D等不同图形库渲染,client模块负责与APP侧绘制同步,接收App侧渲染结果(通过HardwareBuffer跨进程共享纹理实现)。
  • multi(重要模块3):Runtime的合成器管理系统,包括三个重要功能:(1)响应App渲染环境请求,建立并记录与之对应的Compositor;(2)创建一个主渲染线程,用于主Compositor合成多个Layer;(3)创建一个线程,监听App层Layer提交,并把Layer流转到主渲染线程。
  • render(辅助模块1):主合成器vk使用辅助工具,Buffer Memory Image Pipeline等赋值和使用。
  • shaders(辅助模块2):主合成器绘制元素时使用的shader,如cube, distortion, equirect等。

src/xrt/ipc

Monado支持inProcess和outOfProcess两种进程运行模式,IPC用于outOfProcess独立进程运行时与App侧(client)通信服务。

src/xrt/state_trackers/oxr

OpenXR API的标准实现。

src/xrt/include

出于抽象、隔离的目的,Monado定义了一套xrt_开头的对象,与标准定义对应。用于各种对象资源的管理和维护。

src/xrt/targets

glue code and build logic to produce final binaries。通过openxr_android工程打包成runtime.apk。inProcess模式生成一个库(libopenxr_monado.so),outOfProcess模式生成两个库(libopenxr_monado.so libmonado_service.so)

src/xrt/state_trackers/prober

设备发现和管理

src/xrt/drivers

支持的各种设备驱动,如android, psvr rift vive等。

src/xrt/auxiliary

辅助工具库,为主业务逻辑封装设计的、功能相对独立的功能模块,如

  • android:安卓系统一些相关操作,包含几个重要知识点:
    • HardwareBuffer跨进程共享纹理内存管理,用于client绘制内容与主合成器(Compositor)合成,后续博文会详解。
    • 主合成器Vulkan渲染环境创建所依赖的资源管理:Window View Surface结合JNI创建管理。
  • bindings:默认支持的controller配置生成管理(未深入研究)
  • ogl:OpenGL ES相关API,实际调用的是srx/external/glad库
  • vk:Vulkan使用简单封装,vulkan太繁琐,常规操作一般都会封着起来,与业务逻辑隔离
  • d3d:Windows平台图形API简单封装,我们研究安卓平台,读代码时,这个目录可以删掉
  • vive:vive配置读取相关操作(未深入研究)
  • math:各种数学相关的对象、算法封装(未深入研究)
  • gstreamer:音视频处理的库(未深入研究)
  • os:操作系统相关隔离,如time读取,线程操作等(未深入研究)

src/external

使用到的第三方库,不影响主业务逻辑理解,如:

  • cjson:json文件读写库
  • glad:gl/egl api加载库
  • imgui:游戏领域常用的UI库

so库和组织关系

如前所述,monado不仅实现了OpenXR API规范,在结构上采用模块化设计,各模块可以灵活组装和扩展,方便不同目的的定制和扩展,如提供新硬件接入,针对特定平台优化Compositor等。

按照源码目录产生的so库

每个源码目录按照不同模块细分,分别生成多个so库,从每个so库的名称,结合“源码目录和功能概要”的介绍,基本能看出模块的功能,非常容易理解,下图按照从上到下的顺序组织so关系(不是很严格的上下关系),所有so按照进程方式最终被组合成libopenxr_monado.so和libmonado_service.so,对于重要so库,用黑色加粗表示。

openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

按照进程维度so组合方式

Monado编译生成的runtime库有两种运行模式:inProcess和outOfProcess。

inProcess:libopenxr_monado.so最终被加载Application进程空间。

outOfProcess:分成libopenxr_monado.so和libmonado_service.so。前者被加载到Application进程空间,后者在独立进程空间运行,两者通过IPC通信,独立进程模式是常用模式。

注意:comp_main模块主合成器模块在两种进程模式下归属区别。

openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

三个重要线程

openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

接口层次图

openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

总流程

openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

关键词 OpenXR Runtime Monado Compositor Vulkan OpenGL ES Swapchain hello_xr VR AR instance prober system device session swapchain文章来源地址https://www.toymoban.com/news/detail-505460.html

到了这里,关于openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink window 源码分析1:窗口整体执行流程

    注:本文源码为flink 1.18.0版本。 其他相关文章: Flink window 源码分析1:窗口整体执行流程 Flink window 源码分析2:Window 的主要组件 Flink window 源码分析3:WindowOperator Flink window 源码分析4:WindowState Window 本质上就是借助状态后端缓存着一定时间段内的数据,然后在达到某些条件

    2024年01月16日
    浏览(34)
  • Flink 运行时[Runtime] 整体架构

    在 Flink 整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建 Flink 应用提供了丰富且友好的接口。从下图中可以看出整个 Flink 的架构体系基本上可以分为三层,由上往下依次是 API Libraries层 、 Runtime核心层 以及 物理部署层 。

    2024年02月04日
    浏览(26)
  • 轻松掌握Seata源码分析之AT模式整体大纲流程跟踪

    如下为订单和库存的实例代码,在事务开启处即订单服务处使用GlobalTransactional即可。当添加了异常代码使订单无法加一,这时减库存服务也会回滚,根据的就是undolog。回滚完undolog记录会被释放删除。 AT模式整体大纲流程跟踪如下: 如果是springboot项目找到Seata对应依赖 spri

    2024年02月09日
    浏览(27)
  • (02)Cartographer源码无死角解析-(75) 2D后端优化→整体复盘,理解后端优化核心

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885   文末正下方中心提供了本人 联系方式, 点击本人照片

    2024年02月13日
    浏览(32)
  • OpenXR手部跟踪接口与VIVE OpenXR扩展详细解析

    随着虚拟现实技术的发展,手部跟踪已成为提高沉浸感和交互性的关键技术。OpenXR标准为开发者提供了一套手部跟踪的扩展接口,特别是针对VIVE设备的特定实现。以下是这些接口和类的详细解释: 1. VIVE.OpenXR.Hand VIVE.OpenXR.Hand 是HTC VIVE为OpenXR定义的针对手部跟踪的命名空间,

    2024年04月17日
    浏览(18)
  • OpenXR面部跟踪接口与VIVE OpenXR扩展详细解析

    面部跟踪技术是虚拟现实(VR)领域中的一个重要发展方向,它允许VR系统捕捉和解析用户的面部表情,从而提供更加自然和互动的用户体验。HTC VIVE通过其VIVE.OpenXR.FacialTracking扩展,为开发者提供了高级的面部跟踪功能。以下是相关接口和类的详细解释: 1. VIVE.OpenXR.FacialTra

    2024年04月29日
    浏览(19)
  • 【K8S源码之Pod漂移】整体概况分析 controller-manager 中的 nodelifecycle controller(Pod的驱逐)

    k8s 污点驱逐详解-源码分析 - 掘金 k8s驱逐篇(5)-kube-controller-manager驱逐 - 良凯尔 - 博客园 k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析 - 良凯尔 - 博客园 k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析 - 良凯尔 - 博客园 基于 k8s 1.19 版本分析 TaintManager 与

    2024年02月12日
    浏览(29)
  • MyBatis 源码分析(五):异常模块

    上一篇我们解了Mybatis解析器模块,本篇我们来了解反射模块。本文,我们来分享 MyBatis 的异常模块。 对应  exceptions  包,如下图所示: 在 MyBatis源码分析(二):项目结构 中,简单介绍了这个模块: 定义了 MyBatis 专有的 PersistenceException 和 TooManyResultsException 异常。 实际上

    2024年02月01日
    浏览(27)
  • Mybatis源码分析_日志模块 (1)

    不得不承认,学习MyBatis的时间成本要比学习Spring低很多,Mybatis是我所了解过的代码量最小、整体架构最简单,但是又是最具有学习价值的一个框架。如果,你想快速的阅读一个框架的源码,并且掌握这个框架的精髓,那么Mybatis一定是你的首选。 在开始我们的源码阅读之前,

    2024年02月10日
    浏览(25)
  • HC08蓝牙模块实现手机通信以及互相通信(附源码及解析)

    前言 本篇博客详细的介绍如何实现HC08主从机设置,命名,以及如何实现两个STM32通过HC08互相通信,并附带完整的操作步骤,以及源代码。 目录 一、HC08主从配置 1.1VOFA+的下载及基本用法 1.1.1VOFA+的下载         1.1.2VOFA+的基本用法    1.2配置HC08主从机及其他 二、两个STM32通

    2024年03月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包