如果简单的数组可以工作,为什么还要在 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 方法都适用于缓冲区,但也适用于简单的数组。
为什么会这样,我为什么要使用缓冲区?
一些例子:
这适用于 indices
是 IntBuffer
但也是 int[]
。
glBufferData(GL_ARRAY_BUFFER, indices, GL_STATIC_DRAW);
这适用于 value
是 FloatBuffer
但也是 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
中的讨论
所以我目前正在学习 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 方法都适用于缓冲区,但也适用于简单的数组。
为什么会这样,我为什么要使用缓冲区?
一些例子:
这适用于 indices
是 IntBuffer
但也是 int[]
。
glBufferData(GL_ARRAY_BUFFER, indices, GL_STATIC_DRAW);
这适用于 value
是 FloatBuffer
但也是 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
中的讨论