2009-12-21 56 views
1

是否可以使用Cocoa或其他庫在MacOSX上繪製其他進程窗口?
如果是,有沒有樣品?或者快速總結一下我必須做的事情?
(我需要支持至少OSX 10.5)在macosx上繪製其他進程窗口?

共享存儲器當然是可能的解決方案,但我寧願直描,以避免同步開銷和代碼重複(用例包括一個生產商n客戶)。

+0

出於興趣,你可以詳細說明你正在試圖用這個做什麼?它是另一種應用程序的某種註釋嗎? – 2009-12-21 11:55:22

+0

我有一個'主'應用程序和* n *瀏覽器插件有可繪製的區域。理想情況下,我想避免通過共享內存中的額外緩衝區交換圖像數據。 – 2009-12-21 11:57:35

+0

[Mac OS X:一個進程是否可以渲染到另一個進程的窗口?](http://stackoverflow.com/questions/583202/mac-os-x-can-one-process-render-to-another-過程窗口) – 2012-02-15 05:03:57

回答

2

這是一個重複的Mac OS X: Can one process render to another process’s window?
簡短的回答:如果你只需要支持> = 10.6,你可以使用IOSurface API。
本帖子中的內容:Need help with IOSurface & OpenGL for max os x snow leopard application

如果您可以提供更多關於您嘗試實現的細節,可能還有其他一些解決方案。 (例如,從CGWindowListCreateImage你復化有意渲染的東西到圖像)

編輯:
對我來說似乎是最簡單的方式來完成你想要的是使用某種共享內存。
您可以使用mmap將數據映射到可視化內存中,並在應用程序之間共享繪圖代碼。

編輯2: 我剛纔看到你想避免共享內存。但爲什麼?

+0

謝謝你。我得到它雖然是*它可能與NSWindowSharingReadWrite工作,但我不知道如何* - 也許有人在平均時間計算出來? – 2009-12-21 12:15:09

+1

我最近還調查了分享狀態(但是對於閱讀,而不是寫作) - 我沒有發現任何有用的東西。 如果您更成功,請將結果返回到此處。 – 2009-12-21 12:38:08

+0

關於共享內存,主要有兩個原因:a)我不想同步的開銷等。b)如果可能,我想保留繪圖代碼。如果我要例如在視頻緩衝區中直接解碼? – 2009-12-21 14:00:57