我正在学习OpenGL,目的是为Android / iPhone构建OpenGL ES应用程序。
因为我从一开始就学习它,所以我更愿意学习新的规范,而不会触及旧的东西(glBegin等)。不幸的是,当我传递一些教程并实现内容时,事实证明示例与ES 2.0不兼容。例如,those excellent tutorials之后我知道如何实现灯光,我的电脑上有什么作用,但不适用于移动电话(gl_LightSource
是not supported in the latter)。
我想做的是在我的电脑上开发代码,并将 API限制为OpenGL ES支持的命令(例如,在glLight
上抛出错误)。这可能吗?
答案 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:
不支持glBegin或glEnd。改为使用顶点数组和顶点缓冲区对象。
唯一支持的栅格化基元是点,线和三角形。不支持四边形。
没有多项式函数评估阶段。
您不能将片段块直接发送到单个片段操作。
- 醇>
不支持显示列表。
此外,以下OpenGL功能不存在 OpenGL ES 2.0:
不支持固定功能图形管道。您必须使用自己的顶点和片段着色器程序。
不支持查看glFrustumf等转换。您必须计算自己的变换矩阵,将其传递给顶点 着色器作为一个统一变量,并执行矩阵乘法 着色器。
- 醇>
不支持glVertexPointer和glNormalPointer等专用函数。使用glVertexAttribPointer 代替。
您始终可以参考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