summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qopenglcontext.h
blob: ca2d4a89034fb761e365731342aabcca0fb22150 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QOPENGLCONTEXT_H#define QOPENGLCONTEXT_H#include <QtGui/qtguiglobal.h>#ifndef QT_NO_OPENGL#include <QtCore/qnamespace.h>#include <QtCore/qobject.h>#include <QtCore/qscopedpointer.h>#include <QtCore/qset.h>#include <QtCore/qnativeinterface.h>#include <QtGui/QSurfaceFormat>#ifdef __GLEW_H__#if defined(Q_CC_GNU)#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined#warning To use GLEW with Qt, do not include <qopengl.h> or <QOpenGLFunctions> after glew.h#endif#endif#include <QtGui/qopengl.h>#include <QtCore/qvariant.h> QT_BEGIN_NAMESPACE class QDebug;class QOpenGLContextPrivate;class QOpenGLContextGroupPrivate;class QOpenGLFunctions;class QOpenGLExtraFunctions;class QPlatformOpenGLContext;class QScreen;class QSurface;class Q_GUI_EXPORT QOpenGLContextGroup :public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QOpenGLContextGroup)public:~QOpenGLContextGroup(); QList<QOpenGLContext *>shares()const;static QOpenGLContextGroup *currentContextGroup();private:QOpenGLContextGroup();friend class QOpenGLContext;friend class QOpenGLContextPrivate;friend class QOpenGLContextGroupResourceBase;friend class QOpenGLSharedResource;friend class QOpenGLMultiGroupSharedResource;};class QOpenGLTextureHelper;class Q_GUI_EXPORT QOpenGLContext :public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QOpenGLContext)public:explicitQOpenGLContext(QObject *parent =nullptr);~QOpenGLContext();voidsetFormat(const QSurfaceFormat &format);voidsetShareContext(QOpenGLContext *shareContext);voidsetScreen(QScreen *screen);boolcreate();boolisValid()const; QSurfaceFormat format()const; QOpenGLContext *shareContext()const; QOpenGLContextGroup *shareGroup()const; QScreen *screen()const; GLuint defaultFramebufferObject()const;boolmakeCurrent(QSurface *surface);voiddoneCurrent();voidswapBuffers(QSurface *surface); QFunctionPointer getProcAddress(const QByteArray &procName)const; QFunctionPointer getProcAddress(const char*procName)const; QSurface *surface()const;static QOpenGLContext *currentContext();static boolareSharing(QOpenGLContext *first, QOpenGLContext *second); QPlatformOpenGLContext *handle()const; QPlatformOpenGLContext *shareHandle()const; QOpenGLFunctions *functions()const; QOpenGLExtraFunctions *extraFunctions()const; QSet<QByteArray>extensions()const;boolhasExtension(const QByteArray &extension)const;enum OpenGLModuleType { LibGL, LibGLES };static OpenGLModuleType openGLModuleType();boolisOpenGLES()const;static boolsupportsThreadedOpenGL();static QOpenGLContext *globalShareContext();QT_DECLARE_NATIVE_INTERFACE_ACCESSOR(QOpenGLContext) Q_SIGNALS:voidaboutToBeDestroyed();private:friend class QOpenGLContextResourceBase;friend class QOpenGLPaintDevice;friend class QOpenGLGlyphTexture;friend class QOpenGLTextureGlyphCache;friend class QOpenGLEngineShaderManager;friend class QOpenGLFramebufferObject;friend class QOpenGLFramebufferObjectPrivate;friend class QOpenGL2PaintEngineEx;friend class QOpenGL2PaintEngineExPrivate;friend class QSGDistanceFieldGlyphCache;friend class QWidgetPrivate;friend class QAbstractOpenGLFunctionsPrivate;friend class QOpenGLTexturePrivate; QOpenGLTextureHelper*textureFunctions()const;voidsetTextureFunctions(QOpenGLTextureHelper* textureFuncs,std::function<void()> destroyCallback);voiddestroy();Q_PRIVATE_SLOT(d_func(),void_q_screenDestroyed(QObject *object))};#ifndef QT_NO_DEBUG_STREAM Q_GUI_EXPORT QDebug operator<<(QDebug debug,const QOpenGLContext *ctx); Q_GUI_EXPORT QDebug operator<<(QDebug debug,const QOpenGLContextGroup *cg);#endif// !QT_NO_DEBUG_STREAM QT_END_NAMESPACE #include <QtGui/qopenglcontext_platform.h>#endif// QT_NO_OPENGL#endif// QOPENGLCONTEXT_H
close