QGLFramebufferObject Class Reference
[QtOpenGL module]
该QGLFramebufferObject类封装了一个OpenGL帧缓冲区对象。More…
继承QPaintDevice。
Types
enum Attachment { NoAttachment, CombinedDepthStencil, Depth }
Methods
__init__ (self, QSize size, int target = GL_TEXTURE_2D)
__init__ (self, int width, int height, int target = GL_TEXTURE_2D)
__init__ (self, QSize size, Attachment attachment, int target = GL_TEXTURE_2D, int internalFormat = GL_RGBA8)
__init__ (self, int width, int height, Attachment attachment, int target = GL_TEXTURE_2D, int internalFormat = GL_RGBA8)
__init__ (self, QSize size, QGLFramebufferObjectFormat format)
__init__ (self, int width, int height, QGLFramebufferObjectFormat format)
Attachment attachment (self)
bool bind (self)
drawTexture (self, QRectF target, int textureId, int textureTarget = GL_TEXTURE_2D)
drawTexture (self, QPointF point, int textureId, int textureTarget = GL_TEXTURE_2D)
QGLFramebufferObjectFormat format (self)
int handle (self)
bool isBound (self)
bool isValid (self)
int metric (self, QPaintDevice.PaintDeviceMetric metric)
QPaintEngine paintEngine (self)
bool release (self)
QSize size (self)
int texture (self)
QImage toImage (self)
Static Methods
blitFramebuffer (QGLFramebufferObject target, QRect targetRect, QGLFramebufferObject source, QRect sourceRect, int buffers = GL_COLOR_BUFFER_BIT, int filter = GL_NEAREST)
bool hasOpenGLFramebufferBlit ()
bool hasOpenGLFramebufferObjects ()
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的优点:
- 一个帧缓冲对象不需要一个单独的渲染上下文,因此切换渲染目标时不会发生上下文切换。存在参与切换目标的开销,但一般它比上下文切换到一个pbuffer的便宜。
- 渲染到动态纹理(即渲染到纹理功能)适用于所有平台。没有必要做明确的副本从一个渲染缓冲区调用到一个纹理,因为有必要对那些不支持系统
render_texture
扩展名。 - 它可以连接多个渲染缓冲区(或纹理对象)到相同的帧缓冲区对象,并呈现给所有的人都没有做上下文切换。
- 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纹理绑定到给定缓冲区width和height。
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帧缓冲区对象width和height基于所提供的format。
QGLFramebufferObject.__init__ (self, QSize size, QGLFramebufferObjectFormat format)
这是一个重载函数。
构造一个OpenGL帧缓冲区对象和纹理绑定到给定缓冲区width和height。
该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。
]($docs-qglframebufferobject.html#Attachment-enum)
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_BIT
,GL_DEPTH_BUFFER_BIT
和GL_STENCIL_BUFFER_BIT
。任何未在源和目标缓冲器呈现两个缓冲器类型被忽略。
该sourceRect和targetRect矩形可以有不同的大小,在这种情况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 。
]($docs-qglframebufferobjectformat.html)
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可以在自己的总帐代码绑定作为一个正常的质感。
如果一个多重采样帧缓冲区对象被使用,那么从这个函数返回的值将是无效的。
](qsize.html)
QImage QGLFramebufferObject.toImage (self)