#pragma attribute(push, nogc, nothrow)

#ifdef __linux__
# define VK_USE_PLATFORM_XLIB_KHR
# define XLIB_ILLEGAL_ACCESS
#	include <X11/Xlib.h>
#	include <X11/XKBlib.h>
#	include <X11/Xlib-xcb.h>
#	include <X11/keysym.h>
# include <X11/extensions/Xfixes.h>
# include <X11/Xatom.h>
# include <X11/Xutil.h>

#ifdef BUILD_GL
# include <GL/glx.h>
# include <GL/glxext.h>
#endif

// # include <ft2build.h>
// # include FT_FREETYPE_H
// # include FT_GLYPH_H
#endif

#ifdef _WIN32
# include <windows.h>
# define VK_USE_PLATFORM_WIN32_KHR
#endif

// TODO: Figure out SIMD issues here (__float128)
#ifdef BUILD_ASSETS
# include "../external/stb/stb_image.h"
# include "../external/stb/stb_image_write.h"
# include "../external/cgltf/cgltf.h"
#endif

#ifdef BUILD_VULKAN
# define VK_NO_PROTOTYPES
# include <vulkan/vulkan.h>
# define VMA_STATIC_VULKAN_FUNCTIONS 0
# define VMA_DYNAMIC_VULKAN_FUNCTIONS 1
# define VMA_VULKAN_VERSION 1002000
# include "../external/vma/vk_mem_alloc.h"
#endif

#ifndef BUILD_WASM
# include <SDL3/SDL.h>

#ifdef BUILD_VULKAN
# include <SDL3/SDL_vulkan.h>
#endif 

#endif

#ifdef BUILD_GL
# include <GL/gl.h>
# include <GL/glext.h>
#endif
