@ -1470,15 +1470,43 @@ static void QZ_DrawScreen(void)
uint width ;
uint pitch ;
uint y ;
QZ_WaitForVerticalBlank ( ) ;
uint num_dirty_rects ;
uint length_drawn ;
uint left ;
uint i ;
src = _cocoa_video_data . pixels ;
dst = ( uint8 * ) _cocoa_video_data . realpixels ;
height = _cocoa_video_data . height ;
width = _cocoa_video_data . width ;
pitch = _cocoa_video_data . pitch ;
for ( y = 0 ; y < height ; y + + ) memcpy ( dst + y * pitch , src + y * width , width ) ;
num_dirty_rects = _cocoa_video_data . num_dirty_rects ;
/ * Check if we need to do anything * /
if ( _cocoa_video_data . num_dirty_rects == 0 ) {
return ;
}
if ( num_dirty_rects > = MAX_DIRTY_RECTS ) {
num_dirty_rects = 1 ;
_cocoa_video_data . dirty_rects [ 0 ] . left = 0 ;
_cocoa_video_data . dirty_rects [ 0 ] . top = 0 ;
_cocoa_video_data . dirty_rects [ 0 ] . right = _cocoa_video_data . width ;
_cocoa_video_data . dirty_rects [ 0 ] . bottom = _cocoa_video_data . height ;
}
QZ_WaitForVerticalBlank ( ) ;
/ * Build the region of dirty rectangles * /
for ( i = 0 ; i < num_dirty_rects ; i + + ) {
y = _cocoa_video_data . dirty_rects [ i ] . top ;
left = _cocoa_video_data . dirty_rects [ i ] . left ;
length_drawn = _cocoa_video_data . dirty_rects [ i ] . right - left + 1 ;
height = _cocoa_video_data . dirty_rects [ i ] . bottom ;
for ( ; y < = height ; y + + ) memcpy ( dst + y * pitch + left , src + y * width + left , length_drawn ) ;
}
_cocoa_video_data . num_dirty_rects = 0 ;
}
static int QZ_ListFullscreenModes ( OTTDPoint * mode_list , int max_modes )