Advanced debugging of Editor crashes? 4.14.3 Gameworks

Hello dear strangers,

I’ve managed to bring Nvidia Flex and VXGI under the same roof that is 4.14.3 , my issue is that i have an editor crash while loading one of the test map of Flex (flexsurface).

I would like to figure out what the issue is. If anyone could point me in the right direction or even help me solve this, it would be highly appreciated !

The crash reporter:
[SPOILER]Access violation - code c0000005 (first/second chance not available)

UE4Editor_Engine!FFlexFluidSurfaceVertexFactoryShaderParametersPS::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\engine\private\physicsengine\flexfluidsurfacecomponent.cpp:147]
UE4Editor_Renderer!FMeshMaterialShader::SetMesh<FRHIPixelShader * __ptr64>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\shaderbaseclasses.cpp:453]
UE4Editor_Renderer!TBasePassPixelShaderPolicyParamType<FUniformLightMapPolicyShaderParametersType>::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.inl:73]
UE4Editor_Renderer!TBasePassDrawingPolicy<FUniformLightMapPolicy>::SetMeshRenderState() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1133]
UE4Editor_Renderer!FDrawTranslucentMeshAction::Process<FUniformLightMapPolicy>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:481]
UE4Editor_Renderer!ProcessBasePassMesh<FDrawTranslucentMeshAction>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1507]
UE4Editor_Renderer!FTranslucencyDrawingPolicyFactory::DrawMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:641]
UE4Editor_Renderer!FTranslucentPrimSet::RenderPrimitive() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:856]
UE4Editor_Renderer!FTranslucentPrimSet::DrawPrimitives() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:828]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::DrawAllTranslucencyPasses() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1249]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::RenderTranslucency() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1286]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::Render() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\deferredshadingrenderer.cpp:1325]
UE4Editor_Renderer!RenderViewFamily_RenderThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\scenerendering.cpp:1652]
UE4Editor_Renderer!TGraphTask<FRendererModule::BeginRenderingViewFamily'::21’::EURCMacro_FDrawSceneCommand>::ExecuteTask() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\public\async askgraphinterfaces.h:868]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:932]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:679]
UE4Editor_RenderCore!RenderingThreadMain() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:320]
UE4Editor_RenderCore!FRenderingThread::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:454]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:74][/SPOILER]

Looks like SetMesh is involved.
[SPOILER]


virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override
	{
		FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;
		FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();
		FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;
		bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;
		FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();
		
		if (DepthTexture.IsBound() && Textures)
		{
		**147 **   **FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);**
			SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,
				samplerStateRHI, TextureRHI);
		}

		if (ThicknessTexture.IsBound() && Textures)
		{
			FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);
			SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,
				samplerStateRHI, TextureRHI);
		}

		if (ClipXYAndViewDepthToViewXY.IsBound())
		{
			float FOV = PI / 4.0f;
			float AspectRatio = 1.0f;

			if (View.IsPerspectiveProjection())
			{
				// Derive FOV and aspect ratio from the perspective projection matrix
				FOV = FMath::Atan(1.0f / View.ViewMatrices.GetProjectionMatrix().M[0][0]);
				AspectRatio = View.ViewMatrices.GetProjectionMatrix().M[1][1] / View.ViewMatrices.GetProjectionMatrix().M[0][0];
			}

			FVector2D VecMult(FMath::Tan(FOV*0.5f)*AspectRatio, FMath::Tan(FOV*0.5f));

			SetShaderValue(RHICmdList, PixelShaderRHI, ClipXYAndViewDepthToViewXY, VecMult);
		}

		if (InvTexResScale.IsBound())
		{
			SetShaderValue(RHICmdList, PixelShaderRHI, InvTexResScale, 1.0f / SurfaceVF->Proxy->TexResScale);
		}
	}

[/SPOILER]

The CrashContext.runtime should highlight the issue, haven’t fully dived in yet. If anyone wanna help, you’ll be more than welcome :rolleyes:
[SPOILER]

