glCreateShader()在PyOpenGL中失败

时间:2015-04-23 10:45:47

标签: python opengl pyqt4 pyopengl

我正在尝试在PyQt中进行可视化。我继承了QGLWidget并重新实现了initializeGL(),resizeGL(),paintGL()。 程序和着色器在initializeGL()中编译。 一切正常,直到我为我的英特尔高清显卡4600安装了最新的驱动程序。 现在 - ver。 10.18.14。4170,日期为2015年3月16日,之前 - 版本。 9.18.10.3204,日期03.06.2013。 现在我得到以下内容:

Traceback (most recent call last):
  ….
    vert_shader = shaders.compileShader(v_grid_3_3, GL_VERTEX_SHADER)
  File "C:\...\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\OpenGL\GL\shaders.py", line 218, in compileShader
    shader = glCreateShader(shaderType)
  File "C:\...\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\OpenGL\latebind.py", line 45, in __call__
    return self._finalCall( *args, **named )
WindowsError: exception: access violation writing 0xFFFFFFFFE84BD7F0

我也从https://pypi.python.org/pypi/PyOpenGL-Demo下载了demo并试图运行PyOpenGL-Demo-3.0.1b1 \ PyOpenGL-Demo \ GLUT \ shader_test.py - 同样的错误。

有谁知道如何解决这个问题?

我用glGet *(*)检查了一些参数:

# After update -  ver. 10.18.14.4170, date  16.03.2015
VENDORE: Intel
RENDERER: Intel(R) HD Graphics 4600
GL VERSION: 4.3.0 - Build 10.18.14.4170
GLSL VERSION: 4.30 - Build 10.18.14.4170

GL_MAX_TEXTURE_SIZE         : 16384
GL_MAX_3D_TEXTURE_SIZE      : 2048
GL_MAX_VERTEX_ATTRIBS       : 16
GL_MAX_TEXTURE_BUFFER_SIZE  : 134217728
GL_MAX_CUBE_MAP_TEXTURE_SIZE: 16384
GL_MAX_VARYING_FLOATS       : 64
GL_MAX_TEXTURE_UNITS        : 8
GL_MAX_DRAW_BUFFERS         : 8


# Before update -  ver. 9.18.10.3204, date 03.06.2013
VENDORE: Intel
RENDERER: Intel(R) HD Graphics 4600
GL VERSION: 4.0.0 - Build 9.18.10.3204
GLSL VERSION: 4.00 - Build 9.18.10.3204

GL_MAX_TEXTURE_SIZE         : 8192
GL_MAX_3D_TEXTURE_SIZE      : 2048
GL_MAX_VERTEX_ATTRIBS       : 16
GL_MAX_TEXTURE_BUFFER_SIZE  : 4194304
GL_MAX_CUBE_MAP_TEXTURE_SIZE: 8192
GL_MAX_VARYING_FLOATS       : 64
GL_MAX_TEXTURE_UNITS        : 8
GL_MAX_DRAW_BUFFERS         : 8

我已打印GL_VERTEX_SHADERGL_FRAGMENT_SHADER并获得GL_VERTEX_SHADER (0x8B31) GL_FRAGMENT_SHADER (0x8B30)。 我还尝试在shader_test.py {之前提到过glGetError()之后获得glCreateShader(),但得到了

Hit ESC key to quit.
    Traceback (most recent call last):
      File "C:/.../PyOpenGL-Demo-3.0.1b1/PyOpenGL-Demo/GLUT/shader_test.py", line 162, in <module>
        main()
      File "C:/.../PyOpenGL-Demo-3.0.1b1/PyOpenGL-Demo/GLUT/shader_test.py", line 153, in main
        InitGL(640, 480)
      File "C:/.../PyOpenGL-Demo-3.0.1b1/PyOpenGL-Demo/GLUT/shader_test.py", line 42, in InitGL
        s = glCreateShader(GL_VERTEX_SHADER)
      File "C:\...\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\OpenGL\latebind.py", line 45, in __call__
        return self._finalCall( *args, **named )
    WindowsError: exception: access violation writing 0xFFFFFFFFEB3DCBD0


Process finished with exit code 1

所以它在调用glGetError()之前完成。如果我将它放在glCreateShader()之前,则在另一个gl*()之后返回0

解决: 事实证明问题出现在旧的PyOpenGL 3.0.2(2012-10-02)中。安装PyOpenGL-3.1.1a1(2015-02-13)后问题消失了。

1 个答案:

答案 0 :(得分:0)

事实证明问题出现在旧的PyOpenGL 3.0.2(2012-10-02)中。安装PyOpenGL-3.1.1a1(2015-02-13)后问题消失了。