Apitrace is a tool for recording all the gl commands in a trace file. The trace file can be replay in later time, and they got a nice gui for checking all the gl call every frame, with introspection. They have a glretrace software that replay a trace file. We can use it to get the output of everyframe and push it in a gstreamer pipeline to make a video.
Why not using gtkRecordMyDesktop or other screen capture ? Sometime, the overhead of capturing and encoding video on live take too much CPU. And the application start to slow down. I didn’t see any slowdown using apitrace, and the trace file is very small compared to video output or raw video output.
So first, compile apitrace with stdout support:
$ git clone git://github.com/tito/apitrace.git
$ cd apitrace
$ git checkout snapshot-stdout
$ mkdir build
$ cd build
$ cmake ..
$ make
Take any opengl application, and make a trace file. The trace file will have the name of the binary. In my case, python is an alias to python2.7: the trace file will be python2.7.trace.
$ LD_PRELOAD=./glxtrace.so python ~/code/kivy/examples/demo/pictures/main.py
# replay for fun now
$ ./glretrace python2.7.trace
To be able to make a video from the trace file, you need to know the size of the window, and the initial framerate. Here, my example is running at 800x600, 60fps:
$ ./glretrace -sr python2.7-trace | \
gst-launch fdsrc ! \
videoparse width=800 height=600 format=rgbx framerate=60 ! \
videoflip method=5 ! videorate ! ffmpegcolorspace ! \
video/x-raw-yuv,width=800,height=600,framerate=\(fraction\)30/1 \
x264enc pass=quant ! avimux ! filesink location=output.avi
The final video will be saved in output.avi. You can check the video output here :