Performance von Getmethoden.
-
Hi, ich bin gerade dabei mit verschiedene Matrixfunktionenen zu schreiben und habe mir überlegt warum ich nicht Opengl die Arbeit überlassen soll.
Meine Frage ist jetzt welches von der Performance Besser ist.Das ist jetzt nur ein kleines Beispiel:
Wenn ich es so schreibe
void Translate(float fX, float fY, float fZ) { glPushMatrix(); glLoadIdentity(); glTranslatef(fX, fY, fZ); glGetFloatv(GL_MODELVIEW_MATRIX, v); glPopMatrix(); } void Mult(CMatrix& Mat) { glPushMatrix(); glLoadIdentity(); glLoadMatrixf(v); glMultMatrixf(Mat.v); glGetFloatv(GL_MODELVIEW_MATRIX, v); glPopMatrix(); } usw.
oder wenn ich es normal mit den C++ operatoren und Funktionen mache.
----------------------------------------------------------------------
Meine zweite Frage ist wie sieht es mit den anderen Get Funktionen aus.
Sind die schnell? denn in Direct3D sollen die Getfunktionen ja seh langsam sein.
-
Get-Funktion sind generell sehr langsam, da sie (meistens) Daten von der GPU zurück in den Hauptspeicher der CPU laden müssen und das ist implementierungsbedingt sehr langsam. Versuche das lieber so zu machen, dass du lokal eine Kopie der Matrix behälst und bei Änderungen an dieser die Änderungen an beiden durchführst (also einmal an der GL Matrix und der lokalen). Damit sparste dir das Holen der Matrix über die GL Befehle.
cya
liquid
-
Selbst implementieren sollte schneller sein, es sei denn OpenGL verwendet intern irgendwelche Optimierungen (3DNow!, MMX...).
@LiquidAcid:
Also ich kann mir nicht vorstellen, dass wenn Du "glGetFloatv" aufrufst, er wirklich die Matrix von der Grafikkarte anfordert. OpenGL wird diese Matrix doch selbst auch noch im Systemspeicher speichern.
-
TomasRiker schrieb:
Selbst implementieren sollte schneller sein, es sei denn OpenGL verwendet intern irgendwelche Optimierungen (3DNow!, MMX...).
@LiquidAcid:
Also ich kann mir nicht vorstellen, dass wenn Du "glGetFloatv" aufrufst, er wirklich die Matrix von der Grafikkarte anfordert. OpenGL wird diese Matrix doch selbst auch noch im Systemspeicher speichern.Da wäre ich mir nicht so sicher. Und auch wegen einer anderen Angelegenheit würde ich das lassen. Diese Get-Funktion werden (jedenfalls nach Aussage von NV) immer noch über einen großen binary-switch Baum gehandelt, der nicht gerade performant arbeitet. Möglich dass sie das schon in eine Hash-Map konvertiert haben und die Performance dadurch besser ist, aber da würde ich dennoch Vorsicht walten lassen.
cya
liquid
-
Ok, dann heißt es wohl doch nur testen, testen und testen.
Vielen dank