/** MCPP callback for retrieving file contents. */ static int GetFileContents(void* InUserData, const ANSICHAR* InFilename, const ANSICHAR** OutContents, size_t* OutContentSize) { auto* This = (FSimpleMcppFileLoader*)InUserData; FString Filename = GetRelativeShaderFilename(ANSI_TO_TCHAR(InFilename)); FShaderContents* CachedContents = This->CachedFileContents.Find(Filename); if (!CachedContents) { FString FileContents; FFileHelper::LoadFileToString(FileContents, *Filename); if (FileContents.Len() > 0) { CachedContents = &This->CachedFileContents.Add(Filename,StringToArray<ANSICHAR>(*FileContents, FileContents.Len())); } } if (OutContents) { *OutContents = CachedContents ? CachedContents->GetData() : nullptr; } if (OutContentSize) { *OutContentSize = CachedContents ? CachedContents->Num() : 0; } return !!CachedContents; }
/** MCPP callback for retrieving file contents. */ static int GetFileContents(void* InUserData, const ANSICHAR* InFilename, const ANSICHAR** OutContents, size_t* OutContentSize) { FMcppFileLoader* This = (FMcppFileLoader*)InUserData; FString Filename = GetRelativeShaderFilename(ANSI_TO_TCHAR(InFilename)); FShaderContents* CachedContents = This->CachedFileContents.Find(Filename); if (!CachedContents) { FString FileContents; if (This->ShaderInput.Environment.IncludeFileNameToContentsMap.Contains(Filename)) { FileContents = This->ShaderInput.Environment.IncludeFileNameToContentsMap.FindRef(Filename); } else { LoadShaderSourceFile(*Filename,FileContents); } if (FileContents.Len() > 0) { CachedContents = &This->CachedFileContents.Add(Filename,StringToArray<ANSICHAR>(*FileContents, FileContents.Len())); } } if (OutContents) { *OutContents = CachedContents ? CachedContents->GetTypedData() : NULL; } if (OutContentSize) { *OutContentSize = CachedContents ? CachedContents->Num() : 0; } return !!CachedContents; }