2017-08-07 33 views
0

我第一次學習LWJGL,並在LWJGL3 site上探索一個簡單的代碼塊作爲示例。我從來沒有使用過OpenGL或GLFW。LWJGL新手 - 什麼是stackPush(),mallocInt(1)和類似的GLFW方法?

我不明白這一小塊代碼。如果我刪除它,主代碼仍然有效。這整個事情只是爲了創造中心窗口嗎?

mallocInt (1)是什麼意思?整個想法stackPush()和奇怪的方法調用已被混淆。我用過SWT和awt,從來沒有見過類似的東西。

// Get the thread stack and push a new frame 

try (MemoryStack stack = stackPush()) { 

    IntBuffer pWidth = stack.mallocInt(1); // int* 
    IntBuffer pHeight = stack.mallocInt(1); // int* 

    // Get the window size passed to glfwCreateWindow 
    glfwGetWindowSize(window, pWidth, pHeight); 

    // Get the resolution of the primary monitor 
    GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 

    // Center the window 
    glfwSetWindowPos(window, 
     (vidmode.width() - pWidth.get(0))/2, 
     (vidmode.height() - pHeight.get(0))/2); 

} 

// the stack frame is popped automatically 

任何幫助,非常感謝。

回答

0

LWJGL允許堆棧上的內存分配的速度比純Java允許通過MemoryStack類的速度快得多。爲了獲得堆棧,請致電stackPush()。通過像這樣將它放在try子句中,它使得堆棧分配成爲線程本地,並且彈出堆棧並在完成try語句後釋放緩衝區。

MemoryStack.mallocXX(count)(其中xx是類型,count是緩衝區大小)是從堆棧分配的方式。 stack.mallocInt(1)從堆棧中返回一個大小爲1的整數緩衝區,而不是堆。

一般來說,當您在制服或任何需要緩衝區的地方使用時,請使用MemoryStack.stackPush()。 LWJGL有一篇關於LWJGL3中不同內存管理方法的很好的文章(here),我絕對建議花時間坐下來學習這些新的內存技術。

相關問題