Skip to content

Commit

Permalink
Development Merge (#113)
Browse files Browse the repository at this point in the history
* started implementing rhi

* UR-244: Fix reimport

* UR-245: Remove RiveViewport client, replaced RiveWidget for fixed UI blending; Removed UI Blend Mode

* fix includes for release build

* ensure all Initialization paths listen for RiveFile delegates; Artboard file code cleanup

* 4b4529a continued: "ensure all Initialization paths listen for RiveFile delegates; Artboard file code cleanup"

* expose OnRiveReady for RiveTextureObject

* UR-247: Artboard / State machine dropdowns implemented across RiveWidget, RiveTextureObject, RiveActorComponent

* rive audio changes

* editor-only: reset rive textures on editor begin play

* RiveWidget audio convience

* win,android: update rive to b192f37856b249fbd6247700bf13d07d9b064c47

* macOS, iOS: update rive to b192f37856b249fbd6247700bf13d07d9b064c47

* Runtime Asset swapping (#105)

RiveAsset class was broken into 3 classes
        RiveAudioAsset
        RiveImageAsset, contains runtime compatible functions:
            LoadImageBytes (accepting an array of bytes in png, webp, jpg format)
            LoadTexture (not yet implemented fully, as we wait on Rive to allow us to submit bitmap data)
        RiveFontAsset, contains runtime compatible functions:
            LoadFontFace (loads an Unreal font face, if the font face's load policy is set to Inline)
            LoadFontBytes (accepting an array of bytes in ttf/otf format)
    RiveFile now supports a function "GetRiveAssetById", returning a base RiveAsset which can later be cast to one of the specific asset types to operate on
***
* asset overrides

* load image bytes call

* cleanup

* Ensure RiveWidget setup is called a short time after init

* Fixed Artboards. (#104)

* Fixed Artboards.

- No more phantom artboards during PIE.
- Artboards in the level reset on PIE begin.

* Made PR suggested changes.

- Moved Artboard check/creation to URiveTextureObject::RiveReady
- Removed EditorBeginPlay() and bHasBegunPlay

* working imagemesh without background

* missed some headers

* UR-249: Improve UMG widget handling, with minimum sizes based on selected artboard as the initial size

* imageRect now working

* win,android: update rive to 14d13c3ded7b141d5130c0246901008dc070c9fe

* macOS, iOS: update rive to 14d13c3ded7b141d5130c0246901008dc070c9fe

* fix a few includes

* fix filehelper include

* add another include

* replaced forward with include; fixing a peculiar compilation issue

* add SetTextValueAtPath, and GetStringValueAtPath

* updated to work with new rive layout

* basic rendering and shader permutations working

* made work with main

* win,android refactor update rive to bc8ed46e56b3c312f0333aa82f0486838a898739

* missing files

* macOS, iOS refactor update rive to bc8ed46e56b3c312f0333aa82f0486838a898739

* remove unused components and content

* header fixes for packaging

* update plugin icon with Rive graphic

* android rendertarget slip

* some cleanup and exports for gms

* more cleanup

* UR-207: Rive on Metal looks washed out

* commit basic FilterPlugin

* removed uneeded guards

* updated to latest runtime

* added rive rhi shaders

* removed dupliocate calls in render target

* allow some UTextures to be used as targets for runtime asset overriding

* fixed some compiler warnings and added flag to ignore shader warnings

* add rive renderer settings

* remvoe duplicate include

* added default load action instead of silencing warning

* updated to use the enable tech preview setting

* addressed PR comments

* move editor specific settings to RiveEditor module

* Use RiveFile initialization delegate before completing rivetextureobject init

* added webp loading, fixed issues with packaging the plugin

* fix for metal write only flag issue

* rename GetStringValueAtPath to GetTextValueAtPath

* made compile on 5.3

* Made compile on 5.3 and up and made build scripts 4.27 compatable.

* fixed macro copy-pasta mistake

* fix for mac and ios build name discrepencies

* updated again for mac paths

* syntax error

* update check

* fix apple linkage

* ensure hit results are properly counted regardless of hit vs. hitOpaque

---------

Co-authored-by: blakdragan7 <[email protected]>
Co-authored-by: Tod-Rive <[email protected]>
  • Loading branch information
3 people authored Sep 27, 2024
1 parent fea91e9 commit 02ec445
Show file tree
Hide file tree
Showing 11 changed files with 155 additions and 131 deletions.
1 change: 1 addition & 0 deletions Config/DefaultRive.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
+PropertyRedirects=(OldName="/Script/Rive.RiveWidget.RiveObject",NewName="/Script/Rive.RiveWidget.RiveTextureObject")
+FunctionRedirects=(OldName="/Script/Rive.RiveArtboard.GetStateMachineNamesForDropdown",NewName="/Script/Rive.RiveArtboard.GetStateMachineNames")
+PropertyRedirects=(OldName="/Script/Rive.RiveTextureObject.AudioEngine",NewName="/Script/Rive.RiveTextureObject.RiveAudioEngine")
+FunctionRedirects=(OldName="/Script/Rive.RiveArtboard.GetStringValueAtPath",NewName="/Script/Rive.RiveArtboard.GetTextValueAtPath")
2 changes: 1 addition & 1 deletion Source/Rive/Private/Rive/RiveArtboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ FString URiveArtboard::GetTextValue(const FString& InPropertyName) const
return {};
}

FString URiveArtboard::GetStringValueAtPath(const FString& InInputName, const FString& InPath, bool& OutSuccess) const
FString URiveArtboard::GetTextValueAtPath(const FString& InInputName, const FString& InPath, bool& OutSuccess) const
{
IRiveRenderer* RiveRenderer = IRiveRendererModule::Get().GetRenderer();
if (ensure(RiveRenderer))
Expand Down
8 changes: 4 additions & 4 deletions Source/Rive/Private/Rive/RiveStateMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ bool FRiveStateMachine::PointerDown(const FVector2f& NewPosition)
}

rive::HitResult HitResult = NativeStateMachinePtr->pointerDown({NewPosition.X, NewPosition.Y});
return HitResult == rive::HitResult::hitOpaque;
return HitResult != rive::HitResult::none;
}

bool FRiveStateMachine::PointerMove(const FVector2f& NewPosition)
Expand All @@ -291,7 +291,7 @@ bool FRiveStateMachine::PointerMove(const FVector2f& NewPosition)
}

rive::HitResult HitResult = NativeStateMachinePtr->pointerMove({ NewPosition.X, NewPosition.Y });
return HitResult == rive::HitResult::hitOpaque;
return HitResult != rive::HitResult::none;
}

