Это моя текущая настройка: я делаю рендеринг OpenGL с использованием SDL (в настоящее время на Linux). Я инициализирую SDL (SDL_Init
) и создаю окно приложения (SDL_CreateWindow
) в основном потоке и передаю его во второй поток. Этот второй поток создает из него контекст OpenGL (SDL_GL_CreateContext
) и запускает цикл рендеринга, в то время как основной поток прослушивает события. Я думаю, важно отметить, что вызовы GL полностью ограничены этой второй нитью; на самом деле большая часть моей логики приложения существует там, основной поток действительно ответственен только за обработку событий, которые входят в SDL.
Изначально я делал это наоборот, но, оказывается, вы не можете обрабатывать события ничем, кроме основного потока на OSX и, вероятно, также Windows, поэтому я включил его, чтобы быть совместимым с этими двумя в будущем.
Должны ли я беспокоиться о том, что это не будет работать в OSX/Windows? На Linux у меня не было вообще никакого. Там много информации в Интернете о совместном использовании контекста и выполнении вызовов GL из нескольких потоков, но все, что я хочу сделать, это сделать OpenGL в одном потоке, который не является основным. Я не хотел бы продолжать кодировать свое приложение, чтобы потом узнать, что он больше не будет работать.