我在我的程序中有一个循环,它将填充像素(GL_POINTS)的3D立方体,所以为了加快处理速度,我想我可以使用OpenMP并将它分离为多核处理器。OpenGL with OpenMP always segfault
的问题是,我使用的OpenMP在循环程序段错误的任何时间,这里是循环的代码:
glBegin(GL_POINTS);
#pragma omp parallel for
for (int a = 0; a < m_width * m_height; a++)
{
uint8_t r, g, b;
r = m_data[a * m_channels];
g = m_data[a * m_channels + 1];
b = m_data[a * m_channels + 2];
glColor3ub(r, g, b);
glVertex3f(r/255.0 - 0.5, g/255.0 - 0.5, b/255.0 - 0.5);
}
glEnd();
正如你可以看到,代码只是得到M_DATA阵列的一些信息和然后用它调用glColor3ub和glVertex3f,如果我运行这个没有#pragma的代码,代码运行的很好。
gdb显示程序在到达glColor3ub时出现段错误,明确指出问题与openGL有关,也许该函数不是线程安全的?我可以做些什么来纠正代码?
是什么让你相信这会起作用? – genpfault