zoukankan      html  css  js  c++  java
  • QOpenGLWindow

    QOpenGLWindow 

    QOpenGLWindow类是QWindow的一个方便的子类,用于执行OpenGL绘制。

    QOpenGLWindow是一个增强的QWindow,它允许轻松创建使用与QOpenGLWidget兼容且类似于传统QGLWidget的API执行OpenGL渲染的窗口。与QOpenGLWidget不同,QopenglWindows不依赖于widgets模块,并提供更好的性能。

    典型应用程序将QOpenGLWindow子类化,并重新实现以下虚拟功能:

    1、initializeGL()执行OpenGL资源初始化

    2、resizeGL()用于设置转换矩阵和其他依赖于窗口大小的资源

    3、paintGL()发出OpenGL命令或使用QPaint绘制

    要计划重新绘制,请调用update()函数。请注意,这不会立即导致调用paintGL()。在一行中多次调用update()不会以任何方式改变行为。

    这是一个插槽,因此它可以连接到QTimer::timeout()信号以执行动画。然而,请注意,在现代OpenGL世界中,依靠与显示器垂直刷新率的同步是一个更好的选择。有关交换间隔的说明,请参阅setSwapInterval()。交换间隔为1(大多数系统默认情况下都是如此)时,每次重新绘制后由QOpenGLWindow内部执行的swapBuffers()调用将阻塞并等待vsync。这意味着无论何时交换完成,都可以通过调用update()再次安排更新,而不依赖于计时器。

    要请求上下文的特定配置,请像对任何其他QWindow一样使用setFormat()。除其他外,这允许请求给定的OpenGL版本和配置文件,或启用深度和模具缓冲区。

    与QWindow不同,QOpenGLWindow允许在自身上打开画师并执行基于QPainter的绘图。

    QOpenGLWindow支持多种更新行为。默认情况下,NoPartialUpdate相当于基于OpenGL的常规QWindow或传统QGLWidget。相比之下,PartialUpdateBlit和PartialUpdateBlend更符合QOpenGLWidget的工作方式,在QOpenGLWidget中始终存在一个额外的专用帧缓冲区对象。通过牺牲一些性能,这些模式允许在每幅绘画上只重绘一个较小的区域,并保留前一帧的其余内容。这对于应用程序来说比使用QPaint进行增量渲染更有用,因为这样它们就不必在每次调用paintGL()时重新绘制整个窗口内容。

    与QOpenGLWidget类似,QopenglWindows支持Qt::AA_ShareOpenGLContexts属性。启用后,所有QOpenGLWindow实例的OpenGL上下文将彼此共享。这允许访问彼此可共享的OpenGL资源。

    有关Qt中图形的更多信息,请参见图形。

    Header: #include <QOpenGLWindow>
    qmake: QT += gui
    Since: Qt 5.4
    Inherits: QPaintDeviceWindow
    enum  UpdateBehavior
    { 
        NoPartialUpdate, 
        PartialUpdateBlit, 
        PartialUpdateBlend 
    }

    Public Functions

      QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = nullptr)
      QOpenGLWindow(QOpenGLContext *shareContext, QOpenGLWindow::UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = nullptr)
    virtual ~QOpenGLWindow()
    QOpenGLContext * context() const
    GLuint defaultFramebufferObject() const
    void doneCurrent()
    QImage grabFramebuffer()
    bool isValid() const
    void makeCurrent()
    QOpenGLContext * shareContext() const
    QOpenGLWindow::UpdateBehavior updateBehavior() const

    Signals

    void frameSwapped()

     

     

    • 18 signals inherited from QWindow
    • 2 signals inherited from QObject

    Protected Functions

    virtual void initializeGL()
    virtual void paintGL()
    virtual void paintOverGL()
    virtual void paintUnderGL()
    virtual void resizeGL(int w, int h)

    Reimplemented Protected Functions

    virtual void paintEvent(QPaintEvent *event) override
    virtual void resizeEvent(QResizeEvent *event) override

    Additional Inherited Members

    • 16 properties inherited from QWindow
    • 1 property inherited from QObject
    • 1 public slot inherited from QPaintDeviceWindow
    • 24 public slots inherited from QWindow
    • 1 public slot inherited from QObject
    • 1 public variable inherited from QObject
    • 1 static public member inherited from QWindow
    • 10 static public members inherited from QObject
    • 2 protected variables inherited from QObject

    ##########################################

  • 相关阅读:
    Windows Internals 笔记——作业
    Windows Internals 笔记——终止进程
    数据结构与算法-java-数组实现队列和栈
    数据结构与算法-java-稀疏数组
    学习笔记-java两种核心机制-JVM和GC
    python-Django-学习笔记
    python爬虫-大二时候的学习笔记
    KMP算法
    Docker
    排序与查找
  • 原文地址:https://www.cnblogs.com/herd/p/15522692.html
Copyright © 2011-2022 走看看