我在我的程序中有一個循環,它將填充像素(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