我有一个简单的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是默认上下文?
答案 0 :(得分:1)
有一种方法可以在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中找到答案:
使用自动上下文进行渲染
如果您对应用与其他应用互操作的方式没有限制 图形技术,创建核心图像上下文很简单:只是 使用基本的
init
或initWithOptions:
初始值设定项。当你这样做的时候 Core Image在内部自动管理资源,选择 基于适当或最佳可用的CPU或GPU渲染技术 在当前设备和您指定的任何选项上。