回答
運行另一個應用程序(它與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. 從Chrome應用程序窗口打開另一個Chrome應用程序窗口
- 3. OpenGL在另一個線程中繪製
- 4. OpenGL沒有繪製到SDL2窗口
- 5. VB.NET將Tab鍵發送到另一個應用程序窗口
- 6. 從另一個桌面找到應用程序的窗口
- 7. 用另一個窗口控制另一個窗口
- 8. 的OpenGL程序使用多個窗口
- 9. 一個應用程序在另一個的NSView上繪製
- 10. 如何在Windows上使用OpenGL在同一應用程序內繪製兩個單獨的3D窗口?
- 11. 獲取另一個應用程序窗口的唯一ID
- 12. R - 如何將圖形繪製到由另一個應用程序創建的存在窗口
- 13. C++/Linux - 繪製到一個窗口
- 14. 如何用OpenGL繪製字符串到窗口?
- 15. 如何使另一個應用程序的窗口的父窗口?
- 16. 如何在IPhone窗口應用程序中顯示另一個窗口
- 17. OpenGL正交視圖應用程序窗口到全屏
- 18. 使另一個應用程序的窗口無邊框
- 19. C#嘗試縮放另一個應用程序窗口
- 20. 從C#中的另一個應用程序顯示WPF窗口#
- 21. 如何讓另一個應用程序的窗口透明?
- 22. 在另一個應用程序後面打開窗口
- 23. 等待另一個應用程序窗口
- 24. 在另一個應用程序中操作滾動條窗口
- 25. 在另一個Delphi應用程序中嵌入Delphi窗口
- 26. 無法從另一個應用程序(窗口)獲取文本
- 27. 在另一個Android應用程序頂部繪製線條
- 28. 通過另一個應用程序繪製?
- 29. 使用OpenGL/Openframeworks繪圖應用程序
- 30. Opengl在窗口中央繪製
請更具體和/或給我們一些示例代碼。 「在我的程序中我必須運行另一個應用程序」是什麼意思?你是否從你的程序開始一個新的過程? – tr9sh 2012-02-16 09:12:50
目前沒有任何代碼。 「你是否從你的程序開始一個新的過程?」是的,我想是這樣。我選擇運行哪個程序(exe文件),獲取由該程序(通過opengl)繪製的圖像,將其用作紋理,進行一些變換並替換原始圖像。 – Jeka 2012-02-16 09:56:32
@Jeka:你能再詳細一點嗎?你也應該知道,這樣做的解決方案(如鉤子已經回答)可以觸發反病毒/反作弊程序。 – KillianDS 2012-02-16 13:11:13