【问题标题】:LWJGL Newbie – What are stackPush (), mallocInt (1) and similar GLFW methods?LWJGL 新手 – 什么是 stackPush()、mallocInt(1) 和类似的 GLFW 方法?
【发布时间】:2017-08-07 20:30:49
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

    标签: java malloc lwjgl glfw


    【解决方案1】:

    LWJGL 允许以比纯 Java 通过MemoryStack 类允许的速度快得多的速度在堆栈上分配内存。为了获得堆栈,您调用stackPush()。通过像您所做的那样将它放在try 子句中,它使得堆栈分配是线程本地的,并且一旦try 语句完成,堆栈就会被弹出并释放缓冲区。

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 1970-01-01
      • 2016-06-21
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多