<?xml version="1.0" encoding="UTF-8"?>
<FGenericCrashContext>
	<RuntimeProperties>
		<CrashVersion>3</CrashVersion>
		<CrashGUID>UE4CC-Windows-33BC1D4D45E5D43ED8F2C69F769BC4CD_0000</CrashGUID>
		<ProcessId>16124</ProcessId>
		<IsInternalBuild>false</IsInternalBuild>
		<IsPerforceBuild>false</IsPerforceBuild>
		<IsSourceDistribution>true</IsSourceDistribution>
		<IsEnsure>false</IsEnsure>
		<IsAssert>false</IsAssert>
		<CrashType>Crash</CrashType>
		<SecondsSinceStart>67</SecondsSinceStart>
		<GameName>UE4-FlexProject</GameName>
		<ExecutableName>UE4Editor</ExecutableName>
		<BuildConfiguration>Development</BuildConfiguration>
		<GameSessionID />
		<PlatformName>Windows</PlatformName>
		<PlatformNameIni>Windows</PlatformNameIni>
		<EngineMode>Editor</EngineMode>
		<EngineModeEx>Dirty</EngineModeEx>
		<DeploymentName />
		<EngineVersion>4.14.3-0+++UE4+Release-4.14</EngineVersion>
		<CommandLine>"D:/UnrealEngine-VXGI-4.14/FlexProject/FlexProject.uproject"</CommandLine>
		<LanguageLCID>1033</LanguageLCID>
		<AppDefaultLocale>en_US</AppDefaultLocale>
		<BuildVersion>++UE4+Release-4.14-CL-0</BuildVersion>
		<IsUE4Release>false</IsUE4Release>
		<UserName>maxim</UserName>
		<BaseDir>D:/UnrealEngine-VXGI-4.14/Engine/Binaries/Win64/</BaseDir>
		<RootDir>D:/UnrealEngine-VXGI-4.14/</RootDir>
		<MachineId>BBF937AD45C1BE596C13DE80A9AD14BE</MachineId>
		<EpicAccountId>190137c49fa34158a76d0c46eacf0cd6</EpicAccountId>
		<CallStack>UE4Editor_Engine!FFlexFluidSurfaceVertexFactoryShaderParametersPS::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\engine\private\physicsengine\flexfluidsurfacecomponent.cpp:147];<br>UE4Editor_Renderer!FMeshMaterialShader::SetMesh<FRHIPixelShader * __ptr64>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\shaderbaseclasses.cpp:453];<br>UE4Editor_Renderer!TBasePassPixelShaderPolicyParamType<FUniformLightMapPolicyShaderParametersType>::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.inl:73];<br>UE4Editor_Renderer!TBasePassDrawingPolicy<FUniformLightMapPolicy>::SetMeshRenderState() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1133];<br>UE4Editor_Renderer!FDrawTranslucentMeshAction::Process<FUniformLightMapPolicy>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:481];<br>UE4Editor_Renderer!ProcessBasePassMesh<FDrawTranslucentMeshAction>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1507];<br>UE4Editor_Renderer!FTranslucencyDrawingPolicyFactory::DrawMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:641];<br>UE4Editor_Renderer!FTranslucentPrimSet::RenderPrimitive() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:856];<br>UE4Editor_Renderer!FTranslucentPrimSet::DrawPrimitives() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:828];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::DrawAllTranslucencyPasses() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:1249];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::RenderTranslucency() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private	ranslucentrendering.cpp:1286];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::Render() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\deferredshadingrenderer.cpp:1325];<br>UE4Editor_Renderer!RenderViewFamily_RenderThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\scenerendering.cpp:1652];<br>UE4Editor_Renderer!TGraphTask<`FRendererModule::BeginRenderingViewFamily'::`21'::EURCMacro_FDrawSceneCommand>::ExecuteTask() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\public\async	askgraphinterfaces.h:868];<br>UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async	askgraph.cpp:932];<br>UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async	askgraph.cpp:679];<br>UE4Editor_RenderCore!RenderingThreadMain() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:320];<br>UE4Editor_RenderCore!FRenderingThread::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:454];<br>UE4Editor_Core!FRunnableThreadWin::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:74]</CallStack>
		<SourceContext>  132       		Ar << ClipXYAndViewDepthToViewXY;;<br>  133       		Ar << InvTexResScale;;<br>  134       	};<br>  135       ;<br>  136       	virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override;<br>  137       	{;<br>  138       		FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;;<br>  139       		FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();;<br>  140       		FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;;<br>  141       		bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;;<br>  142       		FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();;<br>  143       		;<br>  144       		if (DepthTexture.IsBound() && Textures);<br>  145       		{;<br>  146 ***** 			FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);;<br>  147       			SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,;<br>  148       				samplerStateRHI, TextureRHI);;<br>  149       		};<br>  150       ;<br>  151       		if (ThicknessTexture.IsBound() && Textures);<br>  152       		{;<br>  153       			FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);;<br>  154       			SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,;<br>  155       				samplerStateRHI, TextureRHI);;<br>  156       		};<br>  157       ;<br>  158       		if (ClipXYAndViewDepthToViewXY.IsBound());<br>  159       		{;<br>  160       			float FOV = PI / 4.0f;;<br>  161       			float AspectRatio = 1.0f;</SourceContext>
		<UserDescription>Hello Unreal Engine staff! ;<br>I'm trying to merge some Nvidia build (VXGI and Flex) in 4.14.3, and currently have an editor crash i'm struggling to narrow down.</UserDescription>
		<UserActivityHint />
		<ErrorMessage>Access violation - code c0000005 (first/second chance not available)</ErrorMessage>
		<CrashDumpMode>0</CrashDumpMode>
		<CrashReporterMessage />
		<Misc.NumberOfCores>6</Misc.NumberOfCores>
		<Misc.NumberOfCoresIncludingHyperthreads>12</Misc.NumberOfCoresIncludingHyperthreads>
		<Misc.Is64bitOperatingSystem>1</Misc.Is64bitOperatingSystem>
		<Misc.CPUVendor>GenuineIntel</Misc.CPUVendor>
		<Misc.CPUBrand>Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz</Misc.CPUBrand>
		<Misc.PrimaryGPUBrand>NVIDIA GeForce GTX 980 Ti</Misc.PrimaryGPUBrand>
		<Misc.OSVersionMajor>Windows 10</Misc.OSVersionMajor>
		<Misc.OSVersionMinor />
		<MemoryStats.TotalPhysical>17099374592</MemoryStats.TotalPhysical>
		<MemoryStats.TotalVirtual>140737488224256</MemoryStats.TotalVirtual>
		<MemoryStats.PageSize>65536</MemoryStats.PageSize>
		<MemoryStats.TotalPhysicalGB>16</MemoryStats.TotalPhysicalGB>
		<MemoryStats.AvailablePhysical>0</MemoryStats.AvailablePhysical>
		<MemoryStats.AvailableVirtual>0</MemoryStats.AvailableVirtual>
		<MemoryStats.UsedPhysical>0</MemoryStats.UsedPhysical>
		<MemoryStats.PeakUsedPhysical>0</MemoryStats.PeakUsedPhysical>
		<MemoryStats.UsedVirtual>0</MemoryStats.UsedVirtual>
		<MemoryStats.PeakUsedVirtual>0</MemoryStats.PeakUsedVirtual>
		<MemoryStats.bIsOOM>0</MemoryStats.bIsOOM>
		<MemoryStats.OOMAllocationSize>0</MemoryStats.OOMAllocationSize>
		<MemoryStats.OOMAllocationAlignment>0</MemoryStats.OOMAllocationAlignment>
		<TimeOfCrash>636202347932160000</TimeOfCrash>
		<bAllowToBeContacted>1</bAllowToBeContacted>
		<PlatformFullName>Win64 [Windows 10  64b]</PlatformFullName>
		<CrashReportClientVersion>1.0</CrashReportClientVersion>
		<Modules>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuin53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuuc53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuio53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\iculx53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icule53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icudt53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor.exe;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HierarchicalLODOutliner.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CrashTracker.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SceneOutliner.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CollectionManager.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-FoliageEdit.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LandscapeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureAlignMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BspMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HardwareSurvey.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SequenceRecorderSections.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationWorker.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\MovieScene\MatineeToLevelSequence\Binaries\Win64\UE4Editor-MatineeToLevelSequence.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PlacementMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\MovieScene\LevelSequenceEditor\Binaries\Win64\UE4Editor-LevelSequenceEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AvfMedia\Binaries\Win64\UE4Editor-AvfMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AvfMedia\Binaries\Win64\UE4Editor-AvfMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AndroidMedia\Binaries\Win64\UE4Editor-AndroidMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AndroidMedia\Binaries\Win64\UE4Editor-AndroidMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\AudioCapture\Binaries\Win64\UE4Editor-AudioCapture.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-SmartSnapping.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LogVisualizer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorLiveStreaming.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\HTML5\UE4Editor-HTML5PlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidDeviceDetection.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSRuntimeSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidRuntimeSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InputBindingEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-NiagaraEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MergeActors.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SizeMap.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TreeMap.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ReferenceViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LocalizationService.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LocalizationDashboard.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DeviceProfileEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UndoHistory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UserFeedback.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Blutility.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectTargetPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectSettingsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorSettingsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SettingsEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectLauncher.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionFrontend.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerClient.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TargetDeviceServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DeviceManager.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationController.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationWindow.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Layers.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PackagesDialog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Persona.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Toolbox.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ModuleUI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-OutputLog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GammaUI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Documentation.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Niagara.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VectorVM.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StreamingPauseRendering.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnalyticsET.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PortalServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PortalRpc.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MessagingRpc.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AITestSuite.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerService.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TaskGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Slate\SlateRemote\Binaries\Win64\UE4Editor-SlateRemote.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\OpenVR\OpenVRv1_0_2\win64\openvr_api.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\Steam\SteamVR\Binaries\Win64\UE4Editor-SteamVR.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ProceduralMeshComponent\Binaries\Win64\UE4Editor-ProceduralMeshComponentEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ProceduralMeshComponent\Binaries\Win64\UE4Editor-ProceduralMeshComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusLibrary\Binaries\Win64\UE4Editor-OculusLibrary.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusInput\Binaries\Win64\UE4Editor-OculusInput.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\MobilePatchingUtils\Binaries\Win64\UE4Editor-MobilePatchingUtils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\Steam\SteamVR\Binaries\Win64\UE4Editor-SteamVRController.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\CustomMeshComponent\Binaries\Win64\UE4Editor-CustomMeshComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\CableComponent\Binaries\Win64\UE4Editor-CableComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ArchVisCharacter\Binaries\Win64\UE4Editor-ArchVisCharacter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\HTML5Networking\Binaries\Win64\UE4Editor-HTML5Networking.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemNull\Binaries\Win64\UE4Editor-OnlineSubsystemNull.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\MediaPlayerEditor\Binaries\Win64\UE4Editor-MediaPlayerEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryCacheEd.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\AlembicImporter\Binaries\Win64\UE4Editor-AlembicImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\AlembicImporter\Binaries\Win64\UE4Editor-AlembicLibrary.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryCache.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\SuperSearchEditor\Binaries\Win64\UE4Editor-SuperSearchEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SuperSearch.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-IntroTutorials.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\SpeedTreeImporter\Binaries\Win64\UE4Editor-SpeedTreeImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\PluginBrowser\Binaries\Win64\UE4Editor-PluginBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\MobileLauncherProfileWizard\Binaries\Win64\UE4Editor-MobileLauncherProfileWizard.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LauncherServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\EpicSurvey\Binaries\Win64\UE4Editor-EpicSurvey.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\VisualStudioSourceCodeAccess\Binaries\Win64\UE4Editor-VisualStudioSourceCodeAccess.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\UObjectPlugin\Binaries\Win64\UE4Editor-UObjectPlugin.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\SubversionSourceControl\Binaries\Win64\UE4Editor-SubversionSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-XmlParser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\PerforceSourceControl\Binaries\Win64\UE4Editor-PerforceSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\GitSourceControl\Binaries\Win64\UE4Editor-GitSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Blendables\LightPropagationVolume\Binaries\Win64\UE4Editor-LightPropagationVolumeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-PaperTiledImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-PaperSpriteSheetImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PixelInspectorModule.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HotReload.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MainFrame.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TranslationEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-Paper2DEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MeshPaint.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Messaging\UdpMessaging\Binaries\Win64\UE4Editor-UdpMessaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Messaging\TcpMessaging\Binaries\Win64\UE4Editor-TcpMessaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Blendables\LightPropagationVolume\Binaries\Win64\UE4Editor-LightPropagationVolumeRuntime.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-Paper2D.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\WindowsMoviePlayer\Binaries\Win64\UE4Editor-WindowsMoviePlayer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMedia.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MediaAssets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameLiveStreaming.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTagsEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ContentBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BehaviorTreeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-FunctionalTesting.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AssetTools.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AIGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CollisionAnalyzer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTasksEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WorkspaceMenuStructure.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MessageLog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateReflector.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceCodeAccess.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-XAudio2.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Networking.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PhysXFormats.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MeshUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VulkanShaderFormat.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AssetRegistry.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-QuadricMeshReduction.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DerivedDataCache.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MetalShaderFormat.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderFormatD3D.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderFormatOpenGL.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderPreprocessor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderCompilerCommon.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ImageWrapper.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatDXT.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\IntelISPCTexComp\Win64-Release\ispc_texcomp.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatIntelISPCTexComp.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatOpus.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Vorbis\Win64\VS2015\libvorbis_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatOgg.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatADPCM.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Messaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LaunchDaemonMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\HTML5\UE4Editor-HTML5TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_MultiTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ASTCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ETC2TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ETC1TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_DXTTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ATCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_PVRTCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AllDesktopTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsClientTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\GameWorks\GFSDK_SSAO\GFSDK_SSAO.win64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\flexExtRelease_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\flexRelease_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_ClothingPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsServerTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsNoEditorTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_LegacyPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_DestructiblePROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEXFrameworkPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3PROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3CommonPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusRift\Binaries\Win64\UE4Editor-OculusRift.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DetailCustomizations.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemUtils\Binaries\Win64\UE4Editor-OnlineSubsystemUtils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystem\Binaries\Win64\UE4Editor-OnlineSubsystem.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateRHIRenderer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-OpenGLDrv.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Voice.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\GameWorks\VXGI\GFSDK_VXGI_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-D3D11RHI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Localization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SequenceRecorder.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Sequencer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Serialization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneCapture.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WebBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceControlWindows.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneTools.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintCompilerCppBackend.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LevelEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UMGEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Renderer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HTTP.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GraphEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PropertyEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\libfbxsdk.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Kismet.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Engine.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacClientTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SSL.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\cudart64_70.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-KismetCompiler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AIModule.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacServerTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ClassViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorStyle.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ComponentVisualizers.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnimGraphRuntime.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-KismetWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameProjectGeneration.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Settings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3CookingPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ConfigEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UMG.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintProfiler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Landscape.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayDebugger.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PxPvdSDKPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureCompressor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintNativeCodeGen.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTags.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VREditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealEd.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InternationalizationSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneTracks.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AppFramework.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Slate.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CoreUObject.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Core.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-NetworkFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacNoEditorTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HardwareTargeting.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AddContentDialog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UtilityShaders.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemUtils\Binaries\Win64\UE4Editor-OnlineBlueprintSupport.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealAudio.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnimGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ViewportInteraction.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty
vTextureTools\Win64
vtt_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Media.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SharedSettingsWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieScene.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HeadMountedDisplay.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTasks.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Foliage.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DirectoryWatcher.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StreamingFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DesktopWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WidgetCarousel.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StatsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ActorPickerMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-JsonUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Sockets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SoundCueEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\CharacterAI\Binaries\Win64\UE4Editor-CharacterAI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SoundClassEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LevelSequence.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DesktopPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PakFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Navmesh.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialShaderQualitySettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Internationalization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SceneDepthPickerMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ViewportSnapping.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RHI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SwarmInterface.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RenderCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CinematicCamera.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatUncompressed.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EngineSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealEdMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EngineMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SandboxFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PacketHandler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatASTC.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatPVR.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Ogg\Win64\VS2015\libogg_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-TVOSTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Json.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Projects.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InputCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PxFoundationPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ExampleDeviceProfileSelector\Binaries\Win64\UE4Editor-ExampleDeviceProfileSelector.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PerfCounters.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MoviePlayer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CEF3Utils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ImageCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RawMesh.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Analytics.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Vorbis\Win64\VS2015\libvorbisfile_64.dll</Modules>
	</RuntimeProperties>
	<PlatformProperties>
		<PlatformIsRunningWindows>1</PlatformIsRunningWindows>
		<PlatformCallbackResult>0</PlatformCallbackResult>
	</PlatformProperties>
</FGenericCrashContext>

[/SPOILER]

FlexFluidSurfaceComponent.cpp
[SPOILER]


// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.

/*=============================================================================
FlexFluidSurfaceComponent.cpp: Fluid surface implementation.
=============================================================================*/

#include "EnginePrivate.h"
#include "Net/UnrealNetwork.h"
#include "ShaderParameterUtils.h"
#include "RHIStaticStates.h"
#include "PhysicsPublic.h"
#include "ParticleEmitterInstances.h"
#include "FlexFluidSurfaceSceneProxy.h"
#include "PhysicsEngine/FlexFluidSurfaceComponent.h"
#include "PhysicsEngine/FlexContainerInstance.h"
#include "PhysicsEngine/FlexFluidSurface.h"
#include "PhysicsEngine/FlexFluidSurfaceActor.h"
#include "SceneView.h"

/*=============================================================================
Helper
=============================================================================*/

const FTexture2DRHIRef& GetTexture(TRefCountPtr<IPooledRenderTarget>& RenderTarget)
{
	return (const FTexture2DRHIRef&)RenderTarget->GetRenderTargetItem().ShaderResourceTexture;
}

/*=============================================================================
FFlexFluidSurfaceVertexFactory
=============================================================================*/

class FFlexFluidSurfaceVertexFactory : public FVertexFactory
{
	DECLARE_VERTEX_FACTORY_TYPE(FFlexFluidSurfaceVertexFactory);

public:
	struct DataType
	{
		/** The stream to read the vertex position from. */
		FVertexStreamComponent PositionComponent;
	};

	FFlexFluidSurfaceVertexFactory(FFlexFluidSurfaceSceneProxy* InProxy) : FVertexFactory(), Proxy(InProxy) {}

	// FRenderResource interface.
	virtual void InitRHI() override
	{
		VertexBuffer.InitResource();
		{
			uint32 Size = 4 * sizeof(FVector4);

			FRHIResourceCreateInfo CreateInfo;
			VertexBuffer.VertexBufferRHI = RHICreateVertexBuffer(Size, BUF_Static, CreateInfo);

			// fill out the verts (vertices of view frustum on near plane in ndc), UE4 has z = 1 in ndc
			FVector4* Vertices = (FVector4*)RHILockVertexBuffer(VertexBuffer.VertexBufferRHI, 0, Size, RLM_WriteOnly);
			float zNearplaneOffset = 0.01f;
			Vertices[0] = FVector4(1, -1, 1 - zNearplaneOffset, 1);
			Vertices[1] = FVector4(1, 1, 1 - zNearplaneOffset, 1);
			Vertices[2] = FVector4(-1, -1, 1 - zNearplaneOffset, 1);
			Vertices[3] = FVector4(-1, 1, 1 - zNearplaneOffset, 1);
			RHIUnlockVertexBuffer(VertexBuffer.VertexBufferRHI);
		}

		Data.PositionComponent = FVertexStreamComponent(&VertexBuffer, 0, sizeof(FVector4), VET_Float4);
		UpdateRHI();

		FVertexDeclarationElementList Elements;
		check(Data.PositionComponent.VertexBuffer != NULL);
		Elements.Add(AccessStreamComponent(Data.PositionComponent, 0));

		check(Streams.Num() > 0);
		InitDeclaration(Elements);
		check(IsValidRef(GetDeclaration()));
	}

	virtual void ReleaseRHI() override
	{
		FVertexFactory::ReleaseRHI();
		VertexBuffer.ReleaseResource();
	}

	static bool ShouldCache(EShaderPlatform Platform, const class FMaterial* Material, const class FShaderType* ShaderType)
	{
		return Material->IsUsedWithFlexFluidSurfaces() || Material->IsSpecialEngineMaterial();
	}

	static void ModifyCompilationEnvironment(EShaderPlatform Platform, const FMaterial* Material, FShaderCompilerEnvironment& OutEnvironment)
	{
		FVertexFactory::ModifyCompilationEnvironment(Platform, Material, OutEnvironment);

		OutEnvironment.SetDefine(TEXT("FLEX_FLUID_SURFACE_FACTORY"), TEXT("1"));
	}

	static FVertexFactoryShaderParameters* ConstructShaderParameters(EShaderFrequency ShaderFrequency);

public:
	FFlexFluidSurfaceSceneProxy* Proxy;

protected:
	DataType Data;
	FVertexBuffer VertexBuffer;

};

IMPLEMENT_VERTEX_FACTORY_TYPE(FFlexFluidSurfaceVertexFactory, "FlexFluidSurfaceVertexFactory", true, false, true, false, false);

/*=============================================================================
FVertexFactoryShaderParameters
=============================================================================*/

class FFlexFluidSurfaceVertexFactoryShaderParametersPS : public FVertexFactoryShaderParameters
{
public:

	virtual void Bind(const FShaderParameterMap& ParameterMap) override
	{
		DepthTexture.Bind(ParameterMap, TEXT("FlexFluidSurfaceDepthTexture"));
		DepthTextureSampler.Bind(ParameterMap, TEXT("FlexFluidSurfaceDepthTextureSampler"));
		ThicknessTexture.Bind(ParameterMap, TEXT("FlexFluidSurfaceThicknessTexture"));
		ThicknessTextureSampler.Bind(ParameterMap, TEXT("FlexFluidSurfaceThicknessTextureSampler"));
		ClipXYAndViewDepthToViewXY.Bind(ParameterMap, TEXT("ClipXYAndViewDepthToViewXY"));
		InvTexResScale.Bind(ParameterMap, TEXT("InvTexResScale"));
	}

	virtual void Serialize(FArchive& Ar) override
	{
		Ar << DepthTexture;
		Ar << DepthTextureSampler;
		Ar << ThicknessTexture;
		Ar << ThicknessTextureSampler;
		Ar << ClipXYAndViewDepthToViewXY;
		Ar << InvTexResScale;
	}

	virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override
	{
		FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;
		FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();
		FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;
		bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;
		FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();
		
		if (DepthTexture.IsBound() && Textures)
		{
			FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);
			SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,
				samplerStateRHI, TextureRHI);
		}

		if (ThicknessTexture.IsBound() && Textures)
		{
			FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);
			SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,
				samplerStateRHI, TextureRHI);
		}

		if (ClipXYAndViewDepthToViewXY.IsBound())
		{
			float FOV = PI / 4.0f;
			float AspectRatio = 1.0f;

			if (View.IsPerspectiveProjection())
			{
				// Derive FOV and aspect ratio from the perspective projection matrix
				FOV = FMath::Atan(1.0f / View.ViewMatrices.GetProjectionMatrix().M[0][0]);
				AspectRatio = View.ViewMatrices.GetProjectionMatrix().M[1][1] / View.ViewMatrices.GetProjectionMatrix().M[0][0];
			}

			FVector2D VecMult(FMath::Tan(FOV*0.5f)*AspectRatio, FMath::Tan(FOV*0.5f));

			SetShaderValue(RHICmdList, PixelShaderRHI, ClipXYAndViewDepthToViewXY, VecMult);
		}

		if (InvTexResScale.IsBound())
		{
			SetShaderValue(RHICmdList, PixelShaderRHI, InvTexResScale, 1.0f / SurfaceVF->Proxy->TexResScale);
		}
	}

	virtual uint32 GetSize() const { return sizeof(*this); }

	FShaderResourceParameter DepthTexture;
	FShaderResourceParameter DepthTextureSampler;
	FShaderResourceParameter ThicknessTexture;
	FShaderResourceParameter ThicknessTextureSampler;
	FShaderParameter ClipXYAndViewDepthToViewXY;
	FShaderParameter InvTexResScale;
};

