创建第二个顶点缓冲对象(VBO)时出现访问违例异常
OpenGL ES 2.0 二次调用glGenBuffers触发访问违例问题
我正在将一个基于固定功能管线编写的粒子系统改造为着色器渲染模式,该系统包含地面、降雨、雨滴、溅水效果等渲染模块。
我当前使用glfw、glad、OpenGL ES 2.0技术栈,由于在Windows环境下开发,同时搭配使用PVRFrame模拟器。
目前地面渲染模块已顺利完成着色器迁移,可正常运行。但在对独立类实现的降雨渲染模块进行迁移时,调用glGenBuffers(1, &VBO)创建缓冲区触发了如下访问违例异常:
Exception 0xc0000005 encountered at address 0x7ffa222e112e: Access violation reading location 0x000001c0
已完成的排查验证
- 查阅资料提到该类问题多数由未提前初始化glfw及OpenGL上下文导致,但项目中已完成相关初始化,否则地面渲染无法正常工作
- 降雨渲染与地面渲染共用同一窗口与上下文,不存在上下文不匹配问题
- 执行降雨渲染相关缓冲区操作前,已通过
glBindBuffer(GL_ARRAY_BUFFER, 0)解绑地面渲染对应的缓冲区,且按照先解绑后删除的顺序调用glDeleteBuffers(1, &VBO)删除了对应缓冲区
核心疑点
第一次调用glGenBuffers可正常执行,第二次调用却触发访问违例,目前无法定位问题根因,若排查需要特定代码片段可补充提供。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

