Desarrolle usando OpenGL 4.x en OSX Big Sur

7 minutos de lectura

Avatar de usuario de DeveloperRyan
DesarrolladorRyan

Según Apple, OpenGL ya no es compatible. Sin embargo, aparece v4.1 de OpenGL fue compatible con muchos dispositivos al 28 de julio de 2020. Tengo un modelo 2020 de Macbook Pro de 16″, que no aparece en la lista proporcionada anteriormente. Si bien estoy seguro de que existe algún tipo de compatibilidad en mi dispositivo, no estoy seguro de cómo puedo desarrollar con OpenGL cuando las versiones modernas están en desuso.

Deseo desarrollar entre mi Macbook Pro con Big Sur y mi escritorio de Windows. Por esta razón, obviamente no deseo centrarme en una biblioteca específica de dispositivo como Direct3D o Metal. ¿Es posible trabajar con versiones más nuevas de OpenGL (como OpenGL 4.6) a pesar de que Apple no proporciona soporte directamente? Escuché que las tarjetas de video AMD no funcionan bien con OpenGL, entonces, ¿qué opciones me quedan?

avatar de usuario de gkv311
gkv311

OpenGL incorporado en macOS funciona un poco diferente de otras plataformas como Windows o Linux. En Windows, proporcionado por el sistema opengl32.dll en realidad no implementa OpenGL, sino que es más bien una biblioteca de proxy que carga dinámicamente funciones desde un controlador proporcionado por un proveedor de tarjetas gráficas. Los proveedores de tarjetas gráficas proporcionan controladores independientes de Microsoft y las capacidades de OpenGL se pueden implementar sin la aprobación de Microsoft.

A diferencia de, Mac OS es un sistema mucho más cerrado, donde todos los controladores gráficos son parte del sistema y no pueden actualizarse (normalmente) sin actualizar el sistema mismo. Apple tiene el control total sobre la funcionalidad de OpenGL en el sistema y no les da a los proveedores de tarjetas gráficas ninguna forma de ofrecer a los usuarios funciones de OpenGL más actualizadas (incluso cuando su hardware las admite en otros sistemas).

Esta es una situación bastante desagradable para un desarrollador de software multiplataforma, ya que Apple empuja constantemente a sus API específicas de plataforma como Metal como la única opción, lo que implica un bloqueo de proveedor más fuerte y/o un desarrollo más costoso.

Una alternativa al uso directo de las API específicas de la plataforma podría ser usar una biblioteca de proxy que implemente una API multiplataforma además de la API específica de la plataforma. Hasta ahora, las opciones actualmente conocidas:

  • Implementación de OpenGL de Apple sobre Metal. Desafortunadamente, se ha quedado OpenGL 4.1, y no hay razón para esperar que la versión crezca; la biblioteca podría incluso eliminarse en algunos macOS más nuevos. Es posible que ya haya notado que la información proporcionada por una biblioteca del sistema en las versiones modernas de macOS menciona Metal, por lo que ya es un envoltorio sobre otra API de gráficos (aunque Apple puede hacer trampa al acceder a algunas partes internas).
  • FundidoVKun código abierto vulcano 1.1 implementación sobre Metal. Esta no es una biblioteca OpenGL, pero Vulkan es otra API de gráficos multiplataforma y algunas referencias indican que MoltenVK en el estado actual es lo suficientemente sólido para usar en proyectos reales, y se espera que Vulkan 1.1 brinde más funciones que OpenGL 4.1 obsoleto (aunque, No puedo confirmar esto personalmente, solo mis expectativas).
  • FundidoGLuna implementación OpenGL ES 2.0 de código cerrado sobre Metal. Como la implementación actual está limitada a OpenGL ES 2.0 (por ejemplo, mucho más bajo que las bibliotecas OpenGL / OpenGL ES integradas de Apple), parece bastante inútil…
  • Google ÁNGULOun código abierto OpenGL ES implementación sobre otras API. Hasta ahora, ANGLE implementa solo OpenGL ES 2.0 sobre Metal y OpenGL ES 3.1 (3.2 en progreso) sobre Vulkan. Entonces, con más capas como MoltenVK, teóricamente podría dar más, si las capas no explotan;). Sin embargo, incluso OpenGL ES 3.2 no se ve lo suficientemente bien en comparación con OpenGL 4.1. También hay Ángulo de metal – una bifurcación de la biblioteca ANGLE que agrega soporte para iOS y algunas características adicionales.
  • zinc, una implementación OpenGL de código abierto sobre Vulkan. Zink ya implementa OpenGL 4.6 en Linux (la versión de OpenGL compatible depende de las características y extensiones expuestas de Vulkan). Hay un trabajo en progreso haciendo esto Conductor Mesa Gallium laboral encima de MoltenVK en macOS.