FVertexFactoryShaderParameters* FFlexFluidSurfaceVertexFactory::ConstructShaderParameters(EShaderFrequency ShaderFrequency)
{
	return ShaderFrequency == SF_Pixel ? new FFlexFluidSurfaceVertexFactoryShaderParametersPS() : NULL;
}

/*=============================================================================
FFlexFluidSurfaceSceneProxy
=============================================================================*/

FFlexFluidSurfaceSceneProxy::FFlexFluidSurfaceSceneProxy(UFlexFluidSurfaceComponent* Component)
	: FPrimitiveSceneProxy(Component)
	, VertexFactory(NULL)
	, MeshBatch(NULL)
	, Textures(NULL)
	, SurfaceMaterial(NULL)
{
	bFlexFluidSurface = true;
}

FFlexFluidSurfaceSceneProxy::~FFlexFluidSurfaceSceneProxy()
{
	if (VertexFactory)
	{
		VertexFactory->ReleaseResource();
		delete VertexFactory;
	}

	delete MeshBatch;

	if (Textures)
	{
		Textures->Depth.SafeRelease();
		Textures->DepthStencil.SafeRelease();
		Textures->Thickness.SafeRelease();
		Textures->SmoothDepth.SafeRelease();
		Textures->DownSampledSceneDepth.SafeRelease();
		Textures->UpSampledDepth.SafeRelease();
	}
}

