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 QGLPixelBuffer(size[, format=QGLFormat.defaultFormat()[, shareWidget=None]])

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

param format

QGLFormat

param size

QSize

param shareWidget

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
  • pixmapQPixmap

  • targetGLenum

Return type

GLuint

PySide2.QtOpenGL.QGLPixelBuffer.bindTexture(fileName)
Parameters

fileName – unicode

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
  • imageQImage

  • targetGLenum

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

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
  • pointQPointF

  • textureIdGLuint

  • textureTargetGLenum

PySide2.QtOpenGL.QGLPixelBuffer.drawTexture(target, textureId[, textureTarget=GL_TEXTURE_2D])
Parameters
  • targetQRectF

  • textureIdGLuint

  • textureTargetGLenum

PySide2.QtOpenGL.QGLPixelBuffer.format()
Return type

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

QSize

Returns the size of the pbuffer.

PySide2.QtOpenGL.QGLPixelBuffer.toImage()
Return type

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.