【问题标题】:Is it a big deal switching from OpenGL 3.0 to OpenGL ES 2.0?从 OpenGL 3.0 切换到 OpenGL ES 2.0 有什么大不了的吗?
【发布时间】:2015-07-16 01:51:11
【问题描述】:

如果我目前正在使用 SDL 和 GLEW(适用于 OpenGL 3.0+)为 Windows 开发游戏,并且以后想将我的游戏移植到 Android,我是否必须重写大部分代码才能从 OpenGL 3.0 转换为 OpenGL ES 2.0?是否有任何程序可以为我做到这一点?从 OpenGL 切换到 OpenGL ES 有什么大不了的吗?

【问题讨论】:

标签: opengl opengl-es-2.0 opengl-3


【解决方案1】:

一点也不,很容易转换。

唯一的区别是着色器变量和常量,以及像 GL_RGBA8 到 GL_RGBA8_OES 这样的后缀。但是,OpenGL ES 存在限制。例如,您只能使用 GL_UNSIGNED_BYTE 或 GL_UNSIGNED_SHORT 作为索引数据类型 GL_UNSIGNED_INT。这意味着,您一次不能绘制超过 65,535 个指数。这没什么大不了的,尽管你应该参考官方的 OpenGL ES 手册,https://www.khronos.org/opengles/sdk/docs/man/

参考链接OpenGL ES 2.0 vs OpenGL 3 - Similarities and Differences by coffeeandcode

【讨论】:

  • 我不会说这通常是正确的。 OpenGL 3.x 具有 ES 2.0 中没有的大量特性。如果您使用其中任何一个,移植到 ES 2.0 将需要大量工作,或者对于某些功能来说完全不可能。
  • 我正在使用我自己的渲染引擎,它结合了 GL 3.3 和 GL ES 2.0。它适用于所有平台,但这也是正确的,因为相对而言,由于移动性能较弱,GL ES 没有足够的功能。我想知道您能否告诉我哪些功能无法转换。
  • VAO(好吧,它们被一个无处不在的扩展暴露了,但在 ES2 中没有)?转换反馈?几何着色器?着色器语言不兼容(片段语言中的浮点数没有默认精度;inout vs attributevaryingtexture vs texture2D)?名单很长……
  • VAO 在 es 2.0 (glBindVertexArrayOES) 中,几何着色器不在 3.3 中,es 3.0 也有 Geo Shader。我提到了着色器代码,我认为这没什么大不了的。
  • 但是如果我对Android游戏开发很认真,我一般应该使用什么?
【解决方案2】:

这真的取决于你的代码

OpenGL ES 2.0(和 3.0)主要是桌面 OpenGL 的一个子集。

最大的不同是 ES 中没有遗留的固定函数管道。什么是固定功能管道?任何与glVertexglColorglNormalglLightglPushMatrixglPopMatrixglMatrixMode 等在 GLSL 中使用访问固定函数数据的变量比如gl_Vertexgl_Normalgl_Colorgl_MultiTexCoordgl_FogCoord等等……

如果您使用这些功能中的任何一个,您将需要完成一些工作。 OpenGL ES 2.0 和 3.0 只是普通的着色器。没有为您提供“3d”。您需要自己编写所有投影、照明、纹理参考等。

如果您已经在这样做(大多数现代游戏可能会这样做),那么您可能没有太多工作。另一方面,如果您一直在使用那些旧的已弃用的 OpenGL 功能,根据我的经验,这些功能仍然非常常见(大多数教程仍然使用这些东西)。然后,当您尝试自己重现这些功能时,您需要完成一些工作。

有一个开源库regal,我认为它是由 NVidia 启动的。它应该复制那些东西。请注意,整个固定功能系统效率相当低,这是它被弃用的原因之一,但它可能是一种让事情快速运行的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多