在常规OpenGL下学习OpenGL ES 2.0 - 编译



我正在学习OpenGL,目的是为Android/iPhone构建OpenGL ES应用程序。

由于我从一开始就学习它,所以我宁愿学习新规范,而不接触旧的东西(glBegin等)。不幸的是,当我通过一些教程并实现东西时,事实证明这些示例与 ES 2.0 不兼容。例如,在这些优秀的教程之后,我知道如何实现灯光,什么在我的 PC 上有效,但在移动设备上不起作用(后者不支持gl_LightSource)。

我想做的是在我的PC上开发代码,并将API限制为OpenGL ES支持的命令(例如,在glLight上抛出错误)。这可能吗?

假设您使用Windows进行开发,那么您可以使用Google ANGLE将API限制为OpenGL ES 2.0。ANGLE基本上包装了DirectX,但您可以通过完全兼容的OpenGL ES 2.0接口使用它。

如果您有AMD Radeon GPU,您还有另一种选择:AMD OpenGL ES SDK 还提供完全兼容的 2.0 接口。

这两种情况下,如果您不小心使用了非 OpenGL ES 2.0 功能,则在参数组合不受支持的情况下,代码将无法编译或在运行时失败。着色器也是如此,glCompileShader调用将失败。

如果你想学习OpenGL ES 2并确保你只使用与OpenGL ES 2兼容的调用和技术,请考虑学习WebGL。

WebGL几乎与OpenGL ES 2相同。 你可以获得javasript控制台的优势(使用firebug或chrome的内置开发人员工具),并且在某些环境中(我认为Windows上的chrome?),每当你做错事时,你都会得到非常有用的错误消息。 除此之外,您还可以自动访问多达4个WebGL实现进行测试(Firefox,chrome,safari,opera),并且您拥有一组非常好的工具来测试OpengGL。

这基本上就是我学习OpenGL ES 2的方式。

如Mali GPU OpenGL ES Application Development Guide所述:

OpenGL ES

1.1 和 OpenGL ES 2.0 是完整 OpenGL 的子集。 标准。使用 OpenGL ES API 时,存在一些限制,即您 在开发应用程序时必须注意。

例如,以下 OpenGL 功能在 OpenGL ES 1.1 或 OpenGL ES 2.0:

  1. 不支持 glBegin 或 glEnd。请改用顶点数组和顶点缓冲区对象。

  2. 唯一支持的栅格化基元是点、线和三角形。不支持四边形。

  3. 没有多项式函数求值阶段。

  4. 您不能将片段块直接发送到单个片段操作。

  5. 不支持显示列表。

此外,以下 OpenGL 功能在 OpenGL ES 2.0:

  1. 不支持固定函数图形管道。您必须使用自己的顶点和片段着色器程序。

  2. 不支持查看诸如glFrustumf之类的转换。您必须计算自己的转换矩阵,将其传递给顶点 着色器作为统一变量,并在 着色器。

  3. 不支持glVertexPointer 和 glNormalPointer 等专用函数。使用 glVertexAttribPointer 相反。

您可以随时参考 OpenGL ES 规范,查看是否支持某个功能/特性。

在 http://www.learnopengles.com/,OpenGL ES 2.0有一套很好的课程。要在PC上进行开发,您可以尝试使用模拟器;许多不同的 GPU 供应商提供自己的模拟器,将调用转换为桌面 GL。但是,确保代码按预期工作的最佳方法是在实际设备上运行它。

编辑:Android的新模拟器支持OpenGL ES 2.0:http://android-developers.blogspot.ca/2012/04/faster-emulator-with-better-hardware.html

最新更新