glfw3とglfw2とglutの比較

glfw-glut.png
項目 GLFW3 GLFW2 glut
ウィンドウの作成 glfwCreateWindow() glfwOpenWindow なし
ディスプレイモードの初期化 glfwWindowHint() glfwOpenWindowHint(); glutInitDisplayMode();
ウィンドウのサイズ設定 glfwGetWindowSize(GLFWwindow * window,int * width,int * height) glfwSetWindowSize( int width, int height ); glutInitWindowSize(int width,int height);
ウィンドウの位置 glfwSetWindowPos(GLFWwindow ,int x,int y) glfwSetWindowPos( int x, int y ); glutInitWindowPosition( int x, int y);
バッファスワップ glfwSwapBuffers(GLFWwindow * window) glfwSwapBuffers(); glutSwapBuffers();
ウィンドウタイトル glfwSetWindowTitle(GLFWwindow,"タイトル") glfwSetWindowTitle("The GLFW Window"); glutCreateWindow("volren");
終了 glfwTerminate(); glfwTerminate(); glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
GLUT_ACTION_GLUTMAINLOOP_RETURNS);
現在のウィンドウサイズの取得 glfwGetWindowSize(GLFWwindow, int *width, int *height ); glfwGetWindowSize( int *width, int *height ) glutGet(GLUT_WINDOW_WIDTH);
glutGet(GLUT_WINDOW_HEIGHT);

入力編

項目 GLFW3 GLFW2 glut
キー入力 glfwGetKey(GLFWwindow*,'K') glfwGetKey('K')
マウスの位置 glfwGetCursorPos(GLFWwindow*,&mx,&my) glfwGetMousePos(&mx,&my);
マウスボタン glfwGetMouseButton(GLFWwindow*,GLFW_MOUSE_BUTTON_LEFT) glfwGetMouseButton(GLFW_MOUSE_BUTTON_LEFT)
ホイール glfwSetCursorPosCallback()コールバックじゃないとダメ glfwGetMouseWheel()

ウィンドウのリサイズ

このコールバックがメンバ関数でもいいかどうかが重要だわ。

glfwGetWindowSize(&x,&y);

int windowWidth, windowHeight;
void GLFWCALL myReshape( int _w, int _h)
{
windowWidth = _w;
windowHeight = _h;
printf("wiindowresize\n");
}
glfwSetWindowSizeCallback( myReshape);
//whileの外側に書く
static void myReshape(int _w, int _h){
    //射影変換行列
        glViewport (0, 0, (GLsizei) _w, (GLsizei) _h); 
        glMatrixMode (GL_PROJECTION);
        glLoadIdentity (); 
        gluPerspective(30.0, (float)_w / (float)_h, 1.0, 100.0);
        glMatrixMode (GL_MODELVIEW);
}
//main関数にて
glutReshapeFunc(myReshape);

glfwにないもの

glfwにないけど、便利だったものに関しては、freeglutと共存させてもいい

  • gluPerspective
  • glutBitmapString…文字列の描画

glfw glfw2 glut

サポートサイト Wikidot.com glfwglfw2glut