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