接上篇:https://blog.csdn.net/u012839187/article/details/112415876
surface_attch以及surface_damage相关就不讲了,参看https://blog.csdn.net/u012839187/article/details/100580627
直接讲commit,这个commit和weston-simple-shm不同https://blog.csdn.net/u012839187/article/details/106469038
初始化
因为commit的实现里面有很多gl的钩子函数。先看下钩子函数的实现
server端的实现在gl-renderer.c以及egl-glue.c相关的文件里面。
先看看gl-render相关的初始化逻辑:
weston_backend_init
drm_backend_create
init_egl
b->gbm = create_gbm_device(b->drm.fd);
drm_backend_create_gl_renderer
gl_renderer->display_create == gl_renderer_display_create //初始化重点
gl_renderer_setup_egl_client_extensions //检查EGL客户端扩展(独立于EGL display),加载函数指针,并检查平台是否被支持。
EGL_KHR_platform_wayland
EGL_EXT_platform_wayland
EGL_MESA_platform_wayland
从上到下,确实egl是否支持这三种,只要支持一种就返回,否则直接初始化错误退出gl初始化,参考https://www.khronos.org/registry/EGL/extensions/
gr->base.read_pixels = gl_renderer_read_pixels;
gr->base.repaint_output = gl_renderer_repaint_output;
gr->base.flush_damage = gl_renderer_flush_damage;
gr->base.attach = gl_renderer_attach;
gr->base.surface_set_color = gl_renderer_surface_set_color;
gr->base.destroy = gl_renderer_destroy;
gr->base.surface_get_content_size = gl_renderer_surface_get_content_size;
gr->base.surface_copy_content = gl_renderer_surface_copy_content;
gl_renderer_setup_egl_display //获取EGL display + eglInitialize::https://khronos.org/reg