vault backup: 2024-08-15 17:28:55
This commit is contained in:
parent
164de1e34e
commit
beb8ab2c0c
@ -33,3 +33,45 @@ for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
|
|||||||
Scene->GPUScene.DebugRender(GraphBuilder, *Scene, GetSceneUniforms(), View);
|
Scene->GPUScene.DebugRender(GraphBuilder, *Scene, GetSceneUniforms(), View);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## GPUScene数据更新
|
||||||
|
```c++
|
||||||
|
// 函数调用关系
|
||||||
|
void FDeferredShadingSceneRenderer::Render(FRDGBuilder& GraphBuilder)
|
||||||
|
{
|
||||||
|
void FGPUScene::Update(FRDGBuilder& GraphBuilder, FScene& Scene, FRDGExternalAccessQueue& ExternalAccessQueue)
|
||||||
|
{
|
||||||
|
void FGPUScene::UpdateInternal(FRDGBuilder& GraphBuilder, FScene& Scene, FRDGExternalAccessQueue& ExternalAccessQueue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2、更新PrimitiveData
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
接下来,对标记为dirty的Primitive进行更新,更新逻辑为找到该Primitive在PrimitiveData Buffer里对应offset位置,对其进行更新。使用模板FUploadDataSourceAdapterScenePrimitives调用UploadGeneral()。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
初始化5类Buffer的上传任务TaskContext
|
||||||
|
|
||||||
|
后面代码都是在对这个TaskContext进行初始化,然后启动任务,进行数据的上传。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2.2.1、并行更新Primitive数据,将需要更新的PrimitiveCopy到Upload Buffer里,后续通过ComputeShader进行显存的上传然后更新到目标Buffer里;
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2.2.2、同理InstanceSceneData以及InstancePayloadData数据的处理。
|
||||||
|
|
||||||
|
2.2.3、同理InstanceBVHUploader,LightmapUploader。
|
||||||
|
|
||||||
|
2.2.4、最后都会调用每个Uploader的***End()方法进行GPU显存的更新***。
|
||||||
|
|
||||||
|
总结:数据的上传都一样,将需要更新的数据Copy到对应的UploadBuffer对应的位置里,然后通过对应的ComputeShader进行更新到目标Buffer,在函数FRDGAsyncScatterUploadBuffer::End()里实现,截图:
|
||||||
|
|
||||||
|

|
Loading…
x
Reference in New Issue
Block a user