X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fscreen.h;h=bdadd8e9ad84326d5b37d61bf83e340ff7311ae8;hb=667281b828c8515e995c0000706157cee180fa08;hp=d918dd1afc2a9fd0b604b46468939d1e4c247c7f;hpb=a851cf197844a2eb15fd5ee2c350ee296e415dca;p=ipdf%2Fcode.git diff --git a/src/screen.h b/src/screen.h index d918dd1..bdadd8e 100644 --- a/src/screen.h +++ b/src/screen.h @@ -1,7 +1,7 @@ #ifndef _SCREEN_H #define _SCREEN_H -#include +#include "SDL.h" #include @@ -11,13 +11,14 @@ namespace IPDF { + class View; /* * The "Screen" class handles managing the OS window (using SDL2). */ class Screen { public: - Screen(); + Screen(bool visible = true); ~Screen(); // 'Pumps' the system event queue. @@ -41,7 +42,7 @@ namespace IPDF void DebugFontPrintF(const char *fmt, ...); // Handle mouse input. - typedef std::function MouseHandler; + typedef void(*MouseHandler)(int x, int y, int button, int wheel, Screen * scr, View * view); void SetMouseHandler(MouseHandler handler) { m_mouse_handler = handler; @@ -59,6 +60,23 @@ namespace IPDF void ScreenShot(const char * filename) const; void RenderBMP(const char * filename) const; + void RenderPixels(int x, int y, int w, int h, uint8_t * pixels) const; + + + void SetView(View * new_view) {m_view = new_view;} + + // Returns the CPU time (in seconds) it took to render the last completed frame. + double GetLastFrameTimeCPU() const { return m_last_frame_time / SDL_GetPerformanceFrequency(); } + // Returns the GPU time (in seconds) it took to render the last completed frame. + double GetLastFrameTimeGPU() const; + + void RequestQuit() {m_no_quit_requested = false;} + bool QuitRequested() const {return !m_no_quit_requested;} + + void ShowDebugFont(bool show = true) {m_show_debug_font = show;} + bool DebugFontShown() const {return m_show_debug_font;} + + bool Valid() const {return m_window != NULL;} private: void ResizeViewport(int width, int height); void DebugFontFlush(); @@ -67,11 +85,17 @@ namespace IPDF int m_last_mouse_x; int m_last_mouse_y; + double m_last_frame_time; + double m_frame_begin_time; + GLuint m_frame_gpu_timer; + GLuint m_last_frame_gpu_timer; + int m_viewport_width; int m_viewport_height; SDL_Window *m_window; SDL_GLContext m_gl_context; ShaderProgram m_texture_prog; + ShaderProgram m_font_prog; GLint m_colour_uniform_location; GraphicsBuffer m_viewport_ubo; stbtt_bakedchar m_debug_font_rects[96]; @@ -83,6 +107,9 @@ namespace IPDF GraphicsBuffer m_debug_font_indices; int m_debug_font_vertex_head; int m_debug_font_index_head; + View * m_view; + bool m_no_quit_requested; + bool m_show_debug_font; }; }