- Mesaj
- 1.038
- Çözümler
- 37
- Beğeni
- 1.111
- Puan
- 1.339
- Ticaret Puanı
- 0
ImGUI öğreniyorum ve ilk denemem olarak oyun için FPS ve Frametime takibini kolaylaştırmak için bu fonksiyonu yazdım(Coğunu ChatGPT yazdı tabi ).
Clientinizde ImGUI Kütüphane Desteği ekli olmalı:
Malinin paylaşmış olduğu bir sistemdir. Kendisine topluluğa katkılarından dolayı teşekkür ederim. Clientinize imgui kütüphanesi için destek sağlar. Aşağıda ne işe yaradığını örnekteki videoda görebilirsiniz.
Kütüphane hakkındaki bilgileri şuraya bakarak detaylıca öğrenebilirsiniz.
Fakat mali kendinize nasıl buton oluşturabilirsiniz nasıl aç kapa yapabilirsiniz gibi bir örnek vermemiş...
Kütüphane hakkındaki bilgileri şuraya bakarak detaylıca öğrenebilirsiniz.
Kod:
https://github.com/ocornut/imgui/
https://github.com/ocornut/imgui/wiki/Sponsors
https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui
https://github.com/ocornut/imgui/issues/6478
Fakat mali kendinize nasıl buton oluşturabilirsiniz nasıl aç kapa yapabilirsiniz gibi bir örnek vermemiş...
- hasanmacit
- Yanıt: 2
- Forum: C++ / C# / Python
C++:
// Fonksiyonu ara:
void M2ImguiManager::Render()
// Bul:
ImGui::End();
// Altına ekle:
/* Render the FPS graph window */
RenderFpsLineGraph();
Imguimanager.cpp içinde yeni fonksiyonu ekle:
void M2ImguiManager::RenderFpsLineGraph()
{
static float fpsValue = 0.0f; /* Store the last updated framerate value */
static std::vector<float> fpsHistory(100, 0.0f); /* Stores the last 100 FPS values */
static int fpshistoryIndex = 0;
static float frametimeValue = 0.0f; /* Store the last updated frametime value */
static std::vector<float> frametimeHistory(100, 0.0f); /* Stores the last 100 FPS values */
static int frametimehistoryIndex = 0;
const ImGuiIO& io = ImGui::GetIO();
/* Using std::chrono to update the fps and frametime slower.
updates are way too fast without this */
static auto lastUpdate = std::chrono::steady_clock::now();
constexpr std::chrono::duration<float> updateInterval{ 1.0f }; /* Update every 1 second */
auto now = std::chrono::steady_clock::now();
/* Update FPS and frametime values every 0.5 seconds */
if (now - lastUpdate >= updateInterval)
{
fpsValue = io.Framerate;
frametimeValue = 1000.0f / io.Framerate;
/* Update frametime history */
frametimeHistory[frametimehistoryIndex] = frametimeValue;
frametimehistoryIndex = (frametimehistoryIndex + 1) % frametimeHistory.size();
/* Update FPS history */
fpsHistory[fpshistoryIndex] = fpsValue;
fpshistoryIndex = (fpshistoryIndex + 1) % fpsHistory.size();
lastUpdate = now; /* Reset the update timer */
}
/* Create a new window for the FPS graph */
ImGui::Begin("FPS Monitor");
/* Draw frametime graph */
ImGui::Text("Frametime: %.1f ms", frametimeValue);
ImGui::PlotLines(
"", /* Optional label */
frametimeHistory.data(), /* Data source */
frametimeHistory.size(), /* Number of data points */
frametimehistoryIndex, /* Offset for the circular buffer */
nullptr, /* Overlay text (optional) */
0.0f, /* Minimum scale value */
*std::max_element(frametimeHistory.begin(), frametimeHistory.end()), /* Dynamic max scale */
ImVec2(0, 80.0f) /* Size(width = auto, height = 80 pixels) */
);
/* Draw FPS graph */
ImGui::Text("FPS: %.1f", fpsValue);
ImGui::PlotLines(
"", /* Optional label */
fpsHistory.data(), /* Data source */
fpsHistory.size(), /* Number of data points */
fpshistoryIndex, /* Offset for the circular buffer */
nullptr, /* Overlay text (optional) */
0.0f, /* Minimum scale value */
*std::max_element(fpsHistory.begin(), fpsHistory.end()), /* Dynamic max scale */
ImVec2(0, 80.0f) /* Size(width = auto, height = 80 pixels) */
);
ImGui::End();
}
Imguimanager.h:
// Ara:
void Render();
// Altına ekle:
void RenderFpsLineGraph();
Son düzenleme: