Learn · concepts

LWJGLとは?Javaグラフィックスライブラリ解説

LWJGLは、Javaがネイティブなグラフィックス、オーディオ、および入力APIにアクセスできるようにするライブラリです。それが何をするのか、そしてMinecraftがなぜそれを利用しているのかを以下に示します.

TRtrolPublished 1 min read

LWJGLとは?

LWJGLはLightweight Java Game Libraryの略称です。Javaコードがグラフィックス、オーディオ、入力のためのネイティブAPIを呼び出すための橋渡しをするものです。MinecraftはJavaで書かれたゲームなので、LWJGLを使ってGPUやサウンドハードウェアと通信しています。カスタムインターフェースを描画したり、サウンドを再生するMODも、このネイティブ層を経由してアクセスします。「軽量」とは、ネイティブのC APIを直接利用し、より重いラッパーで包むのではなく、最小限のオーバーヘッドで直接アクセスできることを意味します。

LWJGLが実際に何をしているのか

LWJGLは、JavaにCライブラリの薄く、直接的なラッパーを提供します。Java単独ではOpenGL、OpenALなどのグラフィックスAPIを呼び出すことができません。これらのAPIはCで書かれており、オペレーティングシステムやドライバに存在します。LWJGLはバインディングコードとネイティブバイナリを同梱しており、Javaのメソッド呼び出しが、ほぼ一対一でCの関数にマッピングされます。

このラッパーは意図的に薄く設計されています。LWJGLはOpenGLをシーングラフやゲームエンジンフレームワークで隠蔽しません。APIに近いグラフィックスコードを書くため、制御性と予測可能なパフォーマンスを求めるプロジェクトに人気があります。

どのようなものをバインドしているのか

LWJGLは、単一のライブラリというよりも、バインディングの集合体です。Minecraftに関連する要素には、以下が含まれます

連携機能
OpenGL画面への描画; MinecraftのレンダリングAPI
OpenALサウンドシステムのための3D空間オーディオ
GLFWウィンドウ作成、ゲームループ、キーボード/マウス入力
stb画像とフォントのロードヘルパー
NanoVGUIオーバーレイのためのアンチエイリアシング2Dベクトル描画

プロジェクトは必要なモジュールのみを組み込みます。Minecraftはすべてを使用しますが、よりシンプルなツールはOpenGLのみを使用するかもしれません。

Minecraftがそれらに依存する理由

Minecraftのウィンドウ、レンダリング、入力の全スタックはLWJGLの上に構築されています。ゲームがウィンドウを開いたり、マウスを読んだり、GPUに三角形を描画したりするとき、その呼び出しはLWJGLを介してネイティブ層に渡されます。Modはこの依存関係を継承します。ゲーム内でオーバーレイを描画するModは、LWJGLによってセットアップされたOpenGLコンテキストを同じものを使用しています。いくつかのModは、LWJGLのバインディングの一つであるNanoVGを使用してカスタムインターフェースを描画します。この共有基盤が、単一のModが独自のグラフィックスシステムを構築することなく、ゲームと並行してレンダリングできる理由の一部です。

LWJGLはModですか?

いいえ。LWJGLはModやModローダーではなく、ライブラリです。Modをインストールするのとは異なり、LWJGLをインストールすることはありません。Minecraftは必要なバージョンをバンドルしており、ランチャーはオペレーティングシステム用の対応するネイティブバイナリをダウンロードします。Mod開発者はLWJGLに対してコンパイルしますが、自分のコピーを配布することはめったにありません。

LWJGLと他のグラフィックスソリューション

Javaゲームの場合、LWJGLの軽量なアプローチは、より大規模なフレームワークとは異なるトレードオフを提供します。

アプローチオーバーヘッド制御学習曲線
LWJGL (薄いバインディング)最小限直接的steep
ゲームエンジン (LibGDXなど)ほどほど制限付きgentle
高レベルフレームワーク重い非常に制限付きeasy

LWJGLは、メタルに近いパフォーマンスを追求し、より多くの低レベルコードを書くことに抵抗がない場合に適した選択肢です.

よくある質問