nuclear@0: #include nuclear@0: #include "scr_debug.h" nuclear@0: #include "opengl.h" nuclear@0: #include "unistate.h" nuclear@0: #include "sdrman.h" nuclear@0: #include "game.h" nuclear@0: #include "drawtext/drawtext.h" nuclear@0: #include "datapath.h" nuclear@0: #include "logger.h" nuclear@0: #include "timer.h" nuclear@0: #include "scr_game.h" nuclear@0: #include "gfxutil.h" nuclear@0: nuclear@0: static ShaderProg *sdr, *color_sdr; nuclear@0: static struct dtx_font *font; nuclear@0: nuclear@0: const char *DebugScreen::get_name() const nuclear@0: { nuclear@0: return "DebugScreen"; nuclear@0: } nuclear@0: nuclear@0: #define FONT_FILENAME "consolas.ttf" nuclear@0: #define FONT_SIZE 20 nuclear@0: nuclear@0: bool DebugScreen::init() nuclear@0: { nuclear@0: if(!(sdr = get_sdrprog("font.v.glsl", "font.p.glsl"))) { nuclear@0: return false; nuclear@0: } nuclear@0: int vattr = sdr->get_attrib_location("attr_vertex"); nuclear@0: int tcattr = sdr->get_attrib_location("attr_texcoord"); nuclear@0: assert(vattr != -1 && tcattr != -1); nuclear@0: nuclear@0: dtx_vertex_attribs(vattr, tcattr); nuclear@0: nuclear@0: if(!(font = dtx_open_font(datafile_path(FONT_FILENAME).c_str(), FONT_SIZE))) { nuclear@0: return false; nuclear@0: } nuclear@0: nuclear@0: if(!(color_sdr = get_sdrprog("color.v.glsl", "color.p.glsl"))) { nuclear@0: return false; nuclear@0: } nuclear@0: return true; nuclear@0: } nuclear@0: nuclear@0: void DebugScreen::cleanup() nuclear@0: { nuclear@0: delete sdr; nuclear@0: dtx_close_font(font); nuclear@0: } nuclear@0: nuclear@0: void DebugScreen::display() const nuclear@0: { nuclear@0: OverlayScreen::display(); // this will draw the previous screen nuclear@0: nuclear@0: static unsigned long frame; nuclear@0: static unsigned long prev_tm; nuclear@0: unsigned long tm = get_time_msec(); nuclear@0: static char fps_text[64]; nuclear@0: nuclear@0: frame++; nuclear@0: unsigned long interval = tm - prev_tm; nuclear@0: if(interval >= 1000) { nuclear@0: float fps = (float)frame / ((float)interval / 1000.0f); nuclear@0: sprintf(fps_text, "fps: %.1f", fps); nuclear@0: nuclear@0: frame = 0; nuclear@0: prev_tm = tm; nuclear@0: } nuclear@0: nuclear@0: Matrix4x4 mat; nuclear@0: mat.set_translation(Vector3(5, get_screen_height() - 20, 0)); nuclear@0: set_world_matrix(mat); nuclear@0: nuclear@0: set_unistate("st_color", Vector4(1, 1, 0, 1)); nuclear@0: nuclear@0: sdr->bind(); nuclear@0: nuclear@0: dtx_use_font(font, FONT_SIZE); nuclear@0: dtx_string(fps_text); nuclear@0: dtx_flush(); nuclear@0: }