学习c++ gtk(gtkmm) opengl(es)——开始
Ubuntu Linux PC端:除QT外,备选方案:GTKMM

底层:X11、wayland 二选择一
(1)Ubuntu20.04+ / Ubuntu22.04+:使用 wayland / xwayland
(2)wayland还在发展中,老系统还是X11天下
(3)wayland下除QT外还没有好的桌面GUI框架
(4)wayland下使用EGL,自己创建GUI框架(未来要做的事),在嵌入式端比较合适,如后续的RK3588平台上可以尝试下

2. GUI:GTK 、FLTK、wxWidgets、(GLFW / SDL)IMGUI
(1)wxWidgets
https://wiki.wxwidgets.org/Supported_Platforms
wxMSW、wxGTK、wxX11、wxDFB
宏定义来实现:在网络上某处文章也提到了wxWidgets这种跨平台实现,使用宏定义统一接口来隐藏平台差异和选择
(2)FLTK
比较简单,申明函数,win32一个实现,xlib一个实现,编译选择
WIN32、__CYGWIN__、__APPLE__、__APPLE_QUARTZ__、USE_X11、USE_XFT
使用XFT时:

一个button只画四条边
没有思路用它来做复杂的界面
(3)IMGUI
作为PC端软件来说,还不适合
换个思路,在嵌入式上可能还可以
使用shader来做多个层合成,一个视频层,一个绘图层,一个GUI层
" vec4 t1 = texture(tex1, vfTexPos); \n"
" vec4 t2 = texture(tex2, vfTexPos); \n"
" vec4 t3 = texture(tex3, vfTexPos); \n"
" float r = t2.r + t1.r * (1.0 - t2.a); \n"
" r = t3.r + r * (1.0 - t3.a); \n"
" float g = t2.g + t1.g * (1.0 - t2.a); \n"
" g = t3.g + g * (1.0 - t3.a); \n"
" float b = t2.b + t1.b * (1.0 - t2.a); \n"
" b = t3.b + b * (1.0 - t3.a); \n"
" fragColor = vec4(r, g, b, 1.0); \n"
(4)GTK
对于目前做个PC端简易软件来说,只能选GTK了。
选择困难症犯了,GTK3 ?GTK4?
GTK4在OpenGL上改善很多,但某些GTK3特性被移除了,很不方便,难怪那么多选择放弃GTK的。
因为要使用OpenGL,还是选择GTK4吧
选择困难症犯了,GTK ?GTKMM?
这么多年没用C++(用也就用QT),自己去封装GTK,思维还不够,还是用GTK官方的C++绑定GTKMM