当前位置: 首页 > 知识库问答 >
问题:

LWJGL错误-无法定位GL函数glVertexArrayVertexAttribDivisorEXT的地址

臧欣怿
2023-03-14

我在互联网上到处搜寻这个问题的答案。我意识到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

我相信“找不到…”在总账期间发生。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

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

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

共有1个答案

孟洋
2023-03-14

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

7) EXT\u direct\u state\u access应该如何与该扩展交互?

已解决:添加glVertexArrayVertexAttribDivisorEXT选择器free
顶点数组对象命令和GLGETXARRAYINTEGERI\u vEXT查询必须接受vertex\u ATTRIB\u array\u DIVISOR\u ARB以返回顶点数组对象的顶点ATTRIB数组DIVISOR状态。

DSA交互于2013年7月添加。如果实现响应wglGetProcAddress等。使用空指针查询“GLVertexArrayVertexAttributeDivisionText”,则DSA功能不可用。

信息:

无法定位GL函数glVertexArrayVertexAttribDivisorEXT的地址

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

// get the extension instance for the current context
ARBInstancedArrays ext = ARBInstancedArrays.getInstance(); 
if ( ext.VertexArrayVertexAttribDivisorEXT != NULL ) {
    // the function is available
}
 类似资料:
  • 我已经有这个错误将近一个星期了,现在我正准备让步。我已经使用Maven2制作了这个大的jar文件。当我使用以下命令运行jar文件时: 我得到这个错误: JavaProjectApplicationContext.xml如下所示: 到目前为止我试过的事情。 用3种不同的方式构建项目(2个IDE和命令行)删除了所有jar依赖关系冲突(我有spring-2.5.6.jar和spring-context-

  • 当我简单地运行以下代码时,我总是得到这个错误。 我已将我的证书文件保存在 ,Boto应从中读取我的凭据。 我的设置有错吗? 下面是boto3.set\u stream\u logger('botocore',level='DEBUG')的输出。

  • 所有,glGenVertexArray()有困难。我得到以下错误: oop.java:27Checks.checkorg.lwjgl.opengl.GL30.get实例(GL30.java:667)org.lwjgl.opengl.GL30.get实例(GL30.java:662)org.lwjgl.opengl.GL30.nglGenVertexArray(GL30.java:2789)org.

  • 我正在使用安装在Program文件中的windows 8 java。我收到这样的错误"无法定位tools.jar.预计在C:\Program Files(x86)\Java\jre1.8中找到它。0_40\lib\tools.jar" 在创建2个系统变量为"JAVA_HOME",路径为'C:\Program Files\Java\jdk1.8.0_40'和"ANT_HOME",路径为'D:\Sof

  • 然后,它甚至无法创建着色器(glCreateShader())返回0。 但是如果我使用GLFW_EGL_CONTEXT_API,我就可以完成大多数GL例程,如着色器加载、程序编译和链接、GL VBO设置等,但是在glDrawElements()上失败了。 如果我使用此设置打印供应商信息,我可以看到以下内容: 另外,如果我试图手动检索glDrawElements的函数指针,它将返回NULL。 我想了

  • 致命错误:无法在第9行的E:\wamp1\wamp\www\sample.php中重新声明关闭()(先前在E:\wamp1\wamp\www\sample.php: 1中声明) 当我运行这个脚本时,它说不能在第9行中重新声明近()(以前在第1行中被标记)。 即使出现错误,与和相关的值也会传递给css。我在这里做错了什么?我正在调用第9行中的函数。有什么帮助吗?