glBindBuffer上的访问冲突

时间:2013-10-26 07:34:13

标签: c++ multithreading opengl access-violation

我一直在使用OpenGL开发一个程序,我最近偶尔会在这一行上遇到错误:

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexID);

这是出现的错误,但我认为它不会有太多帮助:

  

0x0000000069E03C13(nvoglv64.dll)中的第一次机会异常   Voxel.exe:0xC0000005:访问冲突读取位置   0x000000000AA87000

为访问冲突提供的地址各不相同,违规发生所需的时间也各不相同。鉴于访问冲突发生的时间各不相同,我猜测它与两个尝试访问相同数据的线程有关,但是当违规发生时,从来没有任何其他线程在同一个对象上工作,而我使用互斥锁来确保两个线程无法写入相同的数据。我已经检查并确保索引缓冲区的ID有效,并且因为生成和删除缓冲区ID的唯一线程也是唯一将数据绑定并传输到缓冲区的线程,我不相信它是可能的。访问违规是因为那个。

如何跟踪和/或修复导致此访问冲突的原因?

1 个答案:

答案 0 :(得分:0)

  

我猜测它与试图访问相同数据的两个线程有​​关,

这将被称为竞争条件。种族条件不会导致访问违规!

我最好的选择是你从多个线程中使用OpenGL,并且只为一个线程初始化扩展。在涉及OpenGL扩展和线程时,Windows有点棘手:函数指针可能因上下文和线程而异。如果您使用为不同的上下文和/或线程初始化的函数指针,则会发生这种情况。

确保您的扩展加载机制正确处理多个线程和上下文。