欢迎光临散文网 会员登陆 & 注册

学习c++ gtk(gtkmm) opengl(es)——开始

2023-03-31 10:39 作者:FineClassFuture  | 我要投稿

    Ubuntu Linux PC端:除QT外,备选方案:GTKMM

各种版本尝试
  1. 底层: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 demo

    一个button只画四条边

    没有思路用它来做复杂的界面

(3)IMGUI

  •         作为PC端软件来说,还不适合

  •         换个思路,在嵌入式上可能还可以

    使用shader来做多个层合成,一个视频层,一个绘图层,一个GUI层

  1. " vec4 t1 = texture(tex1, vfTexPos); \n"

  2. " vec4 t2 = texture(tex2, vfTexPos); \n"

  3. " vec4 t3 = texture(tex3, vfTexPos); \n"

  4. " float r = t2.r + t1.r * (1.0 - t2.a); \n"

  5. " r = t3.r + r * (1.0 - t3.a); \n"

  6. " float g = t2.g + t1.g * (1.0 - t2.a); \n"

  7. " g = t3.g + g * (1.0 - t3.a); \n"

  8. " float b = t2.b + t1.b * (1.0 - t2.a); \n"

  9. " b = t3.b + b * (1.0 - t3.a); \n"

  10. " 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   


学习c++ gtk(gtkmm) opengl(es)——开始的评论 (共 条)

分享到微博请遵守国家法律