Hi. I minimize display by ShowWindow( hwnd, SW_MINIMIZE ), and it work but, when I remaximize window, the display is black. Nothing is displaying. Why?
I create display with just ALLEGRO_OPENGL flag. Allegro 5.0.3
]]>The back and front buffers have to be resized, so they are probably filled with uninitialized memory or cleared to black.
Does the screen stay black if you redraw and flip the display? There should be an event you can monitor for when the display is resized.
]]>I had a similar problem. I fixed it like this:
case ALLEGRO_EVENT_DISPLAY_SWITCH_IN: dirty = true; break;
(dirty my way of signaling that the screen needs to be redrawn.)
]]>It don't work. It turns out that functions al_get_display_width and al_get_display_height, always return 0, after minimization and restore to oryginal size.
EDIT: I must resize my display when I get ALLEGRO_EVENT_DISPLAY_SWITCH_IN. Now it work.
]]>That sounds like a bug to me. Shouldn't the window stay the same size whether it is minimized or restored to it's previous size?
]]>Windows says windows that are minimized are of 0 size.
]]>I had this problem a while back too. I observed that minimized cause a size of zero, then when restored it was still seen as 0 until I resized it manually. I think the work around I did was to set my game's size to what was reported by al_get_display_... when I got a switched in event.
]]>What were you using to determine the size?
]]>I used al_get_display_width and height. Through I think it would be more appropriate if either a resize event was posted after a restore, or that no resize event occurred on minimize. (At least on Windows).
This was the code that was called to change the internal size in the game (what the game used to make calculations) which I called in a switch_in to fix the issue.
Dimension Allegro5Graphics::getDisplaySize() { if(al_get_current_display()) return Dimension(al_get_display_width( al_get_current_display()), al_get_display_height(al_get_current_display())); else return Dimension(0,0); }
]]>
Not what I meant. I mean when you restored your window and you saw it as 0, what did you use to see that?
]]>Here is what happened:
Minimize caused a resize event of 0,0 . This set the game to 0,0 too. Then, when I restored I did not receive a resize and therefore the game thought it was 0,0. So there was no way to see that it was 0,0. Allegro was internally correctly updated but did not notify via an event on restore, so the game's logic was still doing 0,0 math even after a restore.
]]>Ok I see. Maybe we should have maximize/minimize or iconify/deiconify (same diff) events.
]]>That could work. They could be display events and therefore have the resolution in the event. If that is done, then I think that a resize event should not be sent on minimize (if that is still how 5.0.3 does it). This would allow the user to have control over this if they need it. (Unless asking the user to acknowledge is necessary in which case a resize event could be sent after minimize and restore).
]]>Unless it makes more sense to just add a resize event for the restore but then you'd want to acknowledge it and what would that do? Kind of complicates things. Well one argument for getting rid of the resize event on minimize is that we're telling the game to render to a 0x0 window which doesn't really make sense... I wonder what other platforms do on minimize/restore though.
]]>