Things To Do (in no particular order) Tracing: * Allow clamping to a GL version or a number of extensions. * Trace multiple threads * GetCurrentThreadId() * pthread_self() * Put zlib (de)compression in a separate thread. * Trace TSCs * Trace window sizes somehow * Allow to distinguish between the calls really done by the program, vs the fakes one necessary to retrace correctly. * Start tracing on demand (e.g., key-press, or by frame no), emitting calls that recreate all current state. * Add option to include call stack frames in the trace * Call gzflush() only when there is a signal/exception, except of doing it on every call. Retracing: * Use visuals that best match those used in the trace; specially auto detect single/double buffer visuals. * Support multiple contexts * Support multiple threads * Provide a readline-like interactive mode to gltrace * http://github.com/antirez/linenoise * https://github.com/antirez/linenoise/issues#issue/8 * http://hg.youterm.com/radare/file/87579f8c5087/src/dietline.c * Plug memory leaks. * Allow to retrace with two libGL.so in parallel, and output differences in rendered frames / draw calls. * D3D support. GUI: * Timeline view. * Visualize meshes in draw commands. Other: * Side-by-side trace diffing; either as a separate tool on or the GUI. * Side-by-side state diffing. * Ability to extract just a single frame from a trace, and all previous calls that contributed to it: * via a state tracker (i.e., knowledge of how calls affect the state); * or by leveragine retrace, dumping the calls to emit all state at beginning of the frame. See also FIXME, TODO, and XXX comments on the source code.