OpenGL (glfw)・環境構築 ( OS : Mac , IDE : Eclipse CDT )

OpenGL(glfw) を mac で動かす。
環境構築 から Hello World を実行するところまでをまとめる。

## 1. そもそも OpenGL(glfw) とは？

[OpenGL について](http://qiita.com/jamaican/private/ff785ecea31e9fbb1476)を参照
## 2. 開発環境の選定
前提条件

* OpenGL のソフトを書くには C++ の実行環境が必要
* OpenGL のソフトを書くには [glfw](http://www.glfw.org/), [freegult](http://freeglut.sourceforge.net/) などのライブラリが必要  

今回は...

* C++ 開発用に [Eclipse CDT](https://eclipse.org/cdt/) を使う  
  * windows や linux とも開発環境を揃えるため
* ライブラリには [glfw](http://www.glfw.org/) を使う  
  * どうも freegult はもう更新止まっているみたい  

## 3. 開発環境の構築

### eclipse のインストール

1. [Eclipse Mars](https://eclipse.org/downloads/packages/release/Mars/2)へアクセス  
**注意:** 2016.08 時点では、marsでないと glfw がうまく動かなかった
2. Eclipse IDE for Java Developers の Mac Cocoa 64-bit をダウンロード
3. Eclipse を起動して、Hello World が動くか確認してみる  
  * mac は標準で GCC (c++コンパイラ) が入っているので、そのまま動くはず

### glfw ライブラリの入手

glfw ライブラリは homebrew からでも入手できるが、それはバージョンが古いとの事。なので、glfw のソースコードからライブラリを生成する事にする。
ライブラリ生成の手順は以下の通り

1. glfw のソースコードを入手
2. cmake で glfw ライブラリを生成する make を生成
3. make を実行して、glfw ライブラリを生成する

具体的な手順は以下の通り

### glfw のソースコードを入手

1. [glfwサイト](http://www.glfw.org/)へアクセス
2. Download → Source package からダウンロード

### cmake のインストール

1. [cmakeサイト](https://cmake.org/)へアクセス
2. Download → Latest release(3.6.1) → Mac OSX 10.6 or later から .dmg をダウンロード
3. ダウンロードした .dmg からインストール


### cmake と glfw ソースコードから makefile を生成

1. cmake(GUI)を起動
2. Browse Source ボタン から glfw の CMakeLists.txt が存在しているパスを指定する  
(glfw-3.2/CMakeLists.txt なら glfw-3.2 へのパスを指定する)
3. Browse Build ボタン から 任意のパス(binを生成させたい場所) を指定  
    [注意] glwfフォルダとは別のフォルダにしないと上手くいかないのかも
4. デフォルトから変更した点は下記
 * CMAKE_ECLIPSE_VERSION を 4.5(Mars)
 * CMAKE_INSTALL_PREFIX を 任意のパス (usr/local mac は書き込めないので失敗する)
![スクリーンショット 2016-10-02 14.28.17.png](https://qiita-image-store.s3.amazonaws.com/0/39286/a3e2d6a7-b760-8cb8-fbd5-bc764a8062fb.png)

5. Configure ボタン を押す
-> Eclipse CDT4 - Unix Makefiles を選択
-> リストから赤い表示がなくなるまで Configure ボタンを押す
6. Generate ボタン を押す
-> 成功表示が出て、2.で指定したパス直下に Makefile が存在すれば成功

[補足]
* 失敗して "Generate" をやり直す場合は、2.で指定したパスの中身を空にしてみる

### makefile から glfw ライブラリを生成
1. ターミナルを起動
2. Makefile の存在するパスへ移動
3. make all コマンドを実行
4. sudo make install コマンドを実行  
-> CMAKE_INSTALL_PREFIX に指定したパスに src/libglfw3.a のようにライブラリが生成されていれば成功

## 4. glfw を動かしてみる
先ほどの glfw ライブラリが動くかを確認するために、最小の glfw コードを書いて動作確認をしてみる。最小の glfw ソースコードは [glfw 公式の documentページ](http://www.glfw.org/documentation.html) にあるのでこれを使う。

1. eclipse CDT の起動
2. 空の C++ Project を作成
	* 上部メニューから File ➡️ New ➡️ c++ project を選択して Next
	* Project name を適当に入力
	* Executable ➡️ Hello World C++ Project ➡️ Cross GCC を選択して Next
	* 以降は全て Next 、最後に Finish を押す

4. project の property を開いて、以下を設定する
	* [C/C++ General] → [Path and Symbols] → [Includes] → [GNU C++] → [Add ボタン]を押して、ヘッダの存在する include/GLFW へのパスを設定する  
	* [C/C++ General] → [Path and Symbols] → [Library Paths] → [Add ボタン]を押して、libglfw.3.a の存在するフォルダへのパスを設定する
	*  [C/C++ General] → [Path and Symbols] → [Libraries] → [Add ボタン]を押して glfw3 と設定する。
          
	```
	[補足]
	* Add の際に [Add All Configurations] にチェックを入れると Debug,Release 共に設定が反映されるので入れておくと良い。
	* libraries に登録する際は、先頭の lib と 拡張子 を消して指定するので、libglfw3.2.a → glfw3 となる。
	```
       * C/C++ BUild -> Settings -> Tool Setting -> MacOSX C++ Linker -> Command: に g++ -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo を指定
5. Project Explore から src / main.cpp を開く
6. main.cpp を次のように書き換える

	```cpp:main.cpp
	#include <GLFW/glfw3.h>

	int main(void)
	{
	    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 */
	        glClear(GL_COLOR_BUFFER_BIT);

	        /* Swap front and back buffers */
	        glfwSwapBuffers(window);

	        /* Poll for and process events */
	        glfwPollEvents();
	    }

	    glfwTerminate();
	    return 0;
	}
	```

7. Invalid Arguments のエラーが出る場合は以下を設定する
	* project の property を開く
	* [C/C++ General] → [Code Analysis] → リストから [Invalid Arguments] の Serverity を Error から Warning に変更する

8. 実行する
	* project → build project
	* project explore を右クリック → Debug As もしくは Run As → Local C/C++ Application を選択
	* 黒いウィンドウが立ち上がれば成功

## 5. その他
### 動かした環境

* OSX EL Capitan 10.11.6
* Eclipse IDE for C/C++ Mars 2 Release (4.5.2) / 日本語化無し
* glfw 3.2

### 参考URL
* [【Mac El Capitan】Xcode7でOpenGL(GLFW3)が動くまでのまとめ。](http://kapio.hateblo.jp/entry/2016/07/12/005639)
* [GLFW で OpenGL を使う(床井研究室)](http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20120906)
* [いまから OpenGL を始めるのに最適なライブラリなら GLFW(でらうま倶楽部)](http://blog.livedoor.jp/tek_nishi/archives/7836153.html)
* [MacでGLFWを設定(Qiita)](http://qiita.com/s_s_k/items/fa4de44acb09d715a935)