【问题标题】:How to use WGLARB in LWJGL 3?如何在 LWJGL 3 中使用 WGLARB?
【发布时间】:2015-11-20 02:30:51
【问题描述】:

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

  1. 您如何创建 WGLARB 上下文,或者更具体地说,您具体传递了什么,例如您是放入一个空的 Int/Byte 缓冲区,还是在将数据作为范围。我不知道。

  2. 从那里你如何使用:WGLNVGPUAffinity.getInstance().wglCreateAffinityDCNV(gpuList); GPU 列表是 PointBuffer 或 ByteBuffer 我如何让这些数据首先传入?

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

【问题讨论】:

    标签: java opengl lwjgl game-engine


    【解决方案1】:

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

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

    扩展规范甚至可以提供用于枚举 GPU 的示例代码。当然,它只是 NVIDIA,但这显然不是你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2022-08-17
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多