termina sola sierra pudo pro prende macbook mac instalar iniciar high funciona fallo error computadora arranca apaga actualizar actualice macos process quartz-graphics window-handles

sola - macos no se pudo instalar en tu computadora



Mac OS X: ¿Se puede procesar un procesamiento a la ventana de otro proceso? (3)

¡Saludos!

Actualmente estoy portando un complemento de navegador web de Win32 a MacOSX. Una de las características del complemento es que cuando se carga el complemento, genera un proceso separado que sirve como "motor" del complemento y ejecuta las operaciones de dibujo en la ventana del complemento (específicamente, adjuntando un contexto OpenGL al ventana del proceso principal y ejecución de comandos de representación OpenGL en ese contexto). Hacemos esto porque el complemento normalmente se carga como un subproceso dentro del proceso del navegador, por lo que los bloqueos en el complemento eliminarán todo el navegador. Al dividir el ''trabajo pesado'' en un proceso separado y mantener el código del complemento muy delgado, podemos proteger a los usuarios contra tales bloqueos.

Me gustaría conservar esta arquitectura de renderizado de procesos para niños en MacOSX, pero he escuchado un rumor desagradable (relacionado con el navegador web Google Chrome) de que MacOSX no permite que un proceso acceda directamente a sus ventanas a otro proceso. . Mi propia búsqueda en este espacio no ha sido concluyente; Si alguien tiene algún conocimiento de este problema y podría proporcionar algún consejo sobre cómo lograr este objetivo o un "no se puede hacer" más concluyente, sería extremadamente útil.

¡Gracias por tu ayuda!


Aquí está la respuesta general recibida del equipo de desarrollo de Apple.

Básicamente, no hay manera de hacer esto en MacOSX 10.5 y versiones anteriores que sea tan limpia como adjuntar un contexto de representación OpenGL a la ventana de otro proceso. Los hacks que las personas han desarrollado pueden ser las mejores soluciones en esos casos.

Lo más parecido que tenemos en MacOS 10.6 es el sistema IOSurface ; usar eso en 10.6 parece ser la solución más limpia. Si desea que los clics en el proceso de renderizado sean interceptados por el proceso de representación, deberá agrupar los eventos usted mismo y pasarlos al proceso de representación utilizando el método que considere más apropiado.

Puede encontrar más información sobre IOSurface en esta entrada de


Estaba investigando una solución a esto hace casi un año. Comencé algunos hilos en las listas de correo de Apple:

http://www.mail-archive.com/[email protected]/msg08056.html

http://www.mail-archive.com/[email protected]/msg01878.html

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

Tuve que volver a una solución que usaba CGWindowListCreateImage que tomó una captura de pantalla de la ventana del proceso de opengl y la convirtió en un mapa de bits para mostrarla en la ventana principal del proceso. Esto está lejos de ser eficiente ya que los datos de píxeles se transfieren de la memoria RAM de video a la RAM del sistema.

También probé una solución de ventana flotante. La ventana del proceso de opengl flotó sobre la ventana del proceso principal y responde a los movimientos del mouse desde la ventana principal. Pero tuve problemas con el retraso de arrastre y el orden de la ventana z.

Usted pensaría que NSWindowSharingReadWrite haría lo que necesita, pero la documentación / los ejemplos en ese entonces eran prácticamente inexistentes.

Pero tal vez las cosas hayan cambiado en el último año. Mantenme informado si encuentras algo nuevo!

Buena suerte

JC


Una ventana en un proceso puede ser escrita por otro proceso, aparentemente si el NSWindowSharingType está configurado en NSWindowSharingReadWrite . Eso fue agregado en Leopard. Tenga en cuenta que no he usado esto por mi cuenta, pero diría que al menos elimina el obstáculo de "no se puede hacer" para usted ;-)