我们应该总是比OpenGL ES版本2更喜欢版本1.x

OpengGL ES版本2在改变使用OpenGL ES 1.x建立的开发模式方面有很长的路要走。 你有着色器,你可以链接在一起应用varios效果/转换到你的元素,投影和转换matrix完全不同等工作。我见过很多在线教程和博客,简单地说,沟渠版本1.x,使用版本2,这是要走的路“。 即使在Android的文档中,也是“使用版本2,因为它可能比1.x更快”。

现在,我还读了一本关于OpenGL ES的书(这本书相当不错,但是我不想在这里提到,因为我不想给人留下我试图做出隐藏的宣传)。 那里的人只对本书80%的版本使用了OpenGL ES 1.x,然后最后只列出了版本2中的差异,并说“如果OpenGL ES 1做了你所需要的,就不需要切换到版本2,因为它只会让你的代码变得复杂。版本2被改变了很多以便于更新,更漂亮的东西,但是如果你不需要它,版本1.x就没问题了。

那么我的问题是,最后的陈述是正确的? 如果我不需要仅版本2的东西,我应该总是使用Open GL ES 1.x版本吗? 我确实希望这样做,因为我在版本1.x中发现编码比版本2简单很多,但是恐怕我的应用程序在使用旧版本时可能会过时得更快。

是的,对于桌面和移动用户来说,这也是一种常见的情况,对于OpenGL而言,固定管道方法只是被弃用,而在现代设备上使用旧代码时,你只是猜测,因为任何想要坚持现代OpenGL方法的GPU制造商不是被迫支持旧的function和旧的管道方式。

现在,您可以从低端市场到高端市场获得支持OpenGL ES 2的设备,而OpenGL ES 3即将推出,采用OpenGL ES 1.x对于今天的市场来说只是一个陈旧而不赞成的做法。

OpenGL ES 2引入了移动设备上的可编程stream水线 ,丢弃了旧的固定stream水线方法; 可能因为这个原因,你觉得使用起来比较困难,但只是思维方式的改变,在编码上花费了一些时间,会让你改变你的想法。

我不同意user827992的答案。 如果您不想或者不需要增加OpenGL ES 2的复杂性,请使用GL 1.1。 在查看事实时,您会看到当今市场上的所有手机支持OpenGL ES 1.1,大约90%的手机支持OpenGL ES 2。

以下是Google selectOpenGL版本的说明 :
(我删除了关于兼容性的一点,因为我上面链接了它)

OpenGL ES API 1.0(1.1版本)和2.0版本都提供了高性能的graphics界面来创建3D游戏,可视化和用户界面。 OpenGL ES 1.0 / 1.1 API与ES 2.0的graphics编程有很大的不同,因此开发人员在开始使用任一API进行开发之前应仔细考虑以下因素:

  • 性能 – 一般来说,OpenGL ES 2.0比ES 1.0 / 1.1 API提供更快的graphics性能。 但是,由于OpenGLgraphics管道的实现差异,性能差异可能会因OpenGL应用程序运行的Android设备而异。
  • 编码便利性 – OpenGL ES 1.0 / 1.1 API提供了固定的functionstream水线和便利function,这些function是不可用的
    在ES 2.0 API中。 刚刚接触OpenGL的开发人员可能会发现编码
    对于OpenGL ES 1.0 / 1.1更快更方便。
  • graphics控制 – OpenGL ES 2.0 API通过使用着色器提供完全可编程的stream水线,从而提供更高程度的控制。 通过更直接地控制graphics处理管道,开发人员可以创建使用1.0 / 1.1 API很难生成的效果。

虽然性能,兼容性,便利性,控制和其他因素可能会影响您的决定,但您应该根据您认为的为用户提供最佳体验来selectOpenGL API版本。

所以,虽然我同意ES2 +是未来,但如果它符合您的需求,仍然使用ES 1.1是没有错的。

如果设备同时支持OpenGL ES 1.x和2.x,则不太可能存在任何实际的ES 1.x硬件。 这意味着您的ES 1.x代码会生成ES 2.x调用,包含着色器 – 而着色器很可能会做您实际上不需要的东西。

另一方面,如果您所做的不需要太多的性能,使用ES 1.x可以让您更快地编写应用程序。

从长远来看,我推荐使用ES 2.x。

其实,正确的问题是:哪个OpenGL ES最适合我的应用程序需求?

如果您的应用程序只需要很好的3Dgraphics,而没有花哨和昂贵的效果,那么OpenGL 1.1就足够了。 没有着色器打扰! 另一方面,如果您需要大量特殊的,有时甚至是昂贵的特效,只能通过着色器使用,那么您必须使用OpenGL ES 2.0。

使用OpenGL ES 2.0 / 3.0时经常省略的一个缺点是缺乏FFP(见下文)需要程序员重写着色器上的一些固定function,以及一些用于管理的普通代码。 这样,使用OpenGL ES 2.0进行开发,与开发3Dgraphics引擎一起,对于开发好的着色器带来了很大的压力。 简而言之,要有相同的视觉效果,你有双重的工作。 尽管如此,GLES 2.0仍然很酷且有趣。

*固定function管线 – 用于创建和管理转换,照明和材料的一组function。 可用于OpenGL ES 1.x和桌面OpenGL 1.0到3.1(今天)。 OpenGL ES 2.0及更高版本上不提供FFP。

哈哈 我知道你所指的这本书。 是。 他为本书的80%提供了ES 1.1,然后试图将ES 2.0作为一个较小的版本。 对不起,但是1.1死了,吉姆。 他浪费你的时间。 我认为他是以1.1本书的forms写的,2.0版出来的时候就把它贴上去了。 1.1是较低的performance贬值。 你不应该用它写新的代码。 如果你是一个新的编码器使用2.0。