LWJGL错误-找不到GL函数glVertexArrayVertexAttribDivisorEXT的地址



我在互联网上搜索了很多遍,寻找这个问题的答案。我意识到LWJGL3仍在开发中,但除了我之外,似乎没有其他人遇到这个问题。事情是这样的,我有一台Mac和一台PC,我喜欢用Java和LWJGL进行开发,因为它应该是跨平台的。然而,该应用程序在PC上运行得很好,但当我在Mac上运行并调试时,我会在控制台中得到这个:

[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。此外,它确实运行,但只有在到达渲染调用时才会锁定,从而导致渲染循环冻结。以下是我的VM论点:

-XstartOnFirstThread -Djava.library.path=lib/ -Dorg.lwjgl.util.Debug=true

我真的很难找到其他有同样问题的帖子。我发现一些非常旧的帖子说它们是bug,所以也许这也是。这可能很简单,我只是很笨,但如果有帮助的话,我已经在下面的链接中包含了整个类。提前谢谢。

全类:http://pastebin.com/eZ1qXPsd

这是一个在OpenGL驱动程序中实现后添加到ARB_instanced_arrays扩展中的函数。这意味着,即使缺少特定的功能,一些驱动程序也可能会公开扩展,因此它在LWJGL中是可选的。这是来自扩展规范:

7) EXT_direct_state_access应该如何与此扩展交互?

已解决:添加glVertexArrayVertexAttribDivisorEXT选择器免费
顶点数组对象命令和glGetVertexArrayIntegeri_vEXT查询必须接受VEREX_ATTRIB_ARRAY_DIVISOR_ARB才能返回顶点数组对象的顶点属性数组除数状态。

DSA交互于2013年7月添加。如果实现
响应
的wglGetProcAddress等查询具有NULL指针的"glVertexArrayVertexAttribDivisorEXT",DSA功能不可用。

信息:

未能找到总账功能的地址glVertexArrayVertexAttribDivisorEXT

在调试模式下是一个简单的警告,可以安全地忽略。如果你需要使用该功能,你可以使用以下代码检查它是否可用:

// get the extension instance for the current context
ARBInstancedArrays ext = ARBInstancedArrays.getInstance(); 
if ( ext.VertexArrayVertexAttribDivisorEXT != NULL ) {
    // the function is available
}

相关内容

  • 没有找到相关文章

最新更新