2016-04-02 42 views
1

türü için serbest() yöntemi tanımlanmamışsa, kararlı LWJGL 3.0.0b sürümünü yükledim ve https://www.lwjgl.org/guide adresinde bulunan pencere oluşturma örneğini takip etmeye çalışıyorum. Ancak, "GLFWKeyCallback" için "free() yöntemi tanımlanmamış" ve "GLFWErrorCallback türü" için "free() undefined yöntemi") alıyorum. Free() yönteminin GLFWKeyCallback ve GLFWErrorCallback sınıflarında olması gerekiyordu, ancak görünüşe göre, orada değil. Bu sorunu nasıl giderebilirim? Teşekkürler. Başlarken bölümündekiGLFWKeyCallback

import org.lwjgl.*; 
import org.lwjgl.glfw.*; 
import org.lwjgl.opengl.*; 

import static org.lwjgl.glfw.GLFW.*; 
import static org.lwjgl.opengl.GL11.*; 
import static org.lwjgl.system.MemoryUtil.*; 

public class HelloWorld { 

    // We need to strongly reference callback instances. 
    private GLFWErrorCallback errorCallback; 
    private GLFWKeyCallback keyCallback; 

    // The window handle 
    private long window; 

    public void run() { 
     System.out.println("Hello LWJGL " + Version.getVersion() + "!"); 

     try { 
      init(); 
      loop(); 

      // Destroy window and window callbacks 
      glfwDestroyWindow(window); 
      keyCallback.free(); 
     } finally { 
      // Terminate GLFW and free the GLFWErrorCallback 
      glfwTerminate(); 
      errorCallback.free(); 
     } 
    } 

    private void init() { 
     // Setup an error callback. The default implementation 
     // will print the error message in System.err. 
     glfwSetErrorCallback(errorCallback = GLFWErrorCallback.createPrint(System.err)); 

     // Initialize GLFW. Most GLFW functions will not work before doing this. 
     if (glfwInit() != GLFW_TRUE) 
      throw new IllegalStateException("Unable to initialize GLFW"); 

     // Configure our window 
     glfwDefaultWindowHints(); // optional, the current window hints are already the default 
     glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation 
     glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable 

     int WIDTH = 300; 
     int HEIGHT = 300; 

     // Create the window 
     window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World!", NULL, NULL); 
     if (window == NULL) 
      throw new RuntimeException("Failed to create the GLFW window"); 

     // Setup a key callback. It will be called every time a key is pressed, repeated or released. 
     glfwSetKeyCallback(window, keyCallback = new GLFWKeyCallback() { 
      @Override 
      public void invoke(long window, int key, int scancode, int action, int mods) { 
       if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) 
        glfwSetWindowShouldClose(window, GLFW_TRUE); // We will detect this in our rendering loop 
      } 
     }); 

     // Get the resolution of the primary monitor 
     GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 
     // Center our window 
     glfwSetWindowPos(
      window, 
      (vidmode.width() - WIDTH)/2, 
      (vidmode.height() - HEIGHT)/2 
     ); 

     // Make the OpenGL context current 
     glfwMakeContextCurrent(window); 
     // Enable v-sync 
     glfwSwapInterval(1); 

     // Make the window visible 
     glfwShowWindow(window); 
    } 

    private void loop() { 
     // This line is critical for LWJGL's interoperation with GLFW's 
     // OpenGL context, or any context that is managed externally. 
     // LWJGL detects the context that is current in the current thread, 
     // creates the GLCapabilities instance and makes the OpenGL 
     // bindings available for use. 
     GL.createCapabilities(); 

     // Set the clear color 
     glClearColor(1.0f, 0.0f, 0.0f, 0.0f); 

     // Run the rendering loop until the user has attempted to close 
     // the window or has pressed the ESCAPE key. 
     while (glfwWindowShouldClose(window) == GLFW_FALSE) { 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer 

      glfwSwapBuffers(window); // swap the color buffers 

      // Poll for window events. The key callback above will only be 
      // invoked during this call. 
      glfwPollEvents(); 
     } 
    } 

    public static void main(String[] args) { 
     new HelloWorld().run(); 
    } 

} 

cevap

2

kodu yalnızca son gece yapı ile çalışır: Burada

https://www.lwjgl.org/guide kodudur. 3.0.0b'den bu yana bazı API değişiklikleri oldu - bu durumda, daha yeni free() yerine release() kullanın (ancak 3.0.0 sürümü çıktığında değiştirmeyi unutmayın).