要检查扩展程序的可用性,我需要使用GL.isExtensionAvailable
。为了获取GL
对象,我需要创建一些GLCanvas
并在GL
或init()
中获取display()
个实例。
有没有办法在main()
开头创建窗口之前检查扩展程序的可用性?
答案 0 :(得分:2)
我猜你运气不好。某些扩展的可用性可能会根据哪个视频卡连接到您想要显示GL内容的屏幕而发生变化,因此在创建GL上下文之前无法可靠地获取该信息。您可能只能创建一个屏幕外上下文以获取该信息,但结果可能与绑定到窗口的上下文不同
答案 1 :(得分:0)
可以很早地调用GLContext.getCurrent()。getPlatformExtensionsString(),但只有当OpenGL上下文至少一次并且在适当的线程上时才会返回非null值。在调用GLContext.getCurrent()之前,不要忘记调用GLProfile.initSingleton()。
然而,pqnet的评论是正确的。许多计算机(尤其是现代笔记本电脑)具有多个图形卡和机制难以理解以切换到另一个(例如Optimus),这取决于功耗,性能简档(“高性能”与否)。 此外,可能支持不同的驱动程序(蹩脚的GDI渲染器和Windows下真正的OpenGL驱动程序),经常支持几个配置文件(前向兼容和向后兼容的配置文件,甚至桌面计算机上的ES配置文件),... JOGL将尽力而为选择最有能力的一个,但它可以在屏幕外和屏幕上使用不同的。 GLProfile使用的第一个OpenGL上下文和第一个创建的drawable使用的上下文可能非常不同。
这个问题不仅是JOGL的问题。我的建议有助于了解默认设备可用的扩展名。您也可以使用GLProfile.glAvailabilityToString()和GLProfile.getDefault()。
N.B:我认为你至少使用JOGL 2.3.1。大约5年前,JOGL 1的维护工作停止了。