EXC_BAD_ACCESS在使用VBO时
EXC_BAD_ACCESS when using VBO
我用VBO做了一些渲染。现在我想为更复杂的渲染添加VBO。我现在只是创建一个VBO,保持旧的渲染,我现在用VBO渲染什么都没有。下面是代码:
GLuint bufId;
glGenBuffers(1, &bufId);
glBindBuffer(type, bufId);
glBufferData(type, size, 0, GL_STATIC_DRAW);
//size = 100000;
这是关于VBO的唯一代码。但如果最后一笔没有评论,那么我得到EXC_BAD_ACCESS在旧渲染时绘制GL_TRIANGLE_STRIP
。我把glGetError()
放在这个坏访问之前,它返回0。有什么问题吗?由于
EXC_BAD_ACCESS表示您已经尝试读取或写入未映射到您的进程的内存。
有很多可能发生这种情况的方式,并且glGetError()不可能知道它。
我写这个博客是为了帮助你调试它。它是为iPhone设计的,但它的所有内容也适用于Mac应用程序。
http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html 关键的一点是EXC_BAD_ACCESS不一定发生在错误发生的地方——导致它的错误可能已经运行,错误的访问正在响应中发生——崩溃点可能根本不相关。我的博客介绍了一些调试技术,以找出问题的真正所在。例如,它可能与GL无关。在你的代码中,size
和type
的值是多少?这可能与此无关。
到目前为止运行的所有代码中需要检查的内容
- 一个双重释放
- 数组越界读写
- 不好投
我找到问题了。你必须取消绑定VBO,如果你想绘制它:
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
之后一切正常
相关文章:
- OpenGL VBO Indexing ( How to compute Index Array)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 将单个未唱的 int 发送到 VBO
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- VBO必须在VAO之后绑定
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- OpenGL:第二个VBO破坏了第一个VBO
- 如何告诉 VBO 处理给定的数据?(布料模拟)
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 我们是否需要序列化 VAO 和 VBO
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- OpenGL VAO VBO resize
- glVertexAttribDivisor 存储在哪里 - VAO、VBO 或全局状态?
- 将 OpenGL VBO 与自定义类/数据结构一起使用
- Qtopengl,为什么不能用不同的vbo画两个立方体
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 为什么VAO可以使用VBO数据绑定它?
- 可以在同一 VBO 中存储不同的顶点属性和索引