Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QGLFramebufferObject Class Reference
[QtOpenGL module]

该QGLFramebufferObject类封装了一个OpenGL帧缓冲区对象。More...

继承QPaintDevice

Types

Methods

Static Methods


Detailed Description

该QGLFramebufferObject类封装了一个OpenGL帧缓冲区对象。

该QGLFramebufferObject类封装了一个OpenGL帧缓冲区对象,由定义GL_EXT_framebuffer_object扩展名。此外,它提供了一种渲染表面,可以涂在用QPainter,呈现给使用本地GL调用,或两者兼而有之。这种表面可以在自己的GL绘图代码的约束,并作为一个普通的纹理。默认情况下, QGLFramebufferObject类生成一个2D GL纹理(使用GL_TEXTURE_2D目标) ,它是用来作为内部渲染对象。

It is important to have a current GL context when creating a QGLFramebufferObject, otherwise initialization will fail.

OpenGL的帧缓冲对象和pbuffers的(见QGLPixelBuffer)都可以用来渲染到屏幕外表面,但也有许多与使用帧缓冲区对象而不是pbuffers的优点:

  1. 一个帧缓冲对象不需要一个单独的渲染上下文,因此切换渲染目标时不会发生上下文切换。存在参与切换目标的开销,但一般它比上下文切换到一个pbuffer的便宜。
  2. 渲染到动态纹理(即渲染到纹理功能)适用于所有平台。没有必要做明确的副本从一个渲染缓冲区调用到一个纹理,因为有必要对那些不支持系统render_texture扩展名。
  3. 它可以连接多个渲染缓冲区(或纹理对象)到相同的帧缓冲区对象,并呈现给所有的人都没有做上下文切换。
  4. OpenGL的帧缓冲扩展是一个纯粹的GL扩展,不依赖于系统WGL ,鳄鱼卹,或GLX部分。这使得使用帧缓冲对象更便于携带。

当使用一个QPainter画一个QGLFramebufferObject的QGLFramebufferObject与创建时要注意CombinedDepthStencil附件QPainter要能正确呈现。请注意,您需要使用绘图时创建每像素多于一个样本的QGLFramebufferObject对原语进行反锯齿QPainter。要创建一个多重采样帧缓冲区对象,你应该使用采取QGLFramebufferObject参数的构造函数之一,并设置QGLFramebufferObject.samples ()属性设置为一个非零值。

当画到QGLFramebufferObject使用QPainter,目前GL上下文的状态将由绘图引擎进行修改,以反映其需求。应用程序不应依赖于GL状态被重置到其原始条件,特别是目前的着色器程序,吉尔口中,纹理单元和绘图模式。

对于多重采样帧缓冲对象的颜色渲染在创建缓冲区,否则创建具有指定目标的质感纹理。色彩渲染缓冲器或纹理将具有指定的内部格式,并且将被绑定到GL_COLOR_ATTACHMENT0附件中的帧缓冲区对象。

如果你想使用一个帧缓冲对象启用多重采样作为纹理,你首先需要从它复制到使用QGLContext.blitFramebuffer ( )一个普通帧缓冲区对象。

Threading

由于Qt的4.8的,有可能用来绘制成QGLFramebufferObject一个QPainter在一个单独的线程。需要注意的是OpenGL的2.0或OpenGL ES 2.0的是需要这种合作。此外, X11下,有必要设置Qt.AA_X11InitThreads应用属性。


Type Documentation

QGLFramebufferObject.Attachment

该枚举类型是用来配置连接到帧缓冲对象被创建时,它的深度和模板缓冲区。

Constant Value Description
QGLFramebufferObject.NoAttachment 0 没有附件被添加到帧缓冲区对象。需要注意的是渲染到帧缓冲区对象,没有任何深度或模板缓冲区时, OpenGL的深度和模板测试将无法正常工作。这是默认值。
QGLFramebufferObject.CombinedDepthStencil 1 如果GL_EXT_packed_depth_stencil扩展目前,结合深度和模板缓存连接。如果扩展名不存在,只有深度缓冲区连接。
QGLFramebufferObject.Depth 2 深度缓冲连接到帧缓冲区对象。

