Move Draw2d interface back to IDraw2d (#6730)
* Move Draw2d interface back to IDraw2d Signed-off-by: abrmich <abrmich@amazon.com> * Fix compile error for gems using LyShine Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
@@ -47,6 +47,9 @@ ly_add_target(
|
||||
Gem::LyShine.Static
|
||||
Legacy::CryCommon
|
||||
Gem::LmbrCentral
|
||||
PUBLIC
|
||||
Gem::Atom_RHI.Reflect
|
||||
Gem::Atom_RPI.Public
|
||||
RUNTIME_DEPENDENCIES
|
||||
Gem::LmbrCentral
|
||||
Gem::TextureAtlas
|
||||
|
||||
@@ -8,13 +8,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <LyShine/IDraw2d.h>
|
||||
#include <LyShine/ILyShine.h>
|
||||
#include <LyShine/Bus/UiTransformBus.h>
|
||||
|
||||
#include <AzFramework/Font/FontInterface.h>
|
||||
#include <Atom/Bootstrap/BootstrapNotificationBus.h>
|
||||
#include <Atom/RPI.Public/DynamicDraw/DynamicDrawInterface.h>
|
||||
#include <Atom/RPI.Reflect/Image/Image.h>
|
||||
#include <Atom/RPI.Public/ViewportContext.h>
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -23,69 +20,11 @@
|
||||
//! 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][GHI #3573] Make Draw2d work better as an API
|
||||
: public IDraw2d
|
||||
, public AZ::Render::Bootstrap::NotificationBus::Handler
|
||||
{
|
||||
public: // types
|
||||
|
||||
struct RenderState
|
||||
{
|
||||
RenderState()
|
||||
{
|
||||
m_blendState.m_enable = true;
|
||||
m_blendState.m_blendSource = AZ::RHI::BlendFactor::AlphaSource;
|
||||
m_blendState.m_blendDest = AZ::RHI::BlendFactor::AlphaSourceInverse;
|
||||
|
||||
m_depthState.m_enable = false;
|
||||
}
|
||||
|
||||
AZ::RHI::TargetBlendState m_blendState;
|
||||
AZ::RHI::DepthState m_depthState;
|
||||
};
|
||||
|
||||
//! Struct used to pass additional image options.
|
||||
//
|
||||
//! If this is not passed then the defaults are used
|
||||
struct ImageOptions
|
||||
{
|
||||
AZ::Vector3 color = AZ::Vector3(1.0f, 1.0f, 1.0f);
|
||||
Rounding pixelRounding = Rounding::Nearest;
|
||||
bool m_clamp = false;
|
||||
RenderState m_renderState;
|
||||
};
|
||||
|
||||
//! Struct used to pass additional text options - mostly ones that do not change from call to call.
|
||||
//
|
||||
//! If this is not passed then the defaults below are used
|
||||
struct TextOptions
|
||||
{
|
||||
AZStd::string fontName; //!< default is "default"
|
||||
unsigned int effectIndex; //!< default is 0
|
||||
AZ::Vector3 color; //!< default is (1,1,1)
|
||||
HAlign horizontalAlignment; //!< default is HAlign::Left
|
||||
VAlign verticalAlignment; //!< default is VAlign::Top
|
||||
AZ::Vector2 dropShadowOffset; //!< default is (0,0), zero offset means no drop shadow is drawn
|
||||
AZ::Color dropShadowColor; //!< default is (0,0,0,0), zero alpha means no drop shadow is drawn
|
||||
float rotation; //!< default is 0
|
||||
bool depthTestEnabled; //!< default is false
|
||||
};
|
||||
|
||||
//! Used to pass in arrays of vertices (e.g. to DrawQuad)
|
||||
struct VertexPosColUV
|
||||
{
|
||||
VertexPosColUV() {}
|
||||
VertexPosColUV(const AZ::Vector2& inPos, const AZ::Color& inColor, const AZ::Vector2& inUV)
|
||||
{
|
||||
position = inPos;
|
||||
color = inColor;
|
||||
uv = inUV;
|
||||
}
|
||||
|
||||
AZ::Vector2 position; //!< 2D position of vertex
|
||||
AZ::Color color; //!< Float color
|
||||
AZ::Vector2 uv; //!< Texture coordinate
|
||||
};
|
||||
|
||||
public: // member functions
|
||||
|
||||
//! Constructor, constructed by the LyShine class
|
||||
@@ -116,7 +55,7 @@ public: // member functions
|
||||
//! \param imageOptions Optional struct specifying options that tend to be the same from call to call
|
||||
void DrawImage(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size, float opacity = 1.0f,
|
||||
float rotation = 0.0f, const AZ::Vector2* pivotPoint = nullptr, const AZ::Vector2* minMaxTexCoords = nullptr,
|
||||
ImageOptions* imageOptions = nullptr);
|
||||
ImageOptions* imageOptions = nullptr) override;
|
||||
|
||||
//! Draw a textured quad where the position specifies the point specified by the alignment.
|
||||
//
|
||||
@@ -135,7 +74,7 @@ public: // member functions
|
||||
void DrawImageAligned(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size,
|
||||
HAlign horizontalAlignment, VAlign verticalAlignment,
|
||||
float opacity = 1.0f, float rotation = 0.0f, const AZ::Vector2* minMaxTexCoords = nullptr,
|
||||
ImageOptions* imageOptions = nullptr);
|
||||
ImageOptions* imageOptions = nullptr) override;
|
||||
|
||||
//! Draw a textured quad where the position, color and uv of each point is specified explicitly
|
||||
//
|
||||
@@ -143,11 +82,11 @@ public: // member functions
|
||||
//! \param verts An array of 4 vertices, in clockwise order (e.g. top left, top right, bottom right, bottom left)
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
void DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
VertexPosColUV* verts,
|
||||
Rounding pixelRounding = Rounding::Nearest,
|
||||
bool clamp = false,
|
||||
const RenderState& renderState = RenderState{});
|
||||
const RenderState& renderState = RenderState{}) override;
|
||||
|
||||
//! Draw a line
|
||||
//
|
||||
@@ -156,9 +95,9 @@ public: // member functions
|
||||
//! \param color The color of the line
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawLine(AZ::Vector2 start, AZ::Vector2 end, AZ::Color color,
|
||||
void DrawLine(AZ::Vector2 start, AZ::Vector2 end, AZ::Color color,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const RenderState& renderState = RenderState{});
|
||||
const RenderState& renderState = RenderState{}) override;
|
||||
|
||||
//! Draw a line with a texture so it can be dotted or dashed
|
||||
//
|
||||
@@ -166,10 +105,10 @@ public: // member functions
|
||||
//! \param verts An array of 2 vertices for the start and end points of the line
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawLineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
void DrawLineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const RenderState& renderState = RenderState{});
|
||||
const RenderState& renderState = RenderState{}) override;
|
||||
//! Draw a text string. Only supports ASCII text.
|
||||
//
|
||||
//! The font and effect used to render the text are specified in the textOptions structure
|
||||
@@ -179,7 +118,7 @@ public: // member functions
|
||||
//! \param opacity The opacity (alpha value) to use to draw the text
|
||||
//! \param textOptions Pointer to an options struct. If null the default options are used
|
||||
void DrawText(const char* textString, AZ::Vector2 position, float pointSize,
|
||||
float opacity = 1.0f, TextOptions* textOptions = nullptr);
|
||||
float opacity = 1.0f, TextOptions* textOptions = nullptr) override;
|
||||
|
||||
//! Draw a rectangular outline with a texture
|
||||
//
|
||||
@@ -194,43 +133,43 @@ public: // member functions
|
||||
AZ::Vector2 rightVec,
|
||||
AZ::Vector2 downVec,
|
||||
AZ::Color color,
|
||||
uint32_t lineThickness = 0);
|
||||
uint32_t lineThickness = 0) override;
|
||||
|
||||
//! Get the width and height (in pixels) that would be used to draw the given text string.
|
||||
//
|
||||
//! Pass the same parameter values that would be used to draw the string
|
||||
AZ::Vector2 GetTextSize(const char* textString, float pointSize, TextOptions* textOptions = nullptr);
|
||||
AZ::Vector2 GetTextSize(const char* textString, float pointSize, TextOptions* textOptions = nullptr) override;
|
||||
|
||||
//! Get the width of the rendering viewport (in pixels).
|
||||
float GetViewportWidth() const;
|
||||
float GetViewportWidth() const override;
|
||||
|
||||
//! Get the height of the rendering viewport (in pixels).
|
||||
float GetViewportHeight() const;
|
||||
float GetViewportHeight() const override;
|
||||
|
||||
//! Get dpi scale factor
|
||||
float GetViewportDpiScalingFactor() const;
|
||||
float GetViewportDpiScalingFactor() const override;
|
||||
|
||||
//! Get the default values that would be used if no image options were passed in
|
||||
//
|
||||
//! This is a convenient way to initialize the imageOptions struct
|
||||
virtual const ImageOptions& GetDefaultImageOptions() const;
|
||||
const ImageOptions& GetDefaultImageOptions() const override;
|
||||
|
||||
//! Get the default values that would be used if no text options were passed in
|
||||
//
|
||||
//! This is a convenient way to initialize the textOptions struct
|
||||
virtual const TextOptions& GetDefaultTextOptions() const;
|
||||
const TextOptions& GetDefaultTextOptions() const override;
|
||||
|
||||
//! Render the primitives that have been deferred
|
||||
void RenderDeferredPrimitives();
|
||||
void RenderDeferredPrimitives() override;
|
||||
|
||||
//! Specify whether to defer future primitives or render them right away
|
||||
void SetDeferPrimitives(bool deferPrimitives);
|
||||
void SetDeferPrimitives(bool deferPrimitives) override;
|
||||
|
||||
//! Return whether future primitives will be deferred or rendered right away
|
||||
bool GetDeferPrimitives();
|
||||
bool GetDeferPrimitives() override;
|
||||
|
||||
//! Set sort key offset for following draws.
|
||||
void SetSortKey(int64_t key);
|
||||
void SetSortKey(int64_t key) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -378,263 +317,3 @@ protected: // attributes
|
||||
AZ::RHI::Ptr<AZ::RPI::DynamicDrawContext> m_dynamicDraw;
|
||||
Draw2dShaderData m_shaderData;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//! Helper class for using the IDraw2d interface
|
||||
//!
|
||||
//! The Draw2dHelper class is an inline wrapper that provides the convenience feature of
|
||||
//! automatically setting member options structures to their defaults and providing set functions.
|
||||
class Draw2dHelper
|
||||
{
|
||||
public: // member functions
|
||||
|
||||
//! Start a section of 2D drawing function calls that will render to the default viewport
|
||||
Draw2dHelper(bool deferCalls = false)
|
||||
{
|
||||
InitCommon(nullptr, deferCalls);
|
||||
}
|
||||
|
||||
//! Start a section of 2D drawing function calls that will render to the viewport
|
||||
//! associated with the specified Draw2d object
|
||||
Draw2dHelper(CDraw2d* draw2d, bool deferCalls = false)
|
||||
{
|
||||
InitCommon(draw2d, deferCalls);
|
||||
}
|
||||
|
||||
void InitCommon(CDraw2d* draw2d, bool deferCalls)
|
||||
{
|
||||
m_draw2d = draw2d;
|
||||
|
||||
if (!m_draw2d)
|
||||
{
|
||||
// Set to default which is the game's draw 2d object
|
||||
m_draw2d = GetDefaultDraw2d();
|
||||
}
|
||||
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_previousDeferCalls = m_draw2d->GetDeferPrimitives();
|
||||
m_draw2d->SetDeferPrimitives(deferCalls);
|
||||
m_imageOptions = m_draw2d->GetDefaultImageOptions();
|
||||
m_textOptions = m_draw2d->GetDefaultTextOptions();
|
||||
}
|
||||
}
|
||||
|
||||
//! End a section of 2D drawing function calls.
|
||||
~Draw2dHelper()
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->SetDeferPrimitives(m_previousDeferCalls);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad, optional rotation is counter-clockwise in degrees.
|
||||
//
|
||||
//! See IDraw2d:DrawImage for parameter descriptions
|
||||
void DrawImage(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size, float opacity = 1.0f,
|
||||
float rotation = 0.0f, const AZ::Vector2* pivotPoint = nullptr, const AZ::Vector2* minMaxTexCoords = nullptr)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawImage(image, position, size, opacity, rotation, pivotPoint, minMaxTexCoords, &m_imageOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad where the position specifies the point specified by the alignment.
|
||||
//
|
||||
//! See IDraw2d:DrawImageAligned for parameter descriptions
|
||||
void DrawImageAligned(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size,
|
||||
IDraw2d::HAlign horizontalAlignment, IDraw2d::VAlign verticalAlignment,
|
||||
float opacity = 1.0f, float rotation = 0.0f, const AZ::Vector2* minMaxTexCoords = nullptr)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawImageAligned(image, position, size, horizontalAlignment, verticalAlignment,
|
||||
opacity, rotation, minMaxTexCoords, &m_imageOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad where the position, color and uv of each point is specified explicitly
|
||||
//
|
||||
//! See IDraw2d:DrawQuad for parameter descriptions
|
||||
void DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image, CDraw2d::VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
bool clamp = false,
|
||||
const CDraw2d::RenderState& renderState = CDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawQuad(image, verts, pixelRounding, clamp, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a line
|
||||
//
|
||||
//! See IDraw2d:DrawLine for parameter descriptions
|
||||
void DrawLine(AZ::Vector2 start, AZ::Vector2 end, AZ::Color color,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const CDraw2d::RenderState& renderState = CDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawLine(start, end, color, pixelRounding, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a line with a texture so it can be dotted or dashed
|
||||
//
|
||||
//! See IDraw2d:DrawLineTextured for parameter descriptions
|
||||
void DrawLineTextured(AZ::Data::Instance<AZ::RPI::Image> image, CDraw2d::VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const CDraw2d::RenderState& renderState = CDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawLineTextured(image, verts, pixelRounding, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a rect outline with a texture
|
||||
//
|
||||
//! See IDraw2d:DrawRectOutlineTextured for parameter descriptions
|
||||
void DrawRectOutlineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
UiTransformInterface::RectPoints points,
|
||||
AZ::Vector2 rightVec,
|
||||
AZ::Vector2 downVec,
|
||||
AZ::Color color,
|
||||
uint32_t lineThickness = 0)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawRectOutlineTextured(image, points, rightVec, downVec, color, lineThickness);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a text string. Only supports ASCII text.
|
||||
//
|
||||
//! See IDraw2d:DrawText for parameter descriptions
|
||||
void DrawText(const char* textString, AZ::Vector2 position, float pointSize, float opacity = 1.0f)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawText(textString, position, pointSize, opacity, &m_textOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Get the width and height (in pixels) that would be used to draw the given text string.
|
||||
//
|
||||
//! See IDraw2d:GetTextSize for parameter descriptions
|
||||
AZ::Vector2 GetTextSize(const char* textString, float pointSize)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
return m_draw2d->GetTextSize(textString, pointSize, &m_textOptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
return AZ::Vector2(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// State management
|
||||
|
||||
//! Set the blend mode used for images, default is GS_BLSRC_SRCALPHA|GS_BLDST_ONEMINUSSRCALPHA.
|
||||
void SetImageBlendMode(const AZ::RHI::TargetBlendState& blendState) { m_imageOptions.m_renderState.m_blendState = blendState; }
|
||||
|
||||
//! Set the color used for DrawImage and other image drawing.
|
||||
void SetImageColor(AZ::Vector3 color) { m_imageOptions.color = color; }
|
||||
|
||||
//! Set whether images are rounded to have the points on exact pixel boundaries.
|
||||
void SetImagePixelRounding(IDraw2d::Rounding round) { m_imageOptions.pixelRounding = round; }
|
||||
|
||||
//! Set the base state (that blend mode etc is combined with) used for images, default is GS_NODEPTHTEST.
|
||||
void SetImageDepthState(const AZ::RHI::DepthState& depthState) { m_imageOptions.m_renderState.m_depthState = depthState; }
|
||||
|
||||
//! Set image clamp mode
|
||||
void SetImageClamp(bool clamp) { m_imageOptions.m_clamp = clamp; }
|
||||
|
||||
//! Set the text font.
|
||||
void SetTextFont(AZStd::string_view fontName) { m_textOptions.fontName = fontName; }
|
||||
|
||||
//! Set the text font effect index.
|
||||
void SetTextEffectIndex(unsigned int effectIndex) { m_textOptions.effectIndex = effectIndex; }
|
||||
|
||||
//! Set the text color.
|
||||
void SetTextColor(AZ::Vector3 color) { m_textOptions.color = color; }
|
||||
|
||||
//! Set the text alignment.
|
||||
void SetTextAlignment(IDraw2d::HAlign horizontalAlignment, IDraw2d::VAlign verticalAlignment)
|
||||
{
|
||||
m_textOptions.horizontalAlignment = horizontalAlignment;
|
||||
m_textOptions.verticalAlignment = verticalAlignment;
|
||||
}
|
||||
|
||||
//! Set a drop shadow for text drawing. An alpha of zero disables drop shadow.
|
||||
void SetTextDropShadow(AZ::Vector2 offset, AZ::Color color)
|
||||
{
|
||||
m_textOptions.dropShadowOffset = offset;
|
||||
m_textOptions.dropShadowColor = color;
|
||||
}
|
||||
|
||||
//! Set a rotation for the text. The text rotates around its position (taking into account alignment).
|
||||
void SetTextRotation(float rotation)
|
||||
{
|
||||
m_textOptions.rotation = rotation;
|
||||
}
|
||||
|
||||
//! Set wheter to enable depth test for the text
|
||||
void SetTextDepthTestEnabled(bool enabled)
|
||||
{
|
||||
m_textOptions.depthTestEnabled = enabled;
|
||||
}
|
||||
|
||||
public: // static member functions
|
||||
|
||||
//! Helper to get the default IDraw2d interface
|
||||
static CDraw2d* GetDefaultDraw2d()
|
||||
{
|
||||
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<CDraw2d*>(draw2d);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//! Round the X and Y coordinates of a point using the given rounding policy
|
||||
template<typename T>
|
||||
static T RoundXY(T value, IDraw2d::Rounding roundingType)
|
||||
{
|
||||
T result = value;
|
||||
|
||||
switch (roundingType)
|
||||
{
|
||||
case IDraw2d::Rounding::None:
|
||||
// nothing to do
|
||||
break;
|
||||
case IDraw2d::Rounding::Nearest:
|
||||
result.SetX(floor(value.GetX() + 0.5f));
|
||||
result.SetY(floor(value.GetY() + 0.5f));
|
||||
break;
|
||||
case IDraw2d::Rounding::Down:
|
||||
result.SetX(floor(value.GetX()));
|
||||
result.SetY(floor(value.GetY()));
|
||||
break;
|
||||
case IDraw2d::Rounding::Up:
|
||||
result.SetX(ceil(value.GetX()));
|
||||
result.SetY(ceil(value.GetY()));
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
protected: // attributes
|
||||
|
||||
CDraw2d::ImageOptions m_imageOptions; //!< image options are stored locally and updated by member functions
|
||||
CDraw2d::TextOptions m_textOptions; //!< text options are stored locally and updated by member functions
|
||||
CDraw2d* m_draw2d;
|
||||
bool m_previousDeferCalls;
|
||||
};
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
#include <AzCore/Math/Vector3.h>
|
||||
#include <AzCore/Math/Color.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
#include <Atom/RHI.Reflect/RenderStates.h>
|
||||
#include <Atom/RPI.Reflect/Image/Image.h>
|
||||
#include <LyShine/Bus/UiTransformBus.h>
|
||||
#include <LyShine/ILyShine.h>
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//! Class for 2D drawing in screen space
|
||||
@@ -55,8 +59,461 @@ public: // types
|
||||
MAX_TEXT_STRING_LENGTH = 1024,
|
||||
};
|
||||
|
||||
struct RenderState
|
||||
{
|
||||
RenderState()
|
||||
{
|
||||
m_blendState.m_enable = true;
|
||||
m_blendState.m_blendSource = AZ::RHI::BlendFactor::AlphaSource;
|
||||
m_blendState.m_blendDest = AZ::RHI::BlendFactor::AlphaSourceInverse;
|
||||
|
||||
m_depthState.m_enable = false;
|
||||
}
|
||||
|
||||
AZ::RHI::TargetBlendState m_blendState;
|
||||
AZ::RHI::DepthState m_depthState;
|
||||
};
|
||||
|
||||
//! Struct used to pass additional image options.
|
||||
//
|
||||
//! If this is not passed then the defaults are used
|
||||
struct ImageOptions
|
||||
{
|
||||
AZ::Vector3 color = AZ::Vector3(1.0f, 1.0f, 1.0f);
|
||||
Rounding pixelRounding = Rounding::Nearest;
|
||||
bool m_clamp = false;
|
||||
RenderState m_renderState;
|
||||
};
|
||||
|
||||
//! Struct used to pass additional text options - mostly ones that do not change from call to call.
|
||||
//
|
||||
//! If this is not passed then the defaults below are used
|
||||
struct TextOptions
|
||||
{
|
||||
AZStd::string fontName; //!< default is "default"
|
||||
unsigned int effectIndex; //!< default is 0
|
||||
AZ::Vector3 color; //!< default is (1,1,1)
|
||||
HAlign horizontalAlignment; //!< default is HAlign::Left
|
||||
VAlign verticalAlignment; //!< default is VAlign::Top
|
||||
AZ::Vector2 dropShadowOffset; //!< default is (0,0), zero offset means no drop shadow is drawn
|
||||
AZ::Color dropShadowColor; //!< default is (0,0,0,0), zero alpha means no drop shadow is drawn
|
||||
float rotation; //!< default is 0
|
||||
bool depthTestEnabled; //!< default is false
|
||||
};
|
||||
|
||||
//! Used to pass in arrays of vertices (e.g. to DrawQuad)
|
||||
struct VertexPosColUV
|
||||
{
|
||||
VertexPosColUV() {}
|
||||
VertexPosColUV(const AZ::Vector2& inPos, const AZ::Color& inColor, const AZ::Vector2& inUV)
|
||||
{
|
||||
position = inPos;
|
||||
color = inColor;
|
||||
uv = inUV;
|
||||
}
|
||||
|
||||
AZ::Vector2 position; //!< 2D position of vertex
|
||||
AZ::Color color; //!< Float color
|
||||
AZ::Vector2 uv; //!< Texture coordinate
|
||||
};
|
||||
|
||||
public: // member functions
|
||||
|
||||
//! Implement virtual destructor just for safety.
|
||||
virtual ~IDraw2d() {}
|
||||
|
||||
//! Draw a textured quad with the top left corner at the given position.
|
||||
//
|
||||
//! The image is drawn with the color specified by SetShapeColor and the opacity
|
||||
//! passed as an argument.
|
||||
//! If rotation is non-zero then the quad is rotated. If the pivot point is
|
||||
//! provided then the points of the quad are rotated about that point, otherwise
|
||||
//! they are rotated about the top left corner of the quad.
|
||||
//! \param texId The texture ID returned by ITexture::GetTextureID()
|
||||
//! \param position Position of the top left corner of the quad (before rotation) in pixels
|
||||
//! \param size The width and height of the quad. Use texture width and height to avoid minification,
|
||||
//! magnification or stretching (assuming the minMaxTexCoords are left to the default)
|
||||
//! \param opacity The alpha value used when blending
|
||||
//! \param rotation Angle of rotation in degrees counter-clockwise
|
||||
//! \param pivotPoint The point about which the quad is rotated
|
||||
//! \param minMaxTexCoords An optional two component array. The first component is the UV coord for the top left
|
||||
//! point of the quad and the second is the UV coord of the bottom right point of the quad
|
||||
//! \param imageOptions Optional struct specifying options that tend to be the same from call to call
|
||||
virtual void DrawImage(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size, float opacity = 1.0f,
|
||||
float rotation = 0.0f, const AZ::Vector2* pivotPoint = nullptr, const AZ::Vector2* minMaxTexCoords = nullptr,
|
||||
ImageOptions* imageOptions = nullptr) = 0;
|
||||
|
||||
//! Draw a textured quad where the position specifies the point specified by the alignment.
|
||||
//
|
||||
//! Rotation is always around the position.
|
||||
//! \param texId The texture ID returned by ITexture::GetTextureID()
|
||||
//! \param position Position align point of the quad (before rotation) in pixels
|
||||
//! \param size The width and height of the quad. Use texture width and height to avoid minification,
|
||||
//! magnification or stretching (assuming the minMaxTexCoords are left to the default)
|
||||
//! \param horizontalAlignment Specifies how the quad is horizontally aligned to the given position
|
||||
//! \param verticalAlignment Specifies how the quad is vertically aligned to the given position
|
||||
//! \param opacity The alpha value used when blending
|
||||
//! \param rotation Angle of rotation in degrees counter-clockwise
|
||||
//! \param minMaxTexCoords An optional two component array. The first component is the UV coord for the top left
|
||||
//! point of the quad and the second is the UV coord of the bottom right point of the quad
|
||||
//! \param imageOptions Optional struct specifying options that tend to be the same from call to call
|
||||
virtual void DrawImageAligned(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size,
|
||||
HAlign horizontalAlignment, VAlign verticalAlignment,
|
||||
float opacity = 1.0f, float rotation = 0.0f, const AZ::Vector2* minMaxTexCoords = nullptr,
|
||||
ImageOptions* imageOptions = nullptr) = 0;
|
||||
|
||||
//! Draw a textured quad where the position, color and uv of each point is specified explicitly
|
||||
//
|
||||
//! \param texId The texture ID returned by ITexture::GetTextureID()
|
||||
//! \param verts An array of 4 vertices, in clockwise order (e.g. top left, top right, bottom right, bottom left)
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
VertexPosColUV* verts,
|
||||
Rounding pixelRounding = Rounding::Nearest,
|
||||
bool clamp = false,
|
||||
const RenderState& renderState = RenderState{}) = 0;
|
||||
|
||||
//! Draw a line
|
||||
//
|
||||
//! \param start The start position
|
||||
//! \param end The end position
|
||||
//! \param color The color of the line
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawLine(AZ::Vector2 start, AZ::Vector2 end, AZ::Color color,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const RenderState& renderState = RenderState{}) = 0;
|
||||
|
||||
//! Draw a line with a texture so it can be dotted or dashed
|
||||
//
|
||||
//! \param texId The texture ID returned by ITexture::GetTextureID()
|
||||
//! \param verts An array of 2 vertices for the start and end points of the line
|
||||
//! \param pixelRounding Whether and how to round pixel coordinates
|
||||
//! \param renderState Blend mode and depth state
|
||||
virtual void DrawLineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const RenderState& renderState = RenderState{}) = 0;
|
||||
//! Draw a text string. Only supports ASCII text.
|
||||
//
|
||||
//! The font and effect used to render the text are specified in the textOptions structure
|
||||
//! \param textString A null terminated ASCII text string. May contain \n characters
|
||||
//! \param position Position of the text in pixels. Alignment values in textOptions affect actual position
|
||||
//! \param pointSize The size of the font to use
|
||||
//! \param opacity The opacity (alpha value) to use to draw the text
|
||||
//! \param textOptions Pointer to an options struct. If null the default options are used
|
||||
virtual void DrawText(const char* textString, AZ::Vector2 position, float pointSize,
|
||||
float opacity = 1.0f, TextOptions* textOptions = nullptr) = 0;
|
||||
|
||||
//! Draw a rectangular outline with a texture
|
||||
//
|
||||
//! \param image The texture to be used for drawing the outline
|
||||
//! \param points The rect's vertices (top left, top right, bottom right, bottom left)
|
||||
//! \param rightVec Right vector. Specified because the rect's width/height could be 0
|
||||
//! \param downVec Down vector. Specified because the rect's width/height could be 0
|
||||
//! \param color The color of the outline
|
||||
//! \param lineThickness The thickness in pixels of the outline. If 0, it will be based on image height
|
||||
virtual void DrawRectOutlineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
UiTransformInterface::RectPoints points,
|
||||
AZ::Vector2 rightVec,
|
||||
AZ::Vector2 downVec,
|
||||
AZ::Color color,
|
||||
uint32_t lineThickness = 0) = 0;
|
||||
|
||||
//! Get the width and height (in pixels) that would be used to draw the given text string.
|
||||
//
|
||||
//! Pass the same parameter values that would be used to draw the string
|
||||
virtual AZ::Vector2 GetTextSize(const char* textString, float pointSize, TextOptions* textOptions = nullptr) = 0;
|
||||
|
||||
//! Get the width of the rendering viewport (in pixels).
|
||||
virtual float GetViewportWidth() const = 0;
|
||||
|
||||
//! Get the height of the rendering viewport (in pixels).
|
||||
virtual float GetViewportHeight() const = 0;
|
||||
|
||||
//! Get dpi scale factor
|
||||
virtual float GetViewportDpiScalingFactor() const = 0;
|
||||
|
||||
//! Get the default values that would be used if no image options were passed in
|
||||
//
|
||||
//! This is a convenient way to initialize the imageOptions struct
|
||||
virtual const ImageOptions& GetDefaultImageOptions() const = 0;
|
||||
|
||||
//! Get the default values that would be used if no text options were passed in
|
||||
//
|
||||
//! This is a convenient way to initialize the textOptions struct
|
||||
virtual const TextOptions& GetDefaultTextOptions() const = 0;
|
||||
|
||||
//! Render the primitives that have been deferred
|
||||
virtual void RenderDeferredPrimitives() = 0;
|
||||
|
||||
//! Specify whether to defer future primitives or render them right away
|
||||
virtual void SetDeferPrimitives(bool deferPrimitives) = 0;
|
||||
|
||||
//! Return whether future primitives will be deferred or rendered right away
|
||||
virtual bool GetDeferPrimitives() = 0;
|
||||
|
||||
//! Set sort key offset for following draws.
|
||||
virtual void SetSortKey(int64_t key) = 0;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//! Helper class for using the IDraw2d interface
|
||||
//!
|
||||
//! The Draw2dHelper class is an inline wrapper that provides the convenience feature of
|
||||
//! automatically setting member options structures to their defaults and providing set functions.
|
||||
class Draw2dHelper
|
||||
{
|
||||
public: // member functions
|
||||
|
||||
//! Start a section of 2D drawing function calls that will render to the default viewport
|
||||
Draw2dHelper(bool deferCalls = false)
|
||||
{
|
||||
InitCommon(nullptr, deferCalls);
|
||||
}
|
||||
|
||||
//! Start a section of 2D drawing function calls that will render to the viewport
|
||||
//! associated with the specified Draw2d object
|
||||
Draw2dHelper(IDraw2d* draw2d, bool deferCalls = false)
|
||||
{
|
||||
InitCommon(draw2d, deferCalls);
|
||||
}
|
||||
|
||||
void InitCommon(IDraw2d* draw2d, bool deferCalls)
|
||||
{
|
||||
m_draw2d = draw2d;
|
||||
|
||||
if (!m_draw2d)
|
||||
{
|
||||
// Set to default which is the game's draw 2d object
|
||||
m_draw2d = GetDefaultDraw2d();
|
||||
}
|
||||
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_previousDeferCalls = m_draw2d->GetDeferPrimitives();
|
||||
m_draw2d->SetDeferPrimitives(deferCalls);
|
||||
m_imageOptions = m_draw2d->GetDefaultImageOptions();
|
||||
m_textOptions = m_draw2d->GetDefaultTextOptions();
|
||||
}
|
||||
}
|
||||
|
||||
//! End a section of 2D drawing function calls.
|
||||
~Draw2dHelper()
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->SetDeferPrimitives(m_previousDeferCalls);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad, optional rotation is counter-clockwise in degrees.
|
||||
//
|
||||
//! See IDraw2d:DrawImage for parameter descriptions
|
||||
void DrawImage(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size, float opacity = 1.0f,
|
||||
float rotation = 0.0f, const AZ::Vector2* pivotPoint = nullptr, const AZ::Vector2* minMaxTexCoords = nullptr)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawImage(image, position, size, opacity, rotation, pivotPoint, minMaxTexCoords, &m_imageOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad where the position specifies the point specified by the alignment.
|
||||
//
|
||||
//! See IDraw2d:DrawImageAligned for parameter descriptions
|
||||
void DrawImageAligned(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 position, AZ::Vector2 size,
|
||||
IDraw2d::HAlign horizontalAlignment, IDraw2d::VAlign verticalAlignment,
|
||||
float opacity = 1.0f, float rotation = 0.0f, const AZ::Vector2* minMaxTexCoords = nullptr)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawImageAligned(image, position, size, horizontalAlignment, verticalAlignment,
|
||||
opacity, rotation, minMaxTexCoords, &m_imageOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a textured quad where the position, color and uv of each point is specified explicitly
|
||||
//
|
||||
//! See IDraw2d:DrawQuad for parameter descriptions
|
||||
void DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image, IDraw2d::VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
bool clamp = false,
|
||||
const IDraw2d::RenderState& renderState = IDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawQuad(image, verts, pixelRounding, clamp, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a line
|
||||
//
|
||||
//! See IDraw2d:DrawLine for parameter descriptions
|
||||
void DrawLine(AZ::Vector2 start, AZ::Vector2 end, AZ::Color color,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const IDraw2d::RenderState& renderState = IDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawLine(start, end, color, pixelRounding, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a line with a texture so it can be dotted or dashed
|
||||
//
|
||||
//! See IDraw2d:DrawLineTextured for parameter descriptions
|
||||
void DrawLineTextured(AZ::Data::Instance<AZ::RPI::Image> image, IDraw2d::VertexPosColUV* verts,
|
||||
IDraw2d::Rounding pixelRounding = IDraw2d::Rounding::Nearest,
|
||||
const IDraw2d::RenderState& renderState = IDraw2d::RenderState{})
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawLineTextured(image, verts, pixelRounding, renderState);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a rect outline with a texture
|
||||
//
|
||||
//! See IDraw2d:DrawRectOutlineTextured for parameter descriptions
|
||||
void DrawRectOutlineTextured(AZ::Data::Instance<AZ::RPI::Image> image,
|
||||
UiTransformInterface::RectPoints points,
|
||||
AZ::Vector2 rightVec,
|
||||
AZ::Vector2 downVec,
|
||||
AZ::Color color,
|
||||
uint32_t lineThickness = 0)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawRectOutlineTextured(image, points, rightVec, downVec, color, lineThickness);
|
||||
}
|
||||
}
|
||||
|
||||
//! Draw a text string. Only supports ASCII text.
|
||||
//
|
||||
//! See IDraw2d:DrawText for parameter descriptions
|
||||
void DrawText(const char* textString, AZ::Vector2 position, float pointSize, float opacity = 1.0f)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
m_draw2d->DrawText(textString, position, pointSize, opacity, &m_textOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//! Get the width and height (in pixels) that would be used to draw the given text string.
|
||||
//
|
||||
//! See IDraw2d:GetTextSize for parameter descriptions
|
||||
AZ::Vector2 GetTextSize(const char* textString, float pointSize)
|
||||
{
|
||||
if (m_draw2d)
|
||||
{
|
||||
return m_draw2d->GetTextSize(textString, pointSize, &m_textOptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
return AZ::Vector2(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// State management
|
||||
|
||||
//! Set the blend mode used for images, default is GS_BLSRC_SRCALPHA|GS_BLDST_ONEMINUSSRCALPHA.
|
||||
void SetImageBlendMode(const AZ::RHI::TargetBlendState& blendState) { m_imageOptions.m_renderState.m_blendState = blendState; }
|
||||
|
||||
//! Set the color used for DrawImage and other image drawing.
|
||||
void SetImageColor(AZ::Vector3 color) { m_imageOptions.color = color; }
|
||||
|
||||
//! Set whether images are rounded to have the points on exact pixel boundaries.
|
||||
void SetImagePixelRounding(IDraw2d::Rounding round) { m_imageOptions.pixelRounding = round; }
|
||||
|
||||
//! Set the base state (that blend mode etc is combined with) used for images, default is GS_NODEPTHTEST.
|
||||
void SetImageDepthState(const AZ::RHI::DepthState& depthState) { m_imageOptions.m_renderState.m_depthState = depthState; }
|
||||
|
||||
//! Set image clamp mode
|
||||
void SetImageClamp(bool clamp) { m_imageOptions.m_clamp = clamp; }
|
||||
|
||||
//! Set the text font.
|
||||
void SetTextFont(AZStd::string_view fontName) { m_textOptions.fontName = fontName; }
|
||||
|
||||
//! Set the text font effect index.
|
||||
void SetTextEffectIndex(unsigned int effectIndex) { m_textOptions.effectIndex = effectIndex; }
|
||||
|
||||
//! Set the text color.
|
||||
void SetTextColor(AZ::Vector3 color) { m_textOptions.color = color; }
|
||||
|
||||
//! Set the text alignment.
|
||||
void SetTextAlignment(IDraw2d::HAlign horizontalAlignment, IDraw2d::VAlign verticalAlignment)
|
||||
{
|
||||
m_textOptions.horizontalAlignment = horizontalAlignment;
|
||||
m_textOptions.verticalAlignment = verticalAlignment;
|
||||
}
|
||||
|
||||
//! Set a drop shadow for text drawing. An alpha of zero disables drop shadow.
|
||||
void SetTextDropShadow(AZ::Vector2 offset, AZ::Color color)
|
||||
{
|
||||
m_textOptions.dropShadowOffset = offset;
|
||||
m_textOptions.dropShadowColor = color;
|
||||
}
|
||||
|
||||
//! Set a rotation for the text. The text rotates around its position (taking into account alignment).
|
||||
void SetTextRotation(float rotation)
|
||||
{
|
||||
m_textOptions.rotation = rotation;
|
||||
}
|
||||
|
||||
//! Set wheter to enable depth test for the text
|
||||
void SetTextDepthTestEnabled(bool enabled)
|
||||
{
|
||||
m_textOptions.depthTestEnabled = enabled;
|
||||
}
|
||||
|
||||
public: // static member functions
|
||||
|
||||
//! Helper to get the default IDraw2d interface
|
||||
static IDraw2d* GetDefaultDraw2d()
|
||||
{
|
||||
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<IDraw2d*>(draw2d);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//! Round the X and Y coordinates of a point using the given rounding policy
|
||||
template<typename T>
|
||||
static T RoundXY(T value, IDraw2d::Rounding roundingType)
|
||||
{
|
||||
T result = value;
|
||||
|
||||
switch (roundingType)
|
||||
{
|
||||
case IDraw2d::Rounding::None:
|
||||
// nothing to do
|
||||
break;
|
||||
case IDraw2d::Rounding::Nearest:
|
||||
result.SetX(floor(value.GetX() + 0.5f));
|
||||
result.SetY(floor(value.GetY() + 0.5f));
|
||||
break;
|
||||
case IDraw2d::Rounding::Down:
|
||||
result.SetX(floor(value.GetX()));
|
||||
result.SetY(floor(value.GetY()));
|
||||
break;
|
||||
case IDraw2d::Rounding::Up:
|
||||
result.SetX(ceil(value.GetX()));
|
||||
result.SetY(ceil(value.GetY()));
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
protected: // attributes
|
||||
|
||||
IDraw2d::ImageOptions m_imageOptions; //!< image options are stored locally and updated by member functions
|
||||
IDraw2d::TextOptions m_textOptions; //!< text options are stored locally and updated by member functions
|
||||
IDraw2d* m_draw2d;
|
||||
bool m_previousDeferCalls;
|
||||
};
|
||||
|
||||
@@ -375,7 +375,7 @@ static void DebugDrawColoredBox(AZ::Vector2 pos, AZ::Vector2 size, AZ::Color col
|
||||
IDraw2d::HAlign horizontalAlignment = IDraw2d::HAlign::Left,
|
||||
IDraw2d::VAlign verticalAlignment = IDraw2d::VAlign::Top)
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
CDraw2d::ImageOptions imageOptions = draw2d->GetDefaultImageOptions();
|
||||
imageOptions.color = color.GetAsVector3();
|
||||
@@ -390,7 +390,7 @@ static void DebugDrawColoredBox(AZ::Vector2 pos, AZ::Vector2 size, AZ::Color col
|
||||
static void DebugDrawStringWithSizeBox(AZStd::string_view font, unsigned int effectIndex, const char* sizeString,
|
||||
const char* testString, AZ::Vector2 pos, float spacing, float size)
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
CDraw2d::TextOptions textOptions = draw2d->GetDefaultTextOptions();
|
||||
if (!font.empty())
|
||||
@@ -424,7 +424,7 @@ static void DebugDrawStringWithSizeBox(AZStd::string_view font, unsigned int eff
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dFontSizes(AZStd::string_view font, unsigned int effectIndex)
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
float xOffset = 20.0f;
|
||||
float yOffset = 20.0f;
|
||||
@@ -546,7 +546,7 @@ static void DebugDrawAlignedTextWithOriginBox(AZ::Vector2 pos,
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dFontAlignment()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
float w = draw2d->GetViewportWidth();
|
||||
float yPos = 20;
|
||||
|
||||
@@ -613,7 +613,7 @@ static void DebugDraw2dFontAlignment()
|
||||
#if !defined(_RELEASE)
|
||||
static AZ::Vector2 DebugDrawFontColorTestBox(AZ::Vector2 pos, const char* string, AZ::Vector3 color, float opacity)
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
float pointSize = 32.0f;
|
||||
const float spacing = 6.0f;
|
||||
@@ -648,7 +648,7 @@ static AZ::Vector2 DebugDrawFontColorTestBox(AZ::Vector2 pos, const char* string
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dFontColorAndOpacity()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
AZ::Vector2 size;
|
||||
AZ::Vector2 pos(20.0f, 20.0f);
|
||||
@@ -686,7 +686,7 @@ static void DebugDraw2dFontColorAndOpacity()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dImageRotations()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
AZ::Data::Instance<AZ::RPI::Image> texture = GetMonoTestTexture();
|
||||
|
||||
@@ -738,7 +738,7 @@ static void DebugDraw2dImageRotations()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dImageColor()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
AZ::Data::Instance<AZ::RPI::Image> texture = GetMonoAlphaTestTexture();
|
||||
|
||||
@@ -774,7 +774,7 @@ static void DebugDraw2dImageColor()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dImageBlendMode()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
auto whiteTexture = AZ::RPI::ImageSystemInterface::Get()->GetSystemImage(AZ::RPI::SystemImage::White);
|
||||
|
||||
@@ -841,7 +841,7 @@ static void DebugDraw2dImageBlendMode()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dImageUVs()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
AZ::Data::Instance<AZ::RPI::Image> texture = GetColorTestTexture();
|
||||
|
||||
@@ -890,7 +890,7 @@ static void DebugDraw2dImageUVs()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dImagePixelRounding()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
AZ::Data::Instance<AZ::RPI::Image> texture = GetColorTestTexture();
|
||||
|
||||
@@ -931,7 +931,7 @@ static void DebugDraw2dImagePixelRounding()
|
||||
#if !defined(_RELEASE)
|
||||
static void DebugDraw2dLineBasic()
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
CDraw2d::ImageOptions imageOptions = draw2d->GetDefaultImageOptions();
|
||||
|
||||
@@ -1422,7 +1422,7 @@ void LyShineDebug::RenderDebug()
|
||||
#if !defined(_RELEASE)
|
||||
|
||||
#ifndef EXCLUDE_DOCUMENTATION_PURPOSE
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
if (!draw2d)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -2122,13 +2122,13 @@ void UiCanvasComponent::DebugReportDrawCalls(AZ::IO::HandleType fileHandle, LySh
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void UiCanvasComponent::DebugDisplayElemBounds(CDraw2d* draw2d) const
|
||||
void UiCanvasComponent::DebugDisplayElemBounds(IDraw2d* draw2d) const
|
||||
{
|
||||
DebugDisplayChildElemBounds(draw2d, m_rootElement);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void UiCanvasComponent::DebugDisplayChildElemBounds(CDraw2d* draw2d, const AZ::EntityId entity) const
|
||||
void UiCanvasComponent::DebugDisplayChildElemBounds(IDraw2d* draw2d, const AZ::EntityId entity) const
|
||||
{
|
||||
AZ::u64 time = AZStd::GetTimeUTCMilliSecond();
|
||||
uint32 fractionsOfOneSecond = time % 1000;
|
||||
|
||||
@@ -292,8 +292,8 @@ public: // member functions
|
||||
|
||||
void DebugReportDrawCalls(AZ::IO::HandleType fileHandle, LyShineDebug::DebugInfoDrawCallReport& reportInfo, void* context) const;
|
||||
|
||||
void DebugDisplayElemBounds(CDraw2d* draw2d) const;
|
||||
void DebugDisplayChildElemBounds(CDraw2d* draw2d, const AZ::EntityId entity) const;
|
||||
void DebugDisplayElemBounds(IDraw2d* draw2d) const;
|
||||
void DebugDisplayChildElemBounds(IDraw2d* draw2d, const AZ::EntityId entity) const;
|
||||
#endif
|
||||
|
||||
public: // static member functions
|
||||
|
||||
@@ -997,7 +997,7 @@ void UiCanvasManager::DebugDisplayCanvasData(int setting) const
|
||||
{
|
||||
bool onlyShowEnabledCanvases = (setting == 2) ? true : false;
|
||||
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
float dpiScale = draw2d->GetViewportDpiScalingFactor();
|
||||
float xOffset = 20.0f * dpiScale;
|
||||
@@ -1152,7 +1152,7 @@ void UiCanvasManager::DebugDisplayCanvasData(int setting) const
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void UiCanvasManager::DebugDisplayDrawCallData() const
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
float dpiScale = draw2d->GetViewportDpiScalingFactor();
|
||||
float xOffset = 20.0f * dpiScale;
|
||||
@@ -1486,7 +1486,7 @@ void UiCanvasManager::DebugReportDrawCalls(const AZStd::string& name) const
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void UiCanvasManager::DebugDisplayElemBounds(int canvasIndexFilter) const
|
||||
{
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
int canvasIndex = 0;
|
||||
for (auto canvas : m_loadedCanvases)
|
||||
|
||||
@@ -414,7 +414,7 @@ void UiRenderer::DebugDisplayTextureData(int recordingOption)
|
||||
return lhs.second > rhs.second;
|
||||
});
|
||||
|
||||
CDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
IDraw2d* draw2d = Draw2dHelper::GetDefaultDraw2d();
|
||||
|
||||
// setup to render lines of text for the debug display
|
||||
|
||||
|
||||
Reference in New Issue
Block a user