SpiecsEngine
 
Loading...
Searching...
No Matches

◆ OnRender()

void Spices::ImguiVideoMemoryRuntimeHUD::OnRender ( )
overridevirtual

This interface is called On SlateRenderer Render.

Instance a VkPhysicalDeviceMemoryBudgetPropertiesEXT.

Instance a VkPhysicalDeviceMemoryProperties2.

Query memory data this frame.

Begin render VideoMemoryRuntimeHUD.

Search String.

Begin render Search Input Text.

End render VideoMemoryRuntimeHUD.

Instance a VkPhysicalDeviceMemoryBudgetPropertiesEXT.

Instance a VkPhysicalDeviceMemoryProperties2.

Query memory data this frame.

Begin render VideoMemoryRuntimeHUD.

Search String.

Begin render Search Input Text.

End render VideoMemoryRuntimeHUD.

Implements Spices::ImguiSlate.

Definition at line 21 of file ImguiVideoMemoryRuntimeHUD.cpp.

22 {
24
25 if (!m_IsSlateOn) return;
26
30 VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties{};
31 memoryBudgetProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
32 memoryBudgetProperties.pNext = nullptr;
33
37 VkPhysicalDeviceMemoryProperties2 memoryProperties{};
38 memoryProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
39 memoryProperties.pNext = &memoryBudgetProperties;
40
44 vkGetPhysicalDeviceMemoryProperties2(VulkanRenderBackend::GetState().m_PhysicalDevice, &memoryProperties);
45
46 uint64_t nHeaps = memoryProperties.memoryProperties.memoryHeapCount;
47 VkDeviceSize usage = 0;
48 VkDeviceSize budget = 0;
49
50 for (uint64_t i = 0; i < nHeaps; i++)
51 {
52 usage += memoryBudgetProperties.heapUsage[i];
53 budget += memoryBudgetProperties.heapBudget[i];
54 }
55
59 Begin();
60
61 ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2.0f, 4.0f));
62
66 static std::string searchString;
67 static bool isEnableSearch = false;
68
72 {
73 SPICES_PROFILE_ZONEN("ImguiVideoMemoryRuntimeHUD::Search");
74
75 ImGui::Spacing();
76 ImGui::PushItemWidth(m_PanelSize.x - ImGuiH::GetLineItemSize().x * 2.0f - ImGui::GetStyle().WindowPadding.x);
77 static char search[256] = {};
78 if (ImGui::InputTextWithHint("##", ICON_TEXT(ICON_MD_SEARCH, Search), search, 128))
79 {
80 searchString = std::string(search);
81 if (searchString.size() == 0) isEnableSearch = false;
82 else isEnableSearch = true;
83 }
84 ImGui::PopItemWidth();
85
86 ImGui::SameLine(m_PanelSize.x - ImGuiH::GetLineItemSize().x * 2.0f);
87 ImGui::Button(ICON_MD_FILTER_ALT, ImGuiH::GetLineItemSize());
88 ImGui::SameLine(m_PanelSize.x - ImGuiH::GetLineItemSize().x * 1.0f);
89 ImGui::Button(ICON_MD_REORDER, ImGuiH::GetLineItemSize());
90 ImGui::Spacing();
91 }
92
93 float columeWidth = ImGuiH::GetLineItemSize().x * 6.5f;
94
95 {
96 SPICES_PROFILE_ZONEN("ImguiVideoMemoryRuntimeHUD::Total");
97
98 ImGuiH::DrawTreeTitle("Memory Total", nullptr, [&]() {
99 ImGuiH::DrawPropertyItem("Usage:", columeWidth, nullptr, [&]() {
100 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
101 char buffer[256] = {};
102 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", ConvertBytestoString(usage).c_str()), buffer, sizeof(buffer));
103 ImGui::PopItemWidth();
104 ImGui::SameLine();
106 });
107 ImGuiH::DrawPropertyItem("Budget:", columeWidth, nullptr, [&]() {
108 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
109 char buffer[256] = {};
110 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", ConvertBytestoString(budget).c_str()), buffer, sizeof(buffer));
111 ImGui::PopItemWidth();
112 ImGui::SameLine();
114 });
115 ImGuiH::DrawPropertyItem("Heap Count:", columeWidth, nullptr, [&]() {
116 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
117 char buffer[256] = {};
118 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", std::to_string(nHeaps).c_str()), buffer, sizeof(buffer));
119 ImGui::PopItemWidth();
120 ImGui::SameLine();
122 });
123 });
124 }
125
126 {
127 SPICES_PROFILE_ZONEN("ImguiVideoMemoryRuntimeHUD::Heaps");
128
129 for (int i = 0; i < nHeaps; i++)
130 {
131 std::stringstream s;
132 s << "Memory Heap Index: " << i;
133
134 ImGuiH::DrawTreeTitle(s.str(), nullptr, [&]() {
135 ImGuiH::DrawPropertyItem("Usage:", columeWidth, nullptr, [&]() {
136 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
137 char buffer[256] = {};
138 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", ConvertBytestoString(memoryBudgetProperties.heapUsage[i]).c_str()), buffer, sizeof(buffer));
139 ImGui::PopItemWidth();
140 ImGui::SameLine();
141 ImGuiH::DrawResetIcon(false);
142 });
143 ImGuiH::DrawPropertyItem("Budget:", columeWidth, nullptr, [&]() {
144 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
145 char buffer[256] = {};
146 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", ConvertBytestoString(memoryBudgetProperties.heapBudget[i]).c_str()), buffer, sizeof(buffer));
147 ImGui::PopItemWidth();
148 ImGui::SameLine();
150 });
151 ImGuiH::DrawPropertyItem("Heap Count:", columeWidth, nullptr, [&]() {
152 ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - ImGuiH::GetLineItemSize().x);
153 char buffer[256] = {};
154 ImGui::InputTextWithHint("##", ICON_TEXT_ROW(" ", ConvertMemoryFlagtoString(memoryProperties.memoryProperties.memoryHeaps[i].flags).c_str()), buffer, sizeof(buffer));
155 ImGui::PopItemWidth();
156 ImGui::SameLine();
158 });
159 });
160 }
161 }
162
163 ImGui::PopStyleVar();
164
168 End();
169 }
#define ICON_TEXT(icon, text)
Definition ImguiHelper.h:24
#define ICON_TEXT_ROW(icon, text)
Definition ImguiHelper.h:25
#define SPICES_PROFILE_ZONEN(...)
#define SPICES_PROFILE_ZONE
static ImVec2 GetLineItemSize()
Get Line Width's Square Size.
static bool DrawResetIcon(const bool &isMove)
Draw Reset Icon.
static void DrawPropertyItem(const std::string &itemName, float columeWidth, std::function< void()> nameFunc, std::function< void()> valFunc)
Draw a single property.
static void DrawTreeTitle(const std::string &treeName, std::function< void()> optionFunc, std::function< void()> treeFunc)
Draw a stylized tree title bar.
void Begin(float alpha=1.0f, ImGuiWindowFlags flags=0)
Begin a common slate.
void End()
End a slate.
ImVec2 m_PanelSize
This slate's size.
Definition ImguiUtils.h:151
std::string ConvertBytestoString(uint64_t bytes)
Convert bytes to string(GB/MB/KB).
std::string ConvertMemoryFlagtoString(VkMemoryHeapFlags flag)
Convert memory flags to string.
static VulkanState & GetState()
Get VulkanState in use.
std::string to_string(GFSDK_Aftermath_Result result)
Convert GFSDK_Aftermath_Result to string.

References Spices::ImGuiH::DrawPropertyItem(), Spices::ImGuiH::DrawResetIcon(), Spices::ImGuiH::DrawTreeTitle(), Spices::ImguiSlate::End(), and Spices::ImguiSlate::m_IsSlateOn.