捕获 child 进程的 OpenGL 输出?

Capture OpenGL output of child process?

是否有可能捕获 child 进程的 opengl 输出?

Child 不应该有不同的 window。输出应由 parent 捕获和显示。

我知道我可以创建一个图层,我的 child 可以使用它在我的 parent 应用程序中创建 opengl 回调。并通过套接字或管道发送数据。

编辑: 我编写主要和 child 应用程序。

好的,这是我认为可以如何完成的简要说明。这完全未经测试,所以 YMMV。

  1. 在父进程中创建您的 window。根据 this page,您需要使用 CS_OWNDC 样式创建它,这意味着它具有相同的 HDC 永久关联。

  2. 启动您的子进程。您可以将 HWND 作为命令行参数传递给它,转换为 hex-ascii,或者您可以设计一些其他方法。

  3. 在子进程中,调用GetDC取回父进程的window的HDC传给wglCreateContext(我猜你对做那种事了如指掌)。

  4. 在子进程中画画画画

  5. 在退出子进程之前,确保调用 ReleaseDC 释放由 GetDC 分配的所有资源。

应该 工作。例如,我知道 Chrome 为每个浏览器选项卡使用一个单独的进程(这样如果渲染到任何特定选项卡的代码崩溃,它只会影响该选项卡)。


此外,如果您只是因为想重新加载一些(不同的)DLL 而想跳过所有这些步骤,也许您正在寻找 LoadLibrary and GetProcAddress。嗯,也许我不需要写那么多:)