GLFW3を使用してシンプルなUIを構築し、簡単なグラフィックを扱えるツールを作るための、ベースとなるコード。
Windows/Macでの動作テストしている。linuxでも多分動くはず。
windows版はvcpkgで必要パッケージをインストールした。 macはbrew、もしくは自前ビルドで用意。
- opengl
- glfw3
- freetype2
- glew(windowでは必要)
- libpng(1.6以上)
- boost(1.65以上)
以下のコマンドを実行し、出来上がったプロジェクトファイルをVisual Studio/Xcodeで開いて使用する。
> mkdir build
> cd build
> cmake ..
もしくはninjaを使用する場合。
> cmake -G Ninja ..
> ninja
基本的には"gllib.h"をインクルードすれば全機能にアクセスできる。
- gl.cpp(.h) gl,glfwへのインターフェース
- gllib.h アプリケーション用ヘッダ
- bb.h バウンディングボックス
- layer.h レイヤー切り替え制御
- linmath.hベクトル演算
- parts.h 各パーツの基底クラス定義
- checkbox.cpp(.h) チェックボックス
- codeconv.h 文字コード変換
- dialog.cpp(.h) ダイアログ表示
- drawbox.cpp(.h) スクロール対応描画領域
- exec.cpp(.h) 子プロセス起動
- font.cpp(.h) フォント描画
- imagebutton.cpp(.h) 画像ボタン
- label.cpp(.h) 文字ラベル
- notification.cpp(.h) 通知表示
- primitive2d.cpp(.h) プリミティブ描画
- pulldown.cpp(.h) プルダウンメニュー
- scrollbox.cpp(.h) スクロールボックス
- sheet.cpp(.h) 下敷きになる矩形描画
- slidebar.cpp(.h) スライドバー
- text.cpp(.h) テキスト入力
- textbox.cpp(.h) テキスト入力(パーツ)
- textbutton.cpp(.h) テキストボタン
- texture2d.cpp(.h) テクスチャ描画
Labelを使ったHello,World。
#include <gllib.h>
int
main()
{
const char* fontname = "res/SourceHanCodeJP-Normal.otf";
double w = 1024;
double h = 1024;
auto font = GLLib::initialize("Hello,World", fontname, w, h);
if (!font)
return 1;
GLLib::bindLayer();
auto x = w / 2;
auto y = h / 2;
auto fg = Graphics::White;
auto bg = Graphics::DarkGray;
auto lx = x - font->getSizeX() * 6;
auto label = Label::create("Hello,World", lx, y, fg, bg);
for (;;)
{
if (GLLib::update([&]() { return true; }) == false)
break;
}
GLLib::terminate();
return 0;
}
かなり機能が増えたので改装予定。
glfwの機能を下地とした、グラフィック・システム機能。
FreeType2を使用したフォント描画機能。
矩形・ライン・円などの基本的な図形描画機能。
テクスチャ読み込み・描画機能。現在はpng形式のみサポート。
文字列を表示する。
チェックボックス。
文字列を使ったボタン。
テクスチャを使用した画像ボタン。
プルダウンによる選択リスト。
階層化したパーツを指定領域内に描画する。シンプルなスクロールボックス。
階層化したパーツを指定領域内に描画する。
文字列入力。
スライダー。数値を設定する。LabelやText Boxを連携できる。
ただの下敷きとなる矩形を描画する。
ダイアログを表示。OKのみと・キャンセル付きを選択できる。
通知メッセージを表示する。
フォントの描画は以下を参考に。 https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01
linmath.hは以下から取得。 https://github.com/datenwolf/linmath.h
文字コード変換は以下のサイトから取得。 https://qiita.com/benikabocha/items/e943deb299d0f816f161
床井研究室のページ。 http://marina.sys.wakayama-u.ac.jp/~tokoi/
本プログラムは表示フォントに「源ノ角ゴシック Code JP」(https://github.com/adobe-fonts/source-han-code-jp) を使用しています。 Licensed under SIL Open Font License 1.1 (http://scripts.sil.org/OFL)
アイコンのPNGデータについては「MATERIAL DESIGN」サイトのものを使用しています。 (https://material.io/resources/icons/?style=baseline) このアイコンはApache2.0ライセンスで配布されています。