Ich habe diesen Code
glReadBuffer( GL_FRONT );
glReadPixels( 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer );
Das funktioniert perfekt in allen Nvidia- und AMD-GPUs, die ich ausprobiert habe, aber es schlägt in fast jedem einzelnen integrierten Intel-Video fehl, das ich ausprobiert habe. Es funktioniert tatsächlich in einem sehr alten 945GME, schlägt aber in allen anderen fehl. Anstatt einen Screenshot zu bekommen, bekomme ich tatsächlich einen schwarzen Bildschirm.
Wenn es hilft, arbeite ich mit der Doom3-Engine, und dieser Code wird aus dem integrierten Bildschirmaufnahmecode abgeleitet. Übrigens, selbst mit dem Originalspiel kann ich auf diesen Intel-Geräten sowieso keine Bildschirmaufnahme machen. Ich vermute, dass sie den Standard nicht richtig implementieren oder so. Gibt es eine Problemumgehung dafür?
Antworten:
Intel-Grafiken hatten in der Vergangenheit immer Probleme beim Lesen oder Zeichnen aus dem Frontpuffer. Eine gute Faustregel, die ich bei Intel befolge, lautet: Wenn Sie dies in D3D nicht können, versuchen Sie es nicht einmal in OpenGL, auch wenn die Spezifikation besagt, dass Sie dazu in der Lage sein sollten - und D3D nicht Ermöglichen Sie auf diese Weise den Zugriff auf den Frontpuffer. Verwenden Sie stattdessen einfach GL_BACK.
quelle