私は自分のプログラムでピクセル(GL_POINTS)で3Dキューブを埋めるループを持っているので、少しスピードアップするためにOpenMPを使用してマルチコアプロセッサ。OpenGLを使用したOpenGLは常に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に到達したときにsegfaultsが表示され、問題がOpenGLで何かであることを明らかにしています。おそらく関数はスレッドセーフではないでしょうか?コードを修正するために何かできますか?
これで効果があると思われる原因は何ですか? – genpfault