使用wxWidgets在GLUT /其他应用
-
13-09-2019 - |
题
我basicly希望得到一个类似天然的窗口GUI系统进入我的OpenGL /游戏。我需要显示一个窗口提供给用户。
我寻找到的wxWidgets。
由于它的工作方式是“偷”的WinMain函数/ MainLoop语句,我试图破解它,所以我可以运行在一个单独的线程的主循环。
由于我无法得到它的wxThread运作良好,我做了一个“样本”与Windows线程...但初始化是在wxWidgets的内部还是破...
在此任何反馈?
我的代码是这样的:
class MyApp: public wxApp
{
virtual bool OnInit();
};
DECLARE_APP(MyApp)
IMPLEMENT_APP_NO_MAIN(MyApp)
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
wxApp* pApp = new MyApp();
wxApp::SetInstance(pApp);
int argc = 0; wxChar ** argv = NULL;
wxEntryStart(argc, argv);
pApp->CallOnInit();
pApp->OnRun();
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wxCmdLineArgType lpCmdLine, int nCmdShow) {
DWORD id = 0;
CreateThread(NULL,0, MyThreadFunction,NULL, 0,&id);
assert(id != NULL);
return 0;
}
我试图使wxWidgets的初始化代码在主线程,并且仅调用CallOnInit()在单独的线程,但同样的结果。
解决方案
在上面的代码应该工作,但它会更简单,只是直接在你的线程函数中调用wxEntry()
。您可能还希望使用其的WinMain状过载或至少提供有效argc
/ argv
(NULL
后者可能解释崩溃)。
其他提示
请注意:大多数的wxWidgets不是线程安全的!您应该只从单个线程做GUI的东西。这应该是正在运行在Windows(或其他)事件循环线程 - 这是最主要的(启动)线,或者一个,在那里你打电话wxEntry。 我设法得到的OpenGL从一个单独的线程渲染在Windows下工作 - 在wxGLCanvas需要在主线程上创建的,需要调用的setCurrent在OpenGL的渲染线程,你必须确保你不渲染,而窗口是调整大小,等等...
您不必做什么特别的宽x使用OpenGL,仅仅指刚伊特诺画 wxGLCanvas
不隶属于 StackOverflow