任何人都知道如何将一点 OpenGL 代码转换为金属?
Anyone know how to convert a little OpenGL code to metal?
我一直在为我的 objective-c 相机捕捉会话使用一些 OpenGL 代码,但我几乎无法理解。现在 OpenGL 贬值了,我不知道如何将这一点 OpenGL 代码转换为金属。如果有人知道足以转换以下内容,请帮助。
if (self.eaglContext != [EAGLContext currentContext]) {
[EAGLContext setCurrentContext:self.eaglContext];
}
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
还有一些我没看到的 OpenGL:
_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
_videoPreviewView = [[GLKView alloc] initWithFrame:self.view.bounds context:_eaglContext];
_videoPreviewView.enableSetNeedsDisplay = NO;
_videoPreviewView.transform = CGAffineTransformMakeRotation(M_PI_2);
_videoPreviewView.frame = self.view.bounds;
[self.view addSubview:_videoPreviewView];
[self.view sendSubviewToBack:_videoPreviewView];
[_videoPreviewView bindDrawable];
_videoPreviewViewBounds = CGRectZero;
_videoPreviewViewBounds.size.width = _videoPreviewView.drawableWidth;
_videoPreviewViewBounds.size.height = _videoPreviewView.drawableHeight;
_ciContext = [CIContext contextWithEAGLContext:_eaglContext options:@{kCIContextWorkingColorSpace : [NSNull null]} ];
这不是从 OpenGL 到 Metal 的微不足道的转换。第一步是用 MTKView
替换 GLKView
。然后您需要创建一个 id<MTKViewDelegate>
来处理实际绘图、调整大小等。我建议观看 WWDC 2016 的 Adopting Metal 视频。它展示了如何起床和 运行 MTKView
.
要进行混合,您需要在用于创建渲染管道状态的 MTLRenderPipelineColorAttachmentDescriptor
上设置混合选项。您需要将 blendingEnabled
属性 设置为 YES
,并将 rgbBlendOperation
属性 设置为 MTLBlendOperationAdd
。然后将 sourceRGBBlendFactor
设置为 MTLBlendFactorOne
,将 destinationRGBBlendFactor
设置为 MTLBlendFactorOneMinusSourceAlpha
。
您可以通过 +[CIContext contextWithMetalDevice:options:]
从 id<MTLDevice>
创建 CIContext
我一直在为我的 objective-c 相机捕捉会话使用一些 OpenGL 代码,但我几乎无法理解。现在 OpenGL 贬值了,我不知道如何将这一点 OpenGL 代码转换为金属。如果有人知道足以转换以下内容,请帮助。
if (self.eaglContext != [EAGLContext currentContext]) {
[EAGLContext setCurrentContext:self.eaglContext];
}
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
还有一些我没看到的 OpenGL:
_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
_videoPreviewView = [[GLKView alloc] initWithFrame:self.view.bounds context:_eaglContext];
_videoPreviewView.enableSetNeedsDisplay = NO;
_videoPreviewView.transform = CGAffineTransformMakeRotation(M_PI_2);
_videoPreviewView.frame = self.view.bounds;
[self.view addSubview:_videoPreviewView];
[self.view sendSubviewToBack:_videoPreviewView];
[_videoPreviewView bindDrawable];
_videoPreviewViewBounds = CGRectZero;
_videoPreviewViewBounds.size.width = _videoPreviewView.drawableWidth;
_videoPreviewViewBounds.size.height = _videoPreviewView.drawableHeight;
_ciContext = [CIContext contextWithEAGLContext:_eaglContext options:@{kCIContextWorkingColorSpace : [NSNull null]} ];
这不是从 OpenGL 到 Metal 的微不足道的转换。第一步是用 MTKView
替换 GLKView
。然后您需要创建一个 id<MTKViewDelegate>
来处理实际绘图、调整大小等。我建议观看 WWDC 2016 的 Adopting Metal 视频。它展示了如何起床和 运行 MTKView
.
要进行混合,您需要在用于创建渲染管道状态的 MTLRenderPipelineColorAttachmentDescriptor
上设置混合选项。您需要将 blendingEnabled
属性 设置为 YES
,并将 rgbBlendOperation
属性 设置为 MTLBlendOperationAdd
。然后将 sourceRGBBlendFactor
设置为 MTLBlendFactorOne
,将 destinationRGBBlendFactor
设置为 MTLBlendFactorOneMinusSourceAlpha
。
您可以通过 +[CIContext contextWithMetalDevice:options:]
id<MTLDevice>
创建 CIContext