Код смешивания OpenGLES для перевода Metal - PullRequest
0 голосов
/ 28 мая 2018

У меня есть этот простой код смешивания OpenGLES для Metal:

 glBlendEquation(GL_FUNC_ADD);
 glBlendFunc(GL_ONE, GL_ONE);
 glEnable(GL_BLEND);

Я написал код на Metal, но растерялся, если он точно выполняет ту же работу.В частности, нужно ли упоминать альфа-факторы смешивания или нет.Потому что я вижу производительность этого кода в Metal хуже, чем в OpenGLES, что странно.Пожалуйста, дайте мне знать, если что-то отсутствует в этом коде.

   let renderPipelineDescriptorGreen = MTLRenderPipelineDescriptor()
    renderPipelineDescriptorGreen.vertexFunction = vertexFunctionGreen
    renderPipelineDescriptorGreen.fragmentFunction = fragmentFunctionAccumulator
    renderPipelineDescriptorGreen.colorAttachments[0].pixelFormat = .bgra8Unorm
    renderPipelineDescriptorGreen.colorAttachments[0].isBlendingEnabled = true
    renderPipelineDescriptorGreen.colorAttachments[0].rgbBlendOperation = .add
    renderPipelineDescriptorGreen.colorAttachments[0].sourceRGBBlendFactor = .one
    renderPipelineDescriptorGreen.colorAttachments[0].destinationRGBBlendFactor = .one

1 Ответ

0 голосов
/ 28 мая 2018

Конфигурация смешивания выглядит корректно относительно кода OpenGL.Дескриптор конвейера имеет значения по умолчанию для альфа-смешивания, которые, вероятно, в порядке.alphaBlendOperation по умолчанию .add, sourceAlphaBlendFactor по умолчанию .one и destinationAlphaBlendFactor по умолчанию .zero.

Конечно, есть другие вещи, которые могут влиять на производительность, такие какособенности ваших функций шейдера.

Как вы измеряете производительность?

Металлические приложения могут иметь более высокую производительность, чем приложения OpenGL, но это не потому, что любая отдельная операция рендеринга выполняется быстрее.Производительность графического процессора будет ограничивающим фактором.Metal может достичь более высокой производительности, устраняя накладные расходы, которые несет OpenGL, предоставляя приложению больший контроль над управлением ресурсами и т. Д. В очень простых тестовых примерах, которые не отражают реальные приложения, эти факторы могут не отображаться.

...