Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: __Heaven__ от Сентябрь 21, 2014, 16:39



Название: [Решено] Рисование на QGLWidget из другого класса
Отправлено: __Heaven__ от Сентябрь 21, 2014, 16:39
Привет, друзья!
У меня имеется класс, наследованный от QGLWidget. Я в нём произвожу отрисовку нескольких объектов.
У меня появилась необходимость разделить этот класс на двое - отрисовывать один из объектов с помощью нового класса.
Мне изветно, что это нужно делать с помощью QGLContext.
Я пробовал наследовать мой новый класс от QGLWidget. Но выходит не совсем корректное рисование и сегфолт при выходе.

Каким образом будет правильно сделать необходимое мне разделение?

Up
так как контекст в программе единственный, было достаточно создать обычный класс, неунаследованный от кого-либо (правда, я унаследовался от QObject ради самодеструкции). Наличие <QOpenGLShaderProgram> позволило включить необходимые мне для рисования функции.


Название: Re: [Решено] Рисование на QGLWidget из другого класса
Отправлено: vulko от Сентябрь 24, 2014, 14:57
не совсем понятно описано...

я так понял, что нужно отрисовку вынести в отдельный класс.
если так, то ничего не мешает создавать сколько угодно классов, описать в нем метод draw() и дергать их из paintGL() у QGLWidget'а.


Название: Re: [Решено] Рисование на QGLWidget из другого класса
Отправлено: __Heaven__ от Сентябрь 25, 2014, 07:45
не совсем понятно описано...

я так понял, что нужно отрисовку вынести в отдельный класс.
если так, то ничего не мешает создавать сколько угодно классов, описать в нем метод draw() и дергать их из paintGL() у QGLWidget'а.

Да, именно так. Меня смутило наличие контекста, думал, что его нужно как-то дёргать из класса в класс.


Название: Re: [Решено] Рисование на QGLWidget из другого класса
Отправлено: vulko от Сентябрь 25, 2014, 13:45
не совсем понятно описано...

я так понял, что нужно отрисовку вынести в отдельный класс.
если так, то ничего не мешает создавать сколько угодно классов, описать в нем метод draw() и дергать их из paintGL() у QGLWidget'а.

Да, именно так. Меня смутило наличие контекста, думал, что его нужно как-то дёргать из класса в класс.

нет, дергать не нужно, по крайней мере для одного виджета с одним и тем же контекстом.

а вот если отрисовка будет в разных потоках, то тут придется подергать makeCurrent() для контекстов/виджетов.