void FFlexFluidSurfaceSceneProxy::CreateRenderThreadResources()
{
	check(!VertexFactory);
	VertexFactory = new FFlexFluidSurfaceVertexFactory(this);
	VertexFactory->InitResource();
	MeshBatch = new FMeshBatch();
	Textures = new FFlexFluidSurfaceTextures();
}

void ConfigureMeshBatch(FMeshBatch* MeshBatch, FMaterialRenderProxy* MaterialRenderProxy, FFlexFluidSurfaceVertexFactory* VertexFactory)
{
	MeshBatch->VertexFactory = VertexFactory;
	MeshBatch->DynamicVertexStride = 0;
	MeshBatch->ReverseCulling = false;
	MeshBatch->UseDynamicData = false;
	MeshBatch->Type = PT_TriangleStrip;
	MeshBatch->DepthPriorityGroup = SDPG_Foreground;
	MeshBatch->MaterialRenderProxy = MaterialRenderProxy;
	MeshBatch->bSelectable = false;

	FMeshBatchElement& BatchElement = MeshBatch->Elements[0];
	BatchElement.FirstIndex = 0;
	BatchElement.NumPrimitives = 2;
	BatchElement.MinVertexIndex = 0;
	BatchElement.MaxVertexIndex = 3;
	BatchElement.PrimitiveUniformBufferResource = &GIdentityPrimitiveUniformBuffer;
}

