DirectX 11 and OpenGL Core
Compute Shaders

Detalles de OpenGL Core

OpenGL Core es el nuevo back-end capaz de soportar las últimas características de OpenGL en Windows, MacOS X y Linux. Esto escala desde OpenGL 3.2 a OpenGL 4.5 dependiendo del soporte del driver de OpenGL.

El nuevo OpenGL Core se utiliza por defecto en MacOSX y Linux.

Limitaciones del driver de OpenGL de MacOSX

Como una nueva característica, el Editor de OS X y Standalone ahora soportan el nuevo backend de OpenGL, el cual habilita el uso de características de OpenGL 3.x y 4.x como lo son teselación y shaders de geometría.

Sin embargo, como Apple restringe la versión de OpenGL en un escritorio OS X a 4.1 como mucho, este no soporta todas las características de DirectX 11 (como lo son Unordered Access Views o Compute Shaders).

Por lo tanto un nuevo nivel objetivo shader es introducido: #pragma target gl4.1. Este nivel objetivo requiere al menos OpenGL 4.1 o un nivel shader Directx 11.0 de 5 en desktop, o OpenGL ES 3.1 + Android Extension Pack en móviles.

Características de OpenGL Core

El nuevo back-end de OpenGL introduce muchas nuevas características (previamente en su mayoría que eran de DX11/GLES3 solamente):

  • Compute shaders (al igual que ComputeBuffers y “random write” render textures)
  • Shaders de Tessellation (teselación) y Geometría
  • Dibujo indirecto (Graphics.DrawProcedural y Graphics.DrawProceduralIndirect)
  • Modos de blend (mezcla) avanzados

Cambios al shader

Cuando utilice los objetivos #pragma existentes, estos se asignan a los siguientes niveles de GL:

  • #pragma target 4.0 // OpenGL ES 3.1, desktop OpenGL 3.x, DX Shader Model 4.0
  • #pragma target gl4.1 // Desktop OpenGL 4.1, SM 4.0 + tessellation to match MacOSX 10.9 capabilities
  • #pragma target 5.0 // OpenGL ES 3.1 + Android Extension Pack, desktop OpenGL >= 4.2, DX Shader Model 5.0

Para incluir y excluir plataformas shader de utilizar shaders específicos, los siguientes targets (objetivos) #pragma only_renderers / exclude_renderers se pueden utilizar:

  • #pragma only_renderers glcore: Solamente compile para el GL de escritorio. Como el objetivo ES 3, este también se escala hasta contener todas las versiones GL, dónde los shaders básicos soportarán GL 2.x mientras que los shaders que requieran de características SM5.0 requieren OpenGL 4.2+.

Argumentos de linea de comando de perfil de OpenGL Core

Es posible empezar el editor o el player con OpenGL utilizando los argumentos de linea de comando:

  • -force-opengl: Para utilizar el back-end de OpenGL legacy
  • -force-glcore: Para utilizar el nuevo back-end de OpenGL. Con este argumento, Unity detectará todas las nuevas características que la plataforma soporta ejecutar con la mejor versión de OpenGL posible y todas las extensiones OpenGL disponibles.
  • -force-glcoreXY: XY puede ser 32, 33, 40, 41, 42, 43, 44 o 45; cada número representando una versión específica de OpenGL. Si la plataforma no soporta una versión específica de OpenGL, Unity entonces utilizará una versión soportada
  • -force-clamped: Solicita que Unity no utilice extensiones OpenGL que garanticen que varias plataformas ejecutarán la misma ruta de código. Esto es un acercamiento para probar si un problema es específico a la plataforma (un bug del driver por ejemplo).

Argumentos de linea de comando en escritorio Native OpenGL ES

La API de gráficos OpenGL ES está disponible en maquinas Windows con GPUs Intel o NVIDIA con drivers que soporten OpenGL ES.

  • -force-gles: Para utilizar el nuevo back-end de OpenGL en modo OpenGL ES. Con este argumento, Unity detectará todas las características que la plataforma soporta ejecutar con la mejor versión OpenGL ES posible y todas las extensiones OpenGL ES disponibles.
  • -force-glesXY: XY puede ser 20, 30, 31, 0 31aep; cada número representando una versión específica de OpenGL ES. Si la plataforma no soporta una versión específica de OpenGL ES, Unity entonces utilizará una versión soportada. Si la plataforma no soporta OpenGL ES, Unity entonces utilizará otra API de gráficos.
  • -force-clamped: Solicita que Unity no utilice extensiones OpenGL que garanticen que varias plataformas ejecutarán la misma ruta de código. Esto es un acercamiento para probar si un problema es específico a la plataforma (un bug del driver por ejemplo).
DirectX 11 and OpenGL Core
Compute Shaders