game view stats - closes #1094
This commit is contained in:
parent
36a64d3a4c
commit
0ead4dd116
4 changed files with 66 additions and 107 deletions
|
@ -52,6 +52,7 @@ GameView::GameView(StudioApp& app)
|
|||
, m_time_multiplier(1.0f)
|
||||
, m_paused(false)
|
||||
, m_is_opengl(false)
|
||||
, m_show_stats(false)
|
||||
, m_texture_handle(BGFX_INVALID_HANDLE)
|
||||
, m_gui_interface(nullptr)
|
||||
{
|
||||
|
@ -197,6 +198,42 @@ void GameView::setFullscreen(bool fullscreen)
|
|||
}
|
||||
|
||||
|
||||
void GameView::onStatsGUI(const ImVec2& view_pos)
|
||||
{
|
||||
if (!m_show_stats || !m_is_opened) return;
|
||||
|
||||
float toolbar_height = 24 + ImGui::GetStyle().FramePadding.y * 2;
|
||||
ImVec2 v = view_pos;
|
||||
v.x += ImGui::GetStyle().FramePadding.x;
|
||||
v.y += ImGui::GetStyle().FramePadding.y + toolbar_height;
|
||||
ImGui::SetNextWindowPos(v);
|
||||
auto col = ImGui::GetStyle().Colors[ImGuiCol_WindowBg];
|
||||
col.w = 0.3f;
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, col);
|
||||
if (ImGui::Begin("###stats_overlay",
|
||||
nullptr,
|
||||
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize |
|
||||
ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings |
|
||||
ImGuiWindowFlags_ShowBorders))
|
||||
{
|
||||
const auto& stats = m_pipeline->getStats();
|
||||
ImGui::LabelText("Draw calls", "%d", stats.draw_call_count);
|
||||
ImGui::LabelText("Instances", "%d", stats.instance_count);
|
||||
char buf[30];
|
||||
Lumix::toCStringPretty(stats.triangle_count, buf, Lumix::lengthOf(buf));
|
||||
ImGui::LabelText("Triangles", "%s", buf);
|
||||
ImGui::LabelText("Resolution", "%dx%d", m_pipeline->getWidth(), m_pipeline->getHeight());
|
||||
ImGui::LabelText("FPS", "%.2f", m_editor->getEngine().getFPS());
|
||||
ImGui::LabelText("CPU time", "%.2f", m_pipeline->getCPUTime() * 1000.0f);
|
||||
ImGui::LabelText("GPU time", "%.2f", m_pipeline->getGPUTime() * 1000.0f);
|
||||
ImGui::LabelText("Waiting for submit", "%.2f", m_pipeline->getWaitSubmitTime() * 1000.0f);
|
||||
ImGui::LabelText("Waiting for render thread", "%.2f", m_pipeline->getGPUTime() * 1000.0f);
|
||||
}
|
||||
ImGui::End();
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
|
||||
|
||||
void GameView::onGUI()
|
||||
{
|
||||
PROFILE_FUNCTION();
|
||||
|
@ -219,8 +256,11 @@ void GameView::onGUI()
|
|||
onFullscreenGUI();
|
||||
return;
|
||||
}
|
||||
ImVec2 view_pos;
|
||||
bool is_game_view_visible = false;
|
||||
if (ImGui::BeginDock(window_name, &m_is_opened))
|
||||
{
|
||||
is_game_view_visible = true;
|
||||
m_is_mouse_hovering_window = ImGui::IsMouseHoveringWindow();
|
||||
|
||||
auto content_min = ImGui::GetCursorScreenPos();
|
||||
|
@ -233,6 +273,7 @@ void GameView::onGUI()
|
|||
|
||||
auto* fb = m_pipeline->getFramebuffer("default");
|
||||
m_texture_handle = fb->getRenderbufferHandle(0);
|
||||
view_pos = ImGui::GetCursorScreenPos();
|
||||
if (m_is_opengl)
|
||||
{
|
||||
ImGui::Image(&m_texture_handle, size, ImVec2(0, 1), ImVec2(1, 0));
|
||||
|
@ -277,6 +318,8 @@ void GameView::onGUI()
|
|||
setFullscreen(true);
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Stats", &m_show_stats);
|
||||
m_pipeline->render();
|
||||
}
|
||||
|
||||
|
@ -292,4 +335,5 @@ void GameView::onGUI()
|
|||
}
|
||||
}
|
||||
ImGui::EndDock();
|
||||
if(is_game_view_visible) onStatsGUI(view_pos);
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <bgfx/bgfx.h>
|
||||
|
||||
|
||||
struct ImVec2;
|
||||
struct PlatformData;
|
||||
class StudioApp;
|
||||
|
||||
|
@ -39,6 +40,7 @@ private:
|
|||
void onUniverseDestroyed();
|
||||
void onFullscreenGUI();
|
||||
void setFullscreen(bool fullscreen);
|
||||
void onStatsGUI(const ImVec2& view_pos);
|
||||
|
||||
private:
|
||||
Lumix::Pipeline* m_pipeline;
|
||||
|
@ -55,5 +57,6 @@ private:
|
|||
bool m_paused;
|
||||
bool m_is_opengl;
|
||||
bool m_is_fullscreen;
|
||||
bool m_show_stats;
|
||||
int m_captured_mouse_x, m_captured_mouse_y;
|
||||
};
|
|
@ -969,7 +969,7 @@ public:
|
|||
serializer.write("initial_size_to", emitter->m_initial_size.to);
|
||||
serializer.write("spawn_count_from", emitter->m_spawn_count.from);
|
||||
serializer.write("spawn_count_to", emitter->m_spawn_count.to);
|
||||
Material* material = emitter->getMaterial();
|
||||
const Material* material = emitter->getMaterial();
|
||||
serializer.write("material", material ? material->getPath().c_str() : "");
|
||||
}
|
||||
|
||||
|
|
|
@ -689,16 +689,8 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
int getLayersCount() const override
|
||||
{
|
||||
return m_layers.size();
|
||||
}
|
||||
|
||||
|
||||
const char* getLayerName(int idx) const override
|
||||
{
|
||||
return m_layers[idx];
|
||||
}
|
||||
int getLayersCount() const override { return m_layers.size(); }
|
||||
const char* getLayerName(int idx) const override { return m_layers[idx]; }
|
||||
|
||||
|
||||
bool isOpenGL() const override
|
||||
|
@ -708,34 +700,11 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
ModelManager& getModelManager() override
|
||||
{
|
||||
return m_model_manager;
|
||||
}
|
||||
|
||||
|
||||
MaterialManager& getMaterialManager() override
|
||||
{
|
||||
return m_material_manager;
|
||||
}
|
||||
|
||||
|
||||
TextureManager& getTextureManager() override
|
||||
{
|
||||
return m_texture_manager;
|
||||
}
|
||||
|
||||
|
||||
const bgfx::VertexDecl& getBasicVertexDecl() const override
|
||||
{
|
||||
return m_basic_vertex_decl;
|
||||
}
|
||||
|
||||
|
||||
const bgfx::VertexDecl& getBasic2DVertexDecl() const override
|
||||
{
|
||||
return m_basic_2d_vertex_decl;
|
||||
}
|
||||
ModelManager& getModelManager() override { return m_model_manager; }
|
||||
MaterialManager& getMaterialManager() override { return m_material_manager; }
|
||||
TextureManager& getTextureManager() override { return m_texture_manager; }
|
||||
const bgfx::VertexDecl& getBasicVertexDecl() const override { return m_basic_vertex_decl; }
|
||||
const bgfx::VertexDecl& getBasic2DVertexDecl() const override { return m_basic_2d_vertex_decl; }
|
||||
|
||||
|
||||
void createScenes(Universe& ctx) override
|
||||
|
@ -745,28 +714,19 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
void destroyScene(IScene* scene) override
|
||||
{
|
||||
RenderScene::destroyInstance(static_cast<RenderScene*>(scene));
|
||||
}
|
||||
|
||||
|
||||
void destroyScene(IScene* scene) override { RenderScene::destroyInstance(static_cast<RenderScene*>(scene)); }
|
||||
const char* getName() const override { return "renderer"; }
|
||||
|
||||
|
||||
Engine& getEngine() override { return m_engine; }
|
||||
|
||||
|
||||
int getShaderDefinesCount() const override
|
||||
{
|
||||
return m_shader_defines.size();
|
||||
}
|
||||
|
||||
|
||||
const char* getShaderDefine(int define_idx) override
|
||||
{
|
||||
return m_shader_defines[define_idx];
|
||||
}
|
||||
int getShaderDefinesCount() const override { return m_shader_defines.size(); }
|
||||
const char* getShaderDefine(int define_idx) override { return m_shader_defines[define_idx]; }
|
||||
const char* getPassName(int idx) override { return m_passes[idx]; }
|
||||
const bgfx::UniformHandle& getMaterialColorUniform() const override { return m_mat_color_uniform; }
|
||||
const bgfx::UniformHandle& getRoughnessMetallicUniform() const override { return m_roughness_metallic_uniform; }
|
||||
void makeScreenshot(const Path& filename) override { bgfx::saveScreenShot(filename.c_str()); }
|
||||
void resize(int w, int h) override { bgfx::reset(w, h); }
|
||||
int getViewCounter() const override { return m_view_counter; }
|
||||
void viewCounterAdd() override { ++m_view_counter; }
|
||||
Shader* getDefaultShader() override { return m_default_shader; }
|
||||
|
||||
|
||||
u8 getShaderDefineIdx(const char* define) override
|
||||
|
@ -785,12 +745,6 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
const char* getPassName(int idx) override
|
||||
{
|
||||
return m_passes[idx];
|
||||
}
|
||||
|
||||
|
||||
int getPassIdx(const char* pass) override
|
||||
{
|
||||
for (int i = 0; i < m_passes.size(); ++i)
|
||||
|
@ -806,30 +760,6 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
const bgfx::UniformHandle& getMaterialColorUniform() const override
|
||||
{
|
||||
return m_mat_color_uniform;
|
||||
}
|
||||
|
||||
|
||||
const bgfx::UniformHandle& getRoughnessMetallicUniform() const override
|
||||
{
|
||||
return m_roughness_metallic_uniform;
|
||||
}
|
||||
|
||||
|
||||
void makeScreenshot(const Path& filename) override
|
||||
{
|
||||
bgfx::saveScreenShot(filename.c_str());
|
||||
}
|
||||
|
||||
|
||||
void resize(int w, int h) override
|
||||
{
|
||||
bgfx::reset(w, h);
|
||||
}
|
||||
|
||||
|
||||
void frame(bool capture) override
|
||||
{
|
||||
PROFILE_FUNCTION();
|
||||
|
@ -838,24 +768,6 @@ struct RendererImpl LUMIX_FINAL : public Renderer
|
|||
}
|
||||
|
||||
|
||||
int getViewCounter() const override
|
||||
{
|
||||
return m_view_counter;
|
||||
}
|
||||
|
||||
|
||||
void viewCounterAdd() override
|
||||
{
|
||||
++m_view_counter;
|
||||
}
|
||||
|
||||
|
||||
Shader* getDefaultShader() override
|
||||
{
|
||||
return m_default_shader;
|
||||
}
|
||||
|
||||
|
||||
using ShaderDefine = StaticString<32>;
|
||||
using Layer = StaticString<32>;
|
||||
|
||||
|
|
Loading…
Reference in a new issue