Stefan Dösinger wrote:
I want to create fraps for linux. Using XShmGetImage() and friends is
too slow. So my first
approach was to create a fullscreen opengl app and do glReadPixels().
But this performs
very badly when there are two opengl applications running at the same
time (fps drops from
Now what are my options besides modifying the wine source?
Do you mean the thing described at www.fraps.com?
exactly that thing :)
AnandTech has created a similar program
(http://www.anandtech.com/linux/showdoc.aspx?i=2218).
They've used the same approach as me, and for run-time linking, they
modify the binary (which I don't
want to do right now, too complicated ATM).
It's certainly interesting, and hooking calls makes sense. There's for sure a
point in it. However there may still be problems:
* There are some closed source games for Linux which load the library at run
time. Your approach will fail here, just as it does with Wine. I don't know
which games are affected, but I have read about this when searching for a
workaround for the slow mouse pointer problem with fglrx.
* The fglrx driver: glReadPixels, glWritePixels, glTexImage2D and friends are
_terribly_ slow with this driver( 1 fps when accessing the back buffer). Just
follow the Direct3D discussions or search the archives, this problem has been
discussed before, and it will come up again(At least when my DX7 patches are
ready). Your glReadPixels approach won't work for radeon cards. I don't know
a fix / workaround. If you have one, I'd really be glad!
I have a nVidia 7800 GTX on a PCI-Express bus, and with a simple
glReadPixels(), I can get ~700MB/s
(makes ~140 fps at 5MB/frame, 1280x1024 RGBA). Is there another function
which can be used for
readback? I don't know any other OpenGL function that could be used for
this. Is there any other?
What about asynchronous glReadPixels using PBOs, does this perform
better on ATI cards? The nvidia
SDK (for windows only) has a performance test application that can be
used to measure the different
readback techniques.
tom