Files
UnrealEngine/Engine/Plugins/Media/BinkMedia/Source/BinkMediaPlayer/Private/binkpluginRHI.cpp
2025-05-18 13:04:45 +08:00

89 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#define BINKRHIFUNCTIONS
#define BINKTEXTURESCLEANUP
#include "egttypes.h"
#include "RHIDefinitions.h"
#include "binktiny.h"
#include "RHIFwd.h"
#include "binktextures.h"
#include "binkplugin.h"
static BINKSHADERS * shaders;
static int attached = 0;
static unsigned rfb;
FRHITexture *BinkRHIRenderTarget;
ERenderTargetLoadAction BinkRenderTargetLoadAction;
RADDEFFUNC int setup_rhi( void * device, BINKPLUGININITINFO * info, S32 gpu_assisted, void ** context )
{
if ( shaders == 0 )
{
shaders = Create_Bink_shaders( device );
if ( shaders == 0 )
return 0;
}
return 1;
}
RADDEFFUNC void shutdown_rhi( void )
{
if ( shaders )
{
Free_Bink_shaders( shaders );
shaders = 0;
}
}
RADDEFFUNC void * createtextures_rhi( void * bink )
{
void * ret = 0;
if ( shaders )
{
ret = Create_Bink_textures( shaders, (HBINK)bink, 0 );
}
return ret;
}
RADDEFFUNC void selectrendertarget_rhi(void* texture_target, S32 width, S32 height, S32 do_clear, U32 sdr_or_hdr, S32 current_resource_state)
{
if (texture_target)
{
attached = 1;
BinkRHIRenderTarget = (FRHITexture*)texture_target;
BinkRenderTargetLoadAction = do_clear ? ERenderTargetLoadAction::EClear : ERenderTargetLoadAction::ELoad;
}
}
RADDEFFUNC void selectscreenrendertarget_rhi( void * texture_target, S32 width, S32 height, U32 format_idx, S32 current_resource_state )
{
if (texture_target)
{
attached = 2;
BinkRHIRenderTarget = (FRHITexture*)texture_target;
BinkRenderTargetLoadAction = ERenderTargetLoadAction::ELoad;
}
}
RADDEFFUNC void clearrendertarget_rhi(void)
{
if (attached)
{
BinkRHIRenderTarget = NULL;
attached = 0;
}
}
RADDEFFUNC void begindraw_rhi( void )
{
}
RADDEFFUNC void enddraw_rhi( void )
{
clearrendertarget_rhi();
}