(svn r3670) -Codechange: [OSX] rewrote a part of the cocoa video driver to speed it up by 1000% in fullscreen

rewrote QZ_DrawScreen to only redraw dirty rectangles (instead of everything)
	This reduce the OpenTTD time spent on this function from 75% to 6,7% (in main menu)
	Note: window mode is unaffected by this commit
	Note: the mouse pointer can now leave artefacts in debug mode
pull/155/head
bjarni 19 years ago
parent af9463187b
commit aa3e439a68

@ -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)

Loading…
Cancel
Save