<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>图形渲染 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93/</link><description>Recent content in 图形渲染 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 08 Jul 2026 19:00:15 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%9B%BE%E5%BD%A2%E6%B8%B2%E6%9F%93/index.xml" rel="self" type="application/rss+xml"/><item><title>Cocos 引擎 iOS 渲染管线深度解析：从 CADisplayLink 到屏幕呈现</title><link>https://amatsuzero.github.io/LastStand/posts/cocosengine-ios-rendering/</link><pubDate>Wed, 08 Jul 2026 19:00:15 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/cocosengine-ios-rendering/</guid><description>&lt;h1 id="cocos-引擎-ios-渲染管线深度解析从-cadisplaylink-到屏幕呈现"&gt;Cocos 引擎 iOS 渲染管线深度解析：从 CADisplayLink 到屏幕呈现&lt;/h1&gt;
&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;在移动端图形开发中，理解渲染管线的底层实现是走向高级工程师的必经之路。Cocos Creator 作为主流的跨平台游戏引擎，其 iOS Metal 后端的渲染实现采用了现代化的 FrameGraph 架构，结合脏状态追踪、资源池化等优化手段，是一份极佳的学习样本。&lt;/p&gt;
&lt;p&gt;本文基于对 Cocos 引擎 &lt;code&gt;gfx-metal&lt;/code&gt; 模块的源码分析，梳理从 &lt;code&gt;CADisplayLink&lt;/code&gt; 帧回调触发到最终 GPU 呈现的完整渲染链路，并深入解读各阶段的关键实现细节。&lt;/p&gt;
&lt;h2 id="整体架构概览"&gt;整体架构概览&lt;/h2&gt;
&lt;p&gt;在深入时序之前,先理清核心模块的职责分工：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模块&lt;/th&gt;
&lt;th&gt;文件&lt;/th&gt;
&lt;th&gt;职责&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IOSPlatform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOSPlatform.mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;iOS 平台入口，持有 &lt;code&gt;CADisplayLink&lt;/code&gt; 驱动渲染循环&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RenderPipeline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RenderPipeline.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管线编排器，遍历相机并调度 Flow/Stage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ForwardFlow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ForwardFlow.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;前向渲染流程，决定渲染策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ForwardStage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ForwardStage.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;前向渲染阶段，收集渲染对象并填充 UBO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RenderQueue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RenderQueue.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;渲染队列，对可渲染对象排序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FrameGraph&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FrameGraph.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;帧图调度器，负责 Pass 编译、排序、合并和执行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CCMTLDevice&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MTLDevice.mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Metal 设备抽象，管理 Swapchain 和 Queue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CCMTLSwapchain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MTLSwapchain.mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;交换链，管理 &lt;code&gt;CAMetalLayer&lt;/code&gt; 和 drawable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CCMTLCommandBuffer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MTLCommandBuffer.mm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;命令缓冲区封装，核心渲染编码入口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CCMTLRenderCommandEncoder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MTLRenderCommandEncoder.h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;渲染编码器，含脏状态追踪优化&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="完整渲染时序图"&gt;完整渲染时序图&lt;/h2&gt;
&lt;p&gt;以下 Mermaid 时序图展示了从屏幕刷新信号到最终呈现的五个阶段：&lt;/p&gt;</description></item></channel></rss>