You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.9 KiB
C++
89 lines
3.9 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <IRenderer.h>
|
|
#include <LyShine/UiBase.h>
|
|
|
|
namespace AZ
|
|
{
|
|
class Color;
|
|
class Vector2;
|
|
}
|
|
|
|
namespace LyShine
|
|
{
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// UI visual components use this interface to add primitives to the render graph, which is how the
|
|
// UI gets rendered.
|
|
// There is one render graph per UI canvas. The render graph (like a display list) is rebuilt when
|
|
// any visual change occurs on the canvas.
|
|
class IRenderGraph
|
|
{
|
|
public:
|
|
|
|
//! Virtual destructor
|
|
virtual ~IRenderGraph() {}
|
|
|
|
//---- Functions for creating and adding primitives to the render graph ----
|
|
|
|
//! Begin the setup of a mask render node, primitives added between this call and StartChildrenForMask define the mask
|
|
virtual void BeginMask(bool isMaskingEnabled, bool useAlphaTest, bool drawBehind, bool drawInFront) = 0;
|
|
|
|
//! Start defining the children (masked primitives) of a mask
|
|
virtual void StartChildrenForMask() = 0;
|
|
|
|
//! 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(int renderTargetHandle, SDepthTexture* renderTargetDepthSurface,
|
|
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(IRenderer::DynUiPrimitive* primitive, ITexture* 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(IRenderer::DynUiPrimitive* primitive,
|
|
ITexture* texture, ITexture* maskTexture,
|
|
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,
|
|
//! e.g. for the selection rect on a text component.
|
|
virtual IRenderer::DynUiPrimitive* GetDynamicQuadPrimitive(const AZ::Vector2* positions, uint32 packedColor) = 0;
|
|
|
|
//---- Functions for supporting masking (used during creation of the graph, not rendering ) ----
|
|
|
|
//! Get flag that indicates we are rendering into a mask. Used to avoid masks on child mask elements.
|
|
virtual bool IsRenderingToMask() const = 0;
|
|
|
|
//! Set flag that we are rendering into a mask. Used to avoid masks on child mask elements.
|
|
virtual void SetIsRenderingToMask(bool isRenderingToMask) = 0;
|
|
|
|
//---- Functions for supporting fading (used during creation of the graph, not rendering ) ----
|
|
|
|
//! Push an alpha fade, this is multiplied with any existing alpha fade from parents
|
|
virtual void PushAlphaFade(float alphaFadeValue) = 0;
|
|
|
|
//! Push a new alpha fade value, this replaces any existing alpha fade
|
|
virtual void PushOverrideAlphaFade(float alphaFadeValue) = 0;
|
|
|
|
//! Pop an alpha fade off the stack
|
|
virtual void PopAlphaFade() = 0;
|
|
|
|
//! Get the current alpha fade value
|
|
virtual float GetAlphaFade() const = 0;
|
|
};
|
|
}
|