C
C++
Go
OpenGL

OpenGL な UI を作るライブラリ一覧

More than 1 year has passed since last update.

自分が確認出来ているものをリストアップします

AntTweakBar

古くからある GUI ライブラリ

atb.png

特徴

  • Windows/OSX/Linux 対応のクロスプラットフォーム仕様
  • インターフェースは C だが内部的には C++ で実装
  • Compatible/Core プロファイルに両対応
    • DirectX9-11 にも対応
  • ライセンスは zlib

長所

  • ドキュメント(オンライン)及びサンプルが比較的揃っている
  • ひと通りの UI が揃っており、回転や方向を設定するための UI もある
    • エフェクトやパラメータエディタであれば間違い無くこれひとつで組み立てられる
  • GLUT/SDL1.2/SDL2/SFML/GLFW2 用のイベント処理をするためのラッパーがある
  • 軽量

短所

  • Makefile 型なので細かいビルドが難しい
  • パラメータ設定に癖がある
    • 特にグルーピングはなれないと難しいかもしれない
  • 日本語のようなマルチバイト文字に対応していない

GWEN

Garry's Mod の開発元が開発しているライブラリ

gwen.png

特徴

  • Windows/OSX/Linux 対応のクロスプラットフォーム仕様
  • 比較的デスクトップに近い GUI を提供し、見た目が変更可能
    • 1枚のテクスチャを GUI のスキンとして扱う
  • premake4 でビルドする
  • ライセンスは MIT

長所

  • レンダリングエンジンの差し替えが可能
    • デフォルトで以下のレンダリングエンジンを持つ
    • Allegro5
    • CrossPlatform (OpenGL)
    • Direct2D/Direct3D
    • OpenGL
    • SFML/SFML2
    • WindowsGDI
  • 凝った作りでなければこれひとつで GUI アプリケーションが出来る
  • マルチバイト文字に対応

短所

  • Windows 以外だとコンパイルに失敗する
    • 原因は Gwen::UnicodeString (std::wstring) のメソッドに C++11 なものに依存しているため
    • また MacOSX だと OpenGL のヘッダパスの違いを考慮していない
  • タグ付けがされておらず、開発版しか無い
  • ドキュメントがほとんどなく、サンプルがたより
  • 2014年以降更新されていないため保守が厳しい

libRocket

モバイル方面で比較的使用実績のある UI ライブラリ

特徴

  • Windows/OSX/Linux 対応のクロスプラットフォーム仕様
  • HTML/CSS で記述する
  • CMake でビルドする
  • ライセンスは MIT

長所

  • HTML/CSS のためビューの分離が明確にできる
  • 冒頭にある通りモバイルの実績がそれなりにある
  • デバッガがあり、ロジックは Python で拡張できる(未検証)

短所

  • ドキュメントはひと通り揃ってるが、サンプルが少なく応用が難しい

CEGUI

Ogre3D で真っ先にあげられる GUI ライブラリ

CEGUI.png

特徴

  • Ogre3D との強い連携(CEGUI 単体利用も可能)
  • DirectX/OpenGL(Core含む)/OpenGLES に対応する
  • CMake でビルドする
  • ライセンスは MIT (0.5.0 までは LGPL)

長所

  • ドキュメントとサンプルがかなりある
    • かなり柔軟な GUI 設計が可能
  • 日本語などのマルチバイト文字表示に対応

短所

  • Windows 以外だと ICU ではなく旧式である libiconv を CEGUI_STRING_CLASS 関係なく強制的に使用する
    • 個人的には ICU にしてほしい感がある...
    • 10.8 にバンドルされてる libiconv だとリンクに失敗するので macports から入れること

imgui

imgui.png

特徴

  • Box2D の新しいデモで使われる予定の UI ライブラリ
  • Recast & Detour に含まれる GUI ライブラリから引っ張ってきたもの
    • ちなみに Recast & Detour の開発者は後述の milligui の開発者でもある
  • ライセンスは zlib

長所

  • 小規模なため直接組み込みやすい
    • imgui.{cpp,h} と stb_truetype.h と imguiRenderGL2.{cpp,h} か imguiRenderGL3.{cpp,h}
  • OpenGL Core Profile に対応
  • プリミティブを描画する API がある
    • 線分、矩形、角丸つき矩形、テキスト

