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

Aktuelle Zeit: Fr Jul 18, 2025 23:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Schneller als glTexSubImage2D?
BeitragVerfasst: Mo Jan 29, 2007 20:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich habe grade etwas bemerkt, was ich so eigentlich nicht erwartet hätte...
Bei meinem Flipbook werden ja ImageSequenzen im RAM gecacht und dann jeweils via glTexSubImage2D als Textur geladen.. das ist ja schon sehr flott.

Jetzt habe ich eben eingebaut das zusätzlich der Grafikkarten RAM auchnoch genutzt werden kann, und hab einfach mal meinen eigenen Cache weggelassen und alle Frames direkt als Textur geladen... bei 300 Frames war der GraKa RAM nach ~100 Frames voll und der rest wurde automatisch von der graKa ausgelagert.

Soo... was mich jetzt aber wundert, die Grafikkarte schafft es viel schneller die Texturdaten aus dem RAM zurück zuholen, als ich das mit glTexSubImage2D je könnte, sprich wenn ich meinen eigenen Cache total ignoriere und alles immer gleich als Textur lade, geht es schneller als wenn ich glTexSubImage2D verwende...

Woran liegt das??

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 20:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also glTexSubImage2D ist normal schon so ziemlich das Schnellste was du hast. Ich denke bei dir wird das Außenrum eher entscheident sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 20:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
ne, am aussenrum kann es nich liegen... weil ich hab im grunde nur glTexSubImage2D auskommentiert..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 21:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Man sollte auch keinen Film nebenbei schauen. ;) Jetzt habe ich deine Frage auch richtig verstanden.

Ich denke OpenGL wird das besser optimieren können. Also muss er keinen Speicher überschreiben. Bei glTexSubImage2D wird normal nur ein rechteckiger Bereich kopiert. Das bedeutet aber, dass er es Zeilenweise Kopieren muss. Das ist immer etwas langsamer als wie wenn er es am Stück kopieren kann. Und es sind getrennte Texturen. Dadurch dürfte die Grafikkarte intern auch ein bisschen Parallel machen können. Da wird die Masse eher in den Kleinigkeiten liegen denke ich.

Aber du solltest bedenken was passiert, wenn du im Bios mal eben nur noch 16 MB AGP Speicher einstellst etc. Also das alles auf einmal in den Speicher zu knallen halte ich für gefährlich. Denke da dürftest du bei dem ein oder anderen System keine Freude habe. Bzw was ist wenn der Film mal 1000 Frames hat?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 21:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lossy eX hat geschrieben:
Aber du solltest bedenken was passiert, wenn du im Bios mal eben nur noch 16 MB AGP Speicher einstellst etc. Also das alles auf einmal in den Speicher zu knallen halte ich für gefährlich. Denke da dürftest du bei dem ein oder anderen System keine Freude habe. Bzw was ist wenn der Film mal 1000 Frames hat?

hehe, klar :)
Alles in den speicher wird ja wenn überhaupt sowieso nur bei Bildsequenzen gemacht, und die sind selten über 300 frames lang (Videos werden nicht gecacht) ;)
Das ganze hab ich auch nur als Option geplant für Sequenzen die größer als HD (1920x1080) sind, weil es sich da schon bemerkbar macht von der geschwindigkeit. Und sowieso wird das ganze nur optional :)

Was mich allerdings grad noch wundert, wenn ich via glTexImage2D die textur erstelle, welche z.B. 2000x2000px (RGBA) groß ist, wird im normalen arbeitsspeicher 2000x2000x4byte speicher gefüllt... obwohl die Textur im Grafikkarten Speicher landet und obwohl ich den Pointer den ich als DatenPointer an glTexImage2D übergeben habe dannach mit FreeMem leere... (Wenn ich Debugge und zeile bei zeile durchsteppe sehe ich im Taskmanager das bei glTexImage2D der speicher ansteigt). Ist das normal? :roll:

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 21:55 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ja,
den der Speicher wird zweimal verwaltet. Einmal von Windows und einmal von deinem Programm. So hat dein Programm den Speicher als leer eingestuft, gibt ihn aber nicht an Windows frei, damit es in naher Zukunft erstmal keinen weiteren Anfordern muss.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Der Speichermanager von Delphi. Japp. Wenn du noch so ein Bild lädst sollte das gleich bleiben. Aber 2000x2000? Hast du dich da nicht ein bisschen vertan? Wobei 2000 für 1080 obwohl 1024 so dicht daneben liegt ist schon übel. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 30, 2007 10:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
das mit 2000x2000 war einfach nur nen beispiel.. ;)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 30, 2007 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi nochmal,

ich hab grad mal testweise den speicher nicht freigegeben nach glTexImage2D.. dann verbraucht das Programm genau doppelt so viel Speicher wie davor..,

Beispiel:

GetMem(DataPointer, [5mb]);
GesamtSpeicherverbrauch: 5mb

glTexImage2D([...], DataPointer);
GesamtSpeicherverbrauch: 10mb

FreeMem(DataPointer);
GesamtSpeicherverbrauch: 5mb

Ist das so wirklich normal? :roll:

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 30, 2007 11:06 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Du kannst ja mal VirtualAlloc/VirtualFree benutzen um den Delphi Speichermanager zu umgehen. Ansonsten ist es auch gut möglich, dass OpenGL noch eine Kopie behält. Bei D3D ist das ja auch der Fall, wenn man seine Texturen nicht bei jeden Device Reset neu laden möchte.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]