Java:FloatBuffer 到 OpenGL - wrap() vs. allocate() vs. BufferUtils.createBuffer()
Java: FloatBuffer to OpenGL - wrap() vs. allocate() vs. 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) returns 一个有效地址,但在其他情况下它 returns 只是 0.
附加信息:
why am i getting a FloatBuffer is not direct error?
BufferUtils returns 一个直接缓冲区,而其他缓冲区可能不是。
您可以使用 isDirect() 方法检查 wrap 和 allocate 方法的直接性。包装器是非直接的。
数据源:
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) returns 一个有效地址,但在其他情况下它 returns 只是 0.
附加信息:
why am i getting a FloatBuffer is not direct error?
BufferUtils returns 一个直接缓冲区,而其他缓冲区可能不是。
您可以使用 isDirect() 方法检查 wrap 和 allocate 方法的直接性。包装器是非直接的。