随机"未处理的异常"当调用glBufferData()时

时间:2014-08-19 08:52:36

标签: c++ opengl access-violation

我有一些运行完美的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)。崩溃真的不一致;没有任何改变,如果我继续启动该程序,它通常需要几次才能执行此操作。

1 个答案:

答案 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);