Erhalten der OpenGL-Hardwarebeschleunigung mit SDL unter Linux

8

Ich versuche, SDL + OpenGL zu verwenden, aber ich glaube nicht, dass die Hardwarebeschleunigung funktioniert, da die Framerate für etwa 18000 Polys auf einem Quad-Core-Computer etwa 24 fps beträgt, auf einem Intel Atom jedoch hoffnungslose 1-2 fps. Sogar der Quad-Core beginnt zu kämpfen, wenn die Polyzahl darüber steigt.

Ich habe meinen Code überprüft, aber mir fehlt eindeutig etwas Offensichtliches. Ich habe meinen SDL-Initialisierungscode so geändert, dass er denselben Code wie im SDL OpenGL-Test verwendet . Es wird gemeldet, dass SDL_GL_ACCELERATED_VISUAL 1 ist, hw_available in SDL_VideoInfo jedoch 0 ist

Außerdem wird der Anbieter auf beiden Computern korrekt als Nvidia gemeldet, und beschleunigte Apps wie Compiz und glxgears funktionieren einwandfrei.

Irgendwelche Ideen, was Sie versuchen sollten?

Vielen Dank

Robin Elvin
quelle

Antworten:

6

Wenn Sie glBegin () / glEnd () in Ihrem Code verwenden, insbesondere wenn Sie Texturen und Zustände redundant zwischen Frames festlegen (dh mit Textur 1, dann 2, dann 1, dann 2 im Gegensatz zu 1,1,2 zeichnen, 2) Sie haben wahrscheinlich einen Treiber-Overhead. Dies ist insbesondere dann der Fall, wenn Sie feststellen, dass ein langsamer Prozessor tuckert, während er noch eine gute Karte hat. Die Verwendung von glDrawArrays oder ähnlichem hat normalerweise viel zu bieten bessere Leistung.

Ohne eine vollständige Codeliste gibt es jedoch keine Möglichkeit, dies sicher zu wissen. SDL ist ein ziemlich dünner Wrapper. Wenn Sie also nichts wirklich Seltsames tun, würde ich keinen Fehler erwarten. Welche Karten werden auch verwendet?

ChrisE
quelle
Die Karte auf diesem Computer ist eine nVidia Corporation GT218 [ION]. Ich verstehe, dass es etwas langsam sein wird, bevor ich optimiere, aber nicht so langsam. Ich binde 1 Textur und zeichne damit ein einfaches Höhenfeld mit jeweils 1 Dreieck. Eine ziemlich schreckliche Art, Dinge zu tun, aber trotzdem langsamer als erwartet.
Robin Elvin
1
Nehmen Sie einfach die Aufrufe glBegin () / glEnd () außerhalb der Schleife und passen Sie die Zeichenroutine entsprechend an, und die Framerate beträgt bis zu 30 fps. Ich habe mir also überlegt, welchen drastischen Effekt diese Anrufe haben, wenn sie unklug verwendet werden :) Danke!
Robin Elvin
Kein Problem. Froh, dass ich helfen konnte.
ChrisE
@ChrisE Was meinst du mit "SDL ist ein ziemlich dünner Wrapper"?
Chris