void display(void)
{
DWORD start = GetTickCount();
vector<int> xCoor;
vector<int> yCoor;
vector<Colour> val;
int SSAA = 2; //Anti-Aliasing value - set at 1 does nothing
int i, j;
Colour col;
Colour colTwo;
Colour result;
TheCamera.setResolution(Nx*SSAA,Ny*SSAA);
SecondCamera.setResolution(Nx*SSAA,Ny*SSAA);
/* clear the window, set it to the background colour */
#pragma omp parallel for firstprivate(j) private(col,colTwo,result) //work-share split up job to threads
for(i=0;i<SSAA*Nx;i=i+SSAA){
for(j=0;j<SSAA*Ny;j=j+SSAA){
for (int AAx=-SSAA+1;AAx<SSAA;AAx++){
for (int AAy=-SSAA+1;AAy<SSAA;AAy++){
Ray ray = TheCamera.ray(i+AAx,j+AAy);
Ray rayTwo = SecondCamera.ray(i+AAx,j+AAy);
if (TheScene.intersect(NULL, ray, col, 1)&&(TheScene.intersect(NULL, rayTwo, colTwo, 1))){
col.blue() = 0;
col.green() = col.green() * (float)0.5;
colTwo.red() = 0;
colTwo.green() = colTwo.green()*(float)0.5;
col = col+colTwo;
col.check();
result = result + col;
}
}
}
#pragma omp critical //only one thread at time
{
//save results
result = result*(1/pow(SSAA,3));
result.check();
xCoor.push_back((int)(i/SSAA));
yCoor.push_back((int)(j/SSAA));
val.push_back(result);
}
result.reset(0,0,0);
}
}//leave multithreading
for(int w=0;w<(int)xCoor.size();w++){
set_pixel(xCoor[w],yCoor[w],val[w]); //read saved results and set pixel colour
}
/* force any unfinished OpenGL commands to be done */
glFlush();
DWORD end = GetTickCount();
cout << "Finished\n" << (end-start) <<"\n";
}