Безопасен ли поток OpenGL для нескольких потоков с разными контекстами? - PullRequest
11 голосов
/ 15 октября 2010

Я знаю, что разделение одного контекста между потоками - плохая новость. Я знаю, что могу безопасно создавать и использовать контекст с закадровым кадровым буфером во вторичном потоке, когда ничего не происходит с GL в основном потоке.

Мне пока не удалось найти однозначного ответа на вопрос, могу ли я безопасно создать два контекста в двух разных потоках (скажем, рисование основного потока на экране и вторичного потока, выполняющего работу по рисованию вне экрана) и они оба будут одновременно выполнять вызовы функций GL.

Другими словами, если контексты разные, могут ли два потока «совместно использовать» C API и, следовательно, GPU? Или это то, что по своей сути не подлежит обмену? Или это зависит от реализации?

Спросите специально для OpenGL ES на iOS, но, вероятно, это общий вопрос GL.

Ответы [ 2 ]

9 голосов
/ 15 октября 2010

Да, вам нужно использовать один контекст для каждого потока, с которым вы хотите использовать OpenGL, также вы можете делиться объектами между контекстами. Это путь:)

1 голос
/ 21 мая 2013

Опция 1 : если вы не используете контекст двумя потоками одновременно, достаточно одного контекста.

Опция 2 : Если вам нужно использоватьOpenGL несколькими потоками одновременно, вам нужно более одного контекста.Затем, если контексты совместно используют свою Sharegroup , они делятся своим контентом OpenGL как текстуры.Таким образом, вы можете загружать текстуры или выполнять тяжелую обработку кадрового буфера в фоновом потоке.

Ознакомьтесь с последним разделом, посвященным группам Share:GLKit обеспечивает некоторую встроенную фоновую обработку, например, асинхронную загрузку текстур через GLKTextureLoader s - textureWithContentsOfFile.Я не знаю всех вариантов, но это определенно упрощает некоторые случаи использования асинхронного OpenGL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...