[Add] Debug overlay and UI fixes.
- Real time on-screen debug overlay to display performance metrics. Overlay can be toggled with C-d. [Fixed] - Corrects a "click-through" bug by implementing Z-ordering for window stack. - Decouples taskbar from window z-order to provide a stable button layout that isn't affected by focus changes. - Adds culling to the terminal history view to prevent rendering off-screen lines.
This commit is contained in:
		
							parent
							
								
									d37f632344
								
							
						
					
					
						commit
						1cbf8ff0d8
					
				
							
								
								
									
										52
									
								
								client/src/debug/debug_overlay.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								client/src/debug/debug_overlay.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
 | 
			
		||||
#include "debug_overlay.h"
 | 
			
		||||
#include "ui/ui_renderer.h"
 | 
			
		||||
#include "gfx/types.h"
 | 
			
		||||
 | 
			
		||||
DebugOverlay::DebugOverlay(void) :
 | 
			
		||||
    _fps(0.0f),
 | 
			
		||||
    _frame_time(0.0f),
 | 
			
		||||
    _draw_calls(0),
 | 
			
		||||
    _shape_vertices(0),
 | 
			
		||||
    _text_vertices(0),
 | 
			
		||||
    _update_timer(0.0f) {}
 | 
			
		||||
 | 
			
		||||
void DebugOverlay::update(float dt, int draw_calls, int shape_verts, int txt_verts) {
 | 
			
		||||
  _update_timer += dt;
 | 
			
		||||
  /* Only update a few times per sec to keep them readable. */
 | 
			
		||||
  if(_update_timer > 0.2f) {
 | 
			
		||||
    _update_timer     = 0.0f;
 | 
			
		||||
    _frame_time       = dt * 1000.0f;
 | 
			
		||||
    _fps              = 1.0f / dt;
 | 
			
		||||
    _draw_calls       = draw_calls;
 | 
			
		||||
    _shape_vertices   = shape_verts;
 | 
			
		||||
    _text_vertices    = txt_verts;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DebugOverlay::render(UIRenderer* ui_renderer) {
 | 
			
		||||
  const Color text_color  = { 0.0f, 1.0f, 0.0f }; /* Bright green. */
 | 
			
		||||
  const float line_height = 18.0f;
 | 
			
		||||
  const float padding     = 5.0f;
 | 
			
		||||
 | 
			
		||||
  char buffer[256];
 | 
			
		||||
 | 
			
		||||
  /* Manages its own rendering batch. */
 | 
			
		||||
  ui_renderer->begin_shapes();
 | 
			
		||||
  ui_renderer->begin_text();
 | 
			
		||||
 | 
			
		||||
  snprintf(buffer, sizeof(buffer), "FPS: %.0f (%.2f ms)", _fps, _frame_time);
 | 
			
		||||
  ui_renderer->render_text(buffer, padding, padding+line_height*1, text_color);
 | 
			
		||||
 | 
			
		||||
  snprintf(buffer, sizeof(buffer), "Draw Calls: %d", _draw_calls);
 | 
			
		||||
  ui_renderer->render_text(buffer, padding, padding+line_height*2, text_color);
 | 
			
		||||
 | 
			
		||||
  snprintf(buffer, sizeof(buffer), "Vertices: %d (Shape %d, Text: %d)",
 | 
			
		||||
           _shape_vertices + _text_vertices, _shape_vertices, _text_vertices);
 | 
			
		||||
  ui_renderer->render_text(buffer, padding, padding+line_height*3, text_color);
 | 
			
		||||
 | 
			
		||||
  ui_renderer->flush_shapes();
 | 
			
		||||
  ui_renderer->flush_text();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								client/src/debug/debug_overlay.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								client/src/debug/debug_overlay.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
class UIRenderer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Renders real-time performance metrics on screen.
 | 
			
		||||
 */
 | 
			
		||||
class DebugOverlay {
 | 
			
		||||
public:
 | 
			
		||||
  DebugOverlay(void);
 | 
			
		||||
 | 
			
		||||
  void update(float dt, int draw_calls, int shape_verts, int txt_verts);
 | 
			
		||||
  void render(UIRenderer* ui_renderer);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  float _fps;
 | 
			
		||||
  float _frame_time;
 | 
			
		||||
  int _draw_calls;
 | 
			
		||||
  int _shape_vertices;
 | 
			
		||||
  int _text_vertices;
 | 
			
		||||
 | 
			
		||||
  /* Oh? You want to be able to read the stats?! */
 | 
			
		||||
  float _update_timer;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										5
									
								
								client/src/debug/debug_stats.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								client/src/debug/debug_stats.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
#include "debug_stats.h"
 | 
			
		||||
 | 
			
		||||
int DebugStats::draw_calls      = 0;
 | 
			
		||||
int DebugStats::shape_vertices  = 0;
 | 
			
		||||
int DebugStats::text_vertices   = 0;
 | 
			
		||||
							
								
								
									
										14
									
								
								client/src/debug/debug_stats.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								client/src/debug/debug_stats.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
struct DebugStats {
 | 
			
		||||
  static int draw_calls;
 | 
			
		||||
  static int shape_vertices;
 | 
			
		||||
  static int text_vertices;
 | 
			
		||||
 | 
			
		||||
  static void reset(void) {
 | 
			
		||||
    draw_calls      = 0;
 | 
			
		||||
    shape_vertices  = 0;
 | 
			
		||||
    text_vertices   = 0;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user