2014/05/17

glfw3の使い方(VS2013)

目的

glutがいけてないので,glfwを使ったOpenGLウィンドウの作り方をメモする.
久しぶりのウィンドウズ環境なので,いろいろ戸惑ったりすると思うので,備忘録として.

glfw3を静的ライブラリとして使う.

開発環境

  • Visual C++2013 Express Edition
  • Windows 8.1 (64bit)

準備

  1. glfw3をダウンロード,配置
  2. VCプロジェクトの作成
  3. プロジェクトの設定


glfw3をダウンロード,配置

GLFWのダウンロードページ へ行って「Windows pre-compiled binaries」からダウンロードします.
  http://www.glfw.org/download.html
2つのパッケージがあるので,32bitか64bitの適切な方を選びましょう.
あとで作るVC++のプロジェクト設定にも関係するので,あとで決める,どっちも使うかも,という場合は,両方ダウンロードしちゃいましょう.

ダウンロードした「glfw-3.0.4.bin.WIN32.zip」か「glfw-3.0.4.bin.WIN64.zip」を解凍します.
解凍したファイルの中を次のようなライブラリ用のフォルダに配置します.以下の例は,私の場合の配置場所になっていますので,分かっている人はイイ感じのところにおいてください.
(※ VSから参照できる場所(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl とか)に置いてもいいんですが,私の個人的なルールに従い別の場所に置きます)

こういう構成のフォルダを作ってあります:
c:\
  └ usr\
  └ local\
    └include\
    └lib32\
    └lib64\

解凍ファイル内のincludeフォルダ内のGLFWフォルダを,上記includeにコピー.
lib-msvc120内のファイルをlib32またはlib64へコピーします.

osxならhomebrewで勝手に入ってくれて楽ちんなんですけどね...
nuGetでも入れられるようですが.


VCプロジェクトの作成

「ファイル」-「新しいプロジェクト」から,「Win32 コンソール アプリケーション」を作成.

プロジェクトの設定

メニュー「プロジェクト」-「~~のプロパティ」
構成プロパティの「VC++ディレクトリ」に,includeディレクトリとlibディレクトリへのパスを追加する.
ここで,$(PlatformArchitecture)を用いて,lib32とlib64が自動的に切り替わるようにしておくと32bitと64bitを気軽にスイッチできる.

インクルード ディレクトリ: C:\usr\local\include
ライブラリ ディレクトリ: C:\usr\local\lib$(PlatformArchitecture)
「親を継承」的なチェックボックスはON.



さらに,続けてライブラリも設定する.
「リンカー」「入力」の「追加の依存ファイル」にライブラリファイルを追加.
opengl32.lib;glfw3.lib



サンプルを動かす

#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 */
        /* Swap front and back buffers */
        glfwSwapBuffers(window);
        /* Poll for and process events */
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}
(http://www.glfw.org/documentation.html のExample Codeから)

あとはビルドしてウィンドウが表示されることを確認しておしまい.

参考