[英]Draw to another application window with OpenGL
在 Windows 中只使用非常晦澀和骯臟的黑客。 我不推薦它。 Qt 只是一個框架,它取決於底層操作系統。 在 Windows 上,Windows 的所有約束都適用。
在 X11 上,您可以以兩種模式創建 OpenGL 上下文:直接或間接(請參閱 glXCreateContext 和 glXCreateNewContext 的直接參數)。 X 客戶端之間可以共享間接上下文,因為對於 X 服務器而言,沒有進程或不同的客戶端。 只有 XID,OpenGL 上下文就是其中之一。 這允許您在連接到同一 X 顯示器的進程之間傳遞間接 OpenGL 上下文的 XID。 但是,直接上下文繞過 GLX 協議,因此無法共享。
運行另一個應用程序(用 OpenGl 繪制),並在其中繪制。
獲取此程序(通過opengl)繪制的圖像,將其用作紋理,進行一些變換並替換原始圖像。
這是兩件相當不同的事情。 根據進一步的說明,“最簡單”和“最干凈”的方式(如果你可以這樣稱呼的話)做你顯然想要的事情是鈎住wglSwapLayerBuffers
(這似乎是SwapBuffers
和wglSwapBuffers
內部調用的,你我需要確認或鈎住所有三個)。
然后,您擁有一個有效的上下文句柄,並且在交換緩沖區時,您確定(必須!)幀緩沖區內容有效且一致,不存在半繪制的原語。 因此,沒有什么可以阻止您讀回前端或后端緩沖區(或兩者!),在其上運行一些內核,並在將控制權返回給應用程序之前將其寫回。
由於上下文句柄僅對進程有效,因此可靠地工作而沒有麻煩且沒有一些真正討厭的黑客(比這已經更討厭)的唯一方法是插入一個假的opengl32.dll
,就像 GLIntercept 之類的工具所做的那樣。
您也可以從迷你調試器“竊取”句柄,但它對您的進程無效,因此沒有用。
但是……就像 datenwolf 說的:不要這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.