如果简单的数组可以工作,为什么还要在 OpenGL (LWJGL) 中使用缓冲区?

Why use Buffers in OpenGL (LWJGL) if simple Arrays work?

所以我目前正在学习 OpenGL,我关注的教程说:

The first thing that we must do is to store our array of floats into a FloatBuffer. This is mainly due to the fact that we must interface with the OpenGL library, which is C-based, so we must transform our array of floats into something that can be managed by the library.

我完全明白了,但奇怪的是,LWJGL 提供的每个 OpenGL 方法都适用于缓冲区,但也适用于简单的数组。

为什么会这样,我为什么要使用缓冲区?

一些例子:

这适用于 indicesIntBuffer 但也是 int[]

glBufferData(GL_ARRAY_BUFFER, indices, GL_STATIC_DRAW);

这适用于 valueFloatBuffer 但也是 float[]

glUniformMatrix4fv(
     uniforms.get(uniformName),
     false,
     value
);

根据引用,我假设教程不是为 LWJGL 3 编写的。

LWJGL 3.0.0 是第一个添加对 "Java array parameters" 风格方法支持的版本,以前只有 used/supported NIO 缓冲区。

Added support for Java array parameters and HotSpot Critical Natives.

基于 issue 175

中的讨论