Was sind eigentlich Buffer in z.B OpenGL?

5 Antworten

Die anderen Antworten haben ja schon ausführlich erklärt, was Buffer im allgemeinen sind. Bezüglich OpenGL im konkreten kann ich weiterhelfen.

Im Grunde werden in OpenGL ziemlich viele größere Datenspeicher schlicht als "Buffer" bezeichnet. Im Endeffekt sind das nur unstrukturierte Bytespeicher mit einer festen Größe (bzw. wird bei einer Größenänderung womöglich reallokiert).
Für Struktur darin muss man selber sorgen gemäß Vorgaben der Spezifikation oder je nach Anwendungsfall.
(Dabei kann man auch auf die Nase fallen. Beispielsweise manchmal, wenn man in einem Shader Variablen verwenden möchte, die nicht 4*4 Byte groß sind. In manchen Fällen werden da dann trotzdem 4*4 Byte der Variable zugewiesen.)

Wenn manche Programme Rechenoperationen machen, braucht das Programm eine Art Zwischenlager für Daten, um dann die weiteren Schritte zu unternehmen. Dafür reserviert man sich einen Teil des Speichers, und nennt das dann üblicherweise Buffer. Das sind nur temporäre Daten, also unkritisch, wenn die überschrieben/gelöscht werden im weiteren Programmverlauf.

Bei Grafikkarten sind das meist vorgefilterte Bildinformationen, die zwischengelagert werden, ehe sie mit dem eigentlichen Bild "verschmolzen" werden (bspw. ein Spiegel oder eine gerenderte Szene auf einem Bildschirm innerhalb vom Spiel).

Oder aber es sind fertige gerenderte Bilder, die eingelagert werden zum Senden an den Monitor. Die Schnittstelle sendet dann halt was sie kann, bzw. darf, und verwirft alle unnötigen Bilder. Auch das nennt man Buffern. Also die Grafikkarte liefert 100 FPS, weil sie genug Leistung hat und lagert diese fertigen Bilder im Buffer ein, aber der Monitor bekommt dann nur 60 Bilder pro Sekunde, weil die Bildwiederholungsrate nur auf 60 Hz eingestellt ist. 40 Bilder werden also pro Sekunde verworfen aus dem Buffer. Je nachdem wie gut oder schlecht die Schnittstelle das managed, kommt es beispielsweise zu dem sogenannten Tearing. Weswegen es dann das V-Sync gibt, was sicherstellt, dass die Grafikkarte nur soviel Bilder produziert, wie die Schnittstelle auch senden kann an den Monitor, so dass die Bilder 1:1 abgestimmt sind.

Ich hoffe, ich habe das gut erklärt. Bin jetzt auch kein absoluter Fachmann dafür :)

Ein Buffer ist also ein Platz im Speicher, der bestimmte Dinge lagert und sie dann verwendet, wenn sie eben gebraucht werden. Sie sind nützlich, weil diese Daten dann schon existieren und einfach nur herausgeholt werden müssen, statt dass man diese Daten mitten in der Nutzung erstmal runtergeladen werden müssen, da der Nutzer dann warten müsste. habe ich das richtig verstanden?

Das ist dann mit z.B einem Warteraum in einer Arztpraxis zu vergleichen. Da sind Personen die warten und dann vom Arzt gerufen werden, wenn sie "gebraucht" werden. Im Warteraum können aber auch jedes mal neue Personen rein kommen und dann dort warten.

3
@NFSMostWanted29

Genau. Daten im Buffer werden entweder früher oder später gebraucht und vorgehalten, oder wenn sie nicht gebraucht werden, gelöscht.

Jeder Video- und Musikplayer buffert bspw. auch. Er lädt Dateien mehrere Sekunden vor von der Festlatte oder dem Internet (im Falle von Streaming, wie bspw. Youtube). Auch in einen "Buffer". Sollte die Datenübertragung aus irgend eine Grund dann gestört sein, kann die Musik/das Video trotzdem noch einige Sekunden spielen, bevor es zum Abbruch/Stopp kommt. Der Buffer eignet sich also auch ideal um im Rahmen von Echtzeit-Anwendungen für eine stabile Wiedergabe zu sorgen. Wenn du die Stopp-Taste drückst, hat der Player zwar unnötig Daten vorgebuffert, aber besser das, als wenn die Wiedergabe irgendwann mal ins Stocken geraten wäre weil die Daten nicht rechtzeitig gelesen/empfangen werden konnten.

2
@Kelrycorfg

Super, jetzt muss ich nur noch lernen, wie man die denn überhaupt richtig benutzt 😅 Danke für deine Hilfe!

1
@Kelrycorfg

Ja, ich werde wohl viel googeln müssen. Hab schon ein Projekt angefangen aber als ich überall "Buffer" gehört habe dachte ich mir nur "was???"

1

In der Programmierung werden Buffer (Deutsch auch Puffer genannt) als Zwischenspeicher genutzt, um bestimmte Datenprobleme zu beheben.

Das kann die Erreichung eines andauernden Datenstromes sein, wenn der liefernde Datenstrom nicht immer mit der selben Geschwindigkeit liefert. Es kann zur Vermeidung von zusätzlichen Datentransfers dienen. Ein Puffer-Speicher ist normalerweise schnell auszulesen, der Datentransfer langsamer.

Was jetzt bei OpenGL gebuffert wird oder werden kann, das kann ich nur erahnen.

Ich versuch mal das "buffer" auf deutsch zu erklären : "Puffer". Da geht es in der Datenverarbeitung um angelegten / kurzfristigen Speicherplatz, der zur Arbeit bzw. Datenerstellung vorüber erstellt und nach Fertigstellung wieder gelöscht wird.

In den App's am Computer werden solche Arbeitsplatze für vorübergehende Speicherungen im Arbeitsspeicher für Eingaben benötigt :

z.B. beim Office zum Dokument erstellen und späteren Senden bzw. Speichern. Bei dieser App "Word" werden Deine getippten Buchstaben und Bilder und andere Zeichnungen dazu einfach schnell in einem gerade erstellten Puffer gespeichert; ohne diese Eingaben gleich für das fertige Formular und Bildschirmausgabe zu verwenden. Zum Formularaufbau legt das Programm dann später einen weiteren Puffer an, in dem alles für das Anzeigebild sauber zusammengestellt wird und dann erscheint aus diesem zweiten Puffer das Bild auf dem Monitor.

Wenn das Dokument gespeichert und gedruckt ist und das Programm wieder verlassen wird, werden die Arbeits-Puffer wieder gelöscht und für weitere Arbeiten des Computers zur Verfügung gestellt.

Ebenso kannst Du Dir den Vorgang bei Musikaufnahmen bzw. Filmen vorstellen. Im Grunde kannst Du Dir vorstellen, dass solche Arbeitspuffer in jeder App vorkommen müssen bzw. automatisch vorübergehend gebildet werden.

Diese Arbeitsschritte sind massenhaft beim Programmieren in der EDV möglich; ich hoffe, dass es halbwegs verständlich gewesen ist.

Mit freundlichen Grüßen J.R.

Woher ich das weiß:Berufserfahrung

Die Puffergrößen werden von der eingehenden Datenmenge fortlaufend erweitert, also variable Größen.

0

Beim Videostreaming beispielsweise werden die eintreffenden Video- und Audiodaten erst einmal in einem Buffer zwischengespeichert, bevor sie wiedergegeben werden. So lassen sich kurze Aussetzer in der Übertragung überbrücken und in der falschen Reihenfolge eingetroffene Datenpakete sortieren.

Was möchtest Du wissen?