glBindBuffer 的访问冲突

Access Violation at glBindBuffer

本文关键字:访问冲突 glBindBuffer      更新时间:2023-10-16

我一直在使用OpenGL的程序上工作了一段时间,最近我开始偶尔在以下行上出现错误:

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexID);

这是出现的错误,尽管我认为它不会有太大帮助:

0x0000000069E03C13 (nvoglv64.dll) 中的首次机会例外 体素.exe:0xC0000005:访问冲突读取位置 0x000000000AA87000 .

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

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

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

这将称为竞争条件。竞争条件不会导致访问冲突!

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

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