VAPS XT入门教程17.01:Qt与VAPS XT程序集成
系列索引:VAPS XT入门系列索引
上一篇:VAPSXT入门教程17:集成
本文探索一件事:VAPS XT使用OpenGL绘图,Qt能否直接使用VAPS XT中的OpenGL绘图。
与VAPS XT入门教程15.04:CodedObject机制不一样,因为它使用了VAPS XT内部的OpenGL机制,我们要通用的OpenGL显示方式。
与VAPS XT入门教程15.05:Qt动态加载VAPS XT DLL和VAPS XT入门教程15.05.01:Qt动态加载VAPS XT so和VAPS XT入门教程15.05.02:Qt动态控制VAPS XT多窗口DLL不一样,因为它还是使用了VAPS XT内部的机制。
在VAPS XT入门教程18.03:VxWorks653移植过程中,将VAPS XT程序源码编译为静态库,然后集成至VxWorks653工程中,本文灵感来源于此。
VxWorks653操作系统可以集成VAPS XT程序,并直接使用VAPS XT内部标准OpenGL函数绘图。
那么其他平台、框架是否也可以。
先试一试Qt,然后再看看unity3d、UE4等等其他框架。
Qt框架
Qt部分就使用QOpenGL部分代码。
VAPS XT程序
配置文件
基于wogl.cfg修改成编译静态库的配置wogl_lib.cfg
依赖库
官方提供的静态库模式是Release,如果你使用的是Debug模式,将可能用到的所有依赖库重新编译
HUDExample
打开官方示例程序DrawingIntegration中的HUDExample界面
选择目标平台wogl_lib.cfg,生成代码,编译代码
HUDExample_wogl.lib就是我们需要的
集成
接下来操作在Qt Creator中进行。
在pro文件中添加需要的头文件和依赖库。
在QOpenGL的初始化函数initializeGL中添加UserIntegration的初始化操作
在QOpenGL迭代绘图函数paintGL中添加VAPS XT迭代操作
编译运行
会发现,QOpenGL窗口显示了,但是多出了一个窗口,这个窗口中显示了HUDExample中的内容。
进阶
首先可以确定这个流程是没有问题的,这个操作也没有问题。
那么问题在哪?
VAPS XT提供了Port层,用于移植VAPS XT程序到其他平台,那么这部分代码中势必会有窗口相关操作,可能是glut。
本办法我们将内部的窗口操作移除,并提取出内容相关的OpenGL操作放入QOpenGL中,这样就可以了。
当然,现在我水平不够,先占位,以后再说
这就是 书到用时方恨少 现实版
错误
LNK2038 _ITERATOR_DEBUG_LEVEL的不匹配项:值“0”不匹配值“2”(***.obj)中
编译Qt工程时,编译器报错LNK2038 _ITERATOR_DEBUG_LEVEL的不匹配项:值“0”不匹配值“2”(***.obj)中
原因
- 0不匹配2,Debug模式下使用了Release库文件
- 2不匹配0,Release模式下使用了Debug库文件
解决
在VS工程项目->属性->属性配置->C/C+±>预处理器->预处理定义->添加"_ITERATOR_DEBUG_LEVEL=2"(根据需要添加)
但是VAPS XT是以命令行的模式调用VS的编译器编译代码的,所以我们要将设置写入*.cfg配置文件中。
找到当前使用的配置文件wogl_lib.cfg,找到COMMON_COPTIONS项,在后面添加/D"_ITERATOR_DEBUG_LEVEL=2"
_iterator_debug_level >1 is not supported in release mode
紧接着上一个问题,编译时报错_iterator_debug_level >1 is not supported in release mode
原因
我们把_ITERATOR_DEBUG_LEVEL值修改为DEBUG模式的值,但是提示当前为Release模式
解决
将命令行编译参数修改为DEBUG模式
在COMMON_COPTIONS选项后面继续添加/Zi /DEBUG /D"_DEBUG"
- /DEBUG只是是否要生成调试信息的开关。这个命令行选项在链接器页面那里
- /Zi只是生成的调试信息的格式,这个格式是.pdb文件。当然还有好几种格式。这个命令行在编译页那里
- /D"_DEBUG"使用DEBUG模式
下一章:VAPSXT入门教程18:移植
技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导