bool FRiveStateMachine::PointerUp(const FVector2f& NewPosition)
Expand All @@ -311,7 +311,7 @@ bool FRiveStateMachine::PointerUp(const FVector2f& NewPosition)
}

rive::HitResult HitResult = NativeStateMachinePtr->pointerUp({ NewPosition.X, NewPosition.Y });
return HitResult == rive::HitResult::hitOpaque;
return HitResult != rive::HitResult::none;
}

bool FRiveStateMachine::PointerExit(const FVector2f& NewPosition)
Expand All @@ -331,7 +331,7 @@ bool FRiveStateMachine::PointerExit(const FVector2f& NewPosition)
}

rive::HitResult HitResult = NativeStateMachinePtr->pointerExit({ NewPosition.X, NewPosition.Y });
return HitResult == rive::HitResult::hitOpaque;
return HitResult != rive::HitResult::none;
}

const rive::EventReport FRiveStateMachine::GetReportedEvent(int32 AtIndex) const
Expand Down
2 changes: 1 addition & 1 deletion Source/Rive/Public/Rive/RiveArtboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class RIVE_API URiveArtboard : public UObject
UFUNCTION(BlueprintCallable, Category = Rive)
FString GetTextValue(const FString& InPropertyName) const;
UFUNCTION(BlueprintCallable, Category = Rive)
FString GetStringValueAtPath(const FString& InInputName, const FString& InPath, bool& OutSuccess) const;
FString GetTextValueAtPath(const FString& InInputName, const FString& InPath, bool& OutSuccess) const;


