我可以使用opengl在窗口上画一些不属于我的东西吗?
我听说你可以挂钩窗口句柄并将该窗口用作 OpenGL 画布。我知道如何挂钩窗口,但我找不到如何在这个窗口上绘图。
附言。如果有帮助的话我正在使用Qt。
I heard you can hook window handle and use this window as OpenGL canvas. I know how to hook windows, but I can't find how can I draw on this window.
PS. I'm using Qt if it helps.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OpenGL 上下文一次只能在一个线程中使用,并且绑定到进程。因此,需要创建外部进程资源的 OpenGL 上下文。
在 Windows 上,使用一些非常古怪的 hacks 至少在 WinXP 中是可能的(我不知道 Vista 或 7);这通常包括共享大部分进程内存。
在 X11/GLX 上,通过将上下文创建为间接渲染上下文要容易得多(不幸的是,出于某些不正当的原因,OpenGL-3 没有完整的间接 GLX 规范);可以从多个进程访问间接上下文。
无论如何,两个进程必须合作才能完成这项工作。
OpenGL contexts are only usable in one thread at a time and are bound to processes. So what that required was creating a OpenGL context of a foreign process' resource.
On Windows using some very quircky hacks this was possible in at least WinXP (I don't know about Vista or 7); this usually includes making large portions of the process memory shared.
On X11/GLX it's a lot easier by creating the context as indirect rendering context (unfortunately OpenGL-3 has not complete indirect GLX specification, for some shady excuses of reasons); indirect contexts can be accessed from multiple processes.
In any case both processes must cooperate to make this work.
Qt 有一些 NativeWindow 技巧,您可以使用一下。
在 Windows 上,您可以使用 findWindowEx< /a> 获取 HWND 并询问其几何形状,然后将您自己的窗口放置在其顶部。
您确实不应该能够任意干扰另一个进程的窗口——这是一个安全隐患。
Qt has some NativeWindow hacks you can play with a bit.
On Windows you can use findWindowEx to get a HWND and interrogate its geometry, then position your own window on top of it.
You really shouldn't be able to interfere with another process's windows arbitrarily -- it's a security hazard.