X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fscreen.h;h=ddcf8cace42c35083c763c874250fcd2009c7a63;hp=8452efcb76908f0e479f8e6a8552d267b4e31aef;hb=bdda0103bf26d215d41093316ca0e15cd67fec1d;hpb=e6c66a8e58f1dda071e6fc4abed39afe49d348f8 diff --git a/src/screen.h b/src/screen.h index 8452efc..ddcf8ca 100644 --- a/src/screen.h +++ b/src/screen.h @@ -5,6 +5,9 @@ #include +#include "stb_truetype.h" +#include "graphicsbuffer.h" + namespace IPDF { /* @@ -20,12 +23,21 @@ namespace IPDF // Returns 'false' if the program should quit. bool PumpEvents(); + // Clears the screen to a given colour. + void Clear(float r=1.0, float g=1.0, float b=1.0, float a=1.0); + // Finishes rendering a frame, and presents it on the screen. void Present(); // Get the current width/height of the window's viewport. - int ViewportWidth() { return m_viewport_width; } - int ViewportHeight() { return m_viewport_height; } + int ViewportWidth() const { return m_viewport_width; } + int ViewportHeight() const { return m_viewport_height; } + + // Debug Font handling + void DebugFontInit(const char *font_name, float font_size = 12); + void DebugFontClear(); + void DebugFontPrint(const char *str); + void DebugFontPrintF(const char *fmt, ...); // Handle mouse input. typedef std::function MouseHandler; @@ -43,15 +55,30 @@ namespace IPDF CursorHand }; void SetMouseCursor(MouseCursors cursor); + + void ScreenShot(const char * filename) const; + void RenderBMP(const char * filename) const; private: void ResizeViewport(int width, int height); + void DebugFontFlush(); MouseHandler m_mouse_handler; + int m_last_mouse_x; + int m_last_mouse_y; int m_viewport_width; int m_viewport_height; SDL_Window *m_window; SDL_GLContext m_gl_context; + stbtt_bakedchar m_debug_font_rects[96]; + unsigned int m_debug_font_atlas; + float m_debug_font_x; + float m_debug_font_y; + float m_debug_font_size; + GraphicsBuffer m_debug_font_vertices; + GraphicsBuffer m_debug_font_indices; + int m_debug_font_vertex_head; + int m_debug_font_index_head; }; }