2 * Use something like this:
4 * gcc -shared -fPIC -o glcapture.so glcapture.c -ldl
5 * LD_PRELOAD=`pwd`/glcapture.so ./demo
6 * mencoder -noskip -endpos 76.920 -ovc x264 -x264encopts bitrate=3000:pass=1 -audiofile data/Juledemo.ogg -o tufs.avi mf://\*.tga -mf fps=50 -oac mp3lame -lameopts cbr:br=128
7 * mencoder -noskip -endpos 76.920 -ovc x264 -x264encopts bitrate=3000:pass=2 -audiofile data/Juledemo.ogg -o tufs.avi mf://\*.tga -mf fps=50 -oac mp3lame -lameopts cbr:br=128
17 #define RTLD_NEXT ((void *) -1l)
24 static char buf[WIDTH * HEIGHT * 3];
25 static int frameno = 0;
27 void glXSwapBuffers( Display *dpy, GLXDrawable drawable )
29 void (*real_swap)(Display*, GLXDrawable);
30 real_swap = (void(*)(Display*, GLXDrawable))dlsym(RTLD_NEXT, "glXSwapBuffers");
34 glReadPixels(0, 0, WIDTH, HEIGHT, GL_BGR, GL_UNSIGNED_BYTE, buf);
36 sprintf(filename, "frame%05u.tga", frameno++);
37 ppm = fopen(filename, "w");
38 fwrite("\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", 12, 1, ppm);
40 unsigned short w = WIDTH;
41 fwrite(&w, 2, 1, ppm);
44 unsigned short h = HEIGHT;
45 fwrite(&h, 2, 1, ppm);
47 fwrite("\x18\x00", 2, 1, ppm);
48 fwrite(buf, WIDTH*HEIGHT*3, 1, ppm);
51 real_swap(dpy, drawable);
54 int gettimeofday(struct timeval *tv, struct timezone *tz)
56 printf("gettimeofday frame %u\n", frameno);
57 tv->tv_sec = frameno / FPS;
58 tv->tv_usec = ((double)(frameno % FPS) / FPS) * 1000000;
62 int clock_gettime(clockid_t clk_id, struct timespec *tp)
64 tp->tv_sec = frameno / FPS;
65 tp->tv_nsec = ((double)(frameno % FPS) / FPS) * 1e9;