GPU-komprimierte Texturformate wie DXT / BC / ETC können direkt aus ihrer komprimierten Form gelesen werden. Sie müssen nicht in einen unformatierten RGBA-Puffer entpackt werden.
Das funktioniert so, dass jeder Texelblock (häufig 4x4) eine feste Anzahl von Bits belegt - wir wissen also genau, wie weit der Puffer entfernt ist, um nach einem bestimmten Texel zu suchen - und diese Blöcke können dekomprimiert werden, ohne die gesamte Umgebung zu lesen / vorhergehende Texturinformation. GPUs enthalten spezielle Hardware, die nur die angeforderten Texelblöcke nach Bedarf dekomprimiert, um Textur-Sampling-Anforderungen Ihrer Shader zu erfüllen.
Dies steht im Gegensatz zu Formaten wie jpg und png, bei denen die Menge an Speicherplatz, die jedes Texel belegt, über das Bild variieren kann (detaillierte Bereiche, die mehr Daten belegen, vorhersehbare Bereiche, die weniger belegen). Um also ein bestimmtes Texel zu finden, muss es dekomprimiert werden das ganze Bild oder zumindest große / verteilte Teile davon. Da sie jedoch vorhersagbare Bereiche einer Textur selektiv komprimieren können, neigen sie dazu, Bilder auf kleinere Größen zu komprimieren, um sie auf einer Disc zu speichern oder über ein Netzwerk zu übertragen, als dies bei GPU-freundlichen Formaten der Fall ist. Unterschiedliche Strategien für unterschiedliche Zwecke.
Im Allgemeinen sollte das Stellen mehrerer Fragen über mehrere Posts erfolgen, aber da dies eine ziemlich kurze Antwort ist, werde ich auch Punkt 3 treffen:
" Framebuffer " ist nur ein Teil des Videospeichers, den wir zum Speichern des zusammengesetzten Bildes verwenden, das wir auf dem Bildschirm präsentieren möchten. Beachten Sie die Details in der Antwort von JarkkoL, wo wir diesen Puffer auf einer speziellen Hardware möglicherweise in einem bestimmten Teil unseres verfügbaren Videospeichers lokalisieren , der für die Bandbreitenanforderungen von Renderzielen optimiert ist.