void S9xPutImage (int width, int height) { static int prevWidth = 0, prevHeight = 0; int copyWidth, copyHeight; Blitter blitFn = NULL; if (GUI.video_mode == VIDEOMODE_BLOCKY || GUI.video_mode == VIDEOMODE_TV || GUI.video_mode == VIDEOMODE_SMOOTH) if ((width <= SNES_WIDTH) && ((prevWidth != width) || (prevHeight != height))) S9xBlitClearDelta(); if (width <= SNES_WIDTH) { copyWidth = width * 2; copyHeight = height * 2; switch (GUI.video_mode) { case VIDEOMODE_BLOCKY: blitFn = S9xBlitPixScaled16; break; case VIDEOMODE_TV: blitFn = S9xBlitPixScaledTV16; break; case VIDEOMODE_SMOOTH: blitFn = S9xBlitPixSmooth16; break; case VIDEOMODE_SUPEREAGLE: blitFn = S9xBlitPixSuperEagle16; break; case VIDEOMODE_2XSAI: blitFn = S9xBlitPix2xSaI16; break; case VIDEOMODE_SUPER2XSAI: blitFn = S9xBlitPixSuper2xSaI16; break; case VIDEOMODE_EPX: blitFn = S9xBlitPixEPX16; break; case VIDEOMODE_HQ2X: blitFn = S9xBlitPixHQ2x16; break; } } else if (height <= SNES_HEIGHT_EXTENDED) { copyWidth = width; copyHeight = height * 2; switch (GUI.video_mode) { default: blitFn = S9xBlitPixHiRes16; break; case VIDEOMODE_TV: blitFn = S9xBlitPixHiResTV16; break; } } else { copyWidth = width; copyHeight = height; blitFn = S9xBlitPixSmall16; } blitFn((uint8 *) GFX.Screen, GFX.Pitch, GUI.blit_screen, GUI.blit_screen_pitch, width, height); if (height < prevHeight) { int p = GUI.blit_screen_pitch >> 2; for (int y = SNES_HEIGHT * 2; y < SNES_HEIGHT_EXTENDED * 2; y++) { uint32 *d = (uint32 *) (GUI.blit_screen + y * GUI.blit_screen_pitch); for (int x = 0; x < p; x++) *d++ = 0; } }
void S9xPutImage (int width, int height) { static int prevWidth = 0, prevHeight = 0; int copyWidth, copyHeight; Blitter blitFn = NULL; #if 0 // AWH if (GUI.video_mode == VIDEOMODE_BLOCKY || GUI.video_mode == VIDEOMODE_TV || GUI.video_mode == VIDEOMODE_SMOOTH) if ((width <= SNES_WIDTH) && ((prevWidth != width) || (prevHeight != height))) S9xBlitClearDelta(); if (width <= SNES_WIDTH) { if (height > SNES_HEIGHT_EXTENDED) { copyWidth = width * 2; copyHeight = height; blitFn = S9xBlitPixSimple2x1; } else { copyWidth = width * 2; copyHeight = height * 2; switch (GUI.video_mode) { case VIDEOMODE_BLOCKY: blitFn = S9xBlitPixSimple2x2; break; case VIDEOMODE_TV: blitFn = S9xBlitPixTV2x2; break; case VIDEOMODE_SMOOTH: blitFn = S9xBlitPixSmooth2x2; break; case VIDEOMODE_SUPEREAGLE: blitFn = S9xBlitPixSuperEagle16; break; case VIDEOMODE_2XSAI: blitFn = S9xBlitPix2xSaI16; break; case VIDEOMODE_SUPER2XSAI: blitFn = S9xBlitPixSuper2xSaI16; break; case VIDEOMODE_EPX: blitFn = S9xBlitPixEPX16; break; case VIDEOMODE_HQ2X: blitFn = S9xBlitPixHQ2x16; break; } } } else if (height <= SNES_HEIGHT_EXTENDED) { copyWidth = width; copyHeight = height * 2; switch (GUI.video_mode) { default: blitFn = S9xBlitPixSimple1x2; break; case VIDEOMODE_TV: blitFn = S9xBlitPixTV1x2; break; } } else { copyWidth = width; copyHeight = height; blitFn = S9xBlitPixSimple1x1; } // domaemon: this is place where the rendering buffer size should be changed? blitFn((uint8 *) GFX.Screen, GFX.Pitch, GUI.blit_screen, GUI.blit_screen_pitch, width, height); // domaemon: does the height change on the fly? if (height < prevHeight) { int p = GUI.blit_screen_pitch >> 2; for (int y = SNES_HEIGHT * 2; y < SNES_HEIGHT_EXTENDED * 2; y++) { uint32 *d = (uint32 *) (GUI.blit_screen + y * GUI.blit_screen_pitch); for (int x = 0; x < p; x++) *d++ = 0; } }