QGLPixelBuffer

Synopsis

Functions

Static functions

Detailed Description

The PySide.QtOpenGL.QGLPixelBuffer class encapsulates an OpenGL pbuffer.

Rendering into a pbuffer is normally done using full hardware acceleration. This can be significantly faster than rendering into a PySide.QtGui.QPixmap .

There are three approaches to using this class:

Threading

As of Qt 4.8, it’s possible to render into a PySide.QtOpenGL.QGLPixelBuffer using a PySide.QtGui.QPainter in a separate thread. Note that OpenGL 2.0 or OpenGL ES 2.0 is required for this to work. Also, under X11, it’s necessary to set the Qt.AA_X11InitThreads application attribute.

Pbuffers are provided by the OpenGL pbuffer extension; call hasOpenGLPbuffer() to find out if the system provides pbuffers.

See also

Pbuffers Example

class PySide.QtOpenGL.QGLPixelBuffer(size[, format=QGLFormat.defaultFormat()[, shareWidget=None]])
class PySide.QtOpenGL.QGLPixelBuffer(width, height[, format=QGLFormat.defaultFormat()[, shareWidget=None]])
Parameters:

Constructs an OpenGL pbuffer of the given size . If no format is specified, the default format is used. If the shareWidget parameter points to a valid PySide.QtOpenGL.QGLWidget , the pbuffer will share its context with shareWidget .

If you intend to bind this pbuffer as a dynamic texture, the width and height components of size must be powers of two (e.g., 512 x 128).

This is an overloaded function.

Constructs an OpenGL pbuffer with the width and height . If no format is specified, the default format is used. If the shareWidget parameter points to a valid PySide.QtOpenGL.QGLWidget , the pbuffer will share its context with shareWidget .

If you intend to bind this pbuffer as a dynamic texture, the width and height components of size must be powers of two (e.g., 512 x 128).

PySide.QtOpenGL.QGLPixelBuffer.bindTexture(fileName)
Parameters:fileName – unicode
Return type:PySide.QtOpenGL.GLuint

This is an overloaded function.

Reads the DirectDrawSurface (DDS) compressed file fileName and generates a 2D GL texture from it.

Equivalent to calling QGLContext.bindTexture() .

PySide.QtOpenGL.QGLPixelBuffer.bindTexture(pixmap[, target=0x0DE1])
Parameters:
Return type:

PySide.QtOpenGL.GLuint

This is an overloaded function.

Generates and binds a 2D GL texture based on pixmap .

Equivalent to calling QGLContext.bindTexture() .

PySide.QtOpenGL.QGLPixelBuffer.bindTexture(image[, target=0x0DE1])
Parameters:
Return type:

PySide.QtOpenGL.GLuint

Generates and binds a 2D GL texture to the current context, based on image . The generated texture id is returned and can be used in later glBindTexture() calls.

The target parameter specifies the texture target.

Equivalent to calling QGLContext.bindTexture() .

PySide.QtOpenGL.QGLPixelBuffer.bindToDynamicTexture(texture)
Parameters:texturePySide.QtOpenGL.GLuint
Return type:PySide.QtCore.bool

Binds the texture specified by texture_id to this pbuffer. Returns true on success; otherwise returns false.

The texture must be of the same size and format as the pbuffer.

To unbind the texture, call PySide.QtOpenGL.QGLPixelBuffer.releaseFromDynamicTexture() . While the texture is bound, it is updated automatically when the pbuffer contents change, eliminating the need for additional copy operations.

Example:

pbuffer QGLPixelBuffer(...)
...
pbuffer.makeCurrent()
dynamicTexture = pbuffer.generateDynamicTexture()
pbuffer.bindToDynamicTexture(dynamicTexture)
...
pbuffer.releaseFromDynamicTexture()

Warning

This function uses the render_texture extension, which is currently not supported under X11. An alternative that works on all systems (including X11) is to manually copy the pbuffer contents to a texture using PySide.QtOpenGL.QGLPixelBuffer.updateDynamicTexture() .

