HarmonyOS OpenGL离屏渲染子线程无效问题
OpenGL渲染的相关操作在子线程中无效,Demo是NdkXComponent,下面这种写法是可以渲染出来的。
void OnSurfaceCreatedCB(OH_NativeXComponent* component, void* window) {
OHLOG("OnSurfaceCreatedCB");
if ((component == nullptr) || (window == nullptr)) {
OHLOG("OnSurfaceCreatedCB window or component is null");
return;
}
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = { '\0' };
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
if (OH_NativeXComponent_GetXComponentId(component, idStr, &idSize) != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
OHLOG("OnSurfaceCreatedCB Unable to get XComponent id");
return;
}
{
std::stringstream ss;
ss<<"OnSurfaceCreatedCB get XComponent id Success , tid = "<<gettid();
OHLOG(ss.str().c_str());
}
std::string id(idStr);
auto render = PluginRender::GetInstance(id);
g_render_test = render;
uint64_t width;
uint64_t height;
int32_t xSize = OH_NativeXComponent_GetXComponentSize(component, window, &width, &height);
if ((xSize == OH_NATIVEXCOMPONENT_RESULT_SUCCESS) && (render != nullptr)) {
if (render->m_eglCore->EglContextInit(window, width, height)) {
if (id == OPENGL_XCOMPONENT_ID) {
render->m_eglCore->Background();
OHLOG("Render Background");
}
}
}
}
但是,这样写就无法渲染也没有报错。
void OnSurfaceCreatedCB(OH_NativeXComponent* component, void* window) {
OHLOG("OnSurfaceCreatedCB");
if ((component == nullptr) || (window == nullptr)) {
OHLOG("OnSurfaceCreatedCB window or component is null");
return;
}
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = { '\0' };
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
if (OH_NativeXComponent_GetXComponentId(component, idStr, &idSize) != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
OHLOG("OnSurfaceCreatedCB Unable to get XComponent id");
return;
}
{
std::stringstream ss;
ss<<"OnSurfaceCreatedCB get XComponent id Success , tid = "<<gettid();
OHLOG(ss.str().c_str());
}
new std::thread([&](){
std::string id(idStr);
auto render = PluginRender::GetInstance(id);
g_render_test = render;
uint64_t width;
uint64_t height;
int32_t xSize = OH_NativeXComponent_GetXComponentSize(component, window, &width, &height);
if ((xSize == OH_NATIVEXCOMPONENT_RESULT_SUCCESS) && (render != nullptr)) {
if (render->m_eglCore->EglContextInit(window, width, height)) {
if (id == OPENGL_XCOMPONENT_ID) {
render->m_eglCore->Background();
OHLOG("Render Background");
}
}
}
});
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 相机+opengl shader实时渲染与离屏渲染方案
28浏览 • 1回复 待解决
Web组件是否支持离屏渲染
1844浏览 • 0回复 待解决
HarmonyOS 使用clip可以对组件内的元素进行裁剪,这会不会导致类似离屏渲染的问题
33浏览 • 1回复 待解决
HarmonyOS VideoDecoder使用OpenGL渲染
182浏览 • 1回复 待解决
opengl渲染矩形,如何实现opengl渲染,并用Xcomponent显示出来
1058浏览 • 1回复 待解决
#鸿蒙通关秘籍# 在HarmonyOS中,如何使用离屏渲染来提高网页长截图的性能?
94浏览 • 0回复 待解决
HarmonyOS 并发任务子线程之间、子线程与主线程内容不共享问题
474浏览 • 1回复 待解决
HarmonyOS TaskPool子线程单例问题
36浏览 • 1回复 待解决
HarmonyOS Worker主线程和子线程共享对象问题
63浏览 • 2回复 待解决
OpenGL无法正常渲染某些分辨率YUV数据
436浏览 • 0回复 待解决
HarmonyOS native子线程请求网络同步的问题
5浏览 • 0回复 待解决
HarmonyOS 创建子window后横竖屏切换问题
48浏览 • 1回复 待解决
HarmonyOS 线程内类型判断无效
53浏览 • 1回复 待解决
HarmonyOS XComponent使用OpenGL无法正常渲染某些分辨率YUV数据
38浏览 • 1回复 待解决
OpenGL同一个上下文在多线程中使用问题
581浏览 • 1回复 待解决
HarmonyOS WebView默认使用GPU硬件渲染吗?使用的是OpenGL还是Vulkan? 是否支持软件渲染?
220浏览 • 1回复 待解决
HarmonyOS 子窗口页面返回事件无效
53浏览 • 1回复 待解决
HarmonyOS 子线程获取数据
17浏览 • 1回复 待解决
HarmonyOS ArkTS怎么控制子线程回到主线程
648浏览 • 1回复 待解决
TaskPool子线程和主线程如何通信
2352浏览 • 1回复 待解决
#鸿蒙通关秘籍#使用离屏Canvas加速绘制速度的方法有哪些?
157浏览 • 1回复 待解决
HarmonyOS 子组件渲染超过了父布局
33浏览 • 1回复 待解决
HarmonyOS huks支持子线程调用吗?
5浏览 • 1回复 待解决
HarmonyOS lazyforEach渲染问题
56浏览 • 1回复 待解决
HarmonyOS 系统支持在子线程中离屏渲染的方式。
请参考如下代码:
https://gitee.com/GuYueFei/harmonyOSNativeCamera/tree/master/entry/src/main/cpp/render
demo代码中定义了一个渲染线程:RenderThread,在应用启动时创建,一直在运行,进行实时的渲染。