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 = {