1. khronos 简介

khronos 是由 170 家企业组成的开源、非盈利的成员驱动型组织,主要负责开发、发布和维护免税版权标准,其范围涉及到 3D图像学、虚拟现实、增强现实、并行计算、视觉加速和机器学习。该组织制定的标准及其相关的适应性测试提高了软件和中间软件的创作,而且加速了动态多媒体的在跨平台设备上的回放。
khronos 是 OpenGL ES 标准的制定者、维护者,有什么疑问直接去官方找资料即可:
https://www.khronos.org/registry/OpenGL/specs
2. OpenGL 和 OpenGL ES
OpenGL ES 是 OpenGL 的子集,专门为嵌入式设备而设计,如手机端,另外 Play Station 也有使用;
嵌入式设备的因为诸多限制,比如能耗,所以 GPU 和 CPU 性能一般不如 PC 端,所以 OpenGL ES 的设计相对 OpenGL 就很精简、高效,比较典型的区别如下:
- 在OpenGL ES的世界里,没有四边形、多边形,无论多复杂的图形都是由点、线和三角形组成的;
- 没有glBegin/glEnd/glVertex,只能用glDrawArrays/glDraw;
- 没有double型数据类型,但加入了高性能的定点小数数据类型;
- 没有实时将非压缩图片数据转成压缩贴图(纹理)的功能,程序必须直接提供压缩好的贴图;
- 删除了很多功能:显示列表、求值器、索引色模式等等;
- glDrawArrays等函数中数据必须紧密排列,即间隔为 0;
7.各种数据的堆栈深度较低;
3. iOS 中 OpenGL ES 的版本
在学习时,一般参考 OpenGL 的官方教程:
https://learnopengl-cn.github.io/
但是需要注意的是,OpenGL 和 OpenGL ES 还是有很大的不同,比如 #version
的声明,所以一些图形学的概念可以参考 openGL 中的教程,但是涉及到具体的 Api 差异或者版本问题,最好直接看 OpenGL ES 的官方文档;
这里是 openGL 和 openGL ES 相关文档的归档:https://www.khronos.org/registry/OpenGL/specs/es/

3. version
按照 LearnOpenGL 中的示例代码,编译着色器时如果使用到了#version 330 core<