前言

OpenHarmony-4.0-Beta1版本已经发布有一段时间,大家伙都体验到了,也有很多开发者开始适配OpenHarmony-4.x版本,相信也会或多或少遇到一些问题,其中就有图形相关的适配。
本文仅针对一种情况的适配问题给出参考解决方案。

问题现象

适配OpenHarmony-4.x版本后,图形没有正常显示,调试发现render_service不能正常启动,出错日志如下:

img

出现以上问题,大概率是基于开源mesa3d驱动才会有这样的问题

解决方案

调用eglGetProcAddress可以解决该问题。

img

Khronos官方参考:https://registry.khronos.org/EGL/sdk/docs/man/html/eglGetProcAddress.xhtml

具体修改

涉及的文件修改如下(以OpenHarmony-4.0-Release分支的代码为例):

img

修改的内容参考如下:

1. BUILD.gn修改

增加宏控制(其他,如树莓派等采用mesa3d开源驱动的可参考如下,根据自己的产品型号具体修改)

img

2. CPP源码修改

以rs_sub_thread.cpp修改为例(其他CPP参考修改即可)

img

参考代码:

// 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

视频演示

https://www.bilibili.com/video/BV1Fu4y1r7pH

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