EAGLContext присутствует Renderbuffer на втором потоке?
Я портирую свой игровой движок на iOS и использую исключение по моему вызову [EAGLContext presentRenderbuffer:]. Мой движок имеет весь код рендеринга в отдельном потоке к основному; Движок работает, создавая CAEAGLLayer и EAGLContext в главном потоке, активируя контекст и создавая кадровый буфер для представления, затем деактивируя контекст. После этого для каждого кадра мой поток рендеринга затем активирует контекст, связывает кадровый буфер, рисует и, наконец, представляет буфер рендеринга.
Можно ли вызвать presentRenderbuffer: во вторичном потоке, или это является причиной моих проблем?
2 ответа
Похоже, что это поведение должно было измениться, так как я могу без проблем использовать EAGLContext во вторичном потоке (тестирование на iOS7/iOS8)
Если не внесены какие-либо различия, ответ НЕТ, вы можете не предоставлять буфер рендеринга никому, кроме основного потока. Самое близкое, что вы, вероятно, можете получить, - это использование FBO с текстурной привязкой во вторичном потоке, в который вы делаете весь рисунок, а затем передаете текстуру в основной поток (требуется общий контекст) и перерисовывает текстуру только в буфер рендеринга основного потока.,
Другим способом может быть использование тройной буферизации, когда ваш поток рисования поменяет местами буфер 1 и 2 после завершения рисования, а основной поток поменяет местами буфер 3 и 2 после представления. Дайте мне знать, если вы попытаетесь реализовать это, так как мне любопытно, что получится.