cocos2d-x 3.17.2 utils :: captureScreen在iPad mini 5th上的iOS 13.1.3上断言失败

问题描述 投票:1回答:1

我正在使用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());

有人知道如何解决此问题吗?

c++ cocos2d-x ios13 cocos2d-x-3.17
1个回答
0
投票

关于glReadPixels()的底层Metal实现的某些事情违反了iOS 13.1以来的Metal内存访问规则(并且自13.3.1起还没有修复。)>

好消息是,这仅是调试检查。如果不附加到Xcode调试器,它将“正常工作”。要让Xcode滑动,您可以:

  1. 转到编辑方案
  2. 选择侧边栏中的运行选项
  3. 转到选项选项卡
  4. 禁用金属API验证
  5. “”

© www.soinside.com 2019 - 2024. All rights reserved.