// Copyright Epic Games, Inc. All Rights Reserved. #include "ThumbnailRendering/SkeletalMeshThumbnailRenderer.h" #include "Misc/App.h" #include "ShowFlags.h" #include "SceneView.h" #include "Engine/SkeletalMesh.h" #include "ThumbnailHelpers.h" USkeletalMeshThumbnailRenderer::USkeletalMeshThumbnailRenderer(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { ThumbnailScene = nullptr; } void USkeletalMeshThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height, FRenderTarget* RenderTarget, FCanvas* Canvas, bool bAdditionalViewFamily) { USkeletalMesh* SkeletalMesh = Cast(Object); if (SkeletalMesh != nullptr) { if (ThumbnailScene == nullptr) { ThumbnailScene = new FSkeletalMeshThumbnailScene(); } ThumbnailScene->SetSkeletalMesh(SkeletalMesh); AddAdditionalPreviewSceneContent(Object, ThumbnailScene->GetWorld()); FSceneViewFamilyContext ViewFamily(FSceneViewFamily::ConstructionValues(RenderTarget, ThumbnailScene->GetScene(), FEngineShowFlags(ESFIM_Game)) .SetWorldTimes(FApp::GetCurrentTime() - GStartTime, FApp::GetDeltaTime(), FApp::GetCurrentTime() - GStartTime) .SetAdditionalViewFamily(bAdditionalViewFamily)); ViewFamily.EngineShowFlags.DisableAdvancedFeatures(); ViewFamily.EngineShowFlags.MotionBlur = 0; ViewFamily.EngineShowFlags.LOD = 0; ThumbnailScene->GetView(&ViewFamily, X, Y, Width, Height); RenderViewFamily(Canvas, &ViewFamily); ThumbnailScene->SetSkeletalMesh(nullptr); } } void USkeletalMeshThumbnailRenderer::BeginDestroy() { if (ThumbnailScene != nullptr) { delete ThumbnailScene; ThumbnailScene = nullptr; } Super::BeginDestroy(); }