Java:FloatBuffer到OpenGL – wrap()与allocate()对比BufferUtils.createBuffer()

数据源:

float[] v = { ... }; 

工作范例:

 FloatBuffer buf = BufferUtils.createFloatBuffer(v.length); buf.put(v); buf.flip(); // or buf.rewind() 

缓冲区现在可以上传到opengl并正常工作:

 ... glBufferData(..., buf, ...); ... 

为什么以下缓冲区创建示例也不起作用?

不工作1:

 FloatBuffer buf = FloatBuffer.wrap(v); 

不工作2:

 FloatBuffer buf = FloatBuffer.allocate(v.length); buf.put(v); buf.flip(); // or buf.rewind() 

编辑:

浏览API代码后,我发现:

在工作示例的情况下,memAddress(buf)返回一个有效的地址,但在其他情况下它只返回0。

其他信息:

为什么我得到一个FloatBuffer不是直接错误?

BufferUtils返回直接缓冲区,而其他缓冲区可能不返回。

您可以使用isDirect()方法检查包装的直接性并分配方法。 包装是非直接的。