我正在使用cocos2d-x 3.17.2并在iPad mini 5th iOS 13.1.3上运行我的App。
当我调用utils :: captureScreen时,它将导致断言失败。
_ validateGetBytes:29:失败的断言`不允许使用MTLResourceStorageModePrivate存储模式对纹理进行CPU访问。'
似乎是与MTLResourceStorageMode相关的问题。
但是我不知道如何解决此问题。
我在iOS 11.4.1 iPod touch 6th和iOS 12.4.3 iPad mini 2nd上运行相同的代码,但是这两个设备都不会引起此问题,它们运行得很好。
这是我的代码。
string path = FileUtils::getInstance()->getWritablePath().append("screenshot.jpg");
Label *path_lbl = Label::createWithSystemFont(path, "", 20.0);
const char* filename = path_lbl->getString().c_str();
utils::captureScreen([&](bool succeed,const std::string &fileName){}, filename);
并且断言在行上失败:ccUtils.cpp:行105
glReadPixels(0,0,宽度,高度,GL_RGBA,GL_UNSIGNED_BYTE,buffer.get());
有人知道如何解决此问题吗?
关于glReadPixels()
的底层Metal实现的某些事情违反了iOS 13.1以来的Metal内存访问规则(并且自13.3.1起还没有修复。)>
好消息是,这仅是调试检查。如果不附加到Xcode调试器,它将“正常工作”。要让Xcode滑动,您可以: