Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Latest commit

 

History

History
36 lines (25 loc) · 1.62 KB

1-2.OpenGLStateMachine.md

File metadata and controls

36 lines (25 loc) · 1.62 KB

OpenGL状态机

OpenGL的设计思想是状态机,所有OpenGL调用均可以看作是对某个远端的指令,包括数据发送、状态变更。

在Android上,这个远端即是SurfaceFlinger(中vendor对OpenGL的实现)。

OpenGL变量列表

Android设计思想

  • Bitmap
    • 图片信息,存储在内存中
  • Paint
    • 画笔对象,保存这颜色、线条类型等绘制参数
  • Canvas
    • 画布,用于对Bitmap/View的绘制操作进行抽象

OpenGL思想

  • 纹理
    • OpenGL中的图片信息,存储在OpenGL Host中,本地保存句柄(Android中是int)
  • 状态
    • OpenGL绘制参数,包括shader uniform参数、纹理参数、深度检测方式等,存储在OpenGL Host中
  • OpenGL上下文
    • OpenGL绘制上下文,在Android中是EGLContext,对GLSurfaceView或离屏渲染进行抽象

Android/OpenGL差异

  • Android采用面向对象的设计方式,Bitmap/Paint/Canvas都是类,Bitmap/Paint与Canvas没有绑定关系,职责区分明显
  • OpenGL基于状态机的设计思想,将OpenGL Host与本地(即我们的app)进行隔离,所有的操作都是在传输数据或者像按开关一样进行远程操纵,纹理、shader等与上下文有绑定关系

OpenGL状态机设计优缺点

  • 良好的可扩展性,远端状态通过唯一id进行表示,便于扩展,新增feature时不需要对api进行改动
  • 可读性好,所有的状态变更都清晰简洁的展现给开发者
  • 性能稍差,状态在上下文中相当于全局变量,无法进行并发调用,因此才有了vulkan