这个枚举被引入或修改的Qt 4.3 。

See also attachment( ) 。


Method Documentation

QGLFramebufferObject.__init__ (self, QSize size, int target = GL_TEXTURE_2D)

构造一个OpenGL帧缓冲区对象和一个2D GL纹理结合到大小的缓冲size。纹理被绑定到GL_COLOR_ATTACHMENT0针对在帧缓冲对象。

target参数用于指定总帐质感目标。默认的目标是GL_TEXTURE_2D。请记住,GL_TEXTURE_2D纹理必须有2宽度和高度(如256×512个)的功率,除非你正在使用的OpenGL 2.0或更高版本。

默认情况下,没有深度和模板缓冲区连接。这种行为可以使用重载的构造函数之一进行切换。

默认的内部纹理格式是GL_RGBA8对于桌面OpenGL ,和GL_RGBA为OpenGL / ES 。

你有一个当前的GL上下文创建时设置是很重要的QGLFramebufferObject,否则初始化将失败。

See also size( )texture()和attachment( ) 。

QGLFramebufferObject.__init__ (self, int width, int height, int target = GL_TEXTURE_2D)

这是一个重载函数。

构造一个OpenGL帧缓冲区对象和GL 2D纹理绑定到给定缓冲区widthheight

See also size()和texture( ) 。

QGLFramebufferObject.__init__ (self, QSize size, Attachment attachment, int target = GL_TEXTURE_2D, int internalFormat = GL_RGBA8)

这是一个重载函数。

构造给定一个OpenGL帧缓冲区对象size基于所提供的format

QGLFramebufferObject.__init__ (self, int width, int height, Attachment attachment, int target = GL_TEXTURE_2D, int internalFormat = GL_RGBA8)

这是一个重载函数。

构造给定一个OpenGL帧缓冲区对象widthheight基于所提供的format

QGLFramebufferObject.__init__ (self, QSize size, QGLFramebufferObjectFormat format)

这是一个重载函数。

构造一个OpenGL帧缓冲区对象和纹理绑定到给定缓冲区widthheight

attachment参数描述了深度/模板缓存配置,target纹理和目标internal_format内部纹理格式。默认质感的目标是GL_TEXTURE_2D,而默认的内部格式是GL_RGBA8桌面OpenGL和GL_RGBA为OpenGL / ES 。

See also size( )texture()和attachment( ) 。

QGLFramebufferObject.__init__ (self, int width, int height, QGLFramebufferObjectFormat format)

这是一个重载函数。

构造一个OpenGL帧缓冲区对象和纹理绑定到给定缓冲区size

attachment参数描述了深度/模板缓存配置,target纹理和目标internal_format内部纹理格式。默认质感的目标是GL_TEXTURE_2D,而默认的内部格式是GL_RGBA8桌面OpenGL和GL_RGBA为OpenGL / ES 。

See also size( )texture()和attachment( ) 。

Attachment QGLFramebufferObject.attachment (self)

返回附加到该帧缓冲区对象的深度和模具缓冲器的状态。

bool QGLFramebufferObject.bind (self)

从默认的开关渲染,窗口提供系统的framebuffer来此帧缓冲区对象。成功时返回真,否则返回False。

See also release( ) 。

QGLFramebufferObject.blitFramebuffer (QGLFramebufferObject target, QRect targetRect, QGLFramebufferObject source, QRect sourceRect, int buffers = GL_COLOR_BUFFER_BIT, int filter = GL_NEAREST)

从位块传输sourceRect矩形的source帧缓冲区对象的targetRect矩形的target帧缓冲区对象。

If source or target是0 ,则默认帧缓冲区将被用于一个帧缓冲对象作为源或目标,而不是分别。

buffers参数应该包括任何组合的掩模GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BITGL_STENCIL_BUFFER_BIT。任何未在源和目标缓冲器呈现两个缓冲器类型被忽略。

sourceRecttargetRect矩形可以有不同的大小,在这种情况buffers不应该包含GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT。该filter参数应该被设置为GL_LINEAR or GL_NEAREST以及指定是否线性的或最接近的内插时,执行缩放应该被使用。

