QOpenGLFunctions 和 PySide2

Posted

技术标签:

【中文标题】QOpenGLFunctions 和 PySide2【英文标题】:QOpenGLFunctions and PySide2 【发布时间】:2020-08-30 18:34:19 【问题描述】:

如何从PySide2使用QOpenGLFunctions

问题在于GLEnum,API 文档中提到了它,但没有说明可以从哪里获取它。

比如我想打电话glGetString(),我试试:

from OpenGL import GL
from PySide2.QtGui import QOpenGLFunctions as GLF

GLF.glGetString(GL.GL_VERSION))

但它会产生错误。

TypeError: descriptor 'glGetString' requires a 'PySide2.QtGui.QOpenGLFunctions' object but received a 'IntConstant'

【问题讨论】:

【参考方案1】:

您必须使用与当前 QOpenGLContext 关联的 QOpenGLFunctions,例如您可以使用以下代码:

from OpenGL import GL
from PySide2 import QtGui


if __name__ == "__main__":
    app = QtGui.QGuiApplication()
    off_screen = QtGui.QOffscreenSurface()
    off_screen.create()
    if off_screen.isValid():
        context = QtGui.QOpenGLContext()
        if context.create():
            context.makeCurrent(off_screen)
            f = QtGui.QOpenGLFunctions(context)
            print(f.glGetString(GL.GL_VERSION))

输出:

3.0 Mesa 20.1.6

【讨论】:

以上是关于QOpenGLFunctions 和 PySide2的主要内容,如果未能解决你的问题,请参考以下文章

QOpenGLFunctions的正确用法

QOpenGLFunctions类

QOpenGLFunctions的相关的使用

QOpenGLFunctions的使用

在使用 QOpenGLFunctions 时将 OpenGL 功能封装在 C++ 对象中

带有 QT 错误的 OpenGL:断言:“QOpenGLFunctions::isInitialized(d_ptr)”。无法创建 OpenGL 上下文