Надеюсь, что мое решение поможет другим.
есть приложение, которое используетMetal
оказывать. Это приложение корректно работает на устройствах под управлением iOS11. При использовании одного и того же приложения на устройствах под управлением iOS12 у нас начались глюки и иногда зависания при рендеринге. Мы также пытались перекомпилировать для iOS12 и получаем то же самое плохое поведение. На консоли мы получаем следующие разные сообщения:
2018-09-22 09: 22: 29.508576-0500 OurApp [1286: 84481] Выполнение буфера команд было прервано из-за ошибки во время выполнения. Сброшено (жертва ошибки / восстановления GPU) (код IOAF 5)
2018-09-22 09: 29: 55.654426-0500 OurApp [1286: 84625] Выполнение буфера команд было прервано из-за ошибки во время выполнения. Вызванная ошибка зависания графического процессора (код IOAF 3)
2018-09-22 09: 34: 37.718054-0500 OurApp [1286: 87354] Выполнение буфера команд было прервано из-за ошибки во время выполнения. Проигнорировано (для того, чтобы вызвать предыдущие / чрезмерные ошибки GPU) (код 4 IOAF)
С первыми двумя сообщениями рендеринг кажется затруднительным, когда отображается пустой экран, а затем, наконец, рендеринг происходит на экране. С последним сообщением рендеринг фактически не происходит, и сообщение продолжает отображаться, пока мы не перейдем к другому представлению.
Это приложение используетSceneKit
, создаетSCNView
и использует значение по умолчаниюCIContext
, Он также использует модель физического освещения, которая заставляетMetal
рендер для использования. Приложение имеет простойSCNNode
геометрия, цилиндр. Каждый геометрический объект цилиндра получает нормальную текстуру (всего 3). Одинаковые значения диффузности, металличности и шероховатости применяются ко всем геометрическим объектам цилиндра.
Кто-нибудь сталкивался с этой проблемой? Если да, то как ты решил это?
Спасибо
ОБНОВЛЕНИЕ: проблема, кажется, вызвана, когда изображение используется в качестве среды освещения сцены:
let scene = SCNScene()
scene.lightingEnvironment.contents = UIImage(named: "ourLightingEnvironmentImage")
Когда среда освещения не используется, проблема исчезает. Это начинает выглядеть как ошибка Apple, мы ее опубликуем. Мы застряли, потому что нам нужна световая среда для реалистичного отражения моделей в нашем приложении.