【问题标题】:compileProgram returns two identical values in OpenGLcompileProgram 在 OpenGL 中返回两个相同的值
【发布时间】:2016-05-13 23:56:26
【问题描述】:

我正在开发一个由两个 QtOpenGL 小部件(都设置在两个不同的 MainWindow 中)组成的应用程序。在我的 initializeGL() 函数中我写:

对于第一个 GL 小部件:

vertexShader = shaders.compileShader(vertex, GL_VERTEX_SHADER)
fragmentShader = shaders.compileShader(fragment1, GL_FRAGMENT_SHADER)
program = shaders.compileProgram(vertexShader, fragmentShader)

第二个:

vertexShader = shaders.compileShader(vertex, GL_VERTEX_SHADER)
fragmentShader = shaders.compileShader(fragment2, GL_FRAGMENT_SHADER)
program = shaders.compileProgram(vertexShader, fragmentShader)

但它们最终都得到相同的“程序”值,为什么?

【问题讨论】:

    标签: qt opengl pyqt pyopengl


    【解决方案1】:

    这两个 QtOpenGL 小部件中的每一个都有自己的上下文。由于程序 id 仅在其上下文中是唯一的,因此在这里获取相同的 id 非常好。

    【讨论】:

    • 因此,如果它们都具有相同的值,我如何在 QOpenGL 类之外设置我想要的程序?例如,我需要在 QOpenGl 类之外修改一些制服。
    • 您必须确保在设置值时绑定了正确的上下文。 QOpenGLContext 有一个 makeCurrent(QSurface * surface) 方法。请注意,一个线程只能有一个当前上下文,并且每个上下文只能在一个线程中是当前的。
    • 这就是我所做的,并且有效。顺便说一句,我总是使用单线程。
    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 2014-01-09
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多