java - 如何在LWJGL 3中使用WGLARB?

标签 java opengl lwjgl game-engine

之前在我用java编写的游戏引擎中,我使用过lwjgl 2.9.3。我遇到了一个问题。我想让 lwjgl 在另一 block 显卡上运行。所以我研究了一下,很快就发现,使用 lwjgl 2.9.3 是不可能的。所以我读到了有关 lwjgl 的开发人员是否会添加选择要在哪个显卡上运行的选项的信息。我发现 lwjgl 3 确实支持这个。所以我切换到了 lwjgl 3。
我让一切正常工作,并开始研究我切换的原因。我很快发现没有关于更改您使用的显卡的文档。因此,经过几个小时的测试,我发现您需要创建一个 WGLARB 上下文。
我知道你可以使用以下方法:wglCreateContextAttribsARB(long hdc, long sharedContext, Byte/IntBuffer attribList)。但目前还不清楚如何使用这种方法。我不确定你是否使用Windows DC指针或其他东西。我知道您不必为“长sharedContext”添加任何内容,因此我添加了“MemoruUtil.NULL”。这是我的问题:

  1. 如何创建 WGLARB 上下文,或者更具体地说,您具体传递什么内容,例如是否放入空的 Int/Byte 缓冲区,或者在将数据作为对象传递之前将数据放入缓冲区中?范围。我不知道。

  2. 从那里如何使用:WGLNVGPUAffinity.getInstance().wglCreateAffinityDCNV(gpuList); GPU 列表是 PointBuffer 或 ByteBuffer 我如何将此数据传入第一名?

很抱歉这篇文章很长,但我对缺乏文档感到非常沮丧,提前谢谢您!

最佳答案

LWJGL 3(通过 GLFW)处理 OpenGL 上下文创建。这意味着您无法处理它。 GLFW 将创建上下文,尽管它确实为您提供了一些关于具体如何创建的选项。但 GLFW 是跨平台的,因此它不会为您提供 Windows 和 NVIDIA 特定的选项。

但是,这并不意味着您没有一些控制权。 LWJGL 3 还允许您访问特定于平台的 API(GLX、WGL 等)及其扩展。因此,您可以使用 WGL.wglGetCurrentContext 获取上下文,然后使用 WGLNVGPUAffinity functions创建亲和性上下文。 That extension提供了用于枚举 GPU 和创建针对特定 GPU 的新 OpenGL 上下文的所有各种工具。

扩展规范甚至足以提供枚举 GPU 的示例代码。当然,这只是 NVIDIA 的问题,但这对您来说显然不是问题。

关于java - 如何在LWJGL 3中使用WGLARB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818015/

相关文章:

java.lang.NoSuchMethodError : getPointer

java 未满足的链接错误

java - 如果数据库出现错误,谁将在 spring jdbc 中抛出异常

opengl - 如何在OpenGL中更改纹理的位置?

java - Qt:委托(delegate)给单个编辑器

c++ - GLSL 问题 : Multiple shaders in one program

opengl - 是否可以将着色器变量声明为输入和输出?

java - STB 加载图像,但显示黑色纹理

Java 日期比较无法正常工作

java - java.lang.CharSequence 类型无法在包声明中解析