1

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

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

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

4

4 回答 4

2

假设您使用 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调用将失败。

于 2012-04-11T09:56:34.523 回答
2

如果您想学习 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 的方式。

于 2012-04-09T14:53:32.593 回答
2

Mali GPU OpenGL ES 应用程序开发指南中所述:

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 ES 2.0 中不存在以下 OpenGL 功能:

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

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

  3. 不支持 glVertexPointer 和 glNormalPointer 等专用函数。请改用 glVertexAttribPointer。

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

于 2012-04-09T14:19:01.577 回答
1

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

于 2012-04-09T12:53:59.963 回答