Evgenij LegotskojJan. 27, 2017, 6:53 a.m.

Поддержка OpenGL Core Profile Context в QPainter

Как многим известно, QPainter имеет архитектуру с несколькими бэкэндами и имеет две основных реализации отрисовки под капотом Qt 5: Это растровый движок отрисовки и движок OpenGL2, который предназначен для OpenGL ES 2.0.

GL Paint Engine

В то время как движок растровой отрисовки является одним из драгоценных камней Qt, давайте поговорим о второй половине: движок отрисовки GL, который используется, когда открывается QPainter на:

Проблемы

А что насчёт современной OpenGL?

Какие проблемы начали проявляться в начале: вокруг Qt 5.0, для тех, кто нуждался в контексте основного профиля во время создания пользовательского OpenGL рендеринга, который в конечном счёте срабатывал довольно часто. Такие компоненты как Qt Quick в начале не могли работать с такими контекстами из-за необходимости полагаться на устаревшую/удалённую функциональность (например, указатели на клиентской стороне), отсутствующий объект массива вершин, версия шейдеров GLSL, поддержка которых не является обязательной для таких контекстов.

В некоторых случаях выбор профиля совместимости был жизнеспособным обходным путём. Однако, Mac OS X / macOS как известно не хватает поддержки для этого: есть выбор между OpenGL 2.1 или контекстом основного профиля 3.2+.  Попытки решить эту проблему, например, рендерингом текстуры в одном контексте, а затем использовать текстуру в другом контексте посредством совместного использования ресурсов зачастую бесполезны, так как некоторые платформы, как правило, отвергают совместное использование ресурсов между контекстами разных версий/профиля.

Прогресс

К счастью, во время жизненного цикла Qt 5 эти вещи были улучшены: Во-первых Qt Quick, и затем другие, менее пользовательские компоненты, основанные на GL были исправлены, чтобы функционировать как с основными контекстами, так и с контекстами совместимости.

По состоянию на Qt 5.8 есть одно большое исключение: движок отрисовки GL для QPainter.

Последний недостающий кусок

Хорошей новостью является то, это ограничение будет снято в ближайшее время. Благодаря вкладу Krita , смотрите здесь справочную информацию , QPainter теперь в состоянии функционировать в профиле основных контекстов. Функционально это не принесет каких-либо изменений, рендеринг по-прежнему происходит с использованием тех же методов, как и раньше.

В дополнение к исправлению оригинального патча, также это было интегрировано с системой регрессионного тестирования, называемой Lancelot. Это означает, что в дополнение к растру (с различными форматами QImage) и OpenGL 2, также будет запускаться с контекстом основного профиля с этого момента, чтобы обеспечить выход QPainter без регрессии между выпусками Qt.

В целом это означает, что фрагмент кода следующего ниже будет функционировать так, как и ожидается.

class Window : public QOpenGLWindow {
  void initializeGL() override {
    QSurfaceFormat fmt;
    fmt.setVersion(4, 5); // or anything >= 3.2
    fmt.setProfile(QSurfaceFormat::CoreProfile);
    setFormat(fmt);
  }
  void paintGL() override {
    QPainter p(this);
    p.fillRect(10, 10, 50, 50, Qt::red);
    ...
  }
  ...
};

Когда?

Qt 5.9.

Патч теперь влит в qtbase в ветку "dev". В ближайшее время будет добавлен в Qt 5.9.

Источник Qt blog

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
R
  • Rrrrr
  • Oct. 16, 2020, 5:14 a.m.

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:70points,
  • Rating points1
e

C++ - Test 005. Structures and Classes

  • Result:91points,
  • Rating points8
N

C++ - Тест 003. Условия и циклы

  • Result:85points,
  • Rating points6
Last comments
S

QML - Lesson 026. Intents with Qt for Android, part 1

Есть ли возможность приведения java типа у QAndroidJniObject? Интересует конкретно class to
VK

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Кто-нибудь знает, как сделать так, чтобы в QTableWidget состоящей из чекбоксов в строке таблицы можно было выбрать только один checkbox ?

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

QSqlTableModel выполняет ряд стандартных операций для одной таблицы из базы данных. Поэтому там и реализован функционал по удалению и редактированию. QSqlQueryModel позволяет выполнить запр…
VB

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

Добрый день. Хотел спросить вот что. Создал проект на основе QAbstractTableModel. В MainWindow cоответственно создал модель и связал с представлением. Поиск веду по списку элементов модели,…

QCheckBox в качестве делегата QTableView

До тех пор, пока у вас проект содержит только одну таблицу, или несколько то может быть. Когда их будет 1000 и чекбоксы в разных колонках, то без делегатов и переопределения возвращаемых ре…
Now discuss on the forum

Баг в QGraphicsView

решил проблему
CF

Маленький вопрос для знатоков list

Спасибо, я уже понял, в чем было дело) меня запутали квадратные скобки и название простого массива "mylist". Я думал, что [10] это размер листа, а размер листа задается в круглых скобках. Да и …

QSqlTableModel - Как добавить картинки в таблицу, чтобы они отражались в диалоговом окне, но не были частью модели

Ну тогда в этом столбце указывайте пути на несколько картинок

Создание иерархии в виде дерева для фронта приложения на Джанго.

1 эндпоинт - элементы дерева, второй - контент. не надо мешать все в кучу. добавился элемент дерева - запрос в первый эндпоинт, вернулся id созданного элемента, и когда создается контент, …

Как вернуться на главное окно проекта в Qt

Разобрался. Задачу решил вот так (может немоного не экономно и топорно, но рабтает): auto widgetList = QApplication::topLevelWidgets(); foreach(auto object, widgetList){ if(ob…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB