glBindBuffer上的访问冲突

问题描述 投票:-1回答:1

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

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexID);

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

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

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

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

c++ multithreading opengl access-violation
1个回答
0
投票

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

这将被称为竞争条件。比赛条件不会导致违规!

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

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

© www.soinside.com 2019 - 2024. All rights reserved.