python-ctypes opengl函数加载错误(OSError:异常:访问冲突写入0x0000000000000000)

时间:2018-07-11 22:20:58

标签: python opengl ctypes access-violation

尝试使用ctypes从python加载opengl函数,

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()    #    causing error

遇到错误

OSError: exception: access violation writing 0x0000000000000000

我以为是因为我没有创建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

引起相同的错误

OSError: exception: access violation writing 0x0000000000000000

什么可能导致此错误?

谢谢。

1 个答案:

答案 0 :(得分:0)

您永远不会创建OpenGL上下文。同样,如果glCreateShader完全可用,则取决于为其创建上下文的OpenGL版本。无论如何,为什么首先要使用ctypes?完美的OpenGL Python绑定可以为您抽象出所有繁琐的簿记代码。

http://pyopengl.sourceforge.net/

pip install PyOpenGL