我一直在考虑为我的项目制作一个额外的包装器来使用OpenGL而不是Allegro。我不确定要使用哪个OpenGL版本,因为我知道有些计算机无法运行最新版本,例如v4.4。另外,我需要一个在Linux,Windows,Mac中没有编译问题的版本。
答案 0 :(得分:7)
您需要了解目标系统上可用的显卡类型并牢记一些细节:
在考虑用户可以使用的硬件时,Steam hardware Survey可能有所帮助。请注意,大多数用户都使用与DirectX 9兼容的硬件,这大致相当于OpenGL 2.0。维基百科的OpenGL文章还指出了哪些硬件最初支持哪些版本。
如果您使用像GLEW或GLEE这样的库或任何依赖于它们或提供类似功能的工具包(例如SFML,甚至自4.3以来的Allegro),那么您无需担心你自己的代码是否会编译。这些工具包将负责启用扩展的详细信息并提供您需要的所有符号。
鉴于所有这些,我建议定位OpenGL 2.1,以便通过最佳功能支持获得最广泛的受众。
答案 1 :(得分:3)
您的安全赌注是OpenGL 2.1,但它需要得到目标系统上的驱动程序的支持。在几个移动平台上使用的OpenGL ES基本上是一个简化的OpenGL 2,所以即使移植到那些也相当容易。我强烈推荐使用libGlew,因为VJo说。
答案 2 :(得分:2)
它不是关于操作系统,而是关于视频卡驱动程序的更多信息。
我认为1.4是所有消费者图形系统都支持的最高版本:ATI(AMD),nVidia和Intel IGP。英特尔绝对是限制因素,即使ATI或nVidia没有硬件支持,他们也会发布使用软件来模拟缺失功能的OpenGL 4.1驱动程序。英特尔不是这样。
答案 3 :(得分:1)
OpenGL不是您经常编译和运送的库(除非您是Linux经销商并且正在打包X.Org/Mesa)。你的程序只是动态链接libGL.so(Linux / BSD),opengl32.dll(Windows,64位系统,它也是calles opengl32.dll,但它实际上是64位DLL)或OpenGL Framework(MacOS X) 。这使您的程序可以访问系统的OpenGL安装。您要使用的版本/配置文件对您链接的库没有影响!
然后在您的程序初始化之后,您可以测试哪个OpenGL版本可用。如果你想使用OpenGL-3或4,你必须在Windows中跳出一些额外的箍来充分利用它,但通常某种包装可以帮助你创建上下文,只需将它煮沸到几行
然后在程序中,您可以为各种版本实现多个代码路径。通常较低的OpenGL verion代码路径与较高版本的代码路径共享一个较大的子集。我建议在可用的最高版本中编写新代码,然后为较低版本添加额外的代码路径(通常只是可以由C预处理器宏或类似代码完成替换),直到达到您真正需要的功能的最小公分母。
答案 4 :(得分:0)
然后你需要使用OpenGL 1.1,并通过使用wglGetProcAddress(在windows上)或glXGetProcAddress(在linux上)使用所需(和支持)的函数。
您可以使用GLEW library代替使用这两个功能,它可以为您完成并且是跨平台的。