python - 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
导致同样的错误。
解决方案
您永远不会创建 OpenGL 上下文。此外,是否glCreateShader
完全可用取决于为其创建上下文的 OpenGL 版本。为什么你ctypes
首先要使用?有完美的 OpenGL Python 绑定可以为您抽象出所有繁琐的簿记代码。
http://pyopengl.sourceforge.net/
pip install PyOpenGL
推荐阅读
- ssas-tabular - 如何检查用户是否登录到表格多维数据集并获取登录到表格多维数据集的用户名
- typescript - 在TypeScript中,为什么我给接口赋值时会报错,而给接口赋值时却没有报错?
- jquery - Javascript (jQuery) - 奇怪的未定义变量
- r - R tmap 多层只有一个(相同的)图例
- android - CMake/Android:如何使用 FetchContent 链接依赖构建
- email - 从开始日期到结束日期后每 20 天发送电子邮件剩余
- azure - 通过 powershell 和 Azure Runbook 与个人联系人同步交换中的全局地址列表
- python - Python Pygame 俄罗斯方块,处理按键的问题。实施延迟自动换档。在移动之前必须按下一个键多长时间
- knex.js - 使用 knex 迁移删除表
- gtk - GTK+3 小部件最大宽度/高度