![](/img/trans.png)
[英]Java: Converting String to and from ByteBuffer and associated problems
[英]problems with getting the mouse coordinates from GLFW in Java (potentially a bytebuffer issue)
我最近進行了從LWJGL 2到LWJGL 3的切換,在花了幾個小時研究文檔並組裝一個程序來使用它之后,我有了這段代碼。 請注意,這些方法中的代碼都是靜態的,並且Eclipse沒有給我與此相關的代碼問題。 另外,請注意,將其從allocateDirect更改為allocate無效。
//At the beginning of the class declaration: public static ByteBuffer mouseXb=ByteBuffer.allocateDirect(8), mouseYb=ByteBuffer.allocateDirect(8); public static double mouseX=0,mouseY=0; //Then later, in another method in the same class glfwPollEvents(); glfwGetCursorPos(window, mouseXb, mouseYb); mouseX=mouseXb.getDouble(); mouseY=mouseYb.getDouble(); System.out.println(mouseX+", "+mouseY); mouseXb.flip(); mouseYb.flip();
不過,奇怪的是,我得到的值如下:(還要注意,它們僅在鼠標在窗口中四處移動時才會更改,而在窗口外或鼠標不動時則不會更改)
2.0857E-317, 2.604651E-317 3.121831E-317, 2.604651E-317 5.1940924E-317, 2.604651E-317 7.2664804E-317, 2.604651E-317 6.7490474E-317, 2.0865855E-317 4.6771653E-317, 7.785178E-317 5.19561E-317, 5.7129166E-317
好的,我已解決了該問題,但是如果其他人也有同樣的問題,我將在此處保留此帖子。 事實證明,默認情況下GLFW使用Little Endian,而Bytebuffers是big endian。
您可以通過添加以下內容(如果使用的是我的代碼)來解決此問題: mouseYb.order(ByteOrder.LITTLE_ENDIAN); mouseXb.order(ByteOrder.LITTLE_ENDIAN);
mouseYb.order(ByteOrder.LITTLE_ENDIAN); mouseXb.order(ByteOrder.LITTLE_ENDIAN);
我本人對LWJGL 3還是很陌生,並且在ByteBuffers方面遇到了一些麻煩。 經過一番環顧,我發現了以下頁面: LWJGL-Bindings FAQ 。
在org.lwjgl包中,有一個稱為BufferUtils的類,該類具有用於生成ByteBuffer的靜態函數。 從源代碼中,我注意到它們也調用了order方法,就像您的修復程序一樣,盡管具有不同的參數:
public static ByteBuffer createByteBuffer(int capacity)
{
return BUFFER_ALLOCATOR.malloc(capacity).order(ByteOrder.nativeOrder());
}
FAQ建議使用此選項。 顯然您的代碼現在可以正常工作,但我只是想您應該知道,以防將來遇到任何問題。
另外,感謝您的代碼片段,我不知道如何使用ByteBuffer,現在可以了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.