首页 > 解决方案 > python - ctypes opengl函数加载错误(OSError:异常:访问冲突写入0x0000000000000000)

问题描述

我收到一个错误:

OSError: exception: access violation writing 0x0000000000000000

在尝试使用 python 加载 opengl 函数时ctypes

from ctypes import *
gl = windll.opengl32
get_proc_addr_prototype = WINFUNCTYPE(WINFUNCTYPE(c_uint), c_char_p)
get_proc_addr_paramflags = (1, "Arg1"),
get_proc_addr = get_proc_addr_prototype(("wglGetProcAddress", gl), get_proc_addr_paramflags)
glCreateProgram = get_proc_addr(c_char_p(b"glCreateProgram"))
glCreateProgram()

我以为是因为我没有创建opengl上下文,所以我运行了这段代码:

from ctypes import *
gl = windll.opengl32
gl.glClear(0x00004000)    #    GL_COLOR_BUFFER_BIT = 0x00004000

这有效,但尝试这种方式:

from ctypes import *
gl = windll.opengl32
get_proc_addr_prototype = WINFUNCTYPE(WINFUNCTYPE(None, c_uint), c_char_p)
get_proc_addr_paramflags = (1, "Arg1"),
get_proc_addr = get_proc_addr_prototype(("wglGetProcAddress", gl), get_proc_addr_paramflags)
glClear = wgl_get_proc_addr(c_char_p(b"glClear"))
glClear(0x00004000)    #    GL_COLOR_BUFFER_BIT = 0x00004000

导致同样的错误。

标签: pythonopenglctypesaccess-violation

解决方案


您永远不会创建 OpenGL 上下文。此外,是否glCreateShader完全可用取决于为其创建上下文的 OpenGL 版本。为什么你ctypes首先要使用?有完美的 OpenGL Python 绑定可以为您抽象出所有繁琐的簿记代码。

http://pyopengl.sourceforge.net/

pip install PyOpenGL

推荐阅读