Как я понимаю, в ранних версиях Qt не было модулей, были отдельные классы с разными функциями, в том числе графическими. Поддержка OpenGL была реализована в Qt 1.2. Однако QPainter, QImage существовали в ранних версиях.
Итак, правильно ли говорить, что эти классы являются нативными (другими словами, классы, которые были изначальными); классы opengl — неродные (в конце концов, это отдельная ветка)?
Я хотел бы узнать о дальнейшей эволюции Qtopengl как неродного и альтернативного способа создания 2D-графики в Qh, о влиянии этого модуля на развитие нативных методов (для создания 2D-графики).
Итак, правильно ли говорить, что эти классы являются родными?
Нет.
Причина в том, что «родной» будет означать разные вещи для разных людей. Это вопрос интерпретации. Смотрите ваш другой вопрос, как мы запутались.
Сейчас я думаю, что вы имеете в виду «non-opengl» 2 / 3D от нативного. Это, вероятно, означает растеризацию программного обеспечения, а не прохождение через драйвер дисплея напрямую. Итак, все еще на уровне Qt, но без классов opengl в Qt.
Теперь мы можем вернуться к QImage и QPainter. Да, QPainter по сути является начальным поколением для растеризации программного обеспечения со времен, когда графические процессоры не были такими распространенными и дешевыми, как в наши дни.
Они в основном делают рендеринг исключительно с помощью программных методов. То есть он более ограничен, но работал без более дорогих и менее распространенных аппаратных средств.
(Это были времена Quake и других программных продуктов, забавные времена, глядя на это с сегодняшней точки зрения …)
Если под «нативным» вы подразумеваете «аппаратную помощь», то линия уже не так ясна.
Обратите внимание, что QPainter
можно использовать различные движки рисования, так что просто используя QPainter
ничего не значит само по себе.
Если под «аппаратной поддержкой» подразумевается просто использование чего-то большего, чем унаследованные целочисленные или исполнительные блоки ЦП с плавающей запятой, то да, механизм растровой раскраски использует различные SIMD / векторные операции, где они доступны. Двигатель растровой краски — это двигатель, используемый для рисования на QImage
, QPixmap
и не GL QWidget
,
Если под «аппаратной помощью» вы подразумеваете «визуализацию с помощью видеокарты», вам необходимо использовать движок рисования OpenGL. Он используется, когда вы рисуете на QGLWidget
или в QQuickPaintedItem
, Конечно, рисование все еще определяется программным обеспечением — настройка геометрии и шейдеры — это просто код! Это программное обеспечение работает на оборудовании, которое может выполнять его намного быстрее, чем процессоры общего назначения.
Учитывая, что конвейер OpenGL с фиксированными функциями является более или менее историческим артефактом в наши дни, не ошибочно утверждать, что все рендеринга в Qt выполняется с использованием чисто программных методов, но программное обеспечение может работать на универсальном процессоре, или использовать SIMD / векторные исполнительные блоки на универсальном процессоре, или может работать на графическом процессоре.
Следует также сказать, что типичные драйверы Windows в наши дни делают не ускорить рисование GDI / gdiplus, кроме блиц. Таким образом, при выполнении 2D-рисования с использованием растрового движка, особенно в старых версиях Windows, таких как XP, Qt может быть быстрее, чем 2D-рисование на платформе.