在同一应用程序的不同窗口中混合使用 opengl 和 directdraw?
我正在开发一个具有两个窗口的应用程序:
- 窗口 1:渲染直接绘制表面
- 窗口 2:我希望让它执行纯 OpenGL 调用
我不想在同一个窗口。
我从Open GL常见问题解答中看到(http://www.opengl.org/ resources/faq/technical/mswindows.htm),您不能在同一窗口内混合 API 调用。
所以,我的问题是:一个应用程序可以让一个窗口执行直接绘制,另一个窗口执行 OpenGL 吗?
I'm developing an application with two windows:
- Window 1: Renders direct draw surfaces
- Window 2: I'd like to have it do pure OpenGL calls
I don't want to mix OpenGL and DirectDraw in the same window.
I see from the Open GL FAQ (http://www.opengl.org/resources/faq/technical/mswindows.htm) that you can't mix the API calls inside the same window.
So, my question is: can one application have a window doing direct draw and another doing OpenGL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在同一进程中运行两者应该不会出现问题,当然 ICD 视频驱动程序中的错误除外。
也许最快的判断方法是注释掉 OpenGL 代码并检查应用程序是否仍然崩溃。
或者,强制您的 OpenGL 代码使用 Microsoft 实现 - 它是基于 XP 的软件和基于 Vista 的 Direct3D - 不应该发生冲突。 如果 ddraw 问题仍然存在,则很可能不是 OGL 故障。
There should be no problems running both in the same process, barring of course bugs in the ICD video driver.
Probably the quickest way to tell is commenting out OpenGL code and check if the application still crashes.
Or, force your OpenGL code to use Microsoft implementation - it's software based on XP and Direct3D based on Vista - that should not have conflicts. If the ddraw problem still is there, most probably is not OGL fault.
嗯……我已将 OpenGL 内容隔离到一个线程。 你是这个意思吗? 或者,我认为你是说开始一个新的流程。
问题是:我看到 DirectDraw 代码在 BLT 上崩溃。 它是随机的,但我担心 OpenGL 的东西会杀死它。
Hmmmm.....I've isolated the OpenGL stuff to one thread. Is that what you mean? Or, I think you are saying start a new process.
The issue is: I'm seeing the DirectDraw code crash on a BLT. It is random, but I'm concerned that the OpenGL stuff is killing it.
最坏的情况:让主程序生成一种类型的渲染(比如说 DirectDraw)。 让它生成一个执行其他类型(OpenGL)的进程。 两者之间使用管道进行通信。 这将需要您有两个进程,这可能是一个解决方法,但它至少会起作用。
Worst-case: have your main program spawn do one type of rendering (DirectDraw, let's say). Have it spawn a process which does the other type (OpenGL). Communicate between the two using pipes. This will require you to have two processes, and it might be a bit of a workaround, but it will at least work.