1、图像API
- OpenGL (OpenGraphics Library)是一个跨编程语言,跨平台的编程图形程序接口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。
- OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的API结构
- DirectX 是由很多API组成的,DirectX 并不是一个单纯的图像API。最重要的是DirectX是属于Windows上一个多媒体处理框架。并不支持Windows以外的平台,所以不是跨平台框架,按照性质分类,可以分为四大部分,显示部分,声音部分,输入部分和网络部分。
- Metal:Apple 为游戏开发者推出了新的平台技术 Metal,改技术能够为 3D 图像提高 10 倍的渲染性能。Metal 是 Apple 为了解决 3D 渲染而推出的框架
2、OpenGL 上下文(Context)
- 在应用程序调用任何OpenGL的指令之前,需要安排首先创建一个OpenGL 的上下文。这个上下文是一个非常庞大的状态机,保存了OpenGL 中的各种状态,这也是OpenlGL指令执行的基础
- OpenGL 的函数不管在哪个语言中,都是类似C语言一样的面向过程的函数,本质上都是对OpenGL 上下文这个庞大的状态机中的某个状态或者对象进行操作,当然你得首先把这个对象设置为当前对象。因此,通过对OpenGL指令的封装,是可以将OpenGL的相关调用封装成为一个面向对象的图像API的
- 由于OpenGL 上下文是一个巨大的状态机,切换上下文往往会产生较大的开销,但是不同的绘制模块,可能需要使用完全独立的状态管理。因此,可以在应用程序中分别创建多个不同的上下文,在不同线程中使用不同的上下文,上下文之间共享纹理、缓冲区等资源。这样的方案,会比反复切换上下文,或者大量修改渲染状态,更加合理高效的。
核心要点 - Open GL 指令执行的基础,是一个非常庞大的状态机。
- Open GL 类型C语言一样面向过程,但是可以通过Open GL指令的封装,是可以将相关调用封装成为一个面向对象的图像API。
- OpenGL 切换上下文会产生较大的开销。根据业务需求可创建多个上下文,但是上下文之间会共享纹理、缓冲区等资源。
3、OpenGL状态机
- 状态机是理论上的一种机器,状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动