Polyphase Game Engine
Loading...
Searching...
No Matches
Quad.h
Go to the documentation of this file.
1#pragma once
2
4#include "Assets/Texture.h"
5#include "Vertex.h"
6#include "AssetRef.h"
7
8#include "glm/glm.hpp"
9
10enum class ObjectFit : uint8_t
11{
12 Fill,
13 Contain,
14 Cover,
15 None,
16 Count
17};
18
20{
21public:
22
24
25 static constexpr int32_t kCornerSegments = 8;
26 static constexpr int32_t kMaxQuadVertices = 2 + 4 * (kCornerSegments + 1); // 38
27
28 friend class Button;
29
30 Quad();
31 virtual ~Quad();
32
33 virtual void Create() override;
34 virtual void Destroy() override;
35
36 QuadResource* GetResource();
37
38 virtual void GatherProperties(std::vector<Property>& outProps) override;
39 void GatherQuadProperties(std::vector<Property>& outProps);
40
41 virtual DrawData GetDrawData() override;
42
43 virtual void Render() override;
44 virtual void PreRender() override;
45
46 void SetTexture(class Texture* texture);
47 Texture* GetTexture();
48
49 virtual void SetColor(glm::vec4 color) override;
50
51 void SetColor(glm::vec4 colors[4]);
52 void SetColor(glm::vec4 topLeft,
53 glm::vec4 topRight,
54 glm::vec4 bottomLeft,
55 glm::vec4 bottomRight);
56
57 void SetUvScale(glm::vec2 scale);
58 glm::vec2 GetUvScale() const;
59
60 void SetUvOffset(glm::vec2 offset);
61 glm::vec2 GetUvOffset() const;
62
63 void SetObjectFit(ObjectFit fit);
64 ObjectFit GetObjectFit() const;
65
66 void SetCornerRadius(float radius);
67 float GetCornerRadius() const;
68
69 void SetBorderWidth(float width);
70 float GetBorderWidth() const;
71
72 void SetBorderColor(glm::vec4 color);
73 glm::vec4 GetBorderColor() const;
74
75 VertexUI* GetVertices();
76 uint32_t GetNumVertices() const;
77
78 QuadResource* GetBorderResource();
79 VertexUI* GetBorderVertices();
80 uint32_t GetBorderNumVertices() const;
81
82#if EDITOR
83 virtual bool DrawCustomProperty(Property& prop) override;
84#endif
85
86protected:
87
88 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
89
90 void InitVertexData();
91 void UpdateVertexData();
92 void UpdateBorders();
93
94 static uint32_t GenerateRoundedFan(
95 VertexUI* outVertices,
96 float posX, float posY, float posW, float posH,
97 float cornerRadius,
98 float uvX0, float uvY0, float uvX1, float uvY1);
99
101 VertexUI mVertices[kMaxQuadVertices];
102 uint32_t mNumVertices = 0;
103
104 glm::vec2 mUvScale;
105 glm::vec2 mUvOffset;
107 float mCornerRadius = 0.0f;
108
109 float mBorderWidth = 0.0f;
110 glm::vec4 mBorderColor = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
111
112 // Border geometry (rendered as background pad behind main quad)
113 VertexUI mBorderVertices[kMaxQuadVertices];
114 uint32_t mBorderNumVertices = 0;
116 bool mBorderResourceCreated = false;
117
118 // Graphics Resource
120};
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
ObjectFit
Definition Quad.h:11
Definition AssetRef.h:18
Definition Button.h:21
Definition Datum.h:164
virtual DrawData GetDrawData()
Definition Node.cpp:1518
virtual void Create()
Definition Node.cpp:220
virtual void Destroy()
Definition Node.cpp:234
virtual bool DrawCustomProperty(Property &prop)
Definition Object.h:46
Definition Property.h:14
Definition Quad.h:20
DECLARE_NODE(Quad, Widget)
TextureRef mTexture
Definition Quad.h:100
glm::vec2 mUvOffset
Definition Quad.h:105
QuadResource mResource
Definition Quad.h:119
QuadResource mBorderResource
Definition Quad.h:115
glm::vec2 mUvScale
Definition Quad.h:104
Definition Texture.h:10
Definition Widget.h:53
virtual void SetColor(glm::vec4 color)
Definition Widget.cpp:869
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Widget.cpp:45
virtual void Render() override
Definition Widget.cpp:158
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Widget.cpp:115
virtual void PreRender()
Definition Widget.cpp:226
Definition EngineTypes.h:199
Definition GraphicsTypes.h:274
Definition Vertex.h:37