LWJGL新手 – 什么是stackPush()、mallocInt(1)和类似的GLFW方法?
LWJGL Newbie – What are stackPush (), mallocInt (1) and similar GLFW methods?
我是第一次学习 LWJGL 并在 LWJGL3 site 上探索作为示例给出的简单代码块。我以前从未使用过 OpenGL 或 GLFW。
我不明白这一小段代码。如果我删除它,主要代码仍然有效。难道这一切只是为了让 window 以创作为中心吗?
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
class 更快的速度在堆栈上分配内存。为了获得堆栈,您调用 stackPush()
。通过将它放在 try
子句中,就像你所做的那样,它使得堆栈分配是线程本地的,一旦 try
语句完成,堆栈就会弹出并释放缓冲区。
MemoryStack.mallocXX(count)
(其中 xx 是类型,count 是缓冲区的大小)是如何从堆栈分配的。 stack.mallocInt(1)
returns 来自堆栈而不是来自堆的大小为 1 的整数缓冲区。
一般来说,当你在做制服或任何需要缓冲的地方时,使用MemoryStack.stackPush()
。 LWJGL 有一篇非常好的文章 (here) 介绍了 LWJGL3 中不同的内存管理方法,我强烈建议您花时间坐下来学习这些新的内存技术。
我是第一次学习 LWJGL 并在 LWJGL3 site 上探索作为示例给出的简单代码块。我以前从未使用过 OpenGL 或 GLFW。
我不明白这一小段代码。如果我删除它,主要代码仍然有效。难道这一切只是为了让 window 以创作为中心吗?
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
class 更快的速度在堆栈上分配内存。为了获得堆栈,您调用 stackPush()
。通过将它放在 try
子句中,就像你所做的那样,它使得堆栈分配是线程本地的,一旦 try
语句完成,堆栈就会弹出并释放缓冲区。
MemoryStack.mallocXX(count)
(其中 xx 是类型,count 是缓冲区的大小)是如何从堆栈分配的。 stack.mallocInt(1)
returns 来自堆栈而不是来自堆的大小为 1 的整数缓冲区。
一般来说,当你在做制服或任何需要缓冲的地方时,使用MemoryStack.stackPush()
。 LWJGL 有一篇非常好的文章 (here) 介绍了 LWJGL3 中不同的内存管理方法,我强烈建议您花时间坐下来学习这些新的内存技术。