4#ifndef QOPENGLPAINTDEVICE_H
5#define QOPENGLPAINTDEVICE_H
7#include <QtOpenGL/qtopenglglobal.h>
11#include <QtGui/qpaintdevice.h>
12#include <QtGui/qopengl.h>
13#include <QtGui/qopenglcontext.h>
17class QOpenGLPaintDevicePrivate;
21 Q_DECLARE_PRIVATE(QOpenGLPaintDevice)
24 explicit QOpenGLPaintDevice(
const QSize &size);
25 QOpenGLPaintDevice(
int width,
int height);
26 ~QOpenGLPaintDevice();
28 int devType()
const override {
return QInternal::OpenGL; }
29 QPaintEngine *paintEngine()
const override;
31 QOpenGLContext *context()
const;
33 void setSize(
const QSize &size);
34 void setDevicePixelRatio(qreal devicePixelRatio);
36 qreal dotsPerMeterX()
const;
37 qreal dotsPerMeterY()
const;
39 void setDotsPerMeterX(qreal);
40 void setDotsPerMeterY(qreal);
42 void setPaintFlipped(
bool flipped);
43 bool paintFlipped()
const;
45 virtual void ensureActiveTarget();
48 QOpenGLPaintDevice(QOpenGLPaintDevicePrivate &dd);
49 int metric(QPaintDevice::PaintDeviceMetric metric)
const override;
51 Q_DISABLE_COPY(QOpenGLPaintDevice)
52 QScopedPointer<QOpenGLPaintDevicePrivate> d_ptr;
QOpenGLEngineShaderManager * shaderManager
void drawVertexArrays(QOpenGL2PEXVertexArray &vertexArray, GLenum primitive)
GLfloat staticVertexCoordinateArray[8]
void updateBrushUniforms()
bool uploadIndexData(const void *data, GLenum indexValueType, GLuint count)
GLuint elementIndicesVBOId
static void cleanupVectorPath(QPaintEngineEx *engine, void *data)
void writeClip(const QVectorPath &path, uint value)
void updateCompositionMode()
void updateTexture(GLenum textureUnit, const T &texture, GLenum wrapMode, GLenum filterMode, TextureUpdateMode updateMode=UpdateIfNeeded)
QOpenGL2PaintEngineExPrivate(QOpenGL2PaintEngineEx *q_ptr)
QOpenGL2PEXVertexArray vertexCoordinateArray
GLfloat staticTextureCoordinateArray[8]
void systemStateChanged() override
QFontEngine::GlyphFormat glyphCacheFormat
QOpenGLBuffer vertexBuffer
QDashedStrokeProcessor dasher
QVarLengthArray< GLuint, 8 > unusedVBOSToClean
void transferMode(EngineMode newMode)
~QOpenGL2PaintEngineExPrivate()
QList< GLushort > elementIndices
QRect currentScissorBounds
QOpenGLBuffer opacityBuffer
void composite(const QOpenGLRect &boundingRect)
bool multisamplingAlwaysEnabled
GLuint bindTexture(const T &texture, bool *newTextureCreated)
bool prepareForCachedGlyphDraw(const QFontEngineGlyphCache &cache)
void stroke(const QVectorPath &path, const QPen &pen)
QOpenGL2PEXVertexArray textureCoordinateArray
void updateBrushTexture()
QOpenGLBuffer texCoordBuffer
void drawTexture(const QOpenGLRect &dest, const QOpenGLRect &src, const QSize &textureSize, bool opaque, bool pattern=false)
void activateTextureUnit(GLenum textureUnit)
static QOpenGLEngineShaderManager * shaderManagerForEngine(QOpenGL2PaintEngineEx *engine)
bool compositionModeDirty
QRegion dirtyStencilRegion
QTriangulatingStroker stroker
void setVertexAttribArrayEnabled(int arrayIndex, bool enabled=true)
QOpenGLPaintDevice * device
void uploadData(unsigned int arrayIndex, const GLfloat *data, GLuint count)
QOpenGLBuffer indexBuffer
void fill(const QVectorPath &path)
void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints)
bool prepareForDraw(bool srcPixelsAreOpaque)
void drawCachedGlyphs(QFontEngine::GlyphFormat glyphFormat, QStaticTextItem *staticTextItem)
void fillStencilWithVertexArray(const float *data, int count, int *stops, int stopCount, const QOpenGLRect &bounds, StencilFillMode mode)
const GLfloat * vertexAttribPointers[3]
QOpenGLVertexArrayObject vao
QOpenGL2PaintEngineEx * q
void setBrush(const QBrush &brush)
void drawVertexArrays(const float *data, int *stops, int stopCount, GLenum primitive)
void fillStencilWithVertexArray(QOpenGL2PEXVertexArray &vertexArray, bool useWindingFill)
void setScissor(const QRect &rect)
bool vertexAttributeArraysEnabledState[QT_GL_VERTEX_ARRAY_TRACKED_COUNT]
QDataBuffer< GLfloat > opacityArray
QPointer< QOpenGLContext > ctx
GLuint location(const QOpenGLEngineShaderManager::Uniform uniform)
GLenum lastTextureUnitUsed
static QOpenGL2PaintEngineExPrivate * getData(QOpenGL2PaintEngineEx *engine)
QVarLengthArray< GLuint, 8 > unusedIBOSToClean
bool nativePaintingActive
void updateClipScissorTest()
void clearClip(uint value)
uint compositionModeChanged
uint needsClipBufferClear
QOpenGL2PaintEngineState()
QOpenGL2PaintEngineState(const QOpenGL2PaintEngineState &other)
~QOpenGL2PaintEngineState()
QOpenGLCustomShaderStagePrivate()
QPointer< QOpenGLEngineShaderManager > m_manager
virtual void setUniforms(QOpenGLShaderProgram *)
void removeFromPainter(QPainter *)
QByteArray source() const
bool setOnPainter(QPainter *)
QOpenGLShaderProgram * program
QList< uint > uniformLocations
bool usePmvMatrixAttribute
QByteArray customStageSource
~QOpenGLEngineShaderProg()
bool operator==(const QOpenGLEngineShaderProg &other) const
QOpenGLEngineShaderProg()
The QOpenGLPaintDevice class enables painting to an OpenGL context using QPainter.
Combined button and popup list for selecting options.
static const GLuint QT_TEXTURE_COORDS_ATTR
static const GLuint QT_PMV_MATRIX_2_ATTR
static const GLuint QT_OPACITY_ATTR
static const GLuint QT_PMV_MATRIX_1_ATTR
static QT_BEGIN_NAMESPACE const GLuint QT_VERTEX_COORDS_ATTR
static const GLuint QT_PMV_MATRIX_3_ATTR
#define QT_GL_VERTEX_ARRAY_TRACKED_COUNT
#define QT_UNKNOWN_TEXTURE_UNIT