【问题标题】:Java: FloatBuffer to OpenGL - wrap() vs. allocate() vs. BufferUtils.createBuffer()Java:从 FloatBuffer 到 OpenGL - wrap() vs. allocate() vs. BufferUtils.createBuffer()
【发布时间】:2015-06-22 08:09:56
【问题描述】:

数据来源:

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?

【问题讨论】:

  • 这也可能取决于平台。我在 Android 上使用 FloatBuffer.wrap() 没有任何问题。

标签: java opengl buffer


【解决方案1】:

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

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

【讨论】:

  • 你是对的。看看我在上面问题中的编辑。
  • 不错,好久没涉足了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
相关资源
最近更新 更多