If source等于target副本相同的缓冲区内进行。结果是不确定的,如果源和目标矩形重叠,并且具有不同的尺寸。的大小也必须相同,如果任何帧缓冲的对象是多重采样的帧缓冲区。

请注意,如果启用了剪刀测试将限制位块传输的区域。

此功能不会有任何影响,除非hasOpenGLFramebufferBlit( )返回True 。

此功能被引入Qt的4.6 。

See also hasOpenGLFramebufferBlit( ) 。

QGLFramebufferObject.drawTexture (self, QRectF target, int textureId, int textureTarget = GL_TEXTURE_2D)

绘制给定的质感,textureId向给定目标矩形,target在OpenGL的模型空间。该textureTarget应该是一个2D纹理的目标。

帧缓冲对象应该调用这个函数时的约束。

等同于相应的QGLContext.drawTexture( ) 。

此功能被引入Qt的4.4 。

QGLFramebufferObject.drawTexture (self, QPointF point, int textureId, int textureTarget = GL_TEXTURE_2D)

绘制给定的质感,textureId,在给定的point在OpenGL的模型空间。该textureTarget应该是一个2D纹理的目标。

帧缓冲对象应该调用这个函数时的约束。

等同于相应的QGLContext.drawTexture( ) 。

此功能被引入Qt的4.4 。

QGLFramebufferObjectFormat QGLFramebufferObject.format (self)

返回此帧缓冲区对象的格式。

int QGLFramebufferObject.handle (self)

返回此帧缓冲区对象的GL帧缓冲对象句柄(由返回glGenFrameBuffersEXT()功能)。这个句柄可以被用来连接新的图像或缓冲区的帧缓冲。用户是负责清理和销毁这些对象。

bool QGLFramebufferObject.hasOpenGLFramebufferBlit ()

返回True如果OpenGL的GL_EXT_framebuffer_blit扩展出现在这个系统上,否则返回False 。

此功能被引入Qt的4.6 。

See also blitFramebuffer( ) 。

bool QGLFramebufferObject.hasOpenGLFramebufferObjects ()

返回True如果OpenGL的GL_EXT_framebuffer_object扩展出现在这个系统上,否则返回False 。

bool QGLFramebufferObject.isBound (self)

如果帧缓冲区对象当前绑定到一个上下文,否则返回False ,则返回True 。

此功能被引入Qt的4.5 。

bool QGLFramebufferObject.isValid (self)

返回True如果帧缓冲对象是有效的。

如果初始化进程失败时,使用者将一个无效缓存到帧缓冲区对象,或者两种宽度/高度的非功率被指定为纹理大小,如果纹理是目标帧缓冲可以成为无效GL_TEXTURE_2D。两条限制非电力不适用,如果OpenGL版本为2.0或更高版本,或者如果GL_ARB_texture_non_power_of_two扩展存在。

帧缓冲也可以成为无效的,如果QGLContext该帧缓存创建内被破坏,并且没有其他共享的上下文,可以采取在帧缓冲区的所有权。

int QGLFramebufferObject.metric (self, QPaintDevice.PaintDeviceMetric metric)

从重新实现QPaintDevice.metric( ) 。

QPaintEngine QGLFramebufferObject.paintEngine (self)

从重新实现QPaintDevice.paintEngine( ) 。

bool QGLFramebufferObject.release (self)

切换渲染回默认的,窗口提供系统的framebuffer 。成功时返回真,否则返回False。

See also bind( ) 。

QSize QGLFramebufferObject.size (self)

返回附加到该帧缓冲区对象的纹理的大小。

int QGLFramebufferObject.texture (self)

返回纹理ID为连接作为默认渲染目标在此帧缓冲区对象的质感。这种质地的id可以在自己的总帐代码绑定作为一个正常的质感。

如果一个多重采样帧缓冲区对象被使用,那么从这个函数返回的值将是无效的。

QImage QGLFramebufferObject.toImage (self)

返回此帧缓冲区对象的内容作为QImage




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5