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 实例。

注意

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

bind([target=GL_TEXTURE_2D])#
参数:

target – int

将 Blitter 使用的图形资源绑定。在调用 blit() 之前必须调用此方法。应在 bind() 调用和 blit() 之间避免修改 OpenGL 状态的代码,否则可能会出现冲突。

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

另见

release() blit()

blit(texture, targetTransform, sourceOrigin)#
参数:
blit(texture, targetTransform, sourceTransform)
参数:
create()#
返回类型:

bool

初始化 Blitter 使用的图形资源。

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

destroy()#

释放所有由绘制器占用的图形资源。假设调用 create() 时,线程上的当前 OpenGL 上下文,或者与其共享资源的其他上下文是当前的。

当绘制器不在已创建状态时,此函数无任何效果。

另见

create()

isCreated()#
返回类型:

bool

如果调用过 create() 并成功,则返回 true;否则返回 false

release()#

解除绘制器使用的图形资源的绑定。

另见

bind()

setOpacity(opacity)#
参数:

opacity – float

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

注意

绘制器不会改变混合状态。确保激活正确的混合设置是 blit() 调用者的责任。

setRedBlueSwizzle(swizzle)#
参数:

swizzle – bool

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

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

static sourceTransform(subTexture, textureSize, origin)#
参数:
返回类型:

QMatrix3x3

计算一个 3x3 矩阵,该矩阵适合作为 blit() 的输入。当仅要在 blit 中使用纹理的一部分时,会用到它。

subTexture 是需要的源像素矩形,textureSize 是纹理数据的完整宽度和高度。 origin 指定当考虑Y轴时的图像数据方向。

另见

blit() Origin

supportsExternalOESTarget()#
返回类型:

bool

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

另见

bind() blit()

supportsRectangleTarget()#
返回类型:

bool

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

另见

bind() blit()

static targetTransform(target, viewport)#
参数:
返回类型:

QMatrix4x4

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

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

对于未缩放的输出,目标的大小和视口应该匹配。

另见

blit()