「moreover lwjgl」 2 基本Windowの表示(2)
Window表示の解説の続きです。
もう一度ソースコードを貼ります。
解説の続き(GLFW系は青、OpenGL系はオレンジ)
37行目 : WindowのHintをデフォルトにします。Hintとは、Windowの特性のことです。
38,39行目 : Hintを設定します。
Hintは色々あります。使いそうなものを出しておきます。(注:簡略にするために大文字の英字は最初の"GLFW_"を抜いています)
Hint名 | 説明 | 設定できる値 | デフォルト値 |
---|---|---|---|
RESIZABLE | サイズが変更可能か | TRUE/FALSE | TRUE |
VISIBLE | 可視状態か | TRUE/FALSE | TRUE |
DECORATED | Windowに装飾をつけるか*1 | TRUE/FALSE | TRUE |
FLOATING | フローティングウィンドウか | TRUE/FALSE | TRUE |
SAMPLES | マルチサンプリングのサンプル数 | INT | 0 |
REFRESH_RATE | (フルスクリーンの時)画面の更新度 | INT | DONT_CARE |
CONTEXT_VERSION_MAJOR | OpenGLのバージョンの主要な方(2.~や3.~) | INT | 1 |
CONTEXT_VERSION_MINOR | OpenGLのバージョンの細かい方(~.1や~.3) | INT | 0 |
CLIENT_API | GLFWが作成するAPI | OPENGL_API/OPENGL_ES_API | OPENGL_API |
OPENGL_PROFILE | OpenGLのコンテキストの種類 | OPENGL_CORE_PROFILE/OPENGL_COMPAT_PROFILE/OPENGL_ANY_PROFILE | OPENGL_ANY_PROFILE |
OPENGL_DEBUG_CONTEXT | OpenGLがデバッグ用かどうか | TRUE/FALSE | FALSE/td> |
41行目 : Windowを生成します。
Windowを生成する前にかならずHintを指定しましょう。
引数 : (横の長さ , 縦の長さ , タイトル , モニター , シェア)
モニター(monitor)は、ウィンドウモードの時はMemoryUtil.NULL(=0)に。フルスクリーンならモニターを指定します
シェア(share)は、コンテキスト(制御情報)やリソースを共有するウィンドウの指定です。NULLなら共有しません
43~45行目 : Windowが生成されなければ、エラーを出します。ウインドウのハンドルの値がMemoryUtil.NULLであれば生成されていないことになります。
47,48行目 : Windowの位置をモニターの中央にします。51行目では、Video Mode(画面サイズのこと)をPrimary Monitar(初期モニター)から取得しています。そして、その縦と横からWindowの縦と横を引いた値をモニターの位置としています。
これは、JavaのSwingの"JFrame"でいうと
void setLocationRelativeTo(null)
メソッドと同じような結果になります。
51行目 : WindowをOpenGLの描画の対象にします。
52行目 : ダブルバッファリングでの、バッファーの入れ替えのタイミング(V-sync)を指定します。ダブルバッファリングは、簡単に言うと、描画を表示する前に終わらせるバッファー(緩衝物)を用意して、そのバッファーの処理が終わったら、描画するところに貼り付けていくというものです。これによって、病が途中のものが見えたり、ちらついたりしなくなります。基本的に値は1にしましょう。
53行目 : 初期処理の最後に、WindowをShow(可視化)します。
56行目 : render(描画)メソッドを開始します。
57行目 : Capabilitiesを作成します。Capablititiesとは、Windowなどが必要とするOpenGLの機能を指定するものです。これがないと、サポートされていないOpenGLの機能は実行されなくなります。
59行目 : Windowの背景を指定した色(r,g,b,a)で塗りつぶすように指定します。
61行目 : while文の中は、Windowが閉じられていない時を指定しています。
67行目 : 指定したバッファーを塗りつぶします。GL_COLOR_BUFFER_BITを指定したら、glClearColorで指定した色合いで塗りつぶします。
66行目 : Windowのカラーバッファーを描画したものに移し替えます。これをしないと、描画が更新されません。
67行目 : イベントが行われるたら、それを記録します。
プログラムを止めるわけではないので、常に動くアニメーションなどに使います。それ以外では、glfwWaitEventsを使います。
以上で説明は終わりです。OpenGL系は使ったことがある人ならすぐ分かるはずですが…
P.S. > (もう一回いいますが、)質問はあまり答えられません…すみません(;_;…
*1:装飾とは、例えば、Windowの枠や、CloseボタンのようなWindowに付属したもののことです。