01 Oct 2019
Sie kennen das: man braucht für Benchmark-Zwecke eben schnell das Programm fgl_glxgears, aber es ist momentan nicht auffindbar. So einfach ist die Lösung:
Die Datei fgl_glxgears.tar.gz herunterladen. Danach einfach
bash-5.0$ tar -xvzf fgl_glxgears.tar.gz
fgl_glxgears/
fgl_glxgears/README
fgl_glxgears/Makefile.Linux
fgl_glxgears/glATI.h
fgl_glxgears/Imakefile
fgl_glxgears/fgl_glxgears.man
fgl_glxgears/fgl_glxgears.c
fgl_glxgears/wglATI.h
Es müssen mindestens folgende Programme und Bibliotheken installiert sein: gcc, make, libx11-dev, libgl-dev, libglu-dev
bash-5.0$ make -f Makefile.Linux
gcc -o fgl_glxgears -Wall -g -I/usr/X11R6/include -L/usr/X11R6/lib -lGL -lGLU -lX11 -lm fgl_glxgears.c
fgl_glxgears.c: In function 'event_loop':
fgl_glxgears.c:1086:20: warning: variable 'r' set but not used [-Wunused-but-set-variable]
int r, code;
bash-5.0$ ./fgl_glxgears
Using GLX_SGIX_pbuffer
386 frames in 5.0 seconds = 77.200 FPS
Kernel | Processor | Graphics Card | FPS | Anmerkung |
---|---|---|---|---|
Linux 4.4.0 32-Bit | Intel Atom CPU N270 @ 1.60GHz | Intel Mobile 945GSE | 44 | |
Linux 4.4.164 64-Bit | AuthenticAMD E-350 @ 1.60GHz | ATI Wrestler Radeon HD 6310 | 77 | ATI fglrx driver |
Linux 5.3.1 64-Bit | Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz | Intel HD Graphics 5500 | 60 | |
Linux 5.3.1 64-Bit | Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz | NVIDIA GeForce GTX 950M | 1700 | Nvidia Driver |
Linux 5.0.0 64-Bit | AMD FX(tm)-4300 Quad-Core @ 2.20GHz | NVIDIA GeForce GTX 560 | 60 | Xorg Nouveau Driver |
Linux 4.4.164 65-Bit | AMD FX(tm)-6300 Six-Core @ 3.5GHz | AMD/ATI RS780L [Radeon 3000] | 60 | Xorg Radeon Driver |
Dies taugt wohl nicht als Benchmark. Es zeigt, ob das VSYNC aktiv ist. Vorausgesetzt, die Grafikkarte ist schnell genug, sollten hier immer 60 Frames pro Sekunde stehen. Wenn es mehr ist, geht der Sync nicht. Hier ist noch weitere Forschung nötig.
Wenn nur Software Rendering aktiv ist, hat man eine schlechte Framerate.
chrissie@pc ~ $ glxinfo|grep rendering
direct rendering: Yes
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 72 (X_PutImage)
Serial number of failed request: 59
Current serial number in output stream: 68
Dann hat man z. B. die falsche Pixel-Tiefe eingestellt, z. B. 16 statt 32. Einfach ein bisschen rumspielen. Garantie auf das Programm gebe ich sowieso wie immer keine!
gcc -o fgl_glxgears -Wall -g -I/usr/X11R6/include -L/usr/X11R6/lib -lGL -lGLU -lX11 -lm fgl_glxgears.c
fgl_glxgears.c: In function \xe2\x80\x98event_loop\xe2\x80\x99:
fgl_glxgears.c:1086:20: warning: variable \xe2\x80\x98r\xe2\x80\x99 set but not used [-Wunused-but-set-variable]
int r, code;
^
/tmp/cc5UAIuF.o: In function `gear':
~/fgl_glxgears/fgl_glxgears.c:200: undefined reference to `glShadeModel'
~/fgl_glxgears/fgl_glxgears.c:202: undefined reference to `glNormal3f'
~/fgl_glxgears/fgl_glxgears.c:205: undefined reference to `glBegin'
~/fgl_glxgears/fgl_glxgears.c:208: undefined reference to `sin'
[...]
~/fgl_glxgears/fgl_glxgears.c:1314: undefined reference to `glXDestroyContext'
~/fgl_glxgears/fgl_glxgears.c:1315: undefined reference to `glXDestroyPbuffer'
~/fgl_glxgears/fgl_glxgears.c:1325: undefined reference to `glXDestroyContext'
~/fgl_glxgears/fgl_glxgears.c:1326: undefined reference to `XDestroyWindow'
~/fgl_glxgears/fgl_glxgears.c:1328: undefined reference to `XCloseDisplay'
collect2: error: ld returned 1 exit status
Makefile.Linux:3: recipe for target 'fgl_glxgears' failed
make: *** [fgl_glxgears] Error 1
Das liegt daran, weil zumindest bei einigen gcc-Versionen die Linker-Flags nach dem C-file stehen müssen. Ich habe das jetzt geändert.