読者です 読者をやめる 読者になる 読者になる

WindowsでOpenGLES --- GLFW導入

下記の記事にてWIN32APIでOpenGLESを利用する方法を記述しました。
WindowsでOpenGLES --- ANGLE準備 - 何でもプログラミング

今回は、ウィンドウの作成やOpenGLESの初期化などをクロスプラットフォームに行ってくれるライブラリ、GLFWを導入してみたいと思います。

ダウンロード

下記ページより必要なdll(glfw3.dll)を取得します。(ソースをCMakeでビルドする方法でも問題ありません。)
GLFW - Download
f:id:any-programming:20170421172955p:plain

GLFW初期化

OpenGLES3を有効化するために、いくつか設定を行います。

あとはglfwCreateWindowを呼ぶだけで、必要な初期化を全て行ってくれます。

#define GLFW_INCLUDE_ES3
#define GL_GLEXT_PROTOTYPES
#include <GLFW\glfw3.h>

#pragma comment(lib, "glfw3.lib")
#pragma comment(lib, "libGLESv2.lib")

assert(glfwInit());

glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

GLFWwindow* window = glfwCreateWindow(300, 300, "GL Window", NULL, NULL);
assert(window);
glfwMakeContextCurrent(window);


Draw関数

ウィンドウを灰色に塗りつぶすだけの関数です。

void Draw(GLFWwindow* window)
{
    glClearColor(0.5, 0.5, 0.5, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    glfwSwapBuffers(window);
}


Run

下記のようにイベントループを回します。

また再描画が必要な時にDrawを呼ぶよう、コールバックをアタッチしています。

実行すると灰色に塗りつぶされたウィンドウが表示されます。

glfwSetWindowRefreshCallback(window, Draw);

while (glfwWindowShouldClose(window) == GL_FALSE)
{
    glfwWaitEvents();
}

f:id:any-programming:20170420000211p:plain