PySide6.QtOpenGL.QOpenGLTextureBlitter

class QOpenGLTextureBlitter

QOpenGLTextureBlitter 类提供了一种通过 OpenGL 绘制纹理四边形的便捷方式。更多

概要

方法

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

绘制带纹理的四边形,以便将纹理内容显示在屏幕上,是开发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();
}

blitter 实现了适用于 GLSL 1.00(适用于 OpenGL (ES) 2.x 和新版 OpenGL 的兼容性配置文件)和版本 150(适用于 OpenGL 3.2 及更新版本的核心配置文件上下文)的 GLSL 着色器。

class Origin

常量

描述

QOpenGLTextureBlitter.OriginBottomLeft

表示纹理中的数据遵循OpenGL的坐标系约定,意味着Y轴从下到上运行。

QOpenGLTextureBlitter.OriginTopLeft

表示纹理中的数据Y轴从上到下运行,这是典型的未翻转图像数据。

另请参阅

blit()

__init__()

构造一个新的 QOpenGLTextureBlitter 实例。

注意

构造函数中没有初始化图形资源。这使得将普通的QOpenGLTextureBlitter成员放入类是安全的,因为依赖于OpenGL上下文的实际初始化仅在create()中发生。

bind([target=GL_TEXTURE_2D])
Parameters:

目标 – 整数

绑定由blitter使用的图形资源。在调用blit()之前必须调用此函数。在调用bind()和blit()之间应避免修改OpenGL状态的代码,否则可能会产生冲突。

target 是源纹理的纹理目标,必须是 GL_TEXTURE_2DGL_TEXTURE_RECTANGLEGL_OES_EGL_image_external

另请参阅

release() blit()

blit(texture, targetTransform, sourceOrigin)
Parameters:
blit(texture, targetTransform, sourceTransform)
Parameters:
create()
Return type:

布尔

初始化由blitter使用的图形资源。

如果成功则返回 true,如果失败则返回 false。失败可能发生在当前线程上没有当前的 OpenGL 上下文,或者由于某些原因着色器编译失败时。

另请参阅

isCreated() destroy()

destroy()

释放由blitter持有的所有图形资源。假设在调用create()时线程上的OpenGL上下文或与之共享资源的另一个上下文是当前的。

当blitter未处于创建状态时,该函数无效。

另请参阅

create()

isCreated()
Return type:

布尔

如果调用了create()并且成功,则返回true。否则返回false

另请参阅

create() destroy()

release()

解除绑定由blitter使用的图形资源。

另请参阅

bind()

setOpacity(opacity)
Parameters:

opacity – 浮点数

将不透明度更改为 opacity。默认不透明度为 1.0。

注意

blitter不会改变混合状态。调用blit()的人需要确保正确的混合设置是激活的。

setRedBlueSwizzle(swizzle)
Parameters:

swizzle – 布尔值

设置是否启用红色和蓝色颜色通道的交换为swizzle。当源纹理包含来自QImage的数据时,例如QImage::Format_ARGB32格式,在小端系统上映射为BGRA,进行BGRA到RGBA的转换(在GPU的着色器中进行,而不是在CPU端进行缓慢的转换)可能很有用。

默认情况下,红蓝交换被禁用,因为这是附加到帧缓冲对象或基于字节顺序的QImage格式(如QImage::Format_RGBA8888)的纹理所需要的。

static sourceTransform(subTexture, textureSize, origin)
Parameters:
Return type:

QMatrix3x3

计算一个适合作为blit()输入的3x3矩阵。当只需要使用纹理的一部分进行blit时使用此方法。

subTexture 是所需的源矩形,单位为像素,textureSize 是纹理数据的完整宽度和高度。origin 指定了图像数据在Y轴方向上的方向。

另请参阅

blit() Origin

supportsExternalOESTarget()
Return type:

布尔

bind()接受GL_TEXTURE_EXTERNAL_OES作为其目标参数时,返回true

另请参阅

bind() blit()

supportsRectangleTarget()
Return type:

布尔

bind()接受GL_TEXTURE_RECTANGLE作为其目标参数时,返回true

另请参阅

bind() blit()

static targetTransform(target, viewport)
Parameters:
Return type:

QMatrix4x4

计算适合blit()的目标变换。

target 是目标矩形,单位为像素。viewport 描述了源尺寸,在大多数情况下将设置为 (0, 0, 图像宽度, 图像高度)。

对于未缩放的输出,targetviewport 的大小应匹配。

另请参阅

blit()