void FFlexFluidSurfaceSceneProxy::SetEmitterDynamicData_RenderThread(class FParticleSystemSceneProxy* PSysSceneProxy,
	struct FDynamicEmitterDataBase* DynamicEmitterData)
{
	check(PSysSceneProxy != nullptr);
	
	if (DynamicEmitterData != nullptr)
	{
		ParticleSystemSceneProxyArray.Add(PSysSceneProxy);
		DynamicEmitterDataArray.Add(DynamicEmitterData);
	}
	else
	{
		//clear DynamicEmitterData associated with PSysSceneProxy
		for (int32 i = ParticleSystemSceneProxyArray.Num()-1; i >= 0; --i)
		{
			if (ParticleSystemSceneProxyArray* == PSysSceneProxy)
			{
				ParticleSystemSceneProxyArray.RemoveAtSwap(i);
				DynamicEmitterDataArray.RemoveAtSwap(i);
			}
		}
	}
}

void FFlexFluidSurfaceSceneProxy::SetDynamicData_RenderThread(FFlexFluidSurfaceProperties SurfaceProperties)
{
	SurfaceMaterial = SurfaceProperties.Material;

	if (SurfaceMaterial)
	{
		ConfigureMeshBatch(MeshBatch, SurfaceMaterial->GetRenderProxy(false), VertexFactory);
	}

	bCastDynamicShadow = SurfaceProperties.ReceiveShadows;

	SmoothingRadius = SurfaceProperties.SmoothingRadius;
	MaxRadialSamples = SurfaceProperties.MaxRadialSamples;
	DepthEdgeFalloff = SurfaceProperties.DepthEdgeFalloff;
	ThicknessParticleScale = SurfaceProperties.ThicknessParticleScale;
	DepthParticleScale = SurfaceProperties.DepthParticleScale;
	TexResScale = SurfaceProperties.TexResScale;
}

void FFlexFluidSurfaceSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
{
	if (SurfaceMaterial)
	{
		for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
		{
			if (VisibilityMap & (1 << ViewIndex))
			{
				const FSceneView* View = Views[ViewIndex];
				FMeshBatch& TmpMeshBatch = Collector.AllocateMesh();
				ConfigureMeshBatch(&TmpMeshBatch, SurfaceMaterial->GetRenderProxy(false), VertexFactory);
				Collector.AddMesh(ViewIndex, TmpMeshBatch);
			}
		}
	}
}

FPrimitiveViewRelevance FFlexFluidSurfaceSceneProxy::GetViewRelevance(const FSceneView* View) const
{
	FPrimitiveViewRelevance Result;
	Result.bDrawRelevance = IsShown(View);
	Result.bShadowRelevance = false;
	Result.bDynamicRelevance = true;

	if (SurfaceMaterial)
	{
		FMaterialRelevance MaterialRelevance = SurfaceMaterial->GetRelevance_Concurrent(View->FeatureLevel);
		MaterialRelevance.SetPrimitiveViewRelevance(Result);
	}

	return Result;
}

extern TGlobalResource<FIdentityPrimitiveUniformBuffer> GIdentityPrimitiveUniformBuffer;

/*=============================================================================
UFlexFluidSurface
=============================================================================*/

