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

时间:2012-04-09 12:34:13

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

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

因为我从一开始就学习它,所以我更愿意学习新的规范,而不会触及旧的东西(glBegin等)。不幸的是,当我传递一些教程并实现内容时,事实证明示例与ES 2.0不兼容。例如,those excellent tutorials之后我知道如何实现灯光,我的电脑上有什么作用,但不适用于移动电话(gl_LightSourcenot supported in the latter)。

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

4 个答案:

答案 0 :(得分: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. 没有多项式函数评估阶段。

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

  8.   
  9. 不支持显示列表。

  10.         

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

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

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

    4.   
    5. 不支持glVertexPointer和glNormalPointer等专用函数。使用glVertexAttribPointer   代替。

    6.   

您始终可以参考the OpenGL ES specification并查看是否支持功能/功能。

答案 1 :(得分: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的方法。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分: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