Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

77 lines
2.3 KiB
C++

// Copyright Epic Games Tools LLC
// Licenced under the Unreal Engine EULA
#include "BinkFunctionLibrary.h"
#include "BinkMovieStreamer.h"
#include "Engine/GameViewportClient.h"
#include "Engine/Engine.h"
#include "RenderingThread.h"
extern TSharedPtr<FBinkMovieStreamer, ESPMode::ThreadSafe> MovieStreamer;
// Note: Has to be in a seperate function because you can't do #if inside a render command macro
static void Bink_DrawOverlays_Internal(FRHICommandListImmediate &RHICmdList, FTextureRHIRef BackBuffer, FVector2D ScreenSize) {
if(!BackBuffer.GetReference())
{
return;
}
BINKPLUGINFRAMEINFO FrameInfo = {};
FrameInfo.screen_resource = BackBuffer.GetReference();
FrameInfo.screen_resource_state = 4; // D3D12_RESOURCE_STATE_RENDER_TARGET; (only used in d3d12)
FrameInfo.width = ScreenSize.X;
FrameInfo.height = ScreenSize.Y;
FrameInfo.sdr_or_hdr = BackBuffer->GetFormat() == PF_A2B10G10R10 ? 1 : 0;
FrameInfo.cmdBuf = &RHICmdList;
BinkPluginSetPerFrameInfo(&FrameInfo);
BinkPluginAllScheduled();
BinkPluginDraw(0, 1);
}
void UBinkFunctionLibrary::Bink_DrawOverlays()
{
if (!GEngine || !GEngine->GameViewport || !GEngine->GameViewport->Viewport) {
return;
}
FVector2D ScreenSize;
GEngine->GameViewport->GetViewportSize(ScreenSize);
FTextureRHIRef BackBuffer = GEngine->GameViewport->Viewport->GetRenderTargetTexture();
if (!BackBuffer.IsValid()) {
return;
}
ENQUEUE_RENDER_COMMAND(BinkOverlays)([ScreenSize, BackBuffer](FRHICommandListImmediate& RHICmdList)
{
Bink_DrawOverlays_Internal(RHICmdList, BackBuffer, ScreenSize);
});
}
FTimespan UBinkFunctionLibrary::BinkLoadingMovie_GetDuration()
{
double ms = 0;
if(MovieStreamer.IsValid() && MovieStreamer.Get()->bnk)
{
BINKPLUGININFO bpinfo = {};
BinkPluginInfo(MovieStreamer.Get()->bnk, &bpinfo);
ms = ((double)bpinfo.Frames) * ((double)bpinfo.FrameRateDiv) * 1000.0 / ((double)bpinfo.FrameRate);
}
return FTimespan::FromMilliseconds(ms);
}
FTimespan UBinkFunctionLibrary::BinkLoadingMovie_GetTime()
{
double ms = 0;
if(MovieStreamer.IsValid() && MovieStreamer.Get()->bnk)
{
BINKPLUGININFO bpinfo = {};
BinkPluginInfo(MovieStreamer.Get()->bnk, &bpinfo);
ms = ((double)bpinfo.FrameNum) * ((double)bpinfo.FrameRateDiv) * 1000.0 / ((double)bpinfo.FrameRate);
}
return FTimespan::FromMilliseconds(ms);
}