在MacOS上使用EAGLContext和CIContext

时间:2016-11-02 09:05:00

标签: swift swift3 core-image

我有一个简单的Swift命令行MacOS应用程序,我很难设置EAGLContext

let openGLContext = EAGLContext(API: .OpenGLES3)
let context = CIContext(EAGLContext: openGLContext)

上面的代码告诉我:

Use of unresolved identifier 'EAGLContext'

无论我加载什么模块:

import CoreImage
import OpenGL
import QuartzCore
import GLKit

现在的问题是:CIContext默认使用OpenGL渲染吗?

当我初始化一个没有任何选项的新CIContext时:

let context = CIContext()

并将env变量CI_PRINT_TREE设置为1,控制台输出为我提供:

initial graph image_get_cgimage (opengl context 1 frame 1)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^

所以它确实在GPU上下文中处理我的过滤器,对吗?有没有办法明确设置GPU渲染或GPU是默认上下文?

2 个答案:

答案 0 :(得分:1)

According to Docs

有一种方法可以在CPU或GPU上显式初始化CIContext

您也可以指定Metal或OpenGL

为基于CPU的渲染创建上下文

init(cgContext: CGContext, options: [String : Any]? = nil)
  

使用以下方法从Quartz上下文创建Core Image上下文   指定的选项。

使用OpenGL为基于GPU的渲染创建上下文:

init(cglContext: CGLContextObj, pixelFormat: CGLPixelFormatObj?, colorSpace: CGColorSpace?, options: [String : Any]? = nil)
  

使用指定的CGL上下文创建Core Image上下文   选项,颜色空间和像素格式对象。

init(eaglContext: EAGLContext)
  

从EAGL上下文创建核心图像上下文。

init(eaglContext: EAGLContext, options: [String : Any]? = nil)
  

使用指定的EAGL上下文创建Core Image上下文   选项。

init?(forOfflineGPUAt: UInt32)
  

使用不是的GPU创建基于OpenGL的核心图像上下文   目前正在驾驶显示器。

init?(forOfflineGPUAt: UInt32, colorSpace: CGColorSpace?, options: [String : Any]? = nil, sharedContext: CGLContextObj?)
  

使用不是的GPU创建基于OpenGL的核心图像上下文   目前使用指定的选项驱动显示器。

使用金属为基于GPU的渲染创建上下文

init(mtlDevice: MTLDevice)
  

使用指定的Metal设备创建Core Image上下文。

init(mtlDevice: MTLDevice, options: [String : Any]? = nil)
  

使用指定的Metal设备创建Core Image上下文   选项。

答案 1 :(得分:1)

刚刚在Apple文档here中找到答案:

  

使用自动上下文进行渲染

     

如果您对应用与其他应用互操作的方式没有限制   图形技术,创建核心图像上下文很简单:只是   使用基本的initinitWithOptions:初始值设定项。当你这样做的时候   Core Image在内部自动管理资源,选择   基于适当或最佳可用的CPU或GPU渲染技术   在当前设备和您指定的任何选项上。