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

Aktuelle Zeit: Fr Jul 18, 2025 11:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Nov 12, 2009 12:57 
Offline
DGL Member

Registriert: Mi Sep 16, 2009 20:21
Beiträge: 9
Hi,

Ich arbeite momentan an meinem kleinen aber feinen Modelformat und Engine und habe ein paar fragen, wie man Materialien verwaltet, und rendering calls optimiert:

1. Wie verhindere ich das doppelte Laden von Texturen und Shadern (wenn beispielsweise verschiedene Models identische Materialien verwenden). Die erstbeste Lösung, die mir eingefallen ist wäre eine art globaler MaterialManager, der mit jedem Model verlinkt ist, und ein doppeltes laden verhindert. Ist das eine gängige Lösung?

2. Theoretisch wäre es ja am sinnvollsten alle Faces im Aktuellen Frame nach Materialien zu sortieren, um sie auf einmal rendern zu können. Macht man das mit allen Faces in der aktuellen Szene oder nur innerhalb eines Models? Ich tendiere eher dazu, dass nur per Model zu machen, da sich sonst alles ziemlich vermischt, und man jeden Frame neu sortieren müsste (bei der per Model lösung würde man nur einmal sortieren müssen), was glaube ich keinen Sinn macht.

Was gibt es noch für optimierungen in der hinsicht?

PS: Ich arbeite in C++, und nicht in delphi :)

Danke!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 12, 2009 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
std::map<std::string,Texture*> m_TextureLookupList; //es gibt eine optimierung auf string, das ganze ist eine string hashlist schnell aber nicht die schnellste hashlösung
http://www.cplusplus.com/reference/stl/map/

Das wäre so die Ideallösung mit wenig Aufwand.
Code:
  1. Texture* tex=m_TextureLookupList["MyCoolTexture.dds"];
  2. if (!tex){//existiert noch nicht muss also geladen werden
  3.   tex=new Texture("MyCoolTexture.dds");
  4.   m_TextureLookupList["MyCoolTexture.dds"]=tex;
  5. }
  6. //mach irgendwas mit der Textur
  7. tex->Activate();
  8. ...

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 13, 2009 11:31 
Offline
DGL Member

Registriert: Mi Sep 16, 2009 20:21
Beiträge: 9
Ah okay danke!
Ich hatte auch bei gamedev ein paar nützliche antworten bekommen:
http://www.gamedev.net/community/forums ... _id=553124

Danke!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.007s | 14 Queries | GZIP : On ]