00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "vegas.h"
00025 #include "error.h"
00026
00027 using namespace lux;
00028
00029
00030 VegasPixelSampler::VegasPixelSampler(int xstart, int xend,
00031 int ystart, int yend) {
00032 int xPos = xstart;
00033 int yPos = ystart;
00034
00035 short int x = (unsigned short int) xPos;
00036 short int y = (unsigned short int) yPos;
00037 TotalPx = 0;
00038 while(true) {
00039 PxLoc px;
00040 px.x = x; px.y = y;
00041 Pxa.push_back(px);
00042 x++;
00043 TotalPx++;
00044 if(x == xend) {
00045 x = xstart;
00046 y++;
00047 if(y == yend)
00048 break;
00049 }
00050 }
00051
00052
00053 for (u_int i=0; i<TotalPx; i++) {
00054 u_int r = Floor2Int( lux::random::floatValueP() * TotalPx );
00055
00056 short int temp = Pxa[i].x; Pxa[i].x = Pxa[r].x; Pxa[r].x = temp;
00057 temp = Pxa[i].y; Pxa[i].y = Pxa[r].y; Pxa[r].y = temp;
00058 }
00059 }
00060
00061 u_int VegasPixelSampler::GetTotalPixels() {
00062 return TotalPx;
00063 }
00064
00065 bool VegasPixelSampler::GetNextPixel(int &xPos, int &yPos, u_int *use_pos) {
00066 u_int pos = (*use_pos);
00067 bool hasMorePixel = true;
00068 if(pos == TotalPx - 1)
00069 hasMorePixel = false;
00070
00071 xPos = Pxa[*use_pos].x;
00072 yPos = Pxa[*use_pos].y;
00073
00074 return hasMorePixel;
00075 }