问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从蓝图载入一张纹理开始理解UE4的资源加载(九)——ProcessImportsAndExp...

发布网友 发布时间:2024-10-09 15:19

我来回答

1个回答

热心网友 时间:2024-10-09 23:26

在这一阶段,主要任务涉及资源的导入与导出,具体流程如下:

首先,需处理的是待开始预缓存请求的数组。引擎中设定了GMaxPrecacheRequestsInFlight为2,意味着最多同时执行2个预缓存请求。

接着,需关注ExportsThatCanHaveIOStarted数组,此数组中记录了需开始IO操作的ExportIndex,且Export需完成Create后方能加入此数组。需要注意的是,此数组为堆排序结构,按ExportIndex排序。

在StartPrecacheRequest方法中,依次处理可进行IO操作的Export。过程中,通过bReady变量标记加载状态。若Export含有NeedLoad标记,则无需加载。然后判断是否已有所需Block,否则检查Block请求是否已发出。若任一环节执行过,则删除StartIO节点,通过依赖关系添加Export的Serialized节点。

若以上流程均未执行,则创建新的请求,该请求包含IO所需偏移和大小参数,内部关联相关Export。接着,检查并合并可一起请求IO的Export,以减少IO请求次数,条件是请求大小小于1MB且Export跨度不超过20个。

对于待IO的Export,若位于Block中则视为加载完成,直接删除并结束处理。若两个Export之间距离小于48KB且总请求大小未超过限制,说明可合并请求,扩大请求范围。

创建异步读取请求,回调为FPrecacheCallbackHandler::RequestComplete方法,添加到Incoming中。发起请求后,维护Export与PrecacheRequest的映射表与哈希表,并注册到PrecacheHandler中。

在LinkImport阶段,处理ImportsThatAreNowCreated数组中的Import,需Link的Import在此阶段添加。Import->XObject不为空时,LinkImport方法执行简单过程。处理结束时删除Import_Create节点并触发,最终将Import添加到ImportsThatAreNowSerialized数组中。

在RemoveNode阶段,处理上个工作添加的数组元素,实质上是删除Import_Serialize节点。值得注意的是,需遵循EventLoadGraph中提到的隐式依赖。

EventDrivenCreateExport阶段处理ExpsortsThatCanBeCreated数组中的Export,此数组在SetupExports阶段添加。关键步骤是判断Export类型,并通过Package尝试内存中加载对应Object。若未加载,则生成模板并返回。随后创建Export.Object,检查LoadClass对应的CDO是否需加载并创建,然后调用StaticConstructObject_Internal方法创建Object。创建过程中在内存中寻找对象,若未找到则创建新对象并原地构造。创建后通过模板进行初始化。最后,设置Linker给Export.Object,删除Export的Create节点,触发其StartIO节点。

在EventDrivenSerializeExport阶段处理ExportsThatCanBeSerialized数组中的Export,由MakeNextPrecacheRequestCurrent方法添加。完成序列化后删除节点。若所有Import和Export序列化完毕,则触发Package_ExportsSerialized节点,进入下一阶段。

IO完成回调中,将Precache加入到Incoming中,由FAsyncLoadingThread::TickAsyncThread处理,添加到ReadyPrecacheRequests数组中。在ProcessImportsAndExports阶段处理,取出IAsyncReadRequest,找到对应的FExportIORequest。设置CurrentBlockOffset与CurrentBlockBytes。主要工作是将Block.Processed内容复制到FAsyncArchive::Memory中,同时表明哪些Export数据已载入,移除请求加载的Export对应的StartIO节点。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么是Medical Literature Analysis and Retrieval System (NLM)的缩 ... 医学工作者的因特网内容简介 2002年的一篇文章英文摘要被《医学文献联机数据库》(MEDLINE)收录,是否... 医学器具medline啥意思 民国市与县的关系是怎样的,市与县分别又是什么? 历代兵制中国民国兵制 冰箱运行时有水流声怎么回事? ud牛郎眼影真假判断 爆闪/没有平替❌ 牛郎眼影真假鉴别方法 鉴别❗️衰败城市牛郎眼影真假,粉质肉眼差距 ...你会买苹果、三星、华为、小米还是其他什么品牌的手机?_百度... 桌面文字蓝框怎么去除?如图,用了一下4种方法都没用!!! ...昨天还好好的 所有桌面菜单都有蓝框 一刷新还卡频 怎么回事 我电脑屏幕上的所有图标都变成蓝色的了,就象平时鼠标单击的样子,怎样调... 帕累托社会学理论 社会分层西方理论 口腔护理证算医疗背景证书吗 口腔护理专业考什么证 联通网线客服电是多少 有哪位大神知道联通网线的报修电话是多少啊 手机能取消锁屏的紧急呼叫吗? 请问早晨从朝阳区常营到三里屯乘坐758公交车,爱堵车吗?大概8点左右... ...568平方米=()公顷42米=()千米5千米60米=()千米 3吨500千克=()吨... 大家能给我推荐几首好的经典的老歌吗?粤语的或国语都行. 人间大爱的歌词是什么? 世界上什么歌最好听? 推荐几首好听的歌给大家 我的电脑装了影驰显卡后在网页爱奇艺看电视会卡屏,什么回事_百度... 用刮痧板刮腿可以瘦吗 ...请问看多大的电视合适,我准备买长虹等离子的,谢谢 鞍安的《梦里》 歌词 学做煎饼果子学费多少钱 5000毫升相当于多少升? 突厥和哪个朝代 唐与西域诸国战争背景 痔疮传统手术多久恢复 想买一款2000元左右的手机,华为荣耀好还是小米好?如果有更好的求推 ... 我想买1000-2000元的手机,买华为好还是小米啊?小米哪一款好 憨豆先生的头发 ...i3 3220 集成显卡,相当于HD多少的独显? 一般最多能玩些什么游戏... ...路由器分成4个电脑上网,怎样连接共用一台打印机 四台电脑用的是一条网线,台式上插着网线三台笔记本用的是无线网,请问在... ...我需要点击按钮保存一张图片,测试中pc端是可以的, 移动端保存... 一文搞懂,vue中pc端与移动端适配解决方案(亲测有效) 黄风怪是什么怪? 为什么说买小米不如买华为的手机呢? 小米和华为手机,谁更值得买? 二个月泰迪体重标准 2个月的小泰迪是怎么样的? 两个月的泰迪体重才半斤,那是什么体 焦糖瓜子怎么做口感好?