diff options
author | michi_cc <michi_cc@openttd.org> | 2011-10-04 21:35:40 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2011-10-04 21:35:40 +0000 |
commit | 6dbb050a32122209497d9b41c373b3b759602883 (patch) | |
tree | d4a463d465885f4eb4f376ac548f71d68b09995b /src/video/cocoa/fullscreen.mm | |
parent | 12e28de8187808b166541ee8fa339e38037538fd (diff) | |
download | openttd-6dbb050a32122209497d9b41c373b3b759602883.tar.xz |
(svn r22999) -Codechange: Allow changing the blitter during the running game.
Diffstat (limited to 'src/video/cocoa/fullscreen.mm')
-rw-r--r-- | src/video/cocoa/fullscreen.mm | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/video/cocoa/fullscreen.mm b/src/video/cocoa/fullscreen.mm index 6eea3d64b..db793a6b1 100644 --- a/src/video/cocoa/fullscreen.mm +++ b/src/video/cocoa/fullscreen.mm @@ -250,7 +250,7 @@ class FullscreenSubdriver: public CocoaSubdriver { } - bool SetVideoMode(int w, int h) + bool SetVideoMode(int w, int h, int bpp) { /* Define this variables at the top (against coding style) because * otherwise GCC 4.2 barfs at the goto's jumping over variable initialization. */ @@ -266,14 +266,14 @@ class FullscreenSubdriver: public CocoaSubdriver { /* See if requested mode exists */ boolean_t exact_match; - this->cur_mode = CGDisplayBestModeForParameters(this->display_id, this->device_depth, w, h, &exact_match); + this->cur_mode = CGDisplayBestModeForParameters(this->display_id, bpp, w, h, &exact_match); /* If the mode wasn't an exact match, check if it has the right bpp, and update width and height */ if (!exact_match) { - int bpp; + int act_bpp; CFNumberRef number = (const __CFNumber*) CFDictionaryGetValue(this->cur_mode, kCGDisplayBitsPerPixel); - CFNumberGetValue(number, kCFNumberSInt32Type, &bpp); - if (bpp != this->device_depth) { + CFNumberGetValue(number, kCFNumberSInt32Type, &act_bpp); + if (act_bpp != bpp) { DEBUG(driver, 0, "Failed to find display resolution"); goto ERR_NO_MATCH; } @@ -323,6 +323,7 @@ class FullscreenSubdriver: public CocoaSubdriver { this->device_width = CGDisplayPixelsWide(this->display_id); this->device_height = CGDisplayPixelsHigh(this->display_id); + this->device_depth = bpp; /* Setup double-buffer emulation */ this->pixel_buffer = malloc(this->device_width * this->device_height * this->device_depth / 8); @@ -418,22 +419,18 @@ ERR_NO_MATCH: } public: - FullscreenSubdriver(int bpp) + FullscreenSubdriver() { - if (bpp != 8 && bpp != 32) { - error("Cocoa: This video driver only supports 8 and 32 bpp blitters."); - } - /* Initialize the video settings; this data persists between mode switches */ this->display_id = kCGDirectMainDisplay; this->save_mode = CGDisplayCurrentMode(this->display_id); - if (bpp == 8) this->palette = CGPaletteCreateDefaultColorPalette(); + this->palette = CGPaletteCreateDefaultColorPalette(); this->device_width = CGDisplayPixelsWide(this->display_id); this->device_height = CGDisplayPixelsHigh(this->display_id); - this->device_depth = bpp; - this->pixel_buffer = NULL; + this->device_depth = 0; + this->pixel_buffer = NULL; this->num_dirty_rects = MAX_DIRTY_RECTS; } @@ -512,14 +509,16 @@ public: return QZ_ListModes(modes, max_modes, this->display_id, this->device_depth); } - virtual bool ChangeResolution(int w, int h) + virtual bool ChangeResolution(int w, int h, int bpp) { int old_width = this->device_width; int old_height = this->device_height; + int old_bpp = this->device_depth; - if (SetVideoMode(w, h)) return true; + if (bpp != 8 && bpp != 32) error("Cocoa: This video driver only supports 8 and 32 bpp blitters."); - if (old_width != 0 && old_height != 0) SetVideoMode(old_width, old_height); + if (SetVideoMode(w, h, bpp)) return true; + if (old_width != 0 && old_height != 0) SetVideoMode(old_width, old_height, old_bpp); return false; } @@ -583,9 +582,9 @@ CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp) return NULL; } - FullscreenSubdriver *ret = new FullscreenSubdriver(bpp); + FullscreenSubdriver *ret = new FullscreenSubdriver(); - if (!ret->ChangeResolution(width, height)) { + if (!ret->ChangeResolution(width, height, bpp)) { delete ret; return NULL; } |