虚幻4 编译Shader 5
来源:互联网 发布:网络乌托邦的概念 编辑:程序博客网 时间:2024/05/18 20:34
解决上一个文档的问题,哪里相应了Shader编译完成的消息。
Engine 的LOOP里面调用了这个:
if (GShaderCompilingManager){// Process any asynchronous shader compile results that are ready, limit execution timeQUICK_SCOPE_CYCLE_COUNTER(STAT_FEngineLoop_Tick_GShaderCompilingManager);GShaderCompilingManager->ProcessAsyncResults(true, false);}
ShaderCompilingManage管理了一个编译的线程,那个线程是用来和Worker通信的。
/** * Manager of asynchronous and parallel shader compilation. * This class contains an interface to enqueue and retreive asynchronous shader jobs, and manages a FShaderCompileThreadRunnable. */class FShaderCompilingManager{
void FShaderCompilingManager::ProcessAsyncResults(bool bLimitExecutionTime, bool bBlockOnGlobalShaderCompletion){if (bAllowAsynchronousShaderCompiling){Thread->CheckHealth();{const double StartTime = FPlatformTime::Seconds();// Block on global shaders before checking for shader maps to finalize// So if we block on global shaders for a long time, we will get a chance to finalize all the non-global shader maps completed during that time.if (bBlockOnGlobalShaderCompletion){TArray<int32> ShaderMapId;ShaderMapId.Add(GlobalShaderMapId);// Block until the global shader map jobs are completeGShaderCompilingManager->BlockOnShaderMapCompletion(ShaderMapId, PendingFinalizeShaderMaps);}int32 NumCompilingShaderMaps = 0;{// Lock CompileQueueSection so we can access the input and output queuesFScopeLock Lock(&CompileQueueSection);if (!bBlockOnGlobalShaderCompletion){bCompilingDuringGame = true;}TArray<int32> ShaderMapsToRemove;for (TMap<int32, FShaderMapCompileResults>::TIterator It(ShaderMapJobs); It; ++It){const FShaderMapCompileResults& Results = It.Value();if (GetNumTotalJobs(Results.FinishedJobs) == Results.NumJobsQueued){PendingFinalizeShaderMaps.Add(It.Key(), FShaderMapFinalizeResults(Results));ShaderMapsToRemove.Add(It.Key());}}for (int32 RemoveIndex = 0; RemoveIndex < ShaderMapsToRemove.Num(); RemoveIndex++){ShaderMapJobs.Remove(ShaderMapsToRemove[RemoveIndex]);}NumCompilingShaderMaps = ShaderMapJobs.Num();}int32 NumPendingShaderMaps = PendingFinalizeShaderMaps.Num();if (PendingFinalizeShaderMaps.Num() > 0){bool bRetry = false;do {bRetry = HandlePotentialRetryOnError(PendingFinalizeShaderMaps);} while (bRetry);const float TimeBudget = bLimitExecutionTime ? ProcessGameThreadTargetTime : FLT_MAX;ProcessCompiledShaderMaps(PendingFinalizeShaderMaps, TimeBudget);check(bLimitExecutionTime || PendingFinalizeShaderMaps.Num() == 0);}if (bBlockOnGlobalShaderCompletion){check(PendingFinalizeShaderMaps.Num() == 0);if (NumPendingShaderMaps - PendingFinalizeShaderMaps.Num() > 0){UE_LOG(LogShaders, Warning, TEXT("Blocking ProcessAsyncResults for %.1fs, processed %u shader maps, %u being compiled"), (float)(FPlatformTime::Seconds() - StartTime),NumPendingShaderMaps - PendingFinalizeShaderMaps.Num(), NumCompilingShaderMaps);}}else if (NumPendingShaderMaps - PendingFinalizeShaderMaps.Num() > 0){UE_LOG(LogShaders, Log, TEXT("Completed %u async shader maps, %u more pending, %u being compiled"), NumPendingShaderMaps - PendingFinalizeShaderMaps.Num(), PendingFinalizeShaderMaps.Num(),NumCompilingShaderMaps);}}}else{check(CompileQueue.Num() == 0);}}
中间可以看到ProcessCompiledShaderMaps,明显是编译完成Shader后会执行的代码。
0 0
- 虚幻4 编译Shader 5
- 虚幻4 shader编译4
- 虚幻4 Shader的编译3
- 虚幻4 shader的使用
- 虚幻4shader 初步研究
- 虚幻4 dump 材质编辑器编译出来的 shader的hlsl文件
- 虚幻4 材质的编译。
- 虚幻4 改变默认UI Disable的Shader
- 虚幻4 材质的编译2 真正的编译过程
- UE4 编译虚幻引擎
- 虚幻4 使用脚本编译自己的工程
- 编译shader
- 虚幻4引擎
- 虚幻4引擎
- 虚幻4的Style
- 虚幻4 Editor 编程
- 虚幻4 蒙太奇
- 虚幻4编码规范
- arcgis webappbuilder 中定义map对象代码片段
- assertbundle shader丢失
- myaql安装
- 第一个暗时间------看新闻,刷知乎微博的时间
- 字符串转换命令:tr,col,join,paste,expand
- 虚幻4 编译Shader 5
- springmvc中的RequestBody自动注入List, Map, String数据结构的数据
- 炫酷的底部菜单栏BottomBar
- jar包问题
- 堆排序问题.
- keras系列-安装和大体结构
- apache2.4+tomcat7 单机垂直集群 64位 windows操作系统
- 以形式逻辑的方法构建方法论
- android视频播放框架Vitamio