QGLPixelBuffer

The QGLPixelBuffer class encapsulates an OpenGL pbuffer. More

Inheritance diagram of PySide2.QtOpenGL.QGLPixelBuffer

Synopsis

Functions

Static functions

Detailed Description

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

There are three approaches to using this class:

  1. We can draw into the pbuffer and convert it to a QImage using toImage() . This is normally much faster than calling renderPixmap() .

  2. We can draw into the pbuffer and copy the contents into an OpenGL texture using updateDynamicTexture() . This allows us to create dynamic textures and works on all systems with pbuffer support.

  3. On systems that support it, we can bind the pbuffer to an OpenGL texture. The texture is then updated automatically when the pbuffer contents change, eliminating the need for additional copy operations. This is supported only on Windows and macOS systems that provide the render_texture extension. Note that under Windows, a multi-sampled pbuffer can’t be used in conjunction with the render_texture extension. If a multi-sampled pbuffer is requested under Windows, the render_texture extension is turned off for that pbuffer.

Note

This class has been deprecated, use QOpenGLFramebufferObject for offscreen rendering.

Threading

As of Qt 4.8, it’s possible to render into a QGLPixelBuffer using a QPainter in a separate thread. Note that OpenGL 2.0 or OpenGL ES 2.0 is required for this to work.

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

class PySide2.QtOpenGL.QGLPixelBuffer(size[, format=QGLFormat.defaultFormat()[, shareWidget=None]])

PySide2.QtOpenGL.QGLPixelBuffer(width, height[, format=QGLFormat.defaultFormat()[, shareWidget=None]])

param format:

PySide2.QtOpenGL.QGLFormat

param size:

PySide2.QtCore.QSize

param shareWidget:

PySide2.QtOpenGL.QGLWidget

param width:

int

param height:

int

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 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).

See also

size() format()

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 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).

See also

size() format()

PySide2.QtOpenGL.QGLPixelBuffer.bindTexture(pixmap[, target=GL_TEXTURE_2D])
Parameters:
Return type:

GLuint

PySide2.QtOpenGL.QGLPixelBuffer.bindTexture(fileName)
Parameters:

fileName – str

Return type:

GLuint

This is an overloaded function.

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

Equivalent to calling bindTexture() .

See also

deleteTexture()

PySide2.QtOpenGL.QGLPixelBuffer.bindTexture(image[, target=GL_TEXTURE_2D])
Parameters:
Return type:

GLuint

PySide2.QtOpenGL.QGLPixelBuffer.bindToDynamicTexture(texture)
Parameters:

textureGLuint

Return type:

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 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 updateDynamicTexture() .

Warning

For the call to succeed on the macOS, the pbuffer needs a shared context, i.e. the QGLPixelBuffer must be created with a share widget.

PySide2.QtOpenGL.QGLPixelBuffer.context()
Return type:

PySide2.QtOpenGL.QGLContext

Returns the context of this pixelbuffer.

PySide2.QtOpenGL.QGLPixelBuffer.deleteTexture(texture_id)
Parameters:

texture_idGLuint

Removes the texture identified by texture_id from the texture cache.

Equivalent to calling deleteTexture() .

PySide2.QtOpenGL.QGLPixelBuffer.doneCurrent()
Return type:

bool

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

PySide2.QtOpenGL.QGLPixelBuffer.drawTexture(point, textureId[, textureTarget=GL_TEXTURE_2D])
Parameters:
PySide2.QtOpenGL.QGLPixelBuffer.drawTexture(target, textureId[, textureTarget=GL_TEXTURE_2D])
Parameters:
PySide2.QtOpenGL.QGLPixelBuffer.format()
Return type:

PySide2.QtOpenGL.QGLFormat

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

PySide2.QtOpenGL.QGLPixelBuffer.generateDynamicTexture()
Return type:

GLuint

Generates and binds a 2D GL texture that is the same size as the pbuffer, and returns the texture’s ID. This can be used in conjunction with bindToDynamicTexture() and updateDynamicTexture() .

See also

size()

PySide2.QtOpenGL.QGLPixelBuffer.handle()
Return type:

Qt::HANDLE

Returns the native pbuffer handle.

static PySide2.QtOpenGL.QGLPixelBuffer.hasOpenGLPbuffers()
Return type:

bool

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

PySide2.QtOpenGL.QGLPixelBuffer.isValid()
Return type:

bool

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

PySide2.QtOpenGL.QGLPixelBuffer.makeCurrent()
Return type:

bool

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

PySide2.QtOpenGL.QGLPixelBuffer.releaseFromDynamicTexture()

Releases the pbuffer from any previously bound texture.

PySide2.QtOpenGL.QGLPixelBuffer.size()
Return type:

PySide2.QtCore.QSize

Returns the size of the pbuffer.

PySide2.QtOpenGL.QGLPixelBuffer.toImage()
Return type:

PySide2.QtGui.QImage

Returns the contents of the pbuffer as a QImage .

PySide2.QtOpenGL.QGLPixelBuffer.updateDynamicTexture(texture_id)
Parameters:

texture_idGLuint

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 macOS systems that support the render_texture extension is to use bindToDynamicTexture() to get dynamic updates of the texture.