仅供参考:Win10,x64
我今天开始尝试使用Visual Studio 2015,在弄清楚如何运行C/C++部件后,我试图加载一个使用非官方glsdk的大型个人项目.我试图构建并获得链接器错误.它抱怨freeglutD.lib,glloadD.lib和glutil.lib中引用了未解析的外部符号.它还抱怨我自己的文件中的_MSC_VER不匹配.
我在网上做了一些研究,搞乱了2013和编译器版本(项目属性 - >常规 - >平台工具集)) - 2013年的v120和2015的v140 - 并且能够用v140重建glsdk(由于缺少文件而不包括glmesh) ).然后......它工作得很好.
问题:这是为什么?我认为由符合标准的编译器创建的静态lib文件可以与符合标准的编译器的其他版本一起使用(在本例中,v120上的C/C++和v140上的C/C++).但显然v140不会与之前编译器生成的库一起玩.
如果这只是VS构建例程的黑暗之地,那么我可以放弃这个问题,但我也想知道为什么它们不能一起工作.
我正在试验Qt的工作中的仪器模拟程序的新布局.我们当前的sim在一个窗口中运行所有内容(我们使用过剩(旧)和fltk),它使用glViewport(...)并将glScissor(...)仪器读数分成他们自己的视图,然后它使用某种形式的"ortho2D"调用来创建他们的拥有虚拟像素空间.模拟器当前更新仪器,然后逐个在各自的视口中绘制每个仪器,所有这些都在同一个线程中.
我们想找到一个更好的方法,我们选择了Qt.我在一些很大的限制下工作:
paintEvent(...)方法的开头更新自己是可行的,所以我希望模拟更新在单独的线程中运行.glBegin()和glEnd()之间的所有东西,并且仪器绘制了一堆垃圾变量符号,因此绘图需要花费大量时间,我想将绘图拆分为它自己的线程.我还不知道OpenGL 3是否在桌面上,这对于渲染到屏幕外缓冲区是必要的(我认为).问题: QOpenGLWidget没有可重写的"更新"方法,它只在窗口小部件paintEvent(...)和paintGL(...)调用期间绘制.
暂定解决方案:将模拟器拆分为三个线程:
paintEvent(...),和paintGL(...).在这个设计中,跨线程说话是循环的,单向的,GUI线程提供输入,模拟器线程在下一个循环中考虑该输入,绘图线程读取最新的符号系统并将其呈现给FBO并设置"下一帧可用"标志为true(或者可能发出信号),然后该paintGL(...)方法将该FBO并将其吐出到小部件,从而保持事件处理能力下降和GUI响应能力提高.继续这个循环.
底线问题:我在这里读到GUI操作无法在单独的线程中完成,所以我的方法是否可行?
如果可行,任何其他谨慎或建议将不胜感激.