From d28201824b23ed7df25be79a0029eb925b2124cf Mon Sep 17 00:00:00 2001 From: rexy712 Date: Wed, 23 Sep 2020 10:19:37 -0700 Subject: [PATCH] Make graphics::window initialize gl3w upon context creation --- src/graphics/window.cpp | 18 +++++++++++++++++- src/main.cpp | 6 +++--- src/render.cpp | 1 - 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/graphics/window.cpp b/src/graphics/window.cpp index c204992..aee5efa 100644 --- a/src/graphics/window.cpp +++ b/src/graphics/window.cpp @@ -21,6 +21,7 @@ #include //exchange, swap, pair #include //strlen, strncpy +#include "config.hpp" namespace graphics{ static int initialize_global_glfw(){ @@ -44,6 +45,8 @@ namespace graphics{ if(initialize_global_glfw() != GLFW_TRUE) return; //TODO: user access to errors + GLFWwindow* current_context = glfwGetCurrentContext(); + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); glfwWindowHint(GLFW_FLOATING, GLFW_FALSE); @@ -55,6 +58,14 @@ namespace graphics{ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); m_window = glfwCreateWindow(width, height, title, nullptr, nullptr); + make_current(); + if(gl3wInit() != GL3W_OK){ + debug_print_error("Unable to initialize OpenGL context!\n"); + destroy(); + } + set_swap_interval(m_swap_interval); + + glfwMakeContextCurrent(current_context); } window::window(const window& w): m_title(copy_title(w.m_title, strlen(w.m_title))), @@ -62,10 +73,11 @@ namespace graphics{ m_refresh_rate(w.m_refresh_rate), m_swap_interval(w.m_swap_interval) { - GLFWwindow* current_context = glfwGetCurrentContext(); copy_title(w.m_title, strlen(w.m_title)); + GLFWwindow* current_context = glfwGetCurrentContext(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, w.get_context_vmaj()); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, w.get_context_vmin()); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); @@ -80,6 +92,10 @@ namespace graphics{ auto size = w.get_size(); m_window = glfwCreateWindow(size.x(), size.y(), m_title, nullptr, nullptr); make_current(); + if(gl3wInit() != GL3W_OK){ + debug_print_error("Unable to initialize OpenGL context!\n"); + destroy(); + } set_swap_interval(w.m_swap_interval); set_pos(w.get_pos()); set_visible(w.is_visible()); diff --git a/src/main.cpp b/src/main.cpp index 5d3e061..39777ea 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -162,11 +162,11 @@ graphics::shader_program create_example_shader(){ graphics::shader frag(fragment_source, graphics::shader::type::FRAGMENT); bool error = false; if(vert.has_compile_error()){ - debug_print("%s\n", vert.get_error().c_str()); + debug_print_error("%s\n", vert.get_error().c_str()); error = true; } if(frag.has_compile_error()){ - debug_print("%s\n", frag.get_error().c_str()); + debug_print_error("%s\n", frag.get_error().c_str()); error = true; } if(error) @@ -174,7 +174,7 @@ graphics::shader_program create_example_shader(){ prog.attach_shaders(vert, frag); prog.link(); if(prog.has_link_error()){ - debug_print("%s\n", prog.get_error().c_str()); + debug_print_error("%s\n", prog.get_error().c_str()); } return prog; } diff --git a/src/render.cpp b/src/render.cpp index f6d9d19..f14e19a 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -18,7 +18,6 @@ render_manager::render_manager(int width, int height, const char* title): m_main_window(width, height, title) { m_main_window.make_current(); - gl3wInit(); glViewport(0, 0, width, height); glClearColor(0, 0, 0, 1); glfwSetFramebufferSizeCallback(m_main_window, handle_resize_event);