讨论广场 问答详情
鸿蒙是否支持将OpenGL ES纹理直接转换为NativeWindowBuffer
木偶不会飞 2025-07-22 16:07:43
1054 评论 分享

背景: 
需要通过OH_VideoEncoder的接口, 来调用GPU编码H264. 
数据来源: 通过opengl es 渲染后的纹理数据, 格式类型NV12. 
正常如果是采用内存映射, memcpy的方式会增加CPU的消耗. 
那是否可以直接通过GPU传递共享内存, 来填充OHNativeWindows*的Buffer. 

之前有一些说明是通过EGLImageKHR来传递. 
EGLImageKHR image = eglCreateImageKHR(egl_display, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_OHOS, nativebuf, NULL);


1.  以上应该如何填充EGLAttrib, 对于NV12的Y, UV plan 如何填充到同一个NativeWindowsBuffer. 

我使用int32_t OH_NativeWindow_NativeWindowRequestBuffer(OHNativeWindow *window,OHNativeWindowBuffer **buffer, int *fenceFd)接口来获取NativeWindowsBuffer.  每次返回的buffer似乎不同. 似乎buffer不能复用. 

2. How to verify the EGLImageKHR is valid?  
在EGLImageKHR创建之后, 我使用glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image)来绑定. 一直失败, 显示0x502, 格式错误. 

1054 评论 分享
写回答
全部评论(7)

 

2025-07-22 17:23:27
2025-07-23 15:19:56
基于eglQueryString检测, 确认找不到EGL_OHOS_image_native_buffer. 目前SDK的版本是HarmonyOS 5.0.5 Release SDK, inclusion of OpenHarmony SDK Ohos_sdk_public 5.0.5.165 (API Version 17 Release) . 测试设备: HUAWEI MeteBook Pro HAD-W24 所以是否不支持基于EGLImageKHR共享GPU 纹理?
2025-07-23 15:19:56

 

2025-07-22 17:23:06

 

2025-07-22 17:22:51
2025-07-23 15:31:51
哪个版本的EGL/eglext.h 中有EGL_OHOS_PLANE_TYPE_EXE? 可以提供下载链接吗?
2025-07-23 15:31:51

 

2025-07-22 17:21:56
2025-07-22 16:11:39