// ******** Timer2A_Handler ************ // Updates sleep state and calls periodic function // For lab 2 this is executing at 2kHz void Timer2A_Handler(void) { Jitter1(); TimerIntClear(TIMER2_BASE, TIMER_TIMA_TIMEOUT); gTimer1Count++; if(gThread1Valid == VALID) { gThread1p(); // Call periodic function } }
//======================================= // Rasterize //--------------------------------------- void MicroPolygon::Rasterize(FrameBuffer &framebuffer) { int xmin=(int)p[0].x,ymin=(int)p[0].y; int xmax=(int)(p[0].x+1),ymax=(int)(p[0].y+1); int i,x,y; float ax,ay,bx,by,z; Colour colour; Opacity opacity; Point3 t; float jx,jy; // Calculate screen-space bounds of micropolygon for(i=1;i<4;i++) { if ((int)p[i].x<xmin) xmin=(int)p[i].x; if ((int)(p[i].x+1)>xmax) xmax=(int)(p[i].x+1); if ((int)p[i].y<ymin) ymin=(int)p[i].y; if ((int)(p[i].y+1)>ymax) ymax=(int)(p[i].y+1); } // Do sampling if (RiGlobal.options.jitter) { for(x=xmin;x<=xmax;x++) { for(y=ymin;y<=ymax;y++) { Jitter1(x,y,0,&jx,&jy); jx+=x; jy+=y; if (this->Sample(jx,jy,z,colour,opacity)) { framebuffer.WritePixel(x,y,z,colour,opacity); } } } } else { for(x=xmin;x<=xmax;x++) { for(y=ymin;y<=ymax;y++) { if (this->Sample(x,y,z,colour,opacity)) { framebuffer.WritePixel(x,y,z,colour,opacity); } } } } }