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

Aktuelle Zeit: Fr Jul 18, 2025 14:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verwalten von Texturen in Hashlisten
BeitragVerfasst: Di Jun 10, 2008 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Hallo ersma :)
gleich die zweite Frage :
Man hat mir geraten meine Texturen in Hashlisten zu verwalten um Prozessorleistung zu sparen.
Leider wieß ich weder was eine Hashliste ist noch wie man Texturen darin verwalten kann.
Kann mir das bitte jemand erklären ?
Hoffentlich könnte ihr mir helfen :)
MFG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 10, 2008 13:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was ist ein Hash. In diesem Fall ist ein Hash die Mögkichkeit einen Wert innerhalb einer Struktur zu verwalten und diesen mittels eines Namens zu identifizieren. Du könntest auch eine TStringList benutzen und bei den Einträgen jeweils ein TObjekt (oder Nachfahre) anhängen. Das würde genau so gut funktionieren. Nur ist der Hash höchstwahrscheinlich schneller, da nicht die gesammte Liste durchsucht werden muss. Der Hash teilt die Einträge mittels eines Algorithmus auf verschiedene Listen auf. Beim Zugreifen kommt der selbe Algorithmus zum Tragen und damit muss nur noch in einer wesentlich kleineren Liste gesucht werden. Das ist dann erwartungsgemäß schneller, da nicht mehr so viele Einträge durchsucht werden müssen. Das wars eigentlich auch schon.

Auf meiner Webseite habe ich eine Hash Klasse zum Download. Ich denke auf die wurde auch angespielt.

Ich weiß jetzt nicht wie du deine Texturen lädst deswegen gehe ich jetzt einfach mal davon aus du benutzt die glBitmap. ;) Dann müsste das in etwas wie folgt gemacht erden. In der Unit Hash befinden sich 2 Klassen. Eine für Integer als "Namen" und eine mit Strings als Namen. Du erstellst eine Klasse TStringHash und im Create gibt du die Maximalanzahl der internen Listen an. 1 oder 2 sind eher nicht so praktisch. Bei 256 Texturen dürfte 127 noch vollkommen okay sein. Erwartest du mehr, dann sollte die Zahl größer werden. Am besten immer Primzahlen dafür verwenden.

Hinzufügen von Texturen geht wie folgt. Du erstellst eine Instanz von TglBitmap2D, lädst du Datei, generierst daraus eine Textur und rufst dann Hash.Add('Wood', glBitmapInstanz); auf. Zum Erfragen der Textur musst du dann Hash.Get('Wood') aufrufen. Aber Vorsicht. Sollte der Name nicht existieren wird nil zurückgegeben. Ist der Pointer gesetzt solltest du ihn nach TglBitmap2D casten und alles ist fein. (TglBitmap2D(PointerVonHashGet).Bind;)

Zum Löschen gibt es nur den Weg mittels GetValues alle Pointer in eine TList stecken zu lassen und sie dann daraus freizugeben.

Du kannst auch alles Andere in ein Hash packen. Also wenn du Textur IDs benutzt, dann kannst du auch den Pointer direkt "missbrauchen". Du solltest aber nicht 2 unterschiedliche Dinge gleichzeit in ein Hash packen (üblich dann 2 Hashs). Wenn doch dann achte darauf, dass du die Pointer später auseinanderhalten kannst. Der Phantasie sind keine Grenzen gesetzt.

PS: Um das dann einfacher benutzen zu können solltest du diese arbeit noch mal in einer Klasse kappseln. Da das Hash manchmal ein bisschen LowLeveliger arbeitet vermeidest du so Fehler und sparst bei intensiver Benutzung auch Programmieraufwand.

PPS: Falls jetzt irgendwas noch nicht ausführlich genug ist, dann scheue dich nicht zu fragen. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 10, 2008 13:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
http://en.wikipedia.org/wiki/Hashmap


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 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.019s | 17 Queries | GZIP : On ]