基于开源mesa3d的GPU驱动,OpenHarmony-4.x版本图形适配要点
前言 OpenHarmony-4.0-Beta1版本已经发布有一段时间,大家伙都体验到了,也有很多开发者开始适配OpenHarmony-4.x版本,相信也会或多或少遇到一些问题,其中就有图形相关的适配。本文仅针对一种情况的适配问题给出参考解决方案。 问题现象 适配OpenHarmony-4.x版本后,图形没有正常显示
·
前言
OpenHarmony-4.0-Beta1版本已经发布有一段时间,大家伙都体验到了,也有很多开发者开始适配OpenHarmony-4.x版本,相信也会或多或少遇到一些问题,其中就有图形相关的适配。
本文仅针对一种情况的适配问题给出参考解决方案。
问题现象
适配OpenHarmony-4.x版本后,图形没有正常显示,调试发现render_service不能正常启动,出错日志如下:
出现以上问题,大概率是基于开源mesa3d驱动才会有这样的问题
解决方案
调用eglGetProcAddress可以解决该问题。
Khronos官方参考:https://registry.khronos.org/EGL/sdk/docs/man/html/eglGetProcAddress.xhtml
具体修改
涉及的文件修改如下(以OpenHarmony-4.0-Release分支的代码为例):
修改的内容参考如下:
1. BUILD.gn修改
增加宏控制(其他,如树莓派等采用mesa3d开源驱动的可参考如下,根据自己的产品型号具体修改)
2. CPP源码修改
以rs_sub_thread.cpp修改为例(其他CPP参考修改即可)
参考代码:
// Mesa3D
#ifdef SDM845
static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)eglGetProcAddress("glEGLImageTargetTexture2DOES");
static PFNEGLCREATESYNCKHRPROC eglCreateSyncKHR = (PFNEGLCREATESYNCKHRPROC)eglGetProcAddress("eglCreateSyncKHR");
static PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR = (PFNEGLDESTROYSYNCKHRPROC)eglGetProcAddress("eglDestroySyncKHR");
static PFNEGLCLIENTWAITSYNCKHRPROC eglClientWaitSyncKHR = (PFNEGLCLIENTWAITSYNCKHRPROC)eglGetProcAddress("eglClientWaitSyncKHR");
static PFNEGLWAITSYNCKHRPROC eglWaitSyncKHR = (PFNEGLWAITSYNCKHRPROC)eglGetProcAddress("eglWaitSyncKHR");
static PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC)eglGetProcAddress("eglCreateImageKHR");
static PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC)eglGetProcAddress("eglDestroyImageKHR");
#endif
视频演示
更多推荐
已为社区贡献13条内容
所有评论(0)