Frage

Grüße!

Ich bin Portierung zur Zeit eine Web-Browser-Plugin von Win32 auf MacOSX. Eines der Merkmale des Plug-ins ist, dass, wenn das Modul geladen ist, es einen separaten Prozess hervorbringt, der als der „Motor“ des Plugins dient, und führt Operationen in das Fenster des Plug-ins (genauer gesagt, durch Anbringen eines OpenGL Zusammenhang auf die Zeichnung geordneten Prozess des Fensters und Ausführen von OpenGL-Rendering-Befehle in diesem Zusammenhang). Wir tun dies, weil das Plugin typischerweise als ein Thread innerhalb des Browser-Prozess geladen wird, so stürzt in das Plugin den gesamten Browser herunternehmen würde. Durch die Unterteilung des ‚schweres Heben‘ in einem separaten Prozess und das Plugin-Code sehr schlank zu halten, können wir Benutzer gegen eine solche Abstürze schützen.

Ich möchte dieses Kind-Prozess-Renderer-Architektur auf MacOSX erhalten, aber ich habe eine böse Gerücht (bezogen auf den Google Chrome Web-Browser) gehört, dass Mac OS X, ein Verfahren zur Hand keinen Zugriff auf die Fenster erlauben an einem anderen Prozess. Meine eigene Suche in diesem Raum war nicht schlüssig; wenn jemand eine Kenntnis dieses Problem hat und könnte entweder einen Rat geben, wie dieses Ziel zu erreichen oder einen schlüssigen „kann nicht getan werden,“ wäre es äußerst hilfreich sein.

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Ich war vor einem Jahr, eine Lösung für diese Untersuchung fast. Ich begann ein paar Threads auf den Apfelmailinglisten:

http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg08056.html

http://www.mail-archive.com/quartzcomposer-dev@lists.apple.com/msg01878.html

http://lists.apple.com/archives/mac-opengl/2008/May/msg00099.html

hatte ich zu einer Lösung zurückzukehren, die CGWindowListCreateImage verwendet, die einen Bildschirm Grab des opengl Prozessfenster nahm und wandeln es in den Hauptprozess Fenster in eine Bitmap für die Anzeige. Dies ist weit von effeicient seit Pixeldaten von Video-RAM zum System-RAM übertragen werden.

Ich habe auch versucht ein schwebendes Fenster Lösung. Das opengl Prozessfenster über dem Hauptprozessfenster schwebte und aus dem Hauptfenster auf Mausbewegungen reagieren. Aber ich hatte Probleme mit schleppender Verzögerung und Fenstern z Ordnung.

Sie würden denken, NSWindowSharingReadWrite tun würde, was Sie benötigen, aber doumentation / examples zurück waren dann praktisch nicht vorhanden.

Aber vielleicht haben sich die Dinge im letzten Jahr geändert. Halten Sie mich auf dem Laufenden, wenn Sie etwas Neues finden!

Viel Glück

JC

Andere Tipps

Hier ist die allgemeine Antwort, die von Apple-Entwicklerteam.

Es gibt im Wesentlichen keine Möglichkeit, dies zu tun in MacOSX 10.5 und früher das ist so sauber, wie Anbringen eines OpenGL Rendering Kontext zu einem anderen Fenster des Prozesses. Die Hacks Menschen entwickelt haben, können die besten Lösungen in den Fällen sein.

Das nächste, was wir in MacOS haben 10.6 ist diese Stackoverflow Eintrag

Ein Fenster in einem Prozess kann durch einen anderen Prozess geschrieben werden, scheinbar, wenn der NSWindowSharingType eingestellt ist NSWindowSharingReadWrite. Das wurde in Leopard hinzugefügt. Beachten Sie, dass ich das nicht selbst benutzt habe, aber ich würde sagen, dass es zumindest das für Sie „getan kann nicht“ Hindernis beseitigt; -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top