Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 21:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: So Apr 08, 2007 13:09 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 08, 2007 15:38 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.

Code:
  1.  
  2. [DllImport(GL_DLL,EntryPoint ="glBegin"),SuppressUnmanagedCodeSecurity]
  3. public static extern void glBegin(uint  mode);
  4.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 08, 2007 17:28 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 07:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo LaBoda,

wenn du die Performance deines Programms verbessern willst versuch mal dein Mesh in eine Display-Liste zu laden.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 09:20 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 09, 2007 10:35 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 11:49 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 13:59 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 14:34 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 16:33 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man kann die MDAs auch in der IDE (Debug|Execeptions...) ausschalten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 18:16 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 09, 2007 23:38 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
http://msdn2.microsoft.com/en-us/library/d21c150d.aspx

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 10, 2007 09:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 10, 2007 10:49 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Pellaeon hat geschrieben:
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]