看到知乎上的这篇文章,虽然新版本的ue4宏名称变了,但基本是可以实现的。但是看到还要重新定义一个一模一样的结构,感觉比较冗余。
笔者自己实现的过程中,想要参考ue4自带的uniform传输数据的写法,在OneColorShader.cpp文件中,这样声明:
BEGIN_UNIFORM_BUFFER_STRUCT(FClearShaderUB, )
UNIFORM_MEMBER_ARRAY(FVector4, DrawColorMRT, [8] )
END_UNIFORM_BUFFER_STRUCT(FClearShaderUB) //宏声明
IMPLEMENT_UNIFORM_BUFFER_STRUCT(FClearShaderUB, TEXT("ClearShaderUB"));
然后写入和传输数据的时候,是这样的:
void FOneColorPS::SetColors(FRHICommandList& RHICmdList, const FLinearColor* Colors, int32 NumColors)
{
check(NumColors <= MaxSimultaneousRenderTargets);
auto& ClearUBParam = GetUniformBufferParameter<FClearShaderUB>();
if (ClearUBParam.IsInitialized())
{
if (ClearUBParam.IsBound())
{
FClearShaderUB ClearData;
FMemory::Memzero(ClearData.DrawColorMRT);
for (int32 i = 0; i < NumCo