QOpenGLPaintDevice Class

The QOpenGLPaintDevice class enables painting to an OpenGL context using QPainter. More...

Header: #include <QOpenGLPaintDevice>
qmake: QT += gui
Since: Qt 5.0
Inherits: QPaintDevice

Public Functions

QOpenGLPaintDevice()
QOpenGLPaintDevice(const QSize &size)
QOpenGLPaintDevice(int width, int height)
virtual ~QOpenGLPaintDevice()
QOpenGLContext * context() const
qreal dotsPerMeterX() const
qreal dotsPerMeterY() const
virtual void ensureActiveTarget()
bool paintFlipped() const
void setDevicePixelRatio(qreal devicePixelRatio)
void setDotsPerMeterX(qreal dpmx)
void setDotsPerMeterY(qreal dpmy)
void setPaintFlipped(bool flipped)
void setSize(const QSize &size)
QSize size() const

Reimplemented Public Functions

virtual QPaintEngine * paintEngine() const override

Protected Functions

QOpenGLPaintDevice(const QOpenGLPaintDevice &)
QOpenGLPaintDevice & operator=(const QOpenGLPaintDevice &)

Reimplemented Protected Functions

virtual int metric(QPaintDevice::PaintDeviceMetric metric) const override

Detailed Description

The QOpenGLPaintDevice class enables painting to an OpenGL context using QPainter.

The QOpenGLPaintDevice uses the current QOpenGL context to render QPainter draw commands. The context is captured upon construction. It requires support for OpenGL (ES) 2.0 or higher.

Performance

The QOpenGLPaintDevice is almost always hardware accelerated and has the potential of being much faster than software rasterization. However, it is more sensitive to state changes, and therefore requires the drawing commands to be carefully ordered to achieve optimal performance.

Antialiasing and Quality

Antialiasing in the OpenGL paint engine is done using multisampling. Most hardware require significantly more memory to do multisampling and the resulting quality is not on par with the quality of the software paint engine. The OpenGL paint engine's strength lies in its performance, not its visual rendering quality.

State Changes

When painting to a QOpenGLPaintDevice using QPainter, the state of the current OpenGL context will be altered by the paint engine to reflect its needs. Applications should not rely upon the OpenGL state being reset to its original conditions, particularly the current shader program, OpenGL viewport, texture units, and drawing modes.

Mixing QPainter and OpenGL

When intermixing QPainter and OpenGL, it is important to notify QPainter that the OpenGL state may have been cluttered so it can restore its internal state. This is achieved by calling QPainter::beginNativePainting() before starting the OpenGL rendering and calling QPainter::endNativePainting() after finishing.

See also OpenGL Window Example.

Member Function Documentation

QOpenGLPaintDevice::QOpenGLPaintDevice()

Constructs a QOpenGLPaintDevice.

The QOpenGLPaintDevice is only valid for the current context.

See also QOpenGLContext::currentContext().

QOpenGLPaintDevice::QOpenGLPaintDevice(const QSize &size)

Constructs a QOpenGLPaintDevice with the given size.

The QOpenGLPaintDevice is only valid for the current context.

See also QOpenGLContext::currentContext().

QOpenGLPaintDevice::QOpenGLPaintDevice(int width, int height)

Constructs a QOpenGLPaintDevice with the given width and height.

The QOpenGLPaintDevice is only valid for the current context.

See also QOpenGLContext::currentContext().

[protected] QOpenGLPaintDevice::QOpenGLPaintDevice(const QOpenGLPaintDevice &)

Default constructs an instance of QOpenGLPaintDevice.

[virtual] QOpenGLPaintDevice::~QOpenGLPaintDevice()

Destroys the QOpenGLPaintDevice.

QOpenGLContext *QOpenGLPaintDevice::context() const

Returns the OpenGL context associated with the paint device.

qreal QOpenGLPaintDevice::dotsPerMeterX() const

Returns the number of pixels per meter horizontally.

See also setDotsPerMeterX().

qreal QOpenGLPaintDevice::dotsPerMeterY() const

Returns the number of pixels per meter vertically.

See also setDotsPerMeterY().

[virtual] void QOpenGLPaintDevice::ensureActiveTarget()

This virtual method is provided as a callback to allow re-binding a target frame buffer object or context when different QOpenGLPaintDevice instances are issuing draw calls alternately.

beginNativePainting() will also trigger this method.

The default implementation does nothing.

[override virtual protected] int QOpenGLPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const

Reimplemented from QPaintDevice::metric().

[override virtual] QPaintEngine *QOpenGLPaintDevice::paintEngine() const

Reimplemented from QPaintDevice::paintEngine().

bool QOpenGLPaintDevice::paintFlipped() const

Returns true if painting is flipped around the Y-axis.

See also setPaintFlipped().

void QOpenGLPaintDevice::setDevicePixelRatio(qreal devicePixelRatio)

Sets the device pixel ratio for the paint device to devicePixelRatio.

void QOpenGLPaintDevice::setDotsPerMeterX(qreal dpmx)

Sets the number of pixels per meter horizontally to dpmx.

See also dotsPerMeterX().

void QOpenGLPaintDevice::setDotsPerMeterY(qreal dpmy)

Sets the number of pixels per meter vertically to dpmy.

See also dotsPerMeterY().

void QOpenGLPaintDevice::setPaintFlipped(bool flipped)

Sets whether painting should be flipped around the Y-axis or not to flipped.

See also paintFlipped().

void QOpenGLPaintDevice::setSize(const QSize &size)

Sets the pixel size of the paint device to size.

See also size().

QSize QOpenGLPaintDevice::size() const

Returns the pixel size of the paint device.

See also setSize().

[protected] QOpenGLPaintDevice &QOpenGLPaintDevice::operator=(const QOpenGLPaintDevice &)

Copy-assignment operator.

Voted #1 for:

  • Easiest to learn
  • Most time saving
  • Best support

Develop Cross-Platform Apps and Games 50% Faster!

  • Voted the best supported, most time-saving and easiest to learn cross-platform development tool
  • Based on the Qt framework, with native performance and appearance on all platforms including iOS and Android
  • Offers a variety of plugins to monetize, analyze and engage users
FREE!
create apps
create games
cross platform
native performance
3rd party services
game network
multiplayer
level editor
easiest to learn
biggest time saving
best support