Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Ich arbeite grad zum ersten Mal mit OpenGL und .Net zusammen und habe ein Performance-Problem festgestellt. Der X.-Fileloader, an dem ich grade werkle, funktioniert soweit, dass er Meshes (ohne Texturen) lädt. Beim Rendern jedoch ist das Ganze extrem langsam. Ich lasse zwar ohne Optimierungen (VBO etc) rendern, aber bei knapp 1000 Dreiecken (Blender-Affe "Suzanne"), von denen wegen Culling nicht mal die Hälfte gezeichnet werden, gehen die FPS schon auf 60 runter - bei einem Fenster von ca 300x300 Pixel. Ich habe noch ein komplexeres Modell mit knapp 10.000 Dreiecken, damit habe ich im Vollbild nur 6 FPS, bei nem anderen Loader sinds 700 (DirectX-Programm).
Ich gehe mal davon aus, dass es also nicht an Modell und Loader liegt, sondern am OpenGL-Code oder an .NET. Da ich im Initialisieren von OpenGL noch nie so richtig fit war (es gibt ja die Templates ), bitte ich euch mal, sich den entsprechenden Code anzusehen (hauptsächlich BaseGL.cs)...
Vielen Dank schonmal
La Boda
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Im Debug Modus ist es sowieso immer langsamer, weil nicht optimiert wird und bei externen Aufrufen der Stack überprüft wird.
Ansonsten fehlt bei den importierten Funktionen bei dem [DLLImport]
[SuppressUnmanagedCodeSecurityAttribute], so dass bei jedem Aufruf die Rechte erneut geprüft werden müssen. Das ist relativ langsam, weil die aufrufenden Funktionen und deren zugehörige Assemblies auf dem Stack ermittelt werden müssen.
Probier mal bei der opengl.cs bei den wichtigsten Funktion dieses Attribut hinzuzufügen.
z.B.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Hm beide Tipps haben leider nichts genützt. Ich habe das SuppressUnmanagedCodeSecurity auch in WGL.cs und GLU.cs eingebaut.
Ich weiß im Moment auch gar nicht, nach was ich suchen soll...
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Tritt das Problem auch auf, wenn du das Programm außerhalb der IDE startest?
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
La Boda hat geschrieben:
Ich lasse zwar ohne Optimierungen (VBO etc) rendern, aber bei knapp 1000 Dreiecken (Blender-Affe "Suzanne"), von denen wegen Culling nicht mal die Hälfte gezeichnet werden, gehen die FPS schon auf 60 runter - bei einem Fenster von ca 300x300 Pixel.
Also die 60fps könnte ich mir damit erklären, dass OpenGL afaik standardmäßig mit VSync rendert, also die Framezahl der Wiederholfrequenz deines Bildschirmes anzupassen versucht. Allerdings, die 6fps... da würde ich auch den tipp mit DisplayListen geben. Jeden Frame 10k polygone an die Graka zu schicken, das könnte den Grafikbus doch schon runterziehen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Magellan hat geschrieben:
Tritt das Problem auch auf, wenn du das Programm außerhalb der IDE startest?
Nein! Oh wie schön, jetzt habe ich dem 1000 Tri-Modell 1500 FPS und mit dem 10.000er 190 FPS (auch im Vollbild). Ich denke mal, dass man in der IDE das Ganze auch beschleunigen kann, wenn man auf ein paar Debugging-Features verzichtet... weiß jemand die entsprechenden Optionen (habe selber noch nichts gefunden)? Aber ich werde wohl sowieso eher die mit der langsamen Version arbeiten und dafür aufs Debugging zugreifen.
@Displaylist: Die wollte ich eh einbauen, mir ist nur im Vergleich zu älteren Projekten, in denen ich auch immer zuerst ohne DLs arbeite, die Performance - berechtigterweise - zu erbärmlich vorgekommen.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Genau deshalb habe ich auch gefragt.
Du kannst in der Registry einen Eintrag mit dem Namen MDA und dem Wert 0 unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework erzeugen. Dies sollte das Problem lösen. Evtl musst du, wenn du das VS benutzt außerdem deinen Entwicklungsmodus auf "Release" setzen und die IDE neu starten.
Soweit ich weiß kann es mit diesem Registryeintrag zu Problemen führen, wenn du mit COM arbeitest. Ich persönlich entwickle schon seit gut 2 Jahren mit .NET, OpenGL und der Registryänderung. Bisher hatte ich keinerlei Probleme.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Hört sich gut an, aber es funktioniert nur leider nicht.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Wenn das Deaktivieren von MDA nichts bringt bin ich auch ratlos.
MS bietet ein Servicepack für das Visual Studio 2005 an. Vielleicht beseitigt dies das Problem.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Nach was muss ich denn suchen bzw. was sind denn überhaupt MDAs? *sich noobig vorkommt*
Das Service Pack hab ich schon drauf.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Wobei gesagt werden muss das die eigentlich nur nerven, und man sie sehr seltend braucht.
Die Performanceverluste kann ich mir kaum erklären, den ich habe auch schon mit OpenGL gearbeitet unter C# und Visual Studio 2005, und habe dort die volle Performance, allerdings habe ich das direkte Zeichnen mit "glBegin" und "glEnd" noch nicht Probiert, sondern zeichne mit VBO's.
Displaylisten sind übrigens soweit ich informiert bin auch nur emuliert.
P.s.: Im Release Mode kann man auch Debuggen, allerdings kann man z.b. keine Breakpoints auf Klammern setzen ( Im Debugmode steht bei jeder Klammer halt nen "nop" )
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Debuggen im ReleaseMode wäre ich vorsichtig! Ich benutze zwar VS C++ anstatt VS C#, aber dort beim Debuggen zeigt der dann teilweise falsche Werte an. Kann natürlich sein, dass das C# Abteil da besser ist. Aber zum Debuggen ist nunmal der Debug-Modus da, daher sollte man den auch bevorzugen!
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Debuggen im ReleaseMode wäre ich vorsichtig! Ich benutze zwar VS C++ anstatt VS C#, aber dort beim Debuggen zeigt der dann teilweise falsche Werte an. Kann natürlich sein, dass das C# Abteil da besser ist. Aber zum Debuggen ist nunmal der Debug-Modus da, daher sollte man den auch bevorzugen!
Das dürfte tatsächlich an C++ liegen. Wobei ich sagen muss das der C++ Part von VS 2005 eh nicht so Pikelnt ist( Auch in der Prof. die ich benutze ), wobei das schade ist.
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.