Para mí, parece que apegarse a OpenGL 4.1 (proporcionado por Apple) por un tiempo es una muy buena opción en caso de que su aplicación pueda permitirse perder algunas funciones que requieren una versión superior de OpenGL. Aunque Apple ha desaprobado OpenGL en SDK, hasta ahora parece poco realista que se elimine en el futuro más cercano dentro de las actualizaciones más recientes de macOS; incluso La GPU Apple M1 recibió soporte para OpenGL 4.1 en macOS Big Sur. No sé si Apple tiene alguna estrategia para incluir en la lista negra las aplicaciones que usan API obsoletas del mercado AppStore (por ejemplo, el sistema admitirá OpenGL, pero no podrá publicar la aplicación en AppStore), pero esto podría convertirse en un problema en el futuro. Alternativa OpenGL 4.6 Las implementaciones (en la parte superior de Metal o en la parte superior de Vulkan-on-top-of-Metal) podrían llegar en un futuro lejano.

Depender de vulcanoLas implementaciones sobre metal pueden ser la opción más provisional, pero sin duda requerirá más esfuerzos para desarrollar un motor de gráficos sobre Vulkan en lugar de OpenGL. Sin embargo, no puedo comentar cómo la implementación actual de MoltenVK es comparable a las implementaciones nativas de Vulkan en Windows para el mismo hardware de gráficos (por características/rendimiento/limitaciones). Por supuesto, el uso de algún motor de gráficos existente ya implementado sobre varias API de gráficos (Vulkan/Metal/Direct3D/OpenGL/OpenGL ES) también le quitará esta carga de mantenimiento, pero esto está fuera del alcance de la pregunta inicial.

  • Esta es la respuesta que estaba buscando, muchas gracias! Parece que mi investigación que me llevó a ninguna solución fue correcta y tendré que continuar con OpenGL 4.1. ¡Gracias por la respuesta detallada y de origen!

    – DesarrolladorRyan

    20 de enero de 2021 a las 14:01

  • Intenté hacer algo de desarrollo de gráficos en macOS en el pasado. La implementación de OpenGL de Apple está desactualizada, tiene errores y es lenta. El solo La opción por ahora es usar Metal. Si te gusta el desarrollo de juegos, puedes usar motores de juegos que pueden apuntar a macOS. Sin embargo, tenga en cuenta que las Mac no vienen con las tarjetas gráficas adecuadas. De todos modos, todas las Mac en la naturaleza son demasiado lentas para las cosas ‘geniales’. Mi opinión: si te gusta el desarrollo de gráficos, cambia a Windows/Linux, Apple ni se preocupa por ti ni te quiere.

    – adroste

    13 de marzo de 2021 a las 13:53

  • @adroste no podría estar más de acuerdo: incluso si hay un par de configuraciones de GPU relativamente rápidas, la mayoría de los dispositivos de Apple tienen gráficos Intel o similares a Intel bastante lentos e incapaces. Aunque no podía decir que la implementación de OpenGL tuviera muchos más errores que en otros sistemas en mi experiencia – bastante (molesto) más estricto a las especificaciones. Pero probablemente tengo una experiencia demasiado limitada / una cobertura de prueba más pequeña.

    – gkv311

    13 de marzo de 2021 a las 17:32


  • Esta respuesta es bastante completa. He agregado algunos pensamientos adicionales en una respuesta secundaria a esta pregunta (stackoverflow.com/a/66761752/1678054).

    –Bill Hollings

    23 de marzo de 2021 a las 10:58

La respuesta de @ gkv311 es bastante completa. Añadiré los siguientes pensamientos. (divulgación completa, soy el desarrollador principal de los proyectos MoltenVK y MoltenGL):

  • En mi humilde opinión, el ecosistema Vulkan es su mejor apuesta para el desarrollo de juegos a prueba de futuro en la mayor cantidad de plataformas. Aquí es un buen resumen de las opciones de capas de la API, basado en ese enfoque, que permite opciones para ejecutar OpenGL o DX sobre Vulkan y/o Vulkan sobre Metal, DX, OpenGL, etc.
  • Algunas de estas opciones de capas se pueden apilar. Por ejemplo, Zink y DXVK pueden ejecutarse sobre MoltenVK, proporcionando la funcionalidad OpenGL-over-Vulkan-over-Metal y DX-over-Vulkan-over-Metal.
  • En lo que respecta a Vulkan, FundidoVK tiene un buen rendimiento y una buena tracción en la industria, siendo utilizado por una serie de juegos AAA portados desde los orígenes de Windows o ejecutándose sobre Wine. Si alguien tiene alguna pregunta o quiere consultar a algunos de esos desarrolladores de juegos, sugiero hacer una pregunta en MoltenVK. Discusiones área.
  • Ángulo de metal ha surgido como otra opción de código abierto para OpenGL ES.

¿Ha sido útil esta solución?