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