2017-08-07 7 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はタイプであり、カウントはバッファのサイズです)は、スタックからの割り当て方法です。 stack.mallocInt(1)は、ヒープからではなく、スタックからサイズ1の整数バッファを返します。

一般的に、制服やバッファが必要な場所では、MemoryStack.stackPush()を使用してください。 LWJGLは、LWJGL3のメモリ管理のさまざまな方法について非常に良い記事(here)を持っています。私は座ってこれらの新しいメモリテクニックを学ぶ時間をとることをお勧めします。

関連する問題