2024-11-20 19:08:52 -06:00

78 lines
1.7 KiB
C

#include <std/graphics.h>
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <GLFW/glfw3native.h>
global_variable u8 use_x11 = 0;
fn GraphicsWindow* graphics_window_from_glfw(GLFWwindow* window)
{
return (GraphicsWindow*)window;
}
fn GLFWwindow* glfw_window_from_graphics(GraphicsWindow* window)
{
return (GLFWwindow*)window;
}
void graphics_init(u8 should_use_x11)
{
#ifdef __linux__
use_x11 = should_use_x11;
int platform_hint = use_x11 ? GLFW_PLATFORM_X11 : GLFW_PLATFORM_WAYLAND;
glfwInitHint(GLFW_PLATFORM, platform_hint);
#endif
if (glfwInit() != GLFW_TRUE)
{
failed_execution();
}
}
GraphicsWindow* graphics_window_create(GraphicsWindowCreate create)
{
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow* window = glfwCreateWindow(create.size.width, create.size.height, string_to_c(create.name), 0, 0);
return graphics_window_from_glfw(window);
}
u8 graphics_window_should_close(GraphicsWindow* window)
{
return glfwWindowShouldClose(glfw_window_from_graphics(window));
}
void graphics_poll_events()
{
glfwPollEvents();
}
GraphicsWindowSize graphics_window_size_get(GraphicsWindow* window)
{
GLFWwindow* w = glfw_window_from_graphics(window);
GraphicsWindowSize result;
glfwGetWindowSize(w, (int*)&result.width, (int*)&result.height);
return result;
}
#ifdef _WIN32
HANDLE graphics_win32_window_get(GraphicsWindow* window)
{
return glfwGetWin32Window(glfw_window_from_graphics(window));
}
#endif
#ifdef __linux__
Display* graphics_x11_display_get()
{
return glfwGetX11Display();
}
Window graphics_x11_window_get(GraphicsWindow* window)
{
return glfwGetX11Window(glfw_window_from_graphics(window));
}
#endif