2015-06-22 59 views
2

數據源:爪哇:FloatBuffer到OpenGL的 - 包裹()與分配()與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.

其他相關信息:

why am i getting a FloatBuffer is not direct error?

+0

這也可能取決於平臺。我在Android上使用了'FloatBuffer.wrap()',沒有任何問題。 –

回答

1

BufferUtils返回一個直接緩衝區,而其他人可能不會。

您可以檢查包裝的直接性並使用isDirect()方法分配方法。包裝不直接。

+0

你說得對。看看我在上面的問題編輯。 – doev

+0

不錯,自從我涉足了很長一段時間 –