GLFW

glfw.png
q?_encoding=UTF8&ASIN=1849692033&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=lifeiscool01-22….amazonでGLFWで検索して唯一引っかかる本
GLFW Version3になって色々と変わりました

採用実績

GLFW3の新しい機能

CMakeでビルドできる!makefileではなく

うーん、Windows用のlibとdllさえあれば良い私にとってはどうでもいいですね。

マルチウィンドウできる

これのおかげで、どの関数にもGLFWwindowへのポインタが引数として要求されるようになりました。
異なるウィンドウで、一方はOpenGL、もう一方はOpenGL ESなんてことができるらしい。
GLFWwindowWinAPIでいうところのウィンドウハンドルのようなものらしい。
ウィンドウごとにイベントコールバックを登録することができる。
glfwMakeContextCurrent()関数が追加されて、これは今選択中のコンテキストをスレッドに渡すことができるらしい。

マルチモニターサポート
  • glfwGetMonitors
  • glfwGetVideoModes
  • glfwGetMonitorPos
  • glfwGetMonitorName
  • glfwGetMonitorPhysicalSize

で、各々フルスクリーンにすることができる。

ユニコードサポート

GLFWで文字列を引数とするものはすべてUTF-8をサポートしています。
たとえば、

  • ウィンドウのタイトル
  • エラー文字列
  • クリップボードのテキスト
  • モニターの名前
  • ジョイスティックの名前

てことは、日本語が使えるってことだよね???これは大きい!!!!

クリップボードとテキストの入出力

システムのクリップボードから文字を読み書きできます。

  • glfwGetClipboardString()
  • glfwSetClipboardString()

の関数で。

Gamma ramp support

モニターのGammma Rampを読めます。ガンマランプって何?

  • glfwGetGammaRamp()
  • glfwSetGammaRamp()
  • glfwSetGamma()….ガンマ値からrampを作る

OpenGL ES support

OpenGL ESコンテキストをサポートしました。

glfwWindowHint(GLFW_CLIENT_API,GLFW_OPENGL_ES_API)

てなかんじで。
使ってるPCのグラフィックスドライバーによっては、これはできないかもしれない。
最新のNVIDIAやインテルのドライバーならば、GLXやWGLを使ってOpenGL ESのコンテキストを使うことができる。
AMDならばEGLを使ってできる。

(実験的に) EGL support

GLFW now has an experimental EGL context creation back end that can be selected through CMake options.

High-DPI support

GLFWはWindowsでもMacでも高DPIのモニターをサポートしています。
これは何を意味するかというと高dpiのモニターでもフル解像度のフレームバッファにすることができるということです。
関係のある関数は次の通り

  • glfwGetFramebufferSize()
  • glfwSetFramebufferSizeCallback()
エラーコールバック

エラーコールバック関数を登録することができます。
今まではエラーが起こってるっぽい箇所を狙い撃ちしてエラーチェック関数を仕込むしかなかったですが、
一度、エラーコールバック関数を登録すれば、どこかでエラーが起きるたびに、その関数が呼ばれるってことです。
便利ですねーーー。

ウィンドウごとにユーザーの好きなポインタを渡すことができる。
  • glfwSetWindowUserPointer()….で好きなポインタをウィンドウに登録することができ
  • glfwGetWindowUserPointer()….で登録したポインタを取り出すことができる。

そう、これで、OpenGLでオブジェクト指向が実現可能になるのです。
今までは、メンバ関数をいかにコールバック関数として登録するか、で悩んでいたのですが、
それを解決してくれます。!
詳しいやり方はこの記事を参考に。
ちなみに、static関数やグローバル変数を使って変なふうにオブジェクト指向してた過去の記事

ウィンドウがアイコン化した時のコールバック関数を登録できる
  • glfwSetWindowIconifyCallback()
ウィンドウの位置が動いた時のコールバック関数を登録できる
  • glfwSetWindowPosCallback()
現在のウィンドウの位置を知ることができる
  • glfwGetWindowPos.
ウィンドウがフォーカス状態になった時のコールバック関数を登録できる
  • glfwSetWindowFocusCallback()
マウスカーソルがウィンドウに入った時&出た時のコールバック関数を登録できる
  • glfwSetCursorEnterCallback()

javascriptみたいですね

最初からウィンドウのタイトルを指定できる。

glfwCreateWindow()の引数にウィンドウのタイトルにすべき文字列を登録することができる。
今まではウィンドウを作るのと、ウィンドウタイトルの設定は別の関数だったのに。

ウィンドウを非表示にしたり、表示状態にすることができる。

  • glfwHideWindow
  • glfwShowWindow

また、ウィンドウを作るときのglfwWindowHintの引数にGLFW_VISIBLEを入れて、非表示設定にすれば、
オフスクリーンレンダリングが可能になる。
他にも、ウィンドウを表示する前に、ウィンドウを好きな位置に動かす、という使い方もできる。
WinAPIやMFCみたいだね。

フレームや、タイトルバーなしのウィンドウを作成することができる

なんと!!私は過去に、タイトルバーやフレームが嫌で消そうと努力したことがありました。
Windows8のメトロUIみたいにかっこよくしたい、ていうかレンダリングが主役だからタイトルバーとか邪魔だよねって思って。
すばらしい!!

glfwWindowHint(GLFW_DECORATED ,false);

スプラッシュスクリーンを作るときにも使ったりできます。
splash.png
Modifier key bit masks

マウスボタンや、Modeifierキー(shiftやCtrl)にビットマスクが???
Modifier key bit mask parameters have been added to the mouse button and key callbacks.

Platform-specific scancodes

A scancode parameter has been added to the key callback. Keys that don't have a key token still get passed on with the key parameter set to GLFW_KEY_UNKNOWN. These scancodes will vary between machines and are intended to be used for key bindings.

ジョイスティックに名前をつけることができる
  • glfwGetJoystickName()

サポートサイト Wikidot.com