UFUNCTION(BlueprintCallable, Category = Rive)
Expand Down
28 changes: 17 additions & 11 deletions Source/Rive/Rive.Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ public class Rive : ModuleRules
public Rive(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

PublicIncludePaths.AddRange(
new string[] {
// ... add public include paths required here ...
}
);


PrivateIncludePaths.AddRange(
new string[] {
// ... add other private include paths required here ...
}
);


PublicDependencyModuleNames.AddRange(
new string[]
{
Expand All @@ -30,17 +30,21 @@ public Rive(ReadOnlyTargetRules Target) : base(Target)
"CoreUObject",
"InputCore",
"Projects",
"RHICore",
"RHI",
"RenderCore",
"RiveLibrary",
"RiveRenderer",
"RiveRenderer",
"Engine"
// ... add other public dependencies that you statically link with here ...
}
);


#if UE_5_0_OR_LATER
PublicDependencyModuleNames.Add("RHICore");
#else
#endif


PrivateDependencyModuleNames.AddRange(
new string[]
{
Expand All @@ -57,22 +61,24 @@ public Rive(ReadOnlyTargetRules Target) : base(Target)
"Slate",
"SlateCore",
"UMG"
}
}
);

DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);

if (Target.Type == TargetType.Editor)
{
PrivateDependencyModuleNames.AddRange(
new string[]
{
#if UE_5_0_OR_LATER
"EditorFramework",
#endif
"LevelEditor",
"UnrealEd",
"ViewportInteraction",
Expand Down
2 changes: 2 additions & 0 deletions Source/RiveEditor/RiveEditor.Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ public RiveEditor(ReadOnlyTargetRules Target) : base(Target)
new string[]
{
"AssetTools",
#if UE_5_0_OR_LATER
"AssetDefinition",
#endif
"CoreUObject",
"ContentBrowser",
"Engine",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@ THIRD_PARTY_INCLUDES_END
#include "RenderGraphUtils.h"
#include "Logs/RiveRendererLog.h"

#include "Misc/EngineVersionComparison.h"

#if UE_VERSION_OLDER_THAN (5, 4,0)
#define CREATE_TEXTURE_ASNYC(RHICmdList, Desc) RHICreateTexture(Desc)
#define CREATE_TEXTURE(RHICmdList, Desc) RHICreateTexture(Desc)
#define RASTER_STATE(FillMode, CullMode, DepthClip) TStaticRasterizerState<FillMode, CullMode, false, false , DepthClip>::GetRHI()
#else //UE_VERSION_NEWER_OR_EQUASL_TO (5, 4,0)
#define CREATE_TEXTURE_ASNYC(RHICmdList, Desc) RHICmdList->CreateTexture(Desc)
#define CREATE_TEXTURE(RHICmdList, Desc) RHICmdList.CreateTexture(Desc)
#define RASTER_STATE(FillMode, CullMode, DepthClip) TStaticRasterizerState<FillMode, CullMode, DepthClip, false>::GetRHI()
#endif


template<typename VShaderType, typename PShaderType>
void BindShaders(FRHICommandList& CommandList, FGraphicsPipelineStateInitializer& GraphicsPSOInit,
TShaderMapRef<VShaderType> VSShader, TShaderMapRef<PShaderType> PSShader, FRHIVertexDeclaration* VertexDeclaration)
Expand Down Expand Up @@ -167,7 +180,8 @@ size_t in_sizeInBytes, size_t stride) : BufferRing(in_sizeInBytes), m_flags(flag

void BufferRingRHIImpl::Sync(FRHICommandList& commandList) const
{
auto buffer = commandList.LockBuffer(m_buffer, 0, capacityInBytes(), RLM_WriteOnly_NoOverwrite);
// for DX12 we should use RLM_WriteOnly_NoOverwrite but RLM_WriteOnly works everywhere so we use it for now
auto buffer = commandList.LockBuffer(m_buffer, 0, capacityInBytes(), RLM_WriteOnly);
memcpy(buffer, shadowBuffer(), capacityInBytes());
commandList.UnlockBuffer(m_buffer);
}
Expand Down Expand Up @@ -268,7 +282,7 @@ class PLSTextureRHIImpl : public Texture
FRHIAsyncCommandList commandList;
auto Desc = FRHITextureCreateDesc::Create2D(TEXT("PLSTextureRHIImpl_"), m_width, m_height, PixelFormat);
Desc.SetNumMips(mipLevelCount);
m_texture = commandList->CreateTexture(Desc);
m_texture = CREATE_TEXTURE_ASNYC(commandList, Desc);
commandList->UpdateTexture2D(m_texture, 0,
FUpdateTextureRegion2D(0, 0, 0, 0, m_width, m_height), m_width * 4, imageDataRGBA.GetData());
//commandList->Transition(FRHITransitionInfo(m_texture, ERHIAccess::Unknown, ERHIAccess::SRVGraphics));
Expand All @@ -293,17 +307,17 @@ RenderTarget(InTextureTarget->GetSizeX(), InTextureTarget->GetSizeY()), m_textur
FRHITextureCreateDesc coverageDesc = FRHITextureCreateDesc::Create2D(TEXT("RiveAtomicCoverage"), width(), height(), PF_R32_UINT);
coverageDesc.SetNumMips(1);
coverageDesc.AddFlags(ETextureCreateFlags::UAV | ETextureCreateFlags::Memoryless);
m_atomicCoverageTexture = RHICmdList.CreateTexture(coverageDesc);

m_atomicCoverageTexture = CREATE_TEXTURE(RHICmdList, coverageDesc);
FRHITextureCreateDesc scratchColorDesc = FRHITextureCreateDesc::Create2D(TEXT("RiveScratchColor"), width(), height(), PF_R8G8B8A8);
scratchColorDesc.SetNumMips(1);
scratchColorDesc.AddFlags(ETextureCreateFlags::UAV);
m_scratchColorTexture = RHICmdList.CreateTexture(scratchColorDesc);
m_scratchColorTexture = CREATE_TEXTURE(RHICmdList, scratchColorDesc);

FRHITextureCreateDesc clipDesc = FRHITextureCreateDesc::Create2D(TEXT("RiveClip"), width(), height(), PF_R32_UINT);
clipDesc.SetNumMips(1);
clipDesc.AddFlags(ETextureCreateFlags::UAV);
m_clipTexture = RHICmdList.CreateTexture(clipDesc);
m_clipTexture = CREATE_TEXTURE(RHICmdList, clipDesc);

RHICmdList.Transition(FRHITransitionInfo(m_coverageUAV, ERHIAccess::Unknown, ERHIAccess::UAVGraphics));
RHICmdList.Transition(FRHITransitionInfo(m_scratchColorTexture, ERHIAccess::Unknown, ERHIAccess::UAVGraphics));
Expand Down Expand Up @@ -745,7 +759,7 @@ void RenderContextRHIImpl::resizeGradientTexture(uint32_t width, uint32_t height
Desc.AddFlags(ETextureCreateFlags::RenderTargetable | ETextureCreateFlags::ShaderResource);
Desc.SetClearValue(FClearValueBinding(FLinearColor::Red));
Desc.DetermineInititialState();
m_gradiantTexture = commandList.CreateTexture(Desc);
m_gradiantTexture = CREATE_TEXTURE(commandList, Desc);

commandList.Transition(FRHITransitionInfo(m_gradiantTexture, ERHIAccess::Unknown, ERHIAccess::SRVGraphics));

Expand All @@ -767,8 +781,9 @@ void RenderContextRHIImpl::resizeTessellationTexture(uint32_t width, uint32_t he
FRHITextureCreateDesc Desc = FRHITextureCreateDesc::Create2D(TEXT("riveTessTexture"),
{static_cast<int32_t>(width), static_cast<int32_t>(height)}, PF_R32G32B32A32_UINT);
Desc.AddFlags(ETextureCreateFlags::RenderTargetable | ETextureCreateFlags::ShaderResource );
Desc.SetClearValue(FClearValueBinding::Black);
Desc.DetermineInititialState();
m_tesselationTexture = commandList.CreateTexture(Desc);
m_tesselationTexture = CREATE_TEXTURE(commandList, Desc);

commandList.Transition(FRHITransitionInfo(m_tesselationTexture, ERHIAccess::Unknown, ERHIAccess::SRVGraphics));

Expand Down Expand Up @@ -812,7 +827,7 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)

FGraphicsPipelineStateInitializer GraphicsPSOInit;
GraphicsPSOInit.BlendState = TStaticBlendState<>::GetRHI();
GraphicsPSOInit.RasterizerState = TStaticRasterizerState<FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClamp, false>::GetRHI();
GraphicsPSOInit.RasterizerState = RASTER_STATE(FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClamp);
GraphicsPSOInit.DepthStencilState = TStaticDepthStencilState<false, ECompareFunction::CF_Always>::GetRHI();
FRHIBatchedShaderParameters& BatchedShaderParameters = CommandList.GetScratchShaderParameters();

Expand Down Expand Up @@ -868,16 +883,17 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
kGradTextureWidth * 4, m_simpleColorRampsBuffer->contents() + desc.simpleGradDataOffsetInBytes);
CommandList.Transition(FRHITransitionInfo(m_gradiantTexture, ERHIAccess::CopyDest, ERHIAccess::SRVGraphics));
}

if (desc.tessVertexSpanCount > 0)
{
check(m_tesselationTexture)
CommandList.Transition(FRHITransitionInfo(m_tesselationTexture, ERHIAccess::SRVGraphics, ERHIAccess::RTV));

FRHIRenderPassInfo Info(m_tesselationTexture, ERenderTargetActions::DontLoad_Store);
CommandList.BeginRenderPass(Info, TEXT("RiveTessUpdate"));
CommandList.ApplyCachedRenderTargets(GraphicsPSOInit);

GraphicsPSOInit.RasterizerState = TStaticRasterizerState<FM_Solid, CM_CCW, ERasterizerDepthClipMode::DepthClip, false>::GetRHI();
GraphicsPSOInit.RasterizerState = RASTER_STATE(FM_Solid, CM_CCW, ERasterizerDepthClipMode::DepthClamp);
GraphicsPSOInit.PrimitiveType = PT_TriangleList;

TShaderMapRef<FRiveTessVertexShader> VertexShader(ShaderMap);
Expand All @@ -902,9 +918,9 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
CommandList.SetViewport(0, 0, 0,
static_cast<float>(kTessTextureWidth), static_cast<float>(desc.tessDataHeight), 1);

const size_t numTessVerts = (m_tessSpanBuffer->capacityInBytes() / sizeof(TessVertexSpan)) - desc.firstTessVertexSpan;
CommandList.DrawIndexedPrimitive(m_tessSpanIndexBuffer, 0, desc.firstTessVertexSpan,
numTessVerts, 0, std::size(kTessSpanIndices)/3,
//const size_t numTessVerts = (m_tessSpanBuffer->capacityInBytes() / sizeof(TessVertexSpan)) - desc.firstTessVertexSpan;
CommandList.DrawIndexedPrimitive(m_tessSpanIndexBuffer, 0, 0,
8, 0, std::size(kTessSpanIndices)/3,
desc.tessVertexSpanCount);
CommandList.EndRenderPass();
CommandList.Transition(FRHITransitionInfo(m_tesselationTexture, ERHIAccess::RTV, ERHIAccess::SRVGraphics));
Expand All @@ -915,8 +931,8 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
{
case LoadAction::clear:
{
float clearColor4f[4];
UnpackColorToRGBA32F(desc.clearColor, clearColor4f);
float clearColor4f[4];
UnpackColorToRGBA32FPremul(desc.clearColor, clearColor4f);
CommandList.ClearUAVFloat(renderTarget->targetUAV(),
FVector4f(clearColor4f[0], clearColor4f[1], clearColor4f[2], clearColor4f[3]));
}
Expand Down Expand Up @@ -1010,7 +1026,7 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)

CommandList.SetStreamSource(0, m_patchVertexBuffer, 0);
CommandList.DrawIndexedPrimitive(m_patchIndexBuffer, 0,
0, kPatchVertexBufferCount,
batch.baseElement, kPatchVertexBufferCount,
PatchBaseIndex(batch.drawType),
PatchIndexCount(batch.drawType) / 3,
batch.elementCount);
Expand Down Expand Up @@ -1053,7 +1069,7 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
case DrawType::imageRect:
SYNC_BUFFER_WITH_OFFSET(m_imageDrawUniformBuffer, CommandList, batch.imageDrawDataOffset);
{
GraphicsPSOInit.RasterizerState = TStaticRasterizerState<FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClip, false>::GetRHI();;
GraphicsPSOInit.RasterizerState = RASTER_STATE(FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClamp);
GraphicsPSOInit.PrimitiveType = EPrimitiveType::PT_TriangleList;

TShaderMapRef<FRiveImageRectVertexShader> VertexShader(ShaderMap, VertexPermutationDomain);
Expand Down Expand Up @@ -1093,7 +1109,7 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
case DrawType::imageMesh:
{
SYNC_BUFFER_WITH_OFFSET(m_imageDrawUniformBuffer, CommandList, batch.imageDrawDataOffset);
GraphicsPSOInit.RasterizerState = TStaticRasterizerState<FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClip, false>::GetRHI();
GraphicsPSOInit.RasterizerState = RASTER_STATE(FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClamp);
GraphicsPSOInit.PrimitiveType = PT_TriangleList;

LITE_RTTI_CAST_OR_RETURN(IndexBuffer,const RenderBufferRHIImpl*, batch.indexBuffer);
Expand Down Expand Up @@ -1144,7 +1160,7 @@ void RenderContextRHIImpl::flush(const FlushDescriptor& desc)
break;
case DrawType::gpuAtomicResolve:
{
GraphicsPSOInit.RasterizerState = TStaticRasterizerState<FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClip, false>::GetRHI();
GraphicsPSOInit.RasterizerState = RASTER_STATE(FM_Solid, CM_None, ERasterizerDepthClipMode::DepthClamp);
GraphicsPSOInit.PrimitiveType = PT_TriangleStrip;

TShaderMapRef<FRiveAtomiResolveVertexShader> VertexShader(ShaderMap, VertexPermutationDomain);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ class StructuredBufferRingRHIImpl final : public rive::gpu::BufferRing
template<typename HighLevelStruct>
void Sync(FRHICommandList& commandList, size_t elementOffset, size_t elementCount)
{
auto data = commandList.LockBuffer(m_buffer, 0, elementCount * sizeof(HighLevelStruct), RLM_WriteOnly_NoOverwrite);
// for DX12 we should use RLM_WriteOnly_NoOverwrite but RLM_WriteOnly works everywhere so we use it for now
auto data = commandList.LockBuffer(m_buffer, 0, elementCount * sizeof(HighLevelStruct), RLM_WriteOnly);
memcpy(data, shadowBuffer() + (elementOffset * sizeof(HighLevelStruct)), elementCount * sizeof(HighLevelStruct));
commandList.UnlockBuffer(m_buffer);
}
Expand Down
4 changes: 2 additions & 2 deletions Source/RiveRenderer/Private/Shaders/ShaderPipelineManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,9 @@ class FRiveAtomiResolvePixelShader : public FGlobalShader
SHADER_PARAMETER_SAMPLER(SamplerState, gradSampler)
SHADER_PARAMETER_SRV(Buffer<uint2>, GLSL_paintBuffer_raw)
SHADER_PARAMETER_SRV(Buffer<float4>, GLSL_paintAuxBuffer_raw)
SHADER_PARAMETER_UAV(Texture2D, coverageCountBuffer)
SHADER_PARAMETER_UAV(Texture2D<uint>, coverageCountBuffer)
SHADER_PARAMETER_UAV(Texture2D, colorBuffer)
SHADER_PARAMETER_UAV(Texture2D, clipBuffer)
SHADER_PARAMETER_UAV(Texture2D<uint>, clipBuffer)
END_SHADER_PARAMETER_STRUCT()

USE_ATOMIC_PIXEL_PERMUTATIONS
Expand Down
Loading

0 comments on commit 02ec445

Please sign in to comment.