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

时间:2015-06-22 08:09:57

标签: java opengl buffer

数据源:

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.

其他信息:

why am i getting a FloatBuffer is not direct error?

1 个答案:

答案 0 :(得分:1)

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

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