Кто-нибудь знает, как преобразовать небольшой код OpenGL в металл? - PullRequest
0 голосов
/ 22 апреля 2019

Я использую некоторый код OpenGL для моего сеанса захвата камеры объективом c, который я едва понимаю.Сейчас 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]} ];

1 Ответ

3 голосов
/ 22 апреля 2019

Это не тривиальное преобразование из OpenGL в Metal. Первым шагом будет замена GLKView на MTKView. Затем вы захотите создать id<MTKViewDelegate> для обработки фактического чертежа, изменения его размера и т. Д. Я рекомендую посмотреть видеофильм Принятие металла с WWDC 2016. Он показывает, как начать работу с MTKView.

Чтобы выполнить смешивание, вам нужно установить параметры смешивания на MTLRenderPipelineColorAttachmentDescriptor, который вы используете для создания состояния конвейера рендеринга. Вам нужно установить для свойства blendingEnabled значение YES и для свойства rgbBlendOperation значение MTLBlendOperationAdd. Затем вы установите sourceRGBBlendFactor на MTLBlendFactorOne и destinationRGBBlendFactor на MTLBlendFactorOneMinusSourceAlpha.

Вы можете создать CIContext из id<MTLDevice> через +[CIContext contextWithMetalDevice:options:]

...