我有一些运行完美的OpenGL代码,但是当我尝试启动程序时,它偶尔会出现(大约每五次左右),它会因未处理的异常而崩溃:
Unhandled exception at 0x5CE5F86E (atioglxx.dll) in Main.exe: 0xC0000005:
Access violation reading location 0x07388000.
它指向的行只是一个简单的glBufferData()调用:
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indices.size() * sizeof(GLuint), &m_indices[0], GL_STATIC_DRAW);
我能做点什么吗?或者它是图形驱动程序的问题?我安装了最新的驱动程序(卡是Radeon 290X)。崩溃真的不一致;没有任何改变,如果我继续启动该程序,它通常需要几次才能执行此操作。
答案 0 :(得分:2)
根据您的评论,您似乎有类型尺寸不匹配,请将您的电话更改为
lBufferData(
GL_ELEMENT_ARRAY_BUFFER,
m_indices.size() * sizeof m_indices[0],
m_indices.data(),
GL_STATIC_DRAW
);
你也可以使用像下面这样的小辅助函数来减少crud(这有助于避免这样的bug)
template<typename T, typename Allocator>
size_t sizeof_vec(std::vector<T, Allocator> const& v)
{
return v.size() * sizeof(T);
}
lBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof_vec(m_indices), m_indices.data(), GL_STATIC_DRAW);