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