【问题标题】:Compiling Metal framework for deployment target OSX 10.10为部署目标 OSX 10.10 编译 Metal 框架
【发布时间】:2021-11-02 19:35:15
【问题描述】:

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

【问题讨论】:

    标签: xcode cocoa metal


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

    • 所以我需要创建一个具有金属相关功能的插件并根据操作系统版本动态加载它。是吗?
    • 这是可能的解决方案之一。
    • 你能告诉其他可能的方法吗?只是想知道他们
    • 我能够创建一个包并将其加载到我的应用程序中。但是如何创建主体类的实例?默认为id 类型。我想调用一个方法并返回结果。我们通常导入 .h 文件来访问实例方法。但是对于捆绑包,文件不会暴露。
    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 2019-01-17
    • 1970-01-01
    • 2011-02-24
    • 2018-11-15
    相关资源
    最近更新 更多