Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Seit gestern beschäftigt mich die Frage wozu gibt es eigentlich Triple Buffering?
Ich hatte gelesen es ist gut um so genannte Zuckler zu unterbinden. Sprich, wenn die Grafikkarte zu einem ganz dummem moment fertig geworden ist dann noch auf das V-Sync warten muss.
Ist das richtig? Und wenn ja was muss ich tun um das realisieren zu können und welche Nachteile hat das Ganze dann?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
AFAIK hat der Tripplebuffer nur den Zweck, Animationen weicher erscheinen zu lassen, da ja quasi zwei Puffer gezeichnet werden, während der erste Puffer auf den Schirm gebracht wird.
Das dadurch das lässtige VSync-Problem (wenn dieser deaktiviert ist) wegfällt (oder besser stark verringert wird) ist klar.Nachteil ist aber die Tatsache, das Tripplebuffering mehr Grafikkartenspeicher benötigt als Doublebuffering.
Realisieren lässt sich das ganze unter OpenGL, im Gegensatz zu D3D, aber leider nicht, es sei denn du baust dir einen dritten Puffer im Accumulationbuffer oder über einen P-Buffer.
Das geht dann aber logischerweise stark auf die Geschwindigkeit deines Programmes.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Genau das ist das was ich nicht gebrauchen kann. Also der Geschwindigkeitsnachteil. Mit dem Accumbuffer hatte ich auch schon mal rumgespielt. An und für sich ist der ne sau geile Erfindung (Software Antialising, ...) aber der wird nur von sehr wenigen (und sehr teuren) Grakas unterstützt.
Als ich ein bissel rumgesucht habe hatte ich wglCreateLayerContext gefunden. Weißt du wozu die gut ist?
Weswegen ich das eigentlich wissen wollte. Ich bin dabei ein kleines Progrämmchen zu schrieben. Dieses soll mir ein paar Daten visualisieren. (ca. 7GB Heightdata, Textures, ...)
Da habe ich, zu Testzwecken, ein kleines Stück ausgeschnitten und das rotiere ich einfach nur. (nur damit da überhaupt was da ist)
Und wenn ich genau drauf achte, dann sehe ich, dass das relativ oft so komisch zuckelt. Als ob der ein Frame auslassen würde.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Genau das ist das was ich nicht gebrauchen kann. Also der Geschwindigkeitsnachteil. Mit dem Accumbuffer hatte ich auch schon mal rumgespielt. An und für sich ist der ne sau geile Erfindung (Software Antialising, ...) aber der wird nur von sehr wenigen (und sehr teuren) Grakas unterstützt.
Tja, ich finds auch traurig das Consumergrafikkarten immernoch keine Accumulationbuffer unterstützen, kann man mit denen doch sehr tolle Sachen wie z.B. Motionblurr oder eben Antialising auf eine sehr einfache Art und Weise realisieren. Aber ich bin der festen Überzeugung das zumindest nVidias GeforceFX-Nachfolger (nicht die NV3x-Versionen die im März auf der CeBit präsentiert werden) Accumulationbuffer unterstützen wird.
Zitat:
Als ich ein bissel rumgesucht habe hatte ich wglCreateLayerContext gefunden. Weißt du wozu die gut ist?
Zitat:
The wglCreateLayerContext function creates a new OpenGL rendering context for drawing to a specified layer plane on a device context.
Da gebräuchliche Consumergrafikkarten allesamt keine Layer unterstützen hab ich mich damit auch noch nie beschäftigt.Schlau machen kannst du dich aber hier : <a href='http://www.google.de/search?q=wglCreateLayerContext+&ie=UTF-8&oe=UTF-8&hl=de&btnG=Google-Suche&meta=' target='_blank'>http://www.google.de/search?q=wglCreateLay...gle-Suche&meta=</a>
Zitat:
Weswegen ich das eigentlich wissen wollte. Ich bin dabei ein kleines Progrämmchen zu schrieben. Dieses soll mir ein paar Daten visualisieren. (ca. 7GB Heightdata, Textures, ...) Da habe ich, zu Testzwecken, ein kleines Stück ausgeschnitten und das rotiere ich einfach nur. (nur damit da überhaupt was da ist) Und wenn ich genau drauf achte, dann sehe ich, dass das relativ oft so komisch zuckelt. Als ob der ein Frame auslassen würde.
Und genau da greift das Triplebuffering und verhindert dieses eigenartige Zuckeln.Momentan gehts halt nur mit ner eigenen Lösung, aber auf dem nächsten OpenGL-ARB-Meeting steht eine Diskussion über Tripplebuffering unter Windows (unter Linux geht das AFAIK über eine glx-Erweiterung bereits) auf dem Plan, in der die Notwendigkeit dieser Technick hoffentlich als wichtig anerkannt wird.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Der P-Buffer an sich ist nicht schwer zu nutzen.Auf <a href='http://www.delphi3d.net' target='_blank'>http://www.delphi3d.net</a> hat Tom Nyudens ein Beispiel zum Download das den P-Buffer in eine einfach zu nutzende Klasse kapselt.
Das ist zwar für Anwendungen wie das Rendern in eine Textur ganz brauchbar, wenn man dann jedoch einen P-Buffer in der Größe des kompletten Bildschirmes erstellen muß, kostet dies neben einem Drittel der Leistung (da die Szene ja noch einmal gerendert werden muß) auch noch recht viel Videospeicher, nämlich ~3 MByte.
Das ist zwar auf den ersten Blick nicht viel, dabei muß man allerdings noch bedenken das zusammen mit den anderen genutzten Puffern (noch 2 Bildschirmpuffer, ein 24-Bit Z-Puffer, evtl. ein Stencil-Puffer) im Grakaspeicher residierenden Texturen (die wohl im Normalfall den größten Platzbedarf ausmachen) und Displaylisten selbst 64 MByte recht wenig sind.
Bis das OpenGL-ARB also nix eindeutiges zum Thema Tripplebuffering unter OpenGL beschlossen hat, würde ich noch warten.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.