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

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

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

Сообщений: 2130



Просмотр профиля
« : Январь 28, 2015, 18:07 »

Привет, друзья!
Хотел узнать, кто уже использует QOpenGLWidget в своих проектах, как полёт?
Судя по документации мне его методы показались скудными. К примеру, мне не хватает setAutoSwap(bool) и swapBuffers().
Стоит ли перелезать или этот класс ещё сыроват?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Январь 29, 2015, 07:37 »

Дружок, долбаюсь 3-ю неделю с этим  Плачущий По какой-то таинственной причине экран не обновляется даже если рисую строго из paintGL. Вызов makeCurrent почему-то блокирует рисование. Проблемы с ложными (ненужными) перерисовками. И.т.п.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Январь 29, 2015, 09:43 »

По какой-то таинственной причине экран не обновляется даже если рисую строго из paintGL.
Я получал такое же и на QGLWidget, хотел подписать оси координат. Но плюнул и сделал xyz трёхмерными.
А по идеи, какие преимущества я имею или должен иметь с этим новым классом?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Январь 29, 2015, 09:58 »

А по идеи, какие преимущества я имею или должен иметь с этим новым классом?
QGLWidget (и вообще все QGLxxx) объявлено "legacy" начиная с 5.4. Проблемы есть и в старом и в новом - поэтому есть смысл возиться с новым. Напр есть приятная возможность обойтись без стандартных хедеров OpenGL, отличный флажок чтобы сделать все контексты шаред и др. Но будет ли все это бычить со старым QGLxxx - жалко тратить время на проверку
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Январь 29, 2015, 10:49 »

Я ещё так понимаю, что введение нового класса позволяет с меньшей болью портировать свои приложения на ES...
Что означает термин legacy?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Февраль 01, 2015, 11:12 »

Что означает термин legacy?
То и означает, "наследство", т.е. предыдущая реализация которая еще/пока поддерживается, но уже не развивается

Я получал такое же и на QGLWidget, хотел подписать оси координат. Но плюнул и сделал xyz трёхмерными.
Да, в QOpenGLWidget с текстом тоже проблемы, после вызовов OpenGL текст почему-то не рисуется. У меня были буквы в виде моно битмапов, рисовал через glCallList. Работало, но возможности бедные. Переделал на QPainter, сначала в QImage а потом drawImage
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Февраль 04, 2015, 16:23 »

Как полёт? Есть изменения?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Февраль 04, 2015, 16:44 »

Как полёт? Есть изменения?
Да какой "полет" - стреляют, не было света  Плачущий
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Февраль 04, 2015, 17:32 »

сочувствую...
Записан
mitrich
Гость
« Ответ #9 : Февраль 09, 2015, 11:26 »

К примеру, мне не хватает setAutoSwap(bool) и swapBuffers().
Вызов makeCurrent почему-то блокирует рисование.
Существенное отличие от QGLWidget, как я понял в том, что QGLWidget создает собственное нативное окошко с контекстом OpenGL, а QOpenGLWidget вместо этого использует рендеринг в FBO. Соответственно, контроля setAutoSwap/swapBuffers не будет и makeCurrent будет работать по другому.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Февраль 09, 2015, 11:56 »

"Выталкивать" (рисовать асинхронно) кое-как сделал, но неприятная проблема "застревания" кадра при синхронном. Рисую в drawGL, но почему-то экран обновляется лишь при след перерисовке. Сделал собственный updateFlag - все равно необходим чтобы избежать ложных перерисовок.

Насколько понял по исходникам, схема такая. QOpenGLWidget рендерится в текстуру, а обычные виджеты - в QImage который хранит QBackingStore. При выводе все это собирается в OpеnGL и делается swapBuffers для всего окна. И все бы ничего но зачем дергать всякий раз QOpenGLWidget - хз. Также действия рисования могут затрагивать контекст окна. Напр рисую текстуру с какой-то альфой - а получаю blend всего окна. Сегодня буду разбираться с этим багом.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Февраль 15, 2015, 18:06 »

Есть новости? Удалось победить лишние перерисовки и др.?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Февраль 15, 2015, 18:15 »

Есть новости? Удалось победить лишние перерисовки и др.?
Я думал уже ответил в предыдущем посте Улыбающийся С перерисовками - если свой updateFlag == false, то drawGL пропускаем. Др возможности (судя по исходникам 5.4) не нашел. Рисовать/выталкивать асинхронно можно, но для этого надо юзать context()->makeCurrent (а не this->makeCurrent). В общем с причудами, но работать можно
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #13 : Февраль 15, 2015, 18:59 »

Я понял. Думал, мало ли обнаружилось чего без заглушек.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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