JOGL在创建任何GLCanvas之前检查扩展的可用性



要检查扩展可用性,我需要使用GL.isExtensionAvailable。为了获得GL对象,我需要创建一些GLCanvas,并在init()display()中获得GL实例。

在创建窗口之前,在main()开始时,是否有方法检查扩展可用性?

我想你运气不好。某些扩展的可用性可能会根据您想要可视化总账内容的屏幕连接的视频卡而变化,因此在创建总账上下文之前,您无法可靠地获得这些信息。您可能只能创建一个屏幕外上下文来获取该信息,但结果可能与绑定到窗口的上下文不同

可以很早地调用GLContext.getCurrent().getPlatformExtensionString(),但只有当OpenGL上下文至少在适当的线程上成为当前上下文一次时,它才会返回非null值。在调用GLContext.getCurrent().之前,不要忘记调用GLProfile.initSingleton()

不过,pqnet的评论是正确的。许多计算机(尤其是现代笔记本电脑)都有几种很难理解的显卡和机制,根据功耗、性能状况(是否为"高性能")切换到另一种显卡和机制(例如Optimus)。此外,可能支持不同的驱动程序(糟糕的GDI渲染器和Windows下真正的OpenGL驱动程序),通常支持几个配置文件(前向兼容和后向兼容的配置文件,甚至在台式机上的ES配置文件)。。。JOGL会尽最大努力挑选最有能力的,但它可以在屏幕外和屏幕上使用不同的。GLProfile使用的第一个OpenGL上下文和第一个创建的drawinable使用的OpenGL上下文可能非常不同。

这个问题不仅仅是JOGL的问题。我的建议有助于了解默认设备可以使用哪些扩展。您也可以使用GLProfile.glAvailabilityToString()和GLProfile.getDefault()。

N。B: 我假设您至少使用JOGL 2.3.1。JOGL 1的维护工作大约在5年前停止。

最新更新