2017-08-07 36 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),我绝对建议花时间坐下来学习这些新的内存技术。

相关问题