Game window stays up until ESC is pressed
This commit is contained in:
parent
0efe16a204
commit
fd605024da
@ -2,18 +2,47 @@
|
||||
#define OUR_DICK_RENDER_HPP
|
||||
|
||||
#include <stdint.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#define OPENFL_VERSION 400
|
||||
#define GLSL_VERSION 400
|
||||
|
||||
class RenderManager
|
||||
{
|
||||
public:
|
||||
RenderManager (RenderManager&) = delete;
|
||||
RenderManager (RenderManager&&) = delete;
|
||||
class GLFWwindow;
|
||||
|
||||
RenderManager();
|
||||
bool Init(uint16_t width, uint16_t height, const char* title); // Sets up the OpenGL environment
|
||||
class render_manager
|
||||
{
|
||||
private:
|
||||
void (*m_windowCloseCallback)(void);
|
||||
void (*m_inputHandler)(GLFWwindow* window, int key, int scancode, int action, int mods);
|
||||
GLFWwindow* m_mainWindow;
|
||||
|
||||
public:
|
||||
enum GLFW_ERROR
|
||||
{
|
||||
GLFW_OK,
|
||||
GLFW_CONTEXT_ERROR,
|
||||
GLFW_WINDOW_ERROR,
|
||||
GLFW_INIT_ERROR,
|
||||
};
|
||||
|
||||
render_manager (render_manager&) = delete;
|
||||
render_manager (render_manager&&) = delete;
|
||||
|
||||
render_manager();
|
||||
GLFW_ERROR init(int width, int height, const char* title); // Sets up the OpenGL environment
|
||||
void update(); // Update the GL context and draw new frame
|
||||
void request_exit();
|
||||
|
||||
template <typename T>
|
||||
void handle_window_close_event(T handle){
|
||||
m_windowCloseCallback = handle;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void handle_keypress_event(T handle){
|
||||
m_inputHandler = handle;
|
||||
glfwSetKeyCallback(m_mainWindow, m_inputHandler);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
28
src/main.cpp
28
src/main.cpp
@ -12,6 +12,14 @@
|
||||
// ---------
|
||||
// 6 | 7 | 8
|
||||
|
||||
#define TILE_COUNT 9
|
||||
|
||||
namespace
|
||||
{
|
||||
bool running = true;
|
||||
render_manager manager;
|
||||
}
|
||||
|
||||
int get_player_input(){
|
||||
//TODO get player input
|
||||
return rand()%9;
|
||||
@ -77,12 +85,28 @@ int exists_empty_tile(const game_state& gs){
|
||||
return 0;
|
||||
}
|
||||
|
||||
void handle_window_close(){
|
||||
printf ("[II] Window close event triggered\n");
|
||||
running = false;
|
||||
}
|
||||
|
||||
void handle_input_events(GLFWwindow*, int key, int, int, int)
|
||||
{
|
||||
printf ("[II] Recieved keycode %d\n", key);
|
||||
if (key == 256)
|
||||
manager.request_exit ();
|
||||
}
|
||||
|
||||
int main(){
|
||||
srand(time(NULL));
|
||||
game_state gs = {};
|
||||
|
||||
RenderManager manager;
|
||||
manager.Init(640, 480, "Tic-Tac-Gugh");
|
||||
manager.init(640, 480, "Tic-Tac-Gugh");
|
||||
manager.handle_window_close_event(handle_window_close);
|
||||
manager.handle_keypress_event (handle_input_events);
|
||||
|
||||
while (running)
|
||||
manager.update();
|
||||
|
||||
while(exists_empty_tile(gs) && gs.turn != -1){
|
||||
game_turn(gs, get_player_input());
|
||||
|
||||
@ -1,33 +1,60 @@
|
||||
#include <gl3w/GL/gl3w.h> // Must be included first
|
||||
#include "render.hpp"
|
||||
|
||||
#include <gl3w/GL/gl3w.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <stdio.h>
|
||||
|
||||
RenderManager::RenderManager(){}
|
||||
namespace
|
||||
{
|
||||
void handle_resize_event(GLFWwindow*, int width, int height){
|
||||
printf("Window resized\n");
|
||||
glViewport(0, 0, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
bool RenderManager::Init (uint16_t width, uint16_t height, const char* title){
|
||||
|
||||
render_manager::render_manager() :
|
||||
m_windowCloseCallback (nullptr),
|
||||
m_inputHandler (nullptr),
|
||||
m_mainWindow (nullptr)
|
||||
{}
|
||||
|
||||
render_manager::GLFW_ERROR render_manager::init (int width, int height, const char* title){
|
||||
if (!glfwInit()) {
|
||||
printf("[EE] failed to initialize GLFW.\n");
|
||||
return false;
|
||||
fprintf(stdout, "[EE] failed to initialize GLFW.\n");
|
||||
return GLFW_INIT_ERROR;
|
||||
}
|
||||
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
|
||||
auto window = glfwCreateWindow(width, height, title, nullptr, nullptr);
|
||||
if (!window) {
|
||||
printf ("[EE] Could not create window\n");
|
||||
return false;
|
||||
m_mainWindow = glfwCreateWindow(width, height, title, nullptr, nullptr);
|
||||
if (!m_mainWindow) {
|
||||
fprintf (stdout, "[EE] Could not create window\n");
|
||||
return GLFW_WINDOW_ERROR;
|
||||
}
|
||||
|
||||
glfwMakeContextCurrent(window);
|
||||
glfwMakeContextCurrent(m_mainWindow);
|
||||
if (gl3wInit()) {
|
||||
printf("[EE] failed to initialize OpenGL\n");
|
||||
return false;
|
||||
fprintf(stdout, "[EE] failed to initialize OpenGL\n");
|
||||
return GLFW_CONTEXT_ERROR;
|
||||
}
|
||||
|
||||
glViewport(0, 0, width, height);
|
||||
|
||||
printf("[DD] OpenGL %s, GLSL %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
return true;
|
||||
|
||||
glfwSetFramebufferSizeCallback(m_mainWindow, handle_resize_event);
|
||||
|
||||
return GLFW_OK;
|
||||
}
|
||||
|
||||
void render_manager::update(){
|
||||
glfwSwapBuffers(m_mainWindow);
|
||||
glfwPollEvents();
|
||||
}
|
||||
|
||||
void render_manager::request_exit()
|
||||
{
|
||||
if (m_windowCloseCallback) m_windowCloseCallback();
|
||||
glfwSetWindowShouldClose(m_mainWindow, true);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user