/**************************************************************************** ** ** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ******************************************************************************/ #ifndef QCOCOAGLCONTEXT_H #define QCOCOAGLCONTEXT_H #include #include #include #include #include #include Q_FORWARD_DECLARE_OBJC_CLASS(NSOpenGLContext); Q_FORWARD_DECLARE_OBJC_CLASS(NSOpenGLPixelFormat); QT_BEGIN_NAMESPACE class QCocoaWindow; class QCocoaGLContext : public QPlatformOpenGLContext, public QNativeInterface::QCocoaGLContext { public: QCocoaGLContext(QOpenGLContext *context); QCocoaGLContext(NSOpenGLContext *context); ~QCocoaGLContext(); void initialize() override; bool makeCurrent(QPlatformSurface *surface) override; void swapBuffers(QPlatformSurface *surface) override; void doneCurrent() override; void update(); QSurfaceFormat format() const override; bool isSharing() const override; bool isValid() const override; NSOpenGLContext *nativeContext() const override; QFunctionPointer getProcAddress(const char *procName) override; private: static NSOpenGLPixelFormat *pixelFormatForSurfaceFormat(const QSurfaceFormat &format); bool setDrawable(QPlatformSurface *surface); void updateSurfaceFormat(); NSOpenGLContext *m_context = nil; NSOpenGLContext *m_shareContext = nil; QSurfaceFormat m_format; QVarLengthArray m_updateObservers; QAtomicInt m_needsUpdate = false; #ifndef QT_NO_DEBUG_STREAM friend QDebug operator<<(QDebug debug, const QCocoaGLContext *screen); #endif }; QT_END_NAMESPACE #endif // QCOCOAGLCONTEXT_H