2024-10-18 07:23:31
1. 设备支持
OpenGL ES 1.x 适应了初代 iPhone 和 Android,而 OpenGL ES 2.0 扩展到 Android 2.2 及后续版本,包括iPad、iPhone 3GS及后续,以及iPod Touch 3代以上。OpenGL ES 3.0 从Android 4.3开始支持,涵盖iPhone 5s、iPad Air和mini 2及后续型号。
2. 兼容性与版本声明
OpenGL ES 3.0向下兼容2.0,意味着2.0程序可无缝运行在3.0环境中。在3.0中,顶点和片段着色器的编译要求在第一行明确版本声明,而在2.0中,这并非强制,通常默认为 #version 100 es。
3. 着色器与精度
3.0中,顶点和片段着色器的精度声明更为明确。3.0还引入了'in', 'out', 'inout'关键字,替代了attribute和varying,同时移除gl_FragColor和gl_FragData,允许直接在片段着色器中声明输出字段。
4. 缓冲区对象与VAO
VAO(VAO)在3.0中引入,简化了顶点数据的管理。VBO(顶点缓冲区对象)在2.0中就存在,3.0要求在绘制前绑定VAO,否则会导致错误。3.0中不再支持直接传入数组,顶点数据需先存入VBO。
5. PBO支持
PBO(像素缓冲对象)在OpenGL 3.0中引入,用于高效地在CPU和GPU之间传输数据。这比glReadPixels的效率更高,尤其在双PBO交换读取时。
6. 总结与资源
以上是OpenGL ES 2.0与3.0的主要区别。了解更多详情请参考猿说编程发布的相关文章。