短所

  • ドキュメントがない
    • sample_gl[23].cpp が実質的なドキュメント
  • 初期化時フォントを読み込む必要があるのでフォント必須
    • 日本語フォントを読み込ませても日本語表示に対応していない
  • GLEW に依存
  • コミット数が非常に少なく、2013 年以降更新されていない

その他

これの fork として現在 NanoUI を開発中。そのうち公開する予定

milligui

比較的最近になって開発が行われるようになった新しい GUI ライブラリ

millgui.png

特徴

  • NanoVGNanoSVG を使って描画する
    • nanovg は Core Profile 含むデスクトップの OpenGL 及び OpenGL ES 2/3 に対応する
    • 開発者は milligui と同じ
  • C言語で書かれている
    • このことは上記の nanovg/nanosvg も同様
  • 開発中なためかライセンス不明
    • 2014 年以降更新されていないためもしかしたら開発中断疑惑あり

長所

  • 小規模のため直接組み込みやすい
    • src/mgui.{c,h} と lib/nanos?vg
  • imgui と違い日本語フォント読み込ませた上での日本語表示に対応
    • これは fontstash のおかげだろう
    • さらにいうと fontstash の開発者も milligui と同じである

短所

  • 開発中のため API はまだ不安定
  • 上記理由なためドキュメントなし
    • example/example.c が実質的なドキュメント

blendish

NanoVG を使って Blender 2.5 な UI を作るライブラリ。コミットログみると最初のコミットが2014年7月と執筆時点では非常に新しい

blendish.png

特徴

  • Blender な UI を作ることが出来る
    • NanoVG を使用している関係で日本語表示に対応している
    • その場合は 源真ゴシック などの TTF フォントを使用すること
  • MIT ライセンス
  • 10/2 時点のバージョンでは nanovg をレポジトリ直下、すなわち blendish.h と同じディレクトリに配置する必要がある

長所

  • ヘッダーのみのため組み込みやすい
  • 小さいながらも使用できる UI コンポーネントが多い

短所

  • Blender な UI を好まない人にはつらい

ImGui (a.k.a dear, imgui)

機能豊富で実績が多い GUI ライブラリ

github のトレンドに何度か上がってたので知ってる人知ってるかもしれない。名前が上記にあがってる https://github.com/AdrienHerubel/imgui とかぶってるので注意。

どんな使い方ができるかは https://github.com/ocornut/imgui/issues/123 をみるとよいかもしれない。

ImGui

2015 年後期に筆者が当該ライブラリ採用を行って現在も watch を続けている唯一のライブラリ

特徴

  • 豊富な UI コンポーネント
  • MIT ライセンス

長所

  • 使い勝手の良い UI コンポーネントが多くたいてい事足りる
  • カスタムレンダリングに対応している
  • 組み込みやすい
    • 初期と比較して必要なファイル数が若干多いがそれでも 10 ファイル未満
    • カスタムアロケータも利用可能
  • デモが非常に網羅的でやりたいことはデモのソースコードを見ればだいたい出来る
  • レンダラに依存しない
    • サンプルとして DirectX9 と OpenGL の2つがある
    • サンプルとして実装されているレンダラが多く、Vulkan にも対応している
      • OpenGL
      • OpenGL Core Profile
      • DirectX9
      • DirectX10
      • DirectX11
      • Vulkan
    • 主要なライブラリと連携するサンプルも
      • SDL/SDL2
      • Allegro5

短所

  • ビットマップフォントを必要とするため、非 ASCII 圏にはつらい
    • 英数字のみ、あるいはあらかじめ必要となる文字が決まっているならありか
  • 上記は TTF 読み込みからのテクスチャアトラス化に対応したので解消された
    • ただちょくちょく文字が ? になる問題がありこれの問題が対策が不明

QtQuick Controls

Qt 5.1 で導入されたコンポーネントで QtQuick の力を使っており、OpenGL で描画されている。

Qt 5.1 はやや古いマシンで遅くなる場合があり、デプロイが非常に面倒であったが Qt 5.2 で QtQuick のレンダリングエンジンの改良がなされたため実用的な速度で動くようになり、デプロイが容易になった。

qtquick.png

ちなみに執筆者が開発している VPVM というアプリケーションも QtQuick Controls を使ってます。

VPVM.png

長所

  • Qt との連携がすごく簡単
  • QML+JavaScript の構成のため UI 変更の度にコンパイルを必要としない
    • これはつまり毎回動的に解釈されるというデメリットでもある
  • IME 対応が十分なされている

