从 OpenGL 3.0 切换到 OpenGL ES 2.0 是一件大事吗?

Is it a big deal switching from OpenGL 3.0 to OpenGL ES 2.0?

如果我目前正在使用 SDL 和 GLEW(针对 OpenGL 3.0+)为 windows 开发游戏并且我稍后想将我的游戏移植到 Android,我是否必须重写大部分我的代码从 OpenGL 3.0 转换为 OpenGL ES 2.0?是否有任何程序可以为我执行此操作?从 OpenGL 切换到 OpenGL ES 很重要吗?

一点也不,转换起来非常容易。

唯一的区别是着色器变量和常量,以及像 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/

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

这真的取决于你的代码

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

最大的区别是 ES 中没有遗留的固定功能管道。什么是固定功能管道?与 glVertexglColorglNormalglLightglPushMatrixglPopMatrixglMatrixMode 等有关的任何内容。 . 在 GLSL 中使用任何访问固定函数数据的变量,如 gl_Vertexgl_Normalgl_Colorgl_MultiTexCoordgl_FogCoord 等...

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

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

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