PySide6.QtOpenGL.QOpenGLTextureBlitter¶
- class QOpenGLTextureBlitter¶
QOpenGLTextureBlitter类提供了一种通过 OpenGL 绘制纹理四边形的便捷方式。更多…概要¶
方法¶
def
__init__()def
bind()def
blit()def
create()def
destroy()def
isCreated()def
release()def
setOpacity()
静态函数¶
注意
本文档可能包含从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轴从上到下运行,这是典型的未翻转图像数据。
另请参阅
- __init__()¶
构造一个新的
QOpenGLTextureBlitter实例。注意
构造函数中没有初始化图形资源。这使得将普通的
QOpenGLTextureBlitter成员放入类是安全的,因为依赖于OpenGL上下文的实际初始化仅在create()中发生。- bind([target=GL_TEXTURE_2D])¶
- Parameters:
目标 – 整数
绑定由blitter使用的图形资源。在调用
blit()之前必须调用此函数。在调用bind()和blit()之间应避免修改OpenGL状态的代码,否则可能会产生冲突。target是源纹理的纹理目标,必须是GL_TEXTURE_2D、GL_TEXTURE_RECTANGLE或GL_OES_EGL_image_external。- blit(texture, targetTransform, sourceOrigin)¶
- Parameters:
texture – int
targetTransform –
QMatrix4x4sourceOrigin –
Origin
- blit(texture, targetTransform, sourceTransform)
- Parameters:
texture – int
targetTransform –
QMatrix4x4sourceTransform –
QMatrix3x3
- create()¶
- Return type:
布尔
初始化由blitter使用的图形资源。
如果成功则返回
true,如果失败则返回false。失败可能发生在当前线程上没有当前的 OpenGL 上下文,或者由于某些原因着色器编译失败时。另请参阅
- destroy()¶
释放由blitter持有的所有图形资源。假设在调用
create()时线程上的OpenGL上下文或与之共享资源的另一个上下文是当前的。当blitter未处于创建状态时,该函数无效。
另请参阅
- isCreated()¶
- Return type:
布尔
如果调用了
create()并且成功,则返回true。否则返回false。- release()¶
解除绑定由blitter使用的图形资源。
另请参阅
- 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:
计算一个适合作为
blit()输入的3x3矩阵。当只需要使用纹理的一部分进行blit时使用此方法。subTexture是所需的源矩形,单位为像素,textureSize是纹理数据的完整宽度和高度。origin指定了图像数据在Y轴方向上的方向。- supportsExternalOESTarget()¶
- Return type:
布尔
当
bind()接受GL_TEXTURE_EXTERNAL_OES作为其目标参数时,返回true。- supportsRectangleTarget()¶
- Return type:
布尔
当
bind()接受GL_TEXTURE_RECTANGLE作为其目标参数时,返回true。- static targetTransform(target, viewport)¶
- Parameters:
- Return type:
计算适合
blit()的目标变换。target是目标矩形,单位为像素。viewport描述了源尺寸,在大多数情况下将设置为 (0, 0, 图像宽度, 图像高度)。对于未缩放的输出,
target和viewport的大小应匹配。另请参阅