// Copyright Epic Games, Inc. All Rights Reserved. #include "SlateNullRenderer.h" #include "Rendering/DrawElements.h" #include "Rendering/ShaderResourceManager.h" #include "Rendering/SlateDrawBuffer.h" #if UE_SLATE_NULL_RENDERER_WITH_ENGINE #include "RenderingThread.h" #endif FSlateNullRenderer::FSlateNullRenderer(const TSharedRef& InSlateFontServices, const TSharedRef& InResourceManager) : FSlateRenderer(InSlateFontServices) , ResourceManager(InResourceManager) , DrawBuffer(MakeUnique()) { } bool FSlateNullRenderer::Initialize() { return true; } void FSlateNullRenderer::Destroy() { DrawBuffer.Reset(); } FSlateDrawBuffer& FSlateNullRenderer::AcquireDrawBuffer() { ensureMsgf(!DrawBuffer->IsLocked(), TEXT("The DrawBuffer is already locked. Make sure to call ReleaseDrawBuffer to release the DrawBuffer")); DrawBuffer->Lock(); // Clear out the buffer each time its accessed DrawBuffer->ClearBuffer(); return *DrawBuffer; } void FSlateNullRenderer::ReleaseDrawBuffer(FSlateDrawBuffer& InWindowDrawBuffer) { ensureMsgf(DrawBuffer.Get() == &InWindowDrawBuffer, TEXT("It release a DrawBuffer that is not a member of the SlateNullRenderer")); InWindowDrawBuffer.Unlock(); } void FSlateNullRenderer::CreateViewport( const TSharedRef Window ) { } void FSlateNullRenderer::UpdateFullscreenState( const TSharedRef Window, uint32 OverrideResX, uint32 OverrideResY ) { } void FSlateNullRenderer::RestoreSystemResolution(const TSharedRef InWindow) { } void FSlateNullRenderer::OnWindowDestroyed( const TSharedRef& InWindow ) { } void FSlateNullRenderer::DrawWindows( FSlateDrawBuffer& WindowDrawBuffer ) { } FIntPoint FSlateNullRenderer::GenerateDynamicImageResource(const FName InTextureName) { return FIntPoint( 0, 0 ); } bool FSlateNullRenderer::GenerateDynamicImageResource( FName ResourceName, uint32 Width, uint32 Height, const TArray< uint8 >& Bytes ) { return false; } FSlateResourceHandle FSlateNullRenderer::GetResourceHandle(const FSlateBrush& Brush, FVector2f LocalSize, float DrawScale) { return ResourceManager.IsValid() ? ResourceManager->GetResourceHandle(Brush) : FSlateResourceHandle(); } void FSlateNullRenderer::RemoveDynamicBrushResource( TSharedPtr BrushToRemove ) { } void FSlateNullRenderer::ReleaseDynamicResource( const FSlateBrush& InBrush ) { } void FSlateNullRenderer::PrepareToTakeScreenshot(const FIntRect& Rect, TArray* OutColorData, SWindow* InScreenshotWindow) { if (OutColorData) { int32 TotalSize = Rect.Width() * Rect.Height(); OutColorData->Empty(TotalSize); OutColorData->AddZeroed(TotalSize); } } FSlateUpdatableTexture* FSlateNullRenderer::CreateUpdatableTexture(uint32 Width, uint32 Height) { return nullptr; } FSlateUpdatableTexture* FSlateNullRenderer::CreateSharedHandleTexture(void* SharedHandle) { return nullptr; } void FSlateNullRenderer::ReleaseUpdatableTexture(FSlateUpdatableTexture* Texture) { } void FSlateNullRenderer::RequestResize( const TSharedPtr& Window, uint32 NewWidth, uint32 NewHeight ) { } FCriticalSection* FSlateNullRenderer::GetResourceCriticalSection() { return &ResourceCriticalSection; } int32 FSlateNullRenderer::RegisterCurrentScene(FSceneInterface* Scene) { // This is a no-op return -1; } int32 FSlateNullRenderer::GetCurrentSceneIndex() const { // This is a no-op return -1; } void FSlateNullRenderer::SetCurrentSceneIndex(int32 InIndex) { // This is a no-op } void FSlateNullRenderer::ClearScenes() { // This is a no-op } void FSlateNullRenderer::Sync() const { #if UE_SLATE_NULL_RENDERER_WITH_ENGINE FFrameEndSync::Sync(FFrameEndSync::EFlushMode::EndFrame); #endif }