monado系列文章索引汇总
模块目的
创建进程唯一的XR资源句柄(指针)XrInstance,通过XrInstance在runtime层可以找到所有其它对象。Instance创建过程涉及两大核心模块创建:
合成器系统模块(xrt_system_compositor):持有主合成器,当App开启Session时(client),负责管理client的链接和Layer提交,最终由主合成器合并一层(或多层)到最终画面。
设备系统模块(xrt_system_devices):持有所有设备对象,由Prober模块负责发现,加载。在Prober篇详细介绍。
容易混淆的概念:native和非native
不正确但直观的理解:native指离vulkan更近的对象,非native离client跟近,非native持有native对象,用于vk共享纹理创建。
native对象,如
1)主合成器comp_compositor是native性质的对象,因为它使用vk渲染,申请很多vk内存、纹理等资源。
2)客户端layer提交和管理multi_compositor是native性质对象,因为它通过native swapchain间接使用vk资源,与vk跟近,使用vk资源。
3)后续文章涉及的重要概念native swapchain申请VkMemeory内存,共client端创建EglImage和glTexture,与vk跟近,使用vk资源。
非native概念:与client端跟近,如客户端是gl、vk、dx等资源。
1)与multi_compositor相对的comp_gl_client和comp_egl_client
2)与comp_swapchain(native vk)相对的client_gl_swapchan
XR对象与monado底层实现对象持有和转换关系
* C语言通过“组合式”继承,实现c++类继承
* 指针类型强转
主要类和关系
multi_system_devices: 合成器系统的具体实现者,runtime重要模块之一,持有主合成器对象和所有client连接实例。管理主合成器渲染线程。
comp_compositor: 主合成器,使用vulkan渲染,负责基础内容绘制和client提交的layer合成绘制,distortion等算法在此完成。
multi_compositor:与vk通信,通过HardwareBuffer共享纹理给client端使用,并负责client layer提交给主合成器合并渲染。这里不做详细介绍,在InitializeSession篇详细介绍。
xrt_compositor:所有compositor(native和非native类型)基类,代码注释表示与XrSession相同生命周期
持有关系。
XrInstance即oxr_instance,前者是官方规范,后者是monado的具体实现。
oxr_instance持有合成器系统xrt_system_compositor,具体实现为multi_system_compositor,在comp_multi库中。
合成器系统multi_system_compositor持有主合成器comp_compositor,用于runtime渲染,采用vulkan,并监听client链接,提交client layer数据到主合成器“逐层”合并渲染,并最终呈现。
主要流程
时序和代码注解
补充说明
compositor模块非常复杂,也是非常重要的模块,从monado模块设计上看出,compositor细分为几个独立的模块:comp_main, comp_client, comp_multi, comp_render, comp_util。原则上每个模块都可以按照接口自定义个性化实现。comp_main主合成器一般是重点性能优化模块,各XR厂家会提供深度优化的、自定义的主合成器模块。
comp_main
* 繁琐的vk环境创建,如android window, android view, surface 画布swapchain等资源初始化和创建
* 算法实现:如ATW 补帧 distortion等算法实现
* 单层快速绘制,省vk资源,理论上更快
* 多层绘制:先逐层合并渲染,再最终输出
comp_client
从源码很容易看出,主要用于连接不同客户单渲染环境的,如gl gles vulkan d3d。
* 与mulit_compositor配合,基于共享内存,创建图形库对应的纹理对象,作为画布给App侧进行3D内容绘制。
* client layer提交,待合成处理。
comp_multi
* 合成器系统,开启主渲染线程
* 开启客户单监听线程,处理client layer提交
* 提交layer,主合成器完成合成渲染
comp_render comp_util
vulkan渲染资源和繁琐对象设置,逻辑不复杂,没有难点。
总结
本文重点关注“合成器系统”模块,容易混淆的概念是native和非native。multi_system_devices是合成器系统的具体实现,持有主合成器(native)comp_compositor,管理client连接等。
主合成器用vulkan渲染环境,涉及到vk的繁琐初始化;包含重要的时空扭曲算法、畸变矫正等算法;分为单层快速渲染和多层合并渲染等功能,swapchain篇会继续讨论合成渲染内容。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net