UFlexFluidSurface::UFlexFluidSurface(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	SmoothingRadius = 10.0f;
	MaxRadialSamples = 5;
	DepthEdgeFalloff = 0.05f;
	ThicknessParticleScale = 2.0f;
	DepthParticleScale = 1.0f;
	HalfRes = false;
	ReceiveShadows = false;
	Material = NULL;
}

#if WITH_EDITOR
void UFlexFluidSurface::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
	SmoothingRadius = FMath::Clamp(SmoothingRadius, 0.0f, 1000.0f);
	MaxRadialSamples = FMath::Clamp(MaxRadialSamples, 0, 100);

	Super::PostEditChangeProperty(PropertyChangedEvent);
}
#endif // WITH_EDITOR

/*=============================================================================
UFlexFluidSurfaceComponent
=============================================================================*/

UFlexFluidSurfaceComponent::UFlexFluidSurfaceComponent(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
	, FlexFluidSurface(NULL)
{
	PrimaryComponentTick.bCanEverTick = true;
	bTickInEditor = true;
	bAutoActivate = true;
}

void UFlexFluidSurfaceComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction)
{
	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

	// Call this because bounds have changed
	UpdateComponentToWorld();

#if WITH_EDITOR
	if (GIsEditor || GIsPlayInEditorWorld)
	{
		//push all surface properties to proxy
		MarkRenderDynamicDataDirty();
	}
#endif
}

void UFlexFluidSurfaceComponent::SendRenderDynamicData_Concurrent()
{
	Super::SendRenderDynamicData_Concurrent();
	if (SceneProxy)
	{
		FFlexFluidSurfaceProperties SurfaceProperties;
		if (FlexFluidSurface)
		{
			UMaterialInterface* RenderMaterial = FlexFluidSurface->Material;
			if (RenderMaterial == NULL || (RenderMaterial->CheckMaterialUsage_Concurrent(MATUSAGE_FlexFluidSurfaces) == false))
			{
				RenderMaterial = UMaterial::GetDefaultMaterial(MD_Surface);
			}

			SurfaceProperties.Material = RenderMaterial;
			SurfaceProperties.ReceiveShadows = FlexFluidSurface->ReceiveShadows;
			SurfaceProperties.SmoothingRadius = FlexFluidSurface->SmoothingRadius;
			SurfaceProperties.MaxRadialSamples = FlexFluidSurface->MaxRadialSamples;
			SurfaceProperties.DepthEdgeFalloff = FlexFluidSurface->DepthEdgeFalloff;
			SurfaceProperties.ThicknessParticleScale = FlexFluidSurface->ThicknessParticleScale;
			SurfaceProperties.DepthParticleScale = FlexFluidSurface->DepthParticleScale;
			SurfaceProperties.TexResScale = FlexFluidSurface->HalfRes ? 0.5f: 1.0f;
		}
		else
		{
			FMemory::Memset(SurfaceProperties, 0);
		}

		// Enqueue command to send to render thread
		ENQUEUE_UNIQUE_RENDER_COMMAND_TWOPARAMETER(
			FSendFlexFluidSurfaceDynamicData,
			FFlexFluidSurfaceSceneProxy*, FlexFluidSurfaceSceneProxy, (FFlexFluidSurfaceSceneProxy*)SceneProxy,
			FFlexFluidSurfaceProperties, SurfaceProperties, SurfaceProperties,
			{
				FlexFluidSurfaceSceneProxy->SetDynamicData_RenderThread(SurfaceProperties);
			});
	}
}

