diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index 7323da9e95..3f9ff03203 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -665,13 +665,7 @@ void EditorViewportWidget::OnBeginPrepareRender() RenderAll(); // Draw 2D helpers. -#ifdef LYSHINE_ATOM_TODO - TransformationMatrices backupSceneMatrices; -#endif m_debugDisplay->DepthTestOff(); -#ifdef LYSHINE_ATOM_TODO - m_renderer->Set2DMode(m_rcClient.right(), m_rcClient.bottom(), backupSceneMatrices); -#endif auto prevState = m_debugDisplay->GetState(); m_debugDisplay->SetState(e_Mode3D | e_AlphaBlended | e_FillModeSolid | e_CullModeBack | e_DepthWriteOn | e_DepthTestOn); diff --git a/Gems/LyShine/Code/Editor/ViewportWidget.cpp b/Gems/LyShine/Code/Editor/ViewportWidget.cpp index 0746a5213f..993f57aeeb 100644 --- a/Gems/LyShine/Code/Editor/ViewportWidget.cpp +++ b/Gems/LyShine/Code/Editor/ViewportWidget.cpp @@ -341,11 +341,6 @@ void ViewportWidget::ClearUntilSafeToRedraw() // set flag so that Update will just clear the screen rather than rendering canvas m_canvasRenderIsEnabled = false; -#ifdef LYSHINE_ATOM_TODO // check if still needed - // Force an update - Update(); -#endif - // Schedule a timer to set the m_canvasRenderIsEnabled flag // using a time of zero just waits until there is nothing on the event queue QTimer::singleShot(0, this, SLOT(EnableCanvasRender())); diff --git a/Gems/LyShine/Code/Include/LyShine/Draw2d.h b/Gems/LyShine/Code/Include/LyShine/Draw2d.h index 6c848a7f96..8123a834a1 100644 --- a/Gems/LyShine/Code/Include/LyShine/Draw2d.h +++ b/Gems/LyShine/Code/Include/LyShine/Draw2d.h @@ -23,7 +23,7 @@ //! The CDraw2d class implements the IDraw2d interface for drawing 2D images, shapes and text. //! Positions and sizes are specified in pixels in the associated 2D viewport. class CDraw2d - : public IDraw2d // LYSHINE_ATOM_TODO - keep around until gEnv->pLyShine is replaced by bus interface + : public IDraw2d // [LYSHINE_ATOM_TODO][GHI #3573] Make Draw2d work better as an API , public AZ::Render::Bootstrap::NotificationBus::Handler { public: // types @@ -582,7 +582,7 @@ public: // static member functions //! Helper to get the default IDraw2d interface static CDraw2d* GetDefaultDraw2d() { - if (gEnv && gEnv->pLyShine) // LYSHINE_ATOM_TODO - remove pLyShine and use bus interface + if (gEnv && gEnv->pLyShine) // [LYSHINE_ATOM_TODO][GHI #3569] Remove LyShine global interface pointer from legacy global environment { IDraw2d* draw2d = gEnv->pLyShine->GetDraw2d(); return reinterpret_cast(draw2d); diff --git a/Gems/LyShine/Code/Include/LyShine/IRenderGraph.h b/Gems/LyShine/Code/Include/LyShine/IRenderGraph.h index 0e7c127677..e67e234457 100644 --- a/Gems/LyShine/Code/Include/LyShine/IRenderGraph.h +++ b/Gems/LyShine/Code/Include/LyShine/IRenderGraph.h @@ -10,6 +10,8 @@ #include #include +#include + namespace AZ { class Color; @@ -41,9 +43,28 @@ namespace LyShine //! End the setup of a mask render node, this marks the end of adding child primitives virtual void EndMask() = 0; + //! Begin rendering to a texture + virtual void BeginRenderToTexture(AZ::Data::Instance attachmentImage, + const AZ::Vector2& viewportTopLeft, + const AZ::Vector2& viewportSize, + const AZ::Color& clearColor) = 0; + //! End rendering to a texture virtual void EndRenderToTexture() = 0; + //! Add an indexed triangle list primitive to the render graph with given render state + virtual void AddPrimitive(LyShine::UiPrimitive* primitive, const AZ::Data::Instance& texture, + bool isClampTextureMode, bool isTextureSRGB, bool isTexturePremultipliedAlpha, BlendMode blendMode) = 0; + + //! Add an indexed triangle list primitive to the render graph which will use maskTexture as an alpha (gradient) mask + virtual void AddAlphaMaskPrimitive(LyShine::UiPrimitive* primitive, + AZ::Data::Instance contentAttachmentImage, + AZ::Data::Instance maskAttachmentImage, + bool isClampTextureMode, + bool isTextureSRGB, + bool isTexturePremultipliedAlpha, + BlendMode blendMode) = 0; + //! Get a dynamic quad primitive that can be added as an image primitive to the render graph //! The graph handles the allocation of this DynUiPrimitive and deletes it when the graph is reset //! This can be used if the UI component doesn't want to own the storage of the primitive. Used infrequently, diff --git a/Gems/LyShine/Code/Include/LyShine/ISprite.h b/Gems/LyShine/Code/Include/LyShine/ISprite.h index 373024d2db..fdb4b88f22 100644 --- a/Gems/LyShine/Code/Include/LyShine/ISprite.h +++ b/Gems/LyShine/Code/Include/LyShine/ISprite.h @@ -11,6 +11,15 @@ #include #include #include +#include + +namespace AZ +{ + namespace RPI + { + class Image; + } +} //////////////////////////////////////////////////////////////////////////////////////////////////// //! A sprite is a texture with extra information about how it behaves for 2D drawing @@ -135,4 +144,6 @@ public: // member functions //! Returns true if this sprite is configured as a sprite-sheet, false otherwise virtual bool IsSpriteSheet() const = 0; + + virtual AZ::Data::Instance GetImage() = 0; }; diff --git a/Gems/LyShine/Code/Source/LyShineDebug.cpp b/Gems/LyShine/Code/Source/LyShineDebug.cpp index 15894fe4aa..7762b1403b 100644 --- a/Gems/LyShine/Code/Source/LyShineDebug.cpp +++ b/Gems/LyShine/Code/Source/LyShineDebug.cpp @@ -101,7 +101,7 @@ static const int g_numDstBlendModes = 10; //////////////////////////////////////////////////////////////////////////////////////////////////// #if !defined(_RELEASE) -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom static int Create2DTexture(int width, int height, byte* data, ETEX_Format format) { IRenderer* renderer = gEnv->pRenderer; @@ -120,7 +120,7 @@ static AZ::Vector2 GetTextureSize(AZ::Data::Instance image) //////////////////////////////////////////////////////////////////////////////////////////////////// #if !defined(_RELEASE) -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom static void FillTextureRectWithCheckerboard(uint32* data, int textureWidth, int textureHeight, int minX, int minY, [[maybe_unused]] int rectWidth, int rectHeight, int tileWidth, int tileHeight, uint32* colors, bool varyAlpha) @@ -152,7 +152,7 @@ static void FillTextureRectWithCheckerboard(uint32* data, int textureWidth, int #if !defined(_RELEASE) static AZ::Data::Instance CreateMonoTestTexture() { -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom const int width = 32; const int height = 32; uint32 data[width * height]; @@ -192,7 +192,7 @@ static AZ::Data::Instance CreateMonoTestTexture() #if !defined(_RELEASE) static AZ::Data::Instance CreateColorTestTexture() { -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom const int width = 32; const int height = 32; uint32 data[width * height]; @@ -232,7 +232,7 @@ static AZ::Data::Instance CreateColorTestTexture() #if !defined(_RELEASE) static AZ::Data::Instance CreateMonoAlphaTestTexture() { -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom const int width = 32; const int height = 32; uint32 data[width * height]; @@ -272,7 +272,7 @@ static AZ::Data::Instance CreateMonoAlphaTestTexture() #if !defined(_RELEASE) static AZ::Data::Instance CreateColorAlphaTestTexture() { -#ifdef LYSHINE_ATOM_TODO +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom const int width = 32; const int height = 32; uint32 data[width * height]; diff --git a/Gems/LyShine/Code/Source/RenderGraph.cpp b/Gems/LyShine/Code/Source/RenderGraph.cpp index c7baf82fc0..db17fde601 100644 --- a/Gems/LyShine/Code/Source/RenderGraph.cpp +++ b/Gems/LyShine/Code/Source/RenderGraph.cpp @@ -151,7 +151,7 @@ namespace LyShine // Add the indexed primitives to the dynamic draw context for drawing // - // [LYSHINE_ATOM_TODO][ATOM-15073] - need to combine into a single DrawIndexed call to take advantage of the draw call + // [LYSHINE_ATOM_TODO][ATOM-15073] Combine into a single DrawIndexed call to take advantage of the draw call // optimization done by this RenderGraph. This option will be added to DynamicDrawContext. For // now we could combine the vertices ourselves for (const LyShine::UiPrimitive& primitive : m_primitives) @@ -698,7 +698,7 @@ namespace LyShine } //////////////////////////////////////////////////////////////////////////////////////////////////// - void RenderGraph::AddPrimitiveAtom(LyShine::UiPrimitive* primitive, const AZ::Data::Instance& texture, + void RenderGraph::AddPrimitive(LyShine::UiPrimitive* primitive, const AZ::Data::Instance& texture, bool isClampTextureMode, bool isTextureSRGB, bool isTexturePremultipliedAlpha, BlendMode blendMode) { AZStd::vector* renderNodeList = m_renderNodeListStack.top(); @@ -771,7 +771,7 @@ namespace LyShine } //////////////////////////////////////////////////////////////////////////////////////////////////// - void RenderGraph::AddAlphaMaskPrimitiveAtom(LyShine::UiPrimitive* primitive, + void RenderGraph::AddAlphaMaskPrimitive(LyShine::UiPrimitive* primitive, AZ::Data::Instance contentAttachmentImage, AZ::Data::Instance maskAttachmentImage, bool isClampTextureMode, diff --git a/Gems/LyShine/Code/Source/RenderGraph.h b/Gems/LyShine/Code/Source/RenderGraph.h index 36a9e63c5f..1ec1842da3 100644 --- a/Gems/LyShine/Code/Source/RenderGraph.h +++ b/Gems/LyShine/Code/Source/RenderGraph.h @@ -262,6 +262,10 @@ namespace LyShine void StartChildrenForMask() override; void EndMask() override; + void BeginRenderToTexture(AZ::Data::Instance attachmentImage, + const AZ::Vector2& viewportTopLeft, + const AZ::Vector2& viewportSize, + const AZ::Color& clearColor) override; void EndRenderToTexture() override; LyShine::UiPrimitive* GetDynamicQuadPrimitive(const AZ::Vector2* positions, uint32 packedColor) override; @@ -273,25 +277,19 @@ namespace LyShine void PushOverrideAlphaFade(float alphaFadeValue) override; void PopAlphaFade() override; float GetAlphaFade() const override; + + void AddPrimitive(LyShine::UiPrimitive* primitive, const AZ::Data::Instance& texture, + bool isClampTextureMode, bool isTextureSRGB, bool isTexturePremultipliedAlpha, BlendMode blendMode) override; // ~IRenderGraph - // LYSHINE_ATOM_TODO - this can be renamed back to AddPrimitive after removal of IRenderer from all UI components - void AddPrimitiveAtom(LyShine::UiPrimitive* primitive, const AZ::Data::Instance& texture, - bool isClampTextureMode, bool isTextureSRGB, bool isTexturePremultipliedAlpha, BlendMode blendMode); - //! Add an indexed triangle list primitive to the render graph which will use maskTexture as an alpha (gradient) mask - void AddAlphaMaskPrimitiveAtom(LyShine::UiPrimitive* primitive, + void AddAlphaMaskPrimitive(LyShine::UiPrimitive* primitive, AZ::Data::Instance contentAttachmentImage, AZ::Data::Instance maskAttachmentImage, bool isClampTextureMode, bool isTextureSRGB, bool isTexturePremultipliedAlpha, - BlendMode blendMode); - - void BeginRenderToTexture(AZ::Data::Instance attachmentImage, - const AZ::Vector2& viewportTopLeft, - const AZ::Vector2& viewportSize, - const AZ::Color& clearColor); + BlendMode blendMode) override; //! Render the display graph void Render(UiRenderer* uiRenderer, const AZ::Vector2& viewportSize); diff --git a/Gems/LyShine/Code/Source/Sprite.cpp b/Gems/LyShine/Code/Source/Sprite.cpp index 65da7fa159..f8982f4fc2 100644 --- a/Gems/LyShine/Code/Source/Sprite.cpp +++ b/Gems/LyShine/Code/Source/Sprite.cpp @@ -243,12 +243,10 @@ void CSprite::SetCellBorders(int cellIndex, Borders borders) AZ::Data::Instance CSprite::GetImage() { // Prioritize usage of an atlas -#ifdef LYSHINE_ATOM_TODO // texture atlas conversion to use Atom if (m_atlas) { return m_atlas->GetTexture(); } -#endif return m_image; } @@ -701,7 +699,7 @@ CSprite* CSprite::CreateSprite(const AZStd::string& renderTargetName) // create Sprite object CSprite* sprite = new CSprite; -#ifdef LYSHINE_ATOM_TODO // render target converstion to use ATom +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom // the render target texture may not exist yet in which case we will need to load it later sprite->m_texture = gEnv->pRenderer->EF_GetTextureByName(renderTargetName.c_str()); if (sprite->m_texture) diff --git a/Gems/LyShine/Code/Source/Sprite.h b/Gems/LyShine/Code/Source/Sprite.h index 0b2c790cf6..71c3bbcca2 100644 --- a/Gems/LyShine/Code/Source/Sprite.h +++ b/Gems/LyShine/Code/Source/Sprite.h @@ -56,7 +56,7 @@ public: // member functions void SetCellAlias(int cellIndex, const AZStd::string& cellAlias) override; int GetCellIndexFromAlias(const AZStd::string& cellAlias) const override; bool IsSpriteSheet() const override; - + AZ::Data::Instance GetImage() override; // ~ISprite // TextureAtlasNotifications @@ -66,8 +66,6 @@ public: // member functions // ~TextureAtlasNotifications - AZ::Data::Instance GetImage(); - public: // static member functions static void Initialize(); diff --git a/Gems/LyShine/Code/Source/UiCanvasComponent.cpp b/Gems/LyShine/Code/Source/UiCanvasComponent.cpp index 964ce1d0fa..78b9c71f8e 100644 --- a/Gems/LyShine/Code/Source/UiCanvasComponent.cpp +++ b/Gems/LyShine/Code/Source/UiCanvasComponent.cpp @@ -3605,7 +3605,7 @@ void UiCanvasComponent::CreateRenderTarget() return; } -#ifdef LYSHINE_ATOM_TODO // [LYN-3359] Support RTT using Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #6269] Support RTT using Atom // Create a render target that this canvas will be rendered to. // The render target size is the canvas size. m_renderTargetHandle = gEnv->pRenderer->CreateRenderTarget(m_renderTargetName.c_str(), @@ -3636,11 +3636,11 @@ void UiCanvasComponent::DestroyRenderTarget() if (m_renderTargetHandle > 0) { ISystem::CrySystemNotificationBus::Handler::BusDisconnect(); -#ifdef LYSHINE_ATOM_TODO // [LYN-3359] Support RTT using Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #6269] Support RTT using Atom gEnv->pRenderer->DestroyDepthSurface(m_renderTargetDepthSurface); #endif m_renderTargetDepthSurface = nullptr; -#ifdef LYSHINE_ATOM_TODO // [LYN-3359] Support RTT using Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #6269] Support RTT using Atom gEnv->pRenderer->DestroyRenderTarget(m_renderTargetHandle); #endif m_renderTargetHandle = -1; @@ -3650,7 +3650,7 @@ void UiCanvasComponent::DestroyRenderTarget() //////////////////////////////////////////////////////////////////////////////////////////////////// void UiCanvasComponent::RenderCanvasToTexture() { -#ifdef LYSHINE_ATOM_TODO // [LYN-3359] Support RTT using Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #6269] Support RTT using Atom if (m_renderTargetHandle <= 0) { return; diff --git a/Gems/LyShine/Code/Source/UiFaderComponent.cpp b/Gems/LyShine/Code/Source/UiFaderComponent.cpp index 62acbc30ef..e1f5153e99 100644 --- a/Gems/LyShine/Code/Source/UiFaderComponent.cpp +++ b/Gems/LyShine/Code/Source/UiFaderComponent.cpp @@ -455,7 +455,7 @@ void UiFaderComponent::CreateOrResizeRenderTarget(const AZ::Vector2& pixelAligne m_viewportTopLeft = pixelAlignedTopLeft; m_viewportSize = renderTargetSize; - // LYSHINE_ATOM_TODO: optimize by reusing/resizing targets + // [LYSHINE_ATOM_TODO][GHI #6271] Optimize by reusing existing render targets DestroyRenderTarget(); // Create a render target that this element and its children will be rendered to @@ -573,8 +573,7 @@ void UiFaderComponent::RenderRttFader(LyShine::IRenderGraph* renderGraph, UiElem AZ::Color clearColor(0.0f, 0.0f, 0.0f, 0.0f); // Start building the render to texture node in the render graph - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - lyRenderGraph->BeginRenderToTexture(attachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); + renderGraph->BeginRenderToTexture(attachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); // We don't want this fader or parent faders to affect what is rendered to the render target since we will // apply those fades when we render from the render target. @@ -613,17 +612,13 @@ void UiFaderComponent::RenderRttFader(LyShine::IRenderGraph* renderGraph, UiElem // Add a primitive to render a quad using the render target we have created { - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - // Set the texture and other render state required - AZ::Data::Instance image = attachmentImage; - bool isClampTextureMode = true; - bool isTextureSRGB = true; - bool isTexturePremultipliedAlpha = true; - LyShine::BlendMode blendMode = LyShine::BlendMode::Normal; - lyRenderGraph->AddPrimitiveAtom(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); - } + // Set the texture and other render state required + AZ::Data::Instance image = attachmentImage; + bool isClampTextureMode = true; + bool isTextureSRGB = true; + bool isTexturePremultipliedAlpha = true; + LyShine::BlendMode blendMode = LyShine::BlendMode::Normal; + renderGraph->AddPrimitive(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); } } } diff --git a/Gems/LyShine/Code/Source/UiImageComponent.cpp b/Gems/LyShine/Code/Source/UiImageComponent.cpp index c47d4b6ea1..100bee6bf6 100644 --- a/Gems/LyShine/Code/Source/UiImageComponent.cpp +++ b/Gems/LyShine/Code/Source/UiImageComponent.cpp @@ -278,11 +278,7 @@ namespace AZ::Data::Instance image; if (sprite) { - CSprite* cSprite = static_cast(sprite); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (cSprite) - { - image = cSprite->GetImage(); - } + image = sprite->GetImage(); } return image; @@ -469,7 +465,7 @@ void UiImageComponent::Render(LyShine::IRenderGraph* renderGraph) } } -#ifdef LYSHINE_ATOM_TODO // keeping this code for future phase (masks and render targets) +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom ITexture* texture = (sprite) ? sprite->GetTexture() : nullptr; bool isClampTextureMode = m_imageType == ImageType::Tiled ? false : true; bool isTextureSRGB = IsSpriteTypeRenderTarget() && m_isRenderTargetSRGB; @@ -482,11 +478,7 @@ void UiImageComponent::Render(LyShine::IRenderGraph* renderGraph) bool isTextureSRGB = IsSpriteTypeRenderTarget() && m_isRenderTargetSRGB; bool isTexturePremultipliedAlpha = false; // we are not rendering from a render target with alpha in it - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, m_blendMode); - } + renderGraph->AddPrimitive(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, m_blendMode); #endif } } diff --git a/Gems/LyShine/Code/Source/UiImageSequenceComponent.cpp b/Gems/LyShine/Code/Source/UiImageSequenceComponent.cpp index 554a0383c1..4e7d22d96a 100644 --- a/Gems/LyShine/Code/Source/UiImageSequenceComponent.cpp +++ b/Gems/LyShine/Code/Source/UiImageSequenceComponent.cpp @@ -97,7 +97,7 @@ void UiImageSequenceComponent::Render(LyShine::IRenderGraph* renderGraph) return; } - CSprite* sprite = static_cast(m_spriteList[m_sequenceIndex]); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 + ISprite* sprite = m_spriteList[m_sequenceIndex]; // get fade value (tracked by UiRenderer) and compute the desired alpha for the image float fade = renderGraph->GetAlphaFade(); @@ -165,12 +165,8 @@ void UiImageSequenceComponent::Render(LyShine::IRenderGraph* renderGraph) LyShine::BlendMode blendMode = LyShine::BlendMode::Normal; // Add the quad to the render graph - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(&m_cachedPrimitive, image, - isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); - } + renderGraph->AddPrimitive(&m_cachedPrimitive, image, + isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); } } diff --git a/Gems/LyShine/Code/Source/UiMaskComponent.cpp b/Gems/LyShine/Code/Source/UiMaskComponent.cpp index ebe611d547..09975d1351 100644 --- a/Gems/LyShine/Code/Source/UiMaskComponent.cpp +++ b/Gems/LyShine/Code/Source/UiMaskComponent.cpp @@ -557,7 +557,7 @@ void UiMaskComponent::CreateOrResizeRenderTarget(const AZ::Vector2& pixelAligned m_viewportTopLeft = pixelAlignedTopLeft; m_viewportSize = renderTargetSize; - // LYSHINE_ATOM_TODO: optimize by reusing/resizing targets + // [LYSHINE_ATOM_TODO][GHI #6271] Optimize by reusing existing render targets DestroyRenderTarget(); // Create a render target that this element and its children will be rendered to @@ -721,8 +721,7 @@ void UiMaskComponent::RenderUsingGradientMask(LyShine::IRenderGraph* renderGraph // mask render target { // Start building the render to texture node in the render graph - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - lyRenderGraph->BeginRenderToTexture(maskAttachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); + renderGraph->BeginRenderToTexture(maskAttachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); // Render the visual component for this element (if there is one) plus the child mask element (if there is one) RenderMaskPrimitives(renderGraph, renderInterface, childMaskElementInterface, isInGame); @@ -734,8 +733,7 @@ void UiMaskComponent::RenderUsingGradientMask(LyShine::IRenderGraph* renderGraph // content render target { // Start building the render to texture node for the content render target in the render graph - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - lyRenderGraph->BeginRenderToTexture(contentAttachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); + renderGraph->BeginRenderToTexture(contentAttachmentImage, m_viewportTopLeft, m_viewportSize, clearColor); // Render the "content" - the child elements excluding the child mask element (if any) RenderContentPrimitives(renderGraph, elementInterface, childMaskElementInterface, numChildren, isInGame); @@ -771,26 +769,22 @@ void UiMaskComponent::RenderUsingGradientMask(LyShine::IRenderGraph* renderGraph // Add a primitive to do the alpha mask { - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - // Set the texture and other render state required - AZ::Data::Instance contentImage = contentAttachmentImage; - AZ::Data::Instance maskImage = maskAttachmentImage; - bool isClampTextureMode = true; - bool isTextureSRGB = true; - bool isTexturePremultipliedAlpha = false; - LyShine::BlendMode blendMode = LyShine::BlendMode::Normal; + // Set the texture and other render state required + AZ::Data::Instance contentImage = contentAttachmentImage; + AZ::Data::Instance maskImage = maskAttachmentImage; + bool isClampTextureMode = true; + bool isTextureSRGB = true; + bool isTexturePremultipliedAlpha = false; + LyShine::BlendMode blendMode = LyShine::BlendMode::Normal; - // add a render node to render using the two render targets, one as an alpha mask of the other - lyRenderGraph->AddAlphaMaskPrimitiveAtom(&m_cachedPrimitive, - contentAttachmentImage, - maskAttachmentImage, - isClampTextureMode, - isTextureSRGB, - isTexturePremultipliedAlpha, - blendMode); - } + // add a render node to render using the two render targets, one as an alpha mask of the other + renderGraph->AddAlphaMaskPrimitive(&m_cachedPrimitive, + contentAttachmentImage, + maskAttachmentImage, + isClampTextureMode, + isTextureSRGB, + isTexturePremultipliedAlpha, + blendMode); } } } diff --git a/Gems/LyShine/Code/Source/UiParticleEmitterComponent.cpp b/Gems/LyShine/Code/Source/UiParticleEmitterComponent.cpp index e55b310e4a..b999480940 100644 --- a/Gems/LyShine/Code/Source/UiParticleEmitterComponent.cpp +++ b/Gems/LyShine/Code/Source/UiParticleEmitterComponent.cpp @@ -786,11 +786,7 @@ void UiParticleEmitterComponent::Render(LyShine::IRenderGraph* renderGraph) AZ::Data::Instance image; if (m_sprite) { - CSprite* sprite = static_cast(m_sprite); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (sprite) - { - image = sprite->GetImage(); - } + image = m_sprite->GetImage(); } bool isClampTextureMode = true; @@ -844,11 +840,7 @@ void UiParticleEmitterComponent::Render(LyShine::IRenderGraph* renderGraph) m_cachedPrimitive.m_numVertices = totalVerticesInserted; m_cachedPrimitive.m_numIndices = totalParticlesInserted * indicesPerParticle; - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, m_blendMode); - } + renderGraph->AddPrimitive(&m_cachedPrimitive, image, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, m_blendMode); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/LyShine/Code/Source/UiRenderer.cpp b/Gems/LyShine/Code/Source/UiRenderer.cpp index 98b376ec8b..ea5dfdd134 100644 --- a/Gems/LyShine/Code/Source/UiRenderer.cpp +++ b/Gems/LyShine/Code/Source/UiRenderer.cpp @@ -96,13 +96,13 @@ AZ::RPI::ScenePtr UiRenderer::CreateScene(AZStd::shared_ptrEnableAllFeatureProcessors(); // LYSHINE_ATOM_TODO - have a UI pipeline and enable only needed fps + atomScene->EnableAllFeatureProcessors(); // [LYSHINE_ATOM_TODO][GHI #6272] Enable minimal feature processors // Assign the new scene to the specified viewport context viewportContext->SetRenderScene(atomScene); // Create a render pipeline and add it to the scene - AZStd::string pipelineAssetPath = "passes/MainRenderPipeline.azasset"; // LYSHINE_ATOM_TODO - make and use a UI pipeline + AZStd::string pipelineAssetPath = "passes/MainRenderPipeline.azasset"; // [LYSHINE_ATOM_TODO][GHI #6272] Use a custom UI pipeline AZ::Data::Asset pipelineAsset = AZ::RPI::AssetUtils::LoadAssetByProductPath(pipelineAssetPath.c_str(), AZ::RPI::AssetUtils::TraceLevel::Error); AZStd::shared_ptr windowContext = viewportContext->GetWindowContext(); auto renderPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineAsset, *windowContext.get()); @@ -436,7 +436,7 @@ void UiRenderer::DebugDisplayTextureData(int recordingOption) { if (recordingOption > 0) { -#ifdef LYSHINE_ATOM_TODO // Convert debug to use Atom images +#ifdef LYSHINE_ATOM_TODO // [GHI #3568] Support canvas debug display with Atom // compute the total area of all the textures, also create a vector that we can sort by area AZStd::vector textures; int totalArea = 0; diff --git a/Gems/LyShine/Code/Source/UiRenderer.h b/Gems/LyShine/Code/Source/UiRenderer.h index 0e15d41907..3ff3de5507 100644 --- a/Gems/LyShine/Code/Source/UiRenderer.h +++ b/Gems/LyShine/Code/Source/UiRenderer.h @@ -179,6 +179,6 @@ protected: // attributes #ifndef _RELEASE int m_debugTextureDataRecordLevel = 0; - AZStd::unordered_set m_texturesUsedInFrame; // LYSHINE_ATOM_TODO - convert to RPI::Image + AZStd::unordered_set m_texturesUsedInFrame; // [LYN-7857] - Support debug display with Atom #endif }; diff --git a/Gems/LyShine/Code/Source/UiTextComponent.cpp b/Gems/LyShine/Code/Source/UiTextComponent.cpp index 825f3869fd..01cfd49e99 100644 --- a/Gems/LyShine/Code/Source/UiTextComponent.cpp +++ b/Gems/LyShine/Code/Source/UiTextComponent.cpp @@ -1843,11 +1843,7 @@ void UiTextComponent::Render(LyShine::IRenderGraph* renderGraph) LyShine::UiPrimitive* primitive = renderGraph->GetDynamicQuadPrimitive(rect.pt, packedColor); primitive->m_next = nullptr; - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(primitive, systemImage, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); - } + renderGraph->AddPrimitive(primitive, systemImage, isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); } } @@ -1869,12 +1865,8 @@ void UiTextComponent::Render(LyShine::IRenderGraph* renderGraph) } bool isClampTextureMode = true; - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(&batch->m_cachedPrimitive, texture, - isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); - } + renderGraph->AddPrimitive(&batch->m_cachedPrimitive, texture, + isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); } } @@ -1884,7 +1876,7 @@ void UiTextComponent::Render(LyShine::IRenderGraph* renderGraph) for (RenderCacheBatch* batch : m_renderCache.m_batches) { - AZ::FFont* font = static_cast(batch->m_font); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 + AZ::FFont* font = static_cast(batch->m_font); // LYSHINE_ATOM_TODO - move IFont.h out of CryCommon/engine code AZ::Data::Instance fontImage = font->GetFontImage(); if (fontImage) { @@ -1907,12 +1899,8 @@ void UiTextComponent::Render(LyShine::IRenderGraph* renderGraph) // because there is no padding on the left of the glyphs. bool isClampTextureMode = false; - LyShine::RenderGraph* lyRenderGraph = static_cast(renderGraph); // LYSHINE_ATOM_TODO - find a different solution from downcasting - GHI #3570 - if (lyRenderGraph) - { - lyRenderGraph->AddPrimitiveAtom(&batch->m_cachedPrimitive, fontImage, - isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); - } + renderGraph->AddPrimitive(&batch->m_cachedPrimitive, fontImage, + isClampTextureMode, isTextureSRGB, isTexturePremultipliedAlpha, blendMode); } } } diff --git a/Gems/LyShine/Code/Tests/SpriteTest.cpp b/Gems/LyShine/Code/Tests/SpriteTest.cpp index 2fc82546be..53fe27dcdc 100644 --- a/Gems/LyShine/Code/Tests/SpriteTest.cpp +++ b/Gems/LyShine/Code/Tests/SpriteTest.cpp @@ -50,7 +50,7 @@ namespace UnitTest }; -#ifdef LYSHINE_ATOM_TODO // [LYN-3359] - render target support using Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #6270] Support RTT using Atom TEST_F(LyShineSpriteTest, Sprite_CanAcquireRenderTarget) { // initialize to create the static sprite cache diff --git a/Gems/LyShineExamples/Code/Source/UiCustomImageComponent.cpp b/Gems/LyShineExamples/Code/Source/UiCustomImageComponent.cpp index 2c8cb3df49..09ea375923 100644 --- a/Gems/LyShineExamples/Code/Source/UiCustomImageComponent.cpp +++ b/Gems/LyShineExamples/Code/Source/UiCustomImageComponent.cpp @@ -74,7 +74,7 @@ namespace LyShineExamples //////////////////////////////////////////////////////////////////////////////////////////////////// void UiCustomImageComponent::Render([[maybe_unused]] LyShine::IRenderGraph* renderGraph) { -#ifdef LYSHINE_ATOM_TODO // [LYN-3635] convert to use Atom +#ifdef LYSHINE_ATOM_TODO // [GHI #3568] Convert draws to use Atom // get fade value (tracked by UiRenderer) and compute the desired alpha for the image float fade = renderGraph->GetAlphaFade(); float desiredAlpha = m_overrideAlpha * fade;