Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}