Название: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Январь 28, 2015, 18:07 Привет, друзья!
Хотел узнать, кто уже использует QOpenGLWidget в своих проектах, как полёт? Судя по документации мне его методы показались скудными. К примеру, мне не хватает setAutoSwap(bool) и swapBuffers(). Стоит ли перелезать или этот класс ещё сыроват? Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Январь 29, 2015, 07:37 Дружок, долбаюсь 3-ю неделю с этим :'( По какой-то таинственной причине экран не обновляется даже если рисую строго из paintGL. Вызов makeCurrent почему-то блокирует рисование. Проблемы с ложными (ненужными) перерисовками. И.т.п.
Название: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Январь 29, 2015, 09:43 По какой-то таинственной причине экран не обновляется даже если рисую строго из paintGL. Я получал такое же и на QGLWidget, хотел подписать оси координат. Но плюнул и сделал xyz трёхмерными.А по идеи, какие преимущества я имею или должен иметь с этим новым классом? Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Январь 29, 2015, 09:58 А по идеи, какие преимущества я имею или должен иметь с этим новым классом? QGLWidget (и вообще все QGLxxx) объявлено "legacy" начиная с 5.4. Проблемы есть и в старом и в новом - поэтому есть смысл возиться с новым. Напр есть приятная возможность обойтись без стандартных хедеров OpenGL, отличный флажок чтобы сделать все контексты шаред и др. Но будет ли все это бычить со старым QGLxxx - жалко тратить время на проверку Название: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Январь 29, 2015, 10:49 Я ещё так понимаю, что введение нового класса позволяет с меньшей болью портировать свои приложения на ES...
Что означает термин legacy? Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Февраль 01, 2015, 11:12 Что означает термин legacy? То и означает, "наследство", т.е. предыдущая реализация которая еще/пока поддерживается, но уже не развиваетсяЯ получал такое же и на QGLWidget, хотел подписать оси координат. Но плюнул и сделал xyz трёхмерными. Да, в QOpenGLWidget с текстом тоже проблемы, после вызовов OpenGL текст почему-то не рисуется. У меня были буквы в виде моно битмапов, рисовал через glCallList. Работало, но возможности бедные. Переделал на QPainter, сначала в QImage а потом drawImage Название: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Февраль 04, 2015, 16:23 Как полёт? Есть изменения?
Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Февраль 04, 2015, 16:44 Как полёт? Есть изменения? Да какой "полет" - стреляют, не было света :'(Название: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Февраль 04, 2015, 17:32 сочувствую...
Название: Re: QOpenGLWidget vs QGLWidget Отправлено: mitrich от Февраль 09, 2015, 11:26 К примеру, мне не хватает setAutoSwap(bool) и swapBuffers(). Вызов makeCurrent почему-то блокирует рисование. Существенное отличие от QGLWidget, как я понял в том, что QGLWidget создает собственное нативное окошко с контекстом OpenGL, а QOpenGLWidget вместо этого использует рендеринг в FBO. Соответственно, контроля setAutoSwap/swapBuffers не будет и makeCurrent будет работать по другому.Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Февраль 09, 2015, 11:56 "Выталкивать" (рисовать асинхронно) кое-как сделал, но неприятная проблема "застревания" кадра при синхронном. Рисую в drawGL, но почему-то экран обновляется лишь при след перерисовке. Сделал собственный updateFlag - все равно необходим чтобы избежать ложных перерисовок.
Насколько понял по исходникам, схема такая. QOpenGLWidget рендерится в текстуру, а обычные виджеты - в QImage который хранит QBackingStore. При выводе все это собирается в OpеnGL и делается swapBuffers для всего окна. И все бы ничего но зачем дергать всякий раз QOpenGLWidget - хз. Также действия рисования могут затрагивать контекст окна. Напр рисую текстуру с какой-то альфой - а получаю blend всего окна. Сегодня буду разбираться с этим багом. Название: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Февраль 15, 2015, 18:06 Есть новости? Удалось победить лишние перерисовки и др.?
Название: Re: QOpenGLWidget vs QGLWidget Отправлено: Igors от Февраль 15, 2015, 18:15 Есть новости? Удалось победить лишние перерисовки и др.? Я думал уже ответил в предыдущем посте :) С перерисовками - если свой updateFlag == false, то drawGL пропускаем. Др возможности (судя по исходникам 5.4) не нашел. Рисовать/выталкивать асинхронно можно, но для этого надо юзать context()->makeCurrent (а не this->makeCurrent). В общем с причудами, но работать можноНазвание: Re: QOpenGLWidget vs QGLWidget Отправлено: __Heaven__ от Февраль 15, 2015, 18:59 Я понял. Думал, мало ли обнаружилось чего без заглушек.
|