Добрый день
Продолжение соседней темы. Быстренько прикрыл рисование мутексом, заработало, неужели проскочил? Конечно нет, на машине заказчика рушится, причем мерзко. Ну ладно, прильнул к источнику знаний
Thread Affinity
QOpenGLContext can be moved to a different thread with moveToThread(). Do not call makeCurrent() from a different thread than the one to which the QOpenGLContext object belongs. A context can only be current in one thread and against one surface at a time, and a thread only has one context current at a time.
Мда, не густо! И примерчика передрать не наблюдаю. А это витиеватое "аffinity" не помогает, но наоборот, запутывает. Как понять что нужно делать для "выноса в поток" ? Нужно ли делать moveToThread ? Четких указаний не вижу, но наверно да, надо. Понял что имеется ввиду нечто типа
C++ (Qt)
QOpenGLWindow * win;
...
// some thread
win->makeCurrent();
DoDrawGL();
win->doneCurrent(); // видел упоминание что какие-то карты могут требовать
Ну и вроде это с успехом может юзаться как из главной так и из другой, ясно под защитой мутекса (не 2 рисования вместе).
Ну хорошо, пусть я чего-то рисую, напр в др нитке, главный цикл событий обрабатывается, вызывается paintGL в главной нитке, а до его вызова Qt сам сделает makeCгrrent - все, приплыли. Или я что-то не так понял?
Какие есть соображения?
Спасибо