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 kMaxFanVertices = 2 + 4 * (kCornerSegments + 1); // 38
27#if PLATFORM_MAC
28 // MoltenVK/Metal has no triangle-fan topology, so GenerateRoundedFan
29 // expands the fan into a triangle list: (n - 2) triangles for n fan verts.
30 static constexpr bool kExpandFanToList = true;
31 static constexpr int32_t kMaxQuadVertices = 3 * (kMaxFanVertices - 2);
32#else
33 static constexpr bool kExpandFanToList = false;
34 static constexpr int32_t kMaxQuadVertices = kMaxFanVertices;
35#endif
36
37 friend class Button;
38
39 Quad();
40 virtual ~Quad();
41
42 virtual void Create() override;
43 virtual void Destroy() override;
44
45 QuadResource* GetResource();
46
47 virtual void GatherProperties(std::vector<Property>& outProps) override;
48 void GatherQuadProperties(std::vector<Property>& outProps);
49
50 virtual DrawData GetDrawData() override;
51
52 virtual void Render() override;
53 virtual void PreRender() override;
54
55 void SetTexture(class Texture* texture);
56 Texture* GetTexture();
57
58 virtual void SetColor(glm::vec4 color) override;
59
60 void SetColor(glm::vec4 colors[4]);
61 void SetColor(glm::vec4 topLeft,
62 glm::vec4 topRight,
63 glm::vec4 bottomLeft,
64 glm::vec4 bottomRight);
65
66 void SetUvScale(glm::vec2 scale);
67 glm::vec2 GetUvScale() const;
68
69 void SetUvOffset(glm::vec2 offset);
70 glm::vec2 GetUvOffset() const;
71
72 void SetObjectFit(ObjectFit fit);
73 ObjectFit GetObjectFit() const;
74
75 void SetCornerRadius(float radius);
76 float GetCornerRadius() const;
77
78 void SetBorderWidth(float width);
79 float GetBorderWidth() const;
80
81 void SetBorderColor(glm::vec4 color);
82 glm::vec4 GetBorderColor() const;
83
84 VertexUI* GetVertices();
85 uint32_t GetNumVertices() const;
86
87 QuadResource* GetBorderResource();
88 VertexUI* GetBorderVertices();
89 uint32_t GetBorderNumVertices() const;
90
91#if EDITOR
92 virtual bool DrawCustomProperty(Property& prop) override;
93#endif
94
95protected:
96
97 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
98
99 void InitVertexData();
100 void UpdateVertexData();
101 void UpdateBorders();
102
103 static uint32_t GenerateRoundedFan(
104 VertexUI* outVertices,
105 float posX, float posY, float posW, float posH,
106 float cornerRadius,
107 float uvX0, float uvY0, float uvX1, float uvY1);
108
110 VertexUI mVertices[kMaxQuadVertices];
111 uint32_t mNumVertices = 0;
112
113 glm::vec2 mUvScale;
114 glm::vec2 mUvOffset;
116 float mCornerRadius = 0.0f;
117
118 float mBorderWidth = 0.0f;
119 glm::vec4 mBorderColor = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
120
121 // Border geometry (rendered as background pad behind main quad)
122 VertexUI mBorderVertices[kMaxQuadVertices];
123 uint32_t mBorderNumVertices = 0;
125 bool mBorderResourceCreated = false;
126
127 // Graphics Resource
129};
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
ObjectFit
Definition Quad.h:11
Definition AssetRef.h:18
Definition Button.h:21
Definition Datum.h:169
virtual DrawData GetDrawData()
Definition Node.cpp:1572
virtual void Create()
Definition Node.cpp:235
virtual void Destroy()
Definition Node.cpp:249
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:109
glm::vec2 mUvOffset
Definition Quad.h:114
QuadResource mResource
Definition Quad.h:128
QuadResource mBorderResource
Definition Quad.h:124
glm::vec2 mUvScale
Definition Quad.h:113
Definition Texture.h:10
Definition Widget.h:57
virtual void SetColor(glm::vec4 color)
Definition Widget.cpp:1126
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Widget.cpp:50
virtual void Render() override
Definition Widget.cpp:164
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Widget.cpp:121
virtual void PreRender()
Definition Widget.cpp:232
Definition EngineTypes.h:333
Definition GraphicsTypes.h:314
Definition Vertex.h:37