/* ================== SCR_ScreenShot_f -- johnfitz -- rewritten to use Image_WriteTGA ================== */ void SCR_ScreenShot_f (void) { byte *buffer; char tganame[16]; //johnfitz -- was [80] char checkname[MAX_OSPATH]; int i; // find a file name to save it to for (i=0; i<10000; i++) { q_snprintf (tganame, sizeof(tganame), "spasm%04i.tga", i); // "fitz%04i.tga" q_snprintf (checkname, sizeof(checkname), "%s/%s", com_gamedir, tganame); if (Sys_FileTime(checkname) == -1) break; // file doesn't exist } if (i == 10000) { Con_Printf ("SCR_ScreenShot_f: Couldn't find an unused filename\n"); return; } //get data buffer = (byte *) malloc(glwidth*glheight*3); glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, buffer); // now write the file if (Image_WriteTGA (tganame, buffer, glwidth, glheight, 24, false)) Con_Printf ("Wrote %s\n", tganame); else Con_Printf ("SCR_ScreenShot_f: Couldn't create a TGA file\n"); free (buffer); }
/* ================== SCR_ScreenShot_f ================== */ void SCR_ScreenShot_f (void) { byte *buffer; char tganame[16]; char checkname[MAX_OSPATH]; int i; // // find a file name to save it to // for (i=0; i<10000; i++) { sprintf (tganame, "quake%04i.tga", i); sprintf (checkname, "%s/%s", com_gamedir, tganame); if (Sys_FileTime(checkname) == -1) break; // file doesn't exist } if (i == 10000) { Con_Printf ("SCR_ScreenShot_f: Couldn't find an unused filename\n"); return; } // // get data // buffer = malloc(glwidth * glheight * 4); glReadPixels (glx, gly, glwidth, glheight, GL_RGBA, GL_UNSIGNED_BYTE, buffer); // // now write the file // if (Image_WriteTGA (tganame, buffer, glwidth, glheight, 32, false)) Con_Printf ("Wrote %s\n", tganame); else Con_Printf ("SCR_ScreenShot_f: Couldn't create a TGA file\n"); free (buffer); }
void SCR_ScreenShot_f (void) { uint8_t *buffer; char tganame[32], checkname[PLATFORM_MAX_PATH]; int i; if (!plCreateDirectory(va("%s/%s", com_gamedir, g_state.cScreenshotPath))) Sys_Error("Failed to create directory!\n%s", plGetError()); // find a file name to save it to for (i = 0; i < 10000; i++) { sprintf(tganame, "%s%04i.tga", g_state.cScreenshotPath, i); sprintf(checkname,"%s/%s",com_gamedir,tganame); if(Sys_FileTime(checkname) == -1) break; // file doesn't exist } if(i >= 10000) { Con_Printf ("SCR_ScreenShot_f: Couldn't find an unused filename\n"); return; } //get data buffer = (uint8_t*)malloc(glwidth*glheight*3); glReadPixels(glx,gly,glwidth,glheight,GL_RGB,GL_UNSIGNED_BYTE,buffer); // now write the file if(Image_WriteTGA(tganame,buffer,glwidth,glheight,24,false)) Con_Printf("Wrote %s\n",tganame); else Con_Warning("Failed to write %s\n",tganame); free (buffer); }
/* ================== SCR_ScreenShot_f -- johnfitz -- rewritten to use Image_WriteTGA ================== */ void SCR_ScreenShot_f (void) { byte *buffer; char ext[4]; char imagename[16]; //johnfitz -- was [80] char checkname[MAX_OSPATH]; int i, quality; qboolean ok; Q_strncpy (ext, "png", sizeof(ext)); if (Cmd_Argc () >= 2) { const char *requested_ext = Cmd_Argv (1); if (!q_strcasecmp ("png", requested_ext) || !q_strcasecmp ("tga", requested_ext) || !q_strcasecmp ("jpg", requested_ext)) Q_strncpy (ext, requested_ext, sizeof(ext)); else { SCR_ScreenShot_Usage (); return; } } // read quality as the 3rd param (only used for JPG) quality = 90; if (Cmd_Argc () >= 3) quality = Q_atoi (Cmd_Argv(2)); if (quality < 1 || quality > 100) { SCR_ScreenShot_Usage (); return; } // find a file name to save it to for (i=0; i<10000; i++) { q_snprintf (imagename, sizeof(imagename), "spasm%04i.%s", i, ext); // "fitz%04i.tga" q_snprintf (checkname, sizeof(checkname), "%s/%s", com_gamedir, imagename); if (Sys_FileTime(checkname) == -1) break; // file doesn't exist } if (i == 10000) { Con_Printf ("SCR_ScreenShot_f: Couldn't find an unused filename\n"); return; } //get data if (!(buffer = (byte *) malloc(glwidth*glheight*3))) { Con_Printf ("SCR_ScreenShot_f: Couldn't allocate memory\n"); return; } glPixelStorei (GL_PACK_ALIGNMENT, 1);/* for widths that aren't a multiple of 4 */ glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, buffer); // now write the file if (!q_strncasecmp (ext, "png", sizeof(ext))) ok = Image_WritePNG (imagename, buffer, glwidth, glheight, 24, false); else if (!q_strncasecmp (ext, "tga", sizeof(ext))) ok = Image_WriteTGA (imagename, buffer, glwidth, glheight, 24, false); else if (!q_strncasecmp (ext, "jpg", sizeof(ext))) ok = Image_WriteJPG (imagename, buffer, glwidth, glheight, 24, quality, false); else ok = false; if (ok) Con_Printf ("Wrote %s\n", imagename); else Con_Printf ("SCR_ScreenShot_f: Couldn't create %s\n", imagename); free (buffer); }