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:
parent
dae804a87f
commit
74ddc23daf
3 changed files with 8 additions and 8 deletions
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue