/* Mac Renderer Abstraction Implementation */

// TODO(yuval): This should NOT be included here once the renderer is exported to a DLL
#import "mac_4ed_opengl.mm"
#import "mac_4ed_metal.mm"

function Mac_Renderer*
mac_init_renderer(Mac_Renderer_Kind kind, NSWindow *window, Render_Target *target){
    // TODO(yuval): Import renderer load function from a DLL instead of using a switch statement and a renderer kind. This would allow us to switch the renderer backend and implemented new backends with ease.
    
    Mac_Renderer *result = 0;
    
    switch (kind){
        case MacRenderer_OpenGL:
        {
            result = mac_load_opengl_renderer(window, target);
        } break;
        
        case MacRenderer_Metal:
        {
            result = mac_load_metal_renderer(window, target);
        } break;
        
        default: InvalidPath;
    }
    
    if (!result){
        mac_error_box("Unable to initialize the renderer!");
    }
    
    return result;
}