gpt4 book ai didi

ios - GLKViewController 中带有 glTexImage2D 的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-29 12:36:48 24 4
gpt4 key购买 nike

我在这段代码的最后一行有一个 EXC_BAD_ACCESS(这段代码每秒被触发几次),但我无法弄清楚问题是什么:

[EAGLContext setCurrentContext:_context];
glActiveTexture(GL_TEXTURE0);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, _backgroundTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _outputFrame.cols, _outputFrame.rows, 0, GL_BGRA, GL_UNSIGNED_BYTE, _outputFrame.data);

调试时,我确保创建了纹理(id > 0),输出帧具有指向数据的有效指针并且是一个 4 channel 矩阵。我在 GLKViewController 的 drawRect 方法中。我想我不必绑定(bind)帧缓冲区,因为它是这里自动化的事情之一。 它不会在第一帧崩溃,但在几十帧之后。

有人能发现问题吗?

更新:

这似乎是因为 _outputFrame 上的竞争条件,它在被 glTexImage2D 读取时正在更新。我会尝试锁定它以供阅读,然后再报告。

最佳答案

这确实是解决方案(参见UPDATE),我用NSLock 修复了它。首先,我将实例变量 _outputFrame 替换为从另一个线程更新的临时变量,并使用锁来更新实例变量:

[_frameLock lock];
_outputFrame = temp;
[_frameLock unlock];

然后当我想从实例变量中读取时使用锁:

glActiveTexture(GL_TEXTURE0);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, _backgroundTexture);
[_frameLock lock];
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _outputFrame.cols, _outputFrame.rows, 0, GL_BGRA, GL_UNSIGNED_BYTE, _outputFrame.data);
[_frameLock unlock];

关于ios - GLKViewController 中带有 glTexImage2D 的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26082262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com