background image

enum class event_type{

None = 0,

Window_close,

Window_resize,

Window_focus,

Window_lost_focus,

Window_move,

App_tick,

App_update,

App_render,

Key_pressed,

Key_released,

Key_typed,

Mouse_button_pressed,

Mouse_button_released,

Mouse_moved,

Mouse_scrolled

class Event_dispatcher {

public :

Event_dispatcher( Event &e ) : m_event(e) {};

template typename T, typename F >

bool

dispatch( F const & func ){

if( m_event.get_type() == T::get_static_type() ) {

m_event.handled = func( static_cast<T&>(m_event) );

return true;

}

return false;

}

private :

Event &m_event;

Τα γεγονότα αυτα μετατρέπονται σε εσωτερικά γεγονότα της μηχανής και διαβιβάζονται

στην κλάση Application, η οποία τα προωθεί στα ενεργά Layers.

Έχοντας πλέον καθορίσει τόσο τον τρόπο δημιουργίας παραθύρου όσο και τον μηχανισμό

διαχείρισης των γεγονότων εισόδου (event system), έχει τεθεί η απαραίτητη βάση για τον σχε-

διασμό και την υλοποίηση του rendering pipeline, με σκοπό την απόδοση γραφικών σε πραγ-

27