static void SDLGL_CaptureOutput(AG_DriverSDLGL *sgl) { char path[AG_PATHNAME_MAX]; AG_DriverSw *dsw = (AG_DriverSw *)sgl; AG_Surface *s; Snprintf(path, sizeof(path), sgl->outPath, sgl->outFrame); glReadPixels(0, 0, dsw->w, dsw->h, GL_RGBA, GL_UNSIGNED_BYTE, sgl->outBuf); AG_PackedPixelFlip(sgl->outBuf, dsw->h, dsw->w*4); s = AG_SurfaceFromPixelsRGBA(sgl->outBuf, dsw->w, dsw->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0); if (s == NULL) goto fail; switch (sgl->outMode) { case AG_SDLGL_OUT_JPEG: if (AG_SurfaceExportJPEG(s, path) == -1) { goto fail; } break; case AG_SDLGL_OUT_PNG: if (AG_SurfaceExportPNG(s, path) == -1) { goto fail; } break; default: break; } if (++sgl->outFrame == sgl->outLast) { Verbose("Reached last frame; terminating\n"); AG_SDL_Terminate(); } AG_SurfaceFree(s); return; fail: AG_SurfaceFree(s); AG_Verbose("%s; disabling capture\n", AG_GetError()); sgl->outMode = AG_SDLGL_OUT_NONE; }
static int TestGUI(void *obj, AG_Window *win) { char path[AG_PATHNAME_MAX]; AG_Surface *su, *su2; /* Load, display and save a PNG file. */ AG_LabelNewS(win, 0, "Loading agar.png:"); if (!AG_ConfigFile("load-path", "agar", "png", path, sizeof(path))) { if ((su = AG_SurfaceFromPNG(path)) == NULL) { AG_LabelNew(win, 0, "%s: %s", path, AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su); } AG_LabelNewS(win, 0, "Saving agar.png:"); if (AG_SurfaceExportPNG(su, "agar-save.png") == -1) { AG_LabelNew(win, 0, "Save failed: %s", AG_GetError()); } else { if ((su2 = AG_SurfaceFromPNG("agar-save.png")) == NULL) { AG_LabelNew(win, 0, "Load failed: %s", AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su2); } } } else { AG_LabelNewS(win, 0, AG_GetError()); } /* Load/save a PNG file in indexed color format. */ AG_LabelNewS(win, 0, "Loading agar-index.png:"); if (!AG_ConfigFile("load-path", "agar-index", "png", path, sizeof(path))) { if ((su = AG_SurfaceFromPNG(path)) == NULL) { AG_LabelNew(win, 0, "Failed: %s", AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su); } AG_LabelNewS(win, 0, "Saving agar-index.png:"); if (AG_SurfaceExportPNG(su, "agar-index-save.png") == -1) { AG_LabelNew(win, 0, "Save failed: %s", AG_GetError()); } else { if ((su2 = AG_SurfaceFromPNG("agar-index-save.png")) == NULL) { AG_LabelNew(win, 0, "Load failed: %s", AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su2); } } } else { AG_LabelNewS(win, 0, AG_GetError()); } /* Load/save a JPEG file. */ AG_LabelNewS(win, 0, "Loading pepe.jpg:"); if (!AG_ConfigFile("load-path", "pepe", "jpg", path, sizeof(path))) { if ((su = AG_SurfaceFromJPEG(path)) == NULL) { AG_LabelNew(win, 0, "Failed: %s", AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su); } AG_LabelNewS(win, 0, "Saving pepe.jpg:"); if (AG_SurfaceExportJPEG(su, "pepe-save.jpg") == -1) { AG_LabelNew(win, 0, "Save failed: %s", AG_GetError()); } else { if ((su2 = AG_SurfaceFromJPEG("pepe-save.jpg")) == NULL) { AG_LabelNew(win, 0, "Load failed: %s", AG_GetError()); } else { AG_PixmapFromSurface(win, 0, su2); } } } else { AG_LabelNewS(win, 0, AG_GetError()); } return (0); }