回答
運行另一個應用程序(它與OpenGl繪製水手),並繪製它。
得到這個程序繪製的圖像(通過opengl),將它用作紋理,進行一些變換並替換原始圖像。
這些是兩個完全不同的東西。根據進一步的說明,「最簡單」和「最乾淨」的方式(如果你可以稱之爲)根據進一步的說明做你明顯想要做的事情的方法是鉤wglSwapLayerBuffers
(其中似乎是什麼SwapBuffers
和wglSwapBuffers
內部呼叫,你需要確認或者勾選全部三項)。
然後,您擁有一個有效的上下文句柄,並且在交換緩衝區時,您肯定(必然!)幀緩衝區內容是有效且一致的,不存在半繪製原語。因此,沒有什麼能阻止你回讀前面或後面的緩衝區(或兩者!),在它上面運行一些內核,然後在將控制權返回給應用程序之前寫回。
由於上下文句柄是唯一有效的過程,只有這樣,不僅能夠可靠地工作沒有麻煩,沒有一些真是可惡黑客(比這更討厭的是已經)是通過將假opengl32.dll
,就像這樣的工具像GLIntercept一樣。
你也許可以從一個迷你調試器「竊取」手柄,但它不會對你的過程有效,所以沒有用。
但是...像datenwolf說:只是不這樣做。
哦,看起來真的很討厭。所以像fraps這樣的程序(它表明FPS over program)以相同的方式工作? – Jeka 2012-02-16 12:26:31
最有可能。實際的FPS _display_是微不足道的,這可以通過一個分層窗口來完成,除了GDI之外別無它法。但是由於知道FPS涉及知道何時(或多久)緩衝器被切換,所以他們可能需要做API掛鉤。唯一的選擇是閱讀一些特定於IHV的性能計數器,但這同樣麻煩且便攜性較差... – Damon 2012-02-16 12:53:30
至少,我可以通過我的應用程序獲取圖像嗎?我應該使用鉤子來保持最新? – Jeka 2012-02-16 13:28:17
在Windows中只使用非常模糊和骯髒的黑客。我不推薦它。 Qt只是一個框架,依賴於底層的操作系統。在Windows上,所有的Windows限制都適用。
在X11上,你可以在兩種模式下創建的OpenGL上下文:直接或間接(見glXCreateContext和glXCreateNewContext的直接參數)。間接上下文可以在X客戶端之間共享,因爲對於X服務器,沒有進程或不同的客戶端。只有XID,OpenGL上下文就是其中之一。這允許您在連接到同一個X顯示的進程之間傳遞間接OpenGL上下文的XID。直接上下文繞過GLX協議,因此不能共享。
- 1. 在另一個應用程序中的OpenGL窗口
- 2. 從另一個桌面找到應用程序的窗口
- 3. 用另一個窗口控制另一個窗口
- 4. 一個應用程序在另一個的NSView上繪製
- 5. 獲取另一個應用程序窗口的唯一ID
- 6. R - 如何將圖形繪製到由另一個應用程序創建的存在窗口
- 7. C++/Linux - 繪製到一個窗口
- 8. 如何在IPhone窗口應用程序中顯示另一個窗口
- 9. 如何使另一個應用程序的窗口的父窗口?
- 10. 在另一個應用程序中操作滾動條窗口
- 11. 無法從另一個應用程序(窗口)獲取文本
- 12. 從C#中的另一個應用程序顯示WPF窗口#
- 13. 在另一個應用程序後面打開窗口
- 14. 如何讓另一個應用程序的窗口透明?
- 15. 在另一個Delphi應用程序中嵌入Delphi窗口
- 16. OpenGL正交視圖應用程序窗口到全屏
- 17. Opengl在窗口中央繪製
- 18. 在同一個OpenGL窗口中繪製2D和3D
- 19. 使用mingw交叉編譯一個opengl應用程序的窗口
- 20. Facebook應用程序在窗口中顯示一個窗口
- 21. 製作另一個應用程序的窗口最前面和重點
- 22. 如何在另一個窗口的窗體中繪製
- 23. 強制窗口交換應用程序
- 24. 從另一個應用程序控制應用程序
- 25. 從另一個應用程序控制WPF應用程序
- 26. 使win32控制檯應用程序顯示一個窗口
- 27. 製作繪製/繪製應用程序
- 28. 從另一個應用程序抓取應用程序的OpenGL輸出
- 29. 移動或隱藏UWP應用程序窗口到另一個顯示器
- 30. 我的應用程序如何檢測到另一個應用程序窗口的更改?
請更具體和/或給我們一些示例代碼。 「在我的程序中我必須運行另一個應用程序」是什麼意思?你是否從你的程序開始一個新的過程? – tr9sh 2012-02-16 09:12:50
目前沒有任何代碼。 「你是否從你的程序開始一個新的過程?」是的,我想是這樣。我選擇運行哪個程序(exe文件),獲取由該程序(通過opengl)繪製的圖像,將其用作紋理,進行一些變換並替換原始圖像。 – Jeka 2012-02-16 09:56:32
@Jeka:你能再詳細一點嗎?你也應該知道,這樣做的解決方案(如鉤子已經回答)可以觸發反病毒/反作弊程序。 – KillianDS 2012-02-16 13:11:13