android ios 平台渲染文字失败出现黑色块

目前项目在接入平台sdk,在回调过程中会出现渲染文字黑块的情况,本人确认是在glthread,也就是线程安全是没问题uithread主线程下面。但是就会出现黑色块状。不知道兄弟们有没有遇到类似情况!

马克,指数补丁指数补丁

能给个demo重现吗?

一般都会是什么问题,我们在研发产品,这个是在sdk接入时回调lua层面出现的

Android平台在退后台或者Activity切换时会导致GL的环境丢失,引擎在内部做了处理重新初始化纹理、shader等信息。可能是那个逻辑有问题导致没恢复正确。

1赞

怎么修复呢?

我的微信授权失败弹框也是黑块,在js切换到前台延时0.5秒后弹提示框,待GL环境正常后再显示文字的。技术有限,只能临时解决一下。

这个问题很容易发生在SDK 通过JNI 到GL thread,即使使用runOnGLThread

1赞

主要原因Android中有2个线程,android主线程(进程线程)和cocos的线程,cocosc++代码使用自己写的JNI调用过去的时候是在cocos线程运行的,可以使用
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
//已在android主线程(进程线程)
}
});
方法跑到android主线程中执行

同理在AppActivity或者说android那边的sdk回调的通过JNI调用到cocos c++代码的时候还是跑在android主线程中,这时候使用渲染相关的操作就会有新创纹理变黑,可以使用
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=] {
//已在cocos线程中
});
跑到cocos线程中执行创建纹理操作

2赞

很详细的解释,我无法解释得这么清晰,不过我知道发生的大多数情况:
在从后台进前台时,若在Http请求中回调层渲染,则大多数情况下会出现黑块