parent
2c00c4f90b
commit
4795e2090d
2 changed files with 105 additions and 0 deletions
@ -0,0 +1,68 @@ |
||||
#include "win_glfw.h" |
||||
namespace Bk { |
||||
std::unique_ptr<Window> Window::create_window(const WindowPros& props) |
||||
{ |
||||
return std::unique_ptr<Window>(new Plaform::WinGLFW(props)); |
||||
} |
||||
|
||||
namespace Plaform { |
||||
static uint p_glfw_initialized = 0; |
||||
|
||||
static void glfw_error_callback(int error, const char* description)
|
||||
{ |
||||
BK_CORE_CRITICAL("GLFW Error ({0}) {1}", error, description); |
||||
} |
||||
|
||||
WinGLFW::WinGLFW(const WindowPros& props)
|
||||
{ |
||||
p_data.title = props.title; |
||||
p_data.width = props.width; |
||||
p_data.height = props.height; |
||||
|
||||
BK_CORE_INFO("Creating window : {0} ({1}, {2})", props.title, props.width, props.height);
|
||||
if (!p_glfw_initialized++)
|
||||
{ |
||||
int success = glfwInit(); |
||||
BK_MSG_ASSERT(success, "Couldn't initialize glfw!") |
||||
glfwSetErrorCallback(glfw_error_callback); |
||||
} |
||||
p_window = glfwCreateWindow((int)props.width, (int)props.height, props.title.c_str(), nullptr, nullptr); |
||||
glfwMakeContextCurrent(p_window); |
||||
glfwSetWindowUserPointer(p_window, &p_data); |
||||
set_vsync(true); |
||||
} |
||||
|
||||
WinGLFW::~WinGLFW()
|
||||
{ |
||||
shutdown(); |
||||
} |
||||
|
||||
void WinGLFW::on_update()
|
||||
{ |
||||
glfwPollEvents(); |
||||
glfwSwapBuffers(p_window); |
||||
} |
||||
|
||||
void WinGLFW::set_event_callback(const EventCallback callback)
|
||||
{ |
||||
p_data.callback = callback; |
||||
} |
||||
|
||||
void WinGLFW::set_vsync(bool enable)
|
||||
{ |
||||
if (enable) { glfwSwapInterval(1); } |
||||
else { glfwSwapInterval(0); } |
||||
p_data.vsync = enable; |
||||
} |
||||
|
||||
bool WinGLFW::is_vsync() const
|
||||
{ |
||||
return p_data.vsync; |
||||
} |
||||
|
||||
void WinGLFW::shutdown() |
||||
{ |
||||
glfwDestroyWindow(p_window); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,37 @@ |
||||
#pragma once |
||||
#include <bkpch.h> |
||||
#include <bakara/core/window.h> |
||||
#include <GLFW/glfw3.h> |
||||
|
||||
namespace Bk::Plaform { |
||||
class WinGLFW : public Window |
||||
{ |
||||
public: |
||||
WinGLFW(const WindowPros& props); |
||||
virtual ~WinGLFW(); |
||||
|
||||
inline uint get_width() const override { return p_data.width; } |
||||
inline uint get_height() const override { return p_data.height; } |
||||
|
||||
void on_update() override; |
||||
void set_event_callback(const EventCallback callback) override; |
||||
|
||||
void set_vsync(bool enable) override; |
||||
bool is_vsync() const override; |
||||
|
||||
private: |
||||
GLFWwindow* p_window; |
||||
|
||||
struct WindowData
|
||||
{ |
||||
std::string title; |
||||
uint width; |
||||
uint height; |
||||
bool vsync; |
||||
EventCallback callback; |
||||
}; |
||||
WindowData p_data; |
||||
|
||||
void shutdown(); |
||||
}; |
||||
} |
Loading…
Reference in New Issue