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 源码解析 源码分析:openxr runtime Monado 源码解析 源码分析:InitializeSession client native multi_compositor client_compositor
openxr runtime Monado 源码解析 源码分析:CreateSwapchain 画布 HardwareBuffer共享纹理 渲染线程 xrEndeFrame comp_renderer
目录
模块目的
完成session对象创建,涉及两个对象:native组合器和非native组合器创建,前者用于共享画布创建,后者用于client侧纹理创建,client渲染环境可以是gles gl vk d3d,本次讨论gles。
主要类和关系
native compositor:native组合器,CreateInstance篇说明过,native离vk跟近,这里为multi_compositor对象。用于Swapchain对象创建,后续文章会介绍。
非native compositor:响应client事件,并中转给native compositor,这里是client_egl_compositor。
主要流程
要点
1 非native compositor创建
在oxr_session.c的oxr_session_create_impl()函数里,根据客户端图形平台的不同,非native compositor创建会走不同的分支,目前有:
oxr_session_populate_gl_xlib()
oxr_session_populate_gles_android()
oxr_session_populate_gl_win32()
oxr_session_populate_vk()
2 EGL环境共享
App侧InitializeDevice创建的EGL环境,共享给runtime comp_client模块。
时序和代码注解
核心包含三个步骤,如下图:
总结
本文重点是创建session,包含两个native组合器multi_compositor和非native组合器client_egl_compositor创建。
前者离vk跟近,并开启监听client layer提交的线程,后续文章会介绍。
后者持有app侧创建的EGL环境,用于swapchain画布的创建,后续文章会介绍。