我正在尝试使用OpenMP并行运行泛洪填充算法。 着色在“关键”部分中定义。但OpenGL仅适用于上下文处于活动状态的一个线程(thread_no == 0)。我试过“#pragma omp master”。 没有结果。 在这里帮助我。
#pragma omp critical //(or master)
{
color = getPixelColor(x, y);
same_color = color.r == oldColor.r && color.g == oldColor.g && color.b == oldColor.b;
if(same_color){
setPixelColor(x, y, newColor);
}
}
void floodFill(GLint x, GLint y, Color oldColor, Color newColor) {
cout<<"Calling "<<x<<" and "<<y<<" in "<<omp_get_thread_num()<<endl;
if(x < 0 || y < 0 || x > 500 || y >500){
return;
}
bool same_color;
Color color;
#pragma omp critical
{
color = getPixelColor(x, y);
same_color = color.r == oldColor.r && color.g == oldColor.g && color.b == oldColor.b;
if(same_color){
setPixelColor(x, y, newColor);
}
}
if(same_color)
{
cout<<"Same Color"<<endl;
#pragma omp task firstprivate(x, y, oldColor, newColor)
{
floodFill(x+1, y, oldColor, newColor);
}
#pragma omp task firstprivate(x, y, oldColor, newColor)
{
floodFill(x, y+1, oldColor, newColor);
}
#pragma omp task firstprivate(x, y, oldColor, newColor)
{
floodFill(x-1, y, oldColor, newColor);
}
#pragma omp task firstprivate(x, y, oldColor, newColor)
{
floodFill(x, y-1, oldColor, newColor);
}
#pragma omp taskwait
}
else{
cout<<"Flood fill"<<endl;
}
return;
}