我已經在互聯網上搜索到了尋找這個問題的答案。我意識到LWJGL3仍然在工作,但沒有其他人,但我似乎有這個問題。所以它就是這樣,我有一臺Mac和一臺PC,我喜歡用Java和LWJGL開發,因爲它應該是跨平臺的。然而,應用在PC上運行得很好,但是當我調試我的Mac上運行它,在我得到這個在控制檯:LWJGL錯誤 - 無法找到GL函數的地址glVertexArrayVertexAttribDivisorEXT
[LWJGL] Version 3.0.0b build 35 | Mac OS X | x86_64
[LWJGL] Loaded library from java.library.path: lwjgl
[LWJGL] MemoryUtil accessor: MemoryAccessorUnsafe
[LWJGL] Loaded native library: lib/libjemalloc.dylib
[LWJGL] MemoryUtil allocator: JEmallocAllocator
[LWJGL] Loaded native library: lib/libglfw.dylib
[LWJGL] Loaded native library bundle: /System/Library/Frameworks/OpenGL.framework
[LWJGL] Failed to locate address for GL function glVertexArrayVertexAttribDivisorEXT
我相信「無法找到......」在GL期間發生.createCapabilities()調用。因此,我認爲這會導致OpenGL初始化失敗,只是創建一個空白屏幕,因爲這似乎是發生在我身上的事情。
下面是實際的代碼:
glfwSetErrorCallback(errorCallback = errorCallbackPrint(System.err));
if (glfwInit() != GL11.GL_TRUE)
throw new IllegalStateException("Unable to initialize GLFW");
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
WIDTH = GLFWvidmode.width(vidmode);
HEIGHT = GLFWvidmode.height(vidmode);
RENDER_RATIO = (float) WIDTH/1920.0f; // Scales all the rendering by a constant
window = glfwCreateWindow(WIDTH, HEIGHT, "Game", glfwGetPrimaryMonitor(), NULL);
if (window == NULL)
throw new RuntimeException("Failed to create the GLFW window");
// GLFW Callbacks
glfwSetKeyCallback(window, keyCallback = new Keyboard());
glfwSetCursorPosCallback(window, cursorPosCallback = new Mouse.CursorPos());
glfwSetMouseButtonCallback(window, mouseButtonCallback = new Mouse.MouseButton());
glfwSetScrollCallback(window, scrollCallback = new Mouse.Scroll());
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwShowWindow(window);
// Initialize OpenGL
GL.createCapabilities(); //New for LWJGL 3.0.0b
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, WIDTH, HEIGHT, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glClearColor(1f, 0f, 0f, 1.0f); //Red background
窗口初始化,但我猜想,OpenGL上下文不會因爲窗外是黑色的,當我將背景設置爲紅色。在此之前,我得到了「未啓動主線程」異常,但通過向我的VM參數中添加-XstartOnFirstThread來修復它們。這是一個多線程的遊戲循環,但我確保將渲染保留在主線程上,並在新線程上進行更新,但是它甚至沒有達到那麼遠,因爲它沒有正確初始化OpenGL。它也運行,但只有在渲染調用時才鎖定,導致渲染循環凍結。這裏是我的虛擬機參數:
-XstartOnFirstThread -Djava.library.path=lib/ -Dorg.lwjgl.util.Debug=true
我真的很難找到任何其他職位有同樣的問題。我發現一些真正的舊帖子說他們是bug,所以也許這也是。這可能是簡單的,我只是愚蠢的,但如果它有幫助,我已經把整個班級列入下面的鏈接。提前致謝。
滿級:http://pastebin.com/eZ1qXPsd
「無法爲GL功能定位地址」錯誤通常是沒有什麼可擔心:他們只是意味着給定功能將無法使用,但如果您沒有使用它們,這應該不成問題。 – javac
我建議你用'GLUtil.setupDebugMessageCallback()'設置一個調試消息回調。如果OpenGL出現問題,這將會向控制檯輸出錯誤。 – javac