Habe mich gefragt ob es passieren kann, dass der Framebuffer mit fremden Sachen gefüllt werden kann, wenn gerade nicht gezeichnet wird?
Ich code nämlich gerade an etwas, wo ich nur gewisse Elemente neuzeichne, und möchte da keine böse Überraschung erleben.
Bei mir ist da noch nichts ungewöhnliches aufgetreten, aber vielleicht ist das bei anderen Grafikkarten unterschiedlich.
OK es hat sich doch noch ein Problem ergeben.
Auf einigen älteren Rechnern wird das was im Framebuffer bleiben sollte, sehr komisch dargestellt:
Der schwarze Kreis in der Mitte ist das, was gerade neugezeichnet wurde und ist auch das einzigste was richtig dargestellt wird.
Also immer blos was gerade gezeichnet wurde wird richtig dargestellt, sobald es aber im nächsten Renderdurchlauf wieder aufgerufen wird, kommt es zu diesem seltsamen Muster.
Ich habe schon probiert den Framebuffer beim starten zu leeren, doch das bringt nichts.
Bei den Rechnern gibt es leider keine Infos zur Grafikkarte, weshalb ich denke, dass es blos eine billige Onboard ist.
Wie seht nutze ich C++...Ich hoffe ihr könnt mir trotzdem helfen.
Ok beide Buffer sind jetzt clear, aber ich bekomme trotzdem noch so seltsame Muster.
Jetzt wo Ich Doublebuffering höre kommt bei mir ne Frage hoch:
Wenn ich abwechselnd in 2 verschiedene Buffer "zeichne", entstehen dann nicht zwei unterschiedliche Bilder?
Beispiel:
Code:
Rendergang1 -> zeichne Punkt an Stelle 13,13
Swap
Rendergang2 -> zeiche Puunkt an Stelle 14,13
Dann habe ich doch nicht ein Bild mit 2 Punkten sondern 2 verschiedene Bilder die immer wechselweise angezeigt werden, oder?
Wieso funktioniert dann die Darstellung bei meinem Programm? (zumindest auf neueren Rechnern)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Keine Ahnung warum das bei dir so ist. Und ja eigentlich bekommst du 2 unterschiedliche Bilder. Eigentlich hättest solche ähnlichen Effekte auf allen Karten bekommen müssen.
Also entweder du entfernst das Double Buffered oder du machst etwas ganz anderes. Weil wenn du das Double Buffered entfernst und etwas kompliziertes zeichnest dann sieht man das mitunter weil es immer alles aktuell auf dem Bildschirm dargestellt wird.
Aber mal eine andere Frage. Was genau hast du damit vor? Evtl gibt es ja noch andere Möglichkeiten die nicht so viel Spielraum lassen.
Ich mache zur Zeit ein Malprogramm und zeichne jeden Bildpixel über GL_POINT, was eine ganze Menge Rechenleistung frisst, deshalb zeichne ich immer blos die geänderten Pixel.
Zu der Problematik hatte ich diesen Thread erstellt, wo ich den Entschluss gefasst habe, mein Programm mit Texturen umzusetzen. Dazu vielleicht noch eine Frage: Könnte ich die Texturen gleich im Grafikspeicher manipulieren und dann zum speichern wieder auslesen? Das wäre vielleicht sogar noch schneller.
Ich hätte aber wirklich gerne erklärt warum mein Programm bei mir funktioniert, denn es gibt auf vielen Rechnern keine Probleme.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Okay. Na ja. Ich denke ganz so einfach wird das nicht. Kleines Beispiel. Wenn du eine Semitransparente Linie zeichnest dann soll diese ja insgesammt Semitransparent sein. Wenn du aber direkt immer den aktuellen Stifft in den Framebuffer zeichnest dann wird das ja schon komplett verrechnet und dann würde das transparente ja wieder mit transparenz übermalt werden.
Du müsstest aus dem aktuellen Stifft eine Textur machen.
Wenn du dann eine Linie zeichnest müsstest du in einem unsichtbaren Layer den Stifft mit voller Sichtbarkeit zeichnen. Und so lange du mit dem Strich nicht fertig bist dürften die beiden Bilder nicht verrechnet werden. Beim Zeichnen müsstest du aber zu erst das bereits existierende Bild zeichnen und anschließend die Zwischenschicht. Wenn du mit der Linie fertig bist dann darfst du die Linie auf das Bild verrechnen.
Mit anderen Worten du wirst eher mit offscreen buffern arbeiten müssen als nur das Überschreiben zu verhindern. Also so etwas wie RenderToTexture oder FrameBufferObject.
So eine ähnliche Technik müsstest du ja eigentlich schon in dem bestehenden Programm haben. Aber mit GL_POINTS wirst du wohl nicht weit kommen. Speziell wenn es etwas komplexer/größer wird.
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.