2个线程 - 一个带有OpenGL窗口的线程,第二个带有WXWIDGETS的窗口



我正在编辑编辑器,我有一个问题,这意味着从我的OpenGL应用程序调用本机文件保存/打开对话框。编辑用我的游戏中的OpenGL GUI编写。因此,我想出的想法是,当用户按"加载"或"保存"时,我将创建一个线程,该线程将创建所需(不可见的)WX窗口,并且会调用WXFileDialog,并且在作业完成后,我将删除该线程。从OpenGL应用程序中以跨平台方式打开/保存对话框,是否有可能或更好的侵犯?

wxwidget具有开放式窗口小部件。将您的OpenGL内容放入此内容,将小部件收到的事件转发到您的GUI系统中,然后您不必为活动循环而战。

正如其他人所说的,最简单的解决方案是将wxwidgets用于主循环,而wxglcanvas进行openggl的东西。

但是,如果由于某些原因是不可能的,那么您确实应该能够从另一个线程中使用WXWIDGETS。只需记住,WXWIDGETS GUI功能只能从A 单个线程中使用,因此您也需要从该线程初始化它。而且,当然,您需要自己处理线程同步,因为wxwidgets对您的程序的其余部分都不了解。

如果您使用的是Glut或等效的,则没有跨平台框架。如果您想要一个跨平台应用程序,那么您将必须选择一个框架(例如WXWIDGETS或QT或其他任何框架)并从那里继续进行。否则,如果您在Windows上,则可以使用对Windows API的本机呼叫,而在其他平台上等效。

Glut只为您提供控制台样式的应用程序。如果您想要GUI,那么即使您不想要跨平台,也必须选择一个GUI框架。有很多选择,选择主要取决于您最熟悉的选择。然后,您将呼叫从您的GUI应用程序中添加到OpenGL库中,但是构建了。这样,您就不必用多个线程弄乱。

可能是您对Glut应用程序进行了大量投资,并且不想仅仅为了获得一些GUI功能而丢弃它。在这种情况下,我建议构建一个与您的Glut应用程序分开的新GUI应用程序,该应用程序使用套接字(或其他Intercocess COM系统)与您现有的应用程序进行通信,但在单独的过程中运行。这样,您将不会遇到由多线程应用程序创建的所有可怕的,难以修复的错误。

最新更新