diff options
-rw-r--r-- | video/cocoa_v.m | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/video/cocoa_v.m b/video/cocoa_v.m index b288b9109..0daffd8f1 100644 --- a/video/cocoa_v.m +++ b/video/cocoa_v.m @@ -984,30 +984,36 @@ static void QZ_UpdateWindowPalette(uint start, uint count) _cocoa_video_data.num_dirty_rects = MAX_DIRTY_RECTS; } -static inline void QZ_WindowBlitIndexedPixelsToView32(int left, int top, int right, int bottom) -{ - int x, y; +static inline void QZ_WindowBlitIndexedPixelsToView32(uint left, uint top, uint right, uint bottom) +{ + const uint32* pal = _cocoa_video_data.palette32; + const uint8* src = _cocoa_video_data.pixels; + uint32* dst = (uint32*)_cocoa_video_data.realpixels; + uint width = _cocoa_video_data.width; + uint pitch = _cocoa_video_data.pitch / 4; + uint x; + uint y; for (y = top; y < bottom; y++) { - const uint8* src = _cocoa_video_data.pixels + y * _cocoa_video_data.width + left; - uint32* trg = (uint32*)_cocoa_video_data.realpixels + y * _cocoa_video_data.pitch / 4 + left; - - for (x = left; x < right; x++, trg++, src++) { - *trg = _cocoa_video_data.palette32[*src]; + for (x = left; x < right; x++) { + dst[y * pitch + x] = pal[src[y * width + x]]; } } } -static inline void QZ_WindowBlitIndexedPixelsToView16(int left, int top, int right, int bottom) +static inline void QZ_WindowBlitIndexedPixelsToView16(uint left, uint top, uint right, uint bottom) { - int x, y; + const uint16* pal = _cocoa_video_data.palette16; + const uint8* src = _cocoa_video_data.pixels; + uint16* dst = (uint16*)_cocoa_video_data.realpixels; + uint width = _cocoa_video_data.width; + uint pitch = _cocoa_video_data.pitch / 2; + uint x; + uint y; for (y = top; y < bottom; y++) { - const uint8* src = _cocoa_video_data.pixels + y * _cocoa_video_data.width + left; - uint16* trg = (uint16*)_cocoa_video_data.realpixels + y * _cocoa_video_data.pitch / 2 + left; - - for (x = left; x < right; x++, trg++, src++) { - *trg = _cocoa_video_data.palette16[*src]; + for (x = left; x < right; x++) { + dst[y * pitch + x] = pal[src[y * width + x]]; } } } @@ -1458,16 +1464,21 @@ static void QZ_WaitForVerticalBlank(void) static void QZ_DrawScreen(void) { + const uint8* src; + uint8* dst; + uint height; + uint width; + uint pitch; uint y; QZ_WaitForVerticalBlank(); - for (y = 0; y < _cocoa_video_data.height; y++) { - const uint8* src = _cocoa_video_data.pixels + y * _cocoa_video_data.width; - uint8* dst = (uint8*)_cocoa_video_data.realpixels + y * _cocoa_video_data.pitch; - - memcpy(dst, src, _cocoa_video_data.width); - } + 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); } static int QZ_ListFullscreenModes(OTTDPoint* mode_list, int max_modes) |