vault backup: 2024-02-06 13:07:47
This commit is contained in:
parent
bd415a90d1
commit
35c941f86f
@ -141,23 +141,56 @@ private:
|
||||
LAYOUT_FIELD(TIndexedPtr<FShaderType>, Type);
|
||||
// 顶点工厂类型.
|
||||
LAYOUT_FIELD(TIndexedPtr<FVertexFactoryType>, VFType);
|
||||
|
||||
/** Target platform and frequency. */
|
||||
// 目标平台和着色频率(frequency).
|
||||
LAYOUT_FIELD(FShaderTarget, Target);
|
||||
|
||||
/** Index of this shader within the FShaderMapResource */
|
||||
// 在FShaderMapResource的shader索引.
|
||||
LAYOUT_FIELD(int32, ResourceIndex);
|
||||
|
||||
/** The number of instructions the shader takes to execute. */
|
||||
// shader指令数.
|
||||
LAYOUT_FIELD(uint32, NumInstructions);
|
||||
|
||||
/** Truncated version of OutputHash, intended for sorting. Not suitable for unique shader identification. */
|
||||
LAYOUT_FIELD(uint32, SortKey);
|
||||
|
||||
/** Number of texture samplers the shader uses. */
|
||||
// 纹理采样器数量.
|
||||
LAYOUT_FIELD_EDITORONLY(uint32, NumTextureSamplers);
|
||||
|
||||
/** Size of shader's compiled code */
|
||||
// shader代码尺寸.
|
||||
LAYOUT_FIELD_EDITORONLY(uint32, CodeSize);
|
||||
};
|
||||
```
|
||||
以上可知,FShader存储着Shader关联的绑定参数、顶点工厂、编译后的各类资源等数据,并提供了编译器修改和检测接口,还有各类数据获取接口。
|
||||
|
||||
FShader实际上是个基础父类,它的子类有:
|
||||
- **FGlobalShader**:全局着色器,它的子类在内存中只有唯一的实例,常用于屏幕方块绘制、后处理等。相比父类FShader,增加了SetParameters设置视图统一缓冲的接口。FGlobalShader包含了后处理、光照、工具类、可视化、地形、虚拟纹理等方面的Shader代码,可以是VS、PS、CS,但CS必然是FGlobalShader的子类
|
||||
- **FMaterialShader**:材质着色器,由FMaterialShaderType指定的材质引用的着色器,是材质蓝图在实例化后的一个shader子集。FMaterialShader主要包含了模型、专用Pass、体素化等方面的Shader代码,可以是VS、PS、GS等,但不会有CS。
|
||||
|
||||
## Shader Parameter
|
||||
位于`Engine\Source\Runtime\RenderCore\Public\ShaderParameters.h`。
|
||||
- FShaderParameter:着色器的寄存器绑定参数, 它的类型可以是float1/2/3/4,数组等。
|
||||
- FShaderResourceParameter:着色器资源绑定(纹理或采样器)。
|
||||
- FRWShaderParameter:绑定了UAV或SRV资源的类型。
|
||||
- FShaderUniformBufferParameter:着色器统一缓冲参数。
|
||||
|
||||
## Uniform Buffer
|
||||
位于`Engine\Source\Runtime\RHI\Public\RHIResources.h`。
|
||||
UE的Uniform Buffer涉及了几个核心的概念,最底层的是RHI层的FRHIUniformBuffer,封装了各种图形API的统一缓冲区(也叫Constant Buffer)。
|
||||
```c++
|
||||
class FRHIUniformBuffer : public FRHIResource
|
||||
{
|
||||
public:
|
||||
// 构造函数.
|
||||
FRHIUniformBuffer(const FRHIUniformBufferLayout& InLayout);
|
||||
|
||||
// 引用计数操作.
|
||||
uint32 AddRef() const;
|
||||
uint32 Release() const;
|
||||
|
||||
// 数据获取接口.
|
||||
uint32 GetSize() const;
|
||||
const FRHIUniformBufferLayout& GetLayout() const;
|
||||
bool IsGlobal() const;
|
||||
|
||||
private:
|
||||
// RHI Uniform Buffer的布局.
|
||||
const FRHIUniformBufferLayout* Layout;
|
||||
// 缓冲区尺寸.
|
||||
uint32 LayoutConstantBufferSize;
|
||||
};
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user