Spec-Zone.ru › Qt 6.0

Класс QOpenGLTextureBlitter

Класс QOpenGLTextureBlitter предоставляет удобный способ отрисовки текстурированных квадов с помощью OpenGL. Подробнее...

Заголовок: #include <QOpenGLTextureBlitter>
CMake: find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
С момента: Qt 5.8
  • Список всех членов, включая унаследованные

Открытые типы

Перечисление Origin { OriginBottomLeft, OriginTopLeft }

Открытые функции

QOpenGLTextureBlitter()
~QOpenGLTextureBlitter()
void bind(GLenum target = GL_TEXTURE_2D)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)
bool create()
void destroy()
bool isCreated() const
void release()
void setOpacity(float opacity)
void setRedBlueSwizzle(bool swizzle)
bool supportsExternalOESTarget() const

Статические открытые члены

QMatrix3x3 sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)
QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport)

Подробное описание

Отрисовка текстурированных квадов, для размещения содержимого текстуры на экране, является общей операцией при разработке 2D пользовательских интерфейсов. QOpenGLTextureBlitter предоставляет удобный класс, чтобы избежать повторения данных вершин, источников шейдеров, управления буферами и программами, а также вычисления матриц.

Например, подкласс QOpenGLWidget может сделать следующее, чтобы нарисовать содержимое, отрисованное в буфере кадров в пиксельной позиции (x, y):

void OpenGLWidget::initializeGL()
{
    m_blitter.create();
    m_fbo = new QOpenGLFramebufferObject(size);
}

void OpenGLWidget::paintGL()
{
    m_fbo->bind();
    // update offscreen content
    m_fbo->release();

    m_blitter.bind();
    const QRect targetRect(QPoint(x, y), m_fbo->size());
    const QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(0, 0), m_fbo->size()));
    m_blitter.blit(m_fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);
    m_blitter.release();
}

Блиттер реализует GLSL-шейдеры как для GLSL 1.00 (подходящий для OpenGL (ES) 2.x и профилей совместимости более новых версий OpenGL), так и для версии 150 (подходящий для контекстов основного профиля с OpenGL 3.2 и новее).

Документация типов членов

Перечисление QOpenGLTextureBlitter::Origin

Константа Значение Описание
QOpenGLTextureBlitter::OriginBottomLeft 0 Указывает, что данные в текстуре следуют соглашениям OpenGL относительно систем координат, то есть Y растет снизу вверх.
QOpenGLTextureBlitter::OriginTopLeft 1 Указывает, что данные в текстуре имеют Y, растущий сверху вниз, что типично для обычных данных изображений без переворачивания.

См. также blit().

Документация функций членов

QOpenGLTextureBlitter::QOpenGLTextureBlitter()

Создает новый экземпляр QOpenGLTextureBlitter.

Примечание: графические ресурсы не инициализируются в конструкторе. Это делает безопасным размещение простых членов QOpenGLTextureBlitter в классах, потому что фактическая инициализация, зависящая от контекста OpenGL, происходит только в create().

QOpenGLTextureBlitter::~QOpenGLTextureBlitter()

Уничтожает экземпляр.

Примечание: Когда контекст OpenGL — или контекст, совместно использующий ресурсы с ним — который был текущим при вызове create(), не является текущим, графические ресурсы не будут освобождены. Поэтому рекомендуется вручную вызвать destroy(), а не полагаться на деструктор для очистки графических ресурсов OpenGL.

void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)

Привязывает графические ресурсы, используемые блиттером. Это необходимо вызвать перед вызовом blit(). Избегайте кода, изменяющего состояние OpenGL, между вызовом bind() и blit(), так как это может привести к конфликтам.

target — целевой тип текстуры для исходной текстуры и должен быть либо GL_TEXTURE_2D , либо GL_OES_EGL_image_external.

См. также release() и blit().

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)

Выполняет блит с исходной текстурой texture.

targetTransform задает применяемое преобразование. Обычно оно генерируется функцией-помощником targetTransform().

sourceOrigin задаёт, нужно ли переворачивать данные изображения. Когда texture соответствует текстуре, присоединённой к проходу FBO, передавайте OriginBottomLeft. В противном случае, когда texture основана на неперевернутых данных изображения, передавайте OriginTopLeft. Это более эффективно, чем использование QImage::mirrored().

См. также targetTransform(), Origin и bind().

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)

Выполняет блит с исходной текстурой texture.

targetTransform задаёт применяемое преобразование. Обычно оно генерируется функцией-помощником targetTransform().

sourceTransform задаёт преобразование, применяемое к источнику. Это позволяет использовать только подпрямоугольник исходной текстуры. Обычно оно генерируется функцией-помощником sourceTransform().

См. также sourceTransform(), targetTransform(), Origin и bind().

bool QOpenGLTextureBlitter::create()

Инициализирует графические ресурсы, используемые блиттером.

Возвращает true при успехе, false в случае ошибки. Ошибки могут возникать, когда нет текущего контекста OpenGL на текущей нити или при неудачной компиляции шейдеров по какой-либо причине.

См. также isCreated() и destroy().

void QOpenGLTextureBlitter::destroy()

Освобождает все графические ресурсы, удерживаемые блиттером. Предполагается, что контекст OpenGL, или другой контекст, совместно использующий ресурсы с ним, который был текущим на нити при вызове create(), является текущим.

Функция не имеет эффекта, если блиттер не находится в созданном состоянии.

См. также create().

bool QOpenGLTextureBlitter::isCreated() const

Возвращает true , если create() был вызван и выполнен успешно. false в противном случае.

См. также create() и destroy().

void QOpenGLTextureBlitter::release()

Освобождает графические ресурсы, используемые блиттером.

См. также bind().

void QOpenGLTextureBlitter::setOpacity(float opacity)

Изменяет непрозрачность на opacity. Значение по умолчанию — 1.0.

Примечание: блиттер не изменяет состояние смешивания. От пользователя функции blit() требуется обеспечить корректные настройки смешивания.

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

Устанавливает значение swizzle для включения/выключения перестановки красного и синего цветовых каналов. Преобразование BGRA в RGBA (происходит в шейдере на GPU, а не в медленной операции на CPU) может быть полезно, когда исходная текстура содержит данные из QImage с форматом, таким как QImage::Format_ARGB32, который соответствует BGRA на системах с малым порядком байтов.

По умолчанию перестановка красного и синего каналов отключена, так как это необходимо для текстуры, прикрепленной к объекту фреймбуфера или текстуре, основанной на формате байтового порядка QImage (например, QImage::Format_RGBA8888).

[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)

Вычисляет 3x3 матрицу, подходящую в качестве входных данных для blit(). Используется при необходимости использования только части текстуры в блите.

subTexture — желаемый исходный прямоугольник в пикселях, textureSize — полная ширина и высота данных текстуры. origin определяет ориентацию данных изображения относительно оси Y.

См. также blit() и Origin.

bool QOpenGLTextureBlitter::supportsExternalOESTarget() const

Возвращает true если bind() принимает GL_TEXTURE_EXTERNAL_OES в качестве аргумента целевого объекта.

См. также bind() и blit().

[static] QMatrix4x4 QOpenGLTextureBlitter::targetTransform(const QRectF &target, const QRect &viewport)

Вычисляет матрицу преобразования целевого объекта, подходящую для blit().

target — целевой прямоугольник в пикселях. viewport описывает исходные размеры и в большинстве случаев устанавливается в (0, 0, ширина_изображения, высота_изображения).

Для выходных данных без масштабирования размеры target и viewport должны совпадать.

См. также blit().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qopengltextureblitter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API