1) 无法直接转换 OpenGL 3.x 或 4.x 代码,因此它将在仅支持 GL2 的系统上运行,除非您愿意编写大量仿真代码.
不仅范式不同(这确实很容易做到,例如,存在用于 OpenGL3 的即时模式库,可以想象相反的做法,并且有一个可以“映射”和“未映射”的缓冲区对象类,并且发出很多glVertex 调用)。该硬件还支持许多功能作为渲染管道的一部分,这些功能在旧硬件中根本不存在(例如实例化、几何着色器、曲面细分)。其中一些(例如,实例化)更容易模拟,而另一些则更难(地理着色器)。当然,以某种方式模拟一切当然是可能的,但这是一项非常繁重的工作,以至于没有任何意义。
2) 您的计算机可能能够运行使用 OpenGL 3 的软件,前提是您有支持此功能的软件仿真层。同时,MESA 支持 OpenGL 3.1,所以这将是“是”(此外,nVidia 曾有过某种“调整工具”,它允许某些 GPU 通过仿真使用它们并不真正支持的功能...但我怀疑这是否包括完整的 GL3 支持,无论如何它也不适用于 ATI 卡)。
否则,答案当然是:不。
3) 视情况而定。很难说“大多数”做什么。但这有关系吗?您需要做适合您的应用的事情,而不是“大多数”做的事情。
对于人们在下班回家的路上在手机上玩的糖果粉碎瓷砖和精灵游戏,GL2(或ES)非常适合。做类似事情的开发人员将使用旧的 API,因为它可以工作,而且在很短的时间内运行起来更简单。
大多数其他人不会,因为不仅对于要求更高的应用程序性能要差得多,而且您没有着色器和其他非常有用的功能可用。此外,几乎所有合理当前的硬件都至少支持 GL3。
GL3 硬件以低两位数的价格提供至少 5 年,而 GL4 硬件也以这个价格提供了一段时间。五年来我一直在宣扬(我可能错了,但这是我的观点)如果有人不能或不想以 20 美元买一张新卡,那么他们也不会为您的软件付费。所以他们不是我想考虑的“严肃”客户。此外,由于缺乏计算能力,无法执行 GL3 的卡也无法以可接受的帧速率执行大多数任务。这意味着即使这些人是认真的、付费的客户,他们也将是不满意会提出大量投诉的客户。
当然,您的方法可能会有所不同,但我认为最好远离这些客户。已经为不满意的用户制定计划是一种不明智的做法。
OpenGL3 有一个兼容性配置文件,但如果你问我,这是委员会方面的一个荒谬的决定。尽管 nVidia 仍然建议只使用兼容性配置文件,并承诺无限期地支持它,并声称它运行速度不会变慢但很可能会更快,但我不同意这种观点。
虽然启用兼容性配置文件本身可能是“无害的”并且可能确实不会导致任何性能问题,但它允许您有意或无意地使用无法很好地映射到硬件工作方式的功能,它甚至允许您做一些事情在概念上是“错误的”。当您习惯于使用旧功能时,使用核心配置文件可能会很痛苦并且似乎是不必要的限制,但这些限制实际上只会帮助您编写更好的代码。
4) 对旧 API 的了解实际上是相当困难的。在我看来,你应该尽快忘记它。遗留 API 的唯一优点是,将您的第一个三角形显示在屏幕上非常简单(使用 GL3 大约 40 行代码已经有点挑战了)。但是一旦你想做一些更进化的事情,GL3/GL4最初的高入门门槛就不再重要了。相反。一旦习惯了它,只需将整个间接绘图命令缓冲区和整个顶点数据缓冲区扔给驱动程序并让它处理它就会容易得多。
如果您还没有开始学习任何东西,那就只学习现代方法,永远不要回头。运气好的话,Vulkan 今年将有一个完成的规范(是的,我是一个梦想家,但可以希望!)。同样,这与 GL API 的外观有些根本不同。但话又说回来,如果你已经习惯了“主要是 AZDO”风格的 GL,那么它不会有那么多的变化。