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

标签 java opengl lwjgl

所以我目前正在学习 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);

这适用于 valueFloatBuffer 但也为 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/

相关文章:

java - glGenVertexArrays() 不应有任何参数

java - 将 JFileChooser 与 LWJGL 结合使用

java - 使用 Java 中的 LWJGL 进行基于浏览器的 3D 游戏

java - 类似的接口(interface)实现

java - 在 Java 中创建一个 ArrayList?

java - 如何在 Netbeans 表单编辑器中更改方法签名?

c++ - 如何最好地封装窗口句柄?

c# - OpenCV 网络摄像头帧到 OpenGL 纹理

java - LWJGL 和 Nuklear 无法在英特尔显卡上正确渲染

java - 关闭语句是否足够好,还是我们还必须关闭每个结果集?