Files
2025-05-18 13:04:45 +08:00

65 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "ColorManagement/ColorManagementDefines.h"
#include "DataDrivenShaderPlatformInfo.h"
#include "GlobalShader.h"
#include "MediaShaders.h"
#include "RHI.h"
#include "Shader.h"
#include "ShaderParameterUtils.h"
/**
* Pixel shader for ndi media sample converter.
* Converts UYVY-A 2 planes format.
* The first plane is a regular UYVY 4:2:2 followed by a alpha channel plane.
*/
class FNDIMediaShaderUYVAtoBGRAPS : public FGlobalShader
{
DECLARE_EXPORTED_GLOBAL_SHADER(FNDIMediaShaderUYVAtoBGRAPS, NDIMEDIARENDERING_API);
public:
static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& InParameters)
{
return IsFeatureLevelSupported(InParameters.Platform, ERHIFeatureLevel::ES3_1);
}
FNDIMediaShaderUYVAtoBGRAPS()
{}
FNDIMediaShaderUYVAtoBGRAPS(const ShaderMetaType::CompiledShaderInitializerType& InInitializer)
: FGlobalShader(InInitializer)
{}
struct FParameters
{
FParameters(
const TRefCountPtr<FRHITexture>& InYUVTexture,
const TRefCountPtr<FRHITexture>& InAlphaTexture,
const FIntPoint& InOutputSize,
const FMatrix44f& InColorTransform,
UE::Color::EEncoding InEncoding,
const FMatrix44f& InCSTransform,
MediaShaders::EToneMapMethod InToneMapMethod)
: YUVTexture(InYUVTexture)
, AlphaTexture(InAlphaTexture)
, OutputSize(InOutputSize)
, ColorTransform(InColorTransform)
, Encoding(InEncoding)
, CSTransform(InCSTransform)
, ToneMapMethod(InToneMapMethod)
{
}
TRefCountPtr<FRHITexture> YUVTexture;
TRefCountPtr<FRHITexture> AlphaTexture;
FIntPoint OutputSize;
FMatrix44f ColorTransform;
UE::Color::EEncoding Encoding;
FMatrix44f CSTransform;
MediaShaders::EToneMapMethod ToneMapMethod;
};
NDIMEDIARENDERING_API void SetParameters(FRHIBatchedShaderParameters& InBatchedParameters, const FParameters& InParameters);
};