Index: consts.hpp
===================================================================
--- consts.hpp	(revision 39278a88330034a3410542945349b8e2ee002e30)
+++ consts.hpp	(revision 27c40cefd96c63cd41234d37e4e62526a7c4ecdb)
@@ -12,3 +12,9 @@
 constexpr unsigned char GUI_FLAGS_WINDOW_FULLSCREEN { 1 << 0 };
 
+/*
+constexpr unsigned char RTWO_KEY_EVENT_NONE { 0 };
+constexpr unsigned char RTWO_KEY_EVENT_PRESSED { 1 };
+constexpr unsigned char RTWO_KEY_EVENT_RELEASED { 2 };
+*/
+
 #endif // _RTWO_CONSTS_H
Index: game-gui-sdl.cpp
===================================================================
--- game-gui-sdl.cpp	(revision 39278a88330034a3410542945349b8e2ee002e30)
+++ game-gui-sdl.cpp	(revision 27c40cefd96c63cd41234d37e4e62526a7c4ecdb)
@@ -1,5 +1,21 @@
 #include "game-gui-sdl.hpp"
 
+#include <map>
+#include <queue>
+
 #include "consts.hpp"
+
+map<unsigned int, unsigned char> s_keyState;
+map<unsigned int, bool> s_keyDown;
+
+using namespace std;
+
+/*
+// Temporary to allow the program using this class to receive events other than keyboard events
+// Remove once I add a better game-gui wrapper for doing that
+queue<SDL_Event> events;
+
+queue<MouseEvent> mouseEvents;
+*/
 
 string GameGui_SDL::s_errorMessage;
@@ -59,4 +75,69 @@
 }
 
+/*
+void GameGui_SDL::processEvents() {
+   SDL_Event e;
+
+   s_keyState.clear();
+   while (SDL_PollEvent(&e)) {
+      if (e.type == SDL_KEYDOWN || e.type == SDL_KEYUP) {
+         if (e.type == SDL_KEYDOWN && !e.key.repeat) {
+            s_keyState[e.key.keysym.sym] = RTWO_KEY_EVENT_PRESSED;
+         } else if (e.type == SDL_KEYUP) {
+            s_keyState[e.key.keysym.sym] = RTWO_KEY_EVENT_RELEASED;
+         } else {
+            s_keyState.erase(e.key.keysym.sym);
+         }
+
+         s_keyDown[e.key.keysym.sym] = e.type == SDL_KEYDOWN;
+      } else if (e.type == SDL_MOUSEBUTTONDOWN || e.type == SDL_MOUSEBUTTONUP) {
+         MouseEvent mouseEvent { 0, 0, e.button.x, e.button.y };
+
+         mouseEvents.push(mouseEvent);
+      } else {
+         events.push(e);
+      }
+   }
+}
+
+int GameGui_SDL::pollMouseEvent(MouseEvent* event) {
+   if (mouseEvents.empty()) {
+      return 0;
+   }
+
+   *event = mouseEvents.front();
+   mouseEvents.pop();
+
+   return 1;
+}
+
+unsigned char GameGui_SDL::getKeyEvent(unsigned int key) {
+   if (s_keyDown.count(key)) {
+      return s_keyState[key];
+   } else {
+      return RTWO_KEY_EVENT_NONE;
+   }
+}
+
+bool GameGui_SDL::isKeyPressed(unsigned int key) {
+   if (s_keyDown.count(key)) {
+      return s_keyDown[key];
+   } else {
+      return false;
+   }
+}
+
+int GameGui_SDL::pollEvent(SDL_Event* event) {
+   if (events.empty()) {
+      return 0;
+   }
+
+   *event = events.front();
+   events.pop();
+
+   return 1;
+}
+*/
+
 #ifdef GAMEGUI_INCLUDE_VULKAN
 
Index: game-gui-sdl.hpp
===================================================================
--- game-gui-sdl.hpp	(revision 39278a88330034a3410542945349b8e2ee002e30)
+++ game-gui-sdl.hpp	(revision 27c40cefd96c63cd41234d37e4e62526a7c4ecdb)
@@ -19,4 +19,16 @@
       void destroyWindow();
 
+      // temporary
+      //int pollEvent(SDL_Event* event);
+
+      /*
+      void processEvents();
+
+      unsigned char getKeyEvent(unsigned int key);
+      bool isKeyPressed(unsigned int key);
+
+      int pollMouseEvent(MouseEvent* event);
+      */
+
 #ifdef GAMEGUI_INCLUDE_VULKAN
       bool createVulkanSurface(VkInstance instance, VkSurfaceKHR* surface);
Index: game-gui.hpp
===================================================================
--- game-gui.hpp	(revision 39278a88330034a3410542945349b8e2ee002e30)
+++ game-gui.hpp	(revision 27c40cefd96c63cd41234d37e4e62526a7c4ecdb)
@@ -14,4 +14,13 @@
 using namespace std;
 
+/*
+struct MouseEvent {
+   int button;
+   int action;
+   int x;
+   int y;
+};
+*/
+
 class GameGui {
    public:
@@ -26,4 +35,13 @@
       virtual void destroyWindow() = 0;
 
+      /*
+      virtual void processEvents() = 0;
+
+      virtual int pollMouseEvent(MouseEvent* event) = 0;
+
+      virtual unsigned char getKeyEvent(unsigned int key) = 0;
+      virtual bool isKeyPressed(unsigned int key) = 0;
+      */
+
 #ifdef GAMEGUI_INCLUDE_VULKAN
       virtual bool createVulkanSurface(VkInstance instance, VkSurfaceKHR* surface) = 0;
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 39278a88330034a3410542945349b8e2ee002e30)
+++ vulkan-game.cpp	(revision 27c40cefd96c63cd41234d37e4e62526a7c4ecdb)
@@ -4,7 +4,4 @@
 
 #include "consts.hpp"
-
-#define GAMEGUI_INCLUDE_VULKAN
-#include "game-gui-sdl.hpp"
 
 using namespace std;
@@ -22,4 +19,11 @@
       return;
    }
+
+   SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
+   SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+
+   SDL_RenderClear(renderer);
+
+   SDL_RenderPresent(renderer);
 
    initVulkan();
@@ -58,7 +62,20 @@
 void VulkanGame::mainLoop() {
    SDL_Event e;
+   //MouseEvent mouseEvent;
    bool quit = false;
 
    while (!quit) {
+      /*
+      gui->processEvents();
+
+      if (gui->getKeyEvent(SDLK_ESCAPE) == RTWO_KEY_EVENT_PRESSED) {
+         quit = true;
+      }
+
+      while (gui->pollMouseEvent(&mouseEvent)) {
+         cout << "Mouse click detected at (" << mouseEvent.x << ", " << mouseEvent.y << ")" << endl;
+      }
+      */
+
       while (SDL_PollEvent(&e)) {
          if (e.type == SDL_QUIT) {
