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
V
  • Viktor
  • April 14, 2021, 3:40 p.m.

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

  • Result:50points,
  • Rating points-4
F
  • Fedya
  • April 14, 2021, 4:04 a.m.

C++ - Test 001. The first program and data types

  • Result:66points,
  • Rating points-1
KP

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

  • Result:71points,
  • Rating points1
Last comments
YA

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Hello. Let's say I want to send some variables to "run" define. How can we do that? I modified your code, I tried something like below, but the GUI is frozen that way. I could not be able to und…
R

Распознавание изображений на Python с помощью TensorFlow и Keras

почему то вместо 50000 обрабатывает по 782 картинки кажду. эпоху
R
AB

Qt/C++ - Lesson 008. QDataWidgetMapper - Working with the database via a widget

Понял сам так - происходит через setTable() "Sets the database table on which the model operates to tableName. Does not select data from the table, but fetches its field information", а затем че…
AB

Qt/C++ - Lesson 008. QDataWidgetMapper - Working with the database via a widget

Начал делать что-то похожее, но без sql. Не очень понимаю, что делает mapper->setCurrentModelIndex(model->index(row,0)); Вернее не понимаю вот что: откуда он берёт данные, кот…
Now discuss on the forum
VB

Помогите переложить код QML OpenCV c PyQt5 на PySide2

Структура проекта ├── main.py ├── main.qml └── PyCVQML ................├── cvcapture.py ................├── cvitem.py ................└── init .py …

QScrollArea dynamically add QCheckBoxes

Всё правильно. Это просто спамер, который отправился в вечный бан.
d

Подключение приложения qt qml к БД postgresql из приложения qt qml c++, собранное под android

Алексей, код уже написан. Приложение работает под ОС Windows, но хочется его запустить на Android. По поводу сборки драйвера, не получается найти свежей инструкции, а главное рабочей.
d

Qt, Sqlite и Android. Как подключить базу данных?

Добрый день, добавил базу к ресурсам, приложение вроде как открывает БД, но данные не видет, что может быть не так? qt qml c++ под android m_db = QSqlDatabase::addDatabase("QSQLITE")…
  • BlinCT
  • April 13, 2021, 4:11 a.m.

Отображение талицы в Column в qml обьекте

Проблема в том что я все таблицы перевел на вторые контролы, все таблицы на них сделаны, шаблон для них всех создан. Только под 2 эти таблицы возвпащать все на первые контролы не думаю что прави…
About
Services
© EVILEG 2015-2021
Recommend hosting TIMEWEB