LWJGL错误 - 无法找到GL函数的地址glVertexArrayVertexAttribDivisorEXT
我已经在互联网上搜索到了寻找这个问题的答案。我意识到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,所以也许这也是。这可能是简单的,我只是愚蠢的,但如果它有帮助,我已经把整个班级列入下面的链接。提前致谢。
这是被添加到ARB_instanced_arrays扩展它已经在OpenGL驱动程序实现后一个功能。这意味着某些驱动程序可能会公开该扩展,即使该特定功能缺失,因此它已在LWJGL中变为可选。这是来自扩展规范:
7)EXT_direct_state_access应如何与此扩展进行交互?
解决:添加glVertexArrayVertexAttribDivisorEXT选择自由
顶点数组对象命令和glGetVertexArrayIntegeri_vEXT查询 必须接受VERTEX_ATTRIB_ARRAY_DIVISOR_ARB返回顶点数组 对象的顶点数组ATTRIB除数状态。加入的DSA交互2013年七月如果实现
响应一个wglGetProcAddress,为
“glVertexArrayVertexAttribDivisorEXT”用NULL指针等查询时,DSA 功能不可用。
消息:
无法为GL功能 glVertexArrayVertexAttribDivisorEXT
找到地址是在调试模式下简单的警告,可以放心地忽略。如果您需要使用该功能,您可以检查它是否可以使用下面的代码:
// get the extension instance for the current context
ARBInstancedArrays ext = ARBInstancedArrays.getInstance();
if (ext.VertexArrayVertexAttribDivisorEXT != NULL) {
// the function is available
}
“无法为GL功能定位地址”错误通常是没有什么可担心:他们只是意味着给定功能将无法使用,但如果您没有使用它们,这应该不成问题。 – javac
我建议你用'GLUtil.setupDebugMessageCallback()'设置一个调试消息回调。如果OpenGL出现问题,这将会向控制台输出错误。 – javac