2012-04-09 59 views
1

我在学习OpenGL,目的是为Android/iPhone构建OpenGL ES应用程序。在普通OpenGL下学习OpenGL ES 2.0 - 编译

因为我从一开始就了解它,所以我宁愿学习新的规范,而不接触旧的东西(glBegin等)。不幸的是,当我通过一些教程和实现东西时,事实证明示例与ES 2.0不兼容。例如,在those excellent tutorials之后,我知道如何实现灯光,在我的电脑上有效,但不适用于手机(gl_LightSourcenot supported in the latter)。

我想怎么办,是发展我的电脑上的代码,限制 API来被下的OpenGL ES支持的命令(例如,抛出错误的glLight)。那可能吗?

+0

那么你的意思是“在PC上开发而将API限制为OpenGL ES”? – Kromster 2012-04-09 12:44:23

+0

@KromStern:是的,说得好 – 2012-04-09 13:40:16

回答

2

假设你正在使用Windows进行开发,那么你可以限制API只是OpenGL ES 2.0的使用Google ANGLE。 ANGLE基本上是封装DirectX,但是您可以通过完全符合标准的OpenGL ES 2.0界面来使用它。

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

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

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. 唯一支持的栅格化图元是点,线和三角形。 Quads不受支持。

  3. 没有多项式函数评估阶段。

  4. 无法将片段块直接发送到单个片段操作。

  5. 不支持显示列表。

此外,以下OpenGL功能不存在于 的OpenGL ES 2.0:

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

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

  3. 不支持glVertexPointer和glNormalPointer等专业功能。改为使用glVertexAttribPointer 。

你总是可以参考the OpenGL ES specification,看看是否被支持的功能/特性。

+0

感谢您列举的差异。这就是要点 - 我想确保我不使用任何不支持的功能*没有*手动引用规范 – 2012-04-09 14:22:48

+0

我不认为有自动化的工具。但是你总是可以使用openGL es头来编译你的代码。 – 2012-04-09 15:20:43

+0

因此,让我直观地看到,只要列出的功能都没有被使用,相同的代码在OpenGL和OpenGL ES上都可以使用? – dtech 2012-12-31 14:04:43

2

如果您想学习OpenGL ES 2并确保您只使用与OpenGL ES 2兼容的调用和技术,请考虑学习WebGL。您可以获得javasript控制台(使用firebug或chrome的内置开发人员工具)的优势,并且在某些环境下(我认为在Windows上使用chrome),您会收到非常有帮助的错误消息每当你做错了什么事。除此之外,您还可以自动访问最多4个WebGL实现,以测试(firefox,chrome,safari,opera),并且您有一套相当不错的测试OpengGL的工具。

这基本上是我怎么一直能学习的OpenGL ES 2.