Ich schreibe ein OpenGL-Programm, das in einen Hilfspuffer zeichnet, dann wird der Inhalt des Hilfspuffers zum Akkumulationspuffer akkumuliert, bevor er in den Back-Puffer GL_RETURN-ediert wird (im Wesentlichen zum Bildschirm zusammengesetzt werden soll). Kurz gesagt, mache ich eine Art Bewegungsunschärfe. Aber das seltsame ist, wenn ich mein Programm neu kompiliere und erneut durchführe, sah ich den Inhalt des Hilfs-/Akkumulationspuffers aus dem vorherigen Programm. Das macht keinen Sinn. Habe ich etwas falsch verstanden, sollte der OpenGL-Zustand beim Neustart des Programms nicht komplett zurückgesetzt werden?Wie konnte der Status von OpenGL-Puffern zwischen Programmläufen beibehalten werden?
Ich bin ein SDL/OpenGL-Programm in Gentoo Linux nVidia Treiber 195.36.31 auf GeForce Go 6150. Schreiben
Danke, zumindest jetzt weiß ich, dass es kein unerwartetes Verhalten ist, obwohl es nur gruselig ist ... –
stimme ich zu. Möchte hinzufügen: unter bestimmten Bedingungen werden Videotreiber aufgefordert, den zugewiesenen Speicher aufgrund von "Sicherheits" -Überlegungen auf Null zu setzen (das bösartige Programm möchte vielleicht wissen, was andere gezeichnet haben). Das ist lächerlich (ich würde sagen, das sollte die Verantwortung dieses Programms sein, das seine Zwischenergebnisse verbergen will), aber so ist es jetzt. – valdo
Ich habe eine Menge Direct3D durch die DirectX9-Ära gemacht. Wenn ich anfing, wurden Framebuffer, Oberflächen usw. uninitialisiert, und Code konnte den Inhalt eines vorherigen Laufs leicht aussetzen. Irgendwann müssen entweder Microsoft oder die Treiberanbieter entschieden haben, dies zu "reparieren", und Sie würden statt dessen gepufferte Puffer bekommen. Ich glaube, es wurde im Namen der Sicherheit getan. Ich würde sagen, die Sicherheitsbedenken sind gültig; wir würden ein System nicht tolerieren, das den Arbeitsablauf des Benutzers übergibt, der die ungereinigten Trümmer anderer Benutzer enthält, und der Framebuffer-RAM sollte nicht anders betrachtet werden. – timday