| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> UE4-渲染时初始化ShaderResource的Shader流程 -> 正文阅读 |
|
[游戏开发]UE4-渲染时初始化ShaderResource的Shader流程 |
文章为本人学习虚幻4引擎源码所整理笔记,如有纰漏欢迎指正交流。
1.渲染时当模型被添加到场景中时,StaticMesh最终会被添加到Scene的DrawList中,DrawList调用AddMesh()在向DrawList添加Mesh后,在内联函数文件(.inl)AddMesh()方法中:
根据传入的DrawingPolicyType先在DrawingPolicySet查找是否已存在该DrawingPolicy类型的策略,即该DrawingPolicyType对应的DrawingPolicyLink;如果不存在,需要重新创建一个DrawingPolicyLink,并按照渲染顺序添加到DrawingPolicy列表(OrderedDrawingPolicies)中;
之后,通过Mesh和DrawingPolicyLink创建一个Element,将Element添加到该Mesh对应的MeshBatch的DrawListLinks中,供后续渲染使用。?
(StaticMeshDrawList
.inl
)
2.在FDrawingPolicyLink的构造函数中,会对其成员变量BoundShaderStateInput初始化:
(StaticMeshDrawList
.h
)
? 3.在GetBoundShaderStateInput()方法中,VertexShader会执行GetVertexShader()方法,并赋值给BoundShaderStateInput:(MobileBasePassRendering.h) VertexShader为MobileBasePassDrawingPolicy成员变量: 最后赋值给BoundShaderStateInput成员变量VertexShaderRHI: 4.继续进入VertexShader执行的GetVertexShader()方法,会从Shader的Resource中获取VertexShader:(Shader.h)
5.此时会初始化ShaderResource:
(Shader
.cpp
)
?? ??? ??? ??? ??? ??? ??? ??
(RenderResource
.cpp
)
?
(RenderResource
.cpp
)
6.最终会调用FShaderResource::InitRHI()方法,在该方法中,通过ShaderCache对ShaderResource的VertexShader进行初始化:?(Shader.cpp)
VertexShader为ShaderResource成员变量:?
7.进一步会通过ShaderCodeLibrary来创建ShaderResource的VertexShader:(ShaderCache.cpp) ?
(ShaderCodeLibrary
.cpp
)
?
8.之后会调用RHICommandList的RHICreateVertexShader()方法:
(RHICommandList
.h
)
9.最后会调到各 RHI模块( D3D11RHI、 D3D12RHI、 MetalRHI、 OpenGLGLDrv)的RHICreateVertexShader()API:
比如
D3D11RHI:
这里就把通过usf生成的Code源码与Shader关联:
(D3D11Shaders
.cpp
)
比如OpenGL:
(OpenGLShaders
.cpp
)
以上调用堆栈:
? 以上。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 16:44:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |