首页 > 解决方案 > 为部署目标 OSX 10.10 编译 Metal 框架

问题描述

我有一个受 OSX 10.10 支持的项目。最近我不得不使用 Metal 框架进行图像处理。金属框架仅在 10.11 中引入。所以我的项目不会编译,因为部署目标是 10.10。我该如何克服这个?我不能在不更改部署目标的情况下添加#ifdef 或其他东西来编译项目并仅在最新的操作系统版本上使用 Metal 功能吗?

标签: xcodecocoametal

解决方案


您可以使用此方法加载与动态加载的捆绑包相关的代码,例如插件或框架。

static NSBundle*        _MetalBundle    = nil;
static id<MTLDevice>    _MetalDevice    = nil;

static bool IsMetalSupported(int /*api*/)
{
    _MetalBundle = [NSBundle bundleWithPath: @"/System/Library/Frameworks/Metal.framework"];
    if (_MetalBundle)
    {
        [_MetalBundle load];
        _MetalDevice = ((MTLCreateSystemDefaultDeviceFunc)::dlsym(dlopen(0, RTLD_LOCAL | RTLD_LAZY), "MTLCreateSystemDefaultDevice"))();
        if (_MetalDevice)
            return true;
    }

    [_MetalBundle unload];
    return false;
}

推荐阅读