- LWJGLは、Javaとネイティブグラフィックス、オーディオ、入力の橋渡しとなる、軽量Javaゲームライブラリです。
- これは、OpenGL、OpenAL、GLFWなどをまとめた薄いラッパー群であり、単一のライブラリではありません。
- Minecraftのウィンドウ、レンダリング、入力のスタックはすべてLWJGLの上に構築されています。
- これは、MODやMODローダーではなく、Minecraftにすでに同梱されています.
LWJGLは、軽量Javaゲームライブラリです。Javaコードがグラフィックス、オーディオ、入力のためのネイティブAPIを呼び出すための橋渡しをします。MinecraftはJavaで書かれたゲームなので、GPUやサウンドハードウェアと通信するためにLWJGLを使用しています。カスタムインターフェースの描画やサウンドの再生を行うMODも、このネイティブ層を経由してアクセスします.
LWJGLが実際に何をしているか
LWJGLは、JavaにネイティブなCライブラリへの薄く、直接的なラッパーを提供します。OpenGLやOpenALをJava単体で呼び出すことはできません。それらはCで書かれており、オペレーティングシステムやドライバに存在します。LWJGLはバインディングコードとネイティブバイナリを同梱しており、Javaメソッドは基盤となるC関数とほぼ一対一でマッピングされます。
このラッパーは意図的に薄く設計されています。LWJGLはOpenGLをシーングラフやエンジンで隠蔽しません。APIに近いグラフィックコードを書くため、制御性と予測可能なパフォーマンスを求めるゲームに人気があります。
何をバインドしているか
LWJGLは単一のライブラリではなく、バインディングの集合です。MinecraftとそのMODに関連するコンポーネントは以下の通りです。
| バインディング | 目的 |
|---|---|
| OpenGL | 画面への描画:ゲームが使用するレンダリングAPI |
| OpenAL | 3D位置オーディオ |
| GLFW | ウィンドウ作成、ゲームループ、キーボード/マウス入力 |
| stb | 画像とフォントのロードヘルパー |
| NanoVG | アンチエイリアスされた2Dベクター描画、一部のUIコードで使用 |
各バインディングはオプションです。プロジェクトは必要なモジュールのみを組み込みます。
なぜMinecraftとそのMODがそれだけに依存しているのか
Minecraftのウィンドウ、レンダリング、入力の全スタックはLWJGLの上に構築されています。ゲームがウィンドウを開いたり、マウスを読んだり、GPUに三角形をプッシュしたりするとき、その呼び出しはLWJGLを介してネイティブ層に渡されます.
モッドはこれを継承します。ゲーム内オーバーレイやカスタムメニューを描画するモッドは、LWJGLによって設定されたOpenGLコンテキストを共有しています。また、一部のモッドはNanoVGを使ってインターフェースを描画しますが、NanoVG自体もLWJGLのバインディングの一つです。この共通基盤があるため、単一のモッドは独自のグラフィックスシステムを構築することなく、ゲームと並行してレンダリングできます。
LWJGLはモッドですか?
いいえ。LWJGLはモッドやモッドローダーではなく、ライブラリです。モッドをインストールするのとは異なり、LWJGLをインストールすることはありません。Minecraftは必要なバージョンをバンドルしており、ランチャーはあなたのオペレーティングシステムに合ったネイティブバイナリをダウンロードします。モッド開発者はLWJGLに対してコンパイルしますが、自分のコピーを同梱することはほとんどありません。
よくある質問
いいえ。Minecraftには必要なバージョンが同梱されており、ランチャーがお客様のプラットフォームに対応したネイティブファイルをダウンロードします。プレイヤーがLWJGLを直接操作することはほとんどありません。
それは、LWJGLがネイティブAPIをラップするような重いエンジンを使用せず、それに近い形で実装されていることを意味します。コードとハードウェアの間にほとんど介在することなく、直接アクセスできます。
いいえ。LWJGLは多くのJavaゲームやツールで使用されている汎用的なJavaゲームライブラリです。Minecraftはその上に構築された最も有名なプロジェクトですが、Minecraftに縛られているわけではありません。
Java仮想マシン上で動作する言語であれば、JavaやKotlinなど、どの言語でも使用可能です。バインディングはJava APIとして公開されています。