自分のフレームワークとして、「gl_fw」と言うプロジェクトを実装していましたがー
最近(そうでもないかww)、GLFW と言うフレームワークがある事を知りました、現在のところ、OS-X、X11、Windows で使える、マルチプラットホームのフレームワークです。
C、Objective-C(OS-X)で実装されており、シンプルで、良く出来ています。
※「glut」があるのですが、これは、メンテナンスされていないし、色々と痛いところが多いのです。
最近、メジャーバージョンが「3.0」となり、「2.x」から、より洗練された実装になりましたー、まだ機能で欲しい部分は色々あるのですがー、これから追加されていくと思います。
自分のフレームワークも glut から GLFW に変更すべく色々修正中です。
GLFW 3.x で良い部分をいくつか上げると・・・
・マウスホイールのイベントを取得できる。
・クリップボードのやり取りが追加された。
・メインループから綺麗に抜けてくれる。(glutでは、スマートでは無い方法で実装しなければなりません・・)
・ゲームパッドの値を標準的に取得できる。
・キーボードの扱いがゲーム向き。(単純に押したか、押さないを取得できる)
・必要最小限の機能だけ用意してあり、わかり易い。
・ライブラリーをコンパイルするのが簡単。(cygwin の windows クロスコンパイラ i686-w64-mingw32 でコンパイルできるようになった)
現在の「3.0」には、ドロップファイルのイベントを受け取る機能が無いので、これは自分で足そうと思います。
※「2.x」で実装したので、「3.0」風に書き直す感じww
cygwin で glfw-3.0 をコンパイルする手順を書いておきます。
(0) cygwin に i686-w64-mingw32-gcc、cmake などをインストールしておく。
(1) glfw-3.0 のソースアーカイブを取得して展開する。
(2) glfw-3.0 に移動
(3) 「cmake -DCMAKE_TOOLCHAIN_FILE=CMake/i686-w64-mingw32.cmake」
(4) 「make」
※何も指定しないとスタティックリンクライブラリーが作られるようです。(DLL にする意味は無いと思う)
これでおしまい!(ああ、何て簡単なんだろ・・)
(5) 「make install」で、/usr/local/以下にインストールされます。
では動かしてみましょう!
#include <stdlib.h> #include <GLFW/glfw3.h> int main(int argc, char** argv); int main(int argc, char** argv) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; }
※ cygwin のコンパイルで重要なのは、リンクライブラリーとして、glfw3、opengl32、glu32、gdi32 を加える事です。
さて、ゲームなどで必要なのは、サウンド、スレッド、画像の読み込み等ですが、GLFW のポリシーでは、「これをフレームワークに含め無い方が良い」との考えのようです。
自分もそう思います、自分は、以下のように解決しています。
・サウンド ---> OpenAL を使うのが良いでしょう~
・スレッド ---> POSIX のスレッド pthread を使う。(OS-X、Linux、mingw では標準です、VisualStudio を使う場合は、pthread-win32 ライブラリーを使います)
・画像 ---> libpng、などを使えば良いし、読み込みをサポートするライブラリーやソースは沢山あるので、自分に合った物を選べば良い。
「gl_fw」(紛らわしいけど、GLFW を知る前からなので・・・)の改修が終わったら、またブログを書きます。
※gl_fw は、C++ を使ったフレームワークで、サウンド(単音、ストリーム)を扱うクラス、画像ファイルを単一的に扱うクラス、フォント(漢字)、GUI、などそこそこ高機能な物です。
ソースコードは、テストが済み次第取得できるようにしますが、興味のある人は連絡下さい~
githubから取得出来ます。
※glfw3には、ドロップファイルを受け取る改修をしています(windows版のみ)、Libraries にlibファイルとヘッダーを用意しています。