短所

  • Qt が必要であり、かつ依存するライブラリが多くサイズが肥大化しがち
    • QtCore + QtGui + QtQml + QtQuick + QtNetwork + QtWidgets
  • 現時点で OpenGL Core Profile での動作をサポートしない

kiUi

5/8 に github の C++ のトレンドに上がったライブラリ。おそらくキーウィ (kiwi) とかけてる

http://novembermonk.github.io/kiui/livedemo/kiui.html で emscripten を使った実際に動作するデモがあるので試すことが出来る

特徴

  • テクスチャによるスキン変更が可能
  • 入力に GLFW を、描画のバックエンドに NanoVG を使用したコードが最初から付属
  • emscripten にはじめから対応している
  • C++ で書かれている
  • zlib ライセンス

長所

  • 比較的豊富なコンポーネントを最初から擁している
  • (原理的に)プラットフォーム及びレンダリングエンジン中立
    • とはいうものの GLFW を使う関係からか OpenGL 寄りの設計か
  • 外部依存性が少ない
    • NanoVG と YAML はソース組み込みで、外部のものは GLFW 以外なし
  • 日本語表示に対応している
    • NanoVG をバックエンドに採用しているから当然か
    • blendish と同じように使用する場合は 源真ゴシック などの TTF フォントを使用すること
  • CMake でビルドできる

短所

  • NanoVG 以外のバックエンドを書くのは難しいかも
  • まだ開発中でドキュメントは example から読み解く必要がありそう
  • 日本語入力は不可

GXUI

Google 社員によって現在開発中の主に Go で書かれている OpenGL の UI ライブラリ

評価するにはサンプル実装が少ないため一旦保留。現時点では以下でパッケージをインストールすればサンプルをビルドできる

go get code.google.com/p/freetype-go/freetype
go get github.com/go-gl-legacy/gl
go get github.com/go-gl/glfw/v3.1/glfw
go get github.com/google/gxui

Nuklear

C 言語 (C89) のみで書かれている GUI ライブラリ

Nuklear

  • nuklear.h でビルドできる
    • ただしロジックと描画命令のみ
    • レンダリングバックエンドは別に用意する必要がある
      • demo みると以下のライブラリを使用した連携例がある
      • Allegro5
      • GLFW
      • SDL2
      • X11
    • カスタムアロケータも一応利用出来る
  • vurtun/gui -> vurtun/zahnrad の変遷歴がある
    • Nuklear になってから stb を明らかに意識した作りになってる
  • パブリックドメイン

https://github.com/vurtun/nuklear

Game-GUI

未検証。C++ で書かれている

  • 「東京」の文字を表示させてる SS みると日本語含む UTF-8 の表示に対応しているようだ
  • Visual Studio のプロジェクトしかないことからクロスプラットフォーム対応の観点で怪しい
    • 少なくともビルドするには Windows 上で Visual Studio を使うしかない
  • MIT ライセンス

https://github.com/sp4cerat/Game-GUI

NanoGUI

2015年 に登場した GUI ライブラリ。C++ で書かれており、cmake でビルドする

https://github.com/wjakob/nanogui (Go の移植版もある)

  • OpenGL 3.x かつ C++11 な環境が必要
  • Eigen + GLFW + nanovg に依存する
    • OSX 上ではファイルダイアログのためのソースが用意されておりファイルダイアログが機能する
  • Roboto 固定のためフォントを変更する際は theme.cpp をいじる必要がある
    • 内部的には nvgCreateFontMem を呼んでるので原理的にはいじれば日本語含むマルチバイト文字に対応出来ると思われる
  • 静的ライブラリとしてビルドすると 4MB ほどの大きさに
  • MIT ライセンス

nanogui.png

NVIDIA Widgets

未検証。C++ で書かれており、cmake でビルドする

https://code.google.com/p/nvidia-widgets/

  • NVIDIA の SDK サンプルで使われている UI ツールキット
  • 最終更新が 2009 年でおそらくもう保守されていない
  • MIT ライセンス

その他

他にも同じ目的を持つライブラリとして SFGUIGorilla があるけど両者とも特定のライブラリに強く依存している点 (SFGUI は SFML2 に依存し Gorilla は Ogre3D に依存する) で一旦選択肢から外した。

1 から作りたい場合は NanoVG が OpenGL を使った UI の実装デザインの参考になるだろう。NanoVG については著者が書いた「NanoVG で HTML5 Canvas の力を C/C++ にも」を参照すること。