Spec-Zone.ru › Qt

Класс 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 на системах с little-endian.

По умолчанию перестановка красного и синего каналов отключена, так как она требуется для текстуры, прикреплённой к объекту фреймбуфера или текстуре, основанной на порядке байтов 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.2/qopengltextureblitter.html

Spec-Zone.ru

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