void UFlexFluidSurfaceComponent::SendRenderEmitterDynamicData_Concurrent(
	FParticleSystemSceneProxy* PSysSceneProxy,
	FDynamicEmitterDataBase* DynamicEmitterData)
{
	check(PSysSceneProxy != nullptr);

	if (!SceneProxy)
	{
		return;
	}
	// Enqueue command to send to render thread
	ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER(
		FSendFlexFluidSurfaceEmitterDynamicData,
		FFlexFluidSurfaceSceneProxy*, FlexFluidSurfaceSceneProxy, (FFlexFluidSurfaceSceneProxy*)SceneProxy,
		FParticleSystemSceneProxy*, PSysSceneProxy, PSysSceneProxy,
		FDynamicEmitterDataBase*, DynamicEmitterData, DynamicEmitterData,
		{
			FlexFluidSurfaceSceneProxy->SetEmitterDynamicData_RenderThread(PSysSceneProxy, DynamicEmitterData);
		});
}

FBoxSphereBounds UFlexFluidSurfaceComponent::CalcBounds(const FTransform & LocalToWorld) const
{
	if (EmitterInstances.Num() > 0)
	{
		FBox SphereBoxBounds = EmitterInstances[0]->GetBoundingBox();
		for (int32 i = 1; i < EmitterInstances.Num(); i++)
		{
			SphereBoxBounds += EmitterInstances*->GetBoundingBox();
		}

		return FBoxSphereBounds(SphereBoxBounds);
	}
	else
	{
		return FBoxSphereBounds(LocalToWorld.GetLocation(), FVector(0.0f, 0.0f, 0.0f), 0.0f);
	}
}

FPrimitiveSceneProxy* UFlexFluidSurfaceComponent::CreateSceneProxy()
{
	return new FFlexFluidSurfaceSceneProxy(this);
}

void UFlexFluidSurfaceComponent::RegisterEmitterInstance(struct FParticleEmitterInstance* EmitterInstance)
{
	check(EmitterInstance);
	int32 EmitterIndex = EmitterInstances.Find(EmitterInstance);
	if (EmitterIndex == INDEX_NONE) //emitters are sometimes reinitialized
	{
		EmitterInstances.Add(EmitterInstance);
		MarkRenderDynamicDataDirty();
	}
}

void UFlexFluidSurfaceComponent::UnregisterEmitterInstance(struct FParticleEmitterInstance* EmitterInstance)
{
	check(EmitterInstance);
	int32 EmitterIndex = EmitterInstances.Find(EmitterInstance);

	if (EmitterIndex != INDEX_NONE)
	{
		EmitterInstances.RemoveSingleSwap(EmitterInstance);
		MarkRenderDynamicDataDirty();

		if (EmitterInstances.Num() == 0 && GetWorld() != NULL)
		{
			//this will destroy the actor. 
			GetWorld()->RemoveFlexFluidSurface(this);

			//no other operations should go here.
		}
	}
}

/*=============================================================================
AFlexFluidSurfaceActor
=============================================================================*/

AFlexFluidSurfaceActor::AFlexFluidSurfaceActor(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	Component = ObjectInitializer.CreateDefaultSubobject<UFlexFluidSurfaceComponent>(this, TEXT("FlexFluidSurfaceComponent0"));
	RootComponent = Component;

	bHidden = false;

#if WITH_EDITORONLY_DATA
	if (!IsRunningCommandlet() && (GetSpriteComponent() != NULL))
	{
		// Structure to hold one-time initialization
		struct FConstructorStatics
		{
			ConstructorHelpers::FObjectFinderOptional<UTexture2D> FogTextureObject;
			FName ID_Fog;
			FText NAME_Fog;
			FConstructorStatics()
				: FogTextureObject(TEXT("/Engine/EditorResources/S_ExpoHeightFog"))
				, ID_Fog(TEXT("Fog"))
				, NAME_Fog(NSLOCTEXT("SpriteCategory", "Fog", "Fog"))
			{
			}
		};
		static FConstructorStatics ConstructorStatics;

		GetSpriteComponent()->Sprite = ConstructorStatics.FogTextureObject.Get();
		GetSpriteComponent()->RelativeScale3D = FVector(0.5f, 0.5f, 0.5f);
		GetSpriteComponent()->SpriteInfo.Category = ConstructorStatics.ID_Fog;
		GetSpriteComponent()->SpriteInfo.DisplayName = ConstructorStatics.NAME_Fog;
		
		FAttachmentTransformRules AttachmentRules(EAttachmentRule::KeepRelative, false);
		GetSpriteComponent()->AttachToComponent(Component, AttachmentRules);

	}
#endif // WITH_EDITORONLY_DATA
}

void AFlexFluidSurfaceActor::PostInitializeComponents()
{
	Super::PostInitializeComponents();

	bEnabled = (Component != NULL) ? Component->bVisible : false;
}

void AFlexFluidSurfaceActor::PostActorCreated()
{
	Super::PostActorCreated();
}

void AFlexFluidSurfaceActor::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(AFlexFluidSurfaceActor, bEnabled);
}

void AFlexFluidSurfaceActor::OnRep_bEnabled()
{
	Component->SetVisibility(bEnabled);
}

/** Returns Component subobject **/
UFlexFluidSurfaceComponent* AFlexFluidSurfaceActor::GetComponent() const { return Component; }


[/SPOILER]

Once it’s stable i put this straight on my Github branche and work on adding Hairworks, whic should be way easier. Motivational pic:

http://i.imgur.com/hOkhJKQl.jpg