Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
mathias hat geschrieben:
Dann war der Weg der ich früher machte, das ich die Texturen bei jeden Draw-Durchgang neu ins VRAM ladete gar nicht so falsch. War dies nicht der ursprüngliche Weg, welcher bei den AGP-Karten vorgesehen war ?
Nope, das ist nur dein eigenes Konstrukt
Eher das Gegenteil trifft zu weil alles so viel viel teurer war. Da blieb nur genug Leistung um ein paar Spezialeffekte, wie etwa dynamische Beleuchtung, auf diese Weise zu lösen. Und selbst da wurde noch Optimiert bis zum Geht-nicht-mehr.
glGenerateTextures solltest beim Updaten nicht verwenden nur beim Erstellen. Texturen solltest Du nur updaten, wenn sich die Daten verändert haben, es ist zwar nicht falsch es in jedem frame zu tun, aber absolut sinnloser ballast.
Teximage alloziert und lädt hoch, texsubimage lädt nur hoch, also brauchst du mindestens einmal teximage, aber das allozieren kannst du dir später sparen.
teximage und texsubimage haben als 2ten parameter das level, das steht für das mipmap-level und du kannst so die einzelnen mipmap-level hochladen.
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Zuletzt geändert von Vinz am Sa Jun 17, 2017 11:25, insgesamt 1-mal geändert.
Ich habe folgendes probiert, und es scheint zu funktionieren. So wie ich sehe, kann man bei glTexSubImage2D offset-Werte mitgeben. und somit nur ein Teil einer Textur schreiben ?
In der Regel werden die MipMaps so gewählt, dass das MipMap mit Level i eine Textur der Abmessung size / (2^i) ist, wenn size die ursprüngliche Abmessung der Textur ist, jedes Mipmap hat also die halbe Breite und Höhe von dem niedriger liegenden Level.
glTexStorage alloziert und legt die Größen entsprechend dieser vorgaben, ausserdem Format etc. für alle Level einer Textur fest, und setzt den Inhalt Null, also so, als würdest Du teximage für jedes Level mit den richtigen Größen aufrufen und NULL am Ende übergeben.
Wenn deine Version mindestens 4.2 ist, kannst Du das machen, und anschließend mit texsubimage die Daten hochladen.
Ansonsten würde ich mit glTexImage jedes level allozieren und hochladen.
Wichtig ist aber dass Du deine MipMaps schon zuvor in der richtigen Größe im RAM hast.
Die Offsets kannst Du alle 0 lassen, wenn nicht nur einen Teil des Bildes updaten möchtest.
Wenn Du aber nicht irgendwas ganz spezielles vorhast, würde ich einfach glGenerateMipmap oder so verwenden
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.