我正在尝试在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_SHADER
,GL_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)后问题消失了。
答案 0 :(得分:0)
事实证明问题出现在旧的PyOpenGL 3.0.2(2012-10-02)中。安装PyOpenGL-3.1.1a1(2015-02-13)后问题消失了。