1
0
Fork 0

Allow the renderer to abort a screen. Fixes crashes occurring with certain output modes, platforms and games.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3576
This commit is contained in:
Ralf Grillenberger 2010-04-07 21:07:17 +00:00
parent dae804a87f
commit 74ddc23daf
3 changed files with 8 additions and 8 deletions

View file

@ -91,7 +91,7 @@ extern Render_t render;
extern ScalerLineHandler_t RENDER_DrawLine;
void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,float fps,double ratio,bool dblw,bool dblh);
bool RENDER_StartUpdate(void);
void RENDER_EndUpdate( );
void RENDER_EndUpdate(bool abort);
void RENDER_SetPal(Bit8u entry,Bit8u red,Bit8u green,Bit8u blue);

View file

@ -201,7 +201,7 @@ static void RENDER_Halt( void ) {
}
extern Bitu PIC_Ticks;
void RENDER_EndUpdate( void ) {
void RENDER_EndUpdate( bool abort ) {
if (GCC_UNLIKELY(!render.updating))
return;
RENDER_DrawLine = RENDER_EmptyLineHandler;
@ -220,7 +220,7 @@ void RENDER_EndUpdate( void ) {
flags, fps, (Bit8u *)&scalerSourceCache, (Bit8u*)&render.pal.rgb );
}
if ( render.scale.outWrite ) {
GFX_EndUpdate( Scaler_ChangedLines );
GFX_EndUpdate( abort? NULL : Scaler_ChangedLines );
render.frameskip.hadSkip[render.frameskip.index] = 0;
} else {
#if 0

View file

@ -660,7 +660,7 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) {
if (vga.draw.split_line==vga.draw.lines_done) VGA_ProcessSplit();
if (vga.draw.lines_done < vga.draw.lines_total) {
PIC_AddEvent(VGA_DrawSingleLine,(float)vga.draw.delay.htotal);
} else RENDER_EndUpdate();
} else RENDER_EndUpdate(false);
}
static void VGA_DrawPart(Bitu lines) {
@ -690,7 +690,7 @@ static void VGA_DrawPart(Bitu lines) {
#ifdef VGA_KEEP_CHANGES
VGA_ChangesEnd();
#endif
RENDER_EndUpdate();
RENDER_EndUpdate(false);
}
}
@ -883,7 +883,7 @@ static void VGA_VerticalTimer(Bitu /*val*/) {
if (GCC_UNLIKELY(vga.draw.parts_left)) {
LOG(LOG_VGAMISC,LOG_NORMAL)( "Parts left: %d", vga.draw.parts_left );
PIC_RemoveEvents(VGA_DrawPart);
RENDER_EndUpdate();
RENDER_EndUpdate(true);
}
vga.draw.lines_done = 0;
vga.draw.parts_left = vga.draw.parts_total;
@ -894,7 +894,7 @@ static void VGA_VerticalTimer(Bitu /*val*/) {
LOG(LOG_VGAMISC,LOG_NORMAL)( "Lines left: %d",
vga.draw.lines_total-vga.draw.lines_done);
PIC_RemoveEvents(VGA_DrawSingleLine);
RENDER_EndUpdate();
RENDER_EndUpdate(true);
}
vga.draw.lines_done = 0;
PIC_AddEvent(VGA_DrawSingleLine,(float)(vga.draw.delay.htotal/4.0 + draw_skip));
@ -1495,5 +1495,5 @@ void VGA_KillDrawing(void) {
PIC_RemoveEvents(VGA_DrawSingleLine);
vga.draw.parts_left = 0;
vga.draw.lines_done = ~0;
RENDER_EndUpdate();
RENDER_EndUpdate(true);
}