неудачное утверждение `vertexFunction не должно быть нулевым - ошибка при загрузке сцены SceneKit в iPad iOS 9.0.2

Я получаю неприятную ошибку при тестировании своего приложения на iPad, в тот момент, когда мой SCNScene загружается, как только я вижу узлы на экране. Я не понял, что это может быть:

/BuildRoot/Library/Caches/com.apple.xbs/Sources/Metal/Metal-54.31/Framework/MTLRenderPipeline.mm:973: failed assertion `vertexFunction must not be nil.

Я не использую напрямую ни Metal, ни OpenGL, только материалы SceneKit. Я мало что в них понимаю, но слышал, что они как-то используются внизу. Я попытался исправить это, «заставив» OpenGL, поскольку я читал в какой-то теме, что это может помочь:

scnView = GGBattleScene2(frame: view.frame, options: [SCNPreferredRenderingAPIKey : SCNRenderingAPI.OpenGLES2.rawValue])

Сцена появилась, но многие добавленные элементы просто стали невидимыми, или не отрендерились, я не знаю. Собственно все, за исключением нарисованной мной опорной оси:

ось видна


person Pietro Pepe    schedule 22.10.2015    source источник


Ответы (2)


Я столкнулся с подобной ошибкой и получил точно такой же вывод консоли:

/BuildRoot/Library/Caches/com.apple.xbs/Sources/Metal/Metal-55.1.1/Framework/MTLRenderPipeline.mm:973: failed assertion `vertexFunction must not be nil.'

Я проверяю конфигурацию схемы моего проекта и обнаруживаю, что «Проверка Metal API = Enabled» является основной причиной. Отключите его ("Metal API Validation = Disabled"), после чего ошибка исчезла.

введите здесь описание изображения

person Gong Pengjun    schedule 30.11.2015
comment
Ого, не заметил этого. Жаль, что я уже сделал огромный обходной путь, чтобы избежать использования SKScene, но большое спасибо. Это может помочь мне в будущем! - person Pietro Pepe; 01.12.2015
comment
У меня не работает... Я использую SKVideoNode внутри SceneKit - person Nico S.; 12.01.2016

Что ж, я обнаружил, что эта ошибка возникает только потому, что мои SCNNodes имеют свои материалы, установленные с SKScene, с SKSpriteNode внутри него. Само по себе это не проблема, так как я запускал это в более ранней версии xCode, и все работало отлично. По какой-то причине компилятор актуальной версии делает что-то там не так. Я знал это, потому что использовал тот же код в xcode 6.3.9, и он работал.

Когда я изменил, чтобы установить материал с той же текстурой, что и для SKSpriteNode, вместо самого SKScene, это сработало.

person Pietro Pepe    schedule 24.10.2015
comment
У меня такая же проблема, но я не очень понимаю ваш ответ (извините). Как именно вы изменили текстуру? Вы напрямую использовали изображение в качестве содержимого SCNMaterial вместо SCNScene? - person Dorian Roy; 10.02.2016
comment
@DorianRoy, я использовал SKTexture (SKTexture(image:)) в качестве свойства диффузного.contents моего SCNMaterial - person Pietro Pepe; 11.02.2016
comment
В порядке. Мне нужно, чтобы SKScene рисовал на нем, так что одной текстурой этого не сделать. Но сейчас я думаю, что получаю эту ошибку из-за проблемы с многопоточностью. В любом случае, спасибо! - person Dorian Roy; 11.02.2016