sjgui 1.0 是什么:一个给 OpenGL 程序加界面的 C++ GUI 框架
sjgui 是一个面向交互式 OpenGL 应用的 GUI 框架,用 C++ 写成,目标是让开发者用简单、快速的方式搭出可移植的交互界面。它适合两类人:刚开始学 OpenGL、想要一套现成界面起步的人;以及已经有一个跑起来的 OpenGL 程序、只想“加一个按钮”而不想大改代码的人。项目页面最后更新于 2003 年 6 月,属于早期开源项目,是否采用要结合你对维护状态的容忍度来判断。
核心特性
根据项目页面的描述,sjgui 1.0 的主要特性包括:
- 操作系统无关:设计上追求跨平台可移植。
- 面向对象 + C++ 模板:采用面向对象思路,并使用 C++ 模板实现。
- 大量使用标准库:页面称这样“运行得快”。
- 常见控件集合:提供按钮(push button)、编辑框(edit field)、面板(panels)等基础控件。
- 可选的窗口系统支持:支持 Glut 和 Win32 API 两种窗口方式。
- 易于扩展:页面明确说明它“很容易扩展以满足你的需求”。
它和 Glow 之类的库有什么不同
项目作者在页面上专门解释了为什么没有直接用 Glow,而是自己写了一个。理由集中在两点:
- 不想过度依赖 Glut。作者认为 Glut 和 Glow 都很长时间没有更新,而 sjgui 把 Glut 和 Win32 API 的窗口支持做成可选项。
- 面向“我只需要一个按钮”的场景。作者把 GUI 的使用者分成两类——一类是刚入门 OpenGL、需要一套合适起点的人;另一类是程序已经跑起来、中途才想加个友好界面的人。他认为后者恰恰是 Glow 这类库不擅长的地方,而 sjgui 的目标是让你“几乎不用改现有代码”就能把按钮放到屏幕上。
作者也承认 Glow 有一个 sjgui 当时没有的功能:把控件放在主窗口之外的独立窗口里。他表示自己不需要这个功能,但未来 sjgui 可能会加上。
编译与依赖
- 源代码可从 SourceForge.net 获取。
- 安装步骤写在发行包自带的
INSTALL文件里。 - 在非 Windows 系统上开箱编译需要 Glut。
- Windows 用户可以不依赖 Glut 编译。
适合谁用
| 你的情况 | 是否适合 |
|---|---|
| 刚开始学 OpenGL,想要一套现成界面 | 适合,作者建议直接从 Lesson 1 开始 |
| 已有 OpenGL 程序,只想加个按钮 | 适合,作者建议先看 Lesson 8 了解需要改什么,再看其余课程 |
| 需要把控件放到独立于主窗口的窗口中 | 当时不支持,需自行确认后续版本 |
| 要求活跃维护、长期更新的库 | 需谨慎,页面停留在 2003 年 |
快速上手路径
页面给出的入口是文档页(documentation page)。作者对两类读者的建议不同:
- 新手:从 Lesson 1 开始,按顺序学。
- 已有程序、只想加界面:先读 Lesson 8,看清需要改动的地方,再回头浏览其余课程了解“是什么”和“怎么做”,不必看 Lesson 1。
如果你愿意参与,作者在页面上公开征集协作者,表示希望有人加入团队让项目更快、更好,并列出了一份待办清单,也欢迎提出清单之外的想法。