Slate的渲染流程

在遍历所有Window及所包含的所有非Collapse子控件,需要渲染的内容由子控件以FSlateDrawElement的数据结构在WindowElementList中。随后WindowElementList中FSlateDrawElement数据会被转换成方便硬件识别的数据FElementBatcher。最后,新开线程,进行渲染。

获取WindowElementList

 

 

RHI: Rending Hardware Interface

 

DrawWindows_Private Phase 1:

ElementList数据被转换成ElementBatcher数据

 

DrawWindows_Private Phase 2:

开启渲染线程

 

FSlateDrawElement

在游戏线程(GamingThread)中,叶控件(SLeafWidget)和部分的复合控件(SCompoundWidget)会向WindowElementList (SlateApplication以参数&OutDrawElements的形式传入子控件)中添加FSlateDrawElement类型的数据。

基本图片控件SImage的处理

 

基本文字控件STextBlock 的处理

 

自定义雷达图 SRadarChart的部分处理

 

 

其中包含的主要属性:

// 结构体,里面包含渲染资源&着色器等资源类型的信息

    FSlateDataPayload DataPayload;

    // 位置大小等几何信息

    FSlateRenderTransform RenderTransform;

    FTransform2D LayoutToRenderTransform;

    FVector2D Position;

    FVector2D LocalSize;

    float Scale;

    // 渲染层级

    uint32 Layer;

    // 位掩码,渲染时应用于该元素的效果

    ESlateDrawEffect DrawEffects;

    // 枚举,该元素的类型,上图中,STextSlateSImage的就是ET_Box类型

    // SRadarChart中的是ET_Line类型

    EElementType ElementType;

 

 

FElementBatcher

FElementBatcher的主要属性是FSlateBatchData* BatchData, 这个指针的实体存在于传入的WindowElementList中。

FSlateBatchData包含了元素渲染需要的 Triangle vertex index 列表信息

FElementBatcher根据当前传入元素的不同类型类型进行不同的处理。比如,对于Box类型,会做如下图的拆分。

这些9个顶点的vertex列表,和组成QuadTriangle信息的index列表会放入到BatchData中。

有了详细的几何体信息,渲染管线就可以愉快地组装图元、光栅化什么的了。

处于相同绘制层的元素,共用一个BatchData。每个BatchData在渲染时会调用一个DrawCall. Num(DrawLayer) = Num(BatchData) = Num(DrawCall)

 

数据结构与流程图

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值