Mercurial > repos > blastem
diff render_sdl.c @ 1532:b505083dcd87
Added png screenshot support
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 24 Mar 2018 19:40:51 -0700 |
parents | 8a3d3bb2cd08 |
children | c59adc305e46 |
line wrap: on
line diff
--- a/render_sdl.c Sat Mar 24 15:33:44 2018 -0700 +++ b/render_sdl.c Sat Mar 24 19:40:51 2018 -0700 @@ -13,6 +13,7 @@ #include "io.h" #include "util.h" #include "ppm.h" +#include "png.h" #ifndef DISABLE_OPENGL #include <GL/glew.h> @@ -597,9 +598,13 @@ : 240; FILE *screenshot_file = NULL; uint32_t shot_height, shot_width; + char *ext; if (screenshot_path && which == FRAMEBUFFER_ODD) { screenshot_file = fopen(screenshot_path, "wb"); if (screenshot_file) { +#ifndef DISABLE_ZLIB + ext = path_extension(screenshot_path); +#endif info_message("Saving screenshot to %s\n", screenshot_path); } else { warning("Failed to open screenshot file %s for writing\n", screenshot_path); @@ -643,7 +648,17 @@ if (screenshot_file) { //properly supporting interlaced modes here is non-trivial, so only save the odd field for now - save_ppm(screenshot_file, texture_buf, shot_width, shot_height, LINEBUF_SIZE*sizeof(uint32_t)); +#ifndef DISABLE_ZLIB + if (!strcasecmp(ext, "png")) { + free(ext); + save_png(screenshot_file, texture_buf, shot_width, shot_height, LINEBUF_SIZE*sizeof(uint32_t)); + } else { + free(ext); +#endif + save_ppm(screenshot_file, texture_buf, shot_width, shot_height, LINEBUF_SIZE*sizeof(uint32_t)); +#ifndef DISABLE_ZLIB + } +#endif } } else { #endif @@ -670,7 +685,17 @@ } else { shot_pitch *= 2; } - save_ppm(screenshot_file, locked_pixels, shot_width, shot_height, shot_pitch); +#ifndef DISABLE_ZLIB + if (!strcasecmp(ext, "png")) { + free(ext); + save_png(screenshot_file, locked_pixels, shot_width, shot_height, shot_pitch); + } else { + free(ext); +#endif + save_ppm(screenshot_file, locked_pixels, shot_width, shot_height, shot_pitch); +#ifndef DISABLE_ZLIB + } +#endif } SDL_UnlockTexture(sdl_textures[which]); SDL_Rect src_clip = {