Learn · concepts

LWJGL 是什么?Java 图形库详解

LWJGL 允许 Java 访问原生图形、音频和输入 API。以下是它所能做到的以及 Minecraft 为什么依赖它.

TRtrolPublished 1 min read

LWJGL 是什么?

LWJGL 是轻量级 Java 游戏库。它是连接 Java 代码与图形、音频和输入原生 API 的桥梁。Minecraft 是一个 Java 游戏,因此它使用 LWJGL 与你的 GPU 和音频硬件进行通信。绘制自定义界面或播放声音的模组也通过它访问相同的原生层。 “轻量级” 的含义是它尽可能贴近原生 C API,而不是用更重的包装层包裹它们,从而让你以最小的开销获得直接访问。

LWJGL 实际上做什么

LWJGL 为 Java 提供了对 C 库的精简、直接的包装器。Java 本身无法调用 OpenGL、OpenAL 或其他图形 API;这些 API 用 C 编写,并存在于操作系统或驱动程序中。LWJGL 提供了绑定代码和原生二进制文件,因此 Java 方法调用几乎可以与底层的 C 函数一一对应。

这个包装器是经过精心设计的,力求精简。LWJGL 不会在场景图或游戏引擎框架之后隐藏 OpenGL。你编写的图形代码会紧贴 API,这正是它在希望获得控制和可预测性能的项目中如此受欢迎的原因。

它绑定了什么

LWJGL 实际上是一组绑定,而不是单个库。与 Minecraft 相关的组件包括:

绑定功能
OpenGL绘制到屏幕;Minecraft的渲染 API
OpenAL3D 音位音频,用于声音系统
GLFW窗口创建、游戏循环以及键盘/鼠标输入
stb图像和字体加载辅助工具
NanoVG用于 UI 覆盖的抗锯齿 2D 矢量绘图

一个项目仅引入其需要的模块。Minecraft使用所有模块;一个更简单的工具可能仅使用 OpenGL

为什么 Minecraft 取决于它

Minecraft 的整个窗口、渲染和输入栈都依赖于 LWJGL。当游戏打开一个窗口、读取鼠标或向 GPU 绘制三角形时,这些调用都会通过 LWJGL 传递到原生层。模组会继承这种依赖关系。一个绘制游戏内叠加层的模组,正在使用游戏通过 LWJGL 设置好的 OpenGL 上下文。一些模组也使用 NanoVG(LWJGL 的一个绑定)来绘制自定义界面。这种共享的基础是单个模组能够与游戏一起渲染,而无需建立自己的图形系统的一部分原因

LWJGL 是模组吗??

LWJGL 并非模组或模组加载器,而是一个库。您无需像安装模组一样安装它。Minecraft 已经捆绑了所需版本,启动器会下载与您的操作系统匹配的本地二进制文件。模组开发者通常针对 LWJGL 编译,但很少包含自己的副本

LWJGL 与其他图形解决方案

对于 Java 游戏,LWJGL 的轻量级方法与更重量级的框架相比,提供不同的权衡:

方法开销控制力学习曲线
LWJGL (精简绑定)最小直接陡峭
游戏引擎 (如 LibGDX)中等受限平缓
高级框架沉重非常受限简单

当您追求接近底层的性能并且不介意编写更多底层代码时,LWJGL 是您的选择.

常见问题