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...
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?
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?
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.
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.
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.
Mitglieder in diesem Forum: 0 Mitglieder und 0 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.