Russian Qt Forum
Ноябрь 22, 2024, 06:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование в отдельной нитке  (Прочитано 5509 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июнь 28, 2021, 22:06 »

Добрый день

Продолжение соседней темы. Быстренько прикрыл рисование мутексом, заработало, неужели проскочил? Конечно нет, на машине заказчика рушится, причем мерзко. Ну ладно, прильнул к источнику знаний
Цитировать
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 - все, приплыли. Или я что-то не так понял?

Какие есть соображения?

Спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июль 19, 2021, 06:45 »

Увы. "ни асилил". Да, рисование в рабочей нитке возможно, надо в ней установить контекст созданный в ней же, и рисовать. Если "не дышать" (остановить главную), то да, так работает. Но смысл именно освободить главную для UI/cобытий, и тут затык. Во-первых имею довольно много данных хранимых на видео (что удобно, слил в буфер и пользуйся), и как их (операции с ними) прикрывать - хз. Ну ладно, позатыкал очевидное, и на моей машине вроде заработало. Но на др крашит бурным потоком. Причем в самых неожиданных местах, напр главная падает в событийном цикле.

Возможно (ну это я так думаю), "обычные" окна/контролы тоже юзают OpenGL (а значит переключают контекст), тогда конечно хана. Эх, поговорить бы со знающим человеком, а тут дальше обсасывания функторов дело не идет  Плачущий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Июль 19, 2021, 10:45 »

задавание вопроса на международной площадке с гораздо бо́льшим количеством пользователей (stackoverflow, Qt forum) повышает вероятность ответа
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июль 19, 2021, 12:13 »

задавание вопроса на международной площадке с гораздо бо́льшим количеством пользователей (stackoverflow, Qt forum) повышает вероятность ответа
Там еще хуже  Плачущий
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Июль 20, 2021, 00:35 »

>> Но на др крашит бурным потоком. Причем в самых неожиданных местах, напр главная падает в событийном цикле.

Я бы память проверил. Какой-нибудь gflags там или valgrind, если линукс. А то очень похожие симптомы, что "где-то что-то куда-то вылазит" Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июль 21, 2021, 07:55 »

Я бы память проверил. Какой-нибудь gflags там или valgrind, если линукс. А то очень похожие симптомы, что "где-то что-то куда-то вылазит" Улыбающийся
Чем универсальнее лекарство - тем реже оно помогает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.176 секунд. Запросов: 22.