Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: Vladimir от Февраль 21, 2012, 10:29



Название: [РЕШЕНО] Отрисовка OpenGL в отдельном потоке
Отправлено: Vladimir от Февраль 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
Что можете посоветовать...???

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




Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: Vladimir от Февраль 21, 2012, 14:22
Неужели никто не сталкивался с подобным (( подскажите, хоть за что зацепиться..


Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: Bepec от Февраль 21, 2012, 14:52
Отпишу, ибо знаю как напрягает молчание в топике.

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

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


Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: Vladimir от Февраль 21, 2012, 15:00
ну хоть на добром слове спасибо)
так не обязательно устанавливать и запускать.. просто может люди знают куда "смотреть" в такой ситуации..
похожая тема http://www.linux.org.ru/forum/development/530860, но что-то я не нашел для себя там решения.. здесь нужно на уровне разбираться и в программировании на Qt и в архитектуре Linux, а я пока новичок.. поэтому сложно! может еще кто откликнется =)


Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: GreatSnake от Февраль 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 )


Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: Bepec от Февраль 21, 2012, 15:15
Во как ;) Стоило привлечь внимание к теме - и РРРАС.


Название: Re: Отрисовка OpenGL в отдельном потоке
Отправлено: Vladimir от Февраль 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();
    }

Еще раз СПАСИБО!!!!!!!!