所以我目前正在学习 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 数组参数”风格方法的支持的版本,这些方法以前仅使用/支持 NIO 缓冲区。
Added support for Java array parameters and HotSpot Critical Natives.
基于 issue 175 中的讨论
关于java - 如果简单的数组可以工作,为什么还要在 OpenGL (LWJGL) 中使用缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60329474/