Files
UnrealEngineUWP/Engine/Source/Runtime/SlateNullRenderer/Private/SlateNullRenderer.cpp
patrick boutot 835727130a Slate: Clear the uncached draw elements and the batches elements once they are rendered. We do this to remove hard references to the Glyph Sequence from the previous frame. Cached draw elements are still cached. An old Glyph Sequence may still be a reference in a cached element but it is the responsibility of the SWidget to do the proper invalidation. Deprecated the FSlateRenderer::GetDrawBuffer to remind the user to call FSlateRenderer::ReleaseDrawBuffer.
#rb matt.kuhlenschmidt, none
#preflight 62066e4554003c49ad37c3e6
#preflight 6214eeab797dbbeb471d43cc
#preflight 621522ff9e113332ba17dc9d
#preflight 62162720104496cff889752a

#ROBOMERGE-OWNER: patrick.boutot
#ROBOMERGE-AUTHOR: patrick.boutot
#ROBOMERGE-SOURCE: CL 19089835 via CL 19089855 via CL 19092359 via CL 19093299 via CL 19101760
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)

[CL 19141573 by patrick boutot in ue5-main branch]
2022-02-24 23:56:41 -05:00

133 lines
3.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SlateNullRenderer.h"
#include "Rendering/DrawElements.h"
#include "Rendering/SlateDrawBuffer.h"
FSlateNullRenderer::FSlateNullRenderer(const TSharedRef<FSlateFontServices>& InSlateFontServices, const TSharedRef<FSlateShaderResourceManager>& InResourceManager)
: FSlateRenderer(InSlateFontServices)
, ResourceManager(InResourceManager)
, DrawBuffer(MakeUnique<FSlateDrawBuffer>())
{
}
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<SWindow> Window )
{
}
void FSlateNullRenderer::UpdateFullscreenState( const TSharedRef<SWindow> Window, uint32 OverrideResX, uint32 OverrideResY )
{
}
void FSlateNullRenderer::RestoreSystemResolution(const TSharedRef<SWindow> InWindow)
{
}
void FSlateNullRenderer::OnWindowDestroyed( const TSharedRef<SWindow>& 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, FVector2D LocalSize, float DrawScale)
{
return ResourceManager.IsValid() ? ResourceManager->GetResourceHandle(Brush) : FSlateResourceHandle();
}
void FSlateNullRenderer::RemoveDynamicBrushResource( TSharedPtr<FSlateDynamicImageBrush> BrushToRemove )
{
}
void FSlateNullRenderer::ReleaseDynamicResource( const FSlateBrush& InBrush )
{
}
void FSlateNullRenderer::PrepareToTakeScreenshot(const FIntRect& Rect, TArray<FColor>* 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<SWindow>& 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::ClearScenes()
{
// This is a no-op
}