2010-12-15 2 views
0

Hallo Kolleginnen und Cocoa-Entwickler,Lesen/Schreiben beliebigen Bytes VRAM auf OS X 10.4 +

würde ich hier mit einigen der Experten überprüfen gerne zu sehen, wenn sie in der Lage sein könnte, um einen Bereich zu helfen, zu klären, wo die docs fehlen. Im Moment haben wir eine Methode, die den VRAM testen soll, indem wir die Basisadresse der Anzeige erhalten und ein Byte-Muster schreiben/lesen, das an dieser Adresse beginnt. Dies bewirkt, dass jedes Pixel auf der Anzeige nacheinander auf eine bestimmte Farbe eingestellt wird, die dann zurückgelesen wird, um sicherzustellen, dass es dem entspricht, was erwartet wird.

Die ursprüngliche Implementierung verwendete Quickdraw-Funktionen, um diese Adresse zu erhalten, und ich wurde beauftragt, sie für 10.4+ auf den neuesten Stand zu bringen. Ich benutze CGDisplayCaptureWithOptions(kCGDirectMainDisplay, kCGCaptureNoFill) und bekomme dann die Basisadresse durch den Aufruf CGDisplayBaseAddress(kCGDirectMainDisplay). Dies scheint zu tun, was ich erwarte und die Implementierung funktioniert genauso gut wie die vorherige Version.

Die einzige Frage, die mir zu fragen ist, ist, ob das wirklich in VRAM schreiben oder ist es nur der Puffer des Displays im RAM? Oder sollte ich etwas wie OpenGL dazu verwenden? Danke für alle Hinweise und/oder Vorschläge. Ich kann ein Codebeispiel bereitstellen, wenn Sie es für notwendig halten.

Antwort

0

Von Apple docs:

CGDisplayBaseAddress(), veraltet in Mac OS X 10.6

„Gibt die Basisadresse in Framebuffer-Speicher einer Online-Anzeige Statt die rohen Bildpuffer zu verwenden, um zu zeichnen. Auf dem Bildschirm sollten Sie stattdessen eine unterstützte Zeichnungs-Engine wie Quartz oder OpenGL verwenden. "

Es klingt wie eine gute Empfehlung. Sie sollten OpenGL sowohl zum Zeichnen als auch zum Testen verwenden (ich nehme an, mit glReadPixels()).

+0

Danke Costique, dies scheint die einzige Funktion zu sein, die Pre-10.7 unterstützt wird. Ich denke, wir werden es mit OpenGL neu schreiben müssen, wenn es darum geht, die 10.7+ Version zu veröffentlichen, aber in der Zwischenzeit denke ich, dass das jetzt funktionieren wird. Danke noch einmal! – Kross