#include "platform.hpp" #import "QuartzCore/QuartzCore.hpp" #include #include #import #import extern std::vector windows; extern std::map renderers; SDL_Window* get_window(platform::window_ptr index); CAMetalLayer* get_layer(platform::window_ptr index) { return (__bridge CAMetalLayer*)SDL_RenderGetMetalLayer(renderers[get_window(index)]); } // instance == MTL::Device unsigned int platform::initialize_metal_layer(platform::window_ptr index, void* device) { auto layer = get_layer(index); layer.device = (__bridge id)device; layer.allowsNextDrawableTimeout = true; return (unsigned int)layer.pixelFormat; } void* platform::get_next_drawable(window_ptr window) { auto renderer = renderers[get_window(window)]; auto layer = get_layer(window); int width, height; SDL_GetRendererOutputSize(renderer, &width, &height); layer.drawableSize = CGSizeMake(width, height); auto drawable = (__bridge CA::MetalDrawable*)[layer nextDrawable]; drawable->retain(); return drawable; }