新项目的技术选型,初步打算是SDL+Opencv+ImGui
一个很重要的目标是,减少新GUI API的学习成本,这样可以聚焦到核心代码上。
使用SDL2肯定免不了和SDL_Renderer打交道,所以选型ImGui的rendering backend,自然首选SDL_Renderer。没想到就开始了踩坑之旅,做个记录。
1号坑
使用ImGui docking分支代码,发现SDL_Renderer作为ImGui的backend时拖拽无效而且伴随严重显示bug,查了下发现是之前修正好的问题,又在docking分支弄出来了。issue
这个坑很快就出了,暂时不使用docking分支代码,先用master分支把工程集成起来再说。
用master分支,非常顺利完成了SDL+ImGui和OpenCV的集成,demo显示正常,感觉良好。
2号坑
官方Wiki连使用SDL_Renderer作为backend显示图片的example都没有。
https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#Example-for-SDL_Renderer-users
3号坑
查了一圈,cv::mat没人转成SDL_Texture,都是用OpenGL来处理成glGenTextures,再cast之后丢给ImGui::Image就可以显示了。转成SDL_Texture则是一点参考信息都没有,更不要说即使转成功了,后面还要考虑ImGui::Image如何使用的问题。
果断立刻改backend为OpenGL,所以就变成了SDL_OpenGL + ImGui + OpenCV快速出坑。