Warning

For the PySide.QtOpenGL.QGLPixelBuffer.bindToDynamicTexture() call to succeed on the Mac OS X, the pbuffer needs a shared context, i.e. the PySide.QtOpenGL.QGLPixelBuffer must be created with a share widget.

PySide.QtOpenGL.QGLPixelBuffer.deleteTexture(texture_id)
Parameters:texture_idPySide.QtOpenGL.GLuint

Removes the texture identified by texture_id from the texture cache.

Equivalent to calling QGLContext.deleteTexture() .

PySide.QtOpenGL.QGLPixelBuffer.doneCurrent()
Return type:PySide.QtCore.bool

Makes no context the current OpenGL context. Returns true on success; otherwise returns false.

PySide.QtOpenGL.QGLPixelBuffer.drawTexture(point, textureId[, textureTarget=0x0DE1])
Parameters:
  • pointPySide.QtCore.QPointF
  • textureIdPySide.QtOpenGL.GLuint
  • textureTargetPySide.QtOpenGL.GLenum

Draws the given texture, textureId , at the given point in OpenGL model space. The textureTarget parameter should be a 2D texture target.

Equivalent to the corresponding QGLContext.drawTexture() .

PySide.QtOpenGL.QGLPixelBuffer.drawTexture(target, textureId[, textureTarget=0x0DE1])
Parameters:
  • targetPySide.QtCore.QRectF
  • textureIdPySide.QtOpenGL.GLuint
  • textureTargetPySide.QtOpenGL.GLenum

Draws the given texture, textureId , to the given target rectangle, target , in OpenGL model space. The textureTarget should be a 2D texture target.

Equivalent to the corresponding QGLContext.drawTexture() .

PySide.QtOpenGL.QGLPixelBuffer.format()
Return type:PySide.QtOpenGL.QGLFormat

Returns the format of the pbuffer. The format may be different from the one that was requested.

PySide.QtOpenGL.QGLPixelBuffer.generateDynamicTexture()
Return type:PySide.QtOpenGL.GLuint
PySide.QtOpenGL.QGLPixelBuffer.handle()
Return type:PySide.QtCore.Qt::HANDLE

Returns the native pbuffer handle.

static PySide.QtOpenGL.QGLPixelBuffer.hasOpenGLPbuffers()
Return type:PySide.QtCore.bool

Returns true if the OpenGL pbuffer extension is present on this system; otherwise returns false.

PySide.QtOpenGL.QGLPixelBuffer.isValid()
Return type:PySide.QtCore.bool

Returns true if this pbuffer is valid; otherwise returns false.

PySide.QtOpenGL.QGLPixelBuffer.makeCurrent()
Return type:PySide.QtCore.bool

Makes this pbuffer the current OpenGL rendering context. Returns true on success; otherwise returns false.

PySide.QtOpenGL.QGLPixelBuffer.releaseFromDynamicTexture()

Releases the pbuffer from any previously bound texture.

PySide.QtOpenGL.QGLPixelBuffer.size()
Return type:PySide.QtCore.QSize

Returns the size of the pbuffer.

PySide.QtOpenGL.QGLPixelBuffer.toImage()
Return type:PySide.QtGui.QImage

Returns the contents of the pbuffer as a PySide.QtGui.QImage .

PySide.QtOpenGL.QGLPixelBuffer.updateDynamicTexture(texture_id)
Parameters:texture_idPySide.QtOpenGL.GLuint

Copies the pbuffer contents into the texture specified with texture_id .

The texture must be of the same size and format as the pbuffer.

Example:

pbuffer QGLPixelBuffer(...)
...
pbuffer.makeCurrent()
dynamicTexture = pbuffer.generateDynamicTexture()
...
pbuffer.updateDynamicTexture(dynamicTexture)

An alternative on Windows and Mac OS X systems that support the render_texture extension is to use PySide.QtOpenGL.QGLPixelBuffer.bindToDynamicTexture() to get dynamic updates of the texture.