LWJGL Newbie – 什么是stackPush(),mallocInt (1)和类似的GLFW方法?



我是第一次学习LWJGL,并在LWJGL3网站上探索了一个简单的代码块作为示例。我以前从未使用过OpenGL或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

任何帮助都非常感谢。

> LWJGL 允许在堆栈上进行内存分配,其速度远快于纯 Java 通过MemoryStack类允许的速度。 为了获取堆栈,您调用stackPush()。 通过像您所做的那样将其放在try子句中,它可以使堆栈分配在本地线程,并且在try语句完成后弹出堆栈并释放缓冲区。

MemoryStack.mallocXX(count)(其中 xx 是类型,count 是缓冲区的大小(是从堆栈进行分配的方式。stack.mallocInt(1)从堆栈而不是堆中返回大小为 1 的整数缓冲区。

通常,当您做制服或任何需要缓冲区的地方时,请使用MemoryStack.stackPush(). LWJGL 有一篇非常好的文章(这里(关于 LWJGL3 中内存管理的不同方法,我绝对建议花时间坐下来学习这些新的内存技术。

相关内容

  • 没有找到相关文章

最新更新