自绘组件库思考
如果先不管窗口管理的具体逻辑,我们先聚焦于绘制这个任务上面来。
flowchart TB
subgraph ui["主线程 / 其它线程"]
App[应用 / Widget 等]
end
subgraph rt["RenderThread 专用线程"]
Q[任务队列 Post / InvokeSync]
RC[RenderContext: EGL + ANGLE + GrDirectContext]
RS[RenderSurface: EGLSurface + SkSurface]
Draw[SkCanvas 上画 Shapes / Rectangle]
end
App -->|"Post(任务) 或 CreateContext/CreateSurface"| Q
Q --> RC
RC --> RS
RS --> Draw
渲染线程是一个单线程+队列的形式,所有 EGL / 当前上下文 / 创建 RenderContext·RenderSurface 都应在这条线程上完成(或通过 Post / InvokeSync 投递过去)。
并且,我们需要一个和GPU绘画的资源,那就是EGL,经 ANGLE,Windows 上走 D3D11)+ Skia 的 GrDirectContext。
GLFW的窗口句柄绑定到EGL的surface后,使用sksurface-》 skcanvas,负责一帧的绘制。