Spec-Zone.ru › Qt 5.9

Класс QOpenGLTextureBlitter

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

Заголовок: #include <QOpenGLTextureBlitter>
qmake: QT += gui
С момента: Qt 5.8
  • Список всех членов, включая унаследованные

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

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

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

QOpenGLTextureBlitter()
~QOpenGLTextureBlitter()
void bind(GLenum target = GL_TEXTURE_2D)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, 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, Origin origin)
QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport)

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

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

Рисование текстурированных квадов для отображения содержимого текстуры на экране — распространенная операция при разработке 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, 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 (происходящее в шейдере на графическом процессоре, а не медленным преобразованием на процессоре) может быть полезным, когда исходная текстура содержит данные из QImage с форматом, например, QImage::Format_ARGB32, который отображается как BGRA на системах с малой эндианностью.

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

[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, 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-5.9/qopengltextureblitter.html

Spec-Zone.ru

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