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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Отрисовка OpenGL в отдельном потоке  (Прочитано 7497 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Февраль 21, 2012, 10:29 »

Доброго дня! Помогите пожалуйста решить такую задачу:
Необходимо рисовать средствами OpenGL в отдельном потоке на Qt. В версии Qt 4.8 это делать можно, исходя из
статьи http://labs.qt.nokia.com/2011/06/03/threaded-opengl-in-4-8/ ! Но при работе под Linux возникают ошибки:

Xlib: unexpected async reply (sequence 0x1fb)!
X Error: GLXBadContextTag 158
   Extension: 144 (Uknown extension)
   Minor opcode: 129 (Unknown request)
   Resource id:  0x1a00006

Причем тестовое приложение (MultiThread) запускалось и работало под OpenSUSE 11.0! Но рабочая программа, которую делаю также нормально отрисовывала под SUSE, но при открытии модального окна или раскрывающегося списка основного интерфейса программы аварийно завершалось.. вроде как эту проблему решил, при помощи
http://forum.tuxx-home.at/viewtopic.php?f=10&t=565
но это оказалось не очень действенным решением, ибо начала через раз выскакивать другая (выше приведенная) ошибка и программа просто зависала.. Сейчас необходимо реализовать отрисовку для Linux CentOS 5.5 и только для него! В этом дистрибутиве тестовое приложение запускаться не хочет.. виснет с ошибкой X Error: GLXBadContextTag 158
Что можете посоветовать...Непонимающий

Прикрепил тестовое приложение!


« Последнее редактирование: Ноябрь 20, 2014, 15:04 от Vladimir » Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #1 : Февраль 21, 2012, 14:22 »

Неужели никто не сталкивался с подобным (( подскажите, хоть за что зацепиться..
Записан
Bepec
Гость
« Ответ #2 : Февраль 21, 2012, 14:52 »

Отпишу, ибо знаю как напрягает молчание в топике.

Я не имел дело с OpenGl, потому помочь тебе не могу, НО...

Очень мало людей будут устанавливать linux и попытаться запустить проект (ещё и скомпилировать либки Qt под него).
Увы. Сочувствую и желаю успехов в решении этой проблемы.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #3 : Февраль 21, 2012, 15:00 »

ну хоть на добром слове спасибо)
так не обязательно устанавливать и запускать.. просто может люди знают куда "смотреть" в такой ситуации..
похожая тема http://www.linux.org.ru/forum/development/530860, но что-то я не нашел для себя там решения.. здесь нужно на уровне разбираться и в программировании на Qt и в архитектуре Linux, а я пока новичок.. поэтому сложно! может еще кто откликнется =)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Февраль 21, 2012, 15:05 »

В версии Qt 4.8 это делать можно, исходя из
статьи http://labs.qt.nokia.com/2011/06/03/threaded-opengl-in-4-8/ !
Ну а чего же так плохо статью читал?
Цитировать
To use the new functionality on X11 you need to enable the Qt::AA_X11InitThreads application attribute to ensure that the underlying calls to GLX are thread-safe, but for Windows and Mac OS X it should work out of the box.

Кстати, на 4.7 тоже будет работать. Нужно только до QApplication вызвать XInitThreads().
Проверено на CentOS 5.6 )
« Последнее редактирование: Февраль 21, 2012, 15:09 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #5 : Февраль 21, 2012, 15:15 »

Во как Подмигивающий Стоило привлечь внимание к теме - и РРРАС.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #6 : Февраль 21, 2012, 15:34 »

ДА! Действительно!!! Всем огроменное СПАСИБО!!! Нужно внимательно читать буржуйские тексты))) в примере кода на сайте все было, а я зациклился на примере скаченном с нета..

Решение
Код:
    #include <qapplication.h>
    #include "appwindow.h"
    #ifdef Q_WS_X11
    #include <X11/Xlib.h>
    #endif
   
    int main(int argc, char *argv[])
    {
    #ifdef Q_WS_X11
        XInitThreads(); // !!!!!!!!!
    #endif
        QApplication app(argc, argv);
        AppWindow aw;
        app.setMainWidget(&aw);
        aw.show();
        return app.exec();
    }

Еще раз СПАСИБО!!!!!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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