引擎版本 1.9.3
XCODE版本 11
好像是 iOS13 的 bug
建议升级到 2.x 试试
楼主现在是删除测试还是更新了版本,版本2.0是没这段检测的
我的也是1.9.3 ,在ios同样问题,有没有什么好的解决方案?,项目多西很多升级引擎目前不太现实。
激活一下@引擎开发团队
抱歉没有现成的解决方法。2.2 已发布,和 1.9 隔着 1.10\2.0\2.1 三大版本,我们无力维护了,非常抱歉。
2.0.5也有类似的bug 大佬
[ERROR] (/Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_opengl_manual.cpp, 3983): glDrawElements((GLenum)p[1], (GLsizei)p[2], (GLenum)p[3], (const GLvoid*)(intptr_t)p[4]); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION
重复报这个错
2.2.0也有同样的问题。
iPhonex锁屏后4秒就会卡死。
锁屏后详细日志如下:
2019-10-23 17:57:12.131046+0800 [903:285862] failed to call context
2019-10-23 17:57:13.135262+0800 [903:285862] failed to call context
2019-10-23 17:57:14.272970+0800 [903:285862] failed to call context
2019-10-23 17:57:15.273989+0800 [903:285862] failed to call context
2019-10-23 17:57:15.282005+0800 [903:285862] Can’t end BackgroundTask: no background task exists with identifier 2 (0x2), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
OpenGL error 0x0506 in -[CCEAGLView swapBuffers] 433
OpenGL error 0x0502 in -[CCEAGLView swapBuffers] 442
OpenGL error 0x0506 in -[CCEAGLView swapBuffers] 433
OpenGL error 0x0502 in -[CCEAGLView swapBuffers] 442
E/renderer (172): glClear(mask); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:clear
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
可以删除,线上项目,删除了半年并没有什么问题;不删除的话很多SDK界面返回后都会卡死
首先确认下是不是接什么SDK,会把GL渲染的View给推到后台了?这时候是需要手动暂停引擎,不然会导致引擎还在做渲染工作,View无效的情况就会报这个错误。
空包也会出现这个问题
能确认一下这个问题吗? 肯定很多人遇到这个问题,iPhonex 百分百重现。在游戏中锁屏,不是切后台在锁屏,至少等4秒然后就opengl报错,ui卡死。
CCEAGLView 增加接口, CCEAGLView-ios.h
-(void) setupGLContext2
{
if (!_context || ![EAGLContext setCurrentContext:_context] )
{
NSLog(@"Can not crate GL context.");
return;
}
}
在 AppController.mm 增加
- (void)applicationWillEnterForeground:(UIApplication *)application {
// ...
auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
[glview setupGLContext2];
}
试试。
同样的错误,还是卡死。
@yinjimmy @huanxinyin @jare
能再看一下这个问题吗?因为很多看广告的行为也在模拟锁屏切后台,现在游戏内基本上看不了广告了,看完就黑屏卡死。
空包百分百重现,应该比较好定位问题吧。
刚又用V2.2.0弄了个空包测试,问题还是没解决,关屏回来依旧卡死。这问题不解决相当于抛弃苹果用户了啊,希望官方能尽快给出个解决方案。
临时方案:
在CCEAGLView.mm
- (void) layoutSubviews
{
if(_isBackground){
return;
}
}
-(void) setIsBackground:(BOOL) flag
{
_isBackground = flag;
}
增加一个判断是否切到后台 ,如果是直接return。
AppController.mm
applicationDidEnterBackground里
auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
[glview setIsBackground:YES];
applicationWillEnterForeground
auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
[glview setIsBackground:NO];
目前暂时没有重现了 还有待测试,急用的小伙伴也可改了一起测测。
你们报问题能否说得详细点:
- 引擎版本
- Xcode 版本-
- iOS设备和版本
我刚才测试了没有问题,环境是:
- iPhone11: iOS 13.1.2
- Xcode11: Version 11.0 (11A420a)
- Creator 2.2
- debug
只有 iPhoneX 有问题?只有使用特殊的 Xcode 版本有问题,还是特殊的 iOS 版本?
补充:
我的测试方式是在运行 Examples 的过程中锁屏 4-5 秒后返回的。
公司的 iPhoneX 版本是 11.2.2,为了保证测试样机的 iOS 版本的多样性,我还不想去升级 iOS 版本,除非确认是只有